pax_global_header00006660000000000000000000000064152260414010014505gustar00rootroot0000000000000052 comment=d5243a25c488dfe751ef218828f13516e04ea2ba jimtcl-0.84/000077500000000000000000000000001522604140100127225ustar00rootroot00000000000000jimtcl-0.84/.github/000077500000000000000000000000001522604140100142625ustar00rootroot00000000000000jimtcl-0.84/.github/workflows/000077500000000000000000000000001522604140100163175ustar00rootroot00000000000000jimtcl-0.84/.github/workflows/codeql-buildscript.sh000066400000000000000000000000461522604140100224440ustar00rootroot00000000000000#!/usr/bin/env bash ./configure make jimtcl-0.84/.github/workflows/codeql.yml000066400000000000000000000115611522604140100203150ustar00rootroot00000000000000# For most projects, this workflow file will not need changing; you simply need # to commit it to your repository. # # You may wish to alter this file to override the set of languages analyzed, # or to provide custom queries or build logic. # # ******** NOTE ******** # We have attempted to detect the languages in your repository. Please check # the `language` matrix defined below to confirm you have the correct set of # supported CodeQL languages. # name: "CodeQL" on: push: branches: [ "master" ] schedule: - cron: '0 0 * * *' pull_request: branches: '*' jobs: analyze: name: Analyze # Runner size impacts CodeQL analysis time. To learn more, please see: # - https://gh.io/recommended-hardware-resources-for-running-codeql # - https://gh.io/supported-runners-and-hardware-resources # - https://gh.io/using-larger-runners # Consider using larger runners for possible analysis time improvements. runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }} timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }} permissions: actions: read contents: read security-events: write strategy: fail-fast: false matrix: language: [ 'cpp' ] # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby', 'swift' ] # Use only 'java' to analyze code written in Java, Kotlin or both # Use only 'javascript' to analyze code written in JavaScript, TypeScript or both # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support steps: - name: Checkout repository uses: actions/checkout@v3 with: submodules: recursive # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs # queries: security-extended,security-and-quality queries: security-and-quality # Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift). # If this step fails, then you should remove it and run the build manually (see below) #- name: Autobuild # uses: github/codeql-action/autobuild@v3 # ℹ� Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun # If the Autobuild fails above, remove it and uncomment the following three lines. # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. - run: | ./.github/workflows/codeql-buildscript.sh - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v3 with: category: "/language:${{matrix.language}}" upload: false id: step1 # Filter out rules with low severity or high false positve rate # Also filter out warnings in third-party code - name: Filter out unwanted errors and warnings uses: advanced-security/filter-sarif@v1 with: patterns: | -**:cpp/path-injection -**:cpp/world-writable-file-creation -**:cpp/poorly-documented-function -**:cpp/potentially-dangerous-function -**:cpp/use-of-goto -**:cpp/integer-multiplication-cast-to-long -**:cpp/comparison-with-wider-type -**:cpp/leap-year/* -**:cpp/ambiguously-signed-bit-field -**:cpp/suspicious-pointer-scaling -**:cpp/suspicious-pointer-scaling-void -**:cpp/unsigned-comparison-zero -**/cmake*/Modules/** input: ${{ steps.step1.outputs.sarif-output }}/cpp.sarif output: ${{ steps.step1.outputs.sarif-output }}/cpp.sarif - name: Upload CodeQL results to code scanning uses: github/codeql-action/upload-sarif@v3 with: sarif_file: ${{ steps.step1.outputs.sarif-output }} category: "/language:${{matrix.language}}" - name: Upload CodeQL results as an artifact if: success() || failure() uses: actions/upload-artifact@v4 with: name: codeql-results path: ${{ steps.step1.outputs.sarif-output }} retention-days: 5 - name: Fail if an error is found run: | ./.github/workflows/fail_on_error.py \ ${{ steps.step1.outputs.sarif-output }}/cpp.sarif jimtcl-0.84/.github/workflows/fail_on_error.py000077500000000000000000000022511522604140100215140ustar00rootroot00000000000000#!/usr/bin/env python3 import json import sys # Return whether SARIF file contains error-level results def codeql_sarif_contain_error(filename): with open(filename, 'r') as f: s = json.load(f) for run in s.get('runs', []): rules_metadata = run['tool']['driver']['rules'] if not rules_metadata: for ext in run['tool']['extensions']: if ext['name'] == 'codeql/cpp-queries': rules_metadata = ext['rules'] break for res in run.get('results', []): if 'ruleIndex' in res: rule_index = res['ruleIndex'] elif 'rule' in res and 'index' in res['rule']: rule_index = res['rule']['index'] else: continue try: rule_level = rules_metadata[rule_index]['defaultConfiguration']['level'] except IndexError as e: print(e, rule_index, len(rules_metadata)) else: if rule_level == 'error': return True return False if __name__ == "__main__": if codeql_sarif_contain_error(sys.argv[1]): sys.exit(1) jimtcl-0.84/.github/workflows/makefile.yml000066400000000000000000000007701522604140100206230ustar00rootroot00000000000000name: Makefile CI on: push: branches: [ "**" ] pull_request: branches: [ "**" ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - name: Install dependencies run: sudo apt install libsqlite3-dev libhiredis-dev - name: configure run: ./configure --maintainer --allextmod --disable-docs - name: Build run: make - name: Run check run: make test - name: Test bootstrap jimsh run: ./test-bootstrap-jim jimtcl-0.84/.gitignore000066400000000000000000000004601522604140100147120ustar00rootroot00000000000000config.log tags /Makefile /examples.api/Makefile /tests/Makefile Tcl.html jimautoconf.h jimautoconfext.h jim-config.h _*.c jim-stdlib.c jim-tclcompat.c jim-tree.c jim-oo.c jimsh *.exe libjim.a *.so *.so.* *.dll *.o *.dylib configure.gnu jimsh0 build-jim-ext *.gcda *.gcno *.gcov coverage*.html jimtcl.pc jimtcl-0.84/.indent.pro000066400000000000000000000005011522604140100147770ustar00rootroot00000000000000-ncs -npcs -nut -bad -bap -bbb -nbc -nlp -ci4 -br -ncdb -nce -cli4 -d0 -di1 -nfc1 -i4 -l100 -npsl -TJim_Stack -TJim_HashEntry -TJim_HashTableType -TJim_HashTable -TJim_HashTableIterator -TJim_Obj -TJim_ObjType -TJim_CallFrame -TJim_Var -TJim_Cmd -TJim_PrngState -TJim_Interp -TJim_Reference -TParseToken -TParseTokenList jimtcl-0.84/.project000066400000000000000000000003041522604140100143660ustar00rootroot00000000000000 jim jimtcl-0.84/.travis.yml000066400000000000000000000003351522604140100150340ustar00rootroot00000000000000language: c sudo: false addons: apt: packages: - libsqlite3-dev - libhiredis-dev before_script: - ./configure --maintainer --allextmod --disable-docs script: - make all test - ./test-bootstrap-jim jimtcl-0.84/AUTHORS000066400000000000000000000027731522604140100140030ustar00rootroot00000000000000Salvatore Sanfilippo with the help (patches, bug reports, ideas, extensions) of: Pat Thoyts Clemens Hintze See also the ChangeLog and README files for other credits. DESIGN CREDITS: some of the idea inside Jim are the fruit of long discussions inside the Tclers chat room. The feedback of the Tcl community in general, and of the members of the Tcl Core Team, was very important to avoid mistakes: I used the great experience of this people as a test for some of the ideas I put into Jim. Bad ideas tend to be demolished in no time by good engineers. Also the following ideas are due to the following authors: - Jim locals were originally proposed by Miguel Sofer, I (SS) added the feature that make they similar to lexical scoped closures using capturing of the local variables value if no explicit initialization is provided. - The [lmap] command is my (SS) design, but I incorporated inside the command an interesting idea of Donal K. Fellows that proposed that the [continue] command may be used to skip the accumulation of the current-iteration result, providing in one command the power of [map] and [filter] together. ChangeLog committers to be identified. Tentative list: antirez - Salvatore Sanfilippo patthoyts - Pat Thoyts oharboe - Øyvind Harboe - soyvind.harboe@zylin.com Andrew Lunn Duane Ellis Uwe Klein Clemens Hintze ml-jim@qiao.in-berlin.de aka chi jimtcl-0.84/BUGS000066400000000000000000000000351522604140100134030ustar00rootroot00000000000000Known bugs ========== None! jimtcl-0.84/CONTRIBUTING.md000066400000000000000000000042601522604140100151550ustar00rootroot00000000000000# Contributing to Jim Please take a moment to review this document in order to make the contribution process easy and effective for everyone involved. Following these guidelines helps to communicate that you respect the time of the developers managing and developing this open source project. In return, they should reciprocate that respect in addressing your issue, assessing changes, and helping you finalize your pull requests. ## Bug reports and Feature requests The [issue tracker](https://github.com/msteveb/jimtcl/issues) is the preferred channel for bug reports and features requests. ## Discussions If you wish to open a broader topic for discussion, consider using a [discussion topic](https://github.com/msteveb/jimtcl/discussions) ## Pull requests [Pull requests](https://github.com/msteveb/jimtcl/pulls) are always welcome If you have never created a pull request before, [Here is a great tutorial](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github) on how to create a pull request. 1. [Fork](http://help.github.com/fork-a-repo/) the project, clone your fork, and configure the remotes: ``` # Clone your fork of the repo into the current directory git clone https://github.com// # Navigate to the newly cloned directory cd # Assign the original repo to a remote called "upstream" git remote add upstream https://github.com/msteveb/jimtcl.git ``` 2. If you cloned a while ago, get the latest changes from upstream: ``` git checkout master git pull upstream master ``` 3. Create a new topic branch (off the main project development branch) to contain your feature, change, or fix: ```bash git checkout -b ``` 4. Make sure to update, or add to the tests when appropriate. Run `make test` to check that all tests pass after you've made changes. 5. If you added or changed a feature, please add documentation to jim_tcl.txt. 6. Push your topic branch up to your fork: ```bash git push origin ``` 7. [Open a Pull Request](https://help.github.com/articles/using-pull-requests/) with a clear title and description. jimtcl-0.84/LICENSE000066400000000000000000000043441522604140100137340ustar00rootroot00000000000000Unless explicitly stated, all files within Jim repository are released under following license: /* Jim - A small embeddable Tcl interpreter * * Copyright 2005 Salvatore Sanfilippo * Copyright 2005 Clemens Hintze * Copyright 2005 patthoyts - Pat Thoyts * Copyright 2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com * Copyright 2008 Andrew Lunn * Copyright 2008 Duane Ellis * Copyright 2008 Uwe Klein * Copyright 2008 Steve Bennett * Copyright 2009 Nico Coesel * Copyright 2009 Zachary T Welch zw@superlucidity.net * Copyright 2009 David Brownell * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE JIM TCL PROJECT ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * JIM TCL PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * The views and conclusions contained in the software and documentation * are those of the authors and should not be interpreted as representing * official policies, either expressed or implied, of the Jim Tcl Project. */ jimtcl-0.84/Makefile.in000066400000000000000000000147641522604140100150030ustar00rootroot00000000000000@if NO_SILENT_RULES Q := ECHO := @: @else # make V=1 for verbose make output Q := @ ECHO := @echo ifeq ($(V),1) ifeq ("$(origin V)", "command line") Q := ECHO := @: endif endif @endif # Tools CC = @CCACHE@ @CC@ CXX = @CCACHE@ @CXX@ RANLIB = @RANLIB@ AR = @AR@ STRIP = @STRIP@ @if COVERAGE export CCACHE_DISABLE := 1 @endif # Configuration SH_CFLAGS ?= @SH_CFLAGS@ SH_LDFLAGS ?= @SH_LDFLAGS@ @if SH_SOPREFIX @if SH_SOFULLPATH SH_LDFLAGS += @SH_SOPREFIX@$(DESTDIR)@libdir@/libjim@LIBSOEXT@ @else SH_LDFLAGS += @SH_SOPREFIX@libjim@LIBSOEXT@ @endif @endif SHOBJ_CFLAGS ?= @SHOBJ_CFLAGS@ @if JIM_STATICLIB SHOBJ_LDFLAGS ?= @SHOBJ_LDFLAGS@ @else SHOBJ_LDFLAGS ?= @SHOBJ_LDFLAGS_R@ @endif @if [get-define srcdir] ne "." VPATH := @srcdir@ AS_CFLAGS = -I@srcdir@ AS_CXXFLAGS = -I@srcdir@ @endif AS_CFLAGS += @AS_CFLAGS@ AS_CXXFLAGS += @AS_CFLAGS@ AS_CPPFLAGS += @AS_CPPFLAGS@ CFLAGS ?= @CFLAGS@ CXXFLAGS ?= @CXXFLAGS@ LDFLAGS = @LDFLAGS@ LDLIBS += @LDLIBS@ LIBS += @LIBS@ exec_prefix ?= @exec_prefix@ prefix ?= @prefix@ docdir = @docdir@ srcdir := @srcdir@ @if JIM_STATICLIB LIBJIM := libjim.a @else LIBJIM := libjim@LIBSOEXT@ SH_LIBJIM := $(LIBJIM) CC += $(SH_CFLAGS) CXX += $(SH_CFLAGS) DEF_LD_PATH := @LD_LIBRARY_PATH@="@builddir@:$(@LD_LIBRARY_PATH@)" @endif @if HAVE_CXX_EXTENSIONS JIMSH_CC := $(CXX) $(AS_CXXFLAGS) $(CXXFLAGS) @else JIMSH_CC := $(CC) $(AS_FLAGS) $(CFLAGS) @endif OBJS := _load-static-exts.o jim-subcmd.o jim-interactive.o jim-format.o jim.o utf8.o jimregexp.o jimiocompat.o \ @EXTRA_OBJS@ @C_EXT_OBJS@ @TCL_EXT_OBJS@ JIMSH := jimsh@EXEEXT@ @if JIM_INSTALL INSTALL_DATA_DIR ?= mkdir -p INSTALL_DATA ?= cp INSTALL_PROGRAM ?= cp @endif all: $(JIMSH) @C_EXT_SHOBJS@ # Create C extensions from pure Tcl extensions .SUFFIXES: .tcl .tcl.o: $(ECHO) " TCLEXT _$*.c" $(Q)@tclsh@ @srcdir@/make-c-ext.tcl $< >_$*.c $(ECHO) " CC $@" $(Q)$(CC) $(AS_CFLAGS) $(AS_CPPFLAGS) $(CFLAGS) $(CPPFLAGS) -c -o $@ _$*.c .c.o: $(ECHO) " CC $@" $(Q)$(CC) $(AS_CFLAGS) $(AS_CPPFLAGS) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $< -o $@ $(JIMSH): $(LIBJIM) jimsh.o initjimsh.o $(ECHO) " LINK $@" $(Q)$(JIMSH_CC) @SH_LINKRPATH_FLAGS@ @SH_LINKFLAGS@ $(LDFLAGS) -o $@ jimsh.o initjimsh.o $(LIBJIM) $(LDLIBS) $(LIBS) @if JIM_INSTALL install: all @TCL_EXTS@ install-exec install-docs $(INSTALL_DATA_DIR) $(DESTDIR)@libdir@/jim $(INSTALL_DATA) $(LIBJIM) $(DESTDIR)@libdir@ @if !JIM_STATICLIB ln -s -f $(LIBJIM) $(DESTDIR)@libdir@/libjim@SH_SOEXT@ @endif $(INSTALL_DATA) @srcdir@/README.extensions @C_EXT_SHOBJS@ $(DESTDIR)@libdir@/jim for i in tcltest.tcl @TCL_EXTS@; do $(INSTALL_DATA) @srcdir@/$$i $(DESTDIR)@libdir@/jim; done $(INSTALL_DATA_DIR) $(DESTDIR)@includedir@ $(INSTALL_DATA) @srcdir@/jim.h @srcdir@/jim-eventloop.h @srcdir@/jim-signal.h \ @srcdir@/jim-subcmd.h @srcdir@/jim-win32compat.h $(DESTDIR)@includedir@ $(INSTALL_DATA) jim-config.h $(DESTDIR)@includedir@ $(INSTALL_DATA_DIR) $(DESTDIR)@bindir@ @if BUILD_JIM_EXT $(INSTALL_DATA) build-jim-ext $(DESTDIR)@bindir@ @endif $(INSTALL_DATA_DIR) $(DESTDIR)@libdir@/pkgconfig $(INSTALL_DATA) jimtcl.pc $(DESTDIR)@libdir@/pkgconfig install-exec: all $(INSTALL_DATA_DIR) $(DESTDIR)@bindir@ $(INSTALL_PROGRAM) $(JIMSH) $(DESTDIR)@bindir@ $(INSTALL_PROGRAM) @srcdir@/jimdb $(DESTDIR)@bindir@ uninstall: rm -f $(DESTDIR)@bindir@/$(JIMSH) rm -f $(DESTDIR)@bindir@/build-jim-ext rm -f $(DESTDIR)@libdir@/$(LIBJIM) for i in README.extensions @C_EXT_SHOBJS@ @TCL_EXTS@; do rm -f $(DESTDIR)@libdir@/jim/$$i; done rm -f $(DESTDIR)@includedir@/jim*.h rm -f $(DESTDIR)@datadir@/doc/jim/Tcl.html @else install install-exec: all uninstall: @endif test check: $(JIMSH) $(DEF_LD_PATH) $(MAKE) -C tests jimsh="@builddir@/jimsh" $(OBJS) jimsh.o initjimsh.o: Makefile $(wildcard *.h) @if JIM_UTF8 # Generate the unicode case mapping utf8.o: _unicode_mapping.c _unicode_mapping.c: @srcdir@/UnicodeData.txt @srcdir@/parse-unidata.tcl $(ECHO) " UNIDATA $@" $(Q)@tclsh@ @srcdir@/parse-unidata.tcl @srcdir@/UnicodeData.txt >$@ || ( rm $@; exit 1) @endif _load-static-exts.c: @srcdir@/make-load-static-exts.tcl Makefile $(ECHO) " MKLDEXT $@" $(Q)@tclsh@ @srcdir@/make-load-static-exts.tcl @STATIC_EXTS@ >$@ || ( rm $@; exit 1) $(LIBJIM): $(OBJS) @if JIM_STATICLIB $(ECHO) " AR $@" $(Q)$(AR) cr $@ $(OBJS) $(Q)$(RANLIB) $@ @else $(ECHO) " LDSO $@ libjim@SH_SOEXT@" $(Q)$(CC) $(AS_CFLAGS) $(CFLAGS) $(LDFLAGS) $(SH_LDFLAGS) -o $@ $(OBJS) $(LDLIBS) $(LIBS) @if SH_SOEXT ne LIBSOEXT $(Q)ln -s -f $@ libjim@SH_SOEXT@ @endif @endif @BUILD_SHOBJS@ docs: Tcl.html @if INSTALL_DOCS eq "nodocs" install-docs: @endif @if INSTALL_DOCS eq "docs" install-docs: docs $(INSTALL_DATA_DIR) $(DESTDIR)$(docdir) $(INSTALL_DATA) Tcl.html $(DESTDIR)$(docdir) @endif @if INSTALL_DOCS eq "shipped" install-docs: $(INSTALL_DATA_DIR) $(DESTDIR)$(docdir) @echo "Warning: asciidoc not available - installing Tcl_shipped.html" $(INSTALL_DATA) @srcdir@/Tcl_shipped.html $(DESTDIR)$(docdir)/Tcl.html @endif Tcl.html: jim_tcl.txt @srcdir@/make-index @if HAVE_ASCIIDOC @tclsh@ @srcdir@/make-index $> $^ | @ASCIIDOC@ --attribute footer-style=none -d manpage - >$@ @else @echo "asciidoc is not available"; false @endif coverage: @if COVERAGE @if COVERAGE_TOOL eq "lcov" @LCOV@ -c --rc genhtml_branch_coverage=1 -d . -o lcov.txt @GENHTML@ --rc genhtml_branch_coverage=1 -o coverage_html lcov.txt > genhtml_output.txt @LCOV@ --summary lcov.txt @endif @if COVERAGE_TOOL eq "gcovr" @GCOVR@ -s -e 'conftest*' --html --html-details --output coverage.html @endif @if COVERAGE_TOOL eq "gcov" gcov @srcdir@/*.c @endif @else @echo "Use ./configure --coverage to enable code coverage" @endif clean: rm -f *.o *.so *.dll *.exe lib*.a $(JIMSH) $(LIBJIM) Tcl.html _*.c libjim@SH_SOEXT@ rm -f jsmn/*.o @if COVERAGE rm -f *.gcno *.gcov *.gcda */*.gcno */*.gcda */*.gcov coverage*.html rm -rf coverage_html lcov.txt genhtml_output.txt @endif distclean: clean rm -f jimautoconf.h jim-config.h Makefile config.log jimsh0@EXEEXT@ build-jim-ext rm -f jimtcl.pc tests/Makefile examples.api/Makefile ship: Tcl.html cp $< Tcl_shipped.html # automake compatibility. do nothing for all these targets EMPTY_AUTOMAKE_TARGETS := dvi pdf ps info html tags ctags mostlyclean maintainer-clean check installcheck installdirs \ install-pdf install-ps install-info install-html -install-dvi uninstall install-data .PHONY: $(EMPTY_AUTOMAKE_TARGETS) $(EMPTY_AUTOMAKE_TARGETS): # automake compatibility - install sources from the current dir to $(distdir) distdir_full := $(shell cd $(distdir); pwd) distdir: cd "@srcdir@"; git ls-files | cpio -pdmu $(distdir_full) reconfig: CC='@CC@' @AUTOREMAKE@ jimtcl-0.84/README000066400000000000000000000250201522604140100136010ustar00rootroot00000000000000The Jim Interpreter A small-footprint implementation of the Tcl programming language. -------------------------------------------------------------------------------- WHAT IS JIM? -------------------------------------------------------------------------------- Jim is a small footprint implementation of the Tcl programming language written from scratch. Currently Jim Tcl is very feature complete with an extensive test suite (see the tests directory). There are some Tcl commands and features which are not implemented (and likely never will be), including traces and Tk. However, Jim Tcl offers a number of both Tcl8.5 and Tcl8.6 features ({*}, dict, lassign, tailcall and optional UTF-8 support) and some unique features. These unique features include [lambda] with garbage collection, a general GC/references system, arrays as syntax sugar for [dict]tionaries, object-based I/O and more. Other common features of the Tcl programming language are present, like the "everything is a string" behaviour, implemented internally as dual ported objects to ensure that the execution time does not reflect the semantic of the language :) -------------------------------------------------------------------------------- WHEN JIM CAN BE USEFUL? -------------------------------------------------------------------------------- 1) Jim provides the ability to write scriptable applications without needing to link your application with a big system. You can include the Jim source directly in your project and use the Jim API to write the glue code that makes your application scriptable in Jim, with the following advantages: - Jim is not the next "little language", but it's a Tcl implementation. You can reuse your knowledge if you already have Tcl skills, or enjoy the availability of documentation, books, web resources, ... (for example check my online Tcl book at http://www.invece.org/tclwise) - Jim is simple with 14k lines of core code. If you want to adapt it you can hack the source code to meet the needs of your application. It makes you able to have scripting by default, and avoid external dependencies. Having scripting support *inside*, and in a way that a given version of your program always gets shipped with the given version of Jim, you can write part of your application in Jim itself. This is similar to Emacs/Elisp or Gimp/Scheme, where both of these applications have the interpreter inside. - Jim is Tcl, and Tcl looks like a configuration file if you want. So if you use Jim you also have a flexible syntax for your config file. This is a valid Tcl script: set MyFeature on ifssl { set SslPort 45000 use compression } It looks like a configuration file, but if you implement the [ifssl] and [use] commands, it's a valid Tcl script. - Tcl scales with the user. Not all know it, but Tcl is so powerful that you can reprogram the language in itself. Jim support this feature of the Tcl programming language. You can write new control structures, and use the flexible data types it offers (Lists are a central data structure, with Dictionaries that are also lists). Still, Tcl is simpler for the casual programmer, especially when compared to other languages offering small footprint implementations (like Scheme and FORTH). - Because of the Tcl semantic (pass by value, everything is a command since there are no reserved words), there is a nice API to glue your application with Jim. See under the Jim Tcl manual for more detail. - Jim is supported. If you need commercial software, contact the original author at 'antirez@gmail.com' or the current maintainer at 'steveb@workware.net.au'. 2) The other "field" where Jim can be useful is obviously embedded systems. 3) We are working to make Jim as feature-complete as possible. Thanks to dynamically loaded extensions it may stay as small as it is today but able to do interesting things for you. So it's possible that in the future Jim will be an option as a general purpose language. But don't worry, there is already the mainstream Tcl implementation for this :). -------------------------------------------------------------------------------- HOW BIG IS IT? -------------------------------------------------------------------------------- Jim with the default extensions configured and compiled with -Os is about 130k. Without any extensions, it is about 85k. -------------------------------------------------------------------------------- HOW FAST IS IT? -------------------------------------------------------------------------------- Jim is, in most code, faster than Tcl7.6p2 (latest 7.x version), and slower than Tcl 8.4.x. You can expect pretty decent performance for such a little interpreter. If you want a more precise measure, there is 'bench.tcl' inside this distribution that will run both under Jim and Tcl, so just execute it with both the interpreters and see what you get :) -------------------------------------------------------------------------------- HOW TO COMPILE -------------------------------------------------------------------------------- Jim was tested under Linux, FreeBSD, MacosX, eCos, QNX, Windows XP (mingw, MVC). To compile Jim itself try: ./configure make -------------------------------------------------------------------------------- EXTENSIONS -------------------------------------------------------------------------------- Many optional extensions are included. Some are C extensions and others are pure Tcl. Form more information, try: ./configure --help -------------------------------------------------------------------------------- HOW TO EMBED JIM INTO APPLICATIONS -------------------------------------------------------------------------------- See the "examples.api" directory -------------------------------------------------------------------------------- HOW TO WRITE EXTENSIONS FOR JIM -------------------------------------------------------------------------------- See the extensions shipped with Jim, jim-readline.c, jim-clock.c, glob.tcl and oo.tcl -------------------------------------------------------------------------------- COPYRIGHT and LICENSE -------------------------------------------------------------------------------- Unless explicitly stated, all files within Jim repository are released under following license: /* Jim - A small embeddable Tcl interpreter * * Copyright 2005 Salvatore Sanfilippo * Copyright 2005 Clemens Hintze * Copyright 2005 patthoyts - Pat Thoyts * Copyright 2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com * Copyright 2008 Andrew Lunn * Copyright 2008 Duane Ellis * Copyright 2008 Uwe Klein * Copyright 2008 Steve Bennett * Copyright 2009 Nico Coesel * Copyright 2009 Zachary T Welch zw@superlucidity.net * Copyright 2009 David Brownell * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE JIM TCL PROJECT ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * JIM TCL PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * The views and conclusions contained in the software and documentation * are those of the authors and should not be interpreted as representing * official policies, either expressed or implied, of the Jim Tcl Project. */ -------------------------------------------------------------------------------- HISTORY -------------------------------------------------------------------------------- "first Jim goal: to vent my need to hack on Tcl." And actually this is exactly why I started Jim, in the first days of January 2005. After a month of hacking Jim was able to run simple scripts, now, after two months it started to be clear to me that it was not just the next toy to throw away but something that may evolve into a real interpreter. In the same time Pat Thoyts and Clemens Hintze started to contribute code, so that the development of new core commands was faster, and also more people hacking on the same code had as result fixes in the API, C macros, and so on. Currently we are at the point that the core interpreter is almost finished and it is entering the Beta stage. There is to add some other core command, to do a code review to ensure quality of all the parts and to write documentation. We already started to work on extensions like OOP, event loop, I/O, networking, regexp. Some extensions are already ready for prime time, like the Sqlite extension and the ANSI I/O. ------------------------------------------------------------------------------ Thanks to... ------------------------------------------------------------------------------ - First of all, thanks to every guy that are listed in the AUTHORS file, that directly helped with code and ideas. Also check the ChangeLog file for additional credits about patches or bug reports. - Elisa Manara that helped me to select this ill conceived name for an interpreter. - Many people on the Tclers Chat that helped me to explore issues about the use and the implementation of the Tcl programming language. - David Welton for the tech info sharing and our chats about programming languages design and the ability of software to "scale down". - Martin S. Weber for the great help with Solaris issues, debugging of problems with [load] on this arch, 64bit tests. - The authors of "valgrind", for this wonderful tool, that helped me a lot to fix bugs in minutes instead of hours. ---- Enjoy! Salvatore Sanfilippo 10 Mar 2005 jimtcl-0.84/README.ensemble000066400000000000000000000027151522604140100154000ustar00rootroot00000000000000An ensemble is a single command that can dispatch subcommands to other commands. For example [string] is a built-in ensemble. The ensemble command allows an ensemble command to be created that redirects to other commands. Create an ensemble by having multiple commands that all share the same prefix. For example: proc {test open} {name} { ... } proc {test close} {handle} { ... } proc {test show} {handle} { ... } Then simply: ensemble test Now a new command, test, is created that will invoke the other commands based on the first argument. For example: set h [test open file.txt] test show $h test close $h By default ensemble expects the commands to be named " ". If another prefix is used, this can be specified with the -automap option. e.g. ensemble test -automap test. This could be used if the commands were named test.open, test.close, test.show Note that ensembles are dynamic, not fixed at the point of creation. This means, for example, that we can can create a new commands, "test reverse" after the ensemble has been created and it can still be invoked as test reverse ... It is easy to create an ensemble for commands in a namespace by simply using -automap :: however for compatibility with Tcl, 'namespace ensemble create' is provided that does with when invoked within a namespace. e.g. namespace eval test { namespace ensemble create proc open {name} { ... } proc close {handle} { ... } proc show {handle} { ... } } test open file.txt jimtcl-0.84/README.extensions000066400000000000000000000007661522604140100160110ustar00rootroot00000000000000The /lib/jim directory contains both dynamically loadable extensions and pure-Tcl extensions. Dynamically loadable extensions must have a .so file extension Tcl extensions must have a .tcl file extension As long as /lib/jim is in $::auto_path (it is by default), extension abc can be loaded with: package require abc First abc.so will be tried, and then abc.tcl Note that this directory may be something like /lib/jim, /usr/lib/jim or /usr/local/lib/jim, depending upon where jim was installed. jimtcl-0.84/README.linenoise000066400000000000000000000010651522604140100155700ustar00rootroot00000000000000Jim Tcl uses linenoise (https://github.com/msteveb/linenoise) to provide command line editing, both in jimsh and via the history extension (so you can create REPL interfaces in pure Tcl) Please see the link above for development documentation and key bindings. Because Jim Tcl already has utf-8 support, the linenoise-ship.c amalagamation is not used directly. Instead we use everything except utf-8. Update as follows: git clone https://github.com/msteveb/linenoise.git cat linenoise/stringbuf.h linenoise/stringbuf.c linenoise/linenoise.c >linenoise.c jimtcl-0.84/README.metakit000066400000000000000000000274001522604140100152420ustar00rootroot00000000000000--- title: Metakit --- Metakit Extension for Jim Tcl ============================= OVERVIEW -------- The mk extension provides an interface to the Metakit small-footprint embeddable database library (). The underlying library is efficient at manipulating not-so-large amounts of data and takes a different approach to composing database operations than common SQL-based relational databases. Both the Metakit core library and the mk package can be linked either statically or dynamically and loaded using package require mk CREATING A DATABASE ------------------- A database (called a "storage" in Metakit terms) may either reside totally in memory or be backed by a file. To open or create a database, call the `storage` command with an optional filename parameter: set db [storage test.mk] The returned handle can be used as a command name to access the database. When you are done, execute the `close` method, that is, run $db close A lost handle won't be found by GC but will be closed when the interpreter exits. Note that by default Metakit will only record changes to the database when you close the handle. Use the `commit` method to record the current state of the database to disk. CREATING VIEWS -------------- *Views* in Metakit are what is called "tables" in conventional databases. A view may several typed *properties*, or columns, and contains homogeneous *rows*, or records. New properties may be added to a view as needed; however, new properties are not stored in the database file by default. The structure method specifies the stored properties of a view, creating a new view or restructuring an old one as needed: $db structure viewName description The view description must be a list of form `{propName type propName type ...}`. The supported property types include: `string` : A NULL-terminated string, stored as an array of bytes (without any encoding assumptions). `binary` : **Not yet supported by the `mk` extension.** Blob of binary data that may contain embedded NULLs (zero bytes). Stored as-is. This is more efficient than `string` when storing large blocks of data (e.g. images) and will adjust the storage strategy as needed. `integer` : An signed integer value occupying a maximum of 32 bits. If all values stored in a column can fit in a smaller range (16, 8, or even 4 or 2 bits), they are packed automatically. `long` : Like `integer`, but is required to fit into 64 bits. `float` and `double` : 32-bit and 64-bit IEEE floating-point values respectively. `subview` : This type is not usually specified directly; instead, a structure description of a nested view is given. `subview` properties store complete views as their value, creating hierarchical data structures. When retrieved from a view, a value of a subview property is a normal view handle. Without a `description` parameter, the `structure` method returns the current structure of the named view; without any parameters, it returns a dictionary containing structure descriptions of all views stored in the database. After specifying the properties you expect to see in the view, call [$db view $viewName] as viewHandle to obtain a view handle. These handles are also commands, but are garbage-collected and also destroy themselves after a single method call; the `as viewHandle` call assigns the view handle to the specified variable and also tells the view not to destroy itself until all the references to it are gone. View handles may also be made permanent by giving them a global command name, e.g. rename [$db view data] .db.data However, such view handles are not managed automatically at all and must be destroyed using the `destroy` method, or by renaming them to `""`. MANIPULATING DATA ----------------- The value of a particular property is obtained using cursor get $cur propName where `$cur` is a string of form `viewHandle!index`. Row indices are zero-based and may also be specified relative to the last row of the view using the `end[+-]integer` notation. A dictionary containing all property name and value pairs can be retrieved by omitting the `propName` argument: cursor get $cur Setting property values is also performed either individually, using cursor set $cur propName value ?propName value ...? or via a dictionary with cursor set $cur dictValue In the first form of the command, property names may also be preceded by a -_typeName_ option. In this case, a new property of the specified type will be created if it doesn't already exist; note that this will cause *all* the rows in the view to have the property (but see **A NOTE ON NULL** below). If the row index points after the end of the view, an appropriate number of fresh rows will be inserted first. So, for example, you can use `end+1` to append a new row. (Note that you then have to set it all at once, though.) The total number of rows can be obtained using $viewHandle size and set manually with $viewHandle resize newSize For example, you can use `$viewHandle resize 0` to clear a view. INSERT AND REMOVE ----------------- New rows may also be inserted at an arbitrary position in a view with cursor insert $cur ?count? This will insert _count_ fresh rows into the view so that _$cur_ points to the first one. The inverse of this operation is cursor remove $cur ?count? COMPOSING VIEWS --------------- The real power of Metakit lies in the way existing views are combined to create new ones to obtain a particular perspective on the stored data. A single operation takes one or more views and possibly additional options and produces a new view, usually tracking notifications to the underlying views and sometimes even supporting modification. Binary operations are left-biased when there are conflicting property values; that is, they always prefer the values from the left view. ### Unary operations ### *view* `unique` : Derived view with duplicate rows removed. *view* `sort` *crit ?crit ...?* : Derived view sorted on the specified criteria, in order. A single _crit_ is either a property name or a property name preceded by a dash; the latter specifies that the sorting is to be performed in reverse order. ### Binary operations ### The operations taking _set_ arguments require that the given views have no duplicate rows. The `unique` method can be used to ensure this. *view1* `concat` *view2* : Vertical concatenation; that is, all the rows of _view1_ and then all rows of _view2_. *view1* `pair` *view2* : Pairing, or horizontal concatenation: every row in _view1_ is matched with a row with the same index in _view2_; the result has all the properties of _view1_ and all the properties of _view2_. *view1* `product` *view2* : Cartesian product: each row in _view1_ horizontally concatenated with every row in _view2_. *set1* `union` *set2* : Set union. Unlike `concat`, this operation removes duplicates from the result. A row is in the result if it is in _set1_ **or** in _set2_. *set1* `intersect` *set2* : Set intersection. A row is in the result if it is in _set1_ **and** in _set2_. *set1* `different` *set2* : Symmetric difference. A row is in the result if it is in _set1_ **xor** in _set2_, that is, in _set1_ or in _set2_, but not in both. *set1* `minus` *set2* : Set minus. A row is in the result if it is in _set1_ **and not** in _set2_. ### Relational operations ### *view1* `join` *view2* ?`-outer`? *prop ?prop ...?* : Relational join on the specified properties: the rows from _view1_ and _view2_ with all the specified properties equal are concatenated to form a new row. If the `-outer` option is specified, the rows from _view1_ that do not have a corresponding one in _view2_ are also left in the view, with the properties existing only in _view2_ filled with default values. *view* `group` *subviewName prop ?prop ...?* : Groups the rows with all the specified properties equal; moves all the remaining properties into a newly created subview property called _subviewName_. *view* `flatten` *subviewProp* : The inverse of `group`. ### Projections and selections ### *view* `project` *prop ?prop ...?* : Projection: a derived view with only the specified properties left. *view* `without` *prop ?prop ...?* : The opposite of `project`: a derived view with the specified properties removed. *view* `range` *start end ?step?* A slice or a segment of _view_: rows at _start_, _start+step_, and so on, until the row number becomes larger than _end_. The usual `end[+-]integer` notation is supported, but the indices don't change if the underlying view is resized. **(!) select etc. should go here** ### Search and storage optimization ### *view* `blocked` : Invokes an optimization designed for storing large amounts of data. _view_ must have a single subview property called `_B` with the desired structure inside. This additional level of indirection is used by `blocked` to create a view that looks like a usual one, but can store much more data efficiently. As a result, indexing into the view becomes a bit slower. Once this method is invoked, all access to _view_ must go through the returned view. *view* `ordered` *prop ?prop ...?* : Does not transform the structure of the view in any way, but signals that the view should be considered ordered on a unique key consisting of the specified properties, enabling some optimizations. Note that duplicate keys are not allowed in an ordered view. **(!) TODO: hash, indexed(?) -- these make no sense until searches are implemented** ### Pipelines ### Because constructs like `[[view op1 ...] op2 ...] op3 ...` tend to be common in programs using Metakit, a shorthand syntax is introduced: such expressions may also be written as `view op1 ... | op2 ... | op3 ...`. Note though that this syntax is not in any way magically wired into the interpreter: it is understood only by the view handles and the two commands that can possibly return a view: `$db view` and `cursor get`. If you want to support this syntax in Tcl procedures, you'll need to do this yourself, or you may want to create a custom view method and have the view handle work out the syntax for you (see **USER-DEFINED METHODS** below). OTHER VIEW METHODS ------------------ *view* `copy` : Creates a copy of view with the same data. *view* `clone` : Creates a view with the same structure, but no data. *view* `pin` : Specifies that the view should not be destroyed after a single method call. Returns _view_. *view* `as` *varName* : In addition to the actions performed by `pin`, assigns the view handle to the variable named varName in the caller's scope. *view* `properties` : Returns the names of all properties in the view. *view* `type` *prop* : Returns the type of the specified property. A NOTE ON NULL -------------- Note that Metakit does not have a special `NULL` value like conventional relational databases do. Instead, it defines _default_ property values: `""` for `string` and `binary` types, `0` for all numeric types and a view with no rows for subviews. These defaults are used when a fresh row is inserted and when a new property is added to the view to fill in the missing values. USER-DEFINED METHODS -------------------- The storage and view handles support custom methods defined in Tcl: to define _methodName_ on every storage or view handle, create a procedure called {`mk.storage` *methodName*} or {`mk.view` *methodName*} respectively. These procedures will receive the handle as the first argument and all the remaining arguments. Remember to `pin` the view handle in view methods if you call more than one method of it! Custom `cursor` subcommands may also be defined by creating a procedure called {`cursor` *methodName*}. These receive all the arguments without any modifications. jimtcl-0.84/README.namespaces000066400000000000000000000153561522604140100157320ustar00rootroot00000000000000Lightweight Namespaces for Jim Tcl ================================== There are two broad requirements for namespace support in Jim Tcl. 1. To allow code from multiple sources while reducing the chance of name clashes 2. To simplify porting existing Tcl code which uses namespaces This proposal addresses both of these requirements, with the following additional requirements imposed by Jim Tcl. 3. Support for namespaces should be optional, with the space and time overhead when namespaces are disabled as close to zero as possible. 4. The implementation should be small and reasonably efficient. To further expand on requirement (2), the goal is not to be able to run any Tcl scripts using namespaces with no changes. Rather, scripts which use namespaces in a straightforward manner, should be easily ported with changes which are compatible with Tcl. Implicit namespaces ------------------- Rather than supporting explicit namespaces as Tcl does, Jim Tcl supports implicit namespaces. Any procedure or variable which is defined with a name containing ::, is implicitly scoped within a namespace. For example, the following procedure and variable are created in the namespace 'test' proc ::test::myproc {} { puts "I am in namespace [namespace current]" } set ::test::myvar 3 This approach allows much of the existing variable and command resolution machinery to be used with little change. It also means that it is possible to simply define a namespace-scoped variable or procedure without first creating the namespace, and similarly, namespaces "disappear" when all variables and procedures defined with the namespace scope are deleted. Namespaces, procedures and call frames -------------------------------------- When namespace support is enabled (at build time), each procedure has an associated namespace (based on the procedure name). When the procedure is evaluated, the namespace for the created call frame is set to the namespace associated with the procedure. Command resolution is based on the namespace of the current call frame. An unscoped command name will first be looked up in the current namespace, and then in the global namespace. This also means that commands which do not create a call frame (such as commands implemented in C) do not have an associated namespace. Similarly to Tcl, namespace eval introduces a temporary, anonymous call frame with the associated namespace. For example, the following will return "::test,1". namespace eval test { puts [namespace current],[info level] } Variable resolution ------------------- The variable command in Jim Tcl has the same syntax as Tcl, but is closer in behaviour to the global command. The variable command creates a link from a local variable to a namespace variable, possibly initialising it. For example, the following procedure uses 'variable' to initialise and access myvar. proc ::test::myproc {} { variable myvar 4 incr myvar } Note that there is no automatic resolution of namespace variables. For example, the following will *not* work. namespace eval ::test { variable myvar 4 } namespace eval ::test { # This will increment a local variable, not ::test::myvar incr myvar } And similarly, the following will only access local variables set x 3 namespace eval ::test { # This will increment a local variable, not ::x incr x # This will also increment a local variable incr abc::def } In the same way that variable resolution does not "fall back" to global variables, it also does not "fall back" to namespace variables. This approach allows name resolution to be simpler and more efficient since it uses the same variable linking mechanism as upvar/global and it allows namespaces to be implicit. It also solves the "creative writing" problem where a variable may be created in an unintentional scope. The namespace command --------------------- Currently, the following namespace commands are supported. * current - returns the current, fully-qualified namespace * eval - evaluates a script in a namespace (introduces a call frame) * qualifiers, tail, parent - note that these do not check for existence * code, inscope - implemented * delete - deletes all variables and commands with the namespace prefix * which - implemented * upvar - implemented * ensemble - 'create' command is implemented namespace children, exists, path -------------------------------- With implicit namespaces, the namespace exists and namespace children commands are expensive to implement and are of limited use. Checking the existence of a namespace can be better done by checking for the existence of a known procedure or variable in the namespace. Command resolution is always done by first looking in the namespace and then at the global scope, so namespace path is not required. namespace import, export, forget, origin ---------------------------------------- Since Jim Tcl namespaces are implicit, there is no location to store export patterns. Therefore the namespace export command is a dummy command which does nothing. All procedures in a namespace are considered to be exported. The namespace import command works by creating aliases to the target namespace procedures. namespace forget is not implemented. namespace origin understands aliases created by namespace import and can return the original command. namespace unknown ----------------- If an undefined command is invoked, the "unknown" command is invoked. The same namespace resolution rules apply for the unknown command. This means that in the following example, test::unknown will be invoked for the missing command rather than the global ::unknown. proc unknown {args} { puts "global unknown" } proc test::unknown {args} { puts "test unknown" } namespace eval test { bogus } This approach requires no special support and provides enough flexibility that the namespace unknown command is not implemented. Porting namespace code from Tcl to Jim Tcl ------------------------------------------ For most code, the following changes will be sufficient to port code. 1. Canonicalise namespace names. For example, ::ns:: should be written as ::ns or ns as appropriate, and excess colons should be removed. For example ::ns:::blah should be written as ::ns::blah (Note that the only "excess colon" case supported is ::::abc in order to support [namespace current]::abc in the global namespace) 2. The variable command should be used within namespace eval to link to namespace variables, and access to variables in other namespaces should be fully qualified Changes in the core Jim Tcl --------------------------- Previously Jim Tcl performed no scoping of command names. i.e. The ::format command was considered different from the format command. Even if namespace support is disabled, the command resolution will recognised global scoping of commands and treat these as identical. jimtcl-0.84/README.oo000066400000000000000000000226651522604140100142310ustar00rootroot00000000000000OO Package for Jim Tcl ====================== Author: Steve Bennett Date: 1 Nov 2010 09:18:40 OVERVIEW -------- The pure-Tcl oo package leverages Jim's unique strengths to provide support for Object Oriented programming. The oo package can be statically linked with Jim or installed as a separate Tcl package and loaded with: package require oo DECLARING CLASSES ----------------- A class is declared with the 'class' proc as follows. class myclass ?baseclasses? classvars This declares a class named 'myclass' with the given dictionary, 'classvars', providing the initial state of all new objects. It is important to list all class variables in 'classvars', even if initialised only to the empty string, since the class makes these variables available in methods and via [myclass vars]. A list of zero or more base classes may also be specified from which methods and class variables are imported. See INHERITANCE below for more details. Declaring a class creates a procedure with the class name along with some related procedures. For example: . class Account {balance 0} Account . info procs Account* {Account get} {Account methods} {Account eval} Account {Account new} {Account destroy} {Account vars} {Account classname} {Account classvars} {Account method} Notice that apart from the main 'Account' procedure, all the remaining procedures (methods) are prefixed with 'Account' and a space. PREDEFINED CLASS METHODS ------------------------ Declaring a class pre-defines a number of "class" methods. i.e. those which don't require an object and simply return or manipulate properties of the class. These are: new ?args...?:: Creates and returns new object, optionally overriding the default class variable values. Note that the class name is an alias for 'classname new {}' and can be used as a shorthand for creating new objects with default values. If the default constructor is used, 'args' is interpreted as a dictionary of instance variables that are set as given. These can be interpreted differently if a custom constructor is used. method name arglist body:: Creates or redefines a method for the class with the given name, argument list and body. methods:: Returns a list of the methods supported by this class, including both class methods and instance methods. Also includes base class methods. vars:: Returns a list of the class variables for this class (names only). Also includes base class variables. classvars:: Returns a dictionary the class variables, including initial values, for this class. Also includes base class variables. classname:: Returns the classname. This can be useful as [$self classname]. Class methods may be invoked either via the class name or via an object of the class. For example: . class Account {balance 0} Account . Account methods classname classvars destroy eval get method methods new vars . set a [Account] .00000000000000000001> . $a methods classname classvars destroy eval get method methods new vars PREDEFINED OBJECT METHODS ------------------------- Declaring a class pre-defines a number of "object" methods. i.e. those which operate on a specific object. defaultconstructor ?dict?:: This is the default constructor. It sets instance variables from the dictionary. constructor ?args...?:: Invoked after an object is created with the arguments to 'new'. The default implementation is 'defaultconstructor', but this may be replaced and then the arguments can be interpreted in a class-specific manner. destroy:: Destroys the object. This method may be overridden, but note that it should delete the object with {rename $self ""}. This method will also be called if the object is reaped during garbage collection. get varname:: Returns the value of the given instance variable. eval ?locals? body:: Makes any given local variables available to the body, along with the instance variables, and evaluate the body in that context. This can be used for one-off evaluation to avoid declaring a method. RESERVED METHODS ---------------- The following method is special unknown methodname ...:: If an undefined method is invoked, and this method exists, it is called with the methodname and the original arguments CREATING OBJECTS ---------------- An object is created with the 'new' method, or simply by using the classname shortcut. If the 'new' method is used, the variables for the newly created object (instance variables) may be initialised. Otherwise they are set to the default values specified when the class was declared. For example: . class Account {balance 0} Account . set a [Account] .00000000000000000001> . set b [Account new {balance 1000}] .00000000000000000002> . $a get balance 0 . $b get balance 1000 The default constructor is used above. Alternatively, we could define a custom constructor: Account method constructor {initial} { set balance $initial } Now we can do: set b [Account new 1000] DECLARING METHODS ----------------- In addition to the predefined methods, new methods may be declared, or existing methods redefined with the class method, method. Declaring a method is very similar to defining a proc, and the arglist has identical syntax. For example: . Account method show {{channel stdout}} { $channel puts "Balance of account is $balance" } . $b show Balance of account is 1000 All instance variables are available within the method and any changes to these variables are maintained by the object. In addition, the $self variables is defined and refers to the current object. This may be used to invoke further methods on the object. For example: . Account method show {} { puts "Balance of account is [$self get balance]" } . $b show Balance of account is 1000 Notes: * It is a bad idea to unset an instance variable. * In general, you should avoid redefining any of the pre-defined methods, except for 'destroy'. * When accessing the caller's scope with upvar or uplevel, note that there are two frame levels between the caller and the method. Thus it is necessary to use 'upvar 2' or 'uplevel 2' INHERITANCE ----------- For each base class given in a new class declaration, the methods and variables of those classes are imported into the new class being defined. Base classes are imported in left to right order, so that if a method is defined in more than one base class, the later definition is selected. This applies similarly to class variables. Within a method, 'super' may be used to explicitly invoke a base class method on the object. This applies only to the *last* base class given. For example: # Assumes the existence of classes Account and Client . Account method debit {amount} { incr balance -$amount } . class CreditAccount {Client Account} {type visa} CreditAccount . CreditAccount method debit {amount} { puts "Debit $type card" super debit $amount } . set a [CreditAccount] .00000000000000000001> . $a debit 20 Debit visa card . $a balance -20 In the CreditAccount debit method, the call to 'super debit' invokes the method 'Account debit' since Account is the last base class listed. OBJECT LIFETIME/GARBAGE COLLECTION ---------------------------------- Objects are implemented as lambdas. That is, they are procedures with state and are named as references. This means that when an object is no longer reachable by any name and garbage collection runs, the object will be discarded and the destructor will be invoked. Note that the garbage collector can be invoked manually with 'collect' if required. . class Account {} Account . Account method destroy {} { puts dying...; rename $self "" } Account destroy . proc a {} { set b [Account]; return "" } a . a . collect dying... 1 CLASS METHODS/CLASS STATIC VARIABLES ------------------------------------ All methods defined with 'method' operate on objects (instances). If a class method is required, it is possible to simply declare one with 'proc'. The method dispatcher will automatically be able to dispatch to this method. Using this approach, it is also possible to add class static variables by defining static variables to the proc. Although strictly these variables are accessible only to that proc, not the class as a whole. For example: . class Account {} Account . proc {Account nextid} {} {{id 0}} { incr id } Account nextid . Account nextid 1 . Account nextid 2 . set a [Account] .00000000000000000001> . $a nextid 3 . $a eval { $self nextid } 4 HOW METHOD DISPATCH WORKS ------------------------- All class and object methods are name "classname methodname". The class method dispatcher is named "classname". When invoked with a methodname, it simply invokes the method "classname methodname". The method dispatch is via a two step process. Firstly the object procedure is invoked with the method name. This procedure then invokes "classname method" which sets up the appropriate access to the object variables, and then invokes the method body. EXAMPLES -------- tree.tcl ~~~~~~~~ The 'tree' package is implemented using the 'oo' package. See the source code in tree.tcl and a usage example in tests/tree.test Of particular note is how callbacks and recursive invocation is used in the 'walk' method. examples/ootest.tcl ~~~~~~~~~~~~~~~~~~~ A comprehensive OO example is provided in examples/ootest.tcl. It can be run simply as: ./jimsh examples/ootest.tcl jimtcl-0.84/README.redis000066400000000000000000000133031522604140100147070ustar00rootroot00000000000000Jim redis extension documentation. Overview ~~~~~~~~ The redis extension is a very simple extension to provide fast client access to redis (https://redis.io/) via the hiredis library (which must be available when building). Usage ~~~~~ The redis extension exports an Object Based interface. In order to open a connection, a stream socket must be open to the redis server. e.g. set r [redis [socket stream localhost:6379]] Or to connect via the unix domain socket: set r [redis [socket unix /tmp/redis.sock]] The [redis] command returns a handle, that is a command name that can be used to perform operations on the redis instance. For example: . package require redis 1.0 . set r [redis [socket stream localhost:6379]] ::redis.handle4 . $r KEYS a* abc . $r SET def 3 OK . $r INCR def 4 . $r HMSET hash a 1 b 2 c 3 OK . $r HGETALL hash a 1 b 2 c 3 Note that redis commands are shown here in uppercase, but they are accepted in a case insensitive manner. The redis connection is very thin wrapper around the redis protocol. It simply formats the command according the redis protocol and converts the response into the appropriate Tcl format. Note that all values are binary strings, so keys and values in utf-8 format will be stored and returned exactly. Return values ~~~~~~~~~~~~~ Responses from redis contain type information. These types are handled as follows: * integer - returns the integer result * string - returns the string result * array - returns a list of elements (where each element is a redis type) * nil - returns the empty string * status - returns the status as a string * error - returns an error with the message as the value Accessing type information ~~~~~~~~~~~~~~~~~~~~~~~~~~ Normally the type of the return value doesn't matter as Jim treats everything as a string, however it can be useful to differentiate between the empty string and nil, or between a status return and an error return. In order to support this, the '-type' option is allowed as the first word of the subcommand. In this case, whenever a value is returned, a list of {value type} is returned instead. This is true recursively, so an array will return both the type for the array and each element will include a type. The types are identified as follows: * integer - "int" * string - "str" * array - "array" * nil - "nil" * status - "status" * error - "error" The following example illustrates the use of types: . $r -type KEYS a* {{abc str}} array . $r -type SET def 3 OK status . $r INCR def 4 int . $r -type GET missing {} nil . $r -type KEYS {ERR wrong number of arguments for 'keys' command} error The read subcommand ~~~~~~~~~~~~~~~~~~~ While most redis commands return an immediate response, SUBSRIBE and PSUBSCRIBE return multiple results over time. These responses can be (synchronously) read with the 'read' subcommand, typically in conjunction with readable. For example . $r SUBSCRIBE chan subscribe chan 1 . $r read message chan PONG If no message is received, the read command will wait forever. The message is returned as: message The 'read' subcommand is also used in non-blocking mode. See the section below for more details. The readable subcommand ~~~~~~~~~~~~~~~~~~~~~~~ Like normal aio sockets, the readable subcommand is supported to invoke the given script when the underlying socket is readable. $r SUBSCRIBE channel $r readable { puts [$r read] } # wait forever, reading messages from the channel vwait forever To remove the callback, invoke with no arguments (this is different from aio readable). # Remove the callback $r readable The close subcommand ~~~~~~~~~~~~~~~~~~~~ The 'close' command is supported to close the connection. This command is equivalent to deleting the command with: rename $r "" The multiexec subcommand ~~~~~~~~~~~~~~~~~~~~~~~~ It is possible to use the 'MULTI' and 'EXEC' commands directly, however in this case each command is sent to the redis server immediately. To improve performance/latency, it is possible to queue multiple commands as a single request with the 'multiexec' subcommand. For example: $r multiexec { $r DEL key $r HSET key a 1 $r HSET key b 2 } The result is a redis array of the result of each command (excluding MULTI and EXEC). Note: The performance benefits of 'multiexec' (batching multiple commands in a single request) only apply when the redis connection is in async mode (see Async/Non-blocking support below). In synchronous mode, each command within the multiexec block is still sent to the server immediately and waits for a response, so there is no latency improvement over using MULTI/EXEC directly. However, multiexec can still be used in synchronous mode for transaction semantics, and if the script within multiexec fails, the transaction will be automatically discarded. Async/Non-blocking support ~~~~~~~~~~~~~~~~~~~~~~~~~~ It is possible to connect to redis in non-blocking mode by using the '-async' flag. e.g. set r [redis -async [socket stream localhost:6379]] Now commands will return immediately with an empty result and 'read' in a 'readable' should be used to retrieve the result. As a simple example: $r readable { set result [$r read] if {$result ne ""} { puts $result incr next } } $r SET x 5 vwait next $r INCR x vwait next Note that if a large result is returned, 'read' may return an empty string, in which case further calls to 'readable' are required to return the result. In general the underlying socket should be put into non-blocking mode ($sock ndelay 1) and a while loop should be used to read reponses until and empty result is returned. jimtcl-0.84/README.sqlite000066400000000000000000000133231522604140100151040ustar00rootroot00000000000000Jim Sqlite extension documentation. Copyright 2005 Salvatore Sanfilippo Overview ~~~~~~~~ The Sqlite extension makes possible to work with sqlite (http://www.sqlite.org) databases from Jim. SQLite is a small C library that implements a self-contained, embeddable, zero-configuration SQL database engine. This means it is perfect for embedded systems, and for stand-alone applications that need the power of SQL without to use an external server like Mysql. Basic usage ~~~~~~~~~~~ The Sqlite extension exports an Object Based interface for databases. In order to open a database use: set f [sqlite3.open dbname] The [sqlite3.open] command returns a db handle, that is a command name that can be used to perform operations on the database. A real example: . set db [sqlite3.open test.db] sqlite.handle0 . $db query "SELECT * from tbl1" {one hello! two 10} {one goodbye two 20} In the second line the handle is used as a command name, followed by the 'method' or 'subcommand' ("query" in the example), and the arguments. The query method ~~~~~~~~~~~~~~~~ The query method has the following signature: $db query SqlQuery ?args? The sql query may contain occurrences of "%s" that are substituted in the actual query with the following arguments, quoted in order to make sure that the query is correct even if these arguments contain "'" characters. So for example it is possible to write: . $db query "SELECT * from tbl1 WHERE one='%s'" hello! {one hello! two 10} Instead of hello! it is possible to use a string with embedded "'": . $db query "SELECT * from tbl1 WHERE one='%s'" a'b (no matches - the empty list is returned) This does not work instead using the Tcl variable expansion in the string: . $db query "SELECT * from tbl1 WHERE one='$foo'" Runtime error, file "?", line 1: near "b": syntax error In order to obtain an actual '%' character in the query, there is just to use two, like in "foo %% bar". This is the same as the [format] argument. Specification of query results ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In one of the above examples, the following query was used: . $db query "SELECT * from tbl1" {one hello! two 10} {one goodbye two 20} As you can see the result of a query is a list of lists. Every element of the list represents a row, as a list of key/value pairs, so actually every row is a Jim dictionary. The following example and generated output show how to take advantage of this representation: . set res [$db query "SELECT * from tbl1"] {one hello! two 10} {one goodbye two 20} . foreach row $res {puts "One: $row(one), Two: $row(two)"} One: hello!, Two: 10 One: goodbye, Two: 20 To access every row sequentially is very simple, and field of a row can be accessed using the $row(field) syntax. The close method ~~~~~~~~~~~~~~~~ In order to close the db, use the 'close' method that will have as side effect to close the db and to remove the command associated with the db. Just use: $db close Handling NULL values ~~~~~~~~~~~~~~~~~~~~ In the SQL language there is a special value NULL that is not the empty string, so how to represent it in a typeless language like Tcl? For default this extension will use the empty string, but it is possible to specify a different string for the NULL value. In the above example there were two rows in the 'tbl1' table. Now we can add using the "sqlite" command line client another one with a NULL value: sqlite> INSERT INTO tbl1 VALUES(NULL,30); sqlite> .exit That's what the sqlite extension will return for default: . $db query "SELECT * from tbl1" {one hello! two 10} {one goodbye two 20} {one {} two 30} As you can see in the last row, the NULL is represented as {}, that's the empty string. Using the -null option of the 'query' command we can change this default, and tell the sqlite extension to represent the NULL value as a different string: . $db query -null <> "SELECT * from tbl1" {one hello! two 10} {one goodbye two 20} {one <> two 30} This way if the empty string has some semantical value for your dataset you can change it. Finding the ID of the last inserted row ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This is as simple as: . $db lastid 10 Number of rows changed by the most recent query ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This is also very simple, there is just to use the 'changes' method without arguments. . $db changes 5 Note that if you drop an entire table the number of changes will be reported as zero, because of details of the sqlite implementation. That's all, Enjoy! Salvatore Sanfilippo p.s. this extension is just the work of some hour thanks to the cool clean C API that sqlite exports. Thanks to the author of sqlite for this great work. In memory databases ~~~~~~~~~~~~~~~~~~~ SQLite is able to create in-memory databases instead to use files. This is of course faster and does not need the ability to write to the filesystem. Of course this databases are only useful for temp data. In-memory DBs are used just like regular databases, just the name used to open the database is :memory:. That's an example that does not use the filesystem at all to create and work with the db. package require sqlite3 set db [sqlite3.open :memory:] $db query {CREATE TABLE plays (id, author, title)} $db query {INSERT INTO plays (id, author, title) VALUES (1, 'Goethe', 'Faust');} $db query {INSERT INTO plays (id, author, title) VALUES (2, 'Shakespeare', 'Hamlet');} $db query {INSERT INTO plays (id, author, title) VALUES (3, 'Sophocles', 'Oedipus Rex');} set res [$db query "SELECT * FROM plays"] $db close foreach r $res {puts $r(author)} Of course once the Jim process is destroyed the database will no longer exists. jimtcl-0.84/README.taint000066400000000000000000000124441522604140100147250ustar00rootroot00000000000000Taint Suport for Jim Tcl ======================== Author: Steve Bennett Date: 24 May 2011 OVERVIEW -------- Perl and Ruby support the concept of tainted data, taint sources and taint sinks. The idea is to improve security in situations where data may be coming from outside the program (e.g. input to a web application). This data should not inadvertently be output on a web page unescaped (to avoid XSS attacks), to a database (to avoid SQL injections attacks) or to execute system commands (to avoid system attacks). Standard Tcl does not support tainting, but uses "safe" interpreters for a similar purpose. For Jim Tcl, taint support is smaller and simpler. HOW IT WORKS ------------ Any data read from a 'taint source' is considered tainted. As that data moves through the system, it retains its taint property. Tainted data should not be allowed to be consumed by a 'taint sink'. An error should be raised instead. Taint Sources ~~~~~~~~~~~~~ Untrusted data may come from various sources in the system. In Jim Tcl, the sources of external data are: * Data read from a file or socket (aio read, gets, recvfrom) * Command line arguments ($argv) * Loaded code or scripts (source, package require, load) * Environment variables (env) * Custom Tcl commands implemented as C code Any data from these sources may be considered "tainted". By default, sockets are considered taint sources while the other external data sources are not. Data read from a 'taint source' filehandle with read, recvfrom or gets is tainted. No filehandles are considered taint sinks by default. Client sockets produced by accept inherit the accept socket settings. Taint Sinks ~~~~~~~~~~~ In order for tainted data to cause security problems, the data need to be used in certain contexts. These *may* include: * Establishing network connections (socket) * Sending the data to certain file descriptors (aio puts, sendto) * Modifying the filesystem (open, file delete, rename, mkdir) * Running commands (exec) * Evaluating scripts (eval, uplevel, source) * Use in custom Tcl commands implemented as C code Taint Propagation ~~~~~~~~~~~~~~~~~ As tainted data is assigned, or manipulated, it should retain its taint property. This includes the creation of new values based on tainted data. Jim Tcl takes a conservative approach to taint propagation as follows: * Any copy of a tainted value is tainted (e.g. set, proc calls) * Any value constructed in part from a tainted value is tainted (append, lappend, lset) * A tainted value added to a container (dict, list, array) remains tainted. If the tainted value can be distinguished from other values in the container, the container is not tainted. However, if the container needs to change representation, the entire container becomes tainted. * Integer and floating point values are not tainted Taint types ----------- It may be useful to distinguish between different types of taint. Each taint type is assigned a bit in a taint bit field. The standard taint type is 1, but taint types 2, 4, etc. may also be used. If a taint source is marked as taint type 2, it will not be flagged as invalid when consumed by a taint sink marked as taint type 4. The commands exec, source, etc. consider any taint to be invalid, however file descriptors may have specific taint source and sink types specified. Taint-aware Commands -------------------- The following commands will fail if any argument is tainted: - source, exec, open, socket, load, file mkdir, file delete, file rename In addition, 'package require' will ignore any tainted paths in $auto_path HOW TO USE IT ------------- To mark a value as tainted: taint varname To remove the taint from a value: untaint varname To determine if a value is tainted: info tainted $var To mark a filehandle as a taint source or sink (or not): $aiohandle taint source|sink ?0|n? More Information ---------------- To simplify taint propagation, the interpreter examines the arguments to every command (plus the command itself). If any argument is tainted, the command execution is considered tainted. Any new objects (except int and double) created during the execution of the command will be marked tainted. The Rules --------- - The taint and untaint commands operate on variables, and taint/untaint the contents of the variable - Adding/modifying a list/dict/array element taints that element plus the "container", but not the other elements in that container - Tainting a container element taints the container too - Untainting a container element does not untaint the container, even if it contains no more tainted elements - Tainting or untainting a container taints or untaints all elements in the container - Any element of $auto_path that is tainted will be ignored when loading packages with package require Specific Notes -------------- In general, a conservative approach is used to tainting, so if a command creates a new object while any of its arguments are tainted, the new object is also tainted. However, the list-related commands are more intelligent. All list-related commands such as lindex, lrange, lassign and lreplace will not change the taint of existing list elements, but will avoid tainting untainted elements. For example, if the list {a b t d} contains one tainted element, 't', then [lreverse $a] will produce a list with only one tainted element. jimtcl-0.84/README.utf-8000066400000000000000000000115751522604140100145550ustar00rootroot00000000000000UTF-8 Support for Jim Tcl ========================= Author: Steve Bennett Date: 2 Nov 2010 10:55:52 EST OVERVIEW -------- Early versions of Jim Tcl supported strings, including binary strings containing nulls, however it had no support for multi-byte character encodings. In some fields, such as when dealing with the web, or other user-generated content, support for multi-byte character encodings is necessary. In these cases it would be very useful for Jim Tcl to be able to process strings as multi-byte character strings rather than simply binary bytes. Supporting multiple character encodings and translation between those encodings is beyond the scope of Jim Tcl. Therefore, Jim has been enhanced to add support for UTF-8, as the most popular general purpose multi-byte encoding. UTF-8 support is optional. It can be enabled at compile time with: ./configure --enable-utf8 The Jim Tcl documentation fully documents the UTF-8 support. This README includes additional background information. Unicode vs UTF-8 ---------------- It is important to understand that Unicode is an abstract representation of the concept of a "character", while UTF-8 is an encoding of Unicode into bytes. Thus the Unicode codepoint U+00B5 is encoded in UTF-8 with the byte sequence: 0xc2, 0xb5. This is different from ASCII where the same name is used interchangeably between a character value and its encoding. Unicode Escapes --------------- Even without UTF-8 enabled, it is useful to be able to encode UTF-8 characters in strings. This can be done with the \uNNNN Unicode escape. This syntax is compatible with Tcl and is enabled even if UTF-8 is disabled. Unlike Tcl, Jim Tcl supports Unicode characters up to 21 bits. In addition to \uNNNN, Jim Tcl also supports variable length Unicode character specifications with \u{NNNNNN} where there may be anywhere between 1 and 6 hex within the braces. e.g. \u{24B62} UTF-8 Properties ---------------- Due to the design of the UTF-8 encoding, many (most) commands continue to work with UTF-8 strings. This is due to the following properties of UTF-8: * ASCII characters in strings have the same representation in UTF-8 * An ASCII string will never match the middle of a multi-byte UTF-8 sequence * UTF-8 strings can be sorted as bytes and produce the same result as sorting by characters * UTF-8 strings in Jim continue to be null terminated Commands Supporting UTF-8 ------------------------- The following commands have been enhanced to support UTF-8 strings. * array {get,names,unset} * case * glob * lsearch -glob, -regexp * switch -glob, -regexp * regexp, regsub * format * scan * split * string index, range, length, compare, equal, first, last, map, match, reverse, tolower, toupper * string bytelength (new) * info procs, commands, vars, globals, locals Character Classes ----------------- Jim Tcl has no support for UTF-8 character classes. Thus [:alpha:] will match [a-zA-Z], but not non-ASCII alphabetic characters. The same is true for 'string is'. Regular Expressions ------------------- Normally, Jim Tcl uses the system-supplied POSIX-compatible regex implementation. Typically systems do not provide a UTF-8 capable regex implementation, therefore when UTF-8 support is enabled, the built-in regex implementation is used which includes UTF-8 support. Case Insensitivity ------------------ Case folding is much more complex under Unicode than under ASCII. For example it is possible for a character to change the number of bytes required for representation when converting from one case to another. Jim Tcl supports only "simple" case folding, where case is folded only where the number of bytes does not change. Case folding tables are automatically generated from the official unicode data table at http://unicode.org/Public/UNIDATA/UnicodeData.txt Working with Binary Data and non-UTF-8 encodings ------------------------------------------------ Almost all Jim commands will work identically with binary data and UTF-8 encoded data, including read, gets, puts and 'string eq'. It is only certain string manipulation commands that behave differently. For example, 'string index' will return UTF-8 characters, not bytes. If it is necessary to manipulate strings containing binary, non-ASCII data (bytes >= 0x80), there are two options. 1. Build Jim without UTF-8 support 2. Use 'string byterange', 'string bytelength' and 'pack', 'unpack' and 'binary' to operate on strings as bytes rather than characters. Internal Details ---------------- Jim_Utf8Length() will calculate the character length of the string and cache it for later access. It uses utf8_strlen() which relies on the string to be null terminated (which it always will be). It is possible to tell if a string is ascii-only because length == bytelength It is possible to provide optimised versions of various routines for the ascii-only case. Both 'string index' and 'string range' currently perform such optimisation. jimtcl-0.84/STYLE000066400000000000000000000032621522604140100135500ustar00rootroot00000000000000This file summarizes the C style used for Jim. Copyright (C) 2005 Salvatore Sanfilippo. ----------- INDENTATION ----------- Indentation is 4 spaces, no smart-tabs are used (i.e. two indentation steps of 4 spaces will not be converted into a real tab, but 8 spaces). --------------- FUNCTIONS NAMES --------------- Functions names of exported functions are in the form: Jim_ExportedFunctionName() The prefix is "Jim_", every word composing the function name is capitalized. Not exported functions that are of general interest for the Jim core, like JimFreeInterp() are capitalized the same way, but the prefix used for this functions is "Jim" instead of "Jim_". Another example is: JimNotExportedFunction() Not exported functions that are not general, like functions implementing hashtables or Jim objects methods can be named in any prefix as long as capitalization rules are followed, like in: ListSetIndex() --------------- VARIABLES NAMES --------------- Global variables follow the same names convention of functions. Local variables have usually short names. A counter is just 'i', or 'j', or something like this. When a longer name is required, composed of more words, capitalization is used, but the first word starts in lowcase: thisIsALogVarName ---- GOTO ---- Goto is allowed every time it makes the code cleaner, like in complex functions that need to handle exceptions, there is often an "err" label at the end of the function where allocated resources are freed before to exit with an error. Goto is also used in order to escape multiple nested loops. ---------- C FEATURES ---------- Only C89 ANSI C is allowed. C99 features can't be used currently. GCC extensions are not allowed. jimtcl-0.84/TODO000066400000000000000000000007651522604140100134220ustar00rootroot00000000000000CORE LANGUAGE FEATURES - none CORE COMMANDS - none OTHER COMMANDS NOT IN TCL BUT THAT SHOULD BE IN JIM - Set commands: [lunion], [lintersect], and [ldifference] EXTENSIONS - Cryptography: hash functions, block ciphers, strim ciphers, PRNGs. - Tuplespace extension (http://wiki.tcl.tk/3947) (using sqlite as backend) - Gdlib - CGI (interface compatible with ncgi, but possibly written in C for speed) REFERENCES SYSTEM - Unify ref/getref/setref/collect/finalize under an unique [ref] command. jimtcl-0.84/Tcl_shipped.html000066400000000000000000015036061522604140100160610ustar00rootroot00000000000000 Jim Tcl(n)

SYNOPSIS

cc <source> -ljim

or

jimsh [<scriptfile>|-]
jimsh -e '<immediate-script>'
jimsh --version
jimsh --help

INTRODUCTION

Jim Tcl is a small footprint reimplementation of the Tcl scripting language. The core language engine is compatible with Tcl 8.5+, while implementing a significant subset of the Tcl 8.6 command set, plus additional features available only in Jim Tcl.

Some notable differences with Tcl 8.5/8.6/8.7 are:

  1. Object-based I/O (aio), but with a Tcl-compatibility layer

  2. I/O: Support for sockets and pipes including TCP, UDP, UNIX-Domain sockets and IPv6

  3. Integers are 64bit

  4. Support for references (ref/getref/setref) and garbage collection

  5. Builtin dictionary type (dict) with some limitations compared to Tcl 8.6

  6. env command to access environment variables

  7. Operating system features: os.fork, os.uptime, wait, signal, alarm, sleep

  8. Much better error reporting. info stacktrace as a replacement for $errorInfo, $errorCode

  9. Support for "static" variables in procedures

  10. Threads and coroutines are not supported

  11. Command and variable traces are not supported

  12. Built-in command line editing in interactive mode with autocompletion and hints

  13. Expression shorthand syntax: $(…)

  14. Modular build allows many features to be omitted or built as dynamic, loadable modules

  15. Highly suitable for use in an embedded environment

  16. Jim does not convert backslash-newline within braces (in order to preserve accurate line numbers)

RECENT CHANGES

Changes since 0.83

  1. aio - support for configurable read and write buffering

  2. Add support for package forget

  3. Add aio translation support (and fconfigure -translation)

  4. exec TIP 424 - support safer exec | syntax (also open "|| pipeline…")

  5. New lsubst command to create lists using subst-style substitution

  6. Add support for regexp -expanded and regsub -expanded

  7. vwait now accepts a script argument

  8. Add support for os.umask

  9. Add taint support for improved data security

  10. Improved API for creating C commands with Jim_RegisterCommand for arg checking and usage

  11. New info usage to return the usage for a proc or native command

  12. New info aliases to list all aliases

  13. expr supports new =* and =~ matching operators (see EXPRESSIONS)

  14. aio gets supports -eol and -keep

Changes between 0.82 and 0.83

  1. Multi-level break and continue are now supported

  2. info frame now only returns proc levels

  3. stacktrace is now a builtin command

  4. The stack trace on error now includes the full stack trace, not just back to where it was caught

  5. Improvements with aio, related to eventloop and buffering. Add aio timeout.

  6. socket , open and aio accept now support -noclose

  7. Add support for hinting with history hints

  8. Support for proc statics by reference (lexical closure) rather than by value

  9. regsub now supports -command (per Tcl 8.7)

  10. Add support for lsort -dict

Changes between 0.81 and 0.82

  1. try now supports trap to match on errorcode

  2. TIP 603, aio stat is now supported to stat a file handle

  3. Add support for socket -async

  4. The handles created by socket pty now make the replica name available via filename

  5. info frame now returns a (largely) Tcl-compatible dictionary, and supports info frame 0

  6. vwait -signal is now supported

  7. ./configure now defaults to --full

  8. New timerate command as an improvement over time, somewhat compatible with TIP 527

  9. Add ensemble command and support for namespace ensemble (as an optional extension)

Changes between 0.80 and 0.81

  1. TIP 582, comments allowed in expressions

  2. Many commands now accept "safe" integer expressions rather than simple integers: loop, range, incr, string repeat, lrepeat, pack, unpack, rand

  3. String and list indexes now accept integer expressions (STRING AND LIST INDEX SPECIFICATIONS)

  4. loop can now omit the start value

  5. Add the xtrace command for execution trace support

  6. Add history keep

  7. Add support for lsearch -index and lsearch -stride, the latter per TIP 351

  8. lsort -index now supports multiple indices

  9. Add support for lsort -stride

  10. open now supports POSIX-style access arguments

  11. TIP 526, expr now only allows a single argument (unless --compat is enabled)

Changes between 0.79 and 0.80

  1. regsub now fully supports \A

  2. Add socket pty to create a pseudo-tty pair

  3. Null characters (\x00) are now supported in variable and proc names

  4. dictionaries and arrays now preserve insertion order, matching Tcl and the documentation

  5. Add dict getwithdefault (and the alias dict getdef) per TIP 342

  6. Add string comparison operators (lt, gt, le, ge) per TIP 461

  7. Implement 0d radix prefix for decimal per TIP 472

Changes between 0.78 and 0.79

  1. Add file mtimeus for high resolution file timestamps

  2. aio now supports datagram Unix-Domain sockets

  3. Add support for aio lock -wait

  4. Add signal block to prevent delivery of signals

  5. Add support for file split

  6. Add support for json::encode and json::decode

  7. aio tty now allows setting echo without full raw mode

Changes between 0.77 and 0.78

  1. Add serial/tty support with aio tty

  2. Add support for jimsh -

  3. Add hidden -commands option to many commands

  4. Add scriptable autocompletion support in interactive mode with tcl::autocomplete

  5. Add aio sockopt

  6. Add scriptable autocompletion support with history completion

  7. Add support for tree delete

  8. Add support for defer and $jim::defer

  9. Renamed os.wait to wait, now more Tcl-compatible and compatible with exec ... &

  10. pipe is now a synonym for socket pipe

  11. Closing a pipe open with open |... now returns Tcl-like status

  12. It is now possible to used exec redirection with a pipe opened with open |...

  13. Interactive line editing now supports multiline mode if $::history::multiline is set

Changes between 0.76 and 0.77

  1. Add support for aio sync

  2. Add SSL and TLS support in aio

  3. Added zlib

  4. Added support for boolean constants in expr

  5. string is now supports boolean class

  6. Add support for aio lock and aio unlock

  7. Add new interp command

Changes between 0.75 and 0.76

  1. glob now supports the -tails option

  2. Add support for string cat

  3. Allow info source to add source info

Changes between 0.74 and 0.75

  1. binary, pack and unpack now support floating point

  2. file copy -force handles source and target as the same file

  3. format now supports %b for binary conversion

  4. lsort now supports -unique and -real

  5. Add support for half-close with aio close ?r|w?

  6. Add socket pair for a bidirectional pipe

  7. Add --random-hash to randomise hash tables for greater security

  8. dict now supports for, values, incr, append, lappend, update, info and replace

  9. file stat no longer requires the variable name

  10. Add support for file link

TCL INTRODUCTION

Tcl stands for tool command language and is pronounced tickle. It is actually two things: a language and a library.

First, Tcl is a simple textual language, intended primarily for issuing commands to interactive programs such as text editors, debuggers, illustrators, and shells. It has a simple syntax and is also programmable, so Tcl users can write command procedures to provide more powerful commands than those in the built-in set.

Second, Tcl is a library package that can be embedded in application programs. The Tcl library consists of a parser for the Tcl language, routines to implement the Tcl built-in commands, and procedures that allow each application to extend Tcl with additional commands specific to that application. The application program generates Tcl commands and passes them to the Tcl parser for execution. Commands may be generated by reading characters from an input source, or by associating command strings with elements of the application’s user interface, such as menu entries, buttons, or keystrokes.

When the Tcl library receives commands it parses them into component fields and executes built-in commands directly. For commands implemented by the application, Tcl calls back to the application to execute the commands. In many cases commands will invoke recursive invocations of the Tcl interpreter by passing in additional strings to execute (procedures, looping commands, and conditional commands all work in this way).

An application program gains three advantages by using Tcl for its command language. First, Tcl provides a standard syntax: once users know Tcl, they will be able to issue commands easily to any Tcl-based application. Second, Tcl provides programmability. All a Tcl application needs to do is to implement a few application-specific low-level commands. Tcl provides many utility commands plus a general programming interface for building up complex command procedures. By using Tcl, applications need not re-implement these features.

Third, Tcl can be used as a common language for communicating between applications. Inter-application communication is not built into the Tcl core described here, but various add-on libraries, such as the Tk toolkit, allow applications to issue commands to each other. This makes it possible for applications to work together in much more powerful ways than was previously possible.

Fourth, Jim Tcl includes a command processor, jimsh, which can be used to run standalone Tcl scripts, or to run Tcl commands interactively.

This manual page focuses primarily on the Tcl language. It describes the language syntax and the built-in commands that will be available in any application based on Tcl. The individual library procedures are described in more detail in separate manual pages, one per procedure.

JIMSH COMMAND INTERPRETER

A simple, but powerful command processor, jimsh, is part of Jim Tcl. It may be invoked in interactive mode as:

jimsh

or to process the Tcl script in a file with:

jimsh filename

or to process the Tcl script from standard input:

jimsh -

It may also be invoked to execute an immediate script with:

jimsh -e "script"

Interactive Mode

Interactive mode reads Tcl commands from standard input, evaluates those commands and prints the results.

$ jimsh
Welcome to Jim version 0.73, Copyright (c) 2005-8 Salvatore Sanfilippo
. info version
0.73
. lsort [info commands p*]
package parray pid popen proc puts pwd
. foreach i {a b c} {
{> puts $i
{> }
a
b
c
. bad
invalid command name "bad"
[error] . exit
$

If jimsh is configured with line editing (it is by default) and a VT-100-compatible terminal is detected, Emacs-style line editing commands are available, including: arrow keys, ^W to erase a word, ^U to erase the line, ^R for reverse incremental search in history. Additionally, the h command may be used to display the command history.

Command line history is automatically saved and loaded from ~/.jim_history

In interactive mode, jimsh automatically runs the script ~/.jimrc at startup if it exists.

INTERPRETERS

The central data structure in Tcl is an interpreter (C type Jim_Interp). An interpreter consists of a set of command bindings, a set of variable values, and a few other miscellaneous pieces of state. Each Tcl command is interpreted in the context of a particular interpreter.

Some Tcl-based applications will maintain multiple interpreters simultaneously, each associated with a different widget or portion of the application. Interpreters are relatively lightweight structures. They can be created and deleted quickly, so application programmers should feel free to use multiple interpreters if that simplifies the application.

DATA TYPES

Tcl supports only one type of data: strings. All commands, all arguments to commands, all command results, and all variable values are strings.

Where commands require numeric arguments or return numeric results, the arguments and results are passed as strings. Many commands expect their string arguments to have certain formats, but this interpretation is up to the individual commands. For example, arguments often contain Tcl command strings, which may get executed as part of the commands. The easiest way to understand the Tcl interpreter is to remember that everything is just an operation on a string. In many cases Tcl constructs will look similar to more structured constructs from other languages. However, the Tcl constructs are not structured at all; they are just strings of characters, and this gives them a different behaviour than the structures they may look like.

Although the exact interpretation of a Tcl string depends on who is doing the interpretation, there are three common forms that strings take: commands, expressions, and lists. The major sections below discuss these three forms in more detail.

BASIC COMMAND SYNTAX

The Tcl language has syntactic similarities to both the Unix shells and Lisp. However, the interpretation of commands is different in Tcl than in either of those other two systems. A Tcl command string consists of one or more commands separated by newline characters or semi-colons. Each command consists of a collection of fields separated by white space (spaces or tabs). The first field must be the name of a command, and the additional fields, if any, are arguments that will be passed to that command. For example, the command:

    set a 22

has three fields: the first, set, is the name of a Tcl command, and the last two, a and 22, will be passed as arguments to the set command. The command name may refer either to a built-in Tcl command, an application-specific command bound in with the library procedure Jim_RegisterCommand, or a command procedure defined with the proc built-in command.

Arguments are passed literally as text strings. Individual commands may interpret those strings in any fashion they wish. The set command, for example, will treat its first argument as the name of a variable and its second argument as a string value to assign to that variable. For other commands arguments may be interpreted as integers, lists, file names, or Tcl commands.

Command names should normally be typed completely (e.g. no abbreviations). However, if the Tcl interpreter cannot locate a command it invokes a special command named unknown which attempts to find or create the command.

For example, at many sites unknown will search through library directories for the desired command and create it as a Tcl procedure if it is found. The unknown command often provides automatic completion of abbreviated commands, but usually only for commands that were typed interactively.

It’s probably a bad idea to use abbreviations in command scripts and other forms that will be re-used over time: changes to the command set may cause abbreviations to become ambiguous, resulting in scripts that no longer work.

COMMENTS

If the first non-blank character in a command is #, then everything from the # up through the next newline character is treated as a comment and ignored. When comments are embedded inside nested commands (e.g. fields enclosed in braces) they must have properly-matched braces (this is necessary because when Tcl parses the top-level command it doesn’t yet know that the nested field will be used as a command so it cannot process the nested comment character as a comment).

GROUPING ARGUMENTS WITH DOUBLE-QUOTES

Normally each argument field ends at the next white space, but double-quotes may be used to create arguments with embedded space.

If an argument field begins with a double-quote, then the argument isn’t terminated by white space (including newlines) or a semi-colon (see below for information on semi-colons); instead it ends at the next double-quote character. The double-quotes are not included in the resulting argument. For example, the command

    set a "This is a single argument"

will pass two arguments to set: a and This is a single argument.

Within double-quotes, command substitutions, variable substitutions, and backslash substitutions still occur, as described below. If the first character of a command field is not a quote, then quotes receive no special interpretation in the parsing of that field.

GROUPING ARGUMENTS WITH BRACES

Curly braces may also be used for grouping arguments. They are similar to quotes except for two differences. First, they nest; this makes them easier to use for complicated arguments like nested Tcl command strings. Second, the substitutions described below for commands, variables, and backslashes do not occur in arguments enclosed in braces, so braces can be used to prevent substitutions where they are undesirable.

If an argument field begins with a left brace, then the argument ends at the matching right brace. Tcl will strip off the outermost layer of braces and pass the information between the braces to the command without any further modification. For example, in the command

    set a {xyz a {b c d}}

the set command will receive two arguments: a and xyz a {b c d}.

When braces or quotes are in effect, the matching brace or quote need not be on the same line as the starting quote or brace; in this case the newline will be included in the argument field along with any other characters up to the matching brace or quote. For example, the eval command takes one argument, which is a command string; eval invokes the Tcl interpreter to execute the command string. The command

    eval {
      set a 22
      set b 33
    }

will assign the value 22 to a and 33 to b.

If the first character of a command field is not a left brace, then neither left nor right braces in the field will be treated specially (except as part of variable substitution; see below).

COMMAND SUBSTITUTION WITH BRACKETS

If an open bracket occurs in a field of a command, then command substitution occurs (except for fields enclosed in braces). All of the text up to the matching close bracket is treated as a Tcl command and executed immediately. Then the result of that command is substituted for the bracketed text. For example, consider the command

    set a [set b]

When the set command has only a single argument, it is the name of a variable and set returns the contents of that variable. In this case, if variable b has the value foo, then the command above is equivalent to the command

    set a foo

Brackets can be used in more complex ways. For example, if the variable b has the value foo and the variable c has the value gorp, then the command

    set a xyz[set b].[set c]

is equivalent to the command

    set a xyzfoo.gorp

A bracketed command may contain multiple commands separated by newlines or semi-colons in the usual fashion. In this case the value of the last command is used for substitution. For example, the command

    set a x[set b 22
    expr $b+2]x

is equivalent to the command

    set a x24x

If a field is enclosed in braces then the brackets and the characters between them are not interpreted specially; they are passed through to the argument verbatim.

VARIABLE SUBSTITUTION WITH $

The dollar sign ($) may be used as a special shorthand form for substituting variable values. If $ appears in an argument that isn’t enclosed in braces then variable substitution will occur. The characters after the $, up to the first character that isn’t a number, letter, or underscore, are taken as a variable name and the string value of that variable is substituted for the name.

For example, if variable foo has the value test, then the command

    set a $foo.c

is equivalent to the command

    set a test.c

There are two special forms for variable substitution. If the next character after the name of the variable is an open parenthesis, then the variable is assumed to be an array name, and all of the characters between the open parenthesis and the next close parenthesis are taken as an index into the array. Command substitutions and variable substitutions are performed on the information between the parentheses before it is used as an index.

For example, if the variable x is an array with one element named first and value 87 and another element named 14 and value more, then the command

    set a xyz$x(first)zyx

is equivalent to the command

    set a xyz87zyx

If the variable index has the value 14, then the command

    set a xyz$x($index)zyx

is equivalent to the command

    set a xyzmorezyx

For more information on arrays, see VARIABLES - SCALARS AND ARRAYS below.

The second special form for variables occurs when the dollar sign is followed by an open curly brace. In this case the variable name consists of all the characters up to the next curly brace.

Array references are not possible in this form: the name between braces is assumed to refer to a scalar variable. For example, if variable foo has the value test, then the command

    set a abc${foo}bar

is equivalent to the command

    set a abctestbar

Variable substitution does not occur in arguments that are enclosed in braces: the dollar sign and variable name are passed through to the argument verbatim.

The dollar sign abbreviation is simply a shorthand form. $a is completely equivalent to [set a]; it is provided as a convenience to reduce typing.

SEPARATING COMMANDS WITH SEMI-COLONS

Normally, each command occupies one line (the command is terminated by a newline character). However, semi-colon (;) is treated as a command separator character; multiple commands may be placed on one line by separating them with a semi-colon. Semi-colons are not treated as command separators if they appear within curly braces or double-quotes.

BACKSLASH SUBSTITUTION

Backslashes may be used to insert non-printing characters into command fields and also to insert special characters like braces and brackets into fields without them being interpreted specially as described above.

The backslash sequences understood by the Tcl interpreter are listed below. In each case, the backslash sequence is replaced by the given character:

\b

Backspace (0x8)

\f

Form feed (0xc)

\n

Newline (0xa)

\r

Carriage-return (0xd).

\t

Tab (0x9).

\v

Vertical tab (0xb).

\ddd

The digits ddd (one, two, or three of them) give the octal value of the byte. Note that Jim supports null characters in strings.

\xnn

The hexidecimal digits nn give the value of the byte.

\unnnn
\u{nnn}
\Unnnnnnnn

The UTF-8 encoding of the unicode codepoint represented by the hex digits, nnnn, is inserted. The u form allows for one to four hex digits. The U form allows for one to eight hex digits. The u{nnn} form allows for one to eight hex digits, but makes it easier to insert UTF-8 characters that are followed by a hex digit.

If a backslash is followed by something other than one of the options described above, the backslash is skipped and character following the backslash is treated as a normal character without any special meaning. The Tcl scanner continues normal processing with the next character. For example, in the command

For example, in the command

    set a \{x\[\ yz\141

the second argument to set will be {x[ yza.

If an argument is enclosed in braces, then backslash sequences inside the argument are parsed but no substitution occurs: the backslash sequence is passed through to the argument as is, without making any special interpretation of the characters in the backslash sequence. In particular, backslashed braces are not counted in locating the matching right brace that terminates the argument. For example, in the command

    set a {\{abc}

the second argument to set will be \{abc.

This backslash mechanism is not sufficient to generate absolutely any argument structure; it only covers the most common cases. To produce particularly complicated arguments it is probably easiest to use the format command along with command substitution.

STRING AND LIST INDEX SPECIFICATIONS

Many string and list commands take one or more index parameters which specify a position in the string relative to the start or end of the string/list.

The index may be one of the following forms:

integer

A simple integer, where 0 refers to the first element of the string or list.

integerexpression

Any "safe" expression that evaluates to an integer. A "safe" expression does not perform variable or command subsitution, but is otherwise like a normal expression (see EXPRESSIONS).

For example 1+2*3 is valid integer expression, but {$x*2-1} is not. But note that it is possible to use an unbraced expression to allow the Tcl interpreter to expand variables and commands before being parsed as an integer expression.

e.g. string repeat a $x*2-1

end

The last element of the string or list.

end-integer
end-integerexpression
end+integerexpression

The nth-from-last element of the string or list. Again, a "safe" integer expression may be used in place of a simple integer. end-3 or end-3+2*$n. Normally it only makes sense to use the end- form, but if the integer expression is negative, the end+ form may be used.

COMMAND SUMMARY

  1. A command is just a string.

  2. Within a string commands are separated by newlines or semi-colons (unless the newline or semi-colon is within braces or brackets or is backslashed).

  3. A command consists of fields. The first field is the name of the command. The other fields are strings that are passed to that command as arguments.

  4. Fields are normally separated by white space.

  5. Double-quotes allow white space and semi-colons to appear within a single argument. Command substitution, variable substitution, and backslash substitution still occur inside quotes.

  6. Braces defer interpretation of special characters. If a field begins with a left brace, then it consists of everything between the left brace and the matching right brace. The braces themselves are not included in the argument. No further processing is done on the information between the braces except that backslash-newline sequences are eliminated.

  7. If a field doesn’t begin with a brace then backslash, variable, and command substitution are done on the field. Only a single level of processing is done: the results of one substitution are not scanned again for further substitutions or any other special treatment. Substitution can occur on any field of a command, including the command name as well as the arguments.

  8. If the first non-blank character of a command is a #, everything from the # up through the next newline is treated as a comment and ignored.

EXPRESSIONS

The second major interpretation applied to strings in Tcl is as expressions. Several commands, such as expr, for, and if, treat one or more of their arguments as expressions and call the Tcl expression processors (Jim_ExprLong, Jim_ExprBoolean, etc.) to evaluate them.

The operators permitted in Tcl expressions are a subset of the operators permitted in C expressions, and they have the same meaning and precedence as the corresponding C operators. Expressions almost always yield numeric results (integer or floating-point values). For example, the expression

    8.2 + 6

evaluates to 14.2.

Tcl expressions differ from C expressions in the way that operands are specified, and in that Tcl expressions support non-numeric operands and string comparisons.

A Tcl expression consists of a combination of operands, operators, and parentheses.

White space may be used between the operands and operators and parentheses; it is ignored by the expression processor. Where possible, operands are interpreted as integer values.

Comments are allowed in expressions, beginning with the # character and continuing until the end of line or end of expression.

Integer values are interpreted as decimal, binary, octal or hexadecimal if prepended with 0d, 0b, 0o or 0x respectively. Otherwise they are interpreted as decimal by default. (Jim Tcl does not interpret numbers with leading zeros as octal.)

If an operand does not have one of the integer formats given above, then it is treated as a floating-point number if that is possible. Floating-point numbers may be specified in any of the ways accepted by an ANSI-compliant C compiler (except that the f, F, l, and L suffixes will not be permitted in most installations). For example, all of the following are valid floating-point numbers: 2.1, 3., 6e4, 7.91e+16.

If no numeric interpretation is possible, then an operand is left as a string (and only a limited set of operators may be applied to it).

String constants representing boolean constants (0, 1, false, off, no, true, on, yes) are also recognized and can be used in logical operations.

Operands may be specified in any of the following ways:

  1. As a numeric value, either integer or floating-point.

  2. As one of valid boolean constants

  3. As a Tcl variable, using standard $ notation. The variable’s value will be used as the operand.

  4. As a string enclosed in double-quotes. The expression parser will perform backslash, variable, and command substitutions on the information between the quotes, and use the resulting value as the operand

  5. As a string enclosed in braces. The characters between the open brace and matching close brace will be used as the operand without any substitutions.

  6. As a Tcl command enclosed in brackets. The command will be executed and its result will be used as the operand.

Where substitutions occur above (e.g. inside quoted strings), they are performed by the expression processor. However, an additional layer of substitution may already have been performed by the command parser before the expression processor was called.

As discussed below, it is usually best to enclose expressions in braces to prevent the command parser from performing substitutions on the contents.

For some examples of simple expressions, suppose the variable a has the value 3 and the variable b has the value 6. Then the expression on the left side of each of the lines below will evaluate to the value on the right side of the line:

    $a + 3.1                6.1
    2 + "$a.$b"             5.6
    4*[llength "6 2"]       8
    {word one} < "word $a"  0

The valid operators are listed below, grouped in decreasing order of precedence:

int() double() round() abs(), rand(), srand()

Unary functions (except rand() which takes no arguments)

  • int() converts the numeric argument to an integer by truncating down.

  • double() converts the numeric argument to floating point.

  • round() converts the numeric argument to the closest integer value.

  • abs() takes the absolute value of the numeric argument.

  • rand() returns a pseudo-random floating-point value in the range (0,1).

  • srand() takes an integer argument to (re)seed the random number generator. Returns the first random number from that seed.

sin() cos() tan() asin() acos() atan() sinh() cosh() tanh() ceil() floor() exp() log() log10() sqrt()

Unary math functions. If Jim is compiled with math support, these functions are available.

- + ~ !

Unary minus, unary plus, bit-wise NOT, logical NOT. None of these operands may be applied to string operands, and bit-wise NOT may be applied only to integers.

** pow(x,y)

Power. e.g. xy. If Jim is compiled with math support, supports doubles and integers. Otherwise supports integers only. (Note that the math-function form has the same highest precedence)

* / %

Multiply, divide, remainder. None of these operands may be applied to string operands, and remainder may be applied only to integers.

+ -

Add and subtract. Valid for any numeric operands.

<< >> <<< >>>

Left and right shift, left and right rotate. Valid for integer operands only.

NOTE The rotate operations are specific to Jim Tcl and operate on unsigned 32 bit integers, even if the native word size is 64 bits.

< > <= >=

Boolean less, greater, less than or equal, and greater than or equal. Each operator produces 1 if the condition is true, 0 otherwise. These operators may be applied to strings as well as numeric operands, in which case string comparison is used.

lt gt le ge

Boolean less, greater, less than or equal, and greater than or equal. Each operator produces 1 if the condition is true, 0 otherwise. These operators differ from the above in that they use string comparison for all operands, including numeric.

== !=

Boolean equal and not equal. Each operator produces a zero/one result. Valid for all operand types. Note that values will be converted to integers if possible, then floating point types, and finally strings will be compared. It is recommended that eq and ne should be used for string comparison.

eq ne

String equal and not equal. Uses the string value directly without attempting to convert to a number first.

=*

String glob match. The left and side is the string to match and the right and side is the pattern. See STRING MATCHING.

=~

String regexp match. The left and side is the string to match and the right and side is the regular expression. See REGULAR EXPRESSIONS.

in ni

String in list and not in list. For in, result is 1 if the left operand (as a string) is contained in the right operand (as a list), or 0 otherwise. The result for {$a ni $list} is equivalent to {!($a in $list)}.

&

Bit-wise AND. Valid for integer operands only.

|

Bit-wise OR. Valid for integer operands only.

^

Bit-wise exclusive OR. Valid for integer operands only.

&&

Logical AND. Produces a 1 result if both operands are non-zero, 0 otherwise. Valid for numeric operands only (integers or floating-point).

||

Logical OR. Produces a 0 result if both operands are zero, 1 otherwise. Valid for numeric operands only (integers or floating-point).

x ? y : z

If-then-else, as in C. If x evaluates to non-zero, then the result is the value of y. Otherwise the result is the value of z. The x operand must have a numeric value, while y and z can be of any type.

See the C manual for more details on the results produced by each operator. All of the binary operators group left-to-right within the same precedence level. For example, the expression

    4*2 < 7

evaluates to 0.

The &&, ||, and ?: operators have lazy evaluation, just as in C, which means that operands are not evaluated if they are not needed to determine the outcome. For example, in

    $v ? [a] : [b]

only one of [a] or [b] will actually be evaluated, depending on the value of $v.

All internal computations involving integers are done with the C type long long if available, or long otherwise, and all internal computations involving floating-point are done with the C type double.

When converting a string to floating-point, exponent overflow is detected and results in a Tcl error. For conversion to integer from string, detection of overflow depends on the behaviour of some routines in the local C library, so it should be regarded as unreliable. In any case, overflow and underflow are generally not detected reliably for intermediate results.

Conversion among internal representations for integer, floating-point, string operands is done automatically as needed. For arithmetic computations, integers are used until some floating-point number is introduced, after which floating-point is used. For example,

    5 / 4

yields the result 1, while

    5 / 4.0
    5 / ( [string length "abcd"] + 0.0 )

both yield the result 1.25.

String values may be used as operands of the comparison operators, although the expression evaluator tries to do comparisons as integer or floating-point when it can. If one of the operands of a comparison is a string and the other has a numeric value, the numeric operand is converted back to a string using the C sprintf format specifier %d for integers and %g for floating-point values. For example, the expressions

    "0x03" > "2"
    "0y" < "0x12"

both evaluate to 1. The first comparison is done using integer comparison, and the second is done using string comparison after the second operand is converted to the string 18.

In general it is safest to enclose an expression in braces when entering it in a command: otherwise, if the expression contains any white space then the Tcl interpreter will split it among several arguments. For example, the command

    expr $a + $b

results in three arguments being passed to expr: $a, +, and $b. In addition, if the expression isn’t in braces then the Tcl interpreter will perform variable and command substitution immediately (it will happen in the command parser rather than in the expression parser). In many cases the expression is being passed to a command that will evaluate the expression later (or even many times if, for example, the expression is to be used to decide when to exit a loop). Usually the desired goal is to re-do the variable or command substitutions each time the expression is evaluated, rather than once and for all at the beginning. For example, the command

    for {set i 1} $i<=10 {incr i} {...}        ** WRONG **

is probably intended to iterate over all values of i from 1 to 10. After each iteration of the body of the loop, for will pass its second argument to the expression evaluator to see whether or not to continue processing. Unfortunately, in this case the value of i in the second argument will be substituted once and for all when the for command is parsed. If i was 0 before the for command was invoked then the second argument of for will be 0<=10 which will always evaluate to 1, even though i eventually becomes greater than 10. In the above case the loop will never terminate. Instead, the expression should be placed in braces:

    for {set i 1} {$i<=10} {incr i} {...}      ** RIGHT **

This causes the substitution of i to be delayed; it will be re-done each time the expression is evaluated, which is the desired result.

LISTS

The third major way that strings are interpreted in Tcl is as lists. A list is just a string with a list-like structure consisting of fields separated by white space. For example, the string

    Al Sue Anne John

is a list with four elements or fields. Lists have the same basic structure as command strings, except that a newline character in a list is treated as a field separator just like space or tab. Conventions for braces and quotes and backslashes are the same for lists as for commands. For example, the string

    a b\ c {d e {f g h}}

is a list with three elements: a, b c, and d e {f g h}.

Whenever an element is extracted from a list, the same rules about braces and quotes and backslashes are applied as for commands. Thus in the example above when the third element is extracted from the list, the result is

    d e {f g h}

(when the field was extracted, all that happened was to strip off the outermost layer of braces). Command substitution and variable substitution are never made on a list (at least, not by the list-processing commands; the list can always be passed to the Tcl interpreter for evaluation).

The Tcl commands concat, foreach, lappend, lindex, linsert, list, llength, lrange, lreplace, lsearch, and lsort allow you to build lists, extract elements from them, search them, and perform other list-related functions.

Advanced list commands include lrepeat, lreverse, lmap, lassign, lset.

LIST EXPANSION

A new addition to Tcl 8.5 is the ability to expand a list into separate arguments. Support for this feature is also available in Jim.

Consider the following attempt to exec a list:

    set cmd {ls -l}
    exec $cmd

This will attempt to exec a command named "ls -l", which will clearly not work. Typically eval and concat are required to solve this problem, however it can be solved much more easily with \{*}.

    exec {*}$cmd

This will expand the following argument into individual elements and then evaluate the resulting command.

Note that the official Tcl syntax is \{*}, however {expand} is retained for backward compatibility with experimental versions of this feature.

REGULAR EXPRESSIONS

Jim Tcl provides two commands that support string matching using regular expressions, regexp and regsub, as well as switch -regexp and lsearch -regexp.

Regular expressions may be implemented one of two ways. Either using the system’s C library POSIX regular expression support, or using the built-in regular expression engine. The differences between these are described below.

NOTE Tcl 7.x and 8.x use perl-style Advanced Regular Expressions (ARE).

POSIX Regular Expressions

If the system supports POSIX regular expressions, and UTF-8 support is not enabled, this support will be used by default. The type of regular expressions supported are Extended Regular Expressions (ERE) rather than Basic Regular Expressions (BRE). See REG_EXTENDED in the documentation.

Using the system-supported POSIX regular expressions will typically make for the smallest code size, but some features such as UTF-8 and \w, \d, \s are not supported, and null characters in strings are not supported.

See regex(3) and regex(7) for full details.

Jim built-in Regular Expressions

The Jim built-in regular expression engine may be selected with ./configure --with-jim-regexp or it will be selected automatically if UTF-8 support is enabled.

This engine supports UTF-8 as well as some ARE features. The differences with both Tcl 7.x/8.x and POSIX are highlighted below.

  1. UTF-8 strings and patterns are both supported

  2. All Tcl character classes are supported (e.g. [:alnum:], [:digit:], [:space:]), but…

  3. Character classes apply to ASCII characters only

  4. Supported shorthand character classes: \w = [:alnum:], \W = ^[:alnum:], \d = [:digit:], \D = ^[:digit:], \s = [:space:], + \S = ^[:space:]

  5. Supported constraint escapes: \m = \< = start of word, \M = \> = end of word, \A = start of string, \Z = end of string

  6. Backslash escapes may be used within regular expressions, such as \n = newline, \uNNNN = unicode

  7. Support for the ? non-greedy quantifier. e.g. *?

  8. Support for non-capturing parentheses (?:…)

  9. Jim Tcl considers that both patterns and strings end at a null character (\x00)

  10. Jim Tcl does not support back references. e.g. \1

STRING MATCHING

A number of commands in Jim support C-shell style "glob matching", including string match, switch -glob, array names and others. This form of string matching works as follows:

A test occurs where a string is matched against a pattern. The match is considered successful if the contents of string and pattern are identical except that the following special sequences may appear in pattern:

*

Matches any sequence of characters in string, including an empty string.

?

Matches any single character in string.

[chars]

Matches any character in the set given by chars. If a sequence of the form x-y appears in chars, then any character between x and y, inclusive, will match.

\x

Matches the single character x. This provides a way of avoiding the special interpretation of the characters \*?[] in pattern.

COMMAND RESULTS

Each command produces two results: a code and a string. The code indicates whether the command completed successfully or not, and the string gives additional information. The valid codes are defined in jim.h, and are:

JIM_OK(0)

This is the normal return code, and indicates that the command completed successfully. The string gives the command’s return value.

JIM_ERR(1)

Indicates that an error occurred; the string gives a message describing the error.

JIM_RETURN(2)

Indicates that the return command has been invoked, and that the current procedure (or top-level command or source command) should return immediately. The string gives the return value for the procedure or command.

JIM_BREAK(3)

Indicates that the break command has been invoked, so the innermost loop should abort immediately. The string should always be empty.

JIM_CONTINUE(4)

Indicates that the continue command has been invoked, so the innermost loop should go on to the next iteration. The string should always be empty.

JIM_SIGNAL(5)

Indicates that a signal was caught while executing a commands. The string contains the name of the signal caught. See the signal and catch commands.

JIM_EXIT(6)

Indicates that the command called the exit command. The string contains the exit code.

JIM_USAGE(-1)

This is a special return code that is automatically translated into JIM_ERR with the command usage (from Jim_RegisterCommand()) as the message.

Tcl programmers do not normally need to think about return codes, since JIM_OK is almost always returned. If anything else is returned by a command, then the Tcl interpreter immediately stops processing commands and returns to its caller. If there are several nested invocations of the Tcl interpreter in progress, then each nested command will usually return the error to its caller, until eventually the error is reported to the top-level application code. The application will then display the error message for the user.

In a few cases, some commands will handle certain error conditions themselves and not return them upwards. For example, the for command checks for the JIM_BREAK code; if it occurs, then for stops executing the body of the loop and returns JIM_OK to its caller. The for command also handles JIM_CONTINUE codes and the procedure interpreter handles JIM_RETURN codes. The catch command allows Tcl programs to catch errors and handle them without aborting command interpretation any further.

The info returncodes command may be used to programmatically map between return codes and names.

PROCEDURES

Tcl allows you to extend the command interface by defining procedures. A Tcl procedure can be invoked just like any other Tcl command (it has a name and it receives one or more arguments). The only difference is that its body isn’t a piece of C code linked into the program; it is a string containing one or more other Tcl commands.

The proc command is used to create a new Tcl command procedure:

proc name arglist ?statics? body

The new command is named name, and it replaces any existing command there may have been by that name. Whenever the new command is invoked, the contents of body will be executed by the Tcl interpreter.

arglist specifies the formal arguments to the procedure. It consists of a list, possibly empty, of the following argument specifiers:

name

Required Argument - A simple argument name.

{name default}

Optional Argument - A two-element list consisting of the argument name, followed by the default value, which will be used if the corresponding argument is not supplied.

&name

Reference Argument - The caller is expected to pass the name of an existing variable. An implicit upvar 1 origname name is done to make the variable available in the proc scope.

args

Variable Argument - The special name args, which is assigned all remaining arguments (including none) as a list. The variable argument may only be specified once. Note that the syntax {args newname} may be used to retain the special behaviour of args with a different local name. In this case, the variable is named newname rather than args.

When the command is invoked, a local variable will be created for each of the formal arguments to the procedure; its value will be the value of corresponding argument in the invoking command or the argument’s default value.

Arguments with default values need not be specified in a procedure invocation. However, there must be enough actual arguments for all required arguments, and there must not be any extra actual arguments (unless the Variable Argument is specified).

Actual arguments are assigned to formal arguments as in left-to-right order with the following precedence.

  1. Required Arguments (including Reference Arguments)

  2. Optional Arguments

  3. Variable Argument

The following example illustrates precedence. Assume a procedure declaration:

    proc p {{a A} args b {c C} d} {...}

This procedure requires at least two arguments, but can accept an unlimited number. The following table shows how various numbers of arguments are assigned. Values marked as - are assigned the default value.

Number of arguments a args b c d

2

-

-

1

-

2

3

1

-

2

-

3

4

1

-

2

3

4

5

1

2

3

4

5

6

1

2,3

4

5

6

When body is being executed, variable names normally refer to local variables, which are created automatically when referenced and deleted when the procedure returns. One local variable is automatically created for each of the procedure’s arguments. Global variables can be accessed by invoking the global command or via the :: prefix.

New in Jim

In addition to procedure arguments, Jim procedures may declare static variables. These variables scoped to the procedure and initialised at procedure definition. Either from the static variable definition, or from the enclosing scope.

Consider the following example:

    . set a 1
    . proc a {} {a {b 2}} {
        set c 1
        puts "$a $b $c"
        incr a
        incr b
        incr c
    }
    . a
    1 2 1
    . a
    2 3 1

The static variable a has no initialiser, so it is initialised from the enclosing scope with the value 1. (Note that it is an error if there is no variable with the same name in the enclosing scope). However b has an initialiser, so it is initialised to 2.

Unlike a local variable, the value of a static variable is retained across invocations of the procedure.

In addition to static variables by value, static variables may also be defined by "reference" by using a leading "&" character. In this case, the statics point to the original variable and when one changes, they both change. For example, here a changes changes the value of the original x.

    . set x 1
    . proc a {} {&x} {
        incr x
    }
    . a
    2
    . a
    3
    . puts $x
    3

See the proc command for information on how to define procedures and what happens when they are invoked. See also NAMESPACES.

VARIABLES - SCALARS AND ARRAYS

Tcl allows the definition of variables and the use of their values either through $-style variable substitution, the set command, or a few other mechanisms.

Variables need not be declared: a new variable will automatically be created each time a new variable name is used.

Tcl supports two types of variables: scalars and arrays. A scalar variable has a single value, whereas an array variable can have any number of elements, each with a name (called its index) and a value.

Array indexes may be arbitrary strings; they need not be numeric. Parentheses are used refer to array elements in Tcl commands. For example, the command

    set x(first) 44

will modify the element of x whose index is first so that its new value is 44.

Two-dimensional arrays can be simulated in Tcl by using indexes that contain multiple concatenated values. For example, the commands

    set a(2,3) 1
    set a(3,6) 2

set the elements of a whose indexes are 2,3 and 3,6.

In general, array elements may be used anywhere in Tcl that scalar variables may be used.

If an array is defined with a particular name, then there may not be a scalar variable with the same name.

Similarly, if there is a scalar variable with a particular name then it is not possible to make array references to the variable.

To convert a scalar variable to an array or vice versa, remove the existing variable with the unset command.

The array command provides several features for dealing with arrays, such as querying the names of all the elements of the array and converting between an array and a list.

Variables may be either global or local. If a variable name is used when a procedure isn’t being executed, then it automatically refers to a global variable. Variable names used within a procedure normally refer to local variables associated with that invocation of the procedure. Local variables are deleted whenever a procedure exits. Either global command may be used to request that a name refer to a global variable for the duration of the current procedure (this is somewhat analogous to extern in C), or the variable may be explicitly scoped with the :: prefix. For example

    . set a 1
    . set b 2
    . proc p {} {
        set c 3
        global a

        puts "$a $::b $c"
    }
    . p

will output:

1 2 3

ARRAYS AS LISTS IN JIM

Unlike Tcl, Jim can automatically convert between a list (with an even number of elements) and an array value. This is similar to the way Tcl can convert between a string and a list.

For example:

  set a {1 one 2 two}
  puts $a(2)

will output:

  two

Thus array set is equivalent to set when the variable does not exist or is empty.

The reverse is also true where an array will be converted into a list.

  set a(1) one; set a(2) two
  puts $a

will output:

  1 one 2 two

DICTIONARY VALUES

Tcl 8.5 introduced the dict command, and Jim Tcl has added a version of this command. Dictionaries provide efficient access to key-value pairs, just like arrays, but dictionaries are pure values. This means that you can pass them to a procedure just as a list or a string. Tcl dictionaries are therefore much more like Tcl lists, except that they represent a mapping from keys to values, rather than an ordered sequence.

You can nest dictionaries, so that the value for a particular key consists of another dictionary. That way you can elegantly build complicated data structures, such as hierarchical databases. You can also combine dictionaries with other Tcl data structures. For instance, you can build a list of dictionaries that themselves contain lists.

Dictionaries are values that contain an efficient, order-preserving mapping from arbitrary keys to arbitrary values. Each key in the dictionary maps to a single value. They have a textual format that is exactly that of any list with an even number of elements, with each mapping in the dictionary being represented as two items in the list. When a command takes a dictionary and produces a new dictionary based on it (either returning it or writing it back into the variable that the starting dictionary was read from) the new dictionary will have the same order of keys, modulo any deleted keys and with new keys added on to the end. When a string is interpreted as a dictionary and it would otherwise have duplicate keys, only the last value for a particular key is used; the others are ignored, meaning that, "apple banana" and "apple carrot apple banana" are equivalent dictionaries (with different string representations).

Note that in Jim, arrays are implemented as dictionaries. Thus automatic conversion between lists and dictionaries applies as it does for arrays.

  . dict set a 1 one
  1 one
  . dict set a 2 two
  1 one 2 two
  . puts $a
  1 one 2 two
  . puts $a(2)
  two
  . dict set a 3 T three
  1 one 2 two 3 {T three}

See the dict command for more details.

NAMESPACES

Tcl added namespaces as a mechanism avoiding name clashes, especially in applications including a number of 3rd party components. While there is less need for namespaces in Jim Tcl (which does not strive to support large applications), it is convenient to provide a subset of the support for namespaces to easy porting code from Tcl.

Jim Tcl currently supports "light-weight" namespaces which should be adequate for most purposes. This feature is currently experimental. See README.namespaces for more information and the documentation of the namespace command.

GARBAGE COLLECTION, REFERENCES, LAMBDA FUNCTION

Unlike Tcl, Jim has some sophisticated support for functional programming. These are described briefly below.

More information may be found at http://wiki.tcl.tk/13847

References

A reference can be thought of as holding a value with one level of indirection, where the value may be garbage collected when unreferenced. Consider the following example:

    . set r [ref "One String" test]
    <reference.<test___>.00000000000000000000>
    . getref $r
    One String

The operation ref creates a references to the value specified by the first argument. (The second argument is a "type" used for documentation purposes).

The operation getref is the dereferencing operation which retrieves the value stored in the reference.

    . setref $r "New String"
    New String
    . getref $r
    New String

The operation setref replaces the value stored by the reference. If the old value is no longer accessible by any reference, it will eventually be automatically be garbage collected.

Garbage Collection

Normally, all values in Tcl are passed by value. As such values are copied and released automatically as necessary.

With the introduction of references, it is possible to create values whose lifetime transcend their scope. To support this, case, the Jim system will periodically identify and discard objects which are no longer accessible by any reference.

The collect command may be used to force garbage collection. Consider a reference created with a finalizer:

    . proc f {ref value} { puts "Finaliser called for $ref,$value" }
    . set r [ref "One String" test f]
    <reference.<test___>.00000000000
    . collect
    0
    . set r ""
    . collect
    Finaliser called for <reference.<test___>.00000000000,One String
    1

Note that once the reference, r, was modified so that it no longer contained a reference to the value, the garbage collector discarded the value (after calling the finalizer).

The finalizer for a reference may be examined or changed with the finalize command

    . finalize $r
    f
    . finalize $r newf
    newf

Lambda Function

Jim provides a garbage collected lambda function. This is a procedure which is able to create an anonymous procedure. Consider:

    . set f [lambda {a} {{x 0}} { incr x $a }]
    . $f 1
    1
    . $f 2
    3
    . set f ""

This create an anonymous procedure (with the name stored in f), with a static variable which is incremented by the supplied value and the result returned.

Once the procedure name is no longer accessible, it will automatically be deleted when the garbage collector runs.

The procedure may also be delete immediately by renaming it "". e.g.

    . rename $f ""

UTF-8 AND UNICODE

If Jim is built with UTF-8 support enabled (configure --enable-utf), then most string-related commands become UTF-8 aware. These include, but are not limited to, string match, split, glob, scan and format.

UTF-8 encoding has many advantages, but one of the complications is that characters can take a variable number of bytes. Thus the addition of string bytelength which returns the number of bytes in a string, while string length returns the number of characters.

If UTF-8 support is not enabled, all commands treat bytes as characters and string bytelength returns the same value as string length.

Note that even if UTF-8 support is not enabled, the \uNNNN and related syntax is still available to embed UTF-8 sequences.

Jim Tcl supports all currently defined unicode codepoints. That is 21 bits, up to +U+1FFFFF.

String Matching

Commands such as string match, lsearch -glob, array names and others use STRING MATCHING rules. These commands support UTF-8. For example:

  string match a\[\ua0-\ubf\]b "a\u00a3b"

format and scan

format %c allows a unicode codepoint to be be encoded. For example, the following will return a string with two bytes and one character. The same as \ub5

  format %c 0xb5

format respects widths as character widths, not byte widths. For example, the following will return a string with three characters, not three bytes.

  format %.3s \ub5\ub6\ub7\ub8

Similarly, scan … %c allows a UTF-8 to be decoded to a unicode codepoint. The following will set a to 181 (0xb5) and b to 65 (0x41).

  scan \u00b5A %c%c a b

scan %s will also accept a character class, including unicode ranges.

String Classes

string is has not been extended to classify UTF-8 characters. Therefore, the following will return 0, even though the string may be considered to be alphabetic.

  string is alpha \ub5Test

This does not affect the string classes ascii, control, digit, double, integer or xdigit.

Case Mapping and Conversion

Jim provides a simplified unicode case mapping. This means that case conversion and comparison will not increase or decrease the number of characters in a string. (Although it may change the number of bytes).

string toupper will convert any lowercase letters to their uppercase equivalent. Any character which is not a letter or has no uppercase equivalent is left unchanged. Similarly for string tolower and string totitle.

Commands which perform case insensitive matches, such as string compare -nocase and lsearch -nocase fold both strings to uppercase before comparison.

Invalid UTF-8 Sequences

Some UTF-8 character sequences are invalid, such as those beginning with 0xff, those which represent character sequences longer than 3 bytes (greater than U+FFFF), and those which end prematurely, such as a lone 0xc2.

In these situations, the offending bytes are treated as single characters. For example, the following returns 2.

  string bytelength \xff\xff

Regular Expressions

If UTF-8 support is enabled, the built-in regular expression engine will be selected which supports UTF-8 strings and patterns.

BUILT-IN COMMANDS

The Tcl library provides the following built-in commands, which will be available in any application using Tcl. In addition to these built-in commands, there may be additional commands defined by each application, plus commands defined as Tcl procedures.

In the command syntax descriptions below, words in boldface are literals that you type verbatim to Tcl.

Words in italics are meta-symbols; they serve as names for any of a range of values that you can type.

Optional arguments or groups of arguments are indicated by enclosing them in ?question-marks?.

Ellipses (...) indicate that any number of additional arguments or groups of arguments may appear, in the same format as the preceding argument(s).

alarm

alarm seconds

Delivers the SIGALRM signal to the process after the given number of seconds. If the platform supports ualarm(3) then the argument may be a floating point value. Otherwise it must be an integer.

Note that unless a signal handler for SIGALRM has been installed (see signal), the process will exit on this signal.

alias

alias name args...

Creates a single word alias (command) for one or more words. For example, the following creates an alias for the command info exists.

    alias e info exists
    if {[e var]} {
      ...
    }

alias returns name, allowing it to be used with local.

See also proc, curry, lambda, local, info alias, exists -alias

append

append varName value ?value value …?

Append all of the value arguments to the current value of variable varName. If varName doesn’t exist, it is given a value equal to the concatenation of all the value arguments.

This command provides an efficient way to build up long variables incrementally. For example, "append a $b" is much more efficient than "set a $a$b" if $a is long.

apply

apply lambdaExpr ?arg1 arg2 ...?

The command apply provides for anonymous procedure calls, similar to lambda, but without a command name being created, even temporarily.

The function lambdaExpr is a two element list, {args body} or a three element list, {args body namespace}. The first element args specifies the formal arguments in the same form as the proc and lambda commands.

array

array option arrayName ?arg...?

This command performs one of several operations on the variable given by arrayName.

Note that in general, if the named array does not exist, the array command behaves as though the array exists but is empty.

The option argument determines what action is carried out by the command. The legal options (which may be abbreviated) are:

array exists arrayName

Returns 1 if arrayName is an array variable, 0 if there is no variable by that name.

array get arrayName ?pattern?

Returns a list containing pairs of elements. The first element in each pair is the name of an element in arrayName and the second element of each pair is the value of the array element. The order of the pairs is undefined. If pattern is not specified, then all of the elements of the array are included in the result. If pattern is specified, then only those elements whose names match pattern (using STRING MATCHING rules) are included. If arrayName isn’t the name of an array variable, or if the array contains no elements, then an empty list is returned.

array names arrayName ?pattern?

Returns a list containing the names of all of the elements in the array that match pattern. If pattern is omitted then the command returns all of the element names in the array. If pattern is specified, then only those elements whose names match pattern (using STRING MATCHING rules) are included. If there are no (matching) elements in the array, or if arrayName isn’t the name of an array variable, then an empty string is returned.

array set arrayName list

Sets the values of one or more elements in arrayName. list must have a form like that returned by array get, consisting of an even number of elements. Each odd-numbered element in list is treated as an element name within arrayName, and the following element in list is used as a new value for that array element. If the variable arrayName does not already exist and list is empty, arrayName is created with an empty array value.

array size arrayName

Returns the number of elements in the array. If arrayName isn’t the name of an array then 0 is returned.

array unset arrayName ?pattern?

Unsets all of the elements in the array that match pattern (using STRING MATCHING rules). If arrayName isn’t the name of an array variable or there are no matching elements in the array, no error will be raised. If pattern is omitted and arrayName is an array variable, then the command unsets the entire array. The command always returns an empty string.

break

break ?n?

This command may be invoked only inside the body of a loop command such as for, foreach, while or loop. It returns a JIM_BREAK code to signal the innermost containing loop command to return immediately.

If n is given it breaks out of that many loops. break 1 is equivalent to a simple break while in the following example, break will exit both loops.

    loop i 5 {
        loop j 6 {
            if {$i == 3 && $j == 2} {
                break 2
            }
        }
    }

case

The obsolete case command has been removed from Jim Tcl since v0.75. Use switch instead.

catch

catch ?-?no?code ...? ?--? command ?resultVarName? ?optionsVarName?

The catch command may be used to prevent errors from aborting command interpretation. catch evaluates command, and returns a JIM_OK code, regardless of any errors that might occur while executing command (with the possible exception of JIM_SIGNAL - see below).

The return value from catch is a decimal string giving the code returned by the Tcl interpreter after executing command. This will be 0 (JIM_OK) if there were no errors in command; otherwise it will have a non-zero value corresponding to one of the exceptional return codes (see jim.h for the definitions of code values, or the info returncodes command).

If the resultVarName argument is given, then it gives the name of a variable; catch will set the value of the variable to the string returned from command (either a result or an error message).

If the optionsVarName argument is given, then it gives the name of a variable; catch will set the value of the variable to a dictionary. For any return code other than JIM_RETURN, the value for the key -code will be set to the return code. For JIM_RETURN it will be set to the code given in return -code. Additionally, for the return code JIM_ERR, the value of the key -errorinfo will contain the current stack trace (the same result as info stacktrace), the value of the key -errorcode will contain the same value as the global variable $::errorCode, and the value of the key -level will be the current return level (see return -level). This can be useful to rethrow an error:

    if {[catch {...} msg opts]} {
        ...maybe do something with the error...
        incr opts(-level)
        return {*}$opts $msg
    }

Normally catch will not catch any of the codes JIM_EXIT, JIM_EVAL or JIM_SIGNAL. The set of codes which will be caught may be modified by specifying the one more codes before command.

e.g. To catch JIM_EXIT but not JIM_BREAK or JIM_CONTINUE

    catch -exit -nobreak -nocontinue -- { ... }

The use of -- is optional. It signifies that no more return code options follow.

Note that if a signal marked as signal handle is caught with catch -signal, the return value (stored in resultVarName) is name of the signal caught.

cd

cd dirName

Change the current working directory to dirName.

Returns an empty string.

This command can potentially be disruptive to an application, so it may be removed in some applications.

clock

clock seconds

Returns the current time as seconds since the epoch.

clock clicks

Returns the current time in "clicks", a system-dependent, high-resolution time.

clock microseconds

Returns the current time in microseconds.

clock milliseconds

Returns the current time in milliseconds.

clock format seconds ?-format format? ?-gmt boolean?

Format the given time (seconds since the epoch) according to the given format. See strftime(3) for supported formats. If no format is supplied, "%c" is used.

If boolean is true, processing is performed in UTC. If boolean is false (the default), processing is performed in the local time zone.

clock scan str -format format ?-gmt boolean?

Scan the given time string using the given format string. See strptime(3) for supported formats. See clock format for the handling of -gmt.

NOTE Some systems such as 32-bit Linux have only a 32-bit time_t, and are therefore not year 2038 compliant.

close

close fileId

Tcl-compatible version of fileId close

See aio close

collect

collect

Normally reference garbage collection is automatically performed periodically. However it may be run immediately with the collect command.

See GARBAGE COLLECTION for more detail.

concat

concat arg ?arg ...?

This command treats each argument as a list and concatenates them into a single list. It permits any number of arguments. For example, the command

    concat a b {c d e} {f {g h}}

will return

    a b c d e f {g h}

as its result.

continue

continue ?n?

This command may be invoked only inside the body of a loop command such as for, foreach, while or loop. It returns a JIM_CONTINUE code to signal the innermost containing loop command to skip the remainder of the loop’s body but continue with the next iteration of the loop.

If n is given it breaks out of n-1 loops and then continues the nth loop. continue 1 is equivalent to a simple continue. (See also break).

curry

curry args...

Similar to alias except it creates an anonymous procedure (lambda) instead of a named procedure.

The following creates a local, unnamed alias for the command info exists.

    set e [local curry info exists]
    if {[$e var]} {
      ...
    }

curry returns the name of the procedure.

See also proc, alias, lambda, local.

defer

defer script

This command is a simple helper command to add a script to the $jim::defer variable that will run when the current proc or interpreter exits. For example:

    . proc a {} { defer {puts "Leaving a"}; puts "Exit" }
    . a
    Exit
    Leaving a

If the $jim::defer variable exists, it is treated as a list of scripts to run when the proc or interpreter exits.

dict

dict option ?arg...?

Performs one of several operations on dictionary values.

The option argument determines what action is carried out by the command. The legal options are:

dict append dictionaryName key ?string …?

This appends the given string (or strings) to the value that the given key maps to in dictionaryName. Non-existent keys are treated as if they map to an empty string.

dict create ?key value ...?

Create and return a new dictionary value that contains each of the key/value mappings listed as arguments (keys and values alternating, with each key being followed by its associated value.)

dict exists dictionary key ?key ...?

Returns a boolean value indicating whether the given key (or path of keys through a set of nested dictionaries) exists in the given dictionary value. This returns a true value exactly when dict get on that path will succeed.

dict for {keyvar valuevar} dictionary script

TBD

dict get dictionary ?key ...?

Given a dictionary value (first argument) and a key (second argument), this will retrieve the value for that key. Where several keys are supplied, the behaviour of the command shall be as if the result of "dict get $dictVal $key" was passed as the first argument to dict get with the remaining arguments as second (and possibly subsequent) arguments. This facilitates lookups in nested dictionaries. If no keys are provided, dict would return a list containing pairs of elements in a manner similar to array get. That is, the first element of each pair would be the key and the second element would be the value for that key. It is an error to attempt to retrieve a value for a key that is not present in the dictionary.

dict getdef dictionary ?key ...? key default

Alias for dict getwithdefault.

dict getwithdefault dictionary ?key ...? key default

Similar to dict get except if no value exists in the dictionary for the give key(s), returns default instead.

dict incr dictionaryName key ?increment?

This adds the given increment value (an integer that defaults to 1 if not specified) to the value that the given key maps to in dictionaryName. Non-existent keys are treated as if they map to 0. It is an error to increment a value for an existing key if that value is not an integer.

dict info dictionary

Returns some information about the utilisation of the data within the hashtable that represents dictionary.

dict keys dictionary ?pattern?

Returns a list of the keys in the dictionary. If pattern is specified, then only those keys whose names match pattern (using STRING MATCHING rules) are included.

dict lappend dictionaryName key ?value …?

This appends the given items to the list value that the given key maps to in dictionaryName. Non-existent keys are treated as if they map to the empty list.

dict merge ?dictionary ...?

Return a dictionary that contains the contents of each of the dictionary arguments. Where two (or more) dictionaries contain a mapping for the same key, the resulting dictionary maps that key to the value according to the last dictionary on the command line containing a mapping for that key.

dict replace dictionary ?key value …?

Return a new dictionary that is a copy of dictionary except with some values different or some extra key/value pairs added. It is legal for this command to be called with no key/value pairs, but illegal for this command to be called with a key but no value.

dict set dictionaryName key ?key ...? value

This operation takes the name of a variable containing a dictionary value and places an updated dictionary value in that variable containing a mapping from the given key to the given value. When multiple keys are present, this operation creates or updates a chain of nested dictionaries.

dict size dictionary

Return the number of key/value mappings in the given dictionary value.

dict unset dictionaryName key ?key ...? value

This operation (the companion to dict set) takes the name of a variable containing a dictionary value and places an updated dictionary value in that variable that does not contain a mapping for the given key. Where multiple keys are present, this describes a path through nested dictionaries to the mapping to remove. At least one key must be specified, but the last key on the key-path need not exist. All other components on the path must exist.

dict update dictionaryName key varName ?key VarName …? script

TBD

dict values dictionary ?globPattern?

Return a list of all values in dictionary. If a pattern is supplied, only those values that match it (according to the rules of string match) will be returned. The returned values will be in the order of that the keys associated with those values were inserted into the dictionary.

dict with dictionaryName key ?key ...? script

Execute the Tcl script in script with the value for each key in dictionaryName mapped to a variable with the same name. Where one or more keys are given, these indicate a chain of nested dictionaries, with the innermost dictionary being the one opened out for the execution of body. Making dictionaryName unreadable will make the updates to the dictionary be discarded, and this also happens if the contents of dictionaryName are adjusted so that the chain of dictionaries no longer exists. The result of dict with is (unless some kind of error occurs) the result of the evaluation of body.

The variables are mapped in the scope enclosing the dict with; it is recommended that this command only be used in a local scope (procedure). Because of this, the variables set by dict with will continue to exist after the command finishes (unless explicitly unset). Note that changes to the contents of dictionaryName only happen when script terminates.

ensemble

ensemble name ?-automap? prefix

Create a single ensemble command that redirects to individual commands based on the prefix. By default, the prefix is name followed by a single space.

For example, consider:

    proc {test open} {name} { ... }
    proc {test close} {handle} { ... }
    proc {test show} {handle} { ... }
    ensemble test

Now the test command has been created that redirects based on the first argument. e.g. test open $filename ⇒ {test open} $filename

env

env ?name? ?default?

If name is supplied, returns the value of name from the initial environment (see getenv(3)). An error is returned if name does not exist in the environment, unless default is supplied - in which case that value is returned instead.

If no arguments are supplied, returns a list of all environment variables and their values as {name value ...}

See also the global variable ::env

eof

eof fileId

Tcl-compatible alternative to fileId eof

See aio eof

error

error message ?stacktrace?

Returns a JIM_ERR code, which causes command interpretation to be unwound. message is a string that is returned to the application to indicate what went wrong.

If the stacktrace argument is provided and is non-empty, it is used to initialize the stacktrace.

This feature is most useful in conjunction with the catch command: if a caught error cannot be handled successfully, stacktrace can be used to return a stack trace reflecting the original point of occurrence of the error:

    catch {...} errMsg
    ...
    error $errMsg [info stacktrace]

See also errorInfo, info stacktrace, catch and return

errorInfo

errorInfo error ?stacktrace?

Returns a human-readable representation of the given error message and stack trace. Typical usage is:

    if {[catch {...} error]} {
        puts stderr [errorInfo $error [info stacktrace]]
        exit 1
    }

See also error.

eval

eval arg ?arg...?

eval takes one or more arguments, which together comprise a Tcl command (or collection of Tcl commands separated by newlines in the usual way). eval concatenates all its arguments in the same fashion as the concat command, passes the concatenated string to the Tcl interpreter recursively, and returns the result of that evaluation (or any error generated by it).

exec

exec arg ?arg...?

exec | {cmdlist ...} ?redirection ...?

This command treats its arguments as the specification of one or more UNIX commands to execute as subprocesses. The commands take the form of a standard shell pipeline; | arguments separate commands in the pipeline and cause standard output of the preceding command to be piped into standard input of the next command (or |& for both standard output and standard error).

Under normal conditions the result of the exec command consists of the standard output produced by the last command in the pipeline followed by the standard error output.

If any of the commands writes to its standard error file, then this will be included in the result after the standard output of the last command.

Note that unlike Tcl, data written to standard error does not cause exec to return an error.

If any of the commands in the pipeline exit abnormally or are killed or suspended, then exec will return an error. If no standard error output was produced, or is redirected, the error message will include the normal result, as above, followed by error messages describing the abnormal terminations.

If any standard error output was produced, these abnormal termination messages are suppressed.

If the last character of the result or error message is a newline then that character is deleted from the result or error message for consistency with normal Tcl return values.

An arg (or redirection in the second form) may have one of the following special forms:

>filename

The standard output of the last command in the pipeline is redirected to the file. In this situation exec will normally return an empty string.

>>filename

As above, but append to the file.

>@fileId

The standard output of the last command in the pipeline is redirected to the given (writable) file descriptor (e.g. stdout, stderr, or the result of open). In this situation exec will normally return an empty string.

2>filename

The standard error of all commands in the pipeline is redirected to the file.

2>>filename

As above, but append to the file.

2>@fileId

The standard error of all commands in the pipeline is redirected to the given (writable) file descriptor.

2>@1

The standard error of all commands in the pipeline is redirected command output.

>&filename

Both standard output from the last command and standard error from all commands in the pipeline are redirected to the file.

>>&filename

As above, but append to the file.

<filename

The standard input of the first command in the pipeline is taken from the file.

<<string

The standard input of the first command is taken as the given immediate value.

<@fileId

The standard input of the first command in the pipeline is taken from the given (readable) file descriptor.

Note that any of the forms that take an argument (filename, fileId or string) their argument may be a separate word. e.g. << $str.

If there is no redirection of standard input, standard error or standard output, these are connected to the corresponding input or output of the application.

If the last arg or redirection is & then the command will be executed in background. In this case the standard output from the last command in the pipeline will go to the application’s standard output unless redirected in the command, and error output from all the commands in the pipeline will go to the application’s standard error file. The return value of exec in this case is a list of process ids (pids) in the pipeline.

Each arg becomes one word for a command, except for |, <, <<, >, and & arguments, and the arguments that follow <, <<, and >.

In the second form, cmdlist is the command list, so there is no ambiguity about whether an argument or a redirection. Note that this second form is not currently supported by Tcl.

The first word in each command is taken as the command name; the directories in the PATH environment variable are searched for an executable by the given name.

No glob expansion or other shell-like substitutions are performed on the arguments to commands.

If the command fails, the global $::errorCode (and the -errorcode option in catch) will be set to a list, as follows:

CHILDKILLED pid sigName msg

This format is used when a child process has been killed because of a signal. The pid element will be the process’s identifier (in decimal). The sigName element will be the symbolic name of the signal that caused the process to terminate; it will be one of the names from the include file signal.h, such as SIGPIPE. The msg element will be a short human-readable message describing the signal, such as "write on pipe with no readers" for SIGPIPE.

CHILDSUSP pid sigName msg

This format is used when a child process has been suspended because of a signal. The pid element will be the process’s identifier, in decimal. The sigName element will be the symbolic name of the signal that caused the process to suspend; this will be one of the names from the include file signal.h, such as SIGTTIN. The msg element will be a short human-readable message describing the signal, such as "background tty read" for SIGTTIN.

CHILDSTATUS pid code

This format is used when a child process has exited with a non-zero exit status. The pid element will be the process’s identifier (in decimal) and the code element will be the exit code returned by the process (also in decimal).

The environment for the executed command is set from $::env (unless this variable is unset, in which case the original environment is used).

exists

exists ?-var|-proc|-command|-alias|-channel? name

Checks the existence of the given variable, procedure, command, alias or channel respectively and returns 1 if it exists or 0 if not. This command provides a more simplified/convenient version of info exists, info procs, info commands, info aliases and info channels.

If the type is omitted, a type of -var is used. The type may be abbreviated.

exit

exit ?returnCode?

Terminate the process, returning returnCode to the parent as the exit status.

If returnCode isn’t specified then it defaults to 0.

Note that exit can be caught with catch.

expr

expr arg

Calls the expression processor to evaluate arg, and returns the result as a string. See the section EXPRESSIONS above.

Note that Jim supports a shorthand syntax for expr as $(...) The following two are identical.

  set x [expr {3 * 2 + 1}]
  set x $(3 * 2 + 1)

However, note that the expr shorthand syntax may not be nested in an expression. This is to prevent the common mistake of writing:

  if {$(1 + 2) == 3} {
    ...
  }

rather than:

  if {(1 + 2) == 3} {
    ...
  }

file

file option name ?arg...?

Operate on a file or a file name. name is the name of a file.

option indicates what to do with the file name. Any unique abbreviation for option is acceptable. The valid options are:

file atime name

Return a decimal string giving the time at which file name was last accessed. The time is measured in the standard UNIX fashion as seconds from a fixed starting time (often January 1, 1970). If the file doesn’t exist or its access time cannot be queried then an error is generated.

file copy ?-force? source target

Copies file source to file target. The source file must exist. The target file must not exist, unless -force is specified.

file delete ?-force? ?--? name...

Deletes file or directory name. If the file or directory doesn’t exist, nothing happens. If it can’t be deleted, an error is generated. Non-empty directories will not be deleted unless the -force options is given. In this case no errors will be generated, even if the file/directory can’t be deleted. Use -- if there is any possibility of the first name being -force.

file dirname name

Return all of the characters in name up to but not including the last slash character. If there are no slashes in name then return . (a single dot). If the last slash in name is its first character, then return /.

file executable name

Return 1 if file name is executable by the current user, 0 otherwise.

file exists name

Return 1 if file name exists and the current user has search privileges for the directories leading to it, 0 otherwise.

file extension name

Return all of the characters in name after and including the last dot in name. If there is no dot in name then return the empty string.

file isdirectory name

Return 1 if file name is a directory, 0 otherwise.

file isfile name

Return 1 if file name is a regular file, 0 otherwise.

file join arg...

Joins multiple path components. Note that if any components is an absolute path, the preceding components are ignored. Thus "file join /tmp /root" returns "/root".

file link ?-hard|-symbolic? newname target

Creates a hard link (default) or symbolic link from newname to target. Note that the sense of this command is the opposite of file rename and file copy and also of ln, but this is compatible with Tcl. An error is returned if target doesn’t exist or newname already exists.

file lstat name varName

Same as stat option (see below) except uses the lstat kernel call instead of stat. This means that if name refers to a symbolic link the information returned in varName is for the link rather than the file it refers to. On systems that don’t support symbolic links this option behaves exactly the same as the stat option.

file mkdir dir1 ?dir2...?

Creates each directory specified. For each pathname dir specified, this command will create all non-existing parent directories as well as dir itself. If an existing directory is specified, then no action is taken and no error is returned. Trying to overwrite an existing file with a directory will result in an error. Arguments are processed in the order specified, halting at the first error, if any.

file mtime name ?time?

Return a decimal string giving the time at which file name was last modified. The time is measured in the standard UNIX fashion as seconds from a fixed starting time (often January 1, 1970). If the file doesn’t exist or its modified time cannot be queried then an error is generated. If time is given, sets the modification time of the file to the given value.

file mtimeus name ?time_us?

As for file mtime except the time value is in microseconds since the epoch (see also clock microseconds). Note that some platforms and some filesystems don’t support high resolution timestamps for files.

file normalize name

Return the normalized path of name. See realpath(3).

file owned name

Return 1 if file name is owned by the current user, 0 otherwise.

file readable name

Return 1 if file name is readable by the current user, 0 otherwise.

file readlink name

Returns the value of the symbolic link given by name (i.e. the name of the file it points to). If name isn’t a symbolic link or its value cannot be read, then an error is returned. On systems that don’t support symbolic links this option is undefined.

file rename ?-force? oldname newname

Renames the file from the old name to the new name. If newname already exists, an error is returned unless -force is specified.

file rootname name

Return all of the characters in name up to but not including the last . character in the name. If name doesn’t contain a dot, then return name.

file size name

Returns the size, in bytes, of the file name.

file split name

Returns a list whose elements are the path components in name. The first element of the list will have the same path type as name. All other elements will be relative. Path separators will be discarded.

file stat name ?varName?

Invoke the stat kernel call on name, and return the result as a dictionary with the following keys: atime, ctime, dev, gid, ino, mode, mtime, nlink, size, type, uid, mtimeus (if supported - see file mtimeus) Each element except type is a decimal string with the value of the corresponding field from the stat return structure; see the manual entry for stat for details on the meanings of the values. The type element gives the type of the file in the same form returned by the command file type. If varName is specified, it is taken to be the name of an array variable and the values are also stored into the array.

file tail name

Return all of the characters in name after the last slash. If name contains no slashes then return name.

file tempfile ?template?

Creates and returns the name of a unique temporary file. If template is omitted, a default template will be used to place the file in /tmp. See mkstemp(3) for the format of the template and security concerns.

file type name

Returns a string giving the type of file name, which will be one of file, directory, characterSpecial, blockSpecial, fifo, link, or socket.

file writable name

Return 1 if file name is writable by the current user, 0 otherwise.

The file commands that return 0/1 results are often used in conditional or looping commands, for example:

    if {![file exists foo]} {
        error {bad file name}
    } else {
        ...
    }

finalize

finalize reference ?command?

If command is omitted, returns the finalizer command for the given reference.

Otherwise, sets a new finalizer command for the given reference. command may be the empty string to remove the current finalizer.

The reference must be a valid reference create with the ref command.

See GARBAGE COLLECTION for more detail.

flush

flush fileId

Tcl-compatible alternative to fileId flush

See aio flush

for

for start test next body

for is a looping command, similar in structure to the C for statement. The start, next, and body arguments must be Tcl command strings, and test is an expression string.

The for command first invokes the Tcl interpreter to execute start. Then it repeatedly evaluates test as an expression; if the result is non-zero it invokes the Tcl interpreter on body, then invokes the Tcl interpreter on next, then repeats the loop. The command terminates when test evaluates to 0.

If a continue command is invoked within body then any remaining commands in the current execution of body are skipped; processing continues by invoking the Tcl interpreter on next, then evaluating test, and so on.

If a break command is invoked within body or next, then the for command will return immediately.

The operation of break and continue are similar to the corresponding statements in C.

for returns an empty string.

foreach

foreach varName list body

foreach varList list ?varList2 list2 ...? body

In this command, varName is the name of a variable, list is a list of values to assign to varName, and body is a collection of Tcl commands.

For each field in list (in order from left to right), foreach assigns the contents of the field to varName (as if the lindex command had been used to extract the field), then calls the Tcl interpreter to execute body.

If instead of being a simple name, varList is used, multiple assignments are made each time through the loop, one for each element of varList.

For example, if there are two elements in varList and six elements in the list, the loop will be executed three times.

If the length of the list doesn’t evenly divide by the number of elements in varList, the value of the remaining variables in the last iteration of the loop are undefined.

The break and continue statements may be invoked inside body, with the same effect as in the for command.

foreach returns an empty string.

format

format formatString ?arg ...?

This command generates a formatted string in the same way as the C sprintf procedure (it uses sprintf in its implementation). formatString indicates how to format the result, using % fields as in sprintf, and the additional arguments, if any, provide values to be substituted into the result.

All of the sprintf options are valid; see the sprintf man page for details. Each arg must match the expected type from the % field in formatString; the format command converts each argument to the correct type (floating, integer, etc.) before passing it to sprintf for formatting.

The only unusual conversion is for %c; in this case the argument must be a decimal string, which will then be converted to the corresponding ASCII (or UTF-8) character value.

In addition, Jim Tcl provides basic support for conversion to binary with %b.

format does backslash substitution on its formatString argument, so backslash sequences in formatString will be handled correctly even if the argument is in braces.

The return value from format is the formatted string.

getref

getref reference

Returns the string associated with reference. The reference must be a valid reference create with the ref command.

See GARBAGE COLLECTION for more detail.

gets

gets fileId ?varName?

Tcl-compatible alterative version of fileId gets ?varName?

See aio gets

glob

glob ?-nocomplain? ?-directory dir? ?-tails? ?--? pattern ?pattern ...?

This command performs filename globbing, using csh rules. The returned value from glob is the list of expanded filenames.

If -nocomplain is specified as the first argument then an empty list may be returned; otherwise an error is returned if the expanded list is empty. The -nocomplain argument must be provided exactly: an abbreviation will not be accepted.

If -directory is given, the dir is understood to contain a directory name to search in. This allows globbing inside directories whose names may contain glob-sensitive characters. The returned names include the directory name unless -tails is specified.

If -tails is specified, along with -directory, the returned names are relative to the given directory.

global

global varName ?varName ...?

This command is ignored unless a Tcl procedure is being interpreted. If so, then it declares each given varName to be a global variable rather than a local one. For the duration of the current procedure (and only while executing in the current procedure), any reference to varName will be bound to a global variable instead of a local one.

An alternative to using global is to use the :: prefix to explicitly name a variable in the global scope.

if

if expr1 ?then? body1 elseif expr2 ?then? body2 elseif ... ?else? ?bodyN?

The if command evaluates expr1 as an expression (in the same way that expr evaluates its argument). The value of the expression must be numeric; if it is non-zero then body1 is executed by passing it to the Tcl interpreter.

Otherwise expr2 is evaluated as an expression and if it is non-zero then body2 is executed, and so on.

If none of the expressions evaluates to non-zero then bodyN is executed.

The then and else arguments are optional "noise words" to make the command easier to read.

There may be any number of elseif clauses, including zero. bodyN may also be omitted as long as else is omitted too.

The return value from the command is the result of the body script that was executed, or an empty string if none of the expressions was non-zero and there was no bodyN.

incr

incr varName ?increment?

Increment the value stored in the variable whose name is varName. The value of the variable must be integral.

If increment is supplied then its value (which must be an integer expression) is added to the value of variable varName; otherwise 1 is added to varName.

The new value is stored as a decimal string in variable varName and also returned as result.

If the variable does not exist, the variable is implicitly created and set to 0 first.

info

info option ?arg...?

Provide information about various internals to the Tcl interpreter. The legal option's (which may be abbreviated) are:

info args procname

Returns a list containing the names of the arguments to procedure procname, in order. procname must be the name of a Tcl command procedure.

info alias command

command must be an alias created with alias. In which case the target command and arguments, as passed to alias are returned. See exists -alias

info aliases ?-all? ?pattern?

Returns a list of alias commands. See info commands for the meaning of -all and pattern.

info body procname

Returns the body of procedure procname. procname must be the name of a Tcl command procedure.

info channels ?-all? ?pattern?

Returns a list of open file handles from open or socket. See info commands for the meaning of -all and pattern.

info commands ?-all? ?pattern?

If pattern isn’t specified, returns a list of names of all the Tcl commands, including both the built-in commands written in C and the command procedures defined using the proc command (including aliases and channels). If pattern is specified, only those names matching pattern (using STRING MATCHING rules) are returned. Normally commands containing a space character are not returned. If -all is given, the result does include these commands.

info complete command ?missing?

Returns 1 if command is a complete Tcl command in the sense of having no unclosed quotes, braces, brackets or array element names, If the command doesn’t appear to be complete then 0 is returned. This command is typically used in line-oriented input environments to allow users to type in commands that span multiple lines; if the command isn’t complete, the script can delay evaluating it until additional lines have been typed to complete the command. If varName is specified, the missing character is stored in the variable with that name.

info exists varName

Returns 1 if the variable named varName exists in the current context (either as a global or local variable), returns 0 otherwise.

info frame ?number?

Note: This command has changed as of Jim version 0.82 to be more Tcl-compatible.

If number is not specified, this command returns a number giving the evaluation level of the invoking command (1 when invoked a the top level).

If number is positive then it selects a particular evaluation level (1 refers to the top-most evaluation level, 2 to the command it called, and so on); otherwise it gives a level relative to the current evaluation level (0 refers to the current command (info frame), -1 to its caller, and so on). In this case, the command returns a dictionary containing the folllowing keys:

type - always "source"

file - file name where the command was invoked (may be empty if not known)

line - line number where the command was invoked (may be 0 if not known)

cmd - the command (as a list) executing at the given level

proc - if within a proc, the name of the proc (omitted if not within a proc)

level - the evaluation level

info globals ?pattern?

If pattern isn’t specified, returns a list of all the names of currently-defined global variables. If pattern is specified, only those names matching pattern (using STRING MATCHING rules) are returned.

info hostname

An alias for os.gethostname for compatibility with Tcl 6.x

info level ?number?

If number is not specified, this command returns a number giving the stack level of the invoking procedure, or 0 if the command is invoked at top-level. If number is specified, then the result is a list consisting of the name and arguments for the procedure call at level number on the stack. If number is positive then it selects a particular stack level (1 refers to the top-most active procedure, 2 to the procedure it called, and so on); otherwise it gives a level relative to the current level (0 refers to the current procedure, -1 to its caller, and so on). See the uplevel command for more information on what stack levels mean.

info locals ?pattern?

If pattern isn’t specified, returns a list of all the names of currently-defined local variables, including arguments to the current procedure, if any. Variables defined with the global and upvar commands will not be returned. If pattern is specified, only those names matching pattern (using STRING MATCHING rules) are returned.

info nameofexecutable

Returns the name of the binary file from which the application was invoked. A full path will be returned, unless the path can’t be determined, in which case the empty string will be returned.

info patchlevel

Returns the build (git) version if available. Otherwise returns the same as info version.

info procs ?-all? ?pattern?

Returns a list containing the names of Tcl command procedures. See info commands for the meaning of -all and pattern.

info references

Returns a list of all references which have not yet been garbage collected.

info returncodes ?code?

Returns a list representing the mapping of standard return codes to names. e.g. {0 ok 1 error 2 return ...}. If a code is given, instead returns the name for the given code.

info script

If a Tcl script file is currently being evaluated (i.e. there is a call to Jim_EvalFile active or there is an active invocation of the source command), then this command returns the name of the innermost file being processed. Otherwise the command returns an empty string.

info source script ?filename line?

With a single argument, returns the original source location of the given script as a list of {filename linenumber}. If the source location can’t be determined, the list {{} 0} is returned. If filename and line are given, returns a copy of script with the associate source information. This can be useful to produce useful messages from eval, etc. if the original source information may be lost.

info stacktrace

After an error is caught with catch, returns the stack trace as a list of {procedure filename line cmd ...}.

info statics procname

Returns a dictionary of the static variables of procedure procname. procname must be the name of a Tcl command procedure. An empty dictionary is returned if the procedure has no static variables.

info tainted str

Returns 1 if the value is tainted, or 0 if not.

info usage command

Returns the usage for the given command. For Tcl command procedures, this is based on the arguments defined for the procedure. For a C command, this is the command usage that was specificied when the command was registered.

info version

Returns the version number for this version of Jim in the form x.yy.

info vars ?pattern?

If pattern isn’t specified, returns a list of all the names of currently-visible variables, including both locals and currently-visible globals. If pattern is specified, only those names matching pattern (using STRING MATCHING rules) are returned.

join

join list ?joinString?

The list argument must be a valid Tcl list. This command returns the string formed by joining all of the elements of list together with joinString separating each adjacent pair of elements.

The joinString argument defaults to a space character.

kill

kill ?SIG|-0? pid

Sends the given signal to the process identified by pid.

The signal may be specified by name or number in one of the following forms:

  • TERM

  • SIGTERM

  • -TERM

  • 15

  • -15

The signal name may be in either upper or lower case.

The special signal name -0 simply checks that a signal could be sent.

If no signal is specified, SIGTERM is used.

An error is raised if the signal could not be delivered.

lambda

lambda args ?statics? body

The lambda command is identical to proc, except rather than creating a named procedure, it creates an anonymous procedure and returns the name of the procedure.

See proc and GARBAGE COLLECTION for more detail.

lappend

lappend varName value ?value value ...?

Treat the variable given by varName as a list and append each of the value arguments to that list as a separate element, with spaces between elements.

If varName doesn’t exist, it is created as a list with elements given by the value arguments. lappend is similar to append except that each value is appended as a list element rather than raw text.

This command provides a relatively efficient way to build up large lists. For example,

    lappend a $b

is much more efficient than

    set a [concat $a [list $b]]

when $a is long.

lassign

lassign list varName ?varName ...?

This command treats the value list as a list and assigns successive elements from that list to the variables given by the varName arguments in order. If there are more variable names than list elements, the remaining variables are set to the empty string. If there are more list elements than variables, a list of unassigned elements is returned.

    . lassign {1 2 3} a b; puts a=$a,b=$b
    3
    a=1,b=2

lsubst

lsubst ?-line? string

This command is similar to list in that it creates a list, but uses the same rules as scripts when constructing the elements of the list. It is somewhat similar to subst except it produces a list instead of a string.

This means that variables are substituted, commands are evaluated, backslashes are interpreted, the expansion operator is applied and comments are skipped.

Consider the following example.

--- set x 1 set y {2 3} set z 3 lsubst { # This is a list with interpolation $x; # The x variable {}$y; # The y variable expanded [string cat a b c]; # A command {}[list 4 5]; # A list expanded into multiple elements "$z$z"; # A string with interpolation } ---

The result of lsubst is the following list with 7 elements.

--- 1 2 3 abc 4 5 33 ---

This is particularly useful when constructing a list (or dict) as a data structure as it easily allows for comments and variable and command substitution.

Sometimes it is useful to return each "command" as a separate list rather than simply running all the words together. This can be accomplished with lsubst -line.

Consider the following example.

--- lsubst -line { # two "lines" because of the semicolon one a; two b # one line with three elements {*}{a b c} } ---

The result of lsubst -line is the following list with 3 elements, one for each "command".

--- {one a} {two b} {a b c} ---

local

local cmd ?arg...?

First, local evaluates cmd with the given arguments. The return value must be the name of an existing command, which is then marked as having local scope. This means that when the current procedure exits, the specified command is deleted. This can be useful with lambda, local procedures or to automatically close a filehandle.

In addition, if a the command already exists with the same name, the existing command will be kept rather than being deleted, and may be called via upcall. The previous command will be restored when the current procedure exits. See upcall for more details.

In this example, a local procedure is created. Note that the procedure continues to have global scope while it is active.

    proc outer {} {
      # proc ... returns "inner" which is marked local
      local proc inner {} {
        # will be deleted when 'outer' exits
      }

      inner
      ...
    }

In this example, the lambda is deleted at the end of the procedure rather than waiting until garbage collection. Note that local returns the command name.

    proc outer {} {
      set x [local lambda {args} {
        # will be deleted when 'outer' exits
      }]
      $x ...
      ...
    }

Also see defer as another mechanism for cleaning up at the end of a procedure.

loop

loop var ?first? limit ?incr? body

Similar to for except simpler and possibly more efficient. If incr is positive, the effect is, equivalent to:

    for {set var $first} {$var < $limit} {incr var $incr} $body

While if incr is negative, the count is downwards.

If first is not specified, 0 is used. If incr is not specified, 1 is used. Note that setting the loop variable inside the loop does not affect the loop count.

first, limit and incr may be any integer expression.

lindex

lindex list ?index …?

Treats list as a Tcl list and returns element index from it (0 refers to the first element of the list). See STRING AND LIST INDEX SPECIFICATIONS for all allowed forms for index.

In extracting the element, lindex observes the same rules concerning braces and quotes and backslashes as the Tcl command interpreter; however, variable substitution and command substitution do not occur.

If no index values are given, simply returns list

If index is negative or greater than or equal to the number of elements in list, then an empty string is returned.

If additional index arguments are supplied, then each argument is used in turn to select an element from the previous indexing operation, allowing the script to select elements from sublists.

linsert

linsert list index element ?element element ...?

This command produces a new list from list by inserting all of the element arguments just before the element index of list. Each element argument will become a separate element of the new list. If index is less than or equal to zero, then the new elements are inserted at the beginning of the list. If index is greater than or equal to the number of elements in the list, then the new elements are appended to the list.

See STRING AND LIST INDEX SPECIFICATIONS for all allowed forms for index.

list

list arg ?arg ...?

This command returns a list comprised of all the arguments, arg. Braces and backslashes get added as necessary, so that the lindex command may be used on the result to re-extract the original arguments, and also so that eval may be used to execute the resulting list, with arg1 comprising the command’s name and the other args comprising its arguments. list produces slightly different results than concat: concat removes one level of grouping before forming the list, while list works directly from the original arguments. For example, the command

    list a b {c d e} {f {g h}}

will return

    a b {c d e} {f {g h}}

while concat with the same arguments will return

    a b c d e f {g h}

llength

llength list

Treats list as a list and returns the number of elements in that list.

lset

lset varName ?index ..? newValue

Sets an element in a list.

The lset command accepts a parameter, varName, which it interprets as the name of a variable containing a Tcl list. It also accepts zero or more indices into the list. Finally, it accepts a new value for an element of varName. If no indices are presented, the command takes the form:

    lset varName newValue

In this case, newValue replaces the old value of the variable varName.

When presented with a single index, the lset command treats the content of the varName variable as a Tcl list. It addresses the index’th element in it (0 refers to the first element of the list). When interpreting the list, lset observes the same rules concerning braces and quotes and backslashes as the Tcl command interpreter; however, variable substitution and command substitution do not occur. The command constructs a new list in which the designated element is replaced with newValue. This new list is stored in the variable varName, and is also the return value from the lset command.

If index is negative or greater than or equal to the number of elements in $varName, then an error occurs.

See STRING AND LIST INDEX SPECIFICATIONS for all allowed forms for index.

If additional index arguments are supplied, then each argument is used in turn to address an element within a sublist designated by the previous indexing operation, allowing the script to alter elements in sublists. The command,

    lset a 1 2 newValue

replaces element 2 of sublist 1 with newValue.

The integer appearing in each index argument must be greater than or equal to zero. The integer appearing in each index argument must be strictly less than the length of the corresponding list. In other words, the lset command cannot change the size of a list. If an index is outside the permitted range, an error is reported.

lmap

lmap varName list body

lmap varList list ?varList2 list2 ...? body

lmap is a "collecting" foreach which returns a list of its results.

For example:

    . lmap i {1 2 3 4 5} {expr $i*$i}
    1 4 9 16 25
    . lmap a {1 2 3} b {A B C} {list $a $b}
    {1 A} {2 B} {3 C}

If the body invokes continue, no value is added for this iteration. If the body invokes break, the loop ends and no more values are added.

load

load filename

Loads the dynamic extension, filename. Generally the filename should have the extension .so. The initialisation function for the module must be based on the name of the file. For example loading hwaccess.so will invoke the initialisation function, Jim_hwaccessInit. Normally the load command should not be used directly. Instead it is invoked automatically by package require.

lrange

lrange list first last

list must be a valid Tcl list. This command will return a new list consisting of elements first through last, inclusive.

See STRING AND LIST INDEX SPECIFICATIONS for all allowed forms for first and last.

If last is greater than or equal to the number of elements in the list, then it is treated as if it were end.

If first is greater than last then an empty string is returned.

Note: "lrange list first first" does not always produce the same result as "lindex list first" (although it often does for simple fields that aren’t enclosed in braces); it does, however, produce exactly the same results as "list [lindex list first]"

lreplace

lreplace list first last ?element element ...?

Returns a new list formed by replacing one or more elements of list with the element arguments.

first gives the index in list of the first element to be replaced.

If first is less than zero then it refers to the first element of list; the element indicated by first must exist in the list.

last gives the index in list of the last element to be replaced; it must be greater than or equal to first.

See STRING AND LIST INDEX SPECIFICATIONS for all allowed forms for first and last.

The element arguments specify zero or more new arguments to be added to the list in place of those that were deleted.

Each element argument will become a separate element of the list.

If no element arguments are specified, then the elements between first and last are simply deleted.

lrepeat

lrepeat number element1 ?element2 ...?

Build a list by repeating elements number times (which must be a positive integer).

    . lrepeat 3 a b
    a b a b a b

lreverse

lreverse list

Returns the list in reverse order.

    . lreverse {1 2 3}
    3 2 1

lsearch

lsearch ?options? list pattern

This command searches the elements list to see if one of them matches pattern. If so, the command returns the index of the first matching element (unless the options -all, -inline or -bool are specified.) If not, the command returns -1. The option arguments indicates how the elements of the list are to be matched against pattern and must have one of the values below:

Note that this command is different from Tcl in that default match type is -exact rather than -glob.

-exact

pattern is a literal string that is compared for exact equality against each list element. This is the default.

-glob

pattern is a glob-style pattern which is matched against each list element using STRING MATCHING rules.

-regexp

pattern is treated as a regular expression and matched against each list element using REGULAR EXPRESSIONS rules.

-command cmdname

cmdname is a command which is used to match the pattern against each element of the list. It is invoked as cmdname ?-nocase? pattern listvalue and should return 1 for a match, or 0 for no match.

-all

Changes the result to be the list of all matching indices (or all matching values if -inline is specified as well). If indices are returned, the indices will be in numeric order. If values are returned, the order of the values will be the order of those values within the input list.

-inline

The matching value is returned instead of its index (or an empty string if no value matches). If -all is also specified, then the result of the command is the list of all values that matched. The -inline and -bool options are mutually exclusive.

-bool

Changes the result to 1 if a match was found, or 0 otherwise. If -all is also specified, the result will be a list of 0 and 1 for each element of the list depending upon whether the corresponding element matches. The -inline and -bool options are mutually exclusive.

-not

This negates the sense of the match, returning the index (or value if -inline is specified) of the first non-matching value in the list. If -bool is also specified, the 0 will be returned if a match is found, or 1 otherwise. If -all is also specified, non-matches will be returned rather than matches.

-nocase

Causes comparisons to be handled in a case-insensitive manner.

-index indexList

This option is designed for use when searching within nested lists. The indexList gives a path of indices (much as might be used with the lindex or lset commands) within each element to allow the location of the term being matched against.

-stride strideLength

If this option is specified, the list is treated as consisting of groups of strideLength elements and the groups are searched by either their first element or, if the -index option is used, by the element within each group given by the first index passed to -index (which is then ignored by -index). The resulting index always points to the first element in a group.

The list length must be an integer multiple of strideLength, which in turn must be at least 1. A strideLength of 1 is the default and indicates no grouping.

lsort

lsort ?options? list

Sort the elements of list, returning a new list in sorted order. By default, ASCII (or UTF-8) sorting is used, with the result in increasing order.

Note that only one sort type may be selected with -ascii, -dict, -integer, -real, -nocase or -command with last option being used.

-ascii

Sort using string comparison. This is the default.

-nocase

Sort using using string comparison without regard for case.

-dict

Sort using using string comparison without regard for case. Use dictionary-style comparison. This is the same as -ascii except (a) case is ignored except as a tie-breaker and (b) if two strings contain embedded numbers, the numbers compare as integers, not characters. For example, in -dictionary mode, x10y sorts between x9y and x11y.

-integer

Sort using numeric (integer) comparison.

-real

Sort using floating point comparison.

-command cmdname

cmdname is treated as a command name. For each comparison, cmdname $value1 $value2 is called which should compare the values and return an integer less than, equal to, or greater than zero if the $value1 is to be considered less than, equal to, or greater than $value2, respectively.

-increasing

The resulting list is in ascending order, from smallest/lowest to largest/highest. This is the default and does not need to be specified.

-decreasing

The resulting list is in the opposite order to what it would be otherwise.

-unique

Only the last set of duplicate elements found in the list will be retained. Note that duplicates are determined relative to the comparison used in the sort. Thus if -index 0 is used, {1 a} and {1 b} would be considered duplicates and only the second element, {1 b}, would be retained.

-index indexList

This option is designed for use when sorting nested lists. The indexList gives a path of indices (much as might be used with the lindex or lset commands) within each element to specify the value to be used for comparison.

-stride strideLength

If this option is specified, the list is treated as consisting of groups of strideLength elements and the groups are sorted by either their first element or, if the -index option is used, by the element within each group given by the first index passed to -index (which is then ignored by -index). The resulting list is once again a flat list.

The list length must be an integer multiple of strideLength, which in turn must be at least 2.

open

open fileName ?-noclose? ?access?

open |command-pipeline ?access?

Opens a file and returns an identifier that may be used in future invocations of commands like read, puts, and close. fileName gives the name of the file to open.

If -noclose is given, the returned handle is not automatically closed for child proceses.

The access argument indicates the way in which the file is to be accessed. It may have any of the following values:

r

Open the file for reading only; the file must already exist.

r+

Open the file for both reading and writing; the file must already exist.

w

Open the file for writing only. Truncate it if it exists. If it doesn’t exist, create a new file.

w+

Open the file for reading and writing. Truncate it if it exists. If it doesn’t exist, create a new file.

a

Open the file for writing only. The file must already exist, and the file is positioned so that new data is appended to the file.

a+

Open the file for reading and writing. If the file doesn’t exist, create a new empty file. Set the initial access position to the end of the file.

access defaults to r.

Additionally, if POSIX mode is supported by the underlying system, then access may insted of consistent of a list of any of the following flags, all of which have the standard POSIX meanings. In this case, the first flag must be one of RDONLY, WRONLY or RDWR.

RDONLY

Open the file for reading only.

WRONLY

Open the file for writing only.

RDWR

Open the file for both reading and writing.

APPEND

Set the file pointer to the end of the file prior to each write.

BINARY

Ignored.

CREAT

Create the file if it does not already exist (without this flag it is an error for the file not to exist).

EXCL

If CREAT is also specified, an error is returned if the file already exists.

NOCTTY

If the file is a terminal device, this flag prevents the file from becoming the controlling terminal of the process.

TRUNC

If the file exists it is truncated to zero length.

If a file is opened for both reading and writing, then seek must be invoked between a read and a write, or vice versa.

If the first character of fileName is "|" then the remaining characters of fileName are treated as a list of arguments that describe a command pipeline to invoke, in the same style as the arguments for exec. In this case, the channel identifier returned by open may be used to write to the command’s input pipe or read from its output pipe, depending on the value of access. If write-only access is used (e.g. access is w), then standard output for the pipeline is directed to the current standard output unless overridden by the command. If read-only access is used (e.g. access is r), standard input for the pipeline is taken from the current standard input unless overridden by the command.

Note that this incudes new style exec syntax, e.g. open |[list | ls -l] r.

The pid command may be used to return the process ids of the commands forming the command pipeline.

See also socket, pid, exec

package

package forget ?name …?

Removes the knowledge that the given packages were loaded. This allows new, replacement packages to be loaded. Note that it does not remove any effects of the previous packages being loaded.

package provide name ?version?

Indicates that the current script provides the package named name. Note: The supplied version is ignored. All packages are registered as version 1.0 (it is simply accepted for compatibility purposes).

Any script that provides a package may include this statement as the first statement, although it is not required.

package require name ?version?

Searches for the package with the given name by examining each path in $::auto_path and trying to load $path/$name.so as a dynamic extension, or $path/$name.tcl as a script package.

The first such file which is found is considered to provide the package. (The version number is ignored).

If $name.so exists, it is loaded with the load command, otherwise if $name.tcl exists it is loaded with the source command.

If load or source fails, package require will fail immediately. No further attempt will be made to locate the file.

package names

Returns a list of all known/loaded packages, including internal packages.

pid

pid

pid fileId

The first form returns the process identifier of the current process.

The second form accepts a handle returned by open and returns a list of the process ids forming the pipeline in the same form as exec ... &. If fileId represents a regular file handle rather than a command pipeline, the empty string is returned instead.

See also open, exec

proc

proc name args ?statics? body

The proc command creates a new Tcl command procedure, name. When the new command is invoked, the contents of body will be executed. Tcl interpreter. args specifies the formal arguments to the procedure. If specified, statics, declares static variables which are bound to the procedure.

See PROCEDURES for detailed information about Tcl procedures.

The proc command returns name (which is useful with local).

When a procedure is invoked, the procedure’s return value is the value specified in a return command. If the procedure doesn’t execute an explicit return, then its return value is the value of the last command executed in the procedure’s body.

If an error occurs while executing the procedure body, then the procedure-as-a-whole will return that same error.

puts

puts ?-nonewline? ?fileId? string

Tcl-compatible version of fileId puts ?-nonewline? string

See aio puts

pipe

Creates a pair of aio channels and returns the handles as a list: {read write}

    lassign [pipe] r w

    # Must close $w after exec
    exec ps >@$w &
    $w close

    $r readable ...

Note that if -noclose is desired, use socket -noclose pipe instead.

pwd

pwd

Returns the path name of the current working directory.

rand

rand ?min? ?max?

Returns a random integer between min (defaults to 0) and max (defaults to the maximum integer).

If only one argument is given, it is interpreted as max.

range

range ?start? end ?step?

Returns a list of integers starting at start (defaults to 0) and ranging up to but not including end in steps of step defaults to 1).

    . range 5
    0 1 2 3 4
    . range 2 5
    2 3 4
    . range 2 10 4
    2 6
    . range 7 4 -2
    7 5

Integer parameters may be any integer expression.

read

read ?-nonewline? fileId ?length?

Tcl-compatible alterative version of fileId read ?-nonewline? ?length?

See aio read

regexp

regexp ?-nocase? ?-line? ?-indices? ?-start offset? ?-all? ?-inline? ?-expanded? ?--? exp string ?matchVar? ?subMatchVar subMatchVar ...?

Determines whether the regular expression exp matches part or all of string and returns 1 if it does, 0 if it doesn’t.

See REGULAR EXPRESSIONS above for complete information on the syntax of exp and how it is matched against string.

If additional arguments are specified after string then they are treated as the names of variables to use to return information about which part(s) of string matched exp. matchVar will be set to the range of string that matched all of exp. The first subMatchVar will contain the characters in string that matched the leftmost parenthesized subexpression within exp, the next subMatchVar will contain the characters that matched the next parenthesized subexpression to the right in exp, and so on.

Normally, matchVar and the each subMatchVar are set to hold the matching characters from string, however see -indices and -inline below.

If there are more values for subMatchVar than parenthesized subexpressions within exp, or if a particular subexpression in exp doesn’t match the string (e.g. because it was in a portion of the expression that wasn’t matched), then the corresponding subMatchVar will be set to "-1 -1" if -indices has been specified or to an empty string otherwise.

The following switches modify the behaviour of regexp

-nocase

Causes upper-case and lower-case characters to be treated as identical during the matching process.

-line

Use newline-sensitive matching. By default, newline is a completely ordinary character with no special meaning in either REs or strings. With this flag, [^ bracket expressions and . never match newline, an ^ anchor matches the empty string after any newline in the string in addition to its normal function, and the $ anchor matches the empty string before any newline in the string in addition to its normal function.

-indices

Changes what is stored in the subMatchVars. Instead of storing the matching characters from string, each variable will contain a list of two decimal strings giving the indices in string of the first and last characters in the matching range of characters.

-start offset

Specifies a character index offset into the string at which to start matching the regular expression. If -indices is specified, the indices will be indexed starting from the absolute beginning of the input string. offset will be constrained to the bounds of the input string.

-all

Causes the regular expression to be matched as many times as possible in the string, returning the total number of matches found. If this is specified with match variables, they will contain information for the last match only.

-inline

Causes the command to return, as a list, the data that would otherwise be placed in match variables. When using -inline, match variables may not be specified. If used with -all, the list will be concatenated at each iteration, such that a flat list is always returned. For each match iteration, the command will append the overall match data, plus one element for each subexpression in the regular expression.

-expanded

Enables use of the expanded regular expression syntax where whitespace and comments are ignored.

--

Marks the end of switches. The argument following this one will be treated as exp even if it starts with a -.

regsub

regsub ?-nocase? ?-all? ?-line? ?-command? ?-expanded? ?-start offset? ?--? exp string subSpec ?varName?

This command matches the regular expression exp against string using the rules described in REGULAR EXPRESSIONS above.

If varName is specified, the commands stores string to varName with the substitutions detailed below, and returns the number of substitutions made (normally 1 unless -all is specified). This is 0 if there were no matches.

If varName is not specified, the substituted string will be returned instead.

When copying string, the portion of string that matched exp is replaced with subSpec. If subSpec contains a & or \0, then it is replaced in the substitution with the portion of string that matched exp.

If subSpec contains a \n, where n is a digit between 1 and 9, then it is replaced in the substitution with the portion of string that matched the n'-th parenthesized subexpression of exp. Additional backslashes may be used in subSpec to prevent special interpretation of & or \0 or \n or backslash.

The use of backslashes in subSpec tends to interact badly with the Tcl parser’s use of backslashes, so it’s generally safest to enclose subSpec in braces if it includes backslashes.

The following switches modify the behaviour of regsub

-nocase

Upper-case characters in string are converted to lower-case before matching against exp; however, substitutions specified by subSpec use the original unconverted form of string.

-all

All ranges in string that match exp are found and substitution is performed for each of these ranges, rather than only the first. The & and \n sequences are handled for each substitution using the information from the corresponding match.

-line

Use newline-sensitive matching. By default, newline is a completely ordinary character with no special meaning in either REs or strings. With this flag, [ bracket expressions and . never match newline, an anchor matches the empty string after any newline in the string in addition to its normal function, and the $ anchor matches the empty string before any newline in the string in addition to its normal function.

-command

Changes the handling of subSpec so that it is not treated as a template for a substitution string and the substrings & and \n no longer have special meaning. Instead subSpec must be a command prefix, that is, a non-empty list. The substring of string that matches exp, and then each substring that matches each capturing sub-RE within exp, are appended as additional elements to that list. (The items appended to the list are much like what regexp -inline would return). The completed list is then evaluated as a Tcl command, and the result of that command is the substitution string. Any error or exception from command evaluation becomes an error or exception from the regsub command.

If -all is not also given, the command callback will be invoked at most once (exactly when the regular expression matches). If -all is given, the command callback will be invoked for each matched location, in sequence. The exact location indices that matched are not made available to the script.

-start offset

Specifies a character index offset into the string at which to start matching the regular expression. offset will be constrained to the bounds of the input string.

-expanded

Enables use of the expanded regular expression syntax where whitespace and comments are ignored.

--

Marks the end of switches. The argument following this one will be treated as exp even if it starts with a -.

ref

ref string tag ?finalizer?

Create a new reference containing string of type tag. If finalizer is specified, it is a command which will be invoked when the a garbage collection cycle runs and this reference is no longer accessible.

The finalizer is invoked as:

    finalizer reference string

See GARBAGE COLLECTION for more detail.

rename

rename oldName newName

Rename the command that used to be called oldName so that it is now called newName. If newName is an empty string (e.g. {}) then oldName is deleted. The rename command returns an empty string as result.

return

return ?-code code? ?-errorinfo stacktrace? ?-errorcode errorcode? ?-level n? ?value?

Return immediately from the current procedure (or top-level command or source command), with value as the return value. If value is not specified, an empty string will be returned as result.

If -code is specified (as either a number or ok, error, break, continue, signal, return or exit), this code will be used instead of JIM_OK. This is generally useful when implementing flow of control commands.

If -level is specified and greater than 1, it has the effect of delaying the new return code from -code. This is useful when rethrowing an error from catch. See the implementation of try/catch in tclcompat.tcl for an example of how this is done.

Note: The following options are only used when -code is JIM_ERR.

If -errorinfo is specified (as returned from info stacktrace) it is used to initialize the stacktrace.

If -errorcode is specified, it is used to set the global variable $::errorCode.

scan

scan string format varName1 ?varName2 ...?

This command parses fields from an input string in the same fashion as the C sscanf procedure. string gives the input to be parsed and format indicates how to parse it, using % fields as in sscanf. All of the sscanf options are valid; see the sscanf man page for details. Each varName gives the name of a variable; when a field is scanned from string, the result is converted back into a string and assigned to the corresponding varName. The only unusual conversion is for %c. For %c conversions a single character value is converted to a decimal string, which is then assigned to the corresponding varName; no field width may be specified for this conversion.

seek

seek fileId offset ?origin?

Tcl-compatible version of fileId seek offset ?origin?

See aio seek

set

set varName ?value?

Returns the value of variable varName.

If value is specified, then set the value of varName to value, creating a new variable if one doesn’t already exist, and return its value.

If varName contains an open parenthesis and ends with a close parenthesis, then it refers to an array element: the characters before the open parenthesis are the name of the array, and the characters between the parentheses are the index within the array. Otherwise varName refers to a scalar variable.

If no procedure is active, then varName refers to a global variable.

If a procedure is active, then varName refers to a parameter or local variable of the procedure, unless the global command has been invoked to declare varName to be global.

The :: prefix may also be used to explicitly reference a variable in the global scope.

setref

setref reference string

Store a new string in reference, replacing the existing string. The reference must be a valid reference create with the ref command.

See GARBAGE COLLECTION for more detail.

signal

Command for signal handling.

See kill for the different forms which may be used to specify signals.

Commands which return a list of signal names do so using the canonical form: "SIGINT SIGTERM".

signal handle ?signals ...?

If no signals are given, returns a list of all signals which are currently being handled. If signals are specified, these are added to the list of signals currently being handled.

signal ignore ?signals ...?

If no signals are given, returns a lists all signals which are currently being ignored. If signals are specified, these are added to the list of signals currently being ignored. These signals are still delivered, but are not considered by catch -signal or try -signal. Use signal check to determine which signals have occurred but been ignored.

signal block ?signals ...?

If no signals are given, returns a lists all signals which are currently being blocked. If signals are specified, these are added to the list of signals currently being blocked. These signals are not delivered to the process. This can be useful for signals such as SIGPIPE, especially in conjunction with exec as child processes inherit the parent’s signal disposition.

signal default ?signals ...?

If no signals are given, returns a lists all signals which currently have the default behaviour. If signals are specified, these are added to the list of signals which have the default behaviour.

signal check ?-clear? ?signals ...?

Returns a list of signals which have been delivered to the process but are ignored. If signals are specified, only that set of signals will be checked, otherwise all signals will be checked. If -clear is specified, any signals returned are removed and will not be returned by subsequent calls to signal check unless delivered again.

signal throw ?signal?

Raises the given signal, which defaults to SIGINT if not specified. The behaviour is identical to:

    kill signal [pid]

Note that signal handle and signal ignore represent two forms of signal handling. signal handle is used in conjunction with catch -signal or try -signal to immediately abort execution when the signal is delivered. Alternatively, signal ignore is used in conjunction with signal check to handle signal synchronously. Consider the two examples below.

Prevent a processing from taking too long

    signal handle SIGALRM
    alarm 20
    try -signal {
        .. possibly long running process ..
        alarm 0
    } on signal {sig} {
        puts stderr "Process took too long"
    }

Handle SIGHUP to reconfigure:

    signal ignore SIGHUP
    while {1} {
        ... handle configuration/reconfiguration ...
        while {[signal check -clear SIGHUP] eq ""} {
            ... do processing ..
        }
        # Received SIGHUP, so reconfigure
    }

Note: signal handling is currently not supported in child interpreters. In these interpreters, the signal command does not exist.

sleep

sleep seconds

Pauses for the given number of seconds, which may be a floating point value less than one to sleep for less than a second, or an integer to sleep for one or more seconds.

source

source fileName

Read file fileName and pass the contents to the Tcl interpreter as a sequence of commands to execute in the normal fashion. The return value of source is the return value of the last command executed from the file. If an error occurs in executing the contents of the file, then the source command will return that error.

If a return command is invoked from within the file, the remainder of the file will be skipped and the source command will return normally with the result from the return command.

split

split string ?splitChars?

Returns a list created by splitting string at each character that is in the splitChars argument.

Each element of the result list will consist of the characters from string between instances of the characters in splitChars.

Empty list elements will be generated if string contains adjacent characters in splitChars, or if the first or last character of string is in splitChars.

If splitChars is an empty string then each character of string becomes a separate element of the result list.

splitChars defaults to the standard white-space characters. For example,

    split "comp.unix.misc" .

returns "comp unix misc" and

    split "Hello world" {}

returns "H e l l o { } w o r l d".

stackdump

stackdump stacktrace

Creates a human readable representation of a stack trace.

stacktrace

stacktrace

Returns a live stack trace as a list of proc file line cmd proc file line cmd .... uses the same information as info frame to create the stack trace. This stack trace is in the same form as produced by catch and info stacktrace

See also stackdump.

string

string option arg ?arg ...?

Perform one of several string operations, depending on option. The legal options (which may be abbreviated) are:

string bytelength string

Returns the length of the string in bytes. This will return the same value as string length if UTF-8 support is not enabled, or if the string is composed entirely of ASCII characters. See UTF-8 AND UNICODE.

string byterange string first last

Like string range except works on bytes rather than characters. These commands are identical if UTF-8 support is not enabled.

string cat ?string1 string2 ...?

Concatenates the given strings into a single string.

string compare ?-nocase? ?-length len? string1 string2

Perform a character-by-character comparison of strings string1 and string2 in the same way as the C strcmp procedure. Return -1, 0, or 1, depending on whether string1 is lexicographically less than, equal to, or greater than string2. If -length is specified, then only the first len characters are used in the comparison. If len is negative, it is ignored. Performs a case-insensitive comparison if -nocase is specified.

string equal ?-nocase? ?-length len? string1 string2

Returns 1 if the strings are equal, or 0 otherwise. If -length is specified, then only the first len characters are used in the comparison. If len is negative, it is ignored. Performs a case-insensitive comparison if -nocase is specified.

string first string1 string2 ?firstIndex?

Search string2 for a sequence of characters that exactly match the characters in string1. If found, return the index of the first character in the first such match within string2. If not found, return -1. If firstIndex is specified, matching will start from firstIndex of string1.

See STRING AND LIST INDEX SPECIFICATIONS for all allowed forms for firstIndex.

string index string charIndex

Returns the charIndexth character of the 'string argument. A charIndex of 0 corresponds to the first character of the string. If charIndex is less than 0 or greater than or equal to the length of the string then an empty string is returned.

See STRING AND LIST INDEX SPECIFICATIONS for all allowed forms for charIndex.

string is class ?-strict? string

Returns 1 if string is a valid member of the specified character class, otherwise returns 0. If -strict is specified, then an empty string returns 0, otherwise an empty string will return 1 on any class. The following character classes are recognized (the class name can be abbreviated):

alnum

Any alphabet or digit character.

alpha

Any alphabet character.

ascii

Any character with a value less than 128 (those that are in the 7-bit ascii range).

boolean

Any of the valid string formats for a boolean value in Tcl (0, false, no, off, 1, true, yes, on)

control

Any control character.

digit

Any digit character.

double

Any of the valid forms for a double in Tcl, with optional surrounding whitespace. In case of under/overflow in the value, 0 is returned.

graph

Any printing character, except space.

integer

Any of the valid string formats for an integer value in Tcl, with optional surrounding whitespace.

lower

Any lower case alphabet character.

print

Any printing character, including space.

punct

Any punctuation character.

space

Any space character.

upper

Any upper case alphabet character.

xdigit

Any hexadecimal digit character ([0-9A-Fa-f]).

Note that string classification does not respect UTF-8. See UTF-8 AND UNICODE.

Note that only lowercase boolean values are recognized (Tcl accepts any case).

string last string1 string2 ?lastIndex?

Search string2 for a sequence of characters that exactly match the characters in string1. If found, return the index of the first character in the last such match within string2. If there is no match, then return -1. If lastIndex is specified, only characters up to lastIndex of string2 will be considered in the match.

See STRING AND LIST INDEX SPECIFICATIONS for all allowed forms for lastIndex.

string length string

Returns a decimal string giving the number of characters in string. If UTF-8 support is enabled, this may be different than the number of bytes. See UTF-8 AND UNICODE.

string map ?-nocase? mapping string

Replaces substrings in string based on the key-value pairs in mapping, which is a list of key value key value ... as in the form returned by array get. Each instance of a key in the string will be replaced with its corresponding value. If -nocase is specified, then matching is done without regard to case differences. Both key and value may be multiple characters. Replacement is done in an ordered manner, so the key appearing first in the list will be checked first, and so on. string is only iterated over once, so earlier key replacements will have no affect for later key matches. For example,

      string map {abc 1 ab 2 a 3 1 0} 1abcaababcabababc

will return the string 01321221.

Note that if an earlier key is a prefix of a later one, it will completely mask the later one. So if the previous example is reordered like this,

      string map {1 0 ab 2 a 3 abc 1} 1abcaababcabababc

it will return the string 02c322c222c.

string match ?-nocase? pattern string

See if pattern matches string according to STRING MATCHING rules ; return 1 if it does, 0 if it doesn’t. The match is performed in a case-insensitive manner if -nocase is specified.

string range string first last

Returns a range of consecutive characters from string, starting with the character whose index is first and ending with the character whose index is last. An index of 0 refers to the first character of the string.

See STRING AND LIST INDEX SPECIFICATIONS for all allowed forms for first and last.

If first is less than zero then it is treated as if it were zero, and if last is greater than or equal to the length of the string then it is treated as if it were end. If first is greater than last then an empty string is returned.

string repeat string count

Returns a new string consisting of string repeated count times.

string replace string first last ?newstring?

Removes a range of consecutive characters from string, starting with the character whose index is first and ending with the character whose index is last. If newstring is specified, then it is placed in the removed character range. If first is less than zero then it is treated as if it were zero, and if last is greater than or equal to the length of the string then it is treated as if it were end. If first is greater than last or the length of the initial string, or last is less than 0, then the initial string is returned untouched.

string reverse string

Returns a string that is the same length as string but with its characters in the reverse order.

string tolower string

Returns a value equal to string except that all upper case letters have been converted to lower case.

string totitle string

Returns a value equal to string except that the first character is converted to title case (or upper case if there is no UTF-8 titlecase variant) and all remaining characters have been converted to lower case.

string toupper string

Returns a value equal to string except that all lower case letters have been converted to upper case.

string trim string ?chars?

Returns a value equal to string except that any leading or trailing characters from the set given by chars are removed. If chars is not specified then white space is removed (spaces, tabs, newlines, and carriage returns).

string trimleft string ?chars?

Returns a value equal to string except that any leading characters from the set given by chars are removed. If chars is not specified then white space is removed (spaces, tabs, newlines, and carriage returns).

string trimright string ?chars?

Returns a value equal to string except that any trailing characters from the set given by chars are removed. If chars is not specified then white space is removed (spaces, tabs, newlines, and carriage returns). Null characters are always removed.

subst

subst ?-nobackslashes? ?-nocommands? ?-novariables? string

This command performs variable substitutions, command substitutions, and backslash substitutions on its string argument and returns the fully-substituted result. The substitutions are performed in exactly the same way as for Tcl commands. As a result, the string argument is actually substituted twice, once by the Tcl parser in the usual fashion for Tcl commands, and again by the subst command.

If any of the -nobackslashes, -nocommands, or -novariables are specified, then the corresponding substitutions are not performed. For example, if -nocommands is specified, no command substitution is performed: open and close brackets are treated as ordinary characters with no special interpretation.

Note: expr shorthand $(...) is considered a variable substitution and so is disabled by -novariables.

Note: when it performs its substitutions, subst does not give any special treatment to double quotes or curly braces. For example, the following script returns xyz {44}, not xyz \{$a}.

    set a 44
    subst {xyz {$a}}

switch

switch ?options? string pattern body ?pattern body ...?

switch ?options? string {pattern body ?pattern body ...?}

The switch command matches its string argument against each of the pattern arguments in order. As soon as it finds a pattern that matches string it evaluates the following body and returns the result of that evaluation. If the last pattern argument is default then it matches anything. If no pattern argument matches string and no default is given, then the switch command returns an empty string. If the initial arguments to switch start with - then they are treated as options. The following options are currently supported:

-exact

Use exact matching when comparing string to a pattern. This is the default.

-glob

When matching string to the patterns, use glob-style STRING MATCHING rules.

-regexp

When matching string to the patterns, use REGULAR EXPRESSIONS rules.

-command commandname

When matching string to the patterns, use the given command, which must be a single word. The command is invoked as commandname pattern string, or commandname -nocase pattern string and must return 1 if matched, or 0 if not.

--

Marks the end of options. The argument following this one will be treated as string even if it starts with a -.

Two syntaxes are provided for the pattern and body arguments. The first uses a separate argument for each of the patterns and commands; this form is convenient if substitutions are desired on some of the patterns or commands. The second form places all of the patterns and commands together into a single argument; the argument must have proper list structure, with the elements of the list being the patterns and commands. The second form makes it easy to construct multi-line switch commands, since the braces around the whole list make it unnecessary to include a backslash at the end of each line. Since the pattern arguments are in braces in the second form, no command or variable substitutions are performed on them; this makes the behaviour of the second form different than the first form in some cases.

If a body is specified as - it means that the body for the next pattern should also be used as the body for this pattern (if the next pattern also has a body of - then the body after that is used, and so on). This feature makes it possible to share a single body among several patterns.

Below are some examples of switch commands:

    switch abc a - b {format 1} abc {format 2} default {format 3}

will return 2,

    switch -regexp aaab {
           ^a.*b$ -
           b {format 1}
           a* {format 2}
           default {format 3}
    }

will return 1, and

    switch xyz {
           a -
           b {format 1}
           a* {format 2}
           default {format 3}
    }

will return 3.

tailcall

tailcall cmd ?arg...?

The tailcall command provides an optimised way of invoking a command whilst replacing the current call frame. This is similar to exec in Bourne Shell.

The following are identical except the first immediately replaces the current call frame.

  tailcall a b c
  return [uplevel 1 [list a b c]]

tailcall is useful as a dispatch mechanism:

  proc a {cmd args} {
    tailcall sub_$cmd {*}$args
  }
  proc sub_cmd1 ...
  proc sub_cmd2 ...

taint

taint varname

Set "taint" on the value contained in the given variable.

tell

tell fileId

Tcl-compatible version of fileId tell

See aio tell

throw

throw code ?msg?

This command throws an exception (return) code along with an optional message. This command is mostly for convenient usage with try.

The command throw break is equivalent to break. The command throw 20 message can be caught with an on 20 ... clause to try.

time

time command ?count?

This command will call the Tcl interpreter count times to execute command (or once if count isn’t specified). It will then return a string of the form

    503 microseconds per iteration

which indicates the average amount of time required per iteration, in microseconds.

Time is measured in elapsed time, not CPU time.

timerate

timerate script ?milliseconds?

Evaluates the given script continuously until at least milliseconds time has elapsed (defaults to 1000) and returns a dictionary containing performance results. The dictionary contains the following:

  • us_per_iter - average elapsed time (microseconds) per iteration

  • iters_per_sec - estimated number of iterations per second

  • count - number of iterations performed

  • elapsed_us - elapsed time (microseconds)

Note that timerate attempts to subtract the overhead of timerate itself in the result, hence the returned elapsed time will typically be less than the specified run time.

The following is an example result of using timerate:

  . timerate {expr {pow(1.5,7)}} 2000
  us_per_iter 0.09866879769 iters_per_sec 10134916.2391 count 13046627 elapsed_us 1287295

try

try ?catchopts? tryscript ?on|trap match {?resultvar? ?optsvar?} handlerscript ...? ?finally finalscript?

The try command is provided as a convenience for exception handling.

This interpeter first evaluates tryscript under the effect of the catch options catchopts (e.g. -signal -noexit --, see catch).

It then evaluates the script for the first matching on or trap handler (there many be zero or more) based on the return code and errorcode from the try section. For example a normal JIM_ERR error will be matched by an on error handler.

Finally, any finalscript is evaluated.

The result of this command is the result of tryscript, except in the case where an exception occurs in a matching on handler script or the finally script, in which case the result is this new exception.

For the on handler, match is a list of return codes either as names (ok, error, break, etc.) or as integers.

For the trap handler, match is a list to match against errorcode. For example, if the errorcode was {CHILDKILLED 10627 SIGTERM}, then a match value of {CHILDKILLED} would match.

If resultvar and optsvar are specified, they are set as for catch before evaluating the matching handler.

For example:

    set f [open input]
    try -signal {
        process $f
    } on {continue break} {} {
        error "Unexpected break/continue"
    } trap CHILDKILLED {msg opts} {
        puts "A child process died"
        return {*}$opts $msg
    } on error {msg opts} {
        puts "Dealing with error"
        return {*}$opts $msg
    } on signal sig {
        puts "Got signal: $sig"
    } finally {
        $f close
    }

If break, continue or error are raised, they are dealt with by the matching handler. If an error occurred with an errorcode of CHILDKILLED, the trap handler will be evaluated as it is specified before the on error handler.

In any case, the file will be closed via the finally clause.

See also throw, catch, return, error.

unknown

unknown cmdName ?arg arg …?

This command doesn’t actually exist as part of Tcl, but Tcl will invoke it if it does exist.

If the Tcl interpreter encounters a command name for which there is not a defined command, then Tcl checks for the existence of a command named unknown.

If there is no such command, then the interpreter returns an error.

If the unknown command exists, then it is invoked with arguments consisting of the fully-substituted name and arguments for the original non-existent command.

The unknown command typically does things like searching through library directories for a command procedure with the name cmdName, or expanding abbreviated command names to full-length, or automatically executing unknown commands as UNIX sub-processes.

In some cases (such as expanding abbreviations) unknown will change the original command slightly and then (re-)execute it. The result of the unknown command is used as the result for the original non-existent command.

unset

unset ?-nocomplain? ?--? ?name name …?

Remove variables. Each name is a variable name, specified in any of the ways acceptable to the set command.

If a name refers to an element of an array, then that element is removed without affecting the rest of the array.

If a name consists of an array name with no parenthesized index, then the entire array is deleted.

The unset command returns an empty string as result.

An error occurs if any of the variables doesn’t exist, unless -nocomplain is specified. The -- argument may be specified to stop option processing in case the variable name may be -nocomplain.

untaint

untaint varname

Remove "taint" from the value contained in the given variable.

upcall

upcall command ?args …?

May be used from within a proc defined as local proc in order to call the previous, hidden version of the same command.

If there is no previous definition of the command, an error is returned.

uplevel

uplevel ?level? command ?command …?

All of the command arguments are concatenated as if they had been passed to concat; the result is then evaluated in the variable context indicated by level. uplevel returns the result of that evaluation. If level is an integer, then it gives a distance (up the procedure calling stack) to move before executing the command. If level consists of # followed by a number then the number gives an absolute level number. If level is omitted then it defaults to 1. level cannot be defaulted if the first command argument starts with a digit or #.

For example, suppose that procedure a was invoked from top-level, and that it called b, and that b called c. Suppose that c invokes the uplevel command. If level is 1 or #2 or omitted, then the command will be executed in the variable context of b. If level is 2 or #1 then the command will be executed in the variable context of a.

If level is 3 or #0 then the command will be executed at top-level (only global variables will be visible). The uplevel command causes the invoking procedure to disappear from the procedure calling stack while the command is being executed. In the above example, suppose c invokes the command

    uplevel 1 {set x 43; d}

where d is another Tcl procedure. The set command will modify the variable x in b’s context, and 'd will execute at level 3, as if called from b. If it in turn executes the command

    uplevel {set x 42}

then the set command will modify the same variable x in b’s context: the procedure 'c does not appear to be on the call stack when d is executing. The command info level may be used to obtain the level of the current procedure.

uplevel makes it possible to implement new control constructs as Tcl procedures (for example, uplevel could be used to implement the while construct as a Tcl procedure).

upvar

upvar ?level? otherVar myVar ?otherVar myVar …?

This command arranges for one or more local variables in the current procedure to refer to variables in an enclosing procedure call or to global variables.

level may have any of the forms permitted for the uplevel command, and may be omitted if the first letter of the first otherVar isn’t # or a digit (it defaults to 1).

For each otherVar argument, upvar makes the variable by that name in the procedure frame given by level (or at global level, if level is #0) accessible in the current procedure by the name given in the corresponding myVar argument.

The variable named by otherVar need not exist at the time of the call; it will be created the first time myVar is referenced, just like an ordinary variable.

upvar may only be invoked from within procedures.

upvar returns an empty string.

The upvar command simplifies the implementation of call-by-name procedure calling and also makes it easier to build new control constructs as Tcl procedures. For example, consider the following procedure:

    proc add2 name {
        upvar $name x
        set x [expr $x+2]
    }

add2 is invoked with an argument giving the name of a variable, and it adds two to the value of that variable. Although add2 could have been implemented using uplevel instead of upvar, upvar makes it simpler for add2 to access the variable in the caller’s procedure frame.

wait

wait

wait -nohang pid

With no arguments, cleans up any processes started by exec ... & that have completed (reaps zombie processes).

With one or two arguments, waits for a process by id, either returned by exec ... & or by os.fork (if supported).

Waits for the process to complete, unless -nohang is specified, in which case returns immediately if the process is still running.

Returns a list of 3 elements.

{NONE x x} if the process does not exist or has already been waited for, or if -nohang is specified, and the process is still alive.

{CHILDSTATUS <pid> <exit-status>} if the process exited normally.

{CHILDKILLED <pid> <signal>} if the process terminated on a signal.

{CHILDSUSP <pid> none} if the process terminated for some other reason.

Note that on platforms supporting waitpid(2), pid can also be given special values such as 0 or -1. See waitpid(2) for more detail.

while

while test body

The while command evaluates test as an expression (in the same way that expr evaluates its argument). The value of the expression must be numeric; if it is non-zero then body is executed by passing it to the Tcl interpreter.

Once body has been executed then test is evaluated again, and the process repeats until eventually test evaluates to a zero numeric value. continue commands may be executed inside body to terminate the current iteration of the loop, and break commands may be executed inside body to cause immediate termination of the while command.

The while command always returns an empty string.

xtrace

xtrace command

Install an execution trace callback command. This is useful for implementing a debugger or tracing tool. On each command invocation, the given command is invoked as:

    command proc|cmd filename line result command arglist

proc or cmd indicates whether a command or a proc body is being executed. filename and line indicate the location where the command was invoked. result is the current interpreter result (from the previous command). command and arglist indicate the command being executed.

While the callback is executing, any further execution traces are temporarily disabled. If the callback returns JIM_OK or JIM_RETURN, the execution trace is reinstalled. Otherwise the execution trace is removed.

If xtrace is called with an empty argument (""), any existing callback is removed.

OPTIONAL-EXTENSIONS

The following extensions may or may not be available depending upon what options were selected when Jim Tcl was built.

posix: os.fork, os.gethostname, os.getids, os.uptime, os.umask

os.fork

Invokes fork(2) and returns the result.

os.gethostname

Invokes gethostname(3) and returns the result.

os.getids

Returns the various user/group ids for the current process.

    . os.getids
    uid 1000 euid 1000 gid 100 egid 100
os.umask ?newmask?

Set or return the current process umask(2). Returns the previous umask.

os.uptime

Returns the number of seconds since system boot. See description of uptime in sysinfo(2).

ANSI I/O (aio) and EVENTLOOP API

In addition to the traditional Tcl I/O commands (gets, read, puts, close, seek, tell), Jim provides an alternative object-based API for I/O. Commands that create a channel, open and socket, return a handle to an I/O channel that is used to control that channel.

For example, the traditional Tcl usage would be:

    set f [open file.txt]
    while {[gets $f buf] >= 0} {
        puts stderr $buf
    }
    close $f

While the Jim usage would be:

    set f [open file.txt]
    while {[$f gets buf] >= 0} {
        stderr puts $buf
    }
    $f close

Thus channels are commands that support the various subcommands. They can be renamed handled like any other command. In additional to file I/O and stream (TCP) sockets, Jim supports many kinds of socket streams including UDP, Unix domain sockets, psuedo-tty pairs, pipes and others. (See socket for more detail). The TLS (SSL) protocol may also be seamlessly layered over a channel with the ssl command. In addition Jim I/O supports both blocking and non-blocking modes, fully integrates with the eventloop, supports serial ports and tty control.

Note that while most channels are stream channels, some channels (socket types with dgram) are datagram channels. For those channels, aio recv and aio sendto is generally preferable over aio read and aio puts.

aio

$handle accept ?-noclose? ?addrvar?

Server socket only: Accept a connection and return a stream channel. If addrvar is specified, the address of the connected client is stored in the named variable in the form addr:port for IP sockets or path for Unix domain sockets. See socket for details. If -noclose is given, the returned handle is not automatically closed for child proceses. See socket for details.

$handle buffering none|line|full ?size?

Sets the output buffering mode of the stream channel. none means that puts immediately writes output. line means output (including previously buffered output) is written if a newline is to be written. full means that data is written when the output buffer is full (default 64KB). Size may be specified in full mode. Note that line buffering will also write once the output buffer limit is reached, even if there is no newline. Channels usually begin in full buffering mode, unless they identify as a tty channel, in which case line buffering is used, and stderr begins with no buffering. Returns the current buffering mode (including size in full mode - e.g. line or full 65536. See also aio puts and aio flush.

$handle close ?r(ead)|w(rite)? ?-nodelete?

Closes the stream. The read and write arguments perform a "half-close" on a socket. See the shutdown(2) man page. The -nodelete option is applicable only for Unix domain sockets. It closes the socket but does not delete the bound path (e.g. after os.fork). After a full close, the channel handle is no longer valid.

$handle copyto $tohandle ?size?

Copy bytes to channel $tohandle. If size is specified, at most that many bytes will be copied. Otherwise copying continues until the end of the input channel. Returns the number of bytes actually copied.

$handle eof

Returns 1 if an end-of-file condition has occurred on the channel. Note that this condition may only be checked after reading from the channel.

$handle filename

Returns the original filename associated with the handle. Handles returned by socket provide different information such as the peer address or a generic name if no useful filename can be provided. See socket for each socket type.

$handle flush

Flushes any output that has been buffered for the channel. In blocking mode, command does not return until all data has been written. In non-blocking mode, the behaviour depends on whether an aio writable handler has been set. If it has, and not all data could be written and error will be returned with the message "send buffer full". Otherwise an "autoflush" eventloop handler is installed to flush the remaining data. As long as the eventloop runs (vwait, update), the write data will be automatically flushed.

$handle gets ?-eol str? ?-keep 0|1? ?varName?

Read one line from the channel and return it or store it in the variable. A terminating newline character is discarded. If varName is specified, then the line is placed in the variable by that name and the return value is a count of the number of characters read (not including the newline). If the end of the file is reached before reading any characters then -1 is returned and varName is set to an empty string. If varName is not specified then the return value will be the line (minus the newline character) or an empty string if the end of the file is reached before reading any characters. An empty string will also be returned if a line contains no characters except the newline, so eof may have to be used to determine what really happened. If the last character in the file is not a newline character, then gets behaves as if there were an additional newline character at the end of the file.

If -eol is given, the end of line is considered to be the given string instead of the newline character. If -keep 1 is given, the end-of-line string is not discarded and instead is returned as part of the result (and if the return value is the character count, it includes the end-of-line string). The default is -keep 0.

$handle getfd

Returns the underlying file descriptor. On Unix platforms this is a small integer.

$handle isatty

Returns 1 if the channel is a tty device.

$handle lock ?-wait?

Apply a POSIX lock to the open file associated with the channel using fcntl(F_SETLK), or fcntl(F_SETLKW) to wait for the lock to be available if -wait is specified. The channel must be open for write access. Returns 1 if the lock was successfully obtained, 0 otherwise. An error occurs if the channel is not suitable for locking (e.g. if it is not open for write)

$handle ndelay ?0|1?

With no argument, returns the non-blocking status of the channel (1 means non-blocking). With an arguments, sets the non-blocking status of the channel.

$handle peername

Returns the remote address or path of the connected socket. See getpeername(2).

$handle puts ?-nonewline? string

Writes the characters given by string to the channel given With -nonewline, the string is written as-is to the channel. Otherwise a newline character is written after the string. See aio buffering and aio flush for how output is buffered.

$handle read ?-nonewline|-pending|len?'

Read and return bytes from the channel. If len is not given, reads until end-of-file. reading from non-blocking channels. For backward compatibility, -pending is accepted, but ignored. If the -nonewline switch is specified then the last character (at end-of-file) is discarded if it is a newline. Note that read on a non-blocking channel may read less than the expected number of bytes (including zero). Use aio eof to determine if the end-of-file has been reached.

$handle readsize ?size?'

Sets or returns the current size of the read buffer used for read, gets and copyto. Defaults to 256, but can be increased to improve performance for large reads.

$handle recvfrom maxlen ?addrvar?

Receives a message from the datagram channel via recvfrom(2) and returns it. At most maxlen bytes are read. If addrvar is specified, the sending address of the message is stored in the named variable in the form addr:port for IP sockets or path for Unix domain sockets. See socket for details.

$handle seek offset ?start|current|end?

Change the current access position for the channel. This is only applicable to regular files, not sockets. The offset and origin arguments specify the position at which the next read or write will occur for fileId. offset must be a number (which may be negative) and origin must be one of the following:

start

The new access position will be offset bytes from the start of the file.

current

The new access position will be offset bytes from the current access position; a negative offset moves the access position backwards in the file.

end

The new access position will be offset bytes from the end of the file. A negative offset places the access position before the end-of-file, and a positive offset places the access position after the end-of-file.

The origin argument defaults to start.

This command returns an empty string.

$handle sendto str ?address

Sends the string, str, to the given address (host:port or path) via datagram socket channel using sendto(2). This is intended for udp/dgram sockets and may give an error or behave in unintended ways for other handle types. Returns the number of bytes written.

$handle sockname

Returns the bound address or path of the socket channel. See getsockname(2).

$handle stat ?varName?

Implements the same functionality as file stat for a file channel. Only available on platforms that support fstat(2) or equivalent.

$handle sockopt ?name value?

With no arguments, returns a dictionary of socket options currently set for the socket channel (will be empty for a non-socket). With name and value, sets the socket option to the given value. Currently supports the following boolean socket options: broadcast, debug, keepalive, nosigpipe, oobinline, tcp_nodelay, and the following integer socket options: sndbuf, rcvbuf

$handle sync

Flushes the channel, then calls fsync(2) to commit any changes to storage. Only available on platforms that support fsync(2). If the flush fails (perhaps because the channel is non-blocking), an error will be returned instead. Although this is designed for normal files and those should be used in blocking mode.

$handle taint source|sink ?0:n?

Sets the taint characteristics of the channel. Data read from the channel will have a taint value as set by source, while a check will be made against data written to the channel against the sink value. If the taint of the data and the channel match, the operation will fail. By default, channels created by open are not tainted while channels created by socket have both set to 1.

$handle tell

Returns the current seek position or -1 if the channel is not seekable.

$handle timeout ?ms?

With no argument, returns the current timeout of the channel, in milliseconds. If an argument is given, it is set as the timeout of the channel, in milliseconds. See aio read and aio gets for command that use the timeout. Note that the timeout is only used if the channel is in blocking mode.

$handle translation binary|text

This has no effect on Unix platforms, but on Windows it changes the mode of the file handle to binary or text. In general, use "wb" as the open mode instead, but this can be useful on existing filehandles such as stdout and stderr. It is probably a good idea to do this immediately before sending any output.

$handle tty ?settings?

If no arguments are given, returns a dictionary containing the tty settings for the stream. If arguments are given, they must either be a dictionary, or setting value .... Abbreviations are supported for both settings and values, so the following is acceptable: $f tty parity e input c out raw. Only available on platforms that support termios(3). Supported settings are:

baud rate

Baud rate. e.g. 115200

data 5|6|7|8

Number of data bits

stop 1|2

Number of stop bits

parity even|odd|none

Parity setting

handshake xonxoff|rtscts|none

Handshaking type

input raw|cooked

Input character processing. In raw mode, the usual key sequences such as ^C do not generate signals.

output raw|cooked

Output character processing. Typically CR → CRNL is disabled in raw mode.

echo 0|1

Disable or enable echo on input. Note that this is a set-only value. Setting input to raw or cooked will overwrite this setting.

vmin numchars

Minimum number of characters to read.

vtime time

Timeout for noncanonical read (units of 0.1 seconds)

vstart char

Start character for xonoff, usually 0x11 (^Q)

vstop char

Stop character for xonoff, usually 0x13 (^S)

$handle ttycontrol ?settings?

If no arguments are given, returns a dictionary containing the modem control signals from the stream (must be a serial-type device). e.g. {rts 1 dtr 1 dcd 0 dsr 0 ring 0 cts 0}. Note that rts and dtr are controlled by the local system while the other signals reflect the remote system. If arguments are given, they must either be a dictionary, or setting value .... Abbreviations are supported for both settings and values. Supported settings are:

rts 0|1

Set the RTS (Request To Send) signal

dtr 0|1

Set the DTR (Data Terminal Ready) signal

break duration

Generate a break condition. duration is generally ignored but may be used in a platform-dependent manner.

$handle ssl ?-server cert ?key?|-sni servername?

Upgrades the stream to a SSL/TLS session and returns the handle. If -server is specified, either both the certificate and private key files must be specified, or a single file must be specified containing both. If -server is not specified, the connection is a client connection. In this case -sni may be specified if required to set the Server Name Indication.

$handle unlock

Release a POSIX lock previously acquired by aio lock.

$handle verify

Verifies the certificate of a SSL/TLS stream peer

load_ssl_certs dir

Loads SSL/TLS CA certificates for use during verification

Buffering, non-blocking and timeouts

Channels normally operate in blocking mode. This means that reads (gets, read, copyto) block until data is received or end-of-file is reached, or an error occurs. Similarly, writes (puts, copyto) block if the channel is not current writable.

It is possible to set a timeout for blocking reads with aio timeout, generally useful on stream socket channels. If a timeout is specified for a channel (the default is 0/indefinite), a blocking read will return with no data if the timeout expires without reading any data.

For some applications, and especially when using the eventloop, blocking I/O and timeouts are not appropriate. Instead we wish to read what is available, and write what is possible in the readable and writable scripts and then return until the next event. This can be achived by setting a channel non-blocking mode with aio ndelay. In this case, aio read, aio gets and aio puts will return early if they would otherwise block, performing us much work as posssible. For example, aio read may return less data than requested and aio puts may write less data than requested (although see aio flush about additional write data can be automatically flushed). If aio gets does not receive an entire line, it returns -1. In all these cases aio eof can be used to determine if end-of-file was reached.

fconfigure

fconfigure handle ?-blocking 0|1? ?-buffering noneline|full? ?-translation mode?

For compatibility with Tcl, a limited form of the fconfigure command is supported.

eventloop: after, vwait, update

The following commands allow a script to be invoked when the given condition occurs. If no script is given, returns the current script. If the given script is the empty, the handler is removed.

$handle readable ?readable-script?

Sets or returns the script for when the socket is readable.

$handle writable ?writable-script?

Sets or returns the script for when the socket is writable.

$handle onexception ?exception-script?

Sets or returns the script for when oob data received.

For compatibility with Tcl, these may be prefixed with fileevent. e.g.

fileevent $handle readable ...

Time-based execution is also available via the eventloop API.

after ms

Sleeps for the given number of milliseconds. No events are processed during this time.

after ms|idle script ?script ...?

The scripts are concatenated and executed after the given number of milliseconds have elapsed. If idle is specified, the script will run the next time the event loop is processed with vwait or update. The script is only run once and then removed. Returns an event id.

after cancel id|command

Cancels an after event with the given event id or matching command (script). Returns the number of milliseconds remaining until the event would have fired. Returns the empty string if no matching event is found.

after info ?id?

If id is not given, returns a list of current after events. If id is given, returns a list containing the associated script and either timer or idle to indicated the type of the event. An error occurs if id does not match an event.

vwait ?-signal? variable ?script?

A call to vwait enters the eventloop. vwait processes events until the named (global) variable changes or all event handlers are removed. The variable need not exist beforehand. If there are no event handlers defined, vwait returns immediately. If -signal is specified, vwait will also quit if a handled signal occurs. In this case, signal check -clear can be used to check for the signal that occurred. If script is given it is evaluated after each event. If it returns break, vwait returns. vwait also returns with an error if the script returns an error.

update ?idletasks?

A call to update enters the eventloop to process expired events, but no new events. If idletasks is specified, only expired time events are handled, not file events. Returns once handlers have been run for all expired events.

Scripts are executed at the global scope. If an error occurs during a handler script, an attempt is made to call (the user-defined command) bgerror with the details of the error. If the bgerror command does not exist, the error message details are printed to stderr instead.

If a file event handler script generates an error, the handler is automatically removed to prevent infinite errors. (A time event handler is always removed after execution).

bgerror msg

Called when an event handler script generates an error. Note that the normal command resolution rules are used for bgerror. First the name is resolved in the current namespace, then in the global scope.

socket

Various socket types may be created as follows.

socket ?-noclose? unix path

A unix domain socket client connected to path filename returns path

socket ?-noclose? unix.server path

A unix domain socket server listening on path filename returns path

socket ?-noclose? unix.dgram ?path?

A unix domain socket datagram client, optionally connected to path filename returns path if provided or "dgram" if not

socket ?-noclose? unix.dgram.server path

A unix domain socket datagram server server listening on path filename returns path

socket ?-noclose? ?-async? ?-ipv6? stream addr:port

A TCP socket client. (See the forms for addr below) filename returns addr:port

socket ?-noclose? ?-async? ?-ipv6? stream.server ?addr:?port

A TCP socket server (addr defaults to 0.0.0.0 for IPv4 or [::] for IPv6). filename returns addr:port

socket ?-noclose? ?-async? ?-ipv6? dgram ?addr:port?

A UDP socket client. If the address is not specified, the client socket will be unbound and sendto must be used to indicated the destination. filename returns addr:port if provided or "dgram" if not

socket ?-noclose? ?-async? ?-ipv6? dgram.server addr:port

A UDP socket server. filename returns addr:port

socket ?-noclose? pipe

A synonym for pipe filename returns "pipe"

socket ?-noclose? pair

A socketpair (see socketpair(2)). Like pipe, this command returns a list of two channels: {s1 s2}. These channels are both readable and writable. filename returns "pair"

socket ?-noclose? pty

A pseudo-tty pair (see openpty(3)). Like pipe, this command returns a list of two channels: {primary replica}. These channels are both readable and writable. filename for both handles returns the replica filename.

This command creates a socket connected (client) or bound (server) to the given address.

The returned value is channel and may generally be used with the various file I/O commands (gets, puts, read, etc.), either as object-based syntax or Tcl-compatible syntax.

    . set f [socket stream www.google.com:80]
    aio.sockstream1
    . $f puts -nonewline "GET / HTTP/1.0\r\n\r\n"
    . $f gets
    HTTP/1.0 302 Found
    . $f close

Server sockets, however support only accept, which is most useful in conjunction with the EVENTLOOP API.

    set f [socket stream.server 80]
    $f readable {
        set client [$f accept]
        $client gets $buf
        ...
        $client puts -nonewline "HTTP/1.1 404 Not found\r\n"
        $client close
    }
    vwait done

The address, addr, can be given in one of the following forms:

  1. For IPv4 socket types, an IPv4 address such as 192.168.1.1

  2. For IPv6 socket types, an IPv6 address such as [fe80::1234] or [::]

  3. A hostname

Note that on many systems, listening on an IPv6 address such as [::] will also accept requests via IPv4.

Where a hostname is specified, the first returned address is used which matches the socket type is used.

An unconnected dgram socket (either dgram or unix.dgram) must use sendto to specify the destination address.

The path for Unix domain sockets is automatically removed when the socket is closed. Use close -nodelete in the rare case where this behaviour should be avoided (e.g. after os.fork).

If -async is specified, the socket is opened in non-blocking (ndelay) mode and connect is non-blocking (applies to stream). In this case, a writable handler should be used that will fire when the connect succeeds or fails, and calling peername on the handle will succeed if connected or fail if connect failed. Typical usage is as follows:

    set s [socket -async stream host:port]

    $s writable {
        # Remove writable either way
        $s writable {}
        try {
            $s peername
        } on error msg {
            # Connect failed
            incr done
            return
        }

        $s readable {
            set buf [$s read]
            if {[$s eof]} {
                # Closed connection
                incr done
            }
            ...
        }
    }

    vwait done

If -noclose is specified, the socket is not automatically closed for child proceses. e.g.

    lassign [socket -noclose pipe] r w
    # This file descriptor will be open in the child process
    # with the file descriptors passed on the command line
    exec subcommand [$r getfd] [$w getfd]

syslog

syslog ?options? ?priority? message

This command sends message to system syslog facility with given priority. Valid priorities are:

emerg, alert, crit, err, error, warning, notice, info, debug

If a message is specified, but no priority is specified, then a priority of info is used.

By default, facility user is used and the value of global tcl variable argv0 is used as ident string. However, any of the following options may be specified before priority to control these parameters:

-facility value

Use specified facility instead of user. The following values for facility are recognized:

authpriv, cron, daemon, kernel, lpr, mail, news, syslog, user,
uucp, local0-local7
-ident string

Use given string instead of argv0 variable for ident string.

-options integer

Set syslog options such as LOG_CONS, LOG_NDELAY. You should use numeric values of those from your system syslog.h file, because I haven’t got time to implement yet another hash table.

pack: pack, unpack

The optional pack extension provides commands to encode and decode binary strings.

pack varName value -intle|-intbe|-floatle|-floatbe|-str bitwidth ?bitoffset?

Packs the binary representation of value into the variable varName. The value is packed according to the given type (integer/floating point/string, big-endian/little-endian), width and bit offset. The variable is created if necessary (like append). The variable is expanded if necessary.

unpack binvalue -intbe|-intle|-uintbe|-uintle|-floatbe|-floatle|-str bitpos bitwidth

Unpacks bits from binvalue at bit position bitpos and with bitwidth. Interprets the value according to the type (integer/floating point/string, big-endian/little-endian and signed/unsigned) and returns it. For integer types, bitwidth may be up to the size of a Jim Tcl integer (typically 64 bits). For floating point types, bitwidth may be 32 bits (for single precision numbers) or 64 bits (for double precision). For the string type, both the width and the offset must be on a byte boundary (multiple of 8). Attempting to access outside the length of the value will return 0 for integer types, 0.0 for floating point types or the empty string for the string type.

zlib

The optional zlib extension provides a Tcl-compatible subset of the zlib command.

crc32 data ?startValue?

Returns the CRC32 checksum of a buffer. Optionally, an initial value may be specified; this is most useful for calculating the checksum of chunked data read from a stream (for instance, a pipe).

deflate string ?level?

Compresses a buffer and outputs a raw, Deflate-compressed stream. Optionally, a compression level (1-9) may be specified to choose the desired speed vs. compression rate ratio.

inflate data ?bufferSize?

Decompresses a raw, Deflate-compressed stream. When the uncompressed data size is known and specified, memory allocation is more efficient. Otherwise, decompression is chunked and therefore slower.

gzip string ?-level level?

Compresses a buffer and adds a gzip header.

gunzip data ?-buffersize size?

Decompresses a gzip-compressed buffer. Decompression is chunked, with a default, small buffer size of 64K which guarantees lower memory footprint at the cost of speed. It is recommended to use a bigger size, on systems without a severe memory constraint.

binary

The optional, pure-Tcl binary extension provides the Tcl-compatible binary scan and binary format commands based on the low-level pack and unpack commands.

Note that binary format with f/r/R specifiers (single-precision float) uses the value of Infinity in case of overflow.

oo: class, super

The optional, pure-Tcl oo extension provides object-oriented (OO) support for Jim Tcl.

See the online documentation (http://jim.tcl.tk/index.html/doc/www/www/documentation/oo/) for more details.

class classname ?baseclasses? classvars

Create a new class, classname, with the given dictionary (classvars) as class variables. These are the initial variables which all newly created objects of this class are initialised with. If a list of baseclasses is given, methods and instance variables are inherited.

super method ?args ...?

From within a method, invokes the given method on the base class. Note that this will only call the last baseclass given.

tree

The optional, pure-Tcl tree extension implements an OO, general purpose tree structure similar to that provided by tcllib ::struct::tree (http://core.tcl.tk/tcllib/doc/trunk/embedded/www/tcllib/files/modules/struct/struct_tree.html)

A tree is a collection of nodes, where each node (except the root node) has a single parent and zero or more child nodes (ordered), as well as zero or more attribute/value pairs.

tree

Creates and returns a new tree object with a single node named "root". All operations on the tree are invoked through this object.

$tree destroy

Destroy the tree and all it’s nodes. (Note that the tree will also be automatically garbage collected once it goes out of scope).

$tree set nodename key value

Set the value for the given attribute key.

$tree lappend nodename key value ...

Append to the (list) value(s) for the given attribute key, or set if not yet set.

$tree keyexists nodename key

Returns 1 if the given attribute key exists.

$tree get nodename key

Returns the value associated with the given attribute key.

$tree getall nodename

Returns the entire attribute dictionary associated with the given key.

$tree depth nodename

Returns the depth of the given node. The depth of "root" is 0.

$tree parent nodename

Returns the node name of the parent node, or "" for the root node.

$tree numchildren nodename

Returns the number of child nodes.

$tree children nodename

Returns a list of the child nodes.

$tree next nodename

Returns the next sibling node, or "" if none.

$tree insert nodename ?index?

Add a new child node to the given node. The index is a list index such as 3 or end-2. The default index is end. Returns the name of the newly added node.

$tree walk nodename dfs|bfs {actionvar nodevar} script

Walks the tree starting from the given node, either breadth first (bfs) depth first (dfs). The value "enter" or "exit" is stored in variable actionvar. The name of each node is stored in nodevar. The script is evaluated twice for each node, on entry and exit.

$tree dump

Dumps the tree contents to stdout

tcl::prefix

The optional tclprefix extension provides the Tcl8.6-compatible tcl::prefix command (http://www.tcl.tk/man/tcl8.6/TclCmd/prefix.htm) for matching strings against a table of possible values (typically commands or options).

tcl::prefix all table string

Returns a list of all elements in table that begin with the prefix string.

tcl::prefix longest table string

Returns the longest common prefix of all elements in table that begin with the prefix string.

tcl::prefix match ?options? table string

If string equals one element in table or is a prefix to exactly one element, the matched element is returned. If not, the result depends on the -error option.

  • -exact Accept only exact matches.

  • -message string Use string in the error message at a mismatch. Default is "option".

  • -error options The options are used when no match is found. If options is empty, no error is generated and an empty string is returned. Otherwise the options are used as return options when generating the error message. The default corresponds to setting -level 0.

tcl::autocomplete

Scriptable command line completion is supported in the interactive shell, jimsh, through the tcl::autocomplete callback. A simple implementation is provided, however this may be replaced with a custom command instead if desired.

In the interactive shell, press <TAB> to activate command line completion.

tcl::autocomplete commandline

This command is called with the current command line when the user presses <TAB>. The command should return a list of all possible command lines that match the current command line. For example if pr is the current command line, the list {prefix proc} may be returned.

tcl::stdhint

Scriptable hinting is supported in the interactive shell, jimsh, through the tcl::stdhint callback. A simple implementation is provided, however this may be replaced with a custom command instead if desired.

In the interactive shell, press <TAB> to activate command line completion.

tcl::stdhint commandline

This command is called with the current command line. It should return a list of {hint ?ANSI cols?} or "" if no hint is available. For example, if passed "dict get" it could return {"dict get dictionary ?key …?" 36 1} to show the given hint in light cyan.

The built-in tcl::stdhint callback uses tcl::stdhint_col for the colour. tcl::stdhint_cols can be used to easily change this colour, e.g. in ~/.jimrc.

    . parray tcl::stdhint_cols
    tcl::stdhint_cols(black)   = 30
    tcl::stdhint_cols(blue)    = 34
    tcl::stdhint_cols(cyan)    = 36
    tcl::stdhint_cols(gray)    = 30 1
    tcl::stdhint_cols(green)   = 32
    tcl::stdhint_cols(grey)    = 30 1
    tcl::stdhint_cols(lblue)   = 34 1
    tcl::stdhint_cols(lcyan)   = 36 1
    tcl::stdhint_cols(lgreen)  = 32 1
    tcl::stdhint_cols(lpurple) = 35 1
    tcl::stdhint_cols(lred)    = 31 1
    tcl::stdhint_cols(lyellow) = 33 1
    tcl::stdhint_cols(none)    = 0
    tcl::stdhint_cols(normal)  = 37
    tcl::stdhint_cols(purple)  = 35
    tcl::stdhint_cols(red)     = 31
    tcl::stdhint_cols(white)   = 37 1
    tcl::stdhint_cols(yellow)  = 33

history

The optional history extension provides script access to the command line editing and history support available in jimsh. See examples/jtclsh.tcl for an example. Note: if line editing support is not available, history getline acts like gets and the remaining subcommands do nothing.

history load filename

Load history from a (text) file. If the file does not exist or is not readable, it is ignored.

history getline prompt ?varname?

Displays the given prompt and allows a line to be entered. Similarly to gets, if varname is given, it receives the line and the length of the line is returned, or -1 on EOF. If varname is not given, the line is returned directly.

history completion command

Sets an autocompletion command (see tcl::autocomplete) that is active during history getline. If the command is empty, autocompletion is disabled.

history hints command

Sets a hinting command (see tcl::stdhint) that is active during history getline. If the command is empty, hinting is disabled.

history add line

Adds the given line to the history buffer.

history keep ?count?

Set or return the maximum history size. Defaults to 100.

history save filename

Saves the current history buffer to the given file.

history show

Displays the current history buffer to standard output.

namespace

Provides namespace-related functions. See also: http://www.tcl.tk/man/tcl8.6/TclCmd/namespace.htm

namespace canonical ?current? ?name?

Returns the full name of name within namespace current. If current is not given, namespace current is used. If neither are given, returns the current namespace (not qualified with a leading ::).

namespace code script

Captures the current namespace context for later execution of the script script. It returns a new script in which script has been wrapped in a namespace inscope command.

namespace current

Returns the fully-qualified name for the current namespace.

namespace delete ?namespace …?

Deletes all commands and variables with the given namespace prefixes.

namespace ensemble create

Creates an ensemble command for the current namespace (requires the ensemble extension').

namespace eval namespace arg ?arg…?

Activates a namespace called namespace and evaluates some code in that context.

namespace origin command

Returns the fully-qualified name of the original command to which the imported command command refers.

namespace parent ?namespace?

Returns the fully-qualified name of the parent namespace for namespace namespace, if given, otherwise for the current namespace.

namespace qualifiers string

Returns any leading namespace qualifiers for string

namespace tail string

Returns the simple name at the end of a qualified string.

namespace upvar namespace ?arg…?

This command arranges for zero or more local variables in the current procedure to refer to variables in namespace

namespace which ?-command|-variable? name

Looks up name as either a command (the default) or variable and returns its fully-qualified name.

interp

The optional interp command allows sub-interpreters to be created where commands may be run independently (but synchronously) of the main interpreter.

interp

Creates and returns a new interpreter object (command). The created interpreter contains any built-in commands along with static extensions, but does not include any dynamically loaded commands (package require, load). These must be reloaded in the child interpreter if required.

$interp delete

Deletes the interpreter object.

$interp eval script …

Evaluates a script in the context for the child interpreter, in the same way as eval.

$interp alias alias childcmd parentcmd ?arg …?

Similar to alias, but creates a command, childcmd, in the child interpreter that is an alias for parentcmd in the parent interpreter, with the given, fixed arguments. The alias may be deleted in the child with rename.

json::encode

The Tcl → JSON encoder is part of the optional json package.

json::encode value ?schema?

Encode a Tcl value as JSON according to the schema (defaults to str). The following schema types are supported:

  • str - Tcl string → JSON string

  • num - Tcl value → bare numeric value or null

  • bool - Tcl boolean value → true, false

  • obj ?name subschema …? - Tcl dict → JSON object. For each dict key matching name, the corresponding subschema is applied. The special name * matches any keys not otherwise matched, otherwise the default str is used.

  • list ?subschema? - Tcl list → JSON array. The subschema (default str) is applied for each element of the list/array.

  • mixed ?subschema …? = Tcl list → JSON array. Each subschema is applied for the corresponding element of the list/array.

The following are examples:

    . json::encode {1 2 true false null 5.0} list
    [ "1", "2", "true", "false", "null", "5.0" ]
    . json::encode {1 2 true false null 5.0} {list num}
    [ 1, 2, true, false, null, 5.0 ]
    . json::encode {0 1 2 true false 5.0 off} {list bool}
    [ false, true, true, true, false, true, false ]
    . json::encode {a 1 b hello c {3 4}} obj
    { "a":"1", "b":"hello", "c":"3 4" }
    . json::encode {a 1 b hello c {3 4}} {obj a num c {list num}}
    { "a":1, "b":"hello", "c":[ 3, 4 ] }
    . json::encode {true true {abc def}} {mixed str num obj}
    [ "true", true, { "abc":"def" } ]
    . json::encode {a 1 b 3.0 c hello d null} {obj c str * num}
    { "a":1, "b":3.0, "c":"hello", "d":null }

json::decode

The JSON → Tcl decoder is part of the optional json package.

json::decode ?-index? ?-null string? ?-schema? json-string

Decodes the given JSON string (must be array or object) into a Tcl data structure. If -index is specified, decodes JSON arrays as dictionaries with numeric keys. This makes it possible to retrieve data from nested arrays and dictionaries with just dict get. With the option -schema returns a list of {data schema} where the schema is compatible with json::encode. Otherwise just returns the data. Decoding is as follows (with schema types listed in parentheses):

  • object → dict (obj)

  • array → list (mixed or list)

  • number → as-is (num)

  • boolean → as-is (bool)

  • string → string (str)

  • null → supplied null string or the default "null" (num)

Note that an object decoded into a dict will return the keys in the same order as the original string.

    . json::decode {[1, 2]}
    {1 2}
    . json::decode -schema {[1, 2]}
    {1 2} {list num}
    . json::decode -schema {{"a":1, "b":2}}
    {a 1 b 2} {obj a num b num}
    . json::decode -schema {[1, 2, {a:"b", c:false}, "hello"]}
    {1 2 {a b c false} hello} {mixed num num {obj a str c bool} str}
    . json::decode -index {["foo", "bar"]}
    {0 foo 1 bar}

BUILT-IN VARIABLES

The following global variables are created automatically by the Tcl library.

env

This variable is set by Jim as an array whose elements are the environment variables for the process. Reading an element will return the value of the corresponding environment variable. This array is initialised at startup from the env command. It may be modified and will affect the environment passed to commands invoked with exec.

platform_tcl

This variable is set by Jim as an array containing information about the platform on which Jim was built. Currently this includes os and platform.

auto_path

This variable contains a list of paths to search for packages. It defaults to a location based on where jim is installed (e.g. /usr/local/lib/jim), but may be changed by jimsh or the embedding application. Note that jimsh will consider the environment variable $JIMLIB to be a list of colon-separated list of paths to add to auto_path.

errorCode

This variable holds the value of the -errorcode return option set by the most recent error that occurred in this interpreter. This list value represents additional information about the error in a form that is easy to process with programs. The first element of the list identifies a general class of errors, and determines the format of the rest of the list. The following formats for -errorcode return options are used by the Tcl core; individual applications may define additional formats. Currently only exec sets this variable. Otherwise it will be NONE.

The following global variables are set by jimsh.

tcl_interactive

This variable is set to 1 if jimsh is started in interactive mode or 0 otherwise.

tcl_platform

This variable is set by Jim as an array containing information about the platform upon which Jim was built. The following is an example of the contents of this array.

    tcl_platform(bootstrap)     = 0
    tcl_platform(byteOrder)     = littleEndian
    tcl_platform(engine)        = Jim
    tcl_platform(os)            = darwin
    tcl_platform(pathSeparator) = :
    tcl_platform(platform)      = unix
    tcl_platform(pointerSize)   = 8
    tcl_platform(stackFormat)   = 4
    tcl_platform(threaded)      = 0
    tcl_platform(wordSize)      = 8
argv0

If jimsh is invoked to run a script, this variable contains the name of the script.

argv

If jimsh is invoked to run a script, this variable contains a list of any arguments supplied to the script.

argc

If jimsh is invoked to run a script, this variable contains the number of arguments supplied to the script.

jim::argv0

The value of argv[0] when jimsh was invoked.

jim::lineedit

This variables is set to 1 if jimsh was configured with line editing support, or 0 if not.

The following variables have special meaning to Jim Tcl:

jim::defer

If this variable is set, it is considered to be a list of scripts to evaluate when the current proc exits (local variables), or the interpreter exits (global variable). See defer.

history::multiline

If this variable is set to "1", interactive line editing operates in multiline mode. That is, long lines will wrap across multiple lines rather than scrolling within a single line.

CHANGES IN PREVIOUS RELEASES

In v0.74

  1. Numbers with leading zeros are treated as decimal, not octal

  2. Add aio isatty

  3. Add LFS (64 bit) support for aio seek, aio tell, aio copyto, file copy

  4. string compare and string equal now support -length

  5. glob now supports -directory

In v0.73

  1. Built-in regexp now support non-capturing parentheses: (?:…)

  2. Add string replace

  3. Add string totitle

  4. Add info statics

  5. Add build-jim-ext for easy separate building of loadable modules (extensions)

  6. local now works with any command, not just procs

  7. Add info alias to access the target of an alias

  8. UTF-8 encoding past the basic multilingual plane (BMP) is supported

  9. Add tcl::prefix

  10. Add history

  11. Most extensions are now enabled by default

  12. Add support for namespaces and the namespace command

  13. Add apply

In v0.72

  1. procs now allow args and optional parameters in any position

  2. Add Tcl-compatible expr functions, rand(), srand() and pow()

  3. Add support for the -force option to file delete

  4. Better diagnostics when source fails to load a script with a missing quote or bracket

  5. New tcl_platform(pathSeparator)

  6. Add support settings the modification time with file mtime

  7. exec is now fully supported on win32 (mingw32)

  8. file join, pwd, glob etc. now work for mingw32

  9. Line editing is now supported for the win32 console (mingw32)

  10. Add aio listen command

In v0.71

  1. Allow args to be renamed in procs

  2. Add $(…) shorthand syntax for expressions

  3. Add automatic reference variables in procs with &var syntax

  4. Support jimsh --version

  5. Additional variables in tcl_platform()

  6. local procs now push existing commands and upcall can call them

  7. Add loop command (TclX compatible)

  8. Add aio buffering command

  9. info complete can now return the missing character

  10. binary format and binary scan are now (optionally) supported

  11. Add string byterange

  12. Built-in regexp now support non-greedy repetition (*?, +?, ??)

In v0.70

  1. platform_tcl() settings are now automatically determined

  2. Add aio $handle filename

  3. Add info channels

  4. The bio extension is gone. Now aio supports copyto.

  5. Add exists command

  6. Add the pure-Tcl oo extension

  7. The exec command now only uses vfork(), not fork()

  8. Unit test framework is less verbose and more Tcl-compatible

  9. Optional UTF-8 support

  10. Optional built-in regexp engine for better Tcl compatibility and UTF-8 support

  11. Command line editing in interactive mode, e.g. jimsh

In v0.63

  1. source now checks that a script is complete (.i.e. not missing a brace)

  2. info complete now uses the real parser and so is 100% accurate

  3. Better access to live stack frames with info frame, stacktrace and stackdump

  4. tailcall no longer loses stack trace information

  5. Add alias and curry

  6. lambda, alias and curry are implemented via tailcall for efficiency

  7. local allows procedures to be deleted automatically at the end of the current procedure

  8. udp sockets are now supported for both clients and servers.

  9. vfork-based exec is now working correctly

  10. Add file tempfile

  11. Add socket pipe

  12. Enhance try … on … finally to be more Tcl 8.6 compatible

  13. It is now possible to return from within try

  14. IPv6 support is now included

  15. Add string is

  16. Event handlers works better if an error occurs. eof handler has been removed.

  17. exec now sets $::errorCode, and catch sets opts(-errorcode) for exit status

  18. Command pipelines via open "|…" are now supported

  19. pid can now return pids of a command pipeline

  20. Add info references

  21. Add support for after 'ms, 'after idle, after info, update

  22. exec now sets environment based on $::env

  23. Add dict keys

  24. Add support for lsort -index

In v0.62

  1. Add support to exec for >&, >>&, |&, 2>@1

  2. Fix exec error messages when special token (e.g. >) is the last token

  3. Fix subst handling of backslash escapes.

  4. Allow abbreviated options for subst

  5. Add support for return, break, continue in subst

  6. Many expr bug fixes

  7. Add support for functions in expr (e.g. int(), abs()), and also in, ni list operations

  8. The variable name argument to regsub is now optional

  9. Add support for unset -nocomplain

  10. Add support for list commands: lassign, lrepeat

  11. Fully-functional lsearch is now implemented

  12. Add info nameofexecutable and info returncodes

  13. Allow catch to determine what return codes are caught

  14. Allow incr to increment an unset variable by first setting to 0

  15. Allow args and optional arguments to the left or required arguments in proc

  16. Add file copy

  17. Add try … finally command

LICENCE

Copyright 2005 Salvatore Sanfilippo <antirez@invece.org>
Copyright 2005 Clemens Hintze <c.hintze@gmx.net>
Copyright 2005 patthoyts - Pat Thoyts <patthoyts@users.sf.net>
Copyright 2008 oharboe - Oyvind Harboe - oyvind.harboe@zylin.com
Copyright 2008 Andrew Lunn <andrew@lunn.ch>
Copyright 2008 Duane Ellis <openocd@duaneellis.com>
Copyright 2008 Uwe Klein <uklein@klein-messgeraete.de>
Copyright 2009 Steve Bennett <steveb@workware.net.au>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above
   copyright notice, this list of conditions and the following
   disclaimer in the documentation and/or other materials
   provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE JIM TCL PROJECT ``AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
JIM TCL PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The views and conclusions contained in the software and documentation
are those of the authors and should not be interpreted as representing
official policies, either expressed or implied, of the Jim Tcl Project.

jimtcl-0.84/UnicodeData.txt000066400000000000000000071725011522604140100156600ustar00rootroot000000000000000000;;Cc;0;BN;;;;;N;NULL;;;; 0001;;Cc;0;BN;;;;;N;START OF HEADING;;;; 0002;;Cc;0;BN;;;;;N;START OF TEXT;;;; 0003;;Cc;0;BN;;;;;N;END OF TEXT;;;; 0004;;Cc;0;BN;;;;;N;END OF TRANSMISSION;;;; 0005;;Cc;0;BN;;;;;N;ENQUIRY;;;; 0006;;Cc;0;BN;;;;;N;ACKNOWLEDGE;;;; 0007;;Cc;0;BN;;;;;N;BELL;;;; 0008;;Cc;0;BN;;;;;N;BACKSPACE;;;; 0009;;Cc;0;S;;;;;N;CHARACTER TABULATION;;;; 000A;;Cc;0;B;;;;;N;LINE FEED (LF);;;; 000B;;Cc;0;S;;;;;N;LINE TABULATION;;;; 000C;;Cc;0;WS;;;;;N;FORM FEED (FF);;;; 000D;;Cc;0;B;;;;;N;CARRIAGE RETURN (CR);;;; 000E;;Cc;0;BN;;;;;N;SHIFT OUT;;;; 000F;;Cc;0;BN;;;;;N;SHIFT IN;;;; 0010;;Cc;0;BN;;;;;N;DATA LINK ESCAPE;;;; 0011;;Cc;0;BN;;;;;N;DEVICE CONTROL ONE;;;; 0012;;Cc;0;BN;;;;;N;DEVICE CONTROL TWO;;;; 0013;;Cc;0;BN;;;;;N;DEVICE CONTROL THREE;;;; 0014;;Cc;0;BN;;;;;N;DEVICE CONTROL FOUR;;;; 0015;;Cc;0;BN;;;;;N;NEGATIVE ACKNOWLEDGE;;;; 0016;;Cc;0;BN;;;;;N;SYNCHRONOUS IDLE;;;; 0017;;Cc;0;BN;;;;;N;END OF TRANSMISSION BLOCK;;;; 0018;;Cc;0;BN;;;;;N;CANCEL;;;; 0019;;Cc;0;BN;;;;;N;END OF MEDIUM;;;; 001A;;Cc;0;BN;;;;;N;SUBSTITUTE;;;; 001B;;Cc;0;BN;;;;;N;ESCAPE;;;; 001C;;Cc;0;B;;;;;N;INFORMATION SEPARATOR FOUR;;;; 001D;;Cc;0;B;;;;;N;INFORMATION SEPARATOR THREE;;;; 001E;;Cc;0;B;;;;;N;INFORMATION SEPARATOR TWO;;;; 001F;;Cc;0;S;;;;;N;INFORMATION SEPARATOR ONE;;;; 0020;SPACE;Zs;0;WS;;;;;N;;;;; 0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; 0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;; 0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;; 0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;; 0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;; 0026;AMPERSAND;Po;0;ON;;;;;N;;;;; 0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;; 0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;; 0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;; 002A;ASTERISK;Po;0;ON;;;;;N;;;;; 002B;PLUS SIGN;Sm;0;ES;;;;;N;;;;; 002C;COMMA;Po;0;CS;;;;;N;;;;; 002D;HYPHEN-MINUS;Pd;0;ES;;;;;N;;;;; 002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;; 002F;SOLIDUS;Po;0;CS;;;;;N;SLASH;;;; 0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;; 0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;; 0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;; 0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;; 0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;; 0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;; 0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;; 0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;; 0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;; 0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;; 003A;COLON;Po;0;CS;;;;;N;;;;; 003B;SEMICOLON;Po;0;ON;;;;;N;;;;; 003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;; 003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;; 003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;; 003F;QUESTION MARK;Po;0;ON;;;;;N;;;;; 0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;; 0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061; 0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062; 0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063; 0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064; 0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065; 0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066; 0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067; 0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068; 0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069; 004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A; 004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B; 004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C; 004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D; 004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E; 004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F; 0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070; 0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071; 0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072; 0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073; 0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074; 0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075; 0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076; 0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077; 0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078; 0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079; 005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A; 005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;; 005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;; 005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;; 005E;CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;SPACING CIRCUMFLEX;;;; 005F;LOW LINE;Pc;0;ON;;;;;N;SPACING UNDERSCORE;;;; 0060;GRAVE ACCENT;Sk;0;ON;;;;;N;SPACING GRAVE;;;; 0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041 0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042 0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043 0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044 0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045 0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046 0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047 0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048 0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049 006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A 006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B 006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C 006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D 006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E 006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F 0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050 0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051 0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052 0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053 0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054 0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055 0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056 0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057 0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058 0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059 007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A 007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;; 007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;; 007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;; 007E;TILDE;Sm;0;ON;;;;;N;;;;; 007F;;Cc;0;BN;;;;;N;DELETE;;;; 0080;;Cc;0;BN;;;;;N;;;;; 0081;;Cc;0;BN;;;;;N;;;;; 0082;;Cc;0;BN;;;;;N;BREAK PERMITTED HERE;;;; 0083;;Cc;0;BN;;;;;N;NO BREAK HERE;;;; 0084;;Cc;0;BN;;;;;N;;;;; 0085;;Cc;0;B;;;;;N;NEXT LINE (NEL);;;; 0086;;Cc;0;BN;;;;;N;START OF SELECTED AREA;;;; 0087;;Cc;0;BN;;;;;N;END OF SELECTED AREA;;;; 0088;;Cc;0;BN;;;;;N;CHARACTER TABULATION SET;;;; 0089;;Cc;0;BN;;;;;N;CHARACTER TABULATION WITH JUSTIFICATION;;;; 008A;;Cc;0;BN;;;;;N;LINE TABULATION SET;;;; 008B;;Cc;0;BN;;;;;N;PARTIAL LINE FORWARD;;;; 008C;;Cc;0;BN;;;;;N;PARTIAL LINE BACKWARD;;;; 008D;;Cc;0;BN;;;;;N;REVERSE LINE FEED;;;; 008E;;Cc;0;BN;;;;;N;SINGLE SHIFT TWO;;;; 008F;;Cc;0;BN;;;;;N;SINGLE SHIFT THREE;;;; 0090;;Cc;0;BN;;;;;N;DEVICE CONTROL STRING;;;; 0091;;Cc;0;BN;;;;;N;PRIVATE USE ONE;;;; 0092;;Cc;0;BN;;;;;N;PRIVATE USE TWO;;;; 0093;;Cc;0;BN;;;;;N;SET TRANSMIT STATE;;;; 0094;;Cc;0;BN;;;;;N;CANCEL CHARACTER;;;; 0095;;Cc;0;BN;;;;;N;MESSAGE WAITING;;;; 0096;;Cc;0;BN;;;;;N;START OF GUARDED AREA;;;; 0097;;Cc;0;BN;;;;;N;END OF GUARDED AREA;;;; 0098;;Cc;0;BN;;;;;N;START OF STRING;;;; 0099;;Cc;0;BN;;;;;N;;;;; 009A;;Cc;0;BN;;;;;N;SINGLE CHARACTER INTRODUCER;;;; 009B;;Cc;0;BN;;;;;N;CONTROL SEQUENCE INTRODUCER;;;; 009C;;Cc;0;BN;;;;;N;STRING TERMINATOR;;;; 009D;;Cc;0;BN;;;;;N;OPERATING SYSTEM COMMAND;;;; 009E;;Cc;0;BN;;;;;N;PRIVACY MESSAGE;;;; 009F;;Cc;0;BN;;;;;N;APPLICATION PROGRAM COMMAND;;;; 00A0;NO-BREAK SPACE;Zs;0;CS; 0020;;;;N;NON-BREAKING SPACE;;;; 00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; 00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;; 00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;; 00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;; 00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;; 00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;; 00A7;SECTION SIGN;Po;0;ON;;;;;N;;;;; 00A8;DIAERESIS;Sk;0;ON; 0020 0308;;;;N;SPACING DIAERESIS;;;; 00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;; 00AA;FEMININE ORDINAL INDICATOR;Lo;0;L; 0061;;;;N;;;;; 00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;;;; 00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;; 00AD;SOFT HYPHEN;Cf;0;BN;;;;;N;;;;; 00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;; 00AF;MACRON;Sk;0;ON; 0020 0304;;;;N;SPACING MACRON;;;; 00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;; 00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;; 00B2;SUPERSCRIPT TWO;No;0;EN; 0032;;2;2;N;SUPERSCRIPT DIGIT TWO;;;; 00B3;SUPERSCRIPT THREE;No;0;EN; 0033;;3;3;N;SUPERSCRIPT DIGIT THREE;;;; 00B4;ACUTE ACCENT;Sk;0;ON; 0020 0301;;;;N;SPACING ACUTE;;;; 00B5;MICRO SIGN;Ll;0;L; 03BC;;;;N;;;039C;;039C 00B6;PILCROW SIGN;Po;0;ON;;;;;N;PARAGRAPH SIGN;;;; 00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;; 00B8;CEDILLA;Sk;0;ON; 0020 0327;;;;N;SPACING CEDILLA;;;; 00B9;SUPERSCRIPT ONE;No;0;EN; 0031;;1;1;N;SUPERSCRIPT DIGIT ONE;;;; 00BA;MASCULINE ORDINAL INDICATOR;Lo;0;L; 006F;;;;N;;;;; 00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;;;; 00BC;VULGAR FRACTION ONE QUARTER;No;0;ON; 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;; 00BD;VULGAR FRACTION ONE HALF;No;0;ON; 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;; 00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON; 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;; 00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;; 00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0; 00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1; 00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2; 00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3; 00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4; 00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5; 00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;;;00E6; 00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7; 00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8; 00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9; 00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA; 00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB; 00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC; 00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED; 00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE; 00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF; 00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;;;00F0; 00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1; 00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2; 00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3; 00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4; 00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5; 00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6; 00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;; 00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8; 00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9; 00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA; 00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB; 00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC; 00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD; 00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;;;00FE; 00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;;;; 00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0 00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1 00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2 00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3 00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4 00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5 00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;;00C6;;00C6 00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7 00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8 00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9 00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA 00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB 00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC 00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD 00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE 00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF 00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;;00D0;;00D0 00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1 00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2 00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3 00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4 00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5 00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6 00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;; 00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8 00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9 00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA 00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB 00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC 00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD 00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;;00DE;;00DE 00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178 0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101; 0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100 0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103; 0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102 0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105; 0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104 0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107; 0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106 0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109; 0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108 010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B; 010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A 010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D; 010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C 010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F; 010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E 0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111; 0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110 0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113; 0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112 0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115; 0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114 0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117; 0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116 0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119; 0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118 011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B; 011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A 011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D; 011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C 011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F; 011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E 0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121; 0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120 0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123; 0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122 0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125; 0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124 0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127; 0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126 0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129; 0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128 012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B; 012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A 012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D; 012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C 012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F; 012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E 0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069; 0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049 0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L; 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133; 0133;LATIN SMALL LIGATURE IJ;Ll;0;L; 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132 0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135; 0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134 0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137; 0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136 0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;;;; 0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A; 013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139 013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C; 013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B 013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E; 013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D 013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L; 004C 00B7;;;;N;;;;0140; 0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L; 006C 00B7;;;;N;;;013F;;013F 0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142; 0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141 0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144; 0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143 0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146; 0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145 0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148; 0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147 0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L; 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;; 014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;;;014B; 014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;;014A;;014A 014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D; 014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C 014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F; 014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E 0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151; 0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150 0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153; 0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152 0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155; 0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154 0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157; 0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156 0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159; 0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158 015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B; 015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A 015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D; 015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C 015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;;;015F; 015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;;015E;;015E 0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161; 0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160 0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;;;0163; 0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;;0162;;0162 0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165; 0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164 0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167; 0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166 0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169; 0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168 016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B; 016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A 016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D; 016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C 016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F; 016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E 0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171; 0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170 0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173; 0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172 0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175; 0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174 0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177; 0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176 0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF; 0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A; 017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179 017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C; 017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B 017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E; 017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D 017F;LATIN SMALL LETTER LONG S;Ll;0;L; 0073;;;;N;;;0053;;0053 0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;0243;;0243 0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253; 0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183; 0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182 0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185; 0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184 0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254; 0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188; 0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187 0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;;;0256; 018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257; 018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C; 018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B 018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;; 018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD; 018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259; 0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B; 0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192; 0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191 0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260; 0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263; 0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;;01F6;;01F6 0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269; 0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268; 0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199; 0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198 019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;023D;;023D 019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;; 019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F; 019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272; 019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;0220;;0220 019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;;;0275; 01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1; 01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0 01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;;;01A3; 01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;;01A2;;01A2 01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5; 01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4 01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;;;0280; 01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8; 01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7 01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283; 01AA;LATIN LETTER REVERSED ESH LOOP;Ll;0;L;;;;;N;;;;; 01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;; 01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD; 01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC 01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288; 01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0; 01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF 01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A; 01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B; 01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4; 01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3 01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6; 01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5 01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292; 01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9; 01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8 01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;; 01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;; 01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD; 01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC 01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;; 01BF;LATIN LETTER WYNN;Ll;0;L;;;;;N;;;01F7;;01F7 01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;; 01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;; 01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;; 01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;; 01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L; 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5 01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L; 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6;01C5 01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L; 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5 01C7;LATIN CAPITAL LETTER LJ;Lu;0;L; 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8 01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L; 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9;01C8 01C9;LATIN SMALL LETTER LJ;Ll;0;L; 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8 01CA;LATIN CAPITAL LETTER NJ;Lu;0;L; 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB 01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L; 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC;01CB 01CC;LATIN SMALL LETTER NJ;Ll;0;L; 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB 01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE; 01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD 01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0; 01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF 01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2; 01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1 01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4; 01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3 01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6; 01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5 01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8; 01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7 01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA; 01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9 01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC; 01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB 01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E 01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF; 01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE 01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0226 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1; 01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0227 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0 01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;;;01E3; 01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;;01E2;;01E2 01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5; 01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4 01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7; 01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6 01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9; 01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8 01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB; 01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA 01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED; 01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC 01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF; 01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE 01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;; 01F1;LATIN CAPITAL LETTER DZ;Lu;0;L; 0044 005A;;;;N;;;;01F3;01F2 01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L; 0044 007A;;;;N;;;01F1;01F3;01F2 01F3;LATIN SMALL LETTER DZ;Ll;0;L; 0064 007A;;;;N;;;01F1;;01F2 01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5; 01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4 01F6;LATIN CAPITAL LETTER HWAIR;Lu;0;L;;;;;N;;;;0195; 01F7;LATIN CAPITAL LETTER WYNN;Lu;0;L;;;;;N;;;;01BF; 01F8;LATIN CAPITAL LETTER N WITH GRAVE;Lu;0;L;004E 0300;;;;N;;;;01F9; 01F9;LATIN SMALL LETTER N WITH GRAVE;Ll;0;L;006E 0300;;;;N;;;01F8;;01F8 01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB; 01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA 01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;;;01FD; 01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;;01FC;;01FC 01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF; 01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE 0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201; 0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200 0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203; 0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202 0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205; 0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204 0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207; 0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206 0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209; 0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208 020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B; 020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A 020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D; 020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C 020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F; 020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E 0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211; 0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210 0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213; 0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212 0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215; 0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214 0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217; 0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216 0218;LATIN CAPITAL LETTER S WITH COMMA BELOW;Lu;0;L;0053 0326;;;;N;;;;0219; 0219;LATIN SMALL LETTER S WITH COMMA BELOW;Ll;0;L;0073 0326;;;;N;;;0218;;0218 021A;LATIN CAPITAL LETTER T WITH COMMA BELOW;Lu;0;L;0054 0326;;;;N;;;;021B; 021B;LATIN SMALL LETTER T WITH COMMA BELOW;Ll;0;L;0074 0326;;;;N;;;021A;;021A 021C;LATIN CAPITAL LETTER YOGH;Lu;0;L;;;;;N;;;;021D; 021D;LATIN SMALL LETTER YOGH;Ll;0;L;;;;;N;;;021C;;021C 021E;LATIN CAPITAL LETTER H WITH CARON;Lu;0;L;0048 030C;;;;N;;;;021F; 021F;LATIN SMALL LETTER H WITH CARON;Ll;0;L;0068 030C;;;;N;;;021E;;021E 0220;LATIN CAPITAL LETTER N WITH LONG RIGHT LEG;Lu;0;L;;;;;N;;;;019E; 0221;LATIN SMALL LETTER D WITH CURL;Ll;0;L;;;;;N;;;;; 0222;LATIN CAPITAL LETTER OU;Lu;0;L;;;;;N;;;;0223; 0223;LATIN SMALL LETTER OU;Ll;0;L;;;;;N;;;0222;;0222 0224;LATIN CAPITAL LETTER Z WITH HOOK;Lu;0;L;;;;;N;;;;0225; 0225;LATIN SMALL LETTER Z WITH HOOK;Ll;0;L;;;;;N;;;0224;;0224 0226;LATIN CAPITAL LETTER A WITH DOT ABOVE;Lu;0;L;0041 0307;;;;N;;;;0227; 0227;LATIN SMALL LETTER A WITH DOT ABOVE;Ll;0;L;0061 0307;;;;N;;;0226;;0226 0228;LATIN CAPITAL LETTER E WITH CEDILLA;Lu;0;L;0045 0327;;;;N;;;;0229; 0229;LATIN SMALL LETTER E WITH CEDILLA;Ll;0;L;0065 0327;;;;N;;;0228;;0228 022A;LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON;Lu;0;L;00D6 0304;;;;N;;;;022B; 022B;LATIN SMALL LETTER O WITH DIAERESIS AND MACRON;Ll;0;L;00F6 0304;;;;N;;;022A;;022A 022C;LATIN CAPITAL LETTER O WITH TILDE AND MACRON;Lu;0;L;00D5 0304;;;;N;;;;022D; 022D;LATIN SMALL LETTER O WITH TILDE AND MACRON;Ll;0;L;00F5 0304;;;;N;;;022C;;022C 022E;LATIN CAPITAL LETTER O WITH DOT ABOVE;Lu;0;L;004F 0307;;;;N;;;;022F; 022F;LATIN SMALL LETTER O WITH DOT ABOVE;Ll;0;L;006F 0307;;;;N;;;022E;;022E 0230;LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON;Lu;0;L;022E 0304;;;;N;;;;0231; 0231;LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON;Ll;0;L;022F 0304;;;;N;;;0230;;0230 0232;LATIN CAPITAL LETTER Y WITH MACRON;Lu;0;L;0059 0304;;;;N;;;;0233; 0233;LATIN SMALL LETTER Y WITH MACRON;Ll;0;L;0079 0304;;;;N;;;0232;;0232 0234;LATIN SMALL LETTER L WITH CURL;Ll;0;L;;;;;N;;;;; 0235;LATIN SMALL LETTER N WITH CURL;Ll;0;L;;;;;N;;;;; 0236;LATIN SMALL LETTER T WITH CURL;Ll;0;L;;;;;N;;;;; 0237;LATIN SMALL LETTER DOTLESS J;Ll;0;L;;;;;N;;;;; 0238;LATIN SMALL LETTER DB DIGRAPH;Ll;0;L;;;;;N;;;;; 0239;LATIN SMALL LETTER QP DIGRAPH;Ll;0;L;;;;;N;;;;; 023A;LATIN CAPITAL LETTER A WITH STROKE;Lu;0;L;;;;;N;;;;2C65; 023B;LATIN CAPITAL LETTER C WITH STROKE;Lu;0;L;;;;;N;;;;023C; 023C;LATIN SMALL LETTER C WITH STROKE;Ll;0;L;;;;;N;;;023B;;023B 023D;LATIN CAPITAL LETTER L WITH BAR;Lu;0;L;;;;;N;;;;019A; 023E;LATIN CAPITAL LETTER T WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;2C66; 023F;LATIN SMALL LETTER S WITH SWASH TAIL;Ll;0;L;;;;;N;;;2C7E;;2C7E 0240;LATIN SMALL LETTER Z WITH SWASH TAIL;Ll;0;L;;;;;N;;;2C7F;;2C7F 0241;LATIN CAPITAL LETTER GLOTTAL STOP;Lu;0;L;;;;;N;;;;0242; 0242;LATIN SMALL LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;0241;;0241 0243;LATIN CAPITAL LETTER B WITH STROKE;Lu;0;L;;;;;N;;;;0180; 0244;LATIN CAPITAL LETTER U BAR;Lu;0;L;;;;;N;;;;0289; 0245;LATIN CAPITAL LETTER TURNED V;Lu;0;L;;;;;N;;;;028C; 0246;LATIN CAPITAL LETTER E WITH STROKE;Lu;0;L;;;;;N;;;;0247; 0247;LATIN SMALL LETTER E WITH STROKE;Ll;0;L;;;;;N;;;0246;;0246 0248;LATIN CAPITAL LETTER J WITH STROKE;Lu;0;L;;;;;N;;;;0249; 0249;LATIN SMALL LETTER J WITH STROKE;Ll;0;L;;;;;N;;;0248;;0248 024A;LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL;Lu;0;L;;;;;N;;;;024B; 024B;LATIN SMALL LETTER Q WITH HOOK TAIL;Ll;0;L;;;;;N;;;024A;;024A 024C;LATIN CAPITAL LETTER R WITH STROKE;Lu;0;L;;;;;N;;;;024D; 024D;LATIN SMALL LETTER R WITH STROKE;Ll;0;L;;;;;N;;;024C;;024C 024E;LATIN CAPITAL LETTER Y WITH STROKE;Lu;0;L;;;;;N;;;;024F; 024F;LATIN SMALL LETTER Y WITH STROKE;Ll;0;L;;;;;N;;;024E;;024E 0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;2C6F;;2C6F 0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;2C6D;;2C6D 0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;2C70;;2C70 0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181 0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186 0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;; 0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189 0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A 0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;; 0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F 025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;; 025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190 025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;A7AB;;A7AB 025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;; 025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;; 025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;; 0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193 0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;A7AC;;A7AC 0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;; 0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194 0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;; 0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;A78D;;A78D 0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;A7AA;;A7AA 0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;; 0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197 0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196 026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;A7AE;;A7AE 026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;2C62;;2C62 026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;A7AD;;A7AD 026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;; 026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;; 026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C 0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;; 0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;2C6E;;2C6E 0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D 0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;; 0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;; 0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;019F;;019F 0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;; 0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;; 0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;; 0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;; 027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;; 027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;; 027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;; 027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;2C64;;2C64 027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;; 027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;; 0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;;01A6;;01A6 0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;; 0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;A7C5;;A7C5 0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9 0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;; 0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;; 0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;; 0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;A7B1;;A7B1 0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE 0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;0244;;0244 028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1 028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2 028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;0245;;0245 028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;; 028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;; 028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;; 0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;; 0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;; 0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7 0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;; 0294;LATIN LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;; 0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;; 0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;; 0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;; 0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;; 0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;; 029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;; 029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;; 029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;; 029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;A7B2;;A7B2 029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;A7B0;;A7B0 029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;; 02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;; 02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;; 02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;; 02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;; 02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;; 02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;; 02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;; 02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;; 02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;; 02A9;LATIN SMALL LETTER FENG DIGRAPH;Ll;0;L;;;;;N;;;;; 02AA;LATIN SMALL LETTER LS DIGRAPH;Ll;0;L;;;;;N;;;;; 02AB;LATIN SMALL LETTER LZ DIGRAPH;Ll;0;L;;;;;N;;;;; 02AC;LATIN LETTER BILABIAL PERCUSSIVE;Ll;0;L;;;;;N;;;;; 02AD;LATIN LETTER BIDENTAL PERCUSSIVE;Ll;0;L;;;;;N;;;;; 02AE;LATIN SMALL LETTER TURNED H WITH FISHHOOK;Ll;0;L;;;;;N;;;;; 02AF;LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL;Ll;0;L;;;;;N;;;;; 02B0;MODIFIER LETTER SMALL H;Lm;0;L; 0068;;;;N;;;;; 02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L; 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;; 02B2;MODIFIER LETTER SMALL J;Lm;0;L; 006A;;;;N;;;;; 02B3;MODIFIER LETTER SMALL R;Lm;0;L; 0072;;;;N;;;;; 02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L; 0279;;;;N;;;;; 02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L; 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;; 02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L; 0281;;;;N;;;;; 02B7;MODIFIER LETTER SMALL W;Lm;0;L; 0077;;;;N;;;;; 02B8;MODIFIER LETTER SMALL Y;Lm;0;L; 0079;;;;N;;;;; 02B9;MODIFIER LETTER PRIME;Lm;0;ON;;;;;N;;;;; 02BA;MODIFIER LETTER DOUBLE PRIME;Lm;0;ON;;;;;N;;;;; 02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;; 02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;; 02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;; 02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;; 02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;; 02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;; 02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;; 02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;; 02C7;CARON;Lm;0;ON;;;;;N;MODIFIER LETTER HACEK;;;; 02C8;MODIFIER LETTER VERTICAL LINE;Lm;0;ON;;;;;N;;;;; 02C9;MODIFIER LETTER MACRON;Lm;0;ON;;;;;N;;;;; 02CA;MODIFIER LETTER ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER ACUTE;;;; 02CB;MODIFIER LETTER GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER GRAVE;;;; 02CC;MODIFIER LETTER LOW VERTICAL LINE;Lm;0;ON;;;;;N;;;;; 02CD;MODIFIER LETTER LOW MACRON;Lm;0;ON;;;;;N;;;;; 02CE;MODIFIER LETTER LOW GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER LOW GRAVE;;;; 02CF;MODIFIER LETTER LOW ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER LOW ACUTE;;;; 02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;L;;;;;N;;;;; 02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;L;;;;;N;;;;; 02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;; 02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;; 02D4;MODIFIER LETTER UP TACK;Sk;0;ON;;;;;N;;;;; 02D5;MODIFIER LETTER DOWN TACK;Sk;0;ON;;;;;N;;;;; 02D6;MODIFIER LETTER PLUS SIGN;Sk;0;ON;;;;;N;;;;; 02D7;MODIFIER LETTER MINUS SIGN;Sk;0;ON;;;;;N;;;;; 02D8;BREVE;Sk;0;ON; 0020 0306;;;;N;SPACING BREVE;;;; 02D9;DOT ABOVE;Sk;0;ON; 0020 0307;;;;N;SPACING DOT ABOVE;;;; 02DA;RING ABOVE;Sk;0;ON; 0020 030A;;;;N;SPACING RING ABOVE;;;; 02DB;OGONEK;Sk;0;ON; 0020 0328;;;;N;SPACING OGONEK;;;; 02DC;SMALL TILDE;Sk;0;ON; 0020 0303;;;;N;SPACING TILDE;;;; 02DD;DOUBLE ACUTE ACCENT;Sk;0;ON; 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;; 02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;ON;;;;;N;;;;; 02DF;MODIFIER LETTER CROSS ACCENT;Sk;0;ON;;;;;N;;;;; 02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L; 0263;;;;N;;;;; 02E1;MODIFIER LETTER SMALL L;Lm;0;L; 006C;;;;N;;;;; 02E2;MODIFIER LETTER SMALL S;Lm;0;L; 0073;;;;N;;;;; 02E3;MODIFIER LETTER SMALL X;Lm;0;L; 0078;;;;N;;;;; 02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L; 0295;;;;N;;;;; 02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;ON;;;;;N;;;;; 02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;ON;;;;;N;;;;; 02E7;MODIFIER LETTER MID TONE BAR;Sk;0;ON;;;;;N;;;;; 02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;ON;;;;;N;;;;; 02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;; 02EA;MODIFIER LETTER YIN DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;; 02EB;MODIFIER LETTER YANG DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;; 02EC;MODIFIER LETTER VOICING;Lm;0;ON;;;;;N;;;;; 02ED;MODIFIER LETTER UNASPIRATED;Sk;0;ON;;;;;N;;;;; 02EE;MODIFIER LETTER DOUBLE APOSTROPHE;Lm;0;L;;;;;N;;;;; 02EF;MODIFIER LETTER LOW DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02F0;MODIFIER LETTER LOW UP ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02F1;MODIFIER LETTER LOW LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02F2;MODIFIER LETTER LOW RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02F3;MODIFIER LETTER LOW RING;Sk;0;ON;;;;;N;;;;; 02F4;MODIFIER LETTER MIDDLE GRAVE ACCENT;Sk;0;ON;;;;;N;;;;; 02F5;MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT;Sk;0;ON;;;;;N;;;;; 02F6;MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT;Sk;0;ON;;;;;N;;;;; 02F7;MODIFIER LETTER LOW TILDE;Sk;0;ON;;;;;N;;;;; 02F8;MODIFIER LETTER RAISED COLON;Sk;0;ON;;;;;N;;;;; 02F9;MODIFIER LETTER BEGIN HIGH TONE;Sk;0;ON;;;;;N;;;;; 02FA;MODIFIER LETTER END HIGH TONE;Sk;0;ON;;;;;N;;;;; 02FB;MODIFIER LETTER BEGIN LOW TONE;Sk;0;ON;;;;;N;;;;; 02FC;MODIFIER LETTER END LOW TONE;Sk;0;ON;;;;;N;;;;; 02FD;MODIFIER LETTER SHELF;Sk;0;ON;;;;;N;;;;; 02FE;MODIFIER LETTER OPEN SHELF;Sk;0;ON;;;;;N;;;;; 02FF;MODIFIER LETTER LOW LEFT ARROW;Sk;0;ON;;;;;N;;;;; 0300;COMBINING GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING GRAVE;;;; 0301;COMBINING ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING ACUTE;;;; 0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;NON-SPACING CIRCUMFLEX;;;; 0303;COMBINING TILDE;Mn;230;NSM;;;;;N;NON-SPACING TILDE;;;; 0304;COMBINING MACRON;Mn;230;NSM;;;;;N;NON-SPACING MACRON;;;; 0305;COMBINING OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING OVERSCORE;;;; 0306;COMBINING BREVE;Mn;230;NSM;;;;;N;NON-SPACING BREVE;;;; 0307;COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOT ABOVE;;;; 0308;COMBINING DIAERESIS;Mn;230;NSM;;;;;N;NON-SPACING DIAERESIS;;;; 0309;COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;NON-SPACING HOOK ABOVE;;;; 030A;COMBINING RING ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RING ABOVE;;;; 030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE ACUTE;;;; 030C;COMBINING CARON;Mn;230;NSM;;;;;N;NON-SPACING HACEK;;;; 030D;COMBINING VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL LINE ABOVE;;;; 030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;; 030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE GRAVE;;;; 0310;COMBINING CANDRABINDU;Mn;230;NSM;;;;;N;NON-SPACING CANDRABINDU;;;; 0311;COMBINING INVERTED BREVE;Mn;230;NSM;;;;;N;NON-SPACING INVERTED BREVE;;;; 0312;COMBINING TURNED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;; 0313;COMBINING COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING COMMA ABOVE;;;; 0314;COMBINING REVERSED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING REVERSED COMMA ABOVE;;;; 0315;COMBINING COMMA ABOVE RIGHT;Mn;232;NSM;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;; 0316;COMBINING GRAVE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING GRAVE BELOW;;;; 0317;COMBINING ACUTE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING ACUTE BELOW;;;; 0318;COMBINING LEFT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT TACK BELOW;;;; 0319;COMBINING RIGHT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT TACK BELOW;;;; 031A;COMBINING LEFT ANGLE ABOVE;Mn;232;NSM;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;; 031B;COMBINING HORN;Mn;216;NSM;;;;;N;NON-SPACING HORN;;;; 031C;COMBINING LEFT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;; 031D;COMBINING UP TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING UP TACK BELOW;;;; 031E;COMBINING DOWN TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOWN TACK BELOW;;;; 031F;COMBINING PLUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING PLUS SIGN BELOW;;;; 0320;COMBINING MINUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING MINUS SIGN BELOW;;;; 0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;; 0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;; 0323;COMBINING DOT BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOT BELOW;;;; 0324;COMBINING DIAERESIS BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;; 0325;COMBINING RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RING BELOW;;;; 0326;COMBINING COMMA BELOW;Mn;220;NSM;;;;;N;NON-SPACING COMMA BELOW;;;; 0327;COMBINING CEDILLA;Mn;202;NSM;;;;;N;NON-SPACING CEDILLA;;;; 0328;COMBINING OGONEK;Mn;202;NSM;;;;;N;NON-SPACING OGONEK;;;; 0329;COMBINING VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;; 032A;COMBINING BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BRIDGE BELOW;;;; 032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;; 032C;COMBINING CARON BELOW;Mn;220;NSM;;;;;N;NON-SPACING HACEK BELOW;;;; 032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;; 032E;COMBINING BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BREVE BELOW;;;; 032F;COMBINING INVERTED BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;; 0330;COMBINING TILDE BELOW;Mn;220;NSM;;;;;N;NON-SPACING TILDE BELOW;;;; 0331;COMBINING MACRON BELOW;Mn;220;NSM;;;;;N;NON-SPACING MACRON BELOW;;;; 0332;COMBINING LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING UNDERSCORE;;;; 0333;COMBINING DOUBLE LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;; 0334;COMBINING TILDE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING TILDE OVERLAY;;;; 0335;COMBINING SHORT STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;; 0336;COMBINING LONG STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG BAR OVERLAY;;;; 0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;; 0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;; 0339;COMBINING RIGHT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;; 033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;; 033B;COMBINING SQUARE BELOW;Mn;220;NSM;;;;;N;NON-SPACING SQUARE BELOW;;;; 033C;COMBINING SEAGULL BELOW;Mn;220;NSM;;;;;N;NON-SPACING SEAGULL BELOW;;;; 033D;COMBINING X ABOVE;Mn;230;NSM;;;;;N;NON-SPACING X ABOVE;;;; 033E;COMBINING VERTICAL TILDE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL TILDE;;;; 033F;COMBINING DOUBLE OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;; 0340;COMBINING GRAVE TONE MARK;Mn;230;NSM;0300;;;;N;NON-SPACING GRAVE TONE MARK;;;; 0341;COMBINING ACUTE TONE MARK;Mn;230;NSM;0301;;;;N;NON-SPACING ACUTE TONE MARK;;;; 0342;COMBINING GREEK PERISPOMENI;Mn;230;NSM;;;;;N;;;;; 0343;COMBINING GREEK KORONIS;Mn;230;NSM;0313;;;;N;;;;; 0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;NSM;0308 0301;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;; 0345;COMBINING GREEK YPOGEGRAMMENI;Mn;240;NSM;;;;;N;GREEK NON-SPACING IOTA BELOW;;0399;;0399 0346;COMBINING BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;; 0347;COMBINING EQUALS SIGN BELOW;Mn;220;NSM;;;;;N;;;;; 0348;COMBINING DOUBLE VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;;;;; 0349;COMBINING LEFT ANGLE BELOW;Mn;220;NSM;;;;;N;;;;; 034A;COMBINING NOT TILDE ABOVE;Mn;230;NSM;;;;;N;;;;; 034B;COMBINING HOMOTHETIC ABOVE;Mn;230;NSM;;;;;N;;;;; 034C;COMBINING ALMOST EQUAL TO ABOVE;Mn;230;NSM;;;;;N;;;;; 034D;COMBINING LEFT RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;; 034E;COMBINING UPWARDS ARROW BELOW;Mn;220;NSM;;;;;N;;;;; 034F;COMBINING GRAPHEME JOINER;Mn;0;NSM;;;;;N;;;;; 0350;COMBINING RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;; 0351;COMBINING LEFT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;; 0352;COMBINING FERMATA;Mn;230;NSM;;;;;N;;;;; 0353;COMBINING X BELOW;Mn;220;NSM;;;;;N;;;;; 0354;COMBINING LEFT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; 0355;COMBINING RIGHT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; 0356;COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; 0357;COMBINING RIGHT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;; 0358;COMBINING DOT ABOVE RIGHT;Mn;232;NSM;;;;;N;;;;; 0359;COMBINING ASTERISK BELOW;Mn;220;NSM;;;;;N;;;;; 035A;COMBINING DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;; 035B;COMBINING ZIGZAG ABOVE;Mn;230;NSM;;;;;N;;;;; 035C;COMBINING DOUBLE BREVE BELOW;Mn;233;NSM;;;;;N;;;;; 035D;COMBINING DOUBLE BREVE;Mn;234;NSM;;;;;N;;;;; 035E;COMBINING DOUBLE MACRON;Mn;234;NSM;;;;;N;;;;; 035F;COMBINING DOUBLE MACRON BELOW;Mn;233;NSM;;;;;N;;;;; 0360;COMBINING DOUBLE TILDE;Mn;234;NSM;;;;;N;;;;; 0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;NSM;;;;;N;;;;; 0362;COMBINING DOUBLE RIGHTWARDS ARROW BELOW;Mn;233;NSM;;;;;N;;;;; 0363;COMBINING LATIN SMALL LETTER A;Mn;230;NSM;;;;;N;;;;; 0364;COMBINING LATIN SMALL LETTER E;Mn;230;NSM;;;;;N;;;;; 0365;COMBINING LATIN SMALL LETTER I;Mn;230;NSM;;;;;N;;;;; 0366;COMBINING LATIN SMALL LETTER O;Mn;230;NSM;;;;;N;;;;; 0367;COMBINING LATIN SMALL LETTER U;Mn;230;NSM;;;;;N;;;;; 0368;COMBINING LATIN SMALL LETTER C;Mn;230;NSM;;;;;N;;;;; 0369;COMBINING LATIN SMALL LETTER D;Mn;230;NSM;;;;;N;;;;; 036A;COMBINING LATIN SMALL LETTER H;Mn;230;NSM;;;;;N;;;;; 036B;COMBINING LATIN SMALL LETTER M;Mn;230;NSM;;;;;N;;;;; 036C;COMBINING LATIN SMALL LETTER R;Mn;230;NSM;;;;;N;;;;; 036D;COMBINING LATIN SMALL LETTER T;Mn;230;NSM;;;;;N;;;;; 036E;COMBINING LATIN SMALL LETTER V;Mn;230;NSM;;;;;N;;;;; 036F;COMBINING LATIN SMALL LETTER X;Mn;230;NSM;;;;;N;;;;; 0370;GREEK CAPITAL LETTER HETA;Lu;0;L;;;;;N;;;;0371; 0371;GREEK SMALL LETTER HETA;Ll;0;L;;;;;N;;;0370;;0370 0372;GREEK CAPITAL LETTER ARCHAIC SAMPI;Lu;0;L;;;;;N;;;;0373; 0373;GREEK SMALL LETTER ARCHAIC SAMPI;Ll;0;L;;;;;N;;;0372;;0372 0374;GREEK NUMERAL SIGN;Lm;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;;;; 0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;;;; 0376;GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA;Lu;0;L;;;;;N;;;;0377; 0377;GREEK SMALL LETTER PAMPHYLIAN DIGAMMA;Ll;0;L;;;;;N;;;0376;;0376 037A;GREEK YPOGEGRAMMENI;Lm;0;L; 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;; 037B;GREEK SMALL REVERSED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FD;;03FD 037C;GREEK SMALL DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FE;;03FE 037D;GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FF;;03FF 037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;;;; 037F;GREEK CAPITAL LETTER YOT;Lu;0;L;;;;;N;;;;03F3; 0384;GREEK TONOS;Sk;0;ON; 0020 0301;;;;N;GREEK SPACING TONOS;;;; 0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;; 0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 0301;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC; 0387;GREEK ANO TELEIA;Po;0;ON;00B7;;;;N;;;;; 0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 0301;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD; 0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 0301;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE; 038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 0301;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF; 038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 0301;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC; 038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 0301;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD; 038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 0301;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE; 0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03CA 0301;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;; 0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1; 0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2; 0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3; 0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4; 0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5; 0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6; 0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7; 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8; 0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9; 039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA; 039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB; 039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC; 039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD; 039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE; 039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF; 03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0; 03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1; 03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3; 03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4; 03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5; 03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6; 03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7; 03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8; 03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9; 03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA; 03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB; 03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 0301;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386 03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 0301;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388 03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 0301;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389 03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 0301;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A 03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03CB 0301;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;; 03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391 03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392 03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393 03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394 03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395 03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396 03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398 03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399 03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A 03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B 03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C 03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D 03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E 03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F 03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0 03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1 03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3 03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3 03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4 03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5 03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6 03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7 03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8 03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9 03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA 03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB 03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 0301;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C 03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 0301;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E 03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 0301;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F 03CF;GREEK CAPITAL KAI SYMBOL;Lu;0;L;;;;;N;;;;03D7; 03D0;GREEK BETA SYMBOL;Ll;0;L; 03B2;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392 03D1;GREEK THETA SYMBOL;Ll;0;L; 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398 03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L; 03A5;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;; 03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 0301;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;; 03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;; 03D5;GREEK PHI SYMBOL;Ll;0;L; 03C6;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6 03D6;GREEK PI SYMBOL;Ll;0;L; 03C0;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0 03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;03CF;;03CF 03D8;GREEK LETTER ARCHAIC KOPPA;Lu;0;L;;;;;N;;;;03D9; 03D9;GREEK SMALL LETTER ARCHAIC KOPPA;Ll;0;L;;;;;N;;;03D8;;03D8 03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;03DB; 03DB;GREEK SMALL LETTER STIGMA;Ll;0;L;;;;;N;;;03DA;;03DA 03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;03DD; 03DD;GREEK SMALL LETTER DIGAMMA;Ll;0;L;;;;;N;;;03DC;;03DC 03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;03DF; 03DF;GREEK SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;03DE;;03DE 03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;03E1; 03E1;GREEK SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;03E0;;03E0 03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3; 03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2 03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5; 03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4 03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7; 03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6 03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9; 03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8 03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB; 03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA 03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED; 03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC 03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF; 03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE 03F0;GREEK KAPPA SYMBOL;Ll;0;L; 03BA;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;039A 03F1;GREEK RHO SYMBOL;Ll;0;L; 03C1;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;03A1 03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L; 03C2;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;03F9;;03F9 03F3;GREEK LETTER YOT;Ll;0;L;;;;;N;;;037F;;037F 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L; 0398;;;;N;;;;03B8; 03F5;GREEK LUNATE EPSILON SYMBOL;Ll;0;L; 03B5;;;;N;;;0395;;0395 03F6;GREEK REVERSED LUNATE EPSILON SYMBOL;Sm;0;ON;;;;;N;;;;; 03F7;GREEK CAPITAL LETTER SHO;Lu;0;L;;;;;N;;;;03F8; 03F8;GREEK SMALL LETTER SHO;Ll;0;L;;;;;N;;;03F7;;03F7 03F9;GREEK CAPITAL LUNATE SIGMA SYMBOL;Lu;0;L; 03A3;;;;N;;;;03F2; 03FA;GREEK CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;03FB; 03FB;GREEK SMALL LETTER SAN;Ll;0;L;;;;;N;;;03FA;;03FA 03FC;GREEK RHO WITH STROKE SYMBOL;Ll;0;L;;;;;N;;;;; 03FD;GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037B; 03FE;GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037C; 03FF;GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037D; 0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450; 0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451; 0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;;;0452; 0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453; 0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454; 0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455; 0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456; 0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;;;0457; 0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458; 0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459; 040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A; 040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;;;045B; 040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C; 040D;CYRILLIC CAPITAL LETTER I WITH GRAVE;Lu;0;L;0418 0300;;;;N;;;;045D; 040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;;;045E; 040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F; 0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430; 0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431; 0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432; 0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433; 0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434; 0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435; 0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436; 0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437; 0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438; 0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439; 041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A; 041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B; 041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C; 041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D; 041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E; 041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F; 0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440; 0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441; 0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442; 0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443; 0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444; 0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445; 0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446; 0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447; 0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448; 0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449; 042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A; 042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B; 042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C; 042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D; 042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E; 042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F; 0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410 0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411 0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412 0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413 0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414 0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415 0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416 0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417 0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418 0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419 043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A 043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B 043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C 043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D 043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E 043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F 0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420 0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421 0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422 0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423 0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424 0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425 0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426 0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427 0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428 0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429 044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A 044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B 044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C 044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D 044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E 044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F 0450;CYRILLIC SMALL LETTER IE WITH GRAVE;Ll;0;L;0435 0300;;;;N;;;0400;;0400 0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401 0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;;0402;;0402 0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403 0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404 0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405 0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406 0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;;0407;;0407 0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408 0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409 045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A 045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;;040B;;040B 045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C 045D;CYRILLIC SMALL LETTER I WITH GRAVE;Ll;0;L;0438 0300;;;;N;;;040D;;040D 045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;;040E;;040E 045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F 0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461; 0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460 0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463; 0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462 0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465; 0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464 0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467; 0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466 0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469; 0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468 046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B; 046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A 046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D; 046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C 046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F; 046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E 0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471; 0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470 0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473; 0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472 0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475; 0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474 0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477; 0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476 0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479; 0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478 047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B; 047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A 047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D; 047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C 047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F; 047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E 0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481; 0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480 0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;; 0483;COMBINING CYRILLIC TITLO;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING TITLO;;;; 0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;; 0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;; 0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;; 0487;COMBINING CYRILLIC POKRYTIE;Mn;230;NSM;;;;;N;;;;; 0488;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN;Me;0;NSM;;;;;N;;;;; 0489;COMBINING CYRILLIC MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; 048A;CYRILLIC CAPITAL LETTER SHORT I WITH TAIL;Lu;0;L;;;;;N;;;;048B; 048B;CYRILLIC SMALL LETTER SHORT I WITH TAIL;Ll;0;L;;;;;N;;;048A;;048A 048C;CYRILLIC CAPITAL LETTER SEMISOFT SIGN;Lu;0;L;;;;;N;;;;048D; 048D;CYRILLIC SMALL LETTER SEMISOFT SIGN;Ll;0;L;;;;;N;;;048C;;048C 048E;CYRILLIC CAPITAL LETTER ER WITH TICK;Lu;0;L;;;;;N;;;;048F; 048F;CYRILLIC SMALL LETTER ER WITH TICK;Ll;0;L;;;;;N;;;048E;;048E 0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491; 0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490 0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493; 0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492 0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495; 0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494 0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497; 0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496 0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499; 0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498 049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B; 049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A 049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D; 049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C 049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F; 049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E 04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1; 04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0 04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3; 04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2 04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5; 04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4 04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;;;04A7; 04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;;04A6;;04A6 04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9; 04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8 04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB; 04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA 04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD; 04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC 04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF; 04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE 04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1; 04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0 04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3; 04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2 04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;;;04B5; 04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;;04B4;;04B4 04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7; 04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6 04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9; 04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8 04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB; 04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA 04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD; 04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC 04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF; 04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE 04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;04CF; 04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2; 04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1 04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4; 04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3 04C5;CYRILLIC CAPITAL LETTER EL WITH TAIL;Lu;0;L;;;;;N;;;;04C6; 04C6;CYRILLIC SMALL LETTER EL WITH TAIL;Ll;0;L;;;;;N;;;04C5;;04C5 04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8; 04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7 04C9;CYRILLIC CAPITAL LETTER EN WITH TAIL;Lu;0;L;;;;;N;;;;04CA; 04CA;CYRILLIC SMALL LETTER EN WITH TAIL;Ll;0;L;;;;;N;;;04C9;;04C9 04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC; 04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB 04CD;CYRILLIC CAPITAL LETTER EM WITH TAIL;Lu;0;L;;;;;N;;;;04CE; 04CE;CYRILLIC SMALL LETTER EM WITH TAIL;Ll;0;L;;;;;N;;;04CD;;04CD 04CF;CYRILLIC SMALL LETTER PALOCHKA;Ll;0;L;;;;;N;;;04C0;;04C0 04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1; 04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0 04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3; 04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2 04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;;;;;N;;;;04D5; 04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;;;;;N;;;04D4;;04D4 04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7; 04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6 04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;04D9; 04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;04D8;;04D8 04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;04D8 0308;;;;N;;;;04DB; 04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;04D9 0308;;;;N;;;04DA;;04DA 04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD; 04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC 04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF; 04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE 04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;;;;;N;;;;04E1; 04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;;;;;N;;;04E0;;04E0 04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3; 04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2 04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5; 04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4 04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7; 04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6 04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;;;;;N;;;;04E9; 04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;04E8;;04E8 04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;04E8 0308;;;;N;;;;04EB; 04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;04E9 0308;;;;N;;;04EA;;04EA 04EC;CYRILLIC CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;042D 0308;;;;N;;;;04ED; 04ED;CYRILLIC SMALL LETTER E WITH DIAERESIS;Ll;0;L;044D 0308;;;;N;;;04EC;;04EC 04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF; 04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE 04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1; 04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0 04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3; 04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2 04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5; 04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4 04F6;CYRILLIC CAPITAL LETTER GHE WITH DESCENDER;Lu;0;L;;;;;N;;;;04F7; 04F7;CYRILLIC SMALL LETTER GHE WITH DESCENDER;Ll;0;L;;;;;N;;;04F6;;04F6 04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9; 04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8 04FA;CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK;Lu;0;L;;;;;N;;;;04FB; 04FB;CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK;Ll;0;L;;;;;N;;;04FA;;04FA 04FC;CYRILLIC CAPITAL LETTER HA WITH HOOK;Lu;0;L;;;;;N;;;;04FD; 04FD;CYRILLIC SMALL LETTER HA WITH HOOK;Ll;0;L;;;;;N;;;04FC;;04FC 04FE;CYRILLIC CAPITAL LETTER HA WITH STROKE;Lu;0;L;;;;;N;;;;04FF; 04FF;CYRILLIC SMALL LETTER HA WITH STROKE;Ll;0;L;;;;;N;;;04FE;;04FE 0500;CYRILLIC CAPITAL LETTER KOMI DE;Lu;0;L;;;;;N;;;;0501; 0501;CYRILLIC SMALL LETTER KOMI DE;Ll;0;L;;;;;N;;;0500;;0500 0502;CYRILLIC CAPITAL LETTER KOMI DJE;Lu;0;L;;;;;N;;;;0503; 0503;CYRILLIC SMALL LETTER KOMI DJE;Ll;0;L;;;;;N;;;0502;;0502 0504;CYRILLIC CAPITAL LETTER KOMI ZJE;Lu;0;L;;;;;N;;;;0505; 0505;CYRILLIC SMALL LETTER KOMI ZJE;Ll;0;L;;;;;N;;;0504;;0504 0506;CYRILLIC CAPITAL LETTER KOMI DZJE;Lu;0;L;;;;;N;;;;0507; 0507;CYRILLIC SMALL LETTER KOMI DZJE;Ll;0;L;;;;;N;;;0506;;0506 0508;CYRILLIC CAPITAL LETTER KOMI LJE;Lu;0;L;;;;;N;;;;0509; 0509;CYRILLIC SMALL LETTER KOMI LJE;Ll;0;L;;;;;N;;;0508;;0508 050A;CYRILLIC CAPITAL LETTER KOMI NJE;Lu;0;L;;;;;N;;;;050B; 050B;CYRILLIC SMALL LETTER KOMI NJE;Ll;0;L;;;;;N;;;050A;;050A 050C;CYRILLIC CAPITAL LETTER KOMI SJE;Lu;0;L;;;;;N;;;;050D; 050D;CYRILLIC SMALL LETTER KOMI SJE;Ll;0;L;;;;;N;;;050C;;050C 050E;CYRILLIC CAPITAL LETTER KOMI TJE;Lu;0;L;;;;;N;;;;050F; 050F;CYRILLIC SMALL LETTER KOMI TJE;Ll;0;L;;;;;N;;;050E;;050E 0510;CYRILLIC CAPITAL LETTER REVERSED ZE;Lu;0;L;;;;;N;;;;0511; 0511;CYRILLIC SMALL LETTER REVERSED ZE;Ll;0;L;;;;;N;;;0510;;0510 0512;CYRILLIC CAPITAL LETTER EL WITH HOOK;Lu;0;L;;;;;N;;;;0513; 0513;CYRILLIC SMALL LETTER EL WITH HOOK;Ll;0;L;;;;;N;;;0512;;0512 0514;CYRILLIC CAPITAL LETTER LHA;Lu;0;L;;;;;N;;;;0515; 0515;CYRILLIC SMALL LETTER LHA;Ll;0;L;;;;;N;;;0514;;0514 0516;CYRILLIC CAPITAL LETTER RHA;Lu;0;L;;;;;N;;;;0517; 0517;CYRILLIC SMALL LETTER RHA;Ll;0;L;;;;;N;;;0516;;0516 0518;CYRILLIC CAPITAL LETTER YAE;Lu;0;L;;;;;N;;;;0519; 0519;CYRILLIC SMALL LETTER YAE;Ll;0;L;;;;;N;;;0518;;0518 051A;CYRILLIC CAPITAL LETTER QA;Lu;0;L;;;;;N;;;;051B; 051B;CYRILLIC SMALL LETTER QA;Ll;0;L;;;;;N;;;051A;;051A 051C;CYRILLIC CAPITAL LETTER WE;Lu;0;L;;;;;N;;;;051D; 051D;CYRILLIC SMALL LETTER WE;Ll;0;L;;;;;N;;;051C;;051C 051E;CYRILLIC CAPITAL LETTER ALEUT KA;Lu;0;L;;;;;N;;;;051F; 051F;CYRILLIC SMALL LETTER ALEUT KA;Ll;0;L;;;;;N;;;051E;;051E 0520;CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;0521; 0521;CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;0520;;0520 0522;CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;0523; 0523;CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;0522;;0522 0524;CYRILLIC CAPITAL LETTER PE WITH DESCENDER;Lu;0;L;;;;;N;;;;0525; 0525;CYRILLIC SMALL LETTER PE WITH DESCENDER;Ll;0;L;;;;;N;;;0524;;0524 0526;CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER;Lu;0;L;;;;;N;;;;0527; 0527;CYRILLIC SMALL LETTER SHHA WITH DESCENDER;Ll;0;L;;;;;N;;;0526;;0526 0528;CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK;Lu;0;L;;;;;N;;;;0529; 0529;CYRILLIC SMALL LETTER EN WITH LEFT HOOK;Ll;0;L;;;;;N;;;0528;;0528 052A;CYRILLIC CAPITAL LETTER DZZHE;Lu;0;L;;;;;N;;;;052B; 052B;CYRILLIC SMALL LETTER DZZHE;Ll;0;L;;;;;N;;;052A;;052A 052C;CYRILLIC CAPITAL LETTER DCHE;Lu;0;L;;;;;N;;;;052D; 052D;CYRILLIC SMALL LETTER DCHE;Ll;0;L;;;;;N;;;052C;;052C 052E;CYRILLIC CAPITAL LETTER EL WITH DESCENDER;Lu;0;L;;;;;N;;;;052F; 052F;CYRILLIC SMALL LETTER EL WITH DESCENDER;Ll;0;L;;;;;N;;;052E;;052E 0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561; 0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562; 0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563; 0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564; 0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565; 0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566; 0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567; 0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568; 0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569; 053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A; 053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B; 053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C; 053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D; 053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E; 053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F; 0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570; 0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571; 0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572; 0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573; 0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574; 0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575; 0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576; 0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577; 0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578; 0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579; 054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A; 054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B; 054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C; 054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D; 054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E; 054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F; 0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580; 0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581; 0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582; 0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583; 0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584; 0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585; 0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586; 0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;; 055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;; 055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;; 055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;; 055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;; 055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;; 055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;; 0560;ARMENIAN SMALL LETTER TURNED AYB;Ll;0;L;;;;;N;;;;; 0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531 0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532 0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533 0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534 0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535 0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536 0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537 0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538 0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539 056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A 056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B 056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C 056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D 056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E 056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F 0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540 0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541 0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542 0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543 0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544 0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545 0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546 0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547 0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548 0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549 057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A 057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B 057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C 057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D 057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E 057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F 0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550 0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551 0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552 0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553 0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554 0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555 0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556 0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L; 0565 0582;;;;N;;;;; 0588;ARMENIAN SMALL LETTER YI WITH STROKE;Ll;0;L;;;;;N;;;;; 0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;; 058A;ARMENIAN HYPHEN;Pd;0;ON;;;;;N;;;;; 058D;RIGHT-FACING ARMENIAN ETERNITY SIGN;So;0;ON;;;;;N;;;;; 058E;LEFT-FACING ARMENIAN ETERNITY SIGN;So;0;ON;;;;;N;;;;; 058F;ARMENIAN DRAM SIGN;Sc;0;ET;;;;;N;;;;; 0591;HEBREW ACCENT ETNAHTA;Mn;220;NSM;;;;;N;;;;; 0592;HEBREW ACCENT SEGOL;Mn;230;NSM;;;;;N;;;;; 0593;HEBREW ACCENT SHALSHELET;Mn;230;NSM;;;;;N;;;;; 0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;NSM;;;;;N;;;;; 0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;NSM;;;;;N;;;;; 0596;HEBREW ACCENT TIPEHA;Mn;220;NSM;;;;;N;;;;; 0597;HEBREW ACCENT REVIA;Mn;230;NSM;;;;;N;;;;; 0598;HEBREW ACCENT ZARQA;Mn;230;NSM;;;;;N;;;;; 0599;HEBREW ACCENT PASHTA;Mn;230;NSM;;;;;N;;;;; 059A;HEBREW ACCENT YETIV;Mn;222;NSM;;;;;N;;;;; 059B;HEBREW ACCENT TEVIR;Mn;220;NSM;;;;;N;;;;; 059C;HEBREW ACCENT GERESH;Mn;230;NSM;;;;;N;;;;; 059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;NSM;;;;;N;;;;; 059E;HEBREW ACCENT GERSHAYIM;Mn;230;NSM;;;;;N;;;;; 059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;; 05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;; 05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;; 05A2;HEBREW ACCENT ATNAH HAFUKH;Mn;220;NSM;;;;;N;;;;; 05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;; 05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;; 05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;;;; 05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;NSM;;;;;N;;;;; 05A7;HEBREW ACCENT DARGA;Mn;220;NSM;;;;;N;;;;; 05A8;HEBREW ACCENT QADMA;Mn;230;NSM;;;;;N;;;;; 05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;NSM;;;;;N;;;;; 05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;NSM;;;;;N;;;;; 05AB;HEBREW ACCENT OLE;Mn;230;NSM;;;;;N;;;;; 05AC;HEBREW ACCENT ILUY;Mn;230;NSM;;;;;N;;;;; 05AD;HEBREW ACCENT DEHI;Mn;222;NSM;;;;;N;;;;; 05AE;HEBREW ACCENT ZINOR;Mn;228;NSM;;;;;N;;;;; 05AF;HEBREW MARK MASORA CIRCLE;Mn;230;NSM;;;;;N;;;;; 05B0;HEBREW POINT SHEVA;Mn;10;NSM;;;;;N;;;;; 05B1;HEBREW POINT HATAF SEGOL;Mn;11;NSM;;;;;N;;;;; 05B2;HEBREW POINT HATAF PATAH;Mn;12;NSM;;;;;N;;;;; 05B3;HEBREW POINT HATAF QAMATS;Mn;13;NSM;;;;;N;;;;; 05B4;HEBREW POINT HIRIQ;Mn;14;NSM;;;;;N;;;;; 05B5;HEBREW POINT TSERE;Mn;15;NSM;;;;;N;;;;; 05B6;HEBREW POINT SEGOL;Mn;16;NSM;;;;;N;;;;; 05B7;HEBREW POINT PATAH;Mn;17;NSM;;;;;N;;;;; 05B8;HEBREW POINT QAMATS;Mn;18;NSM;;;;;N;;;;; 05B9;HEBREW POINT HOLAM;Mn;19;NSM;;;;;N;;;;; 05BA;HEBREW POINT HOLAM HASER FOR VAV;Mn;19;NSM;;;;;N;;;;; 05BB;HEBREW POINT QUBUTS;Mn;20;NSM;;;;;N;;;;; 05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;NSM;;;;;N;HEBREW POINT DAGESH;;;; 05BD;HEBREW POINT METEG;Mn;22;NSM;;;;;N;;;;; 05BE;HEBREW PUNCTUATION MAQAF;Pd;0;R;;;;;N;;;;; 05BF;HEBREW POINT RAFE;Mn;23;NSM;;;;;N;;;;; 05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;;;; 05C1;HEBREW POINT SHIN DOT;Mn;24;NSM;;;;;N;;;;; 05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;; 05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;;;; 05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;; 05C5;HEBREW MARK LOWER DOT;Mn;220;NSM;;;;;N;;;;; 05C6;HEBREW PUNCTUATION NUN HAFUKHA;Po;0;R;;;;;N;;;;; 05C7;HEBREW POINT QAMATS QATAN;Mn;18;NSM;;;;;N;;;;; 05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;; 05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;; 05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;; 05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;; 05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;; 05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;; 05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;; 05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;; 05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;; 05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;; 05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;; 05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;; 05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;; 05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;; 05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;; 05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;; 05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;; 05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;; 05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;; 05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;; 05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;; 05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;; 05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;; 05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;; 05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;; 05EF;HEBREW YOD TRIANGLE;Lo;0;R;;;;;N;;;;; 05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;; 05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;; 05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;; 05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;; 05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;; 0600;ARABIC NUMBER SIGN;Cf;0;AN;;;;;N;;;;; 0601;ARABIC SIGN SANAH;Cf;0;AN;;;;;N;;;;; 0602;ARABIC FOOTNOTE MARKER;Cf;0;AN;;;;;N;;;;; 0603;ARABIC SIGN SAFHA;Cf;0;AN;;;;;N;;;;; 0604;ARABIC SIGN SAMVAT;Cf;0;AN;;;;;N;;;;; 0605;ARABIC NUMBER MARK ABOVE;Cf;0;AN;;;;;N;;;;; 0606;ARABIC-INDIC CUBE ROOT;Sm;0;ON;;;;;N;;;;; 0607;ARABIC-INDIC FOURTH ROOT;Sm;0;ON;;;;;N;;;;; 0608;ARABIC RAY;Sm;0;AL;;;;;N;;;;; 0609;ARABIC-INDIC PER MILLE SIGN;Po;0;ET;;;;;N;;;;; 060A;ARABIC-INDIC PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;; 060B;AFGHANI SIGN;Sc;0;AL;;;;;N;;;;; 060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;; 060D;ARABIC DATE SEPARATOR;Po;0;AL;;;;;N;;;;; 060E;ARABIC POETIC VERSE SIGN;So;0;ON;;;;;N;;;;; 060F;ARABIC SIGN MISRA;So;0;ON;;;;;N;;;;; 0610;ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM;Mn;230;NSM;;;;;N;;;;; 0611;ARABIC SIGN ALAYHE ASSALLAM;Mn;230;NSM;;;;;N;;;;; 0612;ARABIC SIGN RAHMATULLAH ALAYHE;Mn;230;NSM;;;;;N;;;;; 0613;ARABIC SIGN RADI ALLAHOU ANHU;Mn;230;NSM;;;;;N;;;;; 0614;ARABIC SIGN TAKHALLUS;Mn;230;NSM;;;;;N;;;;; 0615;ARABIC SMALL HIGH TAH;Mn;230;NSM;;;;;N;;;;; 0616;ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH;Mn;230;NSM;;;;;N;;;;; 0617;ARABIC SMALL HIGH ZAIN;Mn;230;NSM;;;;;N;;;;; 0618;ARABIC SMALL FATHA;Mn;30;NSM;;;;;N;;;;; 0619;ARABIC SMALL DAMMA;Mn;31;NSM;;;;;N;;;;; 061A;ARABIC SMALL KASRA;Mn;32;NSM;;;;;N;;;;; 061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;; 061C;ARABIC LETTER MARK;Cf;0;AL;;;;;N;;;;; 061D;ARABIC END OF TEXT MARK;Po;0;AL;;;;;N;;;;; 061E;ARABIC TRIPLE DOT PUNCTUATION MARK;Po;0;AL;;;;;N;;;;; 061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;; 0620;ARABIC LETTER KASHMIRI YEH;Lo;0;AL;;;;;N;;;;; 0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;; 0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;; 0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;AL;0627 0654;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;; 0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;AL;0648 0654;;;;N;ARABIC LETTER HAMZAH ON WAW;;;; 0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;AL;0627 0655;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;; 0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;AL;064A 0654;;;;N;ARABIC LETTER HAMZAH ON YA;;;; 0627;ARABIC LETTER ALEF;Lo;0;AL;;;;;N;;;;; 0628;ARABIC LETTER BEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA;;;; 0629;ARABIC LETTER TEH MARBUTA;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH;;;; 062A;ARABIC LETTER TEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA;;;; 062B;ARABIC LETTER THEH;Lo;0;AL;;;;;N;ARABIC LETTER THAA;;;; 062C;ARABIC LETTER JEEM;Lo;0;AL;;;;;N;;;;; 062D;ARABIC LETTER HAH;Lo;0;AL;;;;;N;ARABIC LETTER HAA;;;; 062E;ARABIC LETTER KHAH;Lo;0;AL;;;;;N;ARABIC LETTER KHAA;;;; 062F;ARABIC LETTER DAL;Lo;0;AL;;;;;N;;;;; 0630;ARABIC LETTER THAL;Lo;0;AL;;;;;N;;;;; 0631;ARABIC LETTER REH;Lo;0;AL;;;;;N;ARABIC LETTER RA;;;; 0632;ARABIC LETTER ZAIN;Lo;0;AL;;;;;N;;;;; 0633;ARABIC LETTER SEEN;Lo;0;AL;;;;;N;;;;; 0634;ARABIC LETTER SHEEN;Lo;0;AL;;;;;N;;;;; 0635;ARABIC LETTER SAD;Lo;0;AL;;;;;N;;;;; 0636;ARABIC LETTER DAD;Lo;0;AL;;;;;N;;;;; 0637;ARABIC LETTER TAH;Lo;0;AL;;;;;N;;;;; 0638;ARABIC LETTER ZAH;Lo;0;AL;;;;;N;ARABIC LETTER DHAH;;;; 0639;ARABIC LETTER AIN;Lo;0;AL;;;;;N;;;;; 063A;ARABIC LETTER GHAIN;Lo;0;AL;;;;;N;;;;; 063B;ARABIC LETTER KEHEH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 063C;ARABIC LETTER KEHEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 063D;ARABIC LETTER FARSI YEH WITH INVERTED V;Lo;0;AL;;;;;N;;;;; 063E;ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 063F;ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 0640;ARABIC TATWEEL;Lm;0;AL;;;;;N;;;;; 0641;ARABIC LETTER FEH;Lo;0;AL;;;;;N;ARABIC LETTER FA;;;; 0642;ARABIC LETTER QAF;Lo;0;AL;;;;;N;;;;; 0643;ARABIC LETTER KAF;Lo;0;AL;;;;;N;ARABIC LETTER CAF;;;; 0644;ARABIC LETTER LAM;Lo;0;AL;;;;;N;;;;; 0645;ARABIC LETTER MEEM;Lo;0;AL;;;;;N;;;;; 0646;ARABIC LETTER NOON;Lo;0;AL;;;;;N;;;;; 0647;ARABIC LETTER HEH;Lo;0;AL;;;;;N;ARABIC LETTER HA;;;; 0648;ARABIC LETTER WAW;Lo;0;AL;;;;;N;;;;; 0649;ARABIC LETTER ALEF MAKSURA;Lo;0;AL;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;; 064A;ARABIC LETTER YEH;Lo;0;AL;;;;;N;ARABIC LETTER YA;;;; 064B;ARABIC FATHATAN;Mn;27;NSM;;;;;N;;;;; 064C;ARABIC DAMMATAN;Mn;28;NSM;;;;;N;;;;; 064D;ARABIC KASRATAN;Mn;29;NSM;;;;;N;;;;; 064E;ARABIC FATHA;Mn;30;NSM;;;;;N;ARABIC FATHAH;;;; 064F;ARABIC DAMMA;Mn;31;NSM;;;;;N;ARABIC DAMMAH;;;; 0650;ARABIC KASRA;Mn;32;NSM;;;;;N;ARABIC KASRAH;;;; 0651;ARABIC SHADDA;Mn;33;NSM;;;;;N;ARABIC SHADDAH;;;; 0652;ARABIC SUKUN;Mn;34;NSM;;;;;N;;;;; 0653;ARABIC MADDAH ABOVE;Mn;230;NSM;;;;;N;;;;; 0654;ARABIC HAMZA ABOVE;Mn;230;NSM;;;;;N;;;;; 0655;ARABIC HAMZA BELOW;Mn;220;NSM;;;;;N;;;;; 0656;ARABIC SUBSCRIPT ALEF;Mn;220;NSM;;;;;N;;;;; 0657;ARABIC INVERTED DAMMA;Mn;230;NSM;;;;;N;;;;; 0658;ARABIC MARK NOON GHUNNA;Mn;230;NSM;;;;;N;;;;; 0659;ARABIC ZWARAKAY;Mn;230;NSM;;;;;N;;;;; 065A;ARABIC VOWEL SIGN SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;; 065B;ARABIC VOWEL SIGN INVERTED SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;; 065C;ARABIC VOWEL SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;; 065D;ARABIC REVERSED DAMMA;Mn;230;NSM;;;;;N;;;;; 065E;ARABIC FATHA WITH TWO DOTS;Mn;230;NSM;;;;;N;;;;; 065F;ARABIC WAVY HAMZA BELOW;Mn;220;NSM;;;;;N;;;;; 0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;; 0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;; 0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;; 0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;; 0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;; 0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;; 0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;; 0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;; 0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;; 0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;; 066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;; 066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;; 066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;; 066D;ARABIC FIVE POINTED STAR;Po;0;AL;;;;;N;;;;; 066E;ARABIC LETTER DOTLESS BEH;Lo;0;AL;;;;;N;;;;; 066F;ARABIC LETTER DOTLESS QAF;Lo;0;AL;;;;;N;;;;; 0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;NSM;;;;;N;ARABIC ALEF ABOVE;;;; 0671;ARABIC LETTER ALEF WASLA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;; 0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;; 0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;; 0674;ARABIC LETTER HIGH HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HIGH HAMZAH;;;; 0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;AL; 0627 0674;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;; 0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;AL; 0648 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;; 0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;AL; 06C7 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;; 0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;AL; 064A 0674;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;; 0679;ARABIC LETTER TTEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;; 067A;ARABIC LETTER TTEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;; 067B;ARABIC LETTER BEEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;; 067C;ARABIC LETTER TEH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH RING;;;; 067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;; 067E;ARABIC LETTER PEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;; 067F;ARABIC LETTER TEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;; 0680;ARABIC LETTER BEHEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;; 0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;; 0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;; 0683;ARABIC LETTER NYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;; 0684;ARABIC LETTER DYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;; 0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;; 0686;ARABIC LETTER TCHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;; 0687;ARABIC LETTER TCHEHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;; 0688;ARABIC LETTER DDAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;; 0689;ARABIC LETTER DAL WITH RING;Lo;0;AL;;;;;N;;;;; 068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;; 068C;ARABIC LETTER DAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;; 068D;ARABIC LETTER DDAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;; 068E;ARABIC LETTER DUL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;; 068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;; 0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 0691;ARABIC LETTER RREH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;; 0692;ARABIC LETTER REH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V;;;; 0693;ARABIC LETTER REH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH RING;;;; 0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;; 0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;; 0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;; 0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;; 0698;ARABIC LETTER JEH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;; 0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;; 069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; 069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; 069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06A1;ARABIC LETTER DOTLESS FEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS FA;;;; 06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;; 06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;; 06A4;ARABIC LETTER VEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;; 06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;; 06A6;ARABIC LETTER PEHEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;; 06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06A9;ARABIC LETTER KEHEH;Lo;0;AL;;;;;N;ARABIC LETTER OPEN CAF;;;; 06AA;ARABIC LETTER SWASH KAF;Lo;0;AL;;;;;N;ARABIC LETTER SWASH CAF;;;; 06AB;ARABIC LETTER KAF WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH RING;;;; 06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;; 06AD;ARABIC LETTER NG;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;; 06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;; 06AF;ARABIC LETTER GAF;Lo;0;AL;;;;;N;;;;; 06B0;ARABIC LETTER GAF WITH RING;Lo;0;AL;;;;;N;;;;; 06B1;ARABIC LETTER NGOEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;; 06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; 06B3;ARABIC LETTER GUEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;; 06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;AL;;;;;N;;;;; 06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06B8;ARABIC LETTER LAM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 06B9;ARABIC LETTER NOON WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 06BA;ARABIC LETTER NOON GHUNNA;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON;;;; 06BB;ARABIC LETTER RNOON;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;; 06BC;ARABIC LETTER NOON WITH RING;Lo;0;AL;;;;;N;;;;; 06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;AL;;;;;N;ARABIC LETTER KNOTTED HA;;;; 06BF;ARABIC LETTER TCHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;AL;06D5 0654;;;;N;ARABIC LETTER HAMZAH ON HA;;;; 06C1;ARABIC LETTER HEH GOAL;Lo;0;AL;;;;;N;ARABIC LETTER HA GOAL;;;; 06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;AL;06C1 0654;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;; 06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;; 06C4;ARABIC LETTER WAW WITH RING;Lo;0;AL;;;;;N;;;;; 06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH BAR;;;; 06C6;ARABIC LETTER OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;; 06C7;ARABIC LETTER U;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;; 06C8;ARABIC LETTER YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;; 06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;; 06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06CB;ARABIC LETTER VE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;; 06CC;ARABIC LETTER FARSI YEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS YA;;;; 06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TAIL;;;; 06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH SMALL V;;;; 06CF;ARABIC LETTER WAW WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 06D0;ARABIC LETTER E;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;;;; 06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;; 06D2;ARABIC LETTER YEH BARREE;Lo;0;AL;;;;;N;ARABIC LETTER YA BARREE;;;; 06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;AL;06D2 0654;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;; 06D4;ARABIC FULL STOP;Po;0;AL;;;;;N;ARABIC PERIOD;;;; 06D5;ARABIC LETTER AE;Lo;0;AL;;;;;N;;;;; 06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;; 06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;; 06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;NSM;;;;;N;;;;; 06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;NSM;;;;;N;;;;; 06DA;ARABIC SMALL HIGH JEEM;Mn;230;NSM;;;;;N;;;;; 06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;NSM;;;;;N;;;;; 06DC;ARABIC SMALL HIGH SEEN;Mn;230;NSM;;;;;N;;;;; 06DD;ARABIC END OF AYAH;Cf;0;AN;;;;;N;;;;; 06DE;ARABIC START OF RUB EL HIZB;So;0;ON;;;;;N;;;;; 06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;NSM;;;;;N;;;;; 06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;NSM;;;;;N;;;;; 06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;NSM;;;;;N;;;;; 06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;NSM;;;;;N;;;;; 06E3;ARABIC SMALL LOW SEEN;Mn;220;NSM;;;;;N;;;;; 06E4;ARABIC SMALL HIGH MADDA;Mn;230;NSM;;;;;N;;;;; 06E5;ARABIC SMALL WAW;Lm;0;AL;;;;;N;;;;; 06E6;ARABIC SMALL YEH;Lm;0;AL;;;;;N;;;;; 06E7;ARABIC SMALL HIGH YEH;Mn;230;NSM;;;;;N;;;;; 06E8;ARABIC SMALL HIGH NOON;Mn;230;NSM;;;;;N;;;;; 06E9;ARABIC PLACE OF SAJDAH;So;0;ON;;;;;N;;;;; 06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;NSM;;;;;N;;;;; 06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;NSM;;;;;N;;;;; 06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;NSM;;;;;N;;;;; 06ED;ARABIC SMALL LOW MEEM;Mn;220;NSM;;;;;N;;;;; 06EE;ARABIC LETTER DAL WITH INVERTED V;Lo;0;AL;;;;;N;;;;; 06EF;ARABIC LETTER REH WITH INVERTED V;Lo;0;AL;;;;;N;;;;; 06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;; 06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;; 06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;; 06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;; 06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;; 06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;; 06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;; 06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;; 06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;; 06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;; 06FA;ARABIC LETTER SHEEN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 06FB;ARABIC LETTER DAD WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 06FC;ARABIC LETTER GHAIN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 06FD;ARABIC SIGN SINDHI AMPERSAND;So;0;AL;;;;;N;;;;; 06FE;ARABIC SIGN SINDHI POSTPOSITION MEN;So;0;AL;;;;;N;;;;; 06FF;ARABIC LETTER HEH WITH INVERTED V;Lo;0;AL;;;;;N;;;;; 0700;SYRIAC END OF PARAGRAPH;Po;0;AL;;;;;N;;;;; 0701;SYRIAC SUPRALINEAR FULL STOP;Po;0;AL;;;;;N;;;;; 0702;SYRIAC SUBLINEAR FULL STOP;Po;0;AL;;;;;N;;;;; 0703;SYRIAC SUPRALINEAR COLON;Po;0;AL;;;;;N;;;;; 0704;SYRIAC SUBLINEAR COLON;Po;0;AL;;;;;N;;;;; 0705;SYRIAC HORIZONTAL COLON;Po;0;AL;;;;;N;;;;; 0706;SYRIAC COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;; 0707;SYRIAC COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;; 0708;SYRIAC SUPRALINEAR COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;; 0709;SYRIAC SUBLINEAR COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;; 070A;SYRIAC CONTRACTION;Po;0;AL;;;;;N;;;;; 070B;SYRIAC HARKLEAN OBELUS;Po;0;AL;;;;;N;;;;; 070C;SYRIAC HARKLEAN METOBELUS;Po;0;AL;;;;;N;;;;; 070D;SYRIAC HARKLEAN ASTERISCUS;Po;0;AL;;;;;N;;;;; 070F;SYRIAC ABBREVIATION MARK;Cf;0;AL;;;;;N;;;;; 0710;SYRIAC LETTER ALAPH;Lo;0;AL;;;;;N;;;;; 0711;SYRIAC LETTER SUPERSCRIPT ALAPH;Mn;36;NSM;;;;;N;;;;; 0712;SYRIAC LETTER BETH;Lo;0;AL;;;;;N;;;;; 0713;SYRIAC LETTER GAMAL;Lo;0;AL;;;;;N;;;;; 0714;SYRIAC LETTER GAMAL GARSHUNI;Lo;0;AL;;;;;N;;;;; 0715;SYRIAC LETTER DALATH;Lo;0;AL;;;;;N;;;;; 0716;SYRIAC LETTER DOTLESS DALATH RISH;Lo;0;AL;;;;;N;;;;; 0717;SYRIAC LETTER HE;Lo;0;AL;;;;;N;;;;; 0718;SYRIAC LETTER WAW;Lo;0;AL;;;;;N;;;;; 0719;SYRIAC LETTER ZAIN;Lo;0;AL;;;;;N;;;;; 071A;SYRIAC LETTER HETH;Lo;0;AL;;;;;N;;;;; 071B;SYRIAC LETTER TETH;Lo;0;AL;;;;;N;;;;; 071C;SYRIAC LETTER TETH GARSHUNI;Lo;0;AL;;;;;N;;;;; 071D;SYRIAC LETTER YUDH;Lo;0;AL;;;;;N;;;;; 071E;SYRIAC LETTER YUDH HE;Lo;0;AL;;;;;N;;;;; 071F;SYRIAC LETTER KAPH;Lo;0;AL;;;;;N;;;;; 0720;SYRIAC LETTER LAMADH;Lo;0;AL;;;;;N;;;;; 0721;SYRIAC LETTER MIM;Lo;0;AL;;;;;N;;;;; 0722;SYRIAC LETTER NUN;Lo;0;AL;;;;;N;;;;; 0723;SYRIAC LETTER SEMKATH;Lo;0;AL;;;;;N;;;;; 0724;SYRIAC LETTER FINAL SEMKATH;Lo;0;AL;;;;;N;;;;; 0725;SYRIAC LETTER E;Lo;0;AL;;;;;N;;;;; 0726;SYRIAC LETTER PE;Lo;0;AL;;;;;N;;;;; 0727;SYRIAC LETTER REVERSED PE;Lo;0;AL;;;;;N;;;;; 0728;SYRIAC LETTER SADHE;Lo;0;AL;;;;;N;;;;; 0729;SYRIAC LETTER QAPH;Lo;0;AL;;;;;N;;;;; 072A;SYRIAC LETTER RISH;Lo;0;AL;;;;;N;;;;; 072B;SYRIAC LETTER SHIN;Lo;0;AL;;;;;N;;;;; 072C;SYRIAC LETTER TAW;Lo;0;AL;;;;;N;;;;; 072D;SYRIAC LETTER PERSIAN BHETH;Lo;0;AL;;;;;N;;;;; 072E;SYRIAC LETTER PERSIAN GHAMAL;Lo;0;AL;;;;;N;;;;; 072F;SYRIAC LETTER PERSIAN DHALATH;Lo;0;AL;;;;;N;;;;; 0730;SYRIAC PTHAHA ABOVE;Mn;230;NSM;;;;;N;;;;; 0731;SYRIAC PTHAHA BELOW;Mn;220;NSM;;;;;N;;;;; 0732;SYRIAC PTHAHA DOTTED;Mn;230;NSM;;;;;N;;;;; 0733;SYRIAC ZQAPHA ABOVE;Mn;230;NSM;;;;;N;;;;; 0734;SYRIAC ZQAPHA BELOW;Mn;220;NSM;;;;;N;;;;; 0735;SYRIAC ZQAPHA DOTTED;Mn;230;NSM;;;;;N;;;;; 0736;SYRIAC RBASA ABOVE;Mn;230;NSM;;;;;N;;;;; 0737;SYRIAC RBASA BELOW;Mn;220;NSM;;;;;N;;;;; 0738;SYRIAC DOTTED ZLAMA HORIZONTAL;Mn;220;NSM;;;;;N;;;;; 0739;SYRIAC DOTTED ZLAMA ANGULAR;Mn;220;NSM;;;;;N;;;;; 073A;SYRIAC HBASA ABOVE;Mn;230;NSM;;;;;N;;;;; 073B;SYRIAC HBASA BELOW;Mn;220;NSM;;;;;N;;;;; 073C;SYRIAC HBASA-ESASA DOTTED;Mn;220;NSM;;;;;N;;;;; 073D;SYRIAC ESASA ABOVE;Mn;230;NSM;;;;;N;;;;; 073E;SYRIAC ESASA BELOW;Mn;220;NSM;;;;;N;;;;; 073F;SYRIAC RWAHA;Mn;230;NSM;;;;;N;;;;; 0740;SYRIAC FEMININE DOT;Mn;230;NSM;;;;;N;;;;; 0741;SYRIAC QUSHSHAYA;Mn;230;NSM;;;;;N;;;;; 0742;SYRIAC RUKKAKHA;Mn;220;NSM;;;;;N;;;;; 0743;SYRIAC TWO VERTICAL DOTS ABOVE;Mn;230;NSM;;;;;N;;;;; 0744;SYRIAC TWO VERTICAL DOTS BELOW;Mn;220;NSM;;;;;N;;;;; 0745;SYRIAC THREE DOTS ABOVE;Mn;230;NSM;;;;;N;;;;; 0746;SYRIAC THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;; 0747;SYRIAC OBLIQUE LINE ABOVE;Mn;230;NSM;;;;;N;;;;; 0748;SYRIAC OBLIQUE LINE BELOW;Mn;220;NSM;;;;;N;;;;; 0749;SYRIAC MUSIC;Mn;230;NSM;;;;;N;;;;; 074A;SYRIAC BARREKH;Mn;230;NSM;;;;;N;;;;; 074D;SYRIAC LETTER SOGDIAN ZHAIN;Lo;0;AL;;;;;N;;;;; 074E;SYRIAC LETTER SOGDIAN KHAPH;Lo;0;AL;;;;;N;;;;; 074F;SYRIAC LETTER SOGDIAN FE;Lo;0;AL;;;;;N;;;;; 0750;ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW;Lo;0;AL;;;;;N;;;;; 0751;ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 0752;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; 0753;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 0754;ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; 0755;ARABIC LETTER BEH WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;; 0756;ARABIC LETTER BEH WITH SMALL V;Lo;0;AL;;;;;N;;;;; 0757;ARABIC LETTER HAH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 0758;ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; 0759;ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;; 075A;ARABIC LETTER DAL WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;; 075B;ARABIC LETTER REH WITH STROKE;Lo;0;AL;;;;;N;;;;; 075C;ARABIC LETTER SEEN WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 075D;ARABIC LETTER AIN WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 075E;ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE;Lo;0;AL;;;;;N;;;;; 075F;ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;; 0760;ARABIC LETTER FEH WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; 0761;ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; 0762;ARABIC LETTER KEHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 0763;ARABIC LETTER KEHEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 0764;ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; 0765;ARABIC LETTER MEEM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 0766;ARABIC LETTER MEEM WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 0767;ARABIC LETTER NOON WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; 0768;ARABIC LETTER NOON WITH SMALL TAH;Lo;0;AL;;;;;N;;;;; 0769;ARABIC LETTER NOON WITH SMALL V;Lo;0;AL;;;;;N;;;;; 076A;ARABIC LETTER LAM WITH BAR;Lo;0;AL;;;;;N;;;;; 076B;ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;; 076C;ARABIC LETTER REH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;; 076D;ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;; 076E;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW;Lo;0;AL;;;;;N;;;;; 076F;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;; 0770;ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;; 0771;ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;; 0772;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE;Lo;0;AL;;;;;N;;;;; 0773;ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;; 0774;ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;; 0775;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;; 0776;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;; 0777;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW;Lo;0;AL;;;;;N;;;;; 0778;ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;; 0779;ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;; 077A;ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;; 077B;ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;; 077C;ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW;Lo;0;AL;;;;;N;;;;; 077D;ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE;Lo;0;AL;;;;;N;;;;; 077E;ARABIC LETTER SEEN WITH INVERTED V;Lo;0;AL;;;;;N;;;;; 077F;ARABIC LETTER KAF WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;; 0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;; 0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;; 0783;THAANA LETTER RAA;Lo;0;AL;;;;;N;;;;; 0784;THAANA LETTER BAA;Lo;0;AL;;;;;N;;;;; 0785;THAANA LETTER LHAVIYANI;Lo;0;AL;;;;;N;;;;; 0786;THAANA LETTER KAAFU;Lo;0;AL;;;;;N;;;;; 0787;THAANA LETTER ALIFU;Lo;0;AL;;;;;N;;;;; 0788;THAANA LETTER VAAVU;Lo;0;AL;;;;;N;;;;; 0789;THAANA LETTER MEEMU;Lo;0;AL;;;;;N;;;;; 078A;THAANA LETTER FAAFU;Lo;0;AL;;;;;N;;;;; 078B;THAANA LETTER DHAALU;Lo;0;AL;;;;;N;;;;; 078C;THAANA LETTER THAA;Lo;0;AL;;;;;N;;;;; 078D;THAANA LETTER LAAMU;Lo;0;AL;;;;;N;;;;; 078E;THAANA LETTER GAAFU;Lo;0;AL;;;;;N;;;;; 078F;THAANA LETTER GNAVIYANI;Lo;0;AL;;;;;N;;;;; 0790;THAANA LETTER SEENU;Lo;0;AL;;;;;N;;;;; 0791;THAANA LETTER DAVIYANI;Lo;0;AL;;;;;N;;;;; 0792;THAANA LETTER ZAVIYANI;Lo;0;AL;;;;;N;;;;; 0793;THAANA LETTER TAVIYANI;Lo;0;AL;;;;;N;;;;; 0794;THAANA LETTER YAA;Lo;0;AL;;;;;N;;;;; 0795;THAANA LETTER PAVIYANI;Lo;0;AL;;;;;N;;;;; 0796;THAANA LETTER JAVIYANI;Lo;0;AL;;;;;N;;;;; 0797;THAANA LETTER CHAVIYANI;Lo;0;AL;;;;;N;;;;; 0798;THAANA LETTER TTAA;Lo;0;AL;;;;;N;;;;; 0799;THAANA LETTER HHAA;Lo;0;AL;;;;;N;;;;; 079A;THAANA LETTER KHAA;Lo;0;AL;;;;;N;;;;; 079B;THAANA LETTER THAALU;Lo;0;AL;;;;;N;;;;; 079C;THAANA LETTER ZAA;Lo;0;AL;;;;;N;;;;; 079D;THAANA LETTER SHEENU;Lo;0;AL;;;;;N;;;;; 079E;THAANA LETTER SAADHU;Lo;0;AL;;;;;N;;;;; 079F;THAANA LETTER DAADHU;Lo;0;AL;;;;;N;;;;; 07A0;THAANA LETTER TO;Lo;0;AL;;;;;N;;;;; 07A1;THAANA LETTER ZO;Lo;0;AL;;;;;N;;;;; 07A2;THAANA LETTER AINU;Lo;0;AL;;;;;N;;;;; 07A3;THAANA LETTER GHAINU;Lo;0;AL;;;;;N;;;;; 07A4;THAANA LETTER QAAFU;Lo;0;AL;;;;;N;;;;; 07A5;THAANA LETTER WAAVU;Lo;0;AL;;;;;N;;;;; 07A6;THAANA ABAFILI;Mn;0;NSM;;;;;N;;;;; 07A7;THAANA AABAAFILI;Mn;0;NSM;;;;;N;;;;; 07A8;THAANA IBIFILI;Mn;0;NSM;;;;;N;;;;; 07A9;THAANA EEBEEFILI;Mn;0;NSM;;;;;N;;;;; 07AA;THAANA UBUFILI;Mn;0;NSM;;;;;N;;;;; 07AB;THAANA OOBOOFILI;Mn;0;NSM;;;;;N;;;;; 07AC;THAANA EBEFILI;Mn;0;NSM;;;;;N;;;;; 07AD;THAANA EYBEYFILI;Mn;0;NSM;;;;;N;;;;; 07AE;THAANA OBOFILI;Mn;0;NSM;;;;;N;;;;; 07AF;THAANA OABOAFILI;Mn;0;NSM;;;;;N;;;;; 07B0;THAANA SUKUN;Mn;0;NSM;;;;;N;;;;; 07B1;THAANA LETTER NAA;Lo;0;AL;;;;;N;;;;; 07C0;NKO DIGIT ZERO;Nd;0;R;;0;0;0;N;;;;; 07C1;NKO DIGIT ONE;Nd;0;R;;1;1;1;N;;;;; 07C2;NKO DIGIT TWO;Nd;0;R;;2;2;2;N;;;;; 07C3;NKO DIGIT THREE;Nd;0;R;;3;3;3;N;;;;; 07C4;NKO DIGIT FOUR;Nd;0;R;;4;4;4;N;;;;; 07C5;NKO DIGIT FIVE;Nd;0;R;;5;5;5;N;;;;; 07C6;NKO DIGIT SIX;Nd;0;R;;6;6;6;N;;;;; 07C7;NKO DIGIT SEVEN;Nd;0;R;;7;7;7;N;;;;; 07C8;NKO DIGIT EIGHT;Nd;0;R;;8;8;8;N;;;;; 07C9;NKO DIGIT NINE;Nd;0;R;;9;9;9;N;;;;; 07CA;NKO LETTER A;Lo;0;R;;;;;N;;;;; 07CB;NKO LETTER EE;Lo;0;R;;;;;N;;;;; 07CC;NKO LETTER I;Lo;0;R;;;;;N;;;;; 07CD;NKO LETTER E;Lo;0;R;;;;;N;;;;; 07CE;NKO LETTER U;Lo;0;R;;;;;N;;;;; 07CF;NKO LETTER OO;Lo;0;R;;;;;N;;;;; 07D0;NKO LETTER O;Lo;0;R;;;;;N;;;;; 07D1;NKO LETTER DAGBASINNA;Lo;0;R;;;;;N;;;;; 07D2;NKO LETTER N;Lo;0;R;;;;;N;;;;; 07D3;NKO LETTER BA;Lo;0;R;;;;;N;;;;; 07D4;NKO LETTER PA;Lo;0;R;;;;;N;;;;; 07D5;NKO LETTER TA;Lo;0;R;;;;;N;;;;; 07D6;NKO LETTER JA;Lo;0;R;;;;;N;;;;; 07D7;NKO LETTER CHA;Lo;0;R;;;;;N;;;;; 07D8;NKO LETTER DA;Lo;0;R;;;;;N;;;;; 07D9;NKO LETTER RA;Lo;0;R;;;;;N;;;;; 07DA;NKO LETTER RRA;Lo;0;R;;;;;N;;;;; 07DB;NKO LETTER SA;Lo;0;R;;;;;N;;;;; 07DC;NKO LETTER GBA;Lo;0;R;;;;;N;;;;; 07DD;NKO LETTER FA;Lo;0;R;;;;;N;;;;; 07DE;NKO LETTER KA;Lo;0;R;;;;;N;;;;; 07DF;NKO LETTER LA;Lo;0;R;;;;;N;;;;; 07E0;NKO LETTER NA WOLOSO;Lo;0;R;;;;;N;;;;; 07E1;NKO LETTER MA;Lo;0;R;;;;;N;;;;; 07E2;NKO LETTER NYA;Lo;0;R;;;;;N;;;;; 07E3;NKO LETTER NA;Lo;0;R;;;;;N;;;;; 07E4;NKO LETTER HA;Lo;0;R;;;;;N;;;;; 07E5;NKO LETTER WA;Lo;0;R;;;;;N;;;;; 07E6;NKO LETTER YA;Lo;0;R;;;;;N;;;;; 07E7;NKO LETTER NYA WOLOSO;Lo;0;R;;;;;N;;;;; 07E8;NKO LETTER JONA JA;Lo;0;R;;;;;N;;;;; 07E9;NKO LETTER JONA CHA;Lo;0;R;;;;;N;;;;; 07EA;NKO LETTER JONA RA;Lo;0;R;;;;;N;;;;; 07EB;NKO COMBINING SHORT HIGH TONE;Mn;230;NSM;;;;;N;;;;; 07EC;NKO COMBINING SHORT LOW TONE;Mn;230;NSM;;;;;N;;;;; 07ED;NKO COMBINING SHORT RISING TONE;Mn;230;NSM;;;;;N;;;;; 07EE;NKO COMBINING LONG DESCENDING TONE;Mn;230;NSM;;;;;N;;;;; 07EF;NKO COMBINING LONG HIGH TONE;Mn;230;NSM;;;;;N;;;;; 07F0;NKO COMBINING LONG LOW TONE;Mn;230;NSM;;;;;N;;;;; 07F1;NKO COMBINING LONG RISING TONE;Mn;230;NSM;;;;;N;;;;; 07F2;NKO COMBINING NASALIZATION MARK;Mn;220;NSM;;;;;N;;;;; 07F3;NKO COMBINING DOUBLE DOT ABOVE;Mn;230;NSM;;;;;N;;;;; 07F4;NKO HIGH TONE APOSTROPHE;Lm;0;R;;;;;N;;;;; 07F5;NKO LOW TONE APOSTROPHE;Lm;0;R;;;;;N;;;;; 07F6;NKO SYMBOL OO DENNEN;So;0;ON;;;;;N;;;;; 07F7;NKO SYMBOL GBAKURUNEN;Po;0;ON;;;;;N;;;;; 07F8;NKO COMMA;Po;0;ON;;;;;N;;;;; 07F9;NKO EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; 07FA;NKO LAJANYALAN;Lm;0;R;;;;;N;;;;; 07FD;NKO DANTAYALAN;Mn;220;NSM;;;;;N;;;;; 07FE;NKO DOROME SIGN;Sc;0;R;;;;;N;;;;; 07FF;NKO TAMAN SIGN;Sc;0;R;;;;;N;;;;; 0800;SAMARITAN LETTER ALAF;Lo;0;R;;;;;N;;;;; 0801;SAMARITAN LETTER BIT;Lo;0;R;;;;;N;;;;; 0802;SAMARITAN LETTER GAMAN;Lo;0;R;;;;;N;;;;; 0803;SAMARITAN LETTER DALAT;Lo;0;R;;;;;N;;;;; 0804;SAMARITAN LETTER IY;Lo;0;R;;;;;N;;;;; 0805;SAMARITAN LETTER BAA;Lo;0;R;;;;;N;;;;; 0806;SAMARITAN LETTER ZEN;Lo;0;R;;;;;N;;;;; 0807;SAMARITAN LETTER IT;Lo;0;R;;;;;N;;;;; 0808;SAMARITAN LETTER TIT;Lo;0;R;;;;;N;;;;; 0809;SAMARITAN LETTER YUT;Lo;0;R;;;;;N;;;;; 080A;SAMARITAN LETTER KAAF;Lo;0;R;;;;;N;;;;; 080B;SAMARITAN LETTER LABAT;Lo;0;R;;;;;N;;;;; 080C;SAMARITAN LETTER MIM;Lo;0;R;;;;;N;;;;; 080D;SAMARITAN LETTER NUN;Lo;0;R;;;;;N;;;;; 080E;SAMARITAN LETTER SINGAAT;Lo;0;R;;;;;N;;;;; 080F;SAMARITAN LETTER IN;Lo;0;R;;;;;N;;;;; 0810;SAMARITAN LETTER FI;Lo;0;R;;;;;N;;;;; 0811;SAMARITAN LETTER TSAADIY;Lo;0;R;;;;;N;;;;; 0812;SAMARITAN LETTER QUF;Lo;0;R;;;;;N;;;;; 0813;SAMARITAN LETTER RISH;Lo;0;R;;;;;N;;;;; 0814;SAMARITAN LETTER SHAN;Lo;0;R;;;;;N;;;;; 0815;SAMARITAN LETTER TAAF;Lo;0;R;;;;;N;;;;; 0816;SAMARITAN MARK IN;Mn;230;NSM;;;;;N;;;;; 0817;SAMARITAN MARK IN-ALAF;Mn;230;NSM;;;;;N;;;;; 0818;SAMARITAN MARK OCCLUSION;Mn;230;NSM;;;;;N;;;;; 0819;SAMARITAN MARK DAGESH;Mn;230;NSM;;;;;N;;;;; 081A;SAMARITAN MODIFIER LETTER EPENTHETIC YUT;Lm;0;R;;;;;N;;;;; 081B;SAMARITAN MARK EPENTHETIC YUT;Mn;230;NSM;;;;;N;;;;; 081C;SAMARITAN VOWEL SIGN LONG E;Mn;230;NSM;;;;;N;;;;; 081D;SAMARITAN VOWEL SIGN E;Mn;230;NSM;;;;;N;;;;; 081E;SAMARITAN VOWEL SIGN OVERLONG AA;Mn;230;NSM;;;;;N;;;;; 081F;SAMARITAN VOWEL SIGN LONG AA;Mn;230;NSM;;;;;N;;;;; 0820;SAMARITAN VOWEL SIGN AA;Mn;230;NSM;;;;;N;;;;; 0821;SAMARITAN VOWEL SIGN OVERLONG A;Mn;230;NSM;;;;;N;;;;; 0822;SAMARITAN VOWEL SIGN LONG A;Mn;230;NSM;;;;;N;;;;; 0823;SAMARITAN VOWEL SIGN A;Mn;230;NSM;;;;;N;;;;; 0824;SAMARITAN MODIFIER LETTER SHORT A;Lm;0;R;;;;;N;;;;; 0825;SAMARITAN VOWEL SIGN SHORT A;Mn;230;NSM;;;;;N;;;;; 0826;SAMARITAN VOWEL SIGN LONG U;Mn;230;NSM;;;;;N;;;;; 0827;SAMARITAN VOWEL SIGN U;Mn;230;NSM;;;;;N;;;;; 0828;SAMARITAN MODIFIER LETTER I;Lm;0;R;;;;;N;;;;; 0829;SAMARITAN VOWEL SIGN LONG I;Mn;230;NSM;;;;;N;;;;; 082A;SAMARITAN VOWEL SIGN I;Mn;230;NSM;;;;;N;;;;; 082B;SAMARITAN VOWEL SIGN O;Mn;230;NSM;;;;;N;;;;; 082C;SAMARITAN VOWEL SIGN SUKUN;Mn;230;NSM;;;;;N;;;;; 082D;SAMARITAN MARK NEQUDAA;Mn;230;NSM;;;;;N;;;;; 0830;SAMARITAN PUNCTUATION NEQUDAA;Po;0;R;;;;;N;;;;; 0831;SAMARITAN PUNCTUATION AFSAAQ;Po;0;R;;;;;N;;;;; 0832;SAMARITAN PUNCTUATION ANGED;Po;0;R;;;;;N;;;;; 0833;SAMARITAN PUNCTUATION BAU;Po;0;R;;;;;N;;;;; 0834;SAMARITAN PUNCTUATION ATMAAU;Po;0;R;;;;;N;;;;; 0835;SAMARITAN PUNCTUATION SHIYYAALAA;Po;0;R;;;;;N;;;;; 0836;SAMARITAN ABBREVIATION MARK;Po;0;R;;;;;N;;;;; 0837;SAMARITAN PUNCTUATION MELODIC QITSA;Po;0;R;;;;;N;;;;; 0838;SAMARITAN PUNCTUATION ZIQAA;Po;0;R;;;;;N;;;;; 0839;SAMARITAN PUNCTUATION QITSA;Po;0;R;;;;;N;;;;; 083A;SAMARITAN PUNCTUATION ZAEF;Po;0;R;;;;;N;;;;; 083B;SAMARITAN PUNCTUATION TURU;Po;0;R;;;;;N;;;;; 083C;SAMARITAN PUNCTUATION ARKAANU;Po;0;R;;;;;N;;;;; 083D;SAMARITAN PUNCTUATION SOF MASHFAAT;Po;0;R;;;;;N;;;;; 083E;SAMARITAN PUNCTUATION ANNAAU;Po;0;R;;;;;N;;;;; 0840;MANDAIC LETTER HALQA;Lo;0;R;;;;;N;;;;; 0841;MANDAIC LETTER AB;Lo;0;R;;;;;N;;;;; 0842;MANDAIC LETTER AG;Lo;0;R;;;;;N;;;;; 0843;MANDAIC LETTER AD;Lo;0;R;;;;;N;;;;; 0844;MANDAIC LETTER AH;Lo;0;R;;;;;N;;;;; 0845;MANDAIC LETTER USHENNA;Lo;0;R;;;;;N;;;;; 0846;MANDAIC LETTER AZ;Lo;0;R;;;;;N;;;;; 0847;MANDAIC LETTER IT;Lo;0;R;;;;;N;;;;; 0848;MANDAIC LETTER ATT;Lo;0;R;;;;;N;;;;; 0849;MANDAIC LETTER AKSA;Lo;0;R;;;;;N;;;;; 084A;MANDAIC LETTER AK;Lo;0;R;;;;;N;;;;; 084B;MANDAIC LETTER AL;Lo;0;R;;;;;N;;;;; 084C;MANDAIC LETTER AM;Lo;0;R;;;;;N;;;;; 084D;MANDAIC LETTER AN;Lo;0;R;;;;;N;;;;; 084E;MANDAIC LETTER AS;Lo;0;R;;;;;N;;;;; 084F;MANDAIC LETTER IN;Lo;0;R;;;;;N;;;;; 0850;MANDAIC LETTER AP;Lo;0;R;;;;;N;;;;; 0851;MANDAIC LETTER ASZ;Lo;0;R;;;;;N;;;;; 0852;MANDAIC LETTER AQ;Lo;0;R;;;;;N;;;;; 0853;MANDAIC LETTER AR;Lo;0;R;;;;;N;;;;; 0854;MANDAIC LETTER ASH;Lo;0;R;;;;;N;;;;; 0855;MANDAIC LETTER AT;Lo;0;R;;;;;N;;;;; 0856;MANDAIC LETTER DUSHENNA;Lo;0;R;;;;;N;;;;; 0857;MANDAIC LETTER KAD;Lo;0;R;;;;;N;;;;; 0858;MANDAIC LETTER AIN;Lo;0;R;;;;;N;;;;; 0859;MANDAIC AFFRICATION MARK;Mn;220;NSM;;;;;N;;;;; 085A;MANDAIC VOCALIZATION MARK;Mn;220;NSM;;;;;N;;;;; 085B;MANDAIC GEMINATION MARK;Mn;220;NSM;;;;;N;;;;; 085E;MANDAIC PUNCTUATION;Po;0;R;;;;;N;;;;; 0860;SYRIAC LETTER MALAYALAM NGA;Lo;0;AL;;;;;N;;;;; 0861;SYRIAC LETTER MALAYALAM JA;Lo;0;AL;;;;;N;;;;; 0862;SYRIAC LETTER MALAYALAM NYA;Lo;0;AL;;;;;N;;;;; 0863;SYRIAC LETTER MALAYALAM TTA;Lo;0;AL;;;;;N;;;;; 0864;SYRIAC LETTER MALAYALAM NNA;Lo;0;AL;;;;;N;;;;; 0865;SYRIAC LETTER MALAYALAM NNNA;Lo;0;AL;;;;;N;;;;; 0866;SYRIAC LETTER MALAYALAM BHA;Lo;0;AL;;;;;N;;;;; 0867;SYRIAC LETTER MALAYALAM RA;Lo;0;AL;;;;;N;;;;; 0868;SYRIAC LETTER MALAYALAM LLA;Lo;0;AL;;;;;N;;;;; 0869;SYRIAC LETTER MALAYALAM LLLA;Lo;0;AL;;;;;N;;;;; 086A;SYRIAC LETTER MALAYALAM SSA;Lo;0;AL;;;;;N;;;;; 0870;ARABIC LETTER ALEF WITH ATTACHED FATHA;Lo;0;AL;;;;;N;;;;; 0871;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA;Lo;0;AL;;;;;N;;;;; 0872;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE;Lo;0;AL;;;;;N;;;;; 0873;ARABIC LETTER ALEF WITH LEFT MIDDLE STROKE;Lo;0;AL;;;;;N;;;;; 0874;ARABIC LETTER ALEF WITH ATTACHED KASRA;Lo;0;AL;;;;;N;;;;; 0875;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA;Lo;0;AL;;;;;N;;;;; 0876;ARABIC LETTER ALEF WITH ATTACHED ROUND DOT ABOVE;Lo;0;AL;;;;;N;;;;; 0877;ARABIC LETTER ALEF WITH ATTACHED RIGHT ROUND DOT;Lo;0;AL;;;;;N;;;;; 0878;ARABIC LETTER ALEF WITH ATTACHED LEFT ROUND DOT;Lo;0;AL;;;;;N;;;;; 0879;ARABIC LETTER ALEF WITH ATTACHED ROUND DOT BELOW;Lo;0;AL;;;;;N;;;;; 087A;ARABIC LETTER ALEF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 087B;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; 087C;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; 087D;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; 087E;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND LEFT RING;Lo;0;AL;;;;;N;;;;; 087F;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND LEFT RING;Lo;0;AL;;;;;N;;;;; 0880;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND LEFT RING;Lo;0;AL;;;;;N;;;;; 0881;ARABIC LETTER ALEF WITH ATTACHED RIGHT HAMZA;Lo;0;AL;;;;;N;;;;; 0882;ARABIC LETTER ALEF WITH ATTACHED LEFT HAMZA;Lo;0;AL;;;;;N;;;;; 0883;ARABIC TATWEEL WITH OVERSTRUCK HAMZA;Lo;0;AL;;;;;N;;;;; 0884;ARABIC TATWEEL WITH OVERSTRUCK WAW;Lo;0;AL;;;;;N;;;;; 0885;ARABIC TATWEEL WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; 0886;ARABIC LETTER THIN YEH;Lo;0;AL;;;;;N;;;;; 0887;ARABIC BASELINE ROUND DOT;Lo;0;AL;;;;;N;;;;; 0888;ARABIC RAISED ROUND DOT;Sk;0;AL;;;;;N;;;;; 0889;ARABIC LETTER NOON WITH INVERTED SMALL V;Lo;0;AL;;;;;N;;;;; 088A;ARABIC LETTER HAH WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;; 088B;ARABIC LETTER TAH WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 088C;ARABIC LETTER TAH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 088D;ARABIC LETTER KEHEH WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;; 088E;ARABIC VERTICAL TAIL;Lo;0;AL;;;;;N;;;;; 0890;ARABIC POUND MARK ABOVE;Cf;0;AN;;;;;N;;;;; 0891;ARABIC PIASTRE MARK ABOVE;Cf;0;AN;;;;;N;;;;; 0898;ARABIC SMALL HIGH WORD AL-JUZ;Mn;230;NSM;;;;;N;;;;; 0899;ARABIC SMALL LOW WORD ISHMAAM;Mn;220;NSM;;;;;N;;;;; 089A;ARABIC SMALL LOW WORD IMAALA;Mn;220;NSM;;;;;N;;;;; 089B;ARABIC SMALL LOW WORD TASHEEL;Mn;220;NSM;;;;;N;;;;; 089C;ARABIC MADDA WAAJIB;Mn;230;NSM;;;;;N;;;;; 089D;ARABIC SUPERSCRIPT ALEF MOKHASSAS;Mn;230;NSM;;;;;N;;;;; 089E;ARABIC DOUBLED MADDA;Mn;230;NSM;;;;;N;;;;; 089F;ARABIC HALF MADDA OVER MADDA;Mn;230;NSM;;;;;N;;;;; 08A0;ARABIC LETTER BEH WITH SMALL V BELOW;Lo;0;AL;;;;;N;;;;; 08A1;ARABIC LETTER BEH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;; 08A2;ARABIC LETTER JEEM WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 08A3;ARABIC LETTER TAH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 08A4;ARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 08A5;ARABIC LETTER QAF WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 08A6;ARABIC LETTER LAM WITH DOUBLE BAR;Lo;0;AL;;;;;N;;;;; 08A7;ARABIC LETTER MEEM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 08A8;ARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVE;Lo;0;AL;;;;;N;;;;; 08A9;ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; 08AA;ARABIC LETTER REH WITH LOOP;Lo;0;AL;;;;;N;;;;; 08AB;ARABIC LETTER WAW WITH DOT WITHIN;Lo;0;AL;;;;;N;;;;; 08AC;ARABIC LETTER ROHINGYA YEH;Lo;0;AL;;;;;N;;;;; 08AD;ARABIC LETTER LOW ALEF;Lo;0;AL;;;;;N;;;;; 08AE;ARABIC LETTER DAL WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 08AF;ARABIC LETTER SAD WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 08B0;ARABIC LETTER GAF WITH INVERTED STROKE;Lo;0;AL;;;;;N;;;;; 08B1;ARABIC LETTER STRAIGHT WAW;Lo;0;AL;;;;;N;;;;; 08B2;ARABIC LETTER ZAIN WITH INVERTED V ABOVE;Lo;0;AL;;;;;N;;;;; 08B3;ARABIC LETTER AIN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 08B4;ARABIC LETTER KAF WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 08B5;ARABIC LETTER QAF WITH DOT BELOW AND NO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 08B6;ARABIC LETTER BEH WITH SMALL MEEM ABOVE;Lo;0;AL;;;;;N;;;;; 08B7;ARABIC LETTER PEH WITH SMALL MEEM ABOVE;Lo;0;AL;;;;;N;;;;; 08B8;ARABIC LETTER TEH WITH SMALL TEH ABOVE;Lo;0;AL;;;;;N;;;;; 08B9;ARABIC LETTER REH WITH SMALL NOON ABOVE;Lo;0;AL;;;;;N;;;;; 08BA;ARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVE;Lo;0;AL;;;;;N;;;;; 08BB;ARABIC LETTER AFRICAN FEH;Lo;0;AL;;;;;N;;;;; 08BC;ARABIC LETTER AFRICAN QAF;Lo;0;AL;;;;;N;;;;; 08BD;ARABIC LETTER AFRICAN NOON;Lo;0;AL;;;;;N;;;;; 08BE;ARABIC LETTER PEH WITH SMALL V;Lo;0;AL;;;;;N;;;;; 08BF;ARABIC LETTER TEH WITH SMALL V;Lo;0;AL;;;;;N;;;;; 08C0;ARABIC LETTER TTEH WITH SMALL V;Lo;0;AL;;;;;N;;;;; 08C1;ARABIC LETTER TCHEH WITH SMALL V;Lo;0;AL;;;;;N;;;;; 08C2;ARABIC LETTER KEHEH WITH SMALL V;Lo;0;AL;;;;;N;;;;; 08C3;ARABIC LETTER GHAIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 08C4;ARABIC LETTER AFRICAN QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 08C5;ARABIC LETTER JEEM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 08C6;ARABIC LETTER JEEM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 08C7;ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE;Lo;0;AL;;;;;N;;;;; 08C8;ARABIC LETTER GRAF;Lo;0;AL;;;;;N;;;;; 08C9;ARABIC SMALL FARSI YEH;Lm;0;AL;;;;;N;;;;; 08CA;ARABIC SMALL HIGH FARSI YEH;Mn;230;NSM;;;;;N;;;;; 08CB;ARABIC SMALL HIGH YEH BARREE WITH TWO DOTS BELOW;Mn;230;NSM;;;;;N;;;;; 08CC;ARABIC SMALL HIGH WORD SAH;Mn;230;NSM;;;;;N;;;;; 08CD;ARABIC SMALL HIGH ZAH;Mn;230;NSM;;;;;N;;;;; 08CE;ARABIC LARGE ROUND DOT ABOVE;Mn;230;NSM;;;;;N;;;;; 08CF;ARABIC LARGE ROUND DOT BELOW;Mn;220;NSM;;;;;N;;;;; 08D0;ARABIC SUKUN BELOW;Mn;220;NSM;;;;;N;;;;; 08D1;ARABIC LARGE CIRCLE BELOW;Mn;220;NSM;;;;;N;;;;; 08D2;ARABIC LARGE ROUND DOT INSIDE CIRCLE BELOW;Mn;220;NSM;;;;;N;;;;; 08D3;ARABIC SMALL LOW WAW;Mn;220;NSM;;;;;N;;;;; 08D4;ARABIC SMALL HIGH WORD AR-RUB;Mn;230;NSM;;;;;N;;;;; 08D5;ARABIC SMALL HIGH SAD;Mn;230;NSM;;;;;N;;;;; 08D6;ARABIC SMALL HIGH AIN;Mn;230;NSM;;;;;N;;;;; 08D7;ARABIC SMALL HIGH QAF;Mn;230;NSM;;;;;N;;;;; 08D8;ARABIC SMALL HIGH NOON WITH KASRA;Mn;230;NSM;;;;;N;;;;; 08D9;ARABIC SMALL LOW NOON WITH KASRA;Mn;230;NSM;;;;;N;;;;; 08DA;ARABIC SMALL HIGH WORD ATH-THALATHA;Mn;230;NSM;;;;;N;;;;; 08DB;ARABIC SMALL HIGH WORD AS-SAJDA;Mn;230;NSM;;;;;N;;;;; 08DC;ARABIC SMALL HIGH WORD AN-NISF;Mn;230;NSM;;;;;N;;;;; 08DD;ARABIC SMALL HIGH WORD SAKTA;Mn;230;NSM;;;;;N;;;;; 08DE;ARABIC SMALL HIGH WORD QIF;Mn;230;NSM;;;;;N;;;;; 08DF;ARABIC SMALL HIGH WORD WAQFA;Mn;230;NSM;;;;;N;;;;; 08E0;ARABIC SMALL HIGH FOOTNOTE MARKER;Mn;230;NSM;;;;;N;;;;; 08E1;ARABIC SMALL HIGH SIGN SAFHA;Mn;230;NSM;;;;;N;;;;; 08E2;ARABIC DISPUTED END OF AYAH;Cf;0;AN;;;;;N;;;;; 08E3;ARABIC TURNED DAMMA BELOW;Mn;220;NSM;;;;;N;;;;; 08E4;ARABIC CURLY FATHA;Mn;230;NSM;;;;;N;;;;; 08E5;ARABIC CURLY DAMMA;Mn;230;NSM;;;;;N;;;;; 08E6;ARABIC CURLY KASRA;Mn;220;NSM;;;;;N;;;;; 08E7;ARABIC CURLY FATHATAN;Mn;230;NSM;;;;;N;;;;; 08E8;ARABIC CURLY DAMMATAN;Mn;230;NSM;;;;;N;;;;; 08E9;ARABIC CURLY KASRATAN;Mn;220;NSM;;;;;N;;;;; 08EA;ARABIC TONE ONE DOT ABOVE;Mn;230;NSM;;;;;N;;;;; 08EB;ARABIC TONE TWO DOTS ABOVE;Mn;230;NSM;;;;;N;;;;; 08EC;ARABIC TONE LOOP ABOVE;Mn;230;NSM;;;;;N;;;;; 08ED;ARABIC TONE ONE DOT BELOW;Mn;220;NSM;;;;;N;;;;; 08EE;ARABIC TONE TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;; 08EF;ARABIC TONE LOOP BELOW;Mn;220;NSM;;;;;N;;;;; 08F0;ARABIC OPEN FATHATAN;Mn;27;NSM;;;;;N;;;;; 08F1;ARABIC OPEN DAMMATAN;Mn;28;NSM;;;;;N;;;;; 08F2;ARABIC OPEN KASRATAN;Mn;29;NSM;;;;;N;;;;; 08F3;ARABIC SMALL HIGH WAW;Mn;230;NSM;;;;;N;;;;; 08F4;ARABIC FATHA WITH RING;Mn;230;NSM;;;;;N;;;;; 08F5;ARABIC FATHA WITH DOT ABOVE;Mn;230;NSM;;;;;N;;;;; 08F6;ARABIC KASRA WITH DOT BELOW;Mn;220;NSM;;;;;N;;;;; 08F7;ARABIC LEFT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;; 08F8;ARABIC RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;; 08F9;ARABIC LEFT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; 08FA;ARABIC RIGHT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; 08FB;ARABIC DOUBLE RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;; 08FC;ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT;Mn;230;NSM;;;;;N;;;;; 08FD;ARABIC RIGHT ARROWHEAD ABOVE WITH DOT;Mn;230;NSM;;;;;N;;;;; 08FE;ARABIC DAMMA WITH DOT;Mn;230;NSM;;;;;N;;;;; 08FF;ARABIC MARK SIDEWAYS NOON GHUNNA;Mn;230;NSM;;;;;N;;;;; 0900;DEVANAGARI SIGN INVERTED CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0904;DEVANAGARI LETTER SHORT A;Lo;0;L;;;;;N;;;;; 0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;; 0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;; 0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;; 0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;; 0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;; 090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;; 090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;; 090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;; 090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;; 0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;; 0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;; 0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;; 0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;; 0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;; 0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;; 0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;; 0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;; 0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;; 0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;; 091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;; 091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;; 091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;; 091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;; 091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;; 091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;; 0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;; 0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;; 0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;; 0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;; 0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;; 0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;; 0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;; 0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;; 0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;; 0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;; 092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;; 092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;; 092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;; 092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;; 092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;; 092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;; 0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;; 0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;; 0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;; 0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;; 0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;; 0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;; 0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;; 0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;; 0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;; 0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;; 093A;DEVANAGARI VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;; 093B;DEVANAGARI VOWEL SIGN OOE;Mc;0;L;;;;;N;;;;; 093C;DEVANAGARI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0941;DEVANAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0942;DEVANAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;; 0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;; 0947;DEVANAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 0948;DEVANAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;; 094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;; 094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 094D;DEVANAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 094E;DEVANAGARI VOWEL SIGN PRISHTHAMATRA E;Mc;0;L;;;;;N;;;;; 094F;DEVANAGARI VOWEL SIGN AW;Mc;0;L;;;;;N;;;;; 0950;DEVANAGARI OM;Lo;0;L;;;;;N;;;;; 0951;DEVANAGARI STRESS SIGN UDATTA;Mn;230;NSM;;;;;N;;;;; 0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;220;NSM;;;;;N;;;;; 0953;DEVANAGARI GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;; 0954;DEVANAGARI ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;; 0955;DEVANAGARI VOWEL SIGN CANDRA LONG E;Mn;0;NSM;;;;;N;;;;; 0956;DEVANAGARI VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;; 0957;DEVANAGARI VOWEL SIGN UUE;Mn;0;NSM;;;;;N;;;;; 0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;; 0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;; 095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;; 095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;; 095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;; 095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;; 095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;; 095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;; 0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;; 0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;; 0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 0971;DEVANAGARI SIGN HIGH SPACING DOT;Lm;0;L;;;;;N;;;;; 0972;DEVANAGARI LETTER CANDRA A;Lo;0;L;;;;;N;;;;; 0973;DEVANAGARI LETTER OE;Lo;0;L;;;;;N;;;;; 0974;DEVANAGARI LETTER OOE;Lo;0;L;;;;;N;;;;; 0975;DEVANAGARI LETTER AW;Lo;0;L;;;;;N;;;;; 0976;DEVANAGARI LETTER UE;Lo;0;L;;;;;N;;;;; 0977;DEVANAGARI LETTER UUE;Lo;0;L;;;;;N;;;;; 0978;DEVANAGARI LETTER MARWARI DDA;Lo;0;L;;;;;N;;;;; 0979;DEVANAGARI LETTER ZHA;Lo;0;L;;;;;N;;;;; 097A;DEVANAGARI LETTER HEAVY YA;Lo;0;L;;;;;N;;;;; 097B;DEVANAGARI LETTER GGA;Lo;0;L;;;;;N;;;;; 097C;DEVANAGARI LETTER JJA;Lo;0;L;;;;;N;;;;; 097D;DEVANAGARI LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;; 097E;DEVANAGARI LETTER DDDA;Lo;0;L;;;;;N;;;;; 097F;DEVANAGARI LETTER BBA;Lo;0;L;;;;;N;;;;; 0980;BENGALI ANJI;Lo;0;L;;;;;N;;;;; 0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;; 0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;; 0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;; 0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;; 0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;; 098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;; 098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;; 0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;; 0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;; 0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;; 0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;; 0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;; 0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;; 0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;; 0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;; 099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;; 099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;; 099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;; 099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;; 099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;; 099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;; 09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;; 09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;; 09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;; 09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;; 09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;; 09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;; 09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;; 09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;; 09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;; 09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;; 09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;; 09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;; 09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;; 09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;; 09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;; 09B0;BENGALI LETTER RA;Lo;0;L;;;;;N;;;;; 09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;; 09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;; 09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;; 09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;; 09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;; 09BC;BENGALI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 09BD;BENGALI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 09C1;BENGALI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 09C2;BENGALI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;; 09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;; 09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 09CE;BENGALI LETTER KHANDA TA;Lo;0;L;;;;;N;;;;; 09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;; 09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;; 09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;; 09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;;;; 09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;;;; 09F2;BENGALI RUPEE MARK;Sc;0;ET;;;;;N;;;;; 09F3;BENGALI RUPEE SIGN;Sc;0;ET;;;;;N;;;;; 09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1/16;N;;;;; 09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;1/8;N;;;;; 09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3/16;N;;;;; 09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;1/4;N;;;;; 09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;3/4;N;;;;; 09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;; 09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;; 09FB;BENGALI GANDA MARK;Sc;0;ET;;;;;N;;;;; 09FC;BENGALI LETTER VEDIC ANUSVARA;Lo;0;L;;;;;N;;;;; 09FD;BENGALI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 09FE;BENGALI SANDHI MARK;Mn;230;NSM;;;;;N;;;;; 0A01;GURMUKHI SIGN ADAK BINDI;Mn;0;NSM;;;;;N;;;;; 0A02;GURMUKHI SIGN BINDI;Mn;0;NSM;;;;;N;;;;; 0A03;GURMUKHI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;; 0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;; 0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;; 0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;; 0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;; 0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;; 0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;; 0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;; 0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;; 0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;; 0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;; 0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;; 0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;; 0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;; 0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;; 0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;; 0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;; 0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;; 0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;; 0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;; 0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;; 0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;; 0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;; 0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;; 0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;; 0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;; 0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;; 0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;; 0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;; 0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;; 0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;; 0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;; 0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;; 0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;; 0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;; 0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;; 0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;; 0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;; 0A33;GURMUKHI LETTER LLA;Lo;0;L;0A32 0A3C;;;;N;;;;; 0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;; 0A36;GURMUKHI LETTER SHA;Lo;0;L;0A38 0A3C;;;;N;;;;; 0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;; 0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;; 0A3C;GURMUKHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0A41;GURMUKHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0A42;GURMUKHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0A47;GURMUKHI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;; 0A48;GURMUKHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 0A4B;GURMUKHI VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;; 0A4C;GURMUKHI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 0A4D;GURMUKHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0A51;GURMUKHI SIGN UDAAT;Mn;0;NSM;;;;;N;;;;; 0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;; 0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;; 0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;; 0A5C;GURMUKHI LETTER RRA;Lo;0;L;;;;;N;;;;; 0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;; 0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0A70;GURMUKHI TIPPI;Mn;0;NSM;;;;;N;;;;; 0A71;GURMUKHI ADDAK;Mn;0;NSM;;;;;N;;;;; 0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;; 0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;; 0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;; 0A75;GURMUKHI SIGN YAKASH;Mn;0;NSM;;;;;N;;;;; 0A76;GURMUKHI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;; 0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;; 0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;; 0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;; 0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;; 0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;; 0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0A8C;GUJARATI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;; 0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;; 0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;; 0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;; 0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;; 0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;; 0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;; 0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;; 0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;; 0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;; 0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;; 0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;; 0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;; 0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;; 0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;; 0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;; 0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;; 0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;; 0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;; 0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;; 0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;; 0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;; 0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;; 0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;; 0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;; 0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;; 0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;; 0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;; 0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;; 0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;; 0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;; 0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;; 0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;; 0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;; 0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;; 0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;; 0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;; 0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;; 0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;; 0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;; 0ABC;GUJARATI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0AC1;GUJARATI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0AC2;GUJARATI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;; 0AC7;GUJARATI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 0AC8;GUJARATI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;; 0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 0ACD;GUJARATI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0AD0;GUJARATI OM;Lo;0;L;;;;;N;;;;; 0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0AE1;GUJARATI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0AE2;GUJARATI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 0AE3;GUJARATI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0AF0;GUJARATI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 0AF1;GUJARATI RUPEE SIGN;Sc;0;ET;;;;;N;;;;; 0AF9;GUJARATI LETTER ZHA;Lo;0;L;;;;;N;;;;; 0AFA;GUJARATI SIGN SUKUN;Mn;0;NSM;;;;;N;;;;; 0AFB;GUJARATI SIGN SHADDA;Mn;0;NSM;;;;;N;;;;; 0AFC;GUJARATI SIGN MADDAH;Mn;0;NSM;;;;;N;;;;; 0AFD;GUJARATI SIGN THREE-DOT NUKTA ABOVE;Mn;0;NSM;;;;;N;;;;; 0AFE;GUJARATI SIGN CIRCLE NUKTA ABOVE;Mn;0;NSM;;;;;N;;;;; 0AFF;GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE;Mn;0;NSM;;;;;N;;;;; 0B01;ORIYA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;; 0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;; 0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;; 0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;; 0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;; 0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;; 0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;; 0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;; 0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;; 0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;; 0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;; 0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;; 0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;; 0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;; 0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;; 0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;; 0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;; 0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;; 0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;; 0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;; 0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;; 0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;; 0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;; 0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;; 0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;; 0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;; 0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;; 0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;; 0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;; 0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;; 0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;; 0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;; 0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;; 0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;; 0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;; 0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;; 0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;; 0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;; 0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;; 0B35;ORIYA LETTER VA;Lo;0;L;;;;;N;;;;; 0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;; 0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;; 0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;; 0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;; 0B3C;ORIYA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0B3F;ORIYA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0B41;ORIYA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0B42;ORIYA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 0B44;ORIYA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;; 0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;; 0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;; 0B4D;ORIYA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0B55;ORIYA SIGN OVERLINE;Mn;0;NSM;;;;;N;;;;; 0B56;ORIYA AI LENGTH MARK;Mn;0;NSM;;;;;N;;;;; 0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;; 0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;; 0B5F;ORIYA LETTER YYA;Lo;0;L;;;;;N;;;;; 0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0B62;ORIYA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 0B63;ORIYA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;; 0B71;ORIYA LETTER WA;Lo;0;L;;;;;N;;;;; 0B72;ORIYA FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;; 0B73;ORIYA FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;; 0B74;ORIYA FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;; 0B75;ORIYA FRACTION ONE SIXTEENTH;No;0;L;;;;1/16;N;;;;; 0B76;ORIYA FRACTION ONE EIGHTH;No;0;L;;;;1/8;N;;;;; 0B77;ORIYA FRACTION THREE SIXTEENTHS;No;0;L;;;;3/16;N;;;;; 0B82;TAMIL SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 0B83;TAMIL SIGN VISARGA;Lo;0;L;;;;;N;;;;; 0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;; 0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;; 0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;; 0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;; 0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;; 0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;; 0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;; 0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;; 0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;; 0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;; 0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;; 0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;; 0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;; 0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;; 0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;; 0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;; 0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;; 0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;; 0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;; 0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;; 0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;; 0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;; 0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;; 0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;; 0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;; 0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;; 0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;; 0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;; 0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;; 0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;; 0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;; 0BB6;TAMIL LETTER SHA;Lo;0;L;;;;;N;;;;; 0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;; 0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;; 0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;; 0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0BC0;TAMIL VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; 0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;; 0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;; 0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;; 0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0BD0;TAMIL OM;Lo;0;L;;;;;N;;;;; 0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 0BE6;TAMIL DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;; 0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;; 0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;; 0BF3;TAMIL DAY SIGN;So;0;ON;;;;;N;;;;; 0BF4;TAMIL MONTH SIGN;So;0;ON;;;;;N;;;;; 0BF5;TAMIL YEAR SIGN;So;0;ON;;;;;N;;;;; 0BF6;TAMIL DEBIT SIGN;So;0;ON;;;;;N;;;;; 0BF7;TAMIL CREDIT SIGN;So;0;ON;;;;;N;;;;; 0BF8;TAMIL AS ABOVE SIGN;So;0;ON;;;;;N;;;;; 0BF9;TAMIL RUPEE SIGN;Sc;0;ET;;;;;N;;;;; 0BFA;TAMIL NUMBER SIGN;So;0;ON;;;;;N;;;;; 0C00;TELUGU SIGN COMBINING CANDRABINDU ABOVE;Mn;0;NSM;;;;;N;;;;; 0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;; 0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0C04;TELUGU SIGN COMBINING ANUSVARA ABOVE;Mn;0;NSM;;;;;N;;;;; 0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;; 0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;; 0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;; 0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;; 0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;; 0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;; 0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;; 0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;; 0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;; 0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;; 0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;; 0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;; 0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;; 0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;; 0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;; 0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;; 0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;; 0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;; 0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;; 0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;; 0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;; 0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;; 0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;; 0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;; 0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;; 0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;; 0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;; 0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;; 0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;; 0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;; 0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;; 0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;; 0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;; 0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;; 0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;; 0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;; 0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;; 0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;; 0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;; 0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;; 0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;; 0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;; 0C34;TELUGU LETTER LLLA;Lo;0;L;;;;;N;;;;; 0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;; 0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;; 0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;; 0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;; 0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;; 0C3C;TELUGU SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 0C3D;TELUGU SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; 0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 0C40;TELUGU VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; 0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; 0C46;TELUGU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 0C47;TELUGU VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;; 0C48;TELUGU VOWEL SIGN AI;Mn;0;NSM;0C46 0C56;;;;N;;;;; 0C4A;TELUGU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 0C4B;TELUGU VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;; 0C4C;TELUGU VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 0C4D;TELUGU SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0C55;TELUGU LENGTH MARK;Mn;84;NSM;;;;;N;;;;; 0C56;TELUGU AI LENGTH MARK;Mn;91;NSM;;;;;N;;;;; 0C58;TELUGU LETTER TSA;Lo;0;L;;;;;N;;;;; 0C59;TELUGU LETTER DZA;Lo;0;L;;;;;N;;;;; 0C5A;TELUGU LETTER RRRA;Lo;0;L;;;;;N;;;;; 0C5D;TELUGU LETTER NAKAARA POLLU;Lo;0;L;;;;;N;;;;; 0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0C62;TELUGU VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 0C63;TELUGU VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0C77;TELUGU SIGN SIDDHAM;Po;0;L;;;;;N;;;;; 0C78;TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR;No;0;ON;;;;0;N;;;;; 0C79;TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR;No;0;ON;;;;1;N;;;;; 0C7A;TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR;No;0;ON;;;;2;N;;;;; 0C7B;TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR;No;0;ON;;;;3;N;;;;; 0C7C;TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR;No;0;ON;;;;1;N;;;;; 0C7D;TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR;No;0;ON;;;;2;N;;;;; 0C7E;TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR;No;0;ON;;;;3;N;;;;; 0C7F;TELUGU SIGN TUUMU;So;0;L;;;;;N;;;;; 0C80;KANNADA SIGN SPACING CANDRABINDU;Lo;0;L;;;;;N;;;;; 0C81;KANNADA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0C84;KANNADA SIGN SIDDHAM;Po;0;L;;;;;N;;;;; 0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;; 0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;; 0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;; 0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;; 0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;; 0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;; 0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;; 0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;; 0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;; 0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;; 0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;; 0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;; 0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;; 0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;; 0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;; 0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;; 0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;; 0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;; 0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;; 0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;; 0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;; 0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;; 0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;; 0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;; 0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;; 0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;; 0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;; 0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;; 0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;; 0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;; 0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;; 0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;; 0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;; 0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;; 0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;; 0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;; 0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;; 0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;; 0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;; 0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;; 0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;; 0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;; 0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;; 0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;; 0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;; 0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;; 0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;; 0CBC;KANNADA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 0CBD;KANNADA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0CBF;KANNADA VOWEL SIGN I;Mn;0;L;;;;;N;;;;; 0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;; 0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; 0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; 0CC6;KANNADA VOWEL SIGN E;Mn;0;L;;;;;N;;;;; 0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;; 0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;; 0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;; 0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CCA 0CD5;;;;N;;;;; 0CCC;KANNADA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;; 0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;; 0CDD;KANNADA LETTER NAKAARA POLLU;Lo;0;L;;;;;N;;;;; 0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;; 0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0CE2;KANNADA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 0CE3;KANNADA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0CF1;KANNADA SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;; 0CF2;KANNADA SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;; 0D00;MALAYALAM SIGN COMBINING ANUSVARA ABOVE;Mn;0;NSM;;;;;N;;;;; 0D01;MALAYALAM SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0D04;MALAYALAM LETTER VEDIC ANUSVARA;Lo;0;L;;;;;N;;;;; 0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;; 0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;; 0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;; 0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;; 0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;; 0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;; 0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;; 0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;; 0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;; 0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;; 0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;; 0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;; 0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;; 0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;; 0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;; 0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;; 0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;; 0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;; 0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;; 0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;; 0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;; 0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;; 0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;; 0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;; 0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;; 0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;; 0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;; 0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;; 0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;; 0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;; 0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;; 0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;; 0D29;MALAYALAM LETTER NNNA;Lo;0;L;;;;;N;;;;; 0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;; 0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;; 0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;; 0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;; 0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;; 0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;; 0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;; 0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;; 0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;; 0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;; 0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;; 0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;; 0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;; 0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;; 0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;; 0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;; 0D3A;MALAYALAM LETTER TTTA;Lo;0;L;;;;;N;;;;; 0D3B;MALAYALAM SIGN VERTICAL BAR VIRAMA;Mn;9;NSM;;;;;N;;;;; 0D3C;MALAYALAM SIGN CIRCULAR VIRAMA;Mn;9;NSM;;;;;N;;;;; 0D3D;MALAYALAM SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0D41;MALAYALAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0D42;MALAYALAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 0D44;MALAYALAM VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; 0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;; 0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;; 0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;; 0D4D;MALAYALAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0D4E;MALAYALAM LETTER DOT REPH;Lo;0;L;;;;;N;;;;; 0D4F;MALAYALAM SIGN PARA;So;0;L;;;;;N;;;;; 0D54;MALAYALAM LETTER CHILLU M;Lo;0;L;;;;;N;;;;; 0D55;MALAYALAM LETTER CHILLU Y;Lo;0;L;;;;;N;;;;; 0D56;MALAYALAM LETTER CHILLU LLL;Lo;0;L;;;;;N;;;;; 0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 0D58;MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH;No;0;L;;;;1/160;N;;;;; 0D59;MALAYALAM FRACTION ONE FORTIETH;No;0;L;;;;1/40;N;;;;; 0D5A;MALAYALAM FRACTION THREE EIGHTIETHS;No;0;L;;;;3/80;N;;;;; 0D5B;MALAYALAM FRACTION ONE TWENTIETH;No;0;L;;;;1/20;N;;;;; 0D5C;MALAYALAM FRACTION ONE TENTH;No;0;L;;;;1/10;N;;;;; 0D5D;MALAYALAM FRACTION THREE TWENTIETHS;No;0;L;;;;3/20;N;;;;; 0D5E;MALAYALAM FRACTION ONE FIFTH;No;0;L;;;;1/5;N;;;;; 0D5F;MALAYALAM LETTER ARCHAIC II;Lo;0;L;;;;;N;;;;; 0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0D62;MALAYALAM VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 0D63;MALAYALAM VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0D70;MALAYALAM NUMBER TEN;No;0;L;;;;10;N;;;;; 0D71;MALAYALAM NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;; 0D72;MALAYALAM NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;; 0D73;MALAYALAM FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;; 0D74;MALAYALAM FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;; 0D75;MALAYALAM FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;; 0D76;MALAYALAM FRACTION ONE SIXTEENTH;No;0;L;;;;1/16;N;;;;; 0D77;MALAYALAM FRACTION ONE EIGHTH;No;0;L;;;;1/8;N;;;;; 0D78;MALAYALAM FRACTION THREE SIXTEENTHS;No;0;L;;;;3/16;N;;;;; 0D79;MALAYALAM DATE MARK;So;0;L;;;;;N;;;;; 0D7A;MALAYALAM LETTER CHILLU NN;Lo;0;L;;;;;N;;;;; 0D7B;MALAYALAM LETTER CHILLU N;Lo;0;L;;;;;N;;;;; 0D7C;MALAYALAM LETTER CHILLU RR;Lo;0;L;;;;;N;;;;; 0D7D;MALAYALAM LETTER CHILLU L;Lo;0;L;;;;;N;;;;; 0D7E;MALAYALAM LETTER CHILLU LL;Lo;0;L;;;;;N;;;;; 0D7F;MALAYALAM LETTER CHILLU K;Lo;0;L;;;;;N;;;;; 0D81;SINHALA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;; 0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;; 0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;; 0D86;SINHALA LETTER AAYANNA;Lo;0;L;;;;;N;;;;; 0D87;SINHALA LETTER AEYANNA;Lo;0;L;;;;;N;;;;; 0D88;SINHALA LETTER AEEYANNA;Lo;0;L;;;;;N;;;;; 0D89;SINHALA LETTER IYANNA;Lo;0;L;;;;;N;;;;; 0D8A;SINHALA LETTER IIYANNA;Lo;0;L;;;;;N;;;;; 0D8B;SINHALA LETTER UYANNA;Lo;0;L;;;;;N;;;;; 0D8C;SINHALA LETTER UUYANNA;Lo;0;L;;;;;N;;;;; 0D8D;SINHALA LETTER IRUYANNA;Lo;0;L;;;;;N;;;;; 0D8E;SINHALA LETTER IRUUYANNA;Lo;0;L;;;;;N;;;;; 0D8F;SINHALA LETTER ILUYANNA;Lo;0;L;;;;;N;;;;; 0D90;SINHALA LETTER ILUUYANNA;Lo;0;L;;;;;N;;;;; 0D91;SINHALA LETTER EYANNA;Lo;0;L;;;;;N;;;;; 0D92;SINHALA LETTER EEYANNA;Lo;0;L;;;;;N;;;;; 0D93;SINHALA LETTER AIYANNA;Lo;0;L;;;;;N;;;;; 0D94;SINHALA LETTER OYANNA;Lo;0;L;;;;;N;;;;; 0D95;SINHALA LETTER OOYANNA;Lo;0;L;;;;;N;;;;; 0D96;SINHALA LETTER AUYANNA;Lo;0;L;;;;;N;;;;; 0D9A;SINHALA LETTER ALPAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;; 0D9B;SINHALA LETTER MAHAAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;; 0D9C;SINHALA LETTER ALPAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;; 0D9D;SINHALA LETTER MAHAAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;; 0D9E;SINHALA LETTER KANTAJA NAASIKYAYA;Lo;0;L;;;;;N;;;;; 0D9F;SINHALA LETTER SANYAKA GAYANNA;Lo;0;L;;;;;N;;;;; 0DA0;SINHALA LETTER ALPAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;; 0DA1;SINHALA LETTER MAHAAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;; 0DA2;SINHALA LETTER ALPAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;; 0DA3;SINHALA LETTER MAHAAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;; 0DA4;SINHALA LETTER TAALUJA NAASIKYAYA;Lo;0;L;;;;;N;;;;; 0DA5;SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA;Lo;0;L;;;;;N;;;;; 0DA6;SINHALA LETTER SANYAKA JAYANNA;Lo;0;L;;;;;N;;;;; 0DA7;SINHALA LETTER ALPAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;; 0DA8;SINHALA LETTER MAHAAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;; 0DA9;SINHALA LETTER ALPAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;; 0DAA;SINHALA LETTER MAHAAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;; 0DAB;SINHALA LETTER MUURDHAJA NAYANNA;Lo;0;L;;;;;N;;;;; 0DAC;SINHALA LETTER SANYAKA DDAYANNA;Lo;0;L;;;;;N;;;;; 0DAD;SINHALA LETTER ALPAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;; 0DAE;SINHALA LETTER MAHAAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;; 0DAF;SINHALA LETTER ALPAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;; 0DB0;SINHALA LETTER MAHAAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;; 0DB1;SINHALA LETTER DANTAJA NAYANNA;Lo;0;L;;;;;N;;;;; 0DB3;SINHALA LETTER SANYAKA DAYANNA;Lo;0;L;;;;;N;;;;; 0DB4;SINHALA LETTER ALPAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;; 0DB5;SINHALA LETTER MAHAAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;; 0DB6;SINHALA LETTER ALPAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;; 0DB7;SINHALA LETTER MAHAAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;; 0DB8;SINHALA LETTER MAYANNA;Lo;0;L;;;;;N;;;;; 0DB9;SINHALA LETTER AMBA BAYANNA;Lo;0;L;;;;;N;;;;; 0DBA;SINHALA LETTER YAYANNA;Lo;0;L;;;;;N;;;;; 0DBB;SINHALA LETTER RAYANNA;Lo;0;L;;;;;N;;;;; 0DBD;SINHALA LETTER DANTAJA LAYANNA;Lo;0;L;;;;;N;;;;; 0DC0;SINHALA LETTER VAYANNA;Lo;0;L;;;;;N;;;;; 0DC1;SINHALA LETTER TAALUJA SAYANNA;Lo;0;L;;;;;N;;;;; 0DC2;SINHALA LETTER MUURDHAJA SAYANNA;Lo;0;L;;;;;N;;;;; 0DC3;SINHALA LETTER DANTAJA SAYANNA;Lo;0;L;;;;;N;;;;; 0DC4;SINHALA LETTER HAYANNA;Lo;0;L;;;;;N;;;;; 0DC5;SINHALA LETTER MUURDHAJA LAYANNA;Lo;0;L;;;;;N;;;;; 0DC6;SINHALA LETTER FAYANNA;Lo;0;L;;;;;N;;;;; 0DCA;SINHALA SIGN AL-LAKUNA;Mn;9;NSM;;;;;N;;;;; 0DCF;SINHALA VOWEL SIGN AELA-PILLA;Mc;0;L;;;;;N;;;;; 0DD0;SINHALA VOWEL SIGN KETTI AEDA-PILLA;Mc;0;L;;;;;N;;;;; 0DD1;SINHALA VOWEL SIGN DIGA AEDA-PILLA;Mc;0;L;;;;;N;;;;; 0DD2;SINHALA VOWEL SIGN KETTI IS-PILLA;Mn;0;NSM;;;;;N;;;;; 0DD3;SINHALA VOWEL SIGN DIGA IS-PILLA;Mn;0;NSM;;;;;N;;;;; 0DD4;SINHALA VOWEL SIGN KETTI PAA-PILLA;Mn;0;NSM;;;;;N;;;;; 0DD6;SINHALA VOWEL SIGN DIGA PAA-PILLA;Mn;0;NSM;;;;;N;;;;; 0DD8;SINHALA VOWEL SIGN GAETTA-PILLA;Mc;0;L;;;;;N;;;;; 0DD9;SINHALA VOWEL SIGN KOMBUVA;Mc;0;L;;;;;N;;;;; 0DDA;SINHALA VOWEL SIGN DIGA KOMBUVA;Mc;0;L;0DD9 0DCA;;;;N;;;;; 0DDB;SINHALA VOWEL SIGN KOMBU DEKA;Mc;0;L;;;;;N;;;;; 0DDC;SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA;Mc;0;L;0DD9 0DCF;;;;N;;;;; 0DDD;SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA;Mc;0;L;0DDC 0DCA;;;;N;;;;; 0DDE;SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA;Mc;0;L;0DD9 0DDF;;;;N;;;;; 0DDF;SINHALA VOWEL SIGN GAYANUKITTA;Mc;0;L;;;;;N;;;;; 0DE6;SINHALA LITH DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0DE7;SINHALA LITH DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0DE8;SINHALA LITH DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0DE9;SINHALA LITH DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0DEA;SINHALA LITH DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0DEB;SINHALA LITH DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0DEC;SINHALA LITH DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0DED;SINHALA LITH DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0DEE;SINHALA LITH DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0DEF;SINHALA LITH DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0DF2;SINHALA VOWEL SIGN DIGA GAETTA-PILLA;Mc;0;L;;;;;N;;;;; 0DF3;SINHALA VOWEL SIGN DIGA GAYANUKITTA;Mc;0;L;;;;;N;;;;; 0DF4;SINHALA PUNCTUATION KUNDDALIYA;Po;0;L;;;;;N;;;;; 0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;; 0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;; 0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;; 0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;; 0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;; 0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;; 0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;; 0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;; 0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;; 0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;; 0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;; 0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;; 0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;; 0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;; 0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;; 0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;; 0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;; 0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;; 0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;; 0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;; 0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;; 0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;; 0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;; 0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;; 0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;; 0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;; 0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;; 0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;; 0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;; 0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;; 0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;; 0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;; 0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;; 0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;; 0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;; 0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;; 0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;; 0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;; 0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;; 0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;; 0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;; 0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;; 0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;; 0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;; 0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;; 0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;; 0E2F;THAI CHARACTER PAIYANNOI;Lo;0;L;;;;;N;THAI PAI YAN NOI;;;; 0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;; 0E31;THAI CHARACTER MAI HAN-AKAT;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;; 0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;; 0E33;THAI CHARACTER SARA AM;Lo;0;L; 0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;; 0E34;THAI CHARACTER SARA I;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA I;;;; 0E35;THAI CHARACTER SARA II;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA II;;;; 0E36;THAI CHARACTER SARA UE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UE;;;; 0E37;THAI CHARACTER SARA UEE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UEE;;;; 0E38;THAI CHARACTER SARA U;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA U;;;; 0E39;THAI CHARACTER SARA UU;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA UU;;;; 0E3A;THAI CHARACTER PHINTHU;Mn;9;NSM;;;;;N;THAI VOWEL SIGN PHINTHU;;;; 0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;ET;;;;;N;THAI BAHT SIGN;;;; 0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;; 0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;; 0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;; 0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;;;; 0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;;;; 0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;;;; 0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;;;; 0E47;THAI CHARACTER MAITAIKHU;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI TAI KHU;;;; 0E48;THAI CHARACTER MAI EK;Mn;107;NSM;;;;;N;THAI TONE MAI EK;;;; 0E49;THAI CHARACTER MAI THO;Mn;107;NSM;;;;;N;THAI TONE MAI THO;;;; 0E4A;THAI CHARACTER MAI TRI;Mn;107;NSM;;;;;N;THAI TONE MAI TRI;;;; 0E4B;THAI CHARACTER MAI CHATTAWA;Mn;107;NSM;;;;;N;THAI TONE MAI CHATTAWA;;;; 0E4C;THAI CHARACTER THANTHAKHAT;Mn;0;NSM;;;;;N;THAI THANTHAKHAT;;;; 0E4D;THAI CHARACTER NIKHAHIT;Mn;0;NSM;;;;;N;THAI NIKKHAHIT;;;; 0E4E;THAI CHARACTER YAMAKKAN;Mn;0;NSM;;;;;N;THAI YAMAKKAN;;;; 0E4F;THAI CHARACTER FONGMAN;Po;0;L;;;;;N;THAI FONGMAN;;;; 0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;; 0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;; 0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;; 0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;; 0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;; 0E86;LAO LETTER PALI GHA;Lo;0;L;;;;;N;;;;; 0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;; 0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;; 0E89;LAO LETTER PALI CHA;Lo;0;L;;;;;N;;;;; 0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;; 0E8C;LAO LETTER PALI JHA;Lo;0;L;;;;;N;;;;; 0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;; 0E8E;LAO LETTER PALI NYA;Lo;0;L;;;;;N;;;;; 0E8F;LAO LETTER PALI TTA;Lo;0;L;;;;;N;;;;; 0E90;LAO LETTER PALI TTHA;Lo;0;L;;;;;N;;;;; 0E91;LAO LETTER PALI DDA;Lo;0;L;;;;;N;;;;; 0E92;LAO LETTER PALI DDHA;Lo;0;L;;;;;N;;;;; 0E93;LAO LETTER PALI NNA;Lo;0;L;;;;;N;;;;; 0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;; 0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;; 0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;; 0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;; 0E98;LAO LETTER PALI DHA;Lo;0;L;;;;;N;;;;; 0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;; 0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;; 0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;; 0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;; 0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;; 0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;; 0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;; 0EA0;LAO LETTER PALI BHA;Lo;0;L;;;;;N;;;;; 0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;; 0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;; 0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;; 0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;; 0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;; 0EA8;LAO LETTER SANSKRIT SHA;Lo;0;L;;;;;N;;;;; 0EA9;LAO LETTER SANSKRIT SSA;Lo;0;L;;;;;N;;;;; 0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;; 0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;; 0EAC;LAO LETTER PALI LLA;Lo;0;L;;;;;N;;;;; 0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;; 0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;; 0EAF;LAO ELLIPSIS;Lo;0;L;;;;;N;;;;; 0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;; 0EB1;LAO VOWEL SIGN MAI KAN;Mn;0;NSM;;;;;N;;;;; 0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;; 0EB3;LAO VOWEL SIGN AM;Lo;0;L; 0ECD 0EB2;;;;N;;;;; 0EB4;LAO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 0EB5;LAO VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 0EB6;LAO VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;; 0EB7;LAO VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;; 0EB8;LAO VOWEL SIGN U;Mn;118;NSM;;;;;N;;;;; 0EB9;LAO VOWEL SIGN UU;Mn;118;NSM;;;;;N;;;;; 0EBA;LAO SIGN PALI VIRAMA;Mn;9;NSM;;;;;N;;;;; 0EBB;LAO VOWEL SIGN MAI KON;Mn;0;NSM;;;;;N;;;;; 0EBC;LAO SEMIVOWEL SIGN LO;Mn;0;NSM;;;;;N;;;;; 0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;; 0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;; 0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;; 0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;; 0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;; 0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;; 0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;; 0EC8;LAO TONE MAI EK;Mn;122;NSM;;;;;N;;;;; 0EC9;LAO TONE MAI THO;Mn;122;NSM;;;;;N;;;;; 0ECA;LAO TONE MAI TI;Mn;122;NSM;;;;;N;;;;; 0ECB;LAO TONE MAI CATAWA;Mn;122;NSM;;;;;N;;;;; 0ECC;LAO CANCELLATION MARK;Mn;0;NSM;;;;;N;;;;; 0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;; 0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0EDC;LAO HO NO;Lo;0;L; 0EAB 0E99;;;;N;;;;; 0EDD;LAO HO MO;Lo;0;L; 0EAB 0EA1;;;;N;;;;; 0EDE;LAO LETTER KHMU GO;Lo;0;L;;;;;N;;;;; 0EDF;LAO LETTER KHMU NYO;Lo;0;L;;;;;N;;;;; 0F00;TIBETAN SYLLABLE OM;Lo;0;L;;;;;N;;;;; 0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;;;; 0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;;;; 0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;;;; 0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;TIBETAN SINGLE ORNAMENT;;;; 0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;;;; 0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;;;; 0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;;;; 0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;TIBETAN RGYANSHAD;;;; 0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;;;; 0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;;;; 0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;TIBETAN TSEG;;;; 0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L; 0F0B;;;;N;;;;; 0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;TIBETAN SHAD;;;; 0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;TIBETAN DOUBLE SHAD;;;; 0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;;;; 0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;;;; 0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;TIBETAN RINCHANPHUNGSHAD;;;; 0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;;;; 0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;;;; 0F14;TIBETAN MARK GTER TSHEG;Po;0;L;;;;;N;TIBETAN COMMA;;;; 0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;;;; 0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;;;; 0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;;;; 0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;NSM;;;;;N;;;;; 0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;NSM;;;;;N;;;;; 0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;;;; 0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;;;; 0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;;;; 0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;;;; 0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;;;; 0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;;;; 0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;1/2;N;;;;; 0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;3/2;N;;;;; 0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;5/2;N;;;;; 0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;7/2;N;;;;; 0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;9/2;N;;;;; 0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;11/2;N;;;;; 0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;13/2;N;;;;; 0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;15/2;N;;;;; 0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;17/2;N;;;;; 0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;-1/2;N;;;;; 0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;;;; 0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;220;NSM;;;;;N;TIBETAN HONORIFIC UNDER RING;;;; 0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;;;; 0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;;;; 0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;;;; 0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;;;; 0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;Y;;;;; 0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;Y;;;;; 0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;Y;TIBETAN LEFT BRACE;;;; 0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;Y;TIBETAN RIGHT BRACE;;;; 0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;;;; 0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;;;; 0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;; 0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;; 0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;; 0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;; 0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;; 0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;; 0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;; 0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;; 0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;; 0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED TA;;;; 0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED THA;;;; 0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED DA;;;; 0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;; 0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED NA;;;; 0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;; 0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;; 0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;; 0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;; 0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;; 0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;; 0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;; 0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;; 0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;; 0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;; 0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;; 0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;; 0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;; 0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;; 0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;; 0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;; 0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;; 0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;TIBETAN LETTER AA;;;; 0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;; 0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;;;; 0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;; 0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;; 0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED SHA;;;; 0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;; 0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;; 0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;; 0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;; 0F6A;TIBETAN LETTER FIXED-FORM RA;Lo;0;L;;;;;N;;;;; 0F6B;TIBETAN LETTER KKA;Lo;0;L;;;;;N;;;;; 0F6C;TIBETAN LETTER RRA;Lo;0;L;;;;;N;;;;; 0F71;TIBETAN VOWEL SIGN AA;Mn;129;NSM;;;;;N;;;;; 0F72;TIBETAN VOWEL SIGN I;Mn;130;NSM;;;;;N;;;;; 0F73;TIBETAN VOWEL SIGN II;Mn;0;NSM;0F71 0F72;;;;N;;;;; 0F74;TIBETAN VOWEL SIGN U;Mn;132;NSM;;;;;N;;;;; 0F75;TIBETAN VOWEL SIGN UU;Mn;0;NSM;0F71 0F74;;;;N;;;;; 0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;0;NSM;0FB2 0F80;;;;N;;;;; 0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;0;NSM; 0FB2 0F81;;;;N;;;;; 0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;0;NSM;0FB3 0F80;;;;N;;;;; 0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;0;NSM; 0FB3 0F81;;;;N;;;;; 0F7A;TIBETAN VOWEL SIGN E;Mn;130;NSM;;;;;N;;;;; 0F7B;TIBETAN VOWEL SIGN EE;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AI;;;; 0F7C;TIBETAN VOWEL SIGN O;Mn;130;NSM;;;;;N;;;;; 0F7D;TIBETAN VOWEL SIGN OO;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AU;;;; 0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;0;NSM;;;;;N;TIBETAN ANUSVARA;;;; 0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;TIBETAN VISARGA;;;; 0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN SHORT I;;;; 0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;0;NSM;0F71 0F80;;;;N;;;;; 0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU WITH ORNAMENT;;;; 0F83;TIBETAN SIGN SNA LDAN;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU;;;; 0F84;TIBETAN MARK HALANTA;Mn;9;NSM;;;;;N;TIBETAN VIRAMA;;;; 0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;TIBETAN CHUCHENYIGE;;;; 0F86;TIBETAN SIGN LCI RTAGS;Mn;230;NSM;;;;;N;;;;; 0F87;TIBETAN SIGN YANG RTAGS;Mn;230;NSM;;;;;N;;;;; 0F88;TIBETAN SIGN LCE TSA CAN;Lo;0;L;;;;;N;;;;; 0F89;TIBETAN SIGN MCHU CAN;Lo;0;L;;;;;N;;;;; 0F8A;TIBETAN SIGN GRU CAN RGYINGS;Lo;0;L;;;;;N;;;;; 0F8B;TIBETAN SIGN GRU MED RGYINGS;Lo;0;L;;;;;N;;;;; 0F8C;TIBETAN SIGN INVERTED MCHU CAN;Lo;0;L;;;;;N;;;;; 0F8D;TIBETAN SUBJOINED SIGN LCE TSA CAN;Mn;0;NSM;;;;;N;;;;; 0F8E;TIBETAN SUBJOINED SIGN MCHU CAN;Mn;0;NSM;;;;;N;;;;; 0F8F;TIBETAN SUBJOINED SIGN INVERTED MCHU CAN;Mn;0;NSM;;;;;N;;;;; 0F90;TIBETAN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;; 0F91;TIBETAN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;; 0F92;TIBETAN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;; 0F93;TIBETAN SUBJOINED LETTER GHA;Mn;0;NSM;0F92 0FB7;;;;N;;;;; 0F94;TIBETAN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;; 0F95;TIBETAN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;; 0F96;TIBETAN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;; 0F97;TIBETAN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;; 0F99;TIBETAN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;; 0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;0;NSM;;;;;N;;;;; 0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;0;NSM;;;;;N;;;;; 0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;0;NSM;;;;;N;;;;; 0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;0;NSM;0F9C 0FB7;;;;N;;;;; 0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;0;NSM;;;;;N;;;;; 0F9F;TIBETAN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;; 0FA0;TIBETAN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;; 0FA1;TIBETAN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;; 0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;0;NSM;0FA1 0FB7;;;;N;;;;; 0FA3;TIBETAN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;; 0FA4;TIBETAN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;; 0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;; 0FA6;TIBETAN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;; 0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;0;NSM;0FA6 0FB7;;;;N;;;;; 0FA8;TIBETAN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;; 0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;; 0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;; 0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;; 0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;0;NSM;0FAB 0FB7;;;;N;;;;; 0FAD;TIBETAN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;;;; 0FAE;TIBETAN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;; 0FAF;TIBETAN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;; 0FB0;TIBETAN SUBJOINED LETTER -A;Mn;0;NSM;;;;;N;;;;; 0FB1;TIBETAN SUBJOINED LETTER YA;Mn;0;NSM;;;;;N;;;;; 0FB2;TIBETAN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;;;; 0FB3;TIBETAN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;; 0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;; 0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;0;NSM;;;;;N;;;;; 0FB6;TIBETAN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;; 0FB7;TIBETAN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;; 0FB8;TIBETAN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;; 0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;0;NSM;0F90 0FB5;;;;N;;;;; 0FBA;TIBETAN SUBJOINED LETTER FIXED-FORM WA;Mn;0;NSM;;;;;N;;;;; 0FBB;TIBETAN SUBJOINED LETTER FIXED-FORM YA;Mn;0;NSM;;;;;N;;;;; 0FBC;TIBETAN SUBJOINED LETTER FIXED-FORM RA;Mn;0;NSM;;;;;N;;;;; 0FBE;TIBETAN KU RU KHA;So;0;L;;;;;N;;;;; 0FBF;TIBETAN KU RU KHA BZHI MIG CAN;So;0;L;;;;;N;;;;; 0FC0;TIBETAN CANTILLATION SIGN HEAVY BEAT;So;0;L;;;;;N;;;;; 0FC1;TIBETAN CANTILLATION SIGN LIGHT BEAT;So;0;L;;;;;N;;;;; 0FC2;TIBETAN CANTILLATION SIGN CANG TE-U;So;0;L;;;;;N;;;;; 0FC3;TIBETAN CANTILLATION SIGN SBUB -CHAL;So;0;L;;;;;N;;;;; 0FC4;TIBETAN SYMBOL DRIL BU;So;0;L;;;;;N;;;;; 0FC5;TIBETAN SYMBOL RDO RJE;So;0;L;;;;;N;;;;; 0FC6;TIBETAN SYMBOL PADMA GDAN;Mn;220;NSM;;;;;N;;;;; 0FC7;TIBETAN SYMBOL RDO RJE RGYA GRAM;So;0;L;;;;;N;;;;; 0FC8;TIBETAN SYMBOL PHUR PA;So;0;L;;;;;N;;;;; 0FC9;TIBETAN SYMBOL NOR BU;So;0;L;;;;;N;;;;; 0FCA;TIBETAN SYMBOL NOR BU NYIS -KHYIL;So;0;L;;;;;N;;;;; 0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;;;; 0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;;;; 0FCE;TIBETAN SIGN RDEL NAG RDEL DKAR;So;0;L;;;;;N;;;;; 0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;;;; 0FD0;TIBETAN MARK BSKA- SHOG GI MGO RGYAN;Po;0;L;;;;;N;;;;; 0FD1;TIBETAN MARK MNYAM YIG GI MGO RGYAN;Po;0;L;;;;;N;;;;; 0FD2;TIBETAN MARK NYIS TSHEG;Po;0;L;;;;;N;;;;; 0FD3;TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA;Po;0;L;;;;;N;;;;; 0FD4;TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA;Po;0;L;;;;;N;;;;; 0FD5;RIGHT-FACING SVASTI SIGN;So;0;L;;;;;N;;;;; 0FD6;LEFT-FACING SVASTI SIGN;So;0;L;;;;;N;;;;; 0FD7;RIGHT-FACING SVASTI SIGN WITH DOTS;So;0;L;;;;;N;;;;; 0FD8;LEFT-FACING SVASTI SIGN WITH DOTS;So;0;L;;;;;N;;;;; 0FD9;TIBETAN MARK LEADING MCHAN RTAGS;Po;0;L;;;;;N;;;;; 0FDA;TIBETAN MARK TRAILING MCHAN RTAGS;Po;0;L;;;;;N;;;;; 1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;; 1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;; 1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;; 1003;MYANMAR LETTER GHA;Lo;0;L;;;;;N;;;;; 1004;MYANMAR LETTER NGA;Lo;0;L;;;;;N;;;;; 1005;MYANMAR LETTER CA;Lo;0;L;;;;;N;;;;; 1006;MYANMAR LETTER CHA;Lo;0;L;;;;;N;;;;; 1007;MYANMAR LETTER JA;Lo;0;L;;;;;N;;;;; 1008;MYANMAR LETTER JHA;Lo;0;L;;;;;N;;;;; 1009;MYANMAR LETTER NYA;Lo;0;L;;;;;N;;;;; 100A;MYANMAR LETTER NNYA;Lo;0;L;;;;;N;;;;; 100B;MYANMAR LETTER TTA;Lo;0;L;;;;;N;;;;; 100C;MYANMAR LETTER TTHA;Lo;0;L;;;;;N;;;;; 100D;MYANMAR LETTER DDA;Lo;0;L;;;;;N;;;;; 100E;MYANMAR LETTER DDHA;Lo;0;L;;;;;N;;;;; 100F;MYANMAR LETTER NNA;Lo;0;L;;;;;N;;;;; 1010;MYANMAR LETTER TA;Lo;0;L;;;;;N;;;;; 1011;MYANMAR LETTER THA;Lo;0;L;;;;;N;;;;; 1012;MYANMAR LETTER DA;Lo;0;L;;;;;N;;;;; 1013;MYANMAR LETTER DHA;Lo;0;L;;;;;N;;;;; 1014;MYANMAR LETTER NA;Lo;0;L;;;;;N;;;;; 1015;MYANMAR LETTER PA;Lo;0;L;;;;;N;;;;; 1016;MYANMAR LETTER PHA;Lo;0;L;;;;;N;;;;; 1017;MYANMAR LETTER BA;Lo;0;L;;;;;N;;;;; 1018;MYANMAR LETTER BHA;Lo;0;L;;;;;N;;;;; 1019;MYANMAR LETTER MA;Lo;0;L;;;;;N;;;;; 101A;MYANMAR LETTER YA;Lo;0;L;;;;;N;;;;; 101B;MYANMAR LETTER RA;Lo;0;L;;;;;N;;;;; 101C;MYANMAR LETTER LA;Lo;0;L;;;;;N;;;;; 101D;MYANMAR LETTER WA;Lo;0;L;;;;;N;;;;; 101E;MYANMAR LETTER SA;Lo;0;L;;;;;N;;;;; 101F;MYANMAR LETTER HA;Lo;0;L;;;;;N;;;;; 1020;MYANMAR LETTER LLA;Lo;0;L;;;;;N;;;;; 1021;MYANMAR LETTER A;Lo;0;L;;;;;N;;;;; 1022;MYANMAR LETTER SHAN A;Lo;0;L;;;;;N;;;;; 1023;MYANMAR LETTER I;Lo;0;L;;;;;N;;;;; 1024;MYANMAR LETTER II;Lo;0;L;;;;;N;;;;; 1025;MYANMAR LETTER U;Lo;0;L;;;;;N;;;;; 1026;MYANMAR LETTER UU;Lo;0;L;1025 102E;;;;N;;;;; 1027;MYANMAR LETTER E;Lo;0;L;;;;;N;;;;; 1028;MYANMAR LETTER MON E;Lo;0;L;;;;;N;;;;; 1029;MYANMAR LETTER O;Lo;0;L;;;;;N;;;;; 102A;MYANMAR LETTER AU;Lo;0;L;;;;;N;;;;; 102B;MYANMAR VOWEL SIGN TALL AA;Mc;0;L;;;;;N;;;;; 102C;MYANMAR VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 102D;MYANMAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 102E;MYANMAR VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 102F;MYANMAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1030;MYANMAR VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 1031;MYANMAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 1032;MYANMAR VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 1033;MYANMAR VOWEL SIGN MON II;Mn;0;NSM;;;;;N;;;;; 1034;MYANMAR VOWEL SIGN MON O;Mn;0;NSM;;;;;N;;;;; 1035;MYANMAR VOWEL SIGN E ABOVE;Mn;0;NSM;;;;;N;;;;; 1036;MYANMAR SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 1037;MYANMAR SIGN DOT BELOW;Mn;7;NSM;;;;;N;;;;; 1038;MYANMAR SIGN VISARGA;Mc;0;L;;;;;N;;;;; 1039;MYANMAR SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 103A;MYANMAR SIGN ASAT;Mn;9;NSM;;;;;N;;;;; 103B;MYANMAR CONSONANT SIGN MEDIAL YA;Mc;0;L;;;;;N;;;;; 103C;MYANMAR CONSONANT SIGN MEDIAL RA;Mc;0;L;;;;;N;;;;; 103D;MYANMAR CONSONANT SIGN MEDIAL WA;Mn;0;NSM;;;;;N;;;;; 103E;MYANMAR CONSONANT SIGN MEDIAL HA;Mn;0;NSM;;;;;N;;;;; 103F;MYANMAR LETTER GREAT SA;Lo;0;L;;;;;N;;;;; 1040;MYANMAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1041;MYANMAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1042;MYANMAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1043;MYANMAR DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1044;MYANMAR DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1045;MYANMAR DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1046;MYANMAR DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1047;MYANMAR DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1048;MYANMAR DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1049;MYANMAR DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 104A;MYANMAR SIGN LITTLE SECTION;Po;0;L;;;;;N;;;;; 104B;MYANMAR SIGN SECTION;Po;0;L;;;;;N;;;;; 104C;MYANMAR SYMBOL LOCATIVE;Po;0;L;;;;;N;;;;; 104D;MYANMAR SYMBOL COMPLETED;Po;0;L;;;;;N;;;;; 104E;MYANMAR SYMBOL AFOREMENTIONED;Po;0;L;;;;;N;;;;; 104F;MYANMAR SYMBOL GENITIVE;Po;0;L;;;;;N;;;;; 1050;MYANMAR LETTER SHA;Lo;0;L;;;;;N;;;;; 1051;MYANMAR LETTER SSA;Lo;0;L;;;;;N;;;;; 1052;MYANMAR LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 1053;MYANMAR LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 1054;MYANMAR LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 1055;MYANMAR LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 1056;MYANMAR VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; 1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; 1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 105A;MYANMAR LETTER MON NGA;Lo;0;L;;;;;N;;;;; 105B;MYANMAR LETTER MON JHA;Lo;0;L;;;;;N;;;;; 105C;MYANMAR LETTER MON BBA;Lo;0;L;;;;;N;;;;; 105D;MYANMAR LETTER MON BBE;Lo;0;L;;;;;N;;;;; 105E;MYANMAR CONSONANT SIGN MON MEDIAL NA;Mn;0;NSM;;;;;N;;;;; 105F;MYANMAR CONSONANT SIGN MON MEDIAL MA;Mn;0;NSM;;;;;N;;;;; 1060;MYANMAR CONSONANT SIGN MON MEDIAL LA;Mn;0;NSM;;;;;N;;;;; 1061;MYANMAR LETTER SGAW KAREN SHA;Lo;0;L;;;;;N;;;;; 1062;MYANMAR VOWEL SIGN SGAW KAREN EU;Mc;0;L;;;;;N;;;;; 1063;MYANMAR TONE MARK SGAW KAREN HATHI;Mc;0;L;;;;;N;;;;; 1064;MYANMAR TONE MARK SGAW KAREN KE PHO;Mc;0;L;;;;;N;;;;; 1065;MYANMAR LETTER WESTERN PWO KAREN THA;Lo;0;L;;;;;N;;;;; 1066;MYANMAR LETTER WESTERN PWO KAREN PWA;Lo;0;L;;;;;N;;;;; 1067;MYANMAR VOWEL SIGN WESTERN PWO KAREN EU;Mc;0;L;;;;;N;;;;; 1068;MYANMAR VOWEL SIGN WESTERN PWO KAREN UE;Mc;0;L;;;;;N;;;;; 1069;MYANMAR SIGN WESTERN PWO KAREN TONE-1;Mc;0;L;;;;;N;;;;; 106A;MYANMAR SIGN WESTERN PWO KAREN TONE-2;Mc;0;L;;;;;N;;;;; 106B;MYANMAR SIGN WESTERN PWO KAREN TONE-3;Mc;0;L;;;;;N;;;;; 106C;MYANMAR SIGN WESTERN PWO KAREN TONE-4;Mc;0;L;;;;;N;;;;; 106D;MYANMAR SIGN WESTERN PWO KAREN TONE-5;Mc;0;L;;;;;N;;;;; 106E;MYANMAR LETTER EASTERN PWO KAREN NNA;Lo;0;L;;;;;N;;;;; 106F;MYANMAR LETTER EASTERN PWO KAREN YWA;Lo;0;L;;;;;N;;;;; 1070;MYANMAR LETTER EASTERN PWO KAREN GHWA;Lo;0;L;;;;;N;;;;; 1071;MYANMAR VOWEL SIGN GEBA KAREN I;Mn;0;NSM;;;;;N;;;;; 1072;MYANMAR VOWEL SIGN KAYAH OE;Mn;0;NSM;;;;;N;;;;; 1073;MYANMAR VOWEL SIGN KAYAH U;Mn;0;NSM;;;;;N;;;;; 1074;MYANMAR VOWEL SIGN KAYAH EE;Mn;0;NSM;;;;;N;;;;; 1075;MYANMAR LETTER SHAN KA;Lo;0;L;;;;;N;;;;; 1076;MYANMAR LETTER SHAN KHA;Lo;0;L;;;;;N;;;;; 1077;MYANMAR LETTER SHAN GA;Lo;0;L;;;;;N;;;;; 1078;MYANMAR LETTER SHAN CA;Lo;0;L;;;;;N;;;;; 1079;MYANMAR LETTER SHAN ZA;Lo;0;L;;;;;N;;;;; 107A;MYANMAR LETTER SHAN NYA;Lo;0;L;;;;;N;;;;; 107B;MYANMAR LETTER SHAN DA;Lo;0;L;;;;;N;;;;; 107C;MYANMAR LETTER SHAN NA;Lo;0;L;;;;;N;;;;; 107D;MYANMAR LETTER SHAN PHA;Lo;0;L;;;;;N;;;;; 107E;MYANMAR LETTER SHAN FA;Lo;0;L;;;;;N;;;;; 107F;MYANMAR LETTER SHAN BA;Lo;0;L;;;;;N;;;;; 1080;MYANMAR LETTER SHAN THA;Lo;0;L;;;;;N;;;;; 1081;MYANMAR LETTER SHAN HA;Lo;0;L;;;;;N;;;;; 1082;MYANMAR CONSONANT SIGN SHAN MEDIAL WA;Mn;0;NSM;;;;;N;;;;; 1083;MYANMAR VOWEL SIGN SHAN AA;Mc;0;L;;;;;N;;;;; 1084;MYANMAR VOWEL SIGN SHAN E;Mc;0;L;;;;;N;;;;; 1085;MYANMAR VOWEL SIGN SHAN E ABOVE;Mn;0;NSM;;;;;N;;;;; 1086;MYANMAR VOWEL SIGN SHAN FINAL Y;Mn;0;NSM;;;;;N;;;;; 1087;MYANMAR SIGN SHAN TONE-2;Mc;0;L;;;;;N;;;;; 1088;MYANMAR SIGN SHAN TONE-3;Mc;0;L;;;;;N;;;;; 1089;MYANMAR SIGN SHAN TONE-5;Mc;0;L;;;;;N;;;;; 108A;MYANMAR SIGN SHAN TONE-6;Mc;0;L;;;;;N;;;;; 108B;MYANMAR SIGN SHAN COUNCIL TONE-2;Mc;0;L;;;;;N;;;;; 108C;MYANMAR SIGN SHAN COUNCIL TONE-3;Mc;0;L;;;;;N;;;;; 108D;MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE;Mn;220;NSM;;;;;N;;;;; 108E;MYANMAR LETTER RUMAI PALAUNG FA;Lo;0;L;;;;;N;;;;; 108F;MYANMAR SIGN RUMAI PALAUNG TONE-5;Mc;0;L;;;;;N;;;;; 1090;MYANMAR SHAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1091;MYANMAR SHAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1092;MYANMAR SHAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1093;MYANMAR SHAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1094;MYANMAR SHAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1095;MYANMAR SHAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1096;MYANMAR SHAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1097;MYANMAR SHAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1098;MYANMAR SHAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1099;MYANMAR SHAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 109A;MYANMAR SIGN KHAMTI TONE-1;Mc;0;L;;;;;N;;;;; 109B;MYANMAR SIGN KHAMTI TONE-3;Mc;0;L;;;;;N;;;;; 109C;MYANMAR VOWEL SIGN AITON A;Mc;0;L;;;;;N;;;;; 109D;MYANMAR VOWEL SIGN AITON AI;Mn;0;NSM;;;;;N;;;;; 109E;MYANMAR SYMBOL SHAN ONE;So;0;L;;;;;N;;;;; 109F;MYANMAR SYMBOL SHAN EXCLAMATION;So;0;L;;;;;N;;;;; 10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;;;2D00; 10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;;;2D01; 10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;;;2D02; 10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;;;2D03; 10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;2D04; 10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;;;2D05; 10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;;;2D06; 10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;;;2D07; 10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;;;2D08; 10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;;;2D09; 10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;;;2D0A; 10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;;;2D0B; 10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;;;2D0C; 10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;;;2D0D; 10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;;;2D0E; 10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;;;2D0F; 10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;;;2D10; 10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;2D11; 10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;;;2D12; 10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;;;2D13; 10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;;;2D14; 10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;;;2D15; 10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;;;2D16; 10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;;;2D17; 10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;;;2D18; 10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;;;2D19; 10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;;;2D1A; 10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;;;2D1B; 10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;;;2D1C; 10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;;;2D1D; 10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;;;2D1E; 10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;;;2D1F; 10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;;;2D20; 10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;;;2D21; 10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;;;2D22; 10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;;;2D23; 10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;;;2D24; 10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;;;2D25; 10C7;GEORGIAN CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;2D27; 10CD;GEORGIAN CAPITAL LETTER AEN;Lu;0;L;;;;;N;;;;2D2D; 10D0;GEORGIAN LETTER AN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;1C90;;10D0 10D1;GEORGIAN LETTER BAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;1C91;;10D1 10D2;GEORGIAN LETTER GAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;1C92;;10D2 10D3;GEORGIAN LETTER DON;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;1C93;;10D3 10D4;GEORGIAN LETTER EN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;1C94;;10D4 10D5;GEORGIAN LETTER VIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;1C95;;10D5 10D6;GEORGIAN LETTER ZEN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;1C96;;10D6 10D7;GEORGIAN LETTER TAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;1C97;;10D7 10D8;GEORGIAN LETTER IN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;1C98;;10D8 10D9;GEORGIAN LETTER KAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;1C99;;10D9 10DA;GEORGIAN LETTER LAS;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;1C9A;;10DA 10DB;GEORGIAN LETTER MAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;1C9B;;10DB 10DC;GEORGIAN LETTER NAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;1C9C;;10DC 10DD;GEORGIAN LETTER ON;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;1C9D;;10DD 10DE;GEORGIAN LETTER PAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;1C9E;;10DE 10DF;GEORGIAN LETTER ZHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;1C9F;;10DF 10E0;GEORGIAN LETTER RAE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;1CA0;;10E0 10E1;GEORGIAN LETTER SAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;1CA1;;10E1 10E2;GEORGIAN LETTER TAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;1CA2;;10E2 10E3;GEORGIAN LETTER UN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;1CA3;;10E3 10E4;GEORGIAN LETTER PHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;1CA4;;10E4 10E5;GEORGIAN LETTER KHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;1CA5;;10E5 10E6;GEORGIAN LETTER GHAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;1CA6;;10E6 10E7;GEORGIAN LETTER QAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;1CA7;;10E7 10E8;GEORGIAN LETTER SHIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;1CA8;;10E8 10E9;GEORGIAN LETTER CHIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;1CA9;;10E9 10EA;GEORGIAN LETTER CAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;1CAA;;10EA 10EB;GEORGIAN LETTER JIL;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;1CAB;;10EB 10EC;GEORGIAN LETTER CIL;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;1CAC;;10EC 10ED;GEORGIAN LETTER CHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;1CAD;;10ED 10EE;GEORGIAN LETTER XAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;1CAE;;10EE 10EF;GEORGIAN LETTER JHAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;1CAF;;10EF 10F0;GEORGIAN LETTER HAE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;1CB0;;10F0 10F1;GEORGIAN LETTER HE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;1CB1;;10F1 10F2;GEORGIAN LETTER HIE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;1CB2;;10F2 10F3;GEORGIAN LETTER WE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;1CB3;;10F3 10F4;GEORGIAN LETTER HAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;1CB4;;10F4 10F5;GEORGIAN LETTER HOE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;1CB5;;10F5 10F6;GEORGIAN LETTER FI;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;1CB6;;10F6 10F7;GEORGIAN LETTER YN;Ll;0;L;;;;;N;;;1CB7;;10F7 10F8;GEORGIAN LETTER ELIFI;Ll;0;L;;;;;N;;;1CB8;;10F8 10F9;GEORGIAN LETTER TURNED GAN;Ll;0;L;;;;;N;;;1CB9;;10F9 10FA;GEORGIAN LETTER AIN;Ll;0;L;;;;;N;;;1CBA;;10FA 10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;; 10FC;MODIFIER LETTER GEORGIAN NAR;Lm;0;L; 10DC;;;;N;;;;; 10FD;GEORGIAN LETTER AEN;Ll;0;L;;;;;N;;;1CBD;;10FD 10FE;GEORGIAN LETTER HARD SIGN;Ll;0;L;;;;;N;;;1CBE;;10FE 10FF;GEORGIAN LETTER LABIAL SIGN;Ll;0;L;;;;;N;;;1CBF;;10FF 1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;;;; 1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;;;; 1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;;;; 1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;;;; 1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;;;; 1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;;;; 1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;;;; 1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;;;; 1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;;;;;N;;;;; 1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;;;; 110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;;;;;N;;;;; 110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;; 110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;;;; 110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;;;;;N;;;;; 110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;;;; 110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;;;; 1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;;;; 1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;;;; 1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;;;; 1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;; 1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;; 1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;; 1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;;;;;N;;;;; 1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;; 1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;; 1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;; 111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;; 111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;; 111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;; 111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;; 111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;; 111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;;;;;N;;;;; 1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;; 1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;; 1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; 1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; 1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;;;;;N;;;;; 1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;;;;;N;;;;; 1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;;;;;N;;;;; 1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;; 1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;; 1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;;;;;N;;;;; 112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;; 112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; 112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;;;;;N;;;;; 112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; 112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;;;;;N;;;;; 112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; 1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;; 1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;; 1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;; 1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;; 1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;;;;;N;;;;; 1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;;;;;N;;;;; 1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;; 1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;; 1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;;;;;N;;;;; 1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;; 113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;;;;;N;;;;; 113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;; 113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;; 113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;;;;;N;;;;; 113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;; 113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;;;;;N;;;;; 1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;; 1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;; 1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;;;;;N;;;;; 1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;;;;;N;;;;; 1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;;;;;N;;;;; 1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;;;;;N;;;;; 1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;;;;;N;;;;; 1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;; 1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;;;;;N;;;;; 1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;;;;;N;;;;; 114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;;;;;N;;;;; 114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;;;;;N;;;;; 114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;; 114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;;;;;N;;;;; 114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;; 114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;; 1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;; 1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;; 1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;;;;;N;;;;; 1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;;;;;N;;;;; 1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;; 1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;; 1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;; 1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;; 1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;;;;;N;;;;; 1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;; 115A;HANGUL CHOSEONG KIYEOK-TIKEUT;Lo;0;L;;;;;N;;;;; 115B;HANGUL CHOSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;; 115C;HANGUL CHOSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;;;; 115D;HANGUL CHOSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;;;; 115E;HANGUL CHOSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;; 115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;; 1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;; 1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;; 1162;HANGUL JUNGSEONG AE;Lo;0;L;;;;;N;;;;; 1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;; 1164;HANGUL JUNGSEONG YAE;Lo;0;L;;;;;N;;;;; 1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;; 1166;HANGUL JUNGSEONG E;Lo;0;L;;;;;N;;;;; 1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;; 1168;HANGUL JUNGSEONG YE;Lo;0;L;;;;;N;;;;; 1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;; 116A;HANGUL JUNGSEONG WA;Lo;0;L;;;;;N;;;;; 116B;HANGUL JUNGSEONG WAE;Lo;0;L;;;;;N;;;;; 116C;HANGUL JUNGSEONG OE;Lo;0;L;;;;;N;;;;; 116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;; 116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;; 116F;HANGUL JUNGSEONG WEO;Lo;0;L;;;;;N;;;;; 1170;HANGUL JUNGSEONG WE;Lo;0;L;;;;;N;;;;; 1171;HANGUL JUNGSEONG WI;Lo;0;L;;;;;N;;;;; 1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;; 1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;; 1174;HANGUL JUNGSEONG YI;Lo;0;L;;;;;N;;;;; 1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;; 1176;HANGUL JUNGSEONG A-O;Lo;0;L;;;;;N;;;;; 1177;HANGUL JUNGSEONG A-U;Lo;0;L;;;;;N;;;;; 1178;HANGUL JUNGSEONG YA-O;Lo;0;L;;;;;N;;;;; 1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;;;;;N;;;;; 117A;HANGUL JUNGSEONG EO-O;Lo;0;L;;;;;N;;;;; 117B;HANGUL JUNGSEONG EO-U;Lo;0;L;;;;;N;;;;; 117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;;;;;N;;;;; 117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;;;;;N;;;;; 117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;;;;;N;;;;; 117F;HANGUL JUNGSEONG O-EO;Lo;0;L;;;;;N;;;;; 1180;HANGUL JUNGSEONG O-E;Lo;0;L;;;;;N;;;;; 1181;HANGUL JUNGSEONG O-YE;Lo;0;L;;;;;N;;;;; 1182;HANGUL JUNGSEONG O-O;Lo;0;L;;;;;N;;;;; 1183;HANGUL JUNGSEONG O-U;Lo;0;L;;;;;N;;;;; 1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;;;;;N;;;;; 1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;;;;;N;;;;; 1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;;;;;N;;;;; 1187;HANGUL JUNGSEONG YO-O;Lo;0;L;;;;;N;;;;; 1188;HANGUL JUNGSEONG YO-I;Lo;0;L;;;;;N;;;;; 1189;HANGUL JUNGSEONG U-A;Lo;0;L;;;;;N;;;;; 118A;HANGUL JUNGSEONG U-AE;Lo;0;L;;;;;N;;;;; 118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;;;;;N;;;;; 118C;HANGUL JUNGSEONG U-YE;Lo;0;L;;;;;N;;;;; 118D;HANGUL JUNGSEONG U-U;Lo;0;L;;;;;N;;;;; 118E;HANGUL JUNGSEONG YU-A;Lo;0;L;;;;;N;;;;; 118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;;;;;N;;;;; 1190;HANGUL JUNGSEONG YU-E;Lo;0;L;;;;;N;;;;; 1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;;;;;N;;;;; 1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;;;;;N;;;;; 1193;HANGUL JUNGSEONG YU-U;Lo;0;L;;;;;N;;;;; 1194;HANGUL JUNGSEONG YU-I;Lo;0;L;;;;;N;;;;; 1195;HANGUL JUNGSEONG EU-U;Lo;0;L;;;;;N;;;;; 1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;;;;;N;;;;; 1197;HANGUL JUNGSEONG YI-U;Lo;0;L;;;;;N;;;;; 1198;HANGUL JUNGSEONG I-A;Lo;0;L;;;;;N;;;;; 1199;HANGUL JUNGSEONG I-YA;Lo;0;L;;;;;N;;;;; 119A;HANGUL JUNGSEONG I-O;Lo;0;L;;;;;N;;;;; 119B;HANGUL JUNGSEONG I-U;Lo;0;L;;;;;N;;;;; 119C;HANGUL JUNGSEONG I-EU;Lo;0;L;;;;;N;;;;; 119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;;;;;N;;;;; 119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;; 119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;;;;;N;;;;; 11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;;;;;N;;;;; 11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;;;;;N;;;;; 11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;;;;;N;;;;; 11A3;HANGUL JUNGSEONG A-EU;Lo;0;L;;;;;N;;;;; 11A4;HANGUL JUNGSEONG YA-U;Lo;0;L;;;;;N;;;;; 11A5;HANGUL JUNGSEONG YEO-YA;Lo;0;L;;;;;N;;;;; 11A6;HANGUL JUNGSEONG O-YA;Lo;0;L;;;;;N;;;;; 11A7;HANGUL JUNGSEONG O-YAE;Lo;0;L;;;;;N;;;;; 11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;;;; 11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;;;; 11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;;;;;N;;;;; 11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;;;; 11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;;;; 11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;;;; 11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;;;; 11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;;;; 11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;;;; 11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;;;; 11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;;;; 11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;;;; 11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;;;;;N;;;;; 11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;;;;;N;;;;; 11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;; 11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;;;; 11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;;;; 11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;; 11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;;;; 11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;;;;;N;;;;; 11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;;;; 11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;;;; 11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;;;; 11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;;;; 11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;;;; 11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;;;; 11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;;;; 11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;;;;;N;;;;; 11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; 11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;; 11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;; 11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;; 11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;;;;;N;;;;; 11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;;;;;N;;;;; 11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;; 11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;; 11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;;;;;N;;;;; 11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;; 11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;; 11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;;;;;N;;;;; 11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;; 11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;; 11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;;;;;N;;;;; 11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;;;;;N;;;;; 11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;;;;;N;;;;; 11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; 11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;;;;;N;;;;; 11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;;;;;N;;;;; 11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;; 11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;;;;;N;;;;; 11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;; 11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;;;;;N;;;;; 11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;; 11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;; 11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;;;;;N;;;;; 11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;;;;;N;;;;; 11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;;;;;N;;;;; 11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;;;;;N;;;;; 11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;; 11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;;;;;N;;;;; 11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;; 11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;; 11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; 11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; 11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; 11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;; 11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;; 11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;; 11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;; 11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;;;;;N;;;;; 11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;; 11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;;;;;N;;;;; 11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;; 11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;;;;;N;;;;; 11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;;;;;N;;;;; 11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;; 11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;; 11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;;;;;N;;;;; 11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;;;;;N;;;;; 11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;;;;;N;;;;; 11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;;;;;N;;;;; 11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;; 11FA;HANGUL JONGSEONG KIYEOK-NIEUN;Lo;0;L;;;;;N;;;;; 11FB;HANGUL JONGSEONG KIYEOK-PIEUP;Lo;0;L;;;;;N;;;;; 11FC;HANGUL JONGSEONG KIYEOK-CHIEUCH;Lo;0;L;;;;;N;;;;; 11FD;HANGUL JONGSEONG KIYEOK-KHIEUKH;Lo;0;L;;;;;N;;;;; 11FE;HANGUL JONGSEONG KIYEOK-HIEUH;Lo;0;L;;;;;N;;;;; 11FF;HANGUL JONGSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;; 1200;ETHIOPIC SYLLABLE HA;Lo;0;L;;;;;N;;;;; 1201;ETHIOPIC SYLLABLE HU;Lo;0;L;;;;;N;;;;; 1202;ETHIOPIC SYLLABLE HI;Lo;0;L;;;;;N;;;;; 1203;ETHIOPIC SYLLABLE HAA;Lo;0;L;;;;;N;;;;; 1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;; 1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;; 1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;; 1207;ETHIOPIC SYLLABLE HOA;Lo;0;L;;;;;N;;;;; 1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;; 1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;; 120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;; 120B;ETHIOPIC SYLLABLE LAA;Lo;0;L;;;;;N;;;;; 120C;ETHIOPIC SYLLABLE LEE;Lo;0;L;;;;;N;;;;; 120D;ETHIOPIC SYLLABLE LE;Lo;0;L;;;;;N;;;;; 120E;ETHIOPIC SYLLABLE LO;Lo;0;L;;;;;N;;;;; 120F;ETHIOPIC SYLLABLE LWA;Lo;0;L;;;;;N;;;;; 1210;ETHIOPIC SYLLABLE HHA;Lo;0;L;;;;;N;;;;; 1211;ETHIOPIC SYLLABLE HHU;Lo;0;L;;;;;N;;;;; 1212;ETHIOPIC SYLLABLE HHI;Lo;0;L;;;;;N;;;;; 1213;ETHIOPIC SYLLABLE HHAA;Lo;0;L;;;;;N;;;;; 1214;ETHIOPIC SYLLABLE HHEE;Lo;0;L;;;;;N;;;;; 1215;ETHIOPIC SYLLABLE HHE;Lo;0;L;;;;;N;;;;; 1216;ETHIOPIC SYLLABLE HHO;Lo;0;L;;;;;N;;;;; 1217;ETHIOPIC SYLLABLE HHWA;Lo;0;L;;;;;N;;;;; 1218;ETHIOPIC SYLLABLE MA;Lo;0;L;;;;;N;;;;; 1219;ETHIOPIC SYLLABLE MU;Lo;0;L;;;;;N;;;;; 121A;ETHIOPIC SYLLABLE MI;Lo;0;L;;;;;N;;;;; 121B;ETHIOPIC SYLLABLE MAA;Lo;0;L;;;;;N;;;;; 121C;ETHIOPIC SYLLABLE MEE;Lo;0;L;;;;;N;;;;; 121D;ETHIOPIC SYLLABLE ME;Lo;0;L;;;;;N;;;;; 121E;ETHIOPIC SYLLABLE MO;Lo;0;L;;;;;N;;;;; 121F;ETHIOPIC SYLLABLE MWA;Lo;0;L;;;;;N;;;;; 1220;ETHIOPIC SYLLABLE SZA;Lo;0;L;;;;;N;;;;; 1221;ETHIOPIC SYLLABLE SZU;Lo;0;L;;;;;N;;;;; 1222;ETHIOPIC SYLLABLE SZI;Lo;0;L;;;;;N;;;;; 1223;ETHIOPIC SYLLABLE SZAA;Lo;0;L;;;;;N;;;;; 1224;ETHIOPIC SYLLABLE SZEE;Lo;0;L;;;;;N;;;;; 1225;ETHIOPIC SYLLABLE SZE;Lo;0;L;;;;;N;;;;; 1226;ETHIOPIC SYLLABLE SZO;Lo;0;L;;;;;N;;;;; 1227;ETHIOPIC SYLLABLE SZWA;Lo;0;L;;;;;N;;;;; 1228;ETHIOPIC SYLLABLE RA;Lo;0;L;;;;;N;;;;; 1229;ETHIOPIC SYLLABLE RU;Lo;0;L;;;;;N;;;;; 122A;ETHIOPIC SYLLABLE RI;Lo;0;L;;;;;N;;;;; 122B;ETHIOPIC SYLLABLE RAA;Lo;0;L;;;;;N;;;;; 122C;ETHIOPIC SYLLABLE REE;Lo;0;L;;;;;N;;;;; 122D;ETHIOPIC SYLLABLE RE;Lo;0;L;;;;;N;;;;; 122E;ETHIOPIC SYLLABLE RO;Lo;0;L;;;;;N;;;;; 122F;ETHIOPIC SYLLABLE RWA;Lo;0;L;;;;;N;;;;; 1230;ETHIOPIC SYLLABLE SA;Lo;0;L;;;;;N;;;;; 1231;ETHIOPIC SYLLABLE SU;Lo;0;L;;;;;N;;;;; 1232;ETHIOPIC SYLLABLE SI;Lo;0;L;;;;;N;;;;; 1233;ETHIOPIC SYLLABLE SAA;Lo;0;L;;;;;N;;;;; 1234;ETHIOPIC SYLLABLE SEE;Lo;0;L;;;;;N;;;;; 1235;ETHIOPIC SYLLABLE SE;Lo;0;L;;;;;N;;;;; 1236;ETHIOPIC SYLLABLE SO;Lo;0;L;;;;;N;;;;; 1237;ETHIOPIC SYLLABLE SWA;Lo;0;L;;;;;N;;;;; 1238;ETHIOPIC SYLLABLE SHA;Lo;0;L;;;;;N;;;;; 1239;ETHIOPIC SYLLABLE SHU;Lo;0;L;;;;;N;;;;; 123A;ETHIOPIC SYLLABLE SHI;Lo;0;L;;;;;N;;;;; 123B;ETHIOPIC SYLLABLE SHAA;Lo;0;L;;;;;N;;;;; 123C;ETHIOPIC SYLLABLE SHEE;Lo;0;L;;;;;N;;;;; 123D;ETHIOPIC SYLLABLE SHE;Lo;0;L;;;;;N;;;;; 123E;ETHIOPIC SYLLABLE SHO;Lo;0;L;;;;;N;;;;; 123F;ETHIOPIC SYLLABLE SHWA;Lo;0;L;;;;;N;;;;; 1240;ETHIOPIC SYLLABLE QA;Lo;0;L;;;;;N;;;;; 1241;ETHIOPIC SYLLABLE QU;Lo;0;L;;;;;N;;;;; 1242;ETHIOPIC SYLLABLE QI;Lo;0;L;;;;;N;;;;; 1243;ETHIOPIC SYLLABLE QAA;Lo;0;L;;;;;N;;;;; 1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;; 1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;; 1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;; 1247;ETHIOPIC SYLLABLE QOA;Lo;0;L;;;;;N;;;;; 1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;; 124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;; 124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;; 124C;ETHIOPIC SYLLABLE QWEE;Lo;0;L;;;;;N;;;;; 124D;ETHIOPIC SYLLABLE QWE;Lo;0;L;;;;;N;;;;; 1250;ETHIOPIC SYLLABLE QHA;Lo;0;L;;;;;N;;;;; 1251;ETHIOPIC SYLLABLE QHU;Lo;0;L;;;;;N;;;;; 1252;ETHIOPIC SYLLABLE QHI;Lo;0;L;;;;;N;;;;; 1253;ETHIOPIC SYLLABLE QHAA;Lo;0;L;;;;;N;;;;; 1254;ETHIOPIC SYLLABLE QHEE;Lo;0;L;;;;;N;;;;; 1255;ETHIOPIC SYLLABLE QHE;Lo;0;L;;;;;N;;;;; 1256;ETHIOPIC SYLLABLE QHO;Lo;0;L;;;;;N;;;;; 1258;ETHIOPIC SYLLABLE QHWA;Lo;0;L;;;;;N;;;;; 125A;ETHIOPIC SYLLABLE QHWI;Lo;0;L;;;;;N;;;;; 125B;ETHIOPIC SYLLABLE QHWAA;Lo;0;L;;;;;N;;;;; 125C;ETHIOPIC SYLLABLE QHWEE;Lo;0;L;;;;;N;;;;; 125D;ETHIOPIC SYLLABLE QHWE;Lo;0;L;;;;;N;;;;; 1260;ETHIOPIC SYLLABLE BA;Lo;0;L;;;;;N;;;;; 1261;ETHIOPIC SYLLABLE BU;Lo;0;L;;;;;N;;;;; 1262;ETHIOPIC SYLLABLE BI;Lo;0;L;;;;;N;;;;; 1263;ETHIOPIC SYLLABLE BAA;Lo;0;L;;;;;N;;;;; 1264;ETHIOPIC SYLLABLE BEE;Lo;0;L;;;;;N;;;;; 1265;ETHIOPIC SYLLABLE BE;Lo;0;L;;;;;N;;;;; 1266;ETHIOPIC SYLLABLE BO;Lo;0;L;;;;;N;;;;; 1267;ETHIOPIC SYLLABLE BWA;Lo;0;L;;;;;N;;;;; 1268;ETHIOPIC SYLLABLE VA;Lo;0;L;;;;;N;;;;; 1269;ETHIOPIC SYLLABLE VU;Lo;0;L;;;;;N;;;;; 126A;ETHIOPIC SYLLABLE VI;Lo;0;L;;;;;N;;;;; 126B;ETHIOPIC SYLLABLE VAA;Lo;0;L;;;;;N;;;;; 126C;ETHIOPIC SYLLABLE VEE;Lo;0;L;;;;;N;;;;; 126D;ETHIOPIC SYLLABLE VE;Lo;0;L;;;;;N;;;;; 126E;ETHIOPIC SYLLABLE VO;Lo;0;L;;;;;N;;;;; 126F;ETHIOPIC SYLLABLE VWA;Lo;0;L;;;;;N;;;;; 1270;ETHIOPIC SYLLABLE TA;Lo;0;L;;;;;N;;;;; 1271;ETHIOPIC SYLLABLE TU;Lo;0;L;;;;;N;;;;; 1272;ETHIOPIC SYLLABLE TI;Lo;0;L;;;;;N;;;;; 1273;ETHIOPIC SYLLABLE TAA;Lo;0;L;;;;;N;;;;; 1274;ETHIOPIC SYLLABLE TEE;Lo;0;L;;;;;N;;;;; 1275;ETHIOPIC SYLLABLE TE;Lo;0;L;;;;;N;;;;; 1276;ETHIOPIC SYLLABLE TO;Lo;0;L;;;;;N;;;;; 1277;ETHIOPIC SYLLABLE TWA;Lo;0;L;;;;;N;;;;; 1278;ETHIOPIC SYLLABLE CA;Lo;0;L;;;;;N;;;;; 1279;ETHIOPIC SYLLABLE CU;Lo;0;L;;;;;N;;;;; 127A;ETHIOPIC SYLLABLE CI;Lo;0;L;;;;;N;;;;; 127B;ETHIOPIC SYLLABLE CAA;Lo;0;L;;;;;N;;;;; 127C;ETHIOPIC SYLLABLE CEE;Lo;0;L;;;;;N;;;;; 127D;ETHIOPIC SYLLABLE CE;Lo;0;L;;;;;N;;;;; 127E;ETHIOPIC SYLLABLE CO;Lo;0;L;;;;;N;;;;; 127F;ETHIOPIC SYLLABLE CWA;Lo;0;L;;;;;N;;;;; 1280;ETHIOPIC SYLLABLE XA;Lo;0;L;;;;;N;;;;; 1281;ETHIOPIC SYLLABLE XU;Lo;0;L;;;;;N;;;;; 1282;ETHIOPIC SYLLABLE XI;Lo;0;L;;;;;N;;;;; 1283;ETHIOPIC SYLLABLE XAA;Lo;0;L;;;;;N;;;;; 1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;; 1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;; 1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;; 1287;ETHIOPIC SYLLABLE XOA;Lo;0;L;;;;;N;;;;; 1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;; 128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;; 128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;; 128C;ETHIOPIC SYLLABLE XWEE;Lo;0;L;;;;;N;;;;; 128D;ETHIOPIC SYLLABLE XWE;Lo;0;L;;;;;N;;;;; 1290;ETHIOPIC SYLLABLE NA;Lo;0;L;;;;;N;;;;; 1291;ETHIOPIC SYLLABLE NU;Lo;0;L;;;;;N;;;;; 1292;ETHIOPIC SYLLABLE NI;Lo;0;L;;;;;N;;;;; 1293;ETHIOPIC SYLLABLE NAA;Lo;0;L;;;;;N;;;;; 1294;ETHIOPIC SYLLABLE NEE;Lo;0;L;;;;;N;;;;; 1295;ETHIOPIC SYLLABLE NE;Lo;0;L;;;;;N;;;;; 1296;ETHIOPIC SYLLABLE NO;Lo;0;L;;;;;N;;;;; 1297;ETHIOPIC SYLLABLE NWA;Lo;0;L;;;;;N;;;;; 1298;ETHIOPIC SYLLABLE NYA;Lo;0;L;;;;;N;;;;; 1299;ETHIOPIC SYLLABLE NYU;Lo;0;L;;;;;N;;;;; 129A;ETHIOPIC SYLLABLE NYI;Lo;0;L;;;;;N;;;;; 129B;ETHIOPIC SYLLABLE NYAA;Lo;0;L;;;;;N;;;;; 129C;ETHIOPIC SYLLABLE NYEE;Lo;0;L;;;;;N;;;;; 129D;ETHIOPIC SYLLABLE NYE;Lo;0;L;;;;;N;;;;; 129E;ETHIOPIC SYLLABLE NYO;Lo;0;L;;;;;N;;;;; 129F;ETHIOPIC SYLLABLE NYWA;Lo;0;L;;;;;N;;;;; 12A0;ETHIOPIC SYLLABLE GLOTTAL A;Lo;0;L;;;;;N;;;;; 12A1;ETHIOPIC SYLLABLE GLOTTAL U;Lo;0;L;;;;;N;;;;; 12A2;ETHIOPIC SYLLABLE GLOTTAL I;Lo;0;L;;;;;N;;;;; 12A3;ETHIOPIC SYLLABLE GLOTTAL AA;Lo;0;L;;;;;N;;;;; 12A4;ETHIOPIC SYLLABLE GLOTTAL EE;Lo;0;L;;;;;N;;;;; 12A5;ETHIOPIC SYLLABLE GLOTTAL E;Lo;0;L;;;;;N;;;;; 12A6;ETHIOPIC SYLLABLE GLOTTAL O;Lo;0;L;;;;;N;;;;; 12A7;ETHIOPIC SYLLABLE GLOTTAL WA;Lo;0;L;;;;;N;;;;; 12A8;ETHIOPIC SYLLABLE KA;Lo;0;L;;;;;N;;;;; 12A9;ETHIOPIC SYLLABLE KU;Lo;0;L;;;;;N;;;;; 12AA;ETHIOPIC SYLLABLE KI;Lo;0;L;;;;;N;;;;; 12AB;ETHIOPIC SYLLABLE KAA;Lo;0;L;;;;;N;;;;; 12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;; 12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;; 12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;; 12AF;ETHIOPIC SYLLABLE KOA;Lo;0;L;;;;;N;;;;; 12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;; 12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;; 12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;; 12B4;ETHIOPIC SYLLABLE KWEE;Lo;0;L;;;;;N;;;;; 12B5;ETHIOPIC SYLLABLE KWE;Lo;0;L;;;;;N;;;;; 12B8;ETHIOPIC SYLLABLE KXA;Lo;0;L;;;;;N;;;;; 12B9;ETHIOPIC SYLLABLE KXU;Lo;0;L;;;;;N;;;;; 12BA;ETHIOPIC SYLLABLE KXI;Lo;0;L;;;;;N;;;;; 12BB;ETHIOPIC SYLLABLE KXAA;Lo;0;L;;;;;N;;;;; 12BC;ETHIOPIC SYLLABLE KXEE;Lo;0;L;;;;;N;;;;; 12BD;ETHIOPIC SYLLABLE KXE;Lo;0;L;;;;;N;;;;; 12BE;ETHIOPIC SYLLABLE KXO;Lo;0;L;;;;;N;;;;; 12C0;ETHIOPIC SYLLABLE KXWA;Lo;0;L;;;;;N;;;;; 12C2;ETHIOPIC SYLLABLE KXWI;Lo;0;L;;;;;N;;;;; 12C3;ETHIOPIC SYLLABLE KXWAA;Lo;0;L;;;;;N;;;;; 12C4;ETHIOPIC SYLLABLE KXWEE;Lo;0;L;;;;;N;;;;; 12C5;ETHIOPIC SYLLABLE KXWE;Lo;0;L;;;;;N;;;;; 12C8;ETHIOPIC SYLLABLE WA;Lo;0;L;;;;;N;;;;; 12C9;ETHIOPIC SYLLABLE WU;Lo;0;L;;;;;N;;;;; 12CA;ETHIOPIC SYLLABLE WI;Lo;0;L;;;;;N;;;;; 12CB;ETHIOPIC SYLLABLE WAA;Lo;0;L;;;;;N;;;;; 12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;; 12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;; 12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;; 12CF;ETHIOPIC SYLLABLE WOA;Lo;0;L;;;;;N;;;;; 12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;; 12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;; 12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;; 12D3;ETHIOPIC SYLLABLE PHARYNGEAL AA;Lo;0;L;;;;;N;;;;; 12D4;ETHIOPIC SYLLABLE PHARYNGEAL EE;Lo;0;L;;;;;N;;;;; 12D5;ETHIOPIC SYLLABLE PHARYNGEAL E;Lo;0;L;;;;;N;;;;; 12D6;ETHIOPIC SYLLABLE PHARYNGEAL O;Lo;0;L;;;;;N;;;;; 12D8;ETHIOPIC SYLLABLE ZA;Lo;0;L;;;;;N;;;;; 12D9;ETHIOPIC SYLLABLE ZU;Lo;0;L;;;;;N;;;;; 12DA;ETHIOPIC SYLLABLE ZI;Lo;0;L;;;;;N;;;;; 12DB;ETHIOPIC SYLLABLE ZAA;Lo;0;L;;;;;N;;;;; 12DC;ETHIOPIC SYLLABLE ZEE;Lo;0;L;;;;;N;;;;; 12DD;ETHIOPIC SYLLABLE ZE;Lo;0;L;;;;;N;;;;; 12DE;ETHIOPIC SYLLABLE ZO;Lo;0;L;;;;;N;;;;; 12DF;ETHIOPIC SYLLABLE ZWA;Lo;0;L;;;;;N;;;;; 12E0;ETHIOPIC SYLLABLE ZHA;Lo;0;L;;;;;N;;;;; 12E1;ETHIOPIC SYLLABLE ZHU;Lo;0;L;;;;;N;;;;; 12E2;ETHIOPIC SYLLABLE ZHI;Lo;0;L;;;;;N;;;;; 12E3;ETHIOPIC SYLLABLE ZHAA;Lo;0;L;;;;;N;;;;; 12E4;ETHIOPIC SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;; 12E5;ETHIOPIC SYLLABLE ZHE;Lo;0;L;;;;;N;;;;; 12E6;ETHIOPIC SYLLABLE ZHO;Lo;0;L;;;;;N;;;;; 12E7;ETHIOPIC SYLLABLE ZHWA;Lo;0;L;;;;;N;;;;; 12E8;ETHIOPIC SYLLABLE YA;Lo;0;L;;;;;N;;;;; 12E9;ETHIOPIC SYLLABLE YU;Lo;0;L;;;;;N;;;;; 12EA;ETHIOPIC SYLLABLE YI;Lo;0;L;;;;;N;;;;; 12EB;ETHIOPIC SYLLABLE YAA;Lo;0;L;;;;;N;;;;; 12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;; 12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;; 12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;; 12EF;ETHIOPIC SYLLABLE YOA;Lo;0;L;;;;;N;;;;; 12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;; 12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;; 12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;; 12F3;ETHIOPIC SYLLABLE DAA;Lo;0;L;;;;;N;;;;; 12F4;ETHIOPIC SYLLABLE DEE;Lo;0;L;;;;;N;;;;; 12F5;ETHIOPIC SYLLABLE DE;Lo;0;L;;;;;N;;;;; 12F6;ETHIOPIC SYLLABLE DO;Lo;0;L;;;;;N;;;;; 12F7;ETHIOPIC SYLLABLE DWA;Lo;0;L;;;;;N;;;;; 12F8;ETHIOPIC SYLLABLE DDA;Lo;0;L;;;;;N;;;;; 12F9;ETHIOPIC SYLLABLE DDU;Lo;0;L;;;;;N;;;;; 12FA;ETHIOPIC SYLLABLE DDI;Lo;0;L;;;;;N;;;;; 12FB;ETHIOPIC SYLLABLE DDAA;Lo;0;L;;;;;N;;;;; 12FC;ETHIOPIC SYLLABLE DDEE;Lo;0;L;;;;;N;;;;; 12FD;ETHIOPIC SYLLABLE DDE;Lo;0;L;;;;;N;;;;; 12FE;ETHIOPIC SYLLABLE DDO;Lo;0;L;;;;;N;;;;; 12FF;ETHIOPIC SYLLABLE DDWA;Lo;0;L;;;;;N;;;;; 1300;ETHIOPIC SYLLABLE JA;Lo;0;L;;;;;N;;;;; 1301;ETHIOPIC SYLLABLE JU;Lo;0;L;;;;;N;;;;; 1302;ETHIOPIC SYLLABLE JI;Lo;0;L;;;;;N;;;;; 1303;ETHIOPIC SYLLABLE JAA;Lo;0;L;;;;;N;;;;; 1304;ETHIOPIC SYLLABLE JEE;Lo;0;L;;;;;N;;;;; 1305;ETHIOPIC SYLLABLE JE;Lo;0;L;;;;;N;;;;; 1306;ETHIOPIC SYLLABLE JO;Lo;0;L;;;;;N;;;;; 1307;ETHIOPIC SYLLABLE JWA;Lo;0;L;;;;;N;;;;; 1308;ETHIOPIC SYLLABLE GA;Lo;0;L;;;;;N;;;;; 1309;ETHIOPIC SYLLABLE GU;Lo;0;L;;;;;N;;;;; 130A;ETHIOPIC SYLLABLE GI;Lo;0;L;;;;;N;;;;; 130B;ETHIOPIC SYLLABLE GAA;Lo;0;L;;;;;N;;;;; 130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;; 130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;; 130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;; 130F;ETHIOPIC SYLLABLE GOA;Lo;0;L;;;;;N;;;;; 1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;; 1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;; 1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;; 1314;ETHIOPIC SYLLABLE GWEE;Lo;0;L;;;;;N;;;;; 1315;ETHIOPIC SYLLABLE GWE;Lo;0;L;;;;;N;;;;; 1318;ETHIOPIC SYLLABLE GGA;Lo;0;L;;;;;N;;;;; 1319;ETHIOPIC SYLLABLE GGU;Lo;0;L;;;;;N;;;;; 131A;ETHIOPIC SYLLABLE GGI;Lo;0;L;;;;;N;;;;; 131B;ETHIOPIC SYLLABLE GGAA;Lo;0;L;;;;;N;;;;; 131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;; 131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;; 131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;; 131F;ETHIOPIC SYLLABLE GGWAA;Lo;0;L;;;;;N;;;;; 1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;; 1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;; 1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;; 1323;ETHIOPIC SYLLABLE THAA;Lo;0;L;;;;;N;;;;; 1324;ETHIOPIC SYLLABLE THEE;Lo;0;L;;;;;N;;;;; 1325;ETHIOPIC SYLLABLE THE;Lo;0;L;;;;;N;;;;; 1326;ETHIOPIC SYLLABLE THO;Lo;0;L;;;;;N;;;;; 1327;ETHIOPIC SYLLABLE THWA;Lo;0;L;;;;;N;;;;; 1328;ETHIOPIC SYLLABLE CHA;Lo;0;L;;;;;N;;;;; 1329;ETHIOPIC SYLLABLE CHU;Lo;0;L;;;;;N;;;;; 132A;ETHIOPIC SYLLABLE CHI;Lo;0;L;;;;;N;;;;; 132B;ETHIOPIC SYLLABLE CHAA;Lo;0;L;;;;;N;;;;; 132C;ETHIOPIC SYLLABLE CHEE;Lo;0;L;;;;;N;;;;; 132D;ETHIOPIC SYLLABLE CHE;Lo;0;L;;;;;N;;;;; 132E;ETHIOPIC SYLLABLE CHO;Lo;0;L;;;;;N;;;;; 132F;ETHIOPIC SYLLABLE CHWA;Lo;0;L;;;;;N;;;;; 1330;ETHIOPIC SYLLABLE PHA;Lo;0;L;;;;;N;;;;; 1331;ETHIOPIC SYLLABLE PHU;Lo;0;L;;;;;N;;;;; 1332;ETHIOPIC SYLLABLE PHI;Lo;0;L;;;;;N;;;;; 1333;ETHIOPIC SYLLABLE PHAA;Lo;0;L;;;;;N;;;;; 1334;ETHIOPIC SYLLABLE PHEE;Lo;0;L;;;;;N;;;;; 1335;ETHIOPIC SYLLABLE PHE;Lo;0;L;;;;;N;;;;; 1336;ETHIOPIC SYLLABLE PHO;Lo;0;L;;;;;N;;;;; 1337;ETHIOPIC SYLLABLE PHWA;Lo;0;L;;;;;N;;;;; 1338;ETHIOPIC SYLLABLE TSA;Lo;0;L;;;;;N;;;;; 1339;ETHIOPIC SYLLABLE TSU;Lo;0;L;;;;;N;;;;; 133A;ETHIOPIC SYLLABLE TSI;Lo;0;L;;;;;N;;;;; 133B;ETHIOPIC SYLLABLE TSAA;Lo;0;L;;;;;N;;;;; 133C;ETHIOPIC SYLLABLE TSEE;Lo;0;L;;;;;N;;;;; 133D;ETHIOPIC SYLLABLE TSE;Lo;0;L;;;;;N;;;;; 133E;ETHIOPIC SYLLABLE TSO;Lo;0;L;;;;;N;;;;; 133F;ETHIOPIC SYLLABLE TSWA;Lo;0;L;;;;;N;;;;; 1340;ETHIOPIC SYLLABLE TZA;Lo;0;L;;;;;N;;;;; 1341;ETHIOPIC SYLLABLE TZU;Lo;0;L;;;;;N;;;;; 1342;ETHIOPIC SYLLABLE TZI;Lo;0;L;;;;;N;;;;; 1343;ETHIOPIC SYLLABLE TZAA;Lo;0;L;;;;;N;;;;; 1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;; 1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;; 1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;; 1347;ETHIOPIC SYLLABLE TZOA;Lo;0;L;;;;;N;;;;; 1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;; 1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;; 134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;; 134B;ETHIOPIC SYLLABLE FAA;Lo;0;L;;;;;N;;;;; 134C;ETHIOPIC SYLLABLE FEE;Lo;0;L;;;;;N;;;;; 134D;ETHIOPIC SYLLABLE FE;Lo;0;L;;;;;N;;;;; 134E;ETHIOPIC SYLLABLE FO;Lo;0;L;;;;;N;;;;; 134F;ETHIOPIC SYLLABLE FWA;Lo;0;L;;;;;N;;;;; 1350;ETHIOPIC SYLLABLE PA;Lo;0;L;;;;;N;;;;; 1351;ETHIOPIC SYLLABLE PU;Lo;0;L;;;;;N;;;;; 1352;ETHIOPIC SYLLABLE PI;Lo;0;L;;;;;N;;;;; 1353;ETHIOPIC SYLLABLE PAA;Lo;0;L;;;;;N;;;;; 1354;ETHIOPIC SYLLABLE PEE;Lo;0;L;;;;;N;;;;; 1355;ETHIOPIC SYLLABLE PE;Lo;0;L;;;;;N;;;;; 1356;ETHIOPIC SYLLABLE PO;Lo;0;L;;;;;N;;;;; 1357;ETHIOPIC SYLLABLE PWA;Lo;0;L;;;;;N;;;;; 1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;; 1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;; 135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;; 135D;ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK;Mn;230;NSM;;;;;N;;;;; 135E;ETHIOPIC COMBINING VOWEL LENGTH MARK;Mn;230;NSM;;;;;N;;;;; 135F;ETHIOPIC COMBINING GEMINATION MARK;Mn;230;NSM;;;;;N;;;;; 1360;ETHIOPIC SECTION MARK;Po;0;L;;;;;N;;;;; 1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;; 1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;; 1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;; 1364;ETHIOPIC SEMICOLON;Po;0;L;;;;;N;;;;; 1365;ETHIOPIC COLON;Po;0;L;;;;;N;;;;; 1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;; 1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;; 1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;; 1369;ETHIOPIC DIGIT ONE;No;0;L;;;1;1;N;;;;; 136A;ETHIOPIC DIGIT TWO;No;0;L;;;2;2;N;;;;; 136B;ETHIOPIC DIGIT THREE;No;0;L;;;3;3;N;;;;; 136C;ETHIOPIC DIGIT FOUR;No;0;L;;;4;4;N;;;;; 136D;ETHIOPIC DIGIT FIVE;No;0;L;;;5;5;N;;;;; 136E;ETHIOPIC DIGIT SIX;No;0;L;;;6;6;N;;;;; 136F;ETHIOPIC DIGIT SEVEN;No;0;L;;;7;7;N;;;;; 1370;ETHIOPIC DIGIT EIGHT;No;0;L;;;8;8;N;;;;; 1371;ETHIOPIC DIGIT NINE;No;0;L;;;9;9;N;;;;; 1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;; 1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;; 1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;; 1375;ETHIOPIC NUMBER FORTY;No;0;L;;;;40;N;;;;; 1376;ETHIOPIC NUMBER FIFTY;No;0;L;;;;50;N;;;;; 1377;ETHIOPIC NUMBER SIXTY;No;0;L;;;;60;N;;;;; 1378;ETHIOPIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;; 1379;ETHIOPIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;; 137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;; 137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;; 137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;; 1380;ETHIOPIC SYLLABLE SEBATBEIT MWA;Lo;0;L;;;;;N;;;;; 1381;ETHIOPIC SYLLABLE MWI;Lo;0;L;;;;;N;;;;; 1382;ETHIOPIC SYLLABLE MWEE;Lo;0;L;;;;;N;;;;; 1383;ETHIOPIC SYLLABLE MWE;Lo;0;L;;;;;N;;;;; 1384;ETHIOPIC SYLLABLE SEBATBEIT BWA;Lo;0;L;;;;;N;;;;; 1385;ETHIOPIC SYLLABLE BWI;Lo;0;L;;;;;N;;;;; 1386;ETHIOPIC SYLLABLE BWEE;Lo;0;L;;;;;N;;;;; 1387;ETHIOPIC SYLLABLE BWE;Lo;0;L;;;;;N;;;;; 1388;ETHIOPIC SYLLABLE SEBATBEIT FWA;Lo;0;L;;;;;N;;;;; 1389;ETHIOPIC SYLLABLE FWI;Lo;0;L;;;;;N;;;;; 138A;ETHIOPIC SYLLABLE FWEE;Lo;0;L;;;;;N;;;;; 138B;ETHIOPIC SYLLABLE FWE;Lo;0;L;;;;;N;;;;; 138C;ETHIOPIC SYLLABLE SEBATBEIT PWA;Lo;0;L;;;;;N;;;;; 138D;ETHIOPIC SYLLABLE PWI;Lo;0;L;;;;;N;;;;; 138E;ETHIOPIC SYLLABLE PWEE;Lo;0;L;;;;;N;;;;; 138F;ETHIOPIC SYLLABLE PWE;Lo;0;L;;;;;N;;;;; 1390;ETHIOPIC TONAL MARK YIZET;So;0;ON;;;;;N;;;;; 1391;ETHIOPIC TONAL MARK DERET;So;0;ON;;;;;N;;;;; 1392;ETHIOPIC TONAL MARK RIKRIK;So;0;ON;;;;;N;;;;; 1393;ETHIOPIC TONAL MARK SHORT RIKRIK;So;0;ON;;;;;N;;;;; 1394;ETHIOPIC TONAL MARK DIFAT;So;0;ON;;;;;N;;;;; 1395;ETHIOPIC TONAL MARK KENAT;So;0;ON;;;;;N;;;;; 1396;ETHIOPIC TONAL MARK CHIRET;So;0;ON;;;;;N;;;;; 1397;ETHIOPIC TONAL MARK HIDET;So;0;ON;;;;;N;;;;; 1398;ETHIOPIC TONAL MARK DERET-HIDET;So;0;ON;;;;;N;;;;; 1399;ETHIOPIC TONAL MARK KURT;So;0;ON;;;;;N;;;;; 13A0;CHEROKEE LETTER A;Lu;0;L;;;;;N;;;;AB70; 13A1;CHEROKEE LETTER E;Lu;0;L;;;;;N;;;;AB71; 13A2;CHEROKEE LETTER I;Lu;0;L;;;;;N;;;;AB72; 13A3;CHEROKEE LETTER O;Lu;0;L;;;;;N;;;;AB73; 13A4;CHEROKEE LETTER U;Lu;0;L;;;;;N;;;;AB74; 13A5;CHEROKEE LETTER V;Lu;0;L;;;;;N;;;;AB75; 13A6;CHEROKEE LETTER GA;Lu;0;L;;;;;N;;;;AB76; 13A7;CHEROKEE LETTER KA;Lu;0;L;;;;;N;;;;AB77; 13A8;CHEROKEE LETTER GE;Lu;0;L;;;;;N;;;;AB78; 13A9;CHEROKEE LETTER GI;Lu;0;L;;;;;N;;;;AB79; 13AA;CHEROKEE LETTER GO;Lu;0;L;;;;;N;;;;AB7A; 13AB;CHEROKEE LETTER GU;Lu;0;L;;;;;N;;;;AB7B; 13AC;CHEROKEE LETTER GV;Lu;0;L;;;;;N;;;;AB7C; 13AD;CHEROKEE LETTER HA;Lu;0;L;;;;;N;;;;AB7D; 13AE;CHEROKEE LETTER HE;Lu;0;L;;;;;N;;;;AB7E; 13AF;CHEROKEE LETTER HI;Lu;0;L;;;;;N;;;;AB7F; 13B0;CHEROKEE LETTER HO;Lu;0;L;;;;;N;;;;AB80; 13B1;CHEROKEE LETTER HU;Lu;0;L;;;;;N;;;;AB81; 13B2;CHEROKEE LETTER HV;Lu;0;L;;;;;N;;;;AB82; 13B3;CHEROKEE LETTER LA;Lu;0;L;;;;;N;;;;AB83; 13B4;CHEROKEE LETTER LE;Lu;0;L;;;;;N;;;;AB84; 13B5;CHEROKEE LETTER LI;Lu;0;L;;;;;N;;;;AB85; 13B6;CHEROKEE LETTER LO;Lu;0;L;;;;;N;;;;AB86; 13B7;CHEROKEE LETTER LU;Lu;0;L;;;;;N;;;;AB87; 13B8;CHEROKEE LETTER LV;Lu;0;L;;;;;N;;;;AB88; 13B9;CHEROKEE LETTER MA;Lu;0;L;;;;;N;;;;AB89; 13BA;CHEROKEE LETTER ME;Lu;0;L;;;;;N;;;;AB8A; 13BB;CHEROKEE LETTER MI;Lu;0;L;;;;;N;;;;AB8B; 13BC;CHEROKEE LETTER MO;Lu;0;L;;;;;N;;;;AB8C; 13BD;CHEROKEE LETTER MU;Lu;0;L;;;;;N;;;;AB8D; 13BE;CHEROKEE LETTER NA;Lu;0;L;;;;;N;;;;AB8E; 13BF;CHEROKEE LETTER HNA;Lu;0;L;;;;;N;;;;AB8F; 13C0;CHEROKEE LETTER NAH;Lu;0;L;;;;;N;;;;AB90; 13C1;CHEROKEE LETTER NE;Lu;0;L;;;;;N;;;;AB91; 13C2;CHEROKEE LETTER NI;Lu;0;L;;;;;N;;;;AB92; 13C3;CHEROKEE LETTER NO;Lu;0;L;;;;;N;;;;AB93; 13C4;CHEROKEE LETTER NU;Lu;0;L;;;;;N;;;;AB94; 13C5;CHEROKEE LETTER NV;Lu;0;L;;;;;N;;;;AB95; 13C6;CHEROKEE LETTER QUA;Lu;0;L;;;;;N;;;;AB96; 13C7;CHEROKEE LETTER QUE;Lu;0;L;;;;;N;;;;AB97; 13C8;CHEROKEE LETTER QUI;Lu;0;L;;;;;N;;;;AB98; 13C9;CHEROKEE LETTER QUO;Lu;0;L;;;;;N;;;;AB99; 13CA;CHEROKEE LETTER QUU;Lu;0;L;;;;;N;;;;AB9A; 13CB;CHEROKEE LETTER QUV;Lu;0;L;;;;;N;;;;AB9B; 13CC;CHEROKEE LETTER SA;Lu;0;L;;;;;N;;;;AB9C; 13CD;CHEROKEE LETTER S;Lu;0;L;;;;;N;;;;AB9D; 13CE;CHEROKEE LETTER SE;Lu;0;L;;;;;N;;;;AB9E; 13CF;CHEROKEE LETTER SI;Lu;0;L;;;;;N;;;;AB9F; 13D0;CHEROKEE LETTER SO;Lu;0;L;;;;;N;;;;ABA0; 13D1;CHEROKEE LETTER SU;Lu;0;L;;;;;N;;;;ABA1; 13D2;CHEROKEE LETTER SV;Lu;0;L;;;;;N;;;;ABA2; 13D3;CHEROKEE LETTER DA;Lu;0;L;;;;;N;;;;ABA3; 13D4;CHEROKEE LETTER TA;Lu;0;L;;;;;N;;;;ABA4; 13D5;CHEROKEE LETTER DE;Lu;0;L;;;;;N;;;;ABA5; 13D6;CHEROKEE LETTER TE;Lu;0;L;;;;;N;;;;ABA6; 13D7;CHEROKEE LETTER DI;Lu;0;L;;;;;N;;;;ABA7; 13D8;CHEROKEE LETTER TI;Lu;0;L;;;;;N;;;;ABA8; 13D9;CHEROKEE LETTER DO;Lu;0;L;;;;;N;;;;ABA9; 13DA;CHEROKEE LETTER DU;Lu;0;L;;;;;N;;;;ABAA; 13DB;CHEROKEE LETTER DV;Lu;0;L;;;;;N;;;;ABAB; 13DC;CHEROKEE LETTER DLA;Lu;0;L;;;;;N;;;;ABAC; 13DD;CHEROKEE LETTER TLA;Lu;0;L;;;;;N;;;;ABAD; 13DE;CHEROKEE LETTER TLE;Lu;0;L;;;;;N;;;;ABAE; 13DF;CHEROKEE LETTER TLI;Lu;0;L;;;;;N;;;;ABAF; 13E0;CHEROKEE LETTER TLO;Lu;0;L;;;;;N;;;;ABB0; 13E1;CHEROKEE LETTER TLU;Lu;0;L;;;;;N;;;;ABB1; 13E2;CHEROKEE LETTER TLV;Lu;0;L;;;;;N;;;;ABB2; 13E3;CHEROKEE LETTER TSA;Lu;0;L;;;;;N;;;;ABB3; 13E4;CHEROKEE LETTER TSE;Lu;0;L;;;;;N;;;;ABB4; 13E5;CHEROKEE LETTER TSI;Lu;0;L;;;;;N;;;;ABB5; 13E6;CHEROKEE LETTER TSO;Lu;0;L;;;;;N;;;;ABB6; 13E7;CHEROKEE LETTER TSU;Lu;0;L;;;;;N;;;;ABB7; 13E8;CHEROKEE LETTER TSV;Lu;0;L;;;;;N;;;;ABB8; 13E9;CHEROKEE LETTER WA;Lu;0;L;;;;;N;;;;ABB9; 13EA;CHEROKEE LETTER WE;Lu;0;L;;;;;N;;;;ABBA; 13EB;CHEROKEE LETTER WI;Lu;0;L;;;;;N;;;;ABBB; 13EC;CHEROKEE LETTER WO;Lu;0;L;;;;;N;;;;ABBC; 13ED;CHEROKEE LETTER WU;Lu;0;L;;;;;N;;;;ABBD; 13EE;CHEROKEE LETTER WV;Lu;0;L;;;;;N;;;;ABBE; 13EF;CHEROKEE LETTER YA;Lu;0;L;;;;;N;;;;ABBF; 13F0;CHEROKEE LETTER YE;Lu;0;L;;;;;N;;;;13F8; 13F1;CHEROKEE LETTER YI;Lu;0;L;;;;;N;;;;13F9; 13F2;CHEROKEE LETTER YO;Lu;0;L;;;;;N;;;;13FA; 13F3;CHEROKEE LETTER YU;Lu;0;L;;;;;N;;;;13FB; 13F4;CHEROKEE LETTER YV;Lu;0;L;;;;;N;;;;13FC; 13F5;CHEROKEE LETTER MV;Lu;0;L;;;;;N;;;;13FD; 13F8;CHEROKEE SMALL LETTER YE;Ll;0;L;;;;;N;;;13F0;;13F0 13F9;CHEROKEE SMALL LETTER YI;Ll;0;L;;;;;N;;;13F1;;13F1 13FA;CHEROKEE SMALL LETTER YO;Ll;0;L;;;;;N;;;13F2;;13F2 13FB;CHEROKEE SMALL LETTER YU;Ll;0;L;;;;;N;;;13F3;;13F3 13FC;CHEROKEE SMALL LETTER YV;Ll;0;L;;;;;N;;;13F4;;13F4 13FD;CHEROKEE SMALL LETTER MV;Ll;0;L;;;;;N;;;13F5;;13F5 1400;CANADIAN SYLLABICS HYPHEN;Pd;0;ON;;;;;N;;;;; 1401;CANADIAN SYLLABICS E;Lo;0;L;;;;;N;;;;; 1402;CANADIAN SYLLABICS AAI;Lo;0;L;;;;;N;;;;; 1403;CANADIAN SYLLABICS I;Lo;0;L;;;;;N;;;;; 1404;CANADIAN SYLLABICS II;Lo;0;L;;;;;N;;;;; 1405;CANADIAN SYLLABICS O;Lo;0;L;;;;;N;;;;; 1406;CANADIAN SYLLABICS OO;Lo;0;L;;;;;N;;;;; 1407;CANADIAN SYLLABICS Y-CREE OO;Lo;0;L;;;;;N;;;;; 1408;CANADIAN SYLLABICS CARRIER EE;Lo;0;L;;;;;N;;;;; 1409;CANADIAN SYLLABICS CARRIER I;Lo;0;L;;;;;N;;;;; 140A;CANADIAN SYLLABICS A;Lo;0;L;;;;;N;;;;; 140B;CANADIAN SYLLABICS AA;Lo;0;L;;;;;N;;;;; 140C;CANADIAN SYLLABICS WE;Lo;0;L;;;;;N;;;;; 140D;CANADIAN SYLLABICS WEST-CREE WE;Lo;0;L;;;;;N;;;;; 140E;CANADIAN SYLLABICS WI;Lo;0;L;;;;;N;;;;; 140F;CANADIAN SYLLABICS WEST-CREE WI;Lo;0;L;;;;;N;;;;; 1410;CANADIAN SYLLABICS WII;Lo;0;L;;;;;N;;;;; 1411;CANADIAN SYLLABICS WEST-CREE WII;Lo;0;L;;;;;N;;;;; 1412;CANADIAN SYLLABICS WO;Lo;0;L;;;;;N;;;;; 1413;CANADIAN SYLLABICS WEST-CREE WO;Lo;0;L;;;;;N;;;;; 1414;CANADIAN SYLLABICS WOO;Lo;0;L;;;;;N;;;;; 1415;CANADIAN SYLLABICS WEST-CREE WOO;Lo;0;L;;;;;N;;;;; 1416;CANADIAN SYLLABICS NASKAPI WOO;Lo;0;L;;;;;N;;;;; 1417;CANADIAN SYLLABICS WA;Lo;0;L;;;;;N;;;;; 1418;CANADIAN SYLLABICS WEST-CREE WA;Lo;0;L;;;;;N;;;;; 1419;CANADIAN SYLLABICS WAA;Lo;0;L;;;;;N;;;;; 141A;CANADIAN SYLLABICS WEST-CREE WAA;Lo;0;L;;;;;N;;;;; 141B;CANADIAN SYLLABICS NASKAPI WAA;Lo;0;L;;;;;N;;;;; 141C;CANADIAN SYLLABICS AI;Lo;0;L;;;;;N;;;;; 141D;CANADIAN SYLLABICS Y-CREE W;Lo;0;L;;;;;N;;;;; 141E;CANADIAN SYLLABICS GLOTTAL STOP;Lo;0;L;;;;;N;;;;; 141F;CANADIAN SYLLABICS FINAL ACUTE;Lo;0;L;;;;;N;;;;; 1420;CANADIAN SYLLABICS FINAL GRAVE;Lo;0;L;;;;;N;;;;; 1421;CANADIAN SYLLABICS FINAL BOTTOM HALF RING;Lo;0;L;;;;;N;;;;; 1422;CANADIAN SYLLABICS FINAL TOP HALF RING;Lo;0;L;;;;;N;;;;; 1423;CANADIAN SYLLABICS FINAL RIGHT HALF RING;Lo;0;L;;;;;N;;;;; 1424;CANADIAN SYLLABICS FINAL RING;Lo;0;L;;;;;N;;;;; 1425;CANADIAN SYLLABICS FINAL DOUBLE ACUTE;Lo;0;L;;;;;N;;;;; 1426;CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES;Lo;0;L;;;;;N;;;;; 1427;CANADIAN SYLLABICS FINAL MIDDLE DOT;Lo;0;L;;;;;N;;;;; 1428;CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE;Lo;0;L;;;;;N;;;;; 1429;CANADIAN SYLLABICS FINAL PLUS;Lo;0;L;;;;;N;;;;; 142A;CANADIAN SYLLABICS FINAL DOWN TACK;Lo;0;L;;;;;N;;;;; 142B;CANADIAN SYLLABICS EN;Lo;0;L;;;;;N;;;;; 142C;CANADIAN SYLLABICS IN;Lo;0;L;;;;;N;;;;; 142D;CANADIAN SYLLABICS ON;Lo;0;L;;;;;N;;;;; 142E;CANADIAN SYLLABICS AN;Lo;0;L;;;;;N;;;;; 142F;CANADIAN SYLLABICS PE;Lo;0;L;;;;;N;;;;; 1430;CANADIAN SYLLABICS PAAI;Lo;0;L;;;;;N;;;;; 1431;CANADIAN SYLLABICS PI;Lo;0;L;;;;;N;;;;; 1432;CANADIAN SYLLABICS PII;Lo;0;L;;;;;N;;;;; 1433;CANADIAN SYLLABICS PO;Lo;0;L;;;;;N;;;;; 1434;CANADIAN SYLLABICS POO;Lo;0;L;;;;;N;;;;; 1435;CANADIAN SYLLABICS Y-CREE POO;Lo;0;L;;;;;N;;;;; 1436;CANADIAN SYLLABICS CARRIER HEE;Lo;0;L;;;;;N;;;;; 1437;CANADIAN SYLLABICS CARRIER HI;Lo;0;L;;;;;N;;;;; 1438;CANADIAN SYLLABICS PA;Lo;0;L;;;;;N;;;;; 1439;CANADIAN SYLLABICS PAA;Lo;0;L;;;;;N;;;;; 143A;CANADIAN SYLLABICS PWE;Lo;0;L;;;;;N;;;;; 143B;CANADIAN SYLLABICS WEST-CREE PWE;Lo;0;L;;;;;N;;;;; 143C;CANADIAN SYLLABICS PWI;Lo;0;L;;;;;N;;;;; 143D;CANADIAN SYLLABICS WEST-CREE PWI;Lo;0;L;;;;;N;;;;; 143E;CANADIAN SYLLABICS PWII;Lo;0;L;;;;;N;;;;; 143F;CANADIAN SYLLABICS WEST-CREE PWII;Lo;0;L;;;;;N;;;;; 1440;CANADIAN SYLLABICS PWO;Lo;0;L;;;;;N;;;;; 1441;CANADIAN SYLLABICS WEST-CREE PWO;Lo;0;L;;;;;N;;;;; 1442;CANADIAN SYLLABICS PWOO;Lo;0;L;;;;;N;;;;; 1443;CANADIAN SYLLABICS WEST-CREE PWOO;Lo;0;L;;;;;N;;;;; 1444;CANADIAN SYLLABICS PWA;Lo;0;L;;;;;N;;;;; 1445;CANADIAN SYLLABICS WEST-CREE PWA;Lo;0;L;;;;;N;;;;; 1446;CANADIAN SYLLABICS PWAA;Lo;0;L;;;;;N;;;;; 1447;CANADIAN SYLLABICS WEST-CREE PWAA;Lo;0;L;;;;;N;;;;; 1448;CANADIAN SYLLABICS Y-CREE PWAA;Lo;0;L;;;;;N;;;;; 1449;CANADIAN SYLLABICS P;Lo;0;L;;;;;N;;;;; 144A;CANADIAN SYLLABICS WEST-CREE P;Lo;0;L;;;;;N;;;;; 144B;CANADIAN SYLLABICS CARRIER H;Lo;0;L;;;;;N;;;;; 144C;CANADIAN SYLLABICS TE;Lo;0;L;;;;;N;;;;; 144D;CANADIAN SYLLABICS TAAI;Lo;0;L;;;;;N;;;;; 144E;CANADIAN SYLLABICS TI;Lo;0;L;;;;;N;;;;; 144F;CANADIAN SYLLABICS TII;Lo;0;L;;;;;N;;;;; 1450;CANADIAN SYLLABICS TO;Lo;0;L;;;;;N;;;;; 1451;CANADIAN SYLLABICS TOO;Lo;0;L;;;;;N;;;;; 1452;CANADIAN SYLLABICS Y-CREE TOO;Lo;0;L;;;;;N;;;;; 1453;CANADIAN SYLLABICS CARRIER DEE;Lo;0;L;;;;;N;;;;; 1454;CANADIAN SYLLABICS CARRIER DI;Lo;0;L;;;;;N;;;;; 1455;CANADIAN SYLLABICS TA;Lo;0;L;;;;;N;;;;; 1456;CANADIAN SYLLABICS TAA;Lo;0;L;;;;;N;;;;; 1457;CANADIAN SYLLABICS TWE;Lo;0;L;;;;;N;;;;; 1458;CANADIAN SYLLABICS WEST-CREE TWE;Lo;0;L;;;;;N;;;;; 1459;CANADIAN SYLLABICS TWI;Lo;0;L;;;;;N;;;;; 145A;CANADIAN SYLLABICS WEST-CREE TWI;Lo;0;L;;;;;N;;;;; 145B;CANADIAN SYLLABICS TWII;Lo;0;L;;;;;N;;;;; 145C;CANADIAN SYLLABICS WEST-CREE TWII;Lo;0;L;;;;;N;;;;; 145D;CANADIAN SYLLABICS TWO;Lo;0;L;;;;;N;;;;; 145E;CANADIAN SYLLABICS WEST-CREE TWO;Lo;0;L;;;;;N;;;;; 145F;CANADIAN SYLLABICS TWOO;Lo;0;L;;;;;N;;;;; 1460;CANADIAN SYLLABICS WEST-CREE TWOO;Lo;0;L;;;;;N;;;;; 1461;CANADIAN SYLLABICS TWA;Lo;0;L;;;;;N;;;;; 1462;CANADIAN SYLLABICS WEST-CREE TWA;Lo;0;L;;;;;N;;;;; 1463;CANADIAN SYLLABICS TWAA;Lo;0;L;;;;;N;;;;; 1464;CANADIAN SYLLABICS WEST-CREE TWAA;Lo;0;L;;;;;N;;;;; 1465;CANADIAN SYLLABICS NASKAPI TWAA;Lo;0;L;;;;;N;;;;; 1466;CANADIAN SYLLABICS T;Lo;0;L;;;;;N;;;;; 1467;CANADIAN SYLLABICS TTE;Lo;0;L;;;;;N;;;;; 1468;CANADIAN SYLLABICS TTI;Lo;0;L;;;;;N;;;;; 1469;CANADIAN SYLLABICS TTO;Lo;0;L;;;;;N;;;;; 146A;CANADIAN SYLLABICS TTA;Lo;0;L;;;;;N;;;;; 146B;CANADIAN SYLLABICS KE;Lo;0;L;;;;;N;;;;; 146C;CANADIAN SYLLABICS KAAI;Lo;0;L;;;;;N;;;;; 146D;CANADIAN SYLLABICS KI;Lo;0;L;;;;;N;;;;; 146E;CANADIAN SYLLABICS KII;Lo;0;L;;;;;N;;;;; 146F;CANADIAN SYLLABICS KO;Lo;0;L;;;;;N;;;;; 1470;CANADIAN SYLLABICS KOO;Lo;0;L;;;;;N;;;;; 1471;CANADIAN SYLLABICS Y-CREE KOO;Lo;0;L;;;;;N;;;;; 1472;CANADIAN SYLLABICS KA;Lo;0;L;;;;;N;;;;; 1473;CANADIAN SYLLABICS KAA;Lo;0;L;;;;;N;;;;; 1474;CANADIAN SYLLABICS KWE;Lo;0;L;;;;;N;;;;; 1475;CANADIAN SYLLABICS WEST-CREE KWE;Lo;0;L;;;;;N;;;;; 1476;CANADIAN SYLLABICS KWI;Lo;0;L;;;;;N;;;;; 1477;CANADIAN SYLLABICS WEST-CREE KWI;Lo;0;L;;;;;N;;;;; 1478;CANADIAN SYLLABICS KWII;Lo;0;L;;;;;N;;;;; 1479;CANADIAN SYLLABICS WEST-CREE KWII;Lo;0;L;;;;;N;;;;; 147A;CANADIAN SYLLABICS KWO;Lo;0;L;;;;;N;;;;; 147B;CANADIAN SYLLABICS WEST-CREE KWO;Lo;0;L;;;;;N;;;;; 147C;CANADIAN SYLLABICS KWOO;Lo;0;L;;;;;N;;;;; 147D;CANADIAN SYLLABICS WEST-CREE KWOO;Lo;0;L;;;;;N;;;;; 147E;CANADIAN SYLLABICS KWA;Lo;0;L;;;;;N;;;;; 147F;CANADIAN SYLLABICS WEST-CREE KWA;Lo;0;L;;;;;N;;;;; 1480;CANADIAN SYLLABICS KWAA;Lo;0;L;;;;;N;;;;; 1481;CANADIAN SYLLABICS WEST-CREE KWAA;Lo;0;L;;;;;N;;;;; 1482;CANADIAN SYLLABICS NASKAPI KWAA;Lo;0;L;;;;;N;;;;; 1483;CANADIAN SYLLABICS K;Lo;0;L;;;;;N;;;;; 1484;CANADIAN SYLLABICS KW;Lo;0;L;;;;;N;;;;; 1485;CANADIAN SYLLABICS SOUTH-SLAVEY KEH;Lo;0;L;;;;;N;;;;; 1486;CANADIAN SYLLABICS SOUTH-SLAVEY KIH;Lo;0;L;;;;;N;;;;; 1487;CANADIAN SYLLABICS SOUTH-SLAVEY KOH;Lo;0;L;;;;;N;;;;; 1488;CANADIAN SYLLABICS SOUTH-SLAVEY KAH;Lo;0;L;;;;;N;;;;; 1489;CANADIAN SYLLABICS CE;Lo;0;L;;;;;N;;;;; 148A;CANADIAN SYLLABICS CAAI;Lo;0;L;;;;;N;;;;; 148B;CANADIAN SYLLABICS CI;Lo;0;L;;;;;N;;;;; 148C;CANADIAN SYLLABICS CII;Lo;0;L;;;;;N;;;;; 148D;CANADIAN SYLLABICS CO;Lo;0;L;;;;;N;;;;; 148E;CANADIAN SYLLABICS COO;Lo;0;L;;;;;N;;;;; 148F;CANADIAN SYLLABICS Y-CREE COO;Lo;0;L;;;;;N;;;;; 1490;CANADIAN SYLLABICS CA;Lo;0;L;;;;;N;;;;; 1491;CANADIAN SYLLABICS CAA;Lo;0;L;;;;;N;;;;; 1492;CANADIAN SYLLABICS CWE;Lo;0;L;;;;;N;;;;; 1493;CANADIAN SYLLABICS WEST-CREE CWE;Lo;0;L;;;;;N;;;;; 1494;CANADIAN SYLLABICS CWI;Lo;0;L;;;;;N;;;;; 1495;CANADIAN SYLLABICS WEST-CREE CWI;Lo;0;L;;;;;N;;;;; 1496;CANADIAN SYLLABICS CWII;Lo;0;L;;;;;N;;;;; 1497;CANADIAN SYLLABICS WEST-CREE CWII;Lo;0;L;;;;;N;;;;; 1498;CANADIAN SYLLABICS CWO;Lo;0;L;;;;;N;;;;; 1499;CANADIAN SYLLABICS WEST-CREE CWO;Lo;0;L;;;;;N;;;;; 149A;CANADIAN SYLLABICS CWOO;Lo;0;L;;;;;N;;;;; 149B;CANADIAN SYLLABICS WEST-CREE CWOO;Lo;0;L;;;;;N;;;;; 149C;CANADIAN SYLLABICS CWA;Lo;0;L;;;;;N;;;;; 149D;CANADIAN SYLLABICS WEST-CREE CWA;Lo;0;L;;;;;N;;;;; 149E;CANADIAN SYLLABICS CWAA;Lo;0;L;;;;;N;;;;; 149F;CANADIAN SYLLABICS WEST-CREE CWAA;Lo;0;L;;;;;N;;;;; 14A0;CANADIAN SYLLABICS NASKAPI CWAA;Lo;0;L;;;;;N;;;;; 14A1;CANADIAN SYLLABICS C;Lo;0;L;;;;;N;;;;; 14A2;CANADIAN SYLLABICS SAYISI TH;Lo;0;L;;;;;N;;;;; 14A3;CANADIAN SYLLABICS ME;Lo;0;L;;;;;N;;;;; 14A4;CANADIAN SYLLABICS MAAI;Lo;0;L;;;;;N;;;;; 14A5;CANADIAN SYLLABICS MI;Lo;0;L;;;;;N;;;;; 14A6;CANADIAN SYLLABICS MII;Lo;0;L;;;;;N;;;;; 14A7;CANADIAN SYLLABICS MO;Lo;0;L;;;;;N;;;;; 14A8;CANADIAN SYLLABICS MOO;Lo;0;L;;;;;N;;;;; 14A9;CANADIAN SYLLABICS Y-CREE MOO;Lo;0;L;;;;;N;;;;; 14AA;CANADIAN SYLLABICS MA;Lo;0;L;;;;;N;;;;; 14AB;CANADIAN SYLLABICS MAA;Lo;0;L;;;;;N;;;;; 14AC;CANADIAN SYLLABICS MWE;Lo;0;L;;;;;N;;;;; 14AD;CANADIAN SYLLABICS WEST-CREE MWE;Lo;0;L;;;;;N;;;;; 14AE;CANADIAN SYLLABICS MWI;Lo;0;L;;;;;N;;;;; 14AF;CANADIAN SYLLABICS WEST-CREE MWI;Lo;0;L;;;;;N;;;;; 14B0;CANADIAN SYLLABICS MWII;Lo;0;L;;;;;N;;;;; 14B1;CANADIAN SYLLABICS WEST-CREE MWII;Lo;0;L;;;;;N;;;;; 14B2;CANADIAN SYLLABICS MWO;Lo;0;L;;;;;N;;;;; 14B3;CANADIAN SYLLABICS WEST-CREE MWO;Lo;0;L;;;;;N;;;;; 14B4;CANADIAN SYLLABICS MWOO;Lo;0;L;;;;;N;;;;; 14B5;CANADIAN SYLLABICS WEST-CREE MWOO;Lo;0;L;;;;;N;;;;; 14B6;CANADIAN SYLLABICS MWA;Lo;0;L;;;;;N;;;;; 14B7;CANADIAN SYLLABICS WEST-CREE MWA;Lo;0;L;;;;;N;;;;; 14B8;CANADIAN SYLLABICS MWAA;Lo;0;L;;;;;N;;;;; 14B9;CANADIAN SYLLABICS WEST-CREE MWAA;Lo;0;L;;;;;N;;;;; 14BA;CANADIAN SYLLABICS NASKAPI MWAA;Lo;0;L;;;;;N;;;;; 14BB;CANADIAN SYLLABICS M;Lo;0;L;;;;;N;;;;; 14BC;CANADIAN SYLLABICS WEST-CREE M;Lo;0;L;;;;;N;;;;; 14BD;CANADIAN SYLLABICS MH;Lo;0;L;;;;;N;;;;; 14BE;CANADIAN SYLLABICS ATHAPASCAN M;Lo;0;L;;;;;N;;;;; 14BF;CANADIAN SYLLABICS SAYISI M;Lo;0;L;;;;;N;;;;; 14C0;CANADIAN SYLLABICS NE;Lo;0;L;;;;;N;;;;; 14C1;CANADIAN SYLLABICS NAAI;Lo;0;L;;;;;N;;;;; 14C2;CANADIAN SYLLABICS NI;Lo;0;L;;;;;N;;;;; 14C3;CANADIAN SYLLABICS NII;Lo;0;L;;;;;N;;;;; 14C4;CANADIAN SYLLABICS NO;Lo;0;L;;;;;N;;;;; 14C5;CANADIAN SYLLABICS NOO;Lo;0;L;;;;;N;;;;; 14C6;CANADIAN SYLLABICS Y-CREE NOO;Lo;0;L;;;;;N;;;;; 14C7;CANADIAN SYLLABICS NA;Lo;0;L;;;;;N;;;;; 14C8;CANADIAN SYLLABICS NAA;Lo;0;L;;;;;N;;;;; 14C9;CANADIAN SYLLABICS NWE;Lo;0;L;;;;;N;;;;; 14CA;CANADIAN SYLLABICS WEST-CREE NWE;Lo;0;L;;;;;N;;;;; 14CB;CANADIAN SYLLABICS NWA;Lo;0;L;;;;;N;;;;; 14CC;CANADIAN SYLLABICS WEST-CREE NWA;Lo;0;L;;;;;N;;;;; 14CD;CANADIAN SYLLABICS NWAA;Lo;0;L;;;;;N;;;;; 14CE;CANADIAN SYLLABICS WEST-CREE NWAA;Lo;0;L;;;;;N;;;;; 14CF;CANADIAN SYLLABICS NASKAPI NWAA;Lo;0;L;;;;;N;;;;; 14D0;CANADIAN SYLLABICS N;Lo;0;L;;;;;N;;;;; 14D1;CANADIAN SYLLABICS CARRIER NG;Lo;0;L;;;;;N;;;;; 14D2;CANADIAN SYLLABICS NH;Lo;0;L;;;;;N;;;;; 14D3;CANADIAN SYLLABICS LE;Lo;0;L;;;;;N;;;;; 14D4;CANADIAN SYLLABICS LAAI;Lo;0;L;;;;;N;;;;; 14D5;CANADIAN SYLLABICS LI;Lo;0;L;;;;;N;;;;; 14D6;CANADIAN SYLLABICS LII;Lo;0;L;;;;;N;;;;; 14D7;CANADIAN SYLLABICS LO;Lo;0;L;;;;;N;;;;; 14D8;CANADIAN SYLLABICS LOO;Lo;0;L;;;;;N;;;;; 14D9;CANADIAN SYLLABICS Y-CREE LOO;Lo;0;L;;;;;N;;;;; 14DA;CANADIAN SYLLABICS LA;Lo;0;L;;;;;N;;;;; 14DB;CANADIAN SYLLABICS LAA;Lo;0;L;;;;;N;;;;; 14DC;CANADIAN SYLLABICS LWE;Lo;0;L;;;;;N;;;;; 14DD;CANADIAN SYLLABICS WEST-CREE LWE;Lo;0;L;;;;;N;;;;; 14DE;CANADIAN SYLLABICS LWI;Lo;0;L;;;;;N;;;;; 14DF;CANADIAN SYLLABICS WEST-CREE LWI;Lo;0;L;;;;;N;;;;; 14E0;CANADIAN SYLLABICS LWII;Lo;0;L;;;;;N;;;;; 14E1;CANADIAN SYLLABICS WEST-CREE LWII;Lo;0;L;;;;;N;;;;; 14E2;CANADIAN SYLLABICS LWO;Lo;0;L;;;;;N;;;;; 14E3;CANADIAN SYLLABICS WEST-CREE LWO;Lo;0;L;;;;;N;;;;; 14E4;CANADIAN SYLLABICS LWOO;Lo;0;L;;;;;N;;;;; 14E5;CANADIAN SYLLABICS WEST-CREE LWOO;Lo;0;L;;;;;N;;;;; 14E6;CANADIAN SYLLABICS LWA;Lo;0;L;;;;;N;;;;; 14E7;CANADIAN SYLLABICS WEST-CREE LWA;Lo;0;L;;;;;N;;;;; 14E8;CANADIAN SYLLABICS LWAA;Lo;0;L;;;;;N;;;;; 14E9;CANADIAN SYLLABICS WEST-CREE LWAA;Lo;0;L;;;;;N;;;;; 14EA;CANADIAN SYLLABICS L;Lo;0;L;;;;;N;;;;; 14EB;CANADIAN SYLLABICS WEST-CREE L;Lo;0;L;;;;;N;;;;; 14EC;CANADIAN SYLLABICS MEDIAL L;Lo;0;L;;;;;N;;;;; 14ED;CANADIAN SYLLABICS SE;Lo;0;L;;;;;N;;;;; 14EE;CANADIAN SYLLABICS SAAI;Lo;0;L;;;;;N;;;;; 14EF;CANADIAN SYLLABICS SI;Lo;0;L;;;;;N;;;;; 14F0;CANADIAN SYLLABICS SII;Lo;0;L;;;;;N;;;;; 14F1;CANADIAN SYLLABICS SO;Lo;0;L;;;;;N;;;;; 14F2;CANADIAN SYLLABICS SOO;Lo;0;L;;;;;N;;;;; 14F3;CANADIAN SYLLABICS Y-CREE SOO;Lo;0;L;;;;;N;;;;; 14F4;CANADIAN SYLLABICS SA;Lo;0;L;;;;;N;;;;; 14F5;CANADIAN SYLLABICS SAA;Lo;0;L;;;;;N;;;;; 14F6;CANADIAN SYLLABICS SWE;Lo;0;L;;;;;N;;;;; 14F7;CANADIAN SYLLABICS WEST-CREE SWE;Lo;0;L;;;;;N;;;;; 14F8;CANADIAN SYLLABICS SWI;Lo;0;L;;;;;N;;;;; 14F9;CANADIAN SYLLABICS WEST-CREE SWI;Lo;0;L;;;;;N;;;;; 14FA;CANADIAN SYLLABICS SWII;Lo;0;L;;;;;N;;;;; 14FB;CANADIAN SYLLABICS WEST-CREE SWII;Lo;0;L;;;;;N;;;;; 14FC;CANADIAN SYLLABICS SWO;Lo;0;L;;;;;N;;;;; 14FD;CANADIAN SYLLABICS WEST-CREE SWO;Lo;0;L;;;;;N;;;;; 14FE;CANADIAN SYLLABICS SWOO;Lo;0;L;;;;;N;;;;; 14FF;CANADIAN SYLLABICS WEST-CREE SWOO;Lo;0;L;;;;;N;;;;; 1500;CANADIAN SYLLABICS SWA;Lo;0;L;;;;;N;;;;; 1501;CANADIAN SYLLABICS WEST-CREE SWA;Lo;0;L;;;;;N;;;;; 1502;CANADIAN SYLLABICS SWAA;Lo;0;L;;;;;N;;;;; 1503;CANADIAN SYLLABICS WEST-CREE SWAA;Lo;0;L;;;;;N;;;;; 1504;CANADIAN SYLLABICS NASKAPI SWAA;Lo;0;L;;;;;N;;;;; 1505;CANADIAN SYLLABICS S;Lo;0;L;;;;;N;;;;; 1506;CANADIAN SYLLABICS ATHAPASCAN S;Lo;0;L;;;;;N;;;;; 1507;CANADIAN SYLLABICS SW;Lo;0;L;;;;;N;;;;; 1508;CANADIAN SYLLABICS BLACKFOOT S;Lo;0;L;;;;;N;;;;; 1509;CANADIAN SYLLABICS MOOSE-CREE SK;Lo;0;L;;;;;N;;;;; 150A;CANADIAN SYLLABICS NASKAPI SKW;Lo;0;L;;;;;N;;;;; 150B;CANADIAN SYLLABICS NASKAPI S-W;Lo;0;L;;;;;N;;;;; 150C;CANADIAN SYLLABICS NASKAPI SPWA;Lo;0;L;;;;;N;;;;; 150D;CANADIAN SYLLABICS NASKAPI STWA;Lo;0;L;;;;;N;;;;; 150E;CANADIAN SYLLABICS NASKAPI SKWA;Lo;0;L;;;;;N;;;;; 150F;CANADIAN SYLLABICS NASKAPI SCWA;Lo;0;L;;;;;N;;;;; 1510;CANADIAN SYLLABICS SHE;Lo;0;L;;;;;N;;;;; 1511;CANADIAN SYLLABICS SHI;Lo;0;L;;;;;N;;;;; 1512;CANADIAN SYLLABICS SHII;Lo;0;L;;;;;N;;;;; 1513;CANADIAN SYLLABICS SHO;Lo;0;L;;;;;N;;;;; 1514;CANADIAN SYLLABICS SHOO;Lo;0;L;;;;;N;;;;; 1515;CANADIAN SYLLABICS SHA;Lo;0;L;;;;;N;;;;; 1516;CANADIAN SYLLABICS SHAA;Lo;0;L;;;;;N;;;;; 1517;CANADIAN SYLLABICS SHWE;Lo;0;L;;;;;N;;;;; 1518;CANADIAN SYLLABICS WEST-CREE SHWE;Lo;0;L;;;;;N;;;;; 1519;CANADIAN SYLLABICS SHWI;Lo;0;L;;;;;N;;;;; 151A;CANADIAN SYLLABICS WEST-CREE SHWI;Lo;0;L;;;;;N;;;;; 151B;CANADIAN SYLLABICS SHWII;Lo;0;L;;;;;N;;;;; 151C;CANADIAN SYLLABICS WEST-CREE SHWII;Lo;0;L;;;;;N;;;;; 151D;CANADIAN SYLLABICS SHWO;Lo;0;L;;;;;N;;;;; 151E;CANADIAN SYLLABICS WEST-CREE SHWO;Lo;0;L;;;;;N;;;;; 151F;CANADIAN SYLLABICS SHWOO;Lo;0;L;;;;;N;;;;; 1520;CANADIAN SYLLABICS WEST-CREE SHWOO;Lo;0;L;;;;;N;;;;; 1521;CANADIAN SYLLABICS SHWA;Lo;0;L;;;;;N;;;;; 1522;CANADIAN SYLLABICS WEST-CREE SHWA;Lo;0;L;;;;;N;;;;; 1523;CANADIAN SYLLABICS SHWAA;Lo;0;L;;;;;N;;;;; 1524;CANADIAN SYLLABICS WEST-CREE SHWAA;Lo;0;L;;;;;N;;;;; 1525;CANADIAN SYLLABICS SH;Lo;0;L;;;;;N;;;;; 1526;CANADIAN SYLLABICS YE;Lo;0;L;;;;;N;;;;; 1527;CANADIAN SYLLABICS YAAI;Lo;0;L;;;;;N;;;;; 1528;CANADIAN SYLLABICS YI;Lo;0;L;;;;;N;;;;; 1529;CANADIAN SYLLABICS YII;Lo;0;L;;;;;N;;;;; 152A;CANADIAN SYLLABICS YO;Lo;0;L;;;;;N;;;;; 152B;CANADIAN SYLLABICS YOO;Lo;0;L;;;;;N;;;;; 152C;CANADIAN SYLLABICS Y-CREE YOO;Lo;0;L;;;;;N;;;;; 152D;CANADIAN SYLLABICS YA;Lo;0;L;;;;;N;;;;; 152E;CANADIAN SYLLABICS YAA;Lo;0;L;;;;;N;;;;; 152F;CANADIAN SYLLABICS YWE;Lo;0;L;;;;;N;;;;; 1530;CANADIAN SYLLABICS WEST-CREE YWE;Lo;0;L;;;;;N;;;;; 1531;CANADIAN SYLLABICS YWI;Lo;0;L;;;;;N;;;;; 1532;CANADIAN SYLLABICS WEST-CREE YWI;Lo;0;L;;;;;N;;;;; 1533;CANADIAN SYLLABICS YWII;Lo;0;L;;;;;N;;;;; 1534;CANADIAN SYLLABICS WEST-CREE YWII;Lo;0;L;;;;;N;;;;; 1535;CANADIAN SYLLABICS YWO;Lo;0;L;;;;;N;;;;; 1536;CANADIAN SYLLABICS WEST-CREE YWO;Lo;0;L;;;;;N;;;;; 1537;CANADIAN SYLLABICS YWOO;Lo;0;L;;;;;N;;;;; 1538;CANADIAN SYLLABICS WEST-CREE YWOO;Lo;0;L;;;;;N;;;;; 1539;CANADIAN SYLLABICS YWA;Lo;0;L;;;;;N;;;;; 153A;CANADIAN SYLLABICS WEST-CREE YWA;Lo;0;L;;;;;N;;;;; 153B;CANADIAN SYLLABICS YWAA;Lo;0;L;;;;;N;;;;; 153C;CANADIAN SYLLABICS WEST-CREE YWAA;Lo;0;L;;;;;N;;;;; 153D;CANADIAN SYLLABICS NASKAPI YWAA;Lo;0;L;;;;;N;;;;; 153E;CANADIAN SYLLABICS Y;Lo;0;L;;;;;N;;;;; 153F;CANADIAN SYLLABICS BIBLE-CREE Y;Lo;0;L;;;;;N;;;;; 1540;CANADIAN SYLLABICS WEST-CREE Y;Lo;0;L;;;;;N;;;;; 1541;CANADIAN SYLLABICS SAYISI YI;Lo;0;L;;;;;N;;;;; 1542;CANADIAN SYLLABICS RE;Lo;0;L;;;;;N;;;;; 1543;CANADIAN SYLLABICS R-CREE RE;Lo;0;L;;;;;N;;;;; 1544;CANADIAN SYLLABICS WEST-CREE LE;Lo;0;L;;;;;N;;;;; 1545;CANADIAN SYLLABICS RAAI;Lo;0;L;;;;;N;;;;; 1546;CANADIAN SYLLABICS RI;Lo;0;L;;;;;N;;;;; 1547;CANADIAN SYLLABICS RII;Lo;0;L;;;;;N;;;;; 1548;CANADIAN SYLLABICS RO;Lo;0;L;;;;;N;;;;; 1549;CANADIAN SYLLABICS ROO;Lo;0;L;;;;;N;;;;; 154A;CANADIAN SYLLABICS WEST-CREE LO;Lo;0;L;;;;;N;;;;; 154B;CANADIAN SYLLABICS RA;Lo;0;L;;;;;N;;;;; 154C;CANADIAN SYLLABICS RAA;Lo;0;L;;;;;N;;;;; 154D;CANADIAN SYLLABICS WEST-CREE LA;Lo;0;L;;;;;N;;;;; 154E;CANADIAN SYLLABICS RWAA;Lo;0;L;;;;;N;;;;; 154F;CANADIAN SYLLABICS WEST-CREE RWAA;Lo;0;L;;;;;N;;;;; 1550;CANADIAN SYLLABICS R;Lo;0;L;;;;;N;;;;; 1551;CANADIAN SYLLABICS WEST-CREE R;Lo;0;L;;;;;N;;;;; 1552;CANADIAN SYLLABICS MEDIAL R;Lo;0;L;;;;;N;;;;; 1553;CANADIAN SYLLABICS FE;Lo;0;L;;;;;N;;;;; 1554;CANADIAN SYLLABICS FAAI;Lo;0;L;;;;;N;;;;; 1555;CANADIAN SYLLABICS FI;Lo;0;L;;;;;N;;;;; 1556;CANADIAN SYLLABICS FII;Lo;0;L;;;;;N;;;;; 1557;CANADIAN SYLLABICS FO;Lo;0;L;;;;;N;;;;; 1558;CANADIAN SYLLABICS FOO;Lo;0;L;;;;;N;;;;; 1559;CANADIAN SYLLABICS FA;Lo;0;L;;;;;N;;;;; 155A;CANADIAN SYLLABICS FAA;Lo;0;L;;;;;N;;;;; 155B;CANADIAN SYLLABICS FWAA;Lo;0;L;;;;;N;;;;; 155C;CANADIAN SYLLABICS WEST-CREE FWAA;Lo;0;L;;;;;N;;;;; 155D;CANADIAN SYLLABICS F;Lo;0;L;;;;;N;;;;; 155E;CANADIAN SYLLABICS THE;Lo;0;L;;;;;N;;;;; 155F;CANADIAN SYLLABICS N-CREE THE;Lo;0;L;;;;;N;;;;; 1560;CANADIAN SYLLABICS THI;Lo;0;L;;;;;N;;;;; 1561;CANADIAN SYLLABICS N-CREE THI;Lo;0;L;;;;;N;;;;; 1562;CANADIAN SYLLABICS THII;Lo;0;L;;;;;N;;;;; 1563;CANADIAN SYLLABICS N-CREE THII;Lo;0;L;;;;;N;;;;; 1564;CANADIAN SYLLABICS THO;Lo;0;L;;;;;N;;;;; 1565;CANADIAN SYLLABICS THOO;Lo;0;L;;;;;N;;;;; 1566;CANADIAN SYLLABICS THA;Lo;0;L;;;;;N;;;;; 1567;CANADIAN SYLLABICS THAA;Lo;0;L;;;;;N;;;;; 1568;CANADIAN SYLLABICS THWAA;Lo;0;L;;;;;N;;;;; 1569;CANADIAN SYLLABICS WEST-CREE THWAA;Lo;0;L;;;;;N;;;;; 156A;CANADIAN SYLLABICS TH;Lo;0;L;;;;;N;;;;; 156B;CANADIAN SYLLABICS TTHE;Lo;0;L;;;;;N;;;;; 156C;CANADIAN SYLLABICS TTHI;Lo;0;L;;;;;N;;;;; 156D;CANADIAN SYLLABICS TTHO;Lo;0;L;;;;;N;;;;; 156E;CANADIAN SYLLABICS TTHA;Lo;0;L;;;;;N;;;;; 156F;CANADIAN SYLLABICS TTH;Lo;0;L;;;;;N;;;;; 1570;CANADIAN SYLLABICS TYE;Lo;0;L;;;;;N;;;;; 1571;CANADIAN SYLLABICS TYI;Lo;0;L;;;;;N;;;;; 1572;CANADIAN SYLLABICS TYO;Lo;0;L;;;;;N;;;;; 1573;CANADIAN SYLLABICS TYA;Lo;0;L;;;;;N;;;;; 1574;CANADIAN SYLLABICS NUNAVIK HE;Lo;0;L;;;;;N;;;;; 1575;CANADIAN SYLLABICS NUNAVIK HI;Lo;0;L;;;;;N;;;;; 1576;CANADIAN SYLLABICS NUNAVIK HII;Lo;0;L;;;;;N;;;;; 1577;CANADIAN SYLLABICS NUNAVIK HO;Lo;0;L;;;;;N;;;;; 1578;CANADIAN SYLLABICS NUNAVIK HOO;Lo;0;L;;;;;N;;;;; 1579;CANADIAN SYLLABICS NUNAVIK HA;Lo;0;L;;;;;N;;;;; 157A;CANADIAN SYLLABICS NUNAVIK HAA;Lo;0;L;;;;;N;;;;; 157B;CANADIAN SYLLABICS NUNAVIK H;Lo;0;L;;;;;N;;;;; 157C;CANADIAN SYLLABICS NUNAVUT H;Lo;0;L;;;;;N;;;;; 157D;CANADIAN SYLLABICS HK;Lo;0;L;;;;;N;;;;; 157E;CANADIAN SYLLABICS QAAI;Lo;0;L;;;;;N;;;;; 157F;CANADIAN SYLLABICS QI;Lo;0;L;;;;;N;;;;; 1580;CANADIAN SYLLABICS QII;Lo;0;L;;;;;N;;;;; 1581;CANADIAN SYLLABICS QO;Lo;0;L;;;;;N;;;;; 1582;CANADIAN SYLLABICS QOO;Lo;0;L;;;;;N;;;;; 1583;CANADIAN SYLLABICS QA;Lo;0;L;;;;;N;;;;; 1584;CANADIAN SYLLABICS QAA;Lo;0;L;;;;;N;;;;; 1585;CANADIAN SYLLABICS Q;Lo;0;L;;;;;N;;;;; 1586;CANADIAN SYLLABICS TLHE;Lo;0;L;;;;;N;;;;; 1587;CANADIAN SYLLABICS TLHI;Lo;0;L;;;;;N;;;;; 1588;CANADIAN SYLLABICS TLHO;Lo;0;L;;;;;N;;;;; 1589;CANADIAN SYLLABICS TLHA;Lo;0;L;;;;;N;;;;; 158A;CANADIAN SYLLABICS WEST-CREE RE;Lo;0;L;;;;;N;;;;; 158B;CANADIAN SYLLABICS WEST-CREE RI;Lo;0;L;;;;;N;;;;; 158C;CANADIAN SYLLABICS WEST-CREE RO;Lo;0;L;;;;;N;;;;; 158D;CANADIAN SYLLABICS WEST-CREE RA;Lo;0;L;;;;;N;;;;; 158E;CANADIAN SYLLABICS NGAAI;Lo;0;L;;;;;N;;;;; 158F;CANADIAN SYLLABICS NGI;Lo;0;L;;;;;N;;;;; 1590;CANADIAN SYLLABICS NGII;Lo;0;L;;;;;N;;;;; 1591;CANADIAN SYLLABICS NGO;Lo;0;L;;;;;N;;;;; 1592;CANADIAN SYLLABICS NGOO;Lo;0;L;;;;;N;;;;; 1593;CANADIAN SYLLABICS NGA;Lo;0;L;;;;;N;;;;; 1594;CANADIAN SYLLABICS NGAA;Lo;0;L;;;;;N;;;;; 1595;CANADIAN SYLLABICS NG;Lo;0;L;;;;;N;;;;; 1596;CANADIAN SYLLABICS NNG;Lo;0;L;;;;;N;;;;; 1597;CANADIAN SYLLABICS SAYISI SHE;Lo;0;L;;;;;N;;;;; 1598;CANADIAN SYLLABICS SAYISI SHI;Lo;0;L;;;;;N;;;;; 1599;CANADIAN SYLLABICS SAYISI SHO;Lo;0;L;;;;;N;;;;; 159A;CANADIAN SYLLABICS SAYISI SHA;Lo;0;L;;;;;N;;;;; 159B;CANADIAN SYLLABICS WOODS-CREE THE;Lo;0;L;;;;;N;;;;; 159C;CANADIAN SYLLABICS WOODS-CREE THI;Lo;0;L;;;;;N;;;;; 159D;CANADIAN SYLLABICS WOODS-CREE THO;Lo;0;L;;;;;N;;;;; 159E;CANADIAN SYLLABICS WOODS-CREE THA;Lo;0;L;;;;;N;;;;; 159F;CANADIAN SYLLABICS WOODS-CREE TH;Lo;0;L;;;;;N;;;;; 15A0;CANADIAN SYLLABICS LHI;Lo;0;L;;;;;N;;;;; 15A1;CANADIAN SYLLABICS LHII;Lo;0;L;;;;;N;;;;; 15A2;CANADIAN SYLLABICS LHO;Lo;0;L;;;;;N;;;;; 15A3;CANADIAN SYLLABICS LHOO;Lo;0;L;;;;;N;;;;; 15A4;CANADIAN SYLLABICS LHA;Lo;0;L;;;;;N;;;;; 15A5;CANADIAN SYLLABICS LHAA;Lo;0;L;;;;;N;;;;; 15A6;CANADIAN SYLLABICS LH;Lo;0;L;;;;;N;;;;; 15A7;CANADIAN SYLLABICS TH-CREE THE;Lo;0;L;;;;;N;;;;; 15A8;CANADIAN SYLLABICS TH-CREE THI;Lo;0;L;;;;;N;;;;; 15A9;CANADIAN SYLLABICS TH-CREE THII;Lo;0;L;;;;;N;;;;; 15AA;CANADIAN SYLLABICS TH-CREE THO;Lo;0;L;;;;;N;;;;; 15AB;CANADIAN SYLLABICS TH-CREE THOO;Lo;0;L;;;;;N;;;;; 15AC;CANADIAN SYLLABICS TH-CREE THA;Lo;0;L;;;;;N;;;;; 15AD;CANADIAN SYLLABICS TH-CREE THAA;Lo;0;L;;;;;N;;;;; 15AE;CANADIAN SYLLABICS TH-CREE TH;Lo;0;L;;;;;N;;;;; 15AF;CANADIAN SYLLABICS AIVILIK B;Lo;0;L;;;;;N;;;;; 15B0;CANADIAN SYLLABICS BLACKFOOT E;Lo;0;L;;;;;N;;;;; 15B1;CANADIAN SYLLABICS BLACKFOOT I;Lo;0;L;;;;;N;;;;; 15B2;CANADIAN SYLLABICS BLACKFOOT O;Lo;0;L;;;;;N;;;;; 15B3;CANADIAN SYLLABICS BLACKFOOT A;Lo;0;L;;;;;N;;;;; 15B4;CANADIAN SYLLABICS BLACKFOOT WE;Lo;0;L;;;;;N;;;;; 15B5;CANADIAN SYLLABICS BLACKFOOT WI;Lo;0;L;;;;;N;;;;; 15B6;CANADIAN SYLLABICS BLACKFOOT WO;Lo;0;L;;;;;N;;;;; 15B7;CANADIAN SYLLABICS BLACKFOOT WA;Lo;0;L;;;;;N;;;;; 15B8;CANADIAN SYLLABICS BLACKFOOT NE;Lo;0;L;;;;;N;;;;; 15B9;CANADIAN SYLLABICS BLACKFOOT NI;Lo;0;L;;;;;N;;;;; 15BA;CANADIAN SYLLABICS BLACKFOOT NO;Lo;0;L;;;;;N;;;;; 15BB;CANADIAN SYLLABICS BLACKFOOT NA;Lo;0;L;;;;;N;;;;; 15BC;CANADIAN SYLLABICS BLACKFOOT KE;Lo;0;L;;;;;N;;;;; 15BD;CANADIAN SYLLABICS BLACKFOOT KI;Lo;0;L;;;;;N;;;;; 15BE;CANADIAN SYLLABICS BLACKFOOT KO;Lo;0;L;;;;;N;;;;; 15BF;CANADIAN SYLLABICS BLACKFOOT KA;Lo;0;L;;;;;N;;;;; 15C0;CANADIAN SYLLABICS SAYISI HE;Lo;0;L;;;;;N;;;;; 15C1;CANADIAN SYLLABICS SAYISI HI;Lo;0;L;;;;;N;;;;; 15C2;CANADIAN SYLLABICS SAYISI HO;Lo;0;L;;;;;N;;;;; 15C3;CANADIAN SYLLABICS SAYISI HA;Lo;0;L;;;;;N;;;;; 15C4;CANADIAN SYLLABICS CARRIER GHU;Lo;0;L;;;;;N;;;;; 15C5;CANADIAN SYLLABICS CARRIER GHO;Lo;0;L;;;;;N;;;;; 15C6;CANADIAN SYLLABICS CARRIER GHE;Lo;0;L;;;;;N;;;;; 15C7;CANADIAN SYLLABICS CARRIER GHEE;Lo;0;L;;;;;N;;;;; 15C8;CANADIAN SYLLABICS CARRIER GHI;Lo;0;L;;;;;N;;;;; 15C9;CANADIAN SYLLABICS CARRIER GHA;Lo;0;L;;;;;N;;;;; 15CA;CANADIAN SYLLABICS CARRIER RU;Lo;0;L;;;;;N;;;;; 15CB;CANADIAN SYLLABICS CARRIER RO;Lo;0;L;;;;;N;;;;; 15CC;CANADIAN SYLLABICS CARRIER RE;Lo;0;L;;;;;N;;;;; 15CD;CANADIAN SYLLABICS CARRIER REE;Lo;0;L;;;;;N;;;;; 15CE;CANADIAN SYLLABICS CARRIER RI;Lo;0;L;;;;;N;;;;; 15CF;CANADIAN SYLLABICS CARRIER RA;Lo;0;L;;;;;N;;;;; 15D0;CANADIAN SYLLABICS CARRIER WU;Lo;0;L;;;;;N;;;;; 15D1;CANADIAN SYLLABICS CARRIER WO;Lo;0;L;;;;;N;;;;; 15D2;CANADIAN SYLLABICS CARRIER WE;Lo;0;L;;;;;N;;;;; 15D3;CANADIAN SYLLABICS CARRIER WEE;Lo;0;L;;;;;N;;;;; 15D4;CANADIAN SYLLABICS CARRIER WI;Lo;0;L;;;;;N;;;;; 15D5;CANADIAN SYLLABICS CARRIER WA;Lo;0;L;;;;;N;;;;; 15D6;CANADIAN SYLLABICS CARRIER HWU;Lo;0;L;;;;;N;;;;; 15D7;CANADIAN SYLLABICS CARRIER HWO;Lo;0;L;;;;;N;;;;; 15D8;CANADIAN SYLLABICS CARRIER HWE;Lo;0;L;;;;;N;;;;; 15D9;CANADIAN SYLLABICS CARRIER HWEE;Lo;0;L;;;;;N;;;;; 15DA;CANADIAN SYLLABICS CARRIER HWI;Lo;0;L;;;;;N;;;;; 15DB;CANADIAN SYLLABICS CARRIER HWA;Lo;0;L;;;;;N;;;;; 15DC;CANADIAN SYLLABICS CARRIER THU;Lo;0;L;;;;;N;;;;; 15DD;CANADIAN SYLLABICS CARRIER THO;Lo;0;L;;;;;N;;;;; 15DE;CANADIAN SYLLABICS CARRIER THE;Lo;0;L;;;;;N;;;;; 15DF;CANADIAN SYLLABICS CARRIER THEE;Lo;0;L;;;;;N;;;;; 15E0;CANADIAN SYLLABICS CARRIER THI;Lo;0;L;;;;;N;;;;; 15E1;CANADIAN SYLLABICS CARRIER THA;Lo;0;L;;;;;N;;;;; 15E2;CANADIAN SYLLABICS CARRIER TTU;Lo;0;L;;;;;N;;;;; 15E3;CANADIAN SYLLABICS CARRIER TTO;Lo;0;L;;;;;N;;;;; 15E4;CANADIAN SYLLABICS CARRIER TTE;Lo;0;L;;;;;N;;;;; 15E5;CANADIAN SYLLABICS CARRIER TTEE;Lo;0;L;;;;;N;;;;; 15E6;CANADIAN SYLLABICS CARRIER TTI;Lo;0;L;;;;;N;;;;; 15E7;CANADIAN SYLLABICS CARRIER TTA;Lo;0;L;;;;;N;;;;; 15E8;CANADIAN SYLLABICS CARRIER PU;Lo;0;L;;;;;N;;;;; 15E9;CANADIAN SYLLABICS CARRIER PO;Lo;0;L;;;;;N;;;;; 15EA;CANADIAN SYLLABICS CARRIER PE;Lo;0;L;;;;;N;;;;; 15EB;CANADIAN SYLLABICS CARRIER PEE;Lo;0;L;;;;;N;;;;; 15EC;CANADIAN SYLLABICS CARRIER PI;Lo;0;L;;;;;N;;;;; 15ED;CANADIAN SYLLABICS CARRIER PA;Lo;0;L;;;;;N;;;;; 15EE;CANADIAN SYLLABICS CARRIER P;Lo;0;L;;;;;N;;;;; 15EF;CANADIAN SYLLABICS CARRIER GU;Lo;0;L;;;;;N;;;;; 15F0;CANADIAN SYLLABICS CARRIER GO;Lo;0;L;;;;;N;;;;; 15F1;CANADIAN SYLLABICS CARRIER GE;Lo;0;L;;;;;N;;;;; 15F2;CANADIAN SYLLABICS CARRIER GEE;Lo;0;L;;;;;N;;;;; 15F3;CANADIAN SYLLABICS CARRIER GI;Lo;0;L;;;;;N;;;;; 15F4;CANADIAN SYLLABICS CARRIER GA;Lo;0;L;;;;;N;;;;; 15F5;CANADIAN SYLLABICS CARRIER KHU;Lo;0;L;;;;;N;;;;; 15F6;CANADIAN SYLLABICS CARRIER KHO;Lo;0;L;;;;;N;;;;; 15F7;CANADIAN SYLLABICS CARRIER KHE;Lo;0;L;;;;;N;;;;; 15F8;CANADIAN SYLLABICS CARRIER KHEE;Lo;0;L;;;;;N;;;;; 15F9;CANADIAN SYLLABICS CARRIER KHI;Lo;0;L;;;;;N;;;;; 15FA;CANADIAN SYLLABICS CARRIER KHA;Lo;0;L;;;;;N;;;;; 15FB;CANADIAN SYLLABICS CARRIER KKU;Lo;0;L;;;;;N;;;;; 15FC;CANADIAN SYLLABICS CARRIER KKO;Lo;0;L;;;;;N;;;;; 15FD;CANADIAN SYLLABICS CARRIER KKE;Lo;0;L;;;;;N;;;;; 15FE;CANADIAN SYLLABICS CARRIER KKEE;Lo;0;L;;;;;N;;;;; 15FF;CANADIAN SYLLABICS CARRIER KKI;Lo;0;L;;;;;N;;;;; 1600;CANADIAN SYLLABICS CARRIER KKA;Lo;0;L;;;;;N;;;;; 1601;CANADIAN SYLLABICS CARRIER KK;Lo;0;L;;;;;N;;;;; 1602;CANADIAN SYLLABICS CARRIER NU;Lo;0;L;;;;;N;;;;; 1603;CANADIAN SYLLABICS CARRIER NO;Lo;0;L;;;;;N;;;;; 1604;CANADIAN SYLLABICS CARRIER NE;Lo;0;L;;;;;N;;;;; 1605;CANADIAN SYLLABICS CARRIER NEE;Lo;0;L;;;;;N;;;;; 1606;CANADIAN SYLLABICS CARRIER NI;Lo;0;L;;;;;N;;;;; 1607;CANADIAN SYLLABICS CARRIER NA;Lo;0;L;;;;;N;;;;; 1608;CANADIAN SYLLABICS CARRIER MU;Lo;0;L;;;;;N;;;;; 1609;CANADIAN SYLLABICS CARRIER MO;Lo;0;L;;;;;N;;;;; 160A;CANADIAN SYLLABICS CARRIER ME;Lo;0;L;;;;;N;;;;; 160B;CANADIAN SYLLABICS CARRIER MEE;Lo;0;L;;;;;N;;;;; 160C;CANADIAN SYLLABICS CARRIER MI;Lo;0;L;;;;;N;;;;; 160D;CANADIAN SYLLABICS CARRIER MA;Lo;0;L;;;;;N;;;;; 160E;CANADIAN SYLLABICS CARRIER YU;Lo;0;L;;;;;N;;;;; 160F;CANADIAN SYLLABICS CARRIER YO;Lo;0;L;;;;;N;;;;; 1610;CANADIAN SYLLABICS CARRIER YE;Lo;0;L;;;;;N;;;;; 1611;CANADIAN SYLLABICS CARRIER YEE;Lo;0;L;;;;;N;;;;; 1612;CANADIAN SYLLABICS CARRIER YI;Lo;0;L;;;;;N;;;;; 1613;CANADIAN SYLLABICS CARRIER YA;Lo;0;L;;;;;N;;;;; 1614;CANADIAN SYLLABICS CARRIER JU;Lo;0;L;;;;;N;;;;; 1615;CANADIAN SYLLABICS SAYISI JU;Lo;0;L;;;;;N;;;;; 1616;CANADIAN SYLLABICS CARRIER JO;Lo;0;L;;;;;N;;;;; 1617;CANADIAN SYLLABICS CARRIER JE;Lo;0;L;;;;;N;;;;; 1618;CANADIAN SYLLABICS CARRIER JEE;Lo;0;L;;;;;N;;;;; 1619;CANADIAN SYLLABICS CARRIER JI;Lo;0;L;;;;;N;;;;; 161A;CANADIAN SYLLABICS SAYISI JI;Lo;0;L;;;;;N;;;;; 161B;CANADIAN SYLLABICS CARRIER JA;Lo;0;L;;;;;N;;;;; 161C;CANADIAN SYLLABICS CARRIER JJU;Lo;0;L;;;;;N;;;;; 161D;CANADIAN SYLLABICS CARRIER JJO;Lo;0;L;;;;;N;;;;; 161E;CANADIAN SYLLABICS CARRIER JJE;Lo;0;L;;;;;N;;;;; 161F;CANADIAN SYLLABICS CARRIER JJEE;Lo;0;L;;;;;N;;;;; 1620;CANADIAN SYLLABICS CARRIER JJI;Lo;0;L;;;;;N;;;;; 1621;CANADIAN SYLLABICS CARRIER JJA;Lo;0;L;;;;;N;;;;; 1622;CANADIAN SYLLABICS CARRIER LU;Lo;0;L;;;;;N;;;;; 1623;CANADIAN SYLLABICS CARRIER LO;Lo;0;L;;;;;N;;;;; 1624;CANADIAN SYLLABICS CARRIER LE;Lo;0;L;;;;;N;;;;; 1625;CANADIAN SYLLABICS CARRIER LEE;Lo;0;L;;;;;N;;;;; 1626;CANADIAN SYLLABICS CARRIER LI;Lo;0;L;;;;;N;;;;; 1627;CANADIAN SYLLABICS CARRIER LA;Lo;0;L;;;;;N;;;;; 1628;CANADIAN SYLLABICS CARRIER DLU;Lo;0;L;;;;;N;;;;; 1629;CANADIAN SYLLABICS CARRIER DLO;Lo;0;L;;;;;N;;;;; 162A;CANADIAN SYLLABICS CARRIER DLE;Lo;0;L;;;;;N;;;;; 162B;CANADIAN SYLLABICS CARRIER DLEE;Lo;0;L;;;;;N;;;;; 162C;CANADIAN SYLLABICS CARRIER DLI;Lo;0;L;;;;;N;;;;; 162D;CANADIAN SYLLABICS CARRIER DLA;Lo;0;L;;;;;N;;;;; 162E;CANADIAN SYLLABICS CARRIER LHU;Lo;0;L;;;;;N;;;;; 162F;CANADIAN SYLLABICS CARRIER LHO;Lo;0;L;;;;;N;;;;; 1630;CANADIAN SYLLABICS CARRIER LHE;Lo;0;L;;;;;N;;;;; 1631;CANADIAN SYLLABICS CARRIER LHEE;Lo;0;L;;;;;N;;;;; 1632;CANADIAN SYLLABICS CARRIER LHI;Lo;0;L;;;;;N;;;;; 1633;CANADIAN SYLLABICS CARRIER LHA;Lo;0;L;;;;;N;;;;; 1634;CANADIAN SYLLABICS CARRIER TLHU;Lo;0;L;;;;;N;;;;; 1635;CANADIAN SYLLABICS CARRIER TLHO;Lo;0;L;;;;;N;;;;; 1636;CANADIAN SYLLABICS CARRIER TLHE;Lo;0;L;;;;;N;;;;; 1637;CANADIAN SYLLABICS CARRIER TLHEE;Lo;0;L;;;;;N;;;;; 1638;CANADIAN SYLLABICS CARRIER TLHI;Lo;0;L;;;;;N;;;;; 1639;CANADIAN SYLLABICS CARRIER TLHA;Lo;0;L;;;;;N;;;;; 163A;CANADIAN SYLLABICS CARRIER TLU;Lo;0;L;;;;;N;;;;; 163B;CANADIAN SYLLABICS CARRIER TLO;Lo;0;L;;;;;N;;;;; 163C;CANADIAN SYLLABICS CARRIER TLE;Lo;0;L;;;;;N;;;;; 163D;CANADIAN SYLLABICS CARRIER TLEE;Lo;0;L;;;;;N;;;;; 163E;CANADIAN SYLLABICS CARRIER TLI;Lo;0;L;;;;;N;;;;; 163F;CANADIAN SYLLABICS CARRIER TLA;Lo;0;L;;;;;N;;;;; 1640;CANADIAN SYLLABICS CARRIER ZU;Lo;0;L;;;;;N;;;;; 1641;CANADIAN SYLLABICS CARRIER ZO;Lo;0;L;;;;;N;;;;; 1642;CANADIAN SYLLABICS CARRIER ZE;Lo;0;L;;;;;N;;;;; 1643;CANADIAN SYLLABICS CARRIER ZEE;Lo;0;L;;;;;N;;;;; 1644;CANADIAN SYLLABICS CARRIER ZI;Lo;0;L;;;;;N;;;;; 1645;CANADIAN SYLLABICS CARRIER ZA;Lo;0;L;;;;;N;;;;; 1646;CANADIAN SYLLABICS CARRIER Z;Lo;0;L;;;;;N;;;;; 1647;CANADIAN SYLLABICS CARRIER INITIAL Z;Lo;0;L;;;;;N;;;;; 1648;CANADIAN SYLLABICS CARRIER DZU;Lo;0;L;;;;;N;;;;; 1649;CANADIAN SYLLABICS CARRIER DZO;Lo;0;L;;;;;N;;;;; 164A;CANADIAN SYLLABICS CARRIER DZE;Lo;0;L;;;;;N;;;;; 164B;CANADIAN SYLLABICS CARRIER DZEE;Lo;0;L;;;;;N;;;;; 164C;CANADIAN SYLLABICS CARRIER DZI;Lo;0;L;;;;;N;;;;; 164D;CANADIAN SYLLABICS CARRIER DZA;Lo;0;L;;;;;N;;;;; 164E;CANADIAN SYLLABICS CARRIER SU;Lo;0;L;;;;;N;;;;; 164F;CANADIAN SYLLABICS CARRIER SO;Lo;0;L;;;;;N;;;;; 1650;CANADIAN SYLLABICS CARRIER SE;Lo;0;L;;;;;N;;;;; 1651;CANADIAN SYLLABICS CARRIER SEE;Lo;0;L;;;;;N;;;;; 1652;CANADIAN SYLLABICS CARRIER SI;Lo;0;L;;;;;N;;;;; 1653;CANADIAN SYLLABICS CARRIER SA;Lo;0;L;;;;;N;;;;; 1654;CANADIAN SYLLABICS CARRIER SHU;Lo;0;L;;;;;N;;;;; 1655;CANADIAN SYLLABICS CARRIER SHO;Lo;0;L;;;;;N;;;;; 1656;CANADIAN SYLLABICS CARRIER SHE;Lo;0;L;;;;;N;;;;; 1657;CANADIAN SYLLABICS CARRIER SHEE;Lo;0;L;;;;;N;;;;; 1658;CANADIAN SYLLABICS CARRIER SHI;Lo;0;L;;;;;N;;;;; 1659;CANADIAN SYLLABICS CARRIER SHA;Lo;0;L;;;;;N;;;;; 165A;CANADIAN SYLLABICS CARRIER SH;Lo;0;L;;;;;N;;;;; 165B;CANADIAN SYLLABICS CARRIER TSU;Lo;0;L;;;;;N;;;;; 165C;CANADIAN SYLLABICS CARRIER TSO;Lo;0;L;;;;;N;;;;; 165D;CANADIAN SYLLABICS CARRIER TSE;Lo;0;L;;;;;N;;;;; 165E;CANADIAN SYLLABICS CARRIER TSEE;Lo;0;L;;;;;N;;;;; 165F;CANADIAN SYLLABICS CARRIER TSI;Lo;0;L;;;;;N;;;;; 1660;CANADIAN SYLLABICS CARRIER TSA;Lo;0;L;;;;;N;;;;; 1661;CANADIAN SYLLABICS CARRIER CHU;Lo;0;L;;;;;N;;;;; 1662;CANADIAN SYLLABICS CARRIER CHO;Lo;0;L;;;;;N;;;;; 1663;CANADIAN SYLLABICS CARRIER CHE;Lo;0;L;;;;;N;;;;; 1664;CANADIAN SYLLABICS CARRIER CHEE;Lo;0;L;;;;;N;;;;; 1665;CANADIAN SYLLABICS CARRIER CHI;Lo;0;L;;;;;N;;;;; 1666;CANADIAN SYLLABICS CARRIER CHA;Lo;0;L;;;;;N;;;;; 1667;CANADIAN SYLLABICS CARRIER TTSU;Lo;0;L;;;;;N;;;;; 1668;CANADIAN SYLLABICS CARRIER TTSO;Lo;0;L;;;;;N;;;;; 1669;CANADIAN SYLLABICS CARRIER TTSE;Lo;0;L;;;;;N;;;;; 166A;CANADIAN SYLLABICS CARRIER TTSEE;Lo;0;L;;;;;N;;;;; 166B;CANADIAN SYLLABICS CARRIER TTSI;Lo;0;L;;;;;N;;;;; 166C;CANADIAN SYLLABICS CARRIER TTSA;Lo;0;L;;;;;N;;;;; 166D;CANADIAN SYLLABICS CHI SIGN;So;0;L;;;;;N;;;;; 166E;CANADIAN SYLLABICS FULL STOP;Po;0;L;;;;;N;;;;; 166F;CANADIAN SYLLABICS QAI;Lo;0;L;;;;;N;;;;; 1670;CANADIAN SYLLABICS NGAI;Lo;0;L;;;;;N;;;;; 1671;CANADIAN SYLLABICS NNGI;Lo;0;L;;;;;N;;;;; 1672;CANADIAN SYLLABICS NNGII;Lo;0;L;;;;;N;;;;; 1673;CANADIAN SYLLABICS NNGO;Lo;0;L;;;;;N;;;;; 1674;CANADIAN SYLLABICS NNGOO;Lo;0;L;;;;;N;;;;; 1675;CANADIAN SYLLABICS NNGA;Lo;0;L;;;;;N;;;;; 1676;CANADIAN SYLLABICS NNGAA;Lo;0;L;;;;;N;;;;; 1677;CANADIAN SYLLABICS WOODS-CREE THWEE;Lo;0;L;;;;;N;;;;; 1678;CANADIAN SYLLABICS WOODS-CREE THWI;Lo;0;L;;;;;N;;;;; 1679;CANADIAN SYLLABICS WOODS-CREE THWII;Lo;0;L;;;;;N;;;;; 167A;CANADIAN SYLLABICS WOODS-CREE THWO;Lo;0;L;;;;;N;;;;; 167B;CANADIAN SYLLABICS WOODS-CREE THWOO;Lo;0;L;;;;;N;;;;; 167C;CANADIAN SYLLABICS WOODS-CREE THWA;Lo;0;L;;;;;N;;;;; 167D;CANADIAN SYLLABICS WOODS-CREE THWAA;Lo;0;L;;;;;N;;;;; 167E;CANADIAN SYLLABICS WOODS-CREE FINAL TH;Lo;0;L;;;;;N;;;;; 167F;CANADIAN SYLLABICS BLACKFOOT W;Lo;0;L;;;;;N;;;;; 1680;OGHAM SPACE MARK;Zs;0;WS;;;;;N;;;;; 1681;OGHAM LETTER BEITH;Lo;0;L;;;;;N;;;;; 1682;OGHAM LETTER LUIS;Lo;0;L;;;;;N;;;;; 1683;OGHAM LETTER FEARN;Lo;0;L;;;;;N;;;;; 1684;OGHAM LETTER SAIL;Lo;0;L;;;;;N;;;;; 1685;OGHAM LETTER NION;Lo;0;L;;;;;N;;;;; 1686;OGHAM LETTER UATH;Lo;0;L;;;;;N;;;;; 1687;OGHAM LETTER DAIR;Lo;0;L;;;;;N;;;;; 1688;OGHAM LETTER TINNE;Lo;0;L;;;;;N;;;;; 1689;OGHAM LETTER COLL;Lo;0;L;;;;;N;;;;; 168A;OGHAM LETTER CEIRT;Lo;0;L;;;;;N;;;;; 168B;OGHAM LETTER MUIN;Lo;0;L;;;;;N;;;;; 168C;OGHAM LETTER GORT;Lo;0;L;;;;;N;;;;; 168D;OGHAM LETTER NGEADAL;Lo;0;L;;;;;N;;;;; 168E;OGHAM LETTER STRAIF;Lo;0;L;;;;;N;;;;; 168F;OGHAM LETTER RUIS;Lo;0;L;;;;;N;;;;; 1690;OGHAM LETTER AILM;Lo;0;L;;;;;N;;;;; 1691;OGHAM LETTER ONN;Lo;0;L;;;;;N;;;;; 1692;OGHAM LETTER UR;Lo;0;L;;;;;N;;;;; 1693;OGHAM LETTER EADHADH;Lo;0;L;;;;;N;;;;; 1694;OGHAM LETTER IODHADH;Lo;0;L;;;;;N;;;;; 1695;OGHAM LETTER EABHADH;Lo;0;L;;;;;N;;;;; 1696;OGHAM LETTER OR;Lo;0;L;;;;;N;;;;; 1697;OGHAM LETTER UILLEANN;Lo;0;L;;;;;N;;;;; 1698;OGHAM LETTER IFIN;Lo;0;L;;;;;N;;;;; 1699;OGHAM LETTER EAMHANCHOLL;Lo;0;L;;;;;N;;;;; 169A;OGHAM LETTER PEITH;Lo;0;L;;;;;N;;;;; 169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;Y;;;;; 169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;Y;;;;; 16A0;RUNIC LETTER FEHU FEOH FE F;Lo;0;L;;;;;N;;;;; 16A1;RUNIC LETTER V;Lo;0;L;;;;;N;;;;; 16A2;RUNIC LETTER URUZ UR U;Lo;0;L;;;;;N;;;;; 16A3;RUNIC LETTER YR;Lo;0;L;;;;;N;;;;; 16A4;RUNIC LETTER Y;Lo;0;L;;;;;N;;;;; 16A5;RUNIC LETTER W;Lo;0;L;;;;;N;;;;; 16A6;RUNIC LETTER THURISAZ THURS THORN;Lo;0;L;;;;;N;;;;; 16A7;RUNIC LETTER ETH;Lo;0;L;;;;;N;;;;; 16A8;RUNIC LETTER ANSUZ A;Lo;0;L;;;;;N;;;;; 16A9;RUNIC LETTER OS O;Lo;0;L;;;;;N;;;;; 16AA;RUNIC LETTER AC A;Lo;0;L;;;;;N;;;;; 16AB;RUNIC LETTER AESC;Lo;0;L;;;;;N;;;;; 16AC;RUNIC LETTER LONG-BRANCH-OSS O;Lo;0;L;;;;;N;;;;; 16AD;RUNIC LETTER SHORT-TWIG-OSS O;Lo;0;L;;;;;N;;;;; 16AE;RUNIC LETTER O;Lo;0;L;;;;;N;;;;; 16AF;RUNIC LETTER OE;Lo;0;L;;;;;N;;;;; 16B0;RUNIC LETTER ON;Lo;0;L;;;;;N;;;;; 16B1;RUNIC LETTER RAIDO RAD REID R;Lo;0;L;;;;;N;;;;; 16B2;RUNIC LETTER KAUNA;Lo;0;L;;;;;N;;;;; 16B3;RUNIC LETTER CEN;Lo;0;L;;;;;N;;;;; 16B4;RUNIC LETTER KAUN K;Lo;0;L;;;;;N;;;;; 16B5;RUNIC LETTER G;Lo;0;L;;;;;N;;;;; 16B6;RUNIC LETTER ENG;Lo;0;L;;;;;N;;;;; 16B7;RUNIC LETTER GEBO GYFU G;Lo;0;L;;;;;N;;;;; 16B8;RUNIC LETTER GAR;Lo;0;L;;;;;N;;;;; 16B9;RUNIC LETTER WUNJO WYNN W;Lo;0;L;;;;;N;;;;; 16BA;RUNIC LETTER HAGLAZ H;Lo;0;L;;;;;N;;;;; 16BB;RUNIC LETTER HAEGL H;Lo;0;L;;;;;N;;;;; 16BC;RUNIC LETTER LONG-BRANCH-HAGALL H;Lo;0;L;;;;;N;;;;; 16BD;RUNIC LETTER SHORT-TWIG-HAGALL H;Lo;0;L;;;;;N;;;;; 16BE;RUNIC LETTER NAUDIZ NYD NAUD N;Lo;0;L;;;;;N;;;;; 16BF;RUNIC LETTER SHORT-TWIG-NAUD N;Lo;0;L;;;;;N;;;;; 16C0;RUNIC LETTER DOTTED-N;Lo;0;L;;;;;N;;;;; 16C1;RUNIC LETTER ISAZ IS ISS I;Lo;0;L;;;;;N;;;;; 16C2;RUNIC LETTER E;Lo;0;L;;;;;N;;;;; 16C3;RUNIC LETTER JERAN J;Lo;0;L;;;;;N;;;;; 16C4;RUNIC LETTER GER;Lo;0;L;;;;;N;;;;; 16C5;RUNIC LETTER LONG-BRANCH-AR AE;Lo;0;L;;;;;N;;;;; 16C6;RUNIC LETTER SHORT-TWIG-AR A;Lo;0;L;;;;;N;;;;; 16C7;RUNIC LETTER IWAZ EOH;Lo;0;L;;;;;N;;;;; 16C8;RUNIC LETTER PERTHO PEORTH P;Lo;0;L;;;;;N;;;;; 16C9;RUNIC LETTER ALGIZ EOLHX;Lo;0;L;;;;;N;;;;; 16CA;RUNIC LETTER SOWILO S;Lo;0;L;;;;;N;;;;; 16CB;RUNIC LETTER SIGEL LONG-BRANCH-SOL S;Lo;0;L;;;;;N;;;;; 16CC;RUNIC LETTER SHORT-TWIG-SOL S;Lo;0;L;;;;;N;;;;; 16CD;RUNIC LETTER C;Lo;0;L;;;;;N;;;;; 16CE;RUNIC LETTER Z;Lo;0;L;;;;;N;;;;; 16CF;RUNIC LETTER TIWAZ TIR TYR T;Lo;0;L;;;;;N;;;;; 16D0;RUNIC LETTER SHORT-TWIG-TYR T;Lo;0;L;;;;;N;;;;; 16D1;RUNIC LETTER D;Lo;0;L;;;;;N;;;;; 16D2;RUNIC LETTER BERKANAN BEORC BJARKAN B;Lo;0;L;;;;;N;;;;; 16D3;RUNIC LETTER SHORT-TWIG-BJARKAN B;Lo;0;L;;;;;N;;;;; 16D4;RUNIC LETTER DOTTED-P;Lo;0;L;;;;;N;;;;; 16D5;RUNIC LETTER OPEN-P;Lo;0;L;;;;;N;;;;; 16D6;RUNIC LETTER EHWAZ EH E;Lo;0;L;;;;;N;;;;; 16D7;RUNIC LETTER MANNAZ MAN M;Lo;0;L;;;;;N;;;;; 16D8;RUNIC LETTER LONG-BRANCH-MADR M;Lo;0;L;;;;;N;;;;; 16D9;RUNIC LETTER SHORT-TWIG-MADR M;Lo;0;L;;;;;N;;;;; 16DA;RUNIC LETTER LAUKAZ LAGU LOGR L;Lo;0;L;;;;;N;;;;; 16DB;RUNIC LETTER DOTTED-L;Lo;0;L;;;;;N;;;;; 16DC;RUNIC LETTER INGWAZ;Lo;0;L;;;;;N;;;;; 16DD;RUNIC LETTER ING;Lo;0;L;;;;;N;;;;; 16DE;RUNIC LETTER DAGAZ DAEG D;Lo;0;L;;;;;N;;;;; 16DF;RUNIC LETTER OTHALAN ETHEL O;Lo;0;L;;;;;N;;;;; 16E0;RUNIC LETTER EAR;Lo;0;L;;;;;N;;;;; 16E1;RUNIC LETTER IOR;Lo;0;L;;;;;N;;;;; 16E2;RUNIC LETTER CWEORTH;Lo;0;L;;;;;N;;;;; 16E3;RUNIC LETTER CALC;Lo;0;L;;;;;N;;;;; 16E4;RUNIC LETTER CEALC;Lo;0;L;;;;;N;;;;; 16E5;RUNIC LETTER STAN;Lo;0;L;;;;;N;;;;; 16E6;RUNIC LETTER LONG-BRANCH-YR;Lo;0;L;;;;;N;;;;; 16E7;RUNIC LETTER SHORT-TWIG-YR;Lo;0;L;;;;;N;;;;; 16E8;RUNIC LETTER ICELANDIC-YR;Lo;0;L;;;;;N;;;;; 16E9;RUNIC LETTER Q;Lo;0;L;;;;;N;;;;; 16EA;RUNIC LETTER X;Lo;0;L;;;;;N;;;;; 16EB;RUNIC SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;; 16EC;RUNIC MULTIPLE PUNCTUATION;Po;0;L;;;;;N;;;;; 16ED;RUNIC CROSS PUNCTUATION;Po;0;L;;;;;N;;;;; 16EE;RUNIC ARLAUG SYMBOL;Nl;0;L;;;;17;N;;;;; 16EF;RUNIC TVIMADUR SYMBOL;Nl;0;L;;;;18;N;;;;; 16F0;RUNIC BELGTHOR SYMBOL;Nl;0;L;;;;19;N;;;;; 16F1;RUNIC LETTER K;Lo;0;L;;;;;N;;;;; 16F2;RUNIC LETTER SH;Lo;0;L;;;;;N;;;;; 16F3;RUNIC LETTER OO;Lo;0;L;;;;;N;;;;; 16F4;RUNIC LETTER FRANKS CASKET OS;Lo;0;L;;;;;N;;;;; 16F5;RUNIC LETTER FRANKS CASKET IS;Lo;0;L;;;;;N;;;;; 16F6;RUNIC LETTER FRANKS CASKET EH;Lo;0;L;;;;;N;;;;; 16F7;RUNIC LETTER FRANKS CASKET AC;Lo;0;L;;;;;N;;;;; 16F8;RUNIC LETTER FRANKS CASKET AESC;Lo;0;L;;;;;N;;;;; 1700;TAGALOG LETTER A;Lo;0;L;;;;;N;;;;; 1701;TAGALOG LETTER I;Lo;0;L;;;;;N;;;;; 1702;TAGALOG LETTER U;Lo;0;L;;;;;N;;;;; 1703;TAGALOG LETTER KA;Lo;0;L;;;;;N;;;;; 1704;TAGALOG LETTER GA;Lo;0;L;;;;;N;;;;; 1705;TAGALOG LETTER NGA;Lo;0;L;;;;;N;;;;; 1706;TAGALOG LETTER TA;Lo;0;L;;;;;N;;;;; 1707;TAGALOG LETTER DA;Lo;0;L;;;;;N;;;;; 1708;TAGALOG LETTER NA;Lo;0;L;;;;;N;;;;; 1709;TAGALOG LETTER PA;Lo;0;L;;;;;N;;;;; 170A;TAGALOG LETTER BA;Lo;0;L;;;;;N;;;;; 170B;TAGALOG LETTER MA;Lo;0;L;;;;;N;;;;; 170C;TAGALOG LETTER YA;Lo;0;L;;;;;N;;;;; 170D;TAGALOG LETTER RA;Lo;0;L;;;;;N;;;;; 170E;TAGALOG LETTER LA;Lo;0;L;;;;;N;;;;; 170F;TAGALOG LETTER WA;Lo;0;L;;;;;N;;;;; 1710;TAGALOG LETTER SA;Lo;0;L;;;;;N;;;;; 1711;TAGALOG LETTER HA;Lo;0;L;;;;;N;;;;; 1712;TAGALOG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1713;TAGALOG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1714;TAGALOG SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 1715;TAGALOG SIGN PAMUDPOD;Mc;9;L;;;;;N;;;;; 171F;TAGALOG LETTER ARCHAIC RA;Lo;0;L;;;;;N;;;;; 1720;HANUNOO LETTER A;Lo;0;L;;;;;N;;;;; 1721;HANUNOO LETTER I;Lo;0;L;;;;;N;;;;; 1722;HANUNOO LETTER U;Lo;0;L;;;;;N;;;;; 1723;HANUNOO LETTER KA;Lo;0;L;;;;;N;;;;; 1724;HANUNOO LETTER GA;Lo;0;L;;;;;N;;;;; 1725;HANUNOO LETTER NGA;Lo;0;L;;;;;N;;;;; 1726;HANUNOO LETTER TA;Lo;0;L;;;;;N;;;;; 1727;HANUNOO LETTER DA;Lo;0;L;;;;;N;;;;; 1728;HANUNOO LETTER NA;Lo;0;L;;;;;N;;;;; 1729;HANUNOO LETTER PA;Lo;0;L;;;;;N;;;;; 172A;HANUNOO LETTER BA;Lo;0;L;;;;;N;;;;; 172B;HANUNOO LETTER MA;Lo;0;L;;;;;N;;;;; 172C;HANUNOO LETTER YA;Lo;0;L;;;;;N;;;;; 172D;HANUNOO LETTER RA;Lo;0;L;;;;;N;;;;; 172E;HANUNOO LETTER LA;Lo;0;L;;;;;N;;;;; 172F;HANUNOO LETTER WA;Lo;0;L;;;;;N;;;;; 1730;HANUNOO LETTER SA;Lo;0;L;;;;;N;;;;; 1731;HANUNOO LETTER HA;Lo;0;L;;;;;N;;;;; 1732;HANUNOO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1733;HANUNOO VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1734;HANUNOO SIGN PAMUDPOD;Mc;9;L;;;;;N;;;;; 1735;PHILIPPINE SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;; 1736;PHILIPPINE DOUBLE PUNCTUATION;Po;0;L;;;;;N;;;;; 1740;BUHID LETTER A;Lo;0;L;;;;;N;;;;; 1741;BUHID LETTER I;Lo;0;L;;;;;N;;;;; 1742;BUHID LETTER U;Lo;0;L;;;;;N;;;;; 1743;BUHID LETTER KA;Lo;0;L;;;;;N;;;;; 1744;BUHID LETTER GA;Lo;0;L;;;;;N;;;;; 1745;BUHID LETTER NGA;Lo;0;L;;;;;N;;;;; 1746;BUHID LETTER TA;Lo;0;L;;;;;N;;;;; 1747;BUHID LETTER DA;Lo;0;L;;;;;N;;;;; 1748;BUHID LETTER NA;Lo;0;L;;;;;N;;;;; 1749;BUHID LETTER PA;Lo;0;L;;;;;N;;;;; 174A;BUHID LETTER BA;Lo;0;L;;;;;N;;;;; 174B;BUHID LETTER MA;Lo;0;L;;;;;N;;;;; 174C;BUHID LETTER YA;Lo;0;L;;;;;N;;;;; 174D;BUHID LETTER RA;Lo;0;L;;;;;N;;;;; 174E;BUHID LETTER LA;Lo;0;L;;;;;N;;;;; 174F;BUHID LETTER WA;Lo;0;L;;;;;N;;;;; 1750;BUHID LETTER SA;Lo;0;L;;;;;N;;;;; 1751;BUHID LETTER HA;Lo;0;L;;;;;N;;;;; 1752;BUHID VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1753;BUHID VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1760;TAGBANWA LETTER A;Lo;0;L;;;;;N;;;;; 1761;TAGBANWA LETTER I;Lo;0;L;;;;;N;;;;; 1762;TAGBANWA LETTER U;Lo;0;L;;;;;N;;;;; 1763;TAGBANWA LETTER KA;Lo;0;L;;;;;N;;;;; 1764;TAGBANWA LETTER GA;Lo;0;L;;;;;N;;;;; 1765;TAGBANWA LETTER NGA;Lo;0;L;;;;;N;;;;; 1766;TAGBANWA LETTER TA;Lo;0;L;;;;;N;;;;; 1767;TAGBANWA LETTER DA;Lo;0;L;;;;;N;;;;; 1768;TAGBANWA LETTER NA;Lo;0;L;;;;;N;;;;; 1769;TAGBANWA LETTER PA;Lo;0;L;;;;;N;;;;; 176A;TAGBANWA LETTER BA;Lo;0;L;;;;;N;;;;; 176B;TAGBANWA LETTER MA;Lo;0;L;;;;;N;;;;; 176C;TAGBANWA LETTER YA;Lo;0;L;;;;;N;;;;; 176E;TAGBANWA LETTER LA;Lo;0;L;;;;;N;;;;; 176F;TAGBANWA LETTER WA;Lo;0;L;;;;;N;;;;; 1770;TAGBANWA LETTER SA;Lo;0;L;;;;;N;;;;; 1772;TAGBANWA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1773;TAGBANWA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1780;KHMER LETTER KA;Lo;0;L;;;;;N;;;;; 1781;KHMER LETTER KHA;Lo;0;L;;;;;N;;;;; 1782;KHMER LETTER KO;Lo;0;L;;;;;N;;;;; 1783;KHMER LETTER KHO;Lo;0;L;;;;;N;;;;; 1784;KHMER LETTER NGO;Lo;0;L;;;;;N;;;;; 1785;KHMER LETTER CA;Lo;0;L;;;;;N;;;;; 1786;KHMER LETTER CHA;Lo;0;L;;;;;N;;;;; 1787;KHMER LETTER CO;Lo;0;L;;;;;N;;;;; 1788;KHMER LETTER CHO;Lo;0;L;;;;;N;;;;; 1789;KHMER LETTER NYO;Lo;0;L;;;;;N;;;;; 178A;KHMER LETTER DA;Lo;0;L;;;;;N;;;;; 178B;KHMER LETTER TTHA;Lo;0;L;;;;;N;;;;; 178C;KHMER LETTER DO;Lo;0;L;;;;;N;;;;; 178D;KHMER LETTER TTHO;Lo;0;L;;;;;N;;;;; 178E;KHMER LETTER NNO;Lo;0;L;;;;;N;;;;; 178F;KHMER LETTER TA;Lo;0;L;;;;;N;;;;; 1790;KHMER LETTER THA;Lo;0;L;;;;;N;;;;; 1791;KHMER LETTER TO;Lo;0;L;;;;;N;;;;; 1792;KHMER LETTER THO;Lo;0;L;;;;;N;;;;; 1793;KHMER LETTER NO;Lo;0;L;;;;;N;;;;; 1794;KHMER LETTER BA;Lo;0;L;;;;;N;;;;; 1795;KHMER LETTER PHA;Lo;0;L;;;;;N;;;;; 1796;KHMER LETTER PO;Lo;0;L;;;;;N;;;;; 1797;KHMER LETTER PHO;Lo;0;L;;;;;N;;;;; 1798;KHMER LETTER MO;Lo;0;L;;;;;N;;;;; 1799;KHMER LETTER YO;Lo;0;L;;;;;N;;;;; 179A;KHMER LETTER RO;Lo;0;L;;;;;N;;;;; 179B;KHMER LETTER LO;Lo;0;L;;;;;N;;;;; 179C;KHMER LETTER VO;Lo;0;L;;;;;N;;;;; 179D;KHMER LETTER SHA;Lo;0;L;;;;;N;;;;; 179E;KHMER LETTER SSO;Lo;0;L;;;;;N;;;;; 179F;KHMER LETTER SA;Lo;0;L;;;;;N;;;;; 17A0;KHMER LETTER HA;Lo;0;L;;;;;N;;;;; 17A1;KHMER LETTER LA;Lo;0;L;;;;;N;;;;; 17A2;KHMER LETTER QA;Lo;0;L;;;;;N;;;;; 17A3;KHMER INDEPENDENT VOWEL QAQ;Lo;0;L;;;;;N;;;;; 17A4;KHMER INDEPENDENT VOWEL QAA;Lo;0;L;;;;;N;;;;; 17A5;KHMER INDEPENDENT VOWEL QI;Lo;0;L;;;;;N;;;;; 17A6;KHMER INDEPENDENT VOWEL QII;Lo;0;L;;;;;N;;;;; 17A7;KHMER INDEPENDENT VOWEL QU;Lo;0;L;;;;;N;;;;; 17A8;KHMER INDEPENDENT VOWEL QUK;Lo;0;L;;;;;N;;;;; 17A9;KHMER INDEPENDENT VOWEL QUU;Lo;0;L;;;;;N;;;;; 17AA;KHMER INDEPENDENT VOWEL QUUV;Lo;0;L;;;;;N;;;;; 17AB;KHMER INDEPENDENT VOWEL RY;Lo;0;L;;;;;N;;;;; 17AC;KHMER INDEPENDENT VOWEL RYY;Lo;0;L;;;;;N;;;;; 17AD;KHMER INDEPENDENT VOWEL LY;Lo;0;L;;;;;N;;;;; 17AE;KHMER INDEPENDENT VOWEL LYY;Lo;0;L;;;;;N;;;;; 17AF;KHMER INDEPENDENT VOWEL QE;Lo;0;L;;;;;N;;;;; 17B0;KHMER INDEPENDENT VOWEL QAI;Lo;0;L;;;;;N;;;;; 17B1;KHMER INDEPENDENT VOWEL QOO TYPE ONE;Lo;0;L;;;;;N;;;;; 17B2;KHMER INDEPENDENT VOWEL QOO TYPE TWO;Lo;0;L;;;;;N;;;;; 17B3;KHMER INDEPENDENT VOWEL QAU;Lo;0;L;;;;;N;;;;; 17B4;KHMER VOWEL INHERENT AQ;Mn;0;NSM;;;;;N;;;;; 17B5;KHMER VOWEL INHERENT AA;Mn;0;NSM;;;;;N;;;;; 17B6;KHMER VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 17B7;KHMER VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 17B8;KHMER VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 17B9;KHMER VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;; 17BA;KHMER VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;; 17BB;KHMER VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 17BC;KHMER VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 17BD;KHMER VOWEL SIGN UA;Mn;0;NSM;;;;;N;;;;; 17BE;KHMER VOWEL SIGN OE;Mc;0;L;;;;;N;;;;; 17BF;KHMER VOWEL SIGN YA;Mc;0;L;;;;;N;;;;; 17C0;KHMER VOWEL SIGN IE;Mc;0;L;;;;;N;;;;; 17C1;KHMER VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 17C2;KHMER VOWEL SIGN AE;Mc;0;L;;;;;N;;;;; 17C3;KHMER VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 17C4;KHMER VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; 17C5;KHMER VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 17C6;KHMER SIGN NIKAHIT;Mn;0;NSM;;;;;N;;;;; 17C7;KHMER SIGN REAHMUK;Mc;0;L;;;;;N;;;;; 17C8;KHMER SIGN YUUKALEAPINTU;Mc;0;L;;;;;N;;;;; 17C9;KHMER SIGN MUUSIKATOAN;Mn;0;NSM;;;;;N;;;;; 17CA;KHMER SIGN TRIISAP;Mn;0;NSM;;;;;N;;;;; 17CB;KHMER SIGN BANTOC;Mn;0;NSM;;;;;N;;;;; 17CC;KHMER SIGN ROBAT;Mn;0;NSM;;;;;N;;;;; 17CD;KHMER SIGN TOANDAKHIAT;Mn;0;NSM;;;;;N;;;;; 17CE;KHMER SIGN KAKABAT;Mn;0;NSM;;;;;N;;;;; 17CF;KHMER SIGN AHSDA;Mn;0;NSM;;;;;N;;;;; 17D0;KHMER SIGN SAMYOK SANNYA;Mn;0;NSM;;;;;N;;;;; 17D1;KHMER SIGN VIRIAM;Mn;0;NSM;;;;;N;;;;; 17D2;KHMER SIGN COENG;Mn;9;NSM;;;;;N;;;;; 17D3;KHMER SIGN BATHAMASAT;Mn;0;NSM;;;;;N;;;;; 17D4;KHMER SIGN KHAN;Po;0;L;;;;;N;;;;; 17D5;KHMER SIGN BARIYOOSAN;Po;0;L;;;;;N;;;;; 17D6;KHMER SIGN CAMNUC PII KUUH;Po;0;L;;;;;N;;;;; 17D7;KHMER SIGN LEK TOO;Lm;0;L;;;;;N;;;;; 17D8;KHMER SIGN BEYYAL;Po;0;L;;;;;N;;;;; 17D9;KHMER SIGN PHNAEK MUAN;Po;0;L;;;;;N;;;;; 17DA;KHMER SIGN KOOMUUT;Po;0;L;;;;;N;;;;; 17DB;KHMER CURRENCY SYMBOL RIEL;Sc;0;ET;;;;;N;;;;; 17DC;KHMER SIGN AVAKRAHASANYA;Lo;0;L;;;;;N;;;;; 17DD;KHMER SIGN ATTHACAN;Mn;230;NSM;;;;;N;;;;; 17E0;KHMER DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 17E1;KHMER DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 17E2;KHMER DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 17E3;KHMER DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 17E4;KHMER DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 17E5;KHMER DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 17E6;KHMER DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 17E7;KHMER DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 17E8;KHMER DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 17E9;KHMER DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 17F0;KHMER SYMBOL LEK ATTAK SON;No;0;ON;;;;0;N;;;;; 17F1;KHMER SYMBOL LEK ATTAK MUOY;No;0;ON;;;;1;N;;;;; 17F2;KHMER SYMBOL LEK ATTAK PII;No;0;ON;;;;2;N;;;;; 17F3;KHMER SYMBOL LEK ATTAK BEI;No;0;ON;;;;3;N;;;;; 17F4;KHMER SYMBOL LEK ATTAK BUON;No;0;ON;;;;4;N;;;;; 17F5;KHMER SYMBOL LEK ATTAK PRAM;No;0;ON;;;;5;N;;;;; 17F6;KHMER SYMBOL LEK ATTAK PRAM-MUOY;No;0;ON;;;;6;N;;;;; 17F7;KHMER SYMBOL LEK ATTAK PRAM-PII;No;0;ON;;;;7;N;;;;; 17F8;KHMER SYMBOL LEK ATTAK PRAM-BEI;No;0;ON;;;;8;N;;;;; 17F9;KHMER SYMBOL LEK ATTAK PRAM-BUON;No;0;ON;;;;9;N;;;;; 1800;MONGOLIAN BIRGA;Po;0;ON;;;;;N;;;;; 1801;MONGOLIAN ELLIPSIS;Po;0;ON;;;;;N;;;;; 1802;MONGOLIAN COMMA;Po;0;ON;;;;;N;;;;; 1803;MONGOLIAN FULL STOP;Po;0;ON;;;;;N;;;;; 1804;MONGOLIAN COLON;Po;0;ON;;;;;N;;;;; 1805;MONGOLIAN FOUR DOTS;Po;0;ON;;;;;N;;;;; 1806;MONGOLIAN TODO SOFT HYPHEN;Pd;0;ON;;;;;N;;;;; 1807;MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER;Po;0;ON;;;;;N;;;;; 1808;MONGOLIAN MANCHU COMMA;Po;0;ON;;;;;N;;;;; 1809;MONGOLIAN MANCHU FULL STOP;Po;0;ON;;;;;N;;;;; 180A;MONGOLIAN NIRUGU;Po;0;ON;;;;;N;;;;; 180B;MONGOLIAN FREE VARIATION SELECTOR ONE;Mn;0;NSM;;;;;N;;;;; 180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Mn;0;NSM;;;;;N;;;;; 180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Mn;0;NSM;;;;;N;;;;; 180E;MONGOLIAN VOWEL SEPARATOR;Cf;0;BN;;;;;N;;;;; 180F;MONGOLIAN FREE VARIATION SELECTOR FOUR;Mn;0;NSM;;;;;N;;;;; 1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1813;MONGOLIAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1814;MONGOLIAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1815;MONGOLIAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1816;MONGOLIAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1817;MONGOLIAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1818;MONGOLIAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1819;MONGOLIAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1820;MONGOLIAN LETTER A;Lo;0;L;;;;;N;;;;; 1821;MONGOLIAN LETTER E;Lo;0;L;;;;;N;;;;; 1822;MONGOLIAN LETTER I;Lo;0;L;;;;;N;;;;; 1823;MONGOLIAN LETTER O;Lo;0;L;;;;;N;;;;; 1824;MONGOLIAN LETTER U;Lo;0;L;;;;;N;;;;; 1825;MONGOLIAN LETTER OE;Lo;0;L;;;;;N;;;;; 1826;MONGOLIAN LETTER UE;Lo;0;L;;;;;N;;;;; 1827;MONGOLIAN LETTER EE;Lo;0;L;;;;;N;;;;; 1828;MONGOLIAN LETTER NA;Lo;0;L;;;;;N;;;;; 1829;MONGOLIAN LETTER ANG;Lo;0;L;;;;;N;;;;; 182A;MONGOLIAN LETTER BA;Lo;0;L;;;;;N;;;;; 182B;MONGOLIAN LETTER PA;Lo;0;L;;;;;N;;;;; 182C;MONGOLIAN LETTER QA;Lo;0;L;;;;;N;;;;; 182D;MONGOLIAN LETTER GA;Lo;0;L;;;;;N;;;;; 182E;MONGOLIAN LETTER MA;Lo;0;L;;;;;N;;;;; 182F;MONGOLIAN LETTER LA;Lo;0;L;;;;;N;;;;; 1830;MONGOLIAN LETTER SA;Lo;0;L;;;;;N;;;;; 1831;MONGOLIAN LETTER SHA;Lo;0;L;;;;;N;;;;; 1832;MONGOLIAN LETTER TA;Lo;0;L;;;;;N;;;;; 1833;MONGOLIAN LETTER DA;Lo;0;L;;;;;N;;;;; 1834;MONGOLIAN LETTER CHA;Lo;0;L;;;;;N;;;;; 1835;MONGOLIAN LETTER JA;Lo;0;L;;;;;N;;;;; 1836;MONGOLIAN LETTER YA;Lo;0;L;;;;;N;;;;; 1837;MONGOLIAN LETTER RA;Lo;0;L;;;;;N;;;;; 1838;MONGOLIAN LETTER WA;Lo;0;L;;;;;N;;;;; 1839;MONGOLIAN LETTER FA;Lo;0;L;;;;;N;;;;; 183A;MONGOLIAN LETTER KA;Lo;0;L;;;;;N;;;;; 183B;MONGOLIAN LETTER KHA;Lo;0;L;;;;;N;;;;; 183C;MONGOLIAN LETTER TSA;Lo;0;L;;;;;N;;;;; 183D;MONGOLIAN LETTER ZA;Lo;0;L;;;;;N;;;;; 183E;MONGOLIAN LETTER HAA;Lo;0;L;;;;;N;;;;; 183F;MONGOLIAN LETTER ZRA;Lo;0;L;;;;;N;;;;; 1840;MONGOLIAN LETTER LHA;Lo;0;L;;;;;N;;;;; 1841;MONGOLIAN LETTER ZHI;Lo;0;L;;;;;N;;;;; 1842;MONGOLIAN LETTER CHI;Lo;0;L;;;;;N;;;;; 1843;MONGOLIAN LETTER TODO LONG VOWEL SIGN;Lm;0;L;;;;;N;;;;; 1844;MONGOLIAN LETTER TODO E;Lo;0;L;;;;;N;;;;; 1845;MONGOLIAN LETTER TODO I;Lo;0;L;;;;;N;;;;; 1846;MONGOLIAN LETTER TODO O;Lo;0;L;;;;;N;;;;; 1847;MONGOLIAN LETTER TODO U;Lo;0;L;;;;;N;;;;; 1848;MONGOLIAN LETTER TODO OE;Lo;0;L;;;;;N;;;;; 1849;MONGOLIAN LETTER TODO UE;Lo;0;L;;;;;N;;;;; 184A;MONGOLIAN LETTER TODO ANG;Lo;0;L;;;;;N;;;;; 184B;MONGOLIAN LETTER TODO BA;Lo;0;L;;;;;N;;;;; 184C;MONGOLIAN LETTER TODO PA;Lo;0;L;;;;;N;;;;; 184D;MONGOLIAN LETTER TODO QA;Lo;0;L;;;;;N;;;;; 184E;MONGOLIAN LETTER TODO GA;Lo;0;L;;;;;N;;;;; 184F;MONGOLIAN LETTER TODO MA;Lo;0;L;;;;;N;;;;; 1850;MONGOLIAN LETTER TODO TA;Lo;0;L;;;;;N;;;;; 1851;MONGOLIAN LETTER TODO DA;Lo;0;L;;;;;N;;;;; 1852;MONGOLIAN LETTER TODO CHA;Lo;0;L;;;;;N;;;;; 1853;MONGOLIAN LETTER TODO JA;Lo;0;L;;;;;N;;;;; 1854;MONGOLIAN LETTER TODO TSA;Lo;0;L;;;;;N;;;;; 1855;MONGOLIAN LETTER TODO YA;Lo;0;L;;;;;N;;;;; 1856;MONGOLIAN LETTER TODO WA;Lo;0;L;;;;;N;;;;; 1857;MONGOLIAN LETTER TODO KA;Lo;0;L;;;;;N;;;;; 1858;MONGOLIAN LETTER TODO GAA;Lo;0;L;;;;;N;;;;; 1859;MONGOLIAN LETTER TODO HAA;Lo;0;L;;;;;N;;;;; 185A;MONGOLIAN LETTER TODO JIA;Lo;0;L;;;;;N;;;;; 185B;MONGOLIAN LETTER TODO NIA;Lo;0;L;;;;;N;;;;; 185C;MONGOLIAN LETTER TODO DZA;Lo;0;L;;;;;N;;;;; 185D;MONGOLIAN LETTER SIBE E;Lo;0;L;;;;;N;;;;; 185E;MONGOLIAN LETTER SIBE I;Lo;0;L;;;;;N;;;;; 185F;MONGOLIAN LETTER SIBE IY;Lo;0;L;;;;;N;;;;; 1860;MONGOLIAN LETTER SIBE UE;Lo;0;L;;;;;N;;;;; 1861;MONGOLIAN LETTER SIBE U;Lo;0;L;;;;;N;;;;; 1862;MONGOLIAN LETTER SIBE ANG;Lo;0;L;;;;;N;;;;; 1863;MONGOLIAN LETTER SIBE KA;Lo;0;L;;;;;N;;;;; 1864;MONGOLIAN LETTER SIBE GA;Lo;0;L;;;;;N;;;;; 1865;MONGOLIAN LETTER SIBE HA;Lo;0;L;;;;;N;;;;; 1866;MONGOLIAN LETTER SIBE PA;Lo;0;L;;;;;N;;;;; 1867;MONGOLIAN LETTER SIBE SHA;Lo;0;L;;;;;N;;;;; 1868;MONGOLIAN LETTER SIBE TA;Lo;0;L;;;;;N;;;;; 1869;MONGOLIAN LETTER SIBE DA;Lo;0;L;;;;;N;;;;; 186A;MONGOLIAN LETTER SIBE JA;Lo;0;L;;;;;N;;;;; 186B;MONGOLIAN LETTER SIBE FA;Lo;0;L;;;;;N;;;;; 186C;MONGOLIAN LETTER SIBE GAA;Lo;0;L;;;;;N;;;;; 186D;MONGOLIAN LETTER SIBE HAA;Lo;0;L;;;;;N;;;;; 186E;MONGOLIAN LETTER SIBE TSA;Lo;0;L;;;;;N;;;;; 186F;MONGOLIAN LETTER SIBE ZA;Lo;0;L;;;;;N;;;;; 1870;MONGOLIAN LETTER SIBE RAA;Lo;0;L;;;;;N;;;;; 1871;MONGOLIAN LETTER SIBE CHA;Lo;0;L;;;;;N;;;;; 1872;MONGOLIAN LETTER SIBE ZHA;Lo;0;L;;;;;N;;;;; 1873;MONGOLIAN LETTER MANCHU I;Lo;0;L;;;;;N;;;;; 1874;MONGOLIAN LETTER MANCHU KA;Lo;0;L;;;;;N;;;;; 1875;MONGOLIAN LETTER MANCHU RA;Lo;0;L;;;;;N;;;;; 1876;MONGOLIAN LETTER MANCHU FA;Lo;0;L;;;;;N;;;;; 1877;MONGOLIAN LETTER MANCHU ZHA;Lo;0;L;;;;;N;;;;; 1878;MONGOLIAN LETTER CHA WITH TWO DOTS;Lo;0;L;;;;;N;;;;; 1880;MONGOLIAN LETTER ALI GALI ANUSVARA ONE;Lo;0;L;;;;;N;;;;; 1881;MONGOLIAN LETTER ALI GALI VISARGA ONE;Lo;0;L;;;;;N;;;;; 1882;MONGOLIAN LETTER ALI GALI DAMARU;Lo;0;L;;;;;N;;;;; 1883;MONGOLIAN LETTER ALI GALI UBADAMA;Lo;0;L;;;;;N;;;;; 1884;MONGOLIAN LETTER ALI GALI INVERTED UBADAMA;Lo;0;L;;;;;N;;;;; 1885;MONGOLIAN LETTER ALI GALI BALUDA;Mn;0;NSM;;;;;N;;;;; 1886;MONGOLIAN LETTER ALI GALI THREE BALUDA;Mn;0;NSM;;;;;N;;;;; 1887;MONGOLIAN LETTER ALI GALI A;Lo;0;L;;;;;N;;;;; 1888;MONGOLIAN LETTER ALI GALI I;Lo;0;L;;;;;N;;;;; 1889;MONGOLIAN LETTER ALI GALI KA;Lo;0;L;;;;;N;;;;; 188A;MONGOLIAN LETTER ALI GALI NGA;Lo;0;L;;;;;N;;;;; 188B;MONGOLIAN LETTER ALI GALI CA;Lo;0;L;;;;;N;;;;; 188C;MONGOLIAN LETTER ALI GALI TTA;Lo;0;L;;;;;N;;;;; 188D;MONGOLIAN LETTER ALI GALI TTHA;Lo;0;L;;;;;N;;;;; 188E;MONGOLIAN LETTER ALI GALI DDA;Lo;0;L;;;;;N;;;;; 188F;MONGOLIAN LETTER ALI GALI NNA;Lo;0;L;;;;;N;;;;; 1890;MONGOLIAN LETTER ALI GALI TA;Lo;0;L;;;;;N;;;;; 1891;MONGOLIAN LETTER ALI GALI DA;Lo;0;L;;;;;N;;;;; 1892;MONGOLIAN LETTER ALI GALI PA;Lo;0;L;;;;;N;;;;; 1893;MONGOLIAN LETTER ALI GALI PHA;Lo;0;L;;;;;N;;;;; 1894;MONGOLIAN LETTER ALI GALI SSA;Lo;0;L;;;;;N;;;;; 1895;MONGOLIAN LETTER ALI GALI ZHA;Lo;0;L;;;;;N;;;;; 1896;MONGOLIAN LETTER ALI GALI ZA;Lo;0;L;;;;;N;;;;; 1897;MONGOLIAN LETTER ALI GALI AH;Lo;0;L;;;;;N;;;;; 1898;MONGOLIAN LETTER TODO ALI GALI TA;Lo;0;L;;;;;N;;;;; 1899;MONGOLIAN LETTER TODO ALI GALI ZHA;Lo;0;L;;;;;N;;;;; 189A;MONGOLIAN LETTER MANCHU ALI GALI GHA;Lo;0;L;;;;;N;;;;; 189B;MONGOLIAN LETTER MANCHU ALI GALI NGA;Lo;0;L;;;;;N;;;;; 189C;MONGOLIAN LETTER MANCHU ALI GALI CA;Lo;0;L;;;;;N;;;;; 189D;MONGOLIAN LETTER MANCHU ALI GALI JHA;Lo;0;L;;;;;N;;;;; 189E;MONGOLIAN LETTER MANCHU ALI GALI TTA;Lo;0;L;;;;;N;;;;; 189F;MONGOLIAN LETTER MANCHU ALI GALI DDHA;Lo;0;L;;;;;N;;;;; 18A0;MONGOLIAN LETTER MANCHU ALI GALI TA;Lo;0;L;;;;;N;;;;; 18A1;MONGOLIAN LETTER MANCHU ALI GALI DHA;Lo;0;L;;;;;N;;;;; 18A2;MONGOLIAN LETTER MANCHU ALI GALI SSA;Lo;0;L;;;;;N;;;;; 18A3;MONGOLIAN LETTER MANCHU ALI GALI CYA;Lo;0;L;;;;;N;;;;; 18A4;MONGOLIAN LETTER MANCHU ALI GALI ZHA;Lo;0;L;;;;;N;;;;; 18A5;MONGOLIAN LETTER MANCHU ALI GALI ZA;Lo;0;L;;;;;N;;;;; 18A6;MONGOLIAN LETTER ALI GALI HALF U;Lo;0;L;;;;;N;;;;; 18A7;MONGOLIAN LETTER ALI GALI HALF YA;Lo;0;L;;;;;N;;;;; 18A8;MONGOLIAN LETTER MANCHU ALI GALI BHA;Lo;0;L;;;;;N;;;;; 18A9;MONGOLIAN LETTER ALI GALI DAGALGA;Mn;228;NSM;;;;;N;;;;; 18AA;MONGOLIAN LETTER MANCHU ALI GALI LHA;Lo;0;L;;;;;N;;;;; 18B0;CANADIAN SYLLABICS OY;Lo;0;L;;;;;N;;;;; 18B1;CANADIAN SYLLABICS AY;Lo;0;L;;;;;N;;;;; 18B2;CANADIAN SYLLABICS AAY;Lo;0;L;;;;;N;;;;; 18B3;CANADIAN SYLLABICS WAY;Lo;0;L;;;;;N;;;;; 18B4;CANADIAN SYLLABICS POY;Lo;0;L;;;;;N;;;;; 18B5;CANADIAN SYLLABICS PAY;Lo;0;L;;;;;N;;;;; 18B6;CANADIAN SYLLABICS PWOY;Lo;0;L;;;;;N;;;;; 18B7;CANADIAN SYLLABICS TAY;Lo;0;L;;;;;N;;;;; 18B8;CANADIAN SYLLABICS KAY;Lo;0;L;;;;;N;;;;; 18B9;CANADIAN SYLLABICS KWAY;Lo;0;L;;;;;N;;;;; 18BA;CANADIAN SYLLABICS MAY;Lo;0;L;;;;;N;;;;; 18BB;CANADIAN SYLLABICS NOY;Lo;0;L;;;;;N;;;;; 18BC;CANADIAN SYLLABICS NAY;Lo;0;L;;;;;N;;;;; 18BD;CANADIAN SYLLABICS LAY;Lo;0;L;;;;;N;;;;; 18BE;CANADIAN SYLLABICS SOY;Lo;0;L;;;;;N;;;;; 18BF;CANADIAN SYLLABICS SAY;Lo;0;L;;;;;N;;;;; 18C0;CANADIAN SYLLABICS SHOY;Lo;0;L;;;;;N;;;;; 18C1;CANADIAN SYLLABICS SHAY;Lo;0;L;;;;;N;;;;; 18C2;CANADIAN SYLLABICS SHWOY;Lo;0;L;;;;;N;;;;; 18C3;CANADIAN SYLLABICS YOY;Lo;0;L;;;;;N;;;;; 18C4;CANADIAN SYLLABICS YAY;Lo;0;L;;;;;N;;;;; 18C5;CANADIAN SYLLABICS RAY;Lo;0;L;;;;;N;;;;; 18C6;CANADIAN SYLLABICS NWI;Lo;0;L;;;;;N;;;;; 18C7;CANADIAN SYLLABICS OJIBWAY NWI;Lo;0;L;;;;;N;;;;; 18C8;CANADIAN SYLLABICS NWII;Lo;0;L;;;;;N;;;;; 18C9;CANADIAN SYLLABICS OJIBWAY NWII;Lo;0;L;;;;;N;;;;; 18CA;CANADIAN SYLLABICS NWO;Lo;0;L;;;;;N;;;;; 18CB;CANADIAN SYLLABICS OJIBWAY NWO;Lo;0;L;;;;;N;;;;; 18CC;CANADIAN SYLLABICS NWOO;Lo;0;L;;;;;N;;;;; 18CD;CANADIAN SYLLABICS OJIBWAY NWOO;Lo;0;L;;;;;N;;;;; 18CE;CANADIAN SYLLABICS RWEE;Lo;0;L;;;;;N;;;;; 18CF;CANADIAN SYLLABICS RWI;Lo;0;L;;;;;N;;;;; 18D0;CANADIAN SYLLABICS RWII;Lo;0;L;;;;;N;;;;; 18D1;CANADIAN SYLLABICS RWO;Lo;0;L;;;;;N;;;;; 18D2;CANADIAN SYLLABICS RWOO;Lo;0;L;;;;;N;;;;; 18D3;CANADIAN SYLLABICS RWA;Lo;0;L;;;;;N;;;;; 18D4;CANADIAN SYLLABICS OJIBWAY P;Lo;0;L;;;;;N;;;;; 18D5;CANADIAN SYLLABICS OJIBWAY T;Lo;0;L;;;;;N;;;;; 18D6;CANADIAN SYLLABICS OJIBWAY K;Lo;0;L;;;;;N;;;;; 18D7;CANADIAN SYLLABICS OJIBWAY C;Lo;0;L;;;;;N;;;;; 18D8;CANADIAN SYLLABICS OJIBWAY M;Lo;0;L;;;;;N;;;;; 18D9;CANADIAN SYLLABICS OJIBWAY N;Lo;0;L;;;;;N;;;;; 18DA;CANADIAN SYLLABICS OJIBWAY S;Lo;0;L;;;;;N;;;;; 18DB;CANADIAN SYLLABICS OJIBWAY SH;Lo;0;L;;;;;N;;;;; 18DC;CANADIAN SYLLABICS EASTERN W;Lo;0;L;;;;;N;;;;; 18DD;CANADIAN SYLLABICS WESTERN W;Lo;0;L;;;;;N;;;;; 18DE;CANADIAN SYLLABICS FINAL SMALL RING;Lo;0;L;;;;;N;;;;; 18DF;CANADIAN SYLLABICS FINAL RAISED DOT;Lo;0;L;;;;;N;;;;; 18E0;CANADIAN SYLLABICS R-CREE RWE;Lo;0;L;;;;;N;;;;; 18E1;CANADIAN SYLLABICS WEST-CREE LOO;Lo;0;L;;;;;N;;;;; 18E2;CANADIAN SYLLABICS WEST-CREE LAA;Lo;0;L;;;;;N;;;;; 18E3;CANADIAN SYLLABICS THWE;Lo;0;L;;;;;N;;;;; 18E4;CANADIAN SYLLABICS THWA;Lo;0;L;;;;;N;;;;; 18E5;CANADIAN SYLLABICS TTHWE;Lo;0;L;;;;;N;;;;; 18E6;CANADIAN SYLLABICS TTHOO;Lo;0;L;;;;;N;;;;; 18E7;CANADIAN SYLLABICS TTHAA;Lo;0;L;;;;;N;;;;; 18E8;CANADIAN SYLLABICS TLHWE;Lo;0;L;;;;;N;;;;; 18E9;CANADIAN SYLLABICS TLHOO;Lo;0;L;;;;;N;;;;; 18EA;CANADIAN SYLLABICS SAYISI SHWE;Lo;0;L;;;;;N;;;;; 18EB;CANADIAN SYLLABICS SAYISI SHOO;Lo;0;L;;;;;N;;;;; 18EC;CANADIAN SYLLABICS SAYISI HOO;Lo;0;L;;;;;N;;;;; 18ED;CANADIAN SYLLABICS CARRIER GWU;Lo;0;L;;;;;N;;;;; 18EE;CANADIAN SYLLABICS CARRIER DENE GEE;Lo;0;L;;;;;N;;;;; 18EF;CANADIAN SYLLABICS CARRIER GAA;Lo;0;L;;;;;N;;;;; 18F0;CANADIAN SYLLABICS CARRIER GWA;Lo;0;L;;;;;N;;;;; 18F1;CANADIAN SYLLABICS SAYISI JUU;Lo;0;L;;;;;N;;;;; 18F2;CANADIAN SYLLABICS CARRIER JWA;Lo;0;L;;;;;N;;;;; 18F3;CANADIAN SYLLABICS BEAVER DENE L;Lo;0;L;;;;;N;;;;; 18F4;CANADIAN SYLLABICS BEAVER DENE R;Lo;0;L;;;;;N;;;;; 18F5;CANADIAN SYLLABICS CARRIER DENTAL S;Lo;0;L;;;;;N;;;;; 1900;LIMBU VOWEL-CARRIER LETTER;Lo;0;L;;;;;N;;;;; 1901;LIMBU LETTER KA;Lo;0;L;;;;;N;;;;; 1902;LIMBU LETTER KHA;Lo;0;L;;;;;N;;;;; 1903;LIMBU LETTER GA;Lo;0;L;;;;;N;;;;; 1904;LIMBU LETTER GHA;Lo;0;L;;;;;N;;;;; 1905;LIMBU LETTER NGA;Lo;0;L;;;;;N;;;;; 1906;LIMBU LETTER CA;Lo;0;L;;;;;N;;;;; 1907;LIMBU LETTER CHA;Lo;0;L;;;;;N;;;;; 1908;LIMBU LETTER JA;Lo;0;L;;;;;N;;;;; 1909;LIMBU LETTER JHA;Lo;0;L;;;;;N;;;;; 190A;LIMBU LETTER YAN;Lo;0;L;;;;;N;;;;; 190B;LIMBU LETTER TA;Lo;0;L;;;;;N;;;;; 190C;LIMBU LETTER THA;Lo;0;L;;;;;N;;;;; 190D;LIMBU LETTER DA;Lo;0;L;;;;;N;;;;; 190E;LIMBU LETTER DHA;Lo;0;L;;;;;N;;;;; 190F;LIMBU LETTER NA;Lo;0;L;;;;;N;;;;; 1910;LIMBU LETTER PA;Lo;0;L;;;;;N;;;;; 1911;LIMBU LETTER PHA;Lo;0;L;;;;;N;;;;; 1912;LIMBU LETTER BA;Lo;0;L;;;;;N;;;;; 1913;LIMBU LETTER BHA;Lo;0;L;;;;;N;;;;; 1914;LIMBU LETTER MA;Lo;0;L;;;;;N;;;;; 1915;LIMBU LETTER YA;Lo;0;L;;;;;N;;;;; 1916;LIMBU LETTER RA;Lo;0;L;;;;;N;;;;; 1917;LIMBU LETTER LA;Lo;0;L;;;;;N;;;;; 1918;LIMBU LETTER WA;Lo;0;L;;;;;N;;;;; 1919;LIMBU LETTER SHA;Lo;0;L;;;;;N;;;;; 191A;LIMBU LETTER SSA;Lo;0;L;;;;;N;;;;; 191B;LIMBU LETTER SA;Lo;0;L;;;;;N;;;;; 191C;LIMBU LETTER HA;Lo;0;L;;;;;N;;;;; 191D;LIMBU LETTER GYAN;Lo;0;L;;;;;N;;;;; 191E;LIMBU LETTER TRA;Lo;0;L;;;;;N;;;;; 1920;LIMBU VOWEL SIGN A;Mn;0;NSM;;;;;N;;;;; 1921;LIMBU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1922;LIMBU VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1923;LIMBU VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; 1924;LIMBU VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 1925;LIMBU VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; 1926;LIMBU VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 1927;LIMBU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 1928;LIMBU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 1929;LIMBU SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;; 192A;LIMBU SUBJOINED LETTER RA;Mc;0;L;;;;;N;;;;; 192B;LIMBU SUBJOINED LETTER WA;Mc;0;L;;;;;N;;;;; 1930;LIMBU SMALL LETTER KA;Mc;0;L;;;;;N;;;;; 1931;LIMBU SMALL LETTER NGA;Mc;0;L;;;;;N;;;;; 1932;LIMBU SMALL LETTER ANUSVARA;Mn;0;NSM;;;;;N;;;;; 1933;LIMBU SMALL LETTER TA;Mc;0;L;;;;;N;;;;; 1934;LIMBU SMALL LETTER NA;Mc;0;L;;;;;N;;;;; 1935;LIMBU SMALL LETTER PA;Mc;0;L;;;;;N;;;;; 1936;LIMBU SMALL LETTER MA;Mc;0;L;;;;;N;;;;; 1937;LIMBU SMALL LETTER RA;Mc;0;L;;;;;N;;;;; 1938;LIMBU SMALL LETTER LA;Mc;0;L;;;;;N;;;;; 1939;LIMBU SIGN MUKPHRENG;Mn;222;NSM;;;;;N;;;;; 193A;LIMBU SIGN KEMPHRENG;Mn;230;NSM;;;;;N;;;;; 193B;LIMBU SIGN SA-I;Mn;220;NSM;;;;;N;;;;; 1940;LIMBU SIGN LOO;So;0;ON;;;;;N;;;;; 1944;LIMBU EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; 1945;LIMBU QUESTION MARK;Po;0;ON;;;;;N;;;;; 1946;LIMBU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1947;LIMBU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1948;LIMBU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1949;LIMBU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 194A;LIMBU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 194B;LIMBU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 194C;LIMBU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 194D;LIMBU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 194E;LIMBU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 194F;LIMBU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1950;TAI LE LETTER KA;Lo;0;L;;;;;N;;;;; 1951;TAI LE LETTER XA;Lo;0;L;;;;;N;;;;; 1952;TAI LE LETTER NGA;Lo;0;L;;;;;N;;;;; 1953;TAI LE LETTER TSA;Lo;0;L;;;;;N;;;;; 1954;TAI LE LETTER SA;Lo;0;L;;;;;N;;;;; 1955;TAI LE LETTER YA;Lo;0;L;;;;;N;;;;; 1956;TAI LE LETTER TA;Lo;0;L;;;;;N;;;;; 1957;TAI LE LETTER THA;Lo;0;L;;;;;N;;;;; 1958;TAI LE LETTER LA;Lo;0;L;;;;;N;;;;; 1959;TAI LE LETTER PA;Lo;0;L;;;;;N;;;;; 195A;TAI LE LETTER PHA;Lo;0;L;;;;;N;;;;; 195B;TAI LE LETTER MA;Lo;0;L;;;;;N;;;;; 195C;TAI LE LETTER FA;Lo;0;L;;;;;N;;;;; 195D;TAI LE LETTER VA;Lo;0;L;;;;;N;;;;; 195E;TAI LE LETTER HA;Lo;0;L;;;;;N;;;;; 195F;TAI LE LETTER QA;Lo;0;L;;;;;N;;;;; 1960;TAI LE LETTER KHA;Lo;0;L;;;;;N;;;;; 1961;TAI LE LETTER TSHA;Lo;0;L;;;;;N;;;;; 1962;TAI LE LETTER NA;Lo;0;L;;;;;N;;;;; 1963;TAI LE LETTER A;Lo;0;L;;;;;N;;;;; 1964;TAI LE LETTER I;Lo;0;L;;;;;N;;;;; 1965;TAI LE LETTER EE;Lo;0;L;;;;;N;;;;; 1966;TAI LE LETTER EH;Lo;0;L;;;;;N;;;;; 1967;TAI LE LETTER U;Lo;0;L;;;;;N;;;;; 1968;TAI LE LETTER OO;Lo;0;L;;;;;N;;;;; 1969;TAI LE LETTER O;Lo;0;L;;;;;N;;;;; 196A;TAI LE LETTER UE;Lo;0;L;;;;;N;;;;; 196B;TAI LE LETTER E;Lo;0;L;;;;;N;;;;; 196C;TAI LE LETTER AUE;Lo;0;L;;;;;N;;;;; 196D;TAI LE LETTER AI;Lo;0;L;;;;;N;;;;; 1970;TAI LE LETTER TONE-2;Lo;0;L;;;;;N;;;;; 1971;TAI LE LETTER TONE-3;Lo;0;L;;;;;N;;;;; 1972;TAI LE LETTER TONE-4;Lo;0;L;;;;;N;;;;; 1973;TAI LE LETTER TONE-5;Lo;0;L;;;;;N;;;;; 1974;TAI LE LETTER TONE-6;Lo;0;L;;;;;N;;;;; 1980;NEW TAI LUE LETTER HIGH QA;Lo;0;L;;;;;N;;;;; 1981;NEW TAI LUE LETTER LOW QA;Lo;0;L;;;;;N;;;;; 1982;NEW TAI LUE LETTER HIGH KA;Lo;0;L;;;;;N;;;;; 1983;NEW TAI LUE LETTER HIGH XA;Lo;0;L;;;;;N;;;;; 1984;NEW TAI LUE LETTER HIGH NGA;Lo;0;L;;;;;N;;;;; 1985;NEW TAI LUE LETTER LOW KA;Lo;0;L;;;;;N;;;;; 1986;NEW TAI LUE LETTER LOW XA;Lo;0;L;;;;;N;;;;; 1987;NEW TAI LUE LETTER LOW NGA;Lo;0;L;;;;;N;;;;; 1988;NEW TAI LUE LETTER HIGH TSA;Lo;0;L;;;;;N;;;;; 1989;NEW TAI LUE LETTER HIGH SA;Lo;0;L;;;;;N;;;;; 198A;NEW TAI LUE LETTER HIGH YA;Lo;0;L;;;;;N;;;;; 198B;NEW TAI LUE LETTER LOW TSA;Lo;0;L;;;;;N;;;;; 198C;NEW TAI LUE LETTER LOW SA;Lo;0;L;;;;;N;;;;; 198D;NEW TAI LUE LETTER LOW YA;Lo;0;L;;;;;N;;;;; 198E;NEW TAI LUE LETTER HIGH TA;Lo;0;L;;;;;N;;;;; 198F;NEW TAI LUE LETTER HIGH THA;Lo;0;L;;;;;N;;;;; 1990;NEW TAI LUE LETTER HIGH NA;Lo;0;L;;;;;N;;;;; 1991;NEW TAI LUE LETTER LOW TA;Lo;0;L;;;;;N;;;;; 1992;NEW TAI LUE LETTER LOW THA;Lo;0;L;;;;;N;;;;; 1993;NEW TAI LUE LETTER LOW NA;Lo;0;L;;;;;N;;;;; 1994;NEW TAI LUE LETTER HIGH PA;Lo;0;L;;;;;N;;;;; 1995;NEW TAI LUE LETTER HIGH PHA;Lo;0;L;;;;;N;;;;; 1996;NEW TAI LUE LETTER HIGH MA;Lo;0;L;;;;;N;;;;; 1997;NEW TAI LUE LETTER LOW PA;Lo;0;L;;;;;N;;;;; 1998;NEW TAI LUE LETTER LOW PHA;Lo;0;L;;;;;N;;;;; 1999;NEW TAI LUE LETTER LOW MA;Lo;0;L;;;;;N;;;;; 199A;NEW TAI LUE LETTER HIGH FA;Lo;0;L;;;;;N;;;;; 199B;NEW TAI LUE LETTER HIGH VA;Lo;0;L;;;;;N;;;;; 199C;NEW TAI LUE LETTER HIGH LA;Lo;0;L;;;;;N;;;;; 199D;NEW TAI LUE LETTER LOW FA;Lo;0;L;;;;;N;;;;; 199E;NEW TAI LUE LETTER LOW VA;Lo;0;L;;;;;N;;;;; 199F;NEW TAI LUE LETTER LOW LA;Lo;0;L;;;;;N;;;;; 19A0;NEW TAI LUE LETTER HIGH HA;Lo;0;L;;;;;N;;;;; 19A1;NEW TAI LUE LETTER HIGH DA;Lo;0;L;;;;;N;;;;; 19A2;NEW TAI LUE LETTER HIGH BA;Lo;0;L;;;;;N;;;;; 19A3;NEW TAI LUE LETTER LOW HA;Lo;0;L;;;;;N;;;;; 19A4;NEW TAI LUE LETTER LOW DA;Lo;0;L;;;;;N;;;;; 19A5;NEW TAI LUE LETTER LOW BA;Lo;0;L;;;;;N;;;;; 19A6;NEW TAI LUE LETTER HIGH KVA;Lo;0;L;;;;;N;;;;; 19A7;NEW TAI LUE LETTER HIGH XVA;Lo;0;L;;;;;N;;;;; 19A8;NEW TAI LUE LETTER LOW KVA;Lo;0;L;;;;;N;;;;; 19A9;NEW TAI LUE LETTER LOW XVA;Lo;0;L;;;;;N;;;;; 19AA;NEW TAI LUE LETTER HIGH SUA;Lo;0;L;;;;;N;;;;; 19AB;NEW TAI LUE LETTER LOW SUA;Lo;0;L;;;;;N;;;;; 19B0;NEW TAI LUE VOWEL SIGN VOWEL SHORTENER;Lo;0;L;;;;;N;;;;; 19B1;NEW TAI LUE VOWEL SIGN AA;Lo;0;L;;;;;N;;;;; 19B2;NEW TAI LUE VOWEL SIGN II;Lo;0;L;;;;;N;;;;; 19B3;NEW TAI LUE VOWEL SIGN U;Lo;0;L;;;;;N;;;;; 19B4;NEW TAI LUE VOWEL SIGN UU;Lo;0;L;;;;;N;;;;; 19B5;NEW TAI LUE VOWEL SIGN E;Lo;0;L;;;;;N;;;;; 19B6;NEW TAI LUE VOWEL SIGN AE;Lo;0;L;;;;;N;;;;; 19B7;NEW TAI LUE VOWEL SIGN O;Lo;0;L;;;;;N;;;;; 19B8;NEW TAI LUE VOWEL SIGN OA;Lo;0;L;;;;;N;;;;; 19B9;NEW TAI LUE VOWEL SIGN UE;Lo;0;L;;;;;N;;;;; 19BA;NEW TAI LUE VOWEL SIGN AY;Lo;0;L;;;;;N;;;;; 19BB;NEW TAI LUE VOWEL SIGN AAY;Lo;0;L;;;;;N;;;;; 19BC;NEW TAI LUE VOWEL SIGN UY;Lo;0;L;;;;;N;;;;; 19BD;NEW TAI LUE VOWEL SIGN OY;Lo;0;L;;;;;N;;;;; 19BE;NEW TAI LUE VOWEL SIGN OAY;Lo;0;L;;;;;N;;;;; 19BF;NEW TAI LUE VOWEL SIGN UEY;Lo;0;L;;;;;N;;;;; 19C0;NEW TAI LUE VOWEL SIGN IY;Lo;0;L;;;;;N;;;;; 19C1;NEW TAI LUE LETTER FINAL V;Lo;0;L;;;;;N;;;;; 19C2;NEW TAI LUE LETTER FINAL NG;Lo;0;L;;;;;N;;;;; 19C3;NEW TAI LUE LETTER FINAL N;Lo;0;L;;;;;N;;;;; 19C4;NEW TAI LUE LETTER FINAL M;Lo;0;L;;;;;N;;;;; 19C5;NEW TAI LUE LETTER FINAL K;Lo;0;L;;;;;N;;;;; 19C6;NEW TAI LUE LETTER FINAL D;Lo;0;L;;;;;N;;;;; 19C7;NEW TAI LUE LETTER FINAL B;Lo;0;L;;;;;N;;;;; 19C8;NEW TAI LUE TONE MARK-1;Lo;0;L;;;;;N;;;;; 19C9;NEW TAI LUE TONE MARK-2;Lo;0;L;;;;;N;;;;; 19D0;NEW TAI LUE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 19D1;NEW TAI LUE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 19D2;NEW TAI LUE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 19D3;NEW TAI LUE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 19D4;NEW TAI LUE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 19D5;NEW TAI LUE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 19D6;NEW TAI LUE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 19D7;NEW TAI LUE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 19D8;NEW TAI LUE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 19D9;NEW TAI LUE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 19DA;NEW TAI LUE THAM DIGIT ONE;No;0;L;;;1;1;N;;;;; 19DE;NEW TAI LUE SIGN LAE;So;0;ON;;;;;N;;;;; 19DF;NEW TAI LUE SIGN LAEV;So;0;ON;;;;;N;;;;; 19E0;KHMER SYMBOL PATHAMASAT;So;0;ON;;;;;N;;;;; 19E1;KHMER SYMBOL MUOY KOET;So;0;ON;;;;;N;;;;; 19E2;KHMER SYMBOL PII KOET;So;0;ON;;;;;N;;;;; 19E3;KHMER SYMBOL BEI KOET;So;0;ON;;;;;N;;;;; 19E4;KHMER SYMBOL BUON KOET;So;0;ON;;;;;N;;;;; 19E5;KHMER SYMBOL PRAM KOET;So;0;ON;;;;;N;;;;; 19E6;KHMER SYMBOL PRAM-MUOY KOET;So;0;ON;;;;;N;;;;; 19E7;KHMER SYMBOL PRAM-PII KOET;So;0;ON;;;;;N;;;;; 19E8;KHMER SYMBOL PRAM-BEI KOET;So;0;ON;;;;;N;;;;; 19E9;KHMER SYMBOL PRAM-BUON KOET;So;0;ON;;;;;N;;;;; 19EA;KHMER SYMBOL DAP KOET;So;0;ON;;;;;N;;;;; 19EB;KHMER SYMBOL DAP-MUOY KOET;So;0;ON;;;;;N;;;;; 19EC;KHMER SYMBOL DAP-PII KOET;So;0;ON;;;;;N;;;;; 19ED;KHMER SYMBOL DAP-BEI KOET;So;0;ON;;;;;N;;;;; 19EE;KHMER SYMBOL DAP-BUON KOET;So;0;ON;;;;;N;;;;; 19EF;KHMER SYMBOL DAP-PRAM KOET;So;0;ON;;;;;N;;;;; 19F0;KHMER SYMBOL TUTEYASAT;So;0;ON;;;;;N;;;;; 19F1;KHMER SYMBOL MUOY ROC;So;0;ON;;;;;N;;;;; 19F2;KHMER SYMBOL PII ROC;So;0;ON;;;;;N;;;;; 19F3;KHMER SYMBOL BEI ROC;So;0;ON;;;;;N;;;;; 19F4;KHMER SYMBOL BUON ROC;So;0;ON;;;;;N;;;;; 19F5;KHMER SYMBOL PRAM ROC;So;0;ON;;;;;N;;;;; 19F6;KHMER SYMBOL PRAM-MUOY ROC;So;0;ON;;;;;N;;;;; 19F7;KHMER SYMBOL PRAM-PII ROC;So;0;ON;;;;;N;;;;; 19F8;KHMER SYMBOL PRAM-BEI ROC;So;0;ON;;;;;N;;;;; 19F9;KHMER SYMBOL PRAM-BUON ROC;So;0;ON;;;;;N;;;;; 19FA;KHMER SYMBOL DAP ROC;So;0;ON;;;;;N;;;;; 19FB;KHMER SYMBOL DAP-MUOY ROC;So;0;ON;;;;;N;;;;; 19FC;KHMER SYMBOL DAP-PII ROC;So;0;ON;;;;;N;;;;; 19FD;KHMER SYMBOL DAP-BEI ROC;So;0;ON;;;;;N;;;;; 19FE;KHMER SYMBOL DAP-BUON ROC;So;0;ON;;;;;N;;;;; 19FF;KHMER SYMBOL DAP-PRAM ROC;So;0;ON;;;;;N;;;;; 1A00;BUGINESE LETTER KA;Lo;0;L;;;;;N;;;;; 1A01;BUGINESE LETTER GA;Lo;0;L;;;;;N;;;;; 1A02;BUGINESE LETTER NGA;Lo;0;L;;;;;N;;;;; 1A03;BUGINESE LETTER NGKA;Lo;0;L;;;;;N;;;;; 1A04;BUGINESE LETTER PA;Lo;0;L;;;;;N;;;;; 1A05;BUGINESE LETTER BA;Lo;0;L;;;;;N;;;;; 1A06;BUGINESE LETTER MA;Lo;0;L;;;;;N;;;;; 1A07;BUGINESE LETTER MPA;Lo;0;L;;;;;N;;;;; 1A08;BUGINESE LETTER TA;Lo;0;L;;;;;N;;;;; 1A09;BUGINESE LETTER DA;Lo;0;L;;;;;N;;;;; 1A0A;BUGINESE LETTER NA;Lo;0;L;;;;;N;;;;; 1A0B;BUGINESE LETTER NRA;Lo;0;L;;;;;N;;;;; 1A0C;BUGINESE LETTER CA;Lo;0;L;;;;;N;;;;; 1A0D;BUGINESE LETTER JA;Lo;0;L;;;;;N;;;;; 1A0E;BUGINESE LETTER NYA;Lo;0;L;;;;;N;;;;; 1A0F;BUGINESE LETTER NYCA;Lo;0;L;;;;;N;;;;; 1A10;BUGINESE LETTER YA;Lo;0;L;;;;;N;;;;; 1A11;BUGINESE LETTER RA;Lo;0;L;;;;;N;;;;; 1A12;BUGINESE LETTER LA;Lo;0;L;;;;;N;;;;; 1A13;BUGINESE LETTER VA;Lo;0;L;;;;;N;;;;; 1A14;BUGINESE LETTER SA;Lo;0;L;;;;;N;;;;; 1A15;BUGINESE LETTER A;Lo;0;L;;;;;N;;;;; 1A16;BUGINESE LETTER HA;Lo;0;L;;;;;N;;;;; 1A17;BUGINESE VOWEL SIGN I;Mn;230;NSM;;;;;N;;;;; 1A18;BUGINESE VOWEL SIGN U;Mn;220;NSM;;;;;N;;;;; 1A19;BUGINESE VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 1A1A;BUGINESE VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 1A1B;BUGINESE VOWEL SIGN AE;Mn;0;NSM;;;;;N;;;;; 1A1E;BUGINESE PALLAWA;Po;0;L;;;;;N;;;;; 1A1F;BUGINESE END OF SECTION;Po;0;L;;;;;N;;;;; 1A20;TAI THAM LETTER HIGH KA;Lo;0;L;;;;;N;;;;; 1A21;TAI THAM LETTER HIGH KHA;Lo;0;L;;;;;N;;;;; 1A22;TAI THAM LETTER HIGH KXA;Lo;0;L;;;;;N;;;;; 1A23;TAI THAM LETTER LOW KA;Lo;0;L;;;;;N;;;;; 1A24;TAI THAM LETTER LOW KXA;Lo;0;L;;;;;N;;;;; 1A25;TAI THAM LETTER LOW KHA;Lo;0;L;;;;;N;;;;; 1A26;TAI THAM LETTER NGA;Lo;0;L;;;;;N;;;;; 1A27;TAI THAM LETTER HIGH CA;Lo;0;L;;;;;N;;;;; 1A28;TAI THAM LETTER HIGH CHA;Lo;0;L;;;;;N;;;;; 1A29;TAI THAM LETTER LOW CA;Lo;0;L;;;;;N;;;;; 1A2A;TAI THAM LETTER LOW SA;Lo;0;L;;;;;N;;;;; 1A2B;TAI THAM LETTER LOW CHA;Lo;0;L;;;;;N;;;;; 1A2C;TAI THAM LETTER NYA;Lo;0;L;;;;;N;;;;; 1A2D;TAI THAM LETTER RATA;Lo;0;L;;;;;N;;;;; 1A2E;TAI THAM LETTER HIGH RATHA;Lo;0;L;;;;;N;;;;; 1A2F;TAI THAM LETTER DA;Lo;0;L;;;;;N;;;;; 1A30;TAI THAM LETTER LOW RATHA;Lo;0;L;;;;;N;;;;; 1A31;TAI THAM LETTER RANA;Lo;0;L;;;;;N;;;;; 1A32;TAI THAM LETTER HIGH TA;Lo;0;L;;;;;N;;;;; 1A33;TAI THAM LETTER HIGH THA;Lo;0;L;;;;;N;;;;; 1A34;TAI THAM LETTER LOW TA;Lo;0;L;;;;;N;;;;; 1A35;TAI THAM LETTER LOW THA;Lo;0;L;;;;;N;;;;; 1A36;TAI THAM LETTER NA;Lo;0;L;;;;;N;;;;; 1A37;TAI THAM LETTER BA;Lo;0;L;;;;;N;;;;; 1A38;TAI THAM LETTER HIGH PA;Lo;0;L;;;;;N;;;;; 1A39;TAI THAM LETTER HIGH PHA;Lo;0;L;;;;;N;;;;; 1A3A;TAI THAM LETTER HIGH FA;Lo;0;L;;;;;N;;;;; 1A3B;TAI THAM LETTER LOW PA;Lo;0;L;;;;;N;;;;; 1A3C;TAI THAM LETTER LOW FA;Lo;0;L;;;;;N;;;;; 1A3D;TAI THAM LETTER LOW PHA;Lo;0;L;;;;;N;;;;; 1A3E;TAI THAM LETTER MA;Lo;0;L;;;;;N;;;;; 1A3F;TAI THAM LETTER LOW YA;Lo;0;L;;;;;N;;;;; 1A40;TAI THAM LETTER HIGH YA;Lo;0;L;;;;;N;;;;; 1A41;TAI THAM LETTER RA;Lo;0;L;;;;;N;;;;; 1A42;TAI THAM LETTER RUE;Lo;0;L;;;;;N;;;;; 1A43;TAI THAM LETTER LA;Lo;0;L;;;;;N;;;;; 1A44;TAI THAM LETTER LUE;Lo;0;L;;;;;N;;;;; 1A45;TAI THAM LETTER WA;Lo;0;L;;;;;N;;;;; 1A46;TAI THAM LETTER HIGH SHA;Lo;0;L;;;;;N;;;;; 1A47;TAI THAM LETTER HIGH SSA;Lo;0;L;;;;;N;;;;; 1A48;TAI THAM LETTER HIGH SA;Lo;0;L;;;;;N;;;;; 1A49;TAI THAM LETTER HIGH HA;Lo;0;L;;;;;N;;;;; 1A4A;TAI THAM LETTER LLA;Lo;0;L;;;;;N;;;;; 1A4B;TAI THAM LETTER A;Lo;0;L;;;;;N;;;;; 1A4C;TAI THAM LETTER LOW HA;Lo;0;L;;;;;N;;;;; 1A4D;TAI THAM LETTER I;Lo;0;L;;;;;N;;;;; 1A4E;TAI THAM LETTER II;Lo;0;L;;;;;N;;;;; 1A4F;TAI THAM LETTER U;Lo;0;L;;;;;N;;;;; 1A50;TAI THAM LETTER UU;Lo;0;L;;;;;N;;;;; 1A51;TAI THAM LETTER EE;Lo;0;L;;;;;N;;;;; 1A52;TAI THAM LETTER OO;Lo;0;L;;;;;N;;;;; 1A53;TAI THAM LETTER LAE;Lo;0;L;;;;;N;;;;; 1A54;TAI THAM LETTER GREAT SA;Lo;0;L;;;;;N;;;;; 1A55;TAI THAM CONSONANT SIGN MEDIAL RA;Mc;0;L;;;;;N;;;;; 1A56;TAI THAM CONSONANT SIGN MEDIAL LA;Mn;0;NSM;;;;;N;;;;; 1A57;TAI THAM CONSONANT SIGN LA TANG LAI;Mc;0;L;;;;;N;;;;; 1A58;TAI THAM SIGN MAI KANG LAI;Mn;0;NSM;;;;;N;;;;; 1A59;TAI THAM CONSONANT SIGN FINAL NGA;Mn;0;NSM;;;;;N;;;;; 1A5A;TAI THAM CONSONANT SIGN LOW PA;Mn;0;NSM;;;;;N;;;;; 1A5B;TAI THAM CONSONANT SIGN HIGH RATHA OR LOW PA;Mn;0;NSM;;;;;N;;;;; 1A5C;TAI THAM CONSONANT SIGN MA;Mn;0;NSM;;;;;N;;;;; 1A5D;TAI THAM CONSONANT SIGN BA;Mn;0;NSM;;;;;N;;;;; 1A5E;TAI THAM CONSONANT SIGN SA;Mn;0;NSM;;;;;N;;;;; 1A60;TAI THAM SIGN SAKOT;Mn;9;NSM;;;;;N;;;;; 1A61;TAI THAM VOWEL SIGN A;Mc;0;L;;;;;N;;;;; 1A62;TAI THAM VOWEL SIGN MAI SAT;Mn;0;NSM;;;;;N;;;;; 1A63;TAI THAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 1A64;TAI THAM VOWEL SIGN TALL AA;Mc;0;L;;;;;N;;;;; 1A65;TAI THAM VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1A66;TAI THAM VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 1A67;TAI THAM VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;; 1A68;TAI THAM VOWEL SIGN UUE;Mn;0;NSM;;;;;N;;;;; 1A69;TAI THAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1A6A;TAI THAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 1A6B;TAI THAM VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 1A6C;TAI THAM VOWEL SIGN OA BELOW;Mn;0;NSM;;;;;N;;;;; 1A6D;TAI THAM VOWEL SIGN OY;Mc;0;L;;;;;N;;;;; 1A6E;TAI THAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 1A6F;TAI THAM VOWEL SIGN AE;Mc;0;L;;;;;N;;;;; 1A70;TAI THAM VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; 1A71;TAI THAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 1A72;TAI THAM VOWEL SIGN THAM AI;Mc;0;L;;;;;N;;;;; 1A73;TAI THAM VOWEL SIGN OA ABOVE;Mn;0;NSM;;;;;N;;;;; 1A74;TAI THAM SIGN MAI KANG;Mn;0;NSM;;;;;N;;;;; 1A75;TAI THAM SIGN TONE-1;Mn;230;NSM;;;;;N;;;;; 1A76;TAI THAM SIGN TONE-2;Mn;230;NSM;;;;;N;;;;; 1A77;TAI THAM SIGN KHUEN TONE-3;Mn;230;NSM;;;;;N;;;;; 1A78;TAI THAM SIGN KHUEN TONE-4;Mn;230;NSM;;;;;N;;;;; 1A79;TAI THAM SIGN KHUEN TONE-5;Mn;230;NSM;;;;;N;;;;; 1A7A;TAI THAM SIGN RA HAAM;Mn;230;NSM;;;;;N;;;;; 1A7B;TAI THAM SIGN MAI SAM;Mn;230;NSM;;;;;N;;;;; 1A7C;TAI THAM SIGN KHUEN-LUE KARAN;Mn;230;NSM;;;;;N;;;;; 1A7F;TAI THAM COMBINING CRYPTOGRAMMIC DOT;Mn;220;NSM;;;;;N;;;;; 1A80;TAI THAM HORA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1A81;TAI THAM HORA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1A82;TAI THAM HORA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1A83;TAI THAM HORA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1A84;TAI THAM HORA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1A85;TAI THAM HORA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1A86;TAI THAM HORA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1A87;TAI THAM HORA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1A88;TAI THAM HORA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1A89;TAI THAM HORA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1A90;TAI THAM THAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1A91;TAI THAM THAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1A92;TAI THAM THAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1A93;TAI THAM THAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1A94;TAI THAM THAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1A95;TAI THAM THAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1A96;TAI THAM THAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1A97;TAI THAM THAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1A98;TAI THAM THAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1A99;TAI THAM THAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1AA0;TAI THAM SIGN WIANG;Po;0;L;;;;;N;;;;; 1AA1;TAI THAM SIGN WIANGWAAK;Po;0;L;;;;;N;;;;; 1AA2;TAI THAM SIGN SAWAN;Po;0;L;;;;;N;;;;; 1AA3;TAI THAM SIGN KEOW;Po;0;L;;;;;N;;;;; 1AA4;TAI THAM SIGN HOY;Po;0;L;;;;;N;;;;; 1AA5;TAI THAM SIGN DOKMAI;Po;0;L;;;;;N;;;;; 1AA6;TAI THAM SIGN REVERSED ROTATED RANA;Po;0;L;;;;;N;;;;; 1AA7;TAI THAM SIGN MAI YAMOK;Lm;0;L;;;;;N;;;;; 1AA8;TAI THAM SIGN KAAN;Po;0;L;;;;;N;;;;; 1AA9;TAI THAM SIGN KAANKUU;Po;0;L;;;;;N;;;;; 1AAA;TAI THAM SIGN SATKAAN;Po;0;L;;;;;N;;;;; 1AAB;TAI THAM SIGN SATKAANKUU;Po;0;L;;;;;N;;;;; 1AAC;TAI THAM SIGN HANG;Po;0;L;;;;;N;;;;; 1AAD;TAI THAM SIGN CAANG;Po;0;L;;;;;N;;;;; 1AB0;COMBINING DOUBLED CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;;;;; 1AB1;COMBINING DIAERESIS-RING;Mn;230;NSM;;;;;N;;;;; 1AB2;COMBINING INFINITY;Mn;230;NSM;;;;;N;;;;; 1AB3;COMBINING DOWNWARDS ARROW;Mn;230;NSM;;;;;N;;;;; 1AB4;COMBINING TRIPLE DOT;Mn;230;NSM;;;;;N;;;;; 1AB5;COMBINING X-X BELOW;Mn;220;NSM;;;;;N;;;;; 1AB6;COMBINING WIGGLY LINE BELOW;Mn;220;NSM;;;;;N;;;;; 1AB7;COMBINING OPEN MARK BELOW;Mn;220;NSM;;;;;N;;;;; 1AB8;COMBINING DOUBLE OPEN MARK BELOW;Mn;220;NSM;;;;;N;;;;; 1AB9;COMBINING LIGHT CENTRALIZATION STROKE BELOW;Mn;220;NSM;;;;;N;;;;; 1ABA;COMBINING STRONG CENTRALIZATION STROKE BELOW;Mn;220;NSM;;;;;N;;;;; 1ABB;COMBINING PARENTHESES ABOVE;Mn;230;NSM;;;;;N;;;;; 1ABC;COMBINING DOUBLE PARENTHESES ABOVE;Mn;230;NSM;;;;;N;;;;; 1ABD;COMBINING PARENTHESES BELOW;Mn;220;NSM;;;;;N;;;;; 1ABE;COMBINING PARENTHESES OVERLAY;Me;0;NSM;;;;;N;;;;; 1ABF;COMBINING LATIN SMALL LETTER W BELOW;Mn;220;NSM;;;;;N;;;;; 1AC0;COMBINING LATIN SMALL LETTER TURNED W BELOW;Mn;220;NSM;;;;;N;;;;; 1AC1;COMBINING LEFT PARENTHESIS ABOVE LEFT;Mn;230;NSM;;;;;N;;;;; 1AC2;COMBINING RIGHT PARENTHESIS ABOVE RIGHT;Mn;230;NSM;;;;;N;;;;; 1AC3;COMBINING LEFT PARENTHESIS BELOW LEFT;Mn;220;NSM;;;;;N;;;;; 1AC4;COMBINING RIGHT PARENTHESIS BELOW RIGHT;Mn;220;NSM;;;;;N;;;;; 1AC5;COMBINING SQUARE BRACKETS ABOVE;Mn;230;NSM;;;;;N;;;;; 1AC6;COMBINING NUMBER SIGN ABOVE;Mn;230;NSM;;;;;N;;;;; 1AC7;COMBINING INVERTED DOUBLE ARCH ABOVE;Mn;230;NSM;;;;;N;;;;; 1AC8;COMBINING PLUS SIGN ABOVE;Mn;230;NSM;;;;;N;;;;; 1AC9;COMBINING DOUBLE PLUS SIGN ABOVE;Mn;230;NSM;;;;;N;;;;; 1ACA;COMBINING DOUBLE PLUS SIGN BELOW;Mn;220;NSM;;;;;N;;;;; 1ACB;COMBINING TRIPLE ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;; 1ACC;COMBINING LATIN SMALL LETTER INSULAR G;Mn;230;NSM;;;;;N;;;;; 1ACD;COMBINING LATIN SMALL LETTER INSULAR R;Mn;230;NSM;;;;;N;;;;; 1ACE;COMBINING LATIN SMALL LETTER INSULAR T;Mn;230;NSM;;;;;N;;;;; 1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;;;; 1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;;;; 1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;;;; 1B03;BALINESE SIGN SURANG;Mn;0;NSM;;;;;N;;;;; 1B04;BALINESE SIGN BISAH;Mc;0;L;;;;;N;;;;; 1B05;BALINESE LETTER AKARA;Lo;0;L;;;;;N;;;;; 1B06;BALINESE LETTER AKARA TEDUNG;Lo;0;L;1B05 1B35;;;;N;;;;; 1B07;BALINESE LETTER IKARA;Lo;0;L;;;;;N;;;;; 1B08;BALINESE LETTER IKARA TEDUNG;Lo;0;L;1B07 1B35;;;;N;;;;; 1B09;BALINESE LETTER UKARA;Lo;0;L;;;;;N;;;;; 1B0A;BALINESE LETTER UKARA TEDUNG;Lo;0;L;1B09 1B35;;;;N;;;;; 1B0B;BALINESE LETTER RA REPA;Lo;0;L;;;;;N;;;;; 1B0C;BALINESE LETTER RA REPA TEDUNG;Lo;0;L;1B0B 1B35;;;;N;;;;; 1B0D;BALINESE LETTER LA LENGA;Lo;0;L;;;;;N;;;;; 1B0E;BALINESE LETTER LA LENGA TEDUNG;Lo;0;L;1B0D 1B35;;;;N;;;;; 1B0F;BALINESE LETTER EKARA;Lo;0;L;;;;;N;;;;; 1B10;BALINESE LETTER AIKARA;Lo;0;L;;;;;N;;;;; 1B11;BALINESE LETTER OKARA;Lo;0;L;;;;;N;;;;; 1B12;BALINESE LETTER OKARA TEDUNG;Lo;0;L;1B11 1B35;;;;N;;;;; 1B13;BALINESE LETTER KA;Lo;0;L;;;;;N;;;;; 1B14;BALINESE LETTER KA MAHAPRANA;Lo;0;L;;;;;N;;;;; 1B15;BALINESE LETTER GA;Lo;0;L;;;;;N;;;;; 1B16;BALINESE LETTER GA GORA;Lo;0;L;;;;;N;;;;; 1B17;BALINESE LETTER NGA;Lo;0;L;;;;;N;;;;; 1B18;BALINESE LETTER CA;Lo;0;L;;;;;N;;;;; 1B19;BALINESE LETTER CA LACA;Lo;0;L;;;;;N;;;;; 1B1A;BALINESE LETTER JA;Lo;0;L;;;;;N;;;;; 1B1B;BALINESE LETTER JA JERA;Lo;0;L;;;;;N;;;;; 1B1C;BALINESE LETTER NYA;Lo;0;L;;;;;N;;;;; 1B1D;BALINESE LETTER TA LATIK;Lo;0;L;;;;;N;;;;; 1B1E;BALINESE LETTER TA MURDA MAHAPRANA;Lo;0;L;;;;;N;;;;; 1B1F;BALINESE LETTER DA MURDA ALPAPRANA;Lo;0;L;;;;;N;;;;; 1B20;BALINESE LETTER DA MURDA MAHAPRANA;Lo;0;L;;;;;N;;;;; 1B21;BALINESE LETTER NA RAMBAT;Lo;0;L;;;;;N;;;;; 1B22;BALINESE LETTER TA;Lo;0;L;;;;;N;;;;; 1B23;BALINESE LETTER TA TAWA;Lo;0;L;;;;;N;;;;; 1B24;BALINESE LETTER DA;Lo;0;L;;;;;N;;;;; 1B25;BALINESE LETTER DA MADU;Lo;0;L;;;;;N;;;;; 1B26;BALINESE LETTER NA;Lo;0;L;;;;;N;;;;; 1B27;BALINESE LETTER PA;Lo;0;L;;;;;N;;;;; 1B28;BALINESE LETTER PA KAPAL;Lo;0;L;;;;;N;;;;; 1B29;BALINESE LETTER BA;Lo;0;L;;;;;N;;;;; 1B2A;BALINESE LETTER BA KEMBANG;Lo;0;L;;;;;N;;;;; 1B2B;BALINESE LETTER MA;Lo;0;L;;;;;N;;;;; 1B2C;BALINESE LETTER YA;Lo;0;L;;;;;N;;;;; 1B2D;BALINESE LETTER RA;Lo;0;L;;;;;N;;;;; 1B2E;BALINESE LETTER LA;Lo;0;L;;;;;N;;;;; 1B2F;BALINESE LETTER WA;Lo;0;L;;;;;N;;;;; 1B30;BALINESE LETTER SA SAGA;Lo;0;L;;;;;N;;;;; 1B31;BALINESE LETTER SA SAPA;Lo;0;L;;;;;N;;;;; 1B32;BALINESE LETTER SA;Lo;0;L;;;;;N;;;;; 1B33;BALINESE LETTER HA;Lo;0;L;;;;;N;;;;; 1B34;BALINESE SIGN REREKAN;Mn;7;NSM;;;;;N;;;;; 1B35;BALINESE VOWEL SIGN TEDUNG;Mc;0;L;;;;;N;;;;; 1B36;BALINESE VOWEL SIGN ULU;Mn;0;NSM;;;;;N;;;;; 1B37;BALINESE VOWEL SIGN ULU SARI;Mn;0;NSM;;;;;N;;;;; 1B38;BALINESE VOWEL SIGN SUKU;Mn;0;NSM;;;;;N;;;;; 1B39;BALINESE VOWEL SIGN SUKU ILUT;Mn;0;NSM;;;;;N;;;;; 1B3A;BALINESE VOWEL SIGN RA REPA;Mn;0;NSM;;;;;N;;;;; 1B3B;BALINESE VOWEL SIGN RA REPA TEDUNG;Mc;0;L;1B3A 1B35;;;;N;;;;; 1B3C;BALINESE VOWEL SIGN LA LENGA;Mn;0;NSM;;;;;N;;;;; 1B3D;BALINESE VOWEL SIGN LA LENGA TEDUNG;Mc;0;L;1B3C 1B35;;;;N;;;;; 1B3E;BALINESE VOWEL SIGN TALING;Mc;0;L;;;;;N;;;;; 1B3F;BALINESE VOWEL SIGN TALING REPA;Mc;0;L;;;;;N;;;;; 1B40;BALINESE VOWEL SIGN TALING TEDUNG;Mc;0;L;1B3E 1B35;;;;N;;;;; 1B41;BALINESE VOWEL SIGN TALING REPA TEDUNG;Mc;0;L;1B3F 1B35;;;;N;;;;; 1B42;BALINESE VOWEL SIGN PEPET;Mn;0;NSM;;;;;N;;;;; 1B43;BALINESE VOWEL SIGN PEPET TEDUNG;Mc;0;L;1B42 1B35;;;;N;;;;; 1B44;BALINESE ADEG ADEG;Mc;9;L;;;;;N;;;;; 1B45;BALINESE LETTER KAF SASAK;Lo;0;L;;;;;N;;;;; 1B46;BALINESE LETTER KHOT SASAK;Lo;0;L;;;;;N;;;;; 1B47;BALINESE LETTER TZIR SASAK;Lo;0;L;;;;;N;;;;; 1B48;BALINESE LETTER EF SASAK;Lo;0;L;;;;;N;;;;; 1B49;BALINESE LETTER VE SASAK;Lo;0;L;;;;;N;;;;; 1B4A;BALINESE LETTER ZAL SASAK;Lo;0;L;;;;;N;;;;; 1B4B;BALINESE LETTER ASYURA SASAK;Lo;0;L;;;;;N;;;;; 1B4C;BALINESE LETTER ARCHAIC JNYA;Lo;0;L;;;;;N;;;;; 1B50;BALINESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1B51;BALINESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1B52;BALINESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1B53;BALINESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1B54;BALINESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1B55;BALINESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1B56;BALINESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1B57;BALINESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1B58;BALINESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1B59;BALINESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1B5A;BALINESE PANTI;Po;0;L;;;;;N;;;;; 1B5B;BALINESE PAMADA;Po;0;L;;;;;N;;;;; 1B5C;BALINESE WINDU;Po;0;L;;;;;N;;;;; 1B5D;BALINESE CARIK PAMUNGKAH;Po;0;L;;;;;N;;;;; 1B5E;BALINESE CARIK SIKI;Po;0;L;;;;;N;;;;; 1B5F;BALINESE CARIK PAREREN;Po;0;L;;;;;N;;;;; 1B60;BALINESE PAMENENG;Po;0;L;;;;;N;;;;; 1B61;BALINESE MUSICAL SYMBOL DONG;So;0;L;;;;;N;;;;; 1B62;BALINESE MUSICAL SYMBOL DENG;So;0;L;;;;;N;;;;; 1B63;BALINESE MUSICAL SYMBOL DUNG;So;0;L;;;;;N;;;;; 1B64;BALINESE MUSICAL SYMBOL DANG;So;0;L;;;;;N;;;;; 1B65;BALINESE MUSICAL SYMBOL DANG SURANG;So;0;L;;;;;N;;;;; 1B66;BALINESE MUSICAL SYMBOL DING;So;0;L;;;;;N;;;;; 1B67;BALINESE MUSICAL SYMBOL DAENG;So;0;L;;;;;N;;;;; 1B68;BALINESE MUSICAL SYMBOL DEUNG;So;0;L;;;;;N;;;;; 1B69;BALINESE MUSICAL SYMBOL DAING;So;0;L;;;;;N;;;;; 1B6A;BALINESE MUSICAL SYMBOL DANG GEDE;So;0;L;;;;;N;;;;; 1B6B;BALINESE MUSICAL SYMBOL COMBINING TEGEH;Mn;230;NSM;;;;;N;;;;; 1B6C;BALINESE MUSICAL SYMBOL COMBINING ENDEP;Mn;220;NSM;;;;;N;;;;; 1B6D;BALINESE MUSICAL SYMBOL COMBINING KEMPUL;Mn;230;NSM;;;;;N;;;;; 1B6E;BALINESE MUSICAL SYMBOL COMBINING KEMPLI;Mn;230;NSM;;;;;N;;;;; 1B6F;BALINESE MUSICAL SYMBOL COMBINING JEGOGAN;Mn;230;NSM;;;;;N;;;;; 1B70;BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;; 1B71;BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;; 1B72;BALINESE MUSICAL SYMBOL COMBINING BENDE;Mn;230;NSM;;;;;N;;;;; 1B73;BALINESE MUSICAL SYMBOL COMBINING GONG;Mn;230;NSM;;;;;N;;;;; 1B74;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG;So;0;L;;;;;N;;;;; 1B75;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG;So;0;L;;;;;N;;;;; 1B76;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK;So;0;L;;;;;N;;;;; 1B77;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK;So;0;L;;;;;N;;;;; 1B78;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG;So;0;L;;;;;N;;;;; 1B79;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG;So;0;L;;;;;N;;;;; 1B7A;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK;So;0;L;;;;;N;;;;; 1B7B;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK;So;0;L;;;;;N;;;;; 1B7C;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING;So;0;L;;;;;N;;;;; 1B7D;BALINESE PANTI LANTANG;Po;0;L;;;;;N;;;;; 1B7E;BALINESE PAMADA LANTANG;Po;0;L;;;;;N;;;;; 1B80;SUNDANESE SIGN PANYECEK;Mn;0;NSM;;;;;N;;;;; 1B81;SUNDANESE SIGN PANGLAYAR;Mn;0;NSM;;;;;N;;;;; 1B82;SUNDANESE SIGN PANGWISAD;Mc;0;L;;;;;N;;;;; 1B83;SUNDANESE LETTER A;Lo;0;L;;;;;N;;;;; 1B84;SUNDANESE LETTER I;Lo;0;L;;;;;N;;;;; 1B85;SUNDANESE LETTER U;Lo;0;L;;;;;N;;;;; 1B86;SUNDANESE LETTER AE;Lo;0;L;;;;;N;;;;; 1B87;SUNDANESE LETTER O;Lo;0;L;;;;;N;;;;; 1B88;SUNDANESE LETTER E;Lo;0;L;;;;;N;;;;; 1B89;SUNDANESE LETTER EU;Lo;0;L;;;;;N;;;;; 1B8A;SUNDANESE LETTER KA;Lo;0;L;;;;;N;;;;; 1B8B;SUNDANESE LETTER QA;Lo;0;L;;;;;N;;;;; 1B8C;SUNDANESE LETTER GA;Lo;0;L;;;;;N;;;;; 1B8D;SUNDANESE LETTER NGA;Lo;0;L;;;;;N;;;;; 1B8E;SUNDANESE LETTER CA;Lo;0;L;;;;;N;;;;; 1B8F;SUNDANESE LETTER JA;Lo;0;L;;;;;N;;;;; 1B90;SUNDANESE LETTER ZA;Lo;0;L;;;;;N;;;;; 1B91;SUNDANESE LETTER NYA;Lo;0;L;;;;;N;;;;; 1B92;SUNDANESE LETTER TA;Lo;0;L;;;;;N;;;;; 1B93;SUNDANESE LETTER DA;Lo;0;L;;;;;N;;;;; 1B94;SUNDANESE LETTER NA;Lo;0;L;;;;;N;;;;; 1B95;SUNDANESE LETTER PA;Lo;0;L;;;;;N;;;;; 1B96;SUNDANESE LETTER FA;Lo;0;L;;;;;N;;;;; 1B97;SUNDANESE LETTER VA;Lo;0;L;;;;;N;;;;; 1B98;SUNDANESE LETTER BA;Lo;0;L;;;;;N;;;;; 1B99;SUNDANESE LETTER MA;Lo;0;L;;;;;N;;;;; 1B9A;SUNDANESE LETTER YA;Lo;0;L;;;;;N;;;;; 1B9B;SUNDANESE LETTER RA;Lo;0;L;;;;;N;;;;; 1B9C;SUNDANESE LETTER LA;Lo;0;L;;;;;N;;;;; 1B9D;SUNDANESE LETTER WA;Lo;0;L;;;;;N;;;;; 1B9E;SUNDANESE LETTER SA;Lo;0;L;;;;;N;;;;; 1B9F;SUNDANESE LETTER XA;Lo;0;L;;;;;N;;;;; 1BA0;SUNDANESE LETTER HA;Lo;0;L;;;;;N;;;;; 1BA1;SUNDANESE CONSONANT SIGN PAMINGKAL;Mc;0;L;;;;;N;;;;; 1BA2;SUNDANESE CONSONANT SIGN PANYAKRA;Mn;0;NSM;;;;;N;;;;; 1BA3;SUNDANESE CONSONANT SIGN PANYIKU;Mn;0;NSM;;;;;N;;;;; 1BA4;SUNDANESE VOWEL SIGN PANGHULU;Mn;0;NSM;;;;;N;;;;; 1BA5;SUNDANESE VOWEL SIGN PANYUKU;Mn;0;NSM;;;;;N;;;;; 1BA6;SUNDANESE VOWEL SIGN PANAELAENG;Mc;0;L;;;;;N;;;;; 1BA7;SUNDANESE VOWEL SIGN PANOLONG;Mc;0;L;;;;;N;;;;; 1BA8;SUNDANESE VOWEL SIGN PAMEPET;Mn;0;NSM;;;;;N;;;;; 1BA9;SUNDANESE VOWEL SIGN PANEULEUNG;Mn;0;NSM;;;;;N;;;;; 1BAA;SUNDANESE SIGN PAMAAEH;Mc;9;L;;;;;N;;;;; 1BAB;SUNDANESE SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 1BAC;SUNDANESE CONSONANT SIGN PASANGAN MA;Mn;0;NSM;;;;;N;;;;; 1BAD;SUNDANESE CONSONANT SIGN PASANGAN WA;Mn;0;NSM;;;;;N;;;;; 1BAE;SUNDANESE LETTER KHA;Lo;0;L;;;;;N;;;;; 1BAF;SUNDANESE LETTER SYA;Lo;0;L;;;;;N;;;;; 1BB0;SUNDANESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1BB1;SUNDANESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1BB2;SUNDANESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1BB3;SUNDANESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1BB4;SUNDANESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1BB5;SUNDANESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1BB6;SUNDANESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1BB7;SUNDANESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1BB8;SUNDANESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1BB9;SUNDANESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1BBA;SUNDANESE AVAGRAHA;Lo;0;L;;;;;N;;;;; 1BBB;SUNDANESE LETTER REU;Lo;0;L;;;;;N;;;;; 1BBC;SUNDANESE LETTER LEU;Lo;0;L;;;;;N;;;;; 1BBD;SUNDANESE LETTER BHA;Lo;0;L;;;;;N;;;;; 1BBE;SUNDANESE LETTER FINAL K;Lo;0;L;;;;;N;;;;; 1BBF;SUNDANESE LETTER FINAL M;Lo;0;L;;;;;N;;;;; 1BC0;BATAK LETTER A;Lo;0;L;;;;;N;;;;; 1BC1;BATAK LETTER SIMALUNGUN A;Lo;0;L;;;;;N;;;;; 1BC2;BATAK LETTER HA;Lo;0;L;;;;;N;;;;; 1BC3;BATAK LETTER SIMALUNGUN HA;Lo;0;L;;;;;N;;;;; 1BC4;BATAK LETTER MANDAILING HA;Lo;0;L;;;;;N;;;;; 1BC5;BATAK LETTER BA;Lo;0;L;;;;;N;;;;; 1BC6;BATAK LETTER KARO BA;Lo;0;L;;;;;N;;;;; 1BC7;BATAK LETTER PA;Lo;0;L;;;;;N;;;;; 1BC8;BATAK LETTER SIMALUNGUN PA;Lo;0;L;;;;;N;;;;; 1BC9;BATAK LETTER NA;Lo;0;L;;;;;N;;;;; 1BCA;BATAK LETTER MANDAILING NA;Lo;0;L;;;;;N;;;;; 1BCB;BATAK LETTER WA;Lo;0;L;;;;;N;;;;; 1BCC;BATAK LETTER SIMALUNGUN WA;Lo;0;L;;;;;N;;;;; 1BCD;BATAK LETTER PAKPAK WA;Lo;0;L;;;;;N;;;;; 1BCE;BATAK LETTER GA;Lo;0;L;;;;;N;;;;; 1BCF;BATAK LETTER SIMALUNGUN GA;Lo;0;L;;;;;N;;;;; 1BD0;BATAK LETTER JA;Lo;0;L;;;;;N;;;;; 1BD1;BATAK LETTER DA;Lo;0;L;;;;;N;;;;; 1BD2;BATAK LETTER RA;Lo;0;L;;;;;N;;;;; 1BD3;BATAK LETTER SIMALUNGUN RA;Lo;0;L;;;;;N;;;;; 1BD4;BATAK LETTER MA;Lo;0;L;;;;;N;;;;; 1BD5;BATAK LETTER SIMALUNGUN MA;Lo;0;L;;;;;N;;;;; 1BD6;BATAK LETTER SOUTHERN TA;Lo;0;L;;;;;N;;;;; 1BD7;BATAK LETTER NORTHERN TA;Lo;0;L;;;;;N;;;;; 1BD8;BATAK LETTER SA;Lo;0;L;;;;;N;;;;; 1BD9;BATAK LETTER SIMALUNGUN SA;Lo;0;L;;;;;N;;;;; 1BDA;BATAK LETTER MANDAILING SA;Lo;0;L;;;;;N;;;;; 1BDB;BATAK LETTER YA;Lo;0;L;;;;;N;;;;; 1BDC;BATAK LETTER SIMALUNGUN YA;Lo;0;L;;;;;N;;;;; 1BDD;BATAK LETTER NGA;Lo;0;L;;;;;N;;;;; 1BDE;BATAK LETTER LA;Lo;0;L;;;;;N;;;;; 1BDF;BATAK LETTER SIMALUNGUN LA;Lo;0;L;;;;;N;;;;; 1BE0;BATAK LETTER NYA;Lo;0;L;;;;;N;;;;; 1BE1;BATAK LETTER CA;Lo;0;L;;;;;N;;;;; 1BE2;BATAK LETTER NDA;Lo;0;L;;;;;N;;;;; 1BE3;BATAK LETTER MBA;Lo;0;L;;;;;N;;;;; 1BE4;BATAK LETTER I;Lo;0;L;;;;;N;;;;; 1BE5;BATAK LETTER U;Lo;0;L;;;;;N;;;;; 1BE6;BATAK SIGN TOMPI;Mn;7;NSM;;;;;N;;;;; 1BE7;BATAK VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 1BE8;BATAK VOWEL SIGN PAKPAK E;Mn;0;NSM;;;;;N;;;;; 1BE9;BATAK VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;; 1BEA;BATAK VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 1BEB;BATAK VOWEL SIGN KARO I;Mc;0;L;;;;;N;;;;; 1BEC;BATAK VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 1BED;BATAK VOWEL SIGN KARO O;Mn;0;NSM;;;;;N;;;;; 1BEE;BATAK VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 1BEF;BATAK VOWEL SIGN U FOR SIMALUNGUN SA;Mn;0;NSM;;;;;N;;;;; 1BF0;BATAK CONSONANT SIGN NG;Mn;0;NSM;;;;;N;;;;; 1BF1;BATAK CONSONANT SIGN H;Mn;0;NSM;;;;;N;;;;; 1BF2;BATAK PANGOLAT;Mc;9;L;;;;;N;;;;; 1BF3;BATAK PANONGONAN;Mc;9;L;;;;;N;;;;; 1BFC;BATAK SYMBOL BINDU NA METEK;Po;0;L;;;;;N;;;;; 1BFD;BATAK SYMBOL BINDU PINARBORAS;Po;0;L;;;;;N;;;;; 1BFE;BATAK SYMBOL BINDU JUDUL;Po;0;L;;;;;N;;;;; 1BFF;BATAK SYMBOL BINDU PANGOLAT;Po;0;L;;;;;N;;;;; 1C00;LEPCHA LETTER KA;Lo;0;L;;;;;N;;;;; 1C01;LEPCHA LETTER KLA;Lo;0;L;;;;;N;;;;; 1C02;LEPCHA LETTER KHA;Lo;0;L;;;;;N;;;;; 1C03;LEPCHA LETTER GA;Lo;0;L;;;;;N;;;;; 1C04;LEPCHA LETTER GLA;Lo;0;L;;;;;N;;;;; 1C05;LEPCHA LETTER NGA;Lo;0;L;;;;;N;;;;; 1C06;LEPCHA LETTER CA;Lo;0;L;;;;;N;;;;; 1C07;LEPCHA LETTER CHA;Lo;0;L;;;;;N;;;;; 1C08;LEPCHA LETTER JA;Lo;0;L;;;;;N;;;;; 1C09;LEPCHA LETTER NYA;Lo;0;L;;;;;N;;;;; 1C0A;LEPCHA LETTER TA;Lo;0;L;;;;;N;;;;; 1C0B;LEPCHA LETTER THA;Lo;0;L;;;;;N;;;;; 1C0C;LEPCHA LETTER DA;Lo;0;L;;;;;N;;;;; 1C0D;LEPCHA LETTER NA;Lo;0;L;;;;;N;;;;; 1C0E;LEPCHA LETTER PA;Lo;0;L;;;;;N;;;;; 1C0F;LEPCHA LETTER PLA;Lo;0;L;;;;;N;;;;; 1C10;LEPCHA LETTER PHA;Lo;0;L;;;;;N;;;;; 1C11;LEPCHA LETTER FA;Lo;0;L;;;;;N;;;;; 1C12;LEPCHA LETTER FLA;Lo;0;L;;;;;N;;;;; 1C13;LEPCHA LETTER BA;Lo;0;L;;;;;N;;;;; 1C14;LEPCHA LETTER BLA;Lo;0;L;;;;;N;;;;; 1C15;LEPCHA LETTER MA;Lo;0;L;;;;;N;;;;; 1C16;LEPCHA LETTER MLA;Lo;0;L;;;;;N;;;;; 1C17;LEPCHA LETTER TSA;Lo;0;L;;;;;N;;;;; 1C18;LEPCHA LETTER TSHA;Lo;0;L;;;;;N;;;;; 1C19;LEPCHA LETTER DZA;Lo;0;L;;;;;N;;;;; 1C1A;LEPCHA LETTER YA;Lo;0;L;;;;;N;;;;; 1C1B;LEPCHA LETTER RA;Lo;0;L;;;;;N;;;;; 1C1C;LEPCHA LETTER LA;Lo;0;L;;;;;N;;;;; 1C1D;LEPCHA LETTER HA;Lo;0;L;;;;;N;;;;; 1C1E;LEPCHA LETTER HLA;Lo;0;L;;;;;N;;;;; 1C1F;LEPCHA LETTER VA;Lo;0;L;;;;;N;;;;; 1C20;LEPCHA LETTER SA;Lo;0;L;;;;;N;;;;; 1C21;LEPCHA LETTER SHA;Lo;0;L;;;;;N;;;;; 1C22;LEPCHA LETTER WA;Lo;0;L;;;;;N;;;;; 1C23;LEPCHA LETTER A;Lo;0;L;;;;;N;;;;; 1C24;LEPCHA SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;; 1C25;LEPCHA SUBJOINED LETTER RA;Mc;0;L;;;;;N;;;;; 1C26;LEPCHA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 1C27;LEPCHA VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 1C28;LEPCHA VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 1C29;LEPCHA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; 1C2A;LEPCHA VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 1C2B;LEPCHA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 1C2C;LEPCHA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 1C2D;LEPCHA CONSONANT SIGN K;Mn;0;NSM;;;;;N;;;;; 1C2E;LEPCHA CONSONANT SIGN M;Mn;0;NSM;;;;;N;;;;; 1C2F;LEPCHA CONSONANT SIGN L;Mn;0;NSM;;;;;N;;;;; 1C30;LEPCHA CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;; 1C31;LEPCHA CONSONANT SIGN P;Mn;0;NSM;;;;;N;;;;; 1C32;LEPCHA CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;; 1C33;LEPCHA CONSONANT SIGN T;Mn;0;NSM;;;;;N;;;;; 1C34;LEPCHA CONSONANT SIGN NYIN-DO;Mc;0;L;;;;;N;;;;; 1C35;LEPCHA CONSONANT SIGN KANG;Mc;0;L;;;;;N;;;;; 1C36;LEPCHA SIGN RAN;Mn;0;NSM;;;;;N;;;;; 1C37;LEPCHA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 1C3B;LEPCHA PUNCTUATION TA-ROL;Po;0;L;;;;;N;;;;; 1C3C;LEPCHA PUNCTUATION NYET THYOOM TA-ROL;Po;0;L;;;;;N;;;;; 1C3D;LEPCHA PUNCTUATION CER-WA;Po;0;L;;;;;N;;;;; 1C3E;LEPCHA PUNCTUATION TSHOOK CER-WA;Po;0;L;;;;;N;;;;; 1C3F;LEPCHA PUNCTUATION TSHOOK;Po;0;L;;;;;N;;;;; 1C40;LEPCHA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1C41;LEPCHA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1C42;LEPCHA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1C43;LEPCHA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1C44;LEPCHA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1C45;LEPCHA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1C46;LEPCHA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1C47;LEPCHA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1C48;LEPCHA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1C49;LEPCHA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1C4D;LEPCHA LETTER TTA;Lo;0;L;;;;;N;;;;; 1C4E;LEPCHA LETTER TTHA;Lo;0;L;;;;;N;;;;; 1C4F;LEPCHA LETTER DDA;Lo;0;L;;;;;N;;;;; 1C50;OL CHIKI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1C51;OL CHIKI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1C52;OL CHIKI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1C53;OL CHIKI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1C54;OL CHIKI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1C55;OL CHIKI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1C56;OL CHIKI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1C57;OL CHIKI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1C58;OL CHIKI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1C59;OL CHIKI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1C5A;OL CHIKI LETTER LA;Lo;0;L;;;;;N;;;;; 1C5B;OL CHIKI LETTER AT;Lo;0;L;;;;;N;;;;; 1C5C;OL CHIKI LETTER AG;Lo;0;L;;;;;N;;;;; 1C5D;OL CHIKI LETTER ANG;Lo;0;L;;;;;N;;;;; 1C5E;OL CHIKI LETTER AL;Lo;0;L;;;;;N;;;;; 1C5F;OL CHIKI LETTER LAA;Lo;0;L;;;;;N;;;;; 1C60;OL CHIKI LETTER AAK;Lo;0;L;;;;;N;;;;; 1C61;OL CHIKI LETTER AAJ;Lo;0;L;;;;;N;;;;; 1C62;OL CHIKI LETTER AAM;Lo;0;L;;;;;N;;;;; 1C63;OL CHIKI LETTER AAW;Lo;0;L;;;;;N;;;;; 1C64;OL CHIKI LETTER LI;Lo;0;L;;;;;N;;;;; 1C65;OL CHIKI LETTER IS;Lo;0;L;;;;;N;;;;; 1C66;OL CHIKI LETTER IH;Lo;0;L;;;;;N;;;;; 1C67;OL CHIKI LETTER INY;Lo;0;L;;;;;N;;;;; 1C68;OL CHIKI LETTER IR;Lo;0;L;;;;;N;;;;; 1C69;OL CHIKI LETTER LU;Lo;0;L;;;;;N;;;;; 1C6A;OL CHIKI LETTER UC;Lo;0;L;;;;;N;;;;; 1C6B;OL CHIKI LETTER UD;Lo;0;L;;;;;N;;;;; 1C6C;OL CHIKI LETTER UNN;Lo;0;L;;;;;N;;;;; 1C6D;OL CHIKI LETTER UY;Lo;0;L;;;;;N;;;;; 1C6E;OL CHIKI LETTER LE;Lo;0;L;;;;;N;;;;; 1C6F;OL CHIKI LETTER EP;Lo;0;L;;;;;N;;;;; 1C70;OL CHIKI LETTER EDD;Lo;0;L;;;;;N;;;;; 1C71;OL CHIKI LETTER EN;Lo;0;L;;;;;N;;;;; 1C72;OL CHIKI LETTER ERR;Lo;0;L;;;;;N;;;;; 1C73;OL CHIKI LETTER LO;Lo;0;L;;;;;N;;;;; 1C74;OL CHIKI LETTER OTT;Lo;0;L;;;;;N;;;;; 1C75;OL CHIKI LETTER OB;Lo;0;L;;;;;N;;;;; 1C76;OL CHIKI LETTER OV;Lo;0;L;;;;;N;;;;; 1C77;OL CHIKI LETTER OH;Lo;0;L;;;;;N;;;;; 1C78;OL CHIKI MU TTUDDAG;Lm;0;L;;;;;N;;;;; 1C79;OL CHIKI GAAHLAA TTUDDAAG;Lm;0;L;;;;;N;;;;; 1C7A;OL CHIKI MU-GAAHLAA TTUDDAAG;Lm;0;L;;;;;N;;;;; 1C7B;OL CHIKI RELAA;Lm;0;L;;;;;N;;;;; 1C7C;OL CHIKI PHAARKAA;Lm;0;L;;;;;N;;;;; 1C7D;OL CHIKI AHAD;Lm;0;L;;;;;N;;;;; 1C7E;OL CHIKI PUNCTUATION MUCAAD;Po;0;L;;;;;N;;;;; 1C7F;OL CHIKI PUNCTUATION DOUBLE MUCAAD;Po;0;L;;;;;N;;;;; 1C80;CYRILLIC SMALL LETTER ROUNDED VE;Ll;0;L;;;;;N;;;0412;;0412 1C81;CYRILLIC SMALL LETTER LONG-LEGGED DE;Ll;0;L;;;;;N;;;0414;;0414 1C82;CYRILLIC SMALL LETTER NARROW O;Ll;0;L;;;;;N;;;041E;;041E 1C83;CYRILLIC SMALL LETTER WIDE ES;Ll;0;L;;;;;N;;;0421;;0421 1C84;CYRILLIC SMALL LETTER TALL TE;Ll;0;L;;;;;N;;;0422;;0422 1C85;CYRILLIC SMALL LETTER THREE-LEGGED TE;Ll;0;L;;;;;N;;;0422;;0422 1C86;CYRILLIC SMALL LETTER TALL HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A 1C87;CYRILLIC SMALL LETTER TALL YAT;Ll;0;L;;;;;N;;;0462;;0462 1C88;CYRILLIC SMALL LETTER UNBLENDED UK;Ll;0;L;;;;;N;;;A64A;;A64A 1C90;GEORGIAN MTAVRULI CAPITAL LETTER AN;Lu;0;L;;;;;N;;;;10D0; 1C91;GEORGIAN MTAVRULI CAPITAL LETTER BAN;Lu;0;L;;;;;N;;;;10D1; 1C92;GEORGIAN MTAVRULI CAPITAL LETTER GAN;Lu;0;L;;;;;N;;;;10D2; 1C93;GEORGIAN MTAVRULI CAPITAL LETTER DON;Lu;0;L;;;;;N;;;;10D3; 1C94;GEORGIAN MTAVRULI CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;10D4; 1C95;GEORGIAN MTAVRULI CAPITAL LETTER VIN;Lu;0;L;;;;;N;;;;10D5; 1C96;GEORGIAN MTAVRULI CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;;;10D6; 1C97;GEORGIAN MTAVRULI CAPITAL LETTER TAN;Lu;0;L;;;;;N;;;;10D7; 1C98;GEORGIAN MTAVRULI CAPITAL LETTER IN;Lu;0;L;;;;;N;;;;10D8; 1C99;GEORGIAN MTAVRULI CAPITAL LETTER KAN;Lu;0;L;;;;;N;;;;10D9; 1C9A;GEORGIAN MTAVRULI CAPITAL LETTER LAS;Lu;0;L;;;;;N;;;;10DA; 1C9B;GEORGIAN MTAVRULI CAPITAL LETTER MAN;Lu;0;L;;;;;N;;;;10DB; 1C9C;GEORGIAN MTAVRULI CAPITAL LETTER NAR;Lu;0;L;;;;;N;;;;10DC; 1C9D;GEORGIAN MTAVRULI CAPITAL LETTER ON;Lu;0;L;;;;;N;;;;10DD; 1C9E;GEORGIAN MTAVRULI CAPITAL LETTER PAR;Lu;0;L;;;;;N;;;;10DE; 1C9F;GEORGIAN MTAVRULI CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;;;10DF; 1CA0;GEORGIAN MTAVRULI CAPITAL LETTER RAE;Lu;0;L;;;;;N;;;;10E0; 1CA1;GEORGIAN MTAVRULI CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;10E1; 1CA2;GEORGIAN MTAVRULI CAPITAL LETTER TAR;Lu;0;L;;;;;N;;;;10E2; 1CA3;GEORGIAN MTAVRULI CAPITAL LETTER UN;Lu;0;L;;;;;N;;;;10E3; 1CA4;GEORGIAN MTAVRULI CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;;;10E4; 1CA5;GEORGIAN MTAVRULI CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;;;10E5; 1CA6;GEORGIAN MTAVRULI CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;;;10E6; 1CA7;GEORGIAN MTAVRULI CAPITAL LETTER QAR;Lu;0;L;;;;;N;;;;10E7; 1CA8;GEORGIAN MTAVRULI CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;;;10E8; 1CA9;GEORGIAN MTAVRULI CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;;;10E9; 1CAA;GEORGIAN MTAVRULI CAPITAL LETTER CAN;Lu;0;L;;;;;N;;;;10EA; 1CAB;GEORGIAN MTAVRULI CAPITAL LETTER JIL;Lu;0;L;;;;;N;;;;10EB; 1CAC;GEORGIAN MTAVRULI CAPITAL LETTER CIL;Lu;0;L;;;;;N;;;;10EC; 1CAD;GEORGIAN MTAVRULI CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;;;10ED; 1CAE;GEORGIAN MTAVRULI CAPITAL LETTER XAN;Lu;0;L;;;;;N;;;;10EE; 1CAF;GEORGIAN MTAVRULI CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;;;10EF; 1CB0;GEORGIAN MTAVRULI CAPITAL LETTER HAE;Lu;0;L;;;;;N;;;;10F0; 1CB1;GEORGIAN MTAVRULI CAPITAL LETTER HE;Lu;0;L;;;;;N;;;;10F1; 1CB2;GEORGIAN MTAVRULI CAPITAL LETTER HIE;Lu;0;L;;;;;N;;;;10F2; 1CB3;GEORGIAN MTAVRULI CAPITAL LETTER WE;Lu;0;L;;;;;N;;;;10F3; 1CB4;GEORGIAN MTAVRULI CAPITAL LETTER HAR;Lu;0;L;;;;;N;;;;10F4; 1CB5;GEORGIAN MTAVRULI CAPITAL LETTER HOE;Lu;0;L;;;;;N;;;;10F5; 1CB6;GEORGIAN MTAVRULI CAPITAL LETTER FI;Lu;0;L;;;;;N;;;;10F6; 1CB7;GEORGIAN MTAVRULI CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;10F7; 1CB8;GEORGIAN MTAVRULI CAPITAL LETTER ELIFI;Lu;0;L;;;;;N;;;;10F8; 1CB9;GEORGIAN MTAVRULI CAPITAL LETTER TURNED GAN;Lu;0;L;;;;;N;;;;10F9; 1CBA;GEORGIAN MTAVRULI CAPITAL LETTER AIN;Lu;0;L;;;;;N;;;;10FA; 1CBD;GEORGIAN MTAVRULI CAPITAL LETTER AEN;Lu;0;L;;;;;N;;;;10FD; 1CBE;GEORGIAN MTAVRULI CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;10FE; 1CBF;GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN;Lu;0;L;;;;;N;;;;10FF; 1CC0;SUNDANESE PUNCTUATION BINDU SURYA;Po;0;L;;;;;N;;;;; 1CC1;SUNDANESE PUNCTUATION BINDU PANGLONG;Po;0;L;;;;;N;;;;; 1CC2;SUNDANESE PUNCTUATION BINDU PURNAMA;Po;0;L;;;;;N;;;;; 1CC3;SUNDANESE PUNCTUATION BINDU CAKRA;Po;0;L;;;;;N;;;;; 1CC4;SUNDANESE PUNCTUATION BINDU LEU SATANGA;Po;0;L;;;;;N;;;;; 1CC5;SUNDANESE PUNCTUATION BINDU KA SATANGA;Po;0;L;;;;;N;;;;; 1CC6;SUNDANESE PUNCTUATION BINDU DA SATANGA;Po;0;L;;;;;N;;;;; 1CC7;SUNDANESE PUNCTUATION BINDU BA SATANGA;Po;0;L;;;;;N;;;;; 1CD0;VEDIC TONE KARSHANA;Mn;230;NSM;;;;;N;;;;; 1CD1;VEDIC TONE SHARA;Mn;230;NSM;;;;;N;;;;; 1CD2;VEDIC TONE PRENKHA;Mn;230;NSM;;;;;N;;;;; 1CD3;VEDIC SIGN NIHSHVASA;Po;0;L;;;;;N;;;;; 1CD4;VEDIC SIGN YAJURVEDIC MIDLINE SVARITA;Mn;1;NSM;;;;;N;;;;; 1CD5;VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA;Mn;220;NSM;;;;;N;;;;; 1CD6;VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA;Mn;220;NSM;;;;;N;;;;; 1CD7;VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA;Mn;220;NSM;;;;;N;;;;; 1CD8;VEDIC TONE CANDRA BELOW;Mn;220;NSM;;;;;N;;;;; 1CD9;VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER;Mn;220;NSM;;;;;N;;;;; 1CDA;VEDIC TONE DOUBLE SVARITA;Mn;230;NSM;;;;;N;;;;; 1CDB;VEDIC TONE TRIPLE SVARITA;Mn;230;NSM;;;;;N;;;;; 1CDC;VEDIC TONE KATHAKA ANUDATTA;Mn;220;NSM;;;;;N;;;;; 1CDD;VEDIC TONE DOT BELOW;Mn;220;NSM;;;;;N;;;;; 1CDE;VEDIC TONE TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;; 1CDF;VEDIC TONE THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;; 1CE0;VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA;Mn;230;NSM;;;;;N;;;;; 1CE1;VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA;Mc;0;L;;;;;N;;;;; 1CE2;VEDIC SIGN VISARGA SVARITA;Mn;1;NSM;;;;;N;;;;; 1CE3;VEDIC SIGN VISARGA UDATTA;Mn;1;NSM;;;;;N;;;;; 1CE4;VEDIC SIGN REVERSED VISARGA UDATTA;Mn;1;NSM;;;;;N;;;;; 1CE5;VEDIC SIGN VISARGA ANUDATTA;Mn;1;NSM;;;;;N;;;;; 1CE6;VEDIC SIGN REVERSED VISARGA ANUDATTA;Mn;1;NSM;;;;;N;;;;; 1CE7;VEDIC SIGN VISARGA UDATTA WITH TAIL;Mn;1;NSM;;;;;N;;;;; 1CE8;VEDIC SIGN VISARGA ANUDATTA WITH TAIL;Mn;1;NSM;;;;;N;;;;; 1CE9;VEDIC SIGN ANUSVARA ANTARGOMUKHA;Lo;0;L;;;;;N;;;;; 1CEA;VEDIC SIGN ANUSVARA BAHIRGOMUKHA;Lo;0;L;;;;;N;;;;; 1CEB;VEDIC SIGN ANUSVARA VAMAGOMUKHA;Lo;0;L;;;;;N;;;;; 1CEC;VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL;Lo;0;L;;;;;N;;;;; 1CED;VEDIC SIGN TIRYAK;Mn;220;NSM;;;;;N;;;;; 1CEE;VEDIC SIGN HEXIFORM LONG ANUSVARA;Lo;0;L;;;;;N;;;;; 1CEF;VEDIC SIGN LONG ANUSVARA;Lo;0;L;;;;;N;;;;; 1CF0;VEDIC SIGN RTHANG LONG ANUSVARA;Lo;0;L;;;;;N;;;;; 1CF1;VEDIC SIGN ANUSVARA UBHAYATO MUKHA;Lo;0;L;;;;;N;;;;; 1CF2;VEDIC SIGN ARDHAVISARGA;Lo;0;L;;;;;N;;;;; 1CF3;VEDIC SIGN ROTATED ARDHAVISARGA;Lo;0;L;;;;;N;;;;; 1CF4;VEDIC TONE CANDRA ABOVE;Mn;230;NSM;;;;;N;;;;; 1CF5;VEDIC SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;; 1CF6;VEDIC SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;; 1CF7;VEDIC SIGN ATIKRAMA;Mc;0;L;;;;;N;;;;; 1CF8;VEDIC TONE RING ABOVE;Mn;230;NSM;;;;;N;;;;; 1CF9;VEDIC TONE DOUBLE RING ABOVE;Mn;230;NSM;;;;;N;;;;; 1CFA;VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA;Lo;0;L;;;;;N;;;;; 1D00;LATIN LETTER SMALL CAPITAL A;Ll;0;L;;;;;N;;;;; 1D01;LATIN LETTER SMALL CAPITAL AE;Ll;0;L;;;;;N;;;;; 1D02;LATIN SMALL LETTER TURNED AE;Ll;0;L;;;;;N;;;;; 1D03;LATIN LETTER SMALL CAPITAL BARRED B;Ll;0;L;;;;;N;;;;; 1D04;LATIN LETTER SMALL CAPITAL C;Ll;0;L;;;;;N;;;;; 1D05;LATIN LETTER SMALL CAPITAL D;Ll;0;L;;;;;N;;;;; 1D06;LATIN LETTER SMALL CAPITAL ETH;Ll;0;L;;;;;N;;;;; 1D07;LATIN LETTER SMALL CAPITAL E;Ll;0;L;;;;;N;;;;; 1D08;LATIN SMALL LETTER TURNED OPEN E;Ll;0;L;;;;;N;;;;; 1D09;LATIN SMALL LETTER TURNED I;Ll;0;L;;;;;N;;;;; 1D0A;LATIN LETTER SMALL CAPITAL J;Ll;0;L;;;;;N;;;;; 1D0B;LATIN LETTER SMALL CAPITAL K;Ll;0;L;;;;;N;;;;; 1D0C;LATIN LETTER SMALL CAPITAL L WITH STROKE;Ll;0;L;;;;;N;;;;; 1D0D;LATIN LETTER SMALL CAPITAL M;Ll;0;L;;;;;N;;;;; 1D0E;LATIN LETTER SMALL CAPITAL REVERSED N;Ll;0;L;;;;;N;;;;; 1D0F;LATIN LETTER SMALL CAPITAL O;Ll;0;L;;;;;N;;;;; 1D10;LATIN LETTER SMALL CAPITAL OPEN O;Ll;0;L;;;;;N;;;;; 1D11;LATIN SMALL LETTER SIDEWAYS O;Ll;0;L;;;;;N;;;;; 1D12;LATIN SMALL LETTER SIDEWAYS OPEN O;Ll;0;L;;;;;N;;;;; 1D13;LATIN SMALL LETTER SIDEWAYS O WITH STROKE;Ll;0;L;;;;;N;;;;; 1D14;LATIN SMALL LETTER TURNED OE;Ll;0;L;;;;;N;;;;; 1D15;LATIN LETTER SMALL CAPITAL OU;Ll;0;L;;;;;N;;;;; 1D16;LATIN SMALL LETTER TOP HALF O;Ll;0;L;;;;;N;;;;; 1D17;LATIN SMALL LETTER BOTTOM HALF O;Ll;0;L;;;;;N;;;;; 1D18;LATIN LETTER SMALL CAPITAL P;Ll;0;L;;;;;N;;;;; 1D19;LATIN LETTER SMALL CAPITAL REVERSED R;Ll;0;L;;;;;N;;;;; 1D1A;LATIN LETTER SMALL CAPITAL TURNED R;Ll;0;L;;;;;N;;;;; 1D1B;LATIN LETTER SMALL CAPITAL T;Ll;0;L;;;;;N;;;;; 1D1C;LATIN LETTER SMALL CAPITAL U;Ll;0;L;;;;;N;;;;; 1D1D;LATIN SMALL LETTER SIDEWAYS U;Ll;0;L;;;;;N;;;;; 1D1E;LATIN SMALL LETTER SIDEWAYS DIAERESIZED U;Ll;0;L;;;;;N;;;;; 1D1F;LATIN SMALL LETTER SIDEWAYS TURNED M;Ll;0;L;;;;;N;;;;; 1D20;LATIN LETTER SMALL CAPITAL V;Ll;0;L;;;;;N;;;;; 1D21;LATIN LETTER SMALL CAPITAL W;Ll;0;L;;;;;N;;;;; 1D22;LATIN LETTER SMALL CAPITAL Z;Ll;0;L;;;;;N;;;;; 1D23;LATIN LETTER SMALL CAPITAL EZH;Ll;0;L;;;;;N;;;;; 1D24;LATIN LETTER VOICED LARYNGEAL SPIRANT;Ll;0;L;;;;;N;;;;; 1D25;LATIN LETTER AIN;Ll;0;L;;;;;N;;;;; 1D26;GREEK LETTER SMALL CAPITAL GAMMA;Ll;0;L;;;;;N;;;;; 1D27;GREEK LETTER SMALL CAPITAL LAMDA;Ll;0;L;;;;;N;;;;; 1D28;GREEK LETTER SMALL CAPITAL PI;Ll;0;L;;;;;N;;;;; 1D29;GREEK LETTER SMALL CAPITAL RHO;Ll;0;L;;;;;N;;;;; 1D2A;GREEK LETTER SMALL CAPITAL PSI;Ll;0;L;;;;;N;;;;; 1D2B;CYRILLIC LETTER SMALL CAPITAL EL;Ll;0;L;;;;;N;;;;; 1D2C;MODIFIER LETTER CAPITAL A;Lm;0;L; 0041;;;;N;;;;; 1D2D;MODIFIER LETTER CAPITAL AE;Lm;0;L; 00C6;;;;N;;;;; 1D2E;MODIFIER LETTER CAPITAL B;Lm;0;L; 0042;;;;N;;;;; 1D2F;MODIFIER LETTER CAPITAL BARRED B;Lm;0;L;;;;;N;;;;; 1D30;MODIFIER LETTER CAPITAL D;Lm;0;L; 0044;;;;N;;;;; 1D31;MODIFIER LETTER CAPITAL E;Lm;0;L; 0045;;;;N;;;;; 1D32;MODIFIER LETTER CAPITAL REVERSED E;Lm;0;L; 018E;;;;N;;;;; 1D33;MODIFIER LETTER CAPITAL G;Lm;0;L; 0047;;;;N;;;;; 1D34;MODIFIER LETTER CAPITAL H;Lm;0;L; 0048;;;;N;;;;; 1D35;MODIFIER LETTER CAPITAL I;Lm;0;L; 0049;;;;N;;;;; 1D36;MODIFIER LETTER CAPITAL J;Lm;0;L; 004A;;;;N;;;;; 1D37;MODIFIER LETTER CAPITAL K;Lm;0;L; 004B;;;;N;;;;; 1D38;MODIFIER LETTER CAPITAL L;Lm;0;L; 004C;;;;N;;;;; 1D39;MODIFIER LETTER CAPITAL M;Lm;0;L; 004D;;;;N;;;;; 1D3A;MODIFIER LETTER CAPITAL N;Lm;0;L; 004E;;;;N;;;;; 1D3B;MODIFIER LETTER CAPITAL REVERSED N;Lm;0;L;;;;;N;;;;; 1D3C;MODIFIER LETTER CAPITAL O;Lm;0;L; 004F;;;;N;;;;; 1D3D;MODIFIER LETTER CAPITAL OU;Lm;0;L; 0222;;;;N;;;;; 1D3E;MODIFIER LETTER CAPITAL P;Lm;0;L; 0050;;;;N;;;;; 1D3F;MODIFIER LETTER CAPITAL R;Lm;0;L; 0052;;;;N;;;;; 1D40;MODIFIER LETTER CAPITAL T;Lm;0;L; 0054;;;;N;;;;; 1D41;MODIFIER LETTER CAPITAL U;Lm;0;L; 0055;;;;N;;;;; 1D42;MODIFIER LETTER CAPITAL W;Lm;0;L; 0057;;;;N;;;;; 1D43;MODIFIER LETTER SMALL A;Lm;0;L; 0061;;;;N;;;;; 1D44;MODIFIER LETTER SMALL TURNED A;Lm;0;L; 0250;;;;N;;;;; 1D45;MODIFIER LETTER SMALL ALPHA;Lm;0;L; 0251;;;;N;;;;; 1D46;MODIFIER LETTER SMALL TURNED AE;Lm;0;L; 1D02;;;;N;;;;; 1D47;MODIFIER LETTER SMALL B;Lm;0;L; 0062;;;;N;;;;; 1D48;MODIFIER LETTER SMALL D;Lm;0;L; 0064;;;;N;;;;; 1D49;MODIFIER LETTER SMALL E;Lm;0;L; 0065;;;;N;;;;; 1D4A;MODIFIER LETTER SMALL SCHWA;Lm;0;L; 0259;;;;N;;;;; 1D4B;MODIFIER LETTER SMALL OPEN E;Lm;0;L; 025B;;;;N;;;;; 1D4C;MODIFIER LETTER SMALL TURNED OPEN E;Lm;0;L; 025C;;;;N;;;;; 1D4D;MODIFIER LETTER SMALL G;Lm;0;L; 0067;;;;N;;;;; 1D4E;MODIFIER LETTER SMALL TURNED I;Lm;0;L;;;;;N;;;;; 1D4F;MODIFIER LETTER SMALL K;Lm;0;L; 006B;;;;N;;;;; 1D50;MODIFIER LETTER SMALL M;Lm;0;L; 006D;;;;N;;;;; 1D51;MODIFIER LETTER SMALL ENG;Lm;0;L; 014B;;;;N;;;;; 1D52;MODIFIER LETTER SMALL O;Lm;0;L; 006F;;;;N;;;;; 1D53;MODIFIER LETTER SMALL OPEN O;Lm;0;L; 0254;;;;N;;;;; 1D54;MODIFIER LETTER SMALL TOP HALF O;Lm;0;L; 1D16;;;;N;;;;; 1D55;MODIFIER LETTER SMALL BOTTOM HALF O;Lm;0;L; 1D17;;;;N;;;;; 1D56;MODIFIER LETTER SMALL P;Lm;0;L; 0070;;;;N;;;;; 1D57;MODIFIER LETTER SMALL T;Lm;0;L; 0074;;;;N;;;;; 1D58;MODIFIER LETTER SMALL U;Lm;0;L; 0075;;;;N;;;;; 1D59;MODIFIER LETTER SMALL SIDEWAYS U;Lm;0;L; 1D1D;;;;N;;;;; 1D5A;MODIFIER LETTER SMALL TURNED M;Lm;0;L; 026F;;;;N;;;;; 1D5B;MODIFIER LETTER SMALL V;Lm;0;L; 0076;;;;N;;;;; 1D5C;MODIFIER LETTER SMALL AIN;Lm;0;L; 1D25;;;;N;;;;; 1D5D;MODIFIER LETTER SMALL BETA;Lm;0;L; 03B2;;;;N;;;;; 1D5E;MODIFIER LETTER SMALL GREEK GAMMA;Lm;0;L; 03B3;;;;N;;;;; 1D5F;MODIFIER LETTER SMALL DELTA;Lm;0;L; 03B4;;;;N;;;;; 1D60;MODIFIER LETTER SMALL GREEK PHI;Lm;0;L; 03C6;;;;N;;;;; 1D61;MODIFIER LETTER SMALL CHI;Lm;0;L; 03C7;;;;N;;;;; 1D62;LATIN SUBSCRIPT SMALL LETTER I;Lm;0;L; 0069;;;;N;;;;; 1D63;LATIN SUBSCRIPT SMALL LETTER R;Lm;0;L; 0072;;;;N;;;;; 1D64;LATIN SUBSCRIPT SMALL LETTER U;Lm;0;L; 0075;;;;N;;;;; 1D65;LATIN SUBSCRIPT SMALL LETTER V;Lm;0;L; 0076;;;;N;;;;; 1D66;GREEK SUBSCRIPT SMALL LETTER BETA;Lm;0;L; 03B2;;;;N;;;;; 1D67;GREEK SUBSCRIPT SMALL LETTER GAMMA;Lm;0;L; 03B3;;;;N;;;;; 1D68;GREEK SUBSCRIPT SMALL LETTER RHO;Lm;0;L; 03C1;;;;N;;;;; 1D69;GREEK SUBSCRIPT SMALL LETTER PHI;Lm;0;L; 03C6;;;;N;;;;; 1D6A;GREEK SUBSCRIPT SMALL LETTER CHI;Lm;0;L; 03C7;;;;N;;;;; 1D6B;LATIN SMALL LETTER UE;Ll;0;L;;;;;N;;;;; 1D6C;LATIN SMALL LETTER B WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D6D;LATIN SMALL LETTER D WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D6E;LATIN SMALL LETTER F WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D6F;LATIN SMALL LETTER M WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D70;LATIN SMALL LETTER N WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D71;LATIN SMALL LETTER P WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D72;LATIN SMALL LETTER R WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D73;LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D74;LATIN SMALL LETTER S WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D75;LATIN SMALL LETTER T WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D76;LATIN SMALL LETTER Z WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D77;LATIN SMALL LETTER TURNED G;Ll;0;L;;;;;N;;;;; 1D78;MODIFIER LETTER CYRILLIC EN;Lm;0;L; 043D;;;;N;;;;; 1D79;LATIN SMALL LETTER INSULAR G;Ll;0;L;;;;;N;;;A77D;;A77D 1D7A;LATIN SMALL LETTER TH WITH STRIKETHROUGH;Ll;0;L;;;;;N;;;;; 1D7B;LATIN SMALL CAPITAL LETTER I WITH STROKE;Ll;0;L;;;;;N;;;;; 1D7C;LATIN SMALL LETTER IOTA WITH STROKE;Ll;0;L;;;;;N;;;;; 1D7D;LATIN SMALL LETTER P WITH STROKE;Ll;0;L;;;;;N;;;2C63;;2C63 1D7E;LATIN SMALL CAPITAL LETTER U WITH STROKE;Ll;0;L;;;;;N;;;;; 1D7F;LATIN SMALL LETTER UPSILON WITH STROKE;Ll;0;L;;;;;N;;;;; 1D80;LATIN SMALL LETTER B WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D81;LATIN SMALL LETTER D WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D82;LATIN SMALL LETTER F WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D83;LATIN SMALL LETTER G WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D84;LATIN SMALL LETTER K WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D85;LATIN SMALL LETTER L WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D86;LATIN SMALL LETTER M WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D87;LATIN SMALL LETTER N WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D88;LATIN SMALL LETTER P WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D89;LATIN SMALL LETTER R WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D8A;LATIN SMALL LETTER S WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D8B;LATIN SMALL LETTER ESH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D8C;LATIN SMALL LETTER V WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D8D;LATIN SMALL LETTER X WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D8E;LATIN SMALL LETTER Z WITH PALATAL HOOK;Ll;0;L;;;;;N;;;A7C6;;A7C6 1D8F;LATIN SMALL LETTER A WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D90;LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D91;LATIN SMALL LETTER D WITH HOOK AND TAIL;Ll;0;L;;;;;N;;;;; 1D92;LATIN SMALL LETTER E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D93;LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D94;LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D95;LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D96;LATIN SMALL LETTER I WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D97;LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D98;LATIN SMALL LETTER ESH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D99;LATIN SMALL LETTER U WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D9A;LATIN SMALL LETTER EZH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D9B;MODIFIER LETTER SMALL TURNED ALPHA;Lm;0;L; 0252;;;;N;;;;; 1D9C;MODIFIER LETTER SMALL C;Lm;0;L; 0063;;;;N;;;;; 1D9D;MODIFIER LETTER SMALL C WITH CURL;Lm;0;L; 0255;;;;N;;;;; 1D9E;MODIFIER LETTER SMALL ETH;Lm;0;L; 00F0;;;;N;;;;; 1D9F;MODIFIER LETTER SMALL REVERSED OPEN E;Lm;0;L; 025C;;;;N;;;;; 1DA0;MODIFIER LETTER SMALL F;Lm;0;L; 0066;;;;N;;;;; 1DA1;MODIFIER LETTER SMALL DOTLESS J WITH STROKE;Lm;0;L; 025F;;;;N;;;;; 1DA2;MODIFIER LETTER SMALL SCRIPT G;Lm;0;L; 0261;;;;N;;;;; 1DA3;MODIFIER LETTER SMALL TURNED H;Lm;0;L; 0265;;;;N;;;;; 1DA4;MODIFIER LETTER SMALL I WITH STROKE;Lm;0;L; 0268;;;;N;;;;; 1DA5;MODIFIER LETTER SMALL IOTA;Lm;0;L; 0269;;;;N;;;;; 1DA6;MODIFIER LETTER SMALL CAPITAL I;Lm;0;L; 026A;;;;N;;;;; 1DA7;MODIFIER LETTER SMALL CAPITAL I WITH STROKE;Lm;0;L; 1D7B;;;;N;;;;; 1DA8;MODIFIER LETTER SMALL J WITH CROSSED-TAIL;Lm;0;L; 029D;;;;N;;;;; 1DA9;MODIFIER LETTER SMALL L WITH RETROFLEX HOOK;Lm;0;L; 026D;;;;N;;;;; 1DAA;MODIFIER LETTER SMALL L WITH PALATAL HOOK;Lm;0;L; 1D85;;;;N;;;;; 1DAB;MODIFIER LETTER SMALL CAPITAL L;Lm;0;L; 029F;;;;N;;;;; 1DAC;MODIFIER LETTER SMALL M WITH HOOK;Lm;0;L; 0271;;;;N;;;;; 1DAD;MODIFIER LETTER SMALL TURNED M WITH LONG LEG;Lm;0;L; 0270;;;;N;;;;; 1DAE;MODIFIER LETTER SMALL N WITH LEFT HOOK;Lm;0;L; 0272;;;;N;;;;; 1DAF;MODIFIER LETTER SMALL N WITH RETROFLEX HOOK;Lm;0;L; 0273;;;;N;;;;; 1DB0;MODIFIER LETTER SMALL CAPITAL N;Lm;0;L; 0274;;;;N;;;;; 1DB1;MODIFIER LETTER SMALL BARRED O;Lm;0;L; 0275;;;;N;;;;; 1DB2;MODIFIER LETTER SMALL PHI;Lm;0;L; 0278;;;;N;;;;; 1DB3;MODIFIER LETTER SMALL S WITH HOOK;Lm;0;L; 0282;;;;N;;;;; 1DB4;MODIFIER LETTER SMALL ESH;Lm;0;L; 0283;;;;N;;;;; 1DB5;MODIFIER LETTER SMALL T WITH PALATAL HOOK;Lm;0;L; 01AB;;;;N;;;;; 1DB6;MODIFIER LETTER SMALL U BAR;Lm;0;L; 0289;;;;N;;;;; 1DB7;MODIFIER LETTER SMALL UPSILON;Lm;0;L; 028A;;;;N;;;;; 1DB8;MODIFIER LETTER SMALL CAPITAL U;Lm;0;L; 1D1C;;;;N;;;;; 1DB9;MODIFIER LETTER SMALL V WITH HOOK;Lm;0;L; 028B;;;;N;;;;; 1DBA;MODIFIER LETTER SMALL TURNED V;Lm;0;L; 028C;;;;N;;;;; 1DBB;MODIFIER LETTER SMALL Z;Lm;0;L; 007A;;;;N;;;;; 1DBC;MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK;Lm;0;L; 0290;;;;N;;;;; 1DBD;MODIFIER LETTER SMALL Z WITH CURL;Lm;0;L; 0291;;;;N;;;;; 1DBE;MODIFIER LETTER SMALL EZH;Lm;0;L; 0292;;;;N;;;;; 1DBF;MODIFIER LETTER SMALL THETA;Lm;0;L; 03B8;;;;N;;;;; 1DC0;COMBINING DOTTED GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;; 1DC1;COMBINING DOTTED ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;; 1DC2;COMBINING SNAKE BELOW;Mn;220;NSM;;;;;N;;;;; 1DC3;COMBINING SUSPENSION MARK;Mn;230;NSM;;;;;N;;;;; 1DC4;COMBINING MACRON-ACUTE;Mn;230;NSM;;;;;N;;;;; 1DC5;COMBINING GRAVE-MACRON;Mn;230;NSM;;;;;N;;;;; 1DC6;COMBINING MACRON-GRAVE;Mn;230;NSM;;;;;N;;;;; 1DC7;COMBINING ACUTE-MACRON;Mn;230;NSM;;;;;N;;;;; 1DC8;COMBINING GRAVE-ACUTE-GRAVE;Mn;230;NSM;;;;;N;;;;; 1DC9;COMBINING ACUTE-GRAVE-ACUTE;Mn;230;NSM;;;;;N;;;;; 1DCA;COMBINING LATIN SMALL LETTER R BELOW;Mn;220;NSM;;;;;N;;;;; 1DCB;COMBINING BREVE-MACRON;Mn;230;NSM;;;;;N;;;;; 1DCC;COMBINING MACRON-BREVE;Mn;230;NSM;;;;;N;;;;; 1DCD;COMBINING DOUBLE CIRCUMFLEX ABOVE;Mn;234;NSM;;;;;N;;;;; 1DCE;COMBINING OGONEK ABOVE;Mn;214;NSM;;;;;N;;;;; 1DCF;COMBINING ZIGZAG BELOW;Mn;220;NSM;;;;;N;;;;; 1DD0;COMBINING IS BELOW;Mn;202;NSM;;;;;N;;;;; 1DD1;COMBINING UR ABOVE;Mn;230;NSM;;;;;N;;;;; 1DD2;COMBINING US ABOVE;Mn;230;NSM;;;;;N;;;;; 1DD3;COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE;Mn;230;NSM;;;;;N;;;;; 1DD4;COMBINING LATIN SMALL LETTER AE;Mn;230;NSM;;;;;N;;;;; 1DD5;COMBINING LATIN SMALL LETTER AO;Mn;230;NSM;;;;;N;;;;; 1DD6;COMBINING LATIN SMALL LETTER AV;Mn;230;NSM;;;;;N;;;;; 1DD7;COMBINING LATIN SMALL LETTER C CEDILLA;Mn;230;NSM;;;;;N;;;;; 1DD8;COMBINING LATIN SMALL LETTER INSULAR D;Mn;230;NSM;;;;;N;;;;; 1DD9;COMBINING LATIN SMALL LETTER ETH;Mn;230;NSM;;;;;N;;;;; 1DDA;COMBINING LATIN SMALL LETTER G;Mn;230;NSM;;;;;N;;;;; 1DDB;COMBINING LATIN LETTER SMALL CAPITAL G;Mn;230;NSM;;;;;N;;;;; 1DDC;COMBINING LATIN SMALL LETTER K;Mn;230;NSM;;;;;N;;;;; 1DDD;COMBINING LATIN SMALL LETTER L;Mn;230;NSM;;;;;N;;;;; 1DDE;COMBINING LATIN LETTER SMALL CAPITAL L;Mn;230;NSM;;;;;N;;;;; 1DDF;COMBINING LATIN LETTER SMALL CAPITAL M;Mn;230;NSM;;;;;N;;;;; 1DE0;COMBINING LATIN SMALL LETTER N;Mn;230;NSM;;;;;N;;;;; 1DE1;COMBINING LATIN LETTER SMALL CAPITAL N;Mn;230;NSM;;;;;N;;;;; 1DE2;COMBINING LATIN LETTER SMALL CAPITAL R;Mn;230;NSM;;;;;N;;;;; 1DE3;COMBINING LATIN SMALL LETTER R ROTUNDA;Mn;230;NSM;;;;;N;;;;; 1DE4;COMBINING LATIN SMALL LETTER S;Mn;230;NSM;;;;;N;;;;; 1DE5;COMBINING LATIN SMALL LETTER LONG S;Mn;230;NSM;;;;;N;;;;; 1DE6;COMBINING LATIN SMALL LETTER Z;Mn;230;NSM;;;;;N;;;;; 1DE7;COMBINING LATIN SMALL LETTER ALPHA;Mn;230;NSM;;;;;N;;;;; 1DE8;COMBINING LATIN SMALL LETTER B;Mn;230;NSM;;;;;N;;;;; 1DE9;COMBINING LATIN SMALL LETTER BETA;Mn;230;NSM;;;;;N;;;;; 1DEA;COMBINING LATIN SMALL LETTER SCHWA;Mn;230;NSM;;;;;N;;;;; 1DEB;COMBINING LATIN SMALL LETTER F;Mn;230;NSM;;;;;N;;;;; 1DEC;COMBINING LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE;Mn;230;NSM;;;;;N;;;;; 1DED;COMBINING LATIN SMALL LETTER O WITH LIGHT CENTRALIZATION STROKE;Mn;230;NSM;;;;;N;;;;; 1DEE;COMBINING LATIN SMALL LETTER P;Mn;230;NSM;;;;;N;;;;; 1DEF;COMBINING LATIN SMALL LETTER ESH;Mn;230;NSM;;;;;N;;;;; 1DF0;COMBINING LATIN SMALL LETTER U WITH LIGHT CENTRALIZATION STROKE;Mn;230;NSM;;;;;N;;;;; 1DF1;COMBINING LATIN SMALL LETTER W;Mn;230;NSM;;;;;N;;;;; 1DF2;COMBINING LATIN SMALL LETTER A WITH DIAERESIS;Mn;230;NSM;;;;;N;;;;; 1DF3;COMBINING LATIN SMALL LETTER O WITH DIAERESIS;Mn;230;NSM;;;;;N;;;;; 1DF4;COMBINING LATIN SMALL LETTER U WITH DIAERESIS;Mn;230;NSM;;;;;N;;;;; 1DF5;COMBINING UP TACK ABOVE;Mn;230;NSM;;;;;N;;;;; 1DF6;COMBINING KAVYKA ABOVE RIGHT;Mn;232;NSM;;;;;N;;;;; 1DF7;COMBINING KAVYKA ABOVE LEFT;Mn;228;NSM;;;;;N;;;;; 1DF8;COMBINING DOT ABOVE LEFT;Mn;228;NSM;;;;;N;;;;; 1DF9;COMBINING WIDE INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;;;;; 1DFA;COMBINING DOT BELOW LEFT;Mn;218;NSM;;;;;N;;;;; 1DFB;COMBINING DELETION MARK;Mn;230;NSM;;;;;N;;;;; 1DFC;COMBINING DOUBLE INVERTED BREVE BELOW;Mn;233;NSM;;;;;N;;;;; 1DFD;COMBINING ALMOST EQUAL TO BELOW;Mn;220;NSM;;;;;N;;;;; 1DFE;COMBINING LEFT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;; 1DFF;COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; 1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01; 1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00 1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03; 1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02 1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05; 1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04 1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07; 1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06 1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09; 1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08 1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B; 1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A 1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D; 1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C 1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F; 1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E 1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11; 1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10 1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13; 1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12 1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15; 1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14 1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17; 1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16 1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19; 1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18 1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B; 1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A 1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0228 0306;;;;N;;;;1E1D; 1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0229 0306;;;;N;;;1E1C;;1E1C 1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F; 1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E 1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21; 1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20 1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23; 1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22 1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25; 1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24 1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27; 1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26 1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29; 1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28 1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B; 1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A 1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D; 1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C 1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F; 1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E 1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31; 1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30 1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33; 1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32 1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35; 1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34 1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37; 1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36 1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39; 1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38 1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B; 1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A 1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D; 1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C 1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F; 1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E 1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41; 1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40 1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43; 1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42 1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45; 1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44 1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47; 1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46 1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49; 1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48 1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B; 1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A 1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D; 1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C 1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F; 1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E 1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51; 1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50 1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53; 1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52 1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55; 1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54 1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57; 1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56 1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59; 1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58 1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B; 1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A 1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D; 1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C 1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F; 1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E 1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61; 1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60 1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63; 1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62 1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65; 1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64 1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67; 1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66 1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69; 1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68 1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B; 1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A 1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D; 1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C 1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F; 1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E 1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71; 1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70 1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73; 1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72 1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75; 1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74 1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77; 1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76 1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79; 1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78 1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B; 1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A 1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D; 1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C 1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F; 1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E 1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81; 1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80 1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83; 1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82 1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85; 1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84 1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87; 1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86 1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89; 1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88 1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B; 1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A 1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D; 1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C 1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F; 1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E 1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91; 1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90 1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93; 1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92 1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95; 1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94 1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;; 1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;; 1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;; 1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;; 1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L; 0061 02BE;;;;N;;;;; 1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60 1E9C;LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;;; 1E9D;LATIN SMALL LETTER LONG S WITH HIGH STROKE;Ll;0;L;;;;;N;;;;; 1E9E;LATIN CAPITAL LETTER SHARP S;Lu;0;L;;;;;N;;;;00DF; 1E9F;LATIN SMALL LETTER DELTA;Ll;0;L;;;;;N;;;;; 1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1; 1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0 1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3; 1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2 1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5; 1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4 1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7; 1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6 1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9; 1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8 1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB; 1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA 1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EA0 0302;;;;N;;;;1EAD; 1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EA1 0302;;;;N;;;1EAC;;1EAC 1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF; 1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE 1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1; 1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0 1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3; 1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2 1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5; 1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4 1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;1EA0 0306;;;;N;;;;1EB7; 1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;1EA1 0306;;;;N;;;1EB6;;1EB6 1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9; 1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8 1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB; 1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA 1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD; 1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC 1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF; 1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE 1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1; 1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0 1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3; 1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2 1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5; 1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4 1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EB8 0302;;;;N;;;;1EC7; 1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EB9 0302;;;;N;;;1EC6;;1EC6 1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9; 1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8 1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB; 1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA 1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD; 1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC 1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF; 1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE 1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1; 1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0 1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3; 1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2 1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5; 1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4 1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7; 1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6 1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1ECC 0302;;;;N;;;;1ED9; 1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1ECD 0302;;;;N;;;1ED8;;1ED8 1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB; 1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA 1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD; 1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC 1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF; 1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE 1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1; 1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0 1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3; 1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2 1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5; 1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4 1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7; 1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6 1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9; 1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8 1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB; 1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA 1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED; 1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC 1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF; 1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE 1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1; 1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0 1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3; 1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2 1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5; 1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4 1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7; 1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6 1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9; 1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8 1EFA;LATIN CAPITAL LETTER MIDDLE-WELSH LL;Lu;0;L;;;;;N;;;;1EFB; 1EFB;LATIN SMALL LETTER MIDDLE-WELSH LL;Ll;0;L;;;;;N;;;1EFA;;1EFA 1EFC;LATIN CAPITAL LETTER MIDDLE-WELSH V;Lu;0;L;;;;;N;;;;1EFD; 1EFD;LATIN SMALL LETTER MIDDLE-WELSH V;Ll;0;L;;;;;N;;;1EFC;;1EFC 1EFE;LATIN CAPITAL LETTER Y WITH LOOP;Lu;0;L;;;;;N;;;;1EFF; 1EFF;LATIN SMALL LETTER Y WITH LOOP;Ll;0;L;;;;;N;;;1EFE;;1EFE 1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08 1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09 1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A 1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B 1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C 1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D 1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E 1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F 1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00; 1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01; 1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02; 1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03; 1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04; 1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05; 1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06; 1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07; 1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18 1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19 1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A 1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B 1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C 1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D 1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10; 1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11; 1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12; 1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13; 1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14; 1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15; 1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28 1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29 1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A 1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B 1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C 1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D 1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E 1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F 1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20; 1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21; 1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22; 1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23; 1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24; 1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25; 1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26; 1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27; 1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38 1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39 1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A 1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B 1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C 1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D 1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E 1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F 1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30; 1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31; 1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32; 1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33; 1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34; 1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35; 1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36; 1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37; 1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48 1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49 1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A 1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B 1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C 1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D 1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40; 1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41; 1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42; 1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43; 1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44; 1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45; 1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;; 1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59 1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;; 1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B 1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;; 1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D 1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;; 1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F 1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51; 1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53; 1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55; 1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57; 1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68 1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69 1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A 1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B 1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C 1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D 1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E 1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F 1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60; 1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61; 1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62; 1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63; 1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64; 1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65; 1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66; 1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67; 1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA 1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03AC;;;;N;;;1FBB;;1FBB 1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8 1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03AD;;;;N;;;1FC9;;1FC9 1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA 1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03AE;;;;N;;;1FCB;;1FCB 1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA 1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03AF;;;;N;;;1FDB;;1FDB 1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8 1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03CC;;;;N;;;1FF9;;1FF9 1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA 1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03CD;;;;N;;;1FEB;;1FEB 1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA 1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03CE;;;;N;;;1FFB;;1FFB 1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88 1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89 1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A 1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B 1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C 1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D 1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E 1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F 1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F08 0345;;;;N;;;;1F80; 1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F09 0345;;;;N;;;;1F81; 1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0A 0345;;;;N;;;;1F82; 1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0B 0345;;;;N;;;;1F83; 1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0C 0345;;;;N;;;;1F84; 1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0D 0345;;;;N;;;;1F85; 1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0E 0345;;;;N;;;;1F86; 1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0F 0345;;;;N;;;;1F87; 1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98 1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99 1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A 1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B 1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C 1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D 1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E 1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F 1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F28 0345;;;;N;;;;1F90; 1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F29 0345;;;;N;;;;1F91; 1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2A 0345;;;;N;;;;1F92; 1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2B 0345;;;;N;;;;1F93; 1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2C 0345;;;;N;;;;1F94; 1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2D 0345;;;;N;;;;1F95; 1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2E 0345;;;;N;;;;1F96; 1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2F 0345;;;;N;;;;1F97; 1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8 1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9 1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA 1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB 1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC 1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD 1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE 1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF 1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F68 0345;;;;N;;;;1FA0; 1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F69 0345;;;;N;;;;1FA1; 1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6A 0345;;;;N;;;;1FA2; 1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6B 0345;;;;N;;;;1FA3; 1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6C 0345;;;;N;;;;1FA4; 1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6D 0345;;;;N;;;;1FA5; 1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6E 0345;;;;N;;;;1FA6; 1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6F 0345;;;;N;;;;1FA7; 1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8 1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9 1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;; 1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC 1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AC 0345;;;;N;;;;; 1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;; 1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;; 1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0; 1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1; 1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70; 1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0386;;;;N;;;;1F71; 1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lt;0;L;0391 0345;;;;N;;;;1FB3; 1FBD;GREEK KORONIS;Sk;0;ON; 0020 0313;;;;N;;;;; 1FBE;GREEK PROSGEGRAMMENI;Ll;0;L;03B9;;;;N;;;0399;;0399 1FBF;GREEK PSILI;Sk;0;ON; 0020 0313;;;;N;;;;; 1FC0;GREEK PERISPOMENI;Sk;0;ON; 0020 0342;;;;N;;;;; 1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;ON;00A8 0342;;;;N;;;;; 1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;; 1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC 1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AE 0345;;;;N;;;;; 1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;; 1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;; 1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72; 1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0388;;;;N;;;;1F73; 1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74; 1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0389;;;;N;;;;1F75; 1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lt;0;L;0397 0345;;;;N;;;;1FC3; 1FCD;GREEK PSILI AND VARIA;Sk;0;ON;1FBF 0300;;;;N;;;;; 1FCE;GREEK PSILI AND OXIA;Sk;0;ON;1FBF 0301;;;;N;;;;; 1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;ON;1FBF 0342;;;;N;;;;; 1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8 1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9 1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;; 1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;0390;;;;N;;;;; 1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;; 1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;; 1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0; 1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1; 1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76; 1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;038A;;;;N;;;;1F77; 1FDD;GREEK DASIA AND VARIA;Sk;0;ON;1FFE 0300;;;;N;;;;; 1FDE;GREEK DASIA AND OXIA;Sk;0;ON;1FFE 0301;;;;N;;;;; 1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;ON;1FFE 0342;;;;N;;;;; 1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8 1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9 1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;; 1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03B0;;;;N;;;;; 1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;; 1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC 1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;; 1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;; 1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0; 1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1; 1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A; 1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;038E;;;;N;;;;1F7B; 1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5; 1FED;GREEK DIALYTIKA AND VARIA;Sk;0;ON;00A8 0300;;;;N;;;;; 1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;ON;0385;;;;N;;;;; 1FEF;GREEK VARIA;Sk;0;ON;0060;;;;N;;;;; 1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;; 1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC 1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03CE 0345;;;;N;;;;; 1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;; 1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;; 1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78; 1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;038C;;;;N;;;;1F79; 1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C; 1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;038F;;;;N;;;;1F7D; 1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lt;0;L;03A9 0345;;;;N;;;;1FF3; 1FFD;GREEK OXIA;Sk;0;ON;00B4;;;;N;;;;; 1FFE;GREEK DASIA;Sk;0;ON; 0020 0314;;;;N;;;;; 2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;; 2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;; 2002;EN SPACE;Zs;0;WS; 0020;;;;N;;;;; 2003;EM SPACE;Zs;0;WS; 0020;;;;N;;;;; 2004;THREE-PER-EM SPACE;Zs;0;WS; 0020;;;;N;;;;; 2005;FOUR-PER-EM SPACE;Zs;0;WS; 0020;;;;N;;;;; 2006;SIX-PER-EM SPACE;Zs;0;WS; 0020;;;;N;;;;; 2007;FIGURE SPACE;Zs;0;WS; 0020;;;;N;;;;; 2008;PUNCTUATION SPACE;Zs;0;WS; 0020;;;;N;;;;; 2009;THIN SPACE;Zs;0;WS; 0020;;;;N;;;;; 200A;HAIR SPACE;Zs;0;WS; 0020;;;;N;;;;; 200B;ZERO WIDTH SPACE;Cf;0;BN;;;;;N;;;;; 200C;ZERO WIDTH NON-JOINER;Cf;0;BN;;;;;N;;;;; 200D;ZERO WIDTH JOINER;Cf;0;BN;;;;;N;;;;; 200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;; 200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;; 2010;HYPHEN;Pd;0;ON;;;;;N;;;;; 2011;NON-BREAKING HYPHEN;Pd;0;ON; 2010;;;;N;;;;; 2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;; 2013;EN DASH;Pd;0;ON;;;;;N;;;;; 2014;EM DASH;Pd;0;ON;;;;;N;;;;; 2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;; 2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;; 2017;DOUBLE LOW LINE;Po;0;ON; 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;; 2018;LEFT SINGLE QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;; 2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;; 201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;; 201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;; 201C;LEFT DOUBLE QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;; 201D;RIGHT DOUBLE QUOTATION MARK;Pf;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;; 201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;; 201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;; 2020;DAGGER;Po;0;ON;;;;;N;;;;; 2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;; 2022;BULLET;Po;0;ON;;;;;N;;;;; 2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;; 2024;ONE DOT LEADER;Po;0;ON; 002E;;;;N;;;;; 2025;TWO DOT LEADER;Po;0;ON; 002E 002E;;;;N;;;;; 2026;HORIZONTAL ELLIPSIS;Po;0;ON; 002E 002E 002E;;;;N;;;;; 2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;; 2028;LINE SEPARATOR;Zl;0;WS;;;;;N;;;;; 2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;; 202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;LRE;;;;;N;;;;; 202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;RLE;;;;;N;;;;; 202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;; 202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;; 202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;; 202F;NARROW NO-BREAK SPACE;Zs;0;CS; 0020;;;;N;;;;; 2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;; 2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;; 2032;PRIME;Po;0;ET;;;;;N;;;;; 2033;DOUBLE PRIME;Po;0;ET; 2032 2032;;;;N;;;;; 2034;TRIPLE PRIME;Po;0;ET; 2032 2032 2032;;;;N;;;;; 2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;; 2036;REVERSED DOUBLE PRIME;Po;0;ON; 2035 2035;;;;N;;;;; 2037;REVERSED TRIPLE PRIME;Po;0;ON; 2035 2035 2035;;;;N;;;;; 2038;CARET;Po;0;ON;;;;;N;;;;; 2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING SINGLE GUILLEMET;;;; 203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING SINGLE GUILLEMET;;;; 203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;; 203C;DOUBLE EXCLAMATION MARK;Po;0;ON; 0021 0021;;;;N;;;;; 203D;INTERROBANG;Po;0;ON;;;;;N;;;;; 203E;OVERLINE;Po;0;ON; 0020 0305;;;;N;SPACING OVERSCORE;;;; 203F;UNDERTIE;Pc;0;ON;;;;;N;;;;; 2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;; 2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;; 2042;ASTERISM;Po;0;ON;;;;;N;;;;; 2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;; 2044;FRACTION SLASH;Sm;0;CS;;;;;N;;;;; 2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;; 2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;; 2047;DOUBLE QUESTION MARK;Po;0;ON; 003F 003F;;;;N;;;;; 2048;QUESTION EXCLAMATION MARK;Po;0;ON; 003F 0021;;;;N;;;;; 2049;EXCLAMATION QUESTION MARK;Po;0;ON; 0021 003F;;;;N;;;;; 204A;TIRONIAN SIGN ET;Po;0;ON;;;;;N;;;;; 204B;REVERSED PILCROW SIGN;Po;0;ON;;;;;N;;;;; 204C;BLACK LEFTWARDS BULLET;Po;0;ON;;;;;N;;;;; 204D;BLACK RIGHTWARDS BULLET;Po;0;ON;;;;;N;;;;; 204E;LOW ASTERISK;Po;0;ON;;;;;N;;;;; 204F;REVERSED SEMICOLON;Po;0;ON;;;;;N;;;;; 2050;CLOSE UP;Po;0;ON;;;;;N;;;;; 2051;TWO ASTERISKS ALIGNED VERTICALLY;Po;0;ON;;;;;N;;;;; 2052;COMMERCIAL MINUS SIGN;Sm;0;ON;;;;;N;;;;; 2053;SWUNG DASH;Po;0;ON;;;;;N;;;;; 2054;INVERTED UNDERTIE;Pc;0;ON;;;;;N;;;;; 2055;FLOWER PUNCTUATION MARK;Po;0;ON;;;;;N;;;;; 2056;THREE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 2057;QUADRUPLE PRIME;Po;0;ON; 2032 2032 2032 2032;;;;N;;;;; 2058;FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 2059;FIVE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 205A;TWO DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 205B;FOUR DOT MARK;Po;0;ON;;;;;N;;;;; 205C;DOTTED CROSS;Po;0;ON;;;;;N;;;;; 205D;TRICOLON;Po;0;ON;;;;;N;;;;; 205E;VERTICAL FOUR DOTS;Po;0;ON;;;;;N;;;;; 205F;MEDIUM MATHEMATICAL SPACE;Zs;0;WS; 0020;;;;N;;;;; 2060;WORD JOINER;Cf;0;BN;;;;;N;;;;; 2061;FUNCTION APPLICATION;Cf;0;BN;;;;;N;;;;; 2062;INVISIBLE TIMES;Cf;0;BN;;;;;N;;;;; 2063;INVISIBLE SEPARATOR;Cf;0;BN;;;;;N;;;;; 2064;INVISIBLE PLUS;Cf;0;BN;;;;;N;;;;; 2066;LEFT-TO-RIGHT ISOLATE;Cf;0;LRI;;;;;N;;;;; 2067;RIGHT-TO-LEFT ISOLATE;Cf;0;RLI;;;;;N;;;;; 2068;FIRST STRONG ISOLATE;Cf;0;FSI;;;;;N;;;;; 2069;POP DIRECTIONAL ISOLATE;Cf;0;PDI;;;;;N;;;;; 206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;; 206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;; 206C;INHIBIT ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;; 206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;; 206E;NATIONAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;; 206F;NOMINAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;; 2070;SUPERSCRIPT ZERO;No;0;EN; 0030;;0;0;N;SUPERSCRIPT DIGIT ZERO;;;; 2071;SUPERSCRIPT LATIN SMALL LETTER I;Lm;0;L; 0069;;;;N;;;;; 2074;SUPERSCRIPT FOUR;No;0;EN; 0034;;4;4;N;SUPERSCRIPT DIGIT FOUR;;;; 2075;SUPERSCRIPT FIVE;No;0;EN; 0035;;5;5;N;SUPERSCRIPT DIGIT FIVE;;;; 2076;SUPERSCRIPT SIX;No;0;EN; 0036;;6;6;N;SUPERSCRIPT DIGIT SIX;;;; 2077;SUPERSCRIPT SEVEN;No;0;EN; 0037;;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;; 2078;SUPERSCRIPT EIGHT;No;0;EN; 0038;;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;; 2079;SUPERSCRIPT NINE;No;0;EN; 0039;;9;9;N;SUPERSCRIPT DIGIT NINE;;;; 207A;SUPERSCRIPT PLUS SIGN;Sm;0;ES; 002B;;;;N;;;;; 207B;SUPERSCRIPT MINUS;Sm;0;ES; 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;; 207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; 207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON; 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;; 207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;; 207F;SUPERSCRIPT LATIN SMALL LETTER N;Lm;0;L; 006E;;;;N;;;;; 2080;SUBSCRIPT ZERO;No;0;EN; 0030;;0;0;N;SUBSCRIPT DIGIT ZERO;;;; 2081;SUBSCRIPT ONE;No;0;EN; 0031;;1;1;N;SUBSCRIPT DIGIT ONE;;;; 2082;SUBSCRIPT TWO;No;0;EN; 0032;;2;2;N;SUBSCRIPT DIGIT TWO;;;; 2083;SUBSCRIPT THREE;No;0;EN; 0033;;3;3;N;SUBSCRIPT DIGIT THREE;;;; 2084;SUBSCRIPT FOUR;No;0;EN; 0034;;4;4;N;SUBSCRIPT DIGIT FOUR;;;; 2085;SUBSCRIPT FIVE;No;0;EN; 0035;;5;5;N;SUBSCRIPT DIGIT FIVE;;;; 2086;SUBSCRIPT SIX;No;0;EN; 0036;;6;6;N;SUBSCRIPT DIGIT SIX;;;; 2087;SUBSCRIPT SEVEN;No;0;EN; 0037;;7;7;N;SUBSCRIPT DIGIT SEVEN;;;; 2088;SUBSCRIPT EIGHT;No;0;EN; 0038;;8;8;N;SUBSCRIPT DIGIT EIGHT;;;; 2089;SUBSCRIPT NINE;No;0;EN; 0039;;9;9;N;SUBSCRIPT DIGIT NINE;;;; 208A;SUBSCRIPT PLUS SIGN;Sm;0;ES; 002B;;;;N;;;;; 208B;SUBSCRIPT MINUS;Sm;0;ES; 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;; 208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; 208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON; 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;; 208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;; 2090;LATIN SUBSCRIPT SMALL LETTER A;Lm;0;L; 0061;;;;N;;;;; 2091;LATIN SUBSCRIPT SMALL LETTER E;Lm;0;L; 0065;;;;N;;;;; 2092;LATIN SUBSCRIPT SMALL LETTER O;Lm;0;L; 006F;;;;N;;;;; 2093;LATIN SUBSCRIPT SMALL LETTER X;Lm;0;L; 0078;;;;N;;;;; 2094;LATIN SUBSCRIPT SMALL LETTER SCHWA;Lm;0;L; 0259;;;;N;;;;; 2095;LATIN SUBSCRIPT SMALL LETTER H;Lm;0;L; 0068;;;;N;;;;; 2096;LATIN SUBSCRIPT SMALL LETTER K;Lm;0;L; 006B;;;;N;;;;; 2097;LATIN SUBSCRIPT SMALL LETTER L;Lm;0;L; 006C;;;;N;;;;; 2098;LATIN SUBSCRIPT SMALL LETTER M;Lm;0;L; 006D;;;;N;;;;; 2099;LATIN SUBSCRIPT SMALL LETTER N;Lm;0;L; 006E;;;;N;;;;; 209A;LATIN SUBSCRIPT SMALL LETTER P;Lm;0;L; 0070;;;;N;;;;; 209B;LATIN SUBSCRIPT SMALL LETTER S;Lm;0;L; 0073;;;;N;;;;; 209C;LATIN SUBSCRIPT SMALL LETTER T;Lm;0;L; 0074;;;;N;;;;; 20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;; 20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;; 20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;; 20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;; 20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;; 20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;; 20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;; 20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;; 20A8;RUPEE SIGN;Sc;0;ET; 0052 0073;;;;N;;;;; 20A9;WON SIGN;Sc;0;ET;;;;;N;;;;; 20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;; 20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;; 20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;; 20AD;KIP SIGN;Sc;0;ET;;;;;N;;;;; 20AE;TUGRIK SIGN;Sc;0;ET;;;;;N;;;;; 20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;; 20B0;GERMAN PENNY SIGN;Sc;0;ET;;;;;N;;;;; 20B1;PESO SIGN;Sc;0;ET;;;;;N;;;;; 20B2;GUARANI SIGN;Sc;0;ET;;;;;N;;;;; 20B3;AUSTRAL SIGN;Sc;0;ET;;;;;N;;;;; 20B4;HRYVNIA SIGN;Sc;0;ET;;;;;N;;;;; 20B5;CEDI SIGN;Sc;0;ET;;;;;N;;;;; 20B6;LIVRE TOURNOIS SIGN;Sc;0;ET;;;;;N;;;;; 20B7;SPESMILO SIGN;Sc;0;ET;;;;;N;;;;; 20B8;TENGE SIGN;Sc;0;ET;;;;;N;;;;; 20B9;INDIAN RUPEE SIGN;Sc;0;ET;;;;;N;;;;; 20BA;TURKISH LIRA SIGN;Sc;0;ET;;;;;N;;;;; 20BB;NORDIC MARK SIGN;Sc;0;ET;;;;;N;;;;; 20BC;MANAT SIGN;Sc;0;ET;;;;;N;;;;; 20BD;RUBLE SIGN;Sc;0;ET;;;;;N;;;;; 20BE;LARI SIGN;Sc;0;ET;;;;;N;;;;; 20BF;BITCOIN SIGN;Sc;0;ET;;;;;N;;;;; 20C0;SOM SIGN;Sc;0;ET;;;;;N;;;;; 20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;; 20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;; 20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;; 20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;; 20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;; 20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;; 20D6;COMBINING LEFT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;; 20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;; 20D8;COMBINING RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING RING OVERLAY;;;; 20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;; 20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;; 20DB;COMBINING THREE DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING THREE DOTS ABOVE;;;; 20DC;COMBINING FOUR DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;; 20DD;COMBINING ENCLOSING CIRCLE;Me;0;NSM;;;;;N;ENCLOSING CIRCLE;;;; 20DE;COMBINING ENCLOSING SQUARE;Me;0;NSM;;;;;N;ENCLOSING SQUARE;;;; 20DF;COMBINING ENCLOSING DIAMOND;Me;0;NSM;;;;;N;ENCLOSING DIAMOND;;;; 20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;NSM;;;;;N;ENCLOSING CIRCLE SLASH;;;; 20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;; 20E2;COMBINING ENCLOSING SCREEN;Me;0;NSM;;;;;N;;;;; 20E3;COMBINING ENCLOSING KEYCAP;Me;0;NSM;;;;;N;;;;; 20E4;COMBINING ENCLOSING UPWARD POINTING TRIANGLE;Me;0;NSM;;;;;N;;;;; 20E5;COMBINING REVERSE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;; 20E6;COMBINING DOUBLE VERTICAL STROKE OVERLAY;Mn;1;NSM;;;;;N;;;;; 20E7;COMBINING ANNUITY SYMBOL;Mn;230;NSM;;;;;N;;;;; 20E8;COMBINING TRIPLE UNDERDOT;Mn;220;NSM;;;;;N;;;;; 20E9;COMBINING WIDE BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;; 20EA;COMBINING LEFTWARDS ARROW OVERLAY;Mn;1;NSM;;;;;N;;;;; 20EB;COMBINING LONG DOUBLE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;; 20EC;COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;; 20ED;COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;; 20EE;COMBINING LEFT ARROW BELOW;Mn;220;NSM;;;;;N;;;;; 20EF;COMBINING RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;; 20F0;COMBINING ASTERISK ABOVE;Mn;230;NSM;;;;;N;;;;; 2100;ACCOUNT OF;So;0;ON; 0061 002F 0063;;;;N;;;;; 2101;ADDRESSED TO THE SUBJECT;So;0;ON; 0061 002F 0073;;;;N;;;;; 2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L; 0043;;;;N;DOUBLE-STRUCK C;;;; 2103;DEGREE CELSIUS;So;0;ON; 00B0 0043;;;;N;DEGREES CENTIGRADE;;;; 2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;; 2105;CARE OF;So;0;ON; 0063 002F 006F;;;;N;;;;; 2106;CADA UNA;So;0;ON; 0063 002F 0075;;;;N;;;;; 2107;EULER CONSTANT;Lu;0;L; 0190;;;;N;EULERS;;;; 2108;SCRUPLE;So;0;ON;;;;;N;;;;; 2109;DEGREE FAHRENHEIT;So;0;ON; 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;; 210A;SCRIPT SMALL G;Ll;0;L; 0067;;;;N;;;;; 210B;SCRIPT CAPITAL H;Lu;0;L; 0048;;;;N;SCRIPT H;;;; 210C;BLACK-LETTER CAPITAL H;Lu;0;L; 0048;;;;N;BLACK-LETTER H;;;; 210D;DOUBLE-STRUCK CAPITAL H;Lu;0;L; 0048;;;;N;DOUBLE-STRUCK H;;;; 210E;PLANCK CONSTANT;Ll;0;L; 0068;;;;N;;;;; 210F;PLANCK CONSTANT OVER TWO PI;Ll;0;L; 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;; 2110;SCRIPT CAPITAL I;Lu;0;L; 0049;;;;N;SCRIPT I;;;; 2111;BLACK-LETTER CAPITAL I;Lu;0;L; 0049;;;;N;BLACK-LETTER I;;;; 2112;SCRIPT CAPITAL L;Lu;0;L; 004C;;;;N;SCRIPT L;;;; 2113;SCRIPT SMALL L;Ll;0;L; 006C;;;;N;;;;; 2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;; 2115;DOUBLE-STRUCK CAPITAL N;Lu;0;L; 004E;;;;N;DOUBLE-STRUCK N;;;; 2116;NUMERO SIGN;So;0;ON; 004E 006F;;;;N;NUMERO;;;; 2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;; 2118;SCRIPT CAPITAL P;Sm;0;ON;;;;;N;SCRIPT P;;;; 2119;DOUBLE-STRUCK CAPITAL P;Lu;0;L; 0050;;;;N;DOUBLE-STRUCK P;;;; 211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;L; 0051;;;;N;DOUBLE-STRUCK Q;;;; 211B;SCRIPT CAPITAL R;Lu;0;L; 0052;;;;N;SCRIPT R;;;; 211C;BLACK-LETTER CAPITAL R;Lu;0;L; 0052;;;;N;BLACK-LETTER R;;;; 211D;DOUBLE-STRUCK CAPITAL R;Lu;0;L; 0052;;;;N;DOUBLE-STRUCK R;;;; 211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;; 211F;RESPONSE;So;0;ON;;;;;N;;;;; 2120;SERVICE MARK;So;0;ON; 0053 004D;;;;N;;;;; 2121;TELEPHONE SIGN;So;0;ON; 0054 0045 004C;;;;N;T E L SYMBOL;;;; 2122;TRADE MARK SIGN;So;0;ON; 0054 004D;;;;N;TRADEMARK;;;; 2123;VERSICLE;So;0;ON;;;;;N;;;;; 2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;L; 005A;;;;N;DOUBLE-STRUCK Z;;;; 2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;; 2126;OHM SIGN;Lu;0;L;03A9;;;;N;OHM;;;03C9; 2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;; 2128;BLACK-LETTER CAPITAL Z;Lu;0;L; 005A;;;;N;BLACK-LETTER Z;;;; 2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;; 212A;KELVIN SIGN;Lu;0;L;004B;;;;N;DEGREES KELVIN;;;006B; 212B;ANGSTROM SIGN;Lu;0;L;00C5;;;;N;ANGSTROM UNIT;;;00E5; 212C;SCRIPT CAPITAL B;Lu;0;L; 0042;;;;N;SCRIPT B;;;; 212D;BLACK-LETTER CAPITAL C;Lu;0;L; 0043;;;;N;BLACK-LETTER C;;;; 212E;ESTIMATED SYMBOL;So;0;ET;;;;;N;;;;; 212F;SCRIPT SMALL E;Ll;0;L; 0065;;;;N;;;;; 2130;SCRIPT CAPITAL E;Lu;0;L; 0045;;;;N;SCRIPT E;;;; 2131;SCRIPT CAPITAL F;Lu;0;L; 0046;;;;N;SCRIPT F;;;; 2132;TURNED CAPITAL F;Lu;0;L;;;;;N;TURNED F;;;214E; 2133;SCRIPT CAPITAL M;Lu;0;L; 004D;;;;N;SCRIPT M;;;; 2134;SCRIPT SMALL O;Ll;0;L; 006F;;;;N;;;;; 2135;ALEF SYMBOL;Lo;0;L; 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;; 2136;BET SYMBOL;Lo;0;L; 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;; 2137;GIMEL SYMBOL;Lo;0;L; 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;; 2138;DALET SYMBOL;Lo;0;L; 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;; 2139;INFORMATION SOURCE;Ll;0;L; 0069;;;;N;;;;; 213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;; 213B;FACSIMILE SIGN;So;0;ON; 0046 0041 0058;;;;N;;;;; 213C;DOUBLE-STRUCK SMALL PI;Ll;0;L; 03C0;;;;N;;;;; 213D;DOUBLE-STRUCK SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; 213E;DOUBLE-STRUCK CAPITAL GAMMA;Lu;0;L; 0393;;;;N;;;;; 213F;DOUBLE-STRUCK CAPITAL PI;Lu;0;L; 03A0;;;;N;;;;; 2140;DOUBLE-STRUCK N-ARY SUMMATION;Sm;0;ON; 2211;;;;Y;;;;; 2141;TURNED SANS-SERIF CAPITAL G;Sm;0;ON;;;;;N;;;;; 2142;TURNED SANS-SERIF CAPITAL L;Sm;0;ON;;;;;N;;;;; 2143;REVERSED SANS-SERIF CAPITAL L;Sm;0;ON;;;;;N;;;;; 2144;TURNED SANS-SERIF CAPITAL Y;Sm;0;ON;;;;;N;;;;; 2145;DOUBLE-STRUCK ITALIC CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 2146;DOUBLE-STRUCK ITALIC SMALL D;Ll;0;L; 0064;;;;N;;;;; 2147;DOUBLE-STRUCK ITALIC SMALL E;Ll;0;L; 0065;;;;N;;;;; 2148;DOUBLE-STRUCK ITALIC SMALL I;Ll;0;L; 0069;;;;N;;;;; 2149;DOUBLE-STRUCK ITALIC SMALL J;Ll;0;L; 006A;;;;N;;;;; 214A;PROPERTY LINE;So;0;ON;;;;;N;;;;; 214B;TURNED AMPERSAND;Sm;0;ON;;;;;N;;;;; 214C;PER SIGN;So;0;ON;;;;;N;;;;; 214D;AKTIESELSKAB;So;0;ON;;;;;N;;;;; 214E;TURNED SMALL F;Ll;0;L;;;;;N;;;2132;;2132 214F;SYMBOL FOR SAMARITAN SOURCE;So;0;L;;;;;N;;;;; 2150;VULGAR FRACTION ONE SEVENTH;No;0;ON; 0031 2044 0037;;;1/7;N;;;;; 2151;VULGAR FRACTION ONE NINTH;No;0;ON; 0031 2044 0039;;;1/9;N;;;;; 2152;VULGAR FRACTION ONE TENTH;No;0;ON; 0031 2044 0031 0030;;;1/10;N;;;;; 2153;VULGAR FRACTION ONE THIRD;No;0;ON; 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;; 2154;VULGAR FRACTION TWO THIRDS;No;0;ON; 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;; 2155;VULGAR FRACTION ONE FIFTH;No;0;ON; 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;; 2156;VULGAR FRACTION TWO FIFTHS;No;0;ON; 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;; 2157;VULGAR FRACTION THREE FIFTHS;No;0;ON; 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;; 2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON; 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;; 2159;VULGAR FRACTION ONE SIXTH;No;0;ON; 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;; 215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON; 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;; 215B;VULGAR FRACTION ONE EIGHTH;No;0;ON; 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;; 215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON; 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;; 215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON; 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;; 215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON; 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;; 215F;FRACTION NUMERATOR ONE;No;0;ON; 0031 2044;;;1;N;;;;; 2160;ROMAN NUMERAL ONE;Nl;0;L; 0049;;;1;N;;;;2170; 2161;ROMAN NUMERAL TWO;Nl;0;L; 0049 0049;;;2;N;;;;2171; 2162;ROMAN NUMERAL THREE;Nl;0;L; 0049 0049 0049;;;3;N;;;;2172; 2163;ROMAN NUMERAL FOUR;Nl;0;L; 0049 0056;;;4;N;;;;2173; 2164;ROMAN NUMERAL FIVE;Nl;0;L; 0056;;;5;N;;;;2174; 2165;ROMAN NUMERAL SIX;Nl;0;L; 0056 0049;;;6;N;;;;2175; 2166;ROMAN NUMERAL SEVEN;Nl;0;L; 0056 0049 0049;;;7;N;;;;2176; 2167;ROMAN NUMERAL EIGHT;Nl;0;L; 0056 0049 0049 0049;;;8;N;;;;2177; 2168;ROMAN NUMERAL NINE;Nl;0;L; 0049 0058;;;9;N;;;;2178; 2169;ROMAN NUMERAL TEN;Nl;0;L; 0058;;;10;N;;;;2179; 216A;ROMAN NUMERAL ELEVEN;Nl;0;L; 0058 0049;;;11;N;;;;217A; 216B;ROMAN NUMERAL TWELVE;Nl;0;L; 0058 0049 0049;;;12;N;;;;217B; 216C;ROMAN NUMERAL FIFTY;Nl;0;L; 004C;;;50;N;;;;217C; 216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L; 0043;;;100;N;;;;217D; 216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L; 0044;;;500;N;;;;217E; 216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L; 004D;;;1000;N;;;;217F; 2170;SMALL ROMAN NUMERAL ONE;Nl;0;L; 0069;;;1;N;;;2160;;2160 2171;SMALL ROMAN NUMERAL TWO;Nl;0;L; 0069 0069;;;2;N;;;2161;;2161 2172;SMALL ROMAN NUMERAL THREE;Nl;0;L; 0069 0069 0069;;;3;N;;;2162;;2162 2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L; 0069 0076;;;4;N;;;2163;;2163 2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L; 0076;;;5;N;;;2164;;2164 2175;SMALL ROMAN NUMERAL SIX;Nl;0;L; 0076 0069;;;6;N;;;2165;;2165 2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L; 0076 0069 0069;;;7;N;;;2166;;2166 2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L; 0076 0069 0069 0069;;;8;N;;;2167;;2167 2178;SMALL ROMAN NUMERAL NINE;Nl;0;L; 0069 0078;;;9;N;;;2168;;2168 2179;SMALL ROMAN NUMERAL TEN;Nl;0;L; 0078;;;10;N;;;2169;;2169 217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L; 0078 0069;;;11;N;;;216A;;216A 217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L; 0078 0069 0069;;;12;N;;;216B;;216B 217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L; 006C;;;50;N;;;216C;;216C 217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L; 0063;;;100;N;;;216D;;216D 217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L; 0064;;;500;N;;;216E;;216E 217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L; 006D;;;1000;N;;;216F;;216F 2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;; 2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;; 2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;; 2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Lu;0;L;;;;;N;;;;2184; 2184;LATIN SMALL LETTER REVERSED C;Ll;0;L;;;;;N;;;2183;;2183 2185;ROMAN NUMERAL SIX LATE FORM;Nl;0;L;;;;6;N;;;;; 2186;ROMAN NUMERAL FIFTY EARLY FORM;Nl;0;L;;;;50;N;;;;; 2187;ROMAN NUMERAL FIFTY THOUSAND;Nl;0;L;;;;50000;N;;;;; 2188;ROMAN NUMERAL ONE HUNDRED THOUSAND;Nl;0;L;;;;100000;N;;;;; 2189;VULGAR FRACTION ZERO THIRDS;No;0;ON; 0030 2044 0033;;;0;N;;;;; 218A;TURNED DIGIT TWO;So;0;ON;;;;;N;;;;; 218B;TURNED DIGIT THREE;So;0;ON;;;;;N;;;;; 2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;; 2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;; 2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;; 2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;; 2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;; 2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;; 2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;; 2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;; 2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;; 2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;; 219A;LEFTWARDS ARROW WITH STROKE;Sm;0;ON;2190 0338;;;;N;LEFT ARROW WITH STROKE;;;; 219B;RIGHTWARDS ARROW WITH STROKE;Sm;0;ON;2192 0338;;;;N;RIGHT ARROW WITH STROKE;;;; 219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;; 219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;; 219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;; 219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;; 21A0;RIGHTWARDS TWO HEADED ARROW;Sm;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;; 21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;; 21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;; 21A3;RIGHTWARDS ARROW WITH TAIL;Sm;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;; 21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;; 21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;; 21A6;RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;; 21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;; 21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;; 21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;; 21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;; 21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;; 21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;; 21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;; 21AE;LEFT RIGHT ARROW WITH STROKE;Sm;0;ON;2194 0338;;;;N;;;;; 21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;; 21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;; 21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;; 21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;; 21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;; 21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;; 21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;; 21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;; 21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;; 21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;; 21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;; 21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;; 21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;; 21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;; 21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;; 21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;; 21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;; 21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;; 21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;; 21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;; 21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;; 21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;; 21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;; 21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;; 21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;; 21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;; 21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;; 21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;; 21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;; 21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;; 21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;21D0 0338;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;; 21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;Sm;0;ON;21D4 0338;;;;N;;;;; 21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;Sm;0;ON;21D2 0338;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;; 21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;; 21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;; 21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;; 21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;; 21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;; 21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;; 21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;; 21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;; 21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;; 21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;; 21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;; 21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;; 21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;; 21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;; 21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;; 21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;; 21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;; 21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;; 21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;; 21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;; 21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;; 21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;; 21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;; 21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;; 21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;; 21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;; 21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;; 21EB;UPWARDS WHITE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;; 21EC;UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;; 21ED;UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR;So;0;ON;;;;;N;;;;; 21EE;UPWARDS WHITE DOUBLE ARROW;So;0;ON;;;;;N;;;;; 21EF;UPWARDS WHITE DOUBLE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;; 21F0;RIGHTWARDS WHITE ARROW FROM WALL;So;0;ON;;;;;N;;;;; 21F1;NORTH WEST ARROW TO CORNER;So;0;ON;;;;;N;;;;; 21F2;SOUTH EAST ARROW TO CORNER;So;0;ON;;;;;N;;;;; 21F3;UP DOWN WHITE ARROW;So;0;ON;;;;;N;;;;; 21F4;RIGHT ARROW WITH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; 21F5;DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW;Sm;0;ON;;;;;N;;;;; 21F6;THREE RIGHTWARDS ARROWS;Sm;0;ON;;;;;N;;;;; 21F7;LEFTWARDS ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 21F8;RIGHTWARDS ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 21F9;LEFT RIGHT ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 21FA;LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 21FB;RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 21FC;LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 21FD;LEFTWARDS OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;; 21FE;RIGHTWARDS OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;; 21FF;LEFT RIGHT OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;; 2200;FOR ALL;Sm;0;ON;;;;;N;;;;; 2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;; 2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;; 2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;; 2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;; 2205;EMPTY SET;Sm;0;ON;;;;;N;;;;; 2206;INCREMENT;Sm;0;ON;;;;;N;;;;; 2207;NABLA;Sm;0;ON;;;;;N;;;;; 2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;; 2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;; 220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;; 220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;; 220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;; 220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;; 220E;END OF PROOF;Sm;0;ON;;;;;N;;;;; 220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;; 2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;; 2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;; 2212;MINUS SIGN;Sm;0;ES;;;;;N;;;;; 2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;; 2214;DOT PLUS;Sm;0;ON;;;;;N;;;;; 2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;; 2216;SET MINUS;Sm;0;ON;;;;;Y;;;;; 2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;; 2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;; 2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;; 221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;; 221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;; 221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;; 221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;; 221E;INFINITY;Sm;0;ON;;;;;N;;;;; 221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;; 2220;ANGLE;Sm;0;ON;;;;;Y;;;;; 2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;; 2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;; 2223;DIVIDES;Sm;0;ON;;;;;N;;;;; 2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;; 2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;; 2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;; 2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;; 2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;; 2229;INTERSECTION;Sm;0;ON;;;;;N;;;;; 222A;UNION;Sm;0;ON;;;;;N;;;;; 222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;; 222C;DOUBLE INTEGRAL;Sm;0;ON; 222B 222B;;;;Y;;;;; 222D;TRIPLE INTEGRAL;Sm;0;ON; 222B 222B 222B;;;;Y;;;;; 222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; 222F;SURFACE INTEGRAL;Sm;0;ON; 222E 222E;;;;Y;;;;; 2230;VOLUME INTEGRAL;Sm;0;ON; 222E 222E 222E;;;;Y;;;;; 2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2234;THEREFORE;Sm;0;ON;;;;;N;;;;; 2235;BECAUSE;Sm;0;ON;;;;;N;;;;; 2236;RATIO;Sm;0;ON;;;;;N;;;;; 2237;PROPORTION;Sm;0;ON;;;;;N;;;;; 2238;DOT MINUS;Sm;0;ON;;;;;N;;;;; 2239;EXCESS;Sm;0;ON;;;;;Y;;;;; 223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;; 223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;; 223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; 223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;;;; 223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;; 223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;; 2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;; 2241;NOT TILDE;Sm;0;ON;223C 0338;;;;Y;;;;; 2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;; 2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;; 2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;; 2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;; 224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;; 224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;; 224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; 224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; 224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;; 2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;; 2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;; 2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;; 2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;; 2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;; 2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;; 2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;; 2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;; 2259;ESTIMATES;Sm;0;ON;;;;;N;;;;; 225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;; 225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;; 225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;; 225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;; 225E;MEASURED BY;Sm;0;ON;;;;;N;;;;; 225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;; 2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;; 2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;; 2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; 2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;; 2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;; 2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;; 2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;; 2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;; 2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;; 226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;; 226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;; 226C;BETWEEN;Sm;0;ON;;;;;N;;;;; 226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;; 226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;; 226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;; 2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;; 2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;; 2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;; 2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;; 2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;; 2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;; 2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;; 2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;; 2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;; 2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;; 227A;PRECEDES;Sm;0;ON;;;;;Y;;;;; 227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;; 227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; 227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; 2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;; 2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;; 2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;; 2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;; 2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;; 2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;; 2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;; 2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;; 228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;; 228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;; 228C;MULTISET;Sm;0;ON;;;;;Y;;;;; 228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;; 228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;; 228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;; 2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;; 2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;; 2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;; 2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;; 2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;; 2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;; 2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;; 2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;; 229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;; 229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;; 229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;; 229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;; 229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;; 229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;; 22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;; 22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;; 22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;; 22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;; 22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;; 22A5;UP TACK;Sm;0;ON;;;;;N;;;;; 22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;; 22A7;MODELS;Sm;0;ON;;;;;Y;;;;; 22A8;TRUE;Sm;0;ON;;;;;Y;;;;; 22A9;FORCES;Sm;0;ON;;;;;Y;;;;; 22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;; 22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;; 22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;; 22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;; 22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;; 22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;; 22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;; 22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;; 22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;; 22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;; 22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;; 22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;; 22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;; 22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;; 22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;; 22BB;XOR;Sm;0;ON;;;;;N;;;;; 22BC;NAND;Sm;0;ON;;;;;N;;;;; 22BD;NOR;Sm;0;ON;;;;;N;;;;; 22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;; 22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;; 22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;; 22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;; 22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;; 22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;; 22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;; 22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;; 22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;; 22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;; 22C8;BOWTIE;Sm;0;ON;;;;;N;;;;; 22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; 22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; 22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; 22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; 22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;; 22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;; 22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;; 22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;; 22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;; 22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;; 22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;; 22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;; 22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;; 22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;; 22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;; 22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;; 22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;; 22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;; 22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;; 22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;; 22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;; 22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;; 22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;; 22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;; 22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;; 22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;; 22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;; 22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;; 22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;; 22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; 22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; 22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;; 22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;; 22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;; 22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;; 22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;; 22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;; 22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;; 22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;; 22F2;ELEMENT OF WITH LONG HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; 22F3;ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; 22F4;SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; 22F5;ELEMENT OF WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; 22F6;ELEMENT OF WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; 22F7;SMALL ELEMENT OF WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; 22F8;ELEMENT OF WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; 22F9;ELEMENT OF WITH TWO HORIZONTAL STROKES;Sm;0;ON;;;;;Y;;;;; 22FA;CONTAINS WITH LONG HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; 22FB;CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; 22FC;SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; 22FD;CONTAINS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; 22FE;SMALL CONTAINS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; 22FF;Z NOTATION BAG MEMBERSHIP;Sm;0;ON;;;;;Y;;;;; 2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;; 2301;ELECTRIC ARROW;So;0;ON;;;;;N;;;;; 2302;HOUSE;So;0;ON;;;;;N;;;;; 2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;; 2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;; 2305;PROJECTIVE;So;0;ON;;;;;N;;;;; 2306;PERSPECTIVE;So;0;ON;;;;;N;;;;; 2307;WAVY LINE;So;0;ON;;;;;N;;;;; 2308;LEFT CEILING;Ps;0;ON;;;;;Y;;;;; 2309;RIGHT CEILING;Pe;0;ON;;;;;Y;;;;; 230A;LEFT FLOOR;Ps;0;ON;;;;;Y;;;;; 230B;RIGHT FLOOR;Pe;0;ON;;;;;Y;;;;; 230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;; 230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;; 230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;; 230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;; 2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;; 2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;; 2312;ARC;So;0;ON;;;;;N;;;;; 2313;SEGMENT;So;0;ON;;;;;N;;;;; 2314;SECTOR;So;0;ON;;;;;N;;;;; 2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;; 2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;; 2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;; 2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;; 2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;; 231A;WATCH;So;0;ON;;;;;N;;;;; 231B;HOURGLASS;So;0;ON;;;;;N;;;;; 231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;; 231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;; 231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;; 231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;; 2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2322;FROWN;So;0;ON;;;;;N;;;;; 2323;SMILE;So;0;ON;;;;;N;;;;; 2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;; 2325;OPTION KEY;So;0;ON;;;;;N;;;;; 2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;; 2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;; 2328;KEYBOARD;So;0;ON;;;;;N;;;;; 2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;; 232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;; 232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;; 232C;BENZENE RING;So;0;ON;;;;;N;;;;; 232D;CYLINDRICITY;So;0;ON;;;;;N;;;;; 232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;; 232F;SYMMETRY;So;0;ON;;;;;N;;;;; 2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;; 2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;; 2332;CONICAL TAPER;So;0;ON;;;;;N;;;;; 2333;SLOPE;So;0;ON;;;;;N;;;;; 2334;COUNTERBORE;So;0;ON;;;;;N;;;;; 2335;COUNTERSINK;So;0;ON;;;;;N;;;;; 2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;; 2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;; 2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;; 2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;; 233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;; 233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;; 233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;; 233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;; 233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;; 233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;; 2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;; 2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;; 2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;; 2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;; 2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;; 2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;; 2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;; 2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;; 2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;; 2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;; 234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;;;; 234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;; 234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;; 234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;; 234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;;;; 234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;; 2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;; 2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;;;; 2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;; 2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;; 2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;; 2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;;;; 2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;; 2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;; 2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;; 2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;; 235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;; 235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;; 235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;; 235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;; 235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;; 235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;; 2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;; 2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;;;; 2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;; 2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;; 2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;; 2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;; 2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;; 2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;; 2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;; 2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;; 236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;; 236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;; 236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;; 236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;; 236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;; 236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;; 2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;; 2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;; 2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;; 2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;; 2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;; 2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;; 2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;; 2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;; 2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;; 2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;; 237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;; 237B;NOT CHECK MARK;So;0;ON;;;;;N;;;;; 237C;RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW;Sm;0;ON;;;;;N;;;;; 237D;SHOULDERED OPEN BOX;So;0;ON;;;;;N;;;;; 237E;BELL SYMBOL;So;0;ON;;;;;N;;;;; 237F;VERTICAL LINE WITH MIDDLE DOT;So;0;ON;;;;;N;;;;; 2380;INSERTION SYMBOL;So;0;ON;;;;;N;;;;; 2381;CONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;; 2382;DISCONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;; 2383;EMPHASIS SYMBOL;So;0;ON;;;;;N;;;;; 2384;COMPOSITION SYMBOL;So;0;ON;;;;;N;;;;; 2385;WHITE SQUARE WITH CENTRE VERTICAL LINE;So;0;ON;;;;;N;;;;; 2386;ENTER SYMBOL;So;0;ON;;;;;N;;;;; 2387;ALTERNATIVE KEY SYMBOL;So;0;ON;;;;;N;;;;; 2388;HELM SYMBOL;So;0;ON;;;;;N;;;;; 2389;CIRCLED HORIZONTAL BAR WITH NOTCH;So;0;ON;;;;;N;;;;; 238A;CIRCLED TRIANGLE DOWN;So;0;ON;;;;;N;;;;; 238B;BROKEN CIRCLE WITH NORTHWEST ARROW;So;0;ON;;;;;N;;;;; 238C;UNDO SYMBOL;So;0;ON;;;;;N;;;;; 238D;MONOSTABLE SYMBOL;So;0;ON;;;;;N;;;;; 238E;HYSTERESIS SYMBOL;So;0;ON;;;;;N;;;;; 238F;OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL;So;0;ON;;;;;N;;;;; 2390;OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL;So;0;ON;;;;;N;;;;; 2391;PASSIVE-PULL-DOWN-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;; 2392;PASSIVE-PULL-UP-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;; 2393;DIRECT CURRENT SYMBOL FORM TWO;So;0;ON;;;;;N;;;;; 2394;SOFTWARE-FUNCTION SYMBOL;So;0;ON;;;;;N;;;;; 2395;APL FUNCTIONAL SYMBOL QUAD;So;0;L;;;;;N;;;;; 2396;DECIMAL SEPARATOR KEY SYMBOL;So;0;ON;;;;;N;;;;; 2397;PREVIOUS PAGE;So;0;ON;;;;;N;;;;; 2398;NEXT PAGE;So;0;ON;;;;;N;;;;; 2399;PRINT SCREEN SYMBOL;So;0;ON;;;;;N;;;;; 239A;CLEAR SCREEN SYMBOL;So;0;ON;;;;;N;;;;; 239B;LEFT PARENTHESIS UPPER HOOK;Sm;0;ON;;;;;N;;;;; 239C;LEFT PARENTHESIS EXTENSION;Sm;0;ON;;;;;N;;;;; 239D;LEFT PARENTHESIS LOWER HOOK;Sm;0;ON;;;;;N;;;;; 239E;RIGHT PARENTHESIS UPPER HOOK;Sm;0;ON;;;;;N;;;;; 239F;RIGHT PARENTHESIS EXTENSION;Sm;0;ON;;;;;N;;;;; 23A0;RIGHT PARENTHESIS LOWER HOOK;Sm;0;ON;;;;;N;;;;; 23A1;LEFT SQUARE BRACKET UPPER CORNER;Sm;0;ON;;;;;N;;;;; 23A2;LEFT SQUARE BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;; 23A3;LEFT SQUARE BRACKET LOWER CORNER;Sm;0;ON;;;;;N;;;;; 23A4;RIGHT SQUARE BRACKET UPPER CORNER;Sm;0;ON;;;;;N;;;;; 23A5;RIGHT SQUARE BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;; 23A6;RIGHT SQUARE BRACKET LOWER CORNER;Sm;0;ON;;;;;N;;;;; 23A7;LEFT CURLY BRACKET UPPER HOOK;Sm;0;ON;;;;;N;;;;; 23A8;LEFT CURLY BRACKET MIDDLE PIECE;Sm;0;ON;;;;;N;;;;; 23A9;LEFT CURLY BRACKET LOWER HOOK;Sm;0;ON;;;;;N;;;;; 23AA;CURLY BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;; 23AB;RIGHT CURLY BRACKET UPPER HOOK;Sm;0;ON;;;;;N;;;;; 23AC;RIGHT CURLY BRACKET MIDDLE PIECE;Sm;0;ON;;;;;N;;;;; 23AD;RIGHT CURLY BRACKET LOWER HOOK;Sm;0;ON;;;;;N;;;;; 23AE;INTEGRAL EXTENSION;Sm;0;ON;;;;;N;;;;; 23AF;HORIZONTAL LINE EXTENSION;Sm;0;ON;;;;;N;;;;; 23B0;UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;; 23B1;UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;; 23B2;SUMMATION TOP;Sm;0;ON;;;;;N;;;;; 23B3;SUMMATION BOTTOM;Sm;0;ON;;;;;N;;;;; 23B4;TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;; 23B5;BOTTOM SQUARE BRACKET;So;0;ON;;;;;N;;;;; 23B6;BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;; 23B7;RADICAL SYMBOL BOTTOM;So;0;ON;;;;;N;;;;; 23B8;LEFT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;; 23B9;RIGHT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;; 23BA;HORIZONTAL SCAN LINE-1;So;0;ON;;;;;N;;;;; 23BB;HORIZONTAL SCAN LINE-3;So;0;ON;;;;;N;;;;; 23BC;HORIZONTAL SCAN LINE-7;So;0;ON;;;;;N;;;;; 23BD;HORIZONTAL SCAN LINE-9;So;0;ON;;;;;N;;;;; 23BE;DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT;So;0;ON;;;;;N;;;;; 23BF;DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT;So;0;ON;;;;;N;;;;; 23C0;DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE;So;0;ON;;;;;N;;;;; 23C1;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE;So;0;ON;;;;;N;;;;; 23C2;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE;So;0;ON;;;;;N;;;;; 23C3;DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE;So;0;ON;;;;;N;;;;; 23C4;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE;So;0;ON;;;;;N;;;;; 23C5;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE;So;0;ON;;;;;N;;;;; 23C6;DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE;So;0;ON;;;;;N;;;;; 23C7;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE;So;0;ON;;;;;N;;;;; 23C8;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE;So;0;ON;;;;;N;;;;; 23C9;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;;;;; 23CA;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;;;;; 23CB;DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT;So;0;ON;;;;;N;;;;; 23CC;DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT;So;0;ON;;;;;N;;;;; 23CD;SQUARE FOOT;So;0;ON;;;;;N;;;;; 23CE;RETURN SYMBOL;So;0;ON;;;;;N;;;;; 23CF;EJECT SYMBOL;So;0;ON;;;;;N;;;;; 23D0;VERTICAL LINE EXTENSION;So;0;ON;;;;;N;;;;; 23D1;METRICAL BREVE;So;0;ON;;;;;N;;;;; 23D2;METRICAL LONG OVER SHORT;So;0;ON;;;;;N;;;;; 23D3;METRICAL SHORT OVER LONG;So;0;ON;;;;;N;;;;; 23D4;METRICAL LONG OVER TWO SHORTS;So;0;ON;;;;;N;;;;; 23D5;METRICAL TWO SHORTS OVER LONG;So;0;ON;;;;;N;;;;; 23D6;METRICAL TWO SHORTS JOINED;So;0;ON;;;;;N;;;;; 23D7;METRICAL TRISEME;So;0;ON;;;;;N;;;;; 23D8;METRICAL TETRASEME;So;0;ON;;;;;N;;;;; 23D9;METRICAL PENTASEME;So;0;ON;;;;;N;;;;; 23DA;EARTH GROUND;So;0;ON;;;;;N;;;;; 23DB;FUSE;So;0;ON;;;;;N;;;;; 23DC;TOP PARENTHESIS;Sm;0;ON;;;;;N;;;;; 23DD;BOTTOM PARENTHESIS;Sm;0;ON;;;;;N;;;;; 23DE;TOP CURLY BRACKET;Sm;0;ON;;;;;N;;;;; 23DF;BOTTOM CURLY BRACKET;Sm;0;ON;;;;;N;;;;; 23E0;TOP TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;;;; 23E1;BOTTOM TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;;;; 23E2;WHITE TRAPEZIUM;So;0;ON;;;;;N;;;;; 23E3;BENZENE RING WITH CIRCLE;So;0;ON;;;;;N;;;;; 23E4;STRAIGHTNESS;So;0;ON;;;;;N;;;;; 23E5;FLATNESS;So;0;ON;;;;;N;;;;; 23E6;AC CURRENT;So;0;ON;;;;;N;;;;; 23E7;ELECTRICAL INTERSECTION;So;0;ON;;;;;N;;;;; 23E8;DECIMAL EXPONENT SYMBOL;So;0;ON;;;;;N;;;;; 23E9;BLACK RIGHT-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;; 23EA;BLACK LEFT-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;; 23EB;BLACK UP-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;; 23EC;BLACK DOWN-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;; 23ED;BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR;So;0;ON;;;;;N;;;;; 23EE;BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR;So;0;ON;;;;;N;;;;; 23EF;BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR;So;0;ON;;;;;N;;;;; 23F0;ALARM CLOCK;So;0;ON;;;;;N;;;;; 23F1;STOPWATCH;So;0;ON;;;;;N;;;;; 23F2;TIMER CLOCK;So;0;ON;;;;;N;;;;; 23F3;HOURGLASS WITH FLOWING SAND;So;0;ON;;;;;N;;;;; 23F4;BLACK MEDIUM LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;;;;; 23F5;BLACK MEDIUM RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;;;;; 23F6;BLACK MEDIUM UP-POINTING TRIANGLE;So;0;ON;;;;;N;;;;; 23F7;BLACK MEDIUM DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;;;;; 23F8;DOUBLE VERTICAL BAR;So;0;ON;;;;;N;;;;; 23F9;BLACK SQUARE FOR STOP;So;0;ON;;;;;N;;;;; 23FA;BLACK CIRCLE FOR RECORD;So;0;ON;;;;;N;;;;; 23FB;POWER SYMBOL;So;0;ON;;;;;N;;;;; 23FC;POWER ON-OFF SYMBOL;So;0;ON;;;;;N;;;;; 23FD;POWER ON SYMBOL;So;0;ON;;;;;N;;;;; 23FE;POWER SLEEP SYMBOL;So;0;ON;;;;;N;;;;; 23FF;OBSERVER EYE SYMBOL;So;0;ON;;;;;N;;;;; 2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;; 2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;; 2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;; 2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;; 2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;; 2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;; 2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;; 2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;; 2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;; 2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;; 240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;; 240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;; 240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;; 240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;; 240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;; 240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;; 2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;; 2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;; 2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;; 2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;; 2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;; 2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;; 2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;; 2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;; 2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;; 2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;; 241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;; 241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;; 241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;; 241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;; 241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;; 241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;; 2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;; 2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;; 2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;; 2423;OPEN BOX;So;0;ON;;;;;N;;;;; 2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;; 2425;SYMBOL FOR DELETE FORM TWO;So;0;ON;;;;;N;;;;; 2426;SYMBOL FOR SUBSTITUTE FORM TWO;So;0;ON;;;;;N;;;;; 2440;OCR HOOK;So;0;ON;;;;;N;;;;; 2441;OCR CHAIR;So;0;ON;;;;;N;;;;; 2442;OCR FORK;So;0;ON;;;;;N;;;;; 2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;; 2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;; 2445;OCR BOW TIE;So;0;ON;;;;;N;;;;; 2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;; 2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;; 2448;OCR DASH;So;0;ON;;;;;N;;;;; 2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;; 244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;; 2460;CIRCLED DIGIT ONE;No;0;ON; 0031;;1;1;N;;;;; 2461;CIRCLED DIGIT TWO;No;0;ON; 0032;;2;2;N;;;;; 2462;CIRCLED DIGIT THREE;No;0;ON; 0033;;3;3;N;;;;; 2463;CIRCLED DIGIT FOUR;No;0;ON; 0034;;4;4;N;;;;; 2464;CIRCLED DIGIT FIVE;No;0;ON; 0035;;5;5;N;;;;; 2465;CIRCLED DIGIT SIX;No;0;ON; 0036;;6;6;N;;;;; 2466;CIRCLED DIGIT SEVEN;No;0;ON; 0037;;7;7;N;;;;; 2467;CIRCLED DIGIT EIGHT;No;0;ON; 0038;;8;8;N;;;;; 2468;CIRCLED DIGIT NINE;No;0;ON; 0039;;9;9;N;;;;; 2469;CIRCLED NUMBER TEN;No;0;ON; 0031 0030;;;10;N;;;;; 246A;CIRCLED NUMBER ELEVEN;No;0;ON; 0031 0031;;;11;N;;;;; 246B;CIRCLED NUMBER TWELVE;No;0;ON; 0031 0032;;;12;N;;;;; 246C;CIRCLED NUMBER THIRTEEN;No;0;ON; 0031 0033;;;13;N;;;;; 246D;CIRCLED NUMBER FOURTEEN;No;0;ON; 0031 0034;;;14;N;;;;; 246E;CIRCLED NUMBER FIFTEEN;No;0;ON; 0031 0035;;;15;N;;;;; 246F;CIRCLED NUMBER SIXTEEN;No;0;ON; 0031 0036;;;16;N;;;;; 2470;CIRCLED NUMBER SEVENTEEN;No;0;ON; 0031 0037;;;17;N;;;;; 2471;CIRCLED NUMBER EIGHTEEN;No;0;ON; 0031 0038;;;18;N;;;;; 2472;CIRCLED NUMBER NINETEEN;No;0;ON; 0031 0039;;;19;N;;;;; 2473;CIRCLED NUMBER TWENTY;No;0;ON; 0032 0030;;;20;N;;;;; 2474;PARENTHESIZED DIGIT ONE;No;0;ON; 0028 0031 0029;;1;1;N;;;;; 2475;PARENTHESIZED DIGIT TWO;No;0;ON; 0028 0032 0029;;2;2;N;;;;; 2476;PARENTHESIZED DIGIT THREE;No;0;ON; 0028 0033 0029;;3;3;N;;;;; 2477;PARENTHESIZED DIGIT FOUR;No;0;ON; 0028 0034 0029;;4;4;N;;;;; 2478;PARENTHESIZED DIGIT FIVE;No;0;ON; 0028 0035 0029;;5;5;N;;;;; 2479;PARENTHESIZED DIGIT SIX;No;0;ON; 0028 0036 0029;;6;6;N;;;;; 247A;PARENTHESIZED DIGIT SEVEN;No;0;ON; 0028 0037 0029;;7;7;N;;;;; 247B;PARENTHESIZED DIGIT EIGHT;No;0;ON; 0028 0038 0029;;8;8;N;;;;; 247C;PARENTHESIZED DIGIT NINE;No;0;ON; 0028 0039 0029;;9;9;N;;;;; 247D;PARENTHESIZED NUMBER TEN;No;0;ON; 0028 0031 0030 0029;;;10;N;;;;; 247E;PARENTHESIZED NUMBER ELEVEN;No;0;ON; 0028 0031 0031 0029;;;11;N;;;;; 247F;PARENTHESIZED NUMBER TWELVE;No;0;ON; 0028 0031 0032 0029;;;12;N;;;;; 2480;PARENTHESIZED NUMBER THIRTEEN;No;0;ON; 0028 0031 0033 0029;;;13;N;;;;; 2481;PARENTHESIZED NUMBER FOURTEEN;No;0;ON; 0028 0031 0034 0029;;;14;N;;;;; 2482;PARENTHESIZED NUMBER FIFTEEN;No;0;ON; 0028 0031 0035 0029;;;15;N;;;;; 2483;PARENTHESIZED NUMBER SIXTEEN;No;0;ON; 0028 0031 0036 0029;;;16;N;;;;; 2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;ON; 0028 0031 0037 0029;;;17;N;;;;; 2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;ON; 0028 0031 0038 0029;;;18;N;;;;; 2486;PARENTHESIZED NUMBER NINETEEN;No;0;ON; 0028 0031 0039 0029;;;19;N;;;;; 2487;PARENTHESIZED NUMBER TWENTY;No;0;ON; 0028 0032 0030 0029;;;20;N;;;;; 2488;DIGIT ONE FULL STOP;No;0;EN; 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;; 2489;DIGIT TWO FULL STOP;No;0;EN; 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;; 248A;DIGIT THREE FULL STOP;No;0;EN; 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;; 248B;DIGIT FOUR FULL STOP;No;0;EN; 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;; 248C;DIGIT FIVE FULL STOP;No;0;EN; 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;; 248D;DIGIT SIX FULL STOP;No;0;EN; 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;; 248E;DIGIT SEVEN FULL STOP;No;0;EN; 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;; 248F;DIGIT EIGHT FULL STOP;No;0;EN; 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;; 2490;DIGIT NINE FULL STOP;No;0;EN; 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;; 2491;NUMBER TEN FULL STOP;No;0;EN; 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;; 2492;NUMBER ELEVEN FULL STOP;No;0;EN; 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;; 2493;NUMBER TWELVE FULL STOP;No;0;EN; 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;; 2494;NUMBER THIRTEEN FULL STOP;No;0;EN; 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;; 2495;NUMBER FOURTEEN FULL STOP;No;0;EN; 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;; 2496;NUMBER FIFTEEN FULL STOP;No;0;EN; 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;; 2497;NUMBER SIXTEEN FULL STOP;No;0;EN; 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;; 2498;NUMBER SEVENTEEN FULL STOP;No;0;EN; 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;; 2499;NUMBER EIGHTEEN FULL STOP;No;0;EN; 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;; 249A;NUMBER NINETEEN FULL STOP;No;0;EN; 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;; 249B;NUMBER TWENTY FULL STOP;No;0;EN; 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;; 249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;L; 0028 0061 0029;;;;N;;;;; 249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;L; 0028 0062 0029;;;;N;;;;; 249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;L; 0028 0063 0029;;;;N;;;;; 249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;L; 0028 0064 0029;;;;N;;;;; 24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;L; 0028 0065 0029;;;;N;;;;; 24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;L; 0028 0066 0029;;;;N;;;;; 24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;L; 0028 0067 0029;;;;N;;;;; 24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;L; 0028 0068 0029;;;;N;;;;; 24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;L; 0028 0069 0029;;;;N;;;;; 24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;L; 0028 006A 0029;;;;N;;;;; 24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;L; 0028 006B 0029;;;;N;;;;; 24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;L; 0028 006C 0029;;;;N;;;;; 24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;L; 0028 006D 0029;;;;N;;;;; 24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;L; 0028 006E 0029;;;;N;;;;; 24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;L; 0028 006F 0029;;;;N;;;;; 24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;L; 0028 0070 0029;;;;N;;;;; 24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;L; 0028 0071 0029;;;;N;;;;; 24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;L; 0028 0072 0029;;;;N;;;;; 24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;L; 0028 0073 0029;;;;N;;;;; 24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;L; 0028 0074 0029;;;;N;;;;; 24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;L; 0028 0075 0029;;;;N;;;;; 24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;L; 0028 0076 0029;;;;N;;;;; 24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;L; 0028 0077 0029;;;;N;;;;; 24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;L; 0028 0078 0029;;;;N;;;;; 24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;L; 0028 0079 0029;;;;N;;;;; 24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;L; 0028 007A 0029;;;;N;;;;; 24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;L; 0041;;;;N;;;;24D0; 24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;L; 0042;;;;N;;;;24D1; 24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;L; 0043;;;;N;;;;24D2; 24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;L; 0044;;;;N;;;;24D3; 24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;L; 0045;;;;N;;;;24D4; 24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;L; 0046;;;;N;;;;24D5; 24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;L; 0047;;;;N;;;;24D6; 24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;L; 0048;;;;N;;;;24D7; 24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;L; 0049;;;;N;;;;24D8; 24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;L; 004A;;;;N;;;;24D9; 24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;L; 004B;;;;N;;;;24DA; 24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;L; 004C;;;;N;;;;24DB; 24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;L; 004D;;;;N;;;;24DC; 24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;L; 004E;;;;N;;;;24DD; 24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;L; 004F;;;;N;;;;24DE; 24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;L; 0050;;;;N;;;;24DF; 24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;L; 0051;;;;N;;;;24E0; 24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;L; 0052;;;;N;;;;24E1; 24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;L; 0053;;;;N;;;;24E2; 24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;L; 0054;;;;N;;;;24E3; 24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;L; 0055;;;;N;;;;24E4; 24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;L; 0056;;;;N;;;;24E5; 24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;L; 0057;;;;N;;;;24E6; 24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;L; 0058;;;;N;;;;24E7; 24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;L; 0059;;;;N;;;;24E8; 24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;L; 005A;;;;N;;;;24E9; 24D0;CIRCLED LATIN SMALL LETTER A;So;0;L; 0061;;;;N;;;24B6;;24B6 24D1;CIRCLED LATIN SMALL LETTER B;So;0;L; 0062;;;;N;;;24B7;;24B7 24D2;CIRCLED LATIN SMALL LETTER C;So;0;L; 0063;;;;N;;;24B8;;24B8 24D3;CIRCLED LATIN SMALL LETTER D;So;0;L; 0064;;;;N;;;24B9;;24B9 24D4;CIRCLED LATIN SMALL LETTER E;So;0;L; 0065;;;;N;;;24BA;;24BA 24D5;CIRCLED LATIN SMALL LETTER F;So;0;L; 0066;;;;N;;;24BB;;24BB 24D6;CIRCLED LATIN SMALL LETTER G;So;0;L; 0067;;;;N;;;24BC;;24BC 24D7;CIRCLED LATIN SMALL LETTER H;So;0;L; 0068;;;;N;;;24BD;;24BD 24D8;CIRCLED LATIN SMALL LETTER I;So;0;L; 0069;;;;N;;;24BE;;24BE 24D9;CIRCLED LATIN SMALL LETTER J;So;0;L; 006A;;;;N;;;24BF;;24BF 24DA;CIRCLED LATIN SMALL LETTER K;So;0;L; 006B;;;;N;;;24C0;;24C0 24DB;CIRCLED LATIN SMALL LETTER L;So;0;L; 006C;;;;N;;;24C1;;24C1 24DC;CIRCLED LATIN SMALL LETTER M;So;0;L; 006D;;;;N;;;24C2;;24C2 24DD;CIRCLED LATIN SMALL LETTER N;So;0;L; 006E;;;;N;;;24C3;;24C3 24DE;CIRCLED LATIN SMALL LETTER O;So;0;L; 006F;;;;N;;;24C4;;24C4 24DF;CIRCLED LATIN SMALL LETTER P;So;0;L; 0070;;;;N;;;24C5;;24C5 24E0;CIRCLED LATIN SMALL LETTER Q;So;0;L; 0071;;;;N;;;24C6;;24C6 24E1;CIRCLED LATIN SMALL LETTER R;So;0;L; 0072;;;;N;;;24C7;;24C7 24E2;CIRCLED LATIN SMALL LETTER S;So;0;L; 0073;;;;N;;;24C8;;24C8 24E3;CIRCLED LATIN SMALL LETTER T;So;0;L; 0074;;;;N;;;24C9;;24C9 24E4;CIRCLED LATIN SMALL LETTER U;So;0;L; 0075;;;;N;;;24CA;;24CA 24E5;CIRCLED LATIN SMALL LETTER V;So;0;L; 0076;;;;N;;;24CB;;24CB 24E6;CIRCLED LATIN SMALL LETTER W;So;0;L; 0077;;;;N;;;24CC;;24CC 24E7;CIRCLED LATIN SMALL LETTER X;So;0;L; 0078;;;;N;;;24CD;;24CD 24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L; 0079;;;;N;;;24CE;;24CE 24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L; 007A;;;;N;;;24CF;;24CF 24EA;CIRCLED DIGIT ZERO;No;0;ON; 0030;;0;0;N;;;;; 24EB;NEGATIVE CIRCLED NUMBER ELEVEN;No;0;ON;;;;11;N;;;;; 24EC;NEGATIVE CIRCLED NUMBER TWELVE;No;0;ON;;;;12;N;;;;; 24ED;NEGATIVE CIRCLED NUMBER THIRTEEN;No;0;ON;;;;13;N;;;;; 24EE;NEGATIVE CIRCLED NUMBER FOURTEEN;No;0;ON;;;;14;N;;;;; 24EF;NEGATIVE CIRCLED NUMBER FIFTEEN;No;0;ON;;;;15;N;;;;; 24F0;NEGATIVE CIRCLED NUMBER SIXTEEN;No;0;ON;;;;16;N;;;;; 24F1;NEGATIVE CIRCLED NUMBER SEVENTEEN;No;0;ON;;;;17;N;;;;; 24F2;NEGATIVE CIRCLED NUMBER EIGHTEEN;No;0;ON;;;;18;N;;;;; 24F3;NEGATIVE CIRCLED NUMBER NINETEEN;No;0;ON;;;;19;N;;;;; 24F4;NEGATIVE CIRCLED NUMBER TWENTY;No;0;ON;;;;20;N;;;;; 24F5;DOUBLE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;;;;; 24F6;DOUBLE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;;;;; 24F7;DOUBLE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;;;;; 24F8;DOUBLE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;;;;; 24F9;DOUBLE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;;;;; 24FA;DOUBLE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;;;;; 24FB;DOUBLE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;;;;; 24FC;DOUBLE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;;;;; 24FD;DOUBLE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;;;;; 24FE;DOUBLE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;;;;; 24FF;NEGATIVE CIRCLED DIGIT ZERO;No;0;ON;;;0;0;N;;;;; 2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;; 2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;; 2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;; 2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;; 2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;; 2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;; 2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;; 2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;; 2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;; 2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;; 250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;; 250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;; 250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;; 250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;; 250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;; 250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;; 2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;; 2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;; 2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;; 2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;; 2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;; 2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;; 2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;; 2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;; 2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;; 2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;; 251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;; 251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;; 251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;; 251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;; 251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;; 251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;; 2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;; 2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;; 2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;; 2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;; 2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;; 2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;; 2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;; 2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;; 2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;; 2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;; 252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;; 252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;; 252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;; 252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;; 252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;; 252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;; 2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;; 2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;; 2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;; 2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;; 2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;; 2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;; 2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;; 2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;; 2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;; 2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;; 253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;; 253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;; 253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;; 253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;; 253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;; 253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;; 2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;; 2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;; 2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;; 2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;; 2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;; 2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;; 2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;; 2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;; 2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;; 2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;; 254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;; 254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;; 254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;; 254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;; 254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;; 254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;; 2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;; 2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;; 2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;; 2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;; 2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;; 2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;; 2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;; 2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;; 2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;; 2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;; 255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;; 255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;; 255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;; 255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;; 255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;; 255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;; 2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;; 2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;; 2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;; 2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;; 2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;; 2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;; 2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;; 2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;; 2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;; 2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;; 256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;; 256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;; 256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;; 256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;; 256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;; 256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;; 2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;; 2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;; 2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;; 2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;; 2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;; 2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;; 2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;; 2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;; 2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;; 2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;; 257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;; 257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;; 257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;; 257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;; 257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;; 257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;; 2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;; 2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; 2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;; 2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;; 2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 2588;FULL BLOCK;So;0;ON;;;;;N;;;;; 2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;; 258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;; 258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; 258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;; 2591;LIGHT SHADE;So;0;ON;;;;;N;;;;; 2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;; 2593;DARK SHADE;So;0;ON;;;;;N;;;;; 2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 2596;QUADRANT LOWER LEFT;So;0;ON;;;;;N;;;;; 2597;QUADRANT LOWER RIGHT;So;0;ON;;;;;N;;;;; 2598;QUADRANT UPPER LEFT;So;0;ON;;;;;N;;;;; 2599;QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;; 259A;QUADRANT UPPER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;; 259B;QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT;So;0;ON;;;;;N;;;;; 259C;QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT;So;0;ON;;;;;N;;;;; 259D;QUADRANT UPPER RIGHT;So;0;ON;;;;;N;;;;; 259E;QUADRANT UPPER RIGHT AND LOWER LEFT;So;0;ON;;;;;N;;;;; 259F;QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;; 25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;; 25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;; 25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;; 25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;; 25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;; 25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;; 25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;; 25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;; 25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;; 25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;; 25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;; 25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;; 25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;; 25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;; 25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;; 25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;; 25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;; 25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;; 25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;; 25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;; 25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;; 25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;; 25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;; 25B7;WHITE RIGHT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;; 25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;; 25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;; 25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;; 25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;; 25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;; 25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;; 25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;; 25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;; 25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;; 25C1;WHITE LEFT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;; 25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;; 25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;; 25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;; 25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;; 25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;; 25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;; 25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;; 25C9;FISHEYE;So;0;ON;;;;;N;;;;; 25CA;LOZENGE;So;0;ON;;;;;N;;;;; 25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;; 25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;; 25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;; 25CE;BULLSEYE;So;0;ON;;;;;N;;;;; 25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;; 25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; 25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; 25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;; 25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;; 25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;; 25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;; 25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; 25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; 25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;; 25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; 25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; 25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; 25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; 25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; 25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; 25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; 25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;; 25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;; 25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;; 25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;; 25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 25E6;WHITE BULLET;So;0;ON;;;;;N;;;;; 25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; 25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; 25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; 25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; 25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;; 25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;; 25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;; 25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;; 25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;; 25F0;WHITE SQUARE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;; 25F1;WHITE SQUARE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;; 25F2;WHITE SQUARE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; 25F3;WHITE SQUARE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; 25F4;WHITE CIRCLE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;; 25F5;WHITE CIRCLE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;; 25F6;WHITE CIRCLE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; 25F7;WHITE CIRCLE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; 25F8;UPPER LEFT TRIANGLE;Sm;0;ON;;;;;N;;;;; 25F9;UPPER RIGHT TRIANGLE;Sm;0;ON;;;;;N;;;;; 25FA;LOWER LEFT TRIANGLE;Sm;0;ON;;;;;N;;;;; 25FB;WHITE MEDIUM SQUARE;Sm;0;ON;;;;;N;;;;; 25FC;BLACK MEDIUM SQUARE;Sm;0;ON;;;;;N;;;;; 25FD;WHITE MEDIUM SMALL SQUARE;Sm;0;ON;;;;;N;;;;; 25FE;BLACK MEDIUM SMALL SQUARE;Sm;0;ON;;;;;N;;;;; 25FF;LOWER RIGHT TRIANGLE;Sm;0;ON;;;;;N;;;;; 2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;; 2601;CLOUD;So;0;ON;;;;;N;;;;; 2602;UMBRELLA;So;0;ON;;;;;N;;;;; 2603;SNOWMAN;So;0;ON;;;;;N;;;;; 2604;COMET;So;0;ON;;;;;N;;;;; 2605;BLACK STAR;So;0;ON;;;;;N;;;;; 2606;WHITE STAR;So;0;ON;;;;;N;;;;; 2607;LIGHTNING;So;0;ON;;;;;N;;;;; 2608;THUNDERSTORM;So;0;ON;;;;;N;;;;; 2609;SUN;So;0;ON;;;;;N;;;;; 260A;ASCENDING NODE;So;0;ON;;;;;N;;;;; 260B;DESCENDING NODE;So;0;ON;;;;;N;;;;; 260C;CONJUNCTION;So;0;ON;;;;;N;;;;; 260D;OPPOSITION;So;0;ON;;;;;N;;;;; 260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;; 260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;; 2610;BALLOT BOX;So;0;ON;;;;;N;;;;; 2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;; 2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;; 2613;SALTIRE;So;0;ON;;;;;N;;;;; 2614;UMBRELLA WITH RAIN DROPS;So;0;ON;;;;;N;;;;; 2615;HOT BEVERAGE;So;0;ON;;;;;N;;;;; 2616;WHITE SHOGI PIECE;So;0;ON;;;;;N;;;;; 2617;BLACK SHOGI PIECE;So;0;ON;;;;;N;;;;; 2618;SHAMROCK;So;0;ON;;;;;N;;;;; 2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;; 261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;; 261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; 261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;; 261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;; 261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; 261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;; 2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;; 2621;CAUTION SIGN;So;0;ON;;;;;N;;;;; 2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;; 2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;; 2624;CADUCEUS;So;0;ON;;;;;N;;;;; 2625;ANKH;So;0;ON;;;;;N;;;;; 2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;; 2627;CHI RHO;So;0;ON;;;;;N;;;;; 2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;; 2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;; 262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;; 262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;; 262C;ADI SHAKTI;So;0;ON;;;;;N;;;;; 262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;; 262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;; 262F;YIN YANG;So;0;ON;;;;;N;;;;; 2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;; 2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;; 2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;; 2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;; 2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;; 2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;; 2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;; 2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;; 2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;; 2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;; 263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;; 263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;; 263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;; 263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;; 263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;; 263F;MERCURY;So;0;ON;;;;;N;;;;; 2640;FEMALE SIGN;So;0;ON;;;;;N;;;;; 2641;EARTH;So;0;ON;;;;;N;;;;; 2642;MALE SIGN;So;0;ON;;;;;N;;;;; 2643;JUPITER;So;0;ON;;;;;N;;;;; 2644;SATURN;So;0;ON;;;;;N;;;;; 2645;URANUS;So;0;ON;;;;;N;;;;; 2646;NEPTUNE;So;0;ON;;;;;N;;;;; 2647;PLUTO;So;0;ON;;;;;N;;;;; 2648;ARIES;So;0;ON;;;;;N;;;;; 2649;TAURUS;So;0;ON;;;;;N;;;;; 264A;GEMINI;So;0;ON;;;;;N;;;;; 264B;CANCER;So;0;ON;;;;;N;;;;; 264C;LEO;So;0;ON;;;;;N;;;;; 264D;VIRGO;So;0;ON;;;;;N;;;;; 264E;LIBRA;So;0;ON;;;;;N;;;;; 264F;SCORPIUS;So;0;ON;;;;;N;;;;; 2650;SAGITTARIUS;So;0;ON;;;;;N;;;;; 2651;CAPRICORN;So;0;ON;;;;;N;;;;; 2652;AQUARIUS;So;0;ON;;;;;N;;;;; 2653;PISCES;So;0;ON;;;;;N;;;;; 2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;; 2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;; 2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;; 2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;; 2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;; 2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;; 265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;; 265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;; 265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;; 265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;; 265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;; 265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;; 2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;; 2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;; 2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;; 2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;; 2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;; 2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;; 2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;; 2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;; 2668;HOT SPRINGS;So;0;ON;;;;;N;;;;; 2669;QUARTER NOTE;So;0;ON;;;;;N;;;;; 266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;; 266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;; 266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;; 266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;; 266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;; 266F;MUSIC SHARP SIGN;Sm;0;ON;;;;;N;SHARP;;;; 2670;WEST SYRIAC CROSS;So;0;ON;;;;;N;;;;; 2671;EAST SYRIAC CROSS;So;0;ON;;;;;N;;;;; 2672;UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;; 2673;RECYCLING SYMBOL FOR TYPE-1 PLASTICS;So;0;ON;;;;;N;;;;; 2674;RECYCLING SYMBOL FOR TYPE-2 PLASTICS;So;0;ON;;;;;N;;;;; 2675;RECYCLING SYMBOL FOR TYPE-3 PLASTICS;So;0;ON;;;;;N;;;;; 2676;RECYCLING SYMBOL FOR TYPE-4 PLASTICS;So;0;ON;;;;;N;;;;; 2677;RECYCLING SYMBOL FOR TYPE-5 PLASTICS;So;0;ON;;;;;N;;;;; 2678;RECYCLING SYMBOL FOR TYPE-6 PLASTICS;So;0;ON;;;;;N;;;;; 2679;RECYCLING SYMBOL FOR TYPE-7 PLASTICS;So;0;ON;;;;;N;;;;; 267A;RECYCLING SYMBOL FOR GENERIC MATERIALS;So;0;ON;;;;;N;;;;; 267B;BLACK UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;; 267C;RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;; 267D;PARTIALLY-RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;; 267E;PERMANENT PAPER SIGN;So;0;ON;;;;;N;;;;; 267F;WHEELCHAIR SYMBOL;So;0;ON;;;;;N;;;;; 2680;DIE FACE-1;So;0;ON;;;;;N;;;;; 2681;DIE FACE-2;So;0;ON;;;;;N;;;;; 2682;DIE FACE-3;So;0;ON;;;;;N;;;;; 2683;DIE FACE-4;So;0;ON;;;;;N;;;;; 2684;DIE FACE-5;So;0;ON;;;;;N;;;;; 2685;DIE FACE-6;So;0;ON;;;;;N;;;;; 2686;WHITE CIRCLE WITH DOT RIGHT;So;0;ON;;;;;N;;;;; 2687;WHITE CIRCLE WITH TWO DOTS;So;0;ON;;;;;N;;;;; 2688;BLACK CIRCLE WITH WHITE DOT RIGHT;So;0;ON;;;;;N;;;;; 2689;BLACK CIRCLE WITH TWO WHITE DOTS;So;0;ON;;;;;N;;;;; 268A;MONOGRAM FOR YANG;So;0;ON;;;;;N;;;;; 268B;MONOGRAM FOR YIN;So;0;ON;;;;;N;;;;; 268C;DIGRAM FOR GREATER YANG;So;0;ON;;;;;N;;;;; 268D;DIGRAM FOR LESSER YIN;So;0;ON;;;;;N;;;;; 268E;DIGRAM FOR LESSER YANG;So;0;ON;;;;;N;;;;; 268F;DIGRAM FOR GREATER YIN;So;0;ON;;;;;N;;;;; 2690;WHITE FLAG;So;0;ON;;;;;N;;;;; 2691;BLACK FLAG;So;0;ON;;;;;N;;;;; 2692;HAMMER AND PICK;So;0;ON;;;;;N;;;;; 2693;ANCHOR;So;0;ON;;;;;N;;;;; 2694;CROSSED SWORDS;So;0;ON;;;;;N;;;;; 2695;STAFF OF AESCULAPIUS;So;0;ON;;;;;N;;;;; 2696;SCALES;So;0;ON;;;;;N;;;;; 2697;ALEMBIC;So;0;ON;;;;;N;;;;; 2698;FLOWER;So;0;ON;;;;;N;;;;; 2699;GEAR;So;0;ON;;;;;N;;;;; 269A;STAFF OF HERMES;So;0;ON;;;;;N;;;;; 269B;ATOM SYMBOL;So;0;ON;;;;;N;;;;; 269C;FLEUR-DE-LIS;So;0;ON;;;;;N;;;;; 269D;OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;; 269E;THREE LINES CONVERGING RIGHT;So;0;ON;;;;;N;;;;; 269F;THREE LINES CONVERGING LEFT;So;0;ON;;;;;N;;;;; 26A0;WARNING SIGN;So;0;ON;;;;;N;;;;; 26A1;HIGH VOLTAGE SIGN;So;0;ON;;;;;N;;;;; 26A2;DOUBLED FEMALE SIGN;So;0;ON;;;;;N;;;;; 26A3;DOUBLED MALE SIGN;So;0;ON;;;;;N;;;;; 26A4;INTERLOCKED FEMALE AND MALE SIGN;So;0;ON;;;;;N;;;;; 26A5;MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;; 26A6;MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;; 26A7;MALE WITH STROKE AND MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;; 26A8;VERTICAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;; 26A9;HORIZONTAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;; 26AA;MEDIUM WHITE CIRCLE;So;0;ON;;;;;N;;;;; 26AB;MEDIUM BLACK CIRCLE;So;0;ON;;;;;N;;;;; 26AC;MEDIUM SMALL WHITE CIRCLE;So;0;L;;;;;N;;;;; 26AD;MARRIAGE SYMBOL;So;0;ON;;;;;N;;;;; 26AE;DIVORCE SYMBOL;So;0;ON;;;;;N;;;;; 26AF;UNMARRIED PARTNERSHIP SYMBOL;So;0;ON;;;;;N;;;;; 26B0;COFFIN;So;0;ON;;;;;N;;;;; 26B1;FUNERAL URN;So;0;ON;;;;;N;;;;; 26B2;NEUTER;So;0;ON;;;;;N;;;;; 26B3;CERES;So;0;ON;;;;;N;;;;; 26B4;PALLAS;So;0;ON;;;;;N;;;;; 26B5;JUNO;So;0;ON;;;;;N;;;;; 26B6;VESTA;So;0;ON;;;;;N;;;;; 26B7;CHIRON;So;0;ON;;;;;N;;;;; 26B8;BLACK MOON LILITH;So;0;ON;;;;;N;;;;; 26B9;SEXTILE;So;0;ON;;;;;N;;;;; 26BA;SEMISEXTILE;So;0;ON;;;;;N;;;;; 26BB;QUINCUNX;So;0;ON;;;;;N;;;;; 26BC;SESQUIQUADRATE;So;0;ON;;;;;N;;;;; 26BD;SOCCER BALL;So;0;ON;;;;;N;;;;; 26BE;BASEBALL;So;0;ON;;;;;N;;;;; 26BF;SQUARED KEY;So;0;ON;;;;;N;;;;; 26C0;WHITE DRAUGHTS MAN;So;0;ON;;;;;N;;;;; 26C1;WHITE DRAUGHTS KING;So;0;ON;;;;;N;;;;; 26C2;BLACK DRAUGHTS MAN;So;0;ON;;;;;N;;;;; 26C3;BLACK DRAUGHTS KING;So;0;ON;;;;;N;;;;; 26C4;SNOWMAN WITHOUT SNOW;So;0;ON;;;;;N;;;;; 26C5;SUN BEHIND CLOUD;So;0;ON;;;;;N;;;;; 26C6;RAIN;So;0;ON;;;;;N;;;;; 26C7;BLACK SNOWMAN;So;0;ON;;;;;N;;;;; 26C8;THUNDER CLOUD AND RAIN;So;0;ON;;;;;N;;;;; 26C9;TURNED WHITE SHOGI PIECE;So;0;ON;;;;;N;;;;; 26CA;TURNED BLACK SHOGI PIECE;So;0;ON;;;;;N;;;;; 26CB;WHITE DIAMOND IN SQUARE;So;0;ON;;;;;N;;;;; 26CC;CROSSING LANES;So;0;ON;;;;;N;;;;; 26CD;DISABLED CAR;So;0;ON;;;;;N;;;;; 26CE;OPHIUCHUS;So;0;ON;;;;;N;;;;; 26CF;PICK;So;0;ON;;;;;N;;;;; 26D0;CAR SLIDING;So;0;ON;;;;;N;;;;; 26D1;HELMET WITH WHITE CROSS;So;0;ON;;;;;N;;;;; 26D2;CIRCLED CROSSING LANES;So;0;ON;;;;;N;;;;; 26D3;CHAINS;So;0;ON;;;;;N;;;;; 26D4;NO ENTRY;So;0;ON;;;;;N;;;;; 26D5;ALTERNATE ONE-WAY LEFT WAY TRAFFIC;So;0;ON;;;;;N;;;;; 26D6;BLACK TWO-WAY LEFT WAY TRAFFIC;So;0;ON;;;;;N;;;;; 26D7;WHITE TWO-WAY LEFT WAY TRAFFIC;So;0;ON;;;;;N;;;;; 26D8;BLACK LEFT LANE MERGE;So;0;ON;;;;;N;;;;; 26D9;WHITE LEFT LANE MERGE;So;0;ON;;;;;N;;;;; 26DA;DRIVE SLOW SIGN;So;0;ON;;;;;N;;;;; 26DB;HEAVY WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;;;;; 26DC;LEFT CLOSED ENTRY;So;0;ON;;;;;N;;;;; 26DD;SQUARED SALTIRE;So;0;ON;;;;;N;;;;; 26DE;FALLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUARE;So;0;ON;;;;;N;;;;; 26DF;BLACK TRUCK;So;0;ON;;;;;N;;;;; 26E0;RESTRICTED LEFT ENTRY-1;So;0;ON;;;;;N;;;;; 26E1;RESTRICTED LEFT ENTRY-2;So;0;ON;;;;;N;;;;; 26E2;ASTRONOMICAL SYMBOL FOR URANUS;So;0;ON;;;;;N;;;;; 26E3;HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE;So;0;ON;;;;;N;;;;; 26E4;PENTAGRAM;So;0;ON;;;;;N;;;;; 26E5;RIGHT-HANDED INTERLACED PENTAGRAM;So;0;ON;;;;;N;;;;; 26E6;LEFT-HANDED INTERLACED PENTAGRAM;So;0;ON;;;;;N;;;;; 26E7;INVERTED PENTAGRAM;So;0;ON;;;;;N;;;;; 26E8;BLACK CROSS ON SHIELD;So;0;ON;;;;;N;;;;; 26E9;SHINTO SHRINE;So;0;ON;;;;;N;;;;; 26EA;CHURCH;So;0;ON;;;;;N;;;;; 26EB;CASTLE;So;0;ON;;;;;N;;;;; 26EC;HISTORIC SITE;So;0;ON;;;;;N;;;;; 26ED;GEAR WITHOUT HUB;So;0;ON;;;;;N;;;;; 26EE;GEAR WITH HANDLES;So;0;ON;;;;;N;;;;; 26EF;MAP SYMBOL FOR LIGHTHOUSE;So;0;ON;;;;;N;;;;; 26F0;MOUNTAIN;So;0;ON;;;;;N;;;;; 26F1;UMBRELLA ON GROUND;So;0;ON;;;;;N;;;;; 26F2;FOUNTAIN;So;0;ON;;;;;N;;;;; 26F3;FLAG IN HOLE;So;0;ON;;;;;N;;;;; 26F4;FERRY;So;0;ON;;;;;N;;;;; 26F5;SAILBOAT;So;0;ON;;;;;N;;;;; 26F6;SQUARE FOUR CORNERS;So;0;ON;;;;;N;;;;; 26F7;SKIER;So;0;ON;;;;;N;;;;; 26F8;ICE SKATE;So;0;ON;;;;;N;;;;; 26F9;PERSON WITH BALL;So;0;ON;;;;;N;;;;; 26FA;TENT;So;0;ON;;;;;N;;;;; 26FB;JAPANESE BANK SYMBOL;So;0;ON;;;;;N;;;;; 26FC;HEADSTONE GRAVEYARD SYMBOL;So;0;ON;;;;;N;;;;; 26FD;FUEL PUMP;So;0;ON;;;;;N;;;;; 26FE;CUP ON BLACK SQUARE;So;0;ON;;;;;N;;;;; 26FF;WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE;So;0;ON;;;;;N;;;;; 2700;BLACK SAFETY SCISSORS;So;0;ON;;;;;N;;;;; 2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;; 2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;; 2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;; 2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;; 2705;WHITE HEAVY CHECK MARK;So;0;ON;;;;;N;;;;; 2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;; 2707;TAPE DRIVE;So;0;ON;;;;;N;;;;; 2708;AIRPLANE;So;0;ON;;;;;N;;;;; 2709;ENVELOPE;So;0;ON;;;;;N;;;;; 270A;RAISED FIST;So;0;ON;;;;;N;;;;; 270B;RAISED HAND;So;0;ON;;;;;N;;;;; 270C;VICTORY HAND;So;0;ON;;;;;N;;;;; 270D;WRITING HAND;So;0;ON;;;;;N;;;;; 270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;; 270F;PENCIL;So;0;ON;;;;;N;;;;; 2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;; 2711;WHITE NIB;So;0;ON;;;;;N;;;;; 2712;BLACK NIB;So;0;ON;;;;;N;;;;; 2713;CHECK MARK;So;0;ON;;;;;N;;;;; 2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;; 2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;; 2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;; 2717;BALLOT X;So;0;ON;;;;;N;;;;; 2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;; 2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;; 271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;; 271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;; 271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;; 271D;LATIN CROSS;So;0;ON;;;;;N;;;;; 271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;; 271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;; 2720;MALTESE CROSS;So;0;ON;;;;;N;;;;; 2721;STAR OF DAVID;So;0;ON;;;;;N;;;;; 2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;; 2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;; 2728;SPARKLES;So;0;ON;;;;;N;;;;; 2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;; 272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;; 272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;; 272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;; 272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;; 272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;; 272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;; 2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;; 2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;; 2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;; 2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; 2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;; 2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;; 2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;; 273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;; 273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;; 273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;; 2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;; 2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;; 2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;; 2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;; 2744;SNOWFLAKE;So;0;ON;;;;;N;;;;; 2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;; 2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;; 2747;SPARKLE;So;0;ON;;;;;N;;;;; 2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;; 2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;; 274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;; 274C;CROSS MARK;So;0;ON;;;;;N;;;;; 274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;; 274E;NEGATIVE SQUARED CROSS MARK;So;0;ON;;;;;N;;;;; 274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; 2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; 2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; 2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; 2753;BLACK QUESTION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2754;WHITE QUESTION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2755;WHITE EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;; 2757;HEAVY EXCLAMATION MARK SYMBOL;So;0;ON;;;;;N;;;;; 2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;; 2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;; 275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;; 275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 275F;HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2760;HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;; 2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;; 2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;; 2766;FLORAL HEART;So;0;ON;;;;;N;;;;; 2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;; 2768;MEDIUM LEFT PARENTHESIS ORNAMENT;Ps;0;ON;;;;;Y;;;;; 2769;MEDIUM RIGHT PARENTHESIS ORNAMENT;Pe;0;ON;;;;;Y;;;;; 276A;MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT;Ps;0;ON;;;;;Y;;;;; 276B;MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT;Pe;0;ON;;;;;Y;;;;; 276C;MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;; 276D;MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;; 276E;HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT;Ps;0;ON;;;;;Y;;;;; 276F;HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT;Pe;0;ON;;;;;Y;;;;; 2770;HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;; 2771;HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;; 2772;LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;; 2773;LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;; 2774;MEDIUM LEFT CURLY BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;; 2775;MEDIUM RIGHT CURLY BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;; 2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;; 2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;; 2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;; 2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;; 277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;; 277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;; 277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;; 277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;; 277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;; 277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;; 2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;; 2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;; 2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;; 2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;; 2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;; 2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;; 2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;; 2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;; 2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;; 2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;; 278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;; 278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;; 278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;; 278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;; 278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;; 278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;; 2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;; 2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;; 2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;; 2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;; 2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;; 2795;HEAVY PLUS SIGN;So;0;ON;;;;;N;;;;; 2796;HEAVY MINUS SIGN;So;0;ON;;;;;N;;;;; 2797;HEAVY DIVISION SIGN;So;0;ON;;;;;N;;;;; 2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;; 2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;; 279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;; 279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;; 279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;; 279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;; 279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;; 279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;; 27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;; 27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;; 27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;; 27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;; 27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;; 27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;; 27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;; 27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;; 27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;; 27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;; 27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;; 27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;; 27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;; 27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; 27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; 27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; 27B0;CURLY LOOP;So;0;ON;;;;;N;;;;; 27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; 27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;; 27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;; 27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;; 27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;; 27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;; 27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;; 27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;; 27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;; 27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;; 27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;; 27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;; 27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;; 27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;; 27BF;DOUBLE CURLY LOOP;So;0;ON;;;;;N;;;;; 27C0;THREE DIMENSIONAL ANGLE;Sm;0;ON;;;;;Y;;;;; 27C1;WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE;Sm;0;ON;;;;;N;;;;; 27C2;PERPENDICULAR;Sm;0;ON;;;;;N;;;;; 27C3;OPEN SUBSET;Sm;0;ON;;;;;Y;;;;; 27C4;OPEN SUPERSET;Sm;0;ON;;;;;Y;;;;; 27C5;LEFT S-SHAPED BAG DELIMITER;Ps;0;ON;;;;;Y;;;;; 27C6;RIGHT S-SHAPED BAG DELIMITER;Pe;0;ON;;;;;Y;;;;; 27C7;OR WITH DOT INSIDE;Sm;0;ON;;;;;N;;;;; 27C8;REVERSE SOLIDUS PRECEDING SUBSET;Sm;0;ON;;;;;Y;;;;; 27C9;SUPERSET PRECEDING SOLIDUS;Sm;0;ON;;;;;Y;;;;; 27CA;VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; 27CB;MATHEMATICAL RISING DIAGONAL;Sm;0;ON;;;;;Y;;;;; 27CC;LONG DIVISION;Sm;0;ON;;;;;Y;;;;; 27CD;MATHEMATICAL FALLING DIAGONAL;Sm;0;ON;;;;;Y;;;;; 27CE;SQUARED LOGICAL AND;Sm;0;ON;;;;;N;;;;; 27CF;SQUARED LOGICAL OR;Sm;0;ON;;;;;N;;;;; 27D0;WHITE DIAMOND WITH CENTRED DOT;Sm;0;ON;;;;;N;;;;; 27D1;AND WITH DOT;Sm;0;ON;;;;;N;;;;; 27D2;ELEMENT OF OPENING UPWARDS;Sm;0;ON;;;;;N;;;;; 27D3;LOWER RIGHT CORNER WITH DOT;Sm;0;ON;;;;;Y;;;;; 27D4;UPPER LEFT CORNER WITH DOT;Sm;0;ON;;;;;Y;;;;; 27D5;LEFT OUTER JOIN;Sm;0;ON;;;;;Y;;;;; 27D6;RIGHT OUTER JOIN;Sm;0;ON;;;;;Y;;;;; 27D7;FULL OUTER JOIN;Sm;0;ON;;;;;N;;;;; 27D8;LARGE UP TACK;Sm;0;ON;;;;;N;;;;; 27D9;LARGE DOWN TACK;Sm;0;ON;;;;;N;;;;; 27DA;LEFT AND RIGHT DOUBLE TURNSTILE;Sm;0;ON;;;;;N;;;;; 27DB;LEFT AND RIGHT TACK;Sm;0;ON;;;;;N;;;;; 27DC;LEFT MULTIMAP;Sm;0;ON;;;;;Y;;;;; 27DD;LONG RIGHT TACK;Sm;0;ON;;;;;Y;;;;; 27DE;LONG LEFT TACK;Sm;0;ON;;;;;Y;;;;; 27DF;UP TACK WITH CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;; 27E0;LOZENGE DIVIDED BY HORIZONTAL RULE;Sm;0;ON;;;;;N;;;;; 27E1;WHITE CONCAVE-SIDED DIAMOND;Sm;0;ON;;;;;N;;;;; 27E2;WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK;Sm;0;ON;;;;;Y;;;;; 27E3;WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK;Sm;0;ON;;;;;Y;;;;; 27E4;WHITE SQUARE WITH LEFTWARDS TICK;Sm;0;ON;;;;;Y;;;;; 27E5;WHITE SQUARE WITH RIGHTWARDS TICK;Sm;0;ON;;;;;Y;;;;; 27E6;MATHEMATICAL LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;;;;; 27E7;MATHEMATICAL RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;;;;; 27E8;MATHEMATICAL LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;; 27E9;MATHEMATICAL RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;; 27EA;MATHEMATICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;; 27EB;MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;; 27EC;MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;;;;; 27ED;MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;;;;; 27EE;MATHEMATICAL LEFT FLATTENED PARENTHESIS;Ps;0;ON;;;;;Y;;;;; 27EF;MATHEMATICAL RIGHT FLATTENED PARENTHESIS;Pe;0;ON;;;;;Y;;;;; 27F0;UPWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;; 27F1;DOWNWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;; 27F2;ANTICLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;; 27F3;CLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;; 27F4;RIGHT ARROW WITH CIRCLED PLUS;Sm;0;ON;;;;;N;;;;; 27F5;LONG LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 27F6;LONG RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 27F7;LONG LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;; 27F8;LONG LEFTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;;;;; 27F9;LONG RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;;;;; 27FA;LONG LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;; 27FB;LONG LEFTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; 27FC;LONG RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; 27FD;LONG LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; 27FE;LONG RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; 27FF;LONG RIGHTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;; 2800;BRAILLE PATTERN BLANK;So;0;L;;;;;N;;;;; 2801;BRAILLE PATTERN DOTS-1;So;0;L;;;;;N;;;;; 2802;BRAILLE PATTERN DOTS-2;So;0;L;;;;;N;;;;; 2803;BRAILLE PATTERN DOTS-12;So;0;L;;;;;N;;;;; 2804;BRAILLE PATTERN DOTS-3;So;0;L;;;;;N;;;;; 2805;BRAILLE PATTERN DOTS-13;So;0;L;;;;;N;;;;; 2806;BRAILLE PATTERN DOTS-23;So;0;L;;;;;N;;;;; 2807;BRAILLE PATTERN DOTS-123;So;0;L;;;;;N;;;;; 2808;BRAILLE PATTERN DOTS-4;So;0;L;;;;;N;;;;; 2809;BRAILLE PATTERN DOTS-14;So;0;L;;;;;N;;;;; 280A;BRAILLE PATTERN DOTS-24;So;0;L;;;;;N;;;;; 280B;BRAILLE PATTERN DOTS-124;So;0;L;;;;;N;;;;; 280C;BRAILLE PATTERN DOTS-34;So;0;L;;;;;N;;;;; 280D;BRAILLE PATTERN DOTS-134;So;0;L;;;;;N;;;;; 280E;BRAILLE PATTERN DOTS-234;So;0;L;;;;;N;;;;; 280F;BRAILLE PATTERN DOTS-1234;So;0;L;;;;;N;;;;; 2810;BRAILLE PATTERN DOTS-5;So;0;L;;;;;N;;;;; 2811;BRAILLE PATTERN DOTS-15;So;0;L;;;;;N;;;;; 2812;BRAILLE PATTERN DOTS-25;So;0;L;;;;;N;;;;; 2813;BRAILLE PATTERN DOTS-125;So;0;L;;;;;N;;;;; 2814;BRAILLE PATTERN DOTS-35;So;0;L;;;;;N;;;;; 2815;BRAILLE PATTERN DOTS-135;So;0;L;;;;;N;;;;; 2816;BRAILLE PATTERN DOTS-235;So;0;L;;;;;N;;;;; 2817;BRAILLE PATTERN DOTS-1235;So;0;L;;;;;N;;;;; 2818;BRAILLE PATTERN DOTS-45;So;0;L;;;;;N;;;;; 2819;BRAILLE PATTERN DOTS-145;So;0;L;;;;;N;;;;; 281A;BRAILLE PATTERN DOTS-245;So;0;L;;;;;N;;;;; 281B;BRAILLE PATTERN DOTS-1245;So;0;L;;;;;N;;;;; 281C;BRAILLE PATTERN DOTS-345;So;0;L;;;;;N;;;;; 281D;BRAILLE PATTERN DOTS-1345;So;0;L;;;;;N;;;;; 281E;BRAILLE PATTERN DOTS-2345;So;0;L;;;;;N;;;;; 281F;BRAILLE PATTERN DOTS-12345;So;0;L;;;;;N;;;;; 2820;BRAILLE PATTERN DOTS-6;So;0;L;;;;;N;;;;; 2821;BRAILLE PATTERN DOTS-16;So;0;L;;;;;N;;;;; 2822;BRAILLE PATTERN DOTS-26;So;0;L;;;;;N;;;;; 2823;BRAILLE PATTERN DOTS-126;So;0;L;;;;;N;;;;; 2824;BRAILLE PATTERN DOTS-36;So;0;L;;;;;N;;;;; 2825;BRAILLE PATTERN DOTS-136;So;0;L;;;;;N;;;;; 2826;BRAILLE PATTERN DOTS-236;So;0;L;;;;;N;;;;; 2827;BRAILLE PATTERN DOTS-1236;So;0;L;;;;;N;;;;; 2828;BRAILLE PATTERN DOTS-46;So;0;L;;;;;N;;;;; 2829;BRAILLE PATTERN DOTS-146;So;0;L;;;;;N;;;;; 282A;BRAILLE PATTERN DOTS-246;So;0;L;;;;;N;;;;; 282B;BRAILLE PATTERN DOTS-1246;So;0;L;;;;;N;;;;; 282C;BRAILLE PATTERN DOTS-346;So;0;L;;;;;N;;;;; 282D;BRAILLE PATTERN DOTS-1346;So;0;L;;;;;N;;;;; 282E;BRAILLE PATTERN DOTS-2346;So;0;L;;;;;N;;;;; 282F;BRAILLE PATTERN DOTS-12346;So;0;L;;;;;N;;;;; 2830;BRAILLE PATTERN DOTS-56;So;0;L;;;;;N;;;;; 2831;BRAILLE PATTERN DOTS-156;So;0;L;;;;;N;;;;; 2832;BRAILLE PATTERN DOTS-256;So;0;L;;;;;N;;;;; 2833;BRAILLE PATTERN DOTS-1256;So;0;L;;;;;N;;;;; 2834;BRAILLE PATTERN DOTS-356;So;0;L;;;;;N;;;;; 2835;BRAILLE PATTERN DOTS-1356;So;0;L;;;;;N;;;;; 2836;BRAILLE PATTERN DOTS-2356;So;0;L;;;;;N;;;;; 2837;BRAILLE PATTERN DOTS-12356;So;0;L;;;;;N;;;;; 2838;BRAILLE PATTERN DOTS-456;So;0;L;;;;;N;;;;; 2839;BRAILLE PATTERN DOTS-1456;So;0;L;;;;;N;;;;; 283A;BRAILLE PATTERN DOTS-2456;So;0;L;;;;;N;;;;; 283B;BRAILLE PATTERN DOTS-12456;So;0;L;;;;;N;;;;; 283C;BRAILLE PATTERN DOTS-3456;So;0;L;;;;;N;;;;; 283D;BRAILLE PATTERN DOTS-13456;So;0;L;;;;;N;;;;; 283E;BRAILLE PATTERN DOTS-23456;So;0;L;;;;;N;;;;; 283F;BRAILLE PATTERN DOTS-123456;So;0;L;;;;;N;;;;; 2840;BRAILLE PATTERN DOTS-7;So;0;L;;;;;N;;;;; 2841;BRAILLE PATTERN DOTS-17;So;0;L;;;;;N;;;;; 2842;BRAILLE PATTERN DOTS-27;So;0;L;;;;;N;;;;; 2843;BRAILLE PATTERN DOTS-127;So;0;L;;;;;N;;;;; 2844;BRAILLE PATTERN DOTS-37;So;0;L;;;;;N;;;;; 2845;BRAILLE PATTERN DOTS-137;So;0;L;;;;;N;;;;; 2846;BRAILLE PATTERN DOTS-237;So;0;L;;;;;N;;;;; 2847;BRAILLE PATTERN DOTS-1237;So;0;L;;;;;N;;;;; 2848;BRAILLE PATTERN DOTS-47;So;0;L;;;;;N;;;;; 2849;BRAILLE PATTERN DOTS-147;So;0;L;;;;;N;;;;; 284A;BRAILLE PATTERN DOTS-247;So;0;L;;;;;N;;;;; 284B;BRAILLE PATTERN DOTS-1247;So;0;L;;;;;N;;;;; 284C;BRAILLE PATTERN DOTS-347;So;0;L;;;;;N;;;;; 284D;BRAILLE PATTERN DOTS-1347;So;0;L;;;;;N;;;;; 284E;BRAILLE PATTERN DOTS-2347;So;0;L;;;;;N;;;;; 284F;BRAILLE PATTERN DOTS-12347;So;0;L;;;;;N;;;;; 2850;BRAILLE PATTERN DOTS-57;So;0;L;;;;;N;;;;; 2851;BRAILLE PATTERN DOTS-157;So;0;L;;;;;N;;;;; 2852;BRAILLE PATTERN DOTS-257;So;0;L;;;;;N;;;;; 2853;BRAILLE PATTERN DOTS-1257;So;0;L;;;;;N;;;;; 2854;BRAILLE PATTERN DOTS-357;So;0;L;;;;;N;;;;; 2855;BRAILLE PATTERN DOTS-1357;So;0;L;;;;;N;;;;; 2856;BRAILLE PATTERN DOTS-2357;So;0;L;;;;;N;;;;; 2857;BRAILLE PATTERN DOTS-12357;So;0;L;;;;;N;;;;; 2858;BRAILLE PATTERN DOTS-457;So;0;L;;;;;N;;;;; 2859;BRAILLE PATTERN DOTS-1457;So;0;L;;;;;N;;;;; 285A;BRAILLE PATTERN DOTS-2457;So;0;L;;;;;N;;;;; 285B;BRAILLE PATTERN DOTS-12457;So;0;L;;;;;N;;;;; 285C;BRAILLE PATTERN DOTS-3457;So;0;L;;;;;N;;;;; 285D;BRAILLE PATTERN DOTS-13457;So;0;L;;;;;N;;;;; 285E;BRAILLE PATTERN DOTS-23457;So;0;L;;;;;N;;;;; 285F;BRAILLE PATTERN DOTS-123457;So;0;L;;;;;N;;;;; 2860;BRAILLE PATTERN DOTS-67;So;0;L;;;;;N;;;;; 2861;BRAILLE PATTERN DOTS-167;So;0;L;;;;;N;;;;; 2862;BRAILLE PATTERN DOTS-267;So;0;L;;;;;N;;;;; 2863;BRAILLE PATTERN DOTS-1267;So;0;L;;;;;N;;;;; 2864;BRAILLE PATTERN DOTS-367;So;0;L;;;;;N;;;;; 2865;BRAILLE PATTERN DOTS-1367;So;0;L;;;;;N;;;;; 2866;BRAILLE PATTERN DOTS-2367;So;0;L;;;;;N;;;;; 2867;BRAILLE PATTERN DOTS-12367;So;0;L;;;;;N;;;;; 2868;BRAILLE PATTERN DOTS-467;So;0;L;;;;;N;;;;; 2869;BRAILLE PATTERN DOTS-1467;So;0;L;;;;;N;;;;; 286A;BRAILLE PATTERN DOTS-2467;So;0;L;;;;;N;;;;; 286B;BRAILLE PATTERN DOTS-12467;So;0;L;;;;;N;;;;; 286C;BRAILLE PATTERN DOTS-3467;So;0;L;;;;;N;;;;; 286D;BRAILLE PATTERN DOTS-13467;So;0;L;;;;;N;;;;; 286E;BRAILLE PATTERN DOTS-23467;So;0;L;;;;;N;;;;; 286F;BRAILLE PATTERN DOTS-123467;So;0;L;;;;;N;;;;; 2870;BRAILLE PATTERN DOTS-567;So;0;L;;;;;N;;;;; 2871;BRAILLE PATTERN DOTS-1567;So;0;L;;;;;N;;;;; 2872;BRAILLE PATTERN DOTS-2567;So;0;L;;;;;N;;;;; 2873;BRAILLE PATTERN DOTS-12567;So;0;L;;;;;N;;;;; 2874;BRAILLE PATTERN DOTS-3567;So;0;L;;;;;N;;;;; 2875;BRAILLE PATTERN DOTS-13567;So;0;L;;;;;N;;;;; 2876;BRAILLE PATTERN DOTS-23567;So;0;L;;;;;N;;;;; 2877;BRAILLE PATTERN DOTS-123567;So;0;L;;;;;N;;;;; 2878;BRAILLE PATTERN DOTS-4567;So;0;L;;;;;N;;;;; 2879;BRAILLE PATTERN DOTS-14567;So;0;L;;;;;N;;;;; 287A;BRAILLE PATTERN DOTS-24567;So;0;L;;;;;N;;;;; 287B;BRAILLE PATTERN DOTS-124567;So;0;L;;;;;N;;;;; 287C;BRAILLE PATTERN DOTS-34567;So;0;L;;;;;N;;;;; 287D;BRAILLE PATTERN DOTS-134567;So;0;L;;;;;N;;;;; 287E;BRAILLE PATTERN DOTS-234567;So;0;L;;;;;N;;;;; 287F;BRAILLE PATTERN DOTS-1234567;So;0;L;;;;;N;;;;; 2880;BRAILLE PATTERN DOTS-8;So;0;L;;;;;N;;;;; 2881;BRAILLE PATTERN DOTS-18;So;0;L;;;;;N;;;;; 2882;BRAILLE PATTERN DOTS-28;So;0;L;;;;;N;;;;; 2883;BRAILLE PATTERN DOTS-128;So;0;L;;;;;N;;;;; 2884;BRAILLE PATTERN DOTS-38;So;0;L;;;;;N;;;;; 2885;BRAILLE PATTERN DOTS-138;So;0;L;;;;;N;;;;; 2886;BRAILLE PATTERN DOTS-238;So;0;L;;;;;N;;;;; 2887;BRAILLE PATTERN DOTS-1238;So;0;L;;;;;N;;;;; 2888;BRAILLE PATTERN DOTS-48;So;0;L;;;;;N;;;;; 2889;BRAILLE PATTERN DOTS-148;So;0;L;;;;;N;;;;; 288A;BRAILLE PATTERN DOTS-248;So;0;L;;;;;N;;;;; 288B;BRAILLE PATTERN DOTS-1248;So;0;L;;;;;N;;;;; 288C;BRAILLE PATTERN DOTS-348;So;0;L;;;;;N;;;;; 288D;BRAILLE PATTERN DOTS-1348;So;0;L;;;;;N;;;;; 288E;BRAILLE PATTERN DOTS-2348;So;0;L;;;;;N;;;;; 288F;BRAILLE PATTERN DOTS-12348;So;0;L;;;;;N;;;;; 2890;BRAILLE PATTERN DOTS-58;So;0;L;;;;;N;;;;; 2891;BRAILLE PATTERN DOTS-158;So;0;L;;;;;N;;;;; 2892;BRAILLE PATTERN DOTS-258;So;0;L;;;;;N;;;;; 2893;BRAILLE PATTERN DOTS-1258;So;0;L;;;;;N;;;;; 2894;BRAILLE PATTERN DOTS-358;So;0;L;;;;;N;;;;; 2895;BRAILLE PATTERN DOTS-1358;So;0;L;;;;;N;;;;; 2896;BRAILLE PATTERN DOTS-2358;So;0;L;;;;;N;;;;; 2897;BRAILLE PATTERN DOTS-12358;So;0;L;;;;;N;;;;; 2898;BRAILLE PATTERN DOTS-458;So;0;L;;;;;N;;;;; 2899;BRAILLE PATTERN DOTS-1458;So;0;L;;;;;N;;;;; 289A;BRAILLE PATTERN DOTS-2458;So;0;L;;;;;N;;;;; 289B;BRAILLE PATTERN DOTS-12458;So;0;L;;;;;N;;;;; 289C;BRAILLE PATTERN DOTS-3458;So;0;L;;;;;N;;;;; 289D;BRAILLE PATTERN DOTS-13458;So;0;L;;;;;N;;;;; 289E;BRAILLE PATTERN DOTS-23458;So;0;L;;;;;N;;;;; 289F;BRAILLE PATTERN DOTS-123458;So;0;L;;;;;N;;;;; 28A0;BRAILLE PATTERN DOTS-68;So;0;L;;;;;N;;;;; 28A1;BRAILLE PATTERN DOTS-168;So;0;L;;;;;N;;;;; 28A2;BRAILLE PATTERN DOTS-268;So;0;L;;;;;N;;;;; 28A3;BRAILLE PATTERN DOTS-1268;So;0;L;;;;;N;;;;; 28A4;BRAILLE PATTERN DOTS-368;So;0;L;;;;;N;;;;; 28A5;BRAILLE PATTERN DOTS-1368;So;0;L;;;;;N;;;;; 28A6;BRAILLE PATTERN DOTS-2368;So;0;L;;;;;N;;;;; 28A7;BRAILLE PATTERN DOTS-12368;So;0;L;;;;;N;;;;; 28A8;BRAILLE PATTERN DOTS-468;So;0;L;;;;;N;;;;; 28A9;BRAILLE PATTERN DOTS-1468;So;0;L;;;;;N;;;;; 28AA;BRAILLE PATTERN DOTS-2468;So;0;L;;;;;N;;;;; 28AB;BRAILLE PATTERN DOTS-12468;So;0;L;;;;;N;;;;; 28AC;BRAILLE PATTERN DOTS-3468;So;0;L;;;;;N;;;;; 28AD;BRAILLE PATTERN DOTS-13468;So;0;L;;;;;N;;;;; 28AE;BRAILLE PATTERN DOTS-23468;So;0;L;;;;;N;;;;; 28AF;BRAILLE PATTERN DOTS-123468;So;0;L;;;;;N;;;;; 28B0;BRAILLE PATTERN DOTS-568;So;0;L;;;;;N;;;;; 28B1;BRAILLE PATTERN DOTS-1568;So;0;L;;;;;N;;;;; 28B2;BRAILLE PATTERN DOTS-2568;So;0;L;;;;;N;;;;; 28B3;BRAILLE PATTERN DOTS-12568;So;0;L;;;;;N;;;;; 28B4;BRAILLE PATTERN DOTS-3568;So;0;L;;;;;N;;;;; 28B5;BRAILLE PATTERN DOTS-13568;So;0;L;;;;;N;;;;; 28B6;BRAILLE PATTERN DOTS-23568;So;0;L;;;;;N;;;;; 28B7;BRAILLE PATTERN DOTS-123568;So;0;L;;;;;N;;;;; 28B8;BRAILLE PATTERN DOTS-4568;So;0;L;;;;;N;;;;; 28B9;BRAILLE PATTERN DOTS-14568;So;0;L;;;;;N;;;;; 28BA;BRAILLE PATTERN DOTS-24568;So;0;L;;;;;N;;;;; 28BB;BRAILLE PATTERN DOTS-124568;So;0;L;;;;;N;;;;; 28BC;BRAILLE PATTERN DOTS-34568;So;0;L;;;;;N;;;;; 28BD;BRAILLE PATTERN DOTS-134568;So;0;L;;;;;N;;;;; 28BE;BRAILLE PATTERN DOTS-234568;So;0;L;;;;;N;;;;; 28BF;BRAILLE PATTERN DOTS-1234568;So;0;L;;;;;N;;;;; 28C0;BRAILLE PATTERN DOTS-78;So;0;L;;;;;N;;;;; 28C1;BRAILLE PATTERN DOTS-178;So;0;L;;;;;N;;;;; 28C2;BRAILLE PATTERN DOTS-278;So;0;L;;;;;N;;;;; 28C3;BRAILLE PATTERN DOTS-1278;So;0;L;;;;;N;;;;; 28C4;BRAILLE PATTERN DOTS-378;So;0;L;;;;;N;;;;; 28C5;BRAILLE PATTERN DOTS-1378;So;0;L;;;;;N;;;;; 28C6;BRAILLE PATTERN DOTS-2378;So;0;L;;;;;N;;;;; 28C7;BRAILLE PATTERN DOTS-12378;So;0;L;;;;;N;;;;; 28C8;BRAILLE PATTERN DOTS-478;So;0;L;;;;;N;;;;; 28C9;BRAILLE PATTERN DOTS-1478;So;0;L;;;;;N;;;;; 28CA;BRAILLE PATTERN DOTS-2478;So;0;L;;;;;N;;;;; 28CB;BRAILLE PATTERN DOTS-12478;So;0;L;;;;;N;;;;; 28CC;BRAILLE PATTERN DOTS-3478;So;0;L;;;;;N;;;;; 28CD;BRAILLE PATTERN DOTS-13478;So;0;L;;;;;N;;;;; 28CE;BRAILLE PATTERN DOTS-23478;So;0;L;;;;;N;;;;; 28CF;BRAILLE PATTERN DOTS-123478;So;0;L;;;;;N;;;;; 28D0;BRAILLE PATTERN DOTS-578;So;0;L;;;;;N;;;;; 28D1;BRAILLE PATTERN DOTS-1578;So;0;L;;;;;N;;;;; 28D2;BRAILLE PATTERN DOTS-2578;So;0;L;;;;;N;;;;; 28D3;BRAILLE PATTERN DOTS-12578;So;0;L;;;;;N;;;;; 28D4;BRAILLE PATTERN DOTS-3578;So;0;L;;;;;N;;;;; 28D5;BRAILLE PATTERN DOTS-13578;So;0;L;;;;;N;;;;; 28D6;BRAILLE PATTERN DOTS-23578;So;0;L;;;;;N;;;;; 28D7;BRAILLE PATTERN DOTS-123578;So;0;L;;;;;N;;;;; 28D8;BRAILLE PATTERN DOTS-4578;So;0;L;;;;;N;;;;; 28D9;BRAILLE PATTERN DOTS-14578;So;0;L;;;;;N;;;;; 28DA;BRAILLE PATTERN DOTS-24578;So;0;L;;;;;N;;;;; 28DB;BRAILLE PATTERN DOTS-124578;So;0;L;;;;;N;;;;; 28DC;BRAILLE PATTERN DOTS-34578;So;0;L;;;;;N;;;;; 28DD;BRAILLE PATTERN DOTS-134578;So;0;L;;;;;N;;;;; 28DE;BRAILLE PATTERN DOTS-234578;So;0;L;;;;;N;;;;; 28DF;BRAILLE PATTERN DOTS-1234578;So;0;L;;;;;N;;;;; 28E0;BRAILLE PATTERN DOTS-678;So;0;L;;;;;N;;;;; 28E1;BRAILLE PATTERN DOTS-1678;So;0;L;;;;;N;;;;; 28E2;BRAILLE PATTERN DOTS-2678;So;0;L;;;;;N;;;;; 28E3;BRAILLE PATTERN DOTS-12678;So;0;L;;;;;N;;;;; 28E4;BRAILLE PATTERN DOTS-3678;So;0;L;;;;;N;;;;; 28E5;BRAILLE PATTERN DOTS-13678;So;0;L;;;;;N;;;;; 28E6;BRAILLE PATTERN DOTS-23678;So;0;L;;;;;N;;;;; 28E7;BRAILLE PATTERN DOTS-123678;So;0;L;;;;;N;;;;; 28E8;BRAILLE PATTERN DOTS-4678;So;0;L;;;;;N;;;;; 28E9;BRAILLE PATTERN DOTS-14678;So;0;L;;;;;N;;;;; 28EA;BRAILLE PATTERN DOTS-24678;So;0;L;;;;;N;;;;; 28EB;BRAILLE PATTERN DOTS-124678;So;0;L;;;;;N;;;;; 28EC;BRAILLE PATTERN DOTS-34678;So;0;L;;;;;N;;;;; 28ED;BRAILLE PATTERN DOTS-134678;So;0;L;;;;;N;;;;; 28EE;BRAILLE PATTERN DOTS-234678;So;0;L;;;;;N;;;;; 28EF;BRAILLE PATTERN DOTS-1234678;So;0;L;;;;;N;;;;; 28F0;BRAILLE PATTERN DOTS-5678;So;0;L;;;;;N;;;;; 28F1;BRAILLE PATTERN DOTS-15678;So;0;L;;;;;N;;;;; 28F2;BRAILLE PATTERN DOTS-25678;So;0;L;;;;;N;;;;; 28F3;BRAILLE PATTERN DOTS-125678;So;0;L;;;;;N;;;;; 28F4;BRAILLE PATTERN DOTS-35678;So;0;L;;;;;N;;;;; 28F5;BRAILLE PATTERN DOTS-135678;So;0;L;;;;;N;;;;; 28F6;BRAILLE PATTERN DOTS-235678;So;0;L;;;;;N;;;;; 28F7;BRAILLE PATTERN DOTS-1235678;So;0;L;;;;;N;;;;; 28F8;BRAILLE PATTERN DOTS-45678;So;0;L;;;;;N;;;;; 28F9;BRAILLE PATTERN DOTS-145678;So;0;L;;;;;N;;;;; 28FA;BRAILLE PATTERN DOTS-245678;So;0;L;;;;;N;;;;; 28FB;BRAILLE PATTERN DOTS-1245678;So;0;L;;;;;N;;;;; 28FC;BRAILLE PATTERN DOTS-345678;So;0;L;;;;;N;;;;; 28FD;BRAILLE PATTERN DOTS-1345678;So;0;L;;;;;N;;;;; 28FE;BRAILLE PATTERN DOTS-2345678;So;0;L;;;;;N;;;;; 28FF;BRAILLE PATTERN DOTS-12345678;So;0;L;;;;;N;;;;; 2900;RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2901;RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2902;LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2903;RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2904;LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2905;RIGHTWARDS TWO-HEADED ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; 2906;LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; 2907;RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; 2908;DOWNWARDS ARROW WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; 2909;UPWARDS ARROW WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; 290A;UPWARDS TRIPLE ARROW;Sm;0;ON;;;;;N;;;;; 290B;DOWNWARDS TRIPLE ARROW;Sm;0;ON;;;;;N;;;;; 290C;LEFTWARDS DOUBLE DASH ARROW;Sm;0;ON;;;;;N;;;;; 290D;RIGHTWARDS DOUBLE DASH ARROW;Sm;0;ON;;;;;N;;;;; 290E;LEFTWARDS TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;; 290F;RIGHTWARDS TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;; 2910;RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;; 2911;RIGHTWARDS ARROW WITH DOTTED STEM;Sm;0;ON;;;;;N;;;;; 2912;UPWARDS ARROW TO BAR;Sm;0;ON;;;;;N;;;;; 2913;DOWNWARDS ARROW TO BAR;Sm;0;ON;;;;;N;;;;; 2914;RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2915;RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2916;RIGHTWARDS TWO-HEADED ARROW WITH TAIL;Sm;0;ON;;;;;N;;;;; 2917;RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2918;RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2919;LEFTWARDS ARROW-TAIL;Sm;0;ON;;;;;N;;;;; 291A;RIGHTWARDS ARROW-TAIL;Sm;0;ON;;;;;N;;;;; 291B;LEFTWARDS DOUBLE ARROW-TAIL;Sm;0;ON;;;;;N;;;;; 291C;RIGHTWARDS DOUBLE ARROW-TAIL;Sm;0;ON;;;;;N;;;;; 291D;LEFTWARDS ARROW TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; 291E;RIGHTWARDS ARROW TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; 291F;LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; 2920;RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; 2921;NORTH WEST AND SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;; 2922;NORTH EAST AND SOUTH WEST ARROW;Sm;0;ON;;;;;N;;;;; 2923;NORTH WEST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;; 2924;NORTH EAST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;; 2925;SOUTH EAST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;; 2926;SOUTH WEST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;; 2927;NORTH WEST ARROW AND NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;; 2928;NORTH EAST ARROW AND SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;; 2929;SOUTH EAST ARROW AND SOUTH WEST ARROW;Sm;0;ON;;;;;N;;;;; 292A;SOUTH WEST ARROW AND NORTH WEST ARROW;Sm;0;ON;;;;;N;;;;; 292B;RISING DIAGONAL CROSSING FALLING DIAGONAL;Sm;0;ON;;;;;N;;;;; 292C;FALLING DIAGONAL CROSSING RISING DIAGONAL;Sm;0;ON;;;;;N;;;;; 292D;SOUTH EAST ARROW CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;; 292E;NORTH EAST ARROW CROSSING SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;; 292F;FALLING DIAGONAL CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;; 2930;RISING DIAGONAL CROSSING SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;; 2931;NORTH EAST ARROW CROSSING NORTH WEST ARROW;Sm;0;ON;;;;;N;;;;; 2932;NORTH WEST ARROW CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;; 2933;WAVE ARROW POINTING DIRECTLY RIGHT;Sm;0;ON;;;;;N;;;;; 2934;ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS;Sm;0;ON;;;;;N;;;;; 2935;ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS;Sm;0;ON;;;;;N;;;;; 2936;ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS;Sm;0;ON;;;;;N;;;;; 2937;ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS;Sm;0;ON;;;;;N;;;;; 2938;RIGHT-SIDE ARC CLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; 2939;LEFT-SIDE ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; 293A;TOP ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; 293B;BOTTOM ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; 293C;TOP ARC CLOCKWISE ARROW WITH MINUS;Sm;0;ON;;;;;N;;;;; 293D;TOP ARC ANTICLOCKWISE ARROW WITH PLUS;Sm;0;ON;;;;;N;;;;; 293E;LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; 293F;LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; 2940;ANTICLOCKWISE CLOSED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;; 2941;CLOCKWISE CLOSED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;; 2942;RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2943;LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2944;SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2945;RIGHTWARDS ARROW WITH PLUS BELOW;Sm;0;ON;;;;;N;;;;; 2946;LEFTWARDS ARROW WITH PLUS BELOW;Sm;0;ON;;;;;N;;;;; 2947;RIGHTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;; 2948;LEFT RIGHT ARROW THROUGH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; 2949;UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; 294A;LEFT BARB UP RIGHT BARB DOWN HARPOON;Sm;0;ON;;;;;N;;;;; 294B;LEFT BARB DOWN RIGHT BARB UP HARPOON;Sm;0;ON;;;;;N;;;;; 294C;UP BARB RIGHT DOWN BARB LEFT HARPOON;Sm;0;ON;;;;;N;;;;; 294D;UP BARB LEFT DOWN BARB RIGHT HARPOON;Sm;0;ON;;;;;N;;;;; 294E;LEFT BARB UP RIGHT BARB UP HARPOON;Sm;0;ON;;;;;N;;;;; 294F;UP BARB RIGHT DOWN BARB RIGHT HARPOON;Sm;0;ON;;;;;N;;;;; 2950;LEFT BARB DOWN RIGHT BARB DOWN HARPOON;Sm;0;ON;;;;;N;;;;; 2951;UP BARB LEFT DOWN BARB LEFT HARPOON;Sm;0;ON;;;;;N;;;;; 2952;LEFTWARDS HARPOON WITH BARB UP TO BAR;Sm;0;ON;;;;;N;;;;; 2953;RIGHTWARDS HARPOON WITH BARB UP TO BAR;Sm;0;ON;;;;;N;;;;; 2954;UPWARDS HARPOON WITH BARB RIGHT TO BAR;Sm;0;ON;;;;;N;;;;; 2955;DOWNWARDS HARPOON WITH BARB RIGHT TO BAR;Sm;0;ON;;;;;N;;;;; 2956;LEFTWARDS HARPOON WITH BARB DOWN TO BAR;Sm;0;ON;;;;;N;;;;; 2957;RIGHTWARDS HARPOON WITH BARB DOWN TO BAR;Sm;0;ON;;;;;N;;;;; 2958;UPWARDS HARPOON WITH BARB LEFT TO BAR;Sm;0;ON;;;;;N;;;;; 2959;DOWNWARDS HARPOON WITH BARB LEFT TO BAR;Sm;0;ON;;;;;N;;;;; 295A;LEFTWARDS HARPOON WITH BARB UP FROM BAR;Sm;0;ON;;;;;N;;;;; 295B;RIGHTWARDS HARPOON WITH BARB UP FROM BAR;Sm;0;ON;;;;;N;;;;; 295C;UPWARDS HARPOON WITH BARB RIGHT FROM BAR;Sm;0;ON;;;;;N;;;;; 295D;DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR;Sm;0;ON;;;;;N;;;;; 295E;LEFTWARDS HARPOON WITH BARB DOWN FROM BAR;Sm;0;ON;;;;;N;;;;; 295F;RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR;Sm;0;ON;;;;;N;;;;; 2960;UPWARDS HARPOON WITH BARB LEFT FROM BAR;Sm;0;ON;;;;;N;;;;; 2961;DOWNWARDS HARPOON WITH BARB LEFT FROM BAR;Sm;0;ON;;;;;N;;;;; 2962;LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;; 2963;UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;; 2964;RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;; 2965;DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;; 2966;LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP;Sm;0;ON;;;;;N;;;;; 2967;LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;; 2968;RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP;Sm;0;ON;;;;;N;;;;; 2969;RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;; 296A;LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;Sm;0;ON;;;;;N;;;;; 296B;LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH;Sm;0;ON;;;;;N;;;;; 296C;RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;Sm;0;ON;;;;;N;;;;; 296D;RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH;Sm;0;ON;;;;;N;;;;; 296E;UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;; 296F;DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;; 2970;RIGHT DOUBLE ARROW WITH ROUNDED HEAD;Sm;0;ON;;;;;N;;;;; 2971;EQUALS SIGN ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2972;TILDE OPERATOR ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2973;LEFTWARDS ARROW ABOVE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;; 2974;RIGHTWARDS ARROW ABOVE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;; 2975;RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;; 2976;LESS-THAN ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2977;LEFTWARDS ARROW THROUGH LESS-THAN;Sm;0;ON;;;;;N;;;;; 2978;GREATER-THAN ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2979;SUBSET ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 297A;LEFTWARDS ARROW THROUGH SUBSET;Sm;0;ON;;;;;N;;;;; 297B;SUPERSET ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 297C;LEFT FISH TAIL;Sm;0;ON;;;;;N;;;;; 297D;RIGHT FISH TAIL;Sm;0;ON;;;;;N;;;;; 297E;UP FISH TAIL;Sm;0;ON;;;;;N;;;;; 297F;DOWN FISH TAIL;Sm;0;ON;;;;;N;;;;; 2980;TRIPLE VERTICAL BAR DELIMITER;Sm;0;ON;;;;;N;;;;; 2981;Z NOTATION SPOT;Sm;0;ON;;;;;N;;;;; 2982;Z NOTATION TYPE COLON;Sm;0;ON;;;;;N;;;;; 2983;LEFT WHITE CURLY BRACKET;Ps;0;ON;;;;;Y;;;;; 2984;RIGHT WHITE CURLY BRACKET;Pe;0;ON;;;;;Y;;;;; 2985;LEFT WHITE PARENTHESIS;Ps;0;ON;;;;;Y;;;;; 2986;RIGHT WHITE PARENTHESIS;Pe;0;ON;;;;;Y;;;;; 2987;Z NOTATION LEFT IMAGE BRACKET;Ps;0;ON;;;;;Y;;;;; 2988;Z NOTATION RIGHT IMAGE BRACKET;Pe;0;ON;;;;;Y;;;;; 2989;Z NOTATION LEFT BINDING BRACKET;Ps;0;ON;;;;;Y;;;;; 298A;Z NOTATION RIGHT BINDING BRACKET;Pe;0;ON;;;;;Y;;;;; 298B;LEFT SQUARE BRACKET WITH UNDERBAR;Ps;0;ON;;;;;Y;;;;; 298C;RIGHT SQUARE BRACKET WITH UNDERBAR;Pe;0;ON;;;;;Y;;;;; 298D;LEFT SQUARE BRACKET WITH TICK IN TOP CORNER;Ps;0;ON;;;;;Y;;;;; 298E;RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER;Pe;0;ON;;;;;Y;;;;; 298F;LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER;Ps;0;ON;;;;;Y;;;;; 2990;RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER;Pe;0;ON;;;;;Y;;;;; 2991;LEFT ANGLE BRACKET WITH DOT;Ps;0;ON;;;;;Y;;;;; 2992;RIGHT ANGLE BRACKET WITH DOT;Pe;0;ON;;;;;Y;;;;; 2993;LEFT ARC LESS-THAN BRACKET;Ps;0;ON;;;;;Y;;;;; 2994;RIGHT ARC GREATER-THAN BRACKET;Pe;0;ON;;;;;Y;;;;; 2995;DOUBLE LEFT ARC GREATER-THAN BRACKET;Ps;0;ON;;;;;Y;;;;; 2996;DOUBLE RIGHT ARC LESS-THAN BRACKET;Pe;0;ON;;;;;Y;;;;; 2997;LEFT BLACK TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;;;;; 2998;RIGHT BLACK TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;;;;; 2999;DOTTED FENCE;Sm;0;ON;;;;;N;;;;; 299A;VERTICAL ZIGZAG LINE;Sm;0;ON;;;;;N;;;;; 299B;MEASURED ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;; 299C;RIGHT ANGLE VARIANT WITH SQUARE;Sm;0;ON;;;;;Y;;;;; 299D;MEASURED RIGHT ANGLE WITH DOT;Sm;0;ON;;;;;Y;;;;; 299E;ANGLE WITH S INSIDE;Sm;0;ON;;;;;Y;;;;; 299F;ACUTE ANGLE;Sm;0;ON;;;;;Y;;;;; 29A0;SPHERICAL ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;; 29A1;SPHERICAL ANGLE OPENING UP;Sm;0;ON;;;;;N;;;;; 29A2;TURNED ANGLE;Sm;0;ON;;;;;Y;;;;; 29A3;REVERSED ANGLE;Sm;0;ON;;;;;Y;;;;; 29A4;ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; 29A5;REVERSED ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; 29A6;OBLIQUE ANGLE OPENING UP;Sm;0;ON;;;;;Y;;;;; 29A7;OBLIQUE ANGLE OPENING DOWN;Sm;0;ON;;;;;Y;;;;; 29A8;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT;Sm;0;ON;;;;;Y;;;;; 29A9;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT;Sm;0;ON;;;;;Y;;;;; 29AA;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT;Sm;0;ON;;;;;Y;;;;; 29AB;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT;Sm;0;ON;;;;;Y;;;;; 29AC;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP;Sm;0;ON;;;;;Y;;;;; 29AD;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP;Sm;0;ON;;;;;Y;;;;; 29AE;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN;Sm;0;ON;;;;;Y;;;;; 29AF;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN;Sm;0;ON;;;;;Y;;;;; 29B0;REVERSED EMPTY SET;Sm;0;ON;;;;;N;;;;; 29B1;EMPTY SET WITH OVERBAR;Sm;0;ON;;;;;N;;;;; 29B2;EMPTY SET WITH SMALL CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;; 29B3;EMPTY SET WITH RIGHT ARROW ABOVE;Sm;0;ON;;;;;N;;;;; 29B4;EMPTY SET WITH LEFT ARROW ABOVE;Sm;0;ON;;;;;N;;;;; 29B5;CIRCLE WITH HORIZONTAL BAR;Sm;0;ON;;;;;N;;;;; 29B6;CIRCLED VERTICAL BAR;Sm;0;ON;;;;;N;;;;; 29B7;CIRCLED PARALLEL;Sm;0;ON;;;;;N;;;;; 29B8;CIRCLED REVERSE SOLIDUS;Sm;0;ON;;;;;Y;;;;; 29B9;CIRCLED PERPENDICULAR;Sm;0;ON;;;;;N;;;;; 29BA;CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR;Sm;0;ON;;;;;N;;;;; 29BB;CIRCLE WITH SUPERIMPOSED X;Sm;0;ON;;;;;N;;;;; 29BC;CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN;Sm;0;ON;;;;;N;;;;; 29BD;UP ARROW THROUGH CIRCLE;Sm;0;ON;;;;;N;;;;; 29BE;CIRCLED WHITE BULLET;Sm;0;ON;;;;;N;;;;; 29BF;CIRCLED BULLET;Sm;0;ON;;;;;N;;;;; 29C0;CIRCLED LESS-THAN;Sm;0;ON;;;;;Y;;;;; 29C1;CIRCLED GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 29C2;CIRCLE WITH SMALL CIRCLE TO THE RIGHT;Sm;0;ON;;;;;Y;;;;; 29C3;CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT;Sm;0;ON;;;;;Y;;;;; 29C4;SQUARED RISING DIAGONAL SLASH;Sm;0;ON;;;;;Y;;;;; 29C5;SQUARED FALLING DIAGONAL SLASH;Sm;0;ON;;;;;Y;;;;; 29C6;SQUARED ASTERISK;Sm;0;ON;;;;;N;;;;; 29C7;SQUARED SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; 29C8;SQUARED SQUARE;Sm;0;ON;;;;;N;;;;; 29C9;TWO JOINED SQUARES;Sm;0;ON;;;;;Y;;;;; 29CA;TRIANGLE WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; 29CB;TRIANGLE WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; 29CC;S IN TRIANGLE;Sm;0;ON;;;;;N;;;;; 29CD;TRIANGLE WITH SERIFS AT BOTTOM;Sm;0;ON;;;;;N;;;;; 29CE;RIGHT TRIANGLE ABOVE LEFT TRIANGLE;Sm;0;ON;;;;;Y;;;;; 29CF;LEFT TRIANGLE BESIDE VERTICAL BAR;Sm;0;ON;;;;;Y;;;;; 29D0;VERTICAL BAR BESIDE RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;; 29D1;BOWTIE WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;; 29D2;BOWTIE WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;; 29D3;BLACK BOWTIE;Sm;0;ON;;;;;N;;;;; 29D4;TIMES WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;; 29D5;TIMES WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;; 29D6;WHITE HOURGLASS;Sm;0;ON;;;;;N;;;;; 29D7;BLACK HOURGLASS;Sm;0;ON;;;;;N;;;;; 29D8;LEFT WIGGLY FENCE;Ps;0;ON;;;;;Y;;;;; 29D9;RIGHT WIGGLY FENCE;Pe;0;ON;;;;;Y;;;;; 29DA;LEFT DOUBLE WIGGLY FENCE;Ps;0;ON;;;;;Y;;;;; 29DB;RIGHT DOUBLE WIGGLY FENCE;Pe;0;ON;;;;;Y;;;;; 29DC;INCOMPLETE INFINITY;Sm;0;ON;;;;;Y;;;;; 29DD;TIE OVER INFINITY;Sm;0;ON;;;;;N;;;;; 29DE;INFINITY NEGATED WITH VERTICAL BAR;Sm;0;ON;;;;;N;;;;; 29DF;DOUBLE-ENDED MULTIMAP;Sm;0;ON;;;;;N;;;;; 29E0;SQUARE WITH CONTOURED OUTLINE;Sm;0;ON;;;;;N;;;;; 29E1;INCREASES AS;Sm;0;ON;;;;;Y;;;;; 29E2;SHUFFLE PRODUCT;Sm;0;ON;;;;;N;;;;; 29E3;EQUALS SIGN AND SLANTED PARALLEL;Sm;0;ON;;;;;Y;;;;; 29E4;EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE;Sm;0;ON;;;;;Y;;;;; 29E5;IDENTICAL TO AND SLANTED PARALLEL;Sm;0;ON;;;;;Y;;;;; 29E6;GLEICH STARK;Sm;0;ON;;;;;N;;;;; 29E7;THERMODYNAMIC;Sm;0;ON;;;;;N;;;;; 29E8;DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;; 29E9;DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;; 29EA;BLACK DIAMOND WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;; 29EB;BLACK LOZENGE;Sm;0;ON;;;;;N;;;;; 29EC;WHITE CIRCLE WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;; 29ED;BLACK CIRCLE WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;; 29EE;ERROR-BARRED WHITE SQUARE;Sm;0;ON;;;;;N;;;;; 29EF;ERROR-BARRED BLACK SQUARE;Sm;0;ON;;;;;N;;;;; 29F0;ERROR-BARRED WHITE DIAMOND;Sm;0;ON;;;;;N;;;;; 29F1;ERROR-BARRED BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; 29F2;ERROR-BARRED WHITE CIRCLE;Sm;0;ON;;;;;N;;;;; 29F3;ERROR-BARRED BLACK CIRCLE;Sm;0;ON;;;;;N;;;;; 29F4;RULE-DELAYED;Sm;0;ON;;;;;Y;;;;; 29F5;REVERSE SOLIDUS OPERATOR;Sm;0;ON;;;;;Y;;;;; 29F6;SOLIDUS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; 29F7;REVERSE SOLIDUS WITH HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; 29F8;BIG SOLIDUS;Sm;0;ON;;;;;Y;;;;; 29F9;BIG REVERSE SOLIDUS;Sm;0;ON;;;;;Y;;;;; 29FA;DOUBLE PLUS;Sm;0;ON;;;;;N;;;;; 29FB;TRIPLE PLUS;Sm;0;ON;;;;;N;;;;; 29FC;LEFT-POINTING CURVED ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;; 29FD;RIGHT-POINTING CURVED ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;; 29FE;TINY;Sm;0;ON;;;;;N;;;;; 29FF;MINY;Sm;0;ON;;;;;N;;;;; 2A00;N-ARY CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;; 2A01;N-ARY CIRCLED PLUS OPERATOR;Sm;0;ON;;;;;N;;;;; 2A02;N-ARY CIRCLED TIMES OPERATOR;Sm;0;ON;;;;;N;;;;; 2A03;N-ARY UNION OPERATOR WITH DOT;Sm;0;ON;;;;;N;;;;; 2A04;N-ARY UNION OPERATOR WITH PLUS;Sm;0;ON;;;;;N;;;;; 2A05;N-ARY SQUARE INTERSECTION OPERATOR;Sm;0;ON;;;;;N;;;;; 2A06;N-ARY SQUARE UNION OPERATOR;Sm;0;ON;;;;;N;;;;; 2A07;TWO LOGICAL AND OPERATOR;Sm;0;ON;;;;;N;;;;; 2A08;TWO LOGICAL OR OPERATOR;Sm;0;ON;;;;;N;;;;; 2A09;N-ARY TIMES OPERATOR;Sm;0;ON;;;;;N;;;;; 2A0A;MODULO TWO SUM;Sm;0;ON;;;;;Y;;;;; 2A0B;SUMMATION WITH INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2A0C;QUADRUPLE INTEGRAL OPERATOR;Sm;0;ON; 222B 222B 222B 222B;;;;Y;;;;; 2A0D;FINITE PART INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2A0E;INTEGRAL WITH DOUBLE STROKE;Sm;0;ON;;;;;Y;;;;; 2A0F;INTEGRAL AVERAGE WITH SLASH;Sm;0;ON;;;;;Y;;;;; 2A10;CIRCULATION FUNCTION;Sm;0;ON;;;;;Y;;;;; 2A11;ANTICLOCKWISE INTEGRATION;Sm;0;ON;;;;;Y;;;;; 2A12;LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE;Sm;0;ON;;;;;Y;;;;; 2A13;LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE;Sm;0;ON;;;;;Y;;;;; 2A14;LINE INTEGRATION NOT INCLUDING THE POLE;Sm;0;ON;;;;;Y;;;;; 2A15;INTEGRAL AROUND A POINT OPERATOR;Sm;0;ON;;;;;Y;;;;; 2A16;QUATERNION INTEGRAL OPERATOR;Sm;0;ON;;;;;Y;;;;; 2A17;INTEGRAL WITH LEFTWARDS ARROW WITH HOOK;Sm;0;ON;;;;;Y;;;;; 2A18;INTEGRAL WITH TIMES SIGN;Sm;0;ON;;;;;Y;;;;; 2A19;INTEGRAL WITH INTERSECTION;Sm;0;ON;;;;;Y;;;;; 2A1A;INTEGRAL WITH UNION;Sm;0;ON;;;;;Y;;;;; 2A1B;INTEGRAL WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; 2A1C;INTEGRAL WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; 2A1D;JOIN;Sm;0;ON;;;;;N;;;;; 2A1E;LARGE LEFT TRIANGLE OPERATOR;Sm;0;ON;;;;;Y;;;;; 2A1F;Z NOTATION SCHEMA COMPOSITION;Sm;0;ON;;;;;Y;;;;; 2A20;Z NOTATION SCHEMA PIPING;Sm;0;ON;;;;;Y;;;;; 2A21;Z NOTATION SCHEMA PROJECTION;Sm;0;ON;;;;;Y;;;;; 2A22;PLUS SIGN WITH SMALL CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;; 2A23;PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE;Sm;0;ON;;;;;N;;;;; 2A24;PLUS SIGN WITH TILDE ABOVE;Sm;0;ON;;;;;Y;;;;; 2A25;PLUS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;; 2A26;PLUS SIGN WITH TILDE BELOW;Sm;0;ON;;;;;Y;;;;; 2A27;PLUS SIGN WITH SUBSCRIPT TWO;Sm;0;ON;;;;;N;;;;; 2A28;PLUS SIGN WITH BLACK TRIANGLE;Sm;0;ON;;;;;N;;;;; 2A29;MINUS SIGN WITH COMMA ABOVE;Sm;0;ON;;;;;Y;;;;; 2A2A;MINUS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;; 2A2B;MINUS SIGN WITH FALLING DOTS;Sm;0;ON;;;;;Y;;;;; 2A2C;MINUS SIGN WITH RISING DOTS;Sm;0;ON;;;;;Y;;;;; 2A2D;PLUS SIGN IN LEFT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;; 2A2E;PLUS SIGN IN RIGHT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;; 2A2F;VECTOR OR CROSS PRODUCT;Sm;0;ON;;;;;N;;;;; 2A30;MULTIPLICATION SIGN WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; 2A31;MULTIPLICATION SIGN WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; 2A32;SEMIDIRECT PRODUCT WITH BOTTOM CLOSED;Sm;0;ON;;;;;N;;;;; 2A33;SMASH PRODUCT;Sm;0;ON;;;;;N;;;;; 2A34;MULTIPLICATION SIGN IN LEFT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;; 2A35;MULTIPLICATION SIGN IN RIGHT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;; 2A36;CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT;Sm;0;ON;;;;;N;;;;; 2A37;MULTIPLICATION SIGN IN DOUBLE CIRCLE;Sm;0;ON;;;;;N;;;;; 2A38;CIRCLED DIVISION SIGN;Sm;0;ON;;;;;N;;;;; 2A39;PLUS SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;; 2A3A;MINUS SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;; 2A3B;MULTIPLICATION SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;; 2A3C;INTERIOR PRODUCT;Sm;0;ON;;;;;Y;;;;; 2A3D;RIGHTHAND INTERIOR PRODUCT;Sm;0;ON;;;;;Y;;;;; 2A3E;Z NOTATION RELATIONAL COMPOSITION;Sm;0;ON;;;;;Y;;;;; 2A3F;AMALGAMATION OR COPRODUCT;Sm;0;ON;;;;;N;;;;; 2A40;INTERSECTION WITH DOT;Sm;0;ON;;;;;N;;;;; 2A41;UNION WITH MINUS SIGN;Sm;0;ON;;;;;N;;;;; 2A42;UNION WITH OVERBAR;Sm;0;ON;;;;;N;;;;; 2A43;INTERSECTION WITH OVERBAR;Sm;0;ON;;;;;N;;;;; 2A44;INTERSECTION WITH LOGICAL AND;Sm;0;ON;;;;;N;;;;; 2A45;UNION WITH LOGICAL OR;Sm;0;ON;;;;;N;;;;; 2A46;UNION ABOVE INTERSECTION;Sm;0;ON;;;;;N;;;;; 2A47;INTERSECTION ABOVE UNION;Sm;0;ON;;;;;N;;;;; 2A48;UNION ABOVE BAR ABOVE INTERSECTION;Sm;0;ON;;;;;N;;;;; 2A49;INTERSECTION ABOVE BAR ABOVE UNION;Sm;0;ON;;;;;N;;;;; 2A4A;UNION BESIDE AND JOINED WITH UNION;Sm;0;ON;;;;;N;;;;; 2A4B;INTERSECTION BESIDE AND JOINED WITH INTERSECTION;Sm;0;ON;;;;;N;;;;; 2A4C;CLOSED UNION WITH SERIFS;Sm;0;ON;;;;;N;;;;; 2A4D;CLOSED INTERSECTION WITH SERIFS;Sm;0;ON;;;;;N;;;;; 2A4E;DOUBLE SQUARE INTERSECTION;Sm;0;ON;;;;;N;;;;; 2A4F;DOUBLE SQUARE UNION;Sm;0;ON;;;;;N;;;;; 2A50;CLOSED UNION WITH SERIFS AND SMASH PRODUCT;Sm;0;ON;;;;;N;;;;; 2A51;LOGICAL AND WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; 2A52;LOGICAL OR WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; 2A53;DOUBLE LOGICAL AND;Sm;0;ON;;;;;N;;;;; 2A54;DOUBLE LOGICAL OR;Sm;0;ON;;;;;N;;;;; 2A55;TWO INTERSECTING LOGICAL AND;Sm;0;ON;;;;;N;;;;; 2A56;TWO INTERSECTING LOGICAL OR;Sm;0;ON;;;;;N;;;;; 2A57;SLOPING LARGE OR;Sm;0;ON;;;;;Y;;;;; 2A58;SLOPING LARGE AND;Sm;0;ON;;;;;Y;;;;; 2A59;LOGICAL OR OVERLAPPING LOGICAL AND;Sm;0;ON;;;;;N;;;;; 2A5A;LOGICAL AND WITH MIDDLE STEM;Sm;0;ON;;;;;N;;;;; 2A5B;LOGICAL OR WITH MIDDLE STEM;Sm;0;ON;;;;;N;;;;; 2A5C;LOGICAL AND WITH HORIZONTAL DASH;Sm;0;ON;;;;;N;;;;; 2A5D;LOGICAL OR WITH HORIZONTAL DASH;Sm;0;ON;;;;;N;;;;; 2A5E;LOGICAL AND WITH DOUBLE OVERBAR;Sm;0;ON;;;;;N;;;;; 2A5F;LOGICAL AND WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; 2A60;LOGICAL AND WITH DOUBLE UNDERBAR;Sm;0;ON;;;;;N;;;;; 2A61;SMALL VEE WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; 2A62;LOGICAL OR WITH DOUBLE OVERBAR;Sm;0;ON;;;;;N;;;;; 2A63;LOGICAL OR WITH DOUBLE UNDERBAR;Sm;0;ON;;;;;N;;;;; 2A64;Z NOTATION DOMAIN ANTIRESTRICTION;Sm;0;ON;;;;;Y;;;;; 2A65;Z NOTATION RANGE ANTIRESTRICTION;Sm;0;ON;;;;;Y;;;;; 2A66;EQUALS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;; 2A67;IDENTICAL WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; 2A68;TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2A69;TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2A6A;TILDE OPERATOR WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; 2A6B;TILDE OPERATOR WITH RISING DOTS;Sm;0;ON;;;;;Y;;;;; 2A6C;SIMILAR MINUS SIMILAR;Sm;0;ON;;;;;Y;;;;; 2A6D;CONGRUENT WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; 2A6E;EQUALS WITH ASTERISK;Sm;0;ON;;;;;N;;;;; 2A6F;ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT;Sm;0;ON;;;;;Y;;;;; 2A70;APPROXIMATELY EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2A71;EQUALS SIGN ABOVE PLUS SIGN;Sm;0;ON;;;;;N;;;;; 2A72;PLUS SIGN ABOVE EQUALS SIGN;Sm;0;ON;;;;;N;;;;; 2A73;EQUALS SIGN ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; 2A74;DOUBLE COLON EQUAL;Sm;0;ON; 003A 003A 003D;;;;Y;;;;; 2A75;TWO CONSECUTIVE EQUALS SIGNS;Sm;0;ON; 003D 003D;;;;N;;;;; 2A76;THREE CONSECUTIVE EQUALS SIGNS;Sm;0;ON; 003D 003D 003D;;;;N;;;;; 2A77;EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW;Sm;0;ON;;;;;N;;;;; 2A78;EQUIVALENT WITH FOUR DOTS ABOVE;Sm;0;ON;;;;;N;;;;; 2A79;LESS-THAN WITH CIRCLE INSIDE;Sm;0;ON;;;;;Y;;;;; 2A7A;GREATER-THAN WITH CIRCLE INSIDE;Sm;0;ON;;;;;Y;;;;; 2A7B;LESS-THAN WITH QUESTION MARK ABOVE;Sm;0;ON;;;;;Y;;;;; 2A7C;GREATER-THAN WITH QUESTION MARK ABOVE;Sm;0;ON;;;;;Y;;;;; 2A7D;LESS-THAN OR SLANTED EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2A7E;GREATER-THAN OR SLANTED EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2A7F;LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;; 2A80;GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;; 2A81;LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; 2A82;GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; 2A83;LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT;Sm;0;ON;;;;;Y;;;;; 2A84;GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT;Sm;0;ON;;;;;Y;;;;; 2A85;LESS-THAN OR APPROXIMATE;Sm;0;ON;;;;;Y;;;;; 2A86;GREATER-THAN OR APPROXIMATE;Sm;0;ON;;;;;Y;;;;; 2A87;LESS-THAN AND SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2A88;GREATER-THAN AND SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2A89;LESS-THAN AND NOT APPROXIMATE;Sm;0;ON;;;;;Y;;;;; 2A8A;GREATER-THAN AND NOT APPROXIMATE;Sm;0;ON;;;;;Y;;;;; 2A8B;LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 2A8C;GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN;Sm;0;ON;;;;;Y;;;;; 2A8D;LESS-THAN ABOVE SIMILAR OR EQUAL;Sm;0;ON;;;;;Y;;;;; 2A8E;GREATER-THAN ABOVE SIMILAR OR EQUAL;Sm;0;ON;;;;;Y;;;;; 2A8F;LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 2A90;GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN;Sm;0;ON;;;;;Y;;;;; 2A91;LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL;Sm;0;ON;;;;;Y;;;;; 2A92;GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL;Sm;0;ON;;;;;Y;;;;; 2A93;LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;; 2A94;GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;; 2A95;SLANTED EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;; 2A96;SLANTED EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 2A97;SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;; 2A98;SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;; 2A99;DOUBLE-LINE EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;; 2A9A;DOUBLE-LINE EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 2A9B;DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;; 2A9C;DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 2A9D;SIMILAR OR LESS-THAN;Sm;0;ON;;;;;Y;;;;; 2A9E;SIMILAR OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 2A9F;SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; 2AA0;SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; 2AA1;DOUBLE NESTED LESS-THAN;Sm;0;ON;;;;;Y;;;;; 2AA2;DOUBLE NESTED GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 2AA3;DOUBLE NESTED LESS-THAN WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; 2AA4;GREATER-THAN OVERLAPPING LESS-THAN;Sm;0;ON;;;;;N;;;;; 2AA5;GREATER-THAN BESIDE LESS-THAN;Sm;0;ON;;;;;N;;;;; 2AA6;LESS-THAN CLOSED BY CURVE;Sm;0;ON;;;;;Y;;;;; 2AA7;GREATER-THAN CLOSED BY CURVE;Sm;0;ON;;;;;Y;;;;; 2AA8;LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;; 2AA9;GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;; 2AAA;SMALLER THAN;Sm;0;ON;;;;;Y;;;;; 2AAB;LARGER THAN;Sm;0;ON;;;;;Y;;;;; 2AAC;SMALLER THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AAD;LARGER THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AAE;EQUALS SIGN WITH BUMPY ABOVE;Sm;0;ON;;;;;N;;;;; 2AAF;PRECEDES ABOVE SINGLE-LINE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; 2AB0;SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; 2AB1;PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AB2;SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AB3;PRECEDES ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; 2AB4;SUCCEEDS ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; 2AB5;PRECEDES ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AB6;SUCCEEDS ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AB7;PRECEDES ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AB8;SUCCEEDS ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AB9;PRECEDES ABOVE NOT ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2ABA;SUCCEEDS ABOVE NOT ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2ABB;DOUBLE PRECEDES;Sm;0;ON;;;;;Y;;;;; 2ABC;DOUBLE SUCCEEDS;Sm;0;ON;;;;;Y;;;;; 2ABD;SUBSET WITH DOT;Sm;0;ON;;;;;Y;;;;; 2ABE;SUPERSET WITH DOT;Sm;0;ON;;;;;Y;;;;; 2ABF;SUBSET WITH PLUS SIGN BELOW;Sm;0;ON;;;;;Y;;;;; 2AC0;SUPERSET WITH PLUS SIGN BELOW;Sm;0;ON;;;;;Y;;;;; 2AC1;SUBSET WITH MULTIPLICATION SIGN BELOW;Sm;0;ON;;;;;Y;;;;; 2AC2;SUPERSET WITH MULTIPLICATION SIGN BELOW;Sm;0;ON;;;;;Y;;;;; 2AC3;SUBSET OF OR EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; 2AC4;SUPERSET OF OR EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; 2AC5;SUBSET OF ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; 2AC6;SUPERSET OF ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; 2AC7;SUBSET OF ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; 2AC8;SUPERSET OF ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; 2AC9;SUBSET OF ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2ACA;SUPERSET OF ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2ACB;SUBSET OF ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2ACC;SUPERSET OF ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2ACD;SQUARE LEFT OPEN BOX OPERATOR;Sm;0;ON;;;;;Y;;;;; 2ACE;SQUARE RIGHT OPEN BOX OPERATOR;Sm;0;ON;;;;;Y;;;;; 2ACF;CLOSED SUBSET;Sm;0;ON;;;;;Y;;;;; 2AD0;CLOSED SUPERSET;Sm;0;ON;;;;;Y;;;;; 2AD1;CLOSED SUBSET OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AD2;CLOSED SUPERSET OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AD3;SUBSET ABOVE SUPERSET;Sm;0;ON;;;;;Y;;;;; 2AD4;SUPERSET ABOVE SUBSET;Sm;0;ON;;;;;Y;;;;; 2AD5;SUBSET ABOVE SUBSET;Sm;0;ON;;;;;Y;;;;; 2AD6;SUPERSET ABOVE SUPERSET;Sm;0;ON;;;;;Y;;;;; 2AD7;SUPERSET BESIDE SUBSET;Sm;0;ON;;;;;N;;;;; 2AD8;SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET;Sm;0;ON;;;;;N;;;;; 2AD9;ELEMENT OF OPENING DOWNWARDS;Sm;0;ON;;;;;N;;;;; 2ADA;PITCHFORK WITH TEE TOP;Sm;0;ON;;;;;N;;;;; 2ADB;TRANSVERSAL INTERSECTION;Sm;0;ON;;;;;N;;;;; 2ADC;FORKING;Sm;0;ON;2ADD 0338;;;;Y;;;;; 2ADD;NONFORKING;Sm;0;ON;;;;;N;;;;; 2ADE;SHORT LEFT TACK;Sm;0;ON;;;;;Y;;;;; 2ADF;SHORT DOWN TACK;Sm;0;ON;;;;;N;;;;; 2AE0;SHORT UP TACK;Sm;0;ON;;;;;N;;;;; 2AE1;PERPENDICULAR WITH S;Sm;0;ON;;;;;N;;;;; 2AE2;VERTICAL BAR TRIPLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;; 2AE3;DOUBLE VERTICAL BAR LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;; 2AE4;VERTICAL BAR DOUBLE LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;; 2AE5;DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;; 2AE6;LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL;Sm;0;ON;;;;;Y;;;;; 2AE7;SHORT DOWN TACK WITH OVERBAR;Sm;0;ON;;;;;N;;;;; 2AE8;SHORT UP TACK WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; 2AE9;SHORT UP TACK ABOVE SHORT DOWN TACK;Sm;0;ON;;;;;N;;;;; 2AEA;DOUBLE DOWN TACK;Sm;0;ON;;;;;N;;;;; 2AEB;DOUBLE UP TACK;Sm;0;ON;;;;;N;;;;; 2AEC;DOUBLE STROKE NOT SIGN;Sm;0;ON;;;;;Y;;;;; 2AED;REVERSED DOUBLE STROKE NOT SIGN;Sm;0;ON;;;;;Y;;;;; 2AEE;DOES NOT DIVIDE WITH REVERSED NEGATION SLASH;Sm;0;ON;;;;;Y;;;;; 2AEF;VERTICAL LINE WITH CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;; 2AF0;VERTICAL LINE WITH CIRCLE BELOW;Sm;0;ON;;;;;N;;;;; 2AF1;DOWN TACK WITH CIRCLE BELOW;Sm;0;ON;;;;;N;;;;; 2AF2;PARALLEL WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; 2AF3;PARALLEL WITH TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; 2AF4;TRIPLE VERTICAL BAR BINARY RELATION;Sm;0;ON;;;;;N;;;;; 2AF5;TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; 2AF6;TRIPLE COLON OPERATOR;Sm;0;ON;;;;;N;;;;; 2AF7;TRIPLE NESTED LESS-THAN;Sm;0;ON;;;;;Y;;;;; 2AF8;TRIPLE NESTED GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 2AF9;DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AFA;DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AFB;TRIPLE SOLIDUS BINARY RELATION;Sm;0;ON;;;;;Y;;;;; 2AFC;LARGE TRIPLE VERTICAL BAR OPERATOR;Sm;0;ON;;;;;N;;;;; 2AFD;DOUBLE SOLIDUS OPERATOR;Sm;0;ON;;;;;Y;;;;; 2AFE;WHITE VERTICAL BAR;Sm;0;ON;;;;;N;;;;; 2AFF;N-ARY WHITE VERTICAL BAR;Sm;0;ON;;;;;N;;;;; 2B00;NORTH EAST WHITE ARROW;So;0;ON;;;;;N;;;;; 2B01;NORTH WEST WHITE ARROW;So;0;ON;;;;;N;;;;; 2B02;SOUTH EAST WHITE ARROW;So;0;ON;;;;;N;;;;; 2B03;SOUTH WEST WHITE ARROW;So;0;ON;;;;;N;;;;; 2B04;LEFT RIGHT WHITE ARROW;So;0;ON;;;;;N;;;;; 2B05;LEFTWARDS BLACK ARROW;So;0;ON;;;;;N;;;;; 2B06;UPWARDS BLACK ARROW;So;0;ON;;;;;N;;;;; 2B07;DOWNWARDS BLACK ARROW;So;0;ON;;;;;N;;;;; 2B08;NORTH EAST BLACK ARROW;So;0;ON;;;;;N;;;;; 2B09;NORTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;; 2B0A;SOUTH EAST BLACK ARROW;So;0;ON;;;;;N;;;;; 2B0B;SOUTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;; 2B0C;LEFT RIGHT BLACK ARROW;So;0;ON;;;;;N;;;;; 2B0D;UP DOWN BLACK ARROW;So;0;ON;;;;;N;;;;; 2B0E;RIGHTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;; 2B0F;RIGHTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;; 2B10;LEFTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;; 2B11;LEFTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;; 2B12;SQUARE WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;; 2B13;SQUARE WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;; 2B14;SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; 2B15;SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; 2B16;DIAMOND WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; 2B17;DIAMOND WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; 2B18;DIAMOND WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;; 2B19;DIAMOND WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;; 2B1A;DOTTED SQUARE;So;0;ON;;;;;N;;;;; 2B1B;BLACK LARGE SQUARE;So;0;ON;;;;;N;;;;; 2B1C;WHITE LARGE SQUARE;So;0;ON;;;;;N;;;;; 2B1D;BLACK VERY SMALL SQUARE;So;0;ON;;;;;N;;;;; 2B1E;WHITE VERY SMALL SQUARE;So;0;ON;;;;;N;;;;; 2B1F;BLACK PENTAGON;So;0;ON;;;;;N;;;;; 2B20;WHITE PENTAGON;So;0;ON;;;;;N;;;;; 2B21;WHITE HEXAGON;So;0;ON;;;;;N;;;;; 2B22;BLACK HEXAGON;So;0;ON;;;;;N;;;;; 2B23;HORIZONTAL BLACK HEXAGON;So;0;ON;;;;;N;;;;; 2B24;BLACK LARGE CIRCLE;So;0;ON;;;;;N;;;;; 2B25;BLACK MEDIUM DIAMOND;So;0;ON;;;;;N;;;;; 2B26;WHITE MEDIUM DIAMOND;So;0;ON;;;;;N;;;;; 2B27;BLACK MEDIUM LOZENGE;So;0;ON;;;;;N;;;;; 2B28;WHITE MEDIUM LOZENGE;So;0;ON;;;;;N;;;;; 2B29;BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;; 2B2A;BLACK SMALL LOZENGE;So;0;ON;;;;;N;;;;; 2B2B;WHITE SMALL LOZENGE;So;0;ON;;;;;N;;;;; 2B2C;BLACK HORIZONTAL ELLIPSE;So;0;ON;;;;;N;;;;; 2B2D;WHITE HORIZONTAL ELLIPSE;So;0;ON;;;;;N;;;;; 2B2E;BLACK VERTICAL ELLIPSE;So;0;ON;;;;;N;;;;; 2B2F;WHITE VERTICAL ELLIPSE;So;0;ON;;;;;N;;;;; 2B30;LEFT ARROW WITH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; 2B31;THREE LEFTWARDS ARROWS;Sm;0;ON;;;;;N;;;;; 2B32;LEFT ARROW WITH CIRCLED PLUS;Sm;0;ON;;;;;N;;;;; 2B33;LONG LEFTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;; 2B34;LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2B35;LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2B36;LEFTWARDS TWO-HEADED ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; 2B37;LEFTWARDS TWO-HEADED TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;; 2B38;LEFTWARDS ARROW WITH DOTTED STEM;Sm;0;ON;;;;;N;;;;; 2B39;LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2B3A;LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2B3B;LEFTWARDS TWO-HEADED ARROW WITH TAIL;Sm;0;ON;;;;;N;;;;; 2B3C;LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2B3D;LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2B3E;LEFTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;; 2B3F;WAVE ARROW POINTING DIRECTLY LEFT;Sm;0;ON;;;;;N;;;;; 2B40;EQUALS SIGN ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2B41;REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2B42;LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;; 2B43;RIGHTWARDS ARROW THROUGH GREATER-THAN;Sm;0;ON;;;;;N;;;;; 2B44;RIGHTWARDS ARROW THROUGH SUPERSET;Sm;0;ON;;;;;N;;;;; 2B45;LEFTWARDS QUADRUPLE ARROW;So;0;ON;;;;;N;;;;; 2B46;RIGHTWARDS QUADRUPLE ARROW;So;0;ON;;;;;N;;;;; 2B47;REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2B48;RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;; 2B49;TILDE OPERATOR ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2B4A;LEFTWARDS ARROW ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;; 2B4B;LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;; 2B4C;RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;; 2B4D;DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW;So;0;ON;;;;;N;;;;; 2B4E;SHORT SLANTED NORTH ARROW;So;0;ON;;;;;N;;;;; 2B4F;SHORT BACKSLANTED SOUTH ARROW;So;0;ON;;;;;N;;;;; 2B50;WHITE MEDIUM STAR;So;0;ON;;;;;N;;;;; 2B51;BLACK SMALL STAR;So;0;ON;;;;;N;;;;; 2B52;WHITE SMALL STAR;So;0;ON;;;;;N;;;;; 2B53;BLACK RIGHT-POINTING PENTAGON;So;0;ON;;;;;N;;;;; 2B54;WHITE RIGHT-POINTING PENTAGON;So;0;ON;;;;;N;;;;; 2B55;HEAVY LARGE CIRCLE;So;0;ON;;;;;N;;;;; 2B56;HEAVY OVAL WITH OVAL INSIDE;So;0;ON;;;;;N;;;;; 2B57;HEAVY CIRCLE WITH CIRCLE INSIDE;So;0;ON;;;;;N;;;;; 2B58;HEAVY CIRCLE;So;0;ON;;;;;N;;;;; 2B59;HEAVY CIRCLED SALTIRE;So;0;ON;;;;;N;;;;; 2B5A;SLANTED NORTH ARROW WITH HOOKED HEAD;So;0;ON;;;;;N;;;;; 2B5B;BACKSLANTED SOUTH ARROW WITH HOOKED TAIL;So;0;ON;;;;;N;;;;; 2B5C;SLANTED NORTH ARROW WITH HORIZONTAL TAIL;So;0;ON;;;;;N;;;;; 2B5D;BACKSLANTED SOUTH ARROW WITH HORIZONTAL TAIL;So;0;ON;;;;;N;;;;; 2B5E;BENT ARROW POINTING DOWNWARDS THEN NORTH EAST;So;0;ON;;;;;N;;;;; 2B5F;SHORT BENT ARROW POINTING DOWNWARDS THEN NORTH EAST;So;0;ON;;;;;N;;;;; 2B60;LEFTWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B61;UPWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B62;RIGHTWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B63;DOWNWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B64;LEFT RIGHT TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B65;UP DOWN TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B66;NORTH WEST TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B67;NORTH EAST TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B68;SOUTH EAST TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B69;SOUTH WEST TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B6A;LEFTWARDS TRIANGLE-HEADED DASHED ARROW;So;0;ON;;;;;N;;;;; 2B6B;UPWARDS TRIANGLE-HEADED DASHED ARROW;So;0;ON;;;;;N;;;;; 2B6C;RIGHTWARDS TRIANGLE-HEADED DASHED ARROW;So;0;ON;;;;;N;;;;; 2B6D;DOWNWARDS TRIANGLE-HEADED DASHED ARROW;So;0;ON;;;;;N;;;;; 2B6E;CLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;; 2B6F;ANTICLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;; 2B70;LEFTWARDS TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;; 2B71;UPWARDS TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;; 2B72;RIGHTWARDS TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;; 2B73;DOWNWARDS TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;; 2B76;NORTH WEST TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;; 2B77;NORTH EAST TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;; 2B78;SOUTH EAST TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;; 2B79;SOUTH WEST TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;; 2B7A;LEFTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE;So;0;ON;;;;;N;;;;; 2B7B;UPWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE;So;0;ON;;;;;N;;;;; 2B7C;RIGHTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE;So;0;ON;;;;;N;;;;; 2B7D;DOWNWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE;So;0;ON;;;;;N;;;;; 2B7E;HORIZONTAL TAB KEY;So;0;ON;;;;;N;;;;; 2B7F;VERTICAL TAB KEY;So;0;ON;;;;;N;;;;; 2B80;LEFTWARDS TRIANGLE-HEADED ARROW OVER RIGHTWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B81;UPWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF DOWNWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B82;RIGHTWARDS TRIANGLE-HEADED ARROW OVER LEFTWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B83;DOWNWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF UPWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B84;LEFTWARDS TRIANGLE-HEADED PAIRED ARROWS;So;0;ON;;;;;N;;;;; 2B85;UPWARDS TRIANGLE-HEADED PAIRED ARROWS;So;0;ON;;;;;N;;;;; 2B86;RIGHTWARDS TRIANGLE-HEADED PAIRED ARROWS;So;0;ON;;;;;N;;;;; 2B87;DOWNWARDS TRIANGLE-HEADED PAIRED ARROWS;So;0;ON;;;;;N;;;;; 2B88;LEFTWARDS BLACK CIRCLED WHITE ARROW;So;0;ON;;;;;N;;;;; 2B89;UPWARDS BLACK CIRCLED WHITE ARROW;So;0;ON;;;;;N;;;;; 2B8A;RIGHTWARDS BLACK CIRCLED WHITE ARROW;So;0;ON;;;;;N;;;;; 2B8B;DOWNWARDS BLACK CIRCLED WHITE ARROW;So;0;ON;;;;;N;;;;; 2B8C;ANTICLOCKWISE TRIANGLE-HEADED RIGHT U-SHAPED ARROW;So;0;ON;;;;;N;;;;; 2B8D;ANTICLOCKWISE TRIANGLE-HEADED BOTTOM U-SHAPED ARROW;So;0;ON;;;;;N;;;;; 2B8E;ANTICLOCKWISE TRIANGLE-HEADED LEFT U-SHAPED ARROW;So;0;ON;;;;;N;;;;; 2B8F;ANTICLOCKWISE TRIANGLE-HEADED TOP U-SHAPED ARROW;So;0;ON;;;;;N;;;;; 2B90;RETURN LEFT;So;0;ON;;;;;N;;;;; 2B91;RETURN RIGHT;So;0;ON;;;;;N;;;;; 2B92;NEWLINE LEFT;So;0;ON;;;;;N;;;;; 2B93;NEWLINE RIGHT;So;0;ON;;;;;N;;;;; 2B94;FOUR CORNER ARROWS CIRCLING ANTICLOCKWISE;So;0;ON;;;;;N;;;;; 2B95;RIGHTWARDS BLACK ARROW;So;0;ON;;;;;N;;;;; 2B97;SYMBOL FOR TYPE A ELECTRONICS;So;0;ON;;;;;N;;;;; 2B98;THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2B99;THREE-D RIGHT-LIGHTED UPWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2B9A;THREE-D TOP-LIGHTED RIGHTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2B9B;THREE-D LEFT-LIGHTED DOWNWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2B9C;BLACK LEFTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2B9D;BLACK UPWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2B9E;BLACK RIGHTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2B9F;BLACK DOWNWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2BA0;DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS;So;0;ON;;;;;N;;;;; 2BA1;DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS;So;0;ON;;;;;N;;;;; 2BA2;UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS;So;0;ON;;;;;N;;;;; 2BA3;UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS;So;0;ON;;;;;N;;;;; 2BA4;LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS;So;0;ON;;;;;N;;;;; 2BA5;RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS;So;0;ON;;;;;N;;;;; 2BA6;LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS;So;0;ON;;;;;N;;;;; 2BA7;RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS;So;0;ON;;;;;N;;;;; 2BA8;BLACK CURVED DOWNWARDS AND LEFTWARDS ARROW;So;0;ON;;;;;N;;;;; 2BA9;BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;;;;; 2BAA;BLACK CURVED UPWARDS AND LEFTWARDS ARROW;So;0;ON;;;;;N;;;;; 2BAB;BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;;;;; 2BAC;BLACK CURVED LEFTWARDS AND UPWARDS ARROW;So;0;ON;;;;;N;;;;; 2BAD;BLACK CURVED RIGHTWARDS AND UPWARDS ARROW;So;0;ON;;;;;N;;;;; 2BAE;BLACK CURVED LEFTWARDS AND DOWNWARDS ARROW;So;0;ON;;;;;N;;;;; 2BAF;BLACK CURVED RIGHTWARDS AND DOWNWARDS ARROW;So;0;ON;;;;;N;;;;; 2BB0;RIBBON ARROW DOWN LEFT;So;0;ON;;;;;N;;;;; 2BB1;RIBBON ARROW DOWN RIGHT;So;0;ON;;;;;N;;;;; 2BB2;RIBBON ARROW UP LEFT;So;0;ON;;;;;N;;;;; 2BB3;RIBBON ARROW UP RIGHT;So;0;ON;;;;;N;;;;; 2BB4;RIBBON ARROW LEFT UP;So;0;ON;;;;;N;;;;; 2BB5;RIBBON ARROW RIGHT UP;So;0;ON;;;;;N;;;;; 2BB6;RIBBON ARROW LEFT DOWN;So;0;ON;;;;;N;;;;; 2BB7;RIBBON ARROW RIGHT DOWN;So;0;ON;;;;;N;;;;; 2BB8;UPWARDS WHITE ARROW FROM BAR WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;; 2BB9;UP ARROWHEAD IN A RECTANGLE BOX;So;0;ON;;;;;N;;;;; 2BBA;OVERLAPPING WHITE SQUARES;So;0;ON;;;;;N;;;;; 2BBB;OVERLAPPING WHITE AND BLACK SQUARES;So;0;ON;;;;;N;;;;; 2BBC;OVERLAPPING BLACK SQUARES;So;0;ON;;;;;N;;;;; 2BBD;BALLOT BOX WITH LIGHT X;So;0;ON;;;;;N;;;;; 2BBE;CIRCLED X;So;0;ON;;;;;N;;;;; 2BBF;CIRCLED BOLD X;So;0;ON;;;;;N;;;;; 2BC0;BLACK SQUARE CENTRED;So;0;ON;;;;;N;;;;; 2BC1;BLACK DIAMOND CENTRED;So;0;ON;;;;;N;;;;; 2BC2;TURNED BLACK PENTAGON;So;0;ON;;;;;N;;;;; 2BC3;HORIZONTAL BLACK OCTAGON;So;0;ON;;;;;N;;;;; 2BC4;BLACK OCTAGON;So;0;ON;;;;;N;;;;; 2BC5;BLACK MEDIUM UP-POINTING TRIANGLE CENTRED;So;0;ON;;;;;N;;;;; 2BC6;BLACK MEDIUM DOWN-POINTING TRIANGLE CENTRED;So;0;ON;;;;;N;;;;; 2BC7;BLACK MEDIUM LEFT-POINTING TRIANGLE CENTRED;So;0;ON;;;;;N;;;;; 2BC8;BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED;So;0;ON;;;;;N;;;;; 2BC9;NEPTUNE FORM TWO;So;0;ON;;;;;N;;;;; 2BCA;TOP HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; 2BCB;BOTTOM HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; 2BCC;LIGHT FOUR POINTED BLACK CUSP;So;0;ON;;;;;N;;;;; 2BCD;ROTATED LIGHT FOUR POINTED BLACK CUSP;So;0;ON;;;;;N;;;;; 2BCE;WHITE FOUR POINTED CUSP;So;0;ON;;;;;N;;;;; 2BCF;ROTATED WHITE FOUR POINTED CUSP;So;0;ON;;;;;N;;;;; 2BD0;SQUARE POSITION INDICATOR;So;0;ON;;;;;N;;;;; 2BD1;UNCERTAINTY SIGN;So;0;ON;;;;;N;;;;; 2BD2;GROUP MARK;So;0;ON;;;;;N;;;;; 2BD3;PLUTO FORM TWO;So;0;ON;;;;;N;;;;; 2BD4;PLUTO FORM THREE;So;0;ON;;;;;N;;;;; 2BD5;PLUTO FORM FOUR;So;0;ON;;;;;N;;;;; 2BD6;PLUTO FORM FIVE;So;0;ON;;;;;N;;;;; 2BD7;TRANSPLUTO;So;0;ON;;;;;N;;;;; 2BD8;PROSERPINA;So;0;ON;;;;;N;;;;; 2BD9;ASTRAEA;So;0;ON;;;;;N;;;;; 2BDA;HYGIEA;So;0;ON;;;;;N;;;;; 2BDB;PHOLUS;So;0;ON;;;;;N;;;;; 2BDC;NESSUS;So;0;ON;;;;;N;;;;; 2BDD;WHITE MOON SELENA;So;0;ON;;;;;N;;;;; 2BDE;BLACK DIAMOND ON CROSS;So;0;ON;;;;;N;;;;; 2BDF;TRUE LIGHT MOON ARTA;So;0;ON;;;;;N;;;;; 2BE0;CUPIDO;So;0;ON;;;;;N;;;;; 2BE1;HADES;So;0;ON;;;;;N;;;;; 2BE2;ZEUS;So;0;ON;;;;;N;;;;; 2BE3;KRONOS;So;0;ON;;;;;N;;;;; 2BE4;APOLLON;So;0;ON;;;;;N;;;;; 2BE5;ADMETOS;So;0;ON;;;;;N;;;;; 2BE6;VULCANUS;So;0;ON;;;;;N;;;;; 2BE7;POSEIDON;So;0;ON;;;;;N;;;;; 2BE8;LEFT HALF BLACK STAR;So;0;ON;;;;;N;;;;; 2BE9;RIGHT HALF BLACK STAR;So;0;ON;;;;;N;;;;; 2BEA;STAR WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; 2BEB;STAR WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; 2BEC;LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;; 2BED;UPWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;; 2BEE;RIGHTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;; 2BEF;DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;; 2BF0;ERIS FORM ONE;So;0;ON;;;;;N;;;;; 2BF1;ERIS FORM TWO;So;0;ON;;;;;N;;;;; 2BF2;SEDNA;So;0;ON;;;;;N;;;;; 2BF3;RUSSIAN ASTROLOGICAL SYMBOL VIGINTILE;So;0;ON;;;;;N;;;;; 2BF4;RUSSIAN ASTROLOGICAL SYMBOL NOVILE;So;0;ON;;;;;N;;;;; 2BF5;RUSSIAN ASTROLOGICAL SYMBOL QUINTILE;So;0;ON;;;;;N;;;;; 2BF6;RUSSIAN ASTROLOGICAL SYMBOL BINOVILE;So;0;ON;;;;;N;;;;; 2BF7;RUSSIAN ASTROLOGICAL SYMBOL SENTAGON;So;0;ON;;;;;N;;;;; 2BF8;RUSSIAN ASTROLOGICAL SYMBOL TREDECILE;So;0;ON;;;;;N;;;;; 2BF9;EQUALS SIGN WITH INFINITY BELOW;So;0;ON;;;;;N;;;;; 2BFA;UNITED SYMBOL;So;0;ON;;;;;N;;;;; 2BFB;SEPARATED SYMBOL;So;0;ON;;;;;N;;;;; 2BFC;DOUBLED SYMBOL;So;0;ON;;;;;N;;;;; 2BFD;PASSED SYMBOL;So;0;ON;;;;;N;;;;; 2BFE;REVERSED RIGHT ANGLE;So;0;ON;;;;;Y;;;;; 2BFF;HELLSCHREIBER PAUSE SYMBOL;So;0;ON;;;;;N;;;;; 2C00;GLAGOLITIC CAPITAL LETTER AZU;Lu;0;L;;;;;N;;;;2C30; 2C01;GLAGOLITIC CAPITAL LETTER BUKY;Lu;0;L;;;;;N;;;;2C31; 2C02;GLAGOLITIC CAPITAL LETTER VEDE;Lu;0;L;;;;;N;;;;2C32; 2C03;GLAGOLITIC CAPITAL LETTER GLAGOLI;Lu;0;L;;;;;N;;;;2C33; 2C04;GLAGOLITIC CAPITAL LETTER DOBRO;Lu;0;L;;;;;N;;;;2C34; 2C05;GLAGOLITIC CAPITAL LETTER YESTU;Lu;0;L;;;;;N;;;;2C35; 2C06;GLAGOLITIC CAPITAL LETTER ZHIVETE;Lu;0;L;;;;;N;;;;2C36; 2C07;GLAGOLITIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;2C37; 2C08;GLAGOLITIC CAPITAL LETTER ZEMLJA;Lu;0;L;;;;;N;;;;2C38; 2C09;GLAGOLITIC CAPITAL LETTER IZHE;Lu;0;L;;;;;N;;;;2C39; 2C0A;GLAGOLITIC CAPITAL LETTER INITIAL IZHE;Lu;0;L;;;;;N;;;;2C3A; 2C0B;GLAGOLITIC CAPITAL LETTER I;Lu;0;L;;;;;N;;;;2C3B; 2C0C;GLAGOLITIC CAPITAL LETTER DJERVI;Lu;0;L;;;;;N;;;;2C3C; 2C0D;GLAGOLITIC CAPITAL LETTER KAKO;Lu;0;L;;;;;N;;;;2C3D; 2C0E;GLAGOLITIC CAPITAL LETTER LJUDIJE;Lu;0;L;;;;;N;;;;2C3E; 2C0F;GLAGOLITIC CAPITAL LETTER MYSLITE;Lu;0;L;;;;;N;;;;2C3F; 2C10;GLAGOLITIC CAPITAL LETTER NASHI;Lu;0;L;;;;;N;;;;2C40; 2C11;GLAGOLITIC CAPITAL LETTER ONU;Lu;0;L;;;;;N;;;;2C41; 2C12;GLAGOLITIC CAPITAL LETTER POKOJI;Lu;0;L;;;;;N;;;;2C42; 2C13;GLAGOLITIC CAPITAL LETTER RITSI;Lu;0;L;;;;;N;;;;2C43; 2C14;GLAGOLITIC CAPITAL LETTER SLOVO;Lu;0;L;;;;;N;;;;2C44; 2C15;GLAGOLITIC CAPITAL LETTER TVRIDO;Lu;0;L;;;;;N;;;;2C45; 2C16;GLAGOLITIC CAPITAL LETTER UKU;Lu;0;L;;;;;N;;;;2C46; 2C17;GLAGOLITIC CAPITAL LETTER FRITU;Lu;0;L;;;;;N;;;;2C47; 2C18;GLAGOLITIC CAPITAL LETTER HERU;Lu;0;L;;;;;N;;;;2C48; 2C19;GLAGOLITIC CAPITAL LETTER OTU;Lu;0;L;;;;;N;;;;2C49; 2C1A;GLAGOLITIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;2C4A; 2C1B;GLAGOLITIC CAPITAL LETTER SHTA;Lu;0;L;;;;;N;;;;2C4B; 2C1C;GLAGOLITIC CAPITAL LETTER TSI;Lu;0;L;;;;;N;;;;2C4C; 2C1D;GLAGOLITIC CAPITAL LETTER CHRIVI;Lu;0;L;;;;;N;;;;2C4D; 2C1E;GLAGOLITIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;2C4E; 2C1F;GLAGOLITIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;;;;2C4F; 2C20;GLAGOLITIC CAPITAL LETTER YERI;Lu;0;L;;;;;N;;;;2C50; 2C21;GLAGOLITIC CAPITAL LETTER YATI;Lu;0;L;;;;;N;;;;2C51; 2C22;GLAGOLITIC CAPITAL LETTER SPIDERY HA;Lu;0;L;;;;;N;;;;2C52; 2C23;GLAGOLITIC CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;2C53; 2C24;GLAGOLITIC CAPITAL LETTER SMALL YUS;Lu;0;L;;;;;N;;;;2C54; 2C25;GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL;Lu;0;L;;;;;N;;;;2C55; 2C26;GLAGOLITIC CAPITAL LETTER YO;Lu;0;L;;;;;N;;;;2C56; 2C27;GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS;Lu;0;L;;;;;N;;;;2C57; 2C28;GLAGOLITIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;2C58; 2C29;GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS;Lu;0;L;;;;;N;;;;2C59; 2C2A;GLAGOLITIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;2C5A; 2C2B;GLAGOLITIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;2C5B; 2C2C;GLAGOLITIC CAPITAL LETTER SHTAPIC;Lu;0;L;;;;;N;;;;2C5C; 2C2D;GLAGOLITIC CAPITAL LETTER TROKUTASTI A;Lu;0;L;;;;;N;;;;2C5D; 2C2E;GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE;Lu;0;L;;;;;N;;;;2C5E; 2C2F;GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI;Lu;0;L;;;;;N;;;;2C5F; 2C30;GLAGOLITIC SMALL LETTER AZU;Ll;0;L;;;;;N;;;2C00;;2C00 2C31;GLAGOLITIC SMALL LETTER BUKY;Ll;0;L;;;;;N;;;2C01;;2C01 2C32;GLAGOLITIC SMALL LETTER VEDE;Ll;0;L;;;;;N;;;2C02;;2C02 2C33;GLAGOLITIC SMALL LETTER GLAGOLI;Ll;0;L;;;;;N;;;2C03;;2C03 2C34;GLAGOLITIC SMALL LETTER DOBRO;Ll;0;L;;;;;N;;;2C04;;2C04 2C35;GLAGOLITIC SMALL LETTER YESTU;Ll;0;L;;;;;N;;;2C05;;2C05 2C36;GLAGOLITIC SMALL LETTER ZHIVETE;Ll;0;L;;;;;N;;;2C06;;2C06 2C37;GLAGOLITIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;2C07;;2C07 2C38;GLAGOLITIC SMALL LETTER ZEMLJA;Ll;0;L;;;;;N;;;2C08;;2C08 2C39;GLAGOLITIC SMALL LETTER IZHE;Ll;0;L;;;;;N;;;2C09;;2C09 2C3A;GLAGOLITIC SMALL LETTER INITIAL IZHE;Ll;0;L;;;;;N;;;2C0A;;2C0A 2C3B;GLAGOLITIC SMALL LETTER I;Ll;0;L;;;;;N;;;2C0B;;2C0B 2C3C;GLAGOLITIC SMALL LETTER DJERVI;Ll;0;L;;;;;N;;;2C0C;;2C0C 2C3D;GLAGOLITIC SMALL LETTER KAKO;Ll;0;L;;;;;N;;;2C0D;;2C0D 2C3E;GLAGOLITIC SMALL LETTER LJUDIJE;Ll;0;L;;;;;N;;;2C0E;;2C0E 2C3F;GLAGOLITIC SMALL LETTER MYSLITE;Ll;0;L;;;;;N;;;2C0F;;2C0F 2C40;GLAGOLITIC SMALL LETTER NASHI;Ll;0;L;;;;;N;;;2C10;;2C10 2C41;GLAGOLITIC SMALL LETTER ONU;Ll;0;L;;;;;N;;;2C11;;2C11 2C42;GLAGOLITIC SMALL LETTER POKOJI;Ll;0;L;;;;;N;;;2C12;;2C12 2C43;GLAGOLITIC SMALL LETTER RITSI;Ll;0;L;;;;;N;;;2C13;;2C13 2C44;GLAGOLITIC SMALL LETTER SLOVO;Ll;0;L;;;;;N;;;2C14;;2C14 2C45;GLAGOLITIC SMALL LETTER TVRIDO;Ll;0;L;;;;;N;;;2C15;;2C15 2C46;GLAGOLITIC SMALL LETTER UKU;Ll;0;L;;;;;N;;;2C16;;2C16 2C47;GLAGOLITIC SMALL LETTER FRITU;Ll;0;L;;;;;N;;;2C17;;2C17 2C48;GLAGOLITIC SMALL LETTER HERU;Ll;0;L;;;;;N;;;2C18;;2C18 2C49;GLAGOLITIC SMALL LETTER OTU;Ll;0;L;;;;;N;;;2C19;;2C19 2C4A;GLAGOLITIC SMALL LETTER PE;Ll;0;L;;;;;N;;;2C1A;;2C1A 2C4B;GLAGOLITIC SMALL LETTER SHTA;Ll;0;L;;;;;N;;;2C1B;;2C1B 2C4C;GLAGOLITIC SMALL LETTER TSI;Ll;0;L;;;;;N;;;2C1C;;2C1C 2C4D;GLAGOLITIC SMALL LETTER CHRIVI;Ll;0;L;;;;;N;;;2C1D;;2C1D 2C4E;GLAGOLITIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;2C1E;;2C1E 2C4F;GLAGOLITIC SMALL LETTER YERU;Ll;0;L;;;;;N;;;2C1F;;2C1F 2C50;GLAGOLITIC SMALL LETTER YERI;Ll;0;L;;;;;N;;;2C20;;2C20 2C51;GLAGOLITIC SMALL LETTER YATI;Ll;0;L;;;;;N;;;2C21;;2C21 2C52;GLAGOLITIC SMALL LETTER SPIDERY HA;Ll;0;L;;;;;N;;;2C22;;2C22 2C53;GLAGOLITIC SMALL LETTER YU;Ll;0;L;;;;;N;;;2C23;;2C23 2C54;GLAGOLITIC SMALL LETTER SMALL YUS;Ll;0;L;;;;;N;;;2C24;;2C24 2C55;GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL;Ll;0;L;;;;;N;;;2C25;;2C25 2C56;GLAGOLITIC SMALL LETTER YO;Ll;0;L;;;;;N;;;2C26;;2C26 2C57;GLAGOLITIC SMALL LETTER IOTATED SMALL YUS;Ll;0;L;;;;;N;;;2C27;;2C27 2C58;GLAGOLITIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;2C28;;2C28 2C59;GLAGOLITIC SMALL LETTER IOTATED BIG YUS;Ll;0;L;;;;;N;;;2C29;;2C29 2C5A;GLAGOLITIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;2C2A;;2C2A 2C5B;GLAGOLITIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;2C2B;;2C2B 2C5C;GLAGOLITIC SMALL LETTER SHTAPIC;Ll;0;L;;;;;N;;;2C2C;;2C2C 2C5D;GLAGOLITIC SMALL LETTER TROKUTASTI A;Ll;0;L;;;;;N;;;2C2D;;2C2D 2C5E;GLAGOLITIC SMALL LETTER LATINATE MYSLITE;Ll;0;L;;;;;N;;;2C2E;;2C2E 2C5F;GLAGOLITIC SMALL LETTER CAUDATE CHRIVI;Ll;0;L;;;;;N;;;2C2F;;2C2F 2C60;LATIN CAPITAL LETTER L WITH DOUBLE BAR;Lu;0;L;;;;;N;;;;2C61; 2C61;LATIN SMALL LETTER L WITH DOUBLE BAR;Ll;0;L;;;;;N;;;2C60;;2C60 2C62;LATIN CAPITAL LETTER L WITH MIDDLE TILDE;Lu;0;L;;;;;N;;;;026B; 2C63;LATIN CAPITAL LETTER P WITH STROKE;Lu;0;L;;;;;N;;;;1D7D; 2C64;LATIN CAPITAL LETTER R WITH TAIL;Lu;0;L;;;;;N;;;;027D; 2C65;LATIN SMALL LETTER A WITH STROKE;Ll;0;L;;;;;N;;;023A;;023A 2C66;LATIN SMALL LETTER T WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;023E;;023E 2C67;LATIN CAPITAL LETTER H WITH DESCENDER;Lu;0;L;;;;;N;;;;2C68; 2C68;LATIN SMALL LETTER H WITH DESCENDER;Ll;0;L;;;;;N;;;2C67;;2C67 2C69;LATIN CAPITAL LETTER K WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6A; 2C6A;LATIN SMALL LETTER K WITH DESCENDER;Ll;0;L;;;;;N;;;2C69;;2C69 2C6B;LATIN CAPITAL LETTER Z WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6C; 2C6C;LATIN SMALL LETTER Z WITH DESCENDER;Ll;0;L;;;;;N;;;2C6B;;2C6B 2C6D;LATIN CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;0251; 2C6E;LATIN CAPITAL LETTER M WITH HOOK;Lu;0;L;;;;;N;;;;0271; 2C6F;LATIN CAPITAL LETTER TURNED A;Lu;0;L;;;;;N;;;;0250; 2C70;LATIN CAPITAL LETTER TURNED ALPHA;Lu;0;L;;;;;N;;;;0252; 2C71;LATIN SMALL LETTER V WITH RIGHT HOOK;Ll;0;L;;;;;N;;;;; 2C72;LATIN CAPITAL LETTER W WITH HOOK;Lu;0;L;;;;;N;;;;2C73; 2C73;LATIN SMALL LETTER W WITH HOOK;Ll;0;L;;;;;N;;;2C72;;2C72 2C74;LATIN SMALL LETTER V WITH CURL;Ll;0;L;;;;;N;;;;; 2C75;LATIN CAPITAL LETTER HALF H;Lu;0;L;;;;;N;;;;2C76; 2C76;LATIN SMALL LETTER HALF H;Ll;0;L;;;;;N;;;2C75;;2C75 2C77;LATIN SMALL LETTER TAILLESS PHI;Ll;0;L;;;;;N;;;;; 2C78;LATIN SMALL LETTER E WITH NOTCH;Ll;0;L;;;;;N;;;;; 2C79;LATIN SMALL LETTER TURNED R WITH TAIL;Ll;0;L;;;;;N;;;;; 2C7A;LATIN SMALL LETTER O WITH LOW RING INSIDE;Ll;0;L;;;;;N;;;;; 2C7B;LATIN LETTER SMALL CAPITAL TURNED E;Ll;0;L;;;;;N;;;;; 2C7C;LATIN SUBSCRIPT SMALL LETTER J;Lm;0;L; 006A;;;;N;;;;; 2C7D;MODIFIER LETTER CAPITAL V;Lm;0;L; 0056;;;;N;;;;; 2C7E;LATIN CAPITAL LETTER S WITH SWASH TAIL;Lu;0;L;;;;;N;;;;023F; 2C7F;LATIN CAPITAL LETTER Z WITH SWASH TAIL;Lu;0;L;;;;;N;;;;0240; 2C80;COPTIC CAPITAL LETTER ALFA;Lu;0;L;;;;;N;;;;2C81; 2C81;COPTIC SMALL LETTER ALFA;Ll;0;L;;;;;N;;;2C80;;2C80 2C82;COPTIC CAPITAL LETTER VIDA;Lu;0;L;;;;;N;;;;2C83; 2C83;COPTIC SMALL LETTER VIDA;Ll;0;L;;;;;N;;;2C82;;2C82 2C84;COPTIC CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;2C85; 2C85;COPTIC SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;2C84;;2C84 2C86;COPTIC CAPITAL LETTER DALDA;Lu;0;L;;;;;N;;;;2C87; 2C87;COPTIC SMALL LETTER DALDA;Ll;0;L;;;;;N;;;2C86;;2C86 2C88;COPTIC CAPITAL LETTER EIE;Lu;0;L;;;;;N;;;;2C89; 2C89;COPTIC SMALL LETTER EIE;Ll;0;L;;;;;N;;;2C88;;2C88 2C8A;COPTIC CAPITAL LETTER SOU;Lu;0;L;;;;;N;;;;2C8B; 2C8B;COPTIC SMALL LETTER SOU;Ll;0;L;;;;;N;;;2C8A;;2C8A 2C8C;COPTIC CAPITAL LETTER ZATA;Lu;0;L;;;;;N;;;;2C8D; 2C8D;COPTIC SMALL LETTER ZATA;Ll;0;L;;;;;N;;;2C8C;;2C8C 2C8E;COPTIC CAPITAL LETTER HATE;Lu;0;L;;;;;N;;;;2C8F; 2C8F;COPTIC SMALL LETTER HATE;Ll;0;L;;;;;N;;;2C8E;;2C8E 2C90;COPTIC CAPITAL LETTER THETHE;Lu;0;L;;;;;N;;;;2C91; 2C91;COPTIC SMALL LETTER THETHE;Ll;0;L;;;;;N;;;2C90;;2C90 2C92;COPTIC CAPITAL LETTER IAUDA;Lu;0;L;;;;;N;;;;2C93; 2C93;COPTIC SMALL LETTER IAUDA;Ll;0;L;;;;;N;;;2C92;;2C92 2C94;COPTIC CAPITAL LETTER KAPA;Lu;0;L;;;;;N;;;;2C95; 2C95;COPTIC SMALL LETTER KAPA;Ll;0;L;;;;;N;;;2C94;;2C94 2C96;COPTIC CAPITAL LETTER LAULA;Lu;0;L;;;;;N;;;;2C97; 2C97;COPTIC SMALL LETTER LAULA;Ll;0;L;;;;;N;;;2C96;;2C96 2C98;COPTIC CAPITAL LETTER MI;Lu;0;L;;;;;N;;;;2C99; 2C99;COPTIC SMALL LETTER MI;Ll;0;L;;;;;N;;;2C98;;2C98 2C9A;COPTIC CAPITAL LETTER NI;Lu;0;L;;;;;N;;;;2C9B; 2C9B;COPTIC SMALL LETTER NI;Ll;0;L;;;;;N;;;2C9A;;2C9A 2C9C;COPTIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;2C9D; 2C9D;COPTIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;2C9C;;2C9C 2C9E;COPTIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;2C9F; 2C9F;COPTIC SMALL LETTER O;Ll;0;L;;;;;N;;;2C9E;;2C9E 2CA0;COPTIC CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;2CA1; 2CA1;COPTIC SMALL LETTER PI;Ll;0;L;;;;;N;;;2CA0;;2CA0 2CA2;COPTIC CAPITAL LETTER RO;Lu;0;L;;;;;N;;;;2CA3; 2CA3;COPTIC SMALL LETTER RO;Ll;0;L;;;;;N;;;2CA2;;2CA2 2CA4;COPTIC CAPITAL LETTER SIMA;Lu;0;L;;;;;N;;;;2CA5; 2CA5;COPTIC SMALL LETTER SIMA;Ll;0;L;;;;;N;;;2CA4;;2CA4 2CA6;COPTIC CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;2CA7; 2CA7;COPTIC SMALL LETTER TAU;Ll;0;L;;;;;N;;;2CA6;;2CA6 2CA8;COPTIC CAPITAL LETTER UA;Lu;0;L;;;;;N;;;;2CA9; 2CA9;COPTIC SMALL LETTER UA;Ll;0;L;;;;;N;;;2CA8;;2CA8 2CAA;COPTIC CAPITAL LETTER FI;Lu;0;L;;;;;N;;;;2CAB; 2CAB;COPTIC SMALL LETTER FI;Ll;0;L;;;;;N;;;2CAA;;2CAA 2CAC;COPTIC CAPITAL LETTER KHI;Lu;0;L;;;;;N;;;;2CAD; 2CAD;COPTIC SMALL LETTER KHI;Ll;0;L;;;;;N;;;2CAC;;2CAC 2CAE;COPTIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;2CAF; 2CAF;COPTIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;2CAE;;2CAE 2CB0;COPTIC CAPITAL LETTER OOU;Lu;0;L;;;;;N;;;;2CB1; 2CB1;COPTIC SMALL LETTER OOU;Ll;0;L;;;;;N;;;2CB0;;2CB0 2CB2;COPTIC CAPITAL LETTER DIALECT-P ALEF;Lu;0;L;;;;;N;;;;2CB3; 2CB3;COPTIC SMALL LETTER DIALECT-P ALEF;Ll;0;L;;;;;N;;;2CB2;;2CB2 2CB4;COPTIC CAPITAL LETTER OLD COPTIC AIN;Lu;0;L;;;;;N;;;;2CB5; 2CB5;COPTIC SMALL LETTER OLD COPTIC AIN;Ll;0;L;;;;;N;;;2CB4;;2CB4 2CB6;COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE;Lu;0;L;;;;;N;;;;2CB7; 2CB7;COPTIC SMALL LETTER CRYPTOGRAMMIC EIE;Ll;0;L;;;;;N;;;2CB6;;2CB6 2CB8;COPTIC CAPITAL LETTER DIALECT-P KAPA;Lu;0;L;;;;;N;;;;2CB9; 2CB9;COPTIC SMALL LETTER DIALECT-P KAPA;Ll;0;L;;;;;N;;;2CB8;;2CB8 2CBA;COPTIC CAPITAL LETTER DIALECT-P NI;Lu;0;L;;;;;N;;;;2CBB; 2CBB;COPTIC SMALL LETTER DIALECT-P NI;Ll;0;L;;;;;N;;;2CBA;;2CBA 2CBC;COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI;Lu;0;L;;;;;N;;;;2CBD; 2CBD;COPTIC SMALL LETTER CRYPTOGRAMMIC NI;Ll;0;L;;;;;N;;;2CBC;;2CBC 2CBE;COPTIC CAPITAL LETTER OLD COPTIC OOU;Lu;0;L;;;;;N;;;;2CBF; 2CBF;COPTIC SMALL LETTER OLD COPTIC OOU;Ll;0;L;;;;;N;;;2CBE;;2CBE 2CC0;COPTIC CAPITAL LETTER SAMPI;Lu;0;L;;;;;N;;;;2CC1; 2CC1;COPTIC SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;2CC0;;2CC0 2CC2;COPTIC CAPITAL LETTER CROSSED SHEI;Lu;0;L;;;;;N;;;;2CC3; 2CC3;COPTIC SMALL LETTER CROSSED SHEI;Ll;0;L;;;;;N;;;2CC2;;2CC2 2CC4;COPTIC CAPITAL LETTER OLD COPTIC SHEI;Lu;0;L;;;;;N;;;;2CC5; 2CC5;COPTIC SMALL LETTER OLD COPTIC SHEI;Ll;0;L;;;;;N;;;2CC4;;2CC4 2CC6;COPTIC CAPITAL LETTER OLD COPTIC ESH;Lu;0;L;;;;;N;;;;2CC7; 2CC7;COPTIC SMALL LETTER OLD COPTIC ESH;Ll;0;L;;;;;N;;;2CC6;;2CC6 2CC8;COPTIC CAPITAL LETTER AKHMIMIC KHEI;Lu;0;L;;;;;N;;;;2CC9; 2CC9;COPTIC SMALL LETTER AKHMIMIC KHEI;Ll;0;L;;;;;N;;;2CC8;;2CC8 2CCA;COPTIC CAPITAL LETTER DIALECT-P HORI;Lu;0;L;;;;;N;;;;2CCB; 2CCB;COPTIC SMALL LETTER DIALECT-P HORI;Ll;0;L;;;;;N;;;2CCA;;2CCA 2CCC;COPTIC CAPITAL LETTER OLD COPTIC HORI;Lu;0;L;;;;;N;;;;2CCD; 2CCD;COPTIC SMALL LETTER OLD COPTIC HORI;Ll;0;L;;;;;N;;;2CCC;;2CCC 2CCE;COPTIC CAPITAL LETTER OLD COPTIC HA;Lu;0;L;;;;;N;;;;2CCF; 2CCF;COPTIC SMALL LETTER OLD COPTIC HA;Ll;0;L;;;;;N;;;2CCE;;2CCE 2CD0;COPTIC CAPITAL LETTER L-SHAPED HA;Lu;0;L;;;;;N;;;;2CD1; 2CD1;COPTIC SMALL LETTER L-SHAPED HA;Ll;0;L;;;;;N;;;2CD0;;2CD0 2CD2;COPTIC CAPITAL LETTER OLD COPTIC HEI;Lu;0;L;;;;;N;;;;2CD3; 2CD3;COPTIC SMALL LETTER OLD COPTIC HEI;Ll;0;L;;;;;N;;;2CD2;;2CD2 2CD4;COPTIC CAPITAL LETTER OLD COPTIC HAT;Lu;0;L;;;;;N;;;;2CD5; 2CD5;COPTIC SMALL LETTER OLD COPTIC HAT;Ll;0;L;;;;;N;;;2CD4;;2CD4 2CD6;COPTIC CAPITAL LETTER OLD COPTIC GANGIA;Lu;0;L;;;;;N;;;;2CD7; 2CD7;COPTIC SMALL LETTER OLD COPTIC GANGIA;Ll;0;L;;;;;N;;;2CD6;;2CD6 2CD8;COPTIC CAPITAL LETTER OLD COPTIC DJA;Lu;0;L;;;;;N;;;;2CD9; 2CD9;COPTIC SMALL LETTER OLD COPTIC DJA;Ll;0;L;;;;;N;;;2CD8;;2CD8 2CDA;COPTIC CAPITAL LETTER OLD COPTIC SHIMA;Lu;0;L;;;;;N;;;;2CDB; 2CDB;COPTIC SMALL LETTER OLD COPTIC SHIMA;Ll;0;L;;;;;N;;;2CDA;;2CDA 2CDC;COPTIC CAPITAL LETTER OLD NUBIAN SHIMA;Lu;0;L;;;;;N;;;;2CDD; 2CDD;COPTIC SMALL LETTER OLD NUBIAN SHIMA;Ll;0;L;;;;;N;;;2CDC;;2CDC 2CDE;COPTIC CAPITAL LETTER OLD NUBIAN NGI;Lu;0;L;;;;;N;;;;2CDF; 2CDF;COPTIC SMALL LETTER OLD NUBIAN NGI;Ll;0;L;;;;;N;;;2CDE;;2CDE 2CE0;COPTIC CAPITAL LETTER OLD NUBIAN NYI;Lu;0;L;;;;;N;;;;2CE1; 2CE1;COPTIC SMALL LETTER OLD NUBIAN NYI;Ll;0;L;;;;;N;;;2CE0;;2CE0 2CE2;COPTIC CAPITAL LETTER OLD NUBIAN WAU;Lu;0;L;;;;;N;;;;2CE3; 2CE3;COPTIC SMALL LETTER OLD NUBIAN WAU;Ll;0;L;;;;;N;;;2CE2;;2CE2 2CE4;COPTIC SYMBOL KAI;Ll;0;L;;;;;N;;;;; 2CE5;COPTIC SYMBOL MI RO;So;0;ON;;;;;N;;;;; 2CE6;COPTIC SYMBOL PI RO;So;0;ON;;;;;N;;;;; 2CE7;COPTIC SYMBOL STAUROS;So;0;ON;;;;;N;;;;; 2CE8;COPTIC SYMBOL TAU RO;So;0;ON;;;;;N;;;;; 2CE9;COPTIC SYMBOL KHI RO;So;0;ON;;;;;N;;;;; 2CEA;COPTIC SYMBOL SHIMA SIMA;So;0;ON;;;;;N;;;;; 2CEB;COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI;Lu;0;L;;;;;N;;;;2CEC; 2CEC;COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI;Ll;0;L;;;;;N;;;2CEB;;2CEB 2CED;COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA;Lu;0;L;;;;;N;;;;2CEE; 2CEE;COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA;Ll;0;L;;;;;N;;;2CED;;2CED 2CEF;COPTIC COMBINING NI ABOVE;Mn;230;NSM;;;;;N;;;;; 2CF0;COPTIC COMBINING SPIRITUS ASPER;Mn;230;NSM;;;;;N;;;;; 2CF1;COPTIC COMBINING SPIRITUS LENIS;Mn;230;NSM;;;;;N;;;;; 2CF2;COPTIC CAPITAL LETTER BOHAIRIC KHEI;Lu;0;L;;;;;N;;;;2CF3; 2CF3;COPTIC SMALL LETTER BOHAIRIC KHEI;Ll;0;L;;;;;N;;;2CF2;;2CF2 2CF9;COPTIC OLD NUBIAN FULL STOP;Po;0;ON;;;;;N;;;;; 2CFA;COPTIC OLD NUBIAN DIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;; 2CFB;COPTIC OLD NUBIAN INDIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;; 2CFC;COPTIC OLD NUBIAN VERSE DIVIDER;Po;0;ON;;;;;N;;;;; 2CFD;COPTIC FRACTION ONE HALF;No;0;ON;;;;1/2;N;;;;; 2CFE;COPTIC FULL STOP;Po;0;ON;;;;;N;;;;; 2CFF;COPTIC MORPHOLOGICAL DIVIDER;Po;0;ON;;;;;N;;;;; 2D00;GEORGIAN SMALL LETTER AN;Ll;0;L;;;;;N;;;10A0;;10A0 2D01;GEORGIAN SMALL LETTER BAN;Ll;0;L;;;;;N;;;10A1;;10A1 2D02;GEORGIAN SMALL LETTER GAN;Ll;0;L;;;;;N;;;10A2;;10A2 2D03;GEORGIAN SMALL LETTER DON;Ll;0;L;;;;;N;;;10A3;;10A3 2D04;GEORGIAN SMALL LETTER EN;Ll;0;L;;;;;N;;;10A4;;10A4 2D05;GEORGIAN SMALL LETTER VIN;Ll;0;L;;;;;N;;;10A5;;10A5 2D06;GEORGIAN SMALL LETTER ZEN;Ll;0;L;;;;;N;;;10A6;;10A6 2D07;GEORGIAN SMALL LETTER TAN;Ll;0;L;;;;;N;;;10A7;;10A7 2D08;GEORGIAN SMALL LETTER IN;Ll;0;L;;;;;N;;;10A8;;10A8 2D09;GEORGIAN SMALL LETTER KAN;Ll;0;L;;;;;N;;;10A9;;10A9 2D0A;GEORGIAN SMALL LETTER LAS;Ll;0;L;;;;;N;;;10AA;;10AA 2D0B;GEORGIAN SMALL LETTER MAN;Ll;0;L;;;;;N;;;10AB;;10AB 2D0C;GEORGIAN SMALL LETTER NAR;Ll;0;L;;;;;N;;;10AC;;10AC 2D0D;GEORGIAN SMALL LETTER ON;Ll;0;L;;;;;N;;;10AD;;10AD 2D0E;GEORGIAN SMALL LETTER PAR;Ll;0;L;;;;;N;;;10AE;;10AE 2D0F;GEORGIAN SMALL LETTER ZHAR;Ll;0;L;;;;;N;;;10AF;;10AF 2D10;GEORGIAN SMALL LETTER RAE;Ll;0;L;;;;;N;;;10B0;;10B0 2D11;GEORGIAN SMALL LETTER SAN;Ll;0;L;;;;;N;;;10B1;;10B1 2D12;GEORGIAN SMALL LETTER TAR;Ll;0;L;;;;;N;;;10B2;;10B2 2D13;GEORGIAN SMALL LETTER UN;Ll;0;L;;;;;N;;;10B3;;10B3 2D14;GEORGIAN SMALL LETTER PHAR;Ll;0;L;;;;;N;;;10B4;;10B4 2D15;GEORGIAN SMALL LETTER KHAR;Ll;0;L;;;;;N;;;10B5;;10B5 2D16;GEORGIAN SMALL LETTER GHAN;Ll;0;L;;;;;N;;;10B6;;10B6 2D17;GEORGIAN SMALL LETTER QAR;Ll;0;L;;;;;N;;;10B7;;10B7 2D18;GEORGIAN SMALL LETTER SHIN;Ll;0;L;;;;;N;;;10B8;;10B8 2D19;GEORGIAN SMALL LETTER CHIN;Ll;0;L;;;;;N;;;10B9;;10B9 2D1A;GEORGIAN SMALL LETTER CAN;Ll;0;L;;;;;N;;;10BA;;10BA 2D1B;GEORGIAN SMALL LETTER JIL;Ll;0;L;;;;;N;;;10BB;;10BB 2D1C;GEORGIAN SMALL LETTER CIL;Ll;0;L;;;;;N;;;10BC;;10BC 2D1D;GEORGIAN SMALL LETTER CHAR;Ll;0;L;;;;;N;;;10BD;;10BD 2D1E;GEORGIAN SMALL LETTER XAN;Ll;0;L;;;;;N;;;10BE;;10BE 2D1F;GEORGIAN SMALL LETTER JHAN;Ll;0;L;;;;;N;;;10BF;;10BF 2D20;GEORGIAN SMALL LETTER HAE;Ll;0;L;;;;;N;;;10C0;;10C0 2D21;GEORGIAN SMALL LETTER HE;Ll;0;L;;;;;N;;;10C1;;10C1 2D22;GEORGIAN SMALL LETTER HIE;Ll;0;L;;;;;N;;;10C2;;10C2 2D23;GEORGIAN SMALL LETTER WE;Ll;0;L;;;;;N;;;10C3;;10C3 2D24;GEORGIAN SMALL LETTER HAR;Ll;0;L;;;;;N;;;10C4;;10C4 2D25;GEORGIAN SMALL LETTER HOE;Ll;0;L;;;;;N;;;10C5;;10C5 2D27;GEORGIAN SMALL LETTER YN;Ll;0;L;;;;;N;;;10C7;;10C7 2D2D;GEORGIAN SMALL LETTER AEN;Ll;0;L;;;;;N;;;10CD;;10CD 2D30;TIFINAGH LETTER YA;Lo;0;L;;;;;N;;;;; 2D31;TIFINAGH LETTER YAB;Lo;0;L;;;;;N;;;;; 2D32;TIFINAGH LETTER YABH;Lo;0;L;;;;;N;;;;; 2D33;TIFINAGH LETTER YAG;Lo;0;L;;;;;N;;;;; 2D34;TIFINAGH LETTER YAGHH;Lo;0;L;;;;;N;;;;; 2D35;TIFINAGH LETTER BERBER ACADEMY YAJ;Lo;0;L;;;;;N;;;;; 2D36;TIFINAGH LETTER YAJ;Lo;0;L;;;;;N;;;;; 2D37;TIFINAGH LETTER YAD;Lo;0;L;;;;;N;;;;; 2D38;TIFINAGH LETTER YADH;Lo;0;L;;;;;N;;;;; 2D39;TIFINAGH LETTER YADD;Lo;0;L;;;;;N;;;;; 2D3A;TIFINAGH LETTER YADDH;Lo;0;L;;;;;N;;;;; 2D3B;TIFINAGH LETTER YEY;Lo;0;L;;;;;N;;;;; 2D3C;TIFINAGH LETTER YAF;Lo;0;L;;;;;N;;;;; 2D3D;TIFINAGH LETTER YAK;Lo;0;L;;;;;N;;;;; 2D3E;TIFINAGH LETTER TUAREG YAK;Lo;0;L;;;;;N;;;;; 2D3F;TIFINAGH LETTER YAKHH;Lo;0;L;;;;;N;;;;; 2D40;TIFINAGH LETTER YAH;Lo;0;L;;;;;N;;;;; 2D41;TIFINAGH LETTER BERBER ACADEMY YAH;Lo;0;L;;;;;N;;;;; 2D42;TIFINAGH LETTER TUAREG YAH;Lo;0;L;;;;;N;;;;; 2D43;TIFINAGH LETTER YAHH;Lo;0;L;;;;;N;;;;; 2D44;TIFINAGH LETTER YAA;Lo;0;L;;;;;N;;;;; 2D45;TIFINAGH LETTER YAKH;Lo;0;L;;;;;N;;;;; 2D46;TIFINAGH LETTER TUAREG YAKH;Lo;0;L;;;;;N;;;;; 2D47;TIFINAGH LETTER YAQ;Lo;0;L;;;;;N;;;;; 2D48;TIFINAGH LETTER TUAREG YAQ;Lo;0;L;;;;;N;;;;; 2D49;TIFINAGH LETTER YI;Lo;0;L;;;;;N;;;;; 2D4A;TIFINAGH LETTER YAZH;Lo;0;L;;;;;N;;;;; 2D4B;TIFINAGH LETTER AHAGGAR YAZH;Lo;0;L;;;;;N;;;;; 2D4C;TIFINAGH LETTER TUAREG YAZH;Lo;0;L;;;;;N;;;;; 2D4D;TIFINAGH LETTER YAL;Lo;0;L;;;;;N;;;;; 2D4E;TIFINAGH LETTER YAM;Lo;0;L;;;;;N;;;;; 2D4F;TIFINAGH LETTER YAN;Lo;0;L;;;;;N;;;;; 2D50;TIFINAGH LETTER TUAREG YAGN;Lo;0;L;;;;;N;;;;; 2D51;TIFINAGH LETTER TUAREG YANG;Lo;0;L;;;;;N;;;;; 2D52;TIFINAGH LETTER YAP;Lo;0;L;;;;;N;;;;; 2D53;TIFINAGH LETTER YU;Lo;0;L;;;;;N;;;;; 2D54;TIFINAGH LETTER YAR;Lo;0;L;;;;;N;;;;; 2D55;TIFINAGH LETTER YARR;Lo;0;L;;;;;N;;;;; 2D56;TIFINAGH LETTER YAGH;Lo;0;L;;;;;N;;;;; 2D57;TIFINAGH LETTER TUAREG YAGH;Lo;0;L;;;;;N;;;;; 2D58;TIFINAGH LETTER AYER YAGH;Lo;0;L;;;;;N;;;;; 2D59;TIFINAGH LETTER YAS;Lo;0;L;;;;;N;;;;; 2D5A;TIFINAGH LETTER YASS;Lo;0;L;;;;;N;;;;; 2D5B;TIFINAGH LETTER YASH;Lo;0;L;;;;;N;;;;; 2D5C;TIFINAGH LETTER YAT;Lo;0;L;;;;;N;;;;; 2D5D;TIFINAGH LETTER YATH;Lo;0;L;;;;;N;;;;; 2D5E;TIFINAGH LETTER YACH;Lo;0;L;;;;;N;;;;; 2D5F;TIFINAGH LETTER YATT;Lo;0;L;;;;;N;;;;; 2D60;TIFINAGH LETTER YAV;Lo;0;L;;;;;N;;;;; 2D61;TIFINAGH LETTER YAW;Lo;0;L;;;;;N;;;;; 2D62;TIFINAGH LETTER YAY;Lo;0;L;;;;;N;;;;; 2D63;TIFINAGH LETTER YAZ;Lo;0;L;;;;;N;;;;; 2D64;TIFINAGH LETTER TAWELLEMET YAZ;Lo;0;L;;;;;N;;;;; 2D65;TIFINAGH LETTER YAZZ;Lo;0;L;;;;;N;;;;; 2D66;TIFINAGH LETTER YE;Lo;0;L;;;;;N;;;;; 2D67;TIFINAGH LETTER YO;Lo;0;L;;;;;N;;;;; 2D6F;TIFINAGH MODIFIER LETTER LABIALIZATION MARK;Lm;0;L; 2D61;;;;N;;;;; 2D70;TIFINAGH SEPARATOR MARK;Po;0;L;;;;;N;;;;; 2D7F;TIFINAGH CONSONANT JOINER;Mn;9;NSM;;;;;N;;;;; 2D80;ETHIOPIC SYLLABLE LOA;Lo;0;L;;;;;N;;;;; 2D81;ETHIOPIC SYLLABLE MOA;Lo;0;L;;;;;N;;;;; 2D82;ETHIOPIC SYLLABLE ROA;Lo;0;L;;;;;N;;;;; 2D83;ETHIOPIC SYLLABLE SOA;Lo;0;L;;;;;N;;;;; 2D84;ETHIOPIC SYLLABLE SHOA;Lo;0;L;;;;;N;;;;; 2D85;ETHIOPIC SYLLABLE BOA;Lo;0;L;;;;;N;;;;; 2D86;ETHIOPIC SYLLABLE TOA;Lo;0;L;;;;;N;;;;; 2D87;ETHIOPIC SYLLABLE COA;Lo;0;L;;;;;N;;;;; 2D88;ETHIOPIC SYLLABLE NOA;Lo;0;L;;;;;N;;;;; 2D89;ETHIOPIC SYLLABLE NYOA;Lo;0;L;;;;;N;;;;; 2D8A;ETHIOPIC SYLLABLE GLOTTAL OA;Lo;0;L;;;;;N;;;;; 2D8B;ETHIOPIC SYLLABLE ZOA;Lo;0;L;;;;;N;;;;; 2D8C;ETHIOPIC SYLLABLE DOA;Lo;0;L;;;;;N;;;;; 2D8D;ETHIOPIC SYLLABLE DDOA;Lo;0;L;;;;;N;;;;; 2D8E;ETHIOPIC SYLLABLE JOA;Lo;0;L;;;;;N;;;;; 2D8F;ETHIOPIC SYLLABLE THOA;Lo;0;L;;;;;N;;;;; 2D90;ETHIOPIC SYLLABLE CHOA;Lo;0;L;;;;;N;;;;; 2D91;ETHIOPIC SYLLABLE PHOA;Lo;0;L;;;;;N;;;;; 2D92;ETHIOPIC SYLLABLE POA;Lo;0;L;;;;;N;;;;; 2D93;ETHIOPIC SYLLABLE GGWA;Lo;0;L;;;;;N;;;;; 2D94;ETHIOPIC SYLLABLE GGWI;Lo;0;L;;;;;N;;;;; 2D95;ETHIOPIC SYLLABLE GGWEE;Lo;0;L;;;;;N;;;;; 2D96;ETHIOPIC SYLLABLE GGWE;Lo;0;L;;;;;N;;;;; 2DA0;ETHIOPIC SYLLABLE SSA;Lo;0;L;;;;;N;;;;; 2DA1;ETHIOPIC SYLLABLE SSU;Lo;0;L;;;;;N;;;;; 2DA2;ETHIOPIC SYLLABLE SSI;Lo;0;L;;;;;N;;;;; 2DA3;ETHIOPIC SYLLABLE SSAA;Lo;0;L;;;;;N;;;;; 2DA4;ETHIOPIC SYLLABLE SSEE;Lo;0;L;;;;;N;;;;; 2DA5;ETHIOPIC SYLLABLE SSE;Lo;0;L;;;;;N;;;;; 2DA6;ETHIOPIC SYLLABLE SSO;Lo;0;L;;;;;N;;;;; 2DA8;ETHIOPIC SYLLABLE CCA;Lo;0;L;;;;;N;;;;; 2DA9;ETHIOPIC SYLLABLE CCU;Lo;0;L;;;;;N;;;;; 2DAA;ETHIOPIC SYLLABLE CCI;Lo;0;L;;;;;N;;;;; 2DAB;ETHIOPIC SYLLABLE CCAA;Lo;0;L;;;;;N;;;;; 2DAC;ETHIOPIC SYLLABLE CCEE;Lo;0;L;;;;;N;;;;; 2DAD;ETHIOPIC SYLLABLE CCE;Lo;0;L;;;;;N;;;;; 2DAE;ETHIOPIC SYLLABLE CCO;Lo;0;L;;;;;N;;;;; 2DB0;ETHIOPIC SYLLABLE ZZA;Lo;0;L;;;;;N;;;;; 2DB1;ETHIOPIC SYLLABLE ZZU;Lo;0;L;;;;;N;;;;; 2DB2;ETHIOPIC SYLLABLE ZZI;Lo;0;L;;;;;N;;;;; 2DB3;ETHIOPIC SYLLABLE ZZAA;Lo;0;L;;;;;N;;;;; 2DB4;ETHIOPIC SYLLABLE ZZEE;Lo;0;L;;;;;N;;;;; 2DB5;ETHIOPIC SYLLABLE ZZE;Lo;0;L;;;;;N;;;;; 2DB6;ETHIOPIC SYLLABLE ZZO;Lo;0;L;;;;;N;;;;; 2DB8;ETHIOPIC SYLLABLE CCHA;Lo;0;L;;;;;N;;;;; 2DB9;ETHIOPIC SYLLABLE CCHU;Lo;0;L;;;;;N;;;;; 2DBA;ETHIOPIC SYLLABLE CCHI;Lo;0;L;;;;;N;;;;; 2DBB;ETHIOPIC SYLLABLE CCHAA;Lo;0;L;;;;;N;;;;; 2DBC;ETHIOPIC SYLLABLE CCHEE;Lo;0;L;;;;;N;;;;; 2DBD;ETHIOPIC SYLLABLE CCHE;Lo;0;L;;;;;N;;;;; 2DBE;ETHIOPIC SYLLABLE CCHO;Lo;0;L;;;;;N;;;;; 2DC0;ETHIOPIC SYLLABLE QYA;Lo;0;L;;;;;N;;;;; 2DC1;ETHIOPIC SYLLABLE QYU;Lo;0;L;;;;;N;;;;; 2DC2;ETHIOPIC SYLLABLE QYI;Lo;0;L;;;;;N;;;;; 2DC3;ETHIOPIC SYLLABLE QYAA;Lo;0;L;;;;;N;;;;; 2DC4;ETHIOPIC SYLLABLE QYEE;Lo;0;L;;;;;N;;;;; 2DC5;ETHIOPIC SYLLABLE QYE;Lo;0;L;;;;;N;;;;; 2DC6;ETHIOPIC SYLLABLE QYO;Lo;0;L;;;;;N;;;;; 2DC8;ETHIOPIC SYLLABLE KYA;Lo;0;L;;;;;N;;;;; 2DC9;ETHIOPIC SYLLABLE KYU;Lo;0;L;;;;;N;;;;; 2DCA;ETHIOPIC SYLLABLE KYI;Lo;0;L;;;;;N;;;;; 2DCB;ETHIOPIC SYLLABLE KYAA;Lo;0;L;;;;;N;;;;; 2DCC;ETHIOPIC SYLLABLE KYEE;Lo;0;L;;;;;N;;;;; 2DCD;ETHIOPIC SYLLABLE KYE;Lo;0;L;;;;;N;;;;; 2DCE;ETHIOPIC SYLLABLE KYO;Lo;0;L;;;;;N;;;;; 2DD0;ETHIOPIC SYLLABLE XYA;Lo;0;L;;;;;N;;;;; 2DD1;ETHIOPIC SYLLABLE XYU;Lo;0;L;;;;;N;;;;; 2DD2;ETHIOPIC SYLLABLE XYI;Lo;0;L;;;;;N;;;;; 2DD3;ETHIOPIC SYLLABLE XYAA;Lo;0;L;;;;;N;;;;; 2DD4;ETHIOPIC SYLLABLE XYEE;Lo;0;L;;;;;N;;;;; 2DD5;ETHIOPIC SYLLABLE XYE;Lo;0;L;;;;;N;;;;; 2DD6;ETHIOPIC SYLLABLE XYO;Lo;0;L;;;;;N;;;;; 2DD8;ETHIOPIC SYLLABLE GYA;Lo;0;L;;;;;N;;;;; 2DD9;ETHIOPIC SYLLABLE GYU;Lo;0;L;;;;;N;;;;; 2DDA;ETHIOPIC SYLLABLE GYI;Lo;0;L;;;;;N;;;;; 2DDB;ETHIOPIC SYLLABLE GYAA;Lo;0;L;;;;;N;;;;; 2DDC;ETHIOPIC SYLLABLE GYEE;Lo;0;L;;;;;N;;;;; 2DDD;ETHIOPIC SYLLABLE GYE;Lo;0;L;;;;;N;;;;; 2DDE;ETHIOPIC SYLLABLE GYO;Lo;0;L;;;;;N;;;;; 2DE0;COMBINING CYRILLIC LETTER BE;Mn;230;NSM;;;;;N;;;;; 2DE1;COMBINING CYRILLIC LETTER VE;Mn;230;NSM;;;;;N;;;;; 2DE2;COMBINING CYRILLIC LETTER GHE;Mn;230;NSM;;;;;N;;;;; 2DE3;COMBINING CYRILLIC LETTER DE;Mn;230;NSM;;;;;N;;;;; 2DE4;COMBINING CYRILLIC LETTER ZHE;Mn;230;NSM;;;;;N;;;;; 2DE5;COMBINING CYRILLIC LETTER ZE;Mn;230;NSM;;;;;N;;;;; 2DE6;COMBINING CYRILLIC LETTER KA;Mn;230;NSM;;;;;N;;;;; 2DE7;COMBINING CYRILLIC LETTER EL;Mn;230;NSM;;;;;N;;;;; 2DE8;COMBINING CYRILLIC LETTER EM;Mn;230;NSM;;;;;N;;;;; 2DE9;COMBINING CYRILLIC LETTER EN;Mn;230;NSM;;;;;N;;;;; 2DEA;COMBINING CYRILLIC LETTER O;Mn;230;NSM;;;;;N;;;;; 2DEB;COMBINING CYRILLIC LETTER PE;Mn;230;NSM;;;;;N;;;;; 2DEC;COMBINING CYRILLIC LETTER ER;Mn;230;NSM;;;;;N;;;;; 2DED;COMBINING CYRILLIC LETTER ES;Mn;230;NSM;;;;;N;;;;; 2DEE;COMBINING CYRILLIC LETTER TE;Mn;230;NSM;;;;;N;;;;; 2DEF;COMBINING CYRILLIC LETTER HA;Mn;230;NSM;;;;;N;;;;; 2DF0;COMBINING CYRILLIC LETTER TSE;Mn;230;NSM;;;;;N;;;;; 2DF1;COMBINING CYRILLIC LETTER CHE;Mn;230;NSM;;;;;N;;;;; 2DF2;COMBINING CYRILLIC LETTER SHA;Mn;230;NSM;;;;;N;;;;; 2DF3;COMBINING CYRILLIC LETTER SHCHA;Mn;230;NSM;;;;;N;;;;; 2DF4;COMBINING CYRILLIC LETTER FITA;Mn;230;NSM;;;;;N;;;;; 2DF5;COMBINING CYRILLIC LETTER ES-TE;Mn;230;NSM;;;;;N;;;;; 2DF6;COMBINING CYRILLIC LETTER A;Mn;230;NSM;;;;;N;;;;; 2DF7;COMBINING CYRILLIC LETTER IE;Mn;230;NSM;;;;;N;;;;; 2DF8;COMBINING CYRILLIC LETTER DJERV;Mn;230;NSM;;;;;N;;;;; 2DF9;COMBINING CYRILLIC LETTER MONOGRAPH UK;Mn;230;NSM;;;;;N;;;;; 2DFA;COMBINING CYRILLIC LETTER YAT;Mn;230;NSM;;;;;N;;;;; 2DFB;COMBINING CYRILLIC LETTER YU;Mn;230;NSM;;;;;N;;;;; 2DFC;COMBINING CYRILLIC LETTER IOTIFIED A;Mn;230;NSM;;;;;N;;;;; 2DFD;COMBINING CYRILLIC LETTER LITTLE YUS;Mn;230;NSM;;;;;N;;;;; 2DFE;COMBINING CYRILLIC LETTER BIG YUS;Mn;230;NSM;;;;;N;;;;; 2DFF;COMBINING CYRILLIC LETTER IOTIFIED BIG YUS;Mn;230;NSM;;;;;N;;;;; 2E00;RIGHT ANGLE SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;; 2E01;RIGHT ANGLE DOTTED SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;; 2E02;LEFT SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;; 2E03;RIGHT SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;; 2E04;LEFT DOTTED SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;; 2E05;RIGHT DOTTED SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;; 2E06;RAISED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;; 2E07;RAISED DOTTED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;; 2E08;DOTTED TRANSPOSITION MARKER;Po;0;ON;;;;;N;;;;; 2E09;LEFT TRANSPOSITION BRACKET;Pi;0;ON;;;;;Y;;;;; 2E0A;RIGHT TRANSPOSITION BRACKET;Pf;0;ON;;;;;Y;;;;; 2E0B;RAISED SQUARE;Po;0;ON;;;;;N;;;;; 2E0C;LEFT RAISED OMISSION BRACKET;Pi;0;ON;;;;;Y;;;;; 2E0D;RIGHT RAISED OMISSION BRACKET;Pf;0;ON;;;;;Y;;;;; 2E0E;EDITORIAL CORONIS;Po;0;ON;;;;;N;;;;; 2E0F;PARAGRAPHOS;Po;0;ON;;;;;N;;;;; 2E10;FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;; 2E11;REVERSED FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;; 2E12;HYPODIASTOLE;Po;0;ON;;;;;N;;;;; 2E13;DOTTED OBELOS;Po;0;ON;;;;;N;;;;; 2E14;DOWNWARDS ANCORA;Po;0;ON;;;;;N;;;;; 2E15;UPWARDS ANCORA;Po;0;ON;;;;;N;;;;; 2E16;DOTTED RIGHT-POINTING ANGLE;Po;0;ON;;;;;N;;;;; 2E17;DOUBLE OBLIQUE HYPHEN;Pd;0;ON;;;;;N;;;;; 2E18;INVERTED INTERROBANG;Po;0;ON;;;;;N;;;;; 2E19;PALM BRANCH;Po;0;ON;;;;;N;;;;; 2E1A;HYPHEN WITH DIAERESIS;Pd;0;ON;;;;;N;;;;; 2E1B;TILDE WITH RING ABOVE;Po;0;ON;;;;;N;;;;; 2E1C;LEFT LOW PARAPHRASE BRACKET;Pi;0;ON;;;;;Y;;;;; 2E1D;RIGHT LOW PARAPHRASE BRACKET;Pf;0;ON;;;;;Y;;;;; 2E1E;TILDE WITH DOT ABOVE;Po;0;ON;;;;;N;;;;; 2E1F;TILDE WITH DOT BELOW;Po;0;ON;;;;;N;;;;; 2E20;LEFT VERTICAL BAR WITH QUILL;Pi;0;ON;;;;;Y;;;;; 2E21;RIGHT VERTICAL BAR WITH QUILL;Pf;0;ON;;;;;Y;;;;; 2E22;TOP LEFT HALF BRACKET;Ps;0;ON;;;;;Y;;;;; 2E23;TOP RIGHT HALF BRACKET;Pe;0;ON;;;;;Y;;;;; 2E24;BOTTOM LEFT HALF BRACKET;Ps;0;ON;;;;;Y;;;;; 2E25;BOTTOM RIGHT HALF BRACKET;Pe;0;ON;;;;;Y;;;;; 2E26;LEFT SIDEWAYS U BRACKET;Ps;0;ON;;;;;Y;;;;; 2E27;RIGHT SIDEWAYS U BRACKET;Pe;0;ON;;;;;Y;;;;; 2E28;LEFT DOUBLE PARENTHESIS;Ps;0;ON;;;;;Y;;;;; 2E29;RIGHT DOUBLE PARENTHESIS;Pe;0;ON;;;;;Y;;;;; 2E2A;TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 2E2B;ONE DOT OVER TWO DOTS PUNCTUATION;Po;0;ON;;;;;N;;;;; 2E2C;SQUARED FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 2E2D;FIVE DOT MARK;Po;0;ON;;;;;N;;;;; 2E2E;REVERSED QUESTION MARK;Po;0;ON;;;;;N;;;;; 2E2F;VERTICAL TILDE;Lm;0;ON;;;;;N;;;;; 2E30;RING POINT;Po;0;ON;;;;;N;;;;; 2E31;WORD SEPARATOR MIDDLE DOT;Po;0;ON;;;;;N;;;;; 2E32;TURNED COMMA;Po;0;ON;;;;;N;;;;; 2E33;RAISED DOT;Po;0;ON;;;;;N;;;;; 2E34;RAISED COMMA;Po;0;ON;;;;;N;;;;; 2E35;TURNED SEMICOLON;Po;0;ON;;;;;N;;;;; 2E36;DAGGER WITH LEFT GUARD;Po;0;ON;;;;;N;;;;; 2E37;DAGGER WITH RIGHT GUARD;Po;0;ON;;;;;N;;;;; 2E38;TURNED DAGGER;Po;0;ON;;;;;N;;;;; 2E39;TOP HALF SECTION SIGN;Po;0;ON;;;;;N;;;;; 2E3A;TWO-EM DASH;Pd;0;ON;;;;;N;;;;; 2E3B;THREE-EM DASH;Pd;0;ON;;;;;N;;;;; 2E3C;STENOGRAPHIC FULL STOP;Po;0;ON;;;;;N;;;;; 2E3D;VERTICAL SIX DOTS;Po;0;ON;;;;;N;;;;; 2E3E;WIGGLY VERTICAL LINE;Po;0;ON;;;;;N;;;;; 2E3F;CAPITULUM;Po;0;ON;;;;;N;;;;; 2E40;DOUBLE HYPHEN;Pd;0;ON;;;;;N;;;;; 2E41;REVERSED COMMA;Po;0;ON;;;;;N;;;;; 2E42;DOUBLE LOW-REVERSED-9 QUOTATION MARK;Ps;0;ON;;;;;N;;;;; 2E43;DASH WITH LEFT UPTURN;Po;0;ON;;;;;N;;;;; 2E44;DOUBLE SUSPENSION MARK;Po;0;ON;;;;;N;;;;; 2E45;INVERTED LOW KAVYKA;Po;0;ON;;;;;N;;;;; 2E46;INVERTED LOW KAVYKA WITH KAVYKA ABOVE;Po;0;ON;;;;;N;;;;; 2E47;LOW KAVYKA;Po;0;ON;;;;;N;;;;; 2E48;LOW KAVYKA WITH DOT;Po;0;ON;;;;;N;;;;; 2E49;DOUBLE STACKED COMMA;Po;0;ON;;;;;N;;;;; 2E4A;DOTTED SOLIDUS;Po;0;ON;;;;;N;;;;; 2E4B;TRIPLE DAGGER;Po;0;ON;;;;;N;;;;; 2E4C;MEDIEVAL COMMA;Po;0;ON;;;;;N;;;;; 2E4D;PARAGRAPHUS MARK;Po;0;ON;;;;;N;;;;; 2E4E;PUNCTUS ELEVATUS MARK;Po;0;ON;;;;;N;;;;; 2E4F;CORNISH VERSE DIVIDER;Po;0;ON;;;;;N;;;;; 2E50;CROSS PATTY WITH RIGHT CROSSBAR;So;0;ON;;;;;N;;;;; 2E51;CROSS PATTY WITH LEFT CROSSBAR;So;0;ON;;;;;N;;;;; 2E52;TIRONIAN SIGN CAPITAL ET;Po;0;ON;;;;;N;;;;; 2E53;MEDIEVAL EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; 2E54;MEDIEVAL QUESTION MARK;Po;0;ON;;;;;N;;;;; 2E55;LEFT SQUARE BRACKET WITH STROKE;Ps;0;ON;;;;;Y;;;;; 2E56;RIGHT SQUARE BRACKET WITH STROKE;Pe;0;ON;;;;;Y;;;;; 2E57;LEFT SQUARE BRACKET WITH DOUBLE STROKE;Ps;0;ON;;;;;Y;;;;; 2E58;RIGHT SQUARE BRACKET WITH DOUBLE STROKE;Pe;0;ON;;;;;Y;;;;; 2E59;TOP HALF LEFT PARENTHESIS;Ps;0;ON;;;;;Y;;;;; 2E5A;TOP HALF RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;;;;; 2E5B;BOTTOM HALF LEFT PARENTHESIS;Ps;0;ON;;;;;Y;;;;; 2E5C;BOTTOM HALF RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;;;;; 2E5D;OBLIQUE HYPHEN;Pd;0;ON;;;;;N;;;;; 2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;; 2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;; 2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;; 2E83;CJK RADICAL SECOND TWO;So;0;ON;;;;;N;;;;; 2E84;CJK RADICAL SECOND THREE;So;0;ON;;;;;N;;;;; 2E85;CJK RADICAL PERSON;So;0;ON;;;;;N;;;;; 2E86;CJK RADICAL BOX;So;0;ON;;;;;N;;;;; 2E87;CJK RADICAL TABLE;So;0;ON;;;;;N;;;;; 2E88;CJK RADICAL KNIFE ONE;So;0;ON;;;;;N;;;;; 2E89;CJK RADICAL KNIFE TWO;So;0;ON;;;;;N;;;;; 2E8A;CJK RADICAL DIVINATION;So;0;ON;;;;;N;;;;; 2E8B;CJK RADICAL SEAL;So;0;ON;;;;;N;;;;; 2E8C;CJK RADICAL SMALL ONE;So;0;ON;;;;;N;;;;; 2E8D;CJK RADICAL SMALL TWO;So;0;ON;;;;;N;;;;; 2E8E;CJK RADICAL LAME ONE;So;0;ON;;;;;N;;;;; 2E8F;CJK RADICAL LAME TWO;So;0;ON;;;;;N;;;;; 2E90;CJK RADICAL LAME THREE;So;0;ON;;;;;N;;;;; 2E91;CJK RADICAL LAME FOUR;So;0;ON;;;;;N;;;;; 2E92;CJK RADICAL SNAKE;So;0;ON;;;;;N;;;;; 2E93;CJK RADICAL THREAD;So;0;ON;;;;;N;;;;; 2E94;CJK RADICAL SNOUT ONE;So;0;ON;;;;;N;;;;; 2E95;CJK RADICAL SNOUT TWO;So;0;ON;;;;;N;;;;; 2E96;CJK RADICAL HEART ONE;So;0;ON;;;;;N;;;;; 2E97;CJK RADICAL HEART TWO;So;0;ON;;;;;N;;;;; 2E98;CJK RADICAL HAND;So;0;ON;;;;;N;;;;; 2E99;CJK RADICAL RAP;So;0;ON;;;;;N;;;;; 2E9B;CJK RADICAL CHOKE;So;0;ON;;;;;N;;;;; 2E9C;CJK RADICAL SUN;So;0;ON;;;;;N;;;;; 2E9D;CJK RADICAL MOON;So;0;ON;;;;;N;;;;; 2E9E;CJK RADICAL DEATH;So;0;ON;;;;;N;;;;; 2E9F;CJK RADICAL MOTHER;So;0;ON; 6BCD;;;;N;;;;; 2EA0;CJK RADICAL CIVILIAN;So;0;ON;;;;;N;;;;; 2EA1;CJK RADICAL WATER ONE;So;0;ON;;;;;N;;;;; 2EA2;CJK RADICAL WATER TWO;So;0;ON;;;;;N;;;;; 2EA3;CJK RADICAL FIRE;So;0;ON;;;;;N;;;;; 2EA4;CJK RADICAL PAW ONE;So;0;ON;;;;;N;;;;; 2EA5;CJK RADICAL PAW TWO;So;0;ON;;;;;N;;;;; 2EA6;CJK RADICAL SIMPLIFIED HALF TREE TRUNK;So;0;ON;;;;;N;;;;; 2EA7;CJK RADICAL COW;So;0;ON;;;;;N;;;;; 2EA8;CJK RADICAL DOG;So;0;ON;;;;;N;;;;; 2EA9;CJK RADICAL JADE;So;0;ON;;;;;N;;;;; 2EAA;CJK RADICAL BOLT OF CLOTH;So;0;ON;;;;;N;;;;; 2EAB;CJK RADICAL EYE;So;0;ON;;;;;N;;;;; 2EAC;CJK RADICAL SPIRIT ONE;So;0;ON;;;;;N;;;;; 2EAD;CJK RADICAL SPIRIT TWO;So;0;ON;;;;;N;;;;; 2EAE;CJK RADICAL BAMBOO;So;0;ON;;;;;N;;;;; 2EAF;CJK RADICAL SILK;So;0;ON;;;;;N;;;;; 2EB0;CJK RADICAL C-SIMPLIFIED SILK;So;0;ON;;;;;N;;;;; 2EB1;CJK RADICAL NET ONE;So;0;ON;;;;;N;;;;; 2EB2;CJK RADICAL NET TWO;So;0;ON;;;;;N;;;;; 2EB3;CJK RADICAL NET THREE;So;0;ON;;;;;N;;;;; 2EB4;CJK RADICAL NET FOUR;So;0;ON;;;;;N;;;;; 2EB5;CJK RADICAL MESH;So;0;ON;;;;;N;;;;; 2EB6;CJK RADICAL SHEEP;So;0;ON;;;;;N;;;;; 2EB7;CJK RADICAL RAM;So;0;ON;;;;;N;;;;; 2EB8;CJK RADICAL EWE;So;0;ON;;;;;N;;;;; 2EB9;CJK RADICAL OLD;So;0;ON;;;;;N;;;;; 2EBA;CJK RADICAL BRUSH ONE;So;0;ON;;;;;N;;;;; 2EBB;CJK RADICAL BRUSH TWO;So;0;ON;;;;;N;;;;; 2EBC;CJK RADICAL MEAT;So;0;ON;;;;;N;;;;; 2EBD;CJK RADICAL MORTAR;So;0;ON;;;;;N;;;;; 2EBE;CJK RADICAL GRASS ONE;So;0;ON;;;;;N;;;;; 2EBF;CJK RADICAL GRASS TWO;So;0;ON;;;;;N;;;;; 2EC0;CJK RADICAL GRASS THREE;So;0;ON;;;;;N;;;;; 2EC1;CJK RADICAL TIGER;So;0;ON;;;;;N;;;;; 2EC2;CJK RADICAL CLOTHES;So;0;ON;;;;;N;;;;; 2EC3;CJK RADICAL WEST ONE;So;0;ON;;;;;N;;;;; 2EC4;CJK RADICAL WEST TWO;So;0;ON;;;;;N;;;;; 2EC5;CJK RADICAL C-SIMPLIFIED SEE;So;0;ON;;;;;N;;;;; 2EC6;CJK RADICAL SIMPLIFIED HORN;So;0;ON;;;;;N;;;;; 2EC7;CJK RADICAL HORN;So;0;ON;;;;;N;;;;; 2EC8;CJK RADICAL C-SIMPLIFIED SPEECH;So;0;ON;;;;;N;;;;; 2EC9;CJK RADICAL C-SIMPLIFIED SHELL;So;0;ON;;;;;N;;;;; 2ECA;CJK RADICAL FOOT;So;0;ON;;;;;N;;;;; 2ECB;CJK RADICAL C-SIMPLIFIED CART;So;0;ON;;;;;N;;;;; 2ECC;CJK RADICAL SIMPLIFIED WALK;So;0;ON;;;;;N;;;;; 2ECD;CJK RADICAL WALK ONE;So;0;ON;;;;;N;;;;; 2ECE;CJK RADICAL WALK TWO;So;0;ON;;;;;N;;;;; 2ECF;CJK RADICAL CITY;So;0;ON;;;;;N;;;;; 2ED0;CJK RADICAL C-SIMPLIFIED GOLD;So;0;ON;;;;;N;;;;; 2ED1;CJK RADICAL LONG ONE;So;0;ON;;;;;N;;;;; 2ED2;CJK RADICAL LONG TWO;So;0;ON;;;;;N;;;;; 2ED3;CJK RADICAL C-SIMPLIFIED LONG;So;0;ON;;;;;N;;;;; 2ED4;CJK RADICAL C-SIMPLIFIED GATE;So;0;ON;;;;;N;;;;; 2ED5;CJK RADICAL MOUND ONE;So;0;ON;;;;;N;;;;; 2ED6;CJK RADICAL MOUND TWO;So;0;ON;;;;;N;;;;; 2ED7;CJK RADICAL RAIN;So;0;ON;;;;;N;;;;; 2ED8;CJK RADICAL BLUE;So;0;ON;;;;;N;;;;; 2ED9;CJK RADICAL C-SIMPLIFIED TANNED LEATHER;So;0;ON;;;;;N;;;;; 2EDA;CJK RADICAL C-SIMPLIFIED LEAF;So;0;ON;;;;;N;;;;; 2EDB;CJK RADICAL C-SIMPLIFIED WIND;So;0;ON;;;;;N;;;;; 2EDC;CJK RADICAL C-SIMPLIFIED FLY;So;0;ON;;;;;N;;;;; 2EDD;CJK RADICAL EAT ONE;So;0;ON;;;;;N;;;;; 2EDE;CJK RADICAL EAT TWO;So;0;ON;;;;;N;;;;; 2EDF;CJK RADICAL EAT THREE;So;0;ON;;;;;N;;;;; 2EE0;CJK RADICAL C-SIMPLIFIED EAT;So;0;ON;;;;;N;;;;; 2EE1;CJK RADICAL HEAD;So;0;ON;;;;;N;;;;; 2EE2;CJK RADICAL C-SIMPLIFIED HORSE;So;0;ON;;;;;N;;;;; 2EE3;CJK RADICAL BONE;So;0;ON;;;;;N;;;;; 2EE4;CJK RADICAL GHOST;So;0;ON;;;;;N;;;;; 2EE5;CJK RADICAL C-SIMPLIFIED FISH;So;0;ON;;;;;N;;;;; 2EE6;CJK RADICAL C-SIMPLIFIED BIRD;So;0;ON;;;;;N;;;;; 2EE7;CJK RADICAL C-SIMPLIFIED SALT;So;0;ON;;;;;N;;;;; 2EE8;CJK RADICAL SIMPLIFIED WHEAT;So;0;ON;;;;;N;;;;; 2EE9;CJK RADICAL SIMPLIFIED YELLOW;So;0;ON;;;;;N;;;;; 2EEA;CJK RADICAL C-SIMPLIFIED FROG;So;0;ON;;;;;N;;;;; 2EEB;CJK RADICAL J-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;; 2EEC;CJK RADICAL C-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;; 2EED;CJK RADICAL J-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;; 2EEE;CJK RADICAL C-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;; 2EEF;CJK RADICAL J-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;; 2EF0;CJK RADICAL C-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;; 2EF1;CJK RADICAL TURTLE;So;0;ON;;;;;N;;;;; 2EF2;CJK RADICAL J-SIMPLIFIED TURTLE;So;0;ON;;;;;N;;;;; 2EF3;CJK RADICAL C-SIMPLIFIED TURTLE;So;0;ON; 9F9F;;;;N;;;;; 2F00;KANGXI RADICAL ONE;So;0;ON; 4E00;;;;N;;;;; 2F01;KANGXI RADICAL LINE;So;0;ON; 4E28;;;;N;;;;; 2F02;KANGXI RADICAL DOT;So;0;ON; 4E36;;;;N;;;;; 2F03;KANGXI RADICAL SLASH;So;0;ON; 4E3F;;;;N;;;;; 2F04;KANGXI RADICAL SECOND;So;0;ON; 4E59;;;;N;;;;; 2F05;KANGXI RADICAL HOOK;So;0;ON; 4E85;;;;N;;;;; 2F06;KANGXI RADICAL TWO;So;0;ON; 4E8C;;;;N;;;;; 2F07;KANGXI RADICAL LID;So;0;ON; 4EA0;;;;N;;;;; 2F08;KANGXI RADICAL MAN;So;0;ON; 4EBA;;;;N;;;;; 2F09;KANGXI RADICAL LEGS;So;0;ON; 513F;;;;N;;;;; 2F0A;KANGXI RADICAL ENTER;So;0;ON; 5165;;;;N;;;;; 2F0B;KANGXI RADICAL EIGHT;So;0;ON; 516B;;;;N;;;;; 2F0C;KANGXI RADICAL DOWN BOX;So;0;ON; 5182;;;;N;;;;; 2F0D;KANGXI RADICAL COVER;So;0;ON; 5196;;;;N;;;;; 2F0E;KANGXI RADICAL ICE;So;0;ON; 51AB;;;;N;;;;; 2F0F;KANGXI RADICAL TABLE;So;0;ON; 51E0;;;;N;;;;; 2F10;KANGXI RADICAL OPEN BOX;So;0;ON; 51F5;;;;N;;;;; 2F11;KANGXI RADICAL KNIFE;So;0;ON; 5200;;;;N;;;;; 2F12;KANGXI RADICAL POWER;So;0;ON; 529B;;;;N;;;;; 2F13;KANGXI RADICAL WRAP;So;0;ON; 52F9;;;;N;;;;; 2F14;KANGXI RADICAL SPOON;So;0;ON; 5315;;;;N;;;;; 2F15;KANGXI RADICAL RIGHT OPEN BOX;So;0;ON; 531A;;;;N;;;;; 2F16;KANGXI RADICAL HIDING ENCLOSURE;So;0;ON; 5338;;;;N;;;;; 2F17;KANGXI RADICAL TEN;So;0;ON; 5341;;;;N;;;;; 2F18;KANGXI RADICAL DIVINATION;So;0;ON; 535C;;;;N;;;;; 2F19;KANGXI RADICAL SEAL;So;0;ON; 5369;;;;N;;;;; 2F1A;KANGXI RADICAL CLIFF;So;0;ON; 5382;;;;N;;;;; 2F1B;KANGXI RADICAL PRIVATE;So;0;ON; 53B6;;;;N;;;;; 2F1C;KANGXI RADICAL AGAIN;So;0;ON; 53C8;;;;N;;;;; 2F1D;KANGXI RADICAL MOUTH;So;0;ON; 53E3;;;;N;;;;; 2F1E;KANGXI RADICAL ENCLOSURE;So;0;ON; 56D7;;;;N;;;;; 2F1F;KANGXI RADICAL EARTH;So;0;ON; 571F;;;;N;;;;; 2F20;KANGXI RADICAL SCHOLAR;So;0;ON; 58EB;;;;N;;;;; 2F21;KANGXI RADICAL GO;So;0;ON; 5902;;;;N;;;;; 2F22;KANGXI RADICAL GO SLOWLY;So;0;ON; 590A;;;;N;;;;; 2F23;KANGXI RADICAL EVENING;So;0;ON; 5915;;;;N;;;;; 2F24;KANGXI RADICAL BIG;So;0;ON; 5927;;;;N;;;;; 2F25;KANGXI RADICAL WOMAN;So;0;ON; 5973;;;;N;;;;; 2F26;KANGXI RADICAL CHILD;So;0;ON; 5B50;;;;N;;;;; 2F27;KANGXI RADICAL ROOF;So;0;ON; 5B80;;;;N;;;;; 2F28;KANGXI RADICAL INCH;So;0;ON; 5BF8;;;;N;;;;; 2F29;KANGXI RADICAL SMALL;So;0;ON; 5C0F;;;;N;;;;; 2F2A;KANGXI RADICAL LAME;So;0;ON; 5C22;;;;N;;;;; 2F2B;KANGXI RADICAL CORPSE;So;0;ON; 5C38;;;;N;;;;; 2F2C;KANGXI RADICAL SPROUT;So;0;ON; 5C6E;;;;N;;;;; 2F2D;KANGXI RADICAL MOUNTAIN;So;0;ON; 5C71;;;;N;;;;; 2F2E;KANGXI RADICAL RIVER;So;0;ON; 5DDB;;;;N;;;;; 2F2F;KANGXI RADICAL WORK;So;0;ON; 5DE5;;;;N;;;;; 2F30;KANGXI RADICAL ONESELF;So;0;ON; 5DF1;;;;N;;;;; 2F31;KANGXI RADICAL TURBAN;So;0;ON; 5DFE;;;;N;;;;; 2F32;KANGXI RADICAL DRY;So;0;ON; 5E72;;;;N;;;;; 2F33;KANGXI RADICAL SHORT THREAD;So;0;ON; 5E7A;;;;N;;;;; 2F34;KANGXI RADICAL DOTTED CLIFF;So;0;ON; 5E7F;;;;N;;;;; 2F35;KANGXI RADICAL LONG STRIDE;So;0;ON; 5EF4;;;;N;;;;; 2F36;KANGXI RADICAL TWO HANDS;So;0;ON; 5EFE;;;;N;;;;; 2F37;KANGXI RADICAL SHOOT;So;0;ON; 5F0B;;;;N;;;;; 2F38;KANGXI RADICAL BOW;So;0;ON; 5F13;;;;N;;;;; 2F39;KANGXI RADICAL SNOUT;So;0;ON; 5F50;;;;N;;;;; 2F3A;KANGXI RADICAL BRISTLE;So;0;ON; 5F61;;;;N;;;;; 2F3B;KANGXI RADICAL STEP;So;0;ON; 5F73;;;;N;;;;; 2F3C;KANGXI RADICAL HEART;So;0;ON; 5FC3;;;;N;;;;; 2F3D;KANGXI RADICAL HALBERD;So;0;ON; 6208;;;;N;;;;; 2F3E;KANGXI RADICAL DOOR;So;0;ON; 6236;;;;N;;;;; 2F3F;KANGXI RADICAL HAND;So;0;ON; 624B;;;;N;;;;; 2F40;KANGXI RADICAL BRANCH;So;0;ON; 652F;;;;N;;;;; 2F41;KANGXI RADICAL RAP;So;0;ON; 6534;;;;N;;;;; 2F42;KANGXI RADICAL SCRIPT;So;0;ON; 6587;;;;N;;;;; 2F43;KANGXI RADICAL DIPPER;So;0;ON; 6597;;;;N;;;;; 2F44;KANGXI RADICAL AXE;So;0;ON; 65A4;;;;N;;;;; 2F45;KANGXI RADICAL SQUARE;So;0;ON; 65B9;;;;N;;;;; 2F46;KANGXI RADICAL NOT;So;0;ON; 65E0;;;;N;;;;; 2F47;KANGXI RADICAL SUN;So;0;ON; 65E5;;;;N;;;;; 2F48;KANGXI RADICAL SAY;So;0;ON; 66F0;;;;N;;;;; 2F49;KANGXI RADICAL MOON;So;0;ON; 6708;;;;N;;;;; 2F4A;KANGXI RADICAL TREE;So;0;ON; 6728;;;;N;;;;; 2F4B;KANGXI RADICAL LACK;So;0;ON; 6B20;;;;N;;;;; 2F4C;KANGXI RADICAL STOP;So;0;ON; 6B62;;;;N;;;;; 2F4D;KANGXI RADICAL DEATH;So;0;ON; 6B79;;;;N;;;;; 2F4E;KANGXI RADICAL WEAPON;So;0;ON; 6BB3;;;;N;;;;; 2F4F;KANGXI RADICAL DO NOT;So;0;ON; 6BCB;;;;N;;;;; 2F50;KANGXI RADICAL COMPARE;So;0;ON; 6BD4;;;;N;;;;; 2F51;KANGXI RADICAL FUR;So;0;ON; 6BDB;;;;N;;;;; 2F52;KANGXI RADICAL CLAN;So;0;ON; 6C0F;;;;N;;;;; 2F53;KANGXI RADICAL STEAM;So;0;ON; 6C14;;;;N;;;;; 2F54;KANGXI RADICAL WATER;So;0;ON; 6C34;;;;N;;;;; 2F55;KANGXI RADICAL FIRE;So;0;ON; 706B;;;;N;;;;; 2F56;KANGXI RADICAL CLAW;So;0;ON; 722A;;;;N;;;;; 2F57;KANGXI RADICAL FATHER;So;0;ON; 7236;;;;N;;;;; 2F58;KANGXI RADICAL DOUBLE X;So;0;ON; 723B;;;;N;;;;; 2F59;KANGXI RADICAL HALF TREE TRUNK;So;0;ON; 723F;;;;N;;;;; 2F5A;KANGXI RADICAL SLICE;So;0;ON; 7247;;;;N;;;;; 2F5B;KANGXI RADICAL FANG;So;0;ON; 7259;;;;N;;;;; 2F5C;KANGXI RADICAL COW;So;0;ON; 725B;;;;N;;;;; 2F5D;KANGXI RADICAL DOG;So;0;ON; 72AC;;;;N;;;;; 2F5E;KANGXI RADICAL PROFOUND;So;0;ON; 7384;;;;N;;;;; 2F5F;KANGXI RADICAL JADE;So;0;ON; 7389;;;;N;;;;; 2F60;KANGXI RADICAL MELON;So;0;ON; 74DC;;;;N;;;;; 2F61;KANGXI RADICAL TILE;So;0;ON; 74E6;;;;N;;;;; 2F62;KANGXI RADICAL SWEET;So;0;ON; 7518;;;;N;;;;; 2F63;KANGXI RADICAL LIFE;So;0;ON; 751F;;;;N;;;;; 2F64;KANGXI RADICAL USE;So;0;ON; 7528;;;;N;;;;; 2F65;KANGXI RADICAL FIELD;So;0;ON; 7530;;;;N;;;;; 2F66;KANGXI RADICAL BOLT OF CLOTH;So;0;ON; 758B;;;;N;;;;; 2F67;KANGXI RADICAL SICKNESS;So;0;ON; 7592;;;;N;;;;; 2F68;KANGXI RADICAL DOTTED TENT;So;0;ON; 7676;;;;N;;;;; 2F69;KANGXI RADICAL WHITE;So;0;ON; 767D;;;;N;;;;; 2F6A;KANGXI RADICAL SKIN;So;0;ON; 76AE;;;;N;;;;; 2F6B;KANGXI RADICAL DISH;So;0;ON; 76BF;;;;N;;;;; 2F6C;KANGXI RADICAL EYE;So;0;ON; 76EE;;;;N;;;;; 2F6D;KANGXI RADICAL SPEAR;So;0;ON; 77DB;;;;N;;;;; 2F6E;KANGXI RADICAL ARROW;So;0;ON; 77E2;;;;N;;;;; 2F6F;KANGXI RADICAL STONE;So;0;ON; 77F3;;;;N;;;;; 2F70;KANGXI RADICAL SPIRIT;So;0;ON; 793A;;;;N;;;;; 2F71;KANGXI RADICAL TRACK;So;0;ON; 79B8;;;;N;;;;; 2F72;KANGXI RADICAL GRAIN;So;0;ON; 79BE;;;;N;;;;; 2F73;KANGXI RADICAL CAVE;So;0;ON; 7A74;;;;N;;;;; 2F74;KANGXI RADICAL STAND;So;0;ON; 7ACB;;;;N;;;;; 2F75;KANGXI RADICAL BAMBOO;So;0;ON; 7AF9;;;;N;;;;; 2F76;KANGXI RADICAL RICE;So;0;ON; 7C73;;;;N;;;;; 2F77;KANGXI RADICAL SILK;So;0;ON; 7CF8;;;;N;;;;; 2F78;KANGXI RADICAL JAR;So;0;ON; 7F36;;;;N;;;;; 2F79;KANGXI RADICAL NET;So;0;ON; 7F51;;;;N;;;;; 2F7A;KANGXI RADICAL SHEEP;So;0;ON; 7F8A;;;;N;;;;; 2F7B;KANGXI RADICAL FEATHER;So;0;ON; 7FBD;;;;N;;;;; 2F7C;KANGXI RADICAL OLD;So;0;ON; 8001;;;;N;;;;; 2F7D;KANGXI RADICAL AND;So;0;ON; 800C;;;;N;;;;; 2F7E;KANGXI RADICAL PLOW;So;0;ON; 8012;;;;N;;;;; 2F7F;KANGXI RADICAL EAR;So;0;ON; 8033;;;;N;;;;; 2F80;KANGXI RADICAL BRUSH;So;0;ON; 807F;;;;N;;;;; 2F81;KANGXI RADICAL MEAT;So;0;ON; 8089;;;;N;;;;; 2F82;KANGXI RADICAL MINISTER;So;0;ON; 81E3;;;;N;;;;; 2F83;KANGXI RADICAL SELF;So;0;ON; 81EA;;;;N;;;;; 2F84;KANGXI RADICAL ARRIVE;So;0;ON; 81F3;;;;N;;;;; 2F85;KANGXI RADICAL MORTAR;So;0;ON; 81FC;;;;N;;;;; 2F86;KANGXI RADICAL TONGUE;So;0;ON; 820C;;;;N;;;;; 2F87;KANGXI RADICAL OPPOSE;So;0;ON; 821B;;;;N;;;;; 2F88;KANGXI RADICAL BOAT;So;0;ON; 821F;;;;N;;;;; 2F89;KANGXI RADICAL STOPPING;So;0;ON; 826E;;;;N;;;;; 2F8A;KANGXI RADICAL COLOR;So;0;ON; 8272;;;;N;;;;; 2F8B;KANGXI RADICAL GRASS;So;0;ON; 8278;;;;N;;;;; 2F8C;KANGXI RADICAL TIGER;So;0;ON; 864D;;;;N;;;;; 2F8D;KANGXI RADICAL INSECT;So;0;ON; 866B;;;;N;;;;; 2F8E;KANGXI RADICAL BLOOD;So;0;ON; 8840;;;;N;;;;; 2F8F;KANGXI RADICAL WALK ENCLOSURE;So;0;ON; 884C;;;;N;;;;; 2F90;KANGXI RADICAL CLOTHES;So;0;ON; 8863;;;;N;;;;; 2F91;KANGXI RADICAL WEST;So;0;ON; 897E;;;;N;;;;; 2F92;KANGXI RADICAL SEE;So;0;ON; 898B;;;;N;;;;; 2F93;KANGXI RADICAL HORN;So;0;ON; 89D2;;;;N;;;;; 2F94;KANGXI RADICAL SPEECH;So;0;ON; 8A00;;;;N;;;;; 2F95;KANGXI RADICAL VALLEY;So;0;ON; 8C37;;;;N;;;;; 2F96;KANGXI RADICAL BEAN;So;0;ON; 8C46;;;;N;;;;; 2F97;KANGXI RADICAL PIG;So;0;ON; 8C55;;;;N;;;;; 2F98;KANGXI RADICAL BADGER;So;0;ON; 8C78;;;;N;;;;; 2F99;KANGXI RADICAL SHELL;So;0;ON; 8C9D;;;;N;;;;; 2F9A;KANGXI RADICAL RED;So;0;ON; 8D64;;;;N;;;;; 2F9B;KANGXI RADICAL RUN;So;0;ON; 8D70;;;;N;;;;; 2F9C;KANGXI RADICAL FOOT;So;0;ON; 8DB3;;;;N;;;;; 2F9D;KANGXI RADICAL BODY;So;0;ON; 8EAB;;;;N;;;;; 2F9E;KANGXI RADICAL CART;So;0;ON; 8ECA;;;;N;;;;; 2F9F;KANGXI RADICAL BITTER;So;0;ON; 8F9B;;;;N;;;;; 2FA0;KANGXI RADICAL MORNING;So;0;ON; 8FB0;;;;N;;;;; 2FA1;KANGXI RADICAL WALK;So;0;ON; 8FB5;;;;N;;;;; 2FA2;KANGXI RADICAL CITY;So;0;ON; 9091;;;;N;;;;; 2FA3;KANGXI RADICAL WINE;So;0;ON; 9149;;;;N;;;;; 2FA4;KANGXI RADICAL DISTINGUISH;So;0;ON; 91C6;;;;N;;;;; 2FA5;KANGXI RADICAL VILLAGE;So;0;ON; 91CC;;;;N;;;;; 2FA6;KANGXI RADICAL GOLD;So;0;ON; 91D1;;;;N;;;;; 2FA7;KANGXI RADICAL LONG;So;0;ON; 9577;;;;N;;;;; 2FA8;KANGXI RADICAL GATE;So;0;ON; 9580;;;;N;;;;; 2FA9;KANGXI RADICAL MOUND;So;0;ON; 961C;;;;N;;;;; 2FAA;KANGXI RADICAL SLAVE;So;0;ON; 96B6;;;;N;;;;; 2FAB;KANGXI RADICAL SHORT TAILED BIRD;So;0;ON; 96B9;;;;N;;;;; 2FAC;KANGXI RADICAL RAIN;So;0;ON; 96E8;;;;N;;;;; 2FAD;KANGXI RADICAL BLUE;So;0;ON; 9751;;;;N;;;;; 2FAE;KANGXI RADICAL WRONG;So;0;ON; 975E;;;;N;;;;; 2FAF;KANGXI RADICAL FACE;So;0;ON; 9762;;;;N;;;;; 2FB0;KANGXI RADICAL LEATHER;So;0;ON; 9769;;;;N;;;;; 2FB1;KANGXI RADICAL TANNED LEATHER;So;0;ON; 97CB;;;;N;;;;; 2FB2;KANGXI RADICAL LEEK;So;0;ON; 97ED;;;;N;;;;; 2FB3;KANGXI RADICAL SOUND;So;0;ON; 97F3;;;;N;;;;; 2FB4;KANGXI RADICAL LEAF;So;0;ON; 9801;;;;N;;;;; 2FB5;KANGXI RADICAL WIND;So;0;ON; 98A8;;;;N;;;;; 2FB6;KANGXI RADICAL FLY;So;0;ON; 98DB;;;;N;;;;; 2FB7;KANGXI RADICAL EAT;So;0;ON; 98DF;;;;N;;;;; 2FB8;KANGXI RADICAL HEAD;So;0;ON; 9996;;;;N;;;;; 2FB9;KANGXI RADICAL FRAGRANT;So;0;ON; 9999;;;;N;;;;; 2FBA;KANGXI RADICAL HORSE;So;0;ON; 99AC;;;;N;;;;; 2FBB;KANGXI RADICAL BONE;So;0;ON; 9AA8;;;;N;;;;; 2FBC;KANGXI RADICAL TALL;So;0;ON; 9AD8;;;;N;;;;; 2FBD;KANGXI RADICAL HAIR;So;0;ON; 9ADF;;;;N;;;;; 2FBE;KANGXI RADICAL FIGHT;So;0;ON; 9B25;;;;N;;;;; 2FBF;KANGXI RADICAL SACRIFICIAL WINE;So;0;ON; 9B2F;;;;N;;;;; 2FC0;KANGXI RADICAL CAULDRON;So;0;ON; 9B32;;;;N;;;;; 2FC1;KANGXI RADICAL GHOST;So;0;ON; 9B3C;;;;N;;;;; 2FC2;KANGXI RADICAL FISH;So;0;ON; 9B5A;;;;N;;;;; 2FC3;KANGXI RADICAL BIRD;So;0;ON; 9CE5;;;;N;;;;; 2FC4;KANGXI RADICAL SALT;So;0;ON; 9E75;;;;N;;;;; 2FC5;KANGXI RADICAL DEER;So;0;ON; 9E7F;;;;N;;;;; 2FC6;KANGXI RADICAL WHEAT;So;0;ON; 9EA5;;;;N;;;;; 2FC7;KANGXI RADICAL HEMP;So;0;ON; 9EBB;;;;N;;;;; 2FC8;KANGXI RADICAL YELLOW;So;0;ON; 9EC3;;;;N;;;;; 2FC9;KANGXI RADICAL MILLET;So;0;ON; 9ECD;;;;N;;;;; 2FCA;KANGXI RADICAL BLACK;So;0;ON; 9ED1;;;;N;;;;; 2FCB;KANGXI RADICAL EMBROIDERY;So;0;ON; 9EF9;;;;N;;;;; 2FCC;KANGXI RADICAL FROG;So;0;ON; 9EFD;;;;N;;;;; 2FCD;KANGXI RADICAL TRIPOD;So;0;ON; 9F0E;;;;N;;;;; 2FCE;KANGXI RADICAL DRUM;So;0;ON; 9F13;;;;N;;;;; 2FCF;KANGXI RADICAL RAT;So;0;ON; 9F20;;;;N;;;;; 2FD0;KANGXI RADICAL NOSE;So;0;ON; 9F3B;;;;N;;;;; 2FD1;KANGXI RADICAL EVEN;So;0;ON; 9F4A;;;;N;;;;; 2FD2;KANGXI RADICAL TOOTH;So;0;ON; 9F52;;;;N;;;;; 2FD3;KANGXI RADICAL DRAGON;So;0;ON; 9F8D;;;;N;;;;; 2FD4;KANGXI RADICAL TURTLE;So;0;ON; 9F9C;;;;N;;;;; 2FD5;KANGXI RADICAL FLUTE;So;0;ON; 9FA0;;;;N;;;;; 2FF0;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT;So;0;ON;;;;;N;;;;; 2FF1;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW;So;0;ON;;;;;N;;;;; 2FF2;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT;So;0;ON;;;;;N;;;;; 2FF3;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW;So;0;ON;;;;;N;;;;; 2FF4;IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND;So;0;ON;;;;;N;;;;; 2FF5;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE;So;0;ON;;;;;N;;;;; 2FF6;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW;So;0;ON;;;;;N;;;;; 2FF7;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT;So;0;ON;;;;;N;;;;; 2FF8;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT;So;0;ON;;;;;N;;;;; 2FF9;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT;So;0;ON;;;;;N;;;;; 2FFA;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT;So;0;ON;;;;;N;;;;; 2FFB;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID;So;0;ON;;;;;N;;;;; 3000;IDEOGRAPHIC SPACE;Zs;0;WS; 0020;;;;N;;;;; 3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;; 3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;; 3003;DITTO MARK;Po;0;ON;;;;;N;;;;; 3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;; 3005;IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;; 3006;IDEOGRAPHIC CLOSING MARK;Lo;0;L;;;;;N;;;;; 3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;L;;;;0;N;;;;; 3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;; 3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;; 300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;; 300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;; 300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;; 300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;; 300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;; 300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;; 3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;; 3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;; 3012;POSTAL MARK;So;0;ON;;;;;N;;;;; 3013;GETA MARK;So;0;ON;;;;;N;;;;; 3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;; 3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;; 3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;; 3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;; 3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;; 3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;; 301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;; 301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;; 301C;WAVE DASH;Pd;0;ON;;;;;N;;;;; 301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;N;;;;; 301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;; 301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;; 3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;; 3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;; 3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;; 3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;; 3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;; 3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;; 3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;; 3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;; 3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;; 3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;; 302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;NSM;;;;;N;;;;; 302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;NSM;;;;;N;;;;; 302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;NSM;;;;;N;;;;; 302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;NSM;;;;;N;;;;; 302E;HANGUL SINGLE DOT TONE MARK;Mc;224;L;;;;;N;;;;; 302F;HANGUL DOUBLE DOT TONE MARK;Mc;224;L;;;;;N;;;;; 3030;WAVY DASH;Pd;0;ON;;;;;N;;;;; 3031;VERTICAL KANA REPEAT MARK;Lm;0;L;;;;;N;;;;; 3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;L;;;;;N;;;;; 3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;L;;;;;N;;;;; 3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;L;;;;;N;;;;; 3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;L;;;;;N;;;;; 3036;CIRCLED POSTAL MARK;So;0;ON; 3012;;;;N;;;;; 3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;; 3038;HANGZHOU NUMERAL TEN;Nl;0;L; 5341;;;10;N;;;;; 3039;HANGZHOU NUMERAL TWENTY;Nl;0;L; 5344;;;20;N;;;;; 303A;HANGZHOU NUMERAL THIRTY;Nl;0;L; 5345;;;30;N;;;;; 303B;VERTICAL IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;; 303C;MASU MARK;Lo;0;L;;;;;N;;;;; 303D;PART ALTERNATION MARK;Po;0;ON;;;;;N;;;;; 303E;IDEOGRAPHIC VARIATION INDICATOR;So;0;ON;;;;;N;;;;; 303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;; 3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;; 3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;; 3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;; 3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;; 3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;; 3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;; 3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;; 3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;; 3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;; 304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;; 304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;; 304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;; 304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;; 304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;; 304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;; 3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;; 3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;; 3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;; 3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;; 3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;; 3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;; 3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;; 3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;; 3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;; 3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;; 305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;; 305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;; 305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;; 305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;; 305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;; 305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;; 3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;; 3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;; 3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;; 3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;; 3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;; 3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;; 3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;; 3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;; 3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;; 3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;; 306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;; 306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;; 306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;; 306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;; 306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;; 306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;; 3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;; 3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;; 3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;; 3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;; 3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;; 3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;; 3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;; 3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;; 3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;; 3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;; 307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;; 307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;; 307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;; 307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;; 307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;; 307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;; 3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;; 3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;; 3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;; 3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;; 3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;; 3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;; 3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;; 3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;; 3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;; 3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;; 308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;; 308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;; 308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;; 308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;; 308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;; 308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;; 3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;; 3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;; 3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;; 3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;; 3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;; 3095;HIRAGANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;; 3096;HIRAGANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;; 3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;; 309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;; 309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Sk;0;ON; 0020 3099;;;;N;;;;; 309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Sk;0;ON; 0020 309A;;;;N;;;;; 309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;; 309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;; 309F;HIRAGANA DIGRAPH YORI;Lo;0;L; 3088 308A;;;;N;;;;; 30A0;KATAKANA-HIRAGANA DOUBLE HYPHEN;Pd;0;ON;;;;;N;;;;; 30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;; 30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;; 30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;; 30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;; 30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;; 30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;; 30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;; 30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;; 30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;; 30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;; 30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;; 30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;; 30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;; 30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;; 30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;; 30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;; 30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;; 30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;; 30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;; 30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;; 30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;; 30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;; 30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;; 30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;; 30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;; 30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;; 30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;; 30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;; 30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;; 30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;; 30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;; 30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;; 30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;; 30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;; 30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;; 30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;; 30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;; 30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;; 30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;; 30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;; 30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;; 30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;; 30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;; 30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;; 30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;; 30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;; 30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;; 30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;; 30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;; 30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;; 30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;; 30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;; 30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;; 30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;; 30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;; 30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;; 30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;; 30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;; 30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;; 30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;; 30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;; 30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;; 30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;; 30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;; 30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;; 30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;; 30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;; 30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;; 30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;; 30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;; 30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;; 30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;; 30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;; 30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;; 30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;; 30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;; 30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;; 30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;; 30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;; 30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;; 30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;; 30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;; 30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;; 30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;; 30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;; 30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;; 30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;; 30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;; 30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;; 30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;; 30FB;KATAKANA MIDDLE DOT;Po;0;ON;;;;;N;;;;; 30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;; 30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;; 30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;; 30FF;KATAKANA DIGRAPH KOTO;Lo;0;L; 30B3 30C8;;;;N;;;;; 3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;; 3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;; 3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;; 3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;; 3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;; 310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;; 310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;; 310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;; 310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;; 310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;; 310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;; 3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;; 3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;; 3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;; 3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;; 3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;; 3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;; 3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;; 3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;; 3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;; 3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;; 311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;; 311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;; 311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;; 311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;; 311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;; 311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;; 3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;; 3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;; 3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;; 3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;; 3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;; 3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;; 3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;; 3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;; 3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;; 3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;; 312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;; 312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;; 312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;; 312D;BOPOMOFO LETTER IH;Lo;0;L;;;;;N;;;;; 312E;BOPOMOFO LETTER O WITH DOT ABOVE;Lo;0;L;;;;;N;;;;; 312F;BOPOMOFO LETTER NN;Lo;0;L;;;;;N;;;;; 3131;HANGUL LETTER KIYEOK;Lo;0;L; 1100;;;;N;HANGUL LETTER GIYEOG;;;; 3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L; 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;; 3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L; 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;; 3134;HANGUL LETTER NIEUN;Lo;0;L; 1102;;;;N;;;;; 3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L; 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;; 3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L; 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;; 3137;HANGUL LETTER TIKEUT;Lo;0;L; 1103;;;;N;HANGUL LETTER DIGEUD;;;; 3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L; 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;; 3139;HANGUL LETTER RIEUL;Lo;0;L; 1105;;;;N;HANGUL LETTER LIEUL;;;; 313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L; 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;; 313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L; 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;; 313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L; 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;; 313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L; 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;; 313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L; 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;; 313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L; 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;; 3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L; 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;; 3141;HANGUL LETTER MIEUM;Lo;0;L; 1106;;;;N;;;;; 3142;HANGUL LETTER PIEUP;Lo;0;L; 1107;;;;N;HANGUL LETTER BIEUB;;;; 3143;HANGUL LETTER SSANGPIEUP;Lo;0;L; 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;; 3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L; 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;; 3145;HANGUL LETTER SIOS;Lo;0;L; 1109;;;;N;;;;; 3146;HANGUL LETTER SSANGSIOS;Lo;0;L; 110A;;;;N;HANGUL LETTER SSANG SIOS;;;; 3147;HANGUL LETTER IEUNG;Lo;0;L; 110B;;;;N;;;;; 3148;HANGUL LETTER CIEUC;Lo;0;L; 110C;;;;N;HANGUL LETTER JIEUJ;;;; 3149;HANGUL LETTER SSANGCIEUC;Lo;0;L; 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;; 314A;HANGUL LETTER CHIEUCH;Lo;0;L; 110E;;;;N;HANGUL LETTER CIEUC;;;; 314B;HANGUL LETTER KHIEUKH;Lo;0;L; 110F;;;;N;HANGUL LETTER KIYEOK;;;; 314C;HANGUL LETTER THIEUTH;Lo;0;L; 1110;;;;N;HANGUL LETTER TIEUT;;;; 314D;HANGUL LETTER PHIEUPH;Lo;0;L; 1111;;;;N;HANGUL LETTER PIEUP;;;; 314E;HANGUL LETTER HIEUH;Lo;0;L; 1112;;;;N;;;;; 314F;HANGUL LETTER A;Lo;0;L; 1161;;;;N;;;;; 3150;HANGUL LETTER AE;Lo;0;L; 1162;;;;N;;;;; 3151;HANGUL LETTER YA;Lo;0;L; 1163;;;;N;;;;; 3152;HANGUL LETTER YAE;Lo;0;L; 1164;;;;N;;;;; 3153;HANGUL LETTER EO;Lo;0;L; 1165;;;;N;;;;; 3154;HANGUL LETTER E;Lo;0;L; 1166;;;;N;;;;; 3155;HANGUL LETTER YEO;Lo;0;L; 1167;;;;N;;;;; 3156;HANGUL LETTER YE;Lo;0;L; 1168;;;;N;;;;; 3157;HANGUL LETTER O;Lo;0;L; 1169;;;;N;;;;; 3158;HANGUL LETTER WA;Lo;0;L; 116A;;;;N;;;;; 3159;HANGUL LETTER WAE;Lo;0;L; 116B;;;;N;;;;; 315A;HANGUL LETTER OE;Lo;0;L; 116C;;;;N;;;;; 315B;HANGUL LETTER YO;Lo;0;L; 116D;;;;N;;;;; 315C;HANGUL LETTER U;Lo;0;L; 116E;;;;N;;;;; 315D;HANGUL LETTER WEO;Lo;0;L; 116F;;;;N;;;;; 315E;HANGUL LETTER WE;Lo;0;L; 1170;;;;N;;;;; 315F;HANGUL LETTER WI;Lo;0;L; 1171;;;;N;;;;; 3160;HANGUL LETTER YU;Lo;0;L; 1172;;;;N;;;;; 3161;HANGUL LETTER EU;Lo;0;L; 1173;;;;N;;;;; 3162;HANGUL LETTER YI;Lo;0;L; 1174;;;;N;;;;; 3163;HANGUL LETTER I;Lo;0;L; 1175;;;;N;;;;; 3164;HANGUL FILLER;Lo;0;L; 1160;;;;N;HANGUL CAE OM;;;; 3165;HANGUL LETTER SSANGNIEUN;Lo;0;L; 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;; 3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L; 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;; 3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L; 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;; 3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L; 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;; 3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L; 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;; 316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L; 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;; 316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L; 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;; 316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L; 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;; 316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L; 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;; 316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L; 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;; 316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L; 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;; 3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L; 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;; 3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L; 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;; 3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L; 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;; 3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L; 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;; 3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L; 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;; 3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L; 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;; 3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L; 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;; 3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L; 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;; 3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L; 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;; 3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L; 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;; 317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L; 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;; 317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L; 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;; 317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L; 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;; 317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L; 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;; 317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L; 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;; 317F;HANGUL LETTER PANSIOS;Lo;0;L; 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;; 3180;HANGUL LETTER SSANGIEUNG;Lo;0;L; 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;; 3181;HANGUL LETTER YESIEUNG;Lo;0;L; 114C;;;;N;HANGUL LETTER NGIEUNG;;;; 3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L; 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;; 3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L; 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;; 3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L; 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;; 3185;HANGUL LETTER SSANGHIEUH;Lo;0;L; 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;; 3186;HANGUL LETTER YEORINHIEUH;Lo;0;L; 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;; 3187;HANGUL LETTER YO-YA;Lo;0;L; 1184;;;;N;HANGUL LETTER YOYA;;;; 3188;HANGUL LETTER YO-YAE;Lo;0;L; 1185;;;;N;HANGUL LETTER YOYAE;;;; 3189;HANGUL LETTER YO-I;Lo;0;L; 1188;;;;N;HANGUL LETTER YOI;;;; 318A;HANGUL LETTER YU-YEO;Lo;0;L; 1191;;;;N;HANGUL LETTER YUYEO;;;; 318B;HANGUL LETTER YU-YE;Lo;0;L; 1192;;;;N;HANGUL LETTER YUYE;;;; 318C;HANGUL LETTER YU-I;Lo;0;L; 1194;;;;N;HANGUL LETTER YUI;;;; 318D;HANGUL LETTER ARAEA;Lo;0;L; 119E;;;;N;HANGUL LETTER ALAE A;;;; 318E;HANGUL LETTER ARAEAE;Lo;0;L; 11A1;;;;N;HANGUL LETTER ALAE AE;;;; 3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;;;; 3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;;;; 3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L; 4E00;;;1;N;KAERITEN ITI;;;; 3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L; 4E8C;;;2;N;KAERITEN NI;;;; 3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L; 4E09;;;3;N;KAERITEN SAN;;;; 3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L; 56DB;;;4;N;KAERITEN SI;;;; 3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L; 4E0A;;;;N;KAERITEN ZYOU;;;; 3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L; 4E2D;;;;N;KAERITEN TYUU;;;; 3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L; 4E0B;;;;N;KAERITEN GE;;;; 3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L; 7532;;;;N;KAERITEN KOU;;;; 319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L; 4E59;;;;N;KAERITEN OTU;;;; 319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L; 4E19;;;;N;KAERITEN HEI;;;; 319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L; 4E01;;;;N;KAERITEN TEI;;;; 319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L; 5929;;;;N;KAERITEN TEN;;;; 319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L; 5730;;;;N;KAERITEN TI;;;; 319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L; 4EBA;;;;N;KAERITEN ZIN;;;; 31A0;BOPOMOFO LETTER BU;Lo;0;L;;;;;N;;;;; 31A1;BOPOMOFO LETTER ZI;Lo;0;L;;;;;N;;;;; 31A2;BOPOMOFO LETTER JI;Lo;0;L;;;;;N;;;;; 31A3;BOPOMOFO LETTER GU;Lo;0;L;;;;;N;;;;; 31A4;BOPOMOFO LETTER EE;Lo;0;L;;;;;N;;;;; 31A5;BOPOMOFO LETTER ENN;Lo;0;L;;;;;N;;;;; 31A6;BOPOMOFO LETTER OO;Lo;0;L;;;;;N;;;;; 31A7;BOPOMOFO LETTER ONN;Lo;0;L;;;;;N;;;;; 31A8;BOPOMOFO LETTER IR;Lo;0;L;;;;;N;;;;; 31A9;BOPOMOFO LETTER ANN;Lo;0;L;;;;;N;;;;; 31AA;BOPOMOFO LETTER INN;Lo;0;L;;;;;N;;;;; 31AB;BOPOMOFO LETTER UNN;Lo;0;L;;;;;N;;;;; 31AC;BOPOMOFO LETTER IM;Lo;0;L;;;;;N;;;;; 31AD;BOPOMOFO LETTER NGG;Lo;0;L;;;;;N;;;;; 31AE;BOPOMOFO LETTER AINN;Lo;0;L;;;;;N;;;;; 31AF;BOPOMOFO LETTER AUNN;Lo;0;L;;;;;N;;;;; 31B0;BOPOMOFO LETTER AM;Lo;0;L;;;;;N;;;;; 31B1;BOPOMOFO LETTER OM;Lo;0;L;;;;;N;;;;; 31B2;BOPOMOFO LETTER ONG;Lo;0;L;;;;;N;;;;; 31B3;BOPOMOFO LETTER INNN;Lo;0;L;;;;;N;;;;; 31B4;BOPOMOFO FINAL LETTER P;Lo;0;L;;;;;N;;;;; 31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;; 31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;; 31B7;BOPOMOFO FINAL LETTER H;Lo;0;L;;;;;N;;;;; 31B8;BOPOMOFO LETTER GH;Lo;0;L;;;;;N;;;;; 31B9;BOPOMOFO LETTER LH;Lo;0;L;;;;;N;;;;; 31BA;BOPOMOFO LETTER ZY;Lo;0;L;;;;;N;;;;; 31BB;BOPOMOFO FINAL LETTER G;Lo;0;L;;;;;N;;;;; 31BC;BOPOMOFO LETTER GW;Lo;0;L;;;;;N;;;;; 31BD;BOPOMOFO LETTER KW;Lo;0;L;;;;;N;;;;; 31BE;BOPOMOFO LETTER OE;Lo;0;L;;;;;N;;;;; 31BF;BOPOMOFO LETTER AH;Lo;0;L;;;;;N;;;;; 31C0;CJK STROKE T;So;0;ON;;;;;N;;;;; 31C1;CJK STROKE WG;So;0;ON;;;;;N;;;;; 31C2;CJK STROKE XG;So;0;ON;;;;;N;;;;; 31C3;CJK STROKE BXG;So;0;ON;;;;;N;;;;; 31C4;CJK STROKE SW;So;0;ON;;;;;N;;;;; 31C5;CJK STROKE HZZ;So;0;ON;;;;;N;;;;; 31C6;CJK STROKE HZG;So;0;ON;;;;;N;;;;; 31C7;CJK STROKE HP;So;0;ON;;;;;N;;;;; 31C8;CJK STROKE HZWG;So;0;ON;;;;;N;;;;; 31C9;CJK STROKE SZWG;So;0;ON;;;;;N;;;;; 31CA;CJK STROKE HZT;So;0;ON;;;;;N;;;;; 31CB;CJK STROKE HZZP;So;0;ON;;;;;N;;;;; 31CC;CJK STROKE HPWG;So;0;ON;;;;;N;;;;; 31CD;CJK STROKE HZW;So;0;ON;;;;;N;;;;; 31CE;CJK STROKE HZZZ;So;0;ON;;;;;N;;;;; 31CF;CJK STROKE N;So;0;ON;;;;;N;;;;; 31D0;CJK STROKE H;So;0;ON;;;;;N;;;;; 31D1;CJK STROKE S;So;0;ON;;;;;N;;;;; 31D2;CJK STROKE P;So;0;ON;;;;;N;;;;; 31D3;CJK STROKE SP;So;0;ON;;;;;N;;;;; 31D4;CJK STROKE D;So;0;ON;;;;;N;;;;; 31D5;CJK STROKE HZ;So;0;ON;;;;;N;;;;; 31D6;CJK STROKE HG;So;0;ON;;;;;N;;;;; 31D7;CJK STROKE SZ;So;0;ON;;;;;N;;;;; 31D8;CJK STROKE SWZ;So;0;ON;;;;;N;;;;; 31D9;CJK STROKE ST;So;0;ON;;;;;N;;;;; 31DA;CJK STROKE SG;So;0;ON;;;;;N;;;;; 31DB;CJK STROKE PD;So;0;ON;;;;;N;;;;; 31DC;CJK STROKE PZ;So;0;ON;;;;;N;;;;; 31DD;CJK STROKE TN;So;0;ON;;;;;N;;;;; 31DE;CJK STROKE SZZ;So;0;ON;;;;;N;;;;; 31DF;CJK STROKE SWG;So;0;ON;;;;;N;;;;; 31E0;CJK STROKE HXWG;So;0;ON;;;;;N;;;;; 31E1;CJK STROKE HZZZG;So;0;ON;;;;;N;;;;; 31E2;CJK STROKE PG;So;0;ON;;;;;N;;;;; 31E3;CJK STROKE Q;So;0;ON;;;;;N;;;;; 31F0;KATAKANA LETTER SMALL KU;Lo;0;L;;;;;N;;;;; 31F1;KATAKANA LETTER SMALL SI;Lo;0;L;;;;;N;;;;; 31F2;KATAKANA LETTER SMALL SU;Lo;0;L;;;;;N;;;;; 31F3;KATAKANA LETTER SMALL TO;Lo;0;L;;;;;N;;;;; 31F4;KATAKANA LETTER SMALL NU;Lo;0;L;;;;;N;;;;; 31F5;KATAKANA LETTER SMALL HA;Lo;0;L;;;;;N;;;;; 31F6;KATAKANA LETTER SMALL HI;Lo;0;L;;;;;N;;;;; 31F7;KATAKANA LETTER SMALL HU;Lo;0;L;;;;;N;;;;; 31F8;KATAKANA LETTER SMALL HE;Lo;0;L;;;;;N;;;;; 31F9;KATAKANA LETTER SMALL HO;Lo;0;L;;;;;N;;;;; 31FA;KATAKANA LETTER SMALL MU;Lo;0;L;;;;;N;;;;; 31FB;KATAKANA LETTER SMALL RA;Lo;0;L;;;;;N;;;;; 31FC;KATAKANA LETTER SMALL RI;Lo;0;L;;;;;N;;;;; 31FD;KATAKANA LETTER SMALL RU;Lo;0;L;;;;;N;;;;; 31FE;KATAKANA LETTER SMALL RE;Lo;0;L;;;;;N;;;;; 31FF;KATAKANA LETTER SMALL RO;Lo;0;L;;;;;N;;;;; 3200;PARENTHESIZED HANGUL KIYEOK;So;0;L; 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;; 3201;PARENTHESIZED HANGUL NIEUN;So;0;L; 0028 1102 0029;;;;N;;;;; 3202;PARENTHESIZED HANGUL TIKEUT;So;0;L; 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;; 3203;PARENTHESIZED HANGUL RIEUL;So;0;L; 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;; 3204;PARENTHESIZED HANGUL MIEUM;So;0;L; 0028 1106 0029;;;;N;;;;; 3205;PARENTHESIZED HANGUL PIEUP;So;0;L; 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;; 3206;PARENTHESIZED HANGUL SIOS;So;0;L; 0028 1109 0029;;;;N;;;;; 3207;PARENTHESIZED HANGUL IEUNG;So;0;L; 0028 110B 0029;;;;N;;;;; 3208;PARENTHESIZED HANGUL CIEUC;So;0;L; 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;; 3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L; 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;; 320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L; 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;; 320B;PARENTHESIZED HANGUL THIEUTH;So;0;L; 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;; 320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L; 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;; 320D;PARENTHESIZED HANGUL HIEUH;So;0;L; 0028 1112 0029;;;;N;;;;; 320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L; 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;; 320F;PARENTHESIZED HANGUL NIEUN A;So;0;L; 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;; 3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L; 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;; 3211;PARENTHESIZED HANGUL RIEUL A;So;0;L; 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;; 3212;PARENTHESIZED HANGUL MIEUM A;So;0;L; 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;; 3213;PARENTHESIZED HANGUL PIEUP A;So;0;L; 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;; 3214;PARENTHESIZED HANGUL SIOS A;So;0;L; 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;; 3215;PARENTHESIZED HANGUL IEUNG A;So;0;L; 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;; 3216;PARENTHESIZED HANGUL CIEUC A;So;0;L; 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;; 3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L; 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;; 3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L; 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;; 3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L; 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;; 321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L; 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;; 321B;PARENTHESIZED HANGUL HIEUH A;So;0;L; 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;; 321C;PARENTHESIZED HANGUL CIEUC U;So;0;L; 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;; 321D;PARENTHESIZED KOREAN CHARACTER OJEON;So;0;ON; 0028 110B 1169 110C 1165 11AB 0029;;;;N;;;;; 321E;PARENTHESIZED KOREAN CHARACTER O HU;So;0;ON; 0028 110B 1169 1112 116E 0029;;;;N;;;;; 3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L; 0028 4E00 0029;;;1;N;;;;; 3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L; 0028 4E8C 0029;;;2;N;;;;; 3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L; 0028 4E09 0029;;;3;N;;;;; 3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L; 0028 56DB 0029;;;4;N;;;;; 3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L; 0028 4E94 0029;;;5;N;;;;; 3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L; 0028 516D 0029;;;6;N;;;;; 3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L; 0028 4E03 0029;;;7;N;;;;; 3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L; 0028 516B 0029;;;8;N;;;;; 3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L; 0028 4E5D 0029;;;9;N;;;;; 3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L; 0028 5341 0029;;;10;N;;;;; 322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L; 0028 6708 0029;;;;N;;;;; 322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L; 0028 706B 0029;;;;N;;;;; 322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L; 0028 6C34 0029;;;;N;;;;; 322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L; 0028 6728 0029;;;;N;;;;; 322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L; 0028 91D1 0029;;;;N;;;;; 322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L; 0028 571F 0029;;;;N;;;;; 3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L; 0028 65E5 0029;;;;N;;;;; 3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L; 0028 682A 0029;;;;N;;;;; 3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L; 0028 6709 0029;;;;N;;;;; 3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L; 0028 793E 0029;;;;N;;;;; 3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L; 0028 540D 0029;;;;N;;;;; 3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L; 0028 7279 0029;;;;N;;;;; 3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L; 0028 8CA1 0029;;;;N;;;;; 3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L; 0028 795D 0029;;;;N;;;;; 3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L; 0028 52B4 0029;;;;N;;;;; 3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L; 0028 4EE3 0029;;;;N;;;;; 323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L; 0028 547C 0029;;;;N;;;;; 323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L; 0028 5B66 0029;;;;N;;;;; 323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L; 0028 76E3 0029;;;;N;;;;; 323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L; 0028 4F01 0029;;;;N;;;;; 323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L; 0028 8CC7 0029;;;;N;;;;; 323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L; 0028 5354 0029;;;;N;;;;; 3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L; 0028 796D 0029;;;;N;;;;; 3241;PARENTHESIZED IDEOGRAPH REST;So;0;L; 0028 4F11 0029;;;;N;;;;; 3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L; 0028 81EA 0029;;;;N;;;;; 3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L; 0028 81F3 0029;;;;N;;;;; 3244;CIRCLED IDEOGRAPH QUESTION;So;0;L; 554F;;;;N;;;;; 3245;CIRCLED IDEOGRAPH KINDERGARTEN;So;0;L; 5E7C;;;;N;;;;; 3246;CIRCLED IDEOGRAPH SCHOOL;So;0;L; 6587;;;;N;;;;; 3247;CIRCLED IDEOGRAPH KOTO;So;0;L; 7B8F;;;;N;;;;; 3248;CIRCLED NUMBER TEN ON BLACK SQUARE;No;0;L;;;;10;N;;;;; 3249;CIRCLED NUMBER TWENTY ON BLACK SQUARE;No;0;L;;;;20;N;;;;; 324A;CIRCLED NUMBER THIRTY ON BLACK SQUARE;No;0;L;;;;30;N;;;;; 324B;CIRCLED NUMBER FORTY ON BLACK SQUARE;No;0;L;;;;40;N;;;;; 324C;CIRCLED NUMBER FIFTY ON BLACK SQUARE;No;0;L;;;;50;N;;;;; 324D;CIRCLED NUMBER SIXTY ON BLACK SQUARE;No;0;L;;;;60;N;;;;; 324E;CIRCLED NUMBER SEVENTY ON BLACK SQUARE;No;0;L;;;;70;N;;;;; 324F;CIRCLED NUMBER EIGHTY ON BLACK SQUARE;No;0;L;;;;80;N;;;;; 3250;PARTNERSHIP SIGN;So;0;ON; 0050 0054 0045;;;;N;;;;; 3251;CIRCLED NUMBER TWENTY ONE;No;0;ON; 0032 0031;;;21;N;;;;; 3252;CIRCLED NUMBER TWENTY TWO;No;0;ON; 0032 0032;;;22;N;;;;; 3253;CIRCLED NUMBER TWENTY THREE;No;0;ON; 0032 0033;;;23;N;;;;; 3254;CIRCLED NUMBER TWENTY FOUR;No;0;ON; 0032 0034;;;24;N;;;;; 3255;CIRCLED NUMBER TWENTY FIVE;No;0;ON; 0032 0035;;;25;N;;;;; 3256;CIRCLED NUMBER TWENTY SIX;No;0;ON; 0032 0036;;;26;N;;;;; 3257;CIRCLED NUMBER TWENTY SEVEN;No;0;ON; 0032 0037;;;27;N;;;;; 3258;CIRCLED NUMBER TWENTY EIGHT;No;0;ON; 0032 0038;;;28;N;;;;; 3259;CIRCLED NUMBER TWENTY NINE;No;0;ON; 0032 0039;;;29;N;;;;; 325A;CIRCLED NUMBER THIRTY;No;0;ON; 0033 0030;;;30;N;;;;; 325B;CIRCLED NUMBER THIRTY ONE;No;0;ON; 0033 0031;;;31;N;;;;; 325C;CIRCLED NUMBER THIRTY TWO;No;0;ON; 0033 0032;;;32;N;;;;; 325D;CIRCLED NUMBER THIRTY THREE;No;0;ON; 0033 0033;;;33;N;;;;; 325E;CIRCLED NUMBER THIRTY FOUR;No;0;ON; 0033 0034;;;34;N;;;;; 325F;CIRCLED NUMBER THIRTY FIVE;No;0;ON; 0033 0035;;;35;N;;;;; 3260;CIRCLED HANGUL KIYEOK;So;0;L; 1100;;;;N;CIRCLED HANGUL GIYEOG;;;; 3261;CIRCLED HANGUL NIEUN;So;0;L; 1102;;;;N;;;;; 3262;CIRCLED HANGUL TIKEUT;So;0;L; 1103;;;;N;CIRCLED HANGUL DIGEUD;;;; 3263;CIRCLED HANGUL RIEUL;So;0;L; 1105;;;;N;CIRCLED HANGUL LIEUL;;;; 3264;CIRCLED HANGUL MIEUM;So;0;L; 1106;;;;N;;;;; 3265;CIRCLED HANGUL PIEUP;So;0;L; 1107;;;;N;CIRCLED HANGUL BIEUB;;;; 3266;CIRCLED HANGUL SIOS;So;0;L; 1109;;;;N;;;;; 3267;CIRCLED HANGUL IEUNG;So;0;L; 110B;;;;N;;;;; 3268;CIRCLED HANGUL CIEUC;So;0;L; 110C;;;;N;CIRCLED HANGUL JIEUJ;;;; 3269;CIRCLED HANGUL CHIEUCH;So;0;L; 110E;;;;N;CIRCLED HANGUL CIEUC;;;; 326A;CIRCLED HANGUL KHIEUKH;So;0;L; 110F;;;;N;CIRCLED HANGUL KIYEOK;;;; 326B;CIRCLED HANGUL THIEUTH;So;0;L; 1110;;;;N;CIRCLED HANGUL TIEUT;;;; 326C;CIRCLED HANGUL PHIEUPH;So;0;L; 1111;;;;N;CIRCLED HANGUL PIEUP;;;; 326D;CIRCLED HANGUL HIEUH;So;0;L; 1112;;;;N;;;;; 326E;CIRCLED HANGUL KIYEOK A;So;0;L; 1100 1161;;;;N;CIRCLED HANGUL GA;;;; 326F;CIRCLED HANGUL NIEUN A;So;0;L; 1102 1161;;;;N;CIRCLED HANGUL NA;;;; 3270;CIRCLED HANGUL TIKEUT A;So;0;L; 1103 1161;;;;N;CIRCLED HANGUL DA;;;; 3271;CIRCLED HANGUL RIEUL A;So;0;L; 1105 1161;;;;N;CIRCLED HANGUL LA;;;; 3272;CIRCLED HANGUL MIEUM A;So;0;L; 1106 1161;;;;N;CIRCLED HANGUL MA;;;; 3273;CIRCLED HANGUL PIEUP A;So;0;L; 1107 1161;;;;N;CIRCLED HANGUL BA;;;; 3274;CIRCLED HANGUL SIOS A;So;0;L; 1109 1161;;;;N;CIRCLED HANGUL SA;;;; 3275;CIRCLED HANGUL IEUNG A;So;0;L; 110B 1161;;;;N;CIRCLED HANGUL A;;;; 3276;CIRCLED HANGUL CIEUC A;So;0;L; 110C 1161;;;;N;CIRCLED HANGUL JA;;;; 3277;CIRCLED HANGUL CHIEUCH A;So;0;L; 110E 1161;;;;N;CIRCLED HANGUL CA;;;; 3278;CIRCLED HANGUL KHIEUKH A;So;0;L; 110F 1161;;;;N;CIRCLED HANGUL KA;;;; 3279;CIRCLED HANGUL THIEUTH A;So;0;L; 1110 1161;;;;N;CIRCLED HANGUL TA;;;; 327A;CIRCLED HANGUL PHIEUPH A;So;0;L; 1111 1161;;;;N;CIRCLED HANGUL PA;;;; 327B;CIRCLED HANGUL HIEUH A;So;0;L; 1112 1161;;;;N;CIRCLED HANGUL HA;;;; 327C;CIRCLED KOREAN CHARACTER CHAMKO;So;0;ON; 110E 1161 11B7 1100 1169;;;;N;;;;; 327D;CIRCLED KOREAN CHARACTER JUEUI;So;0;ON; 110C 116E 110B 1174;;;;N;;;;; 327E;CIRCLED HANGUL IEUNG U;So;0;ON; 110B 116E;;;;N;;;;; 327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;; 3280;CIRCLED IDEOGRAPH ONE;No;0;L; 4E00;;;1;N;;;;; 3281;CIRCLED IDEOGRAPH TWO;No;0;L; 4E8C;;;2;N;;;;; 3282;CIRCLED IDEOGRAPH THREE;No;0;L; 4E09;;;3;N;;;;; 3283;CIRCLED IDEOGRAPH FOUR;No;0;L; 56DB;;;4;N;;;;; 3284;CIRCLED IDEOGRAPH FIVE;No;0;L; 4E94;;;5;N;;;;; 3285;CIRCLED IDEOGRAPH SIX;No;0;L; 516D;;;6;N;;;;; 3286;CIRCLED IDEOGRAPH SEVEN;No;0;L; 4E03;;;7;N;;;;; 3287;CIRCLED IDEOGRAPH EIGHT;No;0;L; 516B;;;8;N;;;;; 3288;CIRCLED IDEOGRAPH NINE;No;0;L; 4E5D;;;9;N;;;;; 3289;CIRCLED IDEOGRAPH TEN;No;0;L; 5341;;;10;N;;;;; 328A;CIRCLED IDEOGRAPH MOON;So;0;L; 6708;;;;N;;;;; 328B;CIRCLED IDEOGRAPH FIRE;So;0;L; 706B;;;;N;;;;; 328C;CIRCLED IDEOGRAPH WATER;So;0;L; 6C34;;;;N;;;;; 328D;CIRCLED IDEOGRAPH WOOD;So;0;L; 6728;;;;N;;;;; 328E;CIRCLED IDEOGRAPH METAL;So;0;L; 91D1;;;;N;;;;; 328F;CIRCLED IDEOGRAPH EARTH;So;0;L; 571F;;;;N;;;;; 3290;CIRCLED IDEOGRAPH SUN;So;0;L; 65E5;;;;N;;;;; 3291;CIRCLED IDEOGRAPH STOCK;So;0;L; 682A;;;;N;;;;; 3292;CIRCLED IDEOGRAPH HAVE;So;0;L; 6709;;;;N;;;;; 3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L; 793E;;;;N;;;;; 3294;CIRCLED IDEOGRAPH NAME;So;0;L; 540D;;;;N;;;;; 3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L; 7279;;;;N;;;;; 3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L; 8CA1;;;;N;;;;; 3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L; 795D;;;;N;;;;; 3298;CIRCLED IDEOGRAPH LABOR;So;0;L; 52B4;;;;N;;;;; 3299;CIRCLED IDEOGRAPH SECRET;So;0;L; 79D8;;;;N;;;;; 329A;CIRCLED IDEOGRAPH MALE;So;0;L; 7537;;;;N;;;;; 329B;CIRCLED IDEOGRAPH FEMALE;So;0;L; 5973;;;;N;;;;; 329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L; 9069;;;;N;;;;; 329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L; 512A;;;;N;;;;; 329E;CIRCLED IDEOGRAPH PRINT;So;0;L; 5370;;;;N;;;;; 329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L; 6CE8;;;;N;;;;; 32A0;CIRCLED IDEOGRAPH ITEM;So;0;L; 9805;;;;N;;;;; 32A1;CIRCLED IDEOGRAPH REST;So;0;L; 4F11;;;;N;;;;; 32A2;CIRCLED IDEOGRAPH COPY;So;0;L; 5199;;;;N;;;;; 32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L; 6B63;;;;N;;;;; 32A4;CIRCLED IDEOGRAPH HIGH;So;0;L; 4E0A;;;;N;;;;; 32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L; 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;; 32A6;CIRCLED IDEOGRAPH LOW;So;0;L; 4E0B;;;;N;;;;; 32A7;CIRCLED IDEOGRAPH LEFT;So;0;L; 5DE6;;;;N;;;;; 32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L; 53F3;;;;N;;;;; 32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L; 533B;;;;N;;;;; 32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L; 5B97;;;;N;;;;; 32AB;CIRCLED IDEOGRAPH STUDY;So;0;L; 5B66;;;;N;;;;; 32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L; 76E3;;;;N;;;;; 32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L; 4F01;;;;N;;;;; 32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L; 8CC7;;;;N;;;;; 32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L; 5354;;;;N;;;;; 32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L; 591C;;;;N;;;;; 32B1;CIRCLED NUMBER THIRTY SIX;No;0;ON; 0033 0036;;;36;N;;;;; 32B2;CIRCLED NUMBER THIRTY SEVEN;No;0;ON; 0033 0037;;;37;N;;;;; 32B3;CIRCLED NUMBER THIRTY EIGHT;No;0;ON; 0033 0038;;;38;N;;;;; 32B4;CIRCLED NUMBER THIRTY NINE;No;0;ON; 0033 0039;;;39;N;;;;; 32B5;CIRCLED NUMBER FORTY;No;0;ON; 0034 0030;;;40;N;;;;; 32B6;CIRCLED NUMBER FORTY ONE;No;0;ON; 0034 0031;;;41;N;;;;; 32B7;CIRCLED NUMBER FORTY TWO;No;0;ON; 0034 0032;;;42;N;;;;; 32B8;CIRCLED NUMBER FORTY THREE;No;0;ON; 0034 0033;;;43;N;;;;; 32B9;CIRCLED NUMBER FORTY FOUR;No;0;ON; 0034 0034;;;44;N;;;;; 32BA;CIRCLED NUMBER FORTY FIVE;No;0;ON; 0034 0035;;;45;N;;;;; 32BB;CIRCLED NUMBER FORTY SIX;No;0;ON; 0034 0036;;;46;N;;;;; 32BC;CIRCLED NUMBER FORTY SEVEN;No;0;ON; 0034 0037;;;47;N;;;;; 32BD;CIRCLED NUMBER FORTY EIGHT;No;0;ON; 0034 0038;;;48;N;;;;; 32BE;CIRCLED NUMBER FORTY NINE;No;0;ON; 0034 0039;;;49;N;;;;; 32BF;CIRCLED NUMBER FIFTY;No;0;ON; 0035 0030;;;50;N;;;;; 32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L; 0031 6708;;;;N;;;;; 32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L; 0032 6708;;;;N;;;;; 32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L; 0033 6708;;;;N;;;;; 32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L; 0034 6708;;;;N;;;;; 32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L; 0035 6708;;;;N;;;;; 32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L; 0036 6708;;;;N;;;;; 32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L; 0037 6708;;;;N;;;;; 32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L; 0038 6708;;;;N;;;;; 32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L; 0039 6708;;;;N;;;;; 32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L; 0031 0030 6708;;;;N;;;;; 32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L; 0031 0031 6708;;;;N;;;;; 32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L; 0031 0032 6708;;;;N;;;;; 32CC;SQUARE HG;So;0;ON; 0048 0067;;;;N;;;;; 32CD;SQUARE ERG;So;0;ON; 0065 0072 0067;;;;N;;;;; 32CE;SQUARE EV;So;0;ON; 0065 0056;;;;N;;;;; 32CF;LIMITED LIABILITY SIGN;So;0;ON; 004C 0054 0044;;;;N;;;;; 32D0;CIRCLED KATAKANA A;So;0;L; 30A2;;;;N;;;;; 32D1;CIRCLED KATAKANA I;So;0;L; 30A4;;;;N;;;;; 32D2;CIRCLED KATAKANA U;So;0;L; 30A6;;;;N;;;;; 32D3;CIRCLED KATAKANA E;So;0;L; 30A8;;;;N;;;;; 32D4;CIRCLED KATAKANA O;So;0;L; 30AA;;;;N;;;;; 32D5;CIRCLED KATAKANA KA;So;0;L; 30AB;;;;N;;;;; 32D6;CIRCLED KATAKANA KI;So;0;L; 30AD;;;;N;;;;; 32D7;CIRCLED KATAKANA KU;So;0;L; 30AF;;;;N;;;;; 32D8;CIRCLED KATAKANA KE;So;0;L; 30B1;;;;N;;;;; 32D9;CIRCLED KATAKANA KO;So;0;L; 30B3;;;;N;;;;; 32DA;CIRCLED KATAKANA SA;So;0;L; 30B5;;;;N;;;;; 32DB;CIRCLED KATAKANA SI;So;0;L; 30B7;;;;N;;;;; 32DC;CIRCLED KATAKANA SU;So;0;L; 30B9;;;;N;;;;; 32DD;CIRCLED KATAKANA SE;So;0;L; 30BB;;;;N;;;;; 32DE;CIRCLED KATAKANA SO;So;0;L; 30BD;;;;N;;;;; 32DF;CIRCLED KATAKANA TA;So;0;L; 30BF;;;;N;;;;; 32E0;CIRCLED KATAKANA TI;So;0;L; 30C1;;;;N;;;;; 32E1;CIRCLED KATAKANA TU;So;0;L; 30C4;;;;N;;;;; 32E2;CIRCLED KATAKANA TE;So;0;L; 30C6;;;;N;;;;; 32E3;CIRCLED KATAKANA TO;So;0;L; 30C8;;;;N;;;;; 32E4;CIRCLED KATAKANA NA;So;0;L; 30CA;;;;N;;;;; 32E5;CIRCLED KATAKANA NI;So;0;L; 30CB;;;;N;;;;; 32E6;CIRCLED KATAKANA NU;So;0;L; 30CC;;;;N;;;;; 32E7;CIRCLED KATAKANA NE;So;0;L; 30CD;;;;N;;;;; 32E8;CIRCLED KATAKANA NO;So;0;L; 30CE;;;;N;;;;; 32E9;CIRCLED KATAKANA HA;So;0;L; 30CF;;;;N;;;;; 32EA;CIRCLED KATAKANA HI;So;0;L; 30D2;;;;N;;;;; 32EB;CIRCLED KATAKANA HU;So;0;L; 30D5;;;;N;;;;; 32EC;CIRCLED KATAKANA HE;So;0;L; 30D8;;;;N;;;;; 32ED;CIRCLED KATAKANA HO;So;0;L; 30DB;;;;N;;;;; 32EE;CIRCLED KATAKANA MA;So;0;L; 30DE;;;;N;;;;; 32EF;CIRCLED KATAKANA MI;So;0;L; 30DF;;;;N;;;;; 32F0;CIRCLED KATAKANA MU;So;0;L; 30E0;;;;N;;;;; 32F1;CIRCLED KATAKANA ME;So;0;L; 30E1;;;;N;;;;; 32F2;CIRCLED KATAKANA MO;So;0;L; 30E2;;;;N;;;;; 32F3;CIRCLED KATAKANA YA;So;0;L; 30E4;;;;N;;;;; 32F4;CIRCLED KATAKANA YU;So;0;L; 30E6;;;;N;;;;; 32F5;CIRCLED KATAKANA YO;So;0;L; 30E8;;;;N;;;;; 32F6;CIRCLED KATAKANA RA;So;0;L; 30E9;;;;N;;;;; 32F7;CIRCLED KATAKANA RI;So;0;L; 30EA;;;;N;;;;; 32F8;CIRCLED KATAKANA RU;So;0;L; 30EB;;;;N;;;;; 32F9;CIRCLED KATAKANA RE;So;0;L; 30EC;;;;N;;;;; 32FA;CIRCLED KATAKANA RO;So;0;L; 30ED;;;;N;;;;; 32FB;CIRCLED KATAKANA WA;So;0;L; 30EF;;;;N;;;;; 32FC;CIRCLED KATAKANA WI;So;0;L; 30F0;;;;N;;;;; 32FD;CIRCLED KATAKANA WE;So;0;L; 30F1;;;;N;;;;; 32FE;CIRCLED KATAKANA WO;So;0;L; 30F2;;;;N;;;;; 32FF;SQUARE ERA NAME REIWA;So;0;L; 4EE4 548C;;;;N;;;;; 3300;SQUARE APAATO;So;0;L; 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;; 3301;SQUARE ARUHUA;So;0;L; 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;; 3302;SQUARE ANPEA;So;0;L; 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;; 3303;SQUARE AARU;So;0;L; 30A2 30FC 30EB;;;;N;SQUARED AARU;;;; 3304;SQUARE ININGU;So;0;L; 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;; 3305;SQUARE INTI;So;0;L; 30A4 30F3 30C1;;;;N;SQUARED INTI;;;; 3306;SQUARE UON;So;0;L; 30A6 30A9 30F3;;;;N;SQUARED UON;;;; 3307;SQUARE ESUKUUDO;So;0;L; 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;; 3308;SQUARE EEKAA;So;0;L; 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;; 3309;SQUARE ONSU;So;0;L; 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;; 330A;SQUARE OOMU;So;0;L; 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;; 330B;SQUARE KAIRI;So;0;L; 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;; 330C;SQUARE KARATTO;So;0;L; 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;; 330D;SQUARE KARORII;So;0;L; 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;; 330E;SQUARE GARON;So;0;L; 30AC 30ED 30F3;;;;N;SQUARED GARON;;;; 330F;SQUARE GANMA;So;0;L; 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;; 3310;SQUARE GIGA;So;0;L; 30AE 30AC;;;;N;SQUARED GIGA;;;; 3311;SQUARE GINII;So;0;L; 30AE 30CB 30FC;;;;N;SQUARED GINII;;;; 3312;SQUARE KYURII;So;0;L; 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;; 3313;SQUARE GIRUDAA;So;0;L; 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;; 3314;SQUARE KIRO;So;0;L; 30AD 30ED;;;;N;SQUARED KIRO;;;; 3315;SQUARE KIROGURAMU;So;0;L; 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;; 3316;SQUARE KIROMEETORU;So;0;L; 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;; 3317;SQUARE KIROWATTO;So;0;L; 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;; 3318;SQUARE GURAMU;So;0;L; 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;; 3319;SQUARE GURAMUTON;So;0;L; 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;; 331A;SQUARE KURUZEIRO;So;0;L; 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;; 331B;SQUARE KUROONE;So;0;L; 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;; 331C;SQUARE KEESU;So;0;L; 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;; 331D;SQUARE KORUNA;So;0;L; 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;; 331E;SQUARE KOOPO;So;0;L; 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;; 331F;SQUARE SAIKURU;So;0;L; 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;; 3320;SQUARE SANTIIMU;So;0;L; 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;; 3321;SQUARE SIRINGU;So;0;L; 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;; 3322;SQUARE SENTI;So;0;L; 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;; 3323;SQUARE SENTO;So;0;L; 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;; 3324;SQUARE DAASU;So;0;L; 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;; 3325;SQUARE DESI;So;0;L; 30C7 30B7;;;;N;SQUARED DESI;;;; 3326;SQUARE DORU;So;0;L; 30C9 30EB;;;;N;SQUARED DORU;;;; 3327;SQUARE TON;So;0;L; 30C8 30F3;;;;N;SQUARED TON;;;; 3328;SQUARE NANO;So;0;L; 30CA 30CE;;;;N;SQUARED NANO;;;; 3329;SQUARE NOTTO;So;0;L; 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;; 332A;SQUARE HAITU;So;0;L; 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;; 332B;SQUARE PAASENTO;So;0;L; 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;; 332C;SQUARE PAATU;So;0;L; 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;; 332D;SQUARE BAARERU;So;0;L; 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;; 332E;SQUARE PIASUTORU;So;0;L; 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;; 332F;SQUARE PIKURU;So;0;L; 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;; 3330;SQUARE PIKO;So;0;L; 30D4 30B3;;;;N;SQUARED PIKO;;;; 3331;SQUARE BIRU;So;0;L; 30D3 30EB;;;;N;SQUARED BIRU;;;; 3332;SQUARE HUARADDO;So;0;L; 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;; 3333;SQUARE HUIITO;So;0;L; 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;; 3334;SQUARE BUSSYERU;So;0;L; 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;; 3335;SQUARE HURAN;So;0;L; 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;; 3336;SQUARE HEKUTAARU;So;0;L; 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;; 3337;SQUARE PESO;So;0;L; 30DA 30BD;;;;N;SQUARED PESO;;;; 3338;SQUARE PENIHI;So;0;L; 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;; 3339;SQUARE HERUTU;So;0;L; 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;; 333A;SQUARE PENSU;So;0;L; 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;; 333B;SQUARE PEEZI;So;0;L; 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;; 333C;SQUARE BEETA;So;0;L; 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;; 333D;SQUARE POINTO;So;0;L; 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;; 333E;SQUARE BORUTO;So;0;L; 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;; 333F;SQUARE HON;So;0;L; 30DB 30F3;;;;N;SQUARED HON;;;; 3340;SQUARE PONDO;So;0;L; 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;; 3341;SQUARE HOORU;So;0;L; 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;; 3342;SQUARE HOON;So;0;L; 30DB 30FC 30F3;;;;N;SQUARED HOON;;;; 3343;SQUARE MAIKURO;So;0;L; 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;; 3344;SQUARE MAIRU;So;0;L; 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;; 3345;SQUARE MAHHA;So;0;L; 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;; 3346;SQUARE MARUKU;So;0;L; 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;; 3347;SQUARE MANSYON;So;0;L; 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;; 3348;SQUARE MIKURON;So;0;L; 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;; 3349;SQUARE MIRI;So;0;L; 30DF 30EA;;;;N;SQUARED MIRI;;;; 334A;SQUARE MIRIBAARU;So;0;L; 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;; 334B;SQUARE MEGA;So;0;L; 30E1 30AC;;;;N;SQUARED MEGA;;;; 334C;SQUARE MEGATON;So;0;L; 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;; 334D;SQUARE MEETORU;So;0;L; 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;; 334E;SQUARE YAADO;So;0;L; 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;; 334F;SQUARE YAARU;So;0;L; 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;; 3350;SQUARE YUAN;So;0;L; 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;; 3351;SQUARE RITTORU;So;0;L; 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;; 3352;SQUARE RIRA;So;0;L; 30EA 30E9;;;;N;SQUARED RIRA;;;; 3353;SQUARE RUPII;So;0;L; 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;; 3354;SQUARE RUUBURU;So;0;L; 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;; 3355;SQUARE REMU;So;0;L; 30EC 30E0;;;;N;SQUARED REMU;;;; 3356;SQUARE RENTOGEN;So;0;L; 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;; 3357;SQUARE WATTO;So;0;L; 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;; 3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L; 0030 70B9;;;;N;;;;; 3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L; 0031 70B9;;;;N;;;;; 335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L; 0032 70B9;;;;N;;;;; 335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L; 0033 70B9;;;;N;;;;; 335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L; 0034 70B9;;;;N;;;;; 335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L; 0035 70B9;;;;N;;;;; 335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L; 0036 70B9;;;;N;;;;; 335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L; 0037 70B9;;;;N;;;;; 3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L; 0038 70B9;;;;N;;;;; 3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L; 0039 70B9;;;;N;;;;; 3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L; 0031 0030 70B9;;;;N;;;;; 3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L; 0031 0031 70B9;;;;N;;;;; 3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L; 0031 0032 70B9;;;;N;;;;; 3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L; 0031 0033 70B9;;;;N;;;;; 3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L; 0031 0034 70B9;;;;N;;;;; 3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L; 0031 0035 70B9;;;;N;;;;; 3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L; 0031 0036 70B9;;;;N;;;;; 3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L; 0031 0037 70B9;;;;N;;;;; 336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L; 0031 0038 70B9;;;;N;;;;; 336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L; 0031 0039 70B9;;;;N;;;;; 336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L; 0032 0030 70B9;;;;N;;;;; 336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L; 0032 0031 70B9;;;;N;;;;; 336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L; 0032 0032 70B9;;;;N;;;;; 336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L; 0032 0033 70B9;;;;N;;;;; 3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L; 0032 0034 70B9;;;;N;;;;; 3371;SQUARE HPA;So;0;L; 0068 0050 0061;;;;N;;;;; 3372;SQUARE DA;So;0;L; 0064 0061;;;;N;;;;; 3373;SQUARE AU;So;0;L; 0041 0055;;;;N;;;;; 3374;SQUARE BAR;So;0;L; 0062 0061 0072;;;;N;;;;; 3375;SQUARE OV;So;0;L; 006F 0056;;;;N;;;;; 3376;SQUARE PC;So;0;L; 0070 0063;;;;N;;;;; 3377;SQUARE DM;So;0;ON; 0064 006D;;;;N;;;;; 3378;SQUARE DM SQUARED;So;0;ON; 0064 006D 00B2;;;;N;;;;; 3379;SQUARE DM CUBED;So;0;ON; 0064 006D 00B3;;;;N;;;;; 337A;SQUARE IU;So;0;ON; 0049 0055;;;;N;;;;; 337B;SQUARE ERA NAME HEISEI;So;0;L; 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;; 337C;SQUARE ERA NAME SYOUWA;So;0;L; 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;; 337D;SQUARE ERA NAME TAISYOU;So;0;L; 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;; 337E;SQUARE ERA NAME MEIZI;So;0;L; 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;; 337F;SQUARE CORPORATION;So;0;L; 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;; 3380;SQUARE PA AMPS;So;0;L; 0070 0041;;;;N;SQUARED PA AMPS;;;; 3381;SQUARE NA;So;0;L; 006E 0041;;;;N;SQUARED NA;;;; 3382;SQUARE MU A;So;0;L; 03BC 0041;;;;N;SQUARED MU A;;;; 3383;SQUARE MA;So;0;L; 006D 0041;;;;N;SQUARED MA;;;; 3384;SQUARE KA;So;0;L; 006B 0041;;;;N;SQUARED KA;;;; 3385;SQUARE KB;So;0;L; 004B 0042;;;;N;SQUARED KB;;;; 3386;SQUARE MB;So;0;L; 004D 0042;;;;N;SQUARED MB;;;; 3387;SQUARE GB;So;0;L; 0047 0042;;;;N;SQUARED GB;;;; 3388;SQUARE CAL;So;0;L; 0063 0061 006C;;;;N;SQUARED CAL;;;; 3389;SQUARE KCAL;So;0;L; 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;; 338A;SQUARE PF;So;0;L; 0070 0046;;;;N;SQUARED PF;;;; 338B;SQUARE NF;So;0;L; 006E 0046;;;;N;SQUARED NF;;;; 338C;SQUARE MU F;So;0;L; 03BC 0046;;;;N;SQUARED MU F;;;; 338D;SQUARE MU G;So;0;L; 03BC 0067;;;;N;SQUARED MU G;;;; 338E;SQUARE MG;So;0;L; 006D 0067;;;;N;SQUARED MG;;;; 338F;SQUARE KG;So;0;L; 006B 0067;;;;N;SQUARED KG;;;; 3390;SQUARE HZ;So;0;L; 0048 007A;;;;N;SQUARED HZ;;;; 3391;SQUARE KHZ;So;0;L; 006B 0048 007A;;;;N;SQUARED KHZ;;;; 3392;SQUARE MHZ;So;0;L; 004D 0048 007A;;;;N;SQUARED MHZ;;;; 3393;SQUARE GHZ;So;0;L; 0047 0048 007A;;;;N;SQUARED GHZ;;;; 3394;SQUARE THZ;So;0;L; 0054 0048 007A;;;;N;SQUARED THZ;;;; 3395;SQUARE MU L;So;0;L; 03BC 2113;;;;N;SQUARED MU L;;;; 3396;SQUARE ML;So;0;L; 006D 2113;;;;N;SQUARED ML;;;; 3397;SQUARE DL;So;0;L; 0064 2113;;;;N;SQUARED DL;;;; 3398;SQUARE KL;So;0;L; 006B 2113;;;;N;SQUARED KL;;;; 3399;SQUARE FM;So;0;L; 0066 006D;;;;N;SQUARED FM;;;; 339A;SQUARE NM;So;0;L; 006E 006D;;;;N;SQUARED NM;;;; 339B;SQUARE MU M;So;0;L; 03BC 006D;;;;N;SQUARED MU M;;;; 339C;SQUARE MM;So;0;L; 006D 006D;;;;N;SQUARED MM;;;; 339D;SQUARE CM;So;0;L; 0063 006D;;;;N;SQUARED CM;;;; 339E;SQUARE KM;So;0;L; 006B 006D;;;;N;SQUARED KM;;;; 339F;SQUARE MM SQUARED;So;0;L; 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;; 33A0;SQUARE CM SQUARED;So;0;L; 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;; 33A1;SQUARE M SQUARED;So;0;L; 006D 00B2;;;;N;SQUARED M SQUARED;;;; 33A2;SQUARE KM SQUARED;So;0;L; 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;; 33A3;SQUARE MM CUBED;So;0;L; 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;; 33A4;SQUARE CM CUBED;So;0;L; 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;; 33A5;SQUARE M CUBED;So;0;L; 006D 00B3;;;;N;SQUARED M CUBED;;;; 33A6;SQUARE KM CUBED;So;0;L; 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;; 33A7;SQUARE M OVER S;So;0;L; 006D 2215 0073;;;;N;SQUARED M OVER S;;;; 33A8;SQUARE M OVER S SQUARED;So;0;L; 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;; 33A9;SQUARE PA;So;0;L; 0050 0061;;;;N;SQUARED PA;;;; 33AA;SQUARE KPA;So;0;L; 006B 0050 0061;;;;N;SQUARED KPA;;;; 33AB;SQUARE MPA;So;0;L; 004D 0050 0061;;;;N;SQUARED MPA;;;; 33AC;SQUARE GPA;So;0;L; 0047 0050 0061;;;;N;SQUARED GPA;;;; 33AD;SQUARE RAD;So;0;L; 0072 0061 0064;;;;N;SQUARED RAD;;;; 33AE;SQUARE RAD OVER S;So;0;L; 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;; 33AF;SQUARE RAD OVER S SQUARED;So;0;L; 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;; 33B0;SQUARE PS;So;0;L; 0070 0073;;;;N;SQUARED PS;;;; 33B1;SQUARE NS;So;0;L; 006E 0073;;;;N;SQUARED NS;;;; 33B2;SQUARE MU S;So;0;L; 03BC 0073;;;;N;SQUARED MU S;;;; 33B3;SQUARE MS;So;0;L; 006D 0073;;;;N;SQUARED MS;;;; 33B4;SQUARE PV;So;0;L; 0070 0056;;;;N;SQUARED PV;;;; 33B5;SQUARE NV;So;0;L; 006E 0056;;;;N;SQUARED NV;;;; 33B6;SQUARE MU V;So;0;L; 03BC 0056;;;;N;SQUARED MU V;;;; 33B7;SQUARE MV;So;0;L; 006D 0056;;;;N;SQUARED MV;;;; 33B8;SQUARE KV;So;0;L; 006B 0056;;;;N;SQUARED KV;;;; 33B9;SQUARE MV MEGA;So;0;L; 004D 0056;;;;N;SQUARED MV MEGA;;;; 33BA;SQUARE PW;So;0;L; 0070 0057;;;;N;SQUARED PW;;;; 33BB;SQUARE NW;So;0;L; 006E 0057;;;;N;SQUARED NW;;;; 33BC;SQUARE MU W;So;0;L; 03BC 0057;;;;N;SQUARED MU W;;;; 33BD;SQUARE MW;So;0;L; 006D 0057;;;;N;SQUARED MW;;;; 33BE;SQUARE KW;So;0;L; 006B 0057;;;;N;SQUARED KW;;;; 33BF;SQUARE MW MEGA;So;0;L; 004D 0057;;;;N;SQUARED MW MEGA;;;; 33C0;SQUARE K OHM;So;0;L; 006B 03A9;;;;N;SQUARED K OHM;;;; 33C1;SQUARE M OHM;So;0;L; 004D 03A9;;;;N;SQUARED M OHM;;;; 33C2;SQUARE AM;So;0;L; 0061 002E 006D 002E;;;;N;SQUARED AM;;;; 33C3;SQUARE BQ;So;0;L; 0042 0071;;;;N;SQUARED BQ;;;; 33C4;SQUARE CC;So;0;L; 0063 0063;;;;N;SQUARED CC;;;; 33C5;SQUARE CD;So;0;L; 0063 0064;;;;N;SQUARED CD;;;; 33C6;SQUARE C OVER KG;So;0;L; 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;; 33C7;SQUARE CO;So;0;L; 0043 006F 002E;;;;N;SQUARED CO;;;; 33C8;SQUARE DB;So;0;L; 0064 0042;;;;N;SQUARED DB;;;; 33C9;SQUARE GY;So;0;L; 0047 0079;;;;N;SQUARED GY;;;; 33CA;SQUARE HA;So;0;L; 0068 0061;;;;N;SQUARED HA;;;; 33CB;SQUARE HP;So;0;L; 0048 0050;;;;N;SQUARED HP;;;; 33CC;SQUARE IN;So;0;L; 0069 006E;;;;N;SQUARED IN;;;; 33CD;SQUARE KK;So;0;L; 004B 004B;;;;N;SQUARED KK;;;; 33CE;SQUARE KM CAPITAL;So;0;L; 004B 004D;;;;N;SQUARED KM CAPITAL;;;; 33CF;SQUARE KT;So;0;L; 006B 0074;;;;N;SQUARED KT;;;; 33D0;SQUARE LM;So;0;L; 006C 006D;;;;N;SQUARED LM;;;; 33D1;SQUARE LN;So;0;L; 006C 006E;;;;N;SQUARED LN;;;; 33D2;SQUARE LOG;So;0;L; 006C 006F 0067;;;;N;SQUARED LOG;;;; 33D3;SQUARE LX;So;0;L; 006C 0078;;;;N;SQUARED LX;;;; 33D4;SQUARE MB SMALL;So;0;L; 006D 0062;;;;N;SQUARED MB SMALL;;;; 33D5;SQUARE MIL;So;0;L; 006D 0069 006C;;;;N;SQUARED MIL;;;; 33D6;SQUARE MOL;So;0;L; 006D 006F 006C;;;;N;SQUARED MOL;;;; 33D7;SQUARE PH;So;0;L; 0050 0048;;;;N;SQUARED PH;;;; 33D8;SQUARE PM;So;0;L; 0070 002E 006D 002E;;;;N;SQUARED PM;;;; 33D9;SQUARE PPM;So;0;L; 0050 0050 004D;;;;N;SQUARED PPM;;;; 33DA;SQUARE PR;So;0;L; 0050 0052;;;;N;SQUARED PR;;;; 33DB;SQUARE SR;So;0;L; 0073 0072;;;;N;SQUARED SR;;;; 33DC;SQUARE SV;So;0;L; 0053 0076;;;;N;SQUARED SV;;;; 33DD;SQUARE WB;So;0;L; 0057 0062;;;;N;SQUARED WB;;;; 33DE;SQUARE V OVER M;So;0;ON; 0056 2215 006D;;;;N;;;;; 33DF;SQUARE A OVER M;So;0;ON; 0041 2215 006D;;;;N;;;;; 33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L; 0031 65E5;;;;N;;;;; 33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L; 0032 65E5;;;;N;;;;; 33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L; 0033 65E5;;;;N;;;;; 33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L; 0034 65E5;;;;N;;;;; 33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L; 0035 65E5;;;;N;;;;; 33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L; 0036 65E5;;;;N;;;;; 33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L; 0037 65E5;;;;N;;;;; 33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L; 0038 65E5;;;;N;;;;; 33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L; 0039 65E5;;;;N;;;;; 33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L; 0031 0030 65E5;;;;N;;;;; 33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L; 0031 0031 65E5;;;;N;;;;; 33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L; 0031 0032 65E5;;;;N;;;;; 33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L; 0031 0033 65E5;;;;N;;;;; 33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L; 0031 0034 65E5;;;;N;;;;; 33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L; 0031 0035 65E5;;;;N;;;;; 33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L; 0031 0036 65E5;;;;N;;;;; 33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L; 0031 0037 65E5;;;;N;;;;; 33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L; 0031 0038 65E5;;;;N;;;;; 33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L; 0031 0039 65E5;;;;N;;;;; 33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L; 0032 0030 65E5;;;;N;;;;; 33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L; 0032 0031 65E5;;;;N;;;;; 33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L; 0032 0032 65E5;;;;N;;;;; 33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L; 0032 0033 65E5;;;;N;;;;; 33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L; 0032 0034 65E5;;;;N;;;;; 33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L; 0032 0035 65E5;;;;N;;;;; 33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L; 0032 0036 65E5;;;;N;;;;; 33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L; 0032 0037 65E5;;;;N;;;;; 33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L; 0032 0038 65E5;;;;N;;;;; 33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L; 0032 0039 65E5;;;;N;;;;; 33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L; 0033 0030 65E5;;;;N;;;;; 33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L; 0033 0031 65E5;;;;N;;;;; 33FF;SQUARE GAL;So;0;ON; 0067 0061 006C;;;;N;;;;; 3400;;Lo;0;L;;;;;N;;;;; 4DBF;;Lo;0;L;;;;;N;;;;; 4DC0;HEXAGRAM FOR THE CREATIVE HEAVEN;So;0;ON;;;;;N;;;;; 4DC1;HEXAGRAM FOR THE RECEPTIVE EARTH;So;0;ON;;;;;N;;;;; 4DC2;HEXAGRAM FOR DIFFICULTY AT THE BEGINNING;So;0;ON;;;;;N;;;;; 4DC3;HEXAGRAM FOR YOUTHFUL FOLLY;So;0;ON;;;;;N;;;;; 4DC4;HEXAGRAM FOR WAITING;So;0;ON;;;;;N;;;;; 4DC5;HEXAGRAM FOR CONFLICT;So;0;ON;;;;;N;;;;; 4DC6;HEXAGRAM FOR THE ARMY;So;0;ON;;;;;N;;;;; 4DC7;HEXAGRAM FOR HOLDING TOGETHER;So;0;ON;;;;;N;;;;; 4DC8;HEXAGRAM FOR SMALL TAMING;So;0;ON;;;;;N;;;;; 4DC9;HEXAGRAM FOR TREADING;So;0;ON;;;;;N;;;;; 4DCA;HEXAGRAM FOR PEACE;So;0;ON;;;;;N;;;;; 4DCB;HEXAGRAM FOR STANDSTILL;So;0;ON;;;;;N;;;;; 4DCC;HEXAGRAM FOR FELLOWSHIP;So;0;ON;;;;;N;;;;; 4DCD;HEXAGRAM FOR GREAT POSSESSION;So;0;ON;;;;;N;;;;; 4DCE;HEXAGRAM FOR MODESTY;So;0;ON;;;;;N;;;;; 4DCF;HEXAGRAM FOR ENTHUSIASM;So;0;ON;;;;;N;;;;; 4DD0;HEXAGRAM FOR FOLLOWING;So;0;ON;;;;;N;;;;; 4DD1;HEXAGRAM FOR WORK ON THE DECAYED;So;0;ON;;;;;N;;;;; 4DD2;HEXAGRAM FOR APPROACH;So;0;ON;;;;;N;;;;; 4DD3;HEXAGRAM FOR CONTEMPLATION;So;0;ON;;;;;N;;;;; 4DD4;HEXAGRAM FOR BITING THROUGH;So;0;ON;;;;;N;;;;; 4DD5;HEXAGRAM FOR GRACE;So;0;ON;;;;;N;;;;; 4DD6;HEXAGRAM FOR SPLITTING APART;So;0;ON;;;;;N;;;;; 4DD7;HEXAGRAM FOR RETURN;So;0;ON;;;;;N;;;;; 4DD8;HEXAGRAM FOR INNOCENCE;So;0;ON;;;;;N;;;;; 4DD9;HEXAGRAM FOR GREAT TAMING;So;0;ON;;;;;N;;;;; 4DDA;HEXAGRAM FOR MOUTH CORNERS;So;0;ON;;;;;N;;;;; 4DDB;HEXAGRAM FOR GREAT PREPONDERANCE;So;0;ON;;;;;N;;;;; 4DDC;HEXAGRAM FOR THE ABYSMAL WATER;So;0;ON;;;;;N;;;;; 4DDD;HEXAGRAM FOR THE CLINGING FIRE;So;0;ON;;;;;N;;;;; 4DDE;HEXAGRAM FOR INFLUENCE;So;0;ON;;;;;N;;;;; 4DDF;HEXAGRAM FOR DURATION;So;0;ON;;;;;N;;;;; 4DE0;HEXAGRAM FOR RETREAT;So;0;ON;;;;;N;;;;; 4DE1;HEXAGRAM FOR GREAT POWER;So;0;ON;;;;;N;;;;; 4DE2;HEXAGRAM FOR PROGRESS;So;0;ON;;;;;N;;;;; 4DE3;HEXAGRAM FOR DARKENING OF THE LIGHT;So;0;ON;;;;;N;;;;; 4DE4;HEXAGRAM FOR THE FAMILY;So;0;ON;;;;;N;;;;; 4DE5;HEXAGRAM FOR OPPOSITION;So;0;ON;;;;;N;;;;; 4DE6;HEXAGRAM FOR OBSTRUCTION;So;0;ON;;;;;N;;;;; 4DE7;HEXAGRAM FOR DELIVERANCE;So;0;ON;;;;;N;;;;; 4DE8;HEXAGRAM FOR DECREASE;So;0;ON;;;;;N;;;;; 4DE9;HEXAGRAM FOR INCREASE;So;0;ON;;;;;N;;;;; 4DEA;HEXAGRAM FOR BREAKTHROUGH;So;0;ON;;;;;N;;;;; 4DEB;HEXAGRAM FOR COMING TO MEET;So;0;ON;;;;;N;;;;; 4DEC;HEXAGRAM FOR GATHERING TOGETHER;So;0;ON;;;;;N;;;;; 4DED;HEXAGRAM FOR PUSHING UPWARD;So;0;ON;;;;;N;;;;; 4DEE;HEXAGRAM FOR OPPRESSION;So;0;ON;;;;;N;;;;; 4DEF;HEXAGRAM FOR THE WELL;So;0;ON;;;;;N;;;;; 4DF0;HEXAGRAM FOR REVOLUTION;So;0;ON;;;;;N;;;;; 4DF1;HEXAGRAM FOR THE CAULDRON;So;0;ON;;;;;N;;;;; 4DF2;HEXAGRAM FOR THE AROUSING THUNDER;So;0;ON;;;;;N;;;;; 4DF3;HEXAGRAM FOR THE KEEPING STILL MOUNTAIN;So;0;ON;;;;;N;;;;; 4DF4;HEXAGRAM FOR DEVELOPMENT;So;0;ON;;;;;N;;;;; 4DF5;HEXAGRAM FOR THE MARRYING MAIDEN;So;0;ON;;;;;N;;;;; 4DF6;HEXAGRAM FOR ABUNDANCE;So;0;ON;;;;;N;;;;; 4DF7;HEXAGRAM FOR THE WANDERER;So;0;ON;;;;;N;;;;; 4DF8;HEXAGRAM FOR THE GENTLE WIND;So;0;ON;;;;;N;;;;; 4DF9;HEXAGRAM FOR THE JOYOUS LAKE;So;0;ON;;;;;N;;;;; 4DFA;HEXAGRAM FOR DISPERSION;So;0;ON;;;;;N;;;;; 4DFB;HEXAGRAM FOR LIMITATION;So;0;ON;;;;;N;;;;; 4DFC;HEXAGRAM FOR INNER TRUTH;So;0;ON;;;;;N;;;;; 4DFD;HEXAGRAM FOR SMALL PREPONDERANCE;So;0;ON;;;;;N;;;;; 4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;; 4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;; 4E00;;Lo;0;L;;;;;N;;;;; 9FFF;;Lo;0;L;;;;;N;;;;; A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;; A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;; A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;; A003;YI SYLLABLE IP;Lo;0;L;;;;;N;;;;; A004;YI SYLLABLE IET;Lo;0;L;;;;;N;;;;; A005;YI SYLLABLE IEX;Lo;0;L;;;;;N;;;;; A006;YI SYLLABLE IE;Lo;0;L;;;;;N;;;;; A007;YI SYLLABLE IEP;Lo;0;L;;;;;N;;;;; A008;YI SYLLABLE AT;Lo;0;L;;;;;N;;;;; A009;YI SYLLABLE AX;Lo;0;L;;;;;N;;;;; A00A;YI SYLLABLE A;Lo;0;L;;;;;N;;;;; A00B;YI SYLLABLE AP;Lo;0;L;;;;;N;;;;; A00C;YI SYLLABLE UOX;Lo;0;L;;;;;N;;;;; A00D;YI SYLLABLE UO;Lo;0;L;;;;;N;;;;; A00E;YI SYLLABLE UOP;Lo;0;L;;;;;N;;;;; A00F;YI SYLLABLE OT;Lo;0;L;;;;;N;;;;; A010;YI SYLLABLE OX;Lo;0;L;;;;;N;;;;; A011;YI SYLLABLE O;Lo;0;L;;;;;N;;;;; A012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;; A013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;; A014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;; A015;YI SYLLABLE WU;Lm;0;L;;;;;N;;;;; A016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;; A017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;; A018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;; A019;YI SYLLABLE BIP;Lo;0;L;;;;;N;;;;; A01A;YI SYLLABLE BIET;Lo;0;L;;;;;N;;;;; A01B;YI SYLLABLE BIEX;Lo;0;L;;;;;N;;;;; A01C;YI SYLLABLE BIE;Lo;0;L;;;;;N;;;;; A01D;YI SYLLABLE BIEP;Lo;0;L;;;;;N;;;;; A01E;YI SYLLABLE BAT;Lo;0;L;;;;;N;;;;; A01F;YI SYLLABLE BAX;Lo;0;L;;;;;N;;;;; A020;YI SYLLABLE BA;Lo;0;L;;;;;N;;;;; A021;YI SYLLABLE BAP;Lo;0;L;;;;;N;;;;; A022;YI SYLLABLE BUOX;Lo;0;L;;;;;N;;;;; A023;YI SYLLABLE BUO;Lo;0;L;;;;;N;;;;; A024;YI SYLLABLE BUOP;Lo;0;L;;;;;N;;;;; A025;YI SYLLABLE BOT;Lo;0;L;;;;;N;;;;; A026;YI SYLLABLE BOX;Lo;0;L;;;;;N;;;;; A027;YI SYLLABLE BO;Lo;0;L;;;;;N;;;;; A028;YI SYLLABLE BOP;Lo;0;L;;;;;N;;;;; A029;YI SYLLABLE BEX;Lo;0;L;;;;;N;;;;; A02A;YI SYLLABLE BE;Lo;0;L;;;;;N;;;;; A02B;YI SYLLABLE BEP;Lo;0;L;;;;;N;;;;; A02C;YI SYLLABLE BUT;Lo;0;L;;;;;N;;;;; A02D;YI SYLLABLE BUX;Lo;0;L;;;;;N;;;;; A02E;YI SYLLABLE BU;Lo;0;L;;;;;N;;;;; A02F;YI SYLLABLE BUP;Lo;0;L;;;;;N;;;;; A030;YI SYLLABLE BURX;Lo;0;L;;;;;N;;;;; A031;YI SYLLABLE BUR;Lo;0;L;;;;;N;;;;; A032;YI SYLLABLE BYT;Lo;0;L;;;;;N;;;;; A033;YI SYLLABLE BYX;Lo;0;L;;;;;N;;;;; A034;YI SYLLABLE BY;Lo;0;L;;;;;N;;;;; A035;YI SYLLABLE BYP;Lo;0;L;;;;;N;;;;; A036;YI SYLLABLE BYRX;Lo;0;L;;;;;N;;;;; A037;YI SYLLABLE BYR;Lo;0;L;;;;;N;;;;; A038;YI SYLLABLE PIT;Lo;0;L;;;;;N;;;;; A039;YI SYLLABLE PIX;Lo;0;L;;;;;N;;;;; A03A;YI SYLLABLE PI;Lo;0;L;;;;;N;;;;; A03B;YI SYLLABLE PIP;Lo;0;L;;;;;N;;;;; A03C;YI SYLLABLE PIEX;Lo;0;L;;;;;N;;;;; A03D;YI SYLLABLE PIE;Lo;0;L;;;;;N;;;;; A03E;YI SYLLABLE PIEP;Lo;0;L;;;;;N;;;;; A03F;YI SYLLABLE PAT;Lo;0;L;;;;;N;;;;; A040;YI SYLLABLE PAX;Lo;0;L;;;;;N;;;;; A041;YI SYLLABLE PA;Lo;0;L;;;;;N;;;;; A042;YI SYLLABLE PAP;Lo;0;L;;;;;N;;;;; A043;YI SYLLABLE PUOX;Lo;0;L;;;;;N;;;;; A044;YI SYLLABLE PUO;Lo;0;L;;;;;N;;;;; A045;YI SYLLABLE PUOP;Lo;0;L;;;;;N;;;;; A046;YI SYLLABLE POT;Lo;0;L;;;;;N;;;;; A047;YI SYLLABLE POX;Lo;0;L;;;;;N;;;;; A048;YI SYLLABLE PO;Lo;0;L;;;;;N;;;;; A049;YI SYLLABLE POP;Lo;0;L;;;;;N;;;;; A04A;YI SYLLABLE PUT;Lo;0;L;;;;;N;;;;; A04B;YI SYLLABLE PUX;Lo;0;L;;;;;N;;;;; A04C;YI SYLLABLE PU;Lo;0;L;;;;;N;;;;; A04D;YI SYLLABLE PUP;Lo;0;L;;;;;N;;;;; A04E;YI SYLLABLE PURX;Lo;0;L;;;;;N;;;;; A04F;YI SYLLABLE PUR;Lo;0;L;;;;;N;;;;; A050;YI SYLLABLE PYT;Lo;0;L;;;;;N;;;;; A051;YI SYLLABLE PYX;Lo;0;L;;;;;N;;;;; A052;YI SYLLABLE PY;Lo;0;L;;;;;N;;;;; A053;YI SYLLABLE PYP;Lo;0;L;;;;;N;;;;; A054;YI SYLLABLE PYRX;Lo;0;L;;;;;N;;;;; A055;YI SYLLABLE PYR;Lo;0;L;;;;;N;;;;; A056;YI SYLLABLE BBIT;Lo;0;L;;;;;N;;;;; A057;YI SYLLABLE BBIX;Lo;0;L;;;;;N;;;;; A058;YI SYLLABLE BBI;Lo;0;L;;;;;N;;;;; A059;YI SYLLABLE BBIP;Lo;0;L;;;;;N;;;;; A05A;YI SYLLABLE BBIET;Lo;0;L;;;;;N;;;;; A05B;YI SYLLABLE BBIEX;Lo;0;L;;;;;N;;;;; A05C;YI SYLLABLE BBIE;Lo;0;L;;;;;N;;;;; A05D;YI SYLLABLE BBIEP;Lo;0;L;;;;;N;;;;; A05E;YI SYLLABLE BBAT;Lo;0;L;;;;;N;;;;; A05F;YI SYLLABLE BBAX;Lo;0;L;;;;;N;;;;; A060;YI SYLLABLE BBA;Lo;0;L;;;;;N;;;;; A061;YI SYLLABLE BBAP;Lo;0;L;;;;;N;;;;; A062;YI SYLLABLE BBUOX;Lo;0;L;;;;;N;;;;; A063;YI SYLLABLE BBUO;Lo;0;L;;;;;N;;;;; A064;YI SYLLABLE BBUOP;Lo;0;L;;;;;N;;;;; A065;YI SYLLABLE BBOT;Lo;0;L;;;;;N;;;;; A066;YI SYLLABLE BBOX;Lo;0;L;;;;;N;;;;; A067;YI SYLLABLE BBO;Lo;0;L;;;;;N;;;;; A068;YI SYLLABLE BBOP;Lo;0;L;;;;;N;;;;; A069;YI SYLLABLE BBEX;Lo;0;L;;;;;N;;;;; A06A;YI SYLLABLE BBE;Lo;0;L;;;;;N;;;;; A06B;YI SYLLABLE BBEP;Lo;0;L;;;;;N;;;;; A06C;YI SYLLABLE BBUT;Lo;0;L;;;;;N;;;;; A06D;YI SYLLABLE BBUX;Lo;0;L;;;;;N;;;;; A06E;YI SYLLABLE BBU;Lo;0;L;;;;;N;;;;; A06F;YI SYLLABLE BBUP;Lo;0;L;;;;;N;;;;; A070;YI SYLLABLE BBURX;Lo;0;L;;;;;N;;;;; A071;YI SYLLABLE BBUR;Lo;0;L;;;;;N;;;;; A072;YI SYLLABLE BBYT;Lo;0;L;;;;;N;;;;; A073;YI SYLLABLE BBYX;Lo;0;L;;;;;N;;;;; A074;YI SYLLABLE BBY;Lo;0;L;;;;;N;;;;; A075;YI SYLLABLE BBYP;Lo;0;L;;;;;N;;;;; A076;YI SYLLABLE NBIT;Lo;0;L;;;;;N;;;;; A077;YI SYLLABLE NBIX;Lo;0;L;;;;;N;;;;; A078;YI SYLLABLE NBI;Lo;0;L;;;;;N;;;;; A079;YI SYLLABLE NBIP;Lo;0;L;;;;;N;;;;; A07A;YI SYLLABLE NBIEX;Lo;0;L;;;;;N;;;;; A07B;YI SYLLABLE NBIE;Lo;0;L;;;;;N;;;;; A07C;YI SYLLABLE NBIEP;Lo;0;L;;;;;N;;;;; A07D;YI SYLLABLE NBAT;Lo;0;L;;;;;N;;;;; A07E;YI SYLLABLE NBAX;Lo;0;L;;;;;N;;;;; A07F;YI SYLLABLE NBA;Lo;0;L;;;;;N;;;;; A080;YI SYLLABLE NBAP;Lo;0;L;;;;;N;;;;; A081;YI SYLLABLE NBOT;Lo;0;L;;;;;N;;;;; A082;YI SYLLABLE NBOX;Lo;0;L;;;;;N;;;;; A083;YI SYLLABLE NBO;Lo;0;L;;;;;N;;;;; A084;YI SYLLABLE NBOP;Lo;0;L;;;;;N;;;;; A085;YI SYLLABLE NBUT;Lo;0;L;;;;;N;;;;; A086;YI SYLLABLE NBUX;Lo;0;L;;;;;N;;;;; A087;YI SYLLABLE NBU;Lo;0;L;;;;;N;;;;; A088;YI SYLLABLE NBUP;Lo;0;L;;;;;N;;;;; A089;YI SYLLABLE NBURX;Lo;0;L;;;;;N;;;;; A08A;YI SYLLABLE NBUR;Lo;0;L;;;;;N;;;;; A08B;YI SYLLABLE NBYT;Lo;0;L;;;;;N;;;;; A08C;YI SYLLABLE NBYX;Lo;0;L;;;;;N;;;;; A08D;YI SYLLABLE NBY;Lo;0;L;;;;;N;;;;; A08E;YI SYLLABLE NBYP;Lo;0;L;;;;;N;;;;; A08F;YI SYLLABLE NBYRX;Lo;0;L;;;;;N;;;;; A090;YI SYLLABLE NBYR;Lo;0;L;;;;;N;;;;; A091;YI SYLLABLE HMIT;Lo;0;L;;;;;N;;;;; A092;YI SYLLABLE HMIX;Lo;0;L;;;;;N;;;;; A093;YI SYLLABLE HMI;Lo;0;L;;;;;N;;;;; A094;YI SYLLABLE HMIP;Lo;0;L;;;;;N;;;;; A095;YI SYLLABLE HMIEX;Lo;0;L;;;;;N;;;;; A096;YI SYLLABLE HMIE;Lo;0;L;;;;;N;;;;; A097;YI SYLLABLE HMIEP;Lo;0;L;;;;;N;;;;; A098;YI SYLLABLE HMAT;Lo;0;L;;;;;N;;;;; A099;YI SYLLABLE HMAX;Lo;0;L;;;;;N;;;;; A09A;YI SYLLABLE HMA;Lo;0;L;;;;;N;;;;; A09B;YI SYLLABLE HMAP;Lo;0;L;;;;;N;;;;; A09C;YI SYLLABLE HMUOX;Lo;0;L;;;;;N;;;;; A09D;YI SYLLABLE HMUO;Lo;0;L;;;;;N;;;;; A09E;YI SYLLABLE HMUOP;Lo;0;L;;;;;N;;;;; A09F;YI SYLLABLE HMOT;Lo;0;L;;;;;N;;;;; A0A0;YI SYLLABLE HMOX;Lo;0;L;;;;;N;;;;; A0A1;YI SYLLABLE HMO;Lo;0;L;;;;;N;;;;; A0A2;YI SYLLABLE HMOP;Lo;0;L;;;;;N;;;;; A0A3;YI SYLLABLE HMUT;Lo;0;L;;;;;N;;;;; A0A4;YI SYLLABLE HMUX;Lo;0;L;;;;;N;;;;; A0A5;YI SYLLABLE HMU;Lo;0;L;;;;;N;;;;; A0A6;YI SYLLABLE HMUP;Lo;0;L;;;;;N;;;;; A0A7;YI SYLLABLE HMURX;Lo;0;L;;;;;N;;;;; A0A8;YI SYLLABLE HMUR;Lo;0;L;;;;;N;;;;; A0A9;YI SYLLABLE HMYX;Lo;0;L;;;;;N;;;;; A0AA;YI SYLLABLE HMY;Lo;0;L;;;;;N;;;;; A0AB;YI SYLLABLE HMYP;Lo;0;L;;;;;N;;;;; A0AC;YI SYLLABLE HMYRX;Lo;0;L;;;;;N;;;;; A0AD;YI SYLLABLE HMYR;Lo;0;L;;;;;N;;;;; A0AE;YI SYLLABLE MIT;Lo;0;L;;;;;N;;;;; A0AF;YI SYLLABLE MIX;Lo;0;L;;;;;N;;;;; A0B0;YI SYLLABLE MI;Lo;0;L;;;;;N;;;;; A0B1;YI SYLLABLE MIP;Lo;0;L;;;;;N;;;;; A0B2;YI SYLLABLE MIEX;Lo;0;L;;;;;N;;;;; A0B3;YI SYLLABLE MIE;Lo;0;L;;;;;N;;;;; A0B4;YI SYLLABLE MIEP;Lo;0;L;;;;;N;;;;; A0B5;YI SYLLABLE MAT;Lo;0;L;;;;;N;;;;; A0B6;YI SYLLABLE MAX;Lo;0;L;;;;;N;;;;; A0B7;YI SYLLABLE MA;Lo;0;L;;;;;N;;;;; A0B8;YI SYLLABLE MAP;Lo;0;L;;;;;N;;;;; A0B9;YI SYLLABLE MUOT;Lo;0;L;;;;;N;;;;; A0BA;YI SYLLABLE MUOX;Lo;0;L;;;;;N;;;;; A0BB;YI SYLLABLE MUO;Lo;0;L;;;;;N;;;;; A0BC;YI SYLLABLE MUOP;Lo;0;L;;;;;N;;;;; A0BD;YI SYLLABLE MOT;Lo;0;L;;;;;N;;;;; A0BE;YI SYLLABLE MOX;Lo;0;L;;;;;N;;;;; A0BF;YI SYLLABLE MO;Lo;0;L;;;;;N;;;;; A0C0;YI SYLLABLE MOP;Lo;0;L;;;;;N;;;;; A0C1;YI SYLLABLE MEX;Lo;0;L;;;;;N;;;;; A0C2;YI SYLLABLE ME;Lo;0;L;;;;;N;;;;; A0C3;YI SYLLABLE MUT;Lo;0;L;;;;;N;;;;; A0C4;YI SYLLABLE MUX;Lo;0;L;;;;;N;;;;; A0C5;YI SYLLABLE MU;Lo;0;L;;;;;N;;;;; A0C6;YI SYLLABLE MUP;Lo;0;L;;;;;N;;;;; A0C7;YI SYLLABLE MURX;Lo;0;L;;;;;N;;;;; A0C8;YI SYLLABLE MUR;Lo;0;L;;;;;N;;;;; A0C9;YI SYLLABLE MYT;Lo;0;L;;;;;N;;;;; A0CA;YI SYLLABLE MYX;Lo;0;L;;;;;N;;;;; A0CB;YI SYLLABLE MY;Lo;0;L;;;;;N;;;;; A0CC;YI SYLLABLE MYP;Lo;0;L;;;;;N;;;;; A0CD;YI SYLLABLE FIT;Lo;0;L;;;;;N;;;;; A0CE;YI SYLLABLE FIX;Lo;0;L;;;;;N;;;;; A0CF;YI SYLLABLE FI;Lo;0;L;;;;;N;;;;; A0D0;YI SYLLABLE FIP;Lo;0;L;;;;;N;;;;; A0D1;YI SYLLABLE FAT;Lo;0;L;;;;;N;;;;; A0D2;YI SYLLABLE FAX;Lo;0;L;;;;;N;;;;; A0D3;YI SYLLABLE FA;Lo;0;L;;;;;N;;;;; A0D4;YI SYLLABLE FAP;Lo;0;L;;;;;N;;;;; A0D5;YI SYLLABLE FOX;Lo;0;L;;;;;N;;;;; A0D6;YI SYLLABLE FO;Lo;0;L;;;;;N;;;;; A0D7;YI SYLLABLE FOP;Lo;0;L;;;;;N;;;;; A0D8;YI SYLLABLE FUT;Lo;0;L;;;;;N;;;;; A0D9;YI SYLLABLE FUX;Lo;0;L;;;;;N;;;;; A0DA;YI SYLLABLE FU;Lo;0;L;;;;;N;;;;; A0DB;YI SYLLABLE FUP;Lo;0;L;;;;;N;;;;; A0DC;YI SYLLABLE FURX;Lo;0;L;;;;;N;;;;; A0DD;YI SYLLABLE FUR;Lo;0;L;;;;;N;;;;; A0DE;YI SYLLABLE FYT;Lo;0;L;;;;;N;;;;; A0DF;YI SYLLABLE FYX;Lo;0;L;;;;;N;;;;; A0E0;YI SYLLABLE FY;Lo;0;L;;;;;N;;;;; A0E1;YI SYLLABLE FYP;Lo;0;L;;;;;N;;;;; A0E2;YI SYLLABLE VIT;Lo;0;L;;;;;N;;;;; A0E3;YI SYLLABLE VIX;Lo;0;L;;;;;N;;;;; A0E4;YI SYLLABLE VI;Lo;0;L;;;;;N;;;;; A0E5;YI SYLLABLE VIP;Lo;0;L;;;;;N;;;;; A0E6;YI SYLLABLE VIET;Lo;0;L;;;;;N;;;;; A0E7;YI SYLLABLE VIEX;Lo;0;L;;;;;N;;;;; A0E8;YI SYLLABLE VIE;Lo;0;L;;;;;N;;;;; A0E9;YI SYLLABLE VIEP;Lo;0;L;;;;;N;;;;; A0EA;YI SYLLABLE VAT;Lo;0;L;;;;;N;;;;; A0EB;YI SYLLABLE VAX;Lo;0;L;;;;;N;;;;; A0EC;YI SYLLABLE VA;Lo;0;L;;;;;N;;;;; A0ED;YI SYLLABLE VAP;Lo;0;L;;;;;N;;;;; A0EE;YI SYLLABLE VOT;Lo;0;L;;;;;N;;;;; A0EF;YI SYLLABLE VOX;Lo;0;L;;;;;N;;;;; A0F0;YI SYLLABLE VO;Lo;0;L;;;;;N;;;;; A0F1;YI SYLLABLE VOP;Lo;0;L;;;;;N;;;;; A0F2;YI SYLLABLE VEX;Lo;0;L;;;;;N;;;;; A0F3;YI SYLLABLE VEP;Lo;0;L;;;;;N;;;;; A0F4;YI SYLLABLE VUT;Lo;0;L;;;;;N;;;;; A0F5;YI SYLLABLE VUX;Lo;0;L;;;;;N;;;;; A0F6;YI SYLLABLE VU;Lo;0;L;;;;;N;;;;; A0F7;YI SYLLABLE VUP;Lo;0;L;;;;;N;;;;; A0F8;YI SYLLABLE VURX;Lo;0;L;;;;;N;;;;; A0F9;YI SYLLABLE VUR;Lo;0;L;;;;;N;;;;; A0FA;YI SYLLABLE VYT;Lo;0;L;;;;;N;;;;; A0FB;YI SYLLABLE VYX;Lo;0;L;;;;;N;;;;; A0FC;YI SYLLABLE VY;Lo;0;L;;;;;N;;;;; A0FD;YI SYLLABLE VYP;Lo;0;L;;;;;N;;;;; A0FE;YI SYLLABLE VYRX;Lo;0;L;;;;;N;;;;; A0FF;YI SYLLABLE VYR;Lo;0;L;;;;;N;;;;; A100;YI SYLLABLE DIT;Lo;0;L;;;;;N;;;;; A101;YI SYLLABLE DIX;Lo;0;L;;;;;N;;;;; A102;YI SYLLABLE DI;Lo;0;L;;;;;N;;;;; A103;YI SYLLABLE DIP;Lo;0;L;;;;;N;;;;; A104;YI SYLLABLE DIEX;Lo;0;L;;;;;N;;;;; A105;YI SYLLABLE DIE;Lo;0;L;;;;;N;;;;; A106;YI SYLLABLE DIEP;Lo;0;L;;;;;N;;;;; A107;YI SYLLABLE DAT;Lo;0;L;;;;;N;;;;; A108;YI SYLLABLE DAX;Lo;0;L;;;;;N;;;;; A109;YI SYLLABLE DA;Lo;0;L;;;;;N;;;;; A10A;YI SYLLABLE DAP;Lo;0;L;;;;;N;;;;; A10B;YI SYLLABLE DUOX;Lo;0;L;;;;;N;;;;; A10C;YI SYLLABLE DUO;Lo;0;L;;;;;N;;;;; A10D;YI SYLLABLE DOT;Lo;0;L;;;;;N;;;;; A10E;YI SYLLABLE DOX;Lo;0;L;;;;;N;;;;; A10F;YI SYLLABLE DO;Lo;0;L;;;;;N;;;;; A110;YI SYLLABLE DOP;Lo;0;L;;;;;N;;;;; A111;YI SYLLABLE DEX;Lo;0;L;;;;;N;;;;; A112;YI SYLLABLE DE;Lo;0;L;;;;;N;;;;; A113;YI SYLLABLE DEP;Lo;0;L;;;;;N;;;;; A114;YI SYLLABLE DUT;Lo;0;L;;;;;N;;;;; A115;YI SYLLABLE DUX;Lo;0;L;;;;;N;;;;; A116;YI SYLLABLE DU;Lo;0;L;;;;;N;;;;; A117;YI SYLLABLE DUP;Lo;0;L;;;;;N;;;;; A118;YI SYLLABLE DURX;Lo;0;L;;;;;N;;;;; A119;YI SYLLABLE DUR;Lo;0;L;;;;;N;;;;; A11A;YI SYLLABLE TIT;Lo;0;L;;;;;N;;;;; A11B;YI SYLLABLE TIX;Lo;0;L;;;;;N;;;;; A11C;YI SYLLABLE TI;Lo;0;L;;;;;N;;;;; A11D;YI SYLLABLE TIP;Lo;0;L;;;;;N;;;;; A11E;YI SYLLABLE TIEX;Lo;0;L;;;;;N;;;;; A11F;YI SYLLABLE TIE;Lo;0;L;;;;;N;;;;; A120;YI SYLLABLE TIEP;Lo;0;L;;;;;N;;;;; A121;YI SYLLABLE TAT;Lo;0;L;;;;;N;;;;; A122;YI SYLLABLE TAX;Lo;0;L;;;;;N;;;;; A123;YI SYLLABLE TA;Lo;0;L;;;;;N;;;;; A124;YI SYLLABLE TAP;Lo;0;L;;;;;N;;;;; A125;YI SYLLABLE TUOT;Lo;0;L;;;;;N;;;;; A126;YI SYLLABLE TUOX;Lo;0;L;;;;;N;;;;; A127;YI SYLLABLE TUO;Lo;0;L;;;;;N;;;;; A128;YI SYLLABLE TUOP;Lo;0;L;;;;;N;;;;; A129;YI SYLLABLE TOT;Lo;0;L;;;;;N;;;;; A12A;YI SYLLABLE TOX;Lo;0;L;;;;;N;;;;; A12B;YI SYLLABLE TO;Lo;0;L;;;;;N;;;;; A12C;YI SYLLABLE TOP;Lo;0;L;;;;;N;;;;; A12D;YI SYLLABLE TEX;Lo;0;L;;;;;N;;;;; A12E;YI SYLLABLE TE;Lo;0;L;;;;;N;;;;; A12F;YI SYLLABLE TEP;Lo;0;L;;;;;N;;;;; A130;YI SYLLABLE TUT;Lo;0;L;;;;;N;;;;; A131;YI SYLLABLE TUX;Lo;0;L;;;;;N;;;;; A132;YI SYLLABLE TU;Lo;0;L;;;;;N;;;;; A133;YI SYLLABLE TUP;Lo;0;L;;;;;N;;;;; A134;YI SYLLABLE TURX;Lo;0;L;;;;;N;;;;; A135;YI SYLLABLE TUR;Lo;0;L;;;;;N;;;;; A136;YI SYLLABLE DDIT;Lo;0;L;;;;;N;;;;; A137;YI SYLLABLE DDIX;Lo;0;L;;;;;N;;;;; A138;YI SYLLABLE DDI;Lo;0;L;;;;;N;;;;; A139;YI SYLLABLE DDIP;Lo;0;L;;;;;N;;;;; A13A;YI SYLLABLE DDIEX;Lo;0;L;;;;;N;;;;; A13B;YI SYLLABLE DDIE;Lo;0;L;;;;;N;;;;; A13C;YI SYLLABLE DDIEP;Lo;0;L;;;;;N;;;;; A13D;YI SYLLABLE DDAT;Lo;0;L;;;;;N;;;;; A13E;YI SYLLABLE DDAX;Lo;0;L;;;;;N;;;;; A13F;YI SYLLABLE DDA;Lo;0;L;;;;;N;;;;; A140;YI SYLLABLE DDAP;Lo;0;L;;;;;N;;;;; A141;YI SYLLABLE DDUOX;Lo;0;L;;;;;N;;;;; A142;YI SYLLABLE DDUO;Lo;0;L;;;;;N;;;;; A143;YI SYLLABLE DDUOP;Lo;0;L;;;;;N;;;;; A144;YI SYLLABLE DDOT;Lo;0;L;;;;;N;;;;; A145;YI SYLLABLE DDOX;Lo;0;L;;;;;N;;;;; A146;YI SYLLABLE DDO;Lo;0;L;;;;;N;;;;; A147;YI SYLLABLE DDOP;Lo;0;L;;;;;N;;;;; A148;YI SYLLABLE DDEX;Lo;0;L;;;;;N;;;;; A149;YI SYLLABLE DDE;Lo;0;L;;;;;N;;;;; A14A;YI SYLLABLE DDEP;Lo;0;L;;;;;N;;;;; A14B;YI SYLLABLE DDUT;Lo;0;L;;;;;N;;;;; A14C;YI SYLLABLE DDUX;Lo;0;L;;;;;N;;;;; A14D;YI SYLLABLE DDU;Lo;0;L;;;;;N;;;;; A14E;YI SYLLABLE DDUP;Lo;0;L;;;;;N;;;;; A14F;YI SYLLABLE DDURX;Lo;0;L;;;;;N;;;;; A150;YI SYLLABLE DDUR;Lo;0;L;;;;;N;;;;; A151;YI SYLLABLE NDIT;Lo;0;L;;;;;N;;;;; A152;YI SYLLABLE NDIX;Lo;0;L;;;;;N;;;;; A153;YI SYLLABLE NDI;Lo;0;L;;;;;N;;;;; A154;YI SYLLABLE NDIP;Lo;0;L;;;;;N;;;;; A155;YI SYLLABLE NDIEX;Lo;0;L;;;;;N;;;;; A156;YI SYLLABLE NDIE;Lo;0;L;;;;;N;;;;; A157;YI SYLLABLE NDAT;Lo;0;L;;;;;N;;;;; A158;YI SYLLABLE NDAX;Lo;0;L;;;;;N;;;;; A159;YI SYLLABLE NDA;Lo;0;L;;;;;N;;;;; A15A;YI SYLLABLE NDAP;Lo;0;L;;;;;N;;;;; A15B;YI SYLLABLE NDOT;Lo;0;L;;;;;N;;;;; A15C;YI SYLLABLE NDOX;Lo;0;L;;;;;N;;;;; A15D;YI SYLLABLE NDO;Lo;0;L;;;;;N;;;;; A15E;YI SYLLABLE NDOP;Lo;0;L;;;;;N;;;;; A15F;YI SYLLABLE NDEX;Lo;0;L;;;;;N;;;;; A160;YI SYLLABLE NDE;Lo;0;L;;;;;N;;;;; A161;YI SYLLABLE NDEP;Lo;0;L;;;;;N;;;;; A162;YI SYLLABLE NDUT;Lo;0;L;;;;;N;;;;; A163;YI SYLLABLE NDUX;Lo;0;L;;;;;N;;;;; A164;YI SYLLABLE NDU;Lo;0;L;;;;;N;;;;; A165;YI SYLLABLE NDUP;Lo;0;L;;;;;N;;;;; A166;YI SYLLABLE NDURX;Lo;0;L;;;;;N;;;;; A167;YI SYLLABLE NDUR;Lo;0;L;;;;;N;;;;; A168;YI SYLLABLE HNIT;Lo;0;L;;;;;N;;;;; A169;YI SYLLABLE HNIX;Lo;0;L;;;;;N;;;;; A16A;YI SYLLABLE HNI;Lo;0;L;;;;;N;;;;; A16B;YI SYLLABLE HNIP;Lo;0;L;;;;;N;;;;; A16C;YI SYLLABLE HNIET;Lo;0;L;;;;;N;;;;; A16D;YI SYLLABLE HNIEX;Lo;0;L;;;;;N;;;;; A16E;YI SYLLABLE HNIE;Lo;0;L;;;;;N;;;;; A16F;YI SYLLABLE HNIEP;Lo;0;L;;;;;N;;;;; A170;YI SYLLABLE HNAT;Lo;0;L;;;;;N;;;;; A171;YI SYLLABLE HNAX;Lo;0;L;;;;;N;;;;; A172;YI SYLLABLE HNA;Lo;0;L;;;;;N;;;;; A173;YI SYLLABLE HNAP;Lo;0;L;;;;;N;;;;; A174;YI SYLLABLE HNUOX;Lo;0;L;;;;;N;;;;; A175;YI SYLLABLE HNUO;Lo;0;L;;;;;N;;;;; A176;YI SYLLABLE HNOT;Lo;0;L;;;;;N;;;;; A177;YI SYLLABLE HNOX;Lo;0;L;;;;;N;;;;; A178;YI SYLLABLE HNOP;Lo;0;L;;;;;N;;;;; A179;YI SYLLABLE HNEX;Lo;0;L;;;;;N;;;;; A17A;YI SYLLABLE HNE;Lo;0;L;;;;;N;;;;; A17B;YI SYLLABLE HNEP;Lo;0;L;;;;;N;;;;; A17C;YI SYLLABLE HNUT;Lo;0;L;;;;;N;;;;; A17D;YI SYLLABLE NIT;Lo;0;L;;;;;N;;;;; A17E;YI SYLLABLE NIX;Lo;0;L;;;;;N;;;;; A17F;YI SYLLABLE NI;Lo;0;L;;;;;N;;;;; A180;YI SYLLABLE NIP;Lo;0;L;;;;;N;;;;; A181;YI SYLLABLE NIEX;Lo;0;L;;;;;N;;;;; A182;YI SYLLABLE NIE;Lo;0;L;;;;;N;;;;; A183;YI SYLLABLE NIEP;Lo;0;L;;;;;N;;;;; A184;YI SYLLABLE NAX;Lo;0;L;;;;;N;;;;; A185;YI SYLLABLE NA;Lo;0;L;;;;;N;;;;; A186;YI SYLLABLE NAP;Lo;0;L;;;;;N;;;;; A187;YI SYLLABLE NUOX;Lo;0;L;;;;;N;;;;; A188;YI SYLLABLE NUO;Lo;0;L;;;;;N;;;;; A189;YI SYLLABLE NUOP;Lo;0;L;;;;;N;;;;; A18A;YI SYLLABLE NOT;Lo;0;L;;;;;N;;;;; A18B;YI SYLLABLE NOX;Lo;0;L;;;;;N;;;;; A18C;YI SYLLABLE NO;Lo;0;L;;;;;N;;;;; A18D;YI SYLLABLE NOP;Lo;0;L;;;;;N;;;;; A18E;YI SYLLABLE NEX;Lo;0;L;;;;;N;;;;; A18F;YI SYLLABLE NE;Lo;0;L;;;;;N;;;;; A190;YI SYLLABLE NEP;Lo;0;L;;;;;N;;;;; A191;YI SYLLABLE NUT;Lo;0;L;;;;;N;;;;; A192;YI SYLLABLE NUX;Lo;0;L;;;;;N;;;;; A193;YI SYLLABLE NU;Lo;0;L;;;;;N;;;;; A194;YI SYLLABLE NUP;Lo;0;L;;;;;N;;;;; A195;YI SYLLABLE NURX;Lo;0;L;;;;;N;;;;; A196;YI SYLLABLE NUR;Lo;0;L;;;;;N;;;;; A197;YI SYLLABLE HLIT;Lo;0;L;;;;;N;;;;; A198;YI SYLLABLE HLIX;Lo;0;L;;;;;N;;;;; A199;YI SYLLABLE HLI;Lo;0;L;;;;;N;;;;; A19A;YI SYLLABLE HLIP;Lo;0;L;;;;;N;;;;; A19B;YI SYLLABLE HLIEX;Lo;0;L;;;;;N;;;;; A19C;YI SYLLABLE HLIE;Lo;0;L;;;;;N;;;;; A19D;YI SYLLABLE HLIEP;Lo;0;L;;;;;N;;;;; A19E;YI SYLLABLE HLAT;Lo;0;L;;;;;N;;;;; A19F;YI SYLLABLE HLAX;Lo;0;L;;;;;N;;;;; A1A0;YI SYLLABLE HLA;Lo;0;L;;;;;N;;;;; A1A1;YI SYLLABLE HLAP;Lo;0;L;;;;;N;;;;; A1A2;YI SYLLABLE HLUOX;Lo;0;L;;;;;N;;;;; A1A3;YI SYLLABLE HLUO;Lo;0;L;;;;;N;;;;; A1A4;YI SYLLABLE HLUOP;Lo;0;L;;;;;N;;;;; A1A5;YI SYLLABLE HLOX;Lo;0;L;;;;;N;;;;; A1A6;YI SYLLABLE HLO;Lo;0;L;;;;;N;;;;; A1A7;YI SYLLABLE HLOP;Lo;0;L;;;;;N;;;;; A1A8;YI SYLLABLE HLEX;Lo;0;L;;;;;N;;;;; A1A9;YI SYLLABLE HLE;Lo;0;L;;;;;N;;;;; A1AA;YI SYLLABLE HLEP;Lo;0;L;;;;;N;;;;; A1AB;YI SYLLABLE HLUT;Lo;0;L;;;;;N;;;;; A1AC;YI SYLLABLE HLUX;Lo;0;L;;;;;N;;;;; A1AD;YI SYLLABLE HLU;Lo;0;L;;;;;N;;;;; A1AE;YI SYLLABLE HLUP;Lo;0;L;;;;;N;;;;; A1AF;YI SYLLABLE HLURX;Lo;0;L;;;;;N;;;;; A1B0;YI SYLLABLE HLUR;Lo;0;L;;;;;N;;;;; A1B1;YI SYLLABLE HLYT;Lo;0;L;;;;;N;;;;; A1B2;YI SYLLABLE HLYX;Lo;0;L;;;;;N;;;;; A1B3;YI SYLLABLE HLY;Lo;0;L;;;;;N;;;;; A1B4;YI SYLLABLE HLYP;Lo;0;L;;;;;N;;;;; A1B5;YI SYLLABLE HLYRX;Lo;0;L;;;;;N;;;;; A1B6;YI SYLLABLE HLYR;Lo;0;L;;;;;N;;;;; A1B7;YI SYLLABLE LIT;Lo;0;L;;;;;N;;;;; A1B8;YI SYLLABLE LIX;Lo;0;L;;;;;N;;;;; A1B9;YI SYLLABLE LI;Lo;0;L;;;;;N;;;;; A1BA;YI SYLLABLE LIP;Lo;0;L;;;;;N;;;;; A1BB;YI SYLLABLE LIET;Lo;0;L;;;;;N;;;;; A1BC;YI SYLLABLE LIEX;Lo;0;L;;;;;N;;;;; A1BD;YI SYLLABLE LIE;Lo;0;L;;;;;N;;;;; A1BE;YI SYLLABLE LIEP;Lo;0;L;;;;;N;;;;; A1BF;YI SYLLABLE LAT;Lo;0;L;;;;;N;;;;; A1C0;YI SYLLABLE LAX;Lo;0;L;;;;;N;;;;; A1C1;YI SYLLABLE LA;Lo;0;L;;;;;N;;;;; A1C2;YI SYLLABLE LAP;Lo;0;L;;;;;N;;;;; A1C3;YI SYLLABLE LUOT;Lo;0;L;;;;;N;;;;; A1C4;YI SYLLABLE LUOX;Lo;0;L;;;;;N;;;;; A1C5;YI SYLLABLE LUO;Lo;0;L;;;;;N;;;;; A1C6;YI SYLLABLE LUOP;Lo;0;L;;;;;N;;;;; A1C7;YI SYLLABLE LOT;Lo;0;L;;;;;N;;;;; A1C8;YI SYLLABLE LOX;Lo;0;L;;;;;N;;;;; A1C9;YI SYLLABLE LO;Lo;0;L;;;;;N;;;;; A1CA;YI SYLLABLE LOP;Lo;0;L;;;;;N;;;;; A1CB;YI SYLLABLE LEX;Lo;0;L;;;;;N;;;;; A1CC;YI SYLLABLE LE;Lo;0;L;;;;;N;;;;; A1CD;YI SYLLABLE LEP;Lo;0;L;;;;;N;;;;; A1CE;YI SYLLABLE LUT;Lo;0;L;;;;;N;;;;; A1CF;YI SYLLABLE LUX;Lo;0;L;;;;;N;;;;; A1D0;YI SYLLABLE LU;Lo;0;L;;;;;N;;;;; A1D1;YI SYLLABLE LUP;Lo;0;L;;;;;N;;;;; A1D2;YI SYLLABLE LURX;Lo;0;L;;;;;N;;;;; A1D3;YI SYLLABLE LUR;Lo;0;L;;;;;N;;;;; A1D4;YI SYLLABLE LYT;Lo;0;L;;;;;N;;;;; A1D5;YI SYLLABLE LYX;Lo;0;L;;;;;N;;;;; A1D6;YI SYLLABLE LY;Lo;0;L;;;;;N;;;;; A1D7;YI SYLLABLE LYP;Lo;0;L;;;;;N;;;;; A1D8;YI SYLLABLE LYRX;Lo;0;L;;;;;N;;;;; A1D9;YI SYLLABLE LYR;Lo;0;L;;;;;N;;;;; A1DA;YI SYLLABLE GIT;Lo;0;L;;;;;N;;;;; A1DB;YI SYLLABLE GIX;Lo;0;L;;;;;N;;;;; A1DC;YI SYLLABLE GI;Lo;0;L;;;;;N;;;;; A1DD;YI SYLLABLE GIP;Lo;0;L;;;;;N;;;;; A1DE;YI SYLLABLE GIET;Lo;0;L;;;;;N;;;;; A1DF;YI SYLLABLE GIEX;Lo;0;L;;;;;N;;;;; A1E0;YI SYLLABLE GIE;Lo;0;L;;;;;N;;;;; A1E1;YI SYLLABLE GIEP;Lo;0;L;;;;;N;;;;; A1E2;YI SYLLABLE GAT;Lo;0;L;;;;;N;;;;; A1E3;YI SYLLABLE GAX;Lo;0;L;;;;;N;;;;; A1E4;YI SYLLABLE GA;Lo;0;L;;;;;N;;;;; A1E5;YI SYLLABLE GAP;Lo;0;L;;;;;N;;;;; A1E6;YI SYLLABLE GUOT;Lo;0;L;;;;;N;;;;; A1E7;YI SYLLABLE GUOX;Lo;0;L;;;;;N;;;;; A1E8;YI SYLLABLE GUO;Lo;0;L;;;;;N;;;;; A1E9;YI SYLLABLE GUOP;Lo;0;L;;;;;N;;;;; A1EA;YI SYLLABLE GOT;Lo;0;L;;;;;N;;;;; A1EB;YI SYLLABLE GOX;Lo;0;L;;;;;N;;;;; A1EC;YI SYLLABLE GO;Lo;0;L;;;;;N;;;;; A1ED;YI SYLLABLE GOP;Lo;0;L;;;;;N;;;;; A1EE;YI SYLLABLE GET;Lo;0;L;;;;;N;;;;; A1EF;YI SYLLABLE GEX;Lo;0;L;;;;;N;;;;; A1F0;YI SYLLABLE GE;Lo;0;L;;;;;N;;;;; A1F1;YI SYLLABLE GEP;Lo;0;L;;;;;N;;;;; A1F2;YI SYLLABLE GUT;Lo;0;L;;;;;N;;;;; A1F3;YI SYLLABLE GUX;Lo;0;L;;;;;N;;;;; A1F4;YI SYLLABLE GU;Lo;0;L;;;;;N;;;;; A1F5;YI SYLLABLE GUP;Lo;0;L;;;;;N;;;;; A1F6;YI SYLLABLE GURX;Lo;0;L;;;;;N;;;;; A1F7;YI SYLLABLE GUR;Lo;0;L;;;;;N;;;;; A1F8;YI SYLLABLE KIT;Lo;0;L;;;;;N;;;;; A1F9;YI SYLLABLE KIX;Lo;0;L;;;;;N;;;;; A1FA;YI SYLLABLE KI;Lo;0;L;;;;;N;;;;; A1FB;YI SYLLABLE KIP;Lo;0;L;;;;;N;;;;; A1FC;YI SYLLABLE KIEX;Lo;0;L;;;;;N;;;;; A1FD;YI SYLLABLE KIE;Lo;0;L;;;;;N;;;;; A1FE;YI SYLLABLE KIEP;Lo;0;L;;;;;N;;;;; A1FF;YI SYLLABLE KAT;Lo;0;L;;;;;N;;;;; A200;YI SYLLABLE KAX;Lo;0;L;;;;;N;;;;; A201;YI SYLLABLE KA;Lo;0;L;;;;;N;;;;; A202;YI SYLLABLE KAP;Lo;0;L;;;;;N;;;;; A203;YI SYLLABLE KUOX;Lo;0;L;;;;;N;;;;; A204;YI SYLLABLE KUO;Lo;0;L;;;;;N;;;;; A205;YI SYLLABLE KUOP;Lo;0;L;;;;;N;;;;; A206;YI SYLLABLE KOT;Lo;0;L;;;;;N;;;;; A207;YI SYLLABLE KOX;Lo;0;L;;;;;N;;;;; A208;YI SYLLABLE KO;Lo;0;L;;;;;N;;;;; A209;YI SYLLABLE KOP;Lo;0;L;;;;;N;;;;; A20A;YI SYLLABLE KET;Lo;0;L;;;;;N;;;;; A20B;YI SYLLABLE KEX;Lo;0;L;;;;;N;;;;; A20C;YI SYLLABLE KE;Lo;0;L;;;;;N;;;;; A20D;YI SYLLABLE KEP;Lo;0;L;;;;;N;;;;; A20E;YI SYLLABLE KUT;Lo;0;L;;;;;N;;;;; A20F;YI SYLLABLE KUX;Lo;0;L;;;;;N;;;;; A210;YI SYLLABLE KU;Lo;0;L;;;;;N;;;;; A211;YI SYLLABLE KUP;Lo;0;L;;;;;N;;;;; A212;YI SYLLABLE KURX;Lo;0;L;;;;;N;;;;; A213;YI SYLLABLE KUR;Lo;0;L;;;;;N;;;;; A214;YI SYLLABLE GGIT;Lo;0;L;;;;;N;;;;; A215;YI SYLLABLE GGIX;Lo;0;L;;;;;N;;;;; A216;YI SYLLABLE GGI;Lo;0;L;;;;;N;;;;; A217;YI SYLLABLE GGIEX;Lo;0;L;;;;;N;;;;; A218;YI SYLLABLE GGIE;Lo;0;L;;;;;N;;;;; A219;YI SYLLABLE GGIEP;Lo;0;L;;;;;N;;;;; A21A;YI SYLLABLE GGAT;Lo;0;L;;;;;N;;;;; A21B;YI SYLLABLE GGAX;Lo;0;L;;;;;N;;;;; A21C;YI SYLLABLE GGA;Lo;0;L;;;;;N;;;;; A21D;YI SYLLABLE GGAP;Lo;0;L;;;;;N;;;;; A21E;YI SYLLABLE GGUOT;Lo;0;L;;;;;N;;;;; A21F;YI SYLLABLE GGUOX;Lo;0;L;;;;;N;;;;; A220;YI SYLLABLE GGUO;Lo;0;L;;;;;N;;;;; A221;YI SYLLABLE GGUOP;Lo;0;L;;;;;N;;;;; A222;YI SYLLABLE GGOT;Lo;0;L;;;;;N;;;;; A223;YI SYLLABLE GGOX;Lo;0;L;;;;;N;;;;; A224;YI SYLLABLE GGO;Lo;0;L;;;;;N;;;;; A225;YI SYLLABLE GGOP;Lo;0;L;;;;;N;;;;; A226;YI SYLLABLE GGET;Lo;0;L;;;;;N;;;;; A227;YI SYLLABLE GGEX;Lo;0;L;;;;;N;;;;; A228;YI SYLLABLE GGE;Lo;0;L;;;;;N;;;;; A229;YI SYLLABLE GGEP;Lo;0;L;;;;;N;;;;; A22A;YI SYLLABLE GGUT;Lo;0;L;;;;;N;;;;; A22B;YI SYLLABLE GGUX;Lo;0;L;;;;;N;;;;; A22C;YI SYLLABLE GGU;Lo;0;L;;;;;N;;;;; A22D;YI SYLLABLE GGUP;Lo;0;L;;;;;N;;;;; A22E;YI SYLLABLE GGURX;Lo;0;L;;;;;N;;;;; A22F;YI SYLLABLE GGUR;Lo;0;L;;;;;N;;;;; A230;YI SYLLABLE MGIEX;Lo;0;L;;;;;N;;;;; A231;YI SYLLABLE MGIE;Lo;0;L;;;;;N;;;;; A232;YI SYLLABLE MGAT;Lo;0;L;;;;;N;;;;; A233;YI SYLLABLE MGAX;Lo;0;L;;;;;N;;;;; A234;YI SYLLABLE MGA;Lo;0;L;;;;;N;;;;; A235;YI SYLLABLE MGAP;Lo;0;L;;;;;N;;;;; A236;YI SYLLABLE MGUOX;Lo;0;L;;;;;N;;;;; A237;YI SYLLABLE MGUO;Lo;0;L;;;;;N;;;;; A238;YI SYLLABLE MGUOP;Lo;0;L;;;;;N;;;;; A239;YI SYLLABLE MGOT;Lo;0;L;;;;;N;;;;; A23A;YI SYLLABLE MGOX;Lo;0;L;;;;;N;;;;; A23B;YI SYLLABLE MGO;Lo;0;L;;;;;N;;;;; A23C;YI SYLLABLE MGOP;Lo;0;L;;;;;N;;;;; A23D;YI SYLLABLE MGEX;Lo;0;L;;;;;N;;;;; A23E;YI SYLLABLE MGE;Lo;0;L;;;;;N;;;;; A23F;YI SYLLABLE MGEP;Lo;0;L;;;;;N;;;;; A240;YI SYLLABLE MGUT;Lo;0;L;;;;;N;;;;; A241;YI SYLLABLE MGUX;Lo;0;L;;;;;N;;;;; A242;YI SYLLABLE MGU;Lo;0;L;;;;;N;;;;; A243;YI SYLLABLE MGUP;Lo;0;L;;;;;N;;;;; A244;YI SYLLABLE MGURX;Lo;0;L;;;;;N;;;;; A245;YI SYLLABLE MGUR;Lo;0;L;;;;;N;;;;; A246;YI SYLLABLE HXIT;Lo;0;L;;;;;N;;;;; A247;YI SYLLABLE HXIX;Lo;0;L;;;;;N;;;;; A248;YI SYLLABLE HXI;Lo;0;L;;;;;N;;;;; A249;YI SYLLABLE HXIP;Lo;0;L;;;;;N;;;;; A24A;YI SYLLABLE HXIET;Lo;0;L;;;;;N;;;;; A24B;YI SYLLABLE HXIEX;Lo;0;L;;;;;N;;;;; A24C;YI SYLLABLE HXIE;Lo;0;L;;;;;N;;;;; A24D;YI SYLLABLE HXIEP;Lo;0;L;;;;;N;;;;; A24E;YI SYLLABLE HXAT;Lo;0;L;;;;;N;;;;; A24F;YI SYLLABLE HXAX;Lo;0;L;;;;;N;;;;; A250;YI SYLLABLE HXA;Lo;0;L;;;;;N;;;;; A251;YI SYLLABLE HXAP;Lo;0;L;;;;;N;;;;; A252;YI SYLLABLE HXUOT;Lo;0;L;;;;;N;;;;; A253;YI SYLLABLE HXUOX;Lo;0;L;;;;;N;;;;; A254;YI SYLLABLE HXUO;Lo;0;L;;;;;N;;;;; A255;YI SYLLABLE HXUOP;Lo;0;L;;;;;N;;;;; A256;YI SYLLABLE HXOT;Lo;0;L;;;;;N;;;;; A257;YI SYLLABLE HXOX;Lo;0;L;;;;;N;;;;; A258;YI SYLLABLE HXO;Lo;0;L;;;;;N;;;;; A259;YI SYLLABLE HXOP;Lo;0;L;;;;;N;;;;; A25A;YI SYLLABLE HXEX;Lo;0;L;;;;;N;;;;; A25B;YI SYLLABLE HXE;Lo;0;L;;;;;N;;;;; A25C;YI SYLLABLE HXEP;Lo;0;L;;;;;N;;;;; A25D;YI SYLLABLE NGIEX;Lo;0;L;;;;;N;;;;; A25E;YI SYLLABLE NGIE;Lo;0;L;;;;;N;;;;; A25F;YI SYLLABLE NGIEP;Lo;0;L;;;;;N;;;;; A260;YI SYLLABLE NGAT;Lo;0;L;;;;;N;;;;; A261;YI SYLLABLE NGAX;Lo;0;L;;;;;N;;;;; A262;YI SYLLABLE NGA;Lo;0;L;;;;;N;;;;; A263;YI SYLLABLE NGAP;Lo;0;L;;;;;N;;;;; A264;YI SYLLABLE NGUOT;Lo;0;L;;;;;N;;;;; A265;YI SYLLABLE NGUOX;Lo;0;L;;;;;N;;;;; A266;YI SYLLABLE NGUO;Lo;0;L;;;;;N;;;;; A267;YI SYLLABLE NGOT;Lo;0;L;;;;;N;;;;; A268;YI SYLLABLE NGOX;Lo;0;L;;;;;N;;;;; A269;YI SYLLABLE NGO;Lo;0;L;;;;;N;;;;; A26A;YI SYLLABLE NGOP;Lo;0;L;;;;;N;;;;; A26B;YI SYLLABLE NGEX;Lo;0;L;;;;;N;;;;; A26C;YI SYLLABLE NGE;Lo;0;L;;;;;N;;;;; A26D;YI SYLLABLE NGEP;Lo;0;L;;;;;N;;;;; A26E;YI SYLLABLE HIT;Lo;0;L;;;;;N;;;;; A26F;YI SYLLABLE HIEX;Lo;0;L;;;;;N;;;;; A270;YI SYLLABLE HIE;Lo;0;L;;;;;N;;;;; A271;YI SYLLABLE HAT;Lo;0;L;;;;;N;;;;; A272;YI SYLLABLE HAX;Lo;0;L;;;;;N;;;;; A273;YI SYLLABLE HA;Lo;0;L;;;;;N;;;;; A274;YI SYLLABLE HAP;Lo;0;L;;;;;N;;;;; A275;YI SYLLABLE HUOT;Lo;0;L;;;;;N;;;;; A276;YI SYLLABLE HUOX;Lo;0;L;;;;;N;;;;; A277;YI SYLLABLE HUO;Lo;0;L;;;;;N;;;;; A278;YI SYLLABLE HUOP;Lo;0;L;;;;;N;;;;; A279;YI SYLLABLE HOT;Lo;0;L;;;;;N;;;;; A27A;YI SYLLABLE HOX;Lo;0;L;;;;;N;;;;; A27B;YI SYLLABLE HO;Lo;0;L;;;;;N;;;;; A27C;YI SYLLABLE HOP;Lo;0;L;;;;;N;;;;; A27D;YI SYLLABLE HEX;Lo;0;L;;;;;N;;;;; A27E;YI SYLLABLE HE;Lo;0;L;;;;;N;;;;; A27F;YI SYLLABLE HEP;Lo;0;L;;;;;N;;;;; A280;YI SYLLABLE WAT;Lo;0;L;;;;;N;;;;; A281;YI SYLLABLE WAX;Lo;0;L;;;;;N;;;;; A282;YI SYLLABLE WA;Lo;0;L;;;;;N;;;;; A283;YI SYLLABLE WAP;Lo;0;L;;;;;N;;;;; A284;YI SYLLABLE WUOX;Lo;0;L;;;;;N;;;;; A285;YI SYLLABLE WUO;Lo;0;L;;;;;N;;;;; A286;YI SYLLABLE WUOP;Lo;0;L;;;;;N;;;;; A287;YI SYLLABLE WOX;Lo;0;L;;;;;N;;;;; A288;YI SYLLABLE WO;Lo;0;L;;;;;N;;;;; A289;YI SYLLABLE WOP;Lo;0;L;;;;;N;;;;; A28A;YI SYLLABLE WEX;Lo;0;L;;;;;N;;;;; A28B;YI SYLLABLE WE;Lo;0;L;;;;;N;;;;; A28C;YI SYLLABLE WEP;Lo;0;L;;;;;N;;;;; A28D;YI SYLLABLE ZIT;Lo;0;L;;;;;N;;;;; A28E;YI SYLLABLE ZIX;Lo;0;L;;;;;N;;;;; A28F;YI SYLLABLE ZI;Lo;0;L;;;;;N;;;;; A290;YI SYLLABLE ZIP;Lo;0;L;;;;;N;;;;; A291;YI SYLLABLE ZIEX;Lo;0;L;;;;;N;;;;; A292;YI SYLLABLE ZIE;Lo;0;L;;;;;N;;;;; A293;YI SYLLABLE ZIEP;Lo;0;L;;;;;N;;;;; A294;YI SYLLABLE ZAT;Lo;0;L;;;;;N;;;;; A295;YI SYLLABLE ZAX;Lo;0;L;;;;;N;;;;; A296;YI SYLLABLE ZA;Lo;0;L;;;;;N;;;;; A297;YI SYLLABLE ZAP;Lo;0;L;;;;;N;;;;; A298;YI SYLLABLE ZUOX;Lo;0;L;;;;;N;;;;; A299;YI SYLLABLE ZUO;Lo;0;L;;;;;N;;;;; A29A;YI SYLLABLE ZUOP;Lo;0;L;;;;;N;;;;; A29B;YI SYLLABLE ZOT;Lo;0;L;;;;;N;;;;; A29C;YI SYLLABLE ZOX;Lo;0;L;;;;;N;;;;; A29D;YI SYLLABLE ZO;Lo;0;L;;;;;N;;;;; A29E;YI SYLLABLE ZOP;Lo;0;L;;;;;N;;;;; A29F;YI SYLLABLE ZEX;Lo;0;L;;;;;N;;;;; A2A0;YI SYLLABLE ZE;Lo;0;L;;;;;N;;;;; A2A1;YI SYLLABLE ZEP;Lo;0;L;;;;;N;;;;; A2A2;YI SYLLABLE ZUT;Lo;0;L;;;;;N;;;;; A2A3;YI SYLLABLE ZUX;Lo;0;L;;;;;N;;;;; A2A4;YI SYLLABLE ZU;Lo;0;L;;;;;N;;;;; A2A5;YI SYLLABLE ZUP;Lo;0;L;;;;;N;;;;; A2A6;YI SYLLABLE ZURX;Lo;0;L;;;;;N;;;;; A2A7;YI SYLLABLE ZUR;Lo;0;L;;;;;N;;;;; A2A8;YI SYLLABLE ZYT;Lo;0;L;;;;;N;;;;; A2A9;YI SYLLABLE ZYX;Lo;0;L;;;;;N;;;;; A2AA;YI SYLLABLE ZY;Lo;0;L;;;;;N;;;;; A2AB;YI SYLLABLE ZYP;Lo;0;L;;;;;N;;;;; A2AC;YI SYLLABLE ZYRX;Lo;0;L;;;;;N;;;;; A2AD;YI SYLLABLE ZYR;Lo;0;L;;;;;N;;;;; A2AE;YI SYLLABLE CIT;Lo;0;L;;;;;N;;;;; A2AF;YI SYLLABLE CIX;Lo;0;L;;;;;N;;;;; A2B0;YI SYLLABLE CI;Lo;0;L;;;;;N;;;;; A2B1;YI SYLLABLE CIP;Lo;0;L;;;;;N;;;;; A2B2;YI SYLLABLE CIET;Lo;0;L;;;;;N;;;;; A2B3;YI SYLLABLE CIEX;Lo;0;L;;;;;N;;;;; A2B4;YI SYLLABLE CIE;Lo;0;L;;;;;N;;;;; A2B5;YI SYLLABLE CIEP;Lo;0;L;;;;;N;;;;; A2B6;YI SYLLABLE CAT;Lo;0;L;;;;;N;;;;; A2B7;YI SYLLABLE CAX;Lo;0;L;;;;;N;;;;; A2B8;YI SYLLABLE CA;Lo;0;L;;;;;N;;;;; A2B9;YI SYLLABLE CAP;Lo;0;L;;;;;N;;;;; A2BA;YI SYLLABLE CUOX;Lo;0;L;;;;;N;;;;; A2BB;YI SYLLABLE CUO;Lo;0;L;;;;;N;;;;; A2BC;YI SYLLABLE CUOP;Lo;0;L;;;;;N;;;;; A2BD;YI SYLLABLE COT;Lo;0;L;;;;;N;;;;; A2BE;YI SYLLABLE COX;Lo;0;L;;;;;N;;;;; A2BF;YI SYLLABLE CO;Lo;0;L;;;;;N;;;;; A2C0;YI SYLLABLE COP;Lo;0;L;;;;;N;;;;; A2C1;YI SYLLABLE CEX;Lo;0;L;;;;;N;;;;; A2C2;YI SYLLABLE CE;Lo;0;L;;;;;N;;;;; A2C3;YI SYLLABLE CEP;Lo;0;L;;;;;N;;;;; A2C4;YI SYLLABLE CUT;Lo;0;L;;;;;N;;;;; A2C5;YI SYLLABLE CUX;Lo;0;L;;;;;N;;;;; A2C6;YI SYLLABLE CU;Lo;0;L;;;;;N;;;;; A2C7;YI SYLLABLE CUP;Lo;0;L;;;;;N;;;;; A2C8;YI SYLLABLE CURX;Lo;0;L;;;;;N;;;;; A2C9;YI SYLLABLE CUR;Lo;0;L;;;;;N;;;;; A2CA;YI SYLLABLE CYT;Lo;0;L;;;;;N;;;;; A2CB;YI SYLLABLE CYX;Lo;0;L;;;;;N;;;;; A2CC;YI SYLLABLE CY;Lo;0;L;;;;;N;;;;; A2CD;YI SYLLABLE CYP;Lo;0;L;;;;;N;;;;; A2CE;YI SYLLABLE CYRX;Lo;0;L;;;;;N;;;;; A2CF;YI SYLLABLE CYR;Lo;0;L;;;;;N;;;;; A2D0;YI SYLLABLE ZZIT;Lo;0;L;;;;;N;;;;; A2D1;YI SYLLABLE ZZIX;Lo;0;L;;;;;N;;;;; A2D2;YI SYLLABLE ZZI;Lo;0;L;;;;;N;;;;; A2D3;YI SYLLABLE ZZIP;Lo;0;L;;;;;N;;;;; A2D4;YI SYLLABLE ZZIET;Lo;0;L;;;;;N;;;;; A2D5;YI SYLLABLE ZZIEX;Lo;0;L;;;;;N;;;;; A2D6;YI SYLLABLE ZZIE;Lo;0;L;;;;;N;;;;; A2D7;YI SYLLABLE ZZIEP;Lo;0;L;;;;;N;;;;; A2D8;YI SYLLABLE ZZAT;Lo;0;L;;;;;N;;;;; A2D9;YI SYLLABLE ZZAX;Lo;0;L;;;;;N;;;;; A2DA;YI SYLLABLE ZZA;Lo;0;L;;;;;N;;;;; A2DB;YI SYLLABLE ZZAP;Lo;0;L;;;;;N;;;;; A2DC;YI SYLLABLE ZZOX;Lo;0;L;;;;;N;;;;; A2DD;YI SYLLABLE ZZO;Lo;0;L;;;;;N;;;;; A2DE;YI SYLLABLE ZZOP;Lo;0;L;;;;;N;;;;; A2DF;YI SYLLABLE ZZEX;Lo;0;L;;;;;N;;;;; A2E0;YI SYLLABLE ZZE;Lo;0;L;;;;;N;;;;; A2E1;YI SYLLABLE ZZEP;Lo;0;L;;;;;N;;;;; A2E2;YI SYLLABLE ZZUX;Lo;0;L;;;;;N;;;;; A2E3;YI SYLLABLE ZZU;Lo;0;L;;;;;N;;;;; A2E4;YI SYLLABLE ZZUP;Lo;0;L;;;;;N;;;;; A2E5;YI SYLLABLE ZZURX;Lo;0;L;;;;;N;;;;; A2E6;YI SYLLABLE ZZUR;Lo;0;L;;;;;N;;;;; A2E7;YI SYLLABLE ZZYT;Lo;0;L;;;;;N;;;;; A2E8;YI SYLLABLE ZZYX;Lo;0;L;;;;;N;;;;; A2E9;YI SYLLABLE ZZY;Lo;0;L;;;;;N;;;;; A2EA;YI SYLLABLE ZZYP;Lo;0;L;;;;;N;;;;; A2EB;YI SYLLABLE ZZYRX;Lo;0;L;;;;;N;;;;; A2EC;YI SYLLABLE ZZYR;Lo;0;L;;;;;N;;;;; A2ED;YI SYLLABLE NZIT;Lo;0;L;;;;;N;;;;; A2EE;YI SYLLABLE NZIX;Lo;0;L;;;;;N;;;;; A2EF;YI SYLLABLE NZI;Lo;0;L;;;;;N;;;;; A2F0;YI SYLLABLE NZIP;Lo;0;L;;;;;N;;;;; A2F1;YI SYLLABLE NZIEX;Lo;0;L;;;;;N;;;;; A2F2;YI SYLLABLE NZIE;Lo;0;L;;;;;N;;;;; A2F3;YI SYLLABLE NZIEP;Lo;0;L;;;;;N;;;;; A2F4;YI SYLLABLE NZAT;Lo;0;L;;;;;N;;;;; A2F5;YI SYLLABLE NZAX;Lo;0;L;;;;;N;;;;; A2F6;YI SYLLABLE NZA;Lo;0;L;;;;;N;;;;; A2F7;YI SYLLABLE NZAP;Lo;0;L;;;;;N;;;;; A2F8;YI SYLLABLE NZUOX;Lo;0;L;;;;;N;;;;; A2F9;YI SYLLABLE NZUO;Lo;0;L;;;;;N;;;;; A2FA;YI SYLLABLE NZOX;Lo;0;L;;;;;N;;;;; A2FB;YI SYLLABLE NZOP;Lo;0;L;;;;;N;;;;; A2FC;YI SYLLABLE NZEX;Lo;0;L;;;;;N;;;;; A2FD;YI SYLLABLE NZE;Lo;0;L;;;;;N;;;;; A2FE;YI SYLLABLE NZUX;Lo;0;L;;;;;N;;;;; A2FF;YI SYLLABLE NZU;Lo;0;L;;;;;N;;;;; A300;YI SYLLABLE NZUP;Lo;0;L;;;;;N;;;;; A301;YI SYLLABLE NZURX;Lo;0;L;;;;;N;;;;; A302;YI SYLLABLE NZUR;Lo;0;L;;;;;N;;;;; A303;YI SYLLABLE NZYT;Lo;0;L;;;;;N;;;;; A304;YI SYLLABLE NZYX;Lo;0;L;;;;;N;;;;; A305;YI SYLLABLE NZY;Lo;0;L;;;;;N;;;;; A306;YI SYLLABLE NZYP;Lo;0;L;;;;;N;;;;; A307;YI SYLLABLE NZYRX;Lo;0;L;;;;;N;;;;; A308;YI SYLLABLE NZYR;Lo;0;L;;;;;N;;;;; A309;YI SYLLABLE SIT;Lo;0;L;;;;;N;;;;; A30A;YI SYLLABLE SIX;Lo;0;L;;;;;N;;;;; A30B;YI SYLLABLE SI;Lo;0;L;;;;;N;;;;; A30C;YI SYLLABLE SIP;Lo;0;L;;;;;N;;;;; A30D;YI SYLLABLE SIEX;Lo;0;L;;;;;N;;;;; A30E;YI SYLLABLE SIE;Lo;0;L;;;;;N;;;;; A30F;YI SYLLABLE SIEP;Lo;0;L;;;;;N;;;;; A310;YI SYLLABLE SAT;Lo;0;L;;;;;N;;;;; A311;YI SYLLABLE SAX;Lo;0;L;;;;;N;;;;; A312;YI SYLLABLE SA;Lo;0;L;;;;;N;;;;; A313;YI SYLLABLE SAP;Lo;0;L;;;;;N;;;;; A314;YI SYLLABLE SUOX;Lo;0;L;;;;;N;;;;; A315;YI SYLLABLE SUO;Lo;0;L;;;;;N;;;;; A316;YI SYLLABLE SUOP;Lo;0;L;;;;;N;;;;; A317;YI SYLLABLE SOT;Lo;0;L;;;;;N;;;;; A318;YI SYLLABLE SOX;Lo;0;L;;;;;N;;;;; A319;YI SYLLABLE SO;Lo;0;L;;;;;N;;;;; A31A;YI SYLLABLE SOP;Lo;0;L;;;;;N;;;;; A31B;YI SYLLABLE SEX;Lo;0;L;;;;;N;;;;; A31C;YI SYLLABLE SE;Lo;0;L;;;;;N;;;;; A31D;YI SYLLABLE SEP;Lo;0;L;;;;;N;;;;; A31E;YI SYLLABLE SUT;Lo;0;L;;;;;N;;;;; A31F;YI SYLLABLE SUX;Lo;0;L;;;;;N;;;;; A320;YI SYLLABLE SU;Lo;0;L;;;;;N;;;;; A321;YI SYLLABLE SUP;Lo;0;L;;;;;N;;;;; A322;YI SYLLABLE SURX;Lo;0;L;;;;;N;;;;; A323;YI SYLLABLE SUR;Lo;0;L;;;;;N;;;;; A324;YI SYLLABLE SYT;Lo;0;L;;;;;N;;;;; A325;YI SYLLABLE SYX;Lo;0;L;;;;;N;;;;; A326;YI SYLLABLE SY;Lo;0;L;;;;;N;;;;; A327;YI SYLLABLE SYP;Lo;0;L;;;;;N;;;;; A328;YI SYLLABLE SYRX;Lo;0;L;;;;;N;;;;; A329;YI SYLLABLE SYR;Lo;0;L;;;;;N;;;;; A32A;YI SYLLABLE SSIT;Lo;0;L;;;;;N;;;;; A32B;YI SYLLABLE SSIX;Lo;0;L;;;;;N;;;;; A32C;YI SYLLABLE SSI;Lo;0;L;;;;;N;;;;; A32D;YI SYLLABLE SSIP;Lo;0;L;;;;;N;;;;; A32E;YI SYLLABLE SSIEX;Lo;0;L;;;;;N;;;;; A32F;YI SYLLABLE SSIE;Lo;0;L;;;;;N;;;;; A330;YI SYLLABLE SSIEP;Lo;0;L;;;;;N;;;;; A331;YI SYLLABLE SSAT;Lo;0;L;;;;;N;;;;; A332;YI SYLLABLE SSAX;Lo;0;L;;;;;N;;;;; A333;YI SYLLABLE SSA;Lo;0;L;;;;;N;;;;; A334;YI SYLLABLE SSAP;Lo;0;L;;;;;N;;;;; A335;YI SYLLABLE SSOT;Lo;0;L;;;;;N;;;;; A336;YI SYLLABLE SSOX;Lo;0;L;;;;;N;;;;; A337;YI SYLLABLE SSO;Lo;0;L;;;;;N;;;;; A338;YI SYLLABLE SSOP;Lo;0;L;;;;;N;;;;; A339;YI SYLLABLE SSEX;Lo;0;L;;;;;N;;;;; A33A;YI SYLLABLE SSE;Lo;0;L;;;;;N;;;;; A33B;YI SYLLABLE SSEP;Lo;0;L;;;;;N;;;;; A33C;YI SYLLABLE SSUT;Lo;0;L;;;;;N;;;;; A33D;YI SYLLABLE SSUX;Lo;0;L;;;;;N;;;;; A33E;YI SYLLABLE SSU;Lo;0;L;;;;;N;;;;; A33F;YI SYLLABLE SSUP;Lo;0;L;;;;;N;;;;; A340;YI SYLLABLE SSYT;Lo;0;L;;;;;N;;;;; A341;YI SYLLABLE SSYX;Lo;0;L;;;;;N;;;;; A342;YI SYLLABLE SSY;Lo;0;L;;;;;N;;;;; A343;YI SYLLABLE SSYP;Lo;0;L;;;;;N;;;;; A344;YI SYLLABLE SSYRX;Lo;0;L;;;;;N;;;;; A345;YI SYLLABLE SSYR;Lo;0;L;;;;;N;;;;; A346;YI SYLLABLE ZHAT;Lo;0;L;;;;;N;;;;; A347;YI SYLLABLE ZHAX;Lo;0;L;;;;;N;;;;; A348;YI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;; A349;YI SYLLABLE ZHAP;Lo;0;L;;;;;N;;;;; A34A;YI SYLLABLE ZHUOX;Lo;0;L;;;;;N;;;;; A34B;YI SYLLABLE ZHUO;Lo;0;L;;;;;N;;;;; A34C;YI SYLLABLE ZHUOP;Lo;0;L;;;;;N;;;;; A34D;YI SYLLABLE ZHOT;Lo;0;L;;;;;N;;;;; A34E;YI SYLLABLE ZHOX;Lo;0;L;;;;;N;;;;; A34F;YI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;; A350;YI SYLLABLE ZHOP;Lo;0;L;;;;;N;;;;; A351;YI SYLLABLE ZHET;Lo;0;L;;;;;N;;;;; A352;YI SYLLABLE ZHEX;Lo;0;L;;;;;N;;;;; A353;YI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;; A354;YI SYLLABLE ZHEP;Lo;0;L;;;;;N;;;;; A355;YI SYLLABLE ZHUT;Lo;0;L;;;;;N;;;;; A356;YI SYLLABLE ZHUX;Lo;0;L;;;;;N;;;;; A357;YI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;; A358;YI SYLLABLE ZHUP;Lo;0;L;;;;;N;;;;; A359;YI SYLLABLE ZHURX;Lo;0;L;;;;;N;;;;; A35A;YI SYLLABLE ZHUR;Lo;0;L;;;;;N;;;;; A35B;YI SYLLABLE ZHYT;Lo;0;L;;;;;N;;;;; A35C;YI SYLLABLE ZHYX;Lo;0;L;;;;;N;;;;; A35D;YI SYLLABLE ZHY;Lo;0;L;;;;;N;;;;; A35E;YI SYLLABLE ZHYP;Lo;0;L;;;;;N;;;;; A35F;YI SYLLABLE ZHYRX;Lo;0;L;;;;;N;;;;; A360;YI SYLLABLE ZHYR;Lo;0;L;;;;;N;;;;; A361;YI SYLLABLE CHAT;Lo;0;L;;;;;N;;;;; A362;YI SYLLABLE CHAX;Lo;0;L;;;;;N;;;;; A363;YI SYLLABLE CHA;Lo;0;L;;;;;N;;;;; A364;YI SYLLABLE CHAP;Lo;0;L;;;;;N;;;;; A365;YI SYLLABLE CHUOT;Lo;0;L;;;;;N;;;;; A366;YI SYLLABLE CHUOX;Lo;0;L;;;;;N;;;;; A367;YI SYLLABLE CHUO;Lo;0;L;;;;;N;;;;; A368;YI SYLLABLE CHUOP;Lo;0;L;;;;;N;;;;; A369;YI SYLLABLE CHOT;Lo;0;L;;;;;N;;;;; A36A;YI SYLLABLE CHOX;Lo;0;L;;;;;N;;;;; A36B;YI SYLLABLE CHO;Lo;0;L;;;;;N;;;;; A36C;YI SYLLABLE CHOP;Lo;0;L;;;;;N;;;;; A36D;YI SYLLABLE CHET;Lo;0;L;;;;;N;;;;; A36E;YI SYLLABLE CHEX;Lo;0;L;;;;;N;;;;; A36F;YI SYLLABLE CHE;Lo;0;L;;;;;N;;;;; A370;YI SYLLABLE CHEP;Lo;0;L;;;;;N;;;;; A371;YI SYLLABLE CHUX;Lo;0;L;;;;;N;;;;; A372;YI SYLLABLE CHU;Lo;0;L;;;;;N;;;;; A373;YI SYLLABLE CHUP;Lo;0;L;;;;;N;;;;; A374;YI SYLLABLE CHURX;Lo;0;L;;;;;N;;;;; A375;YI SYLLABLE CHUR;Lo;0;L;;;;;N;;;;; A376;YI SYLLABLE CHYT;Lo;0;L;;;;;N;;;;; A377;YI SYLLABLE CHYX;Lo;0;L;;;;;N;;;;; A378;YI SYLLABLE CHY;Lo;0;L;;;;;N;;;;; A379;YI SYLLABLE CHYP;Lo;0;L;;;;;N;;;;; A37A;YI SYLLABLE CHYRX;Lo;0;L;;;;;N;;;;; A37B;YI SYLLABLE CHYR;Lo;0;L;;;;;N;;;;; A37C;YI SYLLABLE RRAX;Lo;0;L;;;;;N;;;;; A37D;YI SYLLABLE RRA;Lo;0;L;;;;;N;;;;; A37E;YI SYLLABLE RRUOX;Lo;0;L;;;;;N;;;;; A37F;YI SYLLABLE RRUO;Lo;0;L;;;;;N;;;;; A380;YI SYLLABLE RROT;Lo;0;L;;;;;N;;;;; A381;YI SYLLABLE RROX;Lo;0;L;;;;;N;;;;; A382;YI SYLLABLE RRO;Lo;0;L;;;;;N;;;;; A383;YI SYLLABLE RROP;Lo;0;L;;;;;N;;;;; A384;YI SYLLABLE RRET;Lo;0;L;;;;;N;;;;; A385;YI SYLLABLE RREX;Lo;0;L;;;;;N;;;;; A386;YI SYLLABLE RRE;Lo;0;L;;;;;N;;;;; A387;YI SYLLABLE RREP;Lo;0;L;;;;;N;;;;; A388;YI SYLLABLE RRUT;Lo;0;L;;;;;N;;;;; A389;YI SYLLABLE RRUX;Lo;0;L;;;;;N;;;;; A38A;YI SYLLABLE RRU;Lo;0;L;;;;;N;;;;; A38B;YI SYLLABLE RRUP;Lo;0;L;;;;;N;;;;; A38C;YI SYLLABLE RRURX;Lo;0;L;;;;;N;;;;; A38D;YI SYLLABLE RRUR;Lo;0;L;;;;;N;;;;; A38E;YI SYLLABLE RRYT;Lo;0;L;;;;;N;;;;; A38F;YI SYLLABLE RRYX;Lo;0;L;;;;;N;;;;; A390;YI SYLLABLE RRY;Lo;0;L;;;;;N;;;;; A391;YI SYLLABLE RRYP;Lo;0;L;;;;;N;;;;; A392;YI SYLLABLE RRYRX;Lo;0;L;;;;;N;;;;; A393;YI SYLLABLE RRYR;Lo;0;L;;;;;N;;;;; A394;YI SYLLABLE NRAT;Lo;0;L;;;;;N;;;;; A395;YI SYLLABLE NRAX;Lo;0;L;;;;;N;;;;; A396;YI SYLLABLE NRA;Lo;0;L;;;;;N;;;;; A397;YI SYLLABLE NRAP;Lo;0;L;;;;;N;;;;; A398;YI SYLLABLE NROX;Lo;0;L;;;;;N;;;;; A399;YI SYLLABLE NRO;Lo;0;L;;;;;N;;;;; A39A;YI SYLLABLE NROP;Lo;0;L;;;;;N;;;;; A39B;YI SYLLABLE NRET;Lo;0;L;;;;;N;;;;; A39C;YI SYLLABLE NREX;Lo;0;L;;;;;N;;;;; A39D;YI SYLLABLE NRE;Lo;0;L;;;;;N;;;;; A39E;YI SYLLABLE NREP;Lo;0;L;;;;;N;;;;; A39F;YI SYLLABLE NRUT;Lo;0;L;;;;;N;;;;; A3A0;YI SYLLABLE NRUX;Lo;0;L;;;;;N;;;;; A3A1;YI SYLLABLE NRU;Lo;0;L;;;;;N;;;;; A3A2;YI SYLLABLE NRUP;Lo;0;L;;;;;N;;;;; A3A3;YI SYLLABLE NRURX;Lo;0;L;;;;;N;;;;; A3A4;YI SYLLABLE NRUR;Lo;0;L;;;;;N;;;;; A3A5;YI SYLLABLE NRYT;Lo;0;L;;;;;N;;;;; A3A6;YI SYLLABLE NRYX;Lo;0;L;;;;;N;;;;; A3A7;YI SYLLABLE NRY;Lo;0;L;;;;;N;;;;; A3A8;YI SYLLABLE NRYP;Lo;0;L;;;;;N;;;;; A3A9;YI SYLLABLE NRYRX;Lo;0;L;;;;;N;;;;; A3AA;YI SYLLABLE NRYR;Lo;0;L;;;;;N;;;;; A3AB;YI SYLLABLE SHAT;Lo;0;L;;;;;N;;;;; A3AC;YI SYLLABLE SHAX;Lo;0;L;;;;;N;;;;; A3AD;YI SYLLABLE SHA;Lo;0;L;;;;;N;;;;; A3AE;YI SYLLABLE SHAP;Lo;0;L;;;;;N;;;;; A3AF;YI SYLLABLE SHUOX;Lo;0;L;;;;;N;;;;; A3B0;YI SYLLABLE SHUO;Lo;0;L;;;;;N;;;;; A3B1;YI SYLLABLE SHUOP;Lo;0;L;;;;;N;;;;; A3B2;YI SYLLABLE SHOT;Lo;0;L;;;;;N;;;;; A3B3;YI SYLLABLE SHOX;Lo;0;L;;;;;N;;;;; A3B4;YI SYLLABLE SHO;Lo;0;L;;;;;N;;;;; A3B5;YI SYLLABLE SHOP;Lo;0;L;;;;;N;;;;; A3B6;YI SYLLABLE SHET;Lo;0;L;;;;;N;;;;; A3B7;YI SYLLABLE SHEX;Lo;0;L;;;;;N;;;;; A3B8;YI SYLLABLE SHE;Lo;0;L;;;;;N;;;;; A3B9;YI SYLLABLE SHEP;Lo;0;L;;;;;N;;;;; A3BA;YI SYLLABLE SHUT;Lo;0;L;;;;;N;;;;; A3BB;YI SYLLABLE SHUX;Lo;0;L;;;;;N;;;;; A3BC;YI SYLLABLE SHU;Lo;0;L;;;;;N;;;;; A3BD;YI SYLLABLE SHUP;Lo;0;L;;;;;N;;;;; A3BE;YI SYLLABLE SHURX;Lo;0;L;;;;;N;;;;; A3BF;YI SYLLABLE SHUR;Lo;0;L;;;;;N;;;;; A3C0;YI SYLLABLE SHYT;Lo;0;L;;;;;N;;;;; A3C1;YI SYLLABLE SHYX;Lo;0;L;;;;;N;;;;; A3C2;YI SYLLABLE SHY;Lo;0;L;;;;;N;;;;; A3C3;YI SYLLABLE SHYP;Lo;0;L;;;;;N;;;;; A3C4;YI SYLLABLE SHYRX;Lo;0;L;;;;;N;;;;; A3C5;YI SYLLABLE SHYR;Lo;0;L;;;;;N;;;;; A3C6;YI SYLLABLE RAT;Lo;0;L;;;;;N;;;;; A3C7;YI SYLLABLE RAX;Lo;0;L;;;;;N;;;;; A3C8;YI SYLLABLE RA;Lo;0;L;;;;;N;;;;; A3C9;YI SYLLABLE RAP;Lo;0;L;;;;;N;;;;; A3CA;YI SYLLABLE RUOX;Lo;0;L;;;;;N;;;;; A3CB;YI SYLLABLE RUO;Lo;0;L;;;;;N;;;;; A3CC;YI SYLLABLE RUOP;Lo;0;L;;;;;N;;;;; A3CD;YI SYLLABLE ROT;Lo;0;L;;;;;N;;;;; A3CE;YI SYLLABLE ROX;Lo;0;L;;;;;N;;;;; A3CF;YI SYLLABLE RO;Lo;0;L;;;;;N;;;;; A3D0;YI SYLLABLE ROP;Lo;0;L;;;;;N;;;;; A3D1;YI SYLLABLE REX;Lo;0;L;;;;;N;;;;; A3D2;YI SYLLABLE RE;Lo;0;L;;;;;N;;;;; A3D3;YI SYLLABLE REP;Lo;0;L;;;;;N;;;;; A3D4;YI SYLLABLE RUT;Lo;0;L;;;;;N;;;;; A3D5;YI SYLLABLE RUX;Lo;0;L;;;;;N;;;;; A3D6;YI SYLLABLE RU;Lo;0;L;;;;;N;;;;; A3D7;YI SYLLABLE RUP;Lo;0;L;;;;;N;;;;; A3D8;YI SYLLABLE RURX;Lo;0;L;;;;;N;;;;; A3D9;YI SYLLABLE RUR;Lo;0;L;;;;;N;;;;; A3DA;YI SYLLABLE RYT;Lo;0;L;;;;;N;;;;; A3DB;YI SYLLABLE RYX;Lo;0;L;;;;;N;;;;; A3DC;YI SYLLABLE RY;Lo;0;L;;;;;N;;;;; A3DD;YI SYLLABLE RYP;Lo;0;L;;;;;N;;;;; A3DE;YI SYLLABLE RYRX;Lo;0;L;;;;;N;;;;; A3DF;YI SYLLABLE RYR;Lo;0;L;;;;;N;;;;; A3E0;YI SYLLABLE JIT;Lo;0;L;;;;;N;;;;; A3E1;YI SYLLABLE JIX;Lo;0;L;;;;;N;;;;; A3E2;YI SYLLABLE JI;Lo;0;L;;;;;N;;;;; A3E3;YI SYLLABLE JIP;Lo;0;L;;;;;N;;;;; A3E4;YI SYLLABLE JIET;Lo;0;L;;;;;N;;;;; A3E5;YI SYLLABLE JIEX;Lo;0;L;;;;;N;;;;; A3E6;YI SYLLABLE JIE;Lo;0;L;;;;;N;;;;; A3E7;YI SYLLABLE JIEP;Lo;0;L;;;;;N;;;;; A3E8;YI SYLLABLE JUOT;Lo;0;L;;;;;N;;;;; A3E9;YI SYLLABLE JUOX;Lo;0;L;;;;;N;;;;; A3EA;YI SYLLABLE JUO;Lo;0;L;;;;;N;;;;; A3EB;YI SYLLABLE JUOP;Lo;0;L;;;;;N;;;;; A3EC;YI SYLLABLE JOT;Lo;0;L;;;;;N;;;;; A3ED;YI SYLLABLE JOX;Lo;0;L;;;;;N;;;;; A3EE;YI SYLLABLE JO;Lo;0;L;;;;;N;;;;; A3EF;YI SYLLABLE JOP;Lo;0;L;;;;;N;;;;; A3F0;YI SYLLABLE JUT;Lo;0;L;;;;;N;;;;; A3F1;YI SYLLABLE JUX;Lo;0;L;;;;;N;;;;; A3F2;YI SYLLABLE JU;Lo;0;L;;;;;N;;;;; A3F3;YI SYLLABLE JUP;Lo;0;L;;;;;N;;;;; A3F4;YI SYLLABLE JURX;Lo;0;L;;;;;N;;;;; A3F5;YI SYLLABLE JUR;Lo;0;L;;;;;N;;;;; A3F6;YI SYLLABLE JYT;Lo;0;L;;;;;N;;;;; A3F7;YI SYLLABLE JYX;Lo;0;L;;;;;N;;;;; A3F8;YI SYLLABLE JY;Lo;0;L;;;;;N;;;;; A3F9;YI SYLLABLE JYP;Lo;0;L;;;;;N;;;;; A3FA;YI SYLLABLE JYRX;Lo;0;L;;;;;N;;;;; A3FB;YI SYLLABLE JYR;Lo;0;L;;;;;N;;;;; A3FC;YI SYLLABLE QIT;Lo;0;L;;;;;N;;;;; A3FD;YI SYLLABLE QIX;Lo;0;L;;;;;N;;;;; A3FE;YI SYLLABLE QI;Lo;0;L;;;;;N;;;;; A3FF;YI SYLLABLE QIP;Lo;0;L;;;;;N;;;;; A400;YI SYLLABLE QIET;Lo;0;L;;;;;N;;;;; A401;YI SYLLABLE QIEX;Lo;0;L;;;;;N;;;;; A402;YI SYLLABLE QIE;Lo;0;L;;;;;N;;;;; A403;YI SYLLABLE QIEP;Lo;0;L;;;;;N;;;;; A404;YI SYLLABLE QUOT;Lo;0;L;;;;;N;;;;; A405;YI SYLLABLE QUOX;Lo;0;L;;;;;N;;;;; A406;YI SYLLABLE QUO;Lo;0;L;;;;;N;;;;; A407;YI SYLLABLE QUOP;Lo;0;L;;;;;N;;;;; A408;YI SYLLABLE QOT;Lo;0;L;;;;;N;;;;; A409;YI SYLLABLE QOX;Lo;0;L;;;;;N;;;;; A40A;YI SYLLABLE QO;Lo;0;L;;;;;N;;;;; A40B;YI SYLLABLE QOP;Lo;0;L;;;;;N;;;;; A40C;YI SYLLABLE QUT;Lo;0;L;;;;;N;;;;; A40D;YI SYLLABLE QUX;Lo;0;L;;;;;N;;;;; A40E;YI SYLLABLE QU;Lo;0;L;;;;;N;;;;; A40F;YI SYLLABLE QUP;Lo;0;L;;;;;N;;;;; A410;YI SYLLABLE QURX;Lo;0;L;;;;;N;;;;; A411;YI SYLLABLE QUR;Lo;0;L;;;;;N;;;;; A412;YI SYLLABLE QYT;Lo;0;L;;;;;N;;;;; A413;YI SYLLABLE QYX;Lo;0;L;;;;;N;;;;; A414;YI SYLLABLE QY;Lo;0;L;;;;;N;;;;; A415;YI SYLLABLE QYP;Lo;0;L;;;;;N;;;;; A416;YI SYLLABLE QYRX;Lo;0;L;;;;;N;;;;; A417;YI SYLLABLE QYR;Lo;0;L;;;;;N;;;;; A418;YI SYLLABLE JJIT;Lo;0;L;;;;;N;;;;; A419;YI SYLLABLE JJIX;Lo;0;L;;;;;N;;;;; A41A;YI SYLLABLE JJI;Lo;0;L;;;;;N;;;;; A41B;YI SYLLABLE JJIP;Lo;0;L;;;;;N;;;;; A41C;YI SYLLABLE JJIET;Lo;0;L;;;;;N;;;;; A41D;YI SYLLABLE JJIEX;Lo;0;L;;;;;N;;;;; A41E;YI SYLLABLE JJIE;Lo;0;L;;;;;N;;;;; A41F;YI SYLLABLE JJIEP;Lo;0;L;;;;;N;;;;; A420;YI SYLLABLE JJUOX;Lo;0;L;;;;;N;;;;; A421;YI SYLLABLE JJUO;Lo;0;L;;;;;N;;;;; A422;YI SYLLABLE JJUOP;Lo;0;L;;;;;N;;;;; A423;YI SYLLABLE JJOT;Lo;0;L;;;;;N;;;;; A424;YI SYLLABLE JJOX;Lo;0;L;;;;;N;;;;; A425;YI SYLLABLE JJO;Lo;0;L;;;;;N;;;;; A426;YI SYLLABLE JJOP;Lo;0;L;;;;;N;;;;; A427;YI SYLLABLE JJUT;Lo;0;L;;;;;N;;;;; A428;YI SYLLABLE JJUX;Lo;0;L;;;;;N;;;;; A429;YI SYLLABLE JJU;Lo;0;L;;;;;N;;;;; A42A;YI SYLLABLE JJUP;Lo;0;L;;;;;N;;;;; A42B;YI SYLLABLE JJURX;Lo;0;L;;;;;N;;;;; A42C;YI SYLLABLE JJUR;Lo;0;L;;;;;N;;;;; A42D;YI SYLLABLE JJYT;Lo;0;L;;;;;N;;;;; A42E;YI SYLLABLE JJYX;Lo;0;L;;;;;N;;;;; A42F;YI SYLLABLE JJY;Lo;0;L;;;;;N;;;;; A430;YI SYLLABLE JJYP;Lo;0;L;;;;;N;;;;; A431;YI SYLLABLE NJIT;Lo;0;L;;;;;N;;;;; A432;YI SYLLABLE NJIX;Lo;0;L;;;;;N;;;;; A433;YI SYLLABLE NJI;Lo;0;L;;;;;N;;;;; A434;YI SYLLABLE NJIP;Lo;0;L;;;;;N;;;;; A435;YI SYLLABLE NJIET;Lo;0;L;;;;;N;;;;; A436;YI SYLLABLE NJIEX;Lo;0;L;;;;;N;;;;; A437;YI SYLLABLE NJIE;Lo;0;L;;;;;N;;;;; A438;YI SYLLABLE NJIEP;Lo;0;L;;;;;N;;;;; A439;YI SYLLABLE NJUOX;Lo;0;L;;;;;N;;;;; A43A;YI SYLLABLE NJUO;Lo;0;L;;;;;N;;;;; A43B;YI SYLLABLE NJOT;Lo;0;L;;;;;N;;;;; A43C;YI SYLLABLE NJOX;Lo;0;L;;;;;N;;;;; A43D;YI SYLLABLE NJO;Lo;0;L;;;;;N;;;;; A43E;YI SYLLABLE NJOP;Lo;0;L;;;;;N;;;;; A43F;YI SYLLABLE NJUX;Lo;0;L;;;;;N;;;;; A440;YI SYLLABLE NJU;Lo;0;L;;;;;N;;;;; A441;YI SYLLABLE NJUP;Lo;0;L;;;;;N;;;;; A442;YI SYLLABLE NJURX;Lo;0;L;;;;;N;;;;; A443;YI SYLLABLE NJUR;Lo;0;L;;;;;N;;;;; A444;YI SYLLABLE NJYT;Lo;0;L;;;;;N;;;;; A445;YI SYLLABLE NJYX;Lo;0;L;;;;;N;;;;; A446;YI SYLLABLE NJY;Lo;0;L;;;;;N;;;;; A447;YI SYLLABLE NJYP;Lo;0;L;;;;;N;;;;; A448;YI SYLLABLE NJYRX;Lo;0;L;;;;;N;;;;; A449;YI SYLLABLE NJYR;Lo;0;L;;;;;N;;;;; A44A;YI SYLLABLE NYIT;Lo;0;L;;;;;N;;;;; A44B;YI SYLLABLE NYIX;Lo;0;L;;;;;N;;;;; A44C;YI SYLLABLE NYI;Lo;0;L;;;;;N;;;;; A44D;YI SYLLABLE NYIP;Lo;0;L;;;;;N;;;;; A44E;YI SYLLABLE NYIET;Lo;0;L;;;;;N;;;;; A44F;YI SYLLABLE NYIEX;Lo;0;L;;;;;N;;;;; A450;YI SYLLABLE NYIE;Lo;0;L;;;;;N;;;;; A451;YI SYLLABLE NYIEP;Lo;0;L;;;;;N;;;;; A452;YI SYLLABLE NYUOX;Lo;0;L;;;;;N;;;;; A453;YI SYLLABLE NYUO;Lo;0;L;;;;;N;;;;; A454;YI SYLLABLE NYUOP;Lo;0;L;;;;;N;;;;; A455;YI SYLLABLE NYOT;Lo;0;L;;;;;N;;;;; A456;YI SYLLABLE NYOX;Lo;0;L;;;;;N;;;;; A457;YI SYLLABLE NYO;Lo;0;L;;;;;N;;;;; A458;YI SYLLABLE NYOP;Lo;0;L;;;;;N;;;;; A459;YI SYLLABLE NYUT;Lo;0;L;;;;;N;;;;; A45A;YI SYLLABLE NYUX;Lo;0;L;;;;;N;;;;; A45B;YI SYLLABLE NYU;Lo;0;L;;;;;N;;;;; A45C;YI SYLLABLE NYUP;Lo;0;L;;;;;N;;;;; A45D;YI SYLLABLE XIT;Lo;0;L;;;;;N;;;;; A45E;YI SYLLABLE XIX;Lo;0;L;;;;;N;;;;; A45F;YI SYLLABLE XI;Lo;0;L;;;;;N;;;;; A460;YI SYLLABLE XIP;Lo;0;L;;;;;N;;;;; A461;YI SYLLABLE XIET;Lo;0;L;;;;;N;;;;; A462;YI SYLLABLE XIEX;Lo;0;L;;;;;N;;;;; A463;YI SYLLABLE XIE;Lo;0;L;;;;;N;;;;; A464;YI SYLLABLE XIEP;Lo;0;L;;;;;N;;;;; A465;YI SYLLABLE XUOX;Lo;0;L;;;;;N;;;;; A466;YI SYLLABLE XUO;Lo;0;L;;;;;N;;;;; A467;YI SYLLABLE XOT;Lo;0;L;;;;;N;;;;; A468;YI SYLLABLE XOX;Lo;0;L;;;;;N;;;;; A469;YI SYLLABLE XO;Lo;0;L;;;;;N;;;;; A46A;YI SYLLABLE XOP;Lo;0;L;;;;;N;;;;; A46B;YI SYLLABLE XYT;Lo;0;L;;;;;N;;;;; A46C;YI SYLLABLE XYX;Lo;0;L;;;;;N;;;;; A46D;YI SYLLABLE XY;Lo;0;L;;;;;N;;;;; A46E;YI SYLLABLE XYP;Lo;0;L;;;;;N;;;;; A46F;YI SYLLABLE XYRX;Lo;0;L;;;;;N;;;;; A470;YI SYLLABLE XYR;Lo;0;L;;;;;N;;;;; A471;YI SYLLABLE YIT;Lo;0;L;;;;;N;;;;; A472;YI SYLLABLE YIX;Lo;0;L;;;;;N;;;;; A473;YI SYLLABLE YI;Lo;0;L;;;;;N;;;;; A474;YI SYLLABLE YIP;Lo;0;L;;;;;N;;;;; A475;YI SYLLABLE YIET;Lo;0;L;;;;;N;;;;; A476;YI SYLLABLE YIEX;Lo;0;L;;;;;N;;;;; A477;YI SYLLABLE YIE;Lo;0;L;;;;;N;;;;; A478;YI SYLLABLE YIEP;Lo;0;L;;;;;N;;;;; A479;YI SYLLABLE YUOT;Lo;0;L;;;;;N;;;;; A47A;YI SYLLABLE YUOX;Lo;0;L;;;;;N;;;;; A47B;YI SYLLABLE YUO;Lo;0;L;;;;;N;;;;; A47C;YI SYLLABLE YUOP;Lo;0;L;;;;;N;;;;; A47D;YI SYLLABLE YOT;Lo;0;L;;;;;N;;;;; A47E;YI SYLLABLE YOX;Lo;0;L;;;;;N;;;;; A47F;YI SYLLABLE YO;Lo;0;L;;;;;N;;;;; A480;YI SYLLABLE YOP;Lo;0;L;;;;;N;;;;; A481;YI SYLLABLE YUT;Lo;0;L;;;;;N;;;;; A482;YI SYLLABLE YUX;Lo;0;L;;;;;N;;;;; A483;YI SYLLABLE YU;Lo;0;L;;;;;N;;;;; A484;YI SYLLABLE YUP;Lo;0;L;;;;;N;;;;; A485;YI SYLLABLE YURX;Lo;0;L;;;;;N;;;;; A486;YI SYLLABLE YUR;Lo;0;L;;;;;N;;;;; A487;YI SYLLABLE YYT;Lo;0;L;;;;;N;;;;; A488;YI SYLLABLE YYX;Lo;0;L;;;;;N;;;;; A489;YI SYLLABLE YY;Lo;0;L;;;;;N;;;;; A48A;YI SYLLABLE YYP;Lo;0;L;;;;;N;;;;; A48B;YI SYLLABLE YYRX;Lo;0;L;;;;;N;;;;; A48C;YI SYLLABLE YYR;Lo;0;L;;;;;N;;;;; A490;YI RADICAL QOT;So;0;ON;;;;;N;;;;; A491;YI RADICAL LI;So;0;ON;;;;;N;;;;; A492;YI RADICAL KIT;So;0;ON;;;;;N;;;;; A493;YI RADICAL NYIP;So;0;ON;;;;;N;;;;; A494;YI RADICAL CYP;So;0;ON;;;;;N;;;;; A495;YI RADICAL SSI;So;0;ON;;;;;N;;;;; A496;YI RADICAL GGOP;So;0;ON;;;;;N;;;;; A497;YI RADICAL GEP;So;0;ON;;;;;N;;;;; A498;YI RADICAL MI;So;0;ON;;;;;N;;;;; A499;YI RADICAL HXIT;So;0;ON;;;;;N;;;;; A49A;YI RADICAL LYR;So;0;ON;;;;;N;;;;; A49B;YI RADICAL BBUT;So;0;ON;;;;;N;;;;; A49C;YI RADICAL MOP;So;0;ON;;;;;N;;;;; A49D;YI RADICAL YO;So;0;ON;;;;;N;;;;; A49E;YI RADICAL PUT;So;0;ON;;;;;N;;;;; A49F;YI RADICAL HXUO;So;0;ON;;;;;N;;;;; A4A0;YI RADICAL TAT;So;0;ON;;;;;N;;;;; A4A1;YI RADICAL GA;So;0;ON;;;;;N;;;;; A4A2;YI RADICAL ZUP;So;0;ON;;;;;N;;;;; A4A3;YI RADICAL CYT;So;0;ON;;;;;N;;;;; A4A4;YI RADICAL DDUR;So;0;ON;;;;;N;;;;; A4A5;YI RADICAL BUR;So;0;ON;;;;;N;;;;; A4A6;YI RADICAL GGUO;So;0;ON;;;;;N;;;;; A4A7;YI RADICAL NYOP;So;0;ON;;;;;N;;;;; A4A8;YI RADICAL TU;So;0;ON;;;;;N;;;;; A4A9;YI RADICAL OP;So;0;ON;;;;;N;;;;; A4AA;YI RADICAL JJUT;So;0;ON;;;;;N;;;;; A4AB;YI RADICAL ZOT;So;0;ON;;;;;N;;;;; A4AC;YI RADICAL PYT;So;0;ON;;;;;N;;;;; A4AD;YI RADICAL HMO;So;0;ON;;;;;N;;;;; A4AE;YI RADICAL YIT;So;0;ON;;;;;N;;;;; A4AF;YI RADICAL VUR;So;0;ON;;;;;N;;;;; A4B0;YI RADICAL SHY;So;0;ON;;;;;N;;;;; A4B1;YI RADICAL VEP;So;0;ON;;;;;N;;;;; A4B2;YI RADICAL ZA;So;0;ON;;;;;N;;;;; A4B3;YI RADICAL JO;So;0;ON;;;;;N;;;;; A4B4;YI RADICAL NZUP;So;0;ON;;;;;N;;;;; A4B5;YI RADICAL JJY;So;0;ON;;;;;N;;;;; A4B6;YI RADICAL GOT;So;0;ON;;;;;N;;;;; A4B7;YI RADICAL JJIE;So;0;ON;;;;;N;;;;; A4B8;YI RADICAL WO;So;0;ON;;;;;N;;;;; A4B9;YI RADICAL DU;So;0;ON;;;;;N;;;;; A4BA;YI RADICAL SHUR;So;0;ON;;;;;N;;;;; A4BB;YI RADICAL LIE;So;0;ON;;;;;N;;;;; A4BC;YI RADICAL CY;So;0;ON;;;;;N;;;;; A4BD;YI RADICAL CUOP;So;0;ON;;;;;N;;;;; A4BE;YI RADICAL CIP;So;0;ON;;;;;N;;;;; A4BF;YI RADICAL HXOP;So;0;ON;;;;;N;;;;; A4C0;YI RADICAL SHAT;So;0;ON;;;;;N;;;;; A4C1;YI RADICAL ZUR;So;0;ON;;;;;N;;;;; A4C2;YI RADICAL SHOP;So;0;ON;;;;;N;;;;; A4C3;YI RADICAL CHE;So;0;ON;;;;;N;;;;; A4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;; A4C5;YI RADICAL NBIE;So;0;ON;;;;;N;;;;; A4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;; A4D0;LISU LETTER BA;Lo;0;L;;;;;N;;;;; A4D1;LISU LETTER PA;Lo;0;L;;;;;N;;;;; A4D2;LISU LETTER PHA;Lo;0;L;;;;;N;;;;; A4D3;LISU LETTER DA;Lo;0;L;;;;;N;;;;; A4D4;LISU LETTER TA;Lo;0;L;;;;;N;;;;; A4D5;LISU LETTER THA;Lo;0;L;;;;;N;;;;; A4D6;LISU LETTER GA;Lo;0;L;;;;;N;;;;; A4D7;LISU LETTER KA;Lo;0;L;;;;;N;;;;; A4D8;LISU LETTER KHA;Lo;0;L;;;;;N;;;;; A4D9;LISU LETTER JA;Lo;0;L;;;;;N;;;;; A4DA;LISU LETTER CA;Lo;0;L;;;;;N;;;;; A4DB;LISU LETTER CHA;Lo;0;L;;;;;N;;;;; A4DC;LISU LETTER DZA;Lo;0;L;;;;;N;;;;; A4DD;LISU LETTER TSA;Lo;0;L;;;;;N;;;;; A4DE;LISU LETTER TSHA;Lo;0;L;;;;;N;;;;; A4DF;LISU LETTER MA;Lo;0;L;;;;;N;;;;; A4E0;LISU LETTER NA;Lo;0;L;;;;;N;;;;; A4E1;LISU LETTER LA;Lo;0;L;;;;;N;;;;; A4E2;LISU LETTER SA;Lo;0;L;;;;;N;;;;; A4E3;LISU LETTER ZHA;Lo;0;L;;;;;N;;;;; A4E4;LISU LETTER ZA;Lo;0;L;;;;;N;;;;; A4E5;LISU LETTER NGA;Lo;0;L;;;;;N;;;;; A4E6;LISU LETTER HA;Lo;0;L;;;;;N;;;;; A4E7;LISU LETTER XA;Lo;0;L;;;;;N;;;;; A4E8;LISU LETTER HHA;Lo;0;L;;;;;N;;;;; A4E9;LISU LETTER FA;Lo;0;L;;;;;N;;;;; A4EA;LISU LETTER WA;Lo;0;L;;;;;N;;;;; A4EB;LISU LETTER SHA;Lo;0;L;;;;;N;;;;; A4EC;LISU LETTER YA;Lo;0;L;;;;;N;;;;; A4ED;LISU LETTER GHA;Lo;0;L;;;;;N;;;;; A4EE;LISU LETTER A;Lo;0;L;;;;;N;;;;; A4EF;LISU LETTER AE;Lo;0;L;;;;;N;;;;; A4F0;LISU LETTER E;Lo;0;L;;;;;N;;;;; A4F1;LISU LETTER EU;Lo;0;L;;;;;N;;;;; A4F2;LISU LETTER I;Lo;0;L;;;;;N;;;;; A4F3;LISU LETTER O;Lo;0;L;;;;;N;;;;; A4F4;LISU LETTER U;Lo;0;L;;;;;N;;;;; A4F5;LISU LETTER UE;Lo;0;L;;;;;N;;;;; A4F6;LISU LETTER UH;Lo;0;L;;;;;N;;;;; A4F7;LISU LETTER OE;Lo;0;L;;;;;N;;;;; A4F8;LISU LETTER TONE MYA TI;Lm;0;L;;;;;N;;;;; A4F9;LISU LETTER TONE NA PO;Lm;0;L;;;;;N;;;;; A4FA;LISU LETTER TONE MYA CYA;Lm;0;L;;;;;N;;;;; A4FB;LISU LETTER TONE MYA BO;Lm;0;L;;;;;N;;;;; A4FC;LISU LETTER TONE MYA NA;Lm;0;L;;;;;N;;;;; A4FD;LISU LETTER TONE MYA JEU;Lm;0;L;;;;;N;;;;; A4FE;LISU PUNCTUATION COMMA;Po;0;L;;;;;N;;;;; A4FF;LISU PUNCTUATION FULL STOP;Po;0;L;;;;;N;;;;; A500;VAI SYLLABLE EE;Lo;0;L;;;;;N;;;;; A501;VAI SYLLABLE EEN;Lo;0;L;;;;;N;;;;; A502;VAI SYLLABLE HEE;Lo;0;L;;;;;N;;;;; A503;VAI SYLLABLE WEE;Lo;0;L;;;;;N;;;;; A504;VAI SYLLABLE WEEN;Lo;0;L;;;;;N;;;;; A505;VAI SYLLABLE PEE;Lo;0;L;;;;;N;;;;; A506;VAI SYLLABLE BHEE;Lo;0;L;;;;;N;;;;; A507;VAI SYLLABLE BEE;Lo;0;L;;;;;N;;;;; A508;VAI SYLLABLE MBEE;Lo;0;L;;;;;N;;;;; A509;VAI SYLLABLE KPEE;Lo;0;L;;;;;N;;;;; A50A;VAI SYLLABLE MGBEE;Lo;0;L;;;;;N;;;;; A50B;VAI SYLLABLE GBEE;Lo;0;L;;;;;N;;;;; A50C;VAI SYLLABLE FEE;Lo;0;L;;;;;N;;;;; A50D;VAI SYLLABLE VEE;Lo;0;L;;;;;N;;;;; A50E;VAI SYLLABLE TEE;Lo;0;L;;;;;N;;;;; A50F;VAI SYLLABLE THEE;Lo;0;L;;;;;N;;;;; A510;VAI SYLLABLE DHEE;Lo;0;L;;;;;N;;;;; A511;VAI SYLLABLE DHHEE;Lo;0;L;;;;;N;;;;; A512;VAI SYLLABLE LEE;Lo;0;L;;;;;N;;;;; A513;VAI SYLLABLE REE;Lo;0;L;;;;;N;;;;; A514;VAI SYLLABLE DEE;Lo;0;L;;;;;N;;;;; A515;VAI SYLLABLE NDEE;Lo;0;L;;;;;N;;;;; A516;VAI SYLLABLE SEE;Lo;0;L;;;;;N;;;;; A517;VAI SYLLABLE SHEE;Lo;0;L;;;;;N;;;;; A518;VAI SYLLABLE ZEE;Lo;0;L;;;;;N;;;;; A519;VAI SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;; A51A;VAI SYLLABLE CEE;Lo;0;L;;;;;N;;;;; A51B;VAI SYLLABLE JEE;Lo;0;L;;;;;N;;;;; A51C;VAI SYLLABLE NJEE;Lo;0;L;;;;;N;;;;; A51D;VAI SYLLABLE YEE;Lo;0;L;;;;;N;;;;; A51E;VAI SYLLABLE KEE;Lo;0;L;;;;;N;;;;; A51F;VAI SYLLABLE NGGEE;Lo;0;L;;;;;N;;;;; A520;VAI SYLLABLE GEE;Lo;0;L;;;;;N;;;;; A521;VAI SYLLABLE MEE;Lo;0;L;;;;;N;;;;; A522;VAI SYLLABLE NEE;Lo;0;L;;;;;N;;;;; A523;VAI SYLLABLE NYEE;Lo;0;L;;;;;N;;;;; A524;VAI SYLLABLE I;Lo;0;L;;;;;N;;;;; A525;VAI SYLLABLE IN;Lo;0;L;;;;;N;;;;; A526;VAI SYLLABLE HI;Lo;0;L;;;;;N;;;;; A527;VAI SYLLABLE HIN;Lo;0;L;;;;;N;;;;; A528;VAI SYLLABLE WI;Lo;0;L;;;;;N;;;;; A529;VAI SYLLABLE WIN;Lo;0;L;;;;;N;;;;; A52A;VAI SYLLABLE PI;Lo;0;L;;;;;N;;;;; A52B;VAI SYLLABLE BHI;Lo;0;L;;;;;N;;;;; A52C;VAI SYLLABLE BI;Lo;0;L;;;;;N;;;;; A52D;VAI SYLLABLE MBI;Lo;0;L;;;;;N;;;;; A52E;VAI SYLLABLE KPI;Lo;0;L;;;;;N;;;;; A52F;VAI SYLLABLE MGBI;Lo;0;L;;;;;N;;;;; A530;VAI SYLLABLE GBI;Lo;0;L;;;;;N;;;;; A531;VAI SYLLABLE FI;Lo;0;L;;;;;N;;;;; A532;VAI SYLLABLE VI;Lo;0;L;;;;;N;;;;; A533;VAI SYLLABLE TI;Lo;0;L;;;;;N;;;;; A534;VAI SYLLABLE THI;Lo;0;L;;;;;N;;;;; A535;VAI SYLLABLE DHI;Lo;0;L;;;;;N;;;;; A536;VAI SYLLABLE DHHI;Lo;0;L;;;;;N;;;;; A537;VAI SYLLABLE LI;Lo;0;L;;;;;N;;;;; A538;VAI SYLLABLE RI;Lo;0;L;;;;;N;;;;; A539;VAI SYLLABLE DI;Lo;0;L;;;;;N;;;;; A53A;VAI SYLLABLE NDI;Lo;0;L;;;;;N;;;;; A53B;VAI SYLLABLE SI;Lo;0;L;;;;;N;;;;; A53C;VAI SYLLABLE SHI;Lo;0;L;;;;;N;;;;; A53D;VAI SYLLABLE ZI;Lo;0;L;;;;;N;;;;; A53E;VAI SYLLABLE ZHI;Lo;0;L;;;;;N;;;;; A53F;VAI SYLLABLE CI;Lo;0;L;;;;;N;;;;; A540;VAI SYLLABLE JI;Lo;0;L;;;;;N;;;;; A541;VAI SYLLABLE NJI;Lo;0;L;;;;;N;;;;; A542;VAI SYLLABLE YI;Lo;0;L;;;;;N;;;;; A543;VAI SYLLABLE KI;Lo;0;L;;;;;N;;;;; A544;VAI SYLLABLE NGGI;Lo;0;L;;;;;N;;;;; A545;VAI SYLLABLE GI;Lo;0;L;;;;;N;;;;; A546;VAI SYLLABLE MI;Lo;0;L;;;;;N;;;;; A547;VAI SYLLABLE NI;Lo;0;L;;;;;N;;;;; A548;VAI SYLLABLE NYI;Lo;0;L;;;;;N;;;;; A549;VAI SYLLABLE A;Lo;0;L;;;;;N;;;;; A54A;VAI SYLLABLE AN;Lo;0;L;;;;;N;;;;; A54B;VAI SYLLABLE NGAN;Lo;0;L;;;;;N;;;;; A54C;VAI SYLLABLE HA;Lo;0;L;;;;;N;;;;; A54D;VAI SYLLABLE HAN;Lo;0;L;;;;;N;;;;; A54E;VAI SYLLABLE WA;Lo;0;L;;;;;N;;;;; A54F;VAI SYLLABLE WAN;Lo;0;L;;;;;N;;;;; A550;VAI SYLLABLE PA;Lo;0;L;;;;;N;;;;; A551;VAI SYLLABLE BHA;Lo;0;L;;;;;N;;;;; A552;VAI SYLLABLE BA;Lo;0;L;;;;;N;;;;; A553;VAI SYLLABLE MBA;Lo;0;L;;;;;N;;;;; A554;VAI SYLLABLE KPA;Lo;0;L;;;;;N;;;;; A555;VAI SYLLABLE KPAN;Lo;0;L;;;;;N;;;;; A556;VAI SYLLABLE MGBA;Lo;0;L;;;;;N;;;;; A557;VAI SYLLABLE GBA;Lo;0;L;;;;;N;;;;; A558;VAI SYLLABLE FA;Lo;0;L;;;;;N;;;;; A559;VAI SYLLABLE VA;Lo;0;L;;;;;N;;;;; A55A;VAI SYLLABLE TA;Lo;0;L;;;;;N;;;;; A55B;VAI SYLLABLE THA;Lo;0;L;;;;;N;;;;; A55C;VAI SYLLABLE DHA;Lo;0;L;;;;;N;;;;; A55D;VAI SYLLABLE DHHA;Lo;0;L;;;;;N;;;;; A55E;VAI SYLLABLE LA;Lo;0;L;;;;;N;;;;; A55F;VAI SYLLABLE RA;Lo;0;L;;;;;N;;;;; A560;VAI SYLLABLE DA;Lo;0;L;;;;;N;;;;; A561;VAI SYLLABLE NDA;Lo;0;L;;;;;N;;;;; A562;VAI SYLLABLE SA;Lo;0;L;;;;;N;;;;; A563;VAI SYLLABLE SHA;Lo;0;L;;;;;N;;;;; A564;VAI SYLLABLE ZA;Lo;0;L;;;;;N;;;;; A565;VAI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;; A566;VAI SYLLABLE CA;Lo;0;L;;;;;N;;;;; A567;VAI SYLLABLE JA;Lo;0;L;;;;;N;;;;; A568;VAI SYLLABLE NJA;Lo;0;L;;;;;N;;;;; A569;VAI SYLLABLE YA;Lo;0;L;;;;;N;;;;; A56A;VAI SYLLABLE KA;Lo;0;L;;;;;N;;;;; A56B;VAI SYLLABLE KAN;Lo;0;L;;;;;N;;;;; A56C;VAI SYLLABLE NGGA;Lo;0;L;;;;;N;;;;; A56D;VAI SYLLABLE GA;Lo;0;L;;;;;N;;;;; A56E;VAI SYLLABLE MA;Lo;0;L;;;;;N;;;;; A56F;VAI SYLLABLE NA;Lo;0;L;;;;;N;;;;; A570;VAI SYLLABLE NYA;Lo;0;L;;;;;N;;;;; A571;VAI SYLLABLE OO;Lo;0;L;;;;;N;;;;; A572;VAI SYLLABLE OON;Lo;0;L;;;;;N;;;;; A573;VAI SYLLABLE HOO;Lo;0;L;;;;;N;;;;; A574;VAI SYLLABLE WOO;Lo;0;L;;;;;N;;;;; A575;VAI SYLLABLE WOON;Lo;0;L;;;;;N;;;;; A576;VAI SYLLABLE POO;Lo;0;L;;;;;N;;;;; A577;VAI SYLLABLE BHOO;Lo;0;L;;;;;N;;;;; A578;VAI SYLLABLE BOO;Lo;0;L;;;;;N;;;;; A579;VAI SYLLABLE MBOO;Lo;0;L;;;;;N;;;;; A57A;VAI SYLLABLE KPOO;Lo;0;L;;;;;N;;;;; A57B;VAI SYLLABLE MGBOO;Lo;0;L;;;;;N;;;;; A57C;VAI SYLLABLE GBOO;Lo;0;L;;;;;N;;;;; A57D;VAI SYLLABLE FOO;Lo;0;L;;;;;N;;;;; A57E;VAI SYLLABLE VOO;Lo;0;L;;;;;N;;;;; A57F;VAI SYLLABLE TOO;Lo;0;L;;;;;N;;;;; A580;VAI SYLLABLE THOO;Lo;0;L;;;;;N;;;;; A581;VAI SYLLABLE DHOO;Lo;0;L;;;;;N;;;;; A582;VAI SYLLABLE DHHOO;Lo;0;L;;;;;N;;;;; A583;VAI SYLLABLE LOO;Lo;0;L;;;;;N;;;;; A584;VAI SYLLABLE ROO;Lo;0;L;;;;;N;;;;; A585;VAI SYLLABLE DOO;Lo;0;L;;;;;N;;;;; A586;VAI SYLLABLE NDOO;Lo;0;L;;;;;N;;;;; A587;VAI SYLLABLE SOO;Lo;0;L;;;;;N;;;;; A588;VAI SYLLABLE SHOO;Lo;0;L;;;;;N;;;;; A589;VAI SYLLABLE ZOO;Lo;0;L;;;;;N;;;;; A58A;VAI SYLLABLE ZHOO;Lo;0;L;;;;;N;;;;; A58B;VAI SYLLABLE COO;Lo;0;L;;;;;N;;;;; A58C;VAI SYLLABLE JOO;Lo;0;L;;;;;N;;;;; A58D;VAI SYLLABLE NJOO;Lo;0;L;;;;;N;;;;; A58E;VAI SYLLABLE YOO;Lo;0;L;;;;;N;;;;; A58F;VAI SYLLABLE KOO;Lo;0;L;;;;;N;;;;; A590;VAI SYLLABLE NGGOO;Lo;0;L;;;;;N;;;;; A591;VAI SYLLABLE GOO;Lo;0;L;;;;;N;;;;; A592;VAI SYLLABLE MOO;Lo;0;L;;;;;N;;;;; A593;VAI SYLLABLE NOO;Lo;0;L;;;;;N;;;;; A594;VAI SYLLABLE NYOO;Lo;0;L;;;;;N;;;;; A595;VAI SYLLABLE U;Lo;0;L;;;;;N;;;;; A596;VAI SYLLABLE UN;Lo;0;L;;;;;N;;;;; A597;VAI SYLLABLE HU;Lo;0;L;;;;;N;;;;; A598;VAI SYLLABLE HUN;Lo;0;L;;;;;N;;;;; A599;VAI SYLLABLE WU;Lo;0;L;;;;;N;;;;; A59A;VAI SYLLABLE WUN;Lo;0;L;;;;;N;;;;; A59B;VAI SYLLABLE PU;Lo;0;L;;;;;N;;;;; A59C;VAI SYLLABLE BHU;Lo;0;L;;;;;N;;;;; A59D;VAI SYLLABLE BU;Lo;0;L;;;;;N;;;;; A59E;VAI SYLLABLE MBU;Lo;0;L;;;;;N;;;;; A59F;VAI SYLLABLE KPU;Lo;0;L;;;;;N;;;;; A5A0;VAI SYLLABLE MGBU;Lo;0;L;;;;;N;;;;; A5A1;VAI SYLLABLE GBU;Lo;0;L;;;;;N;;;;; A5A2;VAI SYLLABLE FU;Lo;0;L;;;;;N;;;;; A5A3;VAI SYLLABLE VU;Lo;0;L;;;;;N;;;;; A5A4;VAI SYLLABLE TU;Lo;0;L;;;;;N;;;;; A5A5;VAI SYLLABLE THU;Lo;0;L;;;;;N;;;;; A5A6;VAI SYLLABLE DHU;Lo;0;L;;;;;N;;;;; A5A7;VAI SYLLABLE DHHU;Lo;0;L;;;;;N;;;;; A5A8;VAI SYLLABLE LU;Lo;0;L;;;;;N;;;;; A5A9;VAI SYLLABLE RU;Lo;0;L;;;;;N;;;;; A5AA;VAI SYLLABLE DU;Lo;0;L;;;;;N;;;;; A5AB;VAI SYLLABLE NDU;Lo;0;L;;;;;N;;;;; A5AC;VAI SYLLABLE SU;Lo;0;L;;;;;N;;;;; A5AD;VAI SYLLABLE SHU;Lo;0;L;;;;;N;;;;; A5AE;VAI SYLLABLE ZU;Lo;0;L;;;;;N;;;;; A5AF;VAI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;; A5B0;VAI SYLLABLE CU;Lo;0;L;;;;;N;;;;; A5B1;VAI SYLLABLE JU;Lo;0;L;;;;;N;;;;; A5B2;VAI SYLLABLE NJU;Lo;0;L;;;;;N;;;;; A5B3;VAI SYLLABLE YU;Lo;0;L;;;;;N;;;;; A5B4;VAI SYLLABLE KU;Lo;0;L;;;;;N;;;;; A5B5;VAI SYLLABLE NGGU;Lo;0;L;;;;;N;;;;; A5B6;VAI SYLLABLE GU;Lo;0;L;;;;;N;;;;; A5B7;VAI SYLLABLE MU;Lo;0;L;;;;;N;;;;; A5B8;VAI SYLLABLE NU;Lo;0;L;;;;;N;;;;; A5B9;VAI SYLLABLE NYU;Lo;0;L;;;;;N;;;;; A5BA;VAI SYLLABLE O;Lo;0;L;;;;;N;;;;; A5BB;VAI SYLLABLE ON;Lo;0;L;;;;;N;;;;; A5BC;VAI SYLLABLE NGON;Lo;0;L;;;;;N;;;;; A5BD;VAI SYLLABLE HO;Lo;0;L;;;;;N;;;;; A5BE;VAI SYLLABLE HON;Lo;0;L;;;;;N;;;;; A5BF;VAI SYLLABLE WO;Lo;0;L;;;;;N;;;;; A5C0;VAI SYLLABLE WON;Lo;0;L;;;;;N;;;;; A5C1;VAI SYLLABLE PO;Lo;0;L;;;;;N;;;;; A5C2;VAI SYLLABLE BHO;Lo;0;L;;;;;N;;;;; A5C3;VAI SYLLABLE BO;Lo;0;L;;;;;N;;;;; A5C4;VAI SYLLABLE MBO;Lo;0;L;;;;;N;;;;; A5C5;VAI SYLLABLE KPO;Lo;0;L;;;;;N;;;;; A5C6;VAI SYLLABLE MGBO;Lo;0;L;;;;;N;;;;; A5C7;VAI SYLLABLE GBO;Lo;0;L;;;;;N;;;;; A5C8;VAI SYLLABLE GBON;Lo;0;L;;;;;N;;;;; A5C9;VAI SYLLABLE FO;Lo;0;L;;;;;N;;;;; A5CA;VAI SYLLABLE VO;Lo;0;L;;;;;N;;;;; A5CB;VAI SYLLABLE TO;Lo;0;L;;;;;N;;;;; A5CC;VAI SYLLABLE THO;Lo;0;L;;;;;N;;;;; A5CD;VAI SYLLABLE DHO;Lo;0;L;;;;;N;;;;; A5CE;VAI SYLLABLE DHHO;Lo;0;L;;;;;N;;;;; A5CF;VAI SYLLABLE LO;Lo;0;L;;;;;N;;;;; A5D0;VAI SYLLABLE RO;Lo;0;L;;;;;N;;;;; A5D1;VAI SYLLABLE DO;Lo;0;L;;;;;N;;;;; A5D2;VAI SYLLABLE NDO;Lo;0;L;;;;;N;;;;; A5D3;VAI SYLLABLE SO;Lo;0;L;;;;;N;;;;; A5D4;VAI SYLLABLE SHO;Lo;0;L;;;;;N;;;;; A5D5;VAI SYLLABLE ZO;Lo;0;L;;;;;N;;;;; A5D6;VAI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;; A5D7;VAI SYLLABLE CO;Lo;0;L;;;;;N;;;;; A5D8;VAI SYLLABLE JO;Lo;0;L;;;;;N;;;;; A5D9;VAI SYLLABLE NJO;Lo;0;L;;;;;N;;;;; A5DA;VAI SYLLABLE YO;Lo;0;L;;;;;N;;;;; A5DB;VAI SYLLABLE KO;Lo;0;L;;;;;N;;;;; A5DC;VAI SYLLABLE NGGO;Lo;0;L;;;;;N;;;;; A5DD;VAI SYLLABLE GO;Lo;0;L;;;;;N;;;;; A5DE;VAI SYLLABLE MO;Lo;0;L;;;;;N;;;;; A5DF;VAI SYLLABLE NO;Lo;0;L;;;;;N;;;;; A5E0;VAI SYLLABLE NYO;Lo;0;L;;;;;N;;;;; A5E1;VAI SYLLABLE E;Lo;0;L;;;;;N;;;;; A5E2;VAI SYLLABLE EN;Lo;0;L;;;;;N;;;;; A5E3;VAI SYLLABLE NGEN;Lo;0;L;;;;;N;;;;; A5E4;VAI SYLLABLE HE;Lo;0;L;;;;;N;;;;; A5E5;VAI SYLLABLE HEN;Lo;0;L;;;;;N;;;;; A5E6;VAI SYLLABLE WE;Lo;0;L;;;;;N;;;;; A5E7;VAI SYLLABLE WEN;Lo;0;L;;;;;N;;;;; A5E8;VAI SYLLABLE PE;Lo;0;L;;;;;N;;;;; A5E9;VAI SYLLABLE BHE;Lo;0;L;;;;;N;;;;; A5EA;VAI SYLLABLE BE;Lo;0;L;;;;;N;;;;; A5EB;VAI SYLLABLE MBE;Lo;0;L;;;;;N;;;;; A5EC;VAI SYLLABLE KPE;Lo;0;L;;;;;N;;;;; A5ED;VAI SYLLABLE KPEN;Lo;0;L;;;;;N;;;;; A5EE;VAI SYLLABLE MGBE;Lo;0;L;;;;;N;;;;; A5EF;VAI SYLLABLE GBE;Lo;0;L;;;;;N;;;;; A5F0;VAI SYLLABLE GBEN;Lo;0;L;;;;;N;;;;; A5F1;VAI SYLLABLE FE;Lo;0;L;;;;;N;;;;; A5F2;VAI SYLLABLE VE;Lo;0;L;;;;;N;;;;; A5F3;VAI SYLLABLE TE;Lo;0;L;;;;;N;;;;; A5F4;VAI SYLLABLE THE;Lo;0;L;;;;;N;;;;; A5F5;VAI SYLLABLE DHE;Lo;0;L;;;;;N;;;;; A5F6;VAI SYLLABLE DHHE;Lo;0;L;;;;;N;;;;; A5F7;VAI SYLLABLE LE;Lo;0;L;;;;;N;;;;; A5F8;VAI SYLLABLE RE;Lo;0;L;;;;;N;;;;; A5F9;VAI SYLLABLE DE;Lo;0;L;;;;;N;;;;; A5FA;VAI SYLLABLE NDE;Lo;0;L;;;;;N;;;;; A5FB;VAI SYLLABLE SE;Lo;0;L;;;;;N;;;;; A5FC;VAI SYLLABLE SHE;Lo;0;L;;;;;N;;;;; A5FD;VAI SYLLABLE ZE;Lo;0;L;;;;;N;;;;; A5FE;VAI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;; A5FF;VAI SYLLABLE CE;Lo;0;L;;;;;N;;;;; A600;VAI SYLLABLE JE;Lo;0;L;;;;;N;;;;; A601;VAI SYLLABLE NJE;Lo;0;L;;;;;N;;;;; A602;VAI SYLLABLE YE;Lo;0;L;;;;;N;;;;; A603;VAI SYLLABLE KE;Lo;0;L;;;;;N;;;;; A604;VAI SYLLABLE NGGE;Lo;0;L;;;;;N;;;;; A605;VAI SYLLABLE NGGEN;Lo;0;L;;;;;N;;;;; A606;VAI SYLLABLE GE;Lo;0;L;;;;;N;;;;; A607;VAI SYLLABLE GEN;Lo;0;L;;;;;N;;;;; A608;VAI SYLLABLE ME;Lo;0;L;;;;;N;;;;; A609;VAI SYLLABLE NE;Lo;0;L;;;;;N;;;;; A60A;VAI SYLLABLE NYE;Lo;0;L;;;;;N;;;;; A60B;VAI SYLLABLE NG;Lo;0;L;;;;;N;;;;; A60C;VAI SYLLABLE LENGTHENER;Lm;0;L;;;;;N;;;;; A60D;VAI COMMA;Po;0;ON;;;;;N;;;;; A60E;VAI FULL STOP;Po;0;ON;;;;;N;;;;; A60F;VAI QUESTION MARK;Po;0;ON;;;;;N;;;;; A610;VAI SYLLABLE NDOLE FA;Lo;0;L;;;;;N;;;;; A611;VAI SYLLABLE NDOLE KA;Lo;0;L;;;;;N;;;;; A612;VAI SYLLABLE NDOLE SOO;Lo;0;L;;;;;N;;;;; A613;VAI SYMBOL FEENG;Lo;0;L;;;;;N;;;;; A614;VAI SYMBOL KEENG;Lo;0;L;;;;;N;;;;; A615;VAI SYMBOL TING;Lo;0;L;;;;;N;;;;; A616;VAI SYMBOL NII;Lo;0;L;;;;;N;;;;; A617;VAI SYMBOL BANG;Lo;0;L;;;;;N;;;;; A618;VAI SYMBOL FAA;Lo;0;L;;;;;N;;;;; A619;VAI SYMBOL TAA;Lo;0;L;;;;;N;;;;; A61A;VAI SYMBOL DANG;Lo;0;L;;;;;N;;;;; A61B;VAI SYMBOL DOONG;Lo;0;L;;;;;N;;;;; A61C;VAI SYMBOL KUNG;Lo;0;L;;;;;N;;;;; A61D;VAI SYMBOL TONG;Lo;0;L;;;;;N;;;;; A61E;VAI SYMBOL DO-O;Lo;0;L;;;;;N;;;;; A61F;VAI SYMBOL JONG;Lo;0;L;;;;;N;;;;; A620;VAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; A621;VAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; A622;VAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; A623;VAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; A624;VAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; A625;VAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; A626;VAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; A627;VAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; A628;VAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; A629;VAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; A62A;VAI SYLLABLE NDOLE MA;Lo;0;L;;;;;N;;;;; A62B;VAI SYLLABLE NDOLE DO;Lo;0;L;;;;;N;;;;; A640;CYRILLIC CAPITAL LETTER ZEMLYA;Lu;0;L;;;;;N;;;;A641; A641;CYRILLIC SMALL LETTER ZEMLYA;Ll;0;L;;;;;N;;;A640;;A640 A642;CYRILLIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;A643; A643;CYRILLIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;A642;;A642 A644;CYRILLIC CAPITAL LETTER REVERSED DZE;Lu;0;L;;;;;N;;;;A645; A645;CYRILLIC SMALL LETTER REVERSED DZE;Ll;0;L;;;;;N;;;A644;;A644 A646;CYRILLIC CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;A647; A647;CYRILLIC SMALL LETTER IOTA;Ll;0;L;;;;;N;;;A646;;A646 A648;CYRILLIC CAPITAL LETTER DJERV;Lu;0;L;;;;;N;;;;A649; A649;CYRILLIC SMALL LETTER DJERV;Ll;0;L;;;;;N;;;A648;;A648 A64A;CYRILLIC CAPITAL LETTER MONOGRAPH UK;Lu;0;L;;;;;N;;;;A64B; A64B;CYRILLIC SMALL LETTER MONOGRAPH UK;Ll;0;L;;;;;N;;;A64A;;A64A A64C;CYRILLIC CAPITAL LETTER BROAD OMEGA;Lu;0;L;;;;;N;;;;A64D; A64D;CYRILLIC SMALL LETTER BROAD OMEGA;Ll;0;L;;;;;N;;;A64C;;A64C A64E;CYRILLIC CAPITAL LETTER NEUTRAL YER;Lu;0;L;;;;;N;;;;A64F; A64F;CYRILLIC SMALL LETTER NEUTRAL YER;Ll;0;L;;;;;N;;;A64E;;A64E A650;CYRILLIC CAPITAL LETTER YERU WITH BACK YER;Lu;0;L;;;;;N;;;;A651; A651;CYRILLIC SMALL LETTER YERU WITH BACK YER;Ll;0;L;;;;;N;;;A650;;A650 A652;CYRILLIC CAPITAL LETTER IOTIFIED YAT;Lu;0;L;;;;;N;;;;A653; A653;CYRILLIC SMALL LETTER IOTIFIED YAT;Ll;0;L;;;;;N;;;A652;;A652 A654;CYRILLIC CAPITAL LETTER REVERSED YU;Lu;0;L;;;;;N;;;;A655; A655;CYRILLIC SMALL LETTER REVERSED YU;Ll;0;L;;;;;N;;;A654;;A654 A656;CYRILLIC CAPITAL LETTER IOTIFIED A;Lu;0;L;;;;;N;;;;A657; A657;CYRILLIC SMALL LETTER IOTIFIED A;Ll;0;L;;;;;N;;;A656;;A656 A658;CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS;Lu;0;L;;;;;N;;;;A659; A659;CYRILLIC SMALL LETTER CLOSED LITTLE YUS;Ll;0;L;;;;;N;;;A658;;A658 A65A;CYRILLIC CAPITAL LETTER BLENDED YUS;Lu;0;L;;;;;N;;;;A65B; A65B;CYRILLIC SMALL LETTER BLENDED YUS;Ll;0;L;;;;;N;;;A65A;;A65A A65C;CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS;Lu;0;L;;;;;N;;;;A65D; A65D;CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS;Ll;0;L;;;;;N;;;A65C;;A65C A65E;CYRILLIC CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;A65F; A65F;CYRILLIC SMALL LETTER YN;Ll;0;L;;;;;N;;;A65E;;A65E A660;CYRILLIC CAPITAL LETTER REVERSED TSE;Lu;0;L;;;;;N;;;;A661; A661;CYRILLIC SMALL LETTER REVERSED TSE;Ll;0;L;;;;;N;;;A660;;A660 A662;CYRILLIC CAPITAL LETTER SOFT DE;Lu;0;L;;;;;N;;;;A663; A663;CYRILLIC SMALL LETTER SOFT DE;Ll;0;L;;;;;N;;;A662;;A662 A664;CYRILLIC CAPITAL LETTER SOFT EL;Lu;0;L;;;;;N;;;;A665; A665;CYRILLIC SMALL LETTER SOFT EL;Ll;0;L;;;;;N;;;A664;;A664 A666;CYRILLIC CAPITAL LETTER SOFT EM;Lu;0;L;;;;;N;;;;A667; A667;CYRILLIC SMALL LETTER SOFT EM;Ll;0;L;;;;;N;;;A666;;A666 A668;CYRILLIC CAPITAL LETTER MONOCULAR O;Lu;0;L;;;;;N;;;;A669; A669;CYRILLIC SMALL LETTER MONOCULAR O;Ll;0;L;;;;;N;;;A668;;A668 A66A;CYRILLIC CAPITAL LETTER BINOCULAR O;Lu;0;L;;;;;N;;;;A66B; A66B;CYRILLIC SMALL LETTER BINOCULAR O;Ll;0;L;;;;;N;;;A66A;;A66A A66C;CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O;Lu;0;L;;;;;N;;;;A66D; A66D;CYRILLIC SMALL LETTER DOUBLE MONOCULAR O;Ll;0;L;;;;;N;;;A66C;;A66C A66E;CYRILLIC LETTER MULTIOCULAR O;Lo;0;L;;;;;N;;;;; A66F;COMBINING CYRILLIC VZMET;Mn;230;NSM;;;;;N;;;;; A670;COMBINING CYRILLIC TEN MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; A671;COMBINING CYRILLIC HUNDRED MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; A672;COMBINING CYRILLIC THOUSAND MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; A673;SLAVONIC ASTERISK;Po;0;ON;;;;;N;;;;; A674;COMBINING CYRILLIC LETTER UKRAINIAN IE;Mn;230;NSM;;;;;N;;;;; A675;COMBINING CYRILLIC LETTER I;Mn;230;NSM;;;;;N;;;;; A676;COMBINING CYRILLIC LETTER YI;Mn;230;NSM;;;;;N;;;;; A677;COMBINING CYRILLIC LETTER U;Mn;230;NSM;;;;;N;;;;; A678;COMBINING CYRILLIC LETTER HARD SIGN;Mn;230;NSM;;;;;N;;;;; A679;COMBINING CYRILLIC LETTER YERU;Mn;230;NSM;;;;;N;;;;; A67A;COMBINING CYRILLIC LETTER SOFT SIGN;Mn;230;NSM;;;;;N;;;;; A67B;COMBINING CYRILLIC LETTER OMEGA;Mn;230;NSM;;;;;N;;;;; A67C;COMBINING CYRILLIC KAVYKA;Mn;230;NSM;;;;;N;;;;; A67D;COMBINING CYRILLIC PAYEROK;Mn;230;NSM;;;;;N;;;;; A67E;CYRILLIC KAVYKA;Po;0;ON;;;;;N;;;;; A67F;CYRILLIC PAYEROK;Lm;0;ON;;;;;N;;;;; A680;CYRILLIC CAPITAL LETTER DWE;Lu;0;L;;;;;N;;;;A681; A681;CYRILLIC SMALL LETTER DWE;Ll;0;L;;;;;N;;;A680;;A680 A682;CYRILLIC CAPITAL LETTER DZWE;Lu;0;L;;;;;N;;;;A683; A683;CYRILLIC SMALL LETTER DZWE;Ll;0;L;;;;;N;;;A682;;A682 A684;CYRILLIC CAPITAL LETTER ZHWE;Lu;0;L;;;;;N;;;;A685; A685;CYRILLIC SMALL LETTER ZHWE;Ll;0;L;;;;;N;;;A684;;A684 A686;CYRILLIC CAPITAL LETTER CCHE;Lu;0;L;;;;;N;;;;A687; A687;CYRILLIC SMALL LETTER CCHE;Ll;0;L;;;;;N;;;A686;;A686 A688;CYRILLIC CAPITAL LETTER DZZE;Lu;0;L;;;;;N;;;;A689; A689;CYRILLIC SMALL LETTER DZZE;Ll;0;L;;;;;N;;;A688;;A688 A68A;CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;A68B; A68B;CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;A68A;;A68A A68C;CYRILLIC CAPITAL LETTER TWE;Lu;0;L;;;;;N;;;;A68D; A68D;CYRILLIC SMALL LETTER TWE;Ll;0;L;;;;;N;;;A68C;;A68C A68E;CYRILLIC CAPITAL LETTER TSWE;Lu;0;L;;;;;N;;;;A68F; A68F;CYRILLIC SMALL LETTER TSWE;Ll;0;L;;;;;N;;;A68E;;A68E A690;CYRILLIC CAPITAL LETTER TSSE;Lu;0;L;;;;;N;;;;A691; A691;CYRILLIC SMALL LETTER TSSE;Ll;0;L;;;;;N;;;A690;;A690 A692;CYRILLIC CAPITAL LETTER TCHE;Lu;0;L;;;;;N;;;;A693; A693;CYRILLIC SMALL LETTER TCHE;Ll;0;L;;;;;N;;;A692;;A692 A694;CYRILLIC CAPITAL LETTER HWE;Lu;0;L;;;;;N;;;;A695; A695;CYRILLIC SMALL LETTER HWE;Ll;0;L;;;;;N;;;A694;;A694 A696;CYRILLIC CAPITAL LETTER SHWE;Lu;0;L;;;;;N;;;;A697; A697;CYRILLIC SMALL LETTER SHWE;Ll;0;L;;;;;N;;;A696;;A696 A698;CYRILLIC CAPITAL LETTER DOUBLE O;Lu;0;L;;;;;N;;;;A699; A699;CYRILLIC SMALL LETTER DOUBLE O;Ll;0;L;;;;;N;;;A698;;A698 A69A;CYRILLIC CAPITAL LETTER CROSSED O;Lu;0;L;;;;;N;;;;A69B; A69B;CYRILLIC SMALL LETTER CROSSED O;Ll;0;L;;;;;N;;;A69A;;A69A A69C;MODIFIER LETTER CYRILLIC HARD SIGN;Lm;0;L; 044A;;;;N;;;;; A69D;MODIFIER LETTER CYRILLIC SOFT SIGN;Lm;0;L; 044C;;;;N;;;;; A69E;COMBINING CYRILLIC LETTER EF;Mn;230;NSM;;;;;N;;;;; A69F;COMBINING CYRILLIC LETTER IOTIFIED E;Mn;230;NSM;;;;;N;;;;; A6A0;BAMUM LETTER A;Lo;0;L;;;;;N;;;;; A6A1;BAMUM LETTER KA;Lo;0;L;;;;;N;;;;; A6A2;BAMUM LETTER U;Lo;0;L;;;;;N;;;;; A6A3;BAMUM LETTER KU;Lo;0;L;;;;;N;;;;; A6A4;BAMUM LETTER EE;Lo;0;L;;;;;N;;;;; A6A5;BAMUM LETTER REE;Lo;0;L;;;;;N;;;;; A6A6;BAMUM LETTER TAE;Lo;0;L;;;;;N;;;;; A6A7;BAMUM LETTER O;Lo;0;L;;;;;N;;;;; A6A8;BAMUM LETTER NYI;Lo;0;L;;;;;N;;;;; A6A9;BAMUM LETTER I;Lo;0;L;;;;;N;;;;; A6AA;BAMUM LETTER LA;Lo;0;L;;;;;N;;;;; A6AB;BAMUM LETTER PA;Lo;0;L;;;;;N;;;;; A6AC;BAMUM LETTER RII;Lo;0;L;;;;;N;;;;; A6AD;BAMUM LETTER RIEE;Lo;0;L;;;;;N;;;;; A6AE;BAMUM LETTER LEEEE;Lo;0;L;;;;;N;;;;; A6AF;BAMUM LETTER MEEEE;Lo;0;L;;;;;N;;;;; A6B0;BAMUM LETTER TAA;Lo;0;L;;;;;N;;;;; A6B1;BAMUM LETTER NDAA;Lo;0;L;;;;;N;;;;; A6B2;BAMUM LETTER NJAEM;Lo;0;L;;;;;N;;;;; A6B3;BAMUM LETTER M;Lo;0;L;;;;;N;;;;; A6B4;BAMUM LETTER SUU;Lo;0;L;;;;;N;;;;; A6B5;BAMUM LETTER MU;Lo;0;L;;;;;N;;;;; A6B6;BAMUM LETTER SHII;Lo;0;L;;;;;N;;;;; A6B7;BAMUM LETTER SI;Lo;0;L;;;;;N;;;;; A6B8;BAMUM LETTER SHEUX;Lo;0;L;;;;;N;;;;; A6B9;BAMUM LETTER SEUX;Lo;0;L;;;;;N;;;;; A6BA;BAMUM LETTER KYEE;Lo;0;L;;;;;N;;;;; A6BB;BAMUM LETTER KET;Lo;0;L;;;;;N;;;;; A6BC;BAMUM LETTER NUAE;Lo;0;L;;;;;N;;;;; A6BD;BAMUM LETTER NU;Lo;0;L;;;;;N;;;;; A6BE;BAMUM LETTER NJUAE;Lo;0;L;;;;;N;;;;; A6BF;BAMUM LETTER YOQ;Lo;0;L;;;;;N;;;;; A6C0;BAMUM LETTER SHU;Lo;0;L;;;;;N;;;;; A6C1;BAMUM LETTER YUQ;Lo;0;L;;;;;N;;;;; A6C2;BAMUM LETTER YA;Lo;0;L;;;;;N;;;;; A6C3;BAMUM LETTER NSHA;Lo;0;L;;;;;N;;;;; A6C4;BAMUM LETTER KEUX;Lo;0;L;;;;;N;;;;; A6C5;BAMUM LETTER PEUX;Lo;0;L;;;;;N;;;;; A6C6;BAMUM LETTER NJEE;Lo;0;L;;;;;N;;;;; A6C7;BAMUM LETTER NTEE;Lo;0;L;;;;;N;;;;; A6C8;BAMUM LETTER PUE;Lo;0;L;;;;;N;;;;; A6C9;BAMUM LETTER WUE;Lo;0;L;;;;;N;;;;; A6CA;BAMUM LETTER PEE;Lo;0;L;;;;;N;;;;; A6CB;BAMUM LETTER FEE;Lo;0;L;;;;;N;;;;; A6CC;BAMUM LETTER RU;Lo;0;L;;;;;N;;;;; A6CD;BAMUM LETTER LU;Lo;0;L;;;;;N;;;;; A6CE;BAMUM LETTER MI;Lo;0;L;;;;;N;;;;; A6CF;BAMUM LETTER NI;Lo;0;L;;;;;N;;;;; A6D0;BAMUM LETTER REUX;Lo;0;L;;;;;N;;;;; A6D1;BAMUM LETTER RAE;Lo;0;L;;;;;N;;;;; A6D2;BAMUM LETTER KEN;Lo;0;L;;;;;N;;;;; A6D3;BAMUM LETTER NGKWAEN;Lo;0;L;;;;;N;;;;; A6D4;BAMUM LETTER NGGA;Lo;0;L;;;;;N;;;;; A6D5;BAMUM LETTER NGA;Lo;0;L;;;;;N;;;;; A6D6;BAMUM LETTER SHO;Lo;0;L;;;;;N;;;;; A6D7;BAMUM LETTER PUAE;Lo;0;L;;;;;N;;;;; A6D8;BAMUM LETTER FU;Lo;0;L;;;;;N;;;;; A6D9;BAMUM LETTER FOM;Lo;0;L;;;;;N;;;;; A6DA;BAMUM LETTER WA;Lo;0;L;;;;;N;;;;; A6DB;BAMUM LETTER NA;Lo;0;L;;;;;N;;;;; A6DC;BAMUM LETTER LI;Lo;0;L;;;;;N;;;;; A6DD;BAMUM LETTER PI;Lo;0;L;;;;;N;;;;; A6DE;BAMUM LETTER LOQ;Lo;0;L;;;;;N;;;;; A6DF;BAMUM LETTER KO;Lo;0;L;;;;;N;;;;; A6E0;BAMUM LETTER MBEN;Lo;0;L;;;;;N;;;;; A6E1;BAMUM LETTER REN;Lo;0;L;;;;;N;;;;; A6E2;BAMUM LETTER MEN;Lo;0;L;;;;;N;;;;; A6E3;BAMUM LETTER MA;Lo;0;L;;;;;N;;;;; A6E4;BAMUM LETTER TI;Lo;0;L;;;;;N;;;;; A6E5;BAMUM LETTER KI;Lo;0;L;;;;;N;;;;; A6E6;BAMUM LETTER MO;Nl;0;L;;;;1;N;;;;; A6E7;BAMUM LETTER MBAA;Nl;0;L;;;;2;N;;;;; A6E8;BAMUM LETTER TET;Nl;0;L;;;;3;N;;;;; A6E9;BAMUM LETTER KPA;Nl;0;L;;;;4;N;;;;; A6EA;BAMUM LETTER TEN;Nl;0;L;;;;5;N;;;;; A6EB;BAMUM LETTER NTUU;Nl;0;L;;;;6;N;;;;; A6EC;BAMUM LETTER SAMBA;Nl;0;L;;;;7;N;;;;; A6ED;BAMUM LETTER FAAMAE;Nl;0;L;;;;8;N;;;;; A6EE;BAMUM LETTER KOVUU;Nl;0;L;;;;9;N;;;;; A6EF;BAMUM LETTER KOGHOM;Nl;0;L;;;;0;N;;;;; A6F0;BAMUM COMBINING MARK KOQNDON;Mn;230;NSM;;;;;N;;;;; A6F1;BAMUM COMBINING MARK TUKWENTIS;Mn;230;NSM;;;;;N;;;;; A6F2;BAMUM NJAEMLI;Po;0;L;;;;;N;;;;; A6F3;BAMUM FULL STOP;Po;0;L;;;;;N;;;;; A6F4;BAMUM COLON;Po;0;L;;;;;N;;;;; A6F5;BAMUM COMMA;Po;0;L;;;;;N;;;;; A6F6;BAMUM SEMICOLON;Po;0;L;;;;;N;;;;; A6F7;BAMUM QUESTION MARK;Po;0;L;;;;;N;;;;; A700;MODIFIER LETTER CHINESE TONE YIN PING;Sk;0;ON;;;;;N;;;;; A701;MODIFIER LETTER CHINESE TONE YANG PING;Sk;0;ON;;;;;N;;;;; A702;MODIFIER LETTER CHINESE TONE YIN SHANG;Sk;0;ON;;;;;N;;;;; A703;MODIFIER LETTER CHINESE TONE YANG SHANG;Sk;0;ON;;;;;N;;;;; A704;MODIFIER LETTER CHINESE TONE YIN QU;Sk;0;ON;;;;;N;;;;; A705;MODIFIER LETTER CHINESE TONE YANG QU;Sk;0;ON;;;;;N;;;;; A706;MODIFIER LETTER CHINESE TONE YIN RU;Sk;0;ON;;;;;N;;;;; A707;MODIFIER LETTER CHINESE TONE YANG RU;Sk;0;ON;;;;;N;;;;; A708;MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; A709;MODIFIER LETTER HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; A70A;MODIFIER LETTER MID DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; A70B;MODIFIER LETTER LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; A70C;MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; A70D;MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A70E;MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A70F;MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A710;MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A711;MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A712;MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A713;MODIFIER LETTER HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A714;MODIFIER LETTER MID LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A715;MODIFIER LETTER LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A716;MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A717;MODIFIER LETTER DOT VERTICAL BAR;Lm;0;ON;;;;;N;;;;; A718;MODIFIER LETTER DOT SLASH;Lm;0;ON;;;;;N;;;;; A719;MODIFIER LETTER DOT HORIZONTAL BAR;Lm;0;ON;;;;;N;;;;; A71A;MODIFIER LETTER LOWER RIGHT CORNER ANGLE;Lm;0;ON;;;;;N;;;;; A71B;MODIFIER LETTER RAISED UP ARROW;Lm;0;ON;;;;;N;;;;; A71C;MODIFIER LETTER RAISED DOWN ARROW;Lm;0;ON;;;;;N;;;;; A71D;MODIFIER LETTER RAISED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;; A71E;MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;; A71F;MODIFIER LETTER LOW INVERTED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;; A720;MODIFIER LETTER STRESS AND HIGH TONE;Sk;0;ON;;;;;N;;;;; A721;MODIFIER LETTER STRESS AND LOW TONE;Sk;0;ON;;;;;N;;;;; A722;LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF;Lu;0;L;;;;;N;;;;A723; A723;LATIN SMALL LETTER EGYPTOLOGICAL ALEF;Ll;0;L;;;;;N;;;A722;;A722 A724;LATIN CAPITAL LETTER EGYPTOLOGICAL AIN;Lu;0;L;;;;;N;;;;A725; A725;LATIN SMALL LETTER EGYPTOLOGICAL AIN;Ll;0;L;;;;;N;;;A724;;A724 A726;LATIN CAPITAL LETTER HENG;Lu;0;L;;;;;N;;;;A727; A727;LATIN SMALL LETTER HENG;Ll;0;L;;;;;N;;;A726;;A726 A728;LATIN CAPITAL LETTER TZ;Lu;0;L;;;;;N;;;;A729; A729;LATIN SMALL LETTER TZ;Ll;0;L;;;;;N;;;A728;;A728 A72A;LATIN CAPITAL LETTER TRESILLO;Lu;0;L;;;;;N;;;;A72B; A72B;LATIN SMALL LETTER TRESILLO;Ll;0;L;;;;;N;;;A72A;;A72A A72C;LATIN CAPITAL LETTER CUATRILLO;Lu;0;L;;;;;N;;;;A72D; A72D;LATIN SMALL LETTER CUATRILLO;Ll;0;L;;;;;N;;;A72C;;A72C A72E;LATIN CAPITAL LETTER CUATRILLO WITH COMMA;Lu;0;L;;;;;N;;;;A72F; A72F;LATIN SMALL LETTER CUATRILLO WITH COMMA;Ll;0;L;;;;;N;;;A72E;;A72E A730;LATIN LETTER SMALL CAPITAL F;Ll;0;L;;;;;N;;;;; A731;LATIN LETTER SMALL CAPITAL S;Ll;0;L;;;;;N;;;;; A732;LATIN CAPITAL LETTER AA;Lu;0;L;;;;;N;;;;A733; A733;LATIN SMALL LETTER AA;Ll;0;L;;;;;N;;;A732;;A732 A734;LATIN CAPITAL LETTER AO;Lu;0;L;;;;;N;;;;A735; A735;LATIN SMALL LETTER AO;Ll;0;L;;;;;N;;;A734;;A734 A736;LATIN CAPITAL LETTER AU;Lu;0;L;;;;;N;;;;A737; A737;LATIN SMALL LETTER AU;Ll;0;L;;;;;N;;;A736;;A736 A738;LATIN CAPITAL LETTER AV;Lu;0;L;;;;;N;;;;A739; A739;LATIN SMALL LETTER AV;Ll;0;L;;;;;N;;;A738;;A738 A73A;LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR;Lu;0;L;;;;;N;;;;A73B; A73B;LATIN SMALL LETTER AV WITH HORIZONTAL BAR;Ll;0;L;;;;;N;;;A73A;;A73A A73C;LATIN CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;A73D; A73D;LATIN SMALL LETTER AY;Ll;0;L;;;;;N;;;A73C;;A73C A73E;LATIN CAPITAL LETTER REVERSED C WITH DOT;Lu;0;L;;;;;N;;;;A73F; A73F;LATIN SMALL LETTER REVERSED C WITH DOT;Ll;0;L;;;;;N;;;A73E;;A73E A740;LATIN CAPITAL LETTER K WITH STROKE;Lu;0;L;;;;;N;;;;A741; A741;LATIN SMALL LETTER K WITH STROKE;Ll;0;L;;;;;N;;;A740;;A740 A742;LATIN CAPITAL LETTER K WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A743; A743;LATIN SMALL LETTER K WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A742;;A742 A744;LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A745; A745;LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE;Ll;0;L;;;;;N;;;A744;;A744 A746;LATIN CAPITAL LETTER BROKEN L;Lu;0;L;;;;;N;;;;A747; A747;LATIN SMALL LETTER BROKEN L;Ll;0;L;;;;;N;;;A746;;A746 A748;LATIN CAPITAL LETTER L WITH HIGH STROKE;Lu;0;L;;;;;N;;;;A749; A749;LATIN SMALL LETTER L WITH HIGH STROKE;Ll;0;L;;;;;N;;;A748;;A748 A74A;LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY;Lu;0;L;;;;;N;;;;A74B; A74B;LATIN SMALL LETTER O WITH LONG STROKE OVERLAY;Ll;0;L;;;;;N;;;A74A;;A74A A74C;LATIN CAPITAL LETTER O WITH LOOP;Lu;0;L;;;;;N;;;;A74D; A74D;LATIN SMALL LETTER O WITH LOOP;Ll;0;L;;;;;N;;;A74C;;A74C A74E;LATIN CAPITAL LETTER OO;Lu;0;L;;;;;N;;;;A74F; A74F;LATIN SMALL LETTER OO;Ll;0;L;;;;;N;;;A74E;;A74E A750;LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A751; A751;LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A750;;A750 A752;LATIN CAPITAL LETTER P WITH FLOURISH;Lu;0;L;;;;;N;;;;A753; A753;LATIN SMALL LETTER P WITH FLOURISH;Ll;0;L;;;;;N;;;A752;;A752 A754;LATIN CAPITAL LETTER P WITH SQUIRREL TAIL;Lu;0;L;;;;;N;;;;A755; A755;LATIN SMALL LETTER P WITH SQUIRREL TAIL;Ll;0;L;;;;;N;;;A754;;A754 A756;LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A757; A757;LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A756;;A756 A758;LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A759; A759;LATIN SMALL LETTER Q WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A758;;A758 A75A;LATIN CAPITAL LETTER R ROTUNDA;Lu;0;L;;;;;N;;;;A75B; A75B;LATIN SMALL LETTER R ROTUNDA;Ll;0;L;;;;;N;;;A75A;;A75A A75C;LATIN CAPITAL LETTER RUM ROTUNDA;Lu;0;L;;;;;N;;;;A75D; A75D;LATIN SMALL LETTER RUM ROTUNDA;Ll;0;L;;;;;N;;;A75C;;A75C A75E;LATIN CAPITAL LETTER V WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A75F; A75F;LATIN SMALL LETTER V WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A75E;;A75E A760;LATIN CAPITAL LETTER VY;Lu;0;L;;;;;N;;;;A761; A761;LATIN SMALL LETTER VY;Ll;0;L;;;;;N;;;A760;;A760 A762;LATIN CAPITAL LETTER VISIGOTHIC Z;Lu;0;L;;;;;N;;;;A763; A763;LATIN SMALL LETTER VISIGOTHIC Z;Ll;0;L;;;;;N;;;A762;;A762 A764;LATIN CAPITAL LETTER THORN WITH STROKE;Lu;0;L;;;;;N;;;;A765; A765;LATIN SMALL LETTER THORN WITH STROKE;Ll;0;L;;;;;N;;;A764;;A764 A766;LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A767; A767;LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A766;;A766 A768;LATIN CAPITAL LETTER VEND;Lu;0;L;;;;;N;;;;A769; A769;LATIN SMALL LETTER VEND;Ll;0;L;;;;;N;;;A768;;A768 A76A;LATIN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;A76B; A76B;LATIN SMALL LETTER ET;Ll;0;L;;;;;N;;;A76A;;A76A A76C;LATIN CAPITAL LETTER IS;Lu;0;L;;;;;N;;;;A76D; A76D;LATIN SMALL LETTER IS;Ll;0;L;;;;;N;;;A76C;;A76C A76E;LATIN CAPITAL LETTER CON;Lu;0;L;;;;;N;;;;A76F; A76F;LATIN SMALL LETTER CON;Ll;0;L;;;;;N;;;A76E;;A76E A770;MODIFIER LETTER US;Lm;0;L; A76F;;;;N;;;;; A771;LATIN SMALL LETTER DUM;Ll;0;L;;;;;N;;;;; A772;LATIN SMALL LETTER LUM;Ll;0;L;;;;;N;;;;; A773;LATIN SMALL LETTER MUM;Ll;0;L;;;;;N;;;;; A774;LATIN SMALL LETTER NUM;Ll;0;L;;;;;N;;;;; A775;LATIN SMALL LETTER RUM;Ll;0;L;;;;;N;;;;; A776;LATIN LETTER SMALL CAPITAL RUM;Ll;0;L;;;;;N;;;;; A777;LATIN SMALL LETTER TUM;Ll;0;L;;;;;N;;;;; A778;LATIN SMALL LETTER UM;Ll;0;L;;;;;N;;;;; A779;LATIN CAPITAL LETTER INSULAR D;Lu;0;L;;;;;N;;;;A77A; A77A;LATIN SMALL LETTER INSULAR D;Ll;0;L;;;;;N;;;A779;;A779 A77B;LATIN CAPITAL LETTER INSULAR F;Lu;0;L;;;;;N;;;;A77C; A77C;LATIN SMALL LETTER INSULAR F;Ll;0;L;;;;;N;;;A77B;;A77B A77D;LATIN CAPITAL LETTER INSULAR G;Lu;0;L;;;;;N;;;;1D79; A77E;LATIN CAPITAL LETTER TURNED INSULAR G;Lu;0;L;;;;;N;;;;A77F; A77F;LATIN SMALL LETTER TURNED INSULAR G;Ll;0;L;;;;;N;;;A77E;;A77E A780;LATIN CAPITAL LETTER TURNED L;Lu;0;L;;;;;N;;;;A781; A781;LATIN SMALL LETTER TURNED L;Ll;0;L;;;;;N;;;A780;;A780 A782;LATIN CAPITAL LETTER INSULAR R;Lu;0;L;;;;;N;;;;A783; A783;LATIN SMALL LETTER INSULAR R;Ll;0;L;;;;;N;;;A782;;A782 A784;LATIN CAPITAL LETTER INSULAR S;Lu;0;L;;;;;N;;;;A785; A785;LATIN SMALL LETTER INSULAR S;Ll;0;L;;;;;N;;;A784;;A784 A786;LATIN CAPITAL LETTER INSULAR T;Lu;0;L;;;;;N;;;;A787; A787;LATIN SMALL LETTER INSULAR T;Ll;0;L;;;;;N;;;A786;;A786 A788;MODIFIER LETTER LOW CIRCUMFLEX ACCENT;Lm;0;ON;;;;;N;;;;; A789;MODIFIER LETTER COLON;Sk;0;L;;;;;N;;;;; A78A;MODIFIER LETTER SHORT EQUALS SIGN;Sk;0;L;;;;;N;;;;; A78B;LATIN CAPITAL LETTER SALTILLO;Lu;0;L;;;;;N;;;;A78C; A78C;LATIN SMALL LETTER SALTILLO;Ll;0;L;;;;;N;;;A78B;;A78B A78D;LATIN CAPITAL LETTER TURNED H;Lu;0;L;;;;;N;;;;0265; A78E;LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT;Ll;0;L;;;;;N;;;;; A78F;LATIN LETTER SINOLOGICAL DOT;Lo;0;L;;;;;N;;;;; A790;LATIN CAPITAL LETTER N WITH DESCENDER;Lu;0;L;;;;;N;;;;A791; A791;LATIN SMALL LETTER N WITH DESCENDER;Ll;0;L;;;;;N;;;A790;;A790 A792;LATIN CAPITAL LETTER C WITH BAR;Lu;0;L;;;;;N;;;;A793; A793;LATIN SMALL LETTER C WITH BAR;Ll;0;L;;;;;N;;;A792;;A792 A794;LATIN SMALL LETTER C WITH PALATAL HOOK;Ll;0;L;;;;;N;;;A7C4;;A7C4 A795;LATIN SMALL LETTER H WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; A796;LATIN CAPITAL LETTER B WITH FLOURISH;Lu;0;L;;;;;N;;;;A797; A797;LATIN SMALL LETTER B WITH FLOURISH;Ll;0;L;;;;;N;;;A796;;A796 A798;LATIN CAPITAL LETTER F WITH STROKE;Lu;0;L;;;;;N;;;;A799; A799;LATIN SMALL LETTER F WITH STROKE;Ll;0;L;;;;;N;;;A798;;A798 A79A;LATIN CAPITAL LETTER VOLAPUK AE;Lu;0;L;;;;;N;;;;A79B; A79B;LATIN SMALL LETTER VOLAPUK AE;Ll;0;L;;;;;N;;;A79A;;A79A A79C;LATIN CAPITAL LETTER VOLAPUK OE;Lu;0;L;;;;;N;;;;A79D; A79D;LATIN SMALL LETTER VOLAPUK OE;Ll;0;L;;;;;N;;;A79C;;A79C A79E;LATIN CAPITAL LETTER VOLAPUK UE;Lu;0;L;;;;;N;;;;A79F; A79F;LATIN SMALL LETTER VOLAPUK UE;Ll;0;L;;;;;N;;;A79E;;A79E A7A0;LATIN CAPITAL LETTER G WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A1; A7A1;LATIN SMALL LETTER G WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A0;;A7A0 A7A2;LATIN CAPITAL LETTER K WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A3; A7A3;LATIN SMALL LETTER K WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A2;;A7A2 A7A4;LATIN CAPITAL LETTER N WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A5; A7A5;LATIN SMALL LETTER N WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A4;;A7A4 A7A6;LATIN CAPITAL LETTER R WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A7; A7A7;LATIN SMALL LETTER R WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A6;;A7A6 A7A8;LATIN CAPITAL LETTER S WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A9; A7A9;LATIN SMALL LETTER S WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A8;;A7A8 A7AA;LATIN CAPITAL LETTER H WITH HOOK;Lu;0;L;;;;;N;;;;0266; A7AB;LATIN CAPITAL LETTER REVERSED OPEN E;Lu;0;L;;;;;N;;;;025C; A7AC;LATIN CAPITAL LETTER SCRIPT G;Lu;0;L;;;;;N;;;;0261; A7AD;LATIN CAPITAL LETTER L WITH BELT;Lu;0;L;;;;;N;;;;026C; A7AE;LATIN CAPITAL LETTER SMALL CAPITAL I;Lu;0;L;;;;;N;;;;026A; A7AF;LATIN LETTER SMALL CAPITAL Q;Ll;0;L;;;;;N;;;;; A7B0;LATIN CAPITAL LETTER TURNED K;Lu;0;L;;;;;N;;;;029E; A7B1;LATIN CAPITAL LETTER TURNED T;Lu;0;L;;;;;N;;;;0287; A7B2;LATIN CAPITAL LETTER J WITH CROSSED-TAIL;Lu;0;L;;;;;N;;;;029D; A7B3;LATIN CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;AB53; A7B4;LATIN CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;A7B5; A7B5;LATIN SMALL LETTER BETA;Ll;0;L;;;;;N;;;A7B4;;A7B4 A7B6;LATIN CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;A7B7; A7B7;LATIN SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;A7B6;;A7B6 A7B8;LATIN CAPITAL LETTER U WITH STROKE;Lu;0;L;;;;;N;;;;A7B9; A7B9;LATIN SMALL LETTER U WITH STROKE;Ll;0;L;;;;;N;;;A7B8;;A7B8 A7BA;LATIN CAPITAL LETTER GLOTTAL A;Lu;0;L;;;;;N;;;;A7BB; A7BB;LATIN SMALL LETTER GLOTTAL A;Ll;0;L;;;;;N;;;A7BA;;A7BA A7BC;LATIN CAPITAL LETTER GLOTTAL I;Lu;0;L;;;;;N;;;;A7BD; A7BD;LATIN SMALL LETTER GLOTTAL I;Ll;0;L;;;;;N;;;A7BC;;A7BC A7BE;LATIN CAPITAL LETTER GLOTTAL U;Lu;0;L;;;;;N;;;;A7BF; A7BF;LATIN SMALL LETTER GLOTTAL U;Ll;0;L;;;;;N;;;A7BE;;A7BE A7C0;LATIN CAPITAL LETTER OLD POLISH O;Lu;0;L;;;;;N;;;;A7C1; A7C1;LATIN SMALL LETTER OLD POLISH O;Ll;0;L;;;;;N;;;A7C0;;A7C0 A7C2;LATIN CAPITAL LETTER ANGLICANA W;Lu;0;L;;;;;N;;;;A7C3; A7C3;LATIN SMALL LETTER ANGLICANA W;Ll;0;L;;;;;N;;;A7C2;;A7C2 A7C4;LATIN CAPITAL LETTER C WITH PALATAL HOOK;Lu;0;L;;;;;N;;;;A794; A7C5;LATIN CAPITAL LETTER S WITH HOOK;Lu;0;L;;;;;N;;;;0282; A7C6;LATIN CAPITAL LETTER Z WITH PALATAL HOOK;Lu;0;L;;;;;N;;;;1D8E; A7C7;LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY;Lu;0;L;;;;;N;;;;A7C8; A7C8;LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C7;;A7C7 A7C9;LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY;Lu;0;L;;;;;N;;;;A7CA; A7CA;LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C9;;A7C9 A7D0;LATIN CAPITAL LETTER CLOSED INSULAR G;Lu;0;L;;;;;N;;;;A7D1; A7D1;LATIN SMALL LETTER CLOSED INSULAR G;Ll;0;L;;;;;N;;;A7D0;;A7D0 A7D3;LATIN SMALL LETTER DOUBLE THORN;Ll;0;L;;;;;N;;;;; A7D5;LATIN SMALL LETTER DOUBLE WYNN;Ll;0;L;;;;;N;;;;; A7D6;LATIN CAPITAL LETTER MIDDLE SCOTS S;Lu;0;L;;;;;N;;;;A7D7; A7D7;LATIN SMALL LETTER MIDDLE SCOTS S;Ll;0;L;;;;;N;;;A7D6;;A7D6 A7D8;LATIN CAPITAL LETTER SIGMOID S;Lu;0;L;;;;;N;;;;A7D9; A7D9;LATIN SMALL LETTER SIGMOID S;Ll;0;L;;;;;N;;;A7D8;;A7D8 A7F2;MODIFIER LETTER CAPITAL C;Lm;0;L; 0043;;;;N;;;;; A7F3;MODIFIER LETTER CAPITAL F;Lm;0;L; 0046;;;;N;;;;; A7F4;MODIFIER LETTER CAPITAL Q;Lm;0;L; 0051;;;;N;;;;; A7F5;LATIN CAPITAL LETTER REVERSED HALF H;Lu;0;L;;;;;N;;;;A7F6; A7F6;LATIN SMALL LETTER REVERSED HALF H;Ll;0;L;;;;;N;;;A7F5;;A7F5 A7F7;LATIN EPIGRAPHIC LETTER SIDEWAYS I;Lo;0;L;;;;;N;;;;; A7F8;MODIFIER LETTER CAPITAL H WITH STROKE;Lm;0;L; 0126;;;;N;;;;; A7F9;MODIFIER LETTER SMALL LIGATURE OE;Lm;0;L; 0153;;;;N;;;;; A7FA;LATIN LETTER SMALL CAPITAL TURNED M;Ll;0;L;;;;;N;;;;; A7FB;LATIN EPIGRAPHIC LETTER REVERSED F;Lo;0;L;;;;;N;;;;; A7FC;LATIN EPIGRAPHIC LETTER REVERSED P;Lo;0;L;;;;;N;;;;; A7FD;LATIN EPIGRAPHIC LETTER INVERTED M;Lo;0;L;;;;;N;;;;; A7FE;LATIN EPIGRAPHIC LETTER I LONGA;Lo;0;L;;;;;N;;;;; A7FF;LATIN EPIGRAPHIC LETTER ARCHAIC M;Lo;0;L;;;;;N;;;;; A800;SYLOTI NAGRI LETTER A;Lo;0;L;;;;;N;;;;; A801;SYLOTI NAGRI LETTER I;Lo;0;L;;;;;N;;;;; A802;SYLOTI NAGRI SIGN DVISVARA;Mn;0;NSM;;;;;N;;;;; A803;SYLOTI NAGRI LETTER U;Lo;0;L;;;;;N;;;;; A804;SYLOTI NAGRI LETTER E;Lo;0;L;;;;;N;;;;; A805;SYLOTI NAGRI LETTER O;Lo;0;L;;;;;N;;;;; A806;SYLOTI NAGRI SIGN HASANTA;Mn;9;NSM;;;;;N;;;;; A807;SYLOTI NAGRI LETTER KO;Lo;0;L;;;;;N;;;;; A808;SYLOTI NAGRI LETTER KHO;Lo;0;L;;;;;N;;;;; A809;SYLOTI NAGRI LETTER GO;Lo;0;L;;;;;N;;;;; A80A;SYLOTI NAGRI LETTER GHO;Lo;0;L;;;;;N;;;;; A80B;SYLOTI NAGRI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; A80C;SYLOTI NAGRI LETTER CO;Lo;0;L;;;;;N;;;;; A80D;SYLOTI NAGRI LETTER CHO;Lo;0;L;;;;;N;;;;; A80E;SYLOTI NAGRI LETTER JO;Lo;0;L;;;;;N;;;;; A80F;SYLOTI NAGRI LETTER JHO;Lo;0;L;;;;;N;;;;; A810;SYLOTI NAGRI LETTER TTO;Lo;0;L;;;;;N;;;;; A811;SYLOTI NAGRI LETTER TTHO;Lo;0;L;;;;;N;;;;; A812;SYLOTI NAGRI LETTER DDO;Lo;0;L;;;;;N;;;;; A813;SYLOTI NAGRI LETTER DDHO;Lo;0;L;;;;;N;;;;; A814;SYLOTI NAGRI LETTER TO;Lo;0;L;;;;;N;;;;; A815;SYLOTI NAGRI LETTER THO;Lo;0;L;;;;;N;;;;; A816;SYLOTI NAGRI LETTER DO;Lo;0;L;;;;;N;;;;; A817;SYLOTI NAGRI LETTER DHO;Lo;0;L;;;;;N;;;;; A818;SYLOTI NAGRI LETTER NO;Lo;0;L;;;;;N;;;;; A819;SYLOTI NAGRI LETTER PO;Lo;0;L;;;;;N;;;;; A81A;SYLOTI NAGRI LETTER PHO;Lo;0;L;;;;;N;;;;; A81B;SYLOTI NAGRI LETTER BO;Lo;0;L;;;;;N;;;;; A81C;SYLOTI NAGRI LETTER BHO;Lo;0;L;;;;;N;;;;; A81D;SYLOTI NAGRI LETTER MO;Lo;0;L;;;;;N;;;;; A81E;SYLOTI NAGRI LETTER RO;Lo;0;L;;;;;N;;;;; A81F;SYLOTI NAGRI LETTER LO;Lo;0;L;;;;;N;;;;; A820;SYLOTI NAGRI LETTER RRO;Lo;0;L;;;;;N;;;;; A821;SYLOTI NAGRI LETTER SO;Lo;0;L;;;;;N;;;;; A822;SYLOTI NAGRI LETTER HO;Lo;0;L;;;;;N;;;;; A823;SYLOTI NAGRI VOWEL SIGN A;Mc;0;L;;;;;N;;;;; A824;SYLOTI NAGRI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; A825;SYLOTI NAGRI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; A826;SYLOTI NAGRI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; A827;SYLOTI NAGRI VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; A828;SYLOTI NAGRI POETRY MARK-1;So;0;ON;;;;;N;;;;; A829;SYLOTI NAGRI POETRY MARK-2;So;0;ON;;;;;N;;;;; A82A;SYLOTI NAGRI POETRY MARK-3;So;0;ON;;;;;N;;;;; A82B;SYLOTI NAGRI POETRY MARK-4;So;0;ON;;;;;N;;;;; A82C;SYLOTI NAGRI SIGN ALTERNATE HASANTA;Mn;9;NSM;;;;;N;;;;; A830;NORTH INDIC FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;; A831;NORTH INDIC FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;; A832;NORTH INDIC FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;; A833;NORTH INDIC FRACTION ONE SIXTEENTH;No;0;L;;;;1/16;N;;;;; A834;NORTH INDIC FRACTION ONE EIGHTH;No;0;L;;;;1/8;N;;;;; A835;NORTH INDIC FRACTION THREE SIXTEENTHS;No;0;L;;;;3/16;N;;;;; A836;NORTH INDIC QUARTER MARK;So;0;L;;;;;N;;;;; A837;NORTH INDIC PLACEHOLDER MARK;So;0;L;;;;;N;;;;; A838;NORTH INDIC RUPEE MARK;Sc;0;ET;;;;;N;;;;; A839;NORTH INDIC QUANTITY MARK;So;0;ET;;;;;N;;;;; A840;PHAGS-PA LETTER KA;Lo;0;L;;;;;N;;;;; A841;PHAGS-PA LETTER KHA;Lo;0;L;;;;;N;;;;; A842;PHAGS-PA LETTER GA;Lo;0;L;;;;;N;;;;; A843;PHAGS-PA LETTER NGA;Lo;0;L;;;;;N;;;;; A844;PHAGS-PA LETTER CA;Lo;0;L;;;;;N;;;;; A845;PHAGS-PA LETTER CHA;Lo;0;L;;;;;N;;;;; A846;PHAGS-PA LETTER JA;Lo;0;L;;;;;N;;;;; A847;PHAGS-PA LETTER NYA;Lo;0;L;;;;;N;;;;; A848;PHAGS-PA LETTER TA;Lo;0;L;;;;;N;;;;; A849;PHAGS-PA LETTER THA;Lo;0;L;;;;;N;;;;; A84A;PHAGS-PA LETTER DA;Lo;0;L;;;;;N;;;;; A84B;PHAGS-PA LETTER NA;Lo;0;L;;;;;N;;;;; A84C;PHAGS-PA LETTER PA;Lo;0;L;;;;;N;;;;; A84D;PHAGS-PA LETTER PHA;Lo;0;L;;;;;N;;;;; A84E;PHAGS-PA LETTER BA;Lo;0;L;;;;;N;;;;; A84F;PHAGS-PA LETTER MA;Lo;0;L;;;;;N;;;;; A850;PHAGS-PA LETTER TSA;Lo;0;L;;;;;N;;;;; A851;PHAGS-PA LETTER TSHA;Lo;0;L;;;;;N;;;;; A852;PHAGS-PA LETTER DZA;Lo;0;L;;;;;N;;;;; A853;PHAGS-PA LETTER WA;Lo;0;L;;;;;N;;;;; A854;PHAGS-PA LETTER ZHA;Lo;0;L;;;;;N;;;;; A855;PHAGS-PA LETTER ZA;Lo;0;L;;;;;N;;;;; A856;PHAGS-PA LETTER SMALL A;Lo;0;L;;;;;N;;;;; A857;PHAGS-PA LETTER YA;Lo;0;L;;;;;N;;;;; A858;PHAGS-PA LETTER RA;Lo;0;L;;;;;N;;;;; A859;PHAGS-PA LETTER LA;Lo;0;L;;;;;N;;;;; A85A;PHAGS-PA LETTER SHA;Lo;0;L;;;;;N;;;;; A85B;PHAGS-PA LETTER SA;Lo;0;L;;;;;N;;;;; A85C;PHAGS-PA LETTER HA;Lo;0;L;;;;;N;;;;; A85D;PHAGS-PA LETTER A;Lo;0;L;;;;;N;;;;; A85E;PHAGS-PA LETTER I;Lo;0;L;;;;;N;;;;; A85F;PHAGS-PA LETTER U;Lo;0;L;;;;;N;;;;; A860;PHAGS-PA LETTER E;Lo;0;L;;;;;N;;;;; A861;PHAGS-PA LETTER O;Lo;0;L;;;;;N;;;;; A862;PHAGS-PA LETTER QA;Lo;0;L;;;;;N;;;;; A863;PHAGS-PA LETTER XA;Lo;0;L;;;;;N;;;;; A864;PHAGS-PA LETTER FA;Lo;0;L;;;;;N;;;;; A865;PHAGS-PA LETTER GGA;Lo;0;L;;;;;N;;;;; A866;PHAGS-PA LETTER EE;Lo;0;L;;;;;N;;;;; A867;PHAGS-PA SUBJOINED LETTER WA;Lo;0;L;;;;;N;;;;; A868;PHAGS-PA SUBJOINED LETTER YA;Lo;0;L;;;;;N;;;;; A869;PHAGS-PA LETTER TTA;Lo;0;L;;;;;N;;;;; A86A;PHAGS-PA LETTER TTHA;Lo;0;L;;;;;N;;;;; A86B;PHAGS-PA LETTER DDA;Lo;0;L;;;;;N;;;;; A86C;PHAGS-PA LETTER NNA;Lo;0;L;;;;;N;;;;; A86D;PHAGS-PA LETTER ALTERNATE YA;Lo;0;L;;;;;N;;;;; A86E;PHAGS-PA LETTER VOICELESS SHA;Lo;0;L;;;;;N;;;;; A86F;PHAGS-PA LETTER VOICED HA;Lo;0;L;;;;;N;;;;; A870;PHAGS-PA LETTER ASPIRATED FA;Lo;0;L;;;;;N;;;;; A871;PHAGS-PA SUBJOINED LETTER RA;Lo;0;L;;;;;N;;;;; A872;PHAGS-PA SUPERFIXED LETTER RA;Lo;0;L;;;;;N;;;;; A873;PHAGS-PA LETTER CANDRABINDU;Lo;0;L;;;;;N;;;;; A874;PHAGS-PA SINGLE HEAD MARK;Po;0;ON;;;;;N;;;;; A875;PHAGS-PA DOUBLE HEAD MARK;Po;0;ON;;;;;N;;;;; A876;PHAGS-PA MARK SHAD;Po;0;ON;;;;;N;;;;; A877;PHAGS-PA MARK DOUBLE SHAD;Po;0;ON;;;;;N;;;;; A880;SAURASHTRA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; A881;SAURASHTRA SIGN VISARGA;Mc;0;L;;;;;N;;;;; A882;SAURASHTRA LETTER A;Lo;0;L;;;;;N;;;;; A883;SAURASHTRA LETTER AA;Lo;0;L;;;;;N;;;;; A884;SAURASHTRA LETTER I;Lo;0;L;;;;;N;;;;; A885;SAURASHTRA LETTER II;Lo;0;L;;;;;N;;;;; A886;SAURASHTRA LETTER U;Lo;0;L;;;;;N;;;;; A887;SAURASHTRA LETTER UU;Lo;0;L;;;;;N;;;;; A888;SAURASHTRA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; A889;SAURASHTRA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; A88A;SAURASHTRA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; A88B;SAURASHTRA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; A88C;SAURASHTRA LETTER E;Lo;0;L;;;;;N;;;;; A88D;SAURASHTRA LETTER EE;Lo;0;L;;;;;N;;;;; A88E;SAURASHTRA LETTER AI;Lo;0;L;;;;;N;;;;; A88F;SAURASHTRA LETTER O;Lo;0;L;;;;;N;;;;; A890;SAURASHTRA LETTER OO;Lo;0;L;;;;;N;;;;; A891;SAURASHTRA LETTER AU;Lo;0;L;;;;;N;;;;; A892;SAURASHTRA LETTER KA;Lo;0;L;;;;;N;;;;; A893;SAURASHTRA LETTER KHA;Lo;0;L;;;;;N;;;;; A894;SAURASHTRA LETTER GA;Lo;0;L;;;;;N;;;;; A895;SAURASHTRA LETTER GHA;Lo;0;L;;;;;N;;;;; A896;SAURASHTRA LETTER NGA;Lo;0;L;;;;;N;;;;; A897;SAURASHTRA LETTER CA;Lo;0;L;;;;;N;;;;; A898;SAURASHTRA LETTER CHA;Lo;0;L;;;;;N;;;;; A899;SAURASHTRA LETTER JA;Lo;0;L;;;;;N;;;;; A89A;SAURASHTRA LETTER JHA;Lo;0;L;;;;;N;;;;; A89B;SAURASHTRA LETTER NYA;Lo;0;L;;;;;N;;;;; A89C;SAURASHTRA LETTER TTA;Lo;0;L;;;;;N;;;;; A89D;SAURASHTRA LETTER TTHA;Lo;0;L;;;;;N;;;;; A89E;SAURASHTRA LETTER DDA;Lo;0;L;;;;;N;;;;; A89F;SAURASHTRA LETTER DDHA;Lo;0;L;;;;;N;;;;; A8A0;SAURASHTRA LETTER NNA;Lo;0;L;;;;;N;;;;; A8A1;SAURASHTRA LETTER TA;Lo;0;L;;;;;N;;;;; A8A2;SAURASHTRA LETTER THA;Lo;0;L;;;;;N;;;;; A8A3;SAURASHTRA LETTER DA;Lo;0;L;;;;;N;;;;; A8A4;SAURASHTRA LETTER DHA;Lo;0;L;;;;;N;;;;; A8A5;SAURASHTRA LETTER NA;Lo;0;L;;;;;N;;;;; A8A6;SAURASHTRA LETTER PA;Lo;0;L;;;;;N;;;;; A8A7;SAURASHTRA LETTER PHA;Lo;0;L;;;;;N;;;;; A8A8;SAURASHTRA LETTER BA;Lo;0;L;;;;;N;;;;; A8A9;SAURASHTRA LETTER BHA;Lo;0;L;;;;;N;;;;; A8AA;SAURASHTRA LETTER MA;Lo;0;L;;;;;N;;;;; A8AB;SAURASHTRA LETTER YA;Lo;0;L;;;;;N;;;;; A8AC;SAURASHTRA LETTER RA;Lo;0;L;;;;;N;;;;; A8AD;SAURASHTRA LETTER LA;Lo;0;L;;;;;N;;;;; A8AE;SAURASHTRA LETTER VA;Lo;0;L;;;;;N;;;;; A8AF;SAURASHTRA LETTER SHA;Lo;0;L;;;;;N;;;;; A8B0;SAURASHTRA LETTER SSA;Lo;0;L;;;;;N;;;;; A8B1;SAURASHTRA LETTER SA;Lo;0;L;;;;;N;;;;; A8B2;SAURASHTRA LETTER HA;Lo;0;L;;;;;N;;;;; A8B3;SAURASHTRA LETTER LLA;Lo;0;L;;;;;N;;;;; A8B4;SAURASHTRA CONSONANT SIGN HAARU;Mc;0;L;;;;;N;;;;; A8B5;SAURASHTRA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; A8B6;SAURASHTRA VOWEL SIGN I;Mc;0;L;;;;;N;;;;; A8B7;SAURASHTRA VOWEL SIGN II;Mc;0;L;;;;;N;;;;; A8B8;SAURASHTRA VOWEL SIGN U;Mc;0;L;;;;;N;;;;; A8B9;SAURASHTRA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; A8BA;SAURASHTRA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; A8BB;SAURASHTRA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; A8BC;SAURASHTRA VOWEL SIGN VOCALIC L;Mc;0;L;;;;;N;;;;; A8BD;SAURASHTRA VOWEL SIGN VOCALIC LL;Mc;0;L;;;;;N;;;;; A8BE;SAURASHTRA VOWEL SIGN E;Mc;0;L;;;;;N;;;;; A8BF;SAURASHTRA VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; A8C0;SAURASHTRA VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; A8C1;SAURASHTRA VOWEL SIGN O;Mc;0;L;;;;;N;;;;; A8C2;SAURASHTRA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; A8C3;SAURASHTRA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; A8C4;SAURASHTRA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; A8C5;SAURASHTRA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; A8CE;SAURASHTRA DANDA;Po;0;L;;;;;N;;;;; A8CF;SAURASHTRA DOUBLE DANDA;Po;0;L;;;;;N;;;;; A8D0;SAURASHTRA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; A8D1;SAURASHTRA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; A8D2;SAURASHTRA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; A8D3;SAURASHTRA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; A8D4;SAURASHTRA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; A8D5;SAURASHTRA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; A8D6;SAURASHTRA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; A8D7;SAURASHTRA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; A8D8;SAURASHTRA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; A8D9;SAURASHTRA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; A8E0;COMBINING DEVANAGARI DIGIT ZERO;Mn;230;NSM;;;;;N;;;;; A8E1;COMBINING DEVANAGARI DIGIT ONE;Mn;230;NSM;;;;;N;;;;; A8E2;COMBINING DEVANAGARI DIGIT TWO;Mn;230;NSM;;;;;N;;;;; A8E3;COMBINING DEVANAGARI DIGIT THREE;Mn;230;NSM;;;;;N;;;;; A8E4;COMBINING DEVANAGARI DIGIT FOUR;Mn;230;NSM;;;;;N;;;;; A8E5;COMBINING DEVANAGARI DIGIT FIVE;Mn;230;NSM;;;;;N;;;;; A8E6;COMBINING DEVANAGARI DIGIT SIX;Mn;230;NSM;;;;;N;;;;; A8E7;COMBINING DEVANAGARI DIGIT SEVEN;Mn;230;NSM;;;;;N;;;;; A8E8;COMBINING DEVANAGARI DIGIT EIGHT;Mn;230;NSM;;;;;N;;;;; A8E9;COMBINING DEVANAGARI DIGIT NINE;Mn;230;NSM;;;;;N;;;;; A8EA;COMBINING DEVANAGARI LETTER A;Mn;230;NSM;;;;;N;;;;; A8EB;COMBINING DEVANAGARI LETTER U;Mn;230;NSM;;;;;N;;;;; A8EC;COMBINING DEVANAGARI LETTER KA;Mn;230;NSM;;;;;N;;;;; A8ED;COMBINING DEVANAGARI LETTER NA;Mn;230;NSM;;;;;N;;;;; A8EE;COMBINING DEVANAGARI LETTER PA;Mn;230;NSM;;;;;N;;;;; A8EF;COMBINING DEVANAGARI LETTER RA;Mn;230;NSM;;;;;N;;;;; A8F0;COMBINING DEVANAGARI LETTER VI;Mn;230;NSM;;;;;N;;;;; A8F1;COMBINING DEVANAGARI SIGN AVAGRAHA;Mn;230;NSM;;;;;N;;;;; A8F2;DEVANAGARI SIGN SPACING CANDRABINDU;Lo;0;L;;;;;N;;;;; A8F3;DEVANAGARI SIGN CANDRABINDU VIRAMA;Lo;0;L;;;;;N;;;;; A8F4;DEVANAGARI SIGN DOUBLE CANDRABINDU VIRAMA;Lo;0;L;;;;;N;;;;; A8F5;DEVANAGARI SIGN CANDRABINDU TWO;Lo;0;L;;;;;N;;;;; A8F6;DEVANAGARI SIGN CANDRABINDU THREE;Lo;0;L;;;;;N;;;;; A8F7;DEVANAGARI SIGN CANDRABINDU AVAGRAHA;Lo;0;L;;;;;N;;;;; A8F8;DEVANAGARI SIGN PUSHPIKA;Po;0;L;;;;;N;;;;; A8F9;DEVANAGARI GAP FILLER;Po;0;L;;;;;N;;;;; A8FA;DEVANAGARI CARET;Po;0;L;;;;;N;;;;; A8FB;DEVANAGARI HEADSTROKE;Lo;0;L;;;;;N;;;;; A8FC;DEVANAGARI SIGN SIDDHAM;Po;0;L;;;;;N;;;;; A8FD;DEVANAGARI JAIN OM;Lo;0;L;;;;;N;;;;; A8FE;DEVANAGARI LETTER AY;Lo;0;L;;;;;N;;;;; A8FF;DEVANAGARI VOWEL SIGN AY;Mn;0;NSM;;;;;N;;;;; A900;KAYAH LI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; A901;KAYAH LI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; A902;KAYAH LI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; A903;KAYAH LI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; A904;KAYAH LI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; A905;KAYAH LI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; A906;KAYAH LI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; A907;KAYAH LI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; A908;KAYAH LI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; A909;KAYAH LI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; A90A;KAYAH LI LETTER KA;Lo;0;L;;;;;N;;;;; A90B;KAYAH LI LETTER KHA;Lo;0;L;;;;;N;;;;; A90C;KAYAH LI LETTER GA;Lo;0;L;;;;;N;;;;; A90D;KAYAH LI LETTER NGA;Lo;0;L;;;;;N;;;;; A90E;KAYAH LI LETTER SA;Lo;0;L;;;;;N;;;;; A90F;KAYAH LI LETTER SHA;Lo;0;L;;;;;N;;;;; A910;KAYAH LI LETTER ZA;Lo;0;L;;;;;N;;;;; A911;KAYAH LI LETTER NYA;Lo;0;L;;;;;N;;;;; A912;KAYAH LI LETTER TA;Lo;0;L;;;;;N;;;;; A913;KAYAH LI LETTER HTA;Lo;0;L;;;;;N;;;;; A914;KAYAH LI LETTER NA;Lo;0;L;;;;;N;;;;; A915;KAYAH LI LETTER PA;Lo;0;L;;;;;N;;;;; A916;KAYAH LI LETTER PHA;Lo;0;L;;;;;N;;;;; A917;KAYAH LI LETTER MA;Lo;0;L;;;;;N;;;;; A918;KAYAH LI LETTER DA;Lo;0;L;;;;;N;;;;; A919;KAYAH LI LETTER BA;Lo;0;L;;;;;N;;;;; A91A;KAYAH LI LETTER RA;Lo;0;L;;;;;N;;;;; A91B;KAYAH LI LETTER YA;Lo;0;L;;;;;N;;;;; A91C;KAYAH LI LETTER LA;Lo;0;L;;;;;N;;;;; A91D;KAYAH LI LETTER WA;Lo;0;L;;;;;N;;;;; A91E;KAYAH LI LETTER THA;Lo;0;L;;;;;N;;;;; A91F;KAYAH LI LETTER HA;Lo;0;L;;;;;N;;;;; A920;KAYAH LI LETTER VA;Lo;0;L;;;;;N;;;;; A921;KAYAH LI LETTER CA;Lo;0;L;;;;;N;;;;; A922;KAYAH LI LETTER A;Lo;0;L;;;;;N;;;;; A923;KAYAH LI LETTER OE;Lo;0;L;;;;;N;;;;; A924;KAYAH LI LETTER I;Lo;0;L;;;;;N;;;;; A925;KAYAH LI LETTER OO;Lo;0;L;;;;;N;;;;; A926;KAYAH LI VOWEL UE;Mn;0;NSM;;;;;N;;;;; A927;KAYAH LI VOWEL E;Mn;0;NSM;;;;;N;;;;; A928;KAYAH LI VOWEL U;Mn;0;NSM;;;;;N;;;;; A929;KAYAH LI VOWEL EE;Mn;0;NSM;;;;;N;;;;; A92A;KAYAH LI VOWEL O;Mn;0;NSM;;;;;N;;;;; A92B;KAYAH LI TONE PLOPHU;Mn;220;NSM;;;;;N;;;;; A92C;KAYAH LI TONE CALYA;Mn;220;NSM;;;;;N;;;;; A92D;KAYAH LI TONE CALYA PLOPHU;Mn;220;NSM;;;;;N;;;;; A92E;KAYAH LI SIGN CWI;Po;0;L;;;;;N;;;;; A92F;KAYAH LI SIGN SHYA;Po;0;L;;;;;N;;;;; A930;REJANG LETTER KA;Lo;0;L;;;;;N;;;;; A931;REJANG LETTER GA;Lo;0;L;;;;;N;;;;; A932;REJANG LETTER NGA;Lo;0;L;;;;;N;;;;; A933;REJANG LETTER TA;Lo;0;L;;;;;N;;;;; A934;REJANG LETTER DA;Lo;0;L;;;;;N;;;;; A935;REJANG LETTER NA;Lo;0;L;;;;;N;;;;; A936;REJANG LETTER PA;Lo;0;L;;;;;N;;;;; A937;REJANG LETTER BA;Lo;0;L;;;;;N;;;;; A938;REJANG LETTER MA;Lo;0;L;;;;;N;;;;; A939;REJANG LETTER CA;Lo;0;L;;;;;N;;;;; A93A;REJANG LETTER JA;Lo;0;L;;;;;N;;;;; A93B;REJANG LETTER NYA;Lo;0;L;;;;;N;;;;; A93C;REJANG LETTER SA;Lo;0;L;;;;;N;;;;; A93D;REJANG LETTER RA;Lo;0;L;;;;;N;;;;; A93E;REJANG LETTER LA;Lo;0;L;;;;;N;;;;; A93F;REJANG LETTER YA;Lo;0;L;;;;;N;;;;; A940;REJANG LETTER WA;Lo;0;L;;;;;N;;;;; A941;REJANG LETTER HA;Lo;0;L;;;;;N;;;;; A942;REJANG LETTER MBA;Lo;0;L;;;;;N;;;;; A943;REJANG LETTER NGGA;Lo;0;L;;;;;N;;;;; A944;REJANG LETTER NDA;Lo;0;L;;;;;N;;;;; A945;REJANG LETTER NYJA;Lo;0;L;;;;;N;;;;; A946;REJANG LETTER A;Lo;0;L;;;;;N;;;;; A947;REJANG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; A948;REJANG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; A949;REJANG VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; A94A;REJANG VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; A94B;REJANG VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; A94C;REJANG VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; A94D;REJANG VOWEL SIGN EU;Mn;0;NSM;;;;;N;;;;; A94E;REJANG VOWEL SIGN EA;Mn;0;NSM;;;;;N;;;;; A94F;REJANG CONSONANT SIGN NG;Mn;0;NSM;;;;;N;;;;; A950;REJANG CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;; A951;REJANG CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;; A952;REJANG CONSONANT SIGN H;Mc;0;L;;;;;N;;;;; A953;REJANG VIRAMA;Mc;9;L;;;;;N;;;;; A95F;REJANG SECTION MARK;Po;0;L;;;;;N;;;;; A960;HANGUL CHOSEONG TIKEUT-MIEUM;Lo;0;L;;;;;N;;;;; A961;HANGUL CHOSEONG TIKEUT-PIEUP;Lo;0;L;;;;;N;;;;; A962;HANGUL CHOSEONG TIKEUT-SIOS;Lo;0;L;;;;;N;;;;; A963;HANGUL CHOSEONG TIKEUT-CIEUC;Lo;0;L;;;;;N;;;;; A964;HANGUL CHOSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;;;; A965;HANGUL CHOSEONG RIEUL-SSANGKIYEOK;Lo;0;L;;;;;N;;;;; A966;HANGUL CHOSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;; A967;HANGUL CHOSEONG RIEUL-SSANGTIKEUT;Lo;0;L;;;;;N;;;;; A968;HANGUL CHOSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;;;; A969;HANGUL CHOSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;;;; A96A;HANGUL CHOSEONG RIEUL-SSANGPIEUP;Lo;0;L;;;;;N;;;;; A96B;HANGUL CHOSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; A96C;HANGUL CHOSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;;;; A96D;HANGUL CHOSEONG RIEUL-CIEUC;Lo;0;L;;;;;N;;;;; A96E;HANGUL CHOSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;; A96F;HANGUL CHOSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;; A970;HANGUL CHOSEONG MIEUM-TIKEUT;Lo;0;L;;;;;N;;;;; A971;HANGUL CHOSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;; A972;HANGUL CHOSEONG PIEUP-SIOS-THIEUTH;Lo;0;L;;;;;N;;;;; A973;HANGUL CHOSEONG PIEUP-KHIEUKH;Lo;0;L;;;;;N;;;;; A974;HANGUL CHOSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;; A975;HANGUL CHOSEONG SSANGSIOS-PIEUP;Lo;0;L;;;;;N;;;;; A976;HANGUL CHOSEONG IEUNG-RIEUL;Lo;0;L;;;;;N;;;;; A977;HANGUL CHOSEONG IEUNG-HIEUH;Lo;0;L;;;;;N;;;;; A978;HANGUL CHOSEONG SSANGCIEUC-HIEUH;Lo;0;L;;;;;N;;;;; A979;HANGUL CHOSEONG SSANGTHIEUTH;Lo;0;L;;;;;N;;;;; A97A;HANGUL CHOSEONG PHIEUPH-HIEUH;Lo;0;L;;;;;N;;;;; A97B;HANGUL CHOSEONG HIEUH-SIOS;Lo;0;L;;;;;N;;;;; A97C;HANGUL CHOSEONG SSANGYEORINHIEUH;Lo;0;L;;;;;N;;;;; A980;JAVANESE SIGN PANYANGGA;Mn;0;NSM;;;;;N;;;;; A981;JAVANESE SIGN CECAK;Mn;0;NSM;;;;;N;;;;; A982;JAVANESE SIGN LAYAR;Mn;0;NSM;;;;;N;;;;; A983;JAVANESE SIGN WIGNYAN;Mc;0;L;;;;;N;;;;; A984;JAVANESE LETTER A;Lo;0;L;;;;;N;;;;; A985;JAVANESE LETTER I KAWI;Lo;0;L;;;;;N;;;;; A986;JAVANESE LETTER I;Lo;0;L;;;;;N;;;;; A987;JAVANESE LETTER II;Lo;0;L;;;;;N;;;;; A988;JAVANESE LETTER U;Lo;0;L;;;;;N;;;;; A989;JAVANESE LETTER PA CEREK;Lo;0;L;;;;;N;;;;; A98A;JAVANESE LETTER NGA LELET;Lo;0;L;;;;;N;;;;; A98B;JAVANESE LETTER NGA LELET RASWADI;Lo;0;L;;;;;N;;;;; A98C;JAVANESE LETTER E;Lo;0;L;;;;;N;;;;; A98D;JAVANESE LETTER AI;Lo;0;L;;;;;N;;;;; A98E;JAVANESE LETTER O;Lo;0;L;;;;;N;;;;; A98F;JAVANESE LETTER KA;Lo;0;L;;;;;N;;;;; A990;JAVANESE LETTER KA SASAK;Lo;0;L;;;;;N;;;;; A991;JAVANESE LETTER KA MURDA;Lo;0;L;;;;;N;;;;; A992;JAVANESE LETTER GA;Lo;0;L;;;;;N;;;;; A993;JAVANESE LETTER GA MURDA;Lo;0;L;;;;;N;;;;; A994;JAVANESE LETTER NGA;Lo;0;L;;;;;N;;;;; A995;JAVANESE LETTER CA;Lo;0;L;;;;;N;;;;; A996;JAVANESE LETTER CA MURDA;Lo;0;L;;;;;N;;;;; A997;JAVANESE LETTER JA;Lo;0;L;;;;;N;;;;; A998;JAVANESE LETTER NYA MURDA;Lo;0;L;;;;;N;;;;; A999;JAVANESE LETTER JA MAHAPRANA;Lo;0;L;;;;;N;;;;; A99A;JAVANESE LETTER NYA;Lo;0;L;;;;;N;;;;; A99B;JAVANESE LETTER TTA;Lo;0;L;;;;;N;;;;; A99C;JAVANESE LETTER TTA MAHAPRANA;Lo;0;L;;;;;N;;;;; A99D;JAVANESE LETTER DDA;Lo;0;L;;;;;N;;;;; A99E;JAVANESE LETTER DDA MAHAPRANA;Lo;0;L;;;;;N;;;;; A99F;JAVANESE LETTER NA MURDA;Lo;0;L;;;;;N;;;;; A9A0;JAVANESE LETTER TA;Lo;0;L;;;;;N;;;;; A9A1;JAVANESE LETTER TA MURDA;Lo;0;L;;;;;N;;;;; A9A2;JAVANESE LETTER DA;Lo;0;L;;;;;N;;;;; A9A3;JAVANESE LETTER DA MAHAPRANA;Lo;0;L;;;;;N;;;;; A9A4;JAVANESE LETTER NA;Lo;0;L;;;;;N;;;;; A9A5;JAVANESE LETTER PA;Lo;0;L;;;;;N;;;;; A9A6;JAVANESE LETTER PA MURDA;Lo;0;L;;;;;N;;;;; A9A7;JAVANESE LETTER BA;Lo;0;L;;;;;N;;;;; A9A8;JAVANESE LETTER BA MURDA;Lo;0;L;;;;;N;;;;; A9A9;JAVANESE LETTER MA;Lo;0;L;;;;;N;;;;; A9AA;JAVANESE LETTER YA;Lo;0;L;;;;;N;;;;; A9AB;JAVANESE LETTER RA;Lo;0;L;;;;;N;;;;; A9AC;JAVANESE LETTER RA AGUNG;Lo;0;L;;;;;N;;;;; A9AD;JAVANESE LETTER LA;Lo;0;L;;;;;N;;;;; A9AE;JAVANESE LETTER WA;Lo;0;L;;;;;N;;;;; A9AF;JAVANESE LETTER SA MURDA;Lo;0;L;;;;;N;;;;; A9B0;JAVANESE LETTER SA MAHAPRANA;Lo;0;L;;;;;N;;;;; A9B1;JAVANESE LETTER SA;Lo;0;L;;;;;N;;;;; A9B2;JAVANESE LETTER HA;Lo;0;L;;;;;N;;;;; A9B3;JAVANESE SIGN CECAK TELU;Mn;7;NSM;;;;;N;;;;; A9B4;JAVANESE VOWEL SIGN TARUNG;Mc;0;L;;;;;N;;;;; A9B5;JAVANESE VOWEL SIGN TOLONG;Mc;0;L;;;;;N;;;;; A9B6;JAVANESE VOWEL SIGN WULU;Mn;0;NSM;;;;;N;;;;; A9B7;JAVANESE VOWEL SIGN WULU MELIK;Mn;0;NSM;;;;;N;;;;; A9B8;JAVANESE VOWEL SIGN SUKU;Mn;0;NSM;;;;;N;;;;; A9B9;JAVANESE VOWEL SIGN SUKU MENDUT;Mn;0;NSM;;;;;N;;;;; A9BA;JAVANESE VOWEL SIGN TALING;Mc;0;L;;;;;N;;;;; A9BB;JAVANESE VOWEL SIGN DIRGA MURE;Mc;0;L;;;;;N;;;;; A9BC;JAVANESE VOWEL SIGN PEPET;Mn;0;NSM;;;;;N;;;;; A9BD;JAVANESE CONSONANT SIGN KERET;Mn;0;NSM;;;;;N;;;;; A9BE;JAVANESE CONSONANT SIGN PENGKAL;Mc;0;L;;;;;N;;;;; A9BF;JAVANESE CONSONANT SIGN CAKRA;Mc;0;L;;;;;N;;;;; A9C0;JAVANESE PANGKON;Mc;9;L;;;;;N;;;;; A9C1;JAVANESE LEFT RERENGGAN;Po;0;L;;;;;N;;;;; A9C2;JAVANESE RIGHT RERENGGAN;Po;0;L;;;;;N;;;;; A9C3;JAVANESE PADA ANDAP;Po;0;L;;;;;N;;;;; A9C4;JAVANESE PADA MADYA;Po;0;L;;;;;N;;;;; A9C5;JAVANESE PADA LUHUR;Po;0;L;;;;;N;;;;; A9C6;JAVANESE PADA WINDU;Po;0;L;;;;;N;;;;; A9C7;JAVANESE PADA PANGKAT;Po;0;L;;;;;N;;;;; A9C8;JAVANESE PADA LINGSA;Po;0;L;;;;;N;;;;; A9C9;JAVANESE PADA LUNGSI;Po;0;L;;;;;N;;;;; A9CA;JAVANESE PADA ADEG;Po;0;L;;;;;N;;;;; A9CB;JAVANESE PADA ADEG ADEG;Po;0;L;;;;;N;;;;; A9CC;JAVANESE PADA PISELEH;Po;0;L;;;;;N;;;;; A9CD;JAVANESE TURNED PADA PISELEH;Po;0;L;;;;;N;;;;; A9CF;JAVANESE PANGRANGKEP;Lm;0;L;;;;;N;;;;; A9D0;JAVANESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; A9D1;JAVANESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; A9D2;JAVANESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; A9D3;JAVANESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; A9D4;JAVANESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; A9D5;JAVANESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; A9D6;JAVANESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; A9D7;JAVANESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; A9D8;JAVANESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; A9D9;JAVANESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; A9DE;JAVANESE PADA TIRTA TUMETES;Po;0;L;;;;;N;;;;; A9DF;JAVANESE PADA ISEN-ISEN;Po;0;L;;;;;N;;;;; A9E0;MYANMAR LETTER SHAN GHA;Lo;0;L;;;;;N;;;;; A9E1;MYANMAR LETTER SHAN CHA;Lo;0;L;;;;;N;;;;; A9E2;MYANMAR LETTER SHAN JHA;Lo;0;L;;;;;N;;;;; A9E3;MYANMAR LETTER SHAN NNA;Lo;0;L;;;;;N;;;;; A9E4;MYANMAR LETTER SHAN BHA;Lo;0;L;;;;;N;;;;; A9E5;MYANMAR SIGN SHAN SAW;Mn;0;NSM;;;;;N;;;;; A9E6;MYANMAR MODIFIER LETTER SHAN REDUPLICATION;Lm;0;L;;;;;N;;;;; A9E7;MYANMAR LETTER TAI LAING NYA;Lo;0;L;;;;;N;;;;; A9E8;MYANMAR LETTER TAI LAING FA;Lo;0;L;;;;;N;;;;; A9E9;MYANMAR LETTER TAI LAING GA;Lo;0;L;;;;;N;;;;; A9EA;MYANMAR LETTER TAI LAING GHA;Lo;0;L;;;;;N;;;;; A9EB;MYANMAR LETTER TAI LAING JA;Lo;0;L;;;;;N;;;;; A9EC;MYANMAR LETTER TAI LAING JHA;Lo;0;L;;;;;N;;;;; A9ED;MYANMAR LETTER TAI LAING DDA;Lo;0;L;;;;;N;;;;; A9EE;MYANMAR LETTER TAI LAING DDHA;Lo;0;L;;;;;N;;;;; A9EF;MYANMAR LETTER TAI LAING NNA;Lo;0;L;;;;;N;;;;; A9F0;MYANMAR TAI LAING DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; A9F1;MYANMAR TAI LAING DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; A9F2;MYANMAR TAI LAING DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; A9F3;MYANMAR TAI LAING DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; A9F4;MYANMAR TAI LAING DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; A9F5;MYANMAR TAI LAING DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; A9F6;MYANMAR TAI LAING DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; A9F7;MYANMAR TAI LAING DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; A9F8;MYANMAR TAI LAING DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; A9F9;MYANMAR TAI LAING DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; A9FA;MYANMAR LETTER TAI LAING LLA;Lo;0;L;;;;;N;;;;; A9FB;MYANMAR LETTER TAI LAING DA;Lo;0;L;;;;;N;;;;; A9FC;MYANMAR LETTER TAI LAING DHA;Lo;0;L;;;;;N;;;;; A9FD;MYANMAR LETTER TAI LAING BA;Lo;0;L;;;;;N;;;;; A9FE;MYANMAR LETTER TAI LAING BHA;Lo;0;L;;;;;N;;;;; AA00;CHAM LETTER A;Lo;0;L;;;;;N;;;;; AA01;CHAM LETTER I;Lo;0;L;;;;;N;;;;; AA02;CHAM LETTER U;Lo;0;L;;;;;N;;;;; AA03;CHAM LETTER E;Lo;0;L;;;;;N;;;;; AA04;CHAM LETTER AI;Lo;0;L;;;;;N;;;;; AA05;CHAM LETTER O;Lo;0;L;;;;;N;;;;; AA06;CHAM LETTER KA;Lo;0;L;;;;;N;;;;; AA07;CHAM LETTER KHA;Lo;0;L;;;;;N;;;;; AA08;CHAM LETTER GA;Lo;0;L;;;;;N;;;;; AA09;CHAM LETTER GHA;Lo;0;L;;;;;N;;;;; AA0A;CHAM LETTER NGUE;Lo;0;L;;;;;N;;;;; AA0B;CHAM LETTER NGA;Lo;0;L;;;;;N;;;;; AA0C;CHAM LETTER CHA;Lo;0;L;;;;;N;;;;; AA0D;CHAM LETTER CHHA;Lo;0;L;;;;;N;;;;; AA0E;CHAM LETTER JA;Lo;0;L;;;;;N;;;;; AA0F;CHAM LETTER JHA;Lo;0;L;;;;;N;;;;; AA10;CHAM LETTER NHUE;Lo;0;L;;;;;N;;;;; AA11;CHAM LETTER NHA;Lo;0;L;;;;;N;;;;; AA12;CHAM LETTER NHJA;Lo;0;L;;;;;N;;;;; AA13;CHAM LETTER TA;Lo;0;L;;;;;N;;;;; AA14;CHAM LETTER THA;Lo;0;L;;;;;N;;;;; AA15;CHAM LETTER DA;Lo;0;L;;;;;N;;;;; AA16;CHAM LETTER DHA;Lo;0;L;;;;;N;;;;; AA17;CHAM LETTER NUE;Lo;0;L;;;;;N;;;;; AA18;CHAM LETTER NA;Lo;0;L;;;;;N;;;;; AA19;CHAM LETTER DDA;Lo;0;L;;;;;N;;;;; AA1A;CHAM LETTER PA;Lo;0;L;;;;;N;;;;; AA1B;CHAM LETTER PPA;Lo;0;L;;;;;N;;;;; AA1C;CHAM LETTER PHA;Lo;0;L;;;;;N;;;;; AA1D;CHAM LETTER BA;Lo;0;L;;;;;N;;;;; AA1E;CHAM LETTER BHA;Lo;0;L;;;;;N;;;;; AA1F;CHAM LETTER MUE;Lo;0;L;;;;;N;;;;; AA20;CHAM LETTER MA;Lo;0;L;;;;;N;;;;; AA21;CHAM LETTER BBA;Lo;0;L;;;;;N;;;;; AA22;CHAM LETTER YA;Lo;0;L;;;;;N;;;;; AA23;CHAM LETTER RA;Lo;0;L;;;;;N;;;;; AA24;CHAM LETTER LA;Lo;0;L;;;;;N;;;;; AA25;CHAM LETTER VA;Lo;0;L;;;;;N;;;;; AA26;CHAM LETTER SSA;Lo;0;L;;;;;N;;;;; AA27;CHAM LETTER SA;Lo;0;L;;;;;N;;;;; AA28;CHAM LETTER HA;Lo;0;L;;;;;N;;;;; AA29;CHAM VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; AA2A;CHAM VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; AA2B;CHAM VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; AA2C;CHAM VOWEL SIGN EI;Mn;0;NSM;;;;;N;;;;; AA2D;CHAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; AA2E;CHAM VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;; AA2F;CHAM VOWEL SIGN O;Mc;0;L;;;;;N;;;;; AA30;CHAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; AA31;CHAM VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; AA32;CHAM VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;; AA33;CHAM CONSONANT SIGN YA;Mc;0;L;;;;;N;;;;; AA34;CHAM CONSONANT SIGN RA;Mc;0;L;;;;;N;;;;; AA35;CHAM CONSONANT SIGN LA;Mn;0;NSM;;;;;N;;;;; AA36;CHAM CONSONANT SIGN WA;Mn;0;NSM;;;;;N;;;;; AA40;CHAM LETTER FINAL K;Lo;0;L;;;;;N;;;;; AA41;CHAM LETTER FINAL G;Lo;0;L;;;;;N;;;;; AA42;CHAM LETTER FINAL NG;Lo;0;L;;;;;N;;;;; AA43;CHAM CONSONANT SIGN FINAL NG;Mn;0;NSM;;;;;N;;;;; AA44;CHAM LETTER FINAL CH;Lo;0;L;;;;;N;;;;; AA45;CHAM LETTER FINAL T;Lo;0;L;;;;;N;;;;; AA46;CHAM LETTER FINAL N;Lo;0;L;;;;;N;;;;; AA47;CHAM LETTER FINAL P;Lo;0;L;;;;;N;;;;; AA48;CHAM LETTER FINAL Y;Lo;0;L;;;;;N;;;;; AA49;CHAM LETTER FINAL R;Lo;0;L;;;;;N;;;;; AA4A;CHAM LETTER FINAL L;Lo;0;L;;;;;N;;;;; AA4B;CHAM LETTER FINAL SS;Lo;0;L;;;;;N;;;;; AA4C;CHAM CONSONANT SIGN FINAL M;Mn;0;NSM;;;;;N;;;;; AA4D;CHAM CONSONANT SIGN FINAL H;Mc;0;L;;;;;N;;;;; AA50;CHAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; AA51;CHAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; AA52;CHAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; AA53;CHAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; AA54;CHAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; AA55;CHAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; AA56;CHAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; AA57;CHAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; AA58;CHAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; AA59;CHAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; AA5C;CHAM PUNCTUATION SPIRAL;Po;0;L;;;;;N;;;;; AA5D;CHAM PUNCTUATION DANDA;Po;0;L;;;;;N;;;;; AA5E;CHAM PUNCTUATION DOUBLE DANDA;Po;0;L;;;;;N;;;;; AA5F;CHAM PUNCTUATION TRIPLE DANDA;Po;0;L;;;;;N;;;;; AA60;MYANMAR LETTER KHAMTI GA;Lo;0;L;;;;;N;;;;; AA61;MYANMAR LETTER KHAMTI CA;Lo;0;L;;;;;N;;;;; AA62;MYANMAR LETTER KHAMTI CHA;Lo;0;L;;;;;N;;;;; AA63;MYANMAR LETTER KHAMTI JA;Lo;0;L;;;;;N;;;;; AA64;MYANMAR LETTER KHAMTI JHA;Lo;0;L;;;;;N;;;;; AA65;MYANMAR LETTER KHAMTI NYA;Lo;0;L;;;;;N;;;;; AA66;MYANMAR LETTER KHAMTI TTA;Lo;0;L;;;;;N;;;;; AA67;MYANMAR LETTER KHAMTI TTHA;Lo;0;L;;;;;N;;;;; AA68;MYANMAR LETTER KHAMTI DDA;Lo;0;L;;;;;N;;;;; AA69;MYANMAR LETTER KHAMTI DDHA;Lo;0;L;;;;;N;;;;; AA6A;MYANMAR LETTER KHAMTI DHA;Lo;0;L;;;;;N;;;;; AA6B;MYANMAR LETTER KHAMTI NA;Lo;0;L;;;;;N;;;;; AA6C;MYANMAR LETTER KHAMTI SA;Lo;0;L;;;;;N;;;;; AA6D;MYANMAR LETTER KHAMTI HA;Lo;0;L;;;;;N;;;;; AA6E;MYANMAR LETTER KHAMTI HHA;Lo;0;L;;;;;N;;;;; AA6F;MYANMAR LETTER KHAMTI FA;Lo;0;L;;;;;N;;;;; AA70;MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION;Lm;0;L;;;;;N;;;;; AA71;MYANMAR LETTER KHAMTI XA;Lo;0;L;;;;;N;;;;; AA72;MYANMAR LETTER KHAMTI ZA;Lo;0;L;;;;;N;;;;; AA73;MYANMAR LETTER KHAMTI RA;Lo;0;L;;;;;N;;;;; AA74;MYANMAR LOGOGRAM KHAMTI OAY;Lo;0;L;;;;;N;;;;; AA75;MYANMAR LOGOGRAM KHAMTI QN;Lo;0;L;;;;;N;;;;; AA76;MYANMAR LOGOGRAM KHAMTI HM;Lo;0;L;;;;;N;;;;; AA77;MYANMAR SYMBOL AITON EXCLAMATION;So;0;L;;;;;N;;;;; AA78;MYANMAR SYMBOL AITON ONE;So;0;L;;;;;N;;;;; AA79;MYANMAR SYMBOL AITON TWO;So;0;L;;;;;N;;;;; AA7A;MYANMAR LETTER AITON RA;Lo;0;L;;;;;N;;;;; AA7B;MYANMAR SIGN PAO KAREN TONE;Mc;0;L;;;;;N;;;;; AA7C;MYANMAR SIGN TAI LAING TONE-2;Mn;0;NSM;;;;;N;;;;; AA7D;MYANMAR SIGN TAI LAING TONE-5;Mc;0;L;;;;;N;;;;; AA7E;MYANMAR LETTER SHWE PALAUNG CHA;Lo;0;L;;;;;N;;;;; AA7F;MYANMAR LETTER SHWE PALAUNG SHA;Lo;0;L;;;;;N;;;;; AA80;TAI VIET LETTER LOW KO;Lo;0;L;;;;;N;;;;; AA81;TAI VIET LETTER HIGH KO;Lo;0;L;;;;;N;;;;; AA82;TAI VIET LETTER LOW KHO;Lo;0;L;;;;;N;;;;; AA83;TAI VIET LETTER HIGH KHO;Lo;0;L;;;;;N;;;;; AA84;TAI VIET LETTER LOW KHHO;Lo;0;L;;;;;N;;;;; AA85;TAI VIET LETTER HIGH KHHO;Lo;0;L;;;;;N;;;;; AA86;TAI VIET LETTER LOW GO;Lo;0;L;;;;;N;;;;; AA87;TAI VIET LETTER HIGH GO;Lo;0;L;;;;;N;;;;; AA88;TAI VIET LETTER LOW NGO;Lo;0;L;;;;;N;;;;; AA89;TAI VIET LETTER HIGH NGO;Lo;0;L;;;;;N;;;;; AA8A;TAI VIET LETTER LOW CO;Lo;0;L;;;;;N;;;;; AA8B;TAI VIET LETTER HIGH CO;Lo;0;L;;;;;N;;;;; AA8C;TAI VIET LETTER LOW CHO;Lo;0;L;;;;;N;;;;; AA8D;TAI VIET LETTER HIGH CHO;Lo;0;L;;;;;N;;;;; AA8E;TAI VIET LETTER LOW SO;Lo;0;L;;;;;N;;;;; AA8F;TAI VIET LETTER HIGH SO;Lo;0;L;;;;;N;;;;; AA90;TAI VIET LETTER LOW NYO;Lo;0;L;;;;;N;;;;; AA91;TAI VIET LETTER HIGH NYO;Lo;0;L;;;;;N;;;;; AA92;TAI VIET LETTER LOW DO;Lo;0;L;;;;;N;;;;; AA93;TAI VIET LETTER HIGH DO;Lo;0;L;;;;;N;;;;; AA94;TAI VIET LETTER LOW TO;Lo;0;L;;;;;N;;;;; AA95;TAI VIET LETTER HIGH TO;Lo;0;L;;;;;N;;;;; AA96;TAI VIET LETTER LOW THO;Lo;0;L;;;;;N;;;;; AA97;TAI VIET LETTER HIGH THO;Lo;0;L;;;;;N;;;;; AA98;TAI VIET LETTER LOW NO;Lo;0;L;;;;;N;;;;; AA99;TAI VIET LETTER HIGH NO;Lo;0;L;;;;;N;;;;; AA9A;TAI VIET LETTER LOW BO;Lo;0;L;;;;;N;;;;; AA9B;TAI VIET LETTER HIGH BO;Lo;0;L;;;;;N;;;;; AA9C;TAI VIET LETTER LOW PO;Lo;0;L;;;;;N;;;;; AA9D;TAI VIET LETTER HIGH PO;Lo;0;L;;;;;N;;;;; AA9E;TAI VIET LETTER LOW PHO;Lo;0;L;;;;;N;;;;; AA9F;TAI VIET LETTER HIGH PHO;Lo;0;L;;;;;N;;;;; AAA0;TAI VIET LETTER LOW FO;Lo;0;L;;;;;N;;;;; AAA1;TAI VIET LETTER HIGH FO;Lo;0;L;;;;;N;;;;; AAA2;TAI VIET LETTER LOW MO;Lo;0;L;;;;;N;;;;; AAA3;TAI VIET LETTER HIGH MO;Lo;0;L;;;;;N;;;;; AAA4;TAI VIET LETTER LOW YO;Lo;0;L;;;;;N;;;;; AAA5;TAI VIET LETTER HIGH YO;Lo;0;L;;;;;N;;;;; AAA6;TAI VIET LETTER LOW RO;Lo;0;L;;;;;N;;;;; AAA7;TAI VIET LETTER HIGH RO;Lo;0;L;;;;;N;;;;; AAA8;TAI VIET LETTER LOW LO;Lo;0;L;;;;;N;;;;; AAA9;TAI VIET LETTER HIGH LO;Lo;0;L;;;;;N;;;;; AAAA;TAI VIET LETTER LOW VO;Lo;0;L;;;;;N;;;;; AAAB;TAI VIET LETTER HIGH VO;Lo;0;L;;;;;N;;;;; AAAC;TAI VIET LETTER LOW HO;Lo;0;L;;;;;N;;;;; AAAD;TAI VIET LETTER HIGH HO;Lo;0;L;;;;;N;;;;; AAAE;TAI VIET LETTER LOW O;Lo;0;L;;;;;N;;;;; AAAF;TAI VIET LETTER HIGH O;Lo;0;L;;;;;N;;;;; AAB0;TAI VIET MAI KANG;Mn;230;NSM;;;;;N;;;;; AAB1;TAI VIET VOWEL AA;Lo;0;L;;;;;N;;;;; AAB2;TAI VIET VOWEL I;Mn;230;NSM;;;;;N;;;;; AAB3;TAI VIET VOWEL UE;Mn;230;NSM;;;;;N;;;;; AAB4;TAI VIET VOWEL U;Mn;220;NSM;;;;;N;;;;; AAB5;TAI VIET VOWEL E;Lo;0;L;;;;;N;;;;; AAB6;TAI VIET VOWEL O;Lo;0;L;;;;;N;;;;; AAB7;TAI VIET MAI KHIT;Mn;230;NSM;;;;;N;;;;; AAB8;TAI VIET VOWEL IA;Mn;230;NSM;;;;;N;;;;; AAB9;TAI VIET VOWEL UEA;Lo;0;L;;;;;N;;;;; AABA;TAI VIET VOWEL UA;Lo;0;L;;;;;N;;;;; AABB;TAI VIET VOWEL AUE;Lo;0;L;;;;;N;;;;; AABC;TAI VIET VOWEL AY;Lo;0;L;;;;;N;;;;; AABD;TAI VIET VOWEL AN;Lo;0;L;;;;;N;;;;; AABE;TAI VIET VOWEL AM;Mn;230;NSM;;;;;N;;;;; AABF;TAI VIET TONE MAI EK;Mn;230;NSM;;;;;N;;;;; AAC0;TAI VIET TONE MAI NUENG;Lo;0;L;;;;;N;;;;; AAC1;TAI VIET TONE MAI THO;Mn;230;NSM;;;;;N;;;;; AAC2;TAI VIET TONE MAI SONG;Lo;0;L;;;;;N;;;;; AADB;TAI VIET SYMBOL KON;Lo;0;L;;;;;N;;;;; AADC;TAI VIET SYMBOL NUENG;Lo;0;L;;;;;N;;;;; AADD;TAI VIET SYMBOL SAM;Lm;0;L;;;;;N;;;;; AADE;TAI VIET SYMBOL HO HOI;Po;0;L;;;;;N;;;;; AADF;TAI VIET SYMBOL KOI KOI;Po;0;L;;;;;N;;;;; AAE0;MEETEI MAYEK LETTER E;Lo;0;L;;;;;N;;;;; AAE1;MEETEI MAYEK LETTER O;Lo;0;L;;;;;N;;;;; AAE2;MEETEI MAYEK LETTER CHA;Lo;0;L;;;;;N;;;;; AAE3;MEETEI MAYEK LETTER NYA;Lo;0;L;;;;;N;;;;; AAE4;MEETEI MAYEK LETTER TTA;Lo;0;L;;;;;N;;;;; AAE5;MEETEI MAYEK LETTER TTHA;Lo;0;L;;;;;N;;;;; AAE6;MEETEI MAYEK LETTER DDA;Lo;0;L;;;;;N;;;;; AAE7;MEETEI MAYEK LETTER DDHA;Lo;0;L;;;;;N;;;;; AAE8;MEETEI MAYEK LETTER NNA;Lo;0;L;;;;;N;;;;; AAE9;MEETEI MAYEK LETTER SHA;Lo;0;L;;;;;N;;;;; AAEA;MEETEI MAYEK LETTER SSA;Lo;0;L;;;;;N;;;;; AAEB;MEETEI MAYEK VOWEL SIGN II;Mc;0;L;;;;;N;;;;; AAEC;MEETEI MAYEK VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; AAED;MEETEI MAYEK VOWEL SIGN AAI;Mn;0;NSM;;;;;N;;;;; AAEE;MEETEI MAYEK VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; AAEF;MEETEI MAYEK VOWEL SIGN AAU;Mc;0;L;;;;;N;;;;; AAF0;MEETEI MAYEK CHEIKHAN;Po;0;L;;;;;N;;;;; AAF1;MEETEI MAYEK AHANG KHUDAM;Po;0;L;;;;;N;;;;; AAF2;MEETEI MAYEK ANJI;Lo;0;L;;;;;N;;;;; AAF3;MEETEI MAYEK SYLLABLE REPETITION MARK;Lm;0;L;;;;;N;;;;; AAF4;MEETEI MAYEK WORD REPETITION MARK;Lm;0;L;;;;;N;;;;; AAF5;MEETEI MAYEK VOWEL SIGN VISARGA;Mc;0;L;;;;;N;;;;; AAF6;MEETEI MAYEK VIRAMA;Mn;9;NSM;;;;;N;;;;; AB01;ETHIOPIC SYLLABLE TTHU;Lo;0;L;;;;;N;;;;; AB02;ETHIOPIC SYLLABLE TTHI;Lo;0;L;;;;;N;;;;; AB03;ETHIOPIC SYLLABLE TTHAA;Lo;0;L;;;;;N;;;;; AB04;ETHIOPIC SYLLABLE TTHEE;Lo;0;L;;;;;N;;;;; AB05;ETHIOPIC SYLLABLE TTHE;Lo;0;L;;;;;N;;;;; AB06;ETHIOPIC SYLLABLE TTHO;Lo;0;L;;;;;N;;;;; AB09;ETHIOPIC SYLLABLE DDHU;Lo;0;L;;;;;N;;;;; AB0A;ETHIOPIC SYLLABLE DDHI;Lo;0;L;;;;;N;;;;; AB0B;ETHIOPIC SYLLABLE DDHAA;Lo;0;L;;;;;N;;;;; AB0C;ETHIOPIC SYLLABLE DDHEE;Lo;0;L;;;;;N;;;;; AB0D;ETHIOPIC SYLLABLE DDHE;Lo;0;L;;;;;N;;;;; AB0E;ETHIOPIC SYLLABLE DDHO;Lo;0;L;;;;;N;;;;; AB11;ETHIOPIC SYLLABLE DZU;Lo;0;L;;;;;N;;;;; AB12;ETHIOPIC SYLLABLE DZI;Lo;0;L;;;;;N;;;;; AB13;ETHIOPIC SYLLABLE DZAA;Lo;0;L;;;;;N;;;;; AB14;ETHIOPIC SYLLABLE DZEE;Lo;0;L;;;;;N;;;;; AB15;ETHIOPIC SYLLABLE DZE;Lo;0;L;;;;;N;;;;; AB16;ETHIOPIC SYLLABLE DZO;Lo;0;L;;;;;N;;;;; AB20;ETHIOPIC SYLLABLE CCHHA;Lo;0;L;;;;;N;;;;; AB21;ETHIOPIC SYLLABLE CCHHU;Lo;0;L;;;;;N;;;;; AB22;ETHIOPIC SYLLABLE CCHHI;Lo;0;L;;;;;N;;;;; AB23;ETHIOPIC SYLLABLE CCHHAA;Lo;0;L;;;;;N;;;;; AB24;ETHIOPIC SYLLABLE CCHHEE;Lo;0;L;;;;;N;;;;; AB25;ETHIOPIC SYLLABLE CCHHE;Lo;0;L;;;;;N;;;;; AB26;ETHIOPIC SYLLABLE CCHHO;Lo;0;L;;;;;N;;;;; AB28;ETHIOPIC SYLLABLE BBA;Lo;0;L;;;;;N;;;;; AB29;ETHIOPIC SYLLABLE BBU;Lo;0;L;;;;;N;;;;; AB2A;ETHIOPIC SYLLABLE BBI;Lo;0;L;;;;;N;;;;; AB2B;ETHIOPIC SYLLABLE BBAA;Lo;0;L;;;;;N;;;;; AB2C;ETHIOPIC SYLLABLE BBEE;Lo;0;L;;;;;N;;;;; AB2D;ETHIOPIC SYLLABLE BBE;Lo;0;L;;;;;N;;;;; AB2E;ETHIOPIC SYLLABLE BBO;Lo;0;L;;;;;N;;;;; AB30;LATIN SMALL LETTER BARRED ALPHA;Ll;0;L;;;;;N;;;;; AB31;LATIN SMALL LETTER A REVERSED-SCHWA;Ll;0;L;;;;;N;;;;; AB32;LATIN SMALL LETTER BLACKLETTER E;Ll;0;L;;;;;N;;;;; AB33;LATIN SMALL LETTER BARRED E;Ll;0;L;;;;;N;;;;; AB34;LATIN SMALL LETTER E WITH FLOURISH;Ll;0;L;;;;;N;;;;; AB35;LATIN SMALL LETTER LENIS F;Ll;0;L;;;;;N;;;;; AB36;LATIN SMALL LETTER SCRIPT G WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;; AB37;LATIN SMALL LETTER L WITH INVERTED LAZY S;Ll;0;L;;;;;N;;;;; AB38;LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE;Ll;0;L;;;;;N;;;;; AB39;LATIN SMALL LETTER L WITH MIDDLE RING;Ll;0;L;;;;;N;;;;; AB3A;LATIN SMALL LETTER M WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;; AB3B;LATIN SMALL LETTER N WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;; AB3C;LATIN SMALL LETTER ENG WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;; AB3D;LATIN SMALL LETTER BLACKLETTER O;Ll;0;L;;;;;N;;;;; AB3E;LATIN SMALL LETTER BLACKLETTER O WITH STROKE;Ll;0;L;;;;;N;;;;; AB3F;LATIN SMALL LETTER OPEN O WITH STROKE;Ll;0;L;;;;;N;;;;; AB40;LATIN SMALL LETTER INVERTED OE;Ll;0;L;;;;;N;;;;; AB41;LATIN SMALL LETTER TURNED OE WITH STROKE;Ll;0;L;;;;;N;;;;; AB42;LATIN SMALL LETTER TURNED OE WITH HORIZONTAL STROKE;Ll;0;L;;;;;N;;;;; AB43;LATIN SMALL LETTER TURNED O OPEN-O;Ll;0;L;;;;;N;;;;; AB44;LATIN SMALL LETTER TURNED O OPEN-O WITH STROKE;Ll;0;L;;;;;N;;;;; AB45;LATIN SMALL LETTER STIRRUP R;Ll;0;L;;;;;N;;;;; AB46;LATIN LETTER SMALL CAPITAL R WITH RIGHT LEG;Ll;0;L;;;;;N;;;;; AB47;LATIN SMALL LETTER R WITHOUT HANDLE;Ll;0;L;;;;;N;;;;; AB48;LATIN SMALL LETTER DOUBLE R;Ll;0;L;;;;;N;;;;; AB49;LATIN SMALL LETTER R WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;; AB4A;LATIN SMALL LETTER DOUBLE R WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;; AB4B;LATIN SMALL LETTER SCRIPT R;Ll;0;L;;;;;N;;;;; AB4C;LATIN SMALL LETTER SCRIPT R WITH RING;Ll;0;L;;;;;N;;;;; AB4D;LATIN SMALL LETTER BASELINE ESH;Ll;0;L;;;;;N;;;;; AB4E;LATIN SMALL LETTER U WITH SHORT RIGHT LEG;Ll;0;L;;;;;N;;;;; AB4F;LATIN SMALL LETTER U BAR WITH SHORT RIGHT LEG;Ll;0;L;;;;;N;;;;; AB50;LATIN SMALL LETTER UI;Ll;0;L;;;;;N;;;;; AB51;LATIN SMALL LETTER TURNED UI;Ll;0;L;;;;;N;;;;; AB52;LATIN SMALL LETTER U WITH LEFT HOOK;Ll;0;L;;;;;N;;;;; AB53;LATIN SMALL LETTER CHI;Ll;0;L;;;;;N;;;A7B3;;A7B3 AB54;LATIN SMALL LETTER CHI WITH LOW RIGHT RING;Ll;0;L;;;;;N;;;;; AB55;LATIN SMALL LETTER CHI WITH LOW LEFT SERIF;Ll;0;L;;;;;N;;;;; AB56;LATIN SMALL LETTER X WITH LOW RIGHT RING;Ll;0;L;;;;;N;;;;; AB57;LATIN SMALL LETTER X WITH LONG LEFT LEG;Ll;0;L;;;;;N;;;;; AB58;LATIN SMALL LETTER X WITH LONG LEFT LEG AND LOW RIGHT RING;Ll;0;L;;;;;N;;;;; AB59;LATIN SMALL LETTER X WITH LONG LEFT LEG WITH SERIF;Ll;0;L;;;;;N;;;;; AB5A;LATIN SMALL LETTER Y WITH SHORT RIGHT LEG;Ll;0;L;;;;;N;;;;; AB5B;MODIFIER BREVE WITH INVERTED BREVE;Sk;0;L;;;;;N;;;;; AB5C;MODIFIER LETTER SMALL HENG;Lm;0;L; A727;;;;N;;;;; AB5D;MODIFIER LETTER SMALL L WITH INVERTED LAZY S;Lm;0;L; AB37;;;;N;;;;; AB5E;MODIFIER LETTER SMALL L WITH MIDDLE TILDE;Lm;0;L; 026B;;;;N;;;;; AB5F;MODIFIER LETTER SMALL U WITH LEFT HOOK;Lm;0;L; AB52;;;;N;;;;; AB60;LATIN SMALL LETTER SAKHA YAT;Ll;0;L;;;;;N;;;;; AB61;LATIN SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;;; AB62;LATIN SMALL LETTER OPEN OE;Ll;0;L;;;;;N;;;;; AB63;LATIN SMALL LETTER UO;Ll;0;L;;;;;N;;;;; AB64;LATIN SMALL LETTER INVERTED ALPHA;Ll;0;L;;;;;N;;;;; AB65;GREEK LETTER SMALL CAPITAL OMEGA;Ll;0;L;;;;;N;;;;; AB66;LATIN SMALL LETTER DZ DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; AB67;LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; AB68;LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; AB69;MODIFIER LETTER SMALL TURNED W;Lm;0;L; 028D;;;;N;;;;; AB6A;MODIFIER LETTER LEFT TACK;Sk;0;ON;;;;;N;;;;; AB6B;MODIFIER LETTER RIGHT TACK;Sk;0;ON;;;;;N;;;;; AB70;CHEROKEE SMALL LETTER A;Ll;0;L;;;;;N;;;13A0;;13A0 AB71;CHEROKEE SMALL LETTER E;Ll;0;L;;;;;N;;;13A1;;13A1 AB72;CHEROKEE SMALL LETTER I;Ll;0;L;;;;;N;;;13A2;;13A2 AB73;CHEROKEE SMALL LETTER O;Ll;0;L;;;;;N;;;13A3;;13A3 AB74;CHEROKEE SMALL LETTER U;Ll;0;L;;;;;N;;;13A4;;13A4 AB75;CHEROKEE SMALL LETTER V;Ll;0;L;;;;;N;;;13A5;;13A5 AB76;CHEROKEE SMALL LETTER GA;Ll;0;L;;;;;N;;;13A6;;13A6 AB77;CHEROKEE SMALL LETTER KA;Ll;0;L;;;;;N;;;13A7;;13A7 AB78;CHEROKEE SMALL LETTER GE;Ll;0;L;;;;;N;;;13A8;;13A8 AB79;CHEROKEE SMALL LETTER GI;Ll;0;L;;;;;N;;;13A9;;13A9 AB7A;CHEROKEE SMALL LETTER GO;Ll;0;L;;;;;N;;;13AA;;13AA AB7B;CHEROKEE SMALL LETTER GU;Ll;0;L;;;;;N;;;13AB;;13AB AB7C;CHEROKEE SMALL LETTER GV;Ll;0;L;;;;;N;;;13AC;;13AC AB7D;CHEROKEE SMALL LETTER HA;Ll;0;L;;;;;N;;;13AD;;13AD AB7E;CHEROKEE SMALL LETTER HE;Ll;0;L;;;;;N;;;13AE;;13AE AB7F;CHEROKEE SMALL LETTER HI;Ll;0;L;;;;;N;;;13AF;;13AF AB80;CHEROKEE SMALL LETTER HO;Ll;0;L;;;;;N;;;13B0;;13B0 AB81;CHEROKEE SMALL LETTER HU;Ll;0;L;;;;;N;;;13B1;;13B1 AB82;CHEROKEE SMALL LETTER HV;Ll;0;L;;;;;N;;;13B2;;13B2 AB83;CHEROKEE SMALL LETTER LA;Ll;0;L;;;;;N;;;13B3;;13B3 AB84;CHEROKEE SMALL LETTER LE;Ll;0;L;;;;;N;;;13B4;;13B4 AB85;CHEROKEE SMALL LETTER LI;Ll;0;L;;;;;N;;;13B5;;13B5 AB86;CHEROKEE SMALL LETTER LO;Ll;0;L;;;;;N;;;13B6;;13B6 AB87;CHEROKEE SMALL LETTER LU;Ll;0;L;;;;;N;;;13B7;;13B7 AB88;CHEROKEE SMALL LETTER LV;Ll;0;L;;;;;N;;;13B8;;13B8 AB89;CHEROKEE SMALL LETTER MA;Ll;0;L;;;;;N;;;13B9;;13B9 AB8A;CHEROKEE SMALL LETTER ME;Ll;0;L;;;;;N;;;13BA;;13BA AB8B;CHEROKEE SMALL LETTER MI;Ll;0;L;;;;;N;;;13BB;;13BB AB8C;CHEROKEE SMALL LETTER MO;Ll;0;L;;;;;N;;;13BC;;13BC AB8D;CHEROKEE SMALL LETTER MU;Ll;0;L;;;;;N;;;13BD;;13BD AB8E;CHEROKEE SMALL LETTER NA;Ll;0;L;;;;;N;;;13BE;;13BE AB8F;CHEROKEE SMALL LETTER HNA;Ll;0;L;;;;;N;;;13BF;;13BF AB90;CHEROKEE SMALL LETTER NAH;Ll;0;L;;;;;N;;;13C0;;13C0 AB91;CHEROKEE SMALL LETTER NE;Ll;0;L;;;;;N;;;13C1;;13C1 AB92;CHEROKEE SMALL LETTER NI;Ll;0;L;;;;;N;;;13C2;;13C2 AB93;CHEROKEE SMALL LETTER NO;Ll;0;L;;;;;N;;;13C3;;13C3 AB94;CHEROKEE SMALL LETTER NU;Ll;0;L;;;;;N;;;13C4;;13C4 AB95;CHEROKEE SMALL LETTER NV;Ll;0;L;;;;;N;;;13C5;;13C5 AB96;CHEROKEE SMALL LETTER QUA;Ll;0;L;;;;;N;;;13C6;;13C6 AB97;CHEROKEE SMALL LETTER QUE;Ll;0;L;;;;;N;;;13C7;;13C7 AB98;CHEROKEE SMALL LETTER QUI;Ll;0;L;;;;;N;;;13C8;;13C8 AB99;CHEROKEE SMALL LETTER QUO;Ll;0;L;;;;;N;;;13C9;;13C9 AB9A;CHEROKEE SMALL LETTER QUU;Ll;0;L;;;;;N;;;13CA;;13CA AB9B;CHEROKEE SMALL LETTER QUV;Ll;0;L;;;;;N;;;13CB;;13CB AB9C;CHEROKEE SMALL LETTER SA;Ll;0;L;;;;;N;;;13CC;;13CC AB9D;CHEROKEE SMALL LETTER S;Ll;0;L;;;;;N;;;13CD;;13CD AB9E;CHEROKEE SMALL LETTER SE;Ll;0;L;;;;;N;;;13CE;;13CE AB9F;CHEROKEE SMALL LETTER SI;Ll;0;L;;;;;N;;;13CF;;13CF ABA0;CHEROKEE SMALL LETTER SO;Ll;0;L;;;;;N;;;13D0;;13D0 ABA1;CHEROKEE SMALL LETTER SU;Ll;0;L;;;;;N;;;13D1;;13D1 ABA2;CHEROKEE SMALL LETTER SV;Ll;0;L;;;;;N;;;13D2;;13D2 ABA3;CHEROKEE SMALL LETTER DA;Ll;0;L;;;;;N;;;13D3;;13D3 ABA4;CHEROKEE SMALL LETTER TA;Ll;0;L;;;;;N;;;13D4;;13D4 ABA5;CHEROKEE SMALL LETTER DE;Ll;0;L;;;;;N;;;13D5;;13D5 ABA6;CHEROKEE SMALL LETTER TE;Ll;0;L;;;;;N;;;13D6;;13D6 ABA7;CHEROKEE SMALL LETTER DI;Ll;0;L;;;;;N;;;13D7;;13D7 ABA8;CHEROKEE SMALL LETTER TI;Ll;0;L;;;;;N;;;13D8;;13D8 ABA9;CHEROKEE SMALL LETTER DO;Ll;0;L;;;;;N;;;13D9;;13D9 ABAA;CHEROKEE SMALL LETTER DU;Ll;0;L;;;;;N;;;13DA;;13DA ABAB;CHEROKEE SMALL LETTER DV;Ll;0;L;;;;;N;;;13DB;;13DB ABAC;CHEROKEE SMALL LETTER DLA;Ll;0;L;;;;;N;;;13DC;;13DC ABAD;CHEROKEE SMALL LETTER TLA;Ll;0;L;;;;;N;;;13DD;;13DD ABAE;CHEROKEE SMALL LETTER TLE;Ll;0;L;;;;;N;;;13DE;;13DE ABAF;CHEROKEE SMALL LETTER TLI;Ll;0;L;;;;;N;;;13DF;;13DF ABB0;CHEROKEE SMALL LETTER TLO;Ll;0;L;;;;;N;;;13E0;;13E0 ABB1;CHEROKEE SMALL LETTER TLU;Ll;0;L;;;;;N;;;13E1;;13E1 ABB2;CHEROKEE SMALL LETTER TLV;Ll;0;L;;;;;N;;;13E2;;13E2 ABB3;CHEROKEE SMALL LETTER TSA;Ll;0;L;;;;;N;;;13E3;;13E3 ABB4;CHEROKEE SMALL LETTER TSE;Ll;0;L;;;;;N;;;13E4;;13E4 ABB5;CHEROKEE SMALL LETTER TSI;Ll;0;L;;;;;N;;;13E5;;13E5 ABB6;CHEROKEE SMALL LETTER TSO;Ll;0;L;;;;;N;;;13E6;;13E6 ABB7;CHEROKEE SMALL LETTER TSU;Ll;0;L;;;;;N;;;13E7;;13E7 ABB8;CHEROKEE SMALL LETTER TSV;Ll;0;L;;;;;N;;;13E8;;13E8 ABB9;CHEROKEE SMALL LETTER WA;Ll;0;L;;;;;N;;;13E9;;13E9 ABBA;CHEROKEE SMALL LETTER WE;Ll;0;L;;;;;N;;;13EA;;13EA ABBB;CHEROKEE SMALL LETTER WI;Ll;0;L;;;;;N;;;13EB;;13EB ABBC;CHEROKEE SMALL LETTER WO;Ll;0;L;;;;;N;;;13EC;;13EC ABBD;CHEROKEE SMALL LETTER WU;Ll;0;L;;;;;N;;;13ED;;13ED ABBE;CHEROKEE SMALL LETTER WV;Ll;0;L;;;;;N;;;13EE;;13EE ABBF;CHEROKEE SMALL LETTER YA;Ll;0;L;;;;;N;;;13EF;;13EF ABC0;MEETEI MAYEK LETTER KOK;Lo;0;L;;;;;N;;;;; ABC1;MEETEI MAYEK LETTER SAM;Lo;0;L;;;;;N;;;;; ABC2;MEETEI MAYEK LETTER LAI;Lo;0;L;;;;;N;;;;; ABC3;MEETEI MAYEK LETTER MIT;Lo;0;L;;;;;N;;;;; ABC4;MEETEI MAYEK LETTER PA;Lo;0;L;;;;;N;;;;; ABC5;MEETEI MAYEK LETTER NA;Lo;0;L;;;;;N;;;;; ABC6;MEETEI MAYEK LETTER CHIL;Lo;0;L;;;;;N;;;;; ABC7;MEETEI MAYEK LETTER TIL;Lo;0;L;;;;;N;;;;; ABC8;MEETEI MAYEK LETTER KHOU;Lo;0;L;;;;;N;;;;; ABC9;MEETEI MAYEK LETTER NGOU;Lo;0;L;;;;;N;;;;; ABCA;MEETEI MAYEK LETTER THOU;Lo;0;L;;;;;N;;;;; ABCB;MEETEI MAYEK LETTER WAI;Lo;0;L;;;;;N;;;;; ABCC;MEETEI MAYEK LETTER YANG;Lo;0;L;;;;;N;;;;; ABCD;MEETEI MAYEK LETTER HUK;Lo;0;L;;;;;N;;;;; ABCE;MEETEI MAYEK LETTER UN;Lo;0;L;;;;;N;;;;; ABCF;MEETEI MAYEK LETTER I;Lo;0;L;;;;;N;;;;; ABD0;MEETEI MAYEK LETTER PHAM;Lo;0;L;;;;;N;;;;; ABD1;MEETEI MAYEK LETTER ATIYA;Lo;0;L;;;;;N;;;;; ABD2;MEETEI MAYEK LETTER GOK;Lo;0;L;;;;;N;;;;; ABD3;MEETEI MAYEK LETTER JHAM;Lo;0;L;;;;;N;;;;; ABD4;MEETEI MAYEK LETTER RAI;Lo;0;L;;;;;N;;;;; ABD5;MEETEI MAYEK LETTER BA;Lo;0;L;;;;;N;;;;; ABD6;MEETEI MAYEK LETTER JIL;Lo;0;L;;;;;N;;;;; ABD7;MEETEI MAYEK LETTER DIL;Lo;0;L;;;;;N;;;;; ABD8;MEETEI MAYEK LETTER GHOU;Lo;0;L;;;;;N;;;;; ABD9;MEETEI MAYEK LETTER DHOU;Lo;0;L;;;;;N;;;;; ABDA;MEETEI MAYEK LETTER BHAM;Lo;0;L;;;;;N;;;;; ABDB;MEETEI MAYEK LETTER KOK LONSUM;Lo;0;L;;;;;N;;;;; ABDC;MEETEI MAYEK LETTER LAI LONSUM;Lo;0;L;;;;;N;;;;; ABDD;MEETEI MAYEK LETTER MIT LONSUM;Lo;0;L;;;;;N;;;;; ABDE;MEETEI MAYEK LETTER PA LONSUM;Lo;0;L;;;;;N;;;;; ABDF;MEETEI MAYEK LETTER NA LONSUM;Lo;0;L;;;;;N;;;;; ABE0;MEETEI MAYEK LETTER TIL LONSUM;Lo;0;L;;;;;N;;;;; ABE1;MEETEI MAYEK LETTER NGOU LONSUM;Lo;0;L;;;;;N;;;;; ABE2;MEETEI MAYEK LETTER I LONSUM;Lo;0;L;;;;;N;;;;; ABE3;MEETEI MAYEK VOWEL SIGN ONAP;Mc;0;L;;;;;N;;;;; ABE4;MEETEI MAYEK VOWEL SIGN INAP;Mc;0;L;;;;;N;;;;; ABE5;MEETEI MAYEK VOWEL SIGN ANAP;Mn;0;NSM;;;;;N;;;;; ABE6;MEETEI MAYEK VOWEL SIGN YENAP;Mc;0;L;;;;;N;;;;; ABE7;MEETEI MAYEK VOWEL SIGN SOUNAP;Mc;0;L;;;;;N;;;;; ABE8;MEETEI MAYEK VOWEL SIGN UNAP;Mn;0;NSM;;;;;N;;;;; ABE9;MEETEI MAYEK VOWEL SIGN CHEINAP;Mc;0;L;;;;;N;;;;; ABEA;MEETEI MAYEK VOWEL SIGN NUNG;Mc;0;L;;;;;N;;;;; ABEB;MEETEI MAYEK CHEIKHEI;Po;0;L;;;;;N;;;;; ABEC;MEETEI MAYEK LUM IYEK;Mc;0;L;;;;;N;;;;; ABED;MEETEI MAYEK APUN IYEK;Mn;9;NSM;;;;;N;;;;; ABF0;MEETEI MAYEK DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; ABF1;MEETEI MAYEK DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; ABF2;MEETEI MAYEK DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; ABF3;MEETEI MAYEK DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; ABF4;MEETEI MAYEK DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; ABF5;MEETEI MAYEK DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; ABF6;MEETEI MAYEK DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; ABF7;MEETEI MAYEK DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; ABF8;MEETEI MAYEK DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; ABF9;MEETEI MAYEK DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; AC00;;Lo;0;L;;;;;N;;;;; D7A3;;Lo;0;L;;;;;N;;;;; D7B0;HANGUL JUNGSEONG O-YEO;Lo;0;L;;;;;N;;;;; D7B1;HANGUL JUNGSEONG O-O-I;Lo;0;L;;;;;N;;;;; D7B2;HANGUL JUNGSEONG YO-A;Lo;0;L;;;;;N;;;;; D7B3;HANGUL JUNGSEONG YO-AE;Lo;0;L;;;;;N;;;;; D7B4;HANGUL JUNGSEONG YO-EO;Lo;0;L;;;;;N;;;;; D7B5;HANGUL JUNGSEONG U-YEO;Lo;0;L;;;;;N;;;;; D7B6;HANGUL JUNGSEONG U-I-I;Lo;0;L;;;;;N;;;;; D7B7;HANGUL JUNGSEONG YU-AE;Lo;0;L;;;;;N;;;;; D7B8;HANGUL JUNGSEONG YU-O;Lo;0;L;;;;;N;;;;; D7B9;HANGUL JUNGSEONG EU-A;Lo;0;L;;;;;N;;;;; D7BA;HANGUL JUNGSEONG EU-EO;Lo;0;L;;;;;N;;;;; D7BB;HANGUL JUNGSEONG EU-E;Lo;0;L;;;;;N;;;;; D7BC;HANGUL JUNGSEONG EU-O;Lo;0;L;;;;;N;;;;; D7BD;HANGUL JUNGSEONG I-YA-O;Lo;0;L;;;;;N;;;;; D7BE;HANGUL JUNGSEONG I-YAE;Lo;0;L;;;;;N;;;;; D7BF;HANGUL JUNGSEONG I-YEO;Lo;0;L;;;;;N;;;;; D7C0;HANGUL JUNGSEONG I-YE;Lo;0;L;;;;;N;;;;; D7C1;HANGUL JUNGSEONG I-O-I;Lo;0;L;;;;;N;;;;; D7C2;HANGUL JUNGSEONG I-YO;Lo;0;L;;;;;N;;;;; D7C3;HANGUL JUNGSEONG I-YU;Lo;0;L;;;;;N;;;;; D7C4;HANGUL JUNGSEONG I-I;Lo;0;L;;;;;N;;;;; D7C5;HANGUL JUNGSEONG ARAEA-A;Lo;0;L;;;;;N;;;;; D7C6;HANGUL JUNGSEONG ARAEA-E;Lo;0;L;;;;;N;;;;; D7CB;HANGUL JONGSEONG NIEUN-RIEUL;Lo;0;L;;;;;N;;;;; D7CC;HANGUL JONGSEONG NIEUN-CHIEUCH;Lo;0;L;;;;;N;;;;; D7CD;HANGUL JONGSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;;;; D7CE;HANGUL JONGSEONG SSANGTIKEUT-PIEUP;Lo;0;L;;;;;N;;;;; D7CF;HANGUL JONGSEONG TIKEUT-PIEUP;Lo;0;L;;;;;N;;;;; D7D0;HANGUL JONGSEONG TIKEUT-SIOS;Lo;0;L;;;;;N;;;;; D7D1;HANGUL JONGSEONG TIKEUT-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; D7D2;HANGUL JONGSEONG TIKEUT-CIEUC;Lo;0;L;;;;;N;;;;; D7D3;HANGUL JONGSEONG TIKEUT-CHIEUCH;Lo;0;L;;;;;N;;;;; D7D4;HANGUL JONGSEONG TIKEUT-THIEUTH;Lo;0;L;;;;;N;;;;; D7D5;HANGUL JONGSEONG RIEUL-SSANGKIYEOK;Lo;0;L;;;;;N;;;;; D7D6;HANGUL JONGSEONG RIEUL-KIYEOK-HIEUH;Lo;0;L;;;;;N;;;;; D7D7;HANGUL JONGSEONG SSANGRIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;; D7D8;HANGUL JONGSEONG RIEUL-MIEUM-HIEUH;Lo;0;L;;;;;N;;;;; D7D9;HANGUL JONGSEONG RIEUL-PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;; D7DA;HANGUL JONGSEONG RIEUL-PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;; D7DB;HANGUL JONGSEONG RIEUL-YESIEUNG;Lo;0;L;;;;;N;;;;; D7DC;HANGUL JONGSEONG RIEUL-YEORINHIEUH-HIEUH;Lo;0;L;;;;;N;;;;; D7DD;HANGUL JONGSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;; D7DE;HANGUL JONGSEONG MIEUM-NIEUN;Lo;0;L;;;;;N;;;;; D7DF;HANGUL JONGSEONG MIEUM-SSANGNIEUN;Lo;0;L;;;;;N;;;;; D7E0;HANGUL JONGSEONG SSANGMIEUM;Lo;0;L;;;;;N;;;;; D7E1;HANGUL JONGSEONG MIEUM-PIEUP-SIOS;Lo;0;L;;;;;N;;;;; D7E2;HANGUL JONGSEONG MIEUM-CIEUC;Lo;0;L;;;;;N;;;;; D7E3;HANGUL JONGSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;; D7E4;HANGUL JONGSEONG PIEUP-RIEUL-PHIEUPH;Lo;0;L;;;;;N;;;;; D7E5;HANGUL JONGSEONG PIEUP-MIEUM;Lo;0;L;;;;;N;;;;; D7E6;HANGUL JONGSEONG SSANGPIEUP;Lo;0;L;;;;;N;;;;; D7E7;HANGUL JONGSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; D7E8;HANGUL JONGSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;; D7E9;HANGUL JONGSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;; D7EA;HANGUL JONGSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;; D7EB;HANGUL JONGSEONG SIOS-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; D7EC;HANGUL JONGSEONG SSANGSIOS-KIYEOK;Lo;0;L;;;;;N;;;;; D7ED;HANGUL JONGSEONG SSANGSIOS-TIKEUT;Lo;0;L;;;;;N;;;;; D7EE;HANGUL JONGSEONG SIOS-PANSIOS;Lo;0;L;;;;;N;;;;; D7EF;HANGUL JONGSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;; D7F0;HANGUL JONGSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;; D7F1;HANGUL JONGSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;; D7F2;HANGUL JONGSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;; D7F3;HANGUL JONGSEONG PANSIOS-PIEUP;Lo;0;L;;;;;N;;;;; D7F4;HANGUL JONGSEONG PANSIOS-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; D7F5;HANGUL JONGSEONG YESIEUNG-MIEUM;Lo;0;L;;;;;N;;;;; D7F6;HANGUL JONGSEONG YESIEUNG-HIEUH;Lo;0;L;;;;;N;;;;; D7F7;HANGUL JONGSEONG CIEUC-PIEUP;Lo;0;L;;;;;N;;;;; D7F8;HANGUL JONGSEONG CIEUC-SSANGPIEUP;Lo;0;L;;;;;N;;;;; D7F9;HANGUL JONGSEONG SSANGCIEUC;Lo;0;L;;;;;N;;;;; D7FA;HANGUL JONGSEONG PHIEUPH-SIOS;Lo;0;L;;;;;N;;;;; D7FB;HANGUL JONGSEONG PHIEUPH-THIEUTH;Lo;0;L;;;;;N;;;;; D800;;Cs;0;L;;;;;N;;;;; DB7F;;Cs;0;L;;;;;N;;;;; DB80;;Cs;0;L;;;;;N;;;;; DBFF;;Cs;0;L;;;;;N;;;;; DC00;;Cs;0;L;;;;;N;;;;; DFFF;;Cs;0;L;;;;;N;;;;; E000;;Co;0;L;;;;;N;;;;; F8FF;;Co;0;L;;;;;N;;;;; F900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;; F901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;; F902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;; F903;CJK COMPATIBILITY IDEOGRAPH-F903;Lo;0;L;8CC8;;;;N;;;;; F904;CJK COMPATIBILITY IDEOGRAPH-F904;Lo;0;L;6ED1;;;;N;;;;; F905;CJK COMPATIBILITY IDEOGRAPH-F905;Lo;0;L;4E32;;;;N;;;;; F906;CJK COMPATIBILITY IDEOGRAPH-F906;Lo;0;L;53E5;;;;N;;;;; F907;CJK COMPATIBILITY IDEOGRAPH-F907;Lo;0;L;9F9C;;;;N;;;;; F908;CJK COMPATIBILITY IDEOGRAPH-F908;Lo;0;L;9F9C;;;;N;;;;; F909;CJK COMPATIBILITY IDEOGRAPH-F909;Lo;0;L;5951;;;;N;;;;; F90A;CJK COMPATIBILITY IDEOGRAPH-F90A;Lo;0;L;91D1;;;;N;;;;; F90B;CJK COMPATIBILITY IDEOGRAPH-F90B;Lo;0;L;5587;;;;N;;;;; F90C;CJK COMPATIBILITY IDEOGRAPH-F90C;Lo;0;L;5948;;;;N;;;;; F90D;CJK COMPATIBILITY IDEOGRAPH-F90D;Lo;0;L;61F6;;;;N;;;;; F90E;CJK COMPATIBILITY IDEOGRAPH-F90E;Lo;0;L;7669;;;;N;;;;; F90F;CJK COMPATIBILITY IDEOGRAPH-F90F;Lo;0;L;7F85;;;;N;;;;; F910;CJK COMPATIBILITY IDEOGRAPH-F910;Lo;0;L;863F;;;;N;;;;; F911;CJK COMPATIBILITY IDEOGRAPH-F911;Lo;0;L;87BA;;;;N;;;;; F912;CJK COMPATIBILITY IDEOGRAPH-F912;Lo;0;L;88F8;;;;N;;;;; F913;CJK COMPATIBILITY IDEOGRAPH-F913;Lo;0;L;908F;;;;N;;;;; F914;CJK COMPATIBILITY IDEOGRAPH-F914;Lo;0;L;6A02;;;;N;;;;; F915;CJK COMPATIBILITY IDEOGRAPH-F915;Lo;0;L;6D1B;;;;N;;;;; F916;CJK COMPATIBILITY IDEOGRAPH-F916;Lo;0;L;70D9;;;;N;;;;; F917;CJK COMPATIBILITY IDEOGRAPH-F917;Lo;0;L;73DE;;;;N;;;;; F918;CJK COMPATIBILITY IDEOGRAPH-F918;Lo;0;L;843D;;;;N;;;;; F919;CJK COMPATIBILITY IDEOGRAPH-F919;Lo;0;L;916A;;;;N;;;;; F91A;CJK COMPATIBILITY IDEOGRAPH-F91A;Lo;0;L;99F1;;;;N;;;;; F91B;CJK COMPATIBILITY IDEOGRAPH-F91B;Lo;0;L;4E82;;;;N;;;;; F91C;CJK COMPATIBILITY IDEOGRAPH-F91C;Lo;0;L;5375;;;;N;;;;; F91D;CJK COMPATIBILITY IDEOGRAPH-F91D;Lo;0;L;6B04;;;;N;;;;; F91E;CJK COMPATIBILITY IDEOGRAPH-F91E;Lo;0;L;721B;;;;N;;;;; F91F;CJK COMPATIBILITY IDEOGRAPH-F91F;Lo;0;L;862D;;;;N;;;;; F920;CJK COMPATIBILITY IDEOGRAPH-F920;Lo;0;L;9E1E;;;;N;;;;; F921;CJK COMPATIBILITY IDEOGRAPH-F921;Lo;0;L;5D50;;;;N;;;;; F922;CJK COMPATIBILITY IDEOGRAPH-F922;Lo;0;L;6FEB;;;;N;;;;; F923;CJK COMPATIBILITY IDEOGRAPH-F923;Lo;0;L;85CD;;;;N;;;;; F924;CJK COMPATIBILITY IDEOGRAPH-F924;Lo;0;L;8964;;;;N;;;;; F925;CJK COMPATIBILITY IDEOGRAPH-F925;Lo;0;L;62C9;;;;N;;;;; F926;CJK COMPATIBILITY IDEOGRAPH-F926;Lo;0;L;81D8;;;;N;;;;; F927;CJK COMPATIBILITY IDEOGRAPH-F927;Lo;0;L;881F;;;;N;;;;; F928;CJK COMPATIBILITY IDEOGRAPH-F928;Lo;0;L;5ECA;;;;N;;;;; F929;CJK COMPATIBILITY IDEOGRAPH-F929;Lo;0;L;6717;;;;N;;;;; F92A;CJK COMPATIBILITY IDEOGRAPH-F92A;Lo;0;L;6D6A;;;;N;;;;; F92B;CJK COMPATIBILITY IDEOGRAPH-F92B;Lo;0;L;72FC;;;;N;;;;; F92C;CJK COMPATIBILITY IDEOGRAPH-F92C;Lo;0;L;90CE;;;;N;;;;; F92D;CJK COMPATIBILITY IDEOGRAPH-F92D;Lo;0;L;4F86;;;;N;;;;; F92E;CJK COMPATIBILITY IDEOGRAPH-F92E;Lo;0;L;51B7;;;;N;;;;; F92F;CJK COMPATIBILITY IDEOGRAPH-F92F;Lo;0;L;52DE;;;;N;;;;; F930;CJK COMPATIBILITY IDEOGRAPH-F930;Lo;0;L;64C4;;;;N;;;;; F931;CJK COMPATIBILITY IDEOGRAPH-F931;Lo;0;L;6AD3;;;;N;;;;; F932;CJK COMPATIBILITY IDEOGRAPH-F932;Lo;0;L;7210;;;;N;;;;; F933;CJK COMPATIBILITY IDEOGRAPH-F933;Lo;0;L;76E7;;;;N;;;;; F934;CJK COMPATIBILITY IDEOGRAPH-F934;Lo;0;L;8001;;;;N;;;;; F935;CJK COMPATIBILITY IDEOGRAPH-F935;Lo;0;L;8606;;;;N;;;;; F936;CJK COMPATIBILITY IDEOGRAPH-F936;Lo;0;L;865C;;;;N;;;;; F937;CJK COMPATIBILITY IDEOGRAPH-F937;Lo;0;L;8DEF;;;;N;;;;; F938;CJK COMPATIBILITY IDEOGRAPH-F938;Lo;0;L;9732;;;;N;;;;; F939;CJK COMPATIBILITY IDEOGRAPH-F939;Lo;0;L;9B6F;;;;N;;;;; F93A;CJK COMPATIBILITY IDEOGRAPH-F93A;Lo;0;L;9DFA;;;;N;;;;; F93B;CJK COMPATIBILITY IDEOGRAPH-F93B;Lo;0;L;788C;;;;N;;;;; F93C;CJK COMPATIBILITY IDEOGRAPH-F93C;Lo;0;L;797F;;;;N;;;;; F93D;CJK COMPATIBILITY IDEOGRAPH-F93D;Lo;0;L;7DA0;;;;N;;;;; F93E;CJK COMPATIBILITY IDEOGRAPH-F93E;Lo;0;L;83C9;;;;N;;;;; F93F;CJK COMPATIBILITY IDEOGRAPH-F93F;Lo;0;L;9304;;;;N;;;;; F940;CJK COMPATIBILITY IDEOGRAPH-F940;Lo;0;L;9E7F;;;;N;;;;; F941;CJK COMPATIBILITY IDEOGRAPH-F941;Lo;0;L;8AD6;;;;N;;;;; F942;CJK COMPATIBILITY IDEOGRAPH-F942;Lo;0;L;58DF;;;;N;;;;; F943;CJK COMPATIBILITY IDEOGRAPH-F943;Lo;0;L;5F04;;;;N;;;;; F944;CJK COMPATIBILITY IDEOGRAPH-F944;Lo;0;L;7C60;;;;N;;;;; F945;CJK COMPATIBILITY IDEOGRAPH-F945;Lo;0;L;807E;;;;N;;;;; F946;CJK COMPATIBILITY IDEOGRAPH-F946;Lo;0;L;7262;;;;N;;;;; F947;CJK COMPATIBILITY IDEOGRAPH-F947;Lo;0;L;78CA;;;;N;;;;; F948;CJK COMPATIBILITY IDEOGRAPH-F948;Lo;0;L;8CC2;;;;N;;;;; F949;CJK COMPATIBILITY IDEOGRAPH-F949;Lo;0;L;96F7;;;;N;;;;; F94A;CJK COMPATIBILITY IDEOGRAPH-F94A;Lo;0;L;58D8;;;;N;;;;; F94B;CJK COMPATIBILITY IDEOGRAPH-F94B;Lo;0;L;5C62;;;;N;;;;; F94C;CJK COMPATIBILITY IDEOGRAPH-F94C;Lo;0;L;6A13;;;;N;;;;; F94D;CJK COMPATIBILITY IDEOGRAPH-F94D;Lo;0;L;6DDA;;;;N;;;;; F94E;CJK COMPATIBILITY IDEOGRAPH-F94E;Lo;0;L;6F0F;;;;N;;;;; F94F;CJK COMPATIBILITY IDEOGRAPH-F94F;Lo;0;L;7D2F;;;;N;;;;; F950;CJK COMPATIBILITY IDEOGRAPH-F950;Lo;0;L;7E37;;;;N;;;;; F951;CJK COMPATIBILITY IDEOGRAPH-F951;Lo;0;L;964B;;;;N;;;;; F952;CJK COMPATIBILITY IDEOGRAPH-F952;Lo;0;L;52D2;;;;N;;;;; F953;CJK COMPATIBILITY IDEOGRAPH-F953;Lo;0;L;808B;;;;N;;;;; F954;CJK COMPATIBILITY IDEOGRAPH-F954;Lo;0;L;51DC;;;;N;;;;; F955;CJK COMPATIBILITY IDEOGRAPH-F955;Lo;0;L;51CC;;;;N;;;;; F956;CJK COMPATIBILITY IDEOGRAPH-F956;Lo;0;L;7A1C;;;;N;;;;; F957;CJK COMPATIBILITY IDEOGRAPH-F957;Lo;0;L;7DBE;;;;N;;;;; F958;CJK COMPATIBILITY IDEOGRAPH-F958;Lo;0;L;83F1;;;;N;;;;; F959;CJK COMPATIBILITY IDEOGRAPH-F959;Lo;0;L;9675;;;;N;;;;; F95A;CJK COMPATIBILITY IDEOGRAPH-F95A;Lo;0;L;8B80;;;;N;;;;; F95B;CJK COMPATIBILITY IDEOGRAPH-F95B;Lo;0;L;62CF;;;;N;;;;; F95C;CJK COMPATIBILITY IDEOGRAPH-F95C;Lo;0;L;6A02;;;;N;;;;; F95D;CJK COMPATIBILITY IDEOGRAPH-F95D;Lo;0;L;8AFE;;;;N;;;;; F95E;CJK COMPATIBILITY IDEOGRAPH-F95E;Lo;0;L;4E39;;;;N;;;;; F95F;CJK COMPATIBILITY IDEOGRAPH-F95F;Lo;0;L;5BE7;;;;N;;;;; F960;CJK COMPATIBILITY IDEOGRAPH-F960;Lo;0;L;6012;;;;N;;;;; F961;CJK COMPATIBILITY IDEOGRAPH-F961;Lo;0;L;7387;;;;N;;;;; F962;CJK COMPATIBILITY IDEOGRAPH-F962;Lo;0;L;7570;;;;N;;;;; F963;CJK COMPATIBILITY IDEOGRAPH-F963;Lo;0;L;5317;;;;N;;;;; F964;CJK COMPATIBILITY IDEOGRAPH-F964;Lo;0;L;78FB;;;;N;;;;; F965;CJK COMPATIBILITY IDEOGRAPH-F965;Lo;0;L;4FBF;;;;N;;;;; F966;CJK COMPATIBILITY IDEOGRAPH-F966;Lo;0;L;5FA9;;;;N;;;;; F967;CJK COMPATIBILITY IDEOGRAPH-F967;Lo;0;L;4E0D;;;;N;;;;; F968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;; F969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;; F96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;; F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;3;N;;;;; F96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;; F96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;; F96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;; F96F;CJK COMPATIBILITY IDEOGRAPH-F96F;Lo;0;L;8AAA;;;;N;;;;; F970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;; F971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;; F972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;; F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;10;N;;;;; F974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;; F975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;; F976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;; F977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;; F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;2;N;;;;; F979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;; F97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;; F97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;; F97C;CJK COMPATIBILITY IDEOGRAPH-F97C;Lo;0;L;826F;;;;N;;;;; F97D;CJK COMPATIBILITY IDEOGRAPH-F97D;Lo;0;L;8AD2;;;;N;;;;; F97E;CJK COMPATIBILITY IDEOGRAPH-F97E;Lo;0;L;91CF;;;;N;;;;; F97F;CJK COMPATIBILITY IDEOGRAPH-F97F;Lo;0;L;52F5;;;;N;;;;; F980;CJK COMPATIBILITY IDEOGRAPH-F980;Lo;0;L;5442;;;;N;;;;; F981;CJK COMPATIBILITY IDEOGRAPH-F981;Lo;0;L;5973;;;;N;;;;; F982;CJK COMPATIBILITY IDEOGRAPH-F982;Lo;0;L;5EEC;;;;N;;;;; F983;CJK COMPATIBILITY IDEOGRAPH-F983;Lo;0;L;65C5;;;;N;;;;; F984;CJK COMPATIBILITY IDEOGRAPH-F984;Lo;0;L;6FFE;;;;N;;;;; F985;CJK COMPATIBILITY IDEOGRAPH-F985;Lo;0;L;792A;;;;N;;;;; F986;CJK COMPATIBILITY IDEOGRAPH-F986;Lo;0;L;95AD;;;;N;;;;; F987;CJK COMPATIBILITY IDEOGRAPH-F987;Lo;0;L;9A6A;;;;N;;;;; F988;CJK COMPATIBILITY IDEOGRAPH-F988;Lo;0;L;9E97;;;;N;;;;; F989;CJK COMPATIBILITY IDEOGRAPH-F989;Lo;0;L;9ECE;;;;N;;;;; F98A;CJK COMPATIBILITY IDEOGRAPH-F98A;Lo;0;L;529B;;;;N;;;;; F98B;CJK COMPATIBILITY IDEOGRAPH-F98B;Lo;0;L;66C6;;;;N;;;;; F98C;CJK COMPATIBILITY IDEOGRAPH-F98C;Lo;0;L;6B77;;;;N;;;;; F98D;CJK COMPATIBILITY IDEOGRAPH-F98D;Lo;0;L;8F62;;;;N;;;;; F98E;CJK COMPATIBILITY IDEOGRAPH-F98E;Lo;0;L;5E74;;;;N;;;;; F98F;CJK COMPATIBILITY IDEOGRAPH-F98F;Lo;0;L;6190;;;;N;;;;; F990;CJK COMPATIBILITY IDEOGRAPH-F990;Lo;0;L;6200;;;;N;;;;; F991;CJK COMPATIBILITY IDEOGRAPH-F991;Lo;0;L;649A;;;;N;;;;; F992;CJK COMPATIBILITY IDEOGRAPH-F992;Lo;0;L;6F23;;;;N;;;;; F993;CJK COMPATIBILITY IDEOGRAPH-F993;Lo;0;L;7149;;;;N;;;;; F994;CJK COMPATIBILITY IDEOGRAPH-F994;Lo;0;L;7489;;;;N;;;;; F995;CJK COMPATIBILITY IDEOGRAPH-F995;Lo;0;L;79CA;;;;N;;;;; F996;CJK COMPATIBILITY IDEOGRAPH-F996;Lo;0;L;7DF4;;;;N;;;;; F997;CJK COMPATIBILITY IDEOGRAPH-F997;Lo;0;L;806F;;;;N;;;;; F998;CJK COMPATIBILITY IDEOGRAPH-F998;Lo;0;L;8F26;;;;N;;;;; F999;CJK COMPATIBILITY IDEOGRAPH-F999;Lo;0;L;84EE;;;;N;;;;; F99A;CJK COMPATIBILITY IDEOGRAPH-F99A;Lo;0;L;9023;;;;N;;;;; F99B;CJK COMPATIBILITY IDEOGRAPH-F99B;Lo;0;L;934A;;;;N;;;;; F99C;CJK COMPATIBILITY IDEOGRAPH-F99C;Lo;0;L;5217;;;;N;;;;; F99D;CJK COMPATIBILITY IDEOGRAPH-F99D;Lo;0;L;52A3;;;;N;;;;; F99E;CJK COMPATIBILITY IDEOGRAPH-F99E;Lo;0;L;54BD;;;;N;;;;; F99F;CJK COMPATIBILITY IDEOGRAPH-F99F;Lo;0;L;70C8;;;;N;;;;; F9A0;CJK COMPATIBILITY IDEOGRAPH-F9A0;Lo;0;L;88C2;;;;N;;;;; F9A1;CJK COMPATIBILITY IDEOGRAPH-F9A1;Lo;0;L;8AAA;;;;N;;;;; F9A2;CJK COMPATIBILITY IDEOGRAPH-F9A2;Lo;0;L;5EC9;;;;N;;;;; F9A3;CJK COMPATIBILITY IDEOGRAPH-F9A3;Lo;0;L;5FF5;;;;N;;;;; F9A4;CJK COMPATIBILITY IDEOGRAPH-F9A4;Lo;0;L;637B;;;;N;;;;; F9A5;CJK COMPATIBILITY IDEOGRAPH-F9A5;Lo;0;L;6BAE;;;;N;;;;; F9A6;CJK COMPATIBILITY IDEOGRAPH-F9A6;Lo;0;L;7C3E;;;;N;;;;; F9A7;CJK COMPATIBILITY IDEOGRAPH-F9A7;Lo;0;L;7375;;;;N;;;;; F9A8;CJK COMPATIBILITY IDEOGRAPH-F9A8;Lo;0;L;4EE4;;;;N;;;;; F9A9;CJK COMPATIBILITY IDEOGRAPH-F9A9;Lo;0;L;56F9;;;;N;;;;; F9AA;CJK COMPATIBILITY IDEOGRAPH-F9AA;Lo;0;L;5BE7;;;;N;;;;; F9AB;CJK COMPATIBILITY IDEOGRAPH-F9AB;Lo;0;L;5DBA;;;;N;;;;; F9AC;CJK COMPATIBILITY IDEOGRAPH-F9AC;Lo;0;L;601C;;;;N;;;;; F9AD;CJK COMPATIBILITY IDEOGRAPH-F9AD;Lo;0;L;73B2;;;;N;;;;; F9AE;CJK COMPATIBILITY IDEOGRAPH-F9AE;Lo;0;L;7469;;;;N;;;;; F9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;; F9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;; F9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;; F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;0;N;;;;; F9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;; F9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;; F9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;; F9B6;CJK COMPATIBILITY IDEOGRAPH-F9B6;Lo;0;L;79AE;;;;N;;;;; F9B7;CJK COMPATIBILITY IDEOGRAPH-F9B7;Lo;0;L;91B4;;;;N;;;;; F9B8;CJK COMPATIBILITY IDEOGRAPH-F9B8;Lo;0;L;96B8;;;;N;;;;; F9B9;CJK COMPATIBILITY IDEOGRAPH-F9B9;Lo;0;L;60E1;;;;N;;;;; F9BA;CJK COMPATIBILITY IDEOGRAPH-F9BA;Lo;0;L;4E86;;;;N;;;;; F9BB;CJK COMPATIBILITY IDEOGRAPH-F9BB;Lo;0;L;50DA;;;;N;;;;; F9BC;CJK COMPATIBILITY IDEOGRAPH-F9BC;Lo;0;L;5BEE;;;;N;;;;; F9BD;CJK COMPATIBILITY IDEOGRAPH-F9BD;Lo;0;L;5C3F;;;;N;;;;; F9BE;CJK COMPATIBILITY IDEOGRAPH-F9BE;Lo;0;L;6599;;;;N;;;;; F9BF;CJK COMPATIBILITY IDEOGRAPH-F9BF;Lo;0;L;6A02;;;;N;;;;; F9C0;CJK COMPATIBILITY IDEOGRAPH-F9C0;Lo;0;L;71CE;;;;N;;;;; F9C1;CJK COMPATIBILITY IDEOGRAPH-F9C1;Lo;0;L;7642;;;;N;;;;; F9C2;CJK COMPATIBILITY IDEOGRAPH-F9C2;Lo;0;L;84FC;;;;N;;;;; F9C3;CJK COMPATIBILITY IDEOGRAPH-F9C3;Lo;0;L;907C;;;;N;;;;; F9C4;CJK COMPATIBILITY IDEOGRAPH-F9C4;Lo;0;L;9F8D;;;;N;;;;; F9C5;CJK COMPATIBILITY IDEOGRAPH-F9C5;Lo;0;L;6688;;;;N;;;;; F9C6;CJK COMPATIBILITY IDEOGRAPH-F9C6;Lo;0;L;962E;;;;N;;;;; F9C7;CJK COMPATIBILITY IDEOGRAPH-F9C7;Lo;0;L;5289;;;;N;;;;; F9C8;CJK COMPATIBILITY IDEOGRAPH-F9C8;Lo;0;L;677B;;;;N;;;;; F9C9;CJK COMPATIBILITY IDEOGRAPH-F9C9;Lo;0;L;67F3;;;;N;;;;; F9CA;CJK COMPATIBILITY IDEOGRAPH-F9CA;Lo;0;L;6D41;;;;N;;;;; F9CB;CJK COMPATIBILITY IDEOGRAPH-F9CB;Lo;0;L;6E9C;;;;N;;;;; F9CC;CJK COMPATIBILITY IDEOGRAPH-F9CC;Lo;0;L;7409;;;;N;;;;; F9CD;CJK COMPATIBILITY IDEOGRAPH-F9CD;Lo;0;L;7559;;;;N;;;;; F9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;; F9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;; F9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;; F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;6;N;;;;; F9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;; F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;6;N;;;;; F9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;; F9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;; F9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;; F9D7;CJK COMPATIBILITY IDEOGRAPH-F9D7;Lo;0;L;8F2A;;;;N;;;;; F9D8;CJK COMPATIBILITY IDEOGRAPH-F9D8;Lo;0;L;5F8B;;;;N;;;;; F9D9;CJK COMPATIBILITY IDEOGRAPH-F9D9;Lo;0;L;6144;;;;N;;;;; F9DA;CJK COMPATIBILITY IDEOGRAPH-F9DA;Lo;0;L;6817;;;;N;;;;; F9DB;CJK COMPATIBILITY IDEOGRAPH-F9DB;Lo;0;L;7387;;;;N;;;;; F9DC;CJK COMPATIBILITY IDEOGRAPH-F9DC;Lo;0;L;9686;;;;N;;;;; F9DD;CJK COMPATIBILITY IDEOGRAPH-F9DD;Lo;0;L;5229;;;;N;;;;; F9DE;CJK COMPATIBILITY IDEOGRAPH-F9DE;Lo;0;L;540F;;;;N;;;;; F9DF;CJK COMPATIBILITY IDEOGRAPH-F9DF;Lo;0;L;5C65;;;;N;;;;; F9E0;CJK COMPATIBILITY IDEOGRAPH-F9E0;Lo;0;L;6613;;;;N;;;;; F9E1;CJK COMPATIBILITY IDEOGRAPH-F9E1;Lo;0;L;674E;;;;N;;;;; F9E2;CJK COMPATIBILITY IDEOGRAPH-F9E2;Lo;0;L;68A8;;;;N;;;;; F9E3;CJK COMPATIBILITY IDEOGRAPH-F9E3;Lo;0;L;6CE5;;;;N;;;;; F9E4;CJK COMPATIBILITY IDEOGRAPH-F9E4;Lo;0;L;7406;;;;N;;;;; F9E5;CJK COMPATIBILITY IDEOGRAPH-F9E5;Lo;0;L;75E2;;;;N;;;;; F9E6;CJK COMPATIBILITY IDEOGRAPH-F9E6;Lo;0;L;7F79;;;;N;;;;; F9E7;CJK COMPATIBILITY IDEOGRAPH-F9E7;Lo;0;L;88CF;;;;N;;;;; F9E8;CJK COMPATIBILITY IDEOGRAPH-F9E8;Lo;0;L;88E1;;;;N;;;;; F9E9;CJK COMPATIBILITY IDEOGRAPH-F9E9;Lo;0;L;91CC;;;;N;;;;; F9EA;CJK COMPATIBILITY IDEOGRAPH-F9EA;Lo;0;L;96E2;;;;N;;;;; F9EB;CJK COMPATIBILITY IDEOGRAPH-F9EB;Lo;0;L;533F;;;;N;;;;; F9EC;CJK COMPATIBILITY IDEOGRAPH-F9EC;Lo;0;L;6EBA;;;;N;;;;; F9ED;CJK COMPATIBILITY IDEOGRAPH-F9ED;Lo;0;L;541D;;;;N;;;;; F9EE;CJK COMPATIBILITY IDEOGRAPH-F9EE;Lo;0;L;71D0;;;;N;;;;; F9EF;CJK COMPATIBILITY IDEOGRAPH-F9EF;Lo;0;L;7498;;;;N;;;;; F9F0;CJK COMPATIBILITY IDEOGRAPH-F9F0;Lo;0;L;85FA;;;;N;;;;; F9F1;CJK COMPATIBILITY IDEOGRAPH-F9F1;Lo;0;L;96A3;;;;N;;;;; F9F2;CJK COMPATIBILITY IDEOGRAPH-F9F2;Lo;0;L;9C57;;;;N;;;;; F9F3;CJK COMPATIBILITY IDEOGRAPH-F9F3;Lo;0;L;9E9F;;;;N;;;;; F9F4;CJK COMPATIBILITY IDEOGRAPH-F9F4;Lo;0;L;6797;;;;N;;;;; F9F5;CJK COMPATIBILITY IDEOGRAPH-F9F5;Lo;0;L;6DCB;;;;N;;;;; F9F6;CJK COMPATIBILITY IDEOGRAPH-F9F6;Lo;0;L;81E8;;;;N;;;;; F9F7;CJK COMPATIBILITY IDEOGRAPH-F9F7;Lo;0;L;7ACB;;;;N;;;;; F9F8;CJK COMPATIBILITY IDEOGRAPH-F9F8;Lo;0;L;7B20;;;;N;;;;; F9F9;CJK COMPATIBILITY IDEOGRAPH-F9F9;Lo;0;L;7C92;;;;N;;;;; F9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;; F9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;; F9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;; F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;10;N;;;;; F9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;; F9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;; FA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;; FA01;CJK COMPATIBILITY IDEOGRAPH-FA01;Lo;0;L;5EA6;;;;N;;;;; FA02;CJK COMPATIBILITY IDEOGRAPH-FA02;Lo;0;L;62D3;;;;N;;;;; FA03;CJK COMPATIBILITY IDEOGRAPH-FA03;Lo;0;L;7CD6;;;;N;;;;; FA04;CJK COMPATIBILITY IDEOGRAPH-FA04;Lo;0;L;5B85;;;;N;;;;; FA05;CJK COMPATIBILITY IDEOGRAPH-FA05;Lo;0;L;6D1E;;;;N;;;;; FA06;CJK COMPATIBILITY IDEOGRAPH-FA06;Lo;0;L;66B4;;;;N;;;;; FA07;CJK COMPATIBILITY IDEOGRAPH-FA07;Lo;0;L;8F3B;;;;N;;;;; FA08;CJK COMPATIBILITY IDEOGRAPH-FA08;Lo;0;L;884C;;;;N;;;;; FA09;CJK COMPATIBILITY IDEOGRAPH-FA09;Lo;0;L;964D;;;;N;;;;; FA0A;CJK COMPATIBILITY IDEOGRAPH-FA0A;Lo;0;L;898B;;;;N;;;;; FA0B;CJK COMPATIBILITY IDEOGRAPH-FA0B;Lo;0;L;5ED3;;;;N;;;;; FA0C;CJK COMPATIBILITY IDEOGRAPH-FA0C;Lo;0;L;5140;;;;N;;;;; FA0D;CJK COMPATIBILITY IDEOGRAPH-FA0D;Lo;0;L;55C0;;;;N;;;;; FA0E;CJK COMPATIBILITY IDEOGRAPH-FA0E;Lo;0;L;;;;;N;;;;; FA0F;CJK COMPATIBILITY IDEOGRAPH-FA0F;Lo;0;L;;;;;N;;;;; FA10;CJK COMPATIBILITY IDEOGRAPH-FA10;Lo;0;L;585A;;;;N;;;;; FA11;CJK COMPATIBILITY IDEOGRAPH-FA11;Lo;0;L;;;;;N;;;;; FA12;CJK COMPATIBILITY IDEOGRAPH-FA12;Lo;0;L;6674;;;;N;;;;; FA13;CJK COMPATIBILITY IDEOGRAPH-FA13;Lo;0;L;;;;;N;;;;; FA14;CJK COMPATIBILITY IDEOGRAPH-FA14;Lo;0;L;;;;;N;;;;; FA15;CJK COMPATIBILITY IDEOGRAPH-FA15;Lo;0;L;51DE;;;;N;;;;; FA16;CJK COMPATIBILITY IDEOGRAPH-FA16;Lo;0;L;732A;;;;N;;;;; FA17;CJK COMPATIBILITY IDEOGRAPH-FA17;Lo;0;L;76CA;;;;N;;;;; FA18;CJK COMPATIBILITY IDEOGRAPH-FA18;Lo;0;L;793C;;;;N;;;;; FA19;CJK COMPATIBILITY IDEOGRAPH-FA19;Lo;0;L;795E;;;;N;;;;; FA1A;CJK COMPATIBILITY IDEOGRAPH-FA1A;Lo;0;L;7965;;;;N;;;;; FA1B;CJK COMPATIBILITY IDEOGRAPH-FA1B;Lo;0;L;798F;;;;N;;;;; FA1C;CJK COMPATIBILITY IDEOGRAPH-FA1C;Lo;0;L;9756;;;;N;;;;; FA1D;CJK COMPATIBILITY IDEOGRAPH-FA1D;Lo;0;L;7CBE;;;;N;;;;; FA1E;CJK COMPATIBILITY IDEOGRAPH-FA1E;Lo;0;L;7FBD;;;;N;;;;; FA1F;CJK COMPATIBILITY IDEOGRAPH-FA1F;Lo;0;L;;;;;N;;;;; FA20;CJK COMPATIBILITY IDEOGRAPH-FA20;Lo;0;L;8612;;;;N;;;;; FA21;CJK COMPATIBILITY IDEOGRAPH-FA21;Lo;0;L;;;;;N;;;;; FA22;CJK COMPATIBILITY IDEOGRAPH-FA22;Lo;0;L;8AF8;;;;N;;;;; FA23;CJK COMPATIBILITY IDEOGRAPH-FA23;Lo;0;L;;;;;N;;;;; FA24;CJK COMPATIBILITY IDEOGRAPH-FA24;Lo;0;L;;;;;N;;;;; FA25;CJK COMPATIBILITY IDEOGRAPH-FA25;Lo;0;L;9038;;;;N;;;;; FA26;CJK COMPATIBILITY IDEOGRAPH-FA26;Lo;0;L;90FD;;;;N;;;;; FA27;CJK COMPATIBILITY IDEOGRAPH-FA27;Lo;0;L;;;;;N;;;;; FA28;CJK COMPATIBILITY IDEOGRAPH-FA28;Lo;0;L;;;;;N;;;;; FA29;CJK COMPATIBILITY IDEOGRAPH-FA29;Lo;0;L;;;;;N;;;;; FA2A;CJK COMPATIBILITY IDEOGRAPH-FA2A;Lo;0;L;98EF;;;;N;;;;; FA2B;CJK COMPATIBILITY IDEOGRAPH-FA2B;Lo;0;L;98FC;;;;N;;;;; FA2C;CJK COMPATIBILITY IDEOGRAPH-FA2C;Lo;0;L;9928;;;;N;;;;; FA2D;CJK COMPATIBILITY IDEOGRAPH-FA2D;Lo;0;L;9DB4;;;;N;;;;; FA2E;CJK COMPATIBILITY IDEOGRAPH-FA2E;Lo;0;L;90DE;;;;N;;;;; FA2F;CJK COMPATIBILITY IDEOGRAPH-FA2F;Lo;0;L;96B7;;;;N;;;;; FA30;CJK COMPATIBILITY IDEOGRAPH-FA30;Lo;0;L;4FAE;;;;N;;;;; FA31;CJK COMPATIBILITY IDEOGRAPH-FA31;Lo;0;L;50E7;;;;N;;;;; FA32;CJK COMPATIBILITY IDEOGRAPH-FA32;Lo;0;L;514D;;;;N;;;;; FA33;CJK COMPATIBILITY IDEOGRAPH-FA33;Lo;0;L;52C9;;;;N;;;;; FA34;CJK COMPATIBILITY IDEOGRAPH-FA34;Lo;0;L;52E4;;;;N;;;;; FA35;CJK COMPATIBILITY IDEOGRAPH-FA35;Lo;0;L;5351;;;;N;;;;; FA36;CJK COMPATIBILITY IDEOGRAPH-FA36;Lo;0;L;559D;;;;N;;;;; FA37;CJK COMPATIBILITY IDEOGRAPH-FA37;Lo;0;L;5606;;;;N;;;;; FA38;CJK COMPATIBILITY IDEOGRAPH-FA38;Lo;0;L;5668;;;;N;;;;; FA39;CJK COMPATIBILITY IDEOGRAPH-FA39;Lo;0;L;5840;;;;N;;;;; FA3A;CJK COMPATIBILITY IDEOGRAPH-FA3A;Lo;0;L;58A8;;;;N;;;;; FA3B;CJK COMPATIBILITY IDEOGRAPH-FA3B;Lo;0;L;5C64;;;;N;;;;; FA3C;CJK COMPATIBILITY IDEOGRAPH-FA3C;Lo;0;L;5C6E;;;;N;;;;; FA3D;CJK COMPATIBILITY IDEOGRAPH-FA3D;Lo;0;L;6094;;;;N;;;;; FA3E;CJK COMPATIBILITY IDEOGRAPH-FA3E;Lo;0;L;6168;;;;N;;;;; FA3F;CJK COMPATIBILITY IDEOGRAPH-FA3F;Lo;0;L;618E;;;;N;;;;; FA40;CJK COMPATIBILITY IDEOGRAPH-FA40;Lo;0;L;61F2;;;;N;;;;; FA41;CJK COMPATIBILITY IDEOGRAPH-FA41;Lo;0;L;654F;;;;N;;;;; FA42;CJK COMPATIBILITY IDEOGRAPH-FA42;Lo;0;L;65E2;;;;N;;;;; FA43;CJK COMPATIBILITY IDEOGRAPH-FA43;Lo;0;L;6691;;;;N;;;;; FA44;CJK COMPATIBILITY IDEOGRAPH-FA44;Lo;0;L;6885;;;;N;;;;; FA45;CJK COMPATIBILITY IDEOGRAPH-FA45;Lo;0;L;6D77;;;;N;;;;; FA46;CJK COMPATIBILITY IDEOGRAPH-FA46;Lo;0;L;6E1A;;;;N;;;;; FA47;CJK COMPATIBILITY IDEOGRAPH-FA47;Lo;0;L;6F22;;;;N;;;;; FA48;CJK COMPATIBILITY IDEOGRAPH-FA48;Lo;0;L;716E;;;;N;;;;; FA49;CJK COMPATIBILITY IDEOGRAPH-FA49;Lo;0;L;722B;;;;N;;;;; FA4A;CJK COMPATIBILITY IDEOGRAPH-FA4A;Lo;0;L;7422;;;;N;;;;; FA4B;CJK COMPATIBILITY IDEOGRAPH-FA4B;Lo;0;L;7891;;;;N;;;;; FA4C;CJK COMPATIBILITY IDEOGRAPH-FA4C;Lo;0;L;793E;;;;N;;;;; FA4D;CJK COMPATIBILITY IDEOGRAPH-FA4D;Lo;0;L;7949;;;;N;;;;; FA4E;CJK COMPATIBILITY IDEOGRAPH-FA4E;Lo;0;L;7948;;;;N;;;;; FA4F;CJK COMPATIBILITY IDEOGRAPH-FA4F;Lo;0;L;7950;;;;N;;;;; FA50;CJK COMPATIBILITY IDEOGRAPH-FA50;Lo;0;L;7956;;;;N;;;;; FA51;CJK COMPATIBILITY IDEOGRAPH-FA51;Lo;0;L;795D;;;;N;;;;; FA52;CJK COMPATIBILITY IDEOGRAPH-FA52;Lo;0;L;798D;;;;N;;;;; FA53;CJK COMPATIBILITY IDEOGRAPH-FA53;Lo;0;L;798E;;;;N;;;;; FA54;CJK COMPATIBILITY IDEOGRAPH-FA54;Lo;0;L;7A40;;;;N;;;;; FA55;CJK COMPATIBILITY IDEOGRAPH-FA55;Lo;0;L;7A81;;;;N;;;;; FA56;CJK COMPATIBILITY IDEOGRAPH-FA56;Lo;0;L;7BC0;;;;N;;;;; FA57;CJK COMPATIBILITY IDEOGRAPH-FA57;Lo;0;L;7DF4;;;;N;;;;; FA58;CJK COMPATIBILITY IDEOGRAPH-FA58;Lo;0;L;7E09;;;;N;;;;; FA59;CJK COMPATIBILITY IDEOGRAPH-FA59;Lo;0;L;7E41;;;;N;;;;; FA5A;CJK COMPATIBILITY IDEOGRAPH-FA5A;Lo;0;L;7F72;;;;N;;;;; FA5B;CJK COMPATIBILITY IDEOGRAPH-FA5B;Lo;0;L;8005;;;;N;;;;; FA5C;CJK COMPATIBILITY IDEOGRAPH-FA5C;Lo;0;L;81ED;;;;N;;;;; FA5D;CJK COMPATIBILITY IDEOGRAPH-FA5D;Lo;0;L;8279;;;;N;;;;; FA5E;CJK COMPATIBILITY IDEOGRAPH-FA5E;Lo;0;L;8279;;;;N;;;;; FA5F;CJK COMPATIBILITY IDEOGRAPH-FA5F;Lo;0;L;8457;;;;N;;;;; FA60;CJK COMPATIBILITY IDEOGRAPH-FA60;Lo;0;L;8910;;;;N;;;;; FA61;CJK COMPATIBILITY IDEOGRAPH-FA61;Lo;0;L;8996;;;;N;;;;; FA62;CJK COMPATIBILITY IDEOGRAPH-FA62;Lo;0;L;8B01;;;;N;;;;; FA63;CJK COMPATIBILITY IDEOGRAPH-FA63;Lo;0;L;8B39;;;;N;;;;; FA64;CJK COMPATIBILITY IDEOGRAPH-FA64;Lo;0;L;8CD3;;;;N;;;;; FA65;CJK COMPATIBILITY IDEOGRAPH-FA65;Lo;0;L;8D08;;;;N;;;;; FA66;CJK COMPATIBILITY IDEOGRAPH-FA66;Lo;0;L;8FB6;;;;N;;;;; FA67;CJK COMPATIBILITY IDEOGRAPH-FA67;Lo;0;L;9038;;;;N;;;;; FA68;CJK COMPATIBILITY IDEOGRAPH-FA68;Lo;0;L;96E3;;;;N;;;;; FA69;CJK COMPATIBILITY IDEOGRAPH-FA69;Lo;0;L;97FF;;;;N;;;;; FA6A;CJK COMPATIBILITY IDEOGRAPH-FA6A;Lo;0;L;983B;;;;N;;;;; FA6B;CJK COMPATIBILITY IDEOGRAPH-FA6B;Lo;0;L;6075;;;;N;;;;; FA6C;CJK COMPATIBILITY IDEOGRAPH-FA6C;Lo;0;L;242EE;;;;N;;;;; FA6D;CJK COMPATIBILITY IDEOGRAPH-FA6D;Lo;0;L;8218;;;;N;;;;; FA70;CJK COMPATIBILITY IDEOGRAPH-FA70;Lo;0;L;4E26;;;;N;;;;; FA71;CJK COMPATIBILITY IDEOGRAPH-FA71;Lo;0;L;51B5;;;;N;;;;; FA72;CJK COMPATIBILITY IDEOGRAPH-FA72;Lo;0;L;5168;;;;N;;;;; FA73;CJK COMPATIBILITY IDEOGRAPH-FA73;Lo;0;L;4F80;;;;N;;;;; FA74;CJK COMPATIBILITY IDEOGRAPH-FA74;Lo;0;L;5145;;;;N;;;;; FA75;CJK COMPATIBILITY IDEOGRAPH-FA75;Lo;0;L;5180;;;;N;;;;; FA76;CJK COMPATIBILITY IDEOGRAPH-FA76;Lo;0;L;52C7;;;;N;;;;; FA77;CJK COMPATIBILITY IDEOGRAPH-FA77;Lo;0;L;52FA;;;;N;;;;; FA78;CJK COMPATIBILITY IDEOGRAPH-FA78;Lo;0;L;559D;;;;N;;;;; FA79;CJK COMPATIBILITY IDEOGRAPH-FA79;Lo;0;L;5555;;;;N;;;;; FA7A;CJK COMPATIBILITY IDEOGRAPH-FA7A;Lo;0;L;5599;;;;N;;;;; FA7B;CJK COMPATIBILITY IDEOGRAPH-FA7B;Lo;0;L;55E2;;;;N;;;;; FA7C;CJK COMPATIBILITY IDEOGRAPH-FA7C;Lo;0;L;585A;;;;N;;;;; FA7D;CJK COMPATIBILITY IDEOGRAPH-FA7D;Lo;0;L;58B3;;;;N;;;;; FA7E;CJK COMPATIBILITY IDEOGRAPH-FA7E;Lo;0;L;5944;;;;N;;;;; FA7F;CJK COMPATIBILITY IDEOGRAPH-FA7F;Lo;0;L;5954;;;;N;;;;; FA80;CJK COMPATIBILITY IDEOGRAPH-FA80;Lo;0;L;5A62;;;;N;;;;; FA81;CJK COMPATIBILITY IDEOGRAPH-FA81;Lo;0;L;5B28;;;;N;;;;; FA82;CJK COMPATIBILITY IDEOGRAPH-FA82;Lo;0;L;5ED2;;;;N;;;;; FA83;CJK COMPATIBILITY IDEOGRAPH-FA83;Lo;0;L;5ED9;;;;N;;;;; FA84;CJK COMPATIBILITY IDEOGRAPH-FA84;Lo;0;L;5F69;;;;N;;;;; FA85;CJK COMPATIBILITY IDEOGRAPH-FA85;Lo;0;L;5FAD;;;;N;;;;; FA86;CJK COMPATIBILITY IDEOGRAPH-FA86;Lo;0;L;60D8;;;;N;;;;; FA87;CJK COMPATIBILITY IDEOGRAPH-FA87;Lo;0;L;614E;;;;N;;;;; FA88;CJK COMPATIBILITY IDEOGRAPH-FA88;Lo;0;L;6108;;;;N;;;;; FA89;CJK COMPATIBILITY IDEOGRAPH-FA89;Lo;0;L;618E;;;;N;;;;; FA8A;CJK COMPATIBILITY IDEOGRAPH-FA8A;Lo;0;L;6160;;;;N;;;;; FA8B;CJK COMPATIBILITY IDEOGRAPH-FA8B;Lo;0;L;61F2;;;;N;;;;; FA8C;CJK COMPATIBILITY IDEOGRAPH-FA8C;Lo;0;L;6234;;;;N;;;;; FA8D;CJK COMPATIBILITY IDEOGRAPH-FA8D;Lo;0;L;63C4;;;;N;;;;; FA8E;CJK COMPATIBILITY IDEOGRAPH-FA8E;Lo;0;L;641C;;;;N;;;;; FA8F;CJK COMPATIBILITY IDEOGRAPH-FA8F;Lo;0;L;6452;;;;N;;;;; FA90;CJK COMPATIBILITY IDEOGRAPH-FA90;Lo;0;L;6556;;;;N;;;;; FA91;CJK COMPATIBILITY IDEOGRAPH-FA91;Lo;0;L;6674;;;;N;;;;; FA92;CJK COMPATIBILITY IDEOGRAPH-FA92;Lo;0;L;6717;;;;N;;;;; FA93;CJK COMPATIBILITY IDEOGRAPH-FA93;Lo;0;L;671B;;;;N;;;;; FA94;CJK COMPATIBILITY IDEOGRAPH-FA94;Lo;0;L;6756;;;;N;;;;; FA95;CJK COMPATIBILITY IDEOGRAPH-FA95;Lo;0;L;6B79;;;;N;;;;; FA96;CJK COMPATIBILITY IDEOGRAPH-FA96;Lo;0;L;6BBA;;;;N;;;;; FA97;CJK COMPATIBILITY IDEOGRAPH-FA97;Lo;0;L;6D41;;;;N;;;;; FA98;CJK COMPATIBILITY IDEOGRAPH-FA98;Lo;0;L;6EDB;;;;N;;;;; FA99;CJK COMPATIBILITY IDEOGRAPH-FA99;Lo;0;L;6ECB;;;;N;;;;; FA9A;CJK COMPATIBILITY IDEOGRAPH-FA9A;Lo;0;L;6F22;;;;N;;;;; FA9B;CJK COMPATIBILITY IDEOGRAPH-FA9B;Lo;0;L;701E;;;;N;;;;; FA9C;CJK COMPATIBILITY IDEOGRAPH-FA9C;Lo;0;L;716E;;;;N;;;;; FA9D;CJK COMPATIBILITY IDEOGRAPH-FA9D;Lo;0;L;77A7;;;;N;;;;; FA9E;CJK COMPATIBILITY IDEOGRAPH-FA9E;Lo;0;L;7235;;;;N;;;;; FA9F;CJK COMPATIBILITY IDEOGRAPH-FA9F;Lo;0;L;72AF;;;;N;;;;; FAA0;CJK COMPATIBILITY IDEOGRAPH-FAA0;Lo;0;L;732A;;;;N;;;;; FAA1;CJK COMPATIBILITY IDEOGRAPH-FAA1;Lo;0;L;7471;;;;N;;;;; FAA2;CJK COMPATIBILITY IDEOGRAPH-FAA2;Lo;0;L;7506;;;;N;;;;; FAA3;CJK COMPATIBILITY IDEOGRAPH-FAA3;Lo;0;L;753B;;;;N;;;;; FAA4;CJK COMPATIBILITY IDEOGRAPH-FAA4;Lo;0;L;761D;;;;N;;;;; FAA5;CJK COMPATIBILITY IDEOGRAPH-FAA5;Lo;0;L;761F;;;;N;;;;; FAA6;CJK COMPATIBILITY IDEOGRAPH-FAA6;Lo;0;L;76CA;;;;N;;;;; FAA7;CJK COMPATIBILITY IDEOGRAPH-FAA7;Lo;0;L;76DB;;;;N;;;;; FAA8;CJK COMPATIBILITY IDEOGRAPH-FAA8;Lo;0;L;76F4;;;;N;;;;; FAA9;CJK COMPATIBILITY IDEOGRAPH-FAA9;Lo;0;L;774A;;;;N;;;;; FAAA;CJK COMPATIBILITY IDEOGRAPH-FAAA;Lo;0;L;7740;;;;N;;;;; FAAB;CJK COMPATIBILITY IDEOGRAPH-FAAB;Lo;0;L;78CC;;;;N;;;;; FAAC;CJK COMPATIBILITY IDEOGRAPH-FAAC;Lo;0;L;7AB1;;;;N;;;;; FAAD;CJK COMPATIBILITY IDEOGRAPH-FAAD;Lo;0;L;7BC0;;;;N;;;;; FAAE;CJK COMPATIBILITY IDEOGRAPH-FAAE;Lo;0;L;7C7B;;;;N;;;;; FAAF;CJK COMPATIBILITY IDEOGRAPH-FAAF;Lo;0;L;7D5B;;;;N;;;;; FAB0;CJK COMPATIBILITY IDEOGRAPH-FAB0;Lo;0;L;7DF4;;;;N;;;;; FAB1;CJK COMPATIBILITY IDEOGRAPH-FAB1;Lo;0;L;7F3E;;;;N;;;;; FAB2;CJK COMPATIBILITY IDEOGRAPH-FAB2;Lo;0;L;8005;;;;N;;;;; FAB3;CJK COMPATIBILITY IDEOGRAPH-FAB3;Lo;0;L;8352;;;;N;;;;; FAB4;CJK COMPATIBILITY IDEOGRAPH-FAB4;Lo;0;L;83EF;;;;N;;;;; FAB5;CJK COMPATIBILITY IDEOGRAPH-FAB5;Lo;0;L;8779;;;;N;;;;; FAB6;CJK COMPATIBILITY IDEOGRAPH-FAB6;Lo;0;L;8941;;;;N;;;;; FAB7;CJK COMPATIBILITY IDEOGRAPH-FAB7;Lo;0;L;8986;;;;N;;;;; FAB8;CJK COMPATIBILITY IDEOGRAPH-FAB8;Lo;0;L;8996;;;;N;;;;; FAB9;CJK COMPATIBILITY IDEOGRAPH-FAB9;Lo;0;L;8ABF;;;;N;;;;; FABA;CJK COMPATIBILITY IDEOGRAPH-FABA;Lo;0;L;8AF8;;;;N;;;;; FABB;CJK COMPATIBILITY IDEOGRAPH-FABB;Lo;0;L;8ACB;;;;N;;;;; FABC;CJK COMPATIBILITY IDEOGRAPH-FABC;Lo;0;L;8B01;;;;N;;;;; FABD;CJK COMPATIBILITY IDEOGRAPH-FABD;Lo;0;L;8AFE;;;;N;;;;; FABE;CJK COMPATIBILITY IDEOGRAPH-FABE;Lo;0;L;8AED;;;;N;;;;; FABF;CJK COMPATIBILITY IDEOGRAPH-FABF;Lo;0;L;8B39;;;;N;;;;; FAC0;CJK COMPATIBILITY IDEOGRAPH-FAC0;Lo;0;L;8B8A;;;;N;;;;; FAC1;CJK COMPATIBILITY IDEOGRAPH-FAC1;Lo;0;L;8D08;;;;N;;;;; FAC2;CJK COMPATIBILITY IDEOGRAPH-FAC2;Lo;0;L;8F38;;;;N;;;;; FAC3;CJK COMPATIBILITY IDEOGRAPH-FAC3;Lo;0;L;9072;;;;N;;;;; FAC4;CJK COMPATIBILITY IDEOGRAPH-FAC4;Lo;0;L;9199;;;;N;;;;; FAC5;CJK COMPATIBILITY IDEOGRAPH-FAC5;Lo;0;L;9276;;;;N;;;;; FAC6;CJK COMPATIBILITY IDEOGRAPH-FAC6;Lo;0;L;967C;;;;N;;;;; FAC7;CJK COMPATIBILITY IDEOGRAPH-FAC7;Lo;0;L;96E3;;;;N;;;;; FAC8;CJK COMPATIBILITY IDEOGRAPH-FAC8;Lo;0;L;9756;;;;N;;;;; FAC9;CJK COMPATIBILITY IDEOGRAPH-FAC9;Lo;0;L;97DB;;;;N;;;;; FACA;CJK COMPATIBILITY IDEOGRAPH-FACA;Lo;0;L;97FF;;;;N;;;;; FACB;CJK COMPATIBILITY IDEOGRAPH-FACB;Lo;0;L;980B;;;;N;;;;; FACC;CJK COMPATIBILITY IDEOGRAPH-FACC;Lo;0;L;983B;;;;N;;;;; FACD;CJK COMPATIBILITY IDEOGRAPH-FACD;Lo;0;L;9B12;;;;N;;;;; FACE;CJK COMPATIBILITY IDEOGRAPH-FACE;Lo;0;L;9F9C;;;;N;;;;; FACF;CJK COMPATIBILITY IDEOGRAPH-FACF;Lo;0;L;2284A;;;;N;;;;; FAD0;CJK COMPATIBILITY IDEOGRAPH-FAD0;Lo;0;L;22844;;;;N;;;;; FAD1;CJK COMPATIBILITY IDEOGRAPH-FAD1;Lo;0;L;233D5;;;;N;;;;; FAD2;CJK COMPATIBILITY IDEOGRAPH-FAD2;Lo;0;L;3B9D;;;;N;;;;; FAD3;CJK COMPATIBILITY IDEOGRAPH-FAD3;Lo;0;L;4018;;;;N;;;;; FAD4;CJK COMPATIBILITY IDEOGRAPH-FAD4;Lo;0;L;4039;;;;N;;;;; FAD5;CJK COMPATIBILITY IDEOGRAPH-FAD5;Lo;0;L;25249;;;;N;;;;; FAD6;CJK COMPATIBILITY IDEOGRAPH-FAD6;Lo;0;L;25CD0;;;;N;;;;; FAD7;CJK COMPATIBILITY IDEOGRAPH-FAD7;Lo;0;L;27ED3;;;;N;;;;; FAD8;CJK COMPATIBILITY IDEOGRAPH-FAD8;Lo;0;L;9F43;;;;N;;;;; FAD9;CJK COMPATIBILITY IDEOGRAPH-FAD9;Lo;0;L;9F8E;;;;N;;;;; FB00;LATIN SMALL LIGATURE FF;Ll;0;L; 0066 0066;;;;N;;;;; FB01;LATIN SMALL LIGATURE FI;Ll;0;L; 0066 0069;;;;N;;;;; FB02;LATIN SMALL LIGATURE FL;Ll;0;L; 0066 006C;;;;N;;;;; FB03;LATIN SMALL LIGATURE FFI;Ll;0;L; 0066 0066 0069;;;;N;;;;; FB04;LATIN SMALL LIGATURE FFL;Ll;0;L; 0066 0066 006C;;;;N;;;;; FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L; 017F 0074;;;;N;;;;; FB06;LATIN SMALL LIGATURE ST;Ll;0;L; 0073 0074;;;;N;;;;; FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L; 0574 0576;;;;N;;;;; FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L; 0574 0565;;;;N;;;;; FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L; 0574 056B;;;;N;;;;; FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L; 057E 0576;;;;N;;;;; FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L; 0574 056D;;;;N;;;;; FB1D;HEBREW LETTER YOD WITH HIRIQ;Lo;0;R;05D9 05B4;;;;N;;;;; FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;NSM;;;;;N;HEBREW POINT VARIKA;;;; FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;; FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R; 05E2;;;;N;;;;; FB21;HEBREW LETTER WIDE ALEF;Lo;0;R; 05D0;;;;N;;;;; FB22;HEBREW LETTER WIDE DALET;Lo;0;R; 05D3;;;;N;;;;; FB23;HEBREW LETTER WIDE HE;Lo;0;R; 05D4;;;;N;;;;; FB24;HEBREW LETTER WIDE KAF;Lo;0;R; 05DB;;;;N;;;;; FB25;HEBREW LETTER WIDE LAMED;Lo;0;R; 05DC;;;;N;;;;; FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R; 05DD;;;;N;;;;; FB27;HEBREW LETTER WIDE RESH;Lo;0;R; 05E8;;;;N;;;;; FB28;HEBREW LETTER WIDE TAV;Lo;0;R; 05EA;;;;N;;;;; FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ES; 002B;;;;N;;;;; FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;; FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;; FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;; FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;FB49 05C2;;;;N;;;;; FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;; FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;; FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;; FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;; FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;; FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;; FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;; FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;; FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;; FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;; FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;; FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;; FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;; FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;; FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;; FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;; FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;; FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;; FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;; FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;; FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;; FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;; FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;; FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;; FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;; FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;; FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;; FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;; FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R; 05D0 05DC;;;;N;;;;; FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;AL; 0671;;;;N;;;;; FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;AL; 0671;;;;N;;;;; FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;AL; 067B;;;;N;;;;; FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;AL; 067B;;;;N;;;;; FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;AL; 067B;;;;N;;;;; FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;AL; 067B;;;;N;;;;; FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;AL; 067E;;;;N;;;;; FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;AL; 067E;;;;N;;;;; FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;AL; 067E;;;;N;;;;; FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;AL; 067E;;;;N;;;;; FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;AL; 0680;;;;N;;;;; FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;AL; 0680;;;;N;;;;; FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;AL; 0680;;;;N;;;;; FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;AL; 0680;;;;N;;;;; FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;AL; 067A;;;;N;;;;; FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;AL; 067A;;;;N;;;;; FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;AL; 067A;;;;N;;;;; FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;AL; 067A;;;;N;;;;; FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;AL; 067F;;;;N;;;;; FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;AL; 067F;;;;N;;;;; FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;AL; 067F;;;;N;;;;; FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;AL; 067F;;;;N;;;;; FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;AL; 0679;;;;N;;;;; FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;AL; 0679;;;;N;;;;; FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;AL; 0679;;;;N;;;;; FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;AL; 0679;;;;N;;;;; FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;AL; 06A4;;;;N;;;;; FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;AL; 06A4;;;;N;;;;; FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;AL; 06A4;;;;N;;;;; FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;AL; 06A4;;;;N;;;;; FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;AL; 06A6;;;;N;;;;; FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;AL; 06A6;;;;N;;;;; FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;AL; 06A6;;;;N;;;;; FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;AL; 06A6;;;;N;;;;; FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;AL; 0684;;;;N;;;;; FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;AL; 0684;;;;N;;;;; FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;AL; 0684;;;;N;;;;; FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;AL; 0684;;;;N;;;;; FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;AL; 0683;;;;N;;;;; FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;AL; 0683;;;;N;;;;; FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;AL; 0683;;;;N;;;;; FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;AL; 0683;;;;N;;;;; FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;AL; 0686;;;;N;;;;; FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;AL; 0686;;;;N;;;;; FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;AL; 0686;;;;N;;;;; FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;AL; 0686;;;;N;;;;; FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;AL; 0687;;;;N;;;;; FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;AL; 0687;;;;N;;;;; FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;AL; 0687;;;;N;;;;; FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;AL; 0687;;;;N;;;;; FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;AL; 068D;;;;N;;;;; FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;AL; 068D;;;;N;;;;; FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;AL; 068C;;;;N;;;;; FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;AL; 068C;;;;N;;;;; FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;AL; 068E;;;;N;;;;; FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;AL; 068E;;;;N;;;;; FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;AL; 0688;;;;N;;;;; FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;AL; 0688;;;;N;;;;; FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;AL; 0698;;;;N;;;;; FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;AL; 0698;;;;N;;;;; FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;AL; 0691;;;;N;;;;; FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;AL; 0691;;;;N;;;;; FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;AL; 06A9;;;;N;;;;; FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;AL; 06A9;;;;N;;;;; FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;AL; 06A9;;;;N;;;;; FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;AL; 06A9;;;;N;;;;; FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;AL; 06AF;;;;N;;;;; FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;AL; 06AF;;;;N;;;;; FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;AL; 06AF;;;;N;;;;; FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;AL; 06AF;;;;N;;;;; FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;AL; 06B3;;;;N;;;;; FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;AL; 06B3;;;;N;;;;; FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;AL; 06B3;;;;N;;;;; FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;AL; 06B3;;;;N;;;;; FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;AL; 06B1;;;;N;;;;; FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;AL; 06B1;;;;N;;;;; FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;AL; 06B1;;;;N;;;;; FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;AL; 06B1;;;;N;;;;; FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;AL; 06BA;;;;N;;;;; FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;AL; 06BA;;;;N;;;;; FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;AL; 06BB;;;;N;;;;; FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;AL; 06BB;;;;N;;;;; FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;AL; 06BB;;;;N;;;;; FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;AL; 06BB;;;;N;;;;; FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;AL; 06C0;;;;N;;;;; FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;AL; 06C0;;;;N;;;;; FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;AL; 06C1;;;;N;;;;; FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;AL; 06C1;;;;N;;;;; FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;AL; 06C1;;;;N;;;;; FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;AL; 06C1;;;;N;;;;; FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;AL; 06BE;;;;N;;;;; FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;AL; 06BE;;;;N;;;;; FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;AL; 06BE;;;;N;;;;; FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;AL; 06BE;;;;N;;;;; FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;AL; 06D2;;;;N;;;;; FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;AL; 06D2;;;;N;;;;; FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 06D3;;;;N;;;;; FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 06D3;;;;N;;;;; FBB2;ARABIC SYMBOL DOT ABOVE;Sk;0;AL;;;;;N;;;;; FBB3;ARABIC SYMBOL DOT BELOW;Sk;0;AL;;;;;N;;;;; FBB4;ARABIC SYMBOL TWO DOTS ABOVE;Sk;0;AL;;;;;N;;;;; FBB5;ARABIC SYMBOL TWO DOTS BELOW;Sk;0;AL;;;;;N;;;;; FBB6;ARABIC SYMBOL THREE DOTS ABOVE;Sk;0;AL;;;;;N;;;;; FBB7;ARABIC SYMBOL THREE DOTS BELOW;Sk;0;AL;;;;;N;;;;; FBB8;ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS ABOVE;Sk;0;AL;;;;;N;;;;; FBB9;ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS BELOW;Sk;0;AL;;;;;N;;;;; FBBA;ARABIC SYMBOL FOUR DOTS ABOVE;Sk;0;AL;;;;;N;;;;; FBBB;ARABIC SYMBOL FOUR DOTS BELOW;Sk;0;AL;;;;;N;;;;; FBBC;ARABIC SYMBOL DOUBLE VERTICAL BAR BELOW;Sk;0;AL;;;;;N;;;;; FBBD;ARABIC SYMBOL TWO DOTS VERTICALLY ABOVE;Sk;0;AL;;;;;N;;;;; FBBE;ARABIC SYMBOL TWO DOTS VERTICALLY BELOW;Sk;0;AL;;;;;N;;;;; FBBF;ARABIC SYMBOL RING;Sk;0;AL;;;;;N;;;;; FBC0;ARABIC SYMBOL SMALL TAH ABOVE;Sk;0;AL;;;;;N;;;;; FBC1;ARABIC SYMBOL SMALL TAH BELOW;Sk;0;AL;;;;;N;;;;; FBC2;ARABIC SYMBOL WASLA ABOVE;Sk;0;AL;;;;;N;;;;; FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;AL; 06C7;;;;N;;;;; FBD8;ARABIC LETTER U FINAL FORM;Lo;0;AL; 06C7;;;;N;;;;; FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;AL; 06C6;;;;N;;;;; FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;AL; 06C6;;;;N;;;;; FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;AL; 06C8;;;;N;;;;; FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;AL; 06C8;;;;N;;;;; FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0677;;;;N;;;;; FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;AL; 06CB;;;;N;;;;; FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;AL; 06CB;;;;N;;;;; FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;AL; 06C5;;;;N;;;;; FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;AL; 06C5;;;;N;;;;; FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;AL; 06C9;;;;N;;;;; FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;AL; 06C9;;;;N;;;;; FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;AL; 06D0;;;;N;;;;; FBE5;ARABIC LETTER E FINAL FORM;Lo;0;AL; 06D0;;;;N;;;;; FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;AL; 06D0;;;;N;;;;; FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;AL; 06D0;;;;N;;;;; FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;AL; 0649;;;;N;;;;; FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;AL; 0649;;;;N;;;;; FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;AL; 0626 0627;;;;N;;;;; FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;AL; 0626 0627;;;;N;;;;; FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;AL; 0626 06D5;;;;N;;;;; FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;AL; 0626 06D5;;;;N;;;;; FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;AL; 0626 0648;;;;N;;;;; FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;AL; 0626 0648;;;;N;;;;; FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;AL; 0626 06C7;;;;N;;;;; FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;AL; 0626 06C7;;;;N;;;;; FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;AL; 0626 06C6;;;;N;;;;; FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;AL; 0626 06C6;;;;N;;;;; FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;AL; 0626 06C8;;;;N;;;;; FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;AL; 0626 06C8;;;;N;;;;; FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;AL; 0626 06D0;;;;N;;;;; FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;AL; 0626 06D0;;;;N;;;;; FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;AL; 0626 06D0;;;;N;;;;; FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0626 0649;;;;N;;;;; FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0626 0649;;;;N;;;;; FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;AL; 0626 0649;;;;N;;;;; FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;AL; 06CC;;;;N;;;;; FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;AL; 06CC;;;;N;;;;; FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;AL; 06CC;;;;N;;;;; FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;AL; 06CC;;;;N;;;;; FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;AL; 0626 062C;;;;N;;;;; FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;AL; 0626 062D;;;;N;;;;; FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;AL; 0626 0645;;;;N;;;;; FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0626 0649;;;;N;;;;; FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;AL; 0626 064A;;;;N;;;;; FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;AL; 0628 062C;;;;N;;;;; FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;AL; 0628 062D;;;;N;;;;; FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;AL; 0628 062E;;;;N;;;;; FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;AL; 0628 0645;;;;N;;;;; FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0628 0649;;;;N;;;;; FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;AL; 0628 064A;;;;N;;;;; FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;AL; 062A 062C;;;;N;;;;; FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;AL; 062A 062D;;;;N;;;;; FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;AL; 062A 062E;;;;N;;;;; FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;AL; 062A 0645;;;;N;;;;; FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062A 0649;;;;N;;;;; FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;AL; 062A 064A;;;;N;;;;; FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;AL; 062B 062C;;;;N;;;;; FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;AL; 062B 0645;;;;N;;;;; FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062B 0649;;;;N;;;;; FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;AL; 062B 064A;;;;N;;;;; FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;AL; 062C 062D;;;;N;;;;; FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;AL; 062C 0645;;;;N;;;;; FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;AL; 062D 062C;;;;N;;;;; FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;AL; 062D 0645;;;;N;;;;; FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;AL; 062E 062C;;;;N;;;;; FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;AL; 062E 062D;;;;N;;;;; FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;AL; 062E 0645;;;;N;;;;; FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;AL; 0633 062C;;;;N;;;;; FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;AL; 0633 062D;;;;N;;;;; FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;AL; 0633 062E;;;;N;;;;; FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;AL; 0633 0645;;;;N;;;;; FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;AL; 0635 062D;;;;N;;;;; FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;AL; 0635 0645;;;;N;;;;; FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;AL; 0636 062C;;;;N;;;;; FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;AL; 0636 062D;;;;N;;;;; FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;AL; 0636 062E;;;;N;;;;; FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;AL; 0636 0645;;;;N;;;;; FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;AL; 0637 062D;;;;N;;;;; FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;AL; 0637 0645;;;;N;;;;; FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;AL; 0638 0645;;;;N;;;;; FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;AL; 0639 062C;;;;N;;;;; FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;AL; 0639 0645;;;;N;;;;; FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;AL; 063A 062C;;;;N;;;;; FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;AL; 063A 0645;;;;N;;;;; FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;AL; 0641 062C;;;;N;;;;; FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;AL; 0641 062D;;;;N;;;;; FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;AL; 0641 062E;;;;N;;;;; FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;AL; 0641 0645;;;;N;;;;; FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0641 0649;;;;N;;;;; FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;AL; 0641 064A;;;;N;;;;; FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;AL; 0642 062D;;;;N;;;;; FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;AL; 0642 0645;;;;N;;;;; FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0642 0649;;;;N;;;;; FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;AL; 0642 064A;;;;N;;;;; FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;AL; 0643 0627;;;;N;;;;; FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;AL; 0643 062C;;;;N;;;;; FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;AL; 0643 062D;;;;N;;;;; FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;AL; 0643 062E;;;;N;;;;; FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;AL; 0643 0644;;;;N;;;;; FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;AL; 0643 0645;;;;N;;;;; FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0643 0649;;;;N;;;;; FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;AL; 0643 064A;;;;N;;;;; FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;AL; 0644 062C;;;;N;;;;; FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;AL; 0644 062D;;;;N;;;;; FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;AL; 0644 062E;;;;N;;;;; FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;AL; 0644 0645;;;;N;;;;; FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0644 0649;;;;N;;;;; FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;AL; 0644 064A;;;;N;;;;; FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;AL; 0645 062C;;;;N;;;;; FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;AL; 0645 062D;;;;N;;;;; FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;AL; 0645 062E;;;;N;;;;; FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;AL; 0645 0645;;;;N;;;;; FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0645 0649;;;;N;;;;; FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;AL; 0645 064A;;;;N;;;;; FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;AL; 0646 062C;;;;N;;;;; FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;AL; 0646 062D;;;;N;;;;; FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;AL; 0646 062E;;;;N;;;;; FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;AL; 0646 0645;;;;N;;;;; FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0646 0649;;;;N;;;;; FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;AL; 0646 064A;;;;N;;;;; FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;AL; 0647 062C;;;;N;;;;; FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;AL; 0647 0645;;;;N;;;;; FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0647 0649;;;;N;;;;; FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;AL; 0647 064A;;;;N;;;;; FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;AL; 064A 062C;;;;N;;;;; FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;AL; 064A 062D;;;;N;;;;; FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;AL; 064A 062E;;;;N;;;;; FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;AL; 064A 0645;;;;N;;;;; FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 064A 0649;;;;N;;;;; FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;AL; 064A 064A;;;;N;;;;; FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL; 0630 0670;;;;N;;;;; FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL; 0631 0670;;;;N;;;;; FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL; 0649 0670;;;;N;;;;; FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;AL; 0020 064C 0651;;;;N;;;;; FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;AL; 0020 064D 0651;;;;N;;;;; FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;AL; 0020 064E 0651;;;;N;;;;; FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;AL; 0020 064F 0651;;;;N;;;;; FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;AL; 0020 0650 0651;;;;N;;;;; FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL; 0020 0651 0670;;;;N;;;;; FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;AL; 0626 0631;;;;N;;;;; FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;AL; 0626 0632;;;;N;;;;; FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;AL; 0626 0645;;;;N;;;;; FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;AL; 0626 0646;;;;N;;;;; FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0626 0649;;;;N;;;;; FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;AL; 0626 064A;;;;N;;;;; FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;AL; 0628 0631;;;;N;;;;; FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;AL; 0628 0632;;;;N;;;;; FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;AL; 0628 0645;;;;N;;;;; FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;AL; 0628 0646;;;;N;;;;; FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0628 0649;;;;N;;;;; FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;AL; 0628 064A;;;;N;;;;; FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;AL; 062A 0631;;;;N;;;;; FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;AL; 062A 0632;;;;N;;;;; FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;AL; 062A 0645;;;;N;;;;; FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;AL; 062A 0646;;;;N;;;;; FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062A 0649;;;;N;;;;; FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;AL; 062A 064A;;;;N;;;;; FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;AL; 062B 0631;;;;N;;;;; FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;AL; 062B 0632;;;;N;;;;; FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;AL; 062B 0645;;;;N;;;;; FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;AL; 062B 0646;;;;N;;;;; FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062B 0649;;;;N;;;;; FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;AL; 062B 064A;;;;N;;;;; FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0641 0649;;;;N;;;;; FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;AL; 0641 064A;;;;N;;;;; FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0642 0649;;;;N;;;;; FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;AL; 0642 064A;;;;N;;;;; FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;AL; 0643 0627;;;;N;;;;; FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;AL; 0643 0644;;;;N;;;;; FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;AL; 0643 0645;;;;N;;;;; FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0643 0649;;;;N;;;;; FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;AL; 0643 064A;;;;N;;;;; FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;AL; 0644 0645;;;;N;;;;; FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0644 0649;;;;N;;;;; FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;AL; 0644 064A;;;;N;;;;; FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;AL; 0645 0627;;;;N;;;;; FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0645 0645;;;;N;;;;; FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;AL; 0646 0631;;;;N;;;;; FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;AL; 0646 0632;;;;N;;;;; FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;AL; 0646 0645;;;;N;;;;; FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;AL; 0646 0646;;;;N;;;;; FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0646 0649;;;;N;;;;; FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;AL; 0646 064A;;;;N;;;;; FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;AL; 0649 0670;;;;N;;;;; FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;AL; 064A 0631;;;;N;;;;; FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;AL; 064A 0632;;;;N;;;;; FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;AL; 064A 0645;;;;N;;;;; FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;AL; 064A 0646;;;;N;;;;; FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 064A 0649;;;;N;;;;; FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;AL; 064A 064A;;;;N;;;;; FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;AL; 0626 062C;;;;N;;;;; FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;AL; 0626 062D;;;;N;;;;; FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;AL; 0626 062E;;;;N;;;;; FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;AL; 0626 0645;;;;N;;;;; FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;AL; 0626 0647;;;;N;;;;; FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;AL; 0628 062C;;;;N;;;;; FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;AL; 0628 062D;;;;N;;;;; FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;AL; 0628 062E;;;;N;;;;; FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;AL; 0628 0645;;;;N;;;;; FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;AL; 0628 0647;;;;N;;;;; FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;AL; 062A 062C;;;;N;;;;; FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;AL; 062A 062D;;;;N;;;;; FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;AL; 062A 062E;;;;N;;;;; FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;AL; 062A 0645;;;;N;;;;; FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;AL; 062A 0647;;;;N;;;;; FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;AL; 062B 0645;;;;N;;;;; FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;AL; 062C 062D;;;;N;;;;; FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 062C 0645;;;;N;;;;; FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;AL; 062D 062C;;;;N;;;;; FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;AL; 062D 0645;;;;N;;;;; FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;AL; 062E 062C;;;;N;;;;; FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 062E 0645;;;;N;;;;; FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;AL; 0633 062C;;;;N;;;;; FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;AL; 0633 062D;;;;N;;;;; FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;AL; 0633 062E;;;;N;;;;; FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;AL; 0633 0645;;;;N;;;;; FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;AL; 0635 062D;;;;N;;;;; FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;AL; 0635 062E;;;;N;;;;; FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;AL; 0635 0645;;;;N;;;;; FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;AL; 0636 062C;;;;N;;;;; FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;AL; 0636 062D;;;;N;;;;; FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;AL; 0636 062E;;;;N;;;;; FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;AL; 0636 0645;;;;N;;;;; FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;AL; 0637 062D;;;;N;;;;; FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;AL; 0638 0645;;;;N;;;;; FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;AL; 0639 062C;;;;N;;;;; FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;AL; 0639 0645;;;;N;;;;; FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;AL; 063A 062C;;;;N;;;;; FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;AL; 063A 0645;;;;N;;;;; FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;AL; 0641 062C;;;;N;;;;; FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;AL; 0641 062D;;;;N;;;;; FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;AL; 0641 062E;;;;N;;;;; FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;AL; 0641 0645;;;;N;;;;; FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;AL; 0642 062D;;;;N;;;;; FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;AL; 0642 0645;;;;N;;;;; FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;AL; 0643 062C;;;;N;;;;; FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;AL; 0643 062D;;;;N;;;;; FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;AL; 0643 062E;;;;N;;;;; FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;AL; 0643 0644;;;;N;;;;; FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;AL; 0643 0645;;;;N;;;;; FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;AL; 0644 062C;;;;N;;;;; FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;AL; 0644 062D;;;;N;;;;; FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;AL; 0644 062E;;;;N;;;;; FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;AL; 0644 0645;;;;N;;;;; FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;AL; 0644 0647;;;;N;;;;; FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0645 062C;;;;N;;;;; FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0645 062D;;;;N;;;;; FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;AL; 0645 062E;;;;N;;;;; FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0645 0645;;;;N;;;;; FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;AL; 0646 062C;;;;N;;;;; FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;AL; 0646 062D;;;;N;;;;; FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;AL; 0646 062E;;;;N;;;;; FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;AL; 0646 0645;;;;N;;;;; FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;AL; 0646 0647;;;;N;;;;; FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;AL; 0647 062C;;;;N;;;;; FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;AL; 0647 0645;;;;N;;;;; FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;AL; 0647 0670;;;;N;;;;; FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;AL; 064A 062C;;;;N;;;;; FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;AL; 064A 062D;;;;N;;;;; FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;AL; 064A 062E;;;;N;;;;; FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;AL; 064A 0645;;;;N;;;;; FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;AL; 064A 0647;;;;N;;;;; FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;AL; 0626 0645;;;;N;;;;; FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;AL; 0626 0647;;;;N;;;;; FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;AL; 0628 0645;;;;N;;;;; FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;AL; 0628 0647;;;;N;;;;; FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;AL; 062A 0645;;;;N;;;;; FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;AL; 062A 0647;;;;N;;;;; FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;AL; 062B 0645;;;;N;;;;; FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;AL; 062B 0647;;;;N;;;;; FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;AL; 0633 0645;;;;N;;;;; FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;AL; 0633 0647;;;;N;;;;; FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;AL; 0634 0645;;;;N;;;;; FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;AL; 0634 0647;;;;N;;;;; FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;AL; 0643 0644;;;;N;;;;; FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;AL; 0643 0645;;;;N;;;;; FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;AL; 0644 0645;;;;N;;;;; FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;AL; 0646 0645;;;;N;;;;; FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;AL; 0646 0647;;;;N;;;;; FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;AL; 064A 0645;;;;N;;;;; FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;AL; 064A 0647;;;;N;;;;; FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;AL; 0640 064E 0651;;;;N;;;;; FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;AL; 0640 064F 0651;;;;N;;;;; FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;AL; 0640 0650 0651;;;;N;;;;; FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0637 0649;;;;N;;;;; FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;AL; 0637 064A;;;;N;;;;; FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0639 0649;;;;N;;;;; FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;AL; 0639 064A;;;;N;;;;; FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 063A 0649;;;;N;;;;; FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;AL; 063A 064A;;;;N;;;;; FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0633 0649;;;;N;;;;; FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;AL; 0633 064A;;;;N;;;;; FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0634 0649;;;;N;;;;; FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;AL; 0634 064A;;;;N;;;;; FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062D 0649;;;;N;;;;; FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;AL; 062D 064A;;;;N;;;;; FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062C 0649;;;;N;;;;; FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;AL; 062C 064A;;;;N;;;;; FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062E 0649;;;;N;;;;; FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;AL; 062E 064A;;;;N;;;;; FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0635 0649;;;;N;;;;; FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;AL; 0635 064A;;;;N;;;;; FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0636 0649;;;;N;;;;; FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;AL; 0636 064A;;;;N;;;;; FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;AL; 0634 062C;;;;N;;;;; FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;AL; 0634 062D;;;;N;;;;; FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;AL; 0634 062E;;;;N;;;;; FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;AL; 0634 0645;;;;N;;;;; FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;AL; 0634 0631;;;;N;;;;; FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;AL; 0633 0631;;;;N;;;;; FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;AL; 0635 0631;;;;N;;;;; FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;AL; 0636 0631;;;;N;;;;; FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0637 0649;;;;N;;;;; FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;AL; 0637 064A;;;;N;;;;; FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0639 0649;;;;N;;;;; FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;AL; 0639 064A;;;;N;;;;; FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 063A 0649;;;;N;;;;; FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;AL; 063A 064A;;;;N;;;;; FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0633 0649;;;;N;;;;; FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;AL; 0633 064A;;;;N;;;;; FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0634 0649;;;;N;;;;; FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;AL; 0634 064A;;;;N;;;;; FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062D 0649;;;;N;;;;; FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;AL; 062D 064A;;;;N;;;;; FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062C 0649;;;;N;;;;; FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;AL; 062C 064A;;;;N;;;;; FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062E 0649;;;;N;;;;; FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;AL; 062E 064A;;;;N;;;;; FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0635 0649;;;;N;;;;; FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;AL; 0635 064A;;;;N;;;;; FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0636 0649;;;;N;;;;; FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;AL; 0636 064A;;;;N;;;;; FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;AL; 0634 062C;;;;N;;;;; FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;AL; 0634 062D;;;;N;;;;; FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;AL; 0634 062E;;;;N;;;;; FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;AL; 0634 0645;;;;N;;;;; FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;AL; 0634 0631;;;;N;;;;; FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;AL; 0633 0631;;;;N;;;;; FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;AL; 0635 0631;;;;N;;;;; FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;AL; 0636 0631;;;;N;;;;; FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;AL; 0634 062C;;;;N;;;;; FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;AL; 0634 062D;;;;N;;;;; FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;AL; 0634 062E;;;;N;;;;; FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;AL; 0634 0645;;;;N;;;;; FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;AL; 0633 0647;;;;N;;;;; FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;AL; 0634 0647;;;;N;;;;; FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;AL; 0637 0645;;;;N;;;;; FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;AL; 0633 062C;;;;N;;;;; FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;AL; 0633 062D;;;;N;;;;; FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;AL; 0633 062E;;;;N;;;;; FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;AL; 0634 062C;;;;N;;;;; FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;AL; 0634 062D;;;;N;;;;; FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;AL; 0634 062E;;;;N;;;;; FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;AL; 0637 0645;;;;N;;;;; FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;AL; 0638 0645;;;;N;;;;; FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL; 0627 064B;;;;N;;;;; FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL; 0627 064B;;;;N;;;;; FD3E;ORNATE LEFT PARENTHESIS;Pe;0;ON;;;;;N;;;;; FD3F;ORNATE RIGHT PARENTHESIS;Ps;0;ON;;;;;N;;;;; FD40;ARABIC LIGATURE RAHIMAHU ALLAAH;So;0;ON;;;;;N;;;;; FD41;ARABIC LIGATURE RADI ALLAAHU ANH;So;0;ON;;;;;N;;;;; FD42;ARABIC LIGATURE RADI ALLAAHU ANHAA;So;0;ON;;;;;N;;;;; FD43;ARABIC LIGATURE RADI ALLAAHU ANHUM;So;0;ON;;;;;N;;;;; FD44;ARABIC LIGATURE RADI ALLAAHU ANHUMAA;So;0;ON;;;;;N;;;;; FD45;ARABIC LIGATURE RADI ALLAAHU ANHUNNA;So;0;ON;;;;;N;;;;; FD46;ARABIC LIGATURE SALLALLAAHU ALAYHI WA-AALIH;So;0;ON;;;;;N;;;;; FD47;ARABIC LIGATURE ALAYHI AS-SALAAM;So;0;ON;;;;;N;;;;; FD48;ARABIC LIGATURE ALAYHIM AS-SALAAM;So;0;ON;;;;;N;;;;; FD49;ARABIC LIGATURE ALAYHIMAA AS-SALAAM;So;0;ON;;;;;N;;;;; FD4A;ARABIC LIGATURE ALAYHI AS-SALAATU WAS-SALAAM;So;0;ON;;;;;N;;;;; FD4B;ARABIC LIGATURE QUDDISA SIRRAH;So;0;ON;;;;;N;;;;; FD4C;ARABIC LIGATURE SALLALLAHU ALAYHI WAAALIHEE WA-SALLAM;So;0;ON;;;;;N;;;;; FD4D;ARABIC LIGATURE ALAYHAA AS-SALAAM;So;0;ON;;;;;N;;;;; FD4E;ARABIC LIGATURE TABAARAKA WA-TAAALAA;So;0;ON;;;;;N;;;;; FD4F;ARABIC LIGATURE RAHIMAHUM ALLAAH;So;0;ON;;;;;N;;;;; FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 062A 062C 0645;;;;N;;;;; FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL; 062A 062D 062C;;;;N;;;;; FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL; 062A 062D 062C;;;;N;;;;; FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 062A 062D 0645;;;;N;;;;; FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 062A 062E 0645;;;;N;;;;; FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 062A 0645 062C;;;;N;;;;; FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 062A 0645 062D;;;;N;;;;; FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL; 062A 0645 062E;;;;N;;;;; FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 062C 0645 062D;;;;N;;;;; FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 062C 0645 062D;;;;N;;;;; FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 062D 0645 064A;;;;N;;;;; FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062D 0645 0649;;;;N;;;;; FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL; 0633 062D 062C;;;;N;;;;; FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL; 0633 062C 062D;;;;N;;;;; FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0633 062C 0649;;;;N;;;;; FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 0633 0645 062D;;;;N;;;;; FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0633 0645 062D;;;;N;;;;; FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0633 0645 062C;;;;N;;;;; FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0633 0645 0645;;;;N;;;;; FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0633 0645 0645;;;;N;;;;; FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;AL; 0635 062D 062D;;;;N;;;;; FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;AL; 0635 062D 062D;;;;N;;;;; FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0635 0645 0645;;;;N;;;;; FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;AL; 0634 062D 0645;;;;N;;;;; FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 0634 062D 0645;;;;N;;;;; FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0634 062C 064A;;;;N;;;;; FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;AL; 0634 0645 062E;;;;N;;;;; FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL; 0634 0645 062E;;;;N;;;;; FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0634 0645 0645;;;;N;;;;; FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0634 0645 0645;;;;N;;;;; FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0636 062D 0649;;;;N;;;;; FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL; 0636 062E 0645;;;;N;;;;; FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0636 062E 0645;;;;N;;;;; FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 0637 0645 062D;;;;N;;;;; FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0637 0645 062D;;;;N;;;;; FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0637 0645 0645;;;;N;;;;; FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0637 0645 064A;;;;N;;;;; FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL; 0639 062C 0645;;;;N;;;;; FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0639 0645 0645;;;;N;;;;; FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0639 0645 0645;;;;N;;;;; FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0639 0645 0649;;;;N;;;;; FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 063A 0645 0645;;;;N;;;;; FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 063A 0645 064A;;;;N;;;;; FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 063A 0645 0649;;;;N;;;;; FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL; 0641 062E 0645;;;;N;;;;; FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0641 062E 0645;;;;N;;;;; FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 0642 0645 062D;;;;N;;;;; FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0642 0645 0645;;;;N;;;;; FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;AL; 0644 062D 0645;;;;N;;;;; FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0644 062D 064A;;;;N;;;;; FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0644 062D 0649;;;;N;;;;; FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0644 062C 062C;;;;N;;;;; FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;AL; 0644 062C 062C;;;;N;;;;; FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL; 0644 062E 0645;;;;N;;;;; FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0644 062E 0645;;;;N;;;;; FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 0644 0645 062D;;;;N;;;;; FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0644 0645 062D;;;;N;;;;; FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL; 0645 062D 062C;;;;N;;;;; FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 0645 062D 0645;;;;N;;;;; FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0645 062D 064A;;;;N;;;;; FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL; 0645 062C 062D;;;;N;;;;; FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0645 062C 0645;;;;N;;;;; FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;AL; 0645 062E 062C;;;;N;;;;; FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0645 062E 0645;;;;N;;;;; FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;AL; 0645 062C 062E;;;;N;;;;; FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0647 0645 062C;;;;N;;;;; FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0647 0645 0645;;;;N;;;;; FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 0646 062D 0645;;;;N;;;;; FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0646 062D 0649;;;;N;;;;; FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL; 0646 062C 0645;;;;N;;;;; FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0646 062C 0645;;;;N;;;;; FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0646 062C 0649;;;;N;;;;; FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0646 0645 064A;;;;N;;;;; FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0646 0645 0649;;;;N;;;;; FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 064A 0645 0645;;;;N;;;;; FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 064A 0645 0645;;;;N;;;;; FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 0628 062E 064A;;;;N;;;;; FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 062A 062C 064A;;;;N;;;;; FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062A 062C 0649;;;;N;;;;; FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 062A 062E 064A;;;;N;;;;; FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062A 062E 0649;;;;N;;;;; FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 062A 0645 064A;;;;N;;;;; FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062A 0645 0649;;;;N;;;;; FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 062C 0645 064A;;;;N;;;;; FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062C 062D 0649;;;;N;;;;; FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062C 0645 0649;;;;N;;;;; FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0633 062E 0649;;;;N;;;;; FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0635 062D 064A;;;;N;;;;; FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0634 062D 064A;;;;N;;;;; FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0636 062D 064A;;;;N;;;;; FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0644 062C 064A;;;;N;;;;; FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0644 0645 064A;;;;N;;;;; FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 064A 062D 064A;;;;N;;;;; FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 064A 062C 064A;;;;N;;;;; FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 064A 0645 064A;;;;N;;;;; FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0645 0645 064A;;;;N;;;;; FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0642 0645 064A;;;;N;;;;; FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0646 062D 064A;;;;N;;;;; FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0642 0645 062D;;;;N;;;;; FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 0644 062D 0645;;;;N;;;;; FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0639 0645 064A;;;;N;;;;; FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0643 0645 064A;;;;N;;;;; FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL; 0646 062C 062D;;;;N;;;;; FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 0645 062E 064A;;;;N;;;;; FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0644 062C 0645;;;;N;;;;; FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0643 0645 0645;;;;N;;;;; FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL; 0644 062C 0645;;;;N;;;;; FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;AL; 0646 062C 062D;;;;N;;;;; FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 062C 062D 064A;;;;N;;;;; FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 062D 062C 064A;;;;N;;;;; FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0645 062C 064A;;;;N;;;;; FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0641 0645 064A;;;;N;;;;; FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0628 062D 064A;;;;N;;;;; FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0643 0645 0645;;;;N;;;;; FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0639 062C 0645;;;;N;;;;; FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0635 0645 0645;;;;N;;;;; FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 0633 062E 064A;;;;N;;;;; FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0646 062C 064A;;;;N;;;;; FDCF;ARABIC LIGATURE SALAAMUHU ALAYNAA;So;0;ON;;;;;N;;;;; FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL; 0635 0644 06D2;;;;N;;;;; FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL; 0642 0644 06D2;;;;N;;;;; FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL; 0627 0644 0644 0647;;;;N;;;;; FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;AL; 0627 0643 0628 0631;;;;N;;;;; FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;AL; 0645 062D 0645 062F;;;;N;;;;; FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;AL; 0635 0644 0639 0645;;;;N;;;;; FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;AL; 0631 0633 0648 0644;;;;N;;;;; FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;AL; 0639 0644 064A 0647;;;;N;;;;; FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;AL; 0648 0633 0644 0645;;;;N;;;;; FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;AL; 0635 0644 0649;;;;N;;;;; FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL; 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;; FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL; 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;; FDFC;RIAL SIGN;Sc;0;AL; 0631 06CC 0627 0644;;;;N;;;;; FDFD;ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM;So;0;ON;;;;;N;;;;; FDFE;ARABIC LIGATURE SUBHAANAHU WA TAAALAA;So;0;ON;;;;;N;;;;; FDFF;ARABIC LIGATURE AZZA WA JALL;So;0;ON;;;;;N;;;;; FE00;VARIATION SELECTOR-1;Mn;0;NSM;;;;;N;;;;; FE01;VARIATION SELECTOR-2;Mn;0;NSM;;;;;N;;;;; FE02;VARIATION SELECTOR-3;Mn;0;NSM;;;;;N;;;;; FE03;VARIATION SELECTOR-4;Mn;0;NSM;;;;;N;;;;; FE04;VARIATION SELECTOR-5;Mn;0;NSM;;;;;N;;;;; FE05;VARIATION SELECTOR-6;Mn;0;NSM;;;;;N;;;;; FE06;VARIATION SELECTOR-7;Mn;0;NSM;;;;;N;;;;; FE07;VARIATION SELECTOR-8;Mn;0;NSM;;;;;N;;;;; FE08;VARIATION SELECTOR-9;Mn;0;NSM;;;;;N;;;;; FE09;VARIATION SELECTOR-10;Mn;0;NSM;;;;;N;;;;; FE0A;VARIATION SELECTOR-11;Mn;0;NSM;;;;;N;;;;; FE0B;VARIATION SELECTOR-12;Mn;0;NSM;;;;;N;;;;; FE0C;VARIATION SELECTOR-13;Mn;0;NSM;;;;;N;;;;; FE0D;VARIATION SELECTOR-14;Mn;0;NSM;;;;;N;;;;; FE0E;VARIATION SELECTOR-15;Mn;0;NSM;;;;;N;;;;; FE0F;VARIATION SELECTOR-16;Mn;0;NSM;;;;;N;;;;; FE10;PRESENTATION FORM FOR VERTICAL COMMA;Po;0;ON; 002C;;;;N;;;;; FE11;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA;Po;0;ON; 3001;;;;N;;;;; FE12;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP;Po;0;ON; 3002;;;;N;;;;; FE13;PRESENTATION FORM FOR VERTICAL COLON;Po;0;ON; 003A;;;;N;;;;; FE14;PRESENTATION FORM FOR VERTICAL SEMICOLON;Po;0;ON; 003B;;;;N;;;;; FE15;PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK;Po;0;ON; 0021;;;;N;;;;; FE16;PRESENTATION FORM FOR VERTICAL QUESTION MARK;Po;0;ON; 003F;;;;N;;;;; FE17;PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET;Ps;0;ON; 3016;;;;N;;;;; FE18;PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET;Pe;0;ON; 3017;;;;N;;;;; FE19;PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS;Po;0;ON; 2026;;;;N;;;;; FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;; FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;; FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;; FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;NSM;;;;;N;;;;; FE24;COMBINING MACRON LEFT HALF;Mn;230;NSM;;;;;N;;;;; FE25;COMBINING MACRON RIGHT HALF;Mn;230;NSM;;;;;N;;;;; FE26;COMBINING CONJOINING MACRON;Mn;230;NSM;;;;;N;;;;; FE27;COMBINING LIGATURE LEFT HALF BELOW;Mn;220;NSM;;;;;N;;;;; FE28;COMBINING LIGATURE RIGHT HALF BELOW;Mn;220;NSM;;;;;N;;;;; FE29;COMBINING TILDE LEFT HALF BELOW;Mn;220;NSM;;;;;N;;;;; FE2A;COMBINING TILDE RIGHT HALF BELOW;Mn;220;NSM;;;;;N;;;;; FE2B;COMBINING MACRON LEFT HALF BELOW;Mn;220;NSM;;;;;N;;;;; FE2C;COMBINING MACRON RIGHT HALF BELOW;Mn;220;NSM;;;;;N;;;;; FE2D;COMBINING CONJOINING MACRON BELOW;Mn;220;NSM;;;;;N;;;;; FE2E;COMBINING CYRILLIC TITLO LEFT HALF;Mn;230;NSM;;;;;N;;;;; FE2F;COMBINING CYRILLIC TITLO RIGHT HALF;Mn;230;NSM;;;;;N;;;;; FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON; 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;; FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON; 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;; FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON; 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;; FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON; 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;; FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON; 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;; FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON; 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;; FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;; FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON; 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;; FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON; 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;; FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON; 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;; FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON; 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;; FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON; 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;; FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON; 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;; FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON; 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;; FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON; 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;; FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON; 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;; FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON; 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;; FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON; 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;; FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON; 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;; FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON; 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;; FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON; 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;; FE45;SESAME DOT;Po;0;ON;;;;;N;;;;; FE46;WHITE SESAME DOT;Po;0;ON;;;;;N;;;;; FE47;PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET;Ps;0;ON; 005B;;;;N;;;;; FE48;PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET;Pe;0;ON; 005D;;;;N;;;;; FE49;DASHED OVERLINE;Po;0;ON; 203E;;;;N;SPACING DASHED OVERSCORE;;;; FE4A;CENTRELINE OVERLINE;Po;0;ON; 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;; FE4B;WAVY OVERLINE;Po;0;ON; 203E;;;;N;SPACING WAVY OVERSCORE;;;; FE4C;DOUBLE WAVY OVERLINE;Po;0;ON; 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;; FE4D;DASHED LOW LINE;Pc;0;ON; 005F;;;;N;SPACING DASHED UNDERSCORE;;;; FE4E;CENTRELINE LOW LINE;Pc;0;ON; 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;; FE4F;WAVY LOW LINE;Pc;0;ON; 005F;;;;N;SPACING WAVY UNDERSCORE;;;; FE50;SMALL COMMA;Po;0;CS; 002C;;;;N;;;;; FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON; 3001;;;;N;;;;; FE52;SMALL FULL STOP;Po;0;CS; 002E;;;;N;SMALL PERIOD;;;; FE54;SMALL SEMICOLON;Po;0;ON; 003B;;;;N;;;;; FE55;SMALL COLON;Po;0;CS; 003A;;;;N;;;;; FE56;SMALL QUESTION MARK;Po;0;ON; 003F;;;;N;;;;; FE57;SMALL EXCLAMATION MARK;Po;0;ON; 0021;;;;N;;;;; FE58;SMALL EM DASH;Pd;0;ON; 2014;;;;N;;;;; FE59;SMALL LEFT PARENTHESIS;Ps;0;ON; 0028;;;;Y;SMALL OPENING PARENTHESIS;;;; FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;Y;SMALL CLOSING PARENTHESIS;;;; FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON; 007B;;;;Y;SMALL OPENING CURLY BRACKET;;;; FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON; 007D;;;;Y;SMALL CLOSING CURLY BRACKET;;;; FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON; 3014;;;;Y;SMALL OPENING TORTOISE SHELL BRACKET;;;; FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON; 3015;;;;Y;SMALL CLOSING TORTOISE SHELL BRACKET;;;; FE5F;SMALL NUMBER SIGN;Po;0;ET; 0023;;;;N;;;;; FE60;SMALL AMPERSAND;Po;0;ON; 0026;;;;N;;;;; FE61;SMALL ASTERISK;Po;0;ON; 002A;;;;N;;;;; FE62;SMALL PLUS SIGN;Sm;0;ES; 002B;;;;N;;;;; FE63;SMALL HYPHEN-MINUS;Pd;0;ES; 002D;;;;N;;;;; FE64;SMALL LESS-THAN SIGN;Sm;0;ON; 003C;;;;Y;;;;; FE65;SMALL GREATER-THAN SIGN;Sm;0;ON; 003E;;;;Y;;;;; FE66;SMALL EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; FE68;SMALL REVERSE SOLIDUS;Po;0;ON; 005C;;;;N;SMALL BACKSLASH;;;; FE69;SMALL DOLLAR SIGN;Sc;0;ET; 0024;;;;N;;;;; FE6A;SMALL PERCENT SIGN;Po;0;ET; 0025;;;;N;;;;; FE6B;SMALL COMMERCIAL AT;Po;0;ON; 0040;;;;N;;;;; FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;AL; 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;; FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;AL; 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;; FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;AL; 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;; FE73;ARABIC TAIL FRAGMENT;Lo;0;AL;;;;;N;;;;; FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;AL; 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;; FE76;ARABIC FATHA ISOLATED FORM;Lo;0;AL; 0020 064E;;;;N;ARABIC SPACING FATHAH;;;; FE77;ARABIC FATHA MEDIAL FORM;Lo;0;AL; 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;; FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;AL; 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;; FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;AL; 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;; FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;AL; 0020 0650;;;;N;ARABIC SPACING KASRAH;;;; FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;AL; 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;; FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;AL; 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;; FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;AL; 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;; FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;AL; 0020 0652;;;;N;ARABIC SPACING SUKUN;;;; FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;AL; 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;; FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;AL; 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;; FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL; 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;; FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL; 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;; FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;; FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;; FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;; FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;; FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL; 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;; FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL; 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;; FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;; FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;; FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;AL; 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;; FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;AL; 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;; FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;AL; 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;; FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;AL; 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;; FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;AL; 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;; FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;AL; 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;; FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;AL; 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;; FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;AL; 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;; FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;AL; 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;; FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;AL; 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;; FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;AL; 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;; FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;AL; 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;; FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;AL; 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;; FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;AL; 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;; FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;AL; 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;; FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;AL; 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;; FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;AL; 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;; FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;AL; 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;; FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;AL; 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;; FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;AL; 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;; FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;AL; 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;; FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;AL; 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;; FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;AL; 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;; FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;AL; 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;; FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;AL; 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;; FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;AL; 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;; FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;AL; 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;; FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;AL; 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;; FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;AL; 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;; FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;AL; 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;; FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;AL; 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;; FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;AL; 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;; FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;AL; 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;; FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;AL; 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;; FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;AL; 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;; FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;AL; 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;; FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;AL; 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;; FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;AL; 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;; FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;AL; 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;; FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;AL; 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;; FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;AL; 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;; FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;AL; 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;; FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;AL; 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;; FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;AL; 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;; FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;AL; 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;; FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;AL; 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;; FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;AL; 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;; FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;AL; 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;; FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;AL; 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;; FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;AL; 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;; FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;AL; 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;; FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;AL; 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;; FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;AL; 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;; FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;AL; 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;; FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;AL; 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;; FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;AL; 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;; FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;AL; 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;; FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;AL; 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;; FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;AL; 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;; FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;AL; 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;; FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;AL; 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;; FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;AL; 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;; FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;AL; 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;; FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;AL; 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;; FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;AL; 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;; FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;AL; 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;; FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;AL; 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;; FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;AL; 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;; FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;AL; 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;; FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;AL; 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;; FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;AL; 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;; FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;AL; 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;; FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;AL; 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;; FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;AL; 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;; FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;AL; 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;; FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;AL; 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;; FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;AL; 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;; FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;AL; 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;; FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;AL; 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;; FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;AL; 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;; FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;AL; 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;; FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;AL; 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;; FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;AL; 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;; FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;AL; 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;; FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;AL; 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;; FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;AL; 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;; FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;AL; 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;; FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;AL; 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;; FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;AL; 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;; FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;AL; 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;; FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;AL; 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;; FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;AL; 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;; FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;AL; 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;; FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;AL; 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;; FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;AL; 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;; FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;AL; 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;; FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;AL; 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;; FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;AL; 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;; FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;AL; 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;; FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;AL; 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;; FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;; FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;AL; 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;; FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;AL; 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;; FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;AL; 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;; FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;AL; 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;; FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;AL; 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;; FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL; 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;; FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL; 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;; FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;; FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;; FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL; 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;; FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL; 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;; FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;AL; 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;; FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;AL; 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;; FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;BN;;;;;N;BYTE ORDER MARK;;;; FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON; 0021;;;;N;;;;; FF02;FULLWIDTH QUOTATION MARK;Po;0;ON; 0022;;;;N;;;;; FF03;FULLWIDTH NUMBER SIGN;Po;0;ET; 0023;;;;N;;;;; FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ET; 0024;;;;N;;;;; FF05;FULLWIDTH PERCENT SIGN;Po;0;ET; 0025;;;;N;;;;; FF06;FULLWIDTH AMPERSAND;Po;0;ON; 0026;;;;N;;;;; FF07;FULLWIDTH APOSTROPHE;Po;0;ON; 0027;;;;N;;;;; FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON; 0028;;;;Y;FULLWIDTH OPENING PARENTHESIS;;;; FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;Y;FULLWIDTH CLOSING PARENTHESIS;;;; FF0A;FULLWIDTH ASTERISK;Po;0;ON; 002A;;;;N;;;;; FF0B;FULLWIDTH PLUS SIGN;Sm;0;ES; 002B;;;;N;;;;; FF0C;FULLWIDTH COMMA;Po;0;CS; 002C;;;;N;;;;; FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ES; 002D;;;;N;;;;; FF0E;FULLWIDTH FULL STOP;Po;0;CS; 002E;;;;N;FULLWIDTH PERIOD;;;; FF0F;FULLWIDTH SOLIDUS;Po;0;CS; 002F;;;;N;FULLWIDTH SLASH;;;; FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; FF11;FULLWIDTH DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; FF12;FULLWIDTH DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; FF13;FULLWIDTH DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; FF16;FULLWIDTH DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; FF19;FULLWIDTH DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; FF1A;FULLWIDTH COLON;Po;0;CS; 003A;;;;N;;;;; FF1B;FULLWIDTH SEMICOLON;Po;0;ON; 003B;;;;N;;;;; FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON; 003C;;;;Y;;;;; FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON; 003E;;;;Y;;;;; FF1F;FULLWIDTH QUESTION MARK;Po;0;ON; 003F;;;;N;;;;; FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON; 0040;;;;N;;;;; FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L; 0041;;;;N;;;;FF41; FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L; 0042;;;;N;;;;FF42; FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L; 0043;;;;N;;;;FF43; FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L; 0044;;;;N;;;;FF44; FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L; 0045;;;;N;;;;FF45; FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L; 0046;;;;N;;;;FF46; FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L; 0047;;;;N;;;;FF47; FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L; 0048;;;;N;;;;FF48; FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L; 0049;;;;N;;;;FF49; FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L; 004A;;;;N;;;;FF4A; FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L; 004B;;;;N;;;;FF4B; FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L; 004C;;;;N;;;;FF4C; FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L; 004D;;;;N;;;;FF4D; FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L; 004E;;;;N;;;;FF4E; FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L; 004F;;;;N;;;;FF4F; FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L; 0050;;;;N;;;;FF50; FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L; 0051;;;;N;;;;FF51; FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L; 0052;;;;N;;;;FF52; FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L; 0053;;;;N;;;;FF53; FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L; 0054;;;;N;;;;FF54; FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L; 0055;;;;N;;;;FF55; FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L; 0056;;;;N;;;;FF56; FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L; 0057;;;;N;;;;FF57; FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L; 0058;;;;N;;;;FF58; FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L; 0059;;;;N;;;;FF59; FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L; 005A;;;;N;;;;FF5A; FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON; 005B;;;;Y;FULLWIDTH OPENING SQUARE BRACKET;;;; FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON; 005C;;;;N;FULLWIDTH BACKSLASH;;;; FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON; 005D;;;;Y;FULLWIDTH CLOSING SQUARE BRACKET;;;; FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON; 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;; FF3F;FULLWIDTH LOW LINE;Pc;0;ON; 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;; FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON; 0060;;;;N;FULLWIDTH SPACING GRAVE;;;; FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L; 0061;;;;N;;;FF21;;FF21 FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L; 0062;;;;N;;;FF22;;FF22 FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L; 0063;;;;N;;;FF23;;FF23 FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L; 0064;;;;N;;;FF24;;FF24 FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L; 0065;;;;N;;;FF25;;FF25 FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L; 0066;;;;N;;;FF26;;FF26 FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L; 0067;;;;N;;;FF27;;FF27 FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L; 0068;;;;N;;;FF28;;FF28 FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L; 0069;;;;N;;;FF29;;FF29 FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L; 006A;;;;N;;;FF2A;;FF2A FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L; 006B;;;;N;;;FF2B;;FF2B FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L; 006C;;;;N;;;FF2C;;FF2C FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L; 006D;;;;N;;;FF2D;;FF2D FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L; 006E;;;;N;;;FF2E;;FF2E FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L; 006F;;;;N;;;FF2F;;FF2F FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L; 0070;;;;N;;;FF30;;FF30 FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L; 0071;;;;N;;;FF31;;FF31 FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L; 0072;;;;N;;;FF32;;FF32 FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L; 0073;;;;N;;;FF33;;FF33 FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L; 0074;;;;N;;;FF34;;FF34 FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L; 0075;;;;N;;;FF35;;FF35 FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L; 0076;;;;N;;;FF36;;FF36 FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L; 0077;;;;N;;;FF37;;FF37 FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L; 0078;;;;N;;;FF38;;FF38 FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L; 0079;;;;N;;;FF39;;FF39 FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L; 007A;;;;N;;;FF3A;;FF3A FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON; 007B;;;;Y;FULLWIDTH OPENING CURLY BRACKET;;;; FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON; 007C;;;;N;FULLWIDTH VERTICAL BAR;;;; FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON; 007D;;;;Y;FULLWIDTH CLOSING CURLY BRACKET;;;; FF5E;FULLWIDTH TILDE;Sm;0;ON; 007E;;;;N;FULLWIDTH SPACING TILDE;;;; FF5F;FULLWIDTH LEFT WHITE PARENTHESIS;Ps;0;ON; 2985;;;;Y;;;;; FF60;FULLWIDTH RIGHT WHITE PARENTHESIS;Pe;0;ON; 2986;;;;Y;;;;; FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON; 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;; FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON; 300C;;;;Y;HALFWIDTH OPENING CORNER BRACKET;;;; FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON; 300D;;;;Y;HALFWIDTH CLOSING CORNER BRACKET;;;; FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON; 3001;;;;N;;;;; FF65;HALFWIDTH KATAKANA MIDDLE DOT;Po;0;ON; 30FB;;;;N;;;;; FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L; 30F2;;;;N;;;;; FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L; 30A1;;;;N;;;;; FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L; 30A3;;;;N;;;;; FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L; 30A5;;;;N;;;;; FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L; 30A7;;;;N;;;;; FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L; 30A9;;;;N;;;;; FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L; 30E3;;;;N;;;;; FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L; 30E5;;;;N;;;;; FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L; 30E7;;;;N;;;;; FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L; 30C3;;;;N;;;;; FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L; 30FC;;;;N;;;;; FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L; 30A2;;;;N;;;;; FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L; 30A4;;;;N;;;;; FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L; 30A6;;;;N;;;;; FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L; 30A8;;;;N;;;;; FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L; 30AA;;;;N;;;;; FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L; 30AB;;;;N;;;;; FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L; 30AD;;;;N;;;;; FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L; 30AF;;;;N;;;;; FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L; 30B1;;;;N;;;;; FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L; 30B3;;;;N;;;;; FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L; 30B5;;;;N;;;;; FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L; 30B7;;;;N;;;;; FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L; 30B9;;;;N;;;;; FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L; 30BB;;;;N;;;;; FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L; 30BD;;;;N;;;;; FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L; 30BF;;;;N;;;;; FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L; 30C1;;;;N;;;;; FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L; 30C4;;;;N;;;;; FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L; 30C6;;;;N;;;;; FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L; 30C8;;;;N;;;;; FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L; 30CA;;;;N;;;;; FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L; 30CB;;;;N;;;;; FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L; 30CC;;;;N;;;;; FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L; 30CD;;;;N;;;;; FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L; 30CE;;;;N;;;;; FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L; 30CF;;;;N;;;;; FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L; 30D2;;;;N;;;;; FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L; 30D5;;;;N;;;;; FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L; 30D8;;;;N;;;;; FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L; 30DB;;;;N;;;;; FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L; 30DE;;;;N;;;;; FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L; 30DF;;;;N;;;;; FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L; 30E0;;;;N;;;;; FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L; 30E1;;;;N;;;;; FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L; 30E2;;;;N;;;;; FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L; 30E4;;;;N;;;;; FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L; 30E6;;;;N;;;;; FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L; 30E8;;;;N;;;;; FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L; 30E9;;;;N;;;;; FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L; 30EA;;;;N;;;;; FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L; 30EB;;;;N;;;;; FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L; 30EC;;;;N;;;;; FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L; 30ED;;;;N;;;;; FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L; 30EF;;;;N;;;;; FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L; 30F3;;;;N;;;;; FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L; 3099;;;;N;;;;; FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L; 309A;;;;N;;;;; FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L; 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;; FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L; 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;; FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L; 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;; FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L; 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;; FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L; 3134;;;;N;;;;; FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L; 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;; FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L; 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;; FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L; 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;; FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L; 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;; FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L; 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;; FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L; 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;; FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L; 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;; FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L; 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;; FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L; 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;; FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L; 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;; FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L; 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;; FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L; 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;; FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L; 3141;;;;N;;;;; FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L; 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;; FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L; 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;; FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L; 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;; FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L; 3145;;;;N;;;;; FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L; 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;; FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L; 3147;;;;N;;;;; FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L; 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;; FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L; 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;; FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L; 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;; FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L; 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;; FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L; 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;; FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L; 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;; FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L; 314E;;;;N;;;;; FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L; 314F;;;;N;;;;; FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L; 3150;;;;N;;;;; FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L; 3151;;;;N;;;;; FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L; 3152;;;;N;;;;; FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L; 3153;;;;N;;;;; FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L; 3154;;;;N;;;;; FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L; 3155;;;;N;;;;; FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L; 3156;;;;N;;;;; FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L; 3157;;;;N;;;;; FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L; 3158;;;;N;;;;; FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L; 3159;;;;N;;;;; FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L; 315A;;;;N;;;;; FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L; 315B;;;;N;;;;; FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L; 315C;;;;N;;;;; FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L; 315D;;;;N;;;;; FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L; 315E;;;;N;;;;; FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L; 315F;;;;N;;;;; FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L; 3160;;;;N;;;;; FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L; 3161;;;;N;;;;; FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L; 3162;;;;N;;;;; FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L; 3163;;;;N;;;;; FFE0;FULLWIDTH CENT SIGN;Sc;0;ET; 00A2;;;;N;;;;; FFE1;FULLWIDTH POUND SIGN;Sc;0;ET; 00A3;;;;N;;;;; FFE2;FULLWIDTH NOT SIGN;Sm;0;ON; 00AC;;;;N;;;;; FFE3;FULLWIDTH MACRON;Sk;0;ON; 00AF;;;;N;FULLWIDTH SPACING MACRON;;;; FFE4;FULLWIDTH BROKEN BAR;So;0;ON; 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;; FFE5;FULLWIDTH YEN SIGN;Sc;0;ET; 00A5;;;;N;;;;; FFE6;FULLWIDTH WON SIGN;Sc;0;ET; 20A9;;;;N;;;;; FFE8;HALFWIDTH FORMS LIGHT VERTICAL;So;0;ON; 2502;;;;N;;;;; FFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON; 2190;;;;N;;;;; FFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON; 2191;;;;N;;;;; FFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON; 2192;;;;N;;;;; FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON; 2193;;;;N;;;;; FFED;HALFWIDTH BLACK SQUARE;So;0;ON; 25A0;;;;N;;;;; FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON; 25CB;;;;N;;;;; FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;ON;;;;;N;;;;; FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;ON;;;;;N;;;;; FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;ON;;;;;N;;;;; FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10000;LINEAR B SYLLABLE B008 A;Lo;0;L;;;;;N;;;;; 10001;LINEAR B SYLLABLE B038 E;Lo;0;L;;;;;N;;;;; 10002;LINEAR B SYLLABLE B028 I;Lo;0;L;;;;;N;;;;; 10003;LINEAR B SYLLABLE B061 O;Lo;0;L;;;;;N;;;;; 10004;LINEAR B SYLLABLE B010 U;Lo;0;L;;;;;N;;;;; 10005;LINEAR B SYLLABLE B001 DA;Lo;0;L;;;;;N;;;;; 10006;LINEAR B SYLLABLE B045 DE;Lo;0;L;;;;;N;;;;; 10007;LINEAR B SYLLABLE B007 DI;Lo;0;L;;;;;N;;;;; 10008;LINEAR B SYLLABLE B014 DO;Lo;0;L;;;;;N;;;;; 10009;LINEAR B SYLLABLE B051 DU;Lo;0;L;;;;;N;;;;; 1000A;LINEAR B SYLLABLE B057 JA;Lo;0;L;;;;;N;;;;; 1000B;LINEAR B SYLLABLE B046 JE;Lo;0;L;;;;;N;;;;; 1000D;LINEAR B SYLLABLE B036 JO;Lo;0;L;;;;;N;;;;; 1000E;LINEAR B SYLLABLE B065 JU;Lo;0;L;;;;;N;;;;; 1000F;LINEAR B SYLLABLE B077 KA;Lo;0;L;;;;;N;;;;; 10010;LINEAR B SYLLABLE B044 KE;Lo;0;L;;;;;N;;;;; 10011;LINEAR B SYLLABLE B067 KI;Lo;0;L;;;;;N;;;;; 10012;LINEAR B SYLLABLE B070 KO;Lo;0;L;;;;;N;;;;; 10013;LINEAR B SYLLABLE B081 KU;Lo;0;L;;;;;N;;;;; 10014;LINEAR B SYLLABLE B080 MA;Lo;0;L;;;;;N;;;;; 10015;LINEAR B SYLLABLE B013 ME;Lo;0;L;;;;;N;;;;; 10016;LINEAR B SYLLABLE B073 MI;Lo;0;L;;;;;N;;;;; 10017;LINEAR B SYLLABLE B015 MO;Lo;0;L;;;;;N;;;;; 10018;LINEAR B SYLLABLE B023 MU;Lo;0;L;;;;;N;;;;; 10019;LINEAR B SYLLABLE B006 NA;Lo;0;L;;;;;N;;;;; 1001A;LINEAR B SYLLABLE B024 NE;Lo;0;L;;;;;N;;;;; 1001B;LINEAR B SYLLABLE B030 NI;Lo;0;L;;;;;N;;;;; 1001C;LINEAR B SYLLABLE B052 NO;Lo;0;L;;;;;N;;;;; 1001D;LINEAR B SYLLABLE B055 NU;Lo;0;L;;;;;N;;;;; 1001E;LINEAR B SYLLABLE B003 PA;Lo;0;L;;;;;N;;;;; 1001F;LINEAR B SYLLABLE B072 PE;Lo;0;L;;;;;N;;;;; 10020;LINEAR B SYLLABLE B039 PI;Lo;0;L;;;;;N;;;;; 10021;LINEAR B SYLLABLE B011 PO;Lo;0;L;;;;;N;;;;; 10022;LINEAR B SYLLABLE B050 PU;Lo;0;L;;;;;N;;;;; 10023;LINEAR B SYLLABLE B016 QA;Lo;0;L;;;;;N;;;;; 10024;LINEAR B SYLLABLE B078 QE;Lo;0;L;;;;;N;;;;; 10025;LINEAR B SYLLABLE B021 QI;Lo;0;L;;;;;N;;;;; 10026;LINEAR B SYLLABLE B032 QO;Lo;0;L;;;;;N;;;;; 10028;LINEAR B SYLLABLE B060 RA;Lo;0;L;;;;;N;;;;; 10029;LINEAR B SYLLABLE B027 RE;Lo;0;L;;;;;N;;;;; 1002A;LINEAR B SYLLABLE B053 RI;Lo;0;L;;;;;N;;;;; 1002B;LINEAR B SYLLABLE B002 RO;Lo;0;L;;;;;N;;;;; 1002C;LINEAR B SYLLABLE B026 RU;Lo;0;L;;;;;N;;;;; 1002D;LINEAR B SYLLABLE B031 SA;Lo;0;L;;;;;N;;;;; 1002E;LINEAR B SYLLABLE B009 SE;Lo;0;L;;;;;N;;;;; 1002F;LINEAR B SYLLABLE B041 SI;Lo;0;L;;;;;N;;;;; 10030;LINEAR B SYLLABLE B012 SO;Lo;0;L;;;;;N;;;;; 10031;LINEAR B SYLLABLE B058 SU;Lo;0;L;;;;;N;;;;; 10032;LINEAR B SYLLABLE B059 TA;Lo;0;L;;;;;N;;;;; 10033;LINEAR B SYLLABLE B004 TE;Lo;0;L;;;;;N;;;;; 10034;LINEAR B SYLLABLE B037 TI;Lo;0;L;;;;;N;;;;; 10035;LINEAR B SYLLABLE B005 TO;Lo;0;L;;;;;N;;;;; 10036;LINEAR B SYLLABLE B069 TU;Lo;0;L;;;;;N;;;;; 10037;LINEAR B SYLLABLE B054 WA;Lo;0;L;;;;;N;;;;; 10038;LINEAR B SYLLABLE B075 WE;Lo;0;L;;;;;N;;;;; 10039;LINEAR B SYLLABLE B040 WI;Lo;0;L;;;;;N;;;;; 1003A;LINEAR B SYLLABLE B042 WO;Lo;0;L;;;;;N;;;;; 1003C;LINEAR B SYLLABLE B017 ZA;Lo;0;L;;;;;N;;;;; 1003D;LINEAR B SYLLABLE B074 ZE;Lo;0;L;;;;;N;;;;; 1003F;LINEAR B SYLLABLE B020 ZO;Lo;0;L;;;;;N;;;;; 10040;LINEAR B SYLLABLE B025 A2;Lo;0;L;;;;;N;;;;; 10041;LINEAR B SYLLABLE B043 A3;Lo;0;L;;;;;N;;;;; 10042;LINEAR B SYLLABLE B085 AU;Lo;0;L;;;;;N;;;;; 10043;LINEAR B SYLLABLE B071 DWE;Lo;0;L;;;;;N;;;;; 10044;LINEAR B SYLLABLE B090 DWO;Lo;0;L;;;;;N;;;;; 10045;LINEAR B SYLLABLE B048 NWA;Lo;0;L;;;;;N;;;;; 10046;LINEAR B SYLLABLE B029 PU2;Lo;0;L;;;;;N;;;;; 10047;LINEAR B SYLLABLE B062 PTE;Lo;0;L;;;;;N;;;;; 10048;LINEAR B SYLLABLE B076 RA2;Lo;0;L;;;;;N;;;;; 10049;LINEAR B SYLLABLE B033 RA3;Lo;0;L;;;;;N;;;;; 1004A;LINEAR B SYLLABLE B068 RO2;Lo;0;L;;;;;N;;;;; 1004B;LINEAR B SYLLABLE B066 TA2;Lo;0;L;;;;;N;;;;; 1004C;LINEAR B SYLLABLE B087 TWE;Lo;0;L;;;;;N;;;;; 1004D;LINEAR B SYLLABLE B091 TWO;Lo;0;L;;;;;N;;;;; 10050;LINEAR B SYMBOL B018;Lo;0;L;;;;;N;;;;; 10051;LINEAR B SYMBOL B019;Lo;0;L;;;;;N;;;;; 10052;LINEAR B SYMBOL B022;Lo;0;L;;;;;N;;;;; 10053;LINEAR B SYMBOL B034;Lo;0;L;;;;;N;;;;; 10054;LINEAR B SYMBOL B047;Lo;0;L;;;;;N;;;;; 10055;LINEAR B SYMBOL B049;Lo;0;L;;;;;N;;;;; 10056;LINEAR B SYMBOL B056;Lo;0;L;;;;;N;;;;; 10057;LINEAR B SYMBOL B063;Lo;0;L;;;;;N;;;;; 10058;LINEAR B SYMBOL B064;Lo;0;L;;;;;N;;;;; 10059;LINEAR B SYMBOL B079;Lo;0;L;;;;;N;;;;; 1005A;LINEAR B SYMBOL B082;Lo;0;L;;;;;N;;;;; 1005B;LINEAR B SYMBOL B083;Lo;0;L;;;;;N;;;;; 1005C;LINEAR B SYMBOL B086;Lo;0;L;;;;;N;;;;; 1005D;LINEAR B SYMBOL B089;Lo;0;L;;;;;N;;;;; 10080;LINEAR B IDEOGRAM B100 MAN;Lo;0;L;;;;;N;;;;; 10081;LINEAR B IDEOGRAM B102 WOMAN;Lo;0;L;;;;;N;;;;; 10082;LINEAR B IDEOGRAM B104 DEER;Lo;0;L;;;;;N;;;;; 10083;LINEAR B IDEOGRAM B105 EQUID;Lo;0;L;;;;;N;;;;; 10084;LINEAR B IDEOGRAM B105F MARE;Lo;0;L;;;;;N;;;;; 10085;LINEAR B IDEOGRAM B105M STALLION;Lo;0;L;;;;;N;;;;; 10086;LINEAR B IDEOGRAM B106F EWE;Lo;0;L;;;;;N;;;;; 10087;LINEAR B IDEOGRAM B106M RAM;Lo;0;L;;;;;N;;;;; 10088;LINEAR B IDEOGRAM B107F SHE-GOAT;Lo;0;L;;;;;N;;;;; 10089;LINEAR B IDEOGRAM B107M HE-GOAT;Lo;0;L;;;;;N;;;;; 1008A;LINEAR B IDEOGRAM B108F SOW;Lo;0;L;;;;;N;;;;; 1008B;LINEAR B IDEOGRAM B108M BOAR;Lo;0;L;;;;;N;;;;; 1008C;LINEAR B IDEOGRAM B109F COW;Lo;0;L;;;;;N;;;;; 1008D;LINEAR B IDEOGRAM B109M BULL;Lo;0;L;;;;;N;;;;; 1008E;LINEAR B IDEOGRAM B120 WHEAT;Lo;0;L;;;;;N;;;;; 1008F;LINEAR B IDEOGRAM B121 BARLEY;Lo;0;L;;;;;N;;;;; 10090;LINEAR B IDEOGRAM B122 OLIVE;Lo;0;L;;;;;N;;;;; 10091;LINEAR B IDEOGRAM B123 SPICE;Lo;0;L;;;;;N;;;;; 10092;LINEAR B IDEOGRAM B125 CYPERUS;Lo;0;L;;;;;N;;;;; 10093;LINEAR B MONOGRAM B127 KAPO;Lo;0;L;;;;;N;;;;; 10094;LINEAR B MONOGRAM B128 KANAKO;Lo;0;L;;;;;N;;;;; 10095;LINEAR B IDEOGRAM B130 OIL;Lo;0;L;;;;;N;;;;; 10096;LINEAR B IDEOGRAM B131 WINE;Lo;0;L;;;;;N;;;;; 10097;LINEAR B IDEOGRAM B132;Lo;0;L;;;;;N;;;;; 10098;LINEAR B MONOGRAM B133 AREPA;Lo;0;L;;;;;N;;;;; 10099;LINEAR B MONOGRAM B135 MERI;Lo;0;L;;;;;N;;;;; 1009A;LINEAR B IDEOGRAM B140 BRONZE;Lo;0;L;;;;;N;;;;; 1009B;LINEAR B IDEOGRAM B141 GOLD;Lo;0;L;;;;;N;;;;; 1009C;LINEAR B IDEOGRAM B142;Lo;0;L;;;;;N;;;;; 1009D;LINEAR B IDEOGRAM B145 WOOL;Lo;0;L;;;;;N;;;;; 1009E;LINEAR B IDEOGRAM B146;Lo;0;L;;;;;N;;;;; 1009F;LINEAR B IDEOGRAM B150;Lo;0;L;;;;;N;;;;; 100A0;LINEAR B IDEOGRAM B151 HORN;Lo;0;L;;;;;N;;;;; 100A1;LINEAR B IDEOGRAM B152;Lo;0;L;;;;;N;;;;; 100A2;LINEAR B IDEOGRAM B153;Lo;0;L;;;;;N;;;;; 100A3;LINEAR B IDEOGRAM B154;Lo;0;L;;;;;N;;;;; 100A4;LINEAR B MONOGRAM B156 TURO2;Lo;0;L;;;;;N;;;;; 100A5;LINEAR B IDEOGRAM B157;Lo;0;L;;;;;N;;;;; 100A6;LINEAR B IDEOGRAM B158;Lo;0;L;;;;;N;;;;; 100A7;LINEAR B IDEOGRAM B159 CLOTH;Lo;0;L;;;;;N;;;;; 100A8;LINEAR B IDEOGRAM B160;Lo;0;L;;;;;N;;;;; 100A9;LINEAR B IDEOGRAM B161;Lo;0;L;;;;;N;;;;; 100AA;LINEAR B IDEOGRAM B162 GARMENT;Lo;0;L;;;;;N;;;;; 100AB;LINEAR B IDEOGRAM B163 ARMOUR;Lo;0;L;;;;;N;;;;; 100AC;LINEAR B IDEOGRAM B164;Lo;0;L;;;;;N;;;;; 100AD;LINEAR B IDEOGRAM B165;Lo;0;L;;;;;N;;;;; 100AE;LINEAR B IDEOGRAM B166;Lo;0;L;;;;;N;;;;; 100AF;LINEAR B IDEOGRAM B167;Lo;0;L;;;;;N;;;;; 100B0;LINEAR B IDEOGRAM B168;Lo;0;L;;;;;N;;;;; 100B1;LINEAR B IDEOGRAM B169;Lo;0;L;;;;;N;;;;; 100B2;LINEAR B IDEOGRAM B170;Lo;0;L;;;;;N;;;;; 100B3;LINEAR B IDEOGRAM B171;Lo;0;L;;;;;N;;;;; 100B4;LINEAR B IDEOGRAM B172;Lo;0;L;;;;;N;;;;; 100B5;LINEAR B IDEOGRAM B173 MONTH;Lo;0;L;;;;;N;;;;; 100B6;LINEAR B IDEOGRAM B174;Lo;0;L;;;;;N;;;;; 100B7;LINEAR B IDEOGRAM B176 TREE;Lo;0;L;;;;;N;;;;; 100B8;LINEAR B IDEOGRAM B177;Lo;0;L;;;;;N;;;;; 100B9;LINEAR B IDEOGRAM B178;Lo;0;L;;;;;N;;;;; 100BA;LINEAR B IDEOGRAM B179;Lo;0;L;;;;;N;;;;; 100BB;LINEAR B IDEOGRAM B180;Lo;0;L;;;;;N;;;;; 100BC;LINEAR B IDEOGRAM B181;Lo;0;L;;;;;N;;;;; 100BD;LINEAR B IDEOGRAM B182;Lo;0;L;;;;;N;;;;; 100BE;LINEAR B IDEOGRAM B183;Lo;0;L;;;;;N;;;;; 100BF;LINEAR B IDEOGRAM B184;Lo;0;L;;;;;N;;;;; 100C0;LINEAR B IDEOGRAM B185;Lo;0;L;;;;;N;;;;; 100C1;LINEAR B IDEOGRAM B189;Lo;0;L;;;;;N;;;;; 100C2;LINEAR B IDEOGRAM B190;Lo;0;L;;;;;N;;;;; 100C3;LINEAR B IDEOGRAM B191 HELMET;Lo;0;L;;;;;N;;;;; 100C4;LINEAR B IDEOGRAM B220 FOOTSTOOL;Lo;0;L;;;;;N;;;;; 100C5;LINEAR B IDEOGRAM B225 BATHTUB;Lo;0;L;;;;;N;;;;; 100C6;LINEAR B IDEOGRAM B230 SPEAR;Lo;0;L;;;;;N;;;;; 100C7;LINEAR B IDEOGRAM B231 ARROW;Lo;0;L;;;;;N;;;;; 100C8;LINEAR B IDEOGRAM B232;Lo;0;L;;;;;N;;;;; 100C9;LINEAR B IDEOGRAM B233 SWORD;Lo;0;L;;;;;N;;;;; 100CA;LINEAR B IDEOGRAM B234;Lo;0;L;;;;;N;;;;; 100CB;LINEAR B IDEOGRAM B236;Lo;0;L;;;;;N;;;;; 100CC;LINEAR B IDEOGRAM B240 WHEELED CHARIOT;Lo;0;L;;;;;N;;;;; 100CD;LINEAR B IDEOGRAM B241 CHARIOT;Lo;0;L;;;;;N;;;;; 100CE;LINEAR B IDEOGRAM B242 CHARIOT FRAME;Lo;0;L;;;;;N;;;;; 100CF;LINEAR B IDEOGRAM B243 WHEEL;Lo;0;L;;;;;N;;;;; 100D0;LINEAR B IDEOGRAM B245;Lo;0;L;;;;;N;;;;; 100D1;LINEAR B IDEOGRAM B246;Lo;0;L;;;;;N;;;;; 100D2;LINEAR B MONOGRAM B247 DIPTE;Lo;0;L;;;;;N;;;;; 100D3;LINEAR B IDEOGRAM B248;Lo;0;L;;;;;N;;;;; 100D4;LINEAR B IDEOGRAM B249;Lo;0;L;;;;;N;;;;; 100D5;LINEAR B IDEOGRAM B251;Lo;0;L;;;;;N;;;;; 100D6;LINEAR B IDEOGRAM B252;Lo;0;L;;;;;N;;;;; 100D7;LINEAR B IDEOGRAM B253;Lo;0;L;;;;;N;;;;; 100D8;LINEAR B IDEOGRAM B254 DART;Lo;0;L;;;;;N;;;;; 100D9;LINEAR B IDEOGRAM B255;Lo;0;L;;;;;N;;;;; 100DA;LINEAR B IDEOGRAM B256;Lo;0;L;;;;;N;;;;; 100DB;LINEAR B IDEOGRAM B257;Lo;0;L;;;;;N;;;;; 100DC;LINEAR B IDEOGRAM B258;Lo;0;L;;;;;N;;;;; 100DD;LINEAR B IDEOGRAM B259;Lo;0;L;;;;;N;;;;; 100DE;LINEAR B IDEOGRAM VESSEL B155;Lo;0;L;;;;;N;;;;; 100DF;LINEAR B IDEOGRAM VESSEL B200;Lo;0;L;;;;;N;;;;; 100E0;LINEAR B IDEOGRAM VESSEL B201;Lo;0;L;;;;;N;;;;; 100E1;LINEAR B IDEOGRAM VESSEL B202;Lo;0;L;;;;;N;;;;; 100E2;LINEAR B IDEOGRAM VESSEL B203;Lo;0;L;;;;;N;;;;; 100E3;LINEAR B IDEOGRAM VESSEL B204;Lo;0;L;;;;;N;;;;; 100E4;LINEAR B IDEOGRAM VESSEL B205;Lo;0;L;;;;;N;;;;; 100E5;LINEAR B IDEOGRAM VESSEL B206;Lo;0;L;;;;;N;;;;; 100E6;LINEAR B IDEOGRAM VESSEL B207;Lo;0;L;;;;;N;;;;; 100E7;LINEAR B IDEOGRAM VESSEL B208;Lo;0;L;;;;;N;;;;; 100E8;LINEAR B IDEOGRAM VESSEL B209;Lo;0;L;;;;;N;;;;; 100E9;LINEAR B IDEOGRAM VESSEL B210;Lo;0;L;;;;;N;;;;; 100EA;LINEAR B IDEOGRAM VESSEL B211;Lo;0;L;;;;;N;;;;; 100EB;LINEAR B IDEOGRAM VESSEL B212;Lo;0;L;;;;;N;;;;; 100EC;LINEAR B IDEOGRAM VESSEL B213;Lo;0;L;;;;;N;;;;; 100ED;LINEAR B IDEOGRAM VESSEL B214;Lo;0;L;;;;;N;;;;; 100EE;LINEAR B IDEOGRAM VESSEL B215;Lo;0;L;;;;;N;;;;; 100EF;LINEAR B IDEOGRAM VESSEL B216;Lo;0;L;;;;;N;;;;; 100F0;LINEAR B IDEOGRAM VESSEL B217;Lo;0;L;;;;;N;;;;; 100F1;LINEAR B IDEOGRAM VESSEL B218;Lo;0;L;;;;;N;;;;; 100F2;LINEAR B IDEOGRAM VESSEL B219;Lo;0;L;;;;;N;;;;; 100F3;LINEAR B IDEOGRAM VESSEL B221;Lo;0;L;;;;;N;;;;; 100F4;LINEAR B IDEOGRAM VESSEL B222;Lo;0;L;;;;;N;;;;; 100F5;LINEAR B IDEOGRAM VESSEL B226;Lo;0;L;;;;;N;;;;; 100F6;LINEAR B IDEOGRAM VESSEL B227;Lo;0;L;;;;;N;;;;; 100F7;LINEAR B IDEOGRAM VESSEL B228;Lo;0;L;;;;;N;;;;; 100F8;LINEAR B IDEOGRAM VESSEL B229;Lo;0;L;;;;;N;;;;; 100F9;LINEAR B IDEOGRAM VESSEL B250;Lo;0;L;;;;;N;;;;; 100FA;LINEAR B IDEOGRAM VESSEL B305;Lo;0;L;;;;;N;;;;; 10100;AEGEAN WORD SEPARATOR LINE;Po;0;L;;;;;N;;;;; 10101;AEGEAN WORD SEPARATOR DOT;Po;0;ON;;;;;N;;;;; 10102;AEGEAN CHECK MARK;Po;0;L;;;;;N;;;;; 10107;AEGEAN NUMBER ONE;No;0;L;;;;1;N;;;;; 10108;AEGEAN NUMBER TWO;No;0;L;;;;2;N;;;;; 10109;AEGEAN NUMBER THREE;No;0;L;;;;3;N;;;;; 1010A;AEGEAN NUMBER FOUR;No;0;L;;;;4;N;;;;; 1010B;AEGEAN NUMBER FIVE;No;0;L;;;;5;N;;;;; 1010C;AEGEAN NUMBER SIX;No;0;L;;;;6;N;;;;; 1010D;AEGEAN NUMBER SEVEN;No;0;L;;;;7;N;;;;; 1010E;AEGEAN NUMBER EIGHT;No;0;L;;;;8;N;;;;; 1010F;AEGEAN NUMBER NINE;No;0;L;;;;9;N;;;;; 10110;AEGEAN NUMBER TEN;No;0;L;;;;10;N;;;;; 10111;AEGEAN NUMBER TWENTY;No;0;L;;;;20;N;;;;; 10112;AEGEAN NUMBER THIRTY;No;0;L;;;;30;N;;;;; 10113;AEGEAN NUMBER FORTY;No;0;L;;;;40;N;;;;; 10114;AEGEAN NUMBER FIFTY;No;0;L;;;;50;N;;;;; 10115;AEGEAN NUMBER SIXTY;No;0;L;;;;60;N;;;;; 10116;AEGEAN NUMBER SEVENTY;No;0;L;;;;70;N;;;;; 10117;AEGEAN NUMBER EIGHTY;No;0;L;;;;80;N;;;;; 10118;AEGEAN NUMBER NINETY;No;0;L;;;;90;N;;;;; 10119;AEGEAN NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;; 1011A;AEGEAN NUMBER TWO HUNDRED;No;0;L;;;;200;N;;;;; 1011B;AEGEAN NUMBER THREE HUNDRED;No;0;L;;;;300;N;;;;; 1011C;AEGEAN NUMBER FOUR HUNDRED;No;0;L;;;;400;N;;;;; 1011D;AEGEAN NUMBER FIVE HUNDRED;No;0;L;;;;500;N;;;;; 1011E;AEGEAN NUMBER SIX HUNDRED;No;0;L;;;;600;N;;;;; 1011F;AEGEAN NUMBER SEVEN HUNDRED;No;0;L;;;;700;N;;;;; 10120;AEGEAN NUMBER EIGHT HUNDRED;No;0;L;;;;800;N;;;;; 10121;AEGEAN NUMBER NINE HUNDRED;No;0;L;;;;900;N;;;;; 10122;AEGEAN NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;; 10123;AEGEAN NUMBER TWO THOUSAND;No;0;L;;;;2000;N;;;;; 10124;AEGEAN NUMBER THREE THOUSAND;No;0;L;;;;3000;N;;;;; 10125;AEGEAN NUMBER FOUR THOUSAND;No;0;L;;;;4000;N;;;;; 10126;AEGEAN NUMBER FIVE THOUSAND;No;0;L;;;;5000;N;;;;; 10127;AEGEAN NUMBER SIX THOUSAND;No;0;L;;;;6000;N;;;;; 10128;AEGEAN NUMBER SEVEN THOUSAND;No;0;L;;;;7000;N;;;;; 10129;AEGEAN NUMBER EIGHT THOUSAND;No;0;L;;;;8000;N;;;;; 1012A;AEGEAN NUMBER NINE THOUSAND;No;0;L;;;;9000;N;;;;; 1012B;AEGEAN NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;; 1012C;AEGEAN NUMBER TWENTY THOUSAND;No;0;L;;;;20000;N;;;;; 1012D;AEGEAN NUMBER THIRTY THOUSAND;No;0;L;;;;30000;N;;;;; 1012E;AEGEAN NUMBER FORTY THOUSAND;No;0;L;;;;40000;N;;;;; 1012F;AEGEAN NUMBER FIFTY THOUSAND;No;0;L;;;;50000;N;;;;; 10130;AEGEAN NUMBER SIXTY THOUSAND;No;0;L;;;;60000;N;;;;; 10131;AEGEAN NUMBER SEVENTY THOUSAND;No;0;L;;;;70000;N;;;;; 10132;AEGEAN NUMBER EIGHTY THOUSAND;No;0;L;;;;80000;N;;;;; 10133;AEGEAN NUMBER NINETY THOUSAND;No;0;L;;;;90000;N;;;;; 10137;AEGEAN WEIGHT BASE UNIT;So;0;L;;;;;N;;;;; 10138;AEGEAN WEIGHT FIRST SUBUNIT;So;0;L;;;;;N;;;;; 10139;AEGEAN WEIGHT SECOND SUBUNIT;So;0;L;;;;;N;;;;; 1013A;AEGEAN WEIGHT THIRD SUBUNIT;So;0;L;;;;;N;;;;; 1013B;AEGEAN WEIGHT FOURTH SUBUNIT;So;0;L;;;;;N;;;;; 1013C;AEGEAN DRY MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;; 1013D;AEGEAN LIQUID MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;; 1013E;AEGEAN MEASURE SECOND SUBUNIT;So;0;L;;;;;N;;;;; 1013F;AEGEAN MEASURE THIRD SUBUNIT;So;0;L;;;;;N;;;;; 10140;GREEK ACROPHONIC ATTIC ONE QUARTER;Nl;0;ON;;;;1/4;N;;;;; 10141;GREEK ACROPHONIC ATTIC ONE HALF;Nl;0;ON;;;;1/2;N;;;;; 10142;GREEK ACROPHONIC ATTIC ONE DRACHMA;Nl;0;ON;;;;1;N;;;;; 10143;GREEK ACROPHONIC ATTIC FIVE;Nl;0;ON;;;;5;N;;;;; 10144;GREEK ACROPHONIC ATTIC FIFTY;Nl;0;ON;;;;50;N;;;;; 10145;GREEK ACROPHONIC ATTIC FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; 10146;GREEK ACROPHONIC ATTIC FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;; 10147;GREEK ACROPHONIC ATTIC FIFTY THOUSAND;Nl;0;ON;;;;50000;N;;;;; 10148;GREEK ACROPHONIC ATTIC FIVE TALENTS;Nl;0;ON;;;;5;N;;;;; 10149;GREEK ACROPHONIC ATTIC TEN TALENTS;Nl;0;ON;;;;10;N;;;;; 1014A;GREEK ACROPHONIC ATTIC FIFTY TALENTS;Nl;0;ON;;;;50;N;;;;; 1014B;GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS;Nl;0;ON;;;;100;N;;;;; 1014C;GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS;Nl;0;ON;;;;500;N;;;;; 1014D;GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS;Nl;0;ON;;;;1000;N;;;;; 1014E;GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS;Nl;0;ON;;;;5000;N;;;;; 1014F;GREEK ACROPHONIC ATTIC FIVE STATERS;Nl;0;ON;;;;5;N;;;;; 10150;GREEK ACROPHONIC ATTIC TEN STATERS;Nl;0;ON;;;;10;N;;;;; 10151;GREEK ACROPHONIC ATTIC FIFTY STATERS;Nl;0;ON;;;;50;N;;;;; 10152;GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS;Nl;0;ON;;;;100;N;;;;; 10153;GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS;Nl;0;ON;;;;500;N;;;;; 10154;GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS;Nl;0;ON;;;;1000;N;;;;; 10155;GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS;Nl;0;ON;;;;10000;N;;;;; 10156;GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS;Nl;0;ON;;;;50000;N;;;;; 10157;GREEK ACROPHONIC ATTIC TEN MNAS;Nl;0;ON;;;;10;N;;;;; 10158;GREEK ACROPHONIC HERAEUM ONE PLETHRON;Nl;0;ON;;;;1;N;;;;; 10159;GREEK ACROPHONIC THESPIAN ONE;Nl;0;ON;;;;1;N;;;;; 1015A;GREEK ACROPHONIC HERMIONIAN ONE;Nl;0;ON;;;;1;N;;;;; 1015B;GREEK ACROPHONIC EPIDAUREAN TWO;Nl;0;ON;;;;2;N;;;;; 1015C;GREEK ACROPHONIC THESPIAN TWO;Nl;0;ON;;;;2;N;;;;; 1015D;GREEK ACROPHONIC CYRENAIC TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;; 1015E;GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;; 1015F;GREEK ACROPHONIC TROEZENIAN FIVE;Nl;0;ON;;;;5;N;;;;; 10160;GREEK ACROPHONIC TROEZENIAN TEN;Nl;0;ON;;;;10;N;;;;; 10161;GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM;Nl;0;ON;;;;10;N;;;;; 10162;GREEK ACROPHONIC HERMIONIAN TEN;Nl;0;ON;;;;10;N;;;;; 10163;GREEK ACROPHONIC MESSENIAN TEN;Nl;0;ON;;;;10;N;;;;; 10164;GREEK ACROPHONIC THESPIAN TEN;Nl;0;ON;;;;10;N;;;;; 10165;GREEK ACROPHONIC THESPIAN THIRTY;Nl;0;ON;;;;30;N;;;;; 10166;GREEK ACROPHONIC TROEZENIAN FIFTY;Nl;0;ON;;;;50;N;;;;; 10167;GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM;Nl;0;ON;;;;50;N;;;;; 10168;GREEK ACROPHONIC HERMIONIAN FIFTY;Nl;0;ON;;;;50;N;;;;; 10169;GREEK ACROPHONIC THESPIAN FIFTY;Nl;0;ON;;;;50;N;;;;; 1016A;GREEK ACROPHONIC THESPIAN ONE HUNDRED;Nl;0;ON;;;;100;N;;;;; 1016B;GREEK ACROPHONIC THESPIAN THREE HUNDRED;Nl;0;ON;;;;300;N;;;;; 1016C;GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; 1016D;GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; 1016E;GREEK ACROPHONIC THESPIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; 1016F;GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; 10170;GREEK ACROPHONIC NAXIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; 10171;GREEK ACROPHONIC THESPIAN ONE THOUSAND;Nl;0;ON;;;;1000;N;;;;; 10172;GREEK ACROPHONIC THESPIAN FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;; 10173;GREEK ACROPHONIC DELPHIC FIVE MNAS;Nl;0;ON;;;;5;N;;;;; 10174;GREEK ACROPHONIC STRATIAN FIFTY MNAS;Nl;0;ON;;;;50;N;;;;; 10175;GREEK ONE HALF SIGN;No;0;ON;;;;1/2;N;;;;; 10176;GREEK ONE HALF SIGN ALTERNATE FORM;No;0;ON;;;;1/2;N;;;;; 10177;GREEK TWO THIRDS SIGN;No;0;ON;;;;2/3;N;;;;; 10178;GREEK THREE QUARTERS SIGN;No;0;ON;;;;3/4;N;;;;; 10179;GREEK YEAR SIGN;So;0;ON;;;;;N;;;;; 1017A;GREEK TALENT SIGN;So;0;ON;;;;;N;;;;; 1017B;GREEK DRACHMA SIGN;So;0;ON;;;;;N;;;;; 1017C;GREEK OBOL SIGN;So;0;ON;;;;;N;;;;; 1017D;GREEK TWO OBOLS SIGN;So;0;ON;;;;;N;;;;; 1017E;GREEK THREE OBOLS SIGN;So;0;ON;;;;;N;;;;; 1017F;GREEK FOUR OBOLS SIGN;So;0;ON;;;;;N;;;;; 10180;GREEK FIVE OBOLS SIGN;So;0;ON;;;;;N;;;;; 10181;GREEK METRETES SIGN;So;0;ON;;;;;N;;;;; 10182;GREEK KYATHOS BASE SIGN;So;0;ON;;;;;N;;;;; 10183;GREEK LITRA SIGN;So;0;ON;;;;;N;;;;; 10184;GREEK OUNKIA SIGN;So;0;ON;;;;;N;;;;; 10185;GREEK XESTES SIGN;So;0;ON;;;;;N;;;;; 10186;GREEK ARTABE SIGN;So;0;ON;;;;;N;;;;; 10187;GREEK AROURA SIGN;So;0;ON;;;;;N;;;;; 10188;GREEK GRAMMA SIGN;So;0;ON;;;;;N;;;;; 10189;GREEK TRYBLION BASE SIGN;So;0;ON;;;;;N;;;;; 1018A;GREEK ZERO SIGN;No;0;ON;;;;0;N;;;;; 1018B;GREEK ONE QUARTER SIGN;No;0;ON;;;;1/4;N;;;;; 1018C;GREEK SINUSOID SIGN;So;0;ON;;;;;N;;;;; 1018D;GREEK INDICTION SIGN;So;0;L;;;;;N;;;;; 1018E;NOMISMA SIGN;So;0;L;;;;;N;;;;; 10190;ROMAN SEXTANS SIGN;So;0;ON;;;;;N;;;;; 10191;ROMAN UNCIA SIGN;So;0;ON;;;;;N;;;;; 10192;ROMAN SEMUNCIA SIGN;So;0;ON;;;;;N;;;;; 10193;ROMAN SEXTULA SIGN;So;0;ON;;;;;N;;;;; 10194;ROMAN DIMIDIA SEXTULA SIGN;So;0;ON;;;;;N;;;;; 10195;ROMAN SILIQUA SIGN;So;0;ON;;;;;N;;;;; 10196;ROMAN DENARIUS SIGN;So;0;ON;;;;;N;;;;; 10197;ROMAN QUINARIUS SIGN;So;0;ON;;;;;N;;;;; 10198;ROMAN SESTERTIUS SIGN;So;0;ON;;;;;N;;;;; 10199;ROMAN DUPONDIUS SIGN;So;0;ON;;;;;N;;;;; 1019A;ROMAN AS SIGN;So;0;ON;;;;;N;;;;; 1019B;ROMAN CENTURIAL SIGN;So;0;ON;;;;;N;;;;; 1019C;ASCIA SYMBOL;So;0;ON;;;;;N;;;;; 101A0;GREEK SYMBOL TAU RHO;So;0;ON;;;;;N;;;;; 101D0;PHAISTOS DISC SIGN PEDESTRIAN;So;0;L;;;;;N;;;;; 101D1;PHAISTOS DISC SIGN PLUMED HEAD;So;0;L;;;;;N;;;;; 101D2;PHAISTOS DISC SIGN TATTOOED HEAD;So;0;L;;;;;N;;;;; 101D3;PHAISTOS DISC SIGN CAPTIVE;So;0;L;;;;;N;;;;; 101D4;PHAISTOS DISC SIGN CHILD;So;0;L;;;;;N;;;;; 101D5;PHAISTOS DISC SIGN WOMAN;So;0;L;;;;;N;;;;; 101D6;PHAISTOS DISC SIGN HELMET;So;0;L;;;;;N;;;;; 101D7;PHAISTOS DISC SIGN GAUNTLET;So;0;L;;;;;N;;;;; 101D8;PHAISTOS DISC SIGN TIARA;So;0;L;;;;;N;;;;; 101D9;PHAISTOS DISC SIGN ARROW;So;0;L;;;;;N;;;;; 101DA;PHAISTOS DISC SIGN BOW;So;0;L;;;;;N;;;;; 101DB;PHAISTOS DISC SIGN SHIELD;So;0;L;;;;;N;;;;; 101DC;PHAISTOS DISC SIGN CLUB;So;0;L;;;;;N;;;;; 101DD;PHAISTOS DISC SIGN MANACLES;So;0;L;;;;;N;;;;; 101DE;PHAISTOS DISC SIGN MATTOCK;So;0;L;;;;;N;;;;; 101DF;PHAISTOS DISC SIGN SAW;So;0;L;;;;;N;;;;; 101E0;PHAISTOS DISC SIGN LID;So;0;L;;;;;N;;;;; 101E1;PHAISTOS DISC SIGN BOOMERANG;So;0;L;;;;;N;;;;; 101E2;PHAISTOS DISC SIGN CARPENTRY PLANE;So;0;L;;;;;N;;;;; 101E3;PHAISTOS DISC SIGN DOLIUM;So;0;L;;;;;N;;;;; 101E4;PHAISTOS DISC SIGN COMB;So;0;L;;;;;N;;;;; 101E5;PHAISTOS DISC SIGN SLING;So;0;L;;;;;N;;;;; 101E6;PHAISTOS DISC SIGN COLUMN;So;0;L;;;;;N;;;;; 101E7;PHAISTOS DISC SIGN BEEHIVE;So;0;L;;;;;N;;;;; 101E8;PHAISTOS DISC SIGN SHIP;So;0;L;;;;;N;;;;; 101E9;PHAISTOS DISC SIGN HORN;So;0;L;;;;;N;;;;; 101EA;PHAISTOS DISC SIGN HIDE;So;0;L;;;;;N;;;;; 101EB;PHAISTOS DISC SIGN BULLS LEG;So;0;L;;;;;N;;;;; 101EC;PHAISTOS DISC SIGN CAT;So;0;L;;;;;N;;;;; 101ED;PHAISTOS DISC SIGN RAM;So;0;L;;;;;N;;;;; 101EE;PHAISTOS DISC SIGN EAGLE;So;0;L;;;;;N;;;;; 101EF;PHAISTOS DISC SIGN DOVE;So;0;L;;;;;N;;;;; 101F0;PHAISTOS DISC SIGN TUNNY;So;0;L;;;;;N;;;;; 101F1;PHAISTOS DISC SIGN BEE;So;0;L;;;;;N;;;;; 101F2;PHAISTOS DISC SIGN PLANE TREE;So;0;L;;;;;N;;;;; 101F3;PHAISTOS DISC SIGN VINE;So;0;L;;;;;N;;;;; 101F4;PHAISTOS DISC SIGN PAPYRUS;So;0;L;;;;;N;;;;; 101F5;PHAISTOS DISC SIGN ROSETTE;So;0;L;;;;;N;;;;; 101F6;PHAISTOS DISC SIGN LILY;So;0;L;;;;;N;;;;; 101F7;PHAISTOS DISC SIGN OX BACK;So;0;L;;;;;N;;;;; 101F8;PHAISTOS DISC SIGN FLUTE;So;0;L;;;;;N;;;;; 101F9;PHAISTOS DISC SIGN GRATER;So;0;L;;;;;N;;;;; 101FA;PHAISTOS DISC SIGN STRAINER;So;0;L;;;;;N;;;;; 101FB;PHAISTOS DISC SIGN SMALL AXE;So;0;L;;;;;N;;;;; 101FC;PHAISTOS DISC SIGN WAVY BAND;So;0;L;;;;;N;;;;; 101FD;PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE;Mn;220;NSM;;;;;N;;;;; 10280;LYCIAN LETTER A;Lo;0;L;;;;;N;;;;; 10281;LYCIAN LETTER E;Lo;0;L;;;;;N;;;;; 10282;LYCIAN LETTER B;Lo;0;L;;;;;N;;;;; 10283;LYCIAN LETTER BH;Lo;0;L;;;;;N;;;;; 10284;LYCIAN LETTER G;Lo;0;L;;;;;N;;;;; 10285;LYCIAN LETTER D;Lo;0;L;;;;;N;;;;; 10286;LYCIAN LETTER I;Lo;0;L;;;;;N;;;;; 10287;LYCIAN LETTER W;Lo;0;L;;;;;N;;;;; 10288;LYCIAN LETTER Z;Lo;0;L;;;;;N;;;;; 10289;LYCIAN LETTER TH;Lo;0;L;;;;;N;;;;; 1028A;LYCIAN LETTER J;Lo;0;L;;;;;N;;;;; 1028B;LYCIAN LETTER K;Lo;0;L;;;;;N;;;;; 1028C;LYCIAN LETTER Q;Lo;0;L;;;;;N;;;;; 1028D;LYCIAN LETTER L;Lo;0;L;;;;;N;;;;; 1028E;LYCIAN LETTER M;Lo;0;L;;;;;N;;;;; 1028F;LYCIAN LETTER N;Lo;0;L;;;;;N;;;;; 10290;LYCIAN LETTER MM;Lo;0;L;;;;;N;;;;; 10291;LYCIAN LETTER NN;Lo;0;L;;;;;N;;;;; 10292;LYCIAN LETTER U;Lo;0;L;;;;;N;;;;; 10293;LYCIAN LETTER P;Lo;0;L;;;;;N;;;;; 10294;LYCIAN LETTER KK;Lo;0;L;;;;;N;;;;; 10295;LYCIAN LETTER R;Lo;0;L;;;;;N;;;;; 10296;LYCIAN LETTER S;Lo;0;L;;;;;N;;;;; 10297;LYCIAN LETTER T;Lo;0;L;;;;;N;;;;; 10298;LYCIAN LETTER TT;Lo;0;L;;;;;N;;;;; 10299;LYCIAN LETTER AN;Lo;0;L;;;;;N;;;;; 1029A;LYCIAN LETTER EN;Lo;0;L;;;;;N;;;;; 1029B;LYCIAN LETTER H;Lo;0;L;;;;;N;;;;; 1029C;LYCIAN LETTER X;Lo;0;L;;;;;N;;;;; 102A0;CARIAN LETTER A;Lo;0;L;;;;;N;;;;; 102A1;CARIAN LETTER P2;Lo;0;L;;;;;N;;;;; 102A2;CARIAN LETTER D;Lo;0;L;;;;;N;;;;; 102A3;CARIAN LETTER L;Lo;0;L;;;;;N;;;;; 102A4;CARIAN LETTER UUU;Lo;0;L;;;;;N;;;;; 102A5;CARIAN LETTER R;Lo;0;L;;;;;N;;;;; 102A6;CARIAN LETTER LD;Lo;0;L;;;;;N;;;;; 102A7;CARIAN LETTER A2;Lo;0;L;;;;;N;;;;; 102A8;CARIAN LETTER Q;Lo;0;L;;;;;N;;;;; 102A9;CARIAN LETTER B;Lo;0;L;;;;;N;;;;; 102AA;CARIAN LETTER M;Lo;0;L;;;;;N;;;;; 102AB;CARIAN LETTER O;Lo;0;L;;;;;N;;;;; 102AC;CARIAN LETTER D2;Lo;0;L;;;;;N;;;;; 102AD;CARIAN LETTER T;Lo;0;L;;;;;N;;;;; 102AE;CARIAN LETTER SH;Lo;0;L;;;;;N;;;;; 102AF;CARIAN LETTER SH2;Lo;0;L;;;;;N;;;;; 102B0;CARIAN LETTER S;Lo;0;L;;;;;N;;;;; 102B1;CARIAN LETTER C-18;Lo;0;L;;;;;N;;;;; 102B2;CARIAN LETTER U;Lo;0;L;;;;;N;;;;; 102B3;CARIAN LETTER NN;Lo;0;L;;;;;N;;;;; 102B4;CARIAN LETTER X;Lo;0;L;;;;;N;;;;; 102B5;CARIAN LETTER N;Lo;0;L;;;;;N;;;;; 102B6;CARIAN LETTER TT2;Lo;0;L;;;;;N;;;;; 102B7;CARIAN LETTER P;Lo;0;L;;;;;N;;;;; 102B8;CARIAN LETTER SS;Lo;0;L;;;;;N;;;;; 102B9;CARIAN LETTER I;Lo;0;L;;;;;N;;;;; 102BA;CARIAN LETTER E;Lo;0;L;;;;;N;;;;; 102BB;CARIAN LETTER UUUU;Lo;0;L;;;;;N;;;;; 102BC;CARIAN LETTER K;Lo;0;L;;;;;N;;;;; 102BD;CARIAN LETTER K2;Lo;0;L;;;;;N;;;;; 102BE;CARIAN LETTER ND;Lo;0;L;;;;;N;;;;; 102BF;CARIAN LETTER UU;Lo;0;L;;;;;N;;;;; 102C0;CARIAN LETTER G;Lo;0;L;;;;;N;;;;; 102C1;CARIAN LETTER G2;Lo;0;L;;;;;N;;;;; 102C2;CARIAN LETTER ST;Lo;0;L;;;;;N;;;;; 102C3;CARIAN LETTER ST2;Lo;0;L;;;;;N;;;;; 102C4;CARIAN LETTER NG;Lo;0;L;;;;;N;;;;; 102C5;CARIAN LETTER II;Lo;0;L;;;;;N;;;;; 102C6;CARIAN LETTER C-39;Lo;0;L;;;;;N;;;;; 102C7;CARIAN LETTER TT;Lo;0;L;;;;;N;;;;; 102C8;CARIAN LETTER UUU2;Lo;0;L;;;;;N;;;;; 102C9;CARIAN LETTER RR;Lo;0;L;;;;;N;;;;; 102CA;CARIAN LETTER MB;Lo;0;L;;;;;N;;;;; 102CB;CARIAN LETTER MB2;Lo;0;L;;;;;N;;;;; 102CC;CARIAN LETTER MB3;Lo;0;L;;;;;N;;;;; 102CD;CARIAN LETTER MB4;Lo;0;L;;;;;N;;;;; 102CE;CARIAN LETTER LD2;Lo;0;L;;;;;N;;;;; 102CF;CARIAN LETTER E2;Lo;0;L;;;;;N;;;;; 102D0;CARIAN LETTER UUU3;Lo;0;L;;;;;N;;;;; 102E0;COPTIC EPACT THOUSANDS MARK;Mn;220;NSM;;;;;N;;;;; 102E1;COPTIC EPACT DIGIT ONE;No;0;EN;;;;1;N;;;;; 102E2;COPTIC EPACT DIGIT TWO;No;0;EN;;;;2;N;;;;; 102E3;COPTIC EPACT DIGIT THREE;No;0;EN;;;;3;N;;;;; 102E4;COPTIC EPACT DIGIT FOUR;No;0;EN;;;;4;N;;;;; 102E5;COPTIC EPACT DIGIT FIVE;No;0;EN;;;;5;N;;;;; 102E6;COPTIC EPACT DIGIT SIX;No;0;EN;;;;6;N;;;;; 102E7;COPTIC EPACT DIGIT SEVEN;No;0;EN;;;;7;N;;;;; 102E8;COPTIC EPACT DIGIT EIGHT;No;0;EN;;;;8;N;;;;; 102E9;COPTIC EPACT DIGIT NINE;No;0;EN;;;;9;N;;;;; 102EA;COPTIC EPACT NUMBER TEN;No;0;EN;;;;10;N;;;;; 102EB;COPTIC EPACT NUMBER TWENTY;No;0;EN;;;;20;N;;;;; 102EC;COPTIC EPACT NUMBER THIRTY;No;0;EN;;;;30;N;;;;; 102ED;COPTIC EPACT NUMBER FORTY;No;0;EN;;;;40;N;;;;; 102EE;COPTIC EPACT NUMBER FIFTY;No;0;EN;;;;50;N;;;;; 102EF;COPTIC EPACT NUMBER SIXTY;No;0;EN;;;;60;N;;;;; 102F0;COPTIC EPACT NUMBER SEVENTY;No;0;EN;;;;70;N;;;;; 102F1;COPTIC EPACT NUMBER EIGHTY;No;0;EN;;;;80;N;;;;; 102F2;COPTIC EPACT NUMBER NINETY;No;0;EN;;;;90;N;;;;; 102F3;COPTIC EPACT NUMBER ONE HUNDRED;No;0;EN;;;;100;N;;;;; 102F4;COPTIC EPACT NUMBER TWO HUNDRED;No;0;EN;;;;200;N;;;;; 102F5;COPTIC EPACT NUMBER THREE HUNDRED;No;0;EN;;;;300;N;;;;; 102F6;COPTIC EPACT NUMBER FOUR HUNDRED;No;0;EN;;;;400;N;;;;; 102F7;COPTIC EPACT NUMBER FIVE HUNDRED;No;0;EN;;;;500;N;;;;; 102F8;COPTIC EPACT NUMBER SIX HUNDRED;No;0;EN;;;;600;N;;;;; 102F9;COPTIC EPACT NUMBER SEVEN HUNDRED;No;0;EN;;;;700;N;;;;; 102FA;COPTIC EPACT NUMBER EIGHT HUNDRED;No;0;EN;;;;800;N;;;;; 102FB;COPTIC EPACT NUMBER NINE HUNDRED;No;0;EN;;;;900;N;;;;; 10300;OLD ITALIC LETTER A;Lo;0;L;;;;;N;;;;; 10301;OLD ITALIC LETTER BE;Lo;0;L;;;;;N;;;;; 10302;OLD ITALIC LETTER KE;Lo;0;L;;;;;N;;;;; 10303;OLD ITALIC LETTER DE;Lo;0;L;;;;;N;;;;; 10304;OLD ITALIC LETTER E;Lo;0;L;;;;;N;;;;; 10305;OLD ITALIC LETTER VE;Lo;0;L;;;;;N;;;;; 10306;OLD ITALIC LETTER ZE;Lo;0;L;;;;;N;;;;; 10307;OLD ITALIC LETTER HE;Lo;0;L;;;;;N;;;;; 10308;OLD ITALIC LETTER THE;Lo;0;L;;;;;N;;;;; 10309;OLD ITALIC LETTER I;Lo;0;L;;;;;N;;;;; 1030A;OLD ITALIC LETTER KA;Lo;0;L;;;;;N;;;;; 1030B;OLD ITALIC LETTER EL;Lo;0;L;;;;;N;;;;; 1030C;OLD ITALIC LETTER EM;Lo;0;L;;;;;N;;;;; 1030D;OLD ITALIC LETTER EN;Lo;0;L;;;;;N;;;;; 1030E;OLD ITALIC LETTER ESH;Lo;0;L;;;;;N;;;;; 1030F;OLD ITALIC LETTER O;Lo;0;L;;;;;N;;;;; 10310;OLD ITALIC LETTER PE;Lo;0;L;;;;;N;;;;; 10311;OLD ITALIC LETTER SHE;Lo;0;L;;;;;N;;;;; 10312;OLD ITALIC LETTER KU;Lo;0;L;;;;;N;;;;; 10313;OLD ITALIC LETTER ER;Lo;0;L;;;;;N;;;;; 10314;OLD ITALIC LETTER ES;Lo;0;L;;;;;N;;;;; 10315;OLD ITALIC LETTER TE;Lo;0;L;;;;;N;;;;; 10316;OLD ITALIC LETTER U;Lo;0;L;;;;;N;;;;; 10317;OLD ITALIC LETTER EKS;Lo;0;L;;;;;N;;;;; 10318;OLD ITALIC LETTER PHE;Lo;0;L;;;;;N;;;;; 10319;OLD ITALIC LETTER KHE;Lo;0;L;;;;;N;;;;; 1031A;OLD ITALIC LETTER EF;Lo;0;L;;;;;N;;;;; 1031B;OLD ITALIC LETTER ERS;Lo;0;L;;;;;N;;;;; 1031C;OLD ITALIC LETTER CHE;Lo;0;L;;;;;N;;;;; 1031D;OLD ITALIC LETTER II;Lo;0;L;;;;;N;;;;; 1031E;OLD ITALIC LETTER UU;Lo;0;L;;;;;N;;;;; 1031F;OLD ITALIC LETTER ESS;Lo;0;L;;;;;N;;;;; 10320;OLD ITALIC NUMERAL ONE;No;0;L;;;;1;N;;;;; 10321;OLD ITALIC NUMERAL FIVE;No;0;L;;;;5;N;;;;; 10322;OLD ITALIC NUMERAL TEN;No;0;L;;;;10;N;;;;; 10323;OLD ITALIC NUMERAL FIFTY;No;0;L;;;;50;N;;;;; 1032D;OLD ITALIC LETTER YE;Lo;0;L;;;;;N;;;;; 1032E;OLD ITALIC LETTER NORTHERN TSE;Lo;0;L;;;;;N;;;;; 1032F;OLD ITALIC LETTER SOUTHERN TSE;Lo;0;L;;;;;N;;;;; 10330;GOTHIC LETTER AHSA;Lo;0;L;;;;;N;;;;; 10331;GOTHIC LETTER BAIRKAN;Lo;0;L;;;;;N;;;;; 10332;GOTHIC LETTER GIBA;Lo;0;L;;;;;N;;;;; 10333;GOTHIC LETTER DAGS;Lo;0;L;;;;;N;;;;; 10334;GOTHIC LETTER AIHVUS;Lo;0;L;;;;;N;;;;; 10335;GOTHIC LETTER QAIRTHRA;Lo;0;L;;;;;N;;;;; 10336;GOTHIC LETTER IUJA;Lo;0;L;;;;;N;;;;; 10337;GOTHIC LETTER HAGL;Lo;0;L;;;;;N;;;;; 10338;GOTHIC LETTER THIUTH;Lo;0;L;;;;;N;;;;; 10339;GOTHIC LETTER EIS;Lo;0;L;;;;;N;;;;; 1033A;GOTHIC LETTER KUSMA;Lo;0;L;;;;;N;;;;; 1033B;GOTHIC LETTER LAGUS;Lo;0;L;;;;;N;;;;; 1033C;GOTHIC LETTER MANNA;Lo;0;L;;;;;N;;;;; 1033D;GOTHIC LETTER NAUTHS;Lo;0;L;;;;;N;;;;; 1033E;GOTHIC LETTER JER;Lo;0;L;;;;;N;;;;; 1033F;GOTHIC LETTER URUS;Lo;0;L;;;;;N;;;;; 10340;GOTHIC LETTER PAIRTHRA;Lo;0;L;;;;;N;;;;; 10341;GOTHIC LETTER NINETY;Nl;0;L;;;;90;N;;;;; 10342;GOTHIC LETTER RAIDA;Lo;0;L;;;;;N;;;;; 10343;GOTHIC LETTER SAUIL;Lo;0;L;;;;;N;;;;; 10344;GOTHIC LETTER TEIWS;Lo;0;L;;;;;N;;;;; 10345;GOTHIC LETTER WINJA;Lo;0;L;;;;;N;;;;; 10346;GOTHIC LETTER FAIHU;Lo;0;L;;;;;N;;;;; 10347;GOTHIC LETTER IGGWS;Lo;0;L;;;;;N;;;;; 10348;GOTHIC LETTER HWAIR;Lo;0;L;;;;;N;;;;; 10349;GOTHIC LETTER OTHAL;Lo;0;L;;;;;N;;;;; 1034A;GOTHIC LETTER NINE HUNDRED;Nl;0;L;;;;900;N;;;;; 10350;OLD PERMIC LETTER AN;Lo;0;L;;;;;N;;;;; 10351;OLD PERMIC LETTER BUR;Lo;0;L;;;;;N;;;;; 10352;OLD PERMIC LETTER GAI;Lo;0;L;;;;;N;;;;; 10353;OLD PERMIC LETTER DOI;Lo;0;L;;;;;N;;;;; 10354;OLD PERMIC LETTER E;Lo;0;L;;;;;N;;;;; 10355;OLD PERMIC LETTER ZHOI;Lo;0;L;;;;;N;;;;; 10356;OLD PERMIC LETTER DZHOI;Lo;0;L;;;;;N;;;;; 10357;OLD PERMIC LETTER ZATA;Lo;0;L;;;;;N;;;;; 10358;OLD PERMIC LETTER DZITA;Lo;0;L;;;;;N;;;;; 10359;OLD PERMIC LETTER I;Lo;0;L;;;;;N;;;;; 1035A;OLD PERMIC LETTER KOKE;Lo;0;L;;;;;N;;;;; 1035B;OLD PERMIC LETTER LEI;Lo;0;L;;;;;N;;;;; 1035C;OLD PERMIC LETTER MENOE;Lo;0;L;;;;;N;;;;; 1035D;OLD PERMIC LETTER NENOE;Lo;0;L;;;;;N;;;;; 1035E;OLD PERMIC LETTER VOOI;Lo;0;L;;;;;N;;;;; 1035F;OLD PERMIC LETTER PEEI;Lo;0;L;;;;;N;;;;; 10360;OLD PERMIC LETTER REI;Lo;0;L;;;;;N;;;;; 10361;OLD PERMIC LETTER SII;Lo;0;L;;;;;N;;;;; 10362;OLD PERMIC LETTER TAI;Lo;0;L;;;;;N;;;;; 10363;OLD PERMIC LETTER U;Lo;0;L;;;;;N;;;;; 10364;OLD PERMIC LETTER CHERY;Lo;0;L;;;;;N;;;;; 10365;OLD PERMIC LETTER SHOOI;Lo;0;L;;;;;N;;;;; 10366;OLD PERMIC LETTER SHCHOOI;Lo;0;L;;;;;N;;;;; 10367;OLD PERMIC LETTER YRY;Lo;0;L;;;;;N;;;;; 10368;OLD PERMIC LETTER YERU;Lo;0;L;;;;;N;;;;; 10369;OLD PERMIC LETTER O;Lo;0;L;;;;;N;;;;; 1036A;OLD PERMIC LETTER OO;Lo;0;L;;;;;N;;;;; 1036B;OLD PERMIC LETTER EF;Lo;0;L;;;;;N;;;;; 1036C;OLD PERMIC LETTER HA;Lo;0;L;;;;;N;;;;; 1036D;OLD PERMIC LETTER TSIU;Lo;0;L;;;;;N;;;;; 1036E;OLD PERMIC LETTER VER;Lo;0;L;;;;;N;;;;; 1036F;OLD PERMIC LETTER YER;Lo;0;L;;;;;N;;;;; 10370;OLD PERMIC LETTER YERI;Lo;0;L;;;;;N;;;;; 10371;OLD PERMIC LETTER YAT;Lo;0;L;;;;;N;;;;; 10372;OLD PERMIC LETTER IE;Lo;0;L;;;;;N;;;;; 10373;OLD PERMIC LETTER YU;Lo;0;L;;;;;N;;;;; 10374;OLD PERMIC LETTER YA;Lo;0;L;;;;;N;;;;; 10375;OLD PERMIC LETTER IA;Lo;0;L;;;;;N;;;;; 10376;COMBINING OLD PERMIC LETTER AN;Mn;230;NSM;;;;;N;;;;; 10377;COMBINING OLD PERMIC LETTER DOI;Mn;230;NSM;;;;;N;;;;; 10378;COMBINING OLD PERMIC LETTER ZATA;Mn;230;NSM;;;;;N;;;;; 10379;COMBINING OLD PERMIC LETTER NENOE;Mn;230;NSM;;;;;N;;;;; 1037A;COMBINING OLD PERMIC LETTER SII;Mn;230;NSM;;;;;N;;;;; 10380;UGARITIC LETTER ALPA;Lo;0;L;;;;;N;;;;; 10381;UGARITIC LETTER BETA;Lo;0;L;;;;;N;;;;; 10382;UGARITIC LETTER GAMLA;Lo;0;L;;;;;N;;;;; 10383;UGARITIC LETTER KHA;Lo;0;L;;;;;N;;;;; 10384;UGARITIC LETTER DELTA;Lo;0;L;;;;;N;;;;; 10385;UGARITIC LETTER HO;Lo;0;L;;;;;N;;;;; 10386;UGARITIC LETTER WO;Lo;0;L;;;;;N;;;;; 10387;UGARITIC LETTER ZETA;Lo;0;L;;;;;N;;;;; 10388;UGARITIC LETTER HOTA;Lo;0;L;;;;;N;;;;; 10389;UGARITIC LETTER TET;Lo;0;L;;;;;N;;;;; 1038A;UGARITIC LETTER YOD;Lo;0;L;;;;;N;;;;; 1038B;UGARITIC LETTER KAF;Lo;0;L;;;;;N;;;;; 1038C;UGARITIC LETTER SHIN;Lo;0;L;;;;;N;;;;; 1038D;UGARITIC LETTER LAMDA;Lo;0;L;;;;;N;;;;; 1038E;UGARITIC LETTER MEM;Lo;0;L;;;;;N;;;;; 1038F;UGARITIC LETTER DHAL;Lo;0;L;;;;;N;;;;; 10390;UGARITIC LETTER NUN;Lo;0;L;;;;;N;;;;; 10391;UGARITIC LETTER ZU;Lo;0;L;;;;;N;;;;; 10392;UGARITIC LETTER SAMKA;Lo;0;L;;;;;N;;;;; 10393;UGARITIC LETTER AIN;Lo;0;L;;;;;N;;;;; 10394;UGARITIC LETTER PU;Lo;0;L;;;;;N;;;;; 10395;UGARITIC LETTER SADE;Lo;0;L;;;;;N;;;;; 10396;UGARITIC LETTER QOPA;Lo;0;L;;;;;N;;;;; 10397;UGARITIC LETTER RASHA;Lo;0;L;;;;;N;;;;; 10398;UGARITIC LETTER THANNA;Lo;0;L;;;;;N;;;;; 10399;UGARITIC LETTER GHAIN;Lo;0;L;;;;;N;;;;; 1039A;UGARITIC LETTER TO;Lo;0;L;;;;;N;;;;; 1039B;UGARITIC LETTER I;Lo;0;L;;;;;N;;;;; 1039C;UGARITIC LETTER U;Lo;0;L;;;;;N;;;;; 1039D;UGARITIC LETTER SSU;Lo;0;L;;;;;N;;;;; 1039F;UGARITIC WORD DIVIDER;Po;0;L;;;;;N;;;;; 103A0;OLD PERSIAN SIGN A;Lo;0;L;;;;;N;;;;; 103A1;OLD PERSIAN SIGN I;Lo;0;L;;;;;N;;;;; 103A2;OLD PERSIAN SIGN U;Lo;0;L;;;;;N;;;;; 103A3;OLD PERSIAN SIGN KA;Lo;0;L;;;;;N;;;;; 103A4;OLD PERSIAN SIGN KU;Lo;0;L;;;;;N;;;;; 103A5;OLD PERSIAN SIGN GA;Lo;0;L;;;;;N;;;;; 103A6;OLD PERSIAN SIGN GU;Lo;0;L;;;;;N;;;;; 103A7;OLD PERSIAN SIGN XA;Lo;0;L;;;;;N;;;;; 103A8;OLD PERSIAN SIGN CA;Lo;0;L;;;;;N;;;;; 103A9;OLD PERSIAN SIGN JA;Lo;0;L;;;;;N;;;;; 103AA;OLD PERSIAN SIGN JI;Lo;0;L;;;;;N;;;;; 103AB;OLD PERSIAN SIGN TA;Lo;0;L;;;;;N;;;;; 103AC;OLD PERSIAN SIGN TU;Lo;0;L;;;;;N;;;;; 103AD;OLD PERSIAN SIGN DA;Lo;0;L;;;;;N;;;;; 103AE;OLD PERSIAN SIGN DI;Lo;0;L;;;;;N;;;;; 103AF;OLD PERSIAN SIGN DU;Lo;0;L;;;;;N;;;;; 103B0;OLD PERSIAN SIGN THA;Lo;0;L;;;;;N;;;;; 103B1;OLD PERSIAN SIGN PA;Lo;0;L;;;;;N;;;;; 103B2;OLD PERSIAN SIGN BA;Lo;0;L;;;;;N;;;;; 103B3;OLD PERSIAN SIGN FA;Lo;0;L;;;;;N;;;;; 103B4;OLD PERSIAN SIGN NA;Lo;0;L;;;;;N;;;;; 103B5;OLD PERSIAN SIGN NU;Lo;0;L;;;;;N;;;;; 103B6;OLD PERSIAN SIGN MA;Lo;0;L;;;;;N;;;;; 103B7;OLD PERSIAN SIGN MI;Lo;0;L;;;;;N;;;;; 103B8;OLD PERSIAN SIGN MU;Lo;0;L;;;;;N;;;;; 103B9;OLD PERSIAN SIGN YA;Lo;0;L;;;;;N;;;;; 103BA;OLD PERSIAN SIGN VA;Lo;0;L;;;;;N;;;;; 103BB;OLD PERSIAN SIGN VI;Lo;0;L;;;;;N;;;;; 103BC;OLD PERSIAN SIGN RA;Lo;0;L;;;;;N;;;;; 103BD;OLD PERSIAN SIGN RU;Lo;0;L;;;;;N;;;;; 103BE;OLD PERSIAN SIGN LA;Lo;0;L;;;;;N;;;;; 103BF;OLD PERSIAN SIGN SA;Lo;0;L;;;;;N;;;;; 103C0;OLD PERSIAN SIGN ZA;Lo;0;L;;;;;N;;;;; 103C1;OLD PERSIAN SIGN SHA;Lo;0;L;;;;;N;;;;; 103C2;OLD PERSIAN SIGN SSA;Lo;0;L;;;;;N;;;;; 103C3;OLD PERSIAN SIGN HA;Lo;0;L;;;;;N;;;;; 103C8;OLD PERSIAN SIGN AURAMAZDAA;Lo;0;L;;;;;N;;;;; 103C9;OLD PERSIAN SIGN AURAMAZDAA-2;Lo;0;L;;;;;N;;;;; 103CA;OLD PERSIAN SIGN AURAMAZDAAHA;Lo;0;L;;;;;N;;;;; 103CB;OLD PERSIAN SIGN XSHAAYATHIYA;Lo;0;L;;;;;N;;;;; 103CC;OLD PERSIAN SIGN DAHYAAUSH;Lo;0;L;;;;;N;;;;; 103CD;OLD PERSIAN SIGN DAHYAAUSH-2;Lo;0;L;;;;;N;;;;; 103CE;OLD PERSIAN SIGN BAGA;Lo;0;L;;;;;N;;;;; 103CF;OLD PERSIAN SIGN BUUMISH;Lo;0;L;;;;;N;;;;; 103D0;OLD PERSIAN WORD DIVIDER;Po;0;L;;;;;N;;;;; 103D1;OLD PERSIAN NUMBER ONE;Nl;0;L;;;;1;N;;;;; 103D2;OLD PERSIAN NUMBER TWO;Nl;0;L;;;;2;N;;;;; 103D3;OLD PERSIAN NUMBER TEN;Nl;0;L;;;;10;N;;;;; 103D4;OLD PERSIAN NUMBER TWENTY;Nl;0;L;;;;20;N;;;;; 103D5;OLD PERSIAN NUMBER HUNDRED;Nl;0;L;;;;100;N;;;;; 10400;DESERET CAPITAL LETTER LONG I;Lu;0;L;;;;;N;;;;10428; 10401;DESERET CAPITAL LETTER LONG E;Lu;0;L;;;;;N;;;;10429; 10402;DESERET CAPITAL LETTER LONG A;Lu;0;L;;;;;N;;;;1042A; 10403;DESERET CAPITAL LETTER LONG AH;Lu;0;L;;;;;N;;;;1042B; 10404;DESERET CAPITAL LETTER LONG O;Lu;0;L;;;;;N;;;;1042C; 10405;DESERET CAPITAL LETTER LONG OO;Lu;0;L;;;;;N;;;;1042D; 10406;DESERET CAPITAL LETTER SHORT I;Lu;0;L;;;;;N;;;;1042E; 10407;DESERET CAPITAL LETTER SHORT E;Lu;0;L;;;;;N;;;;1042F; 10408;DESERET CAPITAL LETTER SHORT A;Lu;0;L;;;;;N;;;;10430; 10409;DESERET CAPITAL LETTER SHORT AH;Lu;0;L;;;;;N;;;;10431; 1040A;DESERET CAPITAL LETTER SHORT O;Lu;0;L;;;;;N;;;;10432; 1040B;DESERET CAPITAL LETTER SHORT OO;Lu;0;L;;;;;N;;;;10433; 1040C;DESERET CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;10434; 1040D;DESERET CAPITAL LETTER OW;Lu;0;L;;;;;N;;;;10435; 1040E;DESERET CAPITAL LETTER WU;Lu;0;L;;;;;N;;;;10436; 1040F;DESERET CAPITAL LETTER YEE;Lu;0;L;;;;;N;;;;10437; 10410;DESERET CAPITAL LETTER H;Lu;0;L;;;;;N;;;;10438; 10411;DESERET CAPITAL LETTER PEE;Lu;0;L;;;;;N;;;;10439; 10412;DESERET CAPITAL LETTER BEE;Lu;0;L;;;;;N;;;;1043A; 10413;DESERET CAPITAL LETTER TEE;Lu;0;L;;;;;N;;;;1043B; 10414;DESERET CAPITAL LETTER DEE;Lu;0;L;;;;;N;;;;1043C; 10415;DESERET CAPITAL LETTER CHEE;Lu;0;L;;;;;N;;;;1043D; 10416;DESERET CAPITAL LETTER JEE;Lu;0;L;;;;;N;;;;1043E; 10417;DESERET CAPITAL LETTER KAY;Lu;0;L;;;;;N;;;;1043F; 10418;DESERET CAPITAL LETTER GAY;Lu;0;L;;;;;N;;;;10440; 10419;DESERET CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;10441; 1041A;DESERET CAPITAL LETTER VEE;Lu;0;L;;;;;N;;;;10442; 1041B;DESERET CAPITAL LETTER ETH;Lu;0;L;;;;;N;;;;10443; 1041C;DESERET CAPITAL LETTER THEE;Lu;0;L;;;;;N;;;;10444; 1041D;DESERET CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;10445; 1041E;DESERET CAPITAL LETTER ZEE;Lu;0;L;;;;;N;;;;10446; 1041F;DESERET CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;10447; 10420;DESERET CAPITAL LETTER ZHEE;Lu;0;L;;;;;N;;;;10448; 10421;DESERET CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;10449; 10422;DESERET CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;1044A; 10423;DESERET CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;1044B; 10424;DESERET CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;1044C; 10425;DESERET CAPITAL LETTER ENG;Lu;0;L;;;;;N;;;;1044D; 10426;DESERET CAPITAL LETTER OI;Lu;0;L;;;;;N;;;;1044E; 10427;DESERET CAPITAL LETTER EW;Lu;0;L;;;;;N;;;;1044F; 10428;DESERET SMALL LETTER LONG I;Ll;0;L;;;;;N;;;10400;;10400 10429;DESERET SMALL LETTER LONG E;Ll;0;L;;;;;N;;;10401;;10401 1042A;DESERET SMALL LETTER LONG A;Ll;0;L;;;;;N;;;10402;;10402 1042B;DESERET SMALL LETTER LONG AH;Ll;0;L;;;;;N;;;10403;;10403 1042C;DESERET SMALL LETTER LONG O;Ll;0;L;;;;;N;;;10404;;10404 1042D;DESERET SMALL LETTER LONG OO;Ll;0;L;;;;;N;;;10405;;10405 1042E;DESERET SMALL LETTER SHORT I;Ll;0;L;;;;;N;;;10406;;10406 1042F;DESERET SMALL LETTER SHORT E;Ll;0;L;;;;;N;;;10407;;10407 10430;DESERET SMALL LETTER SHORT A;Ll;0;L;;;;;N;;;10408;;10408 10431;DESERET SMALL LETTER SHORT AH;Ll;0;L;;;;;N;;;10409;;10409 10432;DESERET SMALL LETTER SHORT O;Ll;0;L;;;;;N;;;1040A;;1040A 10433;DESERET SMALL LETTER SHORT OO;Ll;0;L;;;;;N;;;1040B;;1040B 10434;DESERET SMALL LETTER AY;Ll;0;L;;;;;N;;;1040C;;1040C 10435;DESERET SMALL LETTER OW;Ll;0;L;;;;;N;;;1040D;;1040D 10436;DESERET SMALL LETTER WU;Ll;0;L;;;;;N;;;1040E;;1040E 10437;DESERET SMALL LETTER YEE;Ll;0;L;;;;;N;;;1040F;;1040F 10438;DESERET SMALL LETTER H;Ll;0;L;;;;;N;;;10410;;10410 10439;DESERET SMALL LETTER PEE;Ll;0;L;;;;;N;;;10411;;10411 1043A;DESERET SMALL LETTER BEE;Ll;0;L;;;;;N;;;10412;;10412 1043B;DESERET SMALL LETTER TEE;Ll;0;L;;;;;N;;;10413;;10413 1043C;DESERET SMALL LETTER DEE;Ll;0;L;;;;;N;;;10414;;10414 1043D;DESERET SMALL LETTER CHEE;Ll;0;L;;;;;N;;;10415;;10415 1043E;DESERET SMALL LETTER JEE;Ll;0;L;;;;;N;;;10416;;10416 1043F;DESERET SMALL LETTER KAY;Ll;0;L;;;;;N;;;10417;;10417 10440;DESERET SMALL LETTER GAY;Ll;0;L;;;;;N;;;10418;;10418 10441;DESERET SMALL LETTER EF;Ll;0;L;;;;;N;;;10419;;10419 10442;DESERET SMALL LETTER VEE;Ll;0;L;;;;;N;;;1041A;;1041A 10443;DESERET SMALL LETTER ETH;Ll;0;L;;;;;N;;;1041B;;1041B 10444;DESERET SMALL LETTER THEE;Ll;0;L;;;;;N;;;1041C;;1041C 10445;DESERET SMALL LETTER ES;Ll;0;L;;;;;N;;;1041D;;1041D 10446;DESERET SMALL LETTER ZEE;Ll;0;L;;;;;N;;;1041E;;1041E 10447;DESERET SMALL LETTER ESH;Ll;0;L;;;;;N;;;1041F;;1041F 10448;DESERET SMALL LETTER ZHEE;Ll;0;L;;;;;N;;;10420;;10420 10449;DESERET SMALL LETTER ER;Ll;0;L;;;;;N;;;10421;;10421 1044A;DESERET SMALL LETTER EL;Ll;0;L;;;;;N;;;10422;;10422 1044B;DESERET SMALL LETTER EM;Ll;0;L;;;;;N;;;10423;;10423 1044C;DESERET SMALL LETTER EN;Ll;0;L;;;;;N;;;10424;;10424 1044D;DESERET SMALL LETTER ENG;Ll;0;L;;;;;N;;;10425;;10425 1044E;DESERET SMALL LETTER OI;Ll;0;L;;;;;N;;;10426;;10426 1044F;DESERET SMALL LETTER EW;Ll;0;L;;;;;N;;;10427;;10427 10450;SHAVIAN LETTER PEEP;Lo;0;L;;;;;N;;;;; 10451;SHAVIAN LETTER TOT;Lo;0;L;;;;;N;;;;; 10452;SHAVIAN LETTER KICK;Lo;0;L;;;;;N;;;;; 10453;SHAVIAN LETTER FEE;Lo;0;L;;;;;N;;;;; 10454;SHAVIAN LETTER THIGH;Lo;0;L;;;;;N;;;;; 10455;SHAVIAN LETTER SO;Lo;0;L;;;;;N;;;;; 10456;SHAVIAN LETTER SURE;Lo;0;L;;;;;N;;;;; 10457;SHAVIAN LETTER CHURCH;Lo;0;L;;;;;N;;;;; 10458;SHAVIAN LETTER YEA;Lo;0;L;;;;;N;;;;; 10459;SHAVIAN LETTER HUNG;Lo;0;L;;;;;N;;;;; 1045A;SHAVIAN LETTER BIB;Lo;0;L;;;;;N;;;;; 1045B;SHAVIAN LETTER DEAD;Lo;0;L;;;;;N;;;;; 1045C;SHAVIAN LETTER GAG;Lo;0;L;;;;;N;;;;; 1045D;SHAVIAN LETTER VOW;Lo;0;L;;;;;N;;;;; 1045E;SHAVIAN LETTER THEY;Lo;0;L;;;;;N;;;;; 1045F;SHAVIAN LETTER ZOO;Lo;0;L;;;;;N;;;;; 10460;SHAVIAN LETTER MEASURE;Lo;0;L;;;;;N;;;;; 10461;SHAVIAN LETTER JUDGE;Lo;0;L;;;;;N;;;;; 10462;SHAVIAN LETTER WOE;Lo;0;L;;;;;N;;;;; 10463;SHAVIAN LETTER HA-HA;Lo;0;L;;;;;N;;;;; 10464;SHAVIAN LETTER LOLL;Lo;0;L;;;;;N;;;;; 10465;SHAVIAN LETTER MIME;Lo;0;L;;;;;N;;;;; 10466;SHAVIAN LETTER IF;Lo;0;L;;;;;N;;;;; 10467;SHAVIAN LETTER EGG;Lo;0;L;;;;;N;;;;; 10468;SHAVIAN LETTER ASH;Lo;0;L;;;;;N;;;;; 10469;SHAVIAN LETTER ADO;Lo;0;L;;;;;N;;;;; 1046A;SHAVIAN LETTER ON;Lo;0;L;;;;;N;;;;; 1046B;SHAVIAN LETTER WOOL;Lo;0;L;;;;;N;;;;; 1046C;SHAVIAN LETTER OUT;Lo;0;L;;;;;N;;;;; 1046D;SHAVIAN LETTER AH;Lo;0;L;;;;;N;;;;; 1046E;SHAVIAN LETTER ROAR;Lo;0;L;;;;;N;;;;; 1046F;SHAVIAN LETTER NUN;Lo;0;L;;;;;N;;;;; 10470;SHAVIAN LETTER EAT;Lo;0;L;;;;;N;;;;; 10471;SHAVIAN LETTER AGE;Lo;0;L;;;;;N;;;;; 10472;SHAVIAN LETTER ICE;Lo;0;L;;;;;N;;;;; 10473;SHAVIAN LETTER UP;Lo;0;L;;;;;N;;;;; 10474;SHAVIAN LETTER OAK;Lo;0;L;;;;;N;;;;; 10475;SHAVIAN LETTER OOZE;Lo;0;L;;;;;N;;;;; 10476;SHAVIAN LETTER OIL;Lo;0;L;;;;;N;;;;; 10477;SHAVIAN LETTER AWE;Lo;0;L;;;;;N;;;;; 10478;SHAVIAN LETTER ARE;Lo;0;L;;;;;N;;;;; 10479;SHAVIAN LETTER OR;Lo;0;L;;;;;N;;;;; 1047A;SHAVIAN LETTER AIR;Lo;0;L;;;;;N;;;;; 1047B;SHAVIAN LETTER ERR;Lo;0;L;;;;;N;;;;; 1047C;SHAVIAN LETTER ARRAY;Lo;0;L;;;;;N;;;;; 1047D;SHAVIAN LETTER EAR;Lo;0;L;;;;;N;;;;; 1047E;SHAVIAN LETTER IAN;Lo;0;L;;;;;N;;;;; 1047F;SHAVIAN LETTER YEW;Lo;0;L;;;;;N;;;;; 10480;OSMANYA LETTER ALEF;Lo;0;L;;;;;N;;;;; 10481;OSMANYA LETTER BA;Lo;0;L;;;;;N;;;;; 10482;OSMANYA LETTER TA;Lo;0;L;;;;;N;;;;; 10483;OSMANYA LETTER JA;Lo;0;L;;;;;N;;;;; 10484;OSMANYA LETTER XA;Lo;0;L;;;;;N;;;;; 10485;OSMANYA LETTER KHA;Lo;0;L;;;;;N;;;;; 10486;OSMANYA LETTER DEEL;Lo;0;L;;;;;N;;;;; 10487;OSMANYA LETTER RA;Lo;0;L;;;;;N;;;;; 10488;OSMANYA LETTER SA;Lo;0;L;;;;;N;;;;; 10489;OSMANYA LETTER SHIIN;Lo;0;L;;;;;N;;;;; 1048A;OSMANYA LETTER DHA;Lo;0;L;;;;;N;;;;; 1048B;OSMANYA LETTER CAYN;Lo;0;L;;;;;N;;;;; 1048C;OSMANYA LETTER GA;Lo;0;L;;;;;N;;;;; 1048D;OSMANYA LETTER FA;Lo;0;L;;;;;N;;;;; 1048E;OSMANYA LETTER QAAF;Lo;0;L;;;;;N;;;;; 1048F;OSMANYA LETTER KAAF;Lo;0;L;;;;;N;;;;; 10490;OSMANYA LETTER LAAN;Lo;0;L;;;;;N;;;;; 10491;OSMANYA LETTER MIIN;Lo;0;L;;;;;N;;;;; 10492;OSMANYA LETTER NUUN;Lo;0;L;;;;;N;;;;; 10493;OSMANYA LETTER WAW;Lo;0;L;;;;;N;;;;; 10494;OSMANYA LETTER HA;Lo;0;L;;;;;N;;;;; 10495;OSMANYA LETTER YA;Lo;0;L;;;;;N;;;;; 10496;OSMANYA LETTER A;Lo;0;L;;;;;N;;;;; 10497;OSMANYA LETTER E;Lo;0;L;;;;;N;;;;; 10498;OSMANYA LETTER I;Lo;0;L;;;;;N;;;;; 10499;OSMANYA LETTER O;Lo;0;L;;;;;N;;;;; 1049A;OSMANYA LETTER U;Lo;0;L;;;;;N;;;;; 1049B;OSMANYA LETTER AA;Lo;0;L;;;;;N;;;;; 1049C;OSMANYA LETTER EE;Lo;0;L;;;;;N;;;;; 1049D;OSMANYA LETTER OO;Lo;0;L;;;;;N;;;;; 104A0;OSMANYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 104A1;OSMANYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 104A2;OSMANYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 104A3;OSMANYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 104A4;OSMANYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 104A5;OSMANYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 104A6;OSMANYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 104A7;OSMANYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 104A8;OSMANYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 104A9;OSMANYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 104B0;OSAGE CAPITAL LETTER A;Lu;0;L;;;;;N;;;;104D8; 104B1;OSAGE CAPITAL LETTER AI;Lu;0;L;;;;;N;;;;104D9; 104B2;OSAGE CAPITAL LETTER AIN;Lu;0;L;;;;;N;;;;104DA; 104B3;OSAGE CAPITAL LETTER AH;Lu;0;L;;;;;N;;;;104DB; 104B4;OSAGE CAPITAL LETTER BRA;Lu;0;L;;;;;N;;;;104DC; 104B5;OSAGE CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;104DD; 104B6;OSAGE CAPITAL LETTER EHCHA;Lu;0;L;;;;;N;;;;104DE; 104B7;OSAGE CAPITAL LETTER E;Lu;0;L;;;;;N;;;;104DF; 104B8;OSAGE CAPITAL LETTER EIN;Lu;0;L;;;;;N;;;;104E0; 104B9;OSAGE CAPITAL LETTER HA;Lu;0;L;;;;;N;;;;104E1; 104BA;OSAGE CAPITAL LETTER HYA;Lu;0;L;;;;;N;;;;104E2; 104BB;OSAGE CAPITAL LETTER I;Lu;0;L;;;;;N;;;;104E3; 104BC;OSAGE CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;104E4; 104BD;OSAGE CAPITAL LETTER EHKA;Lu;0;L;;;;;N;;;;104E5; 104BE;OSAGE CAPITAL LETTER KYA;Lu;0;L;;;;;N;;;;104E6; 104BF;OSAGE CAPITAL LETTER LA;Lu;0;L;;;;;N;;;;104E7; 104C0;OSAGE CAPITAL LETTER MA;Lu;0;L;;;;;N;;;;104E8; 104C1;OSAGE CAPITAL LETTER NA;Lu;0;L;;;;;N;;;;104E9; 104C2;OSAGE CAPITAL LETTER O;Lu;0;L;;;;;N;;;;104EA; 104C3;OSAGE CAPITAL LETTER OIN;Lu;0;L;;;;;N;;;;104EB; 104C4;OSAGE CAPITAL LETTER PA;Lu;0;L;;;;;N;;;;104EC; 104C5;OSAGE CAPITAL LETTER EHPA;Lu;0;L;;;;;N;;;;104ED; 104C6;OSAGE CAPITAL LETTER SA;Lu;0;L;;;;;N;;;;104EE; 104C7;OSAGE CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;104EF; 104C8;OSAGE CAPITAL LETTER TA;Lu;0;L;;;;;N;;;;104F0; 104C9;OSAGE CAPITAL LETTER EHTA;Lu;0;L;;;;;N;;;;104F1; 104CA;OSAGE CAPITAL LETTER TSA;Lu;0;L;;;;;N;;;;104F2; 104CB;OSAGE CAPITAL LETTER EHTSA;Lu;0;L;;;;;N;;;;104F3; 104CC;OSAGE CAPITAL LETTER TSHA;Lu;0;L;;;;;N;;;;104F4; 104CD;OSAGE CAPITAL LETTER DHA;Lu;0;L;;;;;N;;;;104F5; 104CE;OSAGE CAPITAL LETTER U;Lu;0;L;;;;;N;;;;104F6; 104CF;OSAGE CAPITAL LETTER WA;Lu;0;L;;;;;N;;;;104F7; 104D0;OSAGE CAPITAL LETTER KHA;Lu;0;L;;;;;N;;;;104F8; 104D1;OSAGE CAPITAL LETTER GHA;Lu;0;L;;;;;N;;;;104F9; 104D2;OSAGE CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;104FA; 104D3;OSAGE CAPITAL LETTER ZHA;Lu;0;L;;;;;N;;;;104FB; 104D8;OSAGE SMALL LETTER A;Ll;0;L;;;;;N;;;104B0;;104B0 104D9;OSAGE SMALL LETTER AI;Ll;0;L;;;;;N;;;104B1;;104B1 104DA;OSAGE SMALL LETTER AIN;Ll;0;L;;;;;N;;;104B2;;104B2 104DB;OSAGE SMALL LETTER AH;Ll;0;L;;;;;N;;;104B3;;104B3 104DC;OSAGE SMALL LETTER BRA;Ll;0;L;;;;;N;;;104B4;;104B4 104DD;OSAGE SMALL LETTER CHA;Ll;0;L;;;;;N;;;104B5;;104B5 104DE;OSAGE SMALL LETTER EHCHA;Ll;0;L;;;;;N;;;104B6;;104B6 104DF;OSAGE SMALL LETTER E;Ll;0;L;;;;;N;;;104B7;;104B7 104E0;OSAGE SMALL LETTER EIN;Ll;0;L;;;;;N;;;104B8;;104B8 104E1;OSAGE SMALL LETTER HA;Ll;0;L;;;;;N;;;104B9;;104B9 104E2;OSAGE SMALL LETTER HYA;Ll;0;L;;;;;N;;;104BA;;104BA 104E3;OSAGE SMALL LETTER I;Ll;0;L;;;;;N;;;104BB;;104BB 104E4;OSAGE SMALL LETTER KA;Ll;0;L;;;;;N;;;104BC;;104BC 104E5;OSAGE SMALL LETTER EHKA;Ll;0;L;;;;;N;;;104BD;;104BD 104E6;OSAGE SMALL LETTER KYA;Ll;0;L;;;;;N;;;104BE;;104BE 104E7;OSAGE SMALL LETTER LA;Ll;0;L;;;;;N;;;104BF;;104BF 104E8;OSAGE SMALL LETTER MA;Ll;0;L;;;;;N;;;104C0;;104C0 104E9;OSAGE SMALL LETTER NA;Ll;0;L;;;;;N;;;104C1;;104C1 104EA;OSAGE SMALL LETTER O;Ll;0;L;;;;;N;;;104C2;;104C2 104EB;OSAGE SMALL LETTER OIN;Ll;0;L;;;;;N;;;104C3;;104C3 104EC;OSAGE SMALL LETTER PA;Ll;0;L;;;;;N;;;104C4;;104C4 104ED;OSAGE SMALL LETTER EHPA;Ll;0;L;;;;;N;;;104C5;;104C5 104EE;OSAGE SMALL LETTER SA;Ll;0;L;;;;;N;;;104C6;;104C6 104EF;OSAGE SMALL LETTER SHA;Ll;0;L;;;;;N;;;104C7;;104C7 104F0;OSAGE SMALL LETTER TA;Ll;0;L;;;;;N;;;104C8;;104C8 104F1;OSAGE SMALL LETTER EHTA;Ll;0;L;;;;;N;;;104C9;;104C9 104F2;OSAGE SMALL LETTER TSA;Ll;0;L;;;;;N;;;104CA;;104CA 104F3;OSAGE SMALL LETTER EHTSA;Ll;0;L;;;;;N;;;104CB;;104CB 104F4;OSAGE SMALL LETTER TSHA;Ll;0;L;;;;;N;;;104CC;;104CC 104F5;OSAGE SMALL LETTER DHA;Ll;0;L;;;;;N;;;104CD;;104CD 104F6;OSAGE SMALL LETTER U;Ll;0;L;;;;;N;;;104CE;;104CE 104F7;OSAGE SMALL LETTER WA;Ll;0;L;;;;;N;;;104CF;;104CF 104F8;OSAGE SMALL LETTER KHA;Ll;0;L;;;;;N;;;104D0;;104D0 104F9;OSAGE SMALL LETTER GHA;Ll;0;L;;;;;N;;;104D1;;104D1 104FA;OSAGE SMALL LETTER ZA;Ll;0;L;;;;;N;;;104D2;;104D2 104FB;OSAGE SMALL LETTER ZHA;Ll;0;L;;;;;N;;;104D3;;104D3 10500;ELBASAN LETTER A;Lo;0;L;;;;;N;;;;; 10501;ELBASAN LETTER BE;Lo;0;L;;;;;N;;;;; 10502;ELBASAN LETTER CE;Lo;0;L;;;;;N;;;;; 10503;ELBASAN LETTER CHE;Lo;0;L;;;;;N;;;;; 10504;ELBASAN LETTER DE;Lo;0;L;;;;;N;;;;; 10505;ELBASAN LETTER NDE;Lo;0;L;;;;;N;;;;; 10506;ELBASAN LETTER DHE;Lo;0;L;;;;;N;;;;; 10507;ELBASAN LETTER EI;Lo;0;L;;;;;N;;;;; 10508;ELBASAN LETTER E;Lo;0;L;;;;;N;;;;; 10509;ELBASAN LETTER FE;Lo;0;L;;;;;N;;;;; 1050A;ELBASAN LETTER GE;Lo;0;L;;;;;N;;;;; 1050B;ELBASAN LETTER GJE;Lo;0;L;;;;;N;;;;; 1050C;ELBASAN LETTER HE;Lo;0;L;;;;;N;;;;; 1050D;ELBASAN LETTER I;Lo;0;L;;;;;N;;;;; 1050E;ELBASAN LETTER JE;Lo;0;L;;;;;N;;;;; 1050F;ELBASAN LETTER KE;Lo;0;L;;;;;N;;;;; 10510;ELBASAN LETTER LE;Lo;0;L;;;;;N;;;;; 10511;ELBASAN LETTER LLE;Lo;0;L;;;;;N;;;;; 10512;ELBASAN LETTER ME;Lo;0;L;;;;;N;;;;; 10513;ELBASAN LETTER NE;Lo;0;L;;;;;N;;;;; 10514;ELBASAN LETTER NA;Lo;0;L;;;;;N;;;;; 10515;ELBASAN LETTER NJE;Lo;0;L;;;;;N;;;;; 10516;ELBASAN LETTER O;Lo;0;L;;;;;N;;;;; 10517;ELBASAN LETTER PE;Lo;0;L;;;;;N;;;;; 10518;ELBASAN LETTER QE;Lo;0;L;;;;;N;;;;; 10519;ELBASAN LETTER RE;Lo;0;L;;;;;N;;;;; 1051A;ELBASAN LETTER RRE;Lo;0;L;;;;;N;;;;; 1051B;ELBASAN LETTER SE;Lo;0;L;;;;;N;;;;; 1051C;ELBASAN LETTER SHE;Lo;0;L;;;;;N;;;;; 1051D;ELBASAN LETTER TE;Lo;0;L;;;;;N;;;;; 1051E;ELBASAN LETTER THE;Lo;0;L;;;;;N;;;;; 1051F;ELBASAN LETTER U;Lo;0;L;;;;;N;;;;; 10520;ELBASAN LETTER VE;Lo;0;L;;;;;N;;;;; 10521;ELBASAN LETTER XE;Lo;0;L;;;;;N;;;;; 10522;ELBASAN LETTER Y;Lo;0;L;;;;;N;;;;; 10523;ELBASAN LETTER ZE;Lo;0;L;;;;;N;;;;; 10524;ELBASAN LETTER ZHE;Lo;0;L;;;;;N;;;;; 10525;ELBASAN LETTER GHE;Lo;0;L;;;;;N;;;;; 10526;ELBASAN LETTER GHAMMA;Lo;0;L;;;;;N;;;;; 10527;ELBASAN LETTER KHE;Lo;0;L;;;;;N;;;;; 10530;CAUCASIAN ALBANIAN LETTER ALT;Lo;0;L;;;;;N;;;;; 10531;CAUCASIAN ALBANIAN LETTER BET;Lo;0;L;;;;;N;;;;; 10532;CAUCASIAN ALBANIAN LETTER GIM;Lo;0;L;;;;;N;;;;; 10533;CAUCASIAN ALBANIAN LETTER DAT;Lo;0;L;;;;;N;;;;; 10534;CAUCASIAN ALBANIAN LETTER EB;Lo;0;L;;;;;N;;;;; 10535;CAUCASIAN ALBANIAN LETTER ZARL;Lo;0;L;;;;;N;;;;; 10536;CAUCASIAN ALBANIAN LETTER EYN;Lo;0;L;;;;;N;;;;; 10537;CAUCASIAN ALBANIAN LETTER ZHIL;Lo;0;L;;;;;N;;;;; 10538;CAUCASIAN ALBANIAN LETTER TAS;Lo;0;L;;;;;N;;;;; 10539;CAUCASIAN ALBANIAN LETTER CHA;Lo;0;L;;;;;N;;;;; 1053A;CAUCASIAN ALBANIAN LETTER YOWD;Lo;0;L;;;;;N;;;;; 1053B;CAUCASIAN ALBANIAN LETTER ZHA;Lo;0;L;;;;;N;;;;; 1053C;CAUCASIAN ALBANIAN LETTER IRB;Lo;0;L;;;;;N;;;;; 1053D;CAUCASIAN ALBANIAN LETTER SHA;Lo;0;L;;;;;N;;;;; 1053E;CAUCASIAN ALBANIAN LETTER LAN;Lo;0;L;;;;;N;;;;; 1053F;CAUCASIAN ALBANIAN LETTER INYA;Lo;0;L;;;;;N;;;;; 10540;CAUCASIAN ALBANIAN LETTER XEYN;Lo;0;L;;;;;N;;;;; 10541;CAUCASIAN ALBANIAN LETTER DYAN;Lo;0;L;;;;;N;;;;; 10542;CAUCASIAN ALBANIAN LETTER CAR;Lo;0;L;;;;;N;;;;; 10543;CAUCASIAN ALBANIAN LETTER JHOX;Lo;0;L;;;;;N;;;;; 10544;CAUCASIAN ALBANIAN LETTER KAR;Lo;0;L;;;;;N;;;;; 10545;CAUCASIAN ALBANIAN LETTER LYIT;Lo;0;L;;;;;N;;;;; 10546;CAUCASIAN ALBANIAN LETTER HEYT;Lo;0;L;;;;;N;;;;; 10547;CAUCASIAN ALBANIAN LETTER QAY;Lo;0;L;;;;;N;;;;; 10548;CAUCASIAN ALBANIAN LETTER AOR;Lo;0;L;;;;;N;;;;; 10549;CAUCASIAN ALBANIAN LETTER CHOY;Lo;0;L;;;;;N;;;;; 1054A;CAUCASIAN ALBANIAN LETTER CHI;Lo;0;L;;;;;N;;;;; 1054B;CAUCASIAN ALBANIAN LETTER CYAY;Lo;0;L;;;;;N;;;;; 1054C;CAUCASIAN ALBANIAN LETTER MAQ;Lo;0;L;;;;;N;;;;; 1054D;CAUCASIAN ALBANIAN LETTER QAR;Lo;0;L;;;;;N;;;;; 1054E;CAUCASIAN ALBANIAN LETTER NOWC;Lo;0;L;;;;;N;;;;; 1054F;CAUCASIAN ALBANIAN LETTER DZYAY;Lo;0;L;;;;;N;;;;; 10550;CAUCASIAN ALBANIAN LETTER SHAK;Lo;0;L;;;;;N;;;;; 10551;CAUCASIAN ALBANIAN LETTER JAYN;Lo;0;L;;;;;N;;;;; 10552;CAUCASIAN ALBANIAN LETTER ON;Lo;0;L;;;;;N;;;;; 10553;CAUCASIAN ALBANIAN LETTER TYAY;Lo;0;L;;;;;N;;;;; 10554;CAUCASIAN ALBANIAN LETTER FAM;Lo;0;L;;;;;N;;;;; 10555;CAUCASIAN ALBANIAN LETTER DZAY;Lo;0;L;;;;;N;;;;; 10556;CAUCASIAN ALBANIAN LETTER CHAT;Lo;0;L;;;;;N;;;;; 10557;CAUCASIAN ALBANIAN LETTER PEN;Lo;0;L;;;;;N;;;;; 10558;CAUCASIAN ALBANIAN LETTER GHEYS;Lo;0;L;;;;;N;;;;; 10559;CAUCASIAN ALBANIAN LETTER RAT;Lo;0;L;;;;;N;;;;; 1055A;CAUCASIAN ALBANIAN LETTER SEYK;Lo;0;L;;;;;N;;;;; 1055B;CAUCASIAN ALBANIAN LETTER VEYZ;Lo;0;L;;;;;N;;;;; 1055C;CAUCASIAN ALBANIAN LETTER TIWR;Lo;0;L;;;;;N;;;;; 1055D;CAUCASIAN ALBANIAN LETTER SHOY;Lo;0;L;;;;;N;;;;; 1055E;CAUCASIAN ALBANIAN LETTER IWN;Lo;0;L;;;;;N;;;;; 1055F;CAUCASIAN ALBANIAN LETTER CYAW;Lo;0;L;;;;;N;;;;; 10560;CAUCASIAN ALBANIAN LETTER CAYN;Lo;0;L;;;;;N;;;;; 10561;CAUCASIAN ALBANIAN LETTER YAYD;Lo;0;L;;;;;N;;;;; 10562;CAUCASIAN ALBANIAN LETTER PIWR;Lo;0;L;;;;;N;;;;; 10563;CAUCASIAN ALBANIAN LETTER KIW;Lo;0;L;;;;;N;;;;; 1056F;CAUCASIAN ALBANIAN CITATION MARK;Po;0;L;;;;;N;;;;; 10570;VITHKUQI CAPITAL LETTER A;Lu;0;L;;;;;N;;;;10597; 10571;VITHKUQI CAPITAL LETTER BBE;Lu;0;L;;;;;N;;;;10598; 10572;VITHKUQI CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;10599; 10573;VITHKUQI CAPITAL LETTER CE;Lu;0;L;;;;;N;;;;1059A; 10574;VITHKUQI CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;1059B; 10575;VITHKUQI CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;1059C; 10576;VITHKUQI CAPITAL LETTER DHE;Lu;0;L;;;;;N;;;;1059D; 10577;VITHKUQI CAPITAL LETTER EI;Lu;0;L;;;;;N;;;;1059E; 10578;VITHKUQI CAPITAL LETTER E;Lu;0;L;;;;;N;;;;1059F; 10579;VITHKUQI CAPITAL LETTER FE;Lu;0;L;;;;;N;;;;105A0; 1057A;VITHKUQI CAPITAL LETTER GA;Lu;0;L;;;;;N;;;;105A1; 1057C;VITHKUQI CAPITAL LETTER HA;Lu;0;L;;;;;N;;;;105A3; 1057D;VITHKUQI CAPITAL LETTER HHA;Lu;0;L;;;;;N;;;;105A4; 1057E;VITHKUQI CAPITAL LETTER I;Lu;0;L;;;;;N;;;;105A5; 1057F;VITHKUQI CAPITAL LETTER IJE;Lu;0;L;;;;;N;;;;105A6; 10580;VITHKUQI CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;105A7; 10581;VITHKUQI CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;105A8; 10582;VITHKUQI CAPITAL LETTER LA;Lu;0;L;;;;;N;;;;105A9; 10583;VITHKUQI CAPITAL LETTER LLA;Lu;0;L;;;;;N;;;;105AA; 10584;VITHKUQI CAPITAL LETTER ME;Lu;0;L;;;;;N;;;;105AB; 10585;VITHKUQI CAPITAL LETTER NE;Lu;0;L;;;;;N;;;;105AC; 10586;VITHKUQI CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;105AD; 10587;VITHKUQI CAPITAL LETTER O;Lu;0;L;;;;;N;;;;105AE; 10588;VITHKUQI CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;105AF; 10589;VITHKUQI CAPITAL LETTER QA;Lu;0;L;;;;;N;;;;105B0; 1058A;VITHKUQI CAPITAL LETTER RE;Lu;0;L;;;;;N;;;;105B1; 1058C;VITHKUQI CAPITAL LETTER SE;Lu;0;L;;;;;N;;;;105B3; 1058D;VITHKUQI CAPITAL LETTER SHE;Lu;0;L;;;;;N;;;;105B4; 1058E;VITHKUQI CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;105B5; 1058F;VITHKUQI CAPITAL LETTER THE;Lu;0;L;;;;;N;;;;105B6; 10590;VITHKUQI CAPITAL LETTER U;Lu;0;L;;;;;N;;;;105B7; 10591;VITHKUQI CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;105B8; 10592;VITHKUQI CAPITAL LETTER XE;Lu;0;L;;;;;N;;;;105B9; 10594;VITHKUQI CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;105BB; 10595;VITHKUQI CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;105BC; 10597;VITHKUQI SMALL LETTER A;Ll;0;L;;;;;N;;;10570;;10570 10598;VITHKUQI SMALL LETTER BBE;Ll;0;L;;;;;N;;;10571;;10571 10599;VITHKUQI SMALL LETTER BE;Ll;0;L;;;;;N;;;10572;;10572 1059A;VITHKUQI SMALL LETTER CE;Ll;0;L;;;;;N;;;10573;;10573 1059B;VITHKUQI SMALL LETTER CHE;Ll;0;L;;;;;N;;;10574;;10574 1059C;VITHKUQI SMALL LETTER DE;Ll;0;L;;;;;N;;;10575;;10575 1059D;VITHKUQI SMALL LETTER DHE;Ll;0;L;;;;;N;;;10576;;10576 1059E;VITHKUQI SMALL LETTER EI;Ll;0;L;;;;;N;;;10577;;10577 1059F;VITHKUQI SMALL LETTER E;Ll;0;L;;;;;N;;;10578;;10578 105A0;VITHKUQI SMALL LETTER FE;Ll;0;L;;;;;N;;;10579;;10579 105A1;VITHKUQI SMALL LETTER GA;Ll;0;L;;;;;N;;;1057A;;1057A 105A3;VITHKUQI SMALL LETTER HA;Ll;0;L;;;;;N;;;1057C;;1057C 105A4;VITHKUQI SMALL LETTER HHA;Ll;0;L;;;;;N;;;1057D;;1057D 105A5;VITHKUQI SMALL LETTER I;Ll;0;L;;;;;N;;;1057E;;1057E 105A6;VITHKUQI SMALL LETTER IJE;Ll;0;L;;;;;N;;;1057F;;1057F 105A7;VITHKUQI SMALL LETTER JE;Ll;0;L;;;;;N;;;10580;;10580 105A8;VITHKUQI SMALL LETTER KA;Ll;0;L;;;;;N;;;10581;;10581 105A9;VITHKUQI SMALL LETTER LA;Ll;0;L;;;;;N;;;10582;;10582 105AA;VITHKUQI SMALL LETTER LLA;Ll;0;L;;;;;N;;;10583;;10583 105AB;VITHKUQI SMALL LETTER ME;Ll;0;L;;;;;N;;;10584;;10584 105AC;VITHKUQI SMALL LETTER NE;Ll;0;L;;;;;N;;;10585;;10585 105AD;VITHKUQI SMALL LETTER NJE;Ll;0;L;;;;;N;;;10586;;10586 105AE;VITHKUQI SMALL LETTER O;Ll;0;L;;;;;N;;;10587;;10587 105AF;VITHKUQI SMALL LETTER PE;Ll;0;L;;;;;N;;;10588;;10588 105B0;VITHKUQI SMALL LETTER QA;Ll;0;L;;;;;N;;;10589;;10589 105B1;VITHKUQI SMALL LETTER RE;Ll;0;L;;;;;N;;;1058A;;1058A 105B3;VITHKUQI SMALL LETTER SE;Ll;0;L;;;;;N;;;1058C;;1058C 105B4;VITHKUQI SMALL LETTER SHE;Ll;0;L;;;;;N;;;1058D;;1058D 105B5;VITHKUQI SMALL LETTER TE;Ll;0;L;;;;;N;;;1058E;;1058E 105B6;VITHKUQI SMALL LETTER THE;Ll;0;L;;;;;N;;;1058F;;1058F 105B7;VITHKUQI SMALL LETTER U;Ll;0;L;;;;;N;;;10590;;10590 105B8;VITHKUQI SMALL LETTER VE;Ll;0;L;;;;;N;;;10591;;10591 105B9;VITHKUQI SMALL LETTER XE;Ll;0;L;;;;;N;;;10592;;10592 105BB;VITHKUQI SMALL LETTER Y;Ll;0;L;;;;;N;;;10594;;10594 105BC;VITHKUQI SMALL LETTER ZE;Ll;0;L;;;;;N;;;10595;;10595 10600;LINEAR A SIGN AB001;Lo;0;L;;;;;N;;;;; 10601;LINEAR A SIGN AB002;Lo;0;L;;;;;N;;;;; 10602;LINEAR A SIGN AB003;Lo;0;L;;;;;N;;;;; 10603;LINEAR A SIGN AB004;Lo;0;L;;;;;N;;;;; 10604;LINEAR A SIGN AB005;Lo;0;L;;;;;N;;;;; 10605;LINEAR A SIGN AB006;Lo;0;L;;;;;N;;;;; 10606;LINEAR A SIGN AB007;Lo;0;L;;;;;N;;;;; 10607;LINEAR A SIGN AB008;Lo;0;L;;;;;N;;;;; 10608;LINEAR A SIGN AB009;Lo;0;L;;;;;N;;;;; 10609;LINEAR A SIGN AB010;Lo;0;L;;;;;N;;;;; 1060A;LINEAR A SIGN AB011;Lo;0;L;;;;;N;;;;; 1060B;LINEAR A SIGN AB013;Lo;0;L;;;;;N;;;;; 1060C;LINEAR A SIGN AB016;Lo;0;L;;;;;N;;;;; 1060D;LINEAR A SIGN AB017;Lo;0;L;;;;;N;;;;; 1060E;LINEAR A SIGN AB020;Lo;0;L;;;;;N;;;;; 1060F;LINEAR A SIGN AB021;Lo;0;L;;;;;N;;;;; 10610;LINEAR A SIGN AB021F;Lo;0;L;;;;;N;;;;; 10611;LINEAR A SIGN AB021M;Lo;0;L;;;;;N;;;;; 10612;LINEAR A SIGN AB022;Lo;0;L;;;;;N;;;;; 10613;LINEAR A SIGN AB022F;Lo;0;L;;;;;N;;;;; 10614;LINEAR A SIGN AB022M;Lo;0;L;;;;;N;;;;; 10615;LINEAR A SIGN AB023;Lo;0;L;;;;;N;;;;; 10616;LINEAR A SIGN AB023M;Lo;0;L;;;;;N;;;;; 10617;LINEAR A SIGN AB024;Lo;0;L;;;;;N;;;;; 10618;LINEAR A SIGN AB026;Lo;0;L;;;;;N;;;;; 10619;LINEAR A SIGN AB027;Lo;0;L;;;;;N;;;;; 1061A;LINEAR A SIGN AB028;Lo;0;L;;;;;N;;;;; 1061B;LINEAR A SIGN A028B;Lo;0;L;;;;;N;;;;; 1061C;LINEAR A SIGN AB029;Lo;0;L;;;;;N;;;;; 1061D;LINEAR A SIGN AB030;Lo;0;L;;;;;N;;;;; 1061E;LINEAR A SIGN AB031;Lo;0;L;;;;;N;;;;; 1061F;LINEAR A SIGN AB034;Lo;0;L;;;;;N;;;;; 10620;LINEAR A SIGN AB037;Lo;0;L;;;;;N;;;;; 10621;LINEAR A SIGN AB038;Lo;0;L;;;;;N;;;;; 10622;LINEAR A SIGN AB039;Lo;0;L;;;;;N;;;;; 10623;LINEAR A SIGN AB040;Lo;0;L;;;;;N;;;;; 10624;LINEAR A SIGN AB041;Lo;0;L;;;;;N;;;;; 10625;LINEAR A SIGN AB044;Lo;0;L;;;;;N;;;;; 10626;LINEAR A SIGN AB045;Lo;0;L;;;;;N;;;;; 10627;LINEAR A SIGN AB046;Lo;0;L;;;;;N;;;;; 10628;LINEAR A SIGN AB047;Lo;0;L;;;;;N;;;;; 10629;LINEAR A SIGN AB048;Lo;0;L;;;;;N;;;;; 1062A;LINEAR A SIGN AB049;Lo;0;L;;;;;N;;;;; 1062B;LINEAR A SIGN AB050;Lo;0;L;;;;;N;;;;; 1062C;LINEAR A SIGN AB051;Lo;0;L;;;;;N;;;;; 1062D;LINEAR A SIGN AB053;Lo;0;L;;;;;N;;;;; 1062E;LINEAR A SIGN AB054;Lo;0;L;;;;;N;;;;; 1062F;LINEAR A SIGN AB055;Lo;0;L;;;;;N;;;;; 10630;LINEAR A SIGN AB056;Lo;0;L;;;;;N;;;;; 10631;LINEAR A SIGN AB057;Lo;0;L;;;;;N;;;;; 10632;LINEAR A SIGN AB058;Lo;0;L;;;;;N;;;;; 10633;LINEAR A SIGN AB059;Lo;0;L;;;;;N;;;;; 10634;LINEAR A SIGN AB060;Lo;0;L;;;;;N;;;;; 10635;LINEAR A SIGN AB061;Lo;0;L;;;;;N;;;;; 10636;LINEAR A SIGN AB065;Lo;0;L;;;;;N;;;;; 10637;LINEAR A SIGN AB066;Lo;0;L;;;;;N;;;;; 10638;LINEAR A SIGN AB067;Lo;0;L;;;;;N;;;;; 10639;LINEAR A SIGN AB069;Lo;0;L;;;;;N;;;;; 1063A;LINEAR A SIGN AB070;Lo;0;L;;;;;N;;;;; 1063B;LINEAR A SIGN AB073;Lo;0;L;;;;;N;;;;; 1063C;LINEAR A SIGN AB074;Lo;0;L;;;;;N;;;;; 1063D;LINEAR A SIGN AB076;Lo;0;L;;;;;N;;;;; 1063E;LINEAR A SIGN AB077;Lo;0;L;;;;;N;;;;; 1063F;LINEAR A SIGN AB078;Lo;0;L;;;;;N;;;;; 10640;LINEAR A SIGN AB079;Lo;0;L;;;;;N;;;;; 10641;LINEAR A SIGN AB080;Lo;0;L;;;;;N;;;;; 10642;LINEAR A SIGN AB081;Lo;0;L;;;;;N;;;;; 10643;LINEAR A SIGN AB082;Lo;0;L;;;;;N;;;;; 10644;LINEAR A SIGN AB085;Lo;0;L;;;;;N;;;;; 10645;LINEAR A SIGN AB086;Lo;0;L;;;;;N;;;;; 10646;LINEAR A SIGN AB087;Lo;0;L;;;;;N;;;;; 10647;LINEAR A SIGN A100-102;Lo;0;L;;;;;N;;;;; 10648;LINEAR A SIGN AB118;Lo;0;L;;;;;N;;;;; 10649;LINEAR A SIGN AB120;Lo;0;L;;;;;N;;;;; 1064A;LINEAR A SIGN A120B;Lo;0;L;;;;;N;;;;; 1064B;LINEAR A SIGN AB122;Lo;0;L;;;;;N;;;;; 1064C;LINEAR A SIGN AB123;Lo;0;L;;;;;N;;;;; 1064D;LINEAR A SIGN AB131A;Lo;0;L;;;;;N;;;;; 1064E;LINEAR A SIGN AB131B;Lo;0;L;;;;;N;;;;; 1064F;LINEAR A SIGN A131C;Lo;0;L;;;;;N;;;;; 10650;LINEAR A SIGN AB164;Lo;0;L;;;;;N;;;;; 10651;LINEAR A SIGN AB171;Lo;0;L;;;;;N;;;;; 10652;LINEAR A SIGN AB180;Lo;0;L;;;;;N;;;;; 10653;LINEAR A SIGN AB188;Lo;0;L;;;;;N;;;;; 10654;LINEAR A SIGN AB191;Lo;0;L;;;;;N;;;;; 10655;LINEAR A SIGN A301;Lo;0;L;;;;;N;;;;; 10656;LINEAR A SIGN A302;Lo;0;L;;;;;N;;;;; 10657;LINEAR A SIGN A303;Lo;0;L;;;;;N;;;;; 10658;LINEAR A SIGN A304;Lo;0;L;;;;;N;;;;; 10659;LINEAR A SIGN A305;Lo;0;L;;;;;N;;;;; 1065A;LINEAR A SIGN A306;Lo;0;L;;;;;N;;;;; 1065B;LINEAR A SIGN A307;Lo;0;L;;;;;N;;;;; 1065C;LINEAR A SIGN A308;Lo;0;L;;;;;N;;;;; 1065D;LINEAR A SIGN A309A;Lo;0;L;;;;;N;;;;; 1065E;LINEAR A SIGN A309B;Lo;0;L;;;;;N;;;;; 1065F;LINEAR A SIGN A309C;Lo;0;L;;;;;N;;;;; 10660;LINEAR A SIGN A310;Lo;0;L;;;;;N;;;;; 10661;LINEAR A SIGN A311;Lo;0;L;;;;;N;;;;; 10662;LINEAR A SIGN A312;Lo;0;L;;;;;N;;;;; 10663;LINEAR A SIGN A313A;Lo;0;L;;;;;N;;;;; 10664;LINEAR A SIGN A313B;Lo;0;L;;;;;N;;;;; 10665;LINEAR A SIGN A313C;Lo;0;L;;;;;N;;;;; 10666;LINEAR A SIGN A314;Lo;0;L;;;;;N;;;;; 10667;LINEAR A SIGN A315;Lo;0;L;;;;;N;;;;; 10668;LINEAR A SIGN A316;Lo;0;L;;;;;N;;;;; 10669;LINEAR A SIGN A317;Lo;0;L;;;;;N;;;;; 1066A;LINEAR A SIGN A318;Lo;0;L;;;;;N;;;;; 1066B;LINEAR A SIGN A319;Lo;0;L;;;;;N;;;;; 1066C;LINEAR A SIGN A320;Lo;0;L;;;;;N;;;;; 1066D;LINEAR A SIGN A321;Lo;0;L;;;;;N;;;;; 1066E;LINEAR A SIGN A322;Lo;0;L;;;;;N;;;;; 1066F;LINEAR A SIGN A323;Lo;0;L;;;;;N;;;;; 10670;LINEAR A SIGN A324;Lo;0;L;;;;;N;;;;; 10671;LINEAR A SIGN A325;Lo;0;L;;;;;N;;;;; 10672;LINEAR A SIGN A326;Lo;0;L;;;;;N;;;;; 10673;LINEAR A SIGN A327;Lo;0;L;;;;;N;;;;; 10674;LINEAR A SIGN A328;Lo;0;L;;;;;N;;;;; 10675;LINEAR A SIGN A329;Lo;0;L;;;;;N;;;;; 10676;LINEAR A SIGN A330;Lo;0;L;;;;;N;;;;; 10677;LINEAR A SIGN A331;Lo;0;L;;;;;N;;;;; 10678;LINEAR A SIGN A332;Lo;0;L;;;;;N;;;;; 10679;LINEAR A SIGN A333;Lo;0;L;;;;;N;;;;; 1067A;LINEAR A SIGN A334;Lo;0;L;;;;;N;;;;; 1067B;LINEAR A SIGN A335;Lo;0;L;;;;;N;;;;; 1067C;LINEAR A SIGN A336;Lo;0;L;;;;;N;;;;; 1067D;LINEAR A SIGN A337;Lo;0;L;;;;;N;;;;; 1067E;LINEAR A SIGN A338;Lo;0;L;;;;;N;;;;; 1067F;LINEAR A SIGN A339;Lo;0;L;;;;;N;;;;; 10680;LINEAR A SIGN A340;Lo;0;L;;;;;N;;;;; 10681;LINEAR A SIGN A341;Lo;0;L;;;;;N;;;;; 10682;LINEAR A SIGN A342;Lo;0;L;;;;;N;;;;; 10683;LINEAR A SIGN A343;Lo;0;L;;;;;N;;;;; 10684;LINEAR A SIGN A344;Lo;0;L;;;;;N;;;;; 10685;LINEAR A SIGN A345;Lo;0;L;;;;;N;;;;; 10686;LINEAR A SIGN A346;Lo;0;L;;;;;N;;;;; 10687;LINEAR A SIGN A347;Lo;0;L;;;;;N;;;;; 10688;LINEAR A SIGN A348;Lo;0;L;;;;;N;;;;; 10689;LINEAR A SIGN A349;Lo;0;L;;;;;N;;;;; 1068A;LINEAR A SIGN A350;Lo;0;L;;;;;N;;;;; 1068B;LINEAR A SIGN A351;Lo;0;L;;;;;N;;;;; 1068C;LINEAR A SIGN A352;Lo;0;L;;;;;N;;;;; 1068D;LINEAR A SIGN A353;Lo;0;L;;;;;N;;;;; 1068E;LINEAR A SIGN A354;Lo;0;L;;;;;N;;;;; 1068F;LINEAR A SIGN A355;Lo;0;L;;;;;N;;;;; 10690;LINEAR A SIGN A356;Lo;0;L;;;;;N;;;;; 10691;LINEAR A SIGN A357;Lo;0;L;;;;;N;;;;; 10692;LINEAR A SIGN A358;Lo;0;L;;;;;N;;;;; 10693;LINEAR A SIGN A359;Lo;0;L;;;;;N;;;;; 10694;LINEAR A SIGN A360;Lo;0;L;;;;;N;;;;; 10695;LINEAR A SIGN A361;Lo;0;L;;;;;N;;;;; 10696;LINEAR A SIGN A362;Lo;0;L;;;;;N;;;;; 10697;LINEAR A SIGN A363;Lo;0;L;;;;;N;;;;; 10698;LINEAR A SIGN A364;Lo;0;L;;;;;N;;;;; 10699;LINEAR A SIGN A365;Lo;0;L;;;;;N;;;;; 1069A;LINEAR A SIGN A366;Lo;0;L;;;;;N;;;;; 1069B;LINEAR A SIGN A367;Lo;0;L;;;;;N;;;;; 1069C;LINEAR A SIGN A368;Lo;0;L;;;;;N;;;;; 1069D;LINEAR A SIGN A369;Lo;0;L;;;;;N;;;;; 1069E;LINEAR A SIGN A370;Lo;0;L;;;;;N;;;;; 1069F;LINEAR A SIGN A371;Lo;0;L;;;;;N;;;;; 106A0;LINEAR A SIGN A400-VAS;Lo;0;L;;;;;N;;;;; 106A1;LINEAR A SIGN A401-VAS;Lo;0;L;;;;;N;;;;; 106A2;LINEAR A SIGN A402-VAS;Lo;0;L;;;;;N;;;;; 106A3;LINEAR A SIGN A403-VAS;Lo;0;L;;;;;N;;;;; 106A4;LINEAR A SIGN A404-VAS;Lo;0;L;;;;;N;;;;; 106A5;LINEAR A SIGN A405-VAS;Lo;0;L;;;;;N;;;;; 106A6;LINEAR A SIGN A406-VAS;Lo;0;L;;;;;N;;;;; 106A7;LINEAR A SIGN A407-VAS;Lo;0;L;;;;;N;;;;; 106A8;LINEAR A SIGN A408-VAS;Lo;0;L;;;;;N;;;;; 106A9;LINEAR A SIGN A409-VAS;Lo;0;L;;;;;N;;;;; 106AA;LINEAR A SIGN A410-VAS;Lo;0;L;;;;;N;;;;; 106AB;LINEAR A SIGN A411-VAS;Lo;0;L;;;;;N;;;;; 106AC;LINEAR A SIGN A412-VAS;Lo;0;L;;;;;N;;;;; 106AD;LINEAR A SIGN A413-VAS;Lo;0;L;;;;;N;;;;; 106AE;LINEAR A SIGN A414-VAS;Lo;0;L;;;;;N;;;;; 106AF;LINEAR A SIGN A415-VAS;Lo;0;L;;;;;N;;;;; 106B0;LINEAR A SIGN A416-VAS;Lo;0;L;;;;;N;;;;; 106B1;LINEAR A SIGN A417-VAS;Lo;0;L;;;;;N;;;;; 106B2;LINEAR A SIGN A418-VAS;Lo;0;L;;;;;N;;;;; 106B3;LINEAR A SIGN A501;Lo;0;L;;;;;N;;;;; 106B4;LINEAR A SIGN A502;Lo;0;L;;;;;N;;;;; 106B5;LINEAR A SIGN A503;Lo;0;L;;;;;N;;;;; 106B6;LINEAR A SIGN A504;Lo;0;L;;;;;N;;;;; 106B7;LINEAR A SIGN A505;Lo;0;L;;;;;N;;;;; 106B8;LINEAR A SIGN A506;Lo;0;L;;;;;N;;;;; 106B9;LINEAR A SIGN A508;Lo;0;L;;;;;N;;;;; 106BA;LINEAR A SIGN A509;Lo;0;L;;;;;N;;;;; 106BB;LINEAR A SIGN A510;Lo;0;L;;;;;N;;;;; 106BC;LINEAR A SIGN A511;Lo;0;L;;;;;N;;;;; 106BD;LINEAR A SIGN A512;Lo;0;L;;;;;N;;;;; 106BE;LINEAR A SIGN A513;Lo;0;L;;;;;N;;;;; 106BF;LINEAR A SIGN A515;Lo;0;L;;;;;N;;;;; 106C0;LINEAR A SIGN A516;Lo;0;L;;;;;N;;;;; 106C1;LINEAR A SIGN A520;Lo;0;L;;;;;N;;;;; 106C2;LINEAR A SIGN A521;Lo;0;L;;;;;N;;;;; 106C3;LINEAR A SIGN A523;Lo;0;L;;;;;N;;;;; 106C4;LINEAR A SIGN A524;Lo;0;L;;;;;N;;;;; 106C5;LINEAR A SIGN A525;Lo;0;L;;;;;N;;;;; 106C6;LINEAR A SIGN A526;Lo;0;L;;;;;N;;;;; 106C7;LINEAR A SIGN A527;Lo;0;L;;;;;N;;;;; 106C8;LINEAR A SIGN A528;Lo;0;L;;;;;N;;;;; 106C9;LINEAR A SIGN A529;Lo;0;L;;;;;N;;;;; 106CA;LINEAR A SIGN A530;Lo;0;L;;;;;N;;;;; 106CB;LINEAR A SIGN A531;Lo;0;L;;;;;N;;;;; 106CC;LINEAR A SIGN A532;Lo;0;L;;;;;N;;;;; 106CD;LINEAR A SIGN A534;Lo;0;L;;;;;N;;;;; 106CE;LINEAR A SIGN A535;Lo;0;L;;;;;N;;;;; 106CF;LINEAR A SIGN A536;Lo;0;L;;;;;N;;;;; 106D0;LINEAR A SIGN A537;Lo;0;L;;;;;N;;;;; 106D1;LINEAR A SIGN A538;Lo;0;L;;;;;N;;;;; 106D2;LINEAR A SIGN A539;Lo;0;L;;;;;N;;;;; 106D3;LINEAR A SIGN A540;Lo;0;L;;;;;N;;;;; 106D4;LINEAR A SIGN A541;Lo;0;L;;;;;N;;;;; 106D5;LINEAR A SIGN A542;Lo;0;L;;;;;N;;;;; 106D6;LINEAR A SIGN A545;Lo;0;L;;;;;N;;;;; 106D7;LINEAR A SIGN A547;Lo;0;L;;;;;N;;;;; 106D8;LINEAR A SIGN A548;Lo;0;L;;;;;N;;;;; 106D9;LINEAR A SIGN A549;Lo;0;L;;;;;N;;;;; 106DA;LINEAR A SIGN A550;Lo;0;L;;;;;N;;;;; 106DB;LINEAR A SIGN A551;Lo;0;L;;;;;N;;;;; 106DC;LINEAR A SIGN A552;Lo;0;L;;;;;N;;;;; 106DD;LINEAR A SIGN A553;Lo;0;L;;;;;N;;;;; 106DE;LINEAR A SIGN A554;Lo;0;L;;;;;N;;;;; 106DF;LINEAR A SIGN A555;Lo;0;L;;;;;N;;;;; 106E0;LINEAR A SIGN A556;Lo;0;L;;;;;N;;;;; 106E1;LINEAR A SIGN A557;Lo;0;L;;;;;N;;;;; 106E2;LINEAR A SIGN A559;Lo;0;L;;;;;N;;;;; 106E3;LINEAR A SIGN A563;Lo;0;L;;;;;N;;;;; 106E4;LINEAR A SIGN A564;Lo;0;L;;;;;N;;;;; 106E5;LINEAR A SIGN A565;Lo;0;L;;;;;N;;;;; 106E6;LINEAR A SIGN A566;Lo;0;L;;;;;N;;;;; 106E7;LINEAR A SIGN A568;Lo;0;L;;;;;N;;;;; 106E8;LINEAR A SIGN A569;Lo;0;L;;;;;N;;;;; 106E9;LINEAR A SIGN A570;Lo;0;L;;;;;N;;;;; 106EA;LINEAR A SIGN A571;Lo;0;L;;;;;N;;;;; 106EB;LINEAR A SIGN A572;Lo;0;L;;;;;N;;;;; 106EC;LINEAR A SIGN A573;Lo;0;L;;;;;N;;;;; 106ED;LINEAR A SIGN A574;Lo;0;L;;;;;N;;;;; 106EE;LINEAR A SIGN A575;Lo;0;L;;;;;N;;;;; 106EF;LINEAR A SIGN A576;Lo;0;L;;;;;N;;;;; 106F0;LINEAR A SIGN A577;Lo;0;L;;;;;N;;;;; 106F1;LINEAR A SIGN A578;Lo;0;L;;;;;N;;;;; 106F2;LINEAR A SIGN A579;Lo;0;L;;;;;N;;;;; 106F3;LINEAR A SIGN A580;Lo;0;L;;;;;N;;;;; 106F4;LINEAR A SIGN A581;Lo;0;L;;;;;N;;;;; 106F5;LINEAR A SIGN A582;Lo;0;L;;;;;N;;;;; 106F6;LINEAR A SIGN A583;Lo;0;L;;;;;N;;;;; 106F7;LINEAR A SIGN A584;Lo;0;L;;;;;N;;;;; 106F8;LINEAR A SIGN A585;Lo;0;L;;;;;N;;;;; 106F9;LINEAR A SIGN A586;Lo;0;L;;;;;N;;;;; 106FA;LINEAR A SIGN A587;Lo;0;L;;;;;N;;;;; 106FB;LINEAR A SIGN A588;Lo;0;L;;;;;N;;;;; 106FC;LINEAR A SIGN A589;Lo;0;L;;;;;N;;;;; 106FD;LINEAR A SIGN A591;Lo;0;L;;;;;N;;;;; 106FE;LINEAR A SIGN A592;Lo;0;L;;;;;N;;;;; 106FF;LINEAR A SIGN A594;Lo;0;L;;;;;N;;;;; 10700;LINEAR A SIGN A595;Lo;0;L;;;;;N;;;;; 10701;LINEAR A SIGN A596;Lo;0;L;;;;;N;;;;; 10702;LINEAR A SIGN A598;Lo;0;L;;;;;N;;;;; 10703;LINEAR A SIGN A600;Lo;0;L;;;;;N;;;;; 10704;LINEAR A SIGN A601;Lo;0;L;;;;;N;;;;; 10705;LINEAR A SIGN A602;Lo;0;L;;;;;N;;;;; 10706;LINEAR A SIGN A603;Lo;0;L;;;;;N;;;;; 10707;LINEAR A SIGN A604;Lo;0;L;;;;;N;;;;; 10708;LINEAR A SIGN A606;Lo;0;L;;;;;N;;;;; 10709;LINEAR A SIGN A608;Lo;0;L;;;;;N;;;;; 1070A;LINEAR A SIGN A609;Lo;0;L;;;;;N;;;;; 1070B;LINEAR A SIGN A610;Lo;0;L;;;;;N;;;;; 1070C;LINEAR A SIGN A611;Lo;0;L;;;;;N;;;;; 1070D;LINEAR A SIGN A612;Lo;0;L;;;;;N;;;;; 1070E;LINEAR A SIGN A613;Lo;0;L;;;;;N;;;;; 1070F;LINEAR A SIGN A614;Lo;0;L;;;;;N;;;;; 10710;LINEAR A SIGN A615;Lo;0;L;;;;;N;;;;; 10711;LINEAR A SIGN A616;Lo;0;L;;;;;N;;;;; 10712;LINEAR A SIGN A617;Lo;0;L;;;;;N;;;;; 10713;LINEAR A SIGN A618;Lo;0;L;;;;;N;;;;; 10714;LINEAR A SIGN A619;Lo;0;L;;;;;N;;;;; 10715;LINEAR A SIGN A620;Lo;0;L;;;;;N;;;;; 10716;LINEAR A SIGN A621;Lo;0;L;;;;;N;;;;; 10717;LINEAR A SIGN A622;Lo;0;L;;;;;N;;;;; 10718;LINEAR A SIGN A623;Lo;0;L;;;;;N;;;;; 10719;LINEAR A SIGN A624;Lo;0;L;;;;;N;;;;; 1071A;LINEAR A SIGN A626;Lo;0;L;;;;;N;;;;; 1071B;LINEAR A SIGN A627;Lo;0;L;;;;;N;;;;; 1071C;LINEAR A SIGN A628;Lo;0;L;;;;;N;;;;; 1071D;LINEAR A SIGN A629;Lo;0;L;;;;;N;;;;; 1071E;LINEAR A SIGN A634;Lo;0;L;;;;;N;;;;; 1071F;LINEAR A SIGN A637;Lo;0;L;;;;;N;;;;; 10720;LINEAR A SIGN A638;Lo;0;L;;;;;N;;;;; 10721;LINEAR A SIGN A640;Lo;0;L;;;;;N;;;;; 10722;LINEAR A SIGN A642;Lo;0;L;;;;;N;;;;; 10723;LINEAR A SIGN A643;Lo;0;L;;;;;N;;;;; 10724;LINEAR A SIGN A644;Lo;0;L;;;;;N;;;;; 10725;LINEAR A SIGN A645;Lo;0;L;;;;;N;;;;; 10726;LINEAR A SIGN A646;Lo;0;L;;;;;N;;;;; 10727;LINEAR A SIGN A648;Lo;0;L;;;;;N;;;;; 10728;LINEAR A SIGN A649;Lo;0;L;;;;;N;;;;; 10729;LINEAR A SIGN A651;Lo;0;L;;;;;N;;;;; 1072A;LINEAR A SIGN A652;Lo;0;L;;;;;N;;;;; 1072B;LINEAR A SIGN A653;Lo;0;L;;;;;N;;;;; 1072C;LINEAR A SIGN A654;Lo;0;L;;;;;N;;;;; 1072D;LINEAR A SIGN A655;Lo;0;L;;;;;N;;;;; 1072E;LINEAR A SIGN A656;Lo;0;L;;;;;N;;;;; 1072F;LINEAR A SIGN A657;Lo;0;L;;;;;N;;;;; 10730;LINEAR A SIGN A658;Lo;0;L;;;;;N;;;;; 10731;LINEAR A SIGN A659;Lo;0;L;;;;;N;;;;; 10732;LINEAR A SIGN A660;Lo;0;L;;;;;N;;;;; 10733;LINEAR A SIGN A661;Lo;0;L;;;;;N;;;;; 10734;LINEAR A SIGN A662;Lo;0;L;;;;;N;;;;; 10735;LINEAR A SIGN A663;Lo;0;L;;;;;N;;;;; 10736;LINEAR A SIGN A664;Lo;0;L;;;;;N;;;;; 10740;LINEAR A SIGN A701 A;Lo;0;L;;;;;N;;;;; 10741;LINEAR A SIGN A702 B;Lo;0;L;;;;;N;;;;; 10742;LINEAR A SIGN A703 D;Lo;0;L;;;;;N;;;;; 10743;LINEAR A SIGN A704 E;Lo;0;L;;;;;N;;;;; 10744;LINEAR A SIGN A705 F;Lo;0;L;;;;;N;;;;; 10745;LINEAR A SIGN A706 H;Lo;0;L;;;;;N;;;;; 10746;LINEAR A SIGN A707 J;Lo;0;L;;;;;N;;;;; 10747;LINEAR A SIGN A708 K;Lo;0;L;;;;;N;;;;; 10748;LINEAR A SIGN A709 L;Lo;0;L;;;;;N;;;;; 10749;LINEAR A SIGN A709-2 L2;Lo;0;L;;;;;N;;;;; 1074A;LINEAR A SIGN A709-3 L3;Lo;0;L;;;;;N;;;;; 1074B;LINEAR A SIGN A709-4 L4;Lo;0;L;;;;;N;;;;; 1074C;LINEAR A SIGN A709-6 L6;Lo;0;L;;;;;N;;;;; 1074D;LINEAR A SIGN A710 W;Lo;0;L;;;;;N;;;;; 1074E;LINEAR A SIGN A711 X;Lo;0;L;;;;;N;;;;; 1074F;LINEAR A SIGN A712 Y;Lo;0;L;;;;;N;;;;; 10750;LINEAR A SIGN A713 OMEGA;Lo;0;L;;;;;N;;;;; 10751;LINEAR A SIGN A714 ABB;Lo;0;L;;;;;N;;;;; 10752;LINEAR A SIGN A715 BB;Lo;0;L;;;;;N;;;;; 10753;LINEAR A SIGN A717 DD;Lo;0;L;;;;;N;;;;; 10754;LINEAR A SIGN A726 EYYY;Lo;0;L;;;;;N;;;;; 10755;LINEAR A SIGN A732 JE;Lo;0;L;;;;;N;;;;; 10760;LINEAR A SIGN A800;Lo;0;L;;;;;N;;;;; 10761;LINEAR A SIGN A801;Lo;0;L;;;;;N;;;;; 10762;LINEAR A SIGN A802;Lo;0;L;;;;;N;;;;; 10763;LINEAR A SIGN A803;Lo;0;L;;;;;N;;;;; 10764;LINEAR A SIGN A804;Lo;0;L;;;;;N;;;;; 10765;LINEAR A SIGN A805;Lo;0;L;;;;;N;;;;; 10766;LINEAR A SIGN A806;Lo;0;L;;;;;N;;;;; 10767;LINEAR A SIGN A807;Lo;0;L;;;;;N;;;;; 10780;MODIFIER LETTER SMALL CAPITAL AA;Lm;0;L;;;;;N;;;;; 10781;MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON;Lm;0;L; 02D0;;;;N;;;;; 10782;MODIFIER LETTER SUPERSCRIPT HALF TRIANGULAR COLON;Lm;0;L; 02D1;;;;N;;;;; 10783;MODIFIER LETTER SMALL AE;Lm;0;L; 00E6;;;;N;;;;; 10784;MODIFIER LETTER SMALL CAPITAL B;Lm;0;L; 0299;;;;N;;;;; 10785;MODIFIER LETTER SMALL B WITH HOOK;Lm;0;L; 0253;;;;N;;;;; 10787;MODIFIER LETTER SMALL DZ DIGRAPH;Lm;0;L; 02A3;;;;N;;;;; 10788;MODIFIER LETTER SMALL DZ DIGRAPH WITH RETROFLEX HOOK;Lm;0;L; AB66;;;;N;;;;; 10789;MODIFIER LETTER SMALL DZ DIGRAPH WITH CURL;Lm;0;L; 02A5;;;;N;;;;; 1078A;MODIFIER LETTER SMALL DEZH DIGRAPH;Lm;0;L; 02A4;;;;N;;;;; 1078B;MODIFIER LETTER SMALL D WITH TAIL;Lm;0;L; 0256;;;;N;;;;; 1078C;MODIFIER LETTER SMALL D WITH HOOK;Lm;0;L; 0257;;;;N;;;;; 1078D;MODIFIER LETTER SMALL D WITH HOOK AND TAIL;Lm;0;L; 1D91;;;;N;;;;; 1078E;MODIFIER LETTER SMALL REVERSED E;Lm;0;L; 0258;;;;N;;;;; 1078F;MODIFIER LETTER SMALL CLOSED REVERSED OPEN E;Lm;0;L; 025E;;;;N;;;;; 10790;MODIFIER LETTER SMALL FENG DIGRAPH;Lm;0;L; 02A9;;;;N;;;;; 10791;MODIFIER LETTER SMALL RAMS HORN;Lm;0;L; 0264;;;;N;;;;; 10792;MODIFIER LETTER SMALL CAPITAL G;Lm;0;L; 0262;;;;N;;;;; 10793;MODIFIER LETTER SMALL G WITH HOOK;Lm;0;L; 0260;;;;N;;;;; 10794;MODIFIER LETTER SMALL CAPITAL G WITH HOOK;Lm;0;L; 029B;;;;N;;;;; 10795;MODIFIER LETTER SMALL H WITH STROKE;Lm;0;L; 0127;;;;N;;;;; 10796;MODIFIER LETTER SMALL CAPITAL H;Lm;0;L; 029C;;;;N;;;;; 10797;MODIFIER LETTER SMALL HENG WITH HOOK;Lm;0;L; 0267;;;;N;;;;; 10798;MODIFIER LETTER SMALL DOTLESS J WITH STROKE AND HOOK;Lm;0;L; 0284;;;;N;;;;; 10799;MODIFIER LETTER SMALL LS DIGRAPH;Lm;0;L; 02AA;;;;N;;;;; 1079A;MODIFIER LETTER SMALL LZ DIGRAPH;Lm;0;L; 02AB;;;;N;;;;; 1079B;MODIFIER LETTER SMALL L WITH BELT;Lm;0;L; 026C;;;;N;;;;; 1079C;MODIFIER LETTER SMALL CAPITAL L WITH BELT;Lm;0;L; 1DF04;;;;N;;;;; 1079D;MODIFIER LETTER SMALL L WITH RETROFLEX HOOK AND BELT;Lm;0;L; A78E;;;;N;;;;; 1079E;MODIFIER LETTER SMALL LEZH;Lm;0;L; 026E;;;;N;;;;; 1079F;MODIFIER LETTER SMALL LEZH WITH RETROFLEX HOOK;Lm;0;L; 1DF05;;;;N;;;;; 107A0;MODIFIER LETTER SMALL TURNED Y;Lm;0;L; 028E;;;;N;;;;; 107A1;MODIFIER LETTER SMALL TURNED Y WITH BELT;Lm;0;L; 1DF06;;;;N;;;;; 107A2;MODIFIER LETTER SMALL O WITH STROKE;Lm;0;L; 00F8;;;;N;;;;; 107A3;MODIFIER LETTER SMALL CAPITAL OE;Lm;0;L; 0276;;;;N;;;;; 107A4;MODIFIER LETTER SMALL CLOSED OMEGA;Lm;0;L; 0277;;;;N;;;;; 107A5;MODIFIER LETTER SMALL Q;Lm;0;L; 0071;;;;N;;;;; 107A6;MODIFIER LETTER SMALL TURNED R WITH LONG LEG;Lm;0;L; 027A;;;;N;;;;; 107A7;MODIFIER LETTER SMALL TURNED R WITH LONG LEG AND RETROFLEX HOOK;Lm;0;L; 1DF08;;;;N;;;;; 107A8;MODIFIER LETTER SMALL R WITH TAIL;Lm;0;L; 027D;;;;N;;;;; 107A9;MODIFIER LETTER SMALL R WITH FISHHOOK;Lm;0;L; 027E;;;;N;;;;; 107AA;MODIFIER LETTER SMALL CAPITAL R;Lm;0;L; 0280;;;;N;;;;; 107AB;MODIFIER LETTER SMALL TC DIGRAPH WITH CURL;Lm;0;L; 02A8;;;;N;;;;; 107AC;MODIFIER LETTER SMALL TS DIGRAPH;Lm;0;L; 02A6;;;;N;;;;; 107AD;MODIFIER LETTER SMALL TS DIGRAPH WITH RETROFLEX HOOK;Lm;0;L; AB67;;;;N;;;;; 107AE;MODIFIER LETTER SMALL TESH DIGRAPH;Lm;0;L; 02A7;;;;N;;;;; 107AF;MODIFIER LETTER SMALL T WITH RETROFLEX HOOK;Lm;0;L; 0288;;;;N;;;;; 107B0;MODIFIER LETTER SMALL V WITH RIGHT HOOK;Lm;0;L; 2C71;;;;N;;;;; 107B2;MODIFIER LETTER SMALL CAPITAL Y;Lm;0;L; 028F;;;;N;;;;; 107B3;MODIFIER LETTER GLOTTAL STOP WITH STROKE;Lm;0;L; 02A1;;;;N;;;;; 107B4;MODIFIER LETTER REVERSED GLOTTAL STOP WITH STROKE;Lm;0;L; 02A2;;;;N;;;;; 107B5;MODIFIER LETTER BILABIAL CLICK;Lm;0;L; 0298;;;;N;;;;; 107B6;MODIFIER LETTER DENTAL CLICK;Lm;0;L; 01C0;;;;N;;;;; 107B7;MODIFIER LETTER LATERAL CLICK;Lm;0;L; 01C1;;;;N;;;;; 107B8;MODIFIER LETTER ALVEOLAR CLICK;Lm;0;L; 01C2;;;;N;;;;; 107B9;MODIFIER LETTER RETROFLEX CLICK WITH RETROFLEX HOOK;Lm;0;L; 1DF0A;;;;N;;;;; 107BA;MODIFIER LETTER SMALL S WITH CURL;Lm;0;L; 1DF1E;;;;N;;;;; 10800;CYPRIOT SYLLABLE A;Lo;0;R;;;;;N;;;;; 10801;CYPRIOT SYLLABLE E;Lo;0;R;;;;;N;;;;; 10802;CYPRIOT SYLLABLE I;Lo;0;R;;;;;N;;;;; 10803;CYPRIOT SYLLABLE O;Lo;0;R;;;;;N;;;;; 10804;CYPRIOT SYLLABLE U;Lo;0;R;;;;;N;;;;; 10805;CYPRIOT SYLLABLE JA;Lo;0;R;;;;;N;;;;; 10808;CYPRIOT SYLLABLE JO;Lo;0;R;;;;;N;;;;; 1080A;CYPRIOT SYLLABLE KA;Lo;0;R;;;;;N;;;;; 1080B;CYPRIOT SYLLABLE KE;Lo;0;R;;;;;N;;;;; 1080C;CYPRIOT SYLLABLE KI;Lo;0;R;;;;;N;;;;; 1080D;CYPRIOT SYLLABLE KO;Lo;0;R;;;;;N;;;;; 1080E;CYPRIOT SYLLABLE KU;Lo;0;R;;;;;N;;;;; 1080F;CYPRIOT SYLLABLE LA;Lo;0;R;;;;;N;;;;; 10810;CYPRIOT SYLLABLE LE;Lo;0;R;;;;;N;;;;; 10811;CYPRIOT SYLLABLE LI;Lo;0;R;;;;;N;;;;; 10812;CYPRIOT SYLLABLE LO;Lo;0;R;;;;;N;;;;; 10813;CYPRIOT SYLLABLE LU;Lo;0;R;;;;;N;;;;; 10814;CYPRIOT SYLLABLE MA;Lo;0;R;;;;;N;;;;; 10815;CYPRIOT SYLLABLE ME;Lo;0;R;;;;;N;;;;; 10816;CYPRIOT SYLLABLE MI;Lo;0;R;;;;;N;;;;; 10817;CYPRIOT SYLLABLE MO;Lo;0;R;;;;;N;;;;; 10818;CYPRIOT SYLLABLE MU;Lo;0;R;;;;;N;;;;; 10819;CYPRIOT SYLLABLE NA;Lo;0;R;;;;;N;;;;; 1081A;CYPRIOT SYLLABLE NE;Lo;0;R;;;;;N;;;;; 1081B;CYPRIOT SYLLABLE NI;Lo;0;R;;;;;N;;;;; 1081C;CYPRIOT SYLLABLE NO;Lo;0;R;;;;;N;;;;; 1081D;CYPRIOT SYLLABLE NU;Lo;0;R;;;;;N;;;;; 1081E;CYPRIOT SYLLABLE PA;Lo;0;R;;;;;N;;;;; 1081F;CYPRIOT SYLLABLE PE;Lo;0;R;;;;;N;;;;; 10820;CYPRIOT SYLLABLE PI;Lo;0;R;;;;;N;;;;; 10821;CYPRIOT SYLLABLE PO;Lo;0;R;;;;;N;;;;; 10822;CYPRIOT SYLLABLE PU;Lo;0;R;;;;;N;;;;; 10823;CYPRIOT SYLLABLE RA;Lo;0;R;;;;;N;;;;; 10824;CYPRIOT SYLLABLE RE;Lo;0;R;;;;;N;;;;; 10825;CYPRIOT SYLLABLE RI;Lo;0;R;;;;;N;;;;; 10826;CYPRIOT SYLLABLE RO;Lo;0;R;;;;;N;;;;; 10827;CYPRIOT SYLLABLE RU;Lo;0;R;;;;;N;;;;; 10828;CYPRIOT SYLLABLE SA;Lo;0;R;;;;;N;;;;; 10829;CYPRIOT SYLLABLE SE;Lo;0;R;;;;;N;;;;; 1082A;CYPRIOT SYLLABLE SI;Lo;0;R;;;;;N;;;;; 1082B;CYPRIOT SYLLABLE SO;Lo;0;R;;;;;N;;;;; 1082C;CYPRIOT SYLLABLE SU;Lo;0;R;;;;;N;;;;; 1082D;CYPRIOT SYLLABLE TA;Lo;0;R;;;;;N;;;;; 1082E;CYPRIOT SYLLABLE TE;Lo;0;R;;;;;N;;;;; 1082F;CYPRIOT SYLLABLE TI;Lo;0;R;;;;;N;;;;; 10830;CYPRIOT SYLLABLE TO;Lo;0;R;;;;;N;;;;; 10831;CYPRIOT SYLLABLE TU;Lo;0;R;;;;;N;;;;; 10832;CYPRIOT SYLLABLE WA;Lo;0;R;;;;;N;;;;; 10833;CYPRIOT SYLLABLE WE;Lo;0;R;;;;;N;;;;; 10834;CYPRIOT SYLLABLE WI;Lo;0;R;;;;;N;;;;; 10835;CYPRIOT SYLLABLE WO;Lo;0;R;;;;;N;;;;; 10837;CYPRIOT SYLLABLE XA;Lo;0;R;;;;;N;;;;; 10838;CYPRIOT SYLLABLE XE;Lo;0;R;;;;;N;;;;; 1083C;CYPRIOT SYLLABLE ZA;Lo;0;R;;;;;N;;;;; 1083F;CYPRIOT SYLLABLE ZO;Lo;0;R;;;;;N;;;;; 10840;IMPERIAL ARAMAIC LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10841;IMPERIAL ARAMAIC LETTER BETH;Lo;0;R;;;;;N;;;;; 10842;IMPERIAL ARAMAIC LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10843;IMPERIAL ARAMAIC LETTER DALETH;Lo;0;R;;;;;N;;;;; 10844;IMPERIAL ARAMAIC LETTER HE;Lo;0;R;;;;;N;;;;; 10845;IMPERIAL ARAMAIC LETTER WAW;Lo;0;R;;;;;N;;;;; 10846;IMPERIAL ARAMAIC LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 10847;IMPERIAL ARAMAIC LETTER HETH;Lo;0;R;;;;;N;;;;; 10848;IMPERIAL ARAMAIC LETTER TETH;Lo;0;R;;;;;N;;;;; 10849;IMPERIAL ARAMAIC LETTER YODH;Lo;0;R;;;;;N;;;;; 1084A;IMPERIAL ARAMAIC LETTER KAPH;Lo;0;R;;;;;N;;;;; 1084B;IMPERIAL ARAMAIC LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 1084C;IMPERIAL ARAMAIC LETTER MEM;Lo;0;R;;;;;N;;;;; 1084D;IMPERIAL ARAMAIC LETTER NUN;Lo;0;R;;;;;N;;;;; 1084E;IMPERIAL ARAMAIC LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 1084F;IMPERIAL ARAMAIC LETTER AYIN;Lo;0;R;;;;;N;;;;; 10850;IMPERIAL ARAMAIC LETTER PE;Lo;0;R;;;;;N;;;;; 10851;IMPERIAL ARAMAIC LETTER SADHE;Lo;0;R;;;;;N;;;;; 10852;IMPERIAL ARAMAIC LETTER QOPH;Lo;0;R;;;;;N;;;;; 10853;IMPERIAL ARAMAIC LETTER RESH;Lo;0;R;;;;;N;;;;; 10854;IMPERIAL ARAMAIC LETTER SHIN;Lo;0;R;;;;;N;;;;; 10855;IMPERIAL ARAMAIC LETTER TAW;Lo;0;R;;;;;N;;;;; 10857;IMPERIAL ARAMAIC SECTION SIGN;Po;0;R;;;;;N;;;;; 10858;IMPERIAL ARAMAIC NUMBER ONE;No;0;R;;;;1;N;;;;; 10859;IMPERIAL ARAMAIC NUMBER TWO;No;0;R;;;;2;N;;;;; 1085A;IMPERIAL ARAMAIC NUMBER THREE;No;0;R;;;;3;N;;;;; 1085B;IMPERIAL ARAMAIC NUMBER TEN;No;0;R;;;;10;N;;;;; 1085C;IMPERIAL ARAMAIC NUMBER TWENTY;No;0;R;;;;20;N;;;;; 1085D;IMPERIAL ARAMAIC NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 1085E;IMPERIAL ARAMAIC NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;; 1085F;IMPERIAL ARAMAIC NUMBER TEN THOUSAND;No;0;R;;;;10000;N;;;;; 10860;PALMYRENE LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10861;PALMYRENE LETTER BETH;Lo;0;R;;;;;N;;;;; 10862;PALMYRENE LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10863;PALMYRENE LETTER DALETH;Lo;0;R;;;;;N;;;;; 10864;PALMYRENE LETTER HE;Lo;0;R;;;;;N;;;;; 10865;PALMYRENE LETTER WAW;Lo;0;R;;;;;N;;;;; 10866;PALMYRENE LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 10867;PALMYRENE LETTER HETH;Lo;0;R;;;;;N;;;;; 10868;PALMYRENE LETTER TETH;Lo;0;R;;;;;N;;;;; 10869;PALMYRENE LETTER YODH;Lo;0;R;;;;;N;;;;; 1086A;PALMYRENE LETTER KAPH;Lo;0;R;;;;;N;;;;; 1086B;PALMYRENE LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 1086C;PALMYRENE LETTER MEM;Lo;0;R;;;;;N;;;;; 1086D;PALMYRENE LETTER FINAL NUN;Lo;0;R;;;;;N;;;;; 1086E;PALMYRENE LETTER NUN;Lo;0;R;;;;;N;;;;; 1086F;PALMYRENE LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10870;PALMYRENE LETTER AYIN;Lo;0;R;;;;;N;;;;; 10871;PALMYRENE LETTER PE;Lo;0;R;;;;;N;;;;; 10872;PALMYRENE LETTER SADHE;Lo;0;R;;;;;N;;;;; 10873;PALMYRENE LETTER QOPH;Lo;0;R;;;;;N;;;;; 10874;PALMYRENE LETTER RESH;Lo;0;R;;;;;N;;;;; 10875;PALMYRENE LETTER SHIN;Lo;0;R;;;;;N;;;;; 10876;PALMYRENE LETTER TAW;Lo;0;R;;;;;N;;;;; 10877;PALMYRENE LEFT-POINTING FLEURON;So;0;R;;;;;N;;;;; 10878;PALMYRENE RIGHT-POINTING FLEURON;So;0;R;;;;;N;;;;; 10879;PALMYRENE NUMBER ONE;No;0;R;;;;1;N;;;;; 1087A;PALMYRENE NUMBER TWO;No;0;R;;;;2;N;;;;; 1087B;PALMYRENE NUMBER THREE;No;0;R;;;;3;N;;;;; 1087C;PALMYRENE NUMBER FOUR;No;0;R;;;;4;N;;;;; 1087D;PALMYRENE NUMBER FIVE;No;0;R;;;;5;N;;;;; 1087E;PALMYRENE NUMBER TEN;No;0;R;;;;10;N;;;;; 1087F;PALMYRENE NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10880;NABATAEAN LETTER FINAL ALEPH;Lo;0;R;;;;;N;;;;; 10881;NABATAEAN LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10882;NABATAEAN LETTER FINAL BETH;Lo;0;R;;;;;N;;;;; 10883;NABATAEAN LETTER BETH;Lo;0;R;;;;;N;;;;; 10884;NABATAEAN LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10885;NABATAEAN LETTER DALETH;Lo;0;R;;;;;N;;;;; 10886;NABATAEAN LETTER FINAL HE;Lo;0;R;;;;;N;;;;; 10887;NABATAEAN LETTER HE;Lo;0;R;;;;;N;;;;; 10888;NABATAEAN LETTER WAW;Lo;0;R;;;;;N;;;;; 10889;NABATAEAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 1088A;NABATAEAN LETTER HETH;Lo;0;R;;;;;N;;;;; 1088B;NABATAEAN LETTER TETH;Lo;0;R;;;;;N;;;;; 1088C;NABATAEAN LETTER FINAL YODH;Lo;0;R;;;;;N;;;;; 1088D;NABATAEAN LETTER YODH;Lo;0;R;;;;;N;;;;; 1088E;NABATAEAN LETTER FINAL KAPH;Lo;0;R;;;;;N;;;;; 1088F;NABATAEAN LETTER KAPH;Lo;0;R;;;;;N;;;;; 10890;NABATAEAN LETTER FINAL LAMEDH;Lo;0;R;;;;;N;;;;; 10891;NABATAEAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 10892;NABATAEAN LETTER FINAL MEM;Lo;0;R;;;;;N;;;;; 10893;NABATAEAN LETTER MEM;Lo;0;R;;;;;N;;;;; 10894;NABATAEAN LETTER FINAL NUN;Lo;0;R;;;;;N;;;;; 10895;NABATAEAN LETTER NUN;Lo;0;R;;;;;N;;;;; 10896;NABATAEAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10897;NABATAEAN LETTER AYIN;Lo;0;R;;;;;N;;;;; 10898;NABATAEAN LETTER PE;Lo;0;R;;;;;N;;;;; 10899;NABATAEAN LETTER SADHE;Lo;0;R;;;;;N;;;;; 1089A;NABATAEAN LETTER QOPH;Lo;0;R;;;;;N;;;;; 1089B;NABATAEAN LETTER RESH;Lo;0;R;;;;;N;;;;; 1089C;NABATAEAN LETTER FINAL SHIN;Lo;0;R;;;;;N;;;;; 1089D;NABATAEAN LETTER SHIN;Lo;0;R;;;;;N;;;;; 1089E;NABATAEAN LETTER TAW;Lo;0;R;;;;;N;;;;; 108A7;NABATAEAN NUMBER ONE;No;0;R;;;;1;N;;;;; 108A8;NABATAEAN NUMBER TWO;No;0;R;;;;2;N;;;;; 108A9;NABATAEAN NUMBER THREE;No;0;R;;;;3;N;;;;; 108AA;NABATAEAN NUMBER FOUR;No;0;R;;;;4;N;;;;; 108AB;NABATAEAN CRUCIFORM NUMBER FOUR;No;0;R;;;;4;N;;;;; 108AC;NABATAEAN NUMBER FIVE;No;0;R;;;;5;N;;;;; 108AD;NABATAEAN NUMBER TEN;No;0;R;;;;10;N;;;;; 108AE;NABATAEAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; 108AF;NABATAEAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 108E0;HATRAN LETTER ALEPH;Lo;0;R;;;;;N;;;;; 108E1;HATRAN LETTER BETH;Lo;0;R;;;;;N;;;;; 108E2;HATRAN LETTER GIMEL;Lo;0;R;;;;;N;;;;; 108E3;HATRAN LETTER DALETH-RESH;Lo;0;R;;;;;N;;;;; 108E4;HATRAN LETTER HE;Lo;0;R;;;;;N;;;;; 108E5;HATRAN LETTER WAW;Lo;0;R;;;;;N;;;;; 108E6;HATRAN LETTER ZAYN;Lo;0;R;;;;;N;;;;; 108E7;HATRAN LETTER HETH;Lo;0;R;;;;;N;;;;; 108E8;HATRAN LETTER TETH;Lo;0;R;;;;;N;;;;; 108E9;HATRAN LETTER YODH;Lo;0;R;;;;;N;;;;; 108EA;HATRAN LETTER KAPH;Lo;0;R;;;;;N;;;;; 108EB;HATRAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 108EC;HATRAN LETTER MEM;Lo;0;R;;;;;N;;;;; 108ED;HATRAN LETTER NUN;Lo;0;R;;;;;N;;;;; 108EE;HATRAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 108EF;HATRAN LETTER AYN;Lo;0;R;;;;;N;;;;; 108F0;HATRAN LETTER PE;Lo;0;R;;;;;N;;;;; 108F1;HATRAN LETTER SADHE;Lo;0;R;;;;;N;;;;; 108F2;HATRAN LETTER QOPH;Lo;0;R;;;;;N;;;;; 108F4;HATRAN LETTER SHIN;Lo;0;R;;;;;N;;;;; 108F5;HATRAN LETTER TAW;Lo;0;R;;;;;N;;;;; 108FB;HATRAN NUMBER ONE;No;0;R;;;;1;N;;;;; 108FC;HATRAN NUMBER FIVE;No;0;R;;;;5;N;;;;; 108FD;HATRAN NUMBER TEN;No;0;R;;;;10;N;;;;; 108FE;HATRAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; 108FF;HATRAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 10900;PHOENICIAN LETTER ALF;Lo;0;R;;;;;N;;;;; 10901;PHOENICIAN LETTER BET;Lo;0;R;;;;;N;;;;; 10902;PHOENICIAN LETTER GAML;Lo;0;R;;;;;N;;;;; 10903;PHOENICIAN LETTER DELT;Lo;0;R;;;;;N;;;;; 10904;PHOENICIAN LETTER HE;Lo;0;R;;;;;N;;;;; 10905;PHOENICIAN LETTER WAU;Lo;0;R;;;;;N;;;;; 10906;PHOENICIAN LETTER ZAI;Lo;0;R;;;;;N;;;;; 10907;PHOENICIAN LETTER HET;Lo;0;R;;;;;N;;;;; 10908;PHOENICIAN LETTER TET;Lo;0;R;;;;;N;;;;; 10909;PHOENICIAN LETTER YOD;Lo;0;R;;;;;N;;;;; 1090A;PHOENICIAN LETTER KAF;Lo;0;R;;;;;N;;;;; 1090B;PHOENICIAN LETTER LAMD;Lo;0;R;;;;;N;;;;; 1090C;PHOENICIAN LETTER MEM;Lo;0;R;;;;;N;;;;; 1090D;PHOENICIAN LETTER NUN;Lo;0;R;;;;;N;;;;; 1090E;PHOENICIAN LETTER SEMK;Lo;0;R;;;;;N;;;;; 1090F;PHOENICIAN LETTER AIN;Lo;0;R;;;;;N;;;;; 10910;PHOENICIAN LETTER PE;Lo;0;R;;;;;N;;;;; 10911;PHOENICIAN LETTER SADE;Lo;0;R;;;;;N;;;;; 10912;PHOENICIAN LETTER QOF;Lo;0;R;;;;;N;;;;; 10913;PHOENICIAN LETTER ROSH;Lo;0;R;;;;;N;;;;; 10914;PHOENICIAN LETTER SHIN;Lo;0;R;;;;;N;;;;; 10915;PHOENICIAN LETTER TAU;Lo;0;R;;;;;N;;;;; 10916;PHOENICIAN NUMBER ONE;No;0;R;;;;1;N;;;;; 10917;PHOENICIAN NUMBER TEN;No;0;R;;;;10;N;;;;; 10918;PHOENICIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10919;PHOENICIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 1091A;PHOENICIAN NUMBER TWO;No;0;R;;;;2;N;;;;; 1091B;PHOENICIAN NUMBER THREE;No;0;R;;;;3;N;;;;; 1091F;PHOENICIAN WORD SEPARATOR;Po;0;ON;;;;;N;;;;; 10920;LYDIAN LETTER A;Lo;0;R;;;;;N;;;;; 10921;LYDIAN LETTER B;Lo;0;R;;;;;N;;;;; 10922;LYDIAN LETTER G;Lo;0;R;;;;;N;;;;; 10923;LYDIAN LETTER D;Lo;0;R;;;;;N;;;;; 10924;LYDIAN LETTER E;Lo;0;R;;;;;N;;;;; 10925;LYDIAN LETTER V;Lo;0;R;;;;;N;;;;; 10926;LYDIAN LETTER I;Lo;0;R;;;;;N;;;;; 10927;LYDIAN LETTER Y;Lo;0;R;;;;;N;;;;; 10928;LYDIAN LETTER K;Lo;0;R;;;;;N;;;;; 10929;LYDIAN LETTER L;Lo;0;R;;;;;N;;;;; 1092A;LYDIAN LETTER M;Lo;0;R;;;;;N;;;;; 1092B;LYDIAN LETTER N;Lo;0;R;;;;;N;;;;; 1092C;LYDIAN LETTER O;Lo;0;R;;;;;N;;;;; 1092D;LYDIAN LETTER R;Lo;0;R;;;;;N;;;;; 1092E;LYDIAN LETTER SS;Lo;0;R;;;;;N;;;;; 1092F;LYDIAN LETTER T;Lo;0;R;;;;;N;;;;; 10930;LYDIAN LETTER U;Lo;0;R;;;;;N;;;;; 10931;LYDIAN LETTER F;Lo;0;R;;;;;N;;;;; 10932;LYDIAN LETTER Q;Lo;0;R;;;;;N;;;;; 10933;LYDIAN LETTER S;Lo;0;R;;;;;N;;;;; 10934;LYDIAN LETTER TT;Lo;0;R;;;;;N;;;;; 10935;LYDIAN LETTER AN;Lo;0;R;;;;;N;;;;; 10936;LYDIAN LETTER EN;Lo;0;R;;;;;N;;;;; 10937;LYDIAN LETTER LY;Lo;0;R;;;;;N;;;;; 10938;LYDIAN LETTER NN;Lo;0;R;;;;;N;;;;; 10939;LYDIAN LETTER C;Lo;0;R;;;;;N;;;;; 1093F;LYDIAN TRIANGULAR MARK;Po;0;R;;;;;N;;;;; 10980;MEROITIC HIEROGLYPHIC LETTER A;Lo;0;R;;;;;N;;;;; 10981;MEROITIC HIEROGLYPHIC LETTER E;Lo;0;R;;;;;N;;;;; 10982;MEROITIC HIEROGLYPHIC LETTER I;Lo;0;R;;;;;N;;;;; 10983;MEROITIC HIEROGLYPHIC LETTER O;Lo;0;R;;;;;N;;;;; 10984;MEROITIC HIEROGLYPHIC LETTER YA;Lo;0;R;;;;;N;;;;; 10985;MEROITIC HIEROGLYPHIC LETTER WA;Lo;0;R;;;;;N;;;;; 10986;MEROITIC HIEROGLYPHIC LETTER BA;Lo;0;R;;;;;N;;;;; 10987;MEROITIC HIEROGLYPHIC LETTER BA-2;Lo;0;R;;;;;N;;;;; 10988;MEROITIC HIEROGLYPHIC LETTER PA;Lo;0;R;;;;;N;;;;; 10989;MEROITIC HIEROGLYPHIC LETTER MA;Lo;0;R;;;;;N;;;;; 1098A;MEROITIC HIEROGLYPHIC LETTER NA;Lo;0;R;;;;;N;;;;; 1098B;MEROITIC HIEROGLYPHIC LETTER NA-2;Lo;0;R;;;;;N;;;;; 1098C;MEROITIC HIEROGLYPHIC LETTER NE;Lo;0;R;;;;;N;;;;; 1098D;MEROITIC HIEROGLYPHIC LETTER NE-2;Lo;0;R;;;;;N;;;;; 1098E;MEROITIC HIEROGLYPHIC LETTER RA;Lo;0;R;;;;;N;;;;; 1098F;MEROITIC HIEROGLYPHIC LETTER RA-2;Lo;0;R;;;;;N;;;;; 10990;MEROITIC HIEROGLYPHIC LETTER LA;Lo;0;R;;;;;N;;;;; 10991;MEROITIC HIEROGLYPHIC LETTER KHA;Lo;0;R;;;;;N;;;;; 10992;MEROITIC HIEROGLYPHIC LETTER HHA;Lo;0;R;;;;;N;;;;; 10993;MEROITIC HIEROGLYPHIC LETTER SA;Lo;0;R;;;;;N;;;;; 10994;MEROITIC HIEROGLYPHIC LETTER SA-2;Lo;0;R;;;;;N;;;;; 10995;MEROITIC HIEROGLYPHIC LETTER SE;Lo;0;R;;;;;N;;;;; 10996;MEROITIC HIEROGLYPHIC LETTER KA;Lo;0;R;;;;;N;;;;; 10997;MEROITIC HIEROGLYPHIC LETTER QA;Lo;0;R;;;;;N;;;;; 10998;MEROITIC HIEROGLYPHIC LETTER TA;Lo;0;R;;;;;N;;;;; 10999;MEROITIC HIEROGLYPHIC LETTER TA-2;Lo;0;R;;;;;N;;;;; 1099A;MEROITIC HIEROGLYPHIC LETTER TE;Lo;0;R;;;;;N;;;;; 1099B;MEROITIC HIEROGLYPHIC LETTER TE-2;Lo;0;R;;;;;N;;;;; 1099C;MEROITIC HIEROGLYPHIC LETTER TO;Lo;0;R;;;;;N;;;;; 1099D;MEROITIC HIEROGLYPHIC LETTER DA;Lo;0;R;;;;;N;;;;; 1099E;MEROITIC HIEROGLYPHIC SYMBOL VIDJ;Lo;0;R;;;;;N;;;;; 1099F;MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2;Lo;0;R;;;;;N;;;;; 109A0;MEROITIC CURSIVE LETTER A;Lo;0;R;;;;;N;;;;; 109A1;MEROITIC CURSIVE LETTER E;Lo;0;R;;;;;N;;;;; 109A2;MEROITIC CURSIVE LETTER I;Lo;0;R;;;;;N;;;;; 109A3;MEROITIC CURSIVE LETTER O;Lo;0;R;;;;;N;;;;; 109A4;MEROITIC CURSIVE LETTER YA;Lo;0;R;;;;;N;;;;; 109A5;MEROITIC CURSIVE LETTER WA;Lo;0;R;;;;;N;;;;; 109A6;MEROITIC CURSIVE LETTER BA;Lo;0;R;;;;;N;;;;; 109A7;MEROITIC CURSIVE LETTER PA;Lo;0;R;;;;;N;;;;; 109A8;MEROITIC CURSIVE LETTER MA;Lo;0;R;;;;;N;;;;; 109A9;MEROITIC CURSIVE LETTER NA;Lo;0;R;;;;;N;;;;; 109AA;MEROITIC CURSIVE LETTER NE;Lo;0;R;;;;;N;;;;; 109AB;MEROITIC CURSIVE LETTER RA;Lo;0;R;;;;;N;;;;; 109AC;MEROITIC CURSIVE LETTER LA;Lo;0;R;;;;;N;;;;; 109AD;MEROITIC CURSIVE LETTER KHA;Lo;0;R;;;;;N;;;;; 109AE;MEROITIC CURSIVE LETTER HHA;Lo;0;R;;;;;N;;;;; 109AF;MEROITIC CURSIVE LETTER SA;Lo;0;R;;;;;N;;;;; 109B0;MEROITIC CURSIVE LETTER ARCHAIC SA;Lo;0;R;;;;;N;;;;; 109B1;MEROITIC CURSIVE LETTER SE;Lo;0;R;;;;;N;;;;; 109B2;MEROITIC CURSIVE LETTER KA;Lo;0;R;;;;;N;;;;; 109B3;MEROITIC CURSIVE LETTER QA;Lo;0;R;;;;;N;;;;; 109B4;MEROITIC CURSIVE LETTER TA;Lo;0;R;;;;;N;;;;; 109B5;MEROITIC CURSIVE LETTER TE;Lo;0;R;;;;;N;;;;; 109B6;MEROITIC CURSIVE LETTER TO;Lo;0;R;;;;;N;;;;; 109B7;MEROITIC CURSIVE LETTER DA;Lo;0;R;;;;;N;;;;; 109BC;MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS;No;0;R;;;;11/12;N;;;;; 109BD;MEROITIC CURSIVE FRACTION ONE HALF;No;0;R;;;;1/2;N;;;;; 109BE;MEROITIC CURSIVE LOGOGRAM RMT;Lo;0;R;;;;;N;;;;; 109BF;MEROITIC CURSIVE LOGOGRAM IMN;Lo;0;R;;;;;N;;;;; 109C0;MEROITIC CURSIVE NUMBER ONE;No;0;R;;;;1;N;;;;; 109C1;MEROITIC CURSIVE NUMBER TWO;No;0;R;;;;2;N;;;;; 109C2;MEROITIC CURSIVE NUMBER THREE;No;0;R;;;;3;N;;;;; 109C3;MEROITIC CURSIVE NUMBER FOUR;No;0;R;;;;4;N;;;;; 109C4;MEROITIC CURSIVE NUMBER FIVE;No;0;R;;;;5;N;;;;; 109C5;MEROITIC CURSIVE NUMBER SIX;No;0;R;;;;6;N;;;;; 109C6;MEROITIC CURSIVE NUMBER SEVEN;No;0;R;;;;7;N;;;;; 109C7;MEROITIC CURSIVE NUMBER EIGHT;No;0;R;;;;8;N;;;;; 109C8;MEROITIC CURSIVE NUMBER NINE;No;0;R;;;;9;N;;;;; 109C9;MEROITIC CURSIVE NUMBER TEN;No;0;R;;;;10;N;;;;; 109CA;MEROITIC CURSIVE NUMBER TWENTY;No;0;R;;;;20;N;;;;; 109CB;MEROITIC CURSIVE NUMBER THIRTY;No;0;R;;;;30;N;;;;; 109CC;MEROITIC CURSIVE NUMBER FORTY;No;0;R;;;;40;N;;;;; 109CD;MEROITIC CURSIVE NUMBER FIFTY;No;0;R;;;;50;N;;;;; 109CE;MEROITIC CURSIVE NUMBER SIXTY;No;0;R;;;;60;N;;;;; 109CF;MEROITIC CURSIVE NUMBER SEVENTY;No;0;R;;;;70;N;;;;; 109D2;MEROITIC CURSIVE NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 109D3;MEROITIC CURSIVE NUMBER TWO HUNDRED;No;0;R;;;;200;N;;;;; 109D4;MEROITIC CURSIVE NUMBER THREE HUNDRED;No;0;R;;;;300;N;;;;; 109D5;MEROITIC CURSIVE NUMBER FOUR HUNDRED;No;0;R;;;;400;N;;;;; 109D6;MEROITIC CURSIVE NUMBER FIVE HUNDRED;No;0;R;;;;500;N;;;;; 109D7;MEROITIC CURSIVE NUMBER SIX HUNDRED;No;0;R;;;;600;N;;;;; 109D8;MEROITIC CURSIVE NUMBER SEVEN HUNDRED;No;0;R;;;;700;N;;;;; 109D9;MEROITIC CURSIVE NUMBER EIGHT HUNDRED;No;0;R;;;;800;N;;;;; 109DA;MEROITIC CURSIVE NUMBER NINE HUNDRED;No;0;R;;;;900;N;;;;; 109DB;MEROITIC CURSIVE NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;; 109DC;MEROITIC CURSIVE NUMBER TWO THOUSAND;No;0;R;;;;2000;N;;;;; 109DD;MEROITIC CURSIVE NUMBER THREE THOUSAND;No;0;R;;;;3000;N;;;;; 109DE;MEROITIC CURSIVE NUMBER FOUR THOUSAND;No;0;R;;;;4000;N;;;;; 109DF;MEROITIC CURSIVE NUMBER FIVE THOUSAND;No;0;R;;;;5000;N;;;;; 109E0;MEROITIC CURSIVE NUMBER SIX THOUSAND;No;0;R;;;;6000;N;;;;; 109E1;MEROITIC CURSIVE NUMBER SEVEN THOUSAND;No;0;R;;;;7000;N;;;;; 109E2;MEROITIC CURSIVE NUMBER EIGHT THOUSAND;No;0;R;;;;8000;N;;;;; 109E3;MEROITIC CURSIVE NUMBER NINE THOUSAND;No;0;R;;;;9000;N;;;;; 109E4;MEROITIC CURSIVE NUMBER TEN THOUSAND;No;0;R;;;;10000;N;;;;; 109E5;MEROITIC CURSIVE NUMBER TWENTY THOUSAND;No;0;R;;;;20000;N;;;;; 109E6;MEROITIC CURSIVE NUMBER THIRTY THOUSAND;No;0;R;;;;30000;N;;;;; 109E7;MEROITIC CURSIVE NUMBER FORTY THOUSAND;No;0;R;;;;40000;N;;;;; 109E8;MEROITIC CURSIVE NUMBER FIFTY THOUSAND;No;0;R;;;;50000;N;;;;; 109E9;MEROITIC CURSIVE NUMBER SIXTY THOUSAND;No;0;R;;;;60000;N;;;;; 109EA;MEROITIC CURSIVE NUMBER SEVENTY THOUSAND;No;0;R;;;;70000;N;;;;; 109EB;MEROITIC CURSIVE NUMBER EIGHTY THOUSAND;No;0;R;;;;80000;N;;;;; 109EC;MEROITIC CURSIVE NUMBER NINETY THOUSAND;No;0;R;;;;90000;N;;;;; 109ED;MEROITIC CURSIVE NUMBER ONE HUNDRED THOUSAND;No;0;R;;;;100000;N;;;;; 109EE;MEROITIC CURSIVE NUMBER TWO HUNDRED THOUSAND;No;0;R;;;;200000;N;;;;; 109EF;MEROITIC CURSIVE NUMBER THREE HUNDRED THOUSAND;No;0;R;;;;300000;N;;;;; 109F0;MEROITIC CURSIVE NUMBER FOUR HUNDRED THOUSAND;No;0;R;;;;400000;N;;;;; 109F1;MEROITIC CURSIVE NUMBER FIVE HUNDRED THOUSAND;No;0;R;;;;500000;N;;;;; 109F2;MEROITIC CURSIVE NUMBER SIX HUNDRED THOUSAND;No;0;R;;;;600000;N;;;;; 109F3;MEROITIC CURSIVE NUMBER SEVEN HUNDRED THOUSAND;No;0;R;;;;700000;N;;;;; 109F4;MEROITIC CURSIVE NUMBER EIGHT HUNDRED THOUSAND;No;0;R;;;;800000;N;;;;; 109F5;MEROITIC CURSIVE NUMBER NINE HUNDRED THOUSAND;No;0;R;;;;900000;N;;;;; 109F6;MEROITIC CURSIVE FRACTION ONE TWELFTH;No;0;R;;;;1/12;N;;;;; 109F7;MEROITIC CURSIVE FRACTION TWO TWELFTHS;No;0;R;;;;2/12;N;;;;; 109F8;MEROITIC CURSIVE FRACTION THREE TWELFTHS;No;0;R;;;;3/12;N;;;;; 109F9;MEROITIC CURSIVE FRACTION FOUR TWELFTHS;No;0;R;;;;4/12;N;;;;; 109FA;MEROITIC CURSIVE FRACTION FIVE TWELFTHS;No;0;R;;;;5/12;N;;;;; 109FB;MEROITIC CURSIVE FRACTION SIX TWELFTHS;No;0;R;;;;6/12;N;;;;; 109FC;MEROITIC CURSIVE FRACTION SEVEN TWELFTHS;No;0;R;;;;7/12;N;;;;; 109FD;MEROITIC CURSIVE FRACTION EIGHT TWELFTHS;No;0;R;;;;8/12;N;;;;; 109FE;MEROITIC CURSIVE FRACTION NINE TWELFTHS;No;0;R;;;;9/12;N;;;;; 109FF;MEROITIC CURSIVE FRACTION TEN TWELFTHS;No;0;R;;;;10/12;N;;;;; 10A00;KHAROSHTHI LETTER A;Lo;0;R;;;;;N;;;;; 10A01;KHAROSHTHI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 10A02;KHAROSHTHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 10A03;KHAROSHTHI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 10A05;KHAROSHTHI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 10A06;KHAROSHTHI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 10A0C;KHAROSHTHI VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;; 10A0D;KHAROSHTHI SIGN DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;; 10A0E;KHAROSHTHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 10A0F;KHAROSHTHI SIGN VISARGA;Mn;230;NSM;;;;;N;;;;; 10A10;KHAROSHTHI LETTER KA;Lo;0;R;;;;;N;;;;; 10A11;KHAROSHTHI LETTER KHA;Lo;0;R;;;;;N;;;;; 10A12;KHAROSHTHI LETTER GA;Lo;0;R;;;;;N;;;;; 10A13;KHAROSHTHI LETTER GHA;Lo;0;R;;;;;N;;;;; 10A15;KHAROSHTHI LETTER CA;Lo;0;R;;;;;N;;;;; 10A16;KHAROSHTHI LETTER CHA;Lo;0;R;;;;;N;;;;; 10A17;KHAROSHTHI LETTER JA;Lo;0;R;;;;;N;;;;; 10A19;KHAROSHTHI LETTER NYA;Lo;0;R;;;;;N;;;;; 10A1A;KHAROSHTHI LETTER TTA;Lo;0;R;;;;;N;;;;; 10A1B;KHAROSHTHI LETTER TTHA;Lo;0;R;;;;;N;;;;; 10A1C;KHAROSHTHI LETTER DDA;Lo;0;R;;;;;N;;;;; 10A1D;KHAROSHTHI LETTER DDHA;Lo;0;R;;;;;N;;;;; 10A1E;KHAROSHTHI LETTER NNA;Lo;0;R;;;;;N;;;;; 10A1F;KHAROSHTHI LETTER TA;Lo;0;R;;;;;N;;;;; 10A20;KHAROSHTHI LETTER THA;Lo;0;R;;;;;N;;;;; 10A21;KHAROSHTHI LETTER DA;Lo;0;R;;;;;N;;;;; 10A22;KHAROSHTHI LETTER DHA;Lo;0;R;;;;;N;;;;; 10A23;KHAROSHTHI LETTER NA;Lo;0;R;;;;;N;;;;; 10A24;KHAROSHTHI LETTER PA;Lo;0;R;;;;;N;;;;; 10A25;KHAROSHTHI LETTER PHA;Lo;0;R;;;;;N;;;;; 10A26;KHAROSHTHI LETTER BA;Lo;0;R;;;;;N;;;;; 10A27;KHAROSHTHI LETTER BHA;Lo;0;R;;;;;N;;;;; 10A28;KHAROSHTHI LETTER MA;Lo;0;R;;;;;N;;;;; 10A29;KHAROSHTHI LETTER YA;Lo;0;R;;;;;N;;;;; 10A2A;KHAROSHTHI LETTER RA;Lo;0;R;;;;;N;;;;; 10A2B;KHAROSHTHI LETTER LA;Lo;0;R;;;;;N;;;;; 10A2C;KHAROSHTHI LETTER VA;Lo;0;R;;;;;N;;;;; 10A2D;KHAROSHTHI LETTER SHA;Lo;0;R;;;;;N;;;;; 10A2E;KHAROSHTHI LETTER SSA;Lo;0;R;;;;;N;;;;; 10A2F;KHAROSHTHI LETTER SA;Lo;0;R;;;;;N;;;;; 10A30;KHAROSHTHI LETTER ZA;Lo;0;R;;;;;N;;;;; 10A31;KHAROSHTHI LETTER HA;Lo;0;R;;;;;N;;;;; 10A32;KHAROSHTHI LETTER KKA;Lo;0;R;;;;;N;;;;; 10A33;KHAROSHTHI LETTER TTTHA;Lo;0;R;;;;;N;;;;; 10A34;KHAROSHTHI LETTER TTTA;Lo;0;R;;;;;N;;;;; 10A35;KHAROSHTHI LETTER VHA;Lo;0;R;;;;;N;;;;; 10A38;KHAROSHTHI SIGN BAR ABOVE;Mn;230;NSM;;;;;N;;;;; 10A39;KHAROSHTHI SIGN CAUDA;Mn;1;NSM;;;;;N;;;;; 10A3A;KHAROSHTHI SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;; 10A3F;KHAROSHTHI VIRAMA;Mn;9;NSM;;;;;N;;;;; 10A40;KHAROSHTHI DIGIT ONE;No;0;R;;;1;1;N;;;;; 10A41;KHAROSHTHI DIGIT TWO;No;0;R;;;2;2;N;;;;; 10A42;KHAROSHTHI DIGIT THREE;No;0;R;;;3;3;N;;;;; 10A43;KHAROSHTHI DIGIT FOUR;No;0;R;;;4;4;N;;;;; 10A44;KHAROSHTHI NUMBER TEN;No;0;R;;;;10;N;;;;; 10A45;KHAROSHTHI NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10A46;KHAROSHTHI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 10A47;KHAROSHTHI NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;; 10A48;KHAROSHTHI FRACTION ONE HALF;No;0;R;;;;1/2;N;;;;; 10A50;KHAROSHTHI PUNCTUATION DOT;Po;0;R;;;;;N;;;;; 10A51;KHAROSHTHI PUNCTUATION SMALL CIRCLE;Po;0;R;;;;;N;;;;; 10A52;KHAROSHTHI PUNCTUATION CIRCLE;Po;0;R;;;;;N;;;;; 10A53;KHAROSHTHI PUNCTUATION CRESCENT BAR;Po;0;R;;;;;N;;;;; 10A54;KHAROSHTHI PUNCTUATION MANGALAM;Po;0;R;;;;;N;;;;; 10A55;KHAROSHTHI PUNCTUATION LOTUS;Po;0;R;;;;;N;;;;; 10A56;KHAROSHTHI PUNCTUATION DANDA;Po;0;R;;;;;N;;;;; 10A57;KHAROSHTHI PUNCTUATION DOUBLE DANDA;Po;0;R;;;;;N;;;;; 10A58;KHAROSHTHI PUNCTUATION LINES;Po;0;R;;;;;N;;;;; 10A60;OLD SOUTH ARABIAN LETTER HE;Lo;0;R;;;;;N;;;;; 10A61;OLD SOUTH ARABIAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 10A62;OLD SOUTH ARABIAN LETTER HETH;Lo;0;R;;;;;N;;;;; 10A63;OLD SOUTH ARABIAN LETTER MEM;Lo;0;R;;;;;N;;;;; 10A64;OLD SOUTH ARABIAN LETTER QOPH;Lo;0;R;;;;;N;;;;; 10A65;OLD SOUTH ARABIAN LETTER WAW;Lo;0;R;;;;;N;;;;; 10A66;OLD SOUTH ARABIAN LETTER SHIN;Lo;0;R;;;;;N;;;;; 10A67;OLD SOUTH ARABIAN LETTER RESH;Lo;0;R;;;;;N;;;;; 10A68;OLD SOUTH ARABIAN LETTER BETH;Lo;0;R;;;;;N;;;;; 10A69;OLD SOUTH ARABIAN LETTER TAW;Lo;0;R;;;;;N;;;;; 10A6A;OLD SOUTH ARABIAN LETTER SAT;Lo;0;R;;;;;N;;;;; 10A6B;OLD SOUTH ARABIAN LETTER KAPH;Lo;0;R;;;;;N;;;;; 10A6C;OLD SOUTH ARABIAN LETTER NUN;Lo;0;R;;;;;N;;;;; 10A6D;OLD SOUTH ARABIAN LETTER KHETH;Lo;0;R;;;;;N;;;;; 10A6E;OLD SOUTH ARABIAN LETTER SADHE;Lo;0;R;;;;;N;;;;; 10A6F;OLD SOUTH ARABIAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10A70;OLD SOUTH ARABIAN LETTER FE;Lo;0;R;;;;;N;;;;; 10A71;OLD SOUTH ARABIAN LETTER ALEF;Lo;0;R;;;;;N;;;;; 10A72;OLD SOUTH ARABIAN LETTER AYN;Lo;0;R;;;;;N;;;;; 10A73;OLD SOUTH ARABIAN LETTER DHADHE;Lo;0;R;;;;;N;;;;; 10A74;OLD SOUTH ARABIAN LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10A75;OLD SOUTH ARABIAN LETTER DALETH;Lo;0;R;;;;;N;;;;; 10A76;OLD SOUTH ARABIAN LETTER GHAYN;Lo;0;R;;;;;N;;;;; 10A77;OLD SOUTH ARABIAN LETTER TETH;Lo;0;R;;;;;N;;;;; 10A78;OLD SOUTH ARABIAN LETTER ZAYN;Lo;0;R;;;;;N;;;;; 10A79;OLD SOUTH ARABIAN LETTER DHALETH;Lo;0;R;;;;;N;;;;; 10A7A;OLD SOUTH ARABIAN LETTER YODH;Lo;0;R;;;;;N;;;;; 10A7B;OLD SOUTH ARABIAN LETTER THAW;Lo;0;R;;;;;N;;;;; 10A7C;OLD SOUTH ARABIAN LETTER THETH;Lo;0;R;;;;;N;;;;; 10A7D;OLD SOUTH ARABIAN NUMBER ONE;No;0;R;;;;1;N;;;;; 10A7E;OLD SOUTH ARABIAN NUMBER FIFTY;No;0;R;;;;50;N;;;;; 10A7F;OLD SOUTH ARABIAN NUMERIC INDICATOR;Po;0;R;;;;;N;;;;; 10A80;OLD NORTH ARABIAN LETTER HEH;Lo;0;R;;;;;N;;;;; 10A81;OLD NORTH ARABIAN LETTER LAM;Lo;0;R;;;;;N;;;;; 10A82;OLD NORTH ARABIAN LETTER HAH;Lo;0;R;;;;;N;;;;; 10A83;OLD NORTH ARABIAN LETTER MEEM;Lo;0;R;;;;;N;;;;; 10A84;OLD NORTH ARABIAN LETTER QAF;Lo;0;R;;;;;N;;;;; 10A85;OLD NORTH ARABIAN LETTER WAW;Lo;0;R;;;;;N;;;;; 10A86;OLD NORTH ARABIAN LETTER ES-2;Lo;0;R;;;;;N;;;;; 10A87;OLD NORTH ARABIAN LETTER REH;Lo;0;R;;;;;N;;;;; 10A88;OLD NORTH ARABIAN LETTER BEH;Lo;0;R;;;;;N;;;;; 10A89;OLD NORTH ARABIAN LETTER TEH;Lo;0;R;;;;;N;;;;; 10A8A;OLD NORTH ARABIAN LETTER ES-1;Lo;0;R;;;;;N;;;;; 10A8B;OLD NORTH ARABIAN LETTER KAF;Lo;0;R;;;;;N;;;;; 10A8C;OLD NORTH ARABIAN LETTER NOON;Lo;0;R;;;;;N;;;;; 10A8D;OLD NORTH ARABIAN LETTER KHAH;Lo;0;R;;;;;N;;;;; 10A8E;OLD NORTH ARABIAN LETTER SAD;Lo;0;R;;;;;N;;;;; 10A8F;OLD NORTH ARABIAN LETTER ES-3;Lo;0;R;;;;;N;;;;; 10A90;OLD NORTH ARABIAN LETTER FEH;Lo;0;R;;;;;N;;;;; 10A91;OLD NORTH ARABIAN LETTER ALEF;Lo;0;R;;;;;N;;;;; 10A92;OLD NORTH ARABIAN LETTER AIN;Lo;0;R;;;;;N;;;;; 10A93;OLD NORTH ARABIAN LETTER DAD;Lo;0;R;;;;;N;;;;; 10A94;OLD NORTH ARABIAN LETTER GEEM;Lo;0;R;;;;;N;;;;; 10A95;OLD NORTH ARABIAN LETTER DAL;Lo;0;R;;;;;N;;;;; 10A96;OLD NORTH ARABIAN LETTER GHAIN;Lo;0;R;;;;;N;;;;; 10A97;OLD NORTH ARABIAN LETTER TAH;Lo;0;R;;;;;N;;;;; 10A98;OLD NORTH ARABIAN LETTER ZAIN;Lo;0;R;;;;;N;;;;; 10A99;OLD NORTH ARABIAN LETTER THAL;Lo;0;R;;;;;N;;;;; 10A9A;OLD NORTH ARABIAN LETTER YEH;Lo;0;R;;;;;N;;;;; 10A9B;OLD NORTH ARABIAN LETTER THEH;Lo;0;R;;;;;N;;;;; 10A9C;OLD NORTH ARABIAN LETTER ZAH;Lo;0;R;;;;;N;;;;; 10A9D;OLD NORTH ARABIAN NUMBER ONE;No;0;R;;;;1;N;;;;; 10A9E;OLD NORTH ARABIAN NUMBER TEN;No;0;R;;;;10;N;;;;; 10A9F;OLD NORTH ARABIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10AC0;MANICHAEAN LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10AC1;MANICHAEAN LETTER BETH;Lo;0;R;;;;;N;;;;; 10AC2;MANICHAEAN LETTER BHETH;Lo;0;R;;;;;N;;;;; 10AC3;MANICHAEAN LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10AC4;MANICHAEAN LETTER GHIMEL;Lo;0;R;;;;;N;;;;; 10AC5;MANICHAEAN LETTER DALETH;Lo;0;R;;;;;N;;;;; 10AC6;MANICHAEAN LETTER HE;Lo;0;R;;;;;N;;;;; 10AC7;MANICHAEAN LETTER WAW;Lo;0;R;;;;;N;;;;; 10AC8;MANICHAEAN SIGN UD;So;0;R;;;;;N;;;;; 10AC9;MANICHAEAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 10ACA;MANICHAEAN LETTER ZHAYIN;Lo;0;R;;;;;N;;;;; 10ACB;MANICHAEAN LETTER JAYIN;Lo;0;R;;;;;N;;;;; 10ACC;MANICHAEAN LETTER JHAYIN;Lo;0;R;;;;;N;;;;; 10ACD;MANICHAEAN LETTER HETH;Lo;0;R;;;;;N;;;;; 10ACE;MANICHAEAN LETTER TETH;Lo;0;R;;;;;N;;;;; 10ACF;MANICHAEAN LETTER YODH;Lo;0;R;;;;;N;;;;; 10AD0;MANICHAEAN LETTER KAPH;Lo;0;R;;;;;N;;;;; 10AD1;MANICHAEAN LETTER XAPH;Lo;0;R;;;;;N;;;;; 10AD2;MANICHAEAN LETTER KHAPH;Lo;0;R;;;;;N;;;;; 10AD3;MANICHAEAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 10AD4;MANICHAEAN LETTER DHAMEDH;Lo;0;R;;;;;N;;;;; 10AD5;MANICHAEAN LETTER THAMEDH;Lo;0;R;;;;;N;;;;; 10AD6;MANICHAEAN LETTER MEM;Lo;0;R;;;;;N;;;;; 10AD7;MANICHAEAN LETTER NUN;Lo;0;R;;;;;N;;;;; 10AD8;MANICHAEAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10AD9;MANICHAEAN LETTER AYIN;Lo;0;R;;;;;N;;;;; 10ADA;MANICHAEAN LETTER AAYIN;Lo;0;R;;;;;N;;;;; 10ADB;MANICHAEAN LETTER PE;Lo;0;R;;;;;N;;;;; 10ADC;MANICHAEAN LETTER FE;Lo;0;R;;;;;N;;;;; 10ADD;MANICHAEAN LETTER SADHE;Lo;0;R;;;;;N;;;;; 10ADE;MANICHAEAN LETTER QOPH;Lo;0;R;;;;;N;;;;; 10ADF;MANICHAEAN LETTER XOPH;Lo;0;R;;;;;N;;;;; 10AE0;MANICHAEAN LETTER QHOPH;Lo;0;R;;;;;N;;;;; 10AE1;MANICHAEAN LETTER RESH;Lo;0;R;;;;;N;;;;; 10AE2;MANICHAEAN LETTER SHIN;Lo;0;R;;;;;N;;;;; 10AE3;MANICHAEAN LETTER SSHIN;Lo;0;R;;;;;N;;;;; 10AE4;MANICHAEAN LETTER TAW;Lo;0;R;;;;;N;;;;; 10AE5;MANICHAEAN ABBREVIATION MARK ABOVE;Mn;230;NSM;;;;;N;;;;; 10AE6;MANICHAEAN ABBREVIATION MARK BELOW;Mn;220;NSM;;;;;N;;;;; 10AEB;MANICHAEAN NUMBER ONE;No;0;R;;;;1;N;;;;; 10AEC;MANICHAEAN NUMBER FIVE;No;0;R;;;;5;N;;;;; 10AED;MANICHAEAN NUMBER TEN;No;0;R;;;;10;N;;;;; 10AEE;MANICHAEAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10AEF;MANICHAEAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 10AF0;MANICHAEAN PUNCTUATION STAR;Po;0;R;;;;;N;;;;; 10AF1;MANICHAEAN PUNCTUATION FLEURON;Po;0;R;;;;;N;;;;; 10AF2;MANICHAEAN PUNCTUATION DOUBLE DOT WITHIN DOT;Po;0;R;;;;;N;;;;; 10AF3;MANICHAEAN PUNCTUATION DOT WITHIN DOT;Po;0;R;;;;;N;;;;; 10AF4;MANICHAEAN PUNCTUATION DOT;Po;0;R;;;;;N;;;;; 10AF5;MANICHAEAN PUNCTUATION TWO DOTS;Po;0;R;;;;;N;;;;; 10AF6;MANICHAEAN PUNCTUATION LINE FILLER;Po;0;R;;;;;N;;;;; 10B00;AVESTAN LETTER A;Lo;0;R;;;;;N;;;;; 10B01;AVESTAN LETTER AA;Lo;0;R;;;;;N;;;;; 10B02;AVESTAN LETTER AO;Lo;0;R;;;;;N;;;;; 10B03;AVESTAN LETTER AAO;Lo;0;R;;;;;N;;;;; 10B04;AVESTAN LETTER AN;Lo;0;R;;;;;N;;;;; 10B05;AVESTAN LETTER AAN;Lo;0;R;;;;;N;;;;; 10B06;AVESTAN LETTER AE;Lo;0;R;;;;;N;;;;; 10B07;AVESTAN LETTER AEE;Lo;0;R;;;;;N;;;;; 10B08;AVESTAN LETTER E;Lo;0;R;;;;;N;;;;; 10B09;AVESTAN LETTER EE;Lo;0;R;;;;;N;;;;; 10B0A;AVESTAN LETTER O;Lo;0;R;;;;;N;;;;; 10B0B;AVESTAN LETTER OO;Lo;0;R;;;;;N;;;;; 10B0C;AVESTAN LETTER I;Lo;0;R;;;;;N;;;;; 10B0D;AVESTAN LETTER II;Lo;0;R;;;;;N;;;;; 10B0E;AVESTAN LETTER U;Lo;0;R;;;;;N;;;;; 10B0F;AVESTAN LETTER UU;Lo;0;R;;;;;N;;;;; 10B10;AVESTAN LETTER KE;Lo;0;R;;;;;N;;;;; 10B11;AVESTAN LETTER XE;Lo;0;R;;;;;N;;;;; 10B12;AVESTAN LETTER XYE;Lo;0;R;;;;;N;;;;; 10B13;AVESTAN LETTER XVE;Lo;0;R;;;;;N;;;;; 10B14;AVESTAN LETTER GE;Lo;0;R;;;;;N;;;;; 10B15;AVESTAN LETTER GGE;Lo;0;R;;;;;N;;;;; 10B16;AVESTAN LETTER GHE;Lo;0;R;;;;;N;;;;; 10B17;AVESTAN LETTER CE;Lo;0;R;;;;;N;;;;; 10B18;AVESTAN LETTER JE;Lo;0;R;;;;;N;;;;; 10B19;AVESTAN LETTER TE;Lo;0;R;;;;;N;;;;; 10B1A;AVESTAN LETTER THE;Lo;0;R;;;;;N;;;;; 10B1B;AVESTAN LETTER DE;Lo;0;R;;;;;N;;;;; 10B1C;AVESTAN LETTER DHE;Lo;0;R;;;;;N;;;;; 10B1D;AVESTAN LETTER TTE;Lo;0;R;;;;;N;;;;; 10B1E;AVESTAN LETTER PE;Lo;0;R;;;;;N;;;;; 10B1F;AVESTAN LETTER FE;Lo;0;R;;;;;N;;;;; 10B20;AVESTAN LETTER BE;Lo;0;R;;;;;N;;;;; 10B21;AVESTAN LETTER BHE;Lo;0;R;;;;;N;;;;; 10B22;AVESTAN LETTER NGE;Lo;0;R;;;;;N;;;;; 10B23;AVESTAN LETTER NGYE;Lo;0;R;;;;;N;;;;; 10B24;AVESTAN LETTER NGVE;Lo;0;R;;;;;N;;;;; 10B25;AVESTAN LETTER NE;Lo;0;R;;;;;N;;;;; 10B26;AVESTAN LETTER NYE;Lo;0;R;;;;;N;;;;; 10B27;AVESTAN LETTER NNE;Lo;0;R;;;;;N;;;;; 10B28;AVESTAN LETTER ME;Lo;0;R;;;;;N;;;;; 10B29;AVESTAN LETTER HME;Lo;0;R;;;;;N;;;;; 10B2A;AVESTAN LETTER YYE;Lo;0;R;;;;;N;;;;; 10B2B;AVESTAN LETTER YE;Lo;0;R;;;;;N;;;;; 10B2C;AVESTAN LETTER VE;Lo;0;R;;;;;N;;;;; 10B2D;AVESTAN LETTER RE;Lo;0;R;;;;;N;;;;; 10B2E;AVESTAN LETTER LE;Lo;0;R;;;;;N;;;;; 10B2F;AVESTAN LETTER SE;Lo;0;R;;;;;N;;;;; 10B30;AVESTAN LETTER ZE;Lo;0;R;;;;;N;;;;; 10B31;AVESTAN LETTER SHE;Lo;0;R;;;;;N;;;;; 10B32;AVESTAN LETTER ZHE;Lo;0;R;;;;;N;;;;; 10B33;AVESTAN LETTER SHYE;Lo;0;R;;;;;N;;;;; 10B34;AVESTAN LETTER SSHE;Lo;0;R;;;;;N;;;;; 10B35;AVESTAN LETTER HE;Lo;0;R;;;;;N;;;;; 10B39;AVESTAN ABBREVIATION MARK;Po;0;ON;;;;;N;;;;; 10B3A;TINY TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 10B3B;SMALL TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 10B3C;LARGE TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 10B3D;LARGE ONE DOT OVER TWO DOTS PUNCTUATION;Po;0;ON;;;;;N;;;;; 10B3E;LARGE TWO RINGS OVER ONE RING PUNCTUATION;Po;0;ON;;;;;N;;;;; 10B3F;LARGE ONE RING OVER TWO RINGS PUNCTUATION;Po;0;ON;;;;;N;;;;; 10B40;INSCRIPTIONAL PARTHIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10B41;INSCRIPTIONAL PARTHIAN LETTER BETH;Lo;0;R;;;;;N;;;;; 10B42;INSCRIPTIONAL PARTHIAN LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10B43;INSCRIPTIONAL PARTHIAN LETTER DALETH;Lo;0;R;;;;;N;;;;; 10B44;INSCRIPTIONAL PARTHIAN LETTER HE;Lo;0;R;;;;;N;;;;; 10B45;INSCRIPTIONAL PARTHIAN LETTER WAW;Lo;0;R;;;;;N;;;;; 10B46;INSCRIPTIONAL PARTHIAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 10B47;INSCRIPTIONAL PARTHIAN LETTER HETH;Lo;0;R;;;;;N;;;;; 10B48;INSCRIPTIONAL PARTHIAN LETTER TETH;Lo;0;R;;;;;N;;;;; 10B49;INSCRIPTIONAL PARTHIAN LETTER YODH;Lo;0;R;;;;;N;;;;; 10B4A;INSCRIPTIONAL PARTHIAN LETTER KAPH;Lo;0;R;;;;;N;;;;; 10B4B;INSCRIPTIONAL PARTHIAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 10B4C;INSCRIPTIONAL PARTHIAN LETTER MEM;Lo;0;R;;;;;N;;;;; 10B4D;INSCRIPTIONAL PARTHIAN LETTER NUN;Lo;0;R;;;;;N;;;;; 10B4E;INSCRIPTIONAL PARTHIAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10B4F;INSCRIPTIONAL PARTHIAN LETTER AYIN;Lo;0;R;;;;;N;;;;; 10B50;INSCRIPTIONAL PARTHIAN LETTER PE;Lo;0;R;;;;;N;;;;; 10B51;INSCRIPTIONAL PARTHIAN LETTER SADHE;Lo;0;R;;;;;N;;;;; 10B52;INSCRIPTIONAL PARTHIAN LETTER QOPH;Lo;0;R;;;;;N;;;;; 10B53;INSCRIPTIONAL PARTHIAN LETTER RESH;Lo;0;R;;;;;N;;;;; 10B54;INSCRIPTIONAL PARTHIAN LETTER SHIN;Lo;0;R;;;;;N;;;;; 10B55;INSCRIPTIONAL PARTHIAN LETTER TAW;Lo;0;R;;;;;N;;;;; 10B58;INSCRIPTIONAL PARTHIAN NUMBER ONE;No;0;R;;;;1;N;;;;; 10B59;INSCRIPTIONAL PARTHIAN NUMBER TWO;No;0;R;;;;2;N;;;;; 10B5A;INSCRIPTIONAL PARTHIAN NUMBER THREE;No;0;R;;;;3;N;;;;; 10B5B;INSCRIPTIONAL PARTHIAN NUMBER FOUR;No;0;R;;;;4;N;;;;; 10B5C;INSCRIPTIONAL PARTHIAN NUMBER TEN;No;0;R;;;;10;N;;;;; 10B5D;INSCRIPTIONAL PARTHIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10B5E;INSCRIPTIONAL PARTHIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 10B5F;INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;; 10B60;INSCRIPTIONAL PAHLAVI LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10B61;INSCRIPTIONAL PAHLAVI LETTER BETH;Lo;0;R;;;;;N;;;;; 10B62;INSCRIPTIONAL PAHLAVI LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10B63;INSCRIPTIONAL PAHLAVI LETTER DALETH;Lo;0;R;;;;;N;;;;; 10B64;INSCRIPTIONAL PAHLAVI LETTER HE;Lo;0;R;;;;;N;;;;; 10B65;INSCRIPTIONAL PAHLAVI LETTER WAW-AYIN-RESH;Lo;0;R;;;;;N;;;;; 10B66;INSCRIPTIONAL PAHLAVI LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 10B67;INSCRIPTIONAL PAHLAVI LETTER HETH;Lo;0;R;;;;;N;;;;; 10B68;INSCRIPTIONAL PAHLAVI LETTER TETH;Lo;0;R;;;;;N;;;;; 10B69;INSCRIPTIONAL PAHLAVI LETTER YODH;Lo;0;R;;;;;N;;;;; 10B6A;INSCRIPTIONAL PAHLAVI LETTER KAPH;Lo;0;R;;;;;N;;;;; 10B6B;INSCRIPTIONAL PAHLAVI LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 10B6C;INSCRIPTIONAL PAHLAVI LETTER MEM-QOPH;Lo;0;R;;;;;N;;;;; 10B6D;INSCRIPTIONAL PAHLAVI LETTER NUN;Lo;0;R;;;;;N;;;;; 10B6E;INSCRIPTIONAL PAHLAVI LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10B6F;INSCRIPTIONAL PAHLAVI LETTER PE;Lo;0;R;;;;;N;;;;; 10B70;INSCRIPTIONAL PAHLAVI LETTER SADHE;Lo;0;R;;;;;N;;;;; 10B71;INSCRIPTIONAL PAHLAVI LETTER SHIN;Lo;0;R;;;;;N;;;;; 10B72;INSCRIPTIONAL PAHLAVI LETTER TAW;Lo;0;R;;;;;N;;;;; 10B78;INSCRIPTIONAL PAHLAVI NUMBER ONE;No;0;R;;;;1;N;;;;; 10B79;INSCRIPTIONAL PAHLAVI NUMBER TWO;No;0;R;;;;2;N;;;;; 10B7A;INSCRIPTIONAL PAHLAVI NUMBER THREE;No;0;R;;;;3;N;;;;; 10B7B;INSCRIPTIONAL PAHLAVI NUMBER FOUR;No;0;R;;;;4;N;;;;; 10B7C;INSCRIPTIONAL PAHLAVI NUMBER TEN;No;0;R;;;;10;N;;;;; 10B7D;INSCRIPTIONAL PAHLAVI NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10B7E;INSCRIPTIONAL PAHLAVI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 10B7F;INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;; 10B80;PSALTER PAHLAVI LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10B81;PSALTER PAHLAVI LETTER BETH;Lo;0;R;;;;;N;;;;; 10B82;PSALTER PAHLAVI LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10B83;PSALTER PAHLAVI LETTER DALETH;Lo;0;R;;;;;N;;;;; 10B84;PSALTER PAHLAVI LETTER HE;Lo;0;R;;;;;N;;;;; 10B85;PSALTER PAHLAVI LETTER WAW-AYIN-RESH;Lo;0;R;;;;;N;;;;; 10B86;PSALTER PAHLAVI LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 10B87;PSALTER PAHLAVI LETTER HETH;Lo;0;R;;;;;N;;;;; 10B88;PSALTER PAHLAVI LETTER YODH;Lo;0;R;;;;;N;;;;; 10B89;PSALTER PAHLAVI LETTER KAPH;Lo;0;R;;;;;N;;;;; 10B8A;PSALTER PAHLAVI LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 10B8B;PSALTER PAHLAVI LETTER MEM-QOPH;Lo;0;R;;;;;N;;;;; 10B8C;PSALTER PAHLAVI LETTER NUN;Lo;0;R;;;;;N;;;;; 10B8D;PSALTER PAHLAVI LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10B8E;PSALTER PAHLAVI LETTER PE;Lo;0;R;;;;;N;;;;; 10B8F;PSALTER PAHLAVI LETTER SADHE;Lo;0;R;;;;;N;;;;; 10B90;PSALTER PAHLAVI LETTER SHIN;Lo;0;R;;;;;N;;;;; 10B91;PSALTER PAHLAVI LETTER TAW;Lo;0;R;;;;;N;;;;; 10B99;PSALTER PAHLAVI SECTION MARK;Po;0;R;;;;;N;;;;; 10B9A;PSALTER PAHLAVI TURNED SECTION MARK;Po;0;R;;;;;N;;;;; 10B9B;PSALTER PAHLAVI FOUR DOTS WITH CROSS;Po;0;R;;;;;N;;;;; 10B9C;PSALTER PAHLAVI FOUR DOTS WITH DOT;Po;0;R;;;;;N;;;;; 10BA9;PSALTER PAHLAVI NUMBER ONE;No;0;R;;;;1;N;;;;; 10BAA;PSALTER PAHLAVI NUMBER TWO;No;0;R;;;;2;N;;;;; 10BAB;PSALTER PAHLAVI NUMBER THREE;No;0;R;;;;3;N;;;;; 10BAC;PSALTER PAHLAVI NUMBER FOUR;No;0;R;;;;4;N;;;;; 10BAD;PSALTER PAHLAVI NUMBER TEN;No;0;R;;;;10;N;;;;; 10BAE;PSALTER PAHLAVI NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10BAF;PSALTER PAHLAVI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 10C00;OLD TURKIC LETTER ORKHON A;Lo;0;R;;;;;N;;;;; 10C01;OLD TURKIC LETTER YENISEI A;Lo;0;R;;;;;N;;;;; 10C02;OLD TURKIC LETTER YENISEI AE;Lo;0;R;;;;;N;;;;; 10C03;OLD TURKIC LETTER ORKHON I;Lo;0;R;;;;;N;;;;; 10C04;OLD TURKIC LETTER YENISEI I;Lo;0;R;;;;;N;;;;; 10C05;OLD TURKIC LETTER YENISEI E;Lo;0;R;;;;;N;;;;; 10C06;OLD TURKIC LETTER ORKHON O;Lo;0;R;;;;;N;;;;; 10C07;OLD TURKIC LETTER ORKHON OE;Lo;0;R;;;;;N;;;;; 10C08;OLD TURKIC LETTER YENISEI OE;Lo;0;R;;;;;N;;;;; 10C09;OLD TURKIC LETTER ORKHON AB;Lo;0;R;;;;;N;;;;; 10C0A;OLD TURKIC LETTER YENISEI AB;Lo;0;R;;;;;N;;;;; 10C0B;OLD TURKIC LETTER ORKHON AEB;Lo;0;R;;;;;N;;;;; 10C0C;OLD TURKIC LETTER YENISEI AEB;Lo;0;R;;;;;N;;;;; 10C0D;OLD TURKIC LETTER ORKHON AG;Lo;0;R;;;;;N;;;;; 10C0E;OLD TURKIC LETTER YENISEI AG;Lo;0;R;;;;;N;;;;; 10C0F;OLD TURKIC LETTER ORKHON AEG;Lo;0;R;;;;;N;;;;; 10C10;OLD TURKIC LETTER YENISEI AEG;Lo;0;R;;;;;N;;;;; 10C11;OLD TURKIC LETTER ORKHON AD;Lo;0;R;;;;;N;;;;; 10C12;OLD TURKIC LETTER YENISEI AD;Lo;0;R;;;;;N;;;;; 10C13;OLD TURKIC LETTER ORKHON AED;Lo;0;R;;;;;N;;;;; 10C14;OLD TURKIC LETTER ORKHON EZ;Lo;0;R;;;;;N;;;;; 10C15;OLD TURKIC LETTER YENISEI EZ;Lo;0;R;;;;;N;;;;; 10C16;OLD TURKIC LETTER ORKHON AY;Lo;0;R;;;;;N;;;;; 10C17;OLD TURKIC LETTER YENISEI AY;Lo;0;R;;;;;N;;;;; 10C18;OLD TURKIC LETTER ORKHON AEY;Lo;0;R;;;;;N;;;;; 10C19;OLD TURKIC LETTER YENISEI AEY;Lo;0;R;;;;;N;;;;; 10C1A;OLD TURKIC LETTER ORKHON AEK;Lo;0;R;;;;;N;;;;; 10C1B;OLD TURKIC LETTER YENISEI AEK;Lo;0;R;;;;;N;;;;; 10C1C;OLD TURKIC LETTER ORKHON OEK;Lo;0;R;;;;;N;;;;; 10C1D;OLD TURKIC LETTER YENISEI OEK;Lo;0;R;;;;;N;;;;; 10C1E;OLD TURKIC LETTER ORKHON AL;Lo;0;R;;;;;N;;;;; 10C1F;OLD TURKIC LETTER YENISEI AL;Lo;0;R;;;;;N;;;;; 10C20;OLD TURKIC LETTER ORKHON AEL;Lo;0;R;;;;;N;;;;; 10C21;OLD TURKIC LETTER ORKHON ELT;Lo;0;R;;;;;N;;;;; 10C22;OLD TURKIC LETTER ORKHON EM;Lo;0;R;;;;;N;;;;; 10C23;OLD TURKIC LETTER ORKHON AN;Lo;0;R;;;;;N;;;;; 10C24;OLD TURKIC LETTER ORKHON AEN;Lo;0;R;;;;;N;;;;; 10C25;OLD TURKIC LETTER YENISEI AEN;Lo;0;R;;;;;N;;;;; 10C26;OLD TURKIC LETTER ORKHON ENT;Lo;0;R;;;;;N;;;;; 10C27;OLD TURKIC LETTER YENISEI ENT;Lo;0;R;;;;;N;;;;; 10C28;OLD TURKIC LETTER ORKHON ENC;Lo;0;R;;;;;N;;;;; 10C29;OLD TURKIC LETTER YENISEI ENC;Lo;0;R;;;;;N;;;;; 10C2A;OLD TURKIC LETTER ORKHON ENY;Lo;0;R;;;;;N;;;;; 10C2B;OLD TURKIC LETTER YENISEI ENY;Lo;0;R;;;;;N;;;;; 10C2C;OLD TURKIC LETTER YENISEI ANG;Lo;0;R;;;;;N;;;;; 10C2D;OLD TURKIC LETTER ORKHON ENG;Lo;0;R;;;;;N;;;;; 10C2E;OLD TURKIC LETTER YENISEI AENG;Lo;0;R;;;;;N;;;;; 10C2F;OLD TURKIC LETTER ORKHON EP;Lo;0;R;;;;;N;;;;; 10C30;OLD TURKIC LETTER ORKHON OP;Lo;0;R;;;;;N;;;;; 10C31;OLD TURKIC LETTER ORKHON IC;Lo;0;R;;;;;N;;;;; 10C32;OLD TURKIC LETTER ORKHON EC;Lo;0;R;;;;;N;;;;; 10C33;OLD TURKIC LETTER YENISEI EC;Lo;0;R;;;;;N;;;;; 10C34;OLD TURKIC LETTER ORKHON AQ;Lo;0;R;;;;;N;;;;; 10C35;OLD TURKIC LETTER YENISEI AQ;Lo;0;R;;;;;N;;;;; 10C36;OLD TURKIC LETTER ORKHON IQ;Lo;0;R;;;;;N;;;;; 10C37;OLD TURKIC LETTER YENISEI IQ;Lo;0;R;;;;;N;;;;; 10C38;OLD TURKIC LETTER ORKHON OQ;Lo;0;R;;;;;N;;;;; 10C39;OLD TURKIC LETTER YENISEI OQ;Lo;0;R;;;;;N;;;;; 10C3A;OLD TURKIC LETTER ORKHON AR;Lo;0;R;;;;;N;;;;; 10C3B;OLD TURKIC LETTER YENISEI AR;Lo;0;R;;;;;N;;;;; 10C3C;OLD TURKIC LETTER ORKHON AER;Lo;0;R;;;;;N;;;;; 10C3D;OLD TURKIC LETTER ORKHON AS;Lo;0;R;;;;;N;;;;; 10C3E;OLD TURKIC LETTER ORKHON AES;Lo;0;R;;;;;N;;;;; 10C3F;OLD TURKIC LETTER ORKHON ASH;Lo;0;R;;;;;N;;;;; 10C40;OLD TURKIC LETTER YENISEI ASH;Lo;0;R;;;;;N;;;;; 10C41;OLD TURKIC LETTER ORKHON ESH;Lo;0;R;;;;;N;;;;; 10C42;OLD TURKIC LETTER YENISEI ESH;Lo;0;R;;;;;N;;;;; 10C43;OLD TURKIC LETTER ORKHON AT;Lo;0;R;;;;;N;;;;; 10C44;OLD TURKIC LETTER YENISEI AT;Lo;0;R;;;;;N;;;;; 10C45;OLD TURKIC LETTER ORKHON AET;Lo;0;R;;;;;N;;;;; 10C46;OLD TURKIC LETTER YENISEI AET;Lo;0;R;;;;;N;;;;; 10C47;OLD TURKIC LETTER ORKHON OT;Lo;0;R;;;;;N;;;;; 10C48;OLD TURKIC LETTER ORKHON BASH;Lo;0;R;;;;;N;;;;; 10C80;OLD HUNGARIAN CAPITAL LETTER A;Lu;0;R;;;;;N;;;;10CC0; 10C81;OLD HUNGARIAN CAPITAL LETTER AA;Lu;0;R;;;;;N;;;;10CC1; 10C82;OLD HUNGARIAN CAPITAL LETTER EB;Lu;0;R;;;;;N;;;;10CC2; 10C83;OLD HUNGARIAN CAPITAL LETTER AMB;Lu;0;R;;;;;N;;;;10CC3; 10C84;OLD HUNGARIAN CAPITAL LETTER EC;Lu;0;R;;;;;N;;;;10CC4; 10C85;OLD HUNGARIAN CAPITAL LETTER ENC;Lu;0;R;;;;;N;;;;10CC5; 10C86;OLD HUNGARIAN CAPITAL LETTER ECS;Lu;0;R;;;;;N;;;;10CC6; 10C87;OLD HUNGARIAN CAPITAL LETTER ED;Lu;0;R;;;;;N;;;;10CC7; 10C88;OLD HUNGARIAN CAPITAL LETTER AND;Lu;0;R;;;;;N;;;;10CC8; 10C89;OLD HUNGARIAN CAPITAL LETTER E;Lu;0;R;;;;;N;;;;10CC9; 10C8A;OLD HUNGARIAN CAPITAL LETTER CLOSE E;Lu;0;R;;;;;N;;;;10CCA; 10C8B;OLD HUNGARIAN CAPITAL LETTER EE;Lu;0;R;;;;;N;;;;10CCB; 10C8C;OLD HUNGARIAN CAPITAL LETTER EF;Lu;0;R;;;;;N;;;;10CCC; 10C8D;OLD HUNGARIAN CAPITAL LETTER EG;Lu;0;R;;;;;N;;;;10CCD; 10C8E;OLD HUNGARIAN CAPITAL LETTER EGY;Lu;0;R;;;;;N;;;;10CCE; 10C8F;OLD HUNGARIAN CAPITAL LETTER EH;Lu;0;R;;;;;N;;;;10CCF; 10C90;OLD HUNGARIAN CAPITAL LETTER I;Lu;0;R;;;;;N;;;;10CD0; 10C91;OLD HUNGARIAN CAPITAL LETTER II;Lu;0;R;;;;;N;;;;10CD1; 10C92;OLD HUNGARIAN CAPITAL LETTER EJ;Lu;0;R;;;;;N;;;;10CD2; 10C93;OLD HUNGARIAN CAPITAL LETTER EK;Lu;0;R;;;;;N;;;;10CD3; 10C94;OLD HUNGARIAN CAPITAL LETTER AK;Lu;0;R;;;;;N;;;;10CD4; 10C95;OLD HUNGARIAN CAPITAL LETTER UNK;Lu;0;R;;;;;N;;;;10CD5; 10C96;OLD HUNGARIAN CAPITAL LETTER EL;Lu;0;R;;;;;N;;;;10CD6; 10C97;OLD HUNGARIAN CAPITAL LETTER ELY;Lu;0;R;;;;;N;;;;10CD7; 10C98;OLD HUNGARIAN CAPITAL LETTER EM;Lu;0;R;;;;;N;;;;10CD8; 10C99;OLD HUNGARIAN CAPITAL LETTER EN;Lu;0;R;;;;;N;;;;10CD9; 10C9A;OLD HUNGARIAN CAPITAL LETTER ENY;Lu;0;R;;;;;N;;;;10CDA; 10C9B;OLD HUNGARIAN CAPITAL LETTER O;Lu;0;R;;;;;N;;;;10CDB; 10C9C;OLD HUNGARIAN CAPITAL LETTER OO;Lu;0;R;;;;;N;;;;10CDC; 10C9D;OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE;Lu;0;R;;;;;N;;;;10CDD; 10C9E;OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE;Lu;0;R;;;;;N;;;;10CDE; 10C9F;OLD HUNGARIAN CAPITAL LETTER OEE;Lu;0;R;;;;;N;;;;10CDF; 10CA0;OLD HUNGARIAN CAPITAL LETTER EP;Lu;0;R;;;;;N;;;;10CE0; 10CA1;OLD HUNGARIAN CAPITAL LETTER EMP;Lu;0;R;;;;;N;;;;10CE1; 10CA2;OLD HUNGARIAN CAPITAL LETTER ER;Lu;0;R;;;;;N;;;;10CE2; 10CA3;OLD HUNGARIAN CAPITAL LETTER SHORT ER;Lu;0;R;;;;;N;;;;10CE3; 10CA4;OLD HUNGARIAN CAPITAL LETTER ES;Lu;0;R;;;;;N;;;;10CE4; 10CA5;OLD HUNGARIAN CAPITAL LETTER ESZ;Lu;0;R;;;;;N;;;;10CE5; 10CA6;OLD HUNGARIAN CAPITAL LETTER ET;Lu;0;R;;;;;N;;;;10CE6; 10CA7;OLD HUNGARIAN CAPITAL LETTER ENT;Lu;0;R;;;;;N;;;;10CE7; 10CA8;OLD HUNGARIAN CAPITAL LETTER ETY;Lu;0;R;;;;;N;;;;10CE8; 10CA9;OLD HUNGARIAN CAPITAL LETTER ECH;Lu;0;R;;;;;N;;;;10CE9; 10CAA;OLD HUNGARIAN CAPITAL LETTER U;Lu;0;R;;;;;N;;;;10CEA; 10CAB;OLD HUNGARIAN CAPITAL LETTER UU;Lu;0;R;;;;;N;;;;10CEB; 10CAC;OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE;Lu;0;R;;;;;N;;;;10CEC; 10CAD;OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE;Lu;0;R;;;;;N;;;;10CED; 10CAE;OLD HUNGARIAN CAPITAL LETTER EV;Lu;0;R;;;;;N;;;;10CEE; 10CAF;OLD HUNGARIAN CAPITAL LETTER EZ;Lu;0;R;;;;;N;;;;10CEF; 10CB0;OLD HUNGARIAN CAPITAL LETTER EZS;Lu;0;R;;;;;N;;;;10CF0; 10CB1;OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN;Lu;0;R;;;;;N;;;;10CF1; 10CB2;OLD HUNGARIAN CAPITAL LETTER US;Lu;0;R;;;;;N;;;;10CF2; 10CC0;OLD HUNGARIAN SMALL LETTER A;Ll;0;R;;;;;N;;;10C80;;10C80 10CC1;OLD HUNGARIAN SMALL LETTER AA;Ll;0;R;;;;;N;;;10C81;;10C81 10CC2;OLD HUNGARIAN SMALL LETTER EB;Ll;0;R;;;;;N;;;10C82;;10C82 10CC3;OLD HUNGARIAN SMALL LETTER AMB;Ll;0;R;;;;;N;;;10C83;;10C83 10CC4;OLD HUNGARIAN SMALL LETTER EC;Ll;0;R;;;;;N;;;10C84;;10C84 10CC5;OLD HUNGARIAN SMALL LETTER ENC;Ll;0;R;;;;;N;;;10C85;;10C85 10CC6;OLD HUNGARIAN SMALL LETTER ECS;Ll;0;R;;;;;N;;;10C86;;10C86 10CC7;OLD HUNGARIAN SMALL LETTER ED;Ll;0;R;;;;;N;;;10C87;;10C87 10CC8;OLD HUNGARIAN SMALL LETTER AND;Ll;0;R;;;;;N;;;10C88;;10C88 10CC9;OLD HUNGARIAN SMALL LETTER E;Ll;0;R;;;;;N;;;10C89;;10C89 10CCA;OLD HUNGARIAN SMALL LETTER CLOSE E;Ll;0;R;;;;;N;;;10C8A;;10C8A 10CCB;OLD HUNGARIAN SMALL LETTER EE;Ll;0;R;;;;;N;;;10C8B;;10C8B 10CCC;OLD HUNGARIAN SMALL LETTER EF;Ll;0;R;;;;;N;;;10C8C;;10C8C 10CCD;OLD HUNGARIAN SMALL LETTER EG;Ll;0;R;;;;;N;;;10C8D;;10C8D 10CCE;OLD HUNGARIAN SMALL LETTER EGY;Ll;0;R;;;;;N;;;10C8E;;10C8E 10CCF;OLD HUNGARIAN SMALL LETTER EH;Ll;0;R;;;;;N;;;10C8F;;10C8F 10CD0;OLD HUNGARIAN SMALL LETTER I;Ll;0;R;;;;;N;;;10C90;;10C90 10CD1;OLD HUNGARIAN SMALL LETTER II;Ll;0;R;;;;;N;;;10C91;;10C91 10CD2;OLD HUNGARIAN SMALL LETTER EJ;Ll;0;R;;;;;N;;;10C92;;10C92 10CD3;OLD HUNGARIAN SMALL LETTER EK;Ll;0;R;;;;;N;;;10C93;;10C93 10CD4;OLD HUNGARIAN SMALL LETTER AK;Ll;0;R;;;;;N;;;10C94;;10C94 10CD5;OLD HUNGARIAN SMALL LETTER UNK;Ll;0;R;;;;;N;;;10C95;;10C95 10CD6;OLD HUNGARIAN SMALL LETTER EL;Ll;0;R;;;;;N;;;10C96;;10C96 10CD7;OLD HUNGARIAN SMALL LETTER ELY;Ll;0;R;;;;;N;;;10C97;;10C97 10CD8;OLD HUNGARIAN SMALL LETTER EM;Ll;0;R;;;;;N;;;10C98;;10C98 10CD9;OLD HUNGARIAN SMALL LETTER EN;Ll;0;R;;;;;N;;;10C99;;10C99 10CDA;OLD HUNGARIAN SMALL LETTER ENY;Ll;0;R;;;;;N;;;10C9A;;10C9A 10CDB;OLD HUNGARIAN SMALL LETTER O;Ll;0;R;;;;;N;;;10C9B;;10C9B 10CDC;OLD HUNGARIAN SMALL LETTER OO;Ll;0;R;;;;;N;;;10C9C;;10C9C 10CDD;OLD HUNGARIAN SMALL LETTER NIKOLSBURG OE;Ll;0;R;;;;;N;;;10C9D;;10C9D 10CDE;OLD HUNGARIAN SMALL LETTER RUDIMENTA OE;Ll;0;R;;;;;N;;;10C9E;;10C9E 10CDF;OLD HUNGARIAN SMALL LETTER OEE;Ll;0;R;;;;;N;;;10C9F;;10C9F 10CE0;OLD HUNGARIAN SMALL LETTER EP;Ll;0;R;;;;;N;;;10CA0;;10CA0 10CE1;OLD HUNGARIAN SMALL LETTER EMP;Ll;0;R;;;;;N;;;10CA1;;10CA1 10CE2;OLD HUNGARIAN SMALL LETTER ER;Ll;0;R;;;;;N;;;10CA2;;10CA2 10CE3;OLD HUNGARIAN SMALL LETTER SHORT ER;Ll;0;R;;;;;N;;;10CA3;;10CA3 10CE4;OLD HUNGARIAN SMALL LETTER ES;Ll;0;R;;;;;N;;;10CA4;;10CA4 10CE5;OLD HUNGARIAN SMALL LETTER ESZ;Ll;0;R;;;;;N;;;10CA5;;10CA5 10CE6;OLD HUNGARIAN SMALL LETTER ET;Ll;0;R;;;;;N;;;10CA6;;10CA6 10CE7;OLD HUNGARIAN SMALL LETTER ENT;Ll;0;R;;;;;N;;;10CA7;;10CA7 10CE8;OLD HUNGARIAN SMALL LETTER ETY;Ll;0;R;;;;;N;;;10CA8;;10CA8 10CE9;OLD HUNGARIAN SMALL LETTER ECH;Ll;0;R;;;;;N;;;10CA9;;10CA9 10CEA;OLD HUNGARIAN SMALL LETTER U;Ll;0;R;;;;;N;;;10CAA;;10CAA 10CEB;OLD HUNGARIAN SMALL LETTER UU;Ll;0;R;;;;;N;;;10CAB;;10CAB 10CEC;OLD HUNGARIAN SMALL LETTER NIKOLSBURG UE;Ll;0;R;;;;;N;;;10CAC;;10CAC 10CED;OLD HUNGARIAN SMALL LETTER RUDIMENTA UE;Ll;0;R;;;;;N;;;10CAD;;10CAD 10CEE;OLD HUNGARIAN SMALL LETTER EV;Ll;0;R;;;;;N;;;10CAE;;10CAE 10CEF;OLD HUNGARIAN SMALL LETTER EZ;Ll;0;R;;;;;N;;;10CAF;;10CAF 10CF0;OLD HUNGARIAN SMALL LETTER EZS;Ll;0;R;;;;;N;;;10CB0;;10CB0 10CF1;OLD HUNGARIAN SMALL LETTER ENT-SHAPED SIGN;Ll;0;R;;;;;N;;;10CB1;;10CB1 10CF2;OLD HUNGARIAN SMALL LETTER US;Ll;0;R;;;;;N;;;10CB2;;10CB2 10CFA;OLD HUNGARIAN NUMBER ONE;No;0;R;;;;1;N;;;;; 10CFB;OLD HUNGARIAN NUMBER FIVE;No;0;R;;;;5;N;;;;; 10CFC;OLD HUNGARIAN NUMBER TEN;No;0;R;;;;10;N;;;;; 10CFD;OLD HUNGARIAN NUMBER FIFTY;No;0;R;;;;50;N;;;;; 10CFE;OLD HUNGARIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 10CFF;OLD HUNGARIAN NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;; 10D00;HANIFI ROHINGYA LETTER A;Lo;0;AL;;;;;N;;;;; 10D01;HANIFI ROHINGYA LETTER BA;Lo;0;AL;;;;;N;;;;; 10D02;HANIFI ROHINGYA LETTER PA;Lo;0;AL;;;;;N;;;;; 10D03;HANIFI ROHINGYA LETTER TA;Lo;0;AL;;;;;N;;;;; 10D04;HANIFI ROHINGYA LETTER TTA;Lo;0;AL;;;;;N;;;;; 10D05;HANIFI ROHINGYA LETTER JA;Lo;0;AL;;;;;N;;;;; 10D06;HANIFI ROHINGYA LETTER CA;Lo;0;AL;;;;;N;;;;; 10D07;HANIFI ROHINGYA LETTER HA;Lo;0;AL;;;;;N;;;;; 10D08;HANIFI ROHINGYA LETTER KHA;Lo;0;AL;;;;;N;;;;; 10D09;HANIFI ROHINGYA LETTER FA;Lo;0;AL;;;;;N;;;;; 10D0A;HANIFI ROHINGYA LETTER DA;Lo;0;AL;;;;;N;;;;; 10D0B;HANIFI ROHINGYA LETTER DDA;Lo;0;AL;;;;;N;;;;; 10D0C;HANIFI ROHINGYA LETTER RA;Lo;0;AL;;;;;N;;;;; 10D0D;HANIFI ROHINGYA LETTER RRA;Lo;0;AL;;;;;N;;;;; 10D0E;HANIFI ROHINGYA LETTER ZA;Lo;0;AL;;;;;N;;;;; 10D0F;HANIFI ROHINGYA LETTER SA;Lo;0;AL;;;;;N;;;;; 10D10;HANIFI ROHINGYA LETTER SHA;Lo;0;AL;;;;;N;;;;; 10D11;HANIFI ROHINGYA LETTER KA;Lo;0;AL;;;;;N;;;;; 10D12;HANIFI ROHINGYA LETTER GA;Lo;0;AL;;;;;N;;;;; 10D13;HANIFI ROHINGYA LETTER LA;Lo;0;AL;;;;;N;;;;; 10D14;HANIFI ROHINGYA LETTER MA;Lo;0;AL;;;;;N;;;;; 10D15;HANIFI ROHINGYA LETTER NA;Lo;0;AL;;;;;N;;;;; 10D16;HANIFI ROHINGYA LETTER WA;Lo;0;AL;;;;;N;;;;; 10D17;HANIFI ROHINGYA LETTER KINNA WA;Lo;0;AL;;;;;N;;;;; 10D18;HANIFI ROHINGYA LETTER YA;Lo;0;AL;;;;;N;;;;; 10D19;HANIFI ROHINGYA LETTER KINNA YA;Lo;0;AL;;;;;N;;;;; 10D1A;HANIFI ROHINGYA LETTER NGA;Lo;0;AL;;;;;N;;;;; 10D1B;HANIFI ROHINGYA LETTER NYA;Lo;0;AL;;;;;N;;;;; 10D1C;HANIFI ROHINGYA LETTER VA;Lo;0;AL;;;;;N;;;;; 10D1D;HANIFI ROHINGYA VOWEL A;Lo;0;AL;;;;;N;;;;; 10D1E;HANIFI ROHINGYA VOWEL I;Lo;0;AL;;;;;N;;;;; 10D1F;HANIFI ROHINGYA VOWEL U;Lo;0;AL;;;;;N;;;;; 10D20;HANIFI ROHINGYA VOWEL E;Lo;0;AL;;;;;N;;;;; 10D21;HANIFI ROHINGYA VOWEL O;Lo;0;AL;;;;;N;;;;; 10D22;HANIFI ROHINGYA MARK SAKIN;Lo;0;AL;;;;;N;;;;; 10D23;HANIFI ROHINGYA MARK NA KHONNA;Lo;0;AL;;;;;N;;;;; 10D24;HANIFI ROHINGYA SIGN HARBAHAY;Mn;230;NSM;;;;;N;;;;; 10D25;HANIFI ROHINGYA SIGN TAHALA;Mn;230;NSM;;;;;N;;;;; 10D26;HANIFI ROHINGYA SIGN TANA;Mn;230;NSM;;;;;N;;;;; 10D27;HANIFI ROHINGYA SIGN TASSI;Mn;230;NSM;;;;;N;;;;; 10D30;HANIFI ROHINGYA DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;; 10D31;HANIFI ROHINGYA DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;; 10D32;HANIFI ROHINGYA DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;; 10D33;HANIFI ROHINGYA DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;; 10D34;HANIFI ROHINGYA DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;; 10D35;HANIFI ROHINGYA DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;; 10D36;HANIFI ROHINGYA DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;; 10D37;HANIFI ROHINGYA DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;; 10D38;HANIFI ROHINGYA DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;; 10D39;HANIFI ROHINGYA DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;; 10E60;RUMI DIGIT ONE;No;0;AN;;;1;1;N;;;;; 10E61;RUMI DIGIT TWO;No;0;AN;;;2;2;N;;;;; 10E62;RUMI DIGIT THREE;No;0;AN;;;3;3;N;;;;; 10E63;RUMI DIGIT FOUR;No;0;AN;;;4;4;N;;;;; 10E64;RUMI DIGIT FIVE;No;0;AN;;;5;5;N;;;;; 10E65;RUMI DIGIT SIX;No;0;AN;;;6;6;N;;;;; 10E66;RUMI DIGIT SEVEN;No;0;AN;;;7;7;N;;;;; 10E67;RUMI DIGIT EIGHT;No;0;AN;;;8;8;N;;;;; 10E68;RUMI DIGIT NINE;No;0;AN;;;9;9;N;;;;; 10E69;RUMI NUMBER TEN;No;0;AN;;;;10;N;;;;; 10E6A;RUMI NUMBER TWENTY;No;0;AN;;;;20;N;;;;; 10E6B;RUMI NUMBER THIRTY;No;0;AN;;;;30;N;;;;; 10E6C;RUMI NUMBER FORTY;No;0;AN;;;;40;N;;;;; 10E6D;RUMI NUMBER FIFTY;No;0;AN;;;;50;N;;;;; 10E6E;RUMI NUMBER SIXTY;No;0;AN;;;;60;N;;;;; 10E6F;RUMI NUMBER SEVENTY;No;0;AN;;;;70;N;;;;; 10E70;RUMI NUMBER EIGHTY;No;0;AN;;;;80;N;;;;; 10E71;RUMI NUMBER NINETY;No;0;AN;;;;90;N;;;;; 10E72;RUMI NUMBER ONE HUNDRED;No;0;AN;;;;100;N;;;;; 10E73;RUMI NUMBER TWO HUNDRED;No;0;AN;;;;200;N;;;;; 10E74;RUMI NUMBER THREE HUNDRED;No;0;AN;;;;300;N;;;;; 10E75;RUMI NUMBER FOUR HUNDRED;No;0;AN;;;;400;N;;;;; 10E76;RUMI NUMBER FIVE HUNDRED;No;0;AN;;;;500;N;;;;; 10E77;RUMI NUMBER SIX HUNDRED;No;0;AN;;;;600;N;;;;; 10E78;RUMI NUMBER SEVEN HUNDRED;No;0;AN;;;;700;N;;;;; 10E79;RUMI NUMBER EIGHT HUNDRED;No;0;AN;;;;800;N;;;;; 10E7A;RUMI NUMBER NINE HUNDRED;No;0;AN;;;;900;N;;;;; 10E7B;RUMI FRACTION ONE HALF;No;0;AN;;;;1/2;N;;;;; 10E7C;RUMI FRACTION ONE QUARTER;No;0;AN;;;;1/4;N;;;;; 10E7D;RUMI FRACTION ONE THIRD;No;0;AN;;;;1/3;N;;;;; 10E7E;RUMI FRACTION TWO THIRDS;No;0;AN;;;;2/3;N;;;;; 10E80;YEZIDI LETTER ELIF;Lo;0;R;;;;;N;;;;; 10E81;YEZIDI LETTER BE;Lo;0;R;;;;;N;;;;; 10E82;YEZIDI LETTER PE;Lo;0;R;;;;;N;;;;; 10E83;YEZIDI LETTER PHE;Lo;0;R;;;;;N;;;;; 10E84;YEZIDI LETTER THE;Lo;0;R;;;;;N;;;;; 10E85;YEZIDI LETTER SE;Lo;0;R;;;;;N;;;;; 10E86;YEZIDI LETTER CIM;Lo;0;R;;;;;N;;;;; 10E87;YEZIDI LETTER CHIM;Lo;0;R;;;;;N;;;;; 10E88;YEZIDI LETTER CHHIM;Lo;0;R;;;;;N;;;;; 10E89;YEZIDI LETTER HHA;Lo;0;R;;;;;N;;;;; 10E8A;YEZIDI LETTER XA;Lo;0;R;;;;;N;;;;; 10E8B;YEZIDI LETTER DAL;Lo;0;R;;;;;N;;;;; 10E8C;YEZIDI LETTER ZAL;Lo;0;R;;;;;N;;;;; 10E8D;YEZIDI LETTER RA;Lo;0;R;;;;;N;;;;; 10E8E;YEZIDI LETTER RHA;Lo;0;R;;;;;N;;;;; 10E8F;YEZIDI LETTER ZA;Lo;0;R;;;;;N;;;;; 10E90;YEZIDI LETTER JA;Lo;0;R;;;;;N;;;;; 10E91;YEZIDI LETTER SIN;Lo;0;R;;;;;N;;;;; 10E92;YEZIDI LETTER SHIN;Lo;0;R;;;;;N;;;;; 10E93;YEZIDI LETTER SAD;Lo;0;R;;;;;N;;;;; 10E94;YEZIDI LETTER DAD;Lo;0;R;;;;;N;;;;; 10E95;YEZIDI LETTER TA;Lo;0;R;;;;;N;;;;; 10E96;YEZIDI LETTER ZE;Lo;0;R;;;;;N;;;;; 10E97;YEZIDI LETTER EYN;Lo;0;R;;;;;N;;;;; 10E98;YEZIDI LETTER XHEYN;Lo;0;R;;;;;N;;;;; 10E99;YEZIDI LETTER FA;Lo;0;R;;;;;N;;;;; 10E9A;YEZIDI LETTER VA;Lo;0;R;;;;;N;;;;; 10E9B;YEZIDI LETTER VA ALTERNATE FORM;Lo;0;R;;;;;N;;;;; 10E9C;YEZIDI LETTER QAF;Lo;0;R;;;;;N;;;;; 10E9D;YEZIDI LETTER KAF;Lo;0;R;;;;;N;;;;; 10E9E;YEZIDI LETTER KHAF;Lo;0;R;;;;;N;;;;; 10E9F;YEZIDI LETTER GAF;Lo;0;R;;;;;N;;;;; 10EA0;YEZIDI LETTER LAM;Lo;0;R;;;;;N;;;;; 10EA1;YEZIDI LETTER MIM;Lo;0;R;;;;;N;;;;; 10EA2;YEZIDI LETTER NUN;Lo;0;R;;;;;N;;;;; 10EA3;YEZIDI LETTER UM;Lo;0;R;;;;;N;;;;; 10EA4;YEZIDI LETTER WAW;Lo;0;R;;;;;N;;;;; 10EA5;YEZIDI LETTER OW;Lo;0;R;;;;;N;;;;; 10EA6;YEZIDI LETTER EW;Lo;0;R;;;;;N;;;;; 10EA7;YEZIDI LETTER HAY;Lo;0;R;;;;;N;;;;; 10EA8;YEZIDI LETTER YOT;Lo;0;R;;;;;N;;;;; 10EA9;YEZIDI LETTER ET;Lo;0;R;;;;;N;;;;; 10EAB;YEZIDI COMBINING HAMZA MARK;Mn;230;NSM;;;;;N;;;;; 10EAC;YEZIDI COMBINING MADDA MARK;Mn;230;NSM;;;;;N;;;;; 10EAD;YEZIDI HYPHENATION MARK;Pd;0;R;;;;;N;;;;; 10EB0;YEZIDI LETTER LAM WITH DOT ABOVE;Lo;0;R;;;;;N;;;;; 10EB1;YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE;Lo;0;R;;;;;N;;;;; 10F00;OLD SOGDIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10F01;OLD SOGDIAN LETTER FINAL ALEPH;Lo;0;R;;;;;N;;;;; 10F02;OLD SOGDIAN LETTER BETH;Lo;0;R;;;;;N;;;;; 10F03;OLD SOGDIAN LETTER FINAL BETH;Lo;0;R;;;;;N;;;;; 10F04;OLD SOGDIAN LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10F05;OLD SOGDIAN LETTER HE;Lo;0;R;;;;;N;;;;; 10F06;OLD SOGDIAN LETTER FINAL HE;Lo;0;R;;;;;N;;;;; 10F07;OLD SOGDIAN LETTER WAW;Lo;0;R;;;;;N;;;;; 10F08;OLD SOGDIAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 10F09;OLD SOGDIAN LETTER HETH;Lo;0;R;;;;;N;;;;; 10F0A;OLD SOGDIAN LETTER YODH;Lo;0;R;;;;;N;;;;; 10F0B;OLD SOGDIAN LETTER KAPH;Lo;0;R;;;;;N;;;;; 10F0C;OLD SOGDIAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 10F0D;OLD SOGDIAN LETTER MEM;Lo;0;R;;;;;N;;;;; 10F0E;OLD SOGDIAN LETTER NUN;Lo;0;R;;;;;N;;;;; 10F0F;OLD SOGDIAN LETTER FINAL NUN;Lo;0;R;;;;;N;;;;; 10F10;OLD SOGDIAN LETTER FINAL NUN WITH VERTICAL TAIL;Lo;0;R;;;;;N;;;;; 10F11;OLD SOGDIAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10F12;OLD SOGDIAN LETTER AYIN;Lo;0;R;;;;;N;;;;; 10F13;OLD SOGDIAN LETTER ALTERNATE AYIN;Lo;0;R;;;;;N;;;;; 10F14;OLD SOGDIAN LETTER PE;Lo;0;R;;;;;N;;;;; 10F15;OLD SOGDIAN LETTER SADHE;Lo;0;R;;;;;N;;;;; 10F16;OLD SOGDIAN LETTER FINAL SADHE;Lo;0;R;;;;;N;;;;; 10F17;OLD SOGDIAN LETTER FINAL SADHE WITH VERTICAL TAIL;Lo;0;R;;;;;N;;;;; 10F18;OLD SOGDIAN LETTER RESH-AYIN-DALETH;Lo;0;R;;;;;N;;;;; 10F19;OLD SOGDIAN LETTER SHIN;Lo;0;R;;;;;N;;;;; 10F1A;OLD SOGDIAN LETTER TAW;Lo;0;R;;;;;N;;;;; 10F1B;OLD SOGDIAN LETTER FINAL TAW;Lo;0;R;;;;;N;;;;; 10F1C;OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL;Lo;0;R;;;;;N;;;;; 10F1D;OLD SOGDIAN NUMBER ONE;No;0;R;;;;1;N;;;;; 10F1E;OLD SOGDIAN NUMBER TWO;No;0;R;;;;2;N;;;;; 10F1F;OLD SOGDIAN NUMBER THREE;No;0;R;;;;3;N;;;;; 10F20;OLD SOGDIAN NUMBER FOUR;No;0;R;;;;4;N;;;;; 10F21;OLD SOGDIAN NUMBER FIVE;No;0;R;;;;5;N;;;;; 10F22;OLD SOGDIAN NUMBER TEN;No;0;R;;;;10;N;;;;; 10F23;OLD SOGDIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10F24;OLD SOGDIAN NUMBER THIRTY;No;0;R;;;;30;N;;;;; 10F25;OLD SOGDIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 10F26;OLD SOGDIAN FRACTION ONE HALF;No;0;R;;;;1/2;N;;;;; 10F27;OLD SOGDIAN LIGATURE AYIN-DALETH;Lo;0;R;;;;;N;;;;; 10F30;SOGDIAN LETTER ALEPH;Lo;0;AL;;;;;N;;;;; 10F31;SOGDIAN LETTER BETH;Lo;0;AL;;;;;N;;;;; 10F32;SOGDIAN LETTER GIMEL;Lo;0;AL;;;;;N;;;;; 10F33;SOGDIAN LETTER HE;Lo;0;AL;;;;;N;;;;; 10F34;SOGDIAN LETTER WAW;Lo;0;AL;;;;;N;;;;; 10F35;SOGDIAN LETTER ZAYIN;Lo;0;AL;;;;;N;;;;; 10F36;SOGDIAN LETTER HETH;Lo;0;AL;;;;;N;;;;; 10F37;SOGDIAN LETTER YODH;Lo;0;AL;;;;;N;;;;; 10F38;SOGDIAN LETTER KAPH;Lo;0;AL;;;;;N;;;;; 10F39;SOGDIAN LETTER LAMEDH;Lo;0;AL;;;;;N;;;;; 10F3A;SOGDIAN LETTER MEM;Lo;0;AL;;;;;N;;;;; 10F3B;SOGDIAN LETTER NUN;Lo;0;AL;;;;;N;;;;; 10F3C;SOGDIAN LETTER SAMEKH;Lo;0;AL;;;;;N;;;;; 10F3D;SOGDIAN LETTER AYIN;Lo;0;AL;;;;;N;;;;; 10F3E;SOGDIAN LETTER PE;Lo;0;AL;;;;;N;;;;; 10F3F;SOGDIAN LETTER SADHE;Lo;0;AL;;;;;N;;;;; 10F40;SOGDIAN LETTER RESH-AYIN;Lo;0;AL;;;;;N;;;;; 10F41;SOGDIAN LETTER SHIN;Lo;0;AL;;;;;N;;;;; 10F42;SOGDIAN LETTER TAW;Lo;0;AL;;;;;N;;;;; 10F43;SOGDIAN LETTER FETH;Lo;0;AL;;;;;N;;;;; 10F44;SOGDIAN LETTER LESH;Lo;0;AL;;;;;N;;;;; 10F45;SOGDIAN INDEPENDENT SHIN;Lo;0;AL;;;;;N;;;;; 10F46;SOGDIAN COMBINING DOT BELOW;Mn;220;NSM;;;;;N;;;;; 10F47;SOGDIAN COMBINING TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;; 10F48;SOGDIAN COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;;;;; 10F49;SOGDIAN COMBINING TWO DOTS ABOVE;Mn;230;NSM;;;;;N;;;;; 10F4A;SOGDIAN COMBINING CURVE ABOVE;Mn;230;NSM;;;;;N;;;;; 10F4B;SOGDIAN COMBINING CURVE BELOW;Mn;220;NSM;;;;;N;;;;; 10F4C;SOGDIAN COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;;;;; 10F4D;SOGDIAN COMBINING HOOK BELOW;Mn;220;NSM;;;;;N;;;;; 10F4E;SOGDIAN COMBINING LONG HOOK BELOW;Mn;220;NSM;;;;;N;;;;; 10F4F;SOGDIAN COMBINING RESH BELOW;Mn;220;NSM;;;;;N;;;;; 10F50;SOGDIAN COMBINING STROKE BELOW;Mn;220;NSM;;;;;N;;;;; 10F51;SOGDIAN NUMBER ONE;No;0;AL;;;;1;N;;;;; 10F52;SOGDIAN NUMBER TEN;No;0;AL;;;;10;N;;;;; 10F53;SOGDIAN NUMBER TWENTY;No;0;AL;;;;20;N;;;;; 10F54;SOGDIAN NUMBER ONE HUNDRED;No;0;AL;;;;100;N;;;;; 10F55;SOGDIAN PUNCTUATION TWO VERTICAL BARS;Po;0;AL;;;;;N;;;;; 10F56;SOGDIAN PUNCTUATION TWO VERTICAL BARS WITH DOTS;Po;0;AL;;;;;N;;;;; 10F57;SOGDIAN PUNCTUATION CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;; 10F58;SOGDIAN PUNCTUATION TWO CIRCLES WITH DOTS;Po;0;AL;;;;;N;;;;; 10F59;SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;; 10F70;OLD UYGHUR LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10F71;OLD UYGHUR LETTER BETH;Lo;0;R;;;;;N;;;;; 10F72;OLD UYGHUR LETTER GIMEL-HETH;Lo;0;R;;;;;N;;;;; 10F73;OLD UYGHUR LETTER WAW;Lo;0;R;;;;;N;;;;; 10F74;OLD UYGHUR LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 10F75;OLD UYGHUR LETTER FINAL HETH;Lo;0;R;;;;;N;;;;; 10F76;OLD UYGHUR LETTER YODH;Lo;0;R;;;;;N;;;;; 10F77;OLD UYGHUR LETTER KAPH;Lo;0;R;;;;;N;;;;; 10F78;OLD UYGHUR LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 10F79;OLD UYGHUR LETTER MEM;Lo;0;R;;;;;N;;;;; 10F7A;OLD UYGHUR LETTER NUN;Lo;0;R;;;;;N;;;;; 10F7B;OLD UYGHUR LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10F7C;OLD UYGHUR LETTER PE;Lo;0;R;;;;;N;;;;; 10F7D;OLD UYGHUR LETTER SADHE;Lo;0;R;;;;;N;;;;; 10F7E;OLD UYGHUR LETTER RESH;Lo;0;R;;;;;N;;;;; 10F7F;OLD UYGHUR LETTER SHIN;Lo;0;R;;;;;N;;;;; 10F80;OLD UYGHUR LETTER TAW;Lo;0;R;;;;;N;;;;; 10F81;OLD UYGHUR LETTER LESH;Lo;0;R;;;;;N;;;;; 10F82;OLD UYGHUR COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;;;;; 10F83;OLD UYGHUR COMBINING DOT BELOW;Mn;220;NSM;;;;;N;;;;; 10F84;OLD UYGHUR COMBINING TWO DOTS ABOVE;Mn;230;NSM;;;;;N;;;;; 10F85;OLD UYGHUR COMBINING TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;; 10F86;OLD UYGHUR PUNCTUATION BAR;Po;0;R;;;;;N;;;;; 10F87;OLD UYGHUR PUNCTUATION TWO BARS;Po;0;R;;;;;N;;;;; 10F88;OLD UYGHUR PUNCTUATION TWO DOTS;Po;0;R;;;;;N;;;;; 10F89;OLD UYGHUR PUNCTUATION FOUR DOTS;Po;0;R;;;;;N;;;;; 10FB0;CHORASMIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10FB1;CHORASMIAN LETTER SMALL ALEPH;Lo;0;R;;;;;N;;;;; 10FB2;CHORASMIAN LETTER BETH;Lo;0;R;;;;;N;;;;; 10FB3;CHORASMIAN LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10FB4;CHORASMIAN LETTER DALETH;Lo;0;R;;;;;N;;;;; 10FB5;CHORASMIAN LETTER HE;Lo;0;R;;;;;N;;;;; 10FB6;CHORASMIAN LETTER WAW;Lo;0;R;;;;;N;;;;; 10FB7;CHORASMIAN LETTER CURLED WAW;Lo;0;R;;;;;N;;;;; 10FB8;CHORASMIAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 10FB9;CHORASMIAN LETTER HETH;Lo;0;R;;;;;N;;;;; 10FBA;CHORASMIAN LETTER YODH;Lo;0;R;;;;;N;;;;; 10FBB;CHORASMIAN LETTER KAPH;Lo;0;R;;;;;N;;;;; 10FBC;CHORASMIAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 10FBD;CHORASMIAN LETTER MEM;Lo;0;R;;;;;N;;;;; 10FBE;CHORASMIAN LETTER NUN;Lo;0;R;;;;;N;;;;; 10FBF;CHORASMIAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10FC0;CHORASMIAN LETTER AYIN;Lo;0;R;;;;;N;;;;; 10FC1;CHORASMIAN LETTER PE;Lo;0;R;;;;;N;;;;; 10FC2;CHORASMIAN LETTER RESH;Lo;0;R;;;;;N;;;;; 10FC3;CHORASMIAN LETTER SHIN;Lo;0;R;;;;;N;;;;; 10FC4;CHORASMIAN LETTER TAW;Lo;0;R;;;;;N;;;;; 10FC5;CHORASMIAN NUMBER ONE;No;0;R;;;;1;N;;;;; 10FC6;CHORASMIAN NUMBER TWO;No;0;R;;;;2;N;;;;; 10FC7;CHORASMIAN NUMBER THREE;No;0;R;;;;3;N;;;;; 10FC8;CHORASMIAN NUMBER FOUR;No;0;R;;;;4;N;;;;; 10FC9;CHORASMIAN NUMBER TEN;No;0;R;;;;10;N;;;;; 10FCA;CHORASMIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10FCB;CHORASMIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 10FE0;ELYMAIC LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10FE1;ELYMAIC LETTER BETH;Lo;0;R;;;;;N;;;;; 10FE2;ELYMAIC LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10FE3;ELYMAIC LETTER DALETH;Lo;0;R;;;;;N;;;;; 10FE4;ELYMAIC LETTER HE;Lo;0;R;;;;;N;;;;; 10FE5;ELYMAIC LETTER WAW;Lo;0;R;;;;;N;;;;; 10FE6;ELYMAIC LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 10FE7;ELYMAIC LETTER HETH;Lo;0;R;;;;;N;;;;; 10FE8;ELYMAIC LETTER TETH;Lo;0;R;;;;;N;;;;; 10FE9;ELYMAIC LETTER YODH;Lo;0;R;;;;;N;;;;; 10FEA;ELYMAIC LETTER KAPH;Lo;0;R;;;;;N;;;;; 10FEB;ELYMAIC LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 10FEC;ELYMAIC LETTER MEM;Lo;0;R;;;;;N;;;;; 10FED;ELYMAIC LETTER NUN;Lo;0;R;;;;;N;;;;; 10FEE;ELYMAIC LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10FEF;ELYMAIC LETTER AYIN;Lo;0;R;;;;;N;;;;; 10FF0;ELYMAIC LETTER PE;Lo;0;R;;;;;N;;;;; 10FF1;ELYMAIC LETTER SADHE;Lo;0;R;;;;;N;;;;; 10FF2;ELYMAIC LETTER QOPH;Lo;0;R;;;;;N;;;;; 10FF3;ELYMAIC LETTER RESH;Lo;0;R;;;;;N;;;;; 10FF4;ELYMAIC LETTER SHIN;Lo;0;R;;;;;N;;;;; 10FF5;ELYMAIC LETTER TAW;Lo;0;R;;;;;N;;;;; 10FF6;ELYMAIC LIGATURE ZAYIN-YODH;Lo;0;R;;;;;N;;;;; 11000;BRAHMI SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;; 11001;BRAHMI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11002;BRAHMI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 11003;BRAHMI SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;; 11004;BRAHMI SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;; 11005;BRAHMI LETTER A;Lo;0;L;;;;;N;;;;; 11006;BRAHMI LETTER AA;Lo;0;L;;;;;N;;;;; 11007;BRAHMI LETTER I;Lo;0;L;;;;;N;;;;; 11008;BRAHMI LETTER II;Lo;0;L;;;;;N;;;;; 11009;BRAHMI LETTER U;Lo;0;L;;;;;N;;;;; 1100A;BRAHMI LETTER UU;Lo;0;L;;;;;N;;;;; 1100B;BRAHMI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 1100C;BRAHMI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 1100D;BRAHMI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 1100E;BRAHMI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 1100F;BRAHMI LETTER E;Lo;0;L;;;;;N;;;;; 11010;BRAHMI LETTER AI;Lo;0;L;;;;;N;;;;; 11011;BRAHMI LETTER O;Lo;0;L;;;;;N;;;;; 11012;BRAHMI LETTER AU;Lo;0;L;;;;;N;;;;; 11013;BRAHMI LETTER KA;Lo;0;L;;;;;N;;;;; 11014;BRAHMI LETTER KHA;Lo;0;L;;;;;N;;;;; 11015;BRAHMI LETTER GA;Lo;0;L;;;;;N;;;;; 11016;BRAHMI LETTER GHA;Lo;0;L;;;;;N;;;;; 11017;BRAHMI LETTER NGA;Lo;0;L;;;;;N;;;;; 11018;BRAHMI LETTER CA;Lo;0;L;;;;;N;;;;; 11019;BRAHMI LETTER CHA;Lo;0;L;;;;;N;;;;; 1101A;BRAHMI LETTER JA;Lo;0;L;;;;;N;;;;; 1101B;BRAHMI LETTER JHA;Lo;0;L;;;;;N;;;;; 1101C;BRAHMI LETTER NYA;Lo;0;L;;;;;N;;;;; 1101D;BRAHMI LETTER TTA;Lo;0;L;;;;;N;;;;; 1101E;BRAHMI LETTER TTHA;Lo;0;L;;;;;N;;;;; 1101F;BRAHMI LETTER DDA;Lo;0;L;;;;;N;;;;; 11020;BRAHMI LETTER DDHA;Lo;0;L;;;;;N;;;;; 11021;BRAHMI LETTER NNA;Lo;0;L;;;;;N;;;;; 11022;BRAHMI LETTER TA;Lo;0;L;;;;;N;;;;; 11023;BRAHMI LETTER THA;Lo;0;L;;;;;N;;;;; 11024;BRAHMI LETTER DA;Lo;0;L;;;;;N;;;;; 11025;BRAHMI LETTER DHA;Lo;0;L;;;;;N;;;;; 11026;BRAHMI LETTER NA;Lo;0;L;;;;;N;;;;; 11027;BRAHMI LETTER PA;Lo;0;L;;;;;N;;;;; 11028;BRAHMI LETTER PHA;Lo;0;L;;;;;N;;;;; 11029;BRAHMI LETTER BA;Lo;0;L;;;;;N;;;;; 1102A;BRAHMI LETTER BHA;Lo;0;L;;;;;N;;;;; 1102B;BRAHMI LETTER MA;Lo;0;L;;;;;N;;;;; 1102C;BRAHMI LETTER YA;Lo;0;L;;;;;N;;;;; 1102D;BRAHMI LETTER RA;Lo;0;L;;;;;N;;;;; 1102E;BRAHMI LETTER LA;Lo;0;L;;;;;N;;;;; 1102F;BRAHMI LETTER VA;Lo;0;L;;;;;N;;;;; 11030;BRAHMI LETTER SHA;Lo;0;L;;;;;N;;;;; 11031;BRAHMI LETTER SSA;Lo;0;L;;;;;N;;;;; 11032;BRAHMI LETTER SA;Lo;0;L;;;;;N;;;;; 11033;BRAHMI LETTER HA;Lo;0;L;;;;;N;;;;; 11034;BRAHMI LETTER LLA;Lo;0;L;;;;;N;;;;; 11035;BRAHMI LETTER OLD TAMIL LLLA;Lo;0;L;;;;;N;;;;; 11036;BRAHMI LETTER OLD TAMIL RRA;Lo;0;L;;;;;N;;;;; 11037;BRAHMI LETTER OLD TAMIL NNNA;Lo;0;L;;;;;N;;;;; 11038;BRAHMI VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; 11039;BRAHMI VOWEL SIGN BHATTIPROLU AA;Mn;0;NSM;;;;;N;;;;; 1103A;BRAHMI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1103B;BRAHMI VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 1103C;BRAHMI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1103D;BRAHMI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 1103E;BRAHMI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 1103F;BRAHMI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 11040;BRAHMI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 11041;BRAHMI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 11042;BRAHMI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 11043;BRAHMI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 11044;BRAHMI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 11045;BRAHMI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 11046;BRAHMI VIRAMA;Mn;9;NSM;;;;;N;;;;; 11047;BRAHMI DANDA;Po;0;L;;;;;N;;;;; 11048;BRAHMI DOUBLE DANDA;Po;0;L;;;;;N;;;;; 11049;BRAHMI PUNCTUATION DOT;Po;0;L;;;;;N;;;;; 1104A;BRAHMI PUNCTUATION DOUBLE DOT;Po;0;L;;;;;N;;;;; 1104B;BRAHMI PUNCTUATION LINE;Po;0;L;;;;;N;;;;; 1104C;BRAHMI PUNCTUATION CRESCENT BAR;Po;0;L;;;;;N;;;;; 1104D;BRAHMI PUNCTUATION LOTUS;Po;0;L;;;;;N;;;;; 11052;BRAHMI NUMBER ONE;No;0;ON;;;1;1;N;;;;; 11053;BRAHMI NUMBER TWO;No;0;ON;;;2;2;N;;;;; 11054;BRAHMI NUMBER THREE;No;0;ON;;;3;3;N;;;;; 11055;BRAHMI NUMBER FOUR;No;0;ON;;;4;4;N;;;;; 11056;BRAHMI NUMBER FIVE;No;0;ON;;;5;5;N;;;;; 11057;BRAHMI NUMBER SIX;No;0;ON;;;6;6;N;;;;; 11058;BRAHMI NUMBER SEVEN;No;0;ON;;;7;7;N;;;;; 11059;BRAHMI NUMBER EIGHT;No;0;ON;;;8;8;N;;;;; 1105A;BRAHMI NUMBER NINE;No;0;ON;;;9;9;N;;;;; 1105B;BRAHMI NUMBER TEN;No;0;ON;;;;10;N;;;;; 1105C;BRAHMI NUMBER TWENTY;No;0;ON;;;;20;N;;;;; 1105D;BRAHMI NUMBER THIRTY;No;0;ON;;;;30;N;;;;; 1105E;BRAHMI NUMBER FORTY;No;0;ON;;;;40;N;;;;; 1105F;BRAHMI NUMBER FIFTY;No;0;ON;;;;50;N;;;;; 11060;BRAHMI NUMBER SIXTY;No;0;ON;;;;60;N;;;;; 11061;BRAHMI NUMBER SEVENTY;No;0;ON;;;;70;N;;;;; 11062;BRAHMI NUMBER EIGHTY;No;0;ON;;;;80;N;;;;; 11063;BRAHMI NUMBER NINETY;No;0;ON;;;;90;N;;;;; 11064;BRAHMI NUMBER ONE HUNDRED;No;0;ON;;;;100;N;;;;; 11065;BRAHMI NUMBER ONE THOUSAND;No;0;ON;;;;1000;N;;;;; 11066;BRAHMI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 11067;BRAHMI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 11068;BRAHMI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 11069;BRAHMI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1106A;BRAHMI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1106B;BRAHMI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1106C;BRAHMI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1106D;BRAHMI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1106E;BRAHMI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1106F;BRAHMI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11070;BRAHMI SIGN OLD TAMIL VIRAMA;Mn;9;NSM;;;;;N;;;;; 11071;BRAHMI LETTER OLD TAMIL SHORT E;Lo;0;L;;;;;N;;;;; 11072;BRAHMI LETTER OLD TAMIL SHORT O;Lo;0;L;;;;;N;;;;; 11073;BRAHMI VOWEL SIGN OLD TAMIL SHORT E;Mn;0;NSM;;;;;N;;;;; 11074;BRAHMI VOWEL SIGN OLD TAMIL SHORT O;Mn;0;NSM;;;;;N;;;;; 11075;BRAHMI LETTER OLD TAMIL LLA;Lo;0;L;;;;;N;;;;; 1107F;BRAHMI NUMBER JOINER;Mn;9;NSM;;;;;N;;;;; 11080;KAITHI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 11081;KAITHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11082;KAITHI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 11083;KAITHI LETTER A;Lo;0;L;;;;;N;;;;; 11084;KAITHI LETTER AA;Lo;0;L;;;;;N;;;;; 11085;KAITHI LETTER I;Lo;0;L;;;;;N;;;;; 11086;KAITHI LETTER II;Lo;0;L;;;;;N;;;;; 11087;KAITHI LETTER U;Lo;0;L;;;;;N;;;;; 11088;KAITHI LETTER UU;Lo;0;L;;;;;N;;;;; 11089;KAITHI LETTER E;Lo;0;L;;;;;N;;;;; 1108A;KAITHI LETTER AI;Lo;0;L;;;;;N;;;;; 1108B;KAITHI LETTER O;Lo;0;L;;;;;N;;;;; 1108C;KAITHI LETTER AU;Lo;0;L;;;;;N;;;;; 1108D;KAITHI LETTER KA;Lo;0;L;;;;;N;;;;; 1108E;KAITHI LETTER KHA;Lo;0;L;;;;;N;;;;; 1108F;KAITHI LETTER GA;Lo;0;L;;;;;N;;;;; 11090;KAITHI LETTER GHA;Lo;0;L;;;;;N;;;;; 11091;KAITHI LETTER NGA;Lo;0;L;;;;;N;;;;; 11092;KAITHI LETTER CA;Lo;0;L;;;;;N;;;;; 11093;KAITHI LETTER CHA;Lo;0;L;;;;;N;;;;; 11094;KAITHI LETTER JA;Lo;0;L;;;;;N;;;;; 11095;KAITHI LETTER JHA;Lo;0;L;;;;;N;;;;; 11096;KAITHI LETTER NYA;Lo;0;L;;;;;N;;;;; 11097;KAITHI LETTER TTA;Lo;0;L;;;;;N;;;;; 11098;KAITHI LETTER TTHA;Lo;0;L;;;;;N;;;;; 11099;KAITHI LETTER DDA;Lo;0;L;;;;;N;;;;; 1109A;KAITHI LETTER DDDHA;Lo;0;L;11099 110BA;;;;N;;;;; 1109B;KAITHI LETTER DDHA;Lo;0;L;;;;;N;;;;; 1109C;KAITHI LETTER RHA;Lo;0;L;1109B 110BA;;;;N;;;;; 1109D;KAITHI LETTER NNA;Lo;0;L;;;;;N;;;;; 1109E;KAITHI LETTER TA;Lo;0;L;;;;;N;;;;; 1109F;KAITHI LETTER THA;Lo;0;L;;;;;N;;;;; 110A0;KAITHI LETTER DA;Lo;0;L;;;;;N;;;;; 110A1;KAITHI LETTER DHA;Lo;0;L;;;;;N;;;;; 110A2;KAITHI LETTER NA;Lo;0;L;;;;;N;;;;; 110A3;KAITHI LETTER PA;Lo;0;L;;;;;N;;;;; 110A4;KAITHI LETTER PHA;Lo;0;L;;;;;N;;;;; 110A5;KAITHI LETTER BA;Lo;0;L;;;;;N;;;;; 110A6;KAITHI LETTER BHA;Lo;0;L;;;;;N;;;;; 110A7;KAITHI LETTER MA;Lo;0;L;;;;;N;;;;; 110A8;KAITHI LETTER YA;Lo;0;L;;;;;N;;;;; 110A9;KAITHI LETTER RA;Lo;0;L;;;;;N;;;;; 110AA;KAITHI LETTER LA;Lo;0;L;;;;;N;;;;; 110AB;KAITHI LETTER VA;Lo;0;L;110A5 110BA;;;;N;;;;; 110AC;KAITHI LETTER SHA;Lo;0;L;;;;;N;;;;; 110AD;KAITHI LETTER SSA;Lo;0;L;;;;;N;;;;; 110AE;KAITHI LETTER SA;Lo;0;L;;;;;N;;;;; 110AF;KAITHI LETTER HA;Lo;0;L;;;;;N;;;;; 110B0;KAITHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 110B1;KAITHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 110B2;KAITHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 110B3;KAITHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 110B4;KAITHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 110B5;KAITHI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 110B6;KAITHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 110B7;KAITHI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 110B8;KAITHI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 110B9;KAITHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 110BA;KAITHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 110BB;KAITHI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 110BC;KAITHI ENUMERATION SIGN;Po;0;L;;;;;N;;;;; 110BD;KAITHI NUMBER SIGN;Cf;0;L;;;;;N;;;;; 110BE;KAITHI SECTION MARK;Po;0;L;;;;;N;;;;; 110BF;KAITHI DOUBLE SECTION MARK;Po;0;L;;;;;N;;;;; 110C0;KAITHI DANDA;Po;0;L;;;;;N;;;;; 110C1;KAITHI DOUBLE DANDA;Po;0;L;;;;;N;;;;; 110C2;KAITHI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 110CD;KAITHI NUMBER SIGN ABOVE;Cf;0;L;;;;;N;;;;; 110D0;SORA SOMPENG LETTER SAH;Lo;0;L;;;;;N;;;;; 110D1;SORA SOMPENG LETTER TAH;Lo;0;L;;;;;N;;;;; 110D2;SORA SOMPENG LETTER BAH;Lo;0;L;;;;;N;;;;; 110D3;SORA SOMPENG LETTER CAH;Lo;0;L;;;;;N;;;;; 110D4;SORA SOMPENG LETTER DAH;Lo;0;L;;;;;N;;;;; 110D5;SORA SOMPENG LETTER GAH;Lo;0;L;;;;;N;;;;; 110D6;SORA SOMPENG LETTER MAH;Lo;0;L;;;;;N;;;;; 110D7;SORA SOMPENG LETTER NGAH;Lo;0;L;;;;;N;;;;; 110D8;SORA SOMPENG LETTER LAH;Lo;0;L;;;;;N;;;;; 110D9;SORA SOMPENG LETTER NAH;Lo;0;L;;;;;N;;;;; 110DA;SORA SOMPENG LETTER VAH;Lo;0;L;;;;;N;;;;; 110DB;SORA SOMPENG LETTER PAH;Lo;0;L;;;;;N;;;;; 110DC;SORA SOMPENG LETTER YAH;Lo;0;L;;;;;N;;;;; 110DD;SORA SOMPENG LETTER RAH;Lo;0;L;;;;;N;;;;; 110DE;SORA SOMPENG LETTER HAH;Lo;0;L;;;;;N;;;;; 110DF;SORA SOMPENG LETTER KAH;Lo;0;L;;;;;N;;;;; 110E0;SORA SOMPENG LETTER JAH;Lo;0;L;;;;;N;;;;; 110E1;SORA SOMPENG LETTER NYAH;Lo;0;L;;;;;N;;;;; 110E2;SORA SOMPENG LETTER AH;Lo;0;L;;;;;N;;;;; 110E3;SORA SOMPENG LETTER EEH;Lo;0;L;;;;;N;;;;; 110E4;SORA SOMPENG LETTER IH;Lo;0;L;;;;;N;;;;; 110E5;SORA SOMPENG LETTER UH;Lo;0;L;;;;;N;;;;; 110E6;SORA SOMPENG LETTER OH;Lo;0;L;;;;;N;;;;; 110E7;SORA SOMPENG LETTER EH;Lo;0;L;;;;;N;;;;; 110E8;SORA SOMPENG LETTER MAE;Lo;0;L;;;;;N;;;;; 110F0;SORA SOMPENG DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 110F1;SORA SOMPENG DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 110F2;SORA SOMPENG DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 110F3;SORA SOMPENG DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 110F4;SORA SOMPENG DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 110F5;SORA SOMPENG DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 110F6;SORA SOMPENG DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 110F7;SORA SOMPENG DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 110F8;SORA SOMPENG DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 110F9;SORA SOMPENG DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11100;CHAKMA SIGN CANDRABINDU;Mn;230;NSM;;;;;N;;;;; 11101;CHAKMA SIGN ANUSVARA;Mn;230;NSM;;;;;N;;;;; 11102;CHAKMA SIGN VISARGA;Mn;230;NSM;;;;;N;;;;; 11103;CHAKMA LETTER AA;Lo;0;L;;;;;N;;;;; 11104;CHAKMA LETTER I;Lo;0;L;;;;;N;;;;; 11105;CHAKMA LETTER U;Lo;0;L;;;;;N;;;;; 11106;CHAKMA LETTER E;Lo;0;L;;;;;N;;;;; 11107;CHAKMA LETTER KAA;Lo;0;L;;;;;N;;;;; 11108;CHAKMA LETTER KHAA;Lo;0;L;;;;;N;;;;; 11109;CHAKMA LETTER GAA;Lo;0;L;;;;;N;;;;; 1110A;CHAKMA LETTER GHAA;Lo;0;L;;;;;N;;;;; 1110B;CHAKMA LETTER NGAA;Lo;0;L;;;;;N;;;;; 1110C;CHAKMA LETTER CAA;Lo;0;L;;;;;N;;;;; 1110D;CHAKMA LETTER CHAA;Lo;0;L;;;;;N;;;;; 1110E;CHAKMA LETTER JAA;Lo;0;L;;;;;N;;;;; 1110F;CHAKMA LETTER JHAA;Lo;0;L;;;;;N;;;;; 11110;CHAKMA LETTER NYAA;Lo;0;L;;;;;N;;;;; 11111;CHAKMA LETTER TTAA;Lo;0;L;;;;;N;;;;; 11112;CHAKMA LETTER TTHAA;Lo;0;L;;;;;N;;;;; 11113;CHAKMA LETTER DDAA;Lo;0;L;;;;;N;;;;; 11114;CHAKMA LETTER DDHAA;Lo;0;L;;;;;N;;;;; 11115;CHAKMA LETTER NNAA;Lo;0;L;;;;;N;;;;; 11116;CHAKMA LETTER TAA;Lo;0;L;;;;;N;;;;; 11117;CHAKMA LETTER THAA;Lo;0;L;;;;;N;;;;; 11118;CHAKMA LETTER DAA;Lo;0;L;;;;;N;;;;; 11119;CHAKMA LETTER DHAA;Lo;0;L;;;;;N;;;;; 1111A;CHAKMA LETTER NAA;Lo;0;L;;;;;N;;;;; 1111B;CHAKMA LETTER PAA;Lo;0;L;;;;;N;;;;; 1111C;CHAKMA LETTER PHAA;Lo;0;L;;;;;N;;;;; 1111D;CHAKMA LETTER BAA;Lo;0;L;;;;;N;;;;; 1111E;CHAKMA LETTER BHAA;Lo;0;L;;;;;N;;;;; 1111F;CHAKMA LETTER MAA;Lo;0;L;;;;;N;;;;; 11120;CHAKMA LETTER YYAA;Lo;0;L;;;;;N;;;;; 11121;CHAKMA LETTER YAA;Lo;0;L;;;;;N;;;;; 11122;CHAKMA LETTER RAA;Lo;0;L;;;;;N;;;;; 11123;CHAKMA LETTER LAA;Lo;0;L;;;;;N;;;;; 11124;CHAKMA LETTER WAA;Lo;0;L;;;;;N;;;;; 11125;CHAKMA LETTER SAA;Lo;0;L;;;;;N;;;;; 11126;CHAKMA LETTER HAA;Lo;0;L;;;;;N;;;;; 11127;CHAKMA VOWEL SIGN A;Mn;0;NSM;;;;;N;;;;; 11128;CHAKMA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 11129;CHAKMA VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 1112A;CHAKMA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1112B;CHAKMA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 1112C;CHAKMA VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 1112D;CHAKMA VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 1112E;CHAKMA VOWEL SIGN O;Mn;0;NSM;11131 11127;;;;N;;;;; 1112F;CHAKMA VOWEL SIGN AU;Mn;0;NSM;11132 11127;;;;N;;;;; 11130;CHAKMA VOWEL SIGN OI;Mn;0;NSM;;;;;N;;;;; 11131;CHAKMA O MARK;Mn;0;NSM;;;;;N;;;;; 11132;CHAKMA AU MARK;Mn;0;NSM;;;;;N;;;;; 11133;CHAKMA VIRAMA;Mn;9;NSM;;;;;N;;;;; 11134;CHAKMA MAAYYAA;Mn;9;NSM;;;;;N;;;;; 11136;CHAKMA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 11137;CHAKMA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 11138;CHAKMA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 11139;CHAKMA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1113A;CHAKMA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1113B;CHAKMA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1113C;CHAKMA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1113D;CHAKMA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1113E;CHAKMA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1113F;CHAKMA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11140;CHAKMA SECTION MARK;Po;0;L;;;;;N;;;;; 11141;CHAKMA DANDA;Po;0;L;;;;;N;;;;; 11142;CHAKMA DOUBLE DANDA;Po;0;L;;;;;N;;;;; 11143;CHAKMA QUESTION MARK;Po;0;L;;;;;N;;;;; 11144;CHAKMA LETTER LHAA;Lo;0;L;;;;;N;;;;; 11145;CHAKMA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 11146;CHAKMA VOWEL SIGN EI;Mc;0;L;;;;;N;;;;; 11147;CHAKMA LETTER VAA;Lo;0;L;;;;;N;;;;; 11150;MAHAJANI LETTER A;Lo;0;L;;;;;N;;;;; 11151;MAHAJANI LETTER I;Lo;0;L;;;;;N;;;;; 11152;MAHAJANI LETTER U;Lo;0;L;;;;;N;;;;; 11153;MAHAJANI LETTER E;Lo;0;L;;;;;N;;;;; 11154;MAHAJANI LETTER O;Lo;0;L;;;;;N;;;;; 11155;MAHAJANI LETTER KA;Lo;0;L;;;;;N;;;;; 11156;MAHAJANI LETTER KHA;Lo;0;L;;;;;N;;;;; 11157;MAHAJANI LETTER GA;Lo;0;L;;;;;N;;;;; 11158;MAHAJANI LETTER GHA;Lo;0;L;;;;;N;;;;; 11159;MAHAJANI LETTER CA;Lo;0;L;;;;;N;;;;; 1115A;MAHAJANI LETTER CHA;Lo;0;L;;;;;N;;;;; 1115B;MAHAJANI LETTER JA;Lo;0;L;;;;;N;;;;; 1115C;MAHAJANI LETTER JHA;Lo;0;L;;;;;N;;;;; 1115D;MAHAJANI LETTER NYA;Lo;0;L;;;;;N;;;;; 1115E;MAHAJANI LETTER TTA;Lo;0;L;;;;;N;;;;; 1115F;MAHAJANI LETTER TTHA;Lo;0;L;;;;;N;;;;; 11160;MAHAJANI LETTER DDA;Lo;0;L;;;;;N;;;;; 11161;MAHAJANI LETTER DDHA;Lo;0;L;;;;;N;;;;; 11162;MAHAJANI LETTER NNA;Lo;0;L;;;;;N;;;;; 11163;MAHAJANI LETTER TA;Lo;0;L;;;;;N;;;;; 11164;MAHAJANI LETTER THA;Lo;0;L;;;;;N;;;;; 11165;MAHAJANI LETTER DA;Lo;0;L;;;;;N;;;;; 11166;MAHAJANI LETTER DHA;Lo;0;L;;;;;N;;;;; 11167;MAHAJANI LETTER NA;Lo;0;L;;;;;N;;;;; 11168;MAHAJANI LETTER PA;Lo;0;L;;;;;N;;;;; 11169;MAHAJANI LETTER PHA;Lo;0;L;;;;;N;;;;; 1116A;MAHAJANI LETTER BA;Lo;0;L;;;;;N;;;;; 1116B;MAHAJANI LETTER BHA;Lo;0;L;;;;;N;;;;; 1116C;MAHAJANI LETTER MA;Lo;0;L;;;;;N;;;;; 1116D;MAHAJANI LETTER RA;Lo;0;L;;;;;N;;;;; 1116E;MAHAJANI LETTER LA;Lo;0;L;;;;;N;;;;; 1116F;MAHAJANI LETTER VA;Lo;0;L;;;;;N;;;;; 11170;MAHAJANI LETTER SA;Lo;0;L;;;;;N;;;;; 11171;MAHAJANI LETTER HA;Lo;0;L;;;;;N;;;;; 11172;MAHAJANI LETTER RRA;Lo;0;L;;;;;N;;;;; 11173;MAHAJANI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 11174;MAHAJANI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 11175;MAHAJANI SECTION MARK;Po;0;L;;;;;N;;;;; 11176;MAHAJANI LIGATURE SHRI;Lo;0;L;;;;;N;;;;; 11180;SHARADA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 11181;SHARADA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11182;SHARADA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 11183;SHARADA LETTER A;Lo;0;L;;;;;N;;;;; 11184;SHARADA LETTER AA;Lo;0;L;;;;;N;;;;; 11185;SHARADA LETTER I;Lo;0;L;;;;;N;;;;; 11186;SHARADA LETTER II;Lo;0;L;;;;;N;;;;; 11187;SHARADA LETTER U;Lo;0;L;;;;;N;;;;; 11188;SHARADA LETTER UU;Lo;0;L;;;;;N;;;;; 11189;SHARADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 1118A;SHARADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 1118B;SHARADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 1118C;SHARADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 1118D;SHARADA LETTER E;Lo;0;L;;;;;N;;;;; 1118E;SHARADA LETTER AI;Lo;0;L;;;;;N;;;;; 1118F;SHARADA LETTER O;Lo;0;L;;;;;N;;;;; 11190;SHARADA LETTER AU;Lo;0;L;;;;;N;;;;; 11191;SHARADA LETTER KA;Lo;0;L;;;;;N;;;;; 11192;SHARADA LETTER KHA;Lo;0;L;;;;;N;;;;; 11193;SHARADA LETTER GA;Lo;0;L;;;;;N;;;;; 11194;SHARADA LETTER GHA;Lo;0;L;;;;;N;;;;; 11195;SHARADA LETTER NGA;Lo;0;L;;;;;N;;;;; 11196;SHARADA LETTER CA;Lo;0;L;;;;;N;;;;; 11197;SHARADA LETTER CHA;Lo;0;L;;;;;N;;;;; 11198;SHARADA LETTER JA;Lo;0;L;;;;;N;;;;; 11199;SHARADA LETTER JHA;Lo;0;L;;;;;N;;;;; 1119A;SHARADA LETTER NYA;Lo;0;L;;;;;N;;;;; 1119B;SHARADA LETTER TTA;Lo;0;L;;;;;N;;;;; 1119C;SHARADA LETTER TTHA;Lo;0;L;;;;;N;;;;; 1119D;SHARADA LETTER DDA;Lo;0;L;;;;;N;;;;; 1119E;SHARADA LETTER DDHA;Lo;0;L;;;;;N;;;;; 1119F;SHARADA LETTER NNA;Lo;0;L;;;;;N;;;;; 111A0;SHARADA LETTER TA;Lo;0;L;;;;;N;;;;; 111A1;SHARADA LETTER THA;Lo;0;L;;;;;N;;;;; 111A2;SHARADA LETTER DA;Lo;0;L;;;;;N;;;;; 111A3;SHARADA LETTER DHA;Lo;0;L;;;;;N;;;;; 111A4;SHARADA LETTER NA;Lo;0;L;;;;;N;;;;; 111A5;SHARADA LETTER PA;Lo;0;L;;;;;N;;;;; 111A6;SHARADA LETTER PHA;Lo;0;L;;;;;N;;;;; 111A7;SHARADA LETTER BA;Lo;0;L;;;;;N;;;;; 111A8;SHARADA LETTER BHA;Lo;0;L;;;;;N;;;;; 111A9;SHARADA LETTER MA;Lo;0;L;;;;;N;;;;; 111AA;SHARADA LETTER YA;Lo;0;L;;;;;N;;;;; 111AB;SHARADA LETTER RA;Lo;0;L;;;;;N;;;;; 111AC;SHARADA LETTER LA;Lo;0;L;;;;;N;;;;; 111AD;SHARADA LETTER LLA;Lo;0;L;;;;;N;;;;; 111AE;SHARADA LETTER VA;Lo;0;L;;;;;N;;;;; 111AF;SHARADA LETTER SHA;Lo;0;L;;;;;N;;;;; 111B0;SHARADA LETTER SSA;Lo;0;L;;;;;N;;;;; 111B1;SHARADA LETTER SA;Lo;0;L;;;;;N;;;;; 111B2;SHARADA LETTER HA;Lo;0;L;;;;;N;;;;; 111B3;SHARADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 111B4;SHARADA VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 111B5;SHARADA VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 111B6;SHARADA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 111B7;SHARADA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 111B8;SHARADA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 111B9;SHARADA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 111BA;SHARADA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 111BB;SHARADA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 111BC;SHARADA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 111BD;SHARADA VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 111BE;SHARADA VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 111BF;SHARADA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 111C0;SHARADA SIGN VIRAMA;Mc;9;L;;;;;N;;;;; 111C1;SHARADA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 111C2;SHARADA SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;; 111C3;SHARADA SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;; 111C4;SHARADA OM;Lo;0;L;;;;;N;;;;; 111C5;SHARADA DANDA;Po;0;L;;;;;N;;;;; 111C6;SHARADA DOUBLE DANDA;Po;0;L;;;;;N;;;;; 111C7;SHARADA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 111C8;SHARADA SEPARATOR;Po;0;L;;;;;N;;;;; 111C9;SHARADA SANDHI MARK;Mn;0;NSM;;;;;N;;;;; 111CA;SHARADA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 111CB;SHARADA VOWEL MODIFIER MARK;Mn;0;NSM;;;;;N;;;;; 111CC;SHARADA EXTRA SHORT VOWEL MARK;Mn;0;NSM;;;;;N;;;;; 111CD;SHARADA SUTRA MARK;Po;0;L;;;;;N;;;;; 111CE;SHARADA VOWEL SIGN PRISHTHAMATRA E;Mc;0;L;;;;;N;;;;; 111CF;SHARADA SIGN INVERTED CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 111D0;SHARADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 111D1;SHARADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 111D2;SHARADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 111D3;SHARADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 111D4;SHARADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 111D5;SHARADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 111D6;SHARADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 111D7;SHARADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 111D8;SHARADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 111D9;SHARADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 111DA;SHARADA EKAM;Lo;0;L;;;;;N;;;;; 111DB;SHARADA SIGN SIDDHAM;Po;0;L;;;;;N;;;;; 111DC;SHARADA HEADSTROKE;Lo;0;L;;;;;N;;;;; 111DD;SHARADA CONTINUATION SIGN;Po;0;L;;;;;N;;;;; 111DE;SHARADA SECTION MARK-1;Po;0;L;;;;;N;;;;; 111DF;SHARADA SECTION MARK-2;Po;0;L;;;;;N;;;;; 111E1;SINHALA ARCHAIC DIGIT ONE;No;0;L;;;;1;N;;;;; 111E2;SINHALA ARCHAIC DIGIT TWO;No;0;L;;;;2;N;;;;; 111E3;SINHALA ARCHAIC DIGIT THREE;No;0;L;;;;3;N;;;;; 111E4;SINHALA ARCHAIC DIGIT FOUR;No;0;L;;;;4;N;;;;; 111E5;SINHALA ARCHAIC DIGIT FIVE;No;0;L;;;;5;N;;;;; 111E6;SINHALA ARCHAIC DIGIT SIX;No;0;L;;;;6;N;;;;; 111E7;SINHALA ARCHAIC DIGIT SEVEN;No;0;L;;;;7;N;;;;; 111E8;SINHALA ARCHAIC DIGIT EIGHT;No;0;L;;;;8;N;;;;; 111E9;SINHALA ARCHAIC DIGIT NINE;No;0;L;;;;9;N;;;;; 111EA;SINHALA ARCHAIC NUMBER TEN;No;0;L;;;;10;N;;;;; 111EB;SINHALA ARCHAIC NUMBER TWENTY;No;0;L;;;;20;N;;;;; 111EC;SINHALA ARCHAIC NUMBER THIRTY;No;0;L;;;;30;N;;;;; 111ED;SINHALA ARCHAIC NUMBER FORTY;No;0;L;;;;40;N;;;;; 111EE;SINHALA ARCHAIC NUMBER FIFTY;No;0;L;;;;50;N;;;;; 111EF;SINHALA ARCHAIC NUMBER SIXTY;No;0;L;;;;60;N;;;;; 111F0;SINHALA ARCHAIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;; 111F1;SINHALA ARCHAIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;; 111F2;SINHALA ARCHAIC NUMBER NINETY;No;0;L;;;;90;N;;;;; 111F3;SINHALA ARCHAIC NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;; 111F4;SINHALA ARCHAIC NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;; 11200;KHOJKI LETTER A;Lo;0;L;;;;;N;;;;; 11201;KHOJKI LETTER AA;Lo;0;L;;;;;N;;;;; 11202;KHOJKI LETTER I;Lo;0;L;;;;;N;;;;; 11203;KHOJKI LETTER U;Lo;0;L;;;;;N;;;;; 11204;KHOJKI LETTER E;Lo;0;L;;;;;N;;;;; 11205;KHOJKI LETTER AI;Lo;0;L;;;;;N;;;;; 11206;KHOJKI LETTER O;Lo;0;L;;;;;N;;;;; 11207;KHOJKI LETTER AU;Lo;0;L;;;;;N;;;;; 11208;KHOJKI LETTER KA;Lo;0;L;;;;;N;;;;; 11209;KHOJKI LETTER KHA;Lo;0;L;;;;;N;;;;; 1120A;KHOJKI LETTER GA;Lo;0;L;;;;;N;;;;; 1120B;KHOJKI LETTER GGA;Lo;0;L;;;;;N;;;;; 1120C;KHOJKI LETTER GHA;Lo;0;L;;;;;N;;;;; 1120D;KHOJKI LETTER NGA;Lo;0;L;;;;;N;;;;; 1120E;KHOJKI LETTER CA;Lo;0;L;;;;;N;;;;; 1120F;KHOJKI LETTER CHA;Lo;0;L;;;;;N;;;;; 11210;KHOJKI LETTER JA;Lo;0;L;;;;;N;;;;; 11211;KHOJKI LETTER JJA;Lo;0;L;;;;;N;;;;; 11213;KHOJKI LETTER NYA;Lo;0;L;;;;;N;;;;; 11214;KHOJKI LETTER TTA;Lo;0;L;;;;;N;;;;; 11215;KHOJKI LETTER TTHA;Lo;0;L;;;;;N;;;;; 11216;KHOJKI LETTER DDA;Lo;0;L;;;;;N;;;;; 11217;KHOJKI LETTER DDHA;Lo;0;L;;;;;N;;;;; 11218;KHOJKI LETTER NNA;Lo;0;L;;;;;N;;;;; 11219;KHOJKI LETTER TA;Lo;0;L;;;;;N;;;;; 1121A;KHOJKI LETTER THA;Lo;0;L;;;;;N;;;;; 1121B;KHOJKI LETTER DA;Lo;0;L;;;;;N;;;;; 1121C;KHOJKI LETTER DDDA;Lo;0;L;;;;;N;;;;; 1121D;KHOJKI LETTER DHA;Lo;0;L;;;;;N;;;;; 1121E;KHOJKI LETTER NA;Lo;0;L;;;;;N;;;;; 1121F;KHOJKI LETTER PA;Lo;0;L;;;;;N;;;;; 11220;KHOJKI LETTER PHA;Lo;0;L;;;;;N;;;;; 11221;KHOJKI LETTER BA;Lo;0;L;;;;;N;;;;; 11222;KHOJKI LETTER BBA;Lo;0;L;;;;;N;;;;; 11223;KHOJKI LETTER BHA;Lo;0;L;;;;;N;;;;; 11224;KHOJKI LETTER MA;Lo;0;L;;;;;N;;;;; 11225;KHOJKI LETTER YA;Lo;0;L;;;;;N;;;;; 11226;KHOJKI LETTER RA;Lo;0;L;;;;;N;;;;; 11227;KHOJKI LETTER LA;Lo;0;L;;;;;N;;;;; 11228;KHOJKI LETTER VA;Lo;0;L;;;;;N;;;;; 11229;KHOJKI LETTER SA;Lo;0;L;;;;;N;;;;; 1122A;KHOJKI LETTER HA;Lo;0;L;;;;;N;;;;; 1122B;KHOJKI LETTER LLA;Lo;0;L;;;;;N;;;;; 1122C;KHOJKI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 1122D;KHOJKI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 1122E;KHOJKI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 1122F;KHOJKI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11230;KHOJKI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 11231;KHOJKI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 11232;KHOJKI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 11233;KHOJKI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 11234;KHOJKI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11235;KHOJKI SIGN VIRAMA;Mc;9;L;;;;;N;;;;; 11236;KHOJKI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 11237;KHOJKI SIGN SHADDA;Mn;0;NSM;;;;;N;;;;; 11238;KHOJKI DANDA;Po;0;L;;;;;N;;;;; 11239;KHOJKI DOUBLE DANDA;Po;0;L;;;;;N;;;;; 1123A;KHOJKI WORD SEPARATOR;Po;0;L;;;;;N;;;;; 1123B;KHOJKI SECTION MARK;Po;0;L;;;;;N;;;;; 1123C;KHOJKI DOUBLE SECTION MARK;Po;0;L;;;;;N;;;;; 1123D;KHOJKI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 1123E;KHOJKI SIGN SUKUN;Mn;0;NSM;;;;;N;;;;; 11280;MULTANI LETTER A;Lo;0;L;;;;;N;;;;; 11281;MULTANI LETTER I;Lo;0;L;;;;;N;;;;; 11282;MULTANI LETTER U;Lo;0;L;;;;;N;;;;; 11283;MULTANI LETTER E;Lo;0;L;;;;;N;;;;; 11284;MULTANI LETTER KA;Lo;0;L;;;;;N;;;;; 11285;MULTANI LETTER KHA;Lo;0;L;;;;;N;;;;; 11286;MULTANI LETTER GA;Lo;0;L;;;;;N;;;;; 11288;MULTANI LETTER GHA;Lo;0;L;;;;;N;;;;; 1128A;MULTANI LETTER CA;Lo;0;L;;;;;N;;;;; 1128B;MULTANI LETTER CHA;Lo;0;L;;;;;N;;;;; 1128C;MULTANI LETTER JA;Lo;0;L;;;;;N;;;;; 1128D;MULTANI LETTER JJA;Lo;0;L;;;;;N;;;;; 1128F;MULTANI LETTER NYA;Lo;0;L;;;;;N;;;;; 11290;MULTANI LETTER TTA;Lo;0;L;;;;;N;;;;; 11291;MULTANI LETTER TTHA;Lo;0;L;;;;;N;;;;; 11292;MULTANI LETTER DDA;Lo;0;L;;;;;N;;;;; 11293;MULTANI LETTER DDDA;Lo;0;L;;;;;N;;;;; 11294;MULTANI LETTER DDHA;Lo;0;L;;;;;N;;;;; 11295;MULTANI LETTER NNA;Lo;0;L;;;;;N;;;;; 11296;MULTANI LETTER TA;Lo;0;L;;;;;N;;;;; 11297;MULTANI LETTER THA;Lo;0;L;;;;;N;;;;; 11298;MULTANI LETTER DA;Lo;0;L;;;;;N;;;;; 11299;MULTANI LETTER DHA;Lo;0;L;;;;;N;;;;; 1129A;MULTANI LETTER NA;Lo;0;L;;;;;N;;;;; 1129B;MULTANI LETTER PA;Lo;0;L;;;;;N;;;;; 1129C;MULTANI LETTER PHA;Lo;0;L;;;;;N;;;;; 1129D;MULTANI LETTER BA;Lo;0;L;;;;;N;;;;; 1129F;MULTANI LETTER BHA;Lo;0;L;;;;;N;;;;; 112A0;MULTANI LETTER MA;Lo;0;L;;;;;N;;;;; 112A1;MULTANI LETTER YA;Lo;0;L;;;;;N;;;;; 112A2;MULTANI LETTER RA;Lo;0;L;;;;;N;;;;; 112A3;MULTANI LETTER LA;Lo;0;L;;;;;N;;;;; 112A4;MULTANI LETTER VA;Lo;0;L;;;;;N;;;;; 112A5;MULTANI LETTER SA;Lo;0;L;;;;;N;;;;; 112A6;MULTANI LETTER HA;Lo;0;L;;;;;N;;;;; 112A7;MULTANI LETTER RRA;Lo;0;L;;;;;N;;;;; 112A8;MULTANI LETTER RHA;Lo;0;L;;;;;N;;;;; 112A9;MULTANI SECTION MARK;Po;0;L;;;;;N;;;;; 112B0;KHUDAWADI LETTER A;Lo;0;L;;;;;N;;;;; 112B1;KHUDAWADI LETTER AA;Lo;0;L;;;;;N;;;;; 112B2;KHUDAWADI LETTER I;Lo;0;L;;;;;N;;;;; 112B3;KHUDAWADI LETTER II;Lo;0;L;;;;;N;;;;; 112B4;KHUDAWADI LETTER U;Lo;0;L;;;;;N;;;;; 112B5;KHUDAWADI LETTER UU;Lo;0;L;;;;;N;;;;; 112B6;KHUDAWADI LETTER E;Lo;0;L;;;;;N;;;;; 112B7;KHUDAWADI LETTER AI;Lo;0;L;;;;;N;;;;; 112B8;KHUDAWADI LETTER O;Lo;0;L;;;;;N;;;;; 112B9;KHUDAWADI LETTER AU;Lo;0;L;;;;;N;;;;; 112BA;KHUDAWADI LETTER KA;Lo;0;L;;;;;N;;;;; 112BB;KHUDAWADI LETTER KHA;Lo;0;L;;;;;N;;;;; 112BC;KHUDAWADI LETTER GA;Lo;0;L;;;;;N;;;;; 112BD;KHUDAWADI LETTER GGA;Lo;0;L;;;;;N;;;;; 112BE;KHUDAWADI LETTER GHA;Lo;0;L;;;;;N;;;;; 112BF;KHUDAWADI LETTER NGA;Lo;0;L;;;;;N;;;;; 112C0;KHUDAWADI LETTER CA;Lo;0;L;;;;;N;;;;; 112C1;KHUDAWADI LETTER CHA;Lo;0;L;;;;;N;;;;; 112C2;KHUDAWADI LETTER JA;Lo;0;L;;;;;N;;;;; 112C3;KHUDAWADI LETTER JJA;Lo;0;L;;;;;N;;;;; 112C4;KHUDAWADI LETTER JHA;Lo;0;L;;;;;N;;;;; 112C5;KHUDAWADI LETTER NYA;Lo;0;L;;;;;N;;;;; 112C6;KHUDAWADI LETTER TTA;Lo;0;L;;;;;N;;;;; 112C7;KHUDAWADI LETTER TTHA;Lo;0;L;;;;;N;;;;; 112C8;KHUDAWADI LETTER DDA;Lo;0;L;;;;;N;;;;; 112C9;KHUDAWADI LETTER DDDA;Lo;0;L;;;;;N;;;;; 112CA;KHUDAWADI LETTER RRA;Lo;0;L;;;;;N;;;;; 112CB;KHUDAWADI LETTER DDHA;Lo;0;L;;;;;N;;;;; 112CC;KHUDAWADI LETTER NNA;Lo;0;L;;;;;N;;;;; 112CD;KHUDAWADI LETTER TA;Lo;0;L;;;;;N;;;;; 112CE;KHUDAWADI LETTER THA;Lo;0;L;;;;;N;;;;; 112CF;KHUDAWADI LETTER DA;Lo;0;L;;;;;N;;;;; 112D0;KHUDAWADI LETTER DHA;Lo;0;L;;;;;N;;;;; 112D1;KHUDAWADI LETTER NA;Lo;0;L;;;;;N;;;;; 112D2;KHUDAWADI LETTER PA;Lo;0;L;;;;;N;;;;; 112D3;KHUDAWADI LETTER PHA;Lo;0;L;;;;;N;;;;; 112D4;KHUDAWADI LETTER BA;Lo;0;L;;;;;N;;;;; 112D5;KHUDAWADI LETTER BBA;Lo;0;L;;;;;N;;;;; 112D6;KHUDAWADI LETTER BHA;Lo;0;L;;;;;N;;;;; 112D7;KHUDAWADI LETTER MA;Lo;0;L;;;;;N;;;;; 112D8;KHUDAWADI LETTER YA;Lo;0;L;;;;;N;;;;; 112D9;KHUDAWADI LETTER RA;Lo;0;L;;;;;N;;;;; 112DA;KHUDAWADI LETTER LA;Lo;0;L;;;;;N;;;;; 112DB;KHUDAWADI LETTER VA;Lo;0;L;;;;;N;;;;; 112DC;KHUDAWADI LETTER SHA;Lo;0;L;;;;;N;;;;; 112DD;KHUDAWADI LETTER SA;Lo;0;L;;;;;N;;;;; 112DE;KHUDAWADI LETTER HA;Lo;0;L;;;;;N;;;;; 112DF;KHUDAWADI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 112E0;KHUDAWADI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 112E1;KHUDAWADI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 112E2;KHUDAWADI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 112E3;KHUDAWADI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 112E4;KHUDAWADI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 112E5;KHUDAWADI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 112E6;KHUDAWADI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 112E7;KHUDAWADI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 112E8;KHUDAWADI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 112E9;KHUDAWADI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 112EA;KHUDAWADI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 112F0;KHUDAWADI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 112F1;KHUDAWADI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 112F2;KHUDAWADI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 112F3;KHUDAWADI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 112F4;KHUDAWADI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 112F5;KHUDAWADI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 112F6;KHUDAWADI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 112F7;KHUDAWADI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 112F8;KHUDAWADI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 112F9;KHUDAWADI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11300;GRANTHA SIGN COMBINING ANUSVARA ABOVE;Mn;0;NSM;;;;;N;;;;; 11301;GRANTHA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 11302;GRANTHA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 11303;GRANTHA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 11305;GRANTHA LETTER A;Lo;0;L;;;;;N;;;;; 11306;GRANTHA LETTER AA;Lo;0;L;;;;;N;;;;; 11307;GRANTHA LETTER I;Lo;0;L;;;;;N;;;;; 11308;GRANTHA LETTER II;Lo;0;L;;;;;N;;;;; 11309;GRANTHA LETTER U;Lo;0;L;;;;;N;;;;; 1130A;GRANTHA LETTER UU;Lo;0;L;;;;;N;;;;; 1130B;GRANTHA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 1130C;GRANTHA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 1130F;GRANTHA LETTER EE;Lo;0;L;;;;;N;;;;; 11310;GRANTHA LETTER AI;Lo;0;L;;;;;N;;;;; 11313;GRANTHA LETTER OO;Lo;0;L;;;;;N;;;;; 11314;GRANTHA LETTER AU;Lo;0;L;;;;;N;;;;; 11315;GRANTHA LETTER KA;Lo;0;L;;;;;N;;;;; 11316;GRANTHA LETTER KHA;Lo;0;L;;;;;N;;;;; 11317;GRANTHA LETTER GA;Lo;0;L;;;;;N;;;;; 11318;GRANTHA LETTER GHA;Lo;0;L;;;;;N;;;;; 11319;GRANTHA LETTER NGA;Lo;0;L;;;;;N;;;;; 1131A;GRANTHA LETTER CA;Lo;0;L;;;;;N;;;;; 1131B;GRANTHA LETTER CHA;Lo;0;L;;;;;N;;;;; 1131C;GRANTHA LETTER JA;Lo;0;L;;;;;N;;;;; 1131D;GRANTHA LETTER JHA;Lo;0;L;;;;;N;;;;; 1131E;GRANTHA LETTER NYA;Lo;0;L;;;;;N;;;;; 1131F;GRANTHA LETTER TTA;Lo;0;L;;;;;N;;;;; 11320;GRANTHA LETTER TTHA;Lo;0;L;;;;;N;;;;; 11321;GRANTHA LETTER DDA;Lo;0;L;;;;;N;;;;; 11322;GRANTHA LETTER DDHA;Lo;0;L;;;;;N;;;;; 11323;GRANTHA LETTER NNA;Lo;0;L;;;;;N;;;;; 11324;GRANTHA LETTER TA;Lo;0;L;;;;;N;;;;; 11325;GRANTHA LETTER THA;Lo;0;L;;;;;N;;;;; 11326;GRANTHA LETTER DA;Lo;0;L;;;;;N;;;;; 11327;GRANTHA LETTER DHA;Lo;0;L;;;;;N;;;;; 11328;GRANTHA LETTER NA;Lo;0;L;;;;;N;;;;; 1132A;GRANTHA LETTER PA;Lo;0;L;;;;;N;;;;; 1132B;GRANTHA LETTER PHA;Lo;0;L;;;;;N;;;;; 1132C;GRANTHA LETTER BA;Lo;0;L;;;;;N;;;;; 1132D;GRANTHA LETTER BHA;Lo;0;L;;;;;N;;;;; 1132E;GRANTHA LETTER MA;Lo;0;L;;;;;N;;;;; 1132F;GRANTHA LETTER YA;Lo;0;L;;;;;N;;;;; 11330;GRANTHA LETTER RA;Lo;0;L;;;;;N;;;;; 11332;GRANTHA LETTER LA;Lo;0;L;;;;;N;;;;; 11333;GRANTHA LETTER LLA;Lo;0;L;;;;;N;;;;; 11335;GRANTHA LETTER VA;Lo;0;L;;;;;N;;;;; 11336;GRANTHA LETTER SHA;Lo;0;L;;;;;N;;;;; 11337;GRANTHA LETTER SSA;Lo;0;L;;;;;N;;;;; 11338;GRANTHA LETTER SA;Lo;0;L;;;;;N;;;;; 11339;GRANTHA LETTER HA;Lo;0;L;;;;;N;;;;; 1133B;COMBINING BINDU BELOW;Mn;7;NSM;;;;;N;;;;; 1133C;GRANTHA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 1133D;GRANTHA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 1133E;GRANTHA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 1133F;GRANTHA VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 11340;GRANTHA VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 11341;GRANTHA VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 11342;GRANTHA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 11343;GRANTHA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; 11344;GRANTHA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; 11347;GRANTHA VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; 11348;GRANTHA VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 1134B;GRANTHA VOWEL SIGN OO;Mc;0;L;11347 1133E;;;;N;;;;; 1134C;GRANTHA VOWEL SIGN AU;Mc;0;L;11347 11357;;;;N;;;;; 1134D;GRANTHA SIGN VIRAMA;Mc;9;L;;;;;N;;;;; 11350;GRANTHA OM;Lo;0;L;;;;;N;;;;; 11357;GRANTHA AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 1135D;GRANTHA SIGN PLUTA;Lo;0;L;;;;;N;;;;; 1135E;GRANTHA LETTER VEDIC ANUSVARA;Lo;0;L;;;;;N;;;;; 1135F;GRANTHA LETTER VEDIC DOUBLE ANUSVARA;Lo;0;L;;;;;N;;;;; 11360;GRANTHA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 11361;GRANTHA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 11362;GRANTHA VOWEL SIGN VOCALIC L;Mc;0;L;;;;;N;;;;; 11363;GRANTHA VOWEL SIGN VOCALIC LL;Mc;0;L;;;;;N;;;;; 11366;COMBINING GRANTHA DIGIT ZERO;Mn;230;NSM;;;;;N;;;;; 11367;COMBINING GRANTHA DIGIT ONE;Mn;230;NSM;;;;;N;;;;; 11368;COMBINING GRANTHA DIGIT TWO;Mn;230;NSM;;;;;N;;;;; 11369;COMBINING GRANTHA DIGIT THREE;Mn;230;NSM;;;;;N;;;;; 1136A;COMBINING GRANTHA DIGIT FOUR;Mn;230;NSM;;;;;N;;;;; 1136B;COMBINING GRANTHA DIGIT FIVE;Mn;230;NSM;;;;;N;;;;; 1136C;COMBINING GRANTHA DIGIT SIX;Mn;230;NSM;;;;;N;;;;; 11370;COMBINING GRANTHA LETTER A;Mn;230;NSM;;;;;N;;;;; 11371;COMBINING GRANTHA LETTER KA;Mn;230;NSM;;;;;N;;;;; 11372;COMBINING GRANTHA LETTER NA;Mn;230;NSM;;;;;N;;;;; 11373;COMBINING GRANTHA LETTER VI;Mn;230;NSM;;;;;N;;;;; 11374;COMBINING GRANTHA LETTER PA;Mn;230;NSM;;;;;N;;;;; 11400;NEWA LETTER A;Lo;0;L;;;;;N;;;;; 11401;NEWA LETTER AA;Lo;0;L;;;;;N;;;;; 11402;NEWA LETTER I;Lo;0;L;;;;;N;;;;; 11403;NEWA LETTER II;Lo;0;L;;;;;N;;;;; 11404;NEWA LETTER U;Lo;0;L;;;;;N;;;;; 11405;NEWA LETTER UU;Lo;0;L;;;;;N;;;;; 11406;NEWA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 11407;NEWA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 11408;NEWA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 11409;NEWA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 1140A;NEWA LETTER E;Lo;0;L;;;;;N;;;;; 1140B;NEWA LETTER AI;Lo;0;L;;;;;N;;;;; 1140C;NEWA LETTER O;Lo;0;L;;;;;N;;;;; 1140D;NEWA LETTER AU;Lo;0;L;;;;;N;;;;; 1140E;NEWA LETTER KA;Lo;0;L;;;;;N;;;;; 1140F;NEWA LETTER KHA;Lo;0;L;;;;;N;;;;; 11410;NEWA LETTER GA;Lo;0;L;;;;;N;;;;; 11411;NEWA LETTER GHA;Lo;0;L;;;;;N;;;;; 11412;NEWA LETTER NGA;Lo;0;L;;;;;N;;;;; 11413;NEWA LETTER NGHA;Lo;0;L;;;;;N;;;;; 11414;NEWA LETTER CA;Lo;0;L;;;;;N;;;;; 11415;NEWA LETTER CHA;Lo;0;L;;;;;N;;;;; 11416;NEWA LETTER JA;Lo;0;L;;;;;N;;;;; 11417;NEWA LETTER JHA;Lo;0;L;;;;;N;;;;; 11418;NEWA LETTER NYA;Lo;0;L;;;;;N;;;;; 11419;NEWA LETTER NYHA;Lo;0;L;;;;;N;;;;; 1141A;NEWA LETTER TTA;Lo;0;L;;;;;N;;;;; 1141B;NEWA LETTER TTHA;Lo;0;L;;;;;N;;;;; 1141C;NEWA LETTER DDA;Lo;0;L;;;;;N;;;;; 1141D;NEWA LETTER DDHA;Lo;0;L;;;;;N;;;;; 1141E;NEWA LETTER NNA;Lo;0;L;;;;;N;;;;; 1141F;NEWA LETTER TA;Lo;0;L;;;;;N;;;;; 11420;NEWA LETTER THA;Lo;0;L;;;;;N;;;;; 11421;NEWA LETTER DA;Lo;0;L;;;;;N;;;;; 11422;NEWA LETTER DHA;Lo;0;L;;;;;N;;;;; 11423;NEWA LETTER NA;Lo;0;L;;;;;N;;;;; 11424;NEWA LETTER NHA;Lo;0;L;;;;;N;;;;; 11425;NEWA LETTER PA;Lo;0;L;;;;;N;;;;; 11426;NEWA LETTER PHA;Lo;0;L;;;;;N;;;;; 11427;NEWA LETTER BA;Lo;0;L;;;;;N;;;;; 11428;NEWA LETTER BHA;Lo;0;L;;;;;N;;;;; 11429;NEWA LETTER MA;Lo;0;L;;;;;N;;;;; 1142A;NEWA LETTER MHA;Lo;0;L;;;;;N;;;;; 1142B;NEWA LETTER YA;Lo;0;L;;;;;N;;;;; 1142C;NEWA LETTER RA;Lo;0;L;;;;;N;;;;; 1142D;NEWA LETTER RHA;Lo;0;L;;;;;N;;;;; 1142E;NEWA LETTER LA;Lo;0;L;;;;;N;;;;; 1142F;NEWA LETTER LHA;Lo;0;L;;;;;N;;;;; 11430;NEWA LETTER WA;Lo;0;L;;;;;N;;;;; 11431;NEWA LETTER SHA;Lo;0;L;;;;;N;;;;; 11432;NEWA LETTER SSA;Lo;0;L;;;;;N;;;;; 11433;NEWA LETTER SA;Lo;0;L;;;;;N;;;;; 11434;NEWA LETTER HA;Lo;0;L;;;;;N;;;;; 11435;NEWA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 11436;NEWA VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 11437;NEWA VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 11438;NEWA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11439;NEWA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 1143A;NEWA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 1143B;NEWA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 1143C;NEWA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 1143D;NEWA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 1143E;NEWA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 1143F;NEWA VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 11440;NEWA VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 11441;NEWA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 11442;NEWA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 11443;NEWA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 11444;NEWA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11445;NEWA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 11446;NEWA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 11447;NEWA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 11448;NEWA SIGN FINAL ANUSVARA;Lo;0;L;;;;;N;;;;; 11449;NEWA OM;Lo;0;L;;;;;N;;;;; 1144A;NEWA SIDDHI;Lo;0;L;;;;;N;;;;; 1144B;NEWA DANDA;Po;0;L;;;;;N;;;;; 1144C;NEWA DOUBLE DANDA;Po;0;L;;;;;N;;;;; 1144D;NEWA COMMA;Po;0;L;;;;;N;;;;; 1144E;NEWA GAP FILLER;Po;0;L;;;;;N;;;;; 1144F;NEWA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 11450;NEWA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 11451;NEWA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 11452;NEWA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 11453;NEWA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 11454;NEWA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 11455;NEWA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 11456;NEWA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 11457;NEWA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 11458;NEWA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 11459;NEWA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1145A;NEWA DOUBLE COMMA;Po;0;L;;;;;N;;;;; 1145B;NEWA PLACEHOLDER MARK;Po;0;L;;;;;N;;;;; 1145D;NEWA INSERTION SIGN;Po;0;L;;;;;N;;;;; 1145E;NEWA SANDHI MARK;Mn;230;NSM;;;;;N;;;;; 1145F;NEWA LETTER VEDIC ANUSVARA;Lo;0;L;;;;;N;;;;; 11460;NEWA SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;; 11461;NEWA SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;; 11480;TIRHUTA ANJI;Lo;0;L;;;;;N;;;;; 11481;TIRHUTA LETTER A;Lo;0;L;;;;;N;;;;; 11482;TIRHUTA LETTER AA;Lo;0;L;;;;;N;;;;; 11483;TIRHUTA LETTER I;Lo;0;L;;;;;N;;;;; 11484;TIRHUTA LETTER II;Lo;0;L;;;;;N;;;;; 11485;TIRHUTA LETTER U;Lo;0;L;;;;;N;;;;; 11486;TIRHUTA LETTER UU;Lo;0;L;;;;;N;;;;; 11487;TIRHUTA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 11488;TIRHUTA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 11489;TIRHUTA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 1148A;TIRHUTA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 1148B;TIRHUTA LETTER E;Lo;0;L;;;;;N;;;;; 1148C;TIRHUTA LETTER AI;Lo;0;L;;;;;N;;;;; 1148D;TIRHUTA LETTER O;Lo;0;L;;;;;N;;;;; 1148E;TIRHUTA LETTER AU;Lo;0;L;;;;;N;;;;; 1148F;TIRHUTA LETTER KA;Lo;0;L;;;;;N;;;;; 11490;TIRHUTA LETTER KHA;Lo;0;L;;;;;N;;;;; 11491;TIRHUTA LETTER GA;Lo;0;L;;;;;N;;;;; 11492;TIRHUTA LETTER GHA;Lo;0;L;;;;;N;;;;; 11493;TIRHUTA LETTER NGA;Lo;0;L;;;;;N;;;;; 11494;TIRHUTA LETTER CA;Lo;0;L;;;;;N;;;;; 11495;TIRHUTA LETTER CHA;Lo;0;L;;;;;N;;;;; 11496;TIRHUTA LETTER JA;Lo;0;L;;;;;N;;;;; 11497;TIRHUTA LETTER JHA;Lo;0;L;;;;;N;;;;; 11498;TIRHUTA LETTER NYA;Lo;0;L;;;;;N;;;;; 11499;TIRHUTA LETTER TTA;Lo;0;L;;;;;N;;;;; 1149A;TIRHUTA LETTER TTHA;Lo;0;L;;;;;N;;;;; 1149B;TIRHUTA LETTER DDA;Lo;0;L;;;;;N;;;;; 1149C;TIRHUTA LETTER DDHA;Lo;0;L;;;;;N;;;;; 1149D;TIRHUTA LETTER NNA;Lo;0;L;;;;;N;;;;; 1149E;TIRHUTA LETTER TA;Lo;0;L;;;;;N;;;;; 1149F;TIRHUTA LETTER THA;Lo;0;L;;;;;N;;;;; 114A0;TIRHUTA LETTER DA;Lo;0;L;;;;;N;;;;; 114A1;TIRHUTA LETTER DHA;Lo;0;L;;;;;N;;;;; 114A2;TIRHUTA LETTER NA;Lo;0;L;;;;;N;;;;; 114A3;TIRHUTA LETTER PA;Lo;0;L;;;;;N;;;;; 114A4;TIRHUTA LETTER PHA;Lo;0;L;;;;;N;;;;; 114A5;TIRHUTA LETTER BA;Lo;0;L;;;;;N;;;;; 114A6;TIRHUTA LETTER BHA;Lo;0;L;;;;;N;;;;; 114A7;TIRHUTA LETTER MA;Lo;0;L;;;;;N;;;;; 114A8;TIRHUTA LETTER YA;Lo;0;L;;;;;N;;;;; 114A9;TIRHUTA LETTER RA;Lo;0;L;;;;;N;;;;; 114AA;TIRHUTA LETTER LA;Lo;0;L;;;;;N;;;;; 114AB;TIRHUTA LETTER VA;Lo;0;L;;;;;N;;;;; 114AC;TIRHUTA LETTER SHA;Lo;0;L;;;;;N;;;;; 114AD;TIRHUTA LETTER SSA;Lo;0;L;;;;;N;;;;; 114AE;TIRHUTA LETTER SA;Lo;0;L;;;;;N;;;;; 114AF;TIRHUTA LETTER HA;Lo;0;L;;;;;N;;;;; 114B0;TIRHUTA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 114B1;TIRHUTA VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 114B2;TIRHUTA VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 114B3;TIRHUTA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 114B4;TIRHUTA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 114B5;TIRHUTA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 114B6;TIRHUTA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 114B7;TIRHUTA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 114B8;TIRHUTA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 114B9;TIRHUTA VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 114BA;TIRHUTA VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;; 114BB;TIRHUTA VOWEL SIGN AI;Mc;0;L;114B9 114BA;;;;N;;;;; 114BC;TIRHUTA VOWEL SIGN O;Mc;0;L;114B9 114B0;;;;N;;;;; 114BD;TIRHUTA VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;; 114BE;TIRHUTA VOWEL SIGN AU;Mc;0;L;114B9 114BD;;;;N;;;;; 114BF;TIRHUTA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 114C0;TIRHUTA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 114C1;TIRHUTA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 114C2;TIRHUTA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 114C3;TIRHUTA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 114C4;TIRHUTA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 114C5;TIRHUTA GVANG;Lo;0;L;;;;;N;;;;; 114C6;TIRHUTA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 114C7;TIRHUTA OM;Lo;0;L;;;;;N;;;;; 114D0;TIRHUTA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 114D1;TIRHUTA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 114D2;TIRHUTA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 114D3;TIRHUTA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 114D4;TIRHUTA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 114D5;TIRHUTA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 114D6;TIRHUTA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 114D7;TIRHUTA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 114D8;TIRHUTA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 114D9;TIRHUTA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11580;SIDDHAM LETTER A;Lo;0;L;;;;;N;;;;; 11581;SIDDHAM LETTER AA;Lo;0;L;;;;;N;;;;; 11582;SIDDHAM LETTER I;Lo;0;L;;;;;N;;;;; 11583;SIDDHAM LETTER II;Lo;0;L;;;;;N;;;;; 11584;SIDDHAM LETTER U;Lo;0;L;;;;;N;;;;; 11585;SIDDHAM LETTER UU;Lo;0;L;;;;;N;;;;; 11586;SIDDHAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 11587;SIDDHAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 11588;SIDDHAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 11589;SIDDHAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 1158A;SIDDHAM LETTER E;Lo;0;L;;;;;N;;;;; 1158B;SIDDHAM LETTER AI;Lo;0;L;;;;;N;;;;; 1158C;SIDDHAM LETTER O;Lo;0;L;;;;;N;;;;; 1158D;SIDDHAM LETTER AU;Lo;0;L;;;;;N;;;;; 1158E;SIDDHAM LETTER KA;Lo;0;L;;;;;N;;;;; 1158F;SIDDHAM LETTER KHA;Lo;0;L;;;;;N;;;;; 11590;SIDDHAM LETTER GA;Lo;0;L;;;;;N;;;;; 11591;SIDDHAM LETTER GHA;Lo;0;L;;;;;N;;;;; 11592;SIDDHAM LETTER NGA;Lo;0;L;;;;;N;;;;; 11593;SIDDHAM LETTER CA;Lo;0;L;;;;;N;;;;; 11594;SIDDHAM LETTER CHA;Lo;0;L;;;;;N;;;;; 11595;SIDDHAM LETTER JA;Lo;0;L;;;;;N;;;;; 11596;SIDDHAM LETTER JHA;Lo;0;L;;;;;N;;;;; 11597;SIDDHAM LETTER NYA;Lo;0;L;;;;;N;;;;; 11598;SIDDHAM LETTER TTA;Lo;0;L;;;;;N;;;;; 11599;SIDDHAM LETTER TTHA;Lo;0;L;;;;;N;;;;; 1159A;SIDDHAM LETTER DDA;Lo;0;L;;;;;N;;;;; 1159B;SIDDHAM LETTER DDHA;Lo;0;L;;;;;N;;;;; 1159C;SIDDHAM LETTER NNA;Lo;0;L;;;;;N;;;;; 1159D;SIDDHAM LETTER TA;Lo;0;L;;;;;N;;;;; 1159E;SIDDHAM LETTER THA;Lo;0;L;;;;;N;;;;; 1159F;SIDDHAM LETTER DA;Lo;0;L;;;;;N;;;;; 115A0;SIDDHAM LETTER DHA;Lo;0;L;;;;;N;;;;; 115A1;SIDDHAM LETTER NA;Lo;0;L;;;;;N;;;;; 115A2;SIDDHAM LETTER PA;Lo;0;L;;;;;N;;;;; 115A3;SIDDHAM LETTER PHA;Lo;0;L;;;;;N;;;;; 115A4;SIDDHAM LETTER BA;Lo;0;L;;;;;N;;;;; 115A5;SIDDHAM LETTER BHA;Lo;0;L;;;;;N;;;;; 115A6;SIDDHAM LETTER MA;Lo;0;L;;;;;N;;;;; 115A7;SIDDHAM LETTER YA;Lo;0;L;;;;;N;;;;; 115A8;SIDDHAM LETTER RA;Lo;0;L;;;;;N;;;;; 115A9;SIDDHAM LETTER LA;Lo;0;L;;;;;N;;;;; 115AA;SIDDHAM LETTER VA;Lo;0;L;;;;;N;;;;; 115AB;SIDDHAM LETTER SHA;Lo;0;L;;;;;N;;;;; 115AC;SIDDHAM LETTER SSA;Lo;0;L;;;;;N;;;;; 115AD;SIDDHAM LETTER SA;Lo;0;L;;;;;N;;;;; 115AE;SIDDHAM LETTER HA;Lo;0;L;;;;;N;;;;; 115AF;SIDDHAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 115B0;SIDDHAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 115B1;SIDDHAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 115B2;SIDDHAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 115B3;SIDDHAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 115B4;SIDDHAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 115B5;SIDDHAM VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 115B8;SIDDHAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 115B9;SIDDHAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 115BA;SIDDHAM VOWEL SIGN O;Mc;0;L;115B8 115AF;;;;N;;;;; 115BB;SIDDHAM VOWEL SIGN AU;Mc;0;L;115B9 115AF;;;;N;;;;; 115BC;SIDDHAM SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 115BD;SIDDHAM SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 115BE;SIDDHAM SIGN VISARGA;Mc;0;L;;;;;N;;;;; 115BF;SIDDHAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 115C0;SIDDHAM SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 115C1;SIDDHAM SIGN SIDDHAM;Po;0;L;;;;;N;;;;; 115C2;SIDDHAM DANDA;Po;0;L;;;;;N;;;;; 115C3;SIDDHAM DOUBLE DANDA;Po;0;L;;;;;N;;;;; 115C4;SIDDHAM SEPARATOR DOT;Po;0;L;;;;;N;;;;; 115C5;SIDDHAM SEPARATOR BAR;Po;0;L;;;;;N;;;;; 115C6;SIDDHAM REPETITION MARK-1;Po;0;L;;;;;N;;;;; 115C7;SIDDHAM REPETITION MARK-2;Po;0;L;;;;;N;;;;; 115C8;SIDDHAM REPETITION MARK-3;Po;0;L;;;;;N;;;;; 115C9;SIDDHAM END OF TEXT MARK;Po;0;L;;;;;N;;;;; 115CA;SIDDHAM SECTION MARK WITH TRIDENT AND U-SHAPED ORNAMENTS;Po;0;L;;;;;N;;;;; 115CB;SIDDHAM SECTION MARK WITH TRIDENT AND DOTTED CRESCENTS;Po;0;L;;;;;N;;;;; 115CC;SIDDHAM SECTION MARK WITH RAYS AND DOTTED CRESCENTS;Po;0;L;;;;;N;;;;; 115CD;SIDDHAM SECTION MARK WITH RAYS AND DOTTED DOUBLE CRESCENTS;Po;0;L;;;;;N;;;;; 115CE;SIDDHAM SECTION MARK WITH RAYS AND DOTTED TRIPLE CRESCENTS;Po;0;L;;;;;N;;;;; 115CF;SIDDHAM SECTION MARK DOUBLE RING;Po;0;L;;;;;N;;;;; 115D0;SIDDHAM SECTION MARK DOUBLE RING WITH RAYS;Po;0;L;;;;;N;;;;; 115D1;SIDDHAM SECTION MARK WITH DOUBLE CRESCENTS;Po;0;L;;;;;N;;;;; 115D2;SIDDHAM SECTION MARK WITH TRIPLE CRESCENTS;Po;0;L;;;;;N;;;;; 115D3;SIDDHAM SECTION MARK WITH QUADRUPLE CRESCENTS;Po;0;L;;;;;N;;;;; 115D4;SIDDHAM SECTION MARK WITH SEPTUPLE CRESCENTS;Po;0;L;;;;;N;;;;; 115D5;SIDDHAM SECTION MARK WITH CIRCLES AND RAYS;Po;0;L;;;;;N;;;;; 115D6;SIDDHAM SECTION MARK WITH CIRCLES AND TWO ENCLOSURES;Po;0;L;;;;;N;;;;; 115D7;SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES;Po;0;L;;;;;N;;;;; 115D8;SIDDHAM LETTER THREE-CIRCLE ALTERNATE I;Lo;0;L;;;;;N;;;;; 115D9;SIDDHAM LETTER TWO-CIRCLE ALTERNATE I;Lo;0;L;;;;;N;;;;; 115DA;SIDDHAM LETTER TWO-CIRCLE ALTERNATE II;Lo;0;L;;;;;N;;;;; 115DB;SIDDHAM LETTER ALTERNATE U;Lo;0;L;;;;;N;;;;; 115DC;SIDDHAM VOWEL SIGN ALTERNATE U;Mn;0;NSM;;;;;N;;;;; 115DD;SIDDHAM VOWEL SIGN ALTERNATE UU;Mn;0;NSM;;;;;N;;;;; 11600;MODI LETTER A;Lo;0;L;;;;;N;;;;; 11601;MODI LETTER AA;Lo;0;L;;;;;N;;;;; 11602;MODI LETTER I;Lo;0;L;;;;;N;;;;; 11603;MODI LETTER II;Lo;0;L;;;;;N;;;;; 11604;MODI LETTER U;Lo;0;L;;;;;N;;;;; 11605;MODI LETTER UU;Lo;0;L;;;;;N;;;;; 11606;MODI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 11607;MODI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 11608;MODI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 11609;MODI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 1160A;MODI LETTER E;Lo;0;L;;;;;N;;;;; 1160B;MODI LETTER AI;Lo;0;L;;;;;N;;;;; 1160C;MODI LETTER O;Lo;0;L;;;;;N;;;;; 1160D;MODI LETTER AU;Lo;0;L;;;;;N;;;;; 1160E;MODI LETTER KA;Lo;0;L;;;;;N;;;;; 1160F;MODI LETTER KHA;Lo;0;L;;;;;N;;;;; 11610;MODI LETTER GA;Lo;0;L;;;;;N;;;;; 11611;MODI LETTER GHA;Lo;0;L;;;;;N;;;;; 11612;MODI LETTER NGA;Lo;0;L;;;;;N;;;;; 11613;MODI LETTER CA;Lo;0;L;;;;;N;;;;; 11614;MODI LETTER CHA;Lo;0;L;;;;;N;;;;; 11615;MODI LETTER JA;Lo;0;L;;;;;N;;;;; 11616;MODI LETTER JHA;Lo;0;L;;;;;N;;;;; 11617;MODI LETTER NYA;Lo;0;L;;;;;N;;;;; 11618;MODI LETTER TTA;Lo;0;L;;;;;N;;;;; 11619;MODI LETTER TTHA;Lo;0;L;;;;;N;;;;; 1161A;MODI LETTER DDA;Lo;0;L;;;;;N;;;;; 1161B;MODI LETTER DDHA;Lo;0;L;;;;;N;;;;; 1161C;MODI LETTER NNA;Lo;0;L;;;;;N;;;;; 1161D;MODI LETTER TA;Lo;0;L;;;;;N;;;;; 1161E;MODI LETTER THA;Lo;0;L;;;;;N;;;;; 1161F;MODI LETTER DA;Lo;0;L;;;;;N;;;;; 11620;MODI LETTER DHA;Lo;0;L;;;;;N;;;;; 11621;MODI LETTER NA;Lo;0;L;;;;;N;;;;; 11622;MODI LETTER PA;Lo;0;L;;;;;N;;;;; 11623;MODI LETTER PHA;Lo;0;L;;;;;N;;;;; 11624;MODI LETTER BA;Lo;0;L;;;;;N;;;;; 11625;MODI LETTER BHA;Lo;0;L;;;;;N;;;;; 11626;MODI LETTER MA;Lo;0;L;;;;;N;;;;; 11627;MODI LETTER YA;Lo;0;L;;;;;N;;;;; 11628;MODI LETTER RA;Lo;0;L;;;;;N;;;;; 11629;MODI LETTER LA;Lo;0;L;;;;;N;;;;; 1162A;MODI LETTER VA;Lo;0;L;;;;;N;;;;; 1162B;MODI LETTER SHA;Lo;0;L;;;;;N;;;;; 1162C;MODI LETTER SSA;Lo;0;L;;;;;N;;;;; 1162D;MODI LETTER SA;Lo;0;L;;;;;N;;;;; 1162E;MODI LETTER HA;Lo;0;L;;;;;N;;;;; 1162F;MODI LETTER LLA;Lo;0;L;;;;;N;;;;; 11630;MODI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 11631;MODI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 11632;MODI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 11633;MODI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11634;MODI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 11635;MODI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 11636;MODI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 11637;MODI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 11638;MODI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 11639;MODI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 1163A;MODI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 1163B;MODI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 1163C;MODI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 1163D;MODI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 1163E;MODI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 1163F;MODI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 11640;MODI SIGN ARDHACANDRA;Mn;0;NSM;;;;;N;;;;; 11641;MODI DANDA;Po;0;L;;;;;N;;;;; 11642;MODI DOUBLE DANDA;Po;0;L;;;;;N;;;;; 11643;MODI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 11644;MODI SIGN HUVA;Lo;0;L;;;;;N;;;;; 11650;MODI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 11651;MODI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 11652;MODI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 11653;MODI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 11654;MODI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 11655;MODI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 11656;MODI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 11657;MODI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 11658;MODI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 11659;MODI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11660;MONGOLIAN BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;; 11661;MONGOLIAN ROTATED BIRGA;Po;0;ON;;;;;N;;;;; 11662;MONGOLIAN DOUBLE BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;; 11663;MONGOLIAN TRIPLE BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;; 11664;MONGOLIAN BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;; 11665;MONGOLIAN ROTATED BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;; 11666;MONGOLIAN ROTATED BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;; 11667;MONGOLIAN INVERTED BIRGA;Po;0;ON;;;;;N;;;;; 11668;MONGOLIAN INVERTED BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;; 11669;MONGOLIAN SWIRL BIRGA;Po;0;ON;;;;;N;;;;; 1166A;MONGOLIAN SWIRL BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;; 1166B;MONGOLIAN SWIRL BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;; 1166C;MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;; 11680;TAKRI LETTER A;Lo;0;L;;;;;N;;;;; 11681;TAKRI LETTER AA;Lo;0;L;;;;;N;;;;; 11682;TAKRI LETTER I;Lo;0;L;;;;;N;;;;; 11683;TAKRI LETTER II;Lo;0;L;;;;;N;;;;; 11684;TAKRI LETTER U;Lo;0;L;;;;;N;;;;; 11685;TAKRI LETTER UU;Lo;0;L;;;;;N;;;;; 11686;TAKRI LETTER E;Lo;0;L;;;;;N;;;;; 11687;TAKRI LETTER AI;Lo;0;L;;;;;N;;;;; 11688;TAKRI LETTER O;Lo;0;L;;;;;N;;;;; 11689;TAKRI LETTER AU;Lo;0;L;;;;;N;;;;; 1168A;TAKRI LETTER KA;Lo;0;L;;;;;N;;;;; 1168B;TAKRI LETTER KHA;Lo;0;L;;;;;N;;;;; 1168C;TAKRI LETTER GA;Lo;0;L;;;;;N;;;;; 1168D;TAKRI LETTER GHA;Lo;0;L;;;;;N;;;;; 1168E;TAKRI LETTER NGA;Lo;0;L;;;;;N;;;;; 1168F;TAKRI LETTER CA;Lo;0;L;;;;;N;;;;; 11690;TAKRI LETTER CHA;Lo;0;L;;;;;N;;;;; 11691;TAKRI LETTER JA;Lo;0;L;;;;;N;;;;; 11692;TAKRI LETTER JHA;Lo;0;L;;;;;N;;;;; 11693;TAKRI LETTER NYA;Lo;0;L;;;;;N;;;;; 11694;TAKRI LETTER TTA;Lo;0;L;;;;;N;;;;; 11695;TAKRI LETTER TTHA;Lo;0;L;;;;;N;;;;; 11696;TAKRI LETTER DDA;Lo;0;L;;;;;N;;;;; 11697;TAKRI LETTER DDHA;Lo;0;L;;;;;N;;;;; 11698;TAKRI LETTER NNA;Lo;0;L;;;;;N;;;;; 11699;TAKRI LETTER TA;Lo;0;L;;;;;N;;;;; 1169A;TAKRI LETTER THA;Lo;0;L;;;;;N;;;;; 1169B;TAKRI LETTER DA;Lo;0;L;;;;;N;;;;; 1169C;TAKRI LETTER DHA;Lo;0;L;;;;;N;;;;; 1169D;TAKRI LETTER NA;Lo;0;L;;;;;N;;;;; 1169E;TAKRI LETTER PA;Lo;0;L;;;;;N;;;;; 1169F;TAKRI LETTER PHA;Lo;0;L;;;;;N;;;;; 116A0;TAKRI LETTER BA;Lo;0;L;;;;;N;;;;; 116A1;TAKRI LETTER BHA;Lo;0;L;;;;;N;;;;; 116A2;TAKRI LETTER MA;Lo;0;L;;;;;N;;;;; 116A3;TAKRI LETTER YA;Lo;0;L;;;;;N;;;;; 116A4;TAKRI LETTER RA;Lo;0;L;;;;;N;;;;; 116A5;TAKRI LETTER LA;Lo;0;L;;;;;N;;;;; 116A6;TAKRI LETTER VA;Lo;0;L;;;;;N;;;;; 116A7;TAKRI LETTER SHA;Lo;0;L;;;;;N;;;;; 116A8;TAKRI LETTER SA;Lo;0;L;;;;;N;;;;; 116A9;TAKRI LETTER HA;Lo;0;L;;;;;N;;;;; 116AA;TAKRI LETTER RRA;Lo;0;L;;;;;N;;;;; 116AB;TAKRI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 116AC;TAKRI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 116AD;TAKRI VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; 116AE;TAKRI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 116AF;TAKRI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 116B0;TAKRI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 116B1;TAKRI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 116B2;TAKRI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 116B3;TAKRI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 116B4;TAKRI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 116B5;TAKRI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 116B6;TAKRI SIGN VIRAMA;Mc;9;L;;;;;N;;;;; 116B7;TAKRI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 116B8;TAKRI LETTER ARCHAIC KHA;Lo;0;L;;;;;N;;;;; 116B9;TAKRI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 116C0;TAKRI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 116C1;TAKRI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 116C2;TAKRI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 116C3;TAKRI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 116C4;TAKRI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 116C5;TAKRI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 116C6;TAKRI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 116C7;TAKRI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 116C8;TAKRI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 116C9;TAKRI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11700;AHOM LETTER KA;Lo;0;L;;;;;N;;;;; 11701;AHOM LETTER KHA;Lo;0;L;;;;;N;;;;; 11702;AHOM LETTER NGA;Lo;0;L;;;;;N;;;;; 11703;AHOM LETTER NA;Lo;0;L;;;;;N;;;;; 11704;AHOM LETTER TA;Lo;0;L;;;;;N;;;;; 11705;AHOM LETTER ALTERNATE TA;Lo;0;L;;;;;N;;;;; 11706;AHOM LETTER PA;Lo;0;L;;;;;N;;;;; 11707;AHOM LETTER PHA;Lo;0;L;;;;;N;;;;; 11708;AHOM LETTER BA;Lo;0;L;;;;;N;;;;; 11709;AHOM LETTER MA;Lo;0;L;;;;;N;;;;; 1170A;AHOM LETTER JA;Lo;0;L;;;;;N;;;;; 1170B;AHOM LETTER CHA;Lo;0;L;;;;;N;;;;; 1170C;AHOM LETTER THA;Lo;0;L;;;;;N;;;;; 1170D;AHOM LETTER RA;Lo;0;L;;;;;N;;;;; 1170E;AHOM LETTER LA;Lo;0;L;;;;;N;;;;; 1170F;AHOM LETTER SA;Lo;0;L;;;;;N;;;;; 11710;AHOM LETTER NYA;Lo;0;L;;;;;N;;;;; 11711;AHOM LETTER HA;Lo;0;L;;;;;N;;;;; 11712;AHOM LETTER A;Lo;0;L;;;;;N;;;;; 11713;AHOM LETTER DA;Lo;0;L;;;;;N;;;;; 11714;AHOM LETTER DHA;Lo;0;L;;;;;N;;;;; 11715;AHOM LETTER GA;Lo;0;L;;;;;N;;;;; 11716;AHOM LETTER ALTERNATE GA;Lo;0;L;;;;;N;;;;; 11717;AHOM LETTER GHA;Lo;0;L;;;;;N;;;;; 11718;AHOM LETTER BHA;Lo;0;L;;;;;N;;;;; 11719;AHOM LETTER JHA;Lo;0;L;;;;;N;;;;; 1171A;AHOM LETTER ALTERNATE BA;Lo;0;L;;;;;N;;;;; 1171D;AHOM CONSONANT SIGN MEDIAL LA;Mn;0;NSM;;;;;N;;;;; 1171E;AHOM CONSONANT SIGN MEDIAL RA;Mn;0;NSM;;;;;N;;;;; 1171F;AHOM CONSONANT SIGN MEDIAL LIGATING RA;Mn;0;NSM;;;;;N;;;;; 11720;AHOM VOWEL SIGN A;Mc;0;L;;;;;N;;;;; 11721;AHOM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 11722;AHOM VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 11723;AHOM VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 11724;AHOM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11725;AHOM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 11726;AHOM VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 11727;AHOM VOWEL SIGN AW;Mn;0;NSM;;;;;N;;;;; 11728;AHOM VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 11729;AHOM VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 1172A;AHOM VOWEL SIGN AM;Mn;0;NSM;;;;;N;;;;; 1172B;AHOM SIGN KILLER;Mn;9;NSM;;;;;N;;;;; 11730;AHOM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 11731;AHOM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 11732;AHOM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 11733;AHOM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 11734;AHOM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 11735;AHOM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 11736;AHOM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 11737;AHOM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 11738;AHOM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 11739;AHOM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1173A;AHOM NUMBER TEN;No;0;L;;;;10;N;;;;; 1173B;AHOM NUMBER TWENTY;No;0;L;;;;20;N;;;;; 1173C;AHOM SIGN SMALL SECTION;Po;0;L;;;;;N;;;;; 1173D;AHOM SIGN SECTION;Po;0;L;;;;;N;;;;; 1173E;AHOM SIGN RULAI;Po;0;L;;;;;N;;;;; 1173F;AHOM SYMBOL VI;So;0;L;;;;;N;;;;; 11740;AHOM LETTER CA;Lo;0;L;;;;;N;;;;; 11741;AHOM LETTER TTA;Lo;0;L;;;;;N;;;;; 11742;AHOM LETTER TTHA;Lo;0;L;;;;;N;;;;; 11743;AHOM LETTER DDA;Lo;0;L;;;;;N;;;;; 11744;AHOM LETTER DDHA;Lo;0;L;;;;;N;;;;; 11745;AHOM LETTER NNA;Lo;0;L;;;;;N;;;;; 11746;AHOM LETTER LLA;Lo;0;L;;;;;N;;;;; 11800;DOGRA LETTER A;Lo;0;L;;;;;N;;;;; 11801;DOGRA LETTER AA;Lo;0;L;;;;;N;;;;; 11802;DOGRA LETTER I;Lo;0;L;;;;;N;;;;; 11803;DOGRA LETTER II;Lo;0;L;;;;;N;;;;; 11804;DOGRA LETTER U;Lo;0;L;;;;;N;;;;; 11805;DOGRA LETTER UU;Lo;0;L;;;;;N;;;;; 11806;DOGRA LETTER E;Lo;0;L;;;;;N;;;;; 11807;DOGRA LETTER AI;Lo;0;L;;;;;N;;;;; 11808;DOGRA LETTER O;Lo;0;L;;;;;N;;;;; 11809;DOGRA LETTER AU;Lo;0;L;;;;;N;;;;; 1180A;DOGRA LETTER KA;Lo;0;L;;;;;N;;;;; 1180B;DOGRA LETTER KHA;Lo;0;L;;;;;N;;;;; 1180C;DOGRA LETTER GA;Lo;0;L;;;;;N;;;;; 1180D;DOGRA LETTER GHA;Lo;0;L;;;;;N;;;;; 1180E;DOGRA LETTER NGA;Lo;0;L;;;;;N;;;;; 1180F;DOGRA LETTER CA;Lo;0;L;;;;;N;;;;; 11810;DOGRA LETTER CHA;Lo;0;L;;;;;N;;;;; 11811;DOGRA LETTER JA;Lo;0;L;;;;;N;;;;; 11812;DOGRA LETTER JHA;Lo;0;L;;;;;N;;;;; 11813;DOGRA LETTER NYA;Lo;0;L;;;;;N;;;;; 11814;DOGRA LETTER TTA;Lo;0;L;;;;;N;;;;; 11815;DOGRA LETTER TTHA;Lo;0;L;;;;;N;;;;; 11816;DOGRA LETTER DDA;Lo;0;L;;;;;N;;;;; 11817;DOGRA LETTER DDHA;Lo;0;L;;;;;N;;;;; 11818;DOGRA LETTER NNA;Lo;0;L;;;;;N;;;;; 11819;DOGRA LETTER TA;Lo;0;L;;;;;N;;;;; 1181A;DOGRA LETTER THA;Lo;0;L;;;;;N;;;;; 1181B;DOGRA LETTER DA;Lo;0;L;;;;;N;;;;; 1181C;DOGRA LETTER DHA;Lo;0;L;;;;;N;;;;; 1181D;DOGRA LETTER NA;Lo;0;L;;;;;N;;;;; 1181E;DOGRA LETTER PA;Lo;0;L;;;;;N;;;;; 1181F;DOGRA LETTER PHA;Lo;0;L;;;;;N;;;;; 11820;DOGRA LETTER BA;Lo;0;L;;;;;N;;;;; 11821;DOGRA LETTER BHA;Lo;0;L;;;;;N;;;;; 11822;DOGRA LETTER MA;Lo;0;L;;;;;N;;;;; 11823;DOGRA LETTER YA;Lo;0;L;;;;;N;;;;; 11824;DOGRA LETTER RA;Lo;0;L;;;;;N;;;;; 11825;DOGRA LETTER LA;Lo;0;L;;;;;N;;;;; 11826;DOGRA LETTER VA;Lo;0;L;;;;;N;;;;; 11827;DOGRA LETTER SHA;Lo;0;L;;;;;N;;;;; 11828;DOGRA LETTER SSA;Lo;0;L;;;;;N;;;;; 11829;DOGRA LETTER SA;Lo;0;L;;;;;N;;;;; 1182A;DOGRA LETTER HA;Lo;0;L;;;;;N;;;;; 1182B;DOGRA LETTER RRA;Lo;0;L;;;;;N;;;;; 1182C;DOGRA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 1182D;DOGRA VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 1182E;DOGRA VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 1182F;DOGRA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11830;DOGRA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 11831;DOGRA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 11832;DOGRA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 11833;DOGRA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 11834;DOGRA VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 11835;DOGRA VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 11836;DOGRA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 11837;DOGRA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11838;DOGRA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 11839;DOGRA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 1183A;DOGRA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 1183B;DOGRA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 118A0;WARANG CITI CAPITAL LETTER NGAA;Lu;0;L;;;;;N;;;;118C0; 118A1;WARANG CITI CAPITAL LETTER A;Lu;0;L;;;;;N;;;;118C1; 118A2;WARANG CITI CAPITAL LETTER WI;Lu;0;L;;;;;N;;;;118C2; 118A3;WARANG CITI CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;118C3; 118A4;WARANG CITI CAPITAL LETTER YA;Lu;0;L;;;;;N;;;;118C4; 118A5;WARANG CITI CAPITAL LETTER YO;Lu;0;L;;;;;N;;;;118C5; 118A6;WARANG CITI CAPITAL LETTER II;Lu;0;L;;;;;N;;;;118C6; 118A7;WARANG CITI CAPITAL LETTER UU;Lu;0;L;;;;;N;;;;118C7; 118A8;WARANG CITI CAPITAL LETTER E;Lu;0;L;;;;;N;;;;118C8; 118A9;WARANG CITI CAPITAL LETTER O;Lu;0;L;;;;;N;;;;118C9; 118AA;WARANG CITI CAPITAL LETTER ANG;Lu;0;L;;;;;N;;;;118CA; 118AB;WARANG CITI CAPITAL LETTER GA;Lu;0;L;;;;;N;;;;118CB; 118AC;WARANG CITI CAPITAL LETTER KO;Lu;0;L;;;;;N;;;;118CC; 118AD;WARANG CITI CAPITAL LETTER ENY;Lu;0;L;;;;;N;;;;118CD; 118AE;WARANG CITI CAPITAL LETTER YUJ;Lu;0;L;;;;;N;;;;118CE; 118AF;WARANG CITI CAPITAL LETTER UC;Lu;0;L;;;;;N;;;;118CF; 118B0;WARANG CITI CAPITAL LETTER ENN;Lu;0;L;;;;;N;;;;118D0; 118B1;WARANG CITI CAPITAL LETTER ODD;Lu;0;L;;;;;N;;;;118D1; 118B2;WARANG CITI CAPITAL LETTER TTE;Lu;0;L;;;;;N;;;;118D2; 118B3;WARANG CITI CAPITAL LETTER NUNG;Lu;0;L;;;;;N;;;;118D3; 118B4;WARANG CITI CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;118D4; 118B5;WARANG CITI CAPITAL LETTER AT;Lu;0;L;;;;;N;;;;118D5; 118B6;WARANG CITI CAPITAL LETTER AM;Lu;0;L;;;;;N;;;;118D6; 118B7;WARANG CITI CAPITAL LETTER BU;Lu;0;L;;;;;N;;;;118D7; 118B8;WARANG CITI CAPITAL LETTER PU;Lu;0;L;;;;;N;;;;118D8; 118B9;WARANG CITI CAPITAL LETTER HIYO;Lu;0;L;;;;;N;;;;118D9; 118BA;WARANG CITI CAPITAL LETTER HOLO;Lu;0;L;;;;;N;;;;118DA; 118BB;WARANG CITI CAPITAL LETTER HORR;Lu;0;L;;;;;N;;;;118DB; 118BC;WARANG CITI CAPITAL LETTER HAR;Lu;0;L;;;;;N;;;;118DC; 118BD;WARANG CITI CAPITAL LETTER SSUU;Lu;0;L;;;;;N;;;;118DD; 118BE;WARANG CITI CAPITAL LETTER SII;Lu;0;L;;;;;N;;;;118DE; 118BF;WARANG CITI CAPITAL LETTER VIYO;Lu;0;L;;;;;N;;;;118DF; 118C0;WARANG CITI SMALL LETTER NGAA;Ll;0;L;;;;;N;;;118A0;;118A0 118C1;WARANG CITI SMALL LETTER A;Ll;0;L;;;;;N;;;118A1;;118A1 118C2;WARANG CITI SMALL LETTER WI;Ll;0;L;;;;;N;;;118A2;;118A2 118C3;WARANG CITI SMALL LETTER YU;Ll;0;L;;;;;N;;;118A3;;118A3 118C4;WARANG CITI SMALL LETTER YA;Ll;0;L;;;;;N;;;118A4;;118A4 118C5;WARANG CITI SMALL LETTER YO;Ll;0;L;;;;;N;;;118A5;;118A5 118C6;WARANG CITI SMALL LETTER II;Ll;0;L;;;;;N;;;118A6;;118A6 118C7;WARANG CITI SMALL LETTER UU;Ll;0;L;;;;;N;;;118A7;;118A7 118C8;WARANG CITI SMALL LETTER E;Ll;0;L;;;;;N;;;118A8;;118A8 118C9;WARANG CITI SMALL LETTER O;Ll;0;L;;;;;N;;;118A9;;118A9 118CA;WARANG CITI SMALL LETTER ANG;Ll;0;L;;;;;N;;;118AA;;118AA 118CB;WARANG CITI SMALL LETTER GA;Ll;0;L;;;;;N;;;118AB;;118AB 118CC;WARANG CITI SMALL LETTER KO;Ll;0;L;;;;;N;;;118AC;;118AC 118CD;WARANG CITI SMALL LETTER ENY;Ll;0;L;;;;;N;;;118AD;;118AD 118CE;WARANG CITI SMALL LETTER YUJ;Ll;0;L;;;;;N;;;118AE;;118AE 118CF;WARANG CITI SMALL LETTER UC;Ll;0;L;;;;;N;;;118AF;;118AF 118D0;WARANG CITI SMALL LETTER ENN;Ll;0;L;;;;;N;;;118B0;;118B0 118D1;WARANG CITI SMALL LETTER ODD;Ll;0;L;;;;;N;;;118B1;;118B1 118D2;WARANG CITI SMALL LETTER TTE;Ll;0;L;;;;;N;;;118B2;;118B2 118D3;WARANG CITI SMALL LETTER NUNG;Ll;0;L;;;;;N;;;118B3;;118B3 118D4;WARANG CITI SMALL LETTER DA;Ll;0;L;;;;;N;;;118B4;;118B4 118D5;WARANG CITI SMALL LETTER AT;Ll;0;L;;;;;N;;;118B5;;118B5 118D6;WARANG CITI SMALL LETTER AM;Ll;0;L;;;;;N;;;118B6;;118B6 118D7;WARANG CITI SMALL LETTER BU;Ll;0;L;;;;;N;;;118B7;;118B7 118D8;WARANG CITI SMALL LETTER PU;Ll;0;L;;;;;N;;;118B8;;118B8 118D9;WARANG CITI SMALL LETTER HIYO;Ll;0;L;;;;;N;;;118B9;;118B9 118DA;WARANG CITI SMALL LETTER HOLO;Ll;0;L;;;;;N;;;118BA;;118BA 118DB;WARANG CITI SMALL LETTER HORR;Ll;0;L;;;;;N;;;118BB;;118BB 118DC;WARANG CITI SMALL LETTER HAR;Ll;0;L;;;;;N;;;118BC;;118BC 118DD;WARANG CITI SMALL LETTER SSUU;Ll;0;L;;;;;N;;;118BD;;118BD 118DE;WARANG CITI SMALL LETTER SII;Ll;0;L;;;;;N;;;118BE;;118BE 118DF;WARANG CITI SMALL LETTER VIYO;Ll;0;L;;;;;N;;;118BF;;118BF 118E0;WARANG CITI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 118E1;WARANG CITI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 118E2;WARANG CITI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 118E3;WARANG CITI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 118E4;WARANG CITI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 118E5;WARANG CITI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 118E6;WARANG CITI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 118E7;WARANG CITI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 118E8;WARANG CITI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 118E9;WARANG CITI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 118EA;WARANG CITI NUMBER TEN;No;0;L;;;;10;N;;;;; 118EB;WARANG CITI NUMBER TWENTY;No;0;L;;;;20;N;;;;; 118EC;WARANG CITI NUMBER THIRTY;No;0;L;;;;30;N;;;;; 118ED;WARANG CITI NUMBER FORTY;No;0;L;;;;40;N;;;;; 118EE;WARANG CITI NUMBER FIFTY;No;0;L;;;;50;N;;;;; 118EF;WARANG CITI NUMBER SIXTY;No;0;L;;;;60;N;;;;; 118F0;WARANG CITI NUMBER SEVENTY;No;0;L;;;;70;N;;;;; 118F1;WARANG CITI NUMBER EIGHTY;No;0;L;;;;80;N;;;;; 118F2;WARANG CITI NUMBER NINETY;No;0;L;;;;90;N;;;;; 118FF;WARANG CITI OM;Lo;0;L;;;;;N;;;;; 11900;DIVES AKURU LETTER A;Lo;0;L;;;;;N;;;;; 11901;DIVES AKURU LETTER AA;Lo;0;L;;;;;N;;;;; 11902;DIVES AKURU LETTER I;Lo;0;L;;;;;N;;;;; 11903;DIVES AKURU LETTER II;Lo;0;L;;;;;N;;;;; 11904;DIVES AKURU LETTER U;Lo;0;L;;;;;N;;;;; 11905;DIVES AKURU LETTER UU;Lo;0;L;;;;;N;;;;; 11906;DIVES AKURU LETTER E;Lo;0;L;;;;;N;;;;; 11909;DIVES AKURU LETTER O;Lo;0;L;;;;;N;;;;; 1190C;DIVES AKURU LETTER KA;Lo;0;L;;;;;N;;;;; 1190D;DIVES AKURU LETTER KHA;Lo;0;L;;;;;N;;;;; 1190E;DIVES AKURU LETTER GA;Lo;0;L;;;;;N;;;;; 1190F;DIVES AKURU LETTER GHA;Lo;0;L;;;;;N;;;;; 11910;DIVES AKURU LETTER NGA;Lo;0;L;;;;;N;;;;; 11911;DIVES AKURU LETTER CA;Lo;0;L;;;;;N;;;;; 11912;DIVES AKURU LETTER CHA;Lo;0;L;;;;;N;;;;; 11913;DIVES AKURU LETTER JA;Lo;0;L;;;;;N;;;;; 11915;DIVES AKURU LETTER NYA;Lo;0;L;;;;;N;;;;; 11916;DIVES AKURU LETTER TTA;Lo;0;L;;;;;N;;;;; 11918;DIVES AKURU LETTER DDA;Lo;0;L;;;;;N;;;;; 11919;DIVES AKURU LETTER DDHA;Lo;0;L;;;;;N;;;;; 1191A;DIVES AKURU LETTER NNA;Lo;0;L;;;;;N;;;;; 1191B;DIVES AKURU LETTER TA;Lo;0;L;;;;;N;;;;; 1191C;DIVES AKURU LETTER THA;Lo;0;L;;;;;N;;;;; 1191D;DIVES AKURU LETTER DA;Lo;0;L;;;;;N;;;;; 1191E;DIVES AKURU LETTER DHA;Lo;0;L;;;;;N;;;;; 1191F;DIVES AKURU LETTER NA;Lo;0;L;;;;;N;;;;; 11920;DIVES AKURU LETTER PA;Lo;0;L;;;;;N;;;;; 11921;DIVES AKURU LETTER PHA;Lo;0;L;;;;;N;;;;; 11922;DIVES AKURU LETTER BA;Lo;0;L;;;;;N;;;;; 11923;DIVES AKURU LETTER BHA;Lo;0;L;;;;;N;;;;; 11924;DIVES AKURU LETTER MA;Lo;0;L;;;;;N;;;;; 11925;DIVES AKURU LETTER YA;Lo;0;L;;;;;N;;;;; 11926;DIVES AKURU LETTER YYA;Lo;0;L;;;;;N;;;;; 11927;DIVES AKURU LETTER RA;Lo;0;L;;;;;N;;;;; 11928;DIVES AKURU LETTER LA;Lo;0;L;;;;;N;;;;; 11929;DIVES AKURU LETTER VA;Lo;0;L;;;;;N;;;;; 1192A;DIVES AKURU LETTER SHA;Lo;0;L;;;;;N;;;;; 1192B;DIVES AKURU LETTER SSA;Lo;0;L;;;;;N;;;;; 1192C;DIVES AKURU LETTER SA;Lo;0;L;;;;;N;;;;; 1192D;DIVES AKURU LETTER HA;Lo;0;L;;;;;N;;;;; 1192E;DIVES AKURU LETTER LLA;Lo;0;L;;;;;N;;;;; 1192F;DIVES AKURU LETTER ZA;Lo;0;L;;;;;N;;;;; 11930;DIVES AKURU VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 11931;DIVES AKURU VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 11932;DIVES AKURU VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 11933;DIVES AKURU VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 11934;DIVES AKURU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 11935;DIVES AKURU VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 11937;DIVES AKURU VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 11938;DIVES AKURU VOWEL SIGN O;Mc;0;L;11935 11930;;;;N;;;;; 1193B;DIVES AKURU SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 1193C;DIVES AKURU SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 1193D;DIVES AKURU SIGN HALANTA;Mc;9;L;;;;;N;;;;; 1193E;DIVES AKURU VIRAMA;Mn;9;NSM;;;;;N;;;;; 1193F;DIVES AKURU PREFIXED NASAL SIGN;Lo;0;L;;;;;N;;;;; 11940;DIVES AKURU MEDIAL YA;Mc;0;L;;;;;N;;;;; 11941;DIVES AKURU INITIAL RA;Lo;0;L;;;;;N;;;;; 11942;DIVES AKURU MEDIAL RA;Mc;0;L;;;;;N;;;;; 11943;DIVES AKURU SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 11944;DIVES AKURU DOUBLE DANDA;Po;0;L;;;;;N;;;;; 11945;DIVES AKURU GAP FILLER;Po;0;L;;;;;N;;;;; 11946;DIVES AKURU END OF TEXT MARK;Po;0;L;;;;;N;;;;; 11950;DIVES AKURU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 11951;DIVES AKURU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 11952;DIVES AKURU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 11953;DIVES AKURU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 11954;DIVES AKURU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 11955;DIVES AKURU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 11956;DIVES AKURU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 11957;DIVES AKURU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 11958;DIVES AKURU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 11959;DIVES AKURU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 119A0;NANDINAGARI LETTER A;Lo;0;L;;;;;N;;;;; 119A1;NANDINAGARI LETTER AA;Lo;0;L;;;;;N;;;;; 119A2;NANDINAGARI LETTER I;Lo;0;L;;;;;N;;;;; 119A3;NANDINAGARI LETTER II;Lo;0;L;;;;;N;;;;; 119A4;NANDINAGARI LETTER U;Lo;0;L;;;;;N;;;;; 119A5;NANDINAGARI LETTER UU;Lo;0;L;;;;;N;;;;; 119A6;NANDINAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 119A7;NANDINAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 119AA;NANDINAGARI LETTER E;Lo;0;L;;;;;N;;;;; 119AB;NANDINAGARI LETTER AI;Lo;0;L;;;;;N;;;;; 119AC;NANDINAGARI LETTER O;Lo;0;L;;;;;N;;;;; 119AD;NANDINAGARI LETTER AU;Lo;0;L;;;;;N;;;;; 119AE;NANDINAGARI LETTER KA;Lo;0;L;;;;;N;;;;; 119AF;NANDINAGARI LETTER KHA;Lo;0;L;;;;;N;;;;; 119B0;NANDINAGARI LETTER GA;Lo;0;L;;;;;N;;;;; 119B1;NANDINAGARI LETTER GHA;Lo;0;L;;;;;N;;;;; 119B2;NANDINAGARI LETTER NGA;Lo;0;L;;;;;N;;;;; 119B3;NANDINAGARI LETTER CA;Lo;0;L;;;;;N;;;;; 119B4;NANDINAGARI LETTER CHA;Lo;0;L;;;;;N;;;;; 119B5;NANDINAGARI LETTER JA;Lo;0;L;;;;;N;;;;; 119B6;NANDINAGARI LETTER JHA;Lo;0;L;;;;;N;;;;; 119B7;NANDINAGARI LETTER NYA;Lo;0;L;;;;;N;;;;; 119B8;NANDINAGARI LETTER TTA;Lo;0;L;;;;;N;;;;; 119B9;NANDINAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;; 119BA;NANDINAGARI LETTER DDA;Lo;0;L;;;;;N;;;;; 119BB;NANDINAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;; 119BC;NANDINAGARI LETTER NNA;Lo;0;L;;;;;N;;;;; 119BD;NANDINAGARI LETTER TA;Lo;0;L;;;;;N;;;;; 119BE;NANDINAGARI LETTER THA;Lo;0;L;;;;;N;;;;; 119BF;NANDINAGARI LETTER DA;Lo;0;L;;;;;N;;;;; 119C0;NANDINAGARI LETTER DHA;Lo;0;L;;;;;N;;;;; 119C1;NANDINAGARI LETTER NA;Lo;0;L;;;;;N;;;;; 119C2;NANDINAGARI LETTER PA;Lo;0;L;;;;;N;;;;; 119C3;NANDINAGARI LETTER PHA;Lo;0;L;;;;;N;;;;; 119C4;NANDINAGARI LETTER BA;Lo;0;L;;;;;N;;;;; 119C5;NANDINAGARI LETTER BHA;Lo;0;L;;;;;N;;;;; 119C6;NANDINAGARI LETTER MA;Lo;0;L;;;;;N;;;;; 119C7;NANDINAGARI LETTER YA;Lo;0;L;;;;;N;;;;; 119C8;NANDINAGARI LETTER RA;Lo;0;L;;;;;N;;;;; 119C9;NANDINAGARI LETTER LA;Lo;0;L;;;;;N;;;;; 119CA;NANDINAGARI LETTER VA;Lo;0;L;;;;;N;;;;; 119CB;NANDINAGARI LETTER SHA;Lo;0;L;;;;;N;;;;; 119CC;NANDINAGARI LETTER SSA;Lo;0;L;;;;;N;;;;; 119CD;NANDINAGARI LETTER SA;Lo;0;L;;;;;N;;;;; 119CE;NANDINAGARI LETTER HA;Lo;0;L;;;;;N;;;;; 119CF;NANDINAGARI LETTER LLA;Lo;0;L;;;;;N;;;;; 119D0;NANDINAGARI LETTER RRA;Lo;0;L;;;;;N;;;;; 119D1;NANDINAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 119D2;NANDINAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 119D3;NANDINAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 119D4;NANDINAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 119D5;NANDINAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 119D6;NANDINAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 119D7;NANDINAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 119DA;NANDINAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 119DB;NANDINAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 119DC;NANDINAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 119DD;NANDINAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 119DE;NANDINAGARI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 119DF;NANDINAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 119E0;NANDINAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 119E1;NANDINAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 119E2;NANDINAGARI SIGN SIDDHAM;Po;0;L;;;;;N;;;;; 119E3;NANDINAGARI HEADSTROKE;Lo;0;L;;;;;N;;;;; 119E4;NANDINAGARI VOWEL SIGN PRISHTHAMATRA E;Mc;0;L;;;;;N;;;;; 11A00;ZANABAZAR SQUARE LETTER A;Lo;0;L;;;;;N;;;;; 11A01;ZANABAZAR SQUARE VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 11A02;ZANABAZAR SQUARE VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;; 11A03;ZANABAZAR SQUARE VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11A04;ZANABAZAR SQUARE VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 11A05;ZANABAZAR SQUARE VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;; 11A06;ZANABAZAR SQUARE VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 11A07;ZANABAZAR SQUARE VOWEL SIGN AI;Mn;0;L;;;;;N;;;;; 11A08;ZANABAZAR SQUARE VOWEL SIGN AU;Mn;0;L;;;;;N;;;;; 11A09;ZANABAZAR SQUARE VOWEL SIGN REVERSED I;Mn;0;NSM;;;;;N;;;;; 11A0A;ZANABAZAR SQUARE VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;; 11A0B;ZANABAZAR SQUARE LETTER KA;Lo;0;L;;;;;N;;;;; 11A0C;ZANABAZAR SQUARE LETTER KHA;Lo;0;L;;;;;N;;;;; 11A0D;ZANABAZAR SQUARE LETTER GA;Lo;0;L;;;;;N;;;;; 11A0E;ZANABAZAR SQUARE LETTER GHA;Lo;0;L;;;;;N;;;;; 11A0F;ZANABAZAR SQUARE LETTER NGA;Lo;0;L;;;;;N;;;;; 11A10;ZANABAZAR SQUARE LETTER CA;Lo;0;L;;;;;N;;;;; 11A11;ZANABAZAR SQUARE LETTER CHA;Lo;0;L;;;;;N;;;;; 11A12;ZANABAZAR SQUARE LETTER JA;Lo;0;L;;;;;N;;;;; 11A13;ZANABAZAR SQUARE LETTER NYA;Lo;0;L;;;;;N;;;;; 11A14;ZANABAZAR SQUARE LETTER TTA;Lo;0;L;;;;;N;;;;; 11A15;ZANABAZAR SQUARE LETTER TTHA;Lo;0;L;;;;;N;;;;; 11A16;ZANABAZAR SQUARE LETTER DDA;Lo;0;L;;;;;N;;;;; 11A17;ZANABAZAR SQUARE LETTER DDHA;Lo;0;L;;;;;N;;;;; 11A18;ZANABAZAR SQUARE LETTER NNA;Lo;0;L;;;;;N;;;;; 11A19;ZANABAZAR SQUARE LETTER TA;Lo;0;L;;;;;N;;;;; 11A1A;ZANABAZAR SQUARE LETTER THA;Lo;0;L;;;;;N;;;;; 11A1B;ZANABAZAR SQUARE LETTER DA;Lo;0;L;;;;;N;;;;; 11A1C;ZANABAZAR SQUARE LETTER DHA;Lo;0;L;;;;;N;;;;; 11A1D;ZANABAZAR SQUARE LETTER NA;Lo;0;L;;;;;N;;;;; 11A1E;ZANABAZAR SQUARE LETTER PA;Lo;0;L;;;;;N;;;;; 11A1F;ZANABAZAR SQUARE LETTER PHA;Lo;0;L;;;;;N;;;;; 11A20;ZANABAZAR SQUARE LETTER BA;Lo;0;L;;;;;N;;;;; 11A21;ZANABAZAR SQUARE LETTER BHA;Lo;0;L;;;;;N;;;;; 11A22;ZANABAZAR SQUARE LETTER MA;Lo;0;L;;;;;N;;;;; 11A23;ZANABAZAR SQUARE LETTER TSA;Lo;0;L;;;;;N;;;;; 11A24;ZANABAZAR SQUARE LETTER TSHA;Lo;0;L;;;;;N;;;;; 11A25;ZANABAZAR SQUARE LETTER DZA;Lo;0;L;;;;;N;;;;; 11A26;ZANABAZAR SQUARE LETTER DZHA;Lo;0;L;;;;;N;;;;; 11A27;ZANABAZAR SQUARE LETTER ZHA;Lo;0;L;;;;;N;;;;; 11A28;ZANABAZAR SQUARE LETTER ZA;Lo;0;L;;;;;N;;;;; 11A29;ZANABAZAR SQUARE LETTER -A;Lo;0;L;;;;;N;;;;; 11A2A;ZANABAZAR SQUARE LETTER YA;Lo;0;L;;;;;N;;;;; 11A2B;ZANABAZAR SQUARE LETTER RA;Lo;0;L;;;;;N;;;;; 11A2C;ZANABAZAR SQUARE LETTER LA;Lo;0;L;;;;;N;;;;; 11A2D;ZANABAZAR SQUARE LETTER VA;Lo;0;L;;;;;N;;;;; 11A2E;ZANABAZAR SQUARE LETTER SHA;Lo;0;L;;;;;N;;;;; 11A2F;ZANABAZAR SQUARE LETTER SSA;Lo;0;L;;;;;N;;;;; 11A30;ZANABAZAR SQUARE LETTER SA;Lo;0;L;;;;;N;;;;; 11A31;ZANABAZAR SQUARE LETTER HA;Lo;0;L;;;;;N;;;;; 11A32;ZANABAZAR SQUARE LETTER KSSA;Lo;0;L;;;;;N;;;;; 11A33;ZANABAZAR SQUARE FINAL CONSONANT MARK;Mn;0;NSM;;;;;N;;;;; 11A34;ZANABAZAR SQUARE SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 11A35;ZANABAZAR SQUARE SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 11A36;ZANABAZAR SQUARE SIGN CANDRABINDU WITH ORNAMENT;Mn;0;NSM;;;;;N;;;;; 11A37;ZANABAZAR SQUARE SIGN CANDRA WITH ORNAMENT;Mn;0;NSM;;;;;N;;;;; 11A38;ZANABAZAR SQUARE SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11A39;ZANABAZAR SQUARE SIGN VISARGA;Mc;0;L;;;;;N;;;;; 11A3A;ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA;Lo;0;L;;;;;N;;;;; 11A3B;ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA;Mn;0;NSM;;;;;N;;;;; 11A3C;ZANABAZAR SQUARE CLUSTER-FINAL LETTER RA;Mn;0;NSM;;;;;N;;;;; 11A3D;ZANABAZAR SQUARE CLUSTER-FINAL LETTER LA;Mn;0;NSM;;;;;N;;;;; 11A3E;ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA;Mn;0;NSM;;;;;N;;;;; 11A3F;ZANABAZAR SQUARE INITIAL HEAD MARK;Po;0;L;;;;;N;;;;; 11A40;ZANABAZAR SQUARE CLOSING HEAD MARK;Po;0;L;;;;;N;;;;; 11A41;ZANABAZAR SQUARE MARK TSHEG;Po;0;L;;;;;N;;;;; 11A42;ZANABAZAR SQUARE MARK SHAD;Po;0;L;;;;;N;;;;; 11A43;ZANABAZAR SQUARE MARK DOUBLE SHAD;Po;0;L;;;;;N;;;;; 11A44;ZANABAZAR SQUARE MARK LONG TSHEG;Po;0;L;;;;;N;;;;; 11A45;ZANABAZAR SQUARE INITIAL DOUBLE-LINED HEAD MARK;Po;0;L;;;;;N;;;;; 11A46;ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK;Po;0;L;;;;;N;;;;; 11A47;ZANABAZAR SQUARE SUBJOINER;Mn;9;NSM;;;;;N;;;;; 11A50;SOYOMBO LETTER A;Lo;0;L;;;;;N;;;;; 11A51;SOYOMBO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 11A52;SOYOMBO VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;; 11A53;SOYOMBO VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11A54;SOYOMBO VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 11A55;SOYOMBO VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 11A56;SOYOMBO VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;; 11A57;SOYOMBO VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 11A58;SOYOMBO VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 11A59;SOYOMBO VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 11A5A;SOYOMBO VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 11A5B;SOYOMBO VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;; 11A5C;SOYOMBO LETTER KA;Lo;0;L;;;;;N;;;;; 11A5D;SOYOMBO LETTER KHA;Lo;0;L;;;;;N;;;;; 11A5E;SOYOMBO LETTER GA;Lo;0;L;;;;;N;;;;; 11A5F;SOYOMBO LETTER GHA;Lo;0;L;;;;;N;;;;; 11A60;SOYOMBO LETTER NGA;Lo;0;L;;;;;N;;;;; 11A61;SOYOMBO LETTER CA;Lo;0;L;;;;;N;;;;; 11A62;SOYOMBO LETTER CHA;Lo;0;L;;;;;N;;;;; 11A63;SOYOMBO LETTER JA;Lo;0;L;;;;;N;;;;; 11A64;SOYOMBO LETTER JHA;Lo;0;L;;;;;N;;;;; 11A65;SOYOMBO LETTER NYA;Lo;0;L;;;;;N;;;;; 11A66;SOYOMBO LETTER TTA;Lo;0;L;;;;;N;;;;; 11A67;SOYOMBO LETTER TTHA;Lo;0;L;;;;;N;;;;; 11A68;SOYOMBO LETTER DDA;Lo;0;L;;;;;N;;;;; 11A69;SOYOMBO LETTER DDHA;Lo;0;L;;;;;N;;;;; 11A6A;SOYOMBO LETTER NNA;Lo;0;L;;;;;N;;;;; 11A6B;SOYOMBO LETTER TA;Lo;0;L;;;;;N;;;;; 11A6C;SOYOMBO LETTER THA;Lo;0;L;;;;;N;;;;; 11A6D;SOYOMBO LETTER DA;Lo;0;L;;;;;N;;;;; 11A6E;SOYOMBO LETTER DHA;Lo;0;L;;;;;N;;;;; 11A6F;SOYOMBO LETTER NA;Lo;0;L;;;;;N;;;;; 11A70;SOYOMBO LETTER PA;Lo;0;L;;;;;N;;;;; 11A71;SOYOMBO LETTER PHA;Lo;0;L;;;;;N;;;;; 11A72;SOYOMBO LETTER BA;Lo;0;L;;;;;N;;;;; 11A73;SOYOMBO LETTER BHA;Lo;0;L;;;;;N;;;;; 11A74;SOYOMBO LETTER MA;Lo;0;L;;;;;N;;;;; 11A75;SOYOMBO LETTER TSA;Lo;0;L;;;;;N;;;;; 11A76;SOYOMBO LETTER TSHA;Lo;0;L;;;;;N;;;;; 11A77;SOYOMBO LETTER DZA;Lo;0;L;;;;;N;;;;; 11A78;SOYOMBO LETTER ZHA;Lo;0;L;;;;;N;;;;; 11A79;SOYOMBO LETTER ZA;Lo;0;L;;;;;N;;;;; 11A7A;SOYOMBO LETTER -A;Lo;0;L;;;;;N;;;;; 11A7B;SOYOMBO LETTER YA;Lo;0;L;;;;;N;;;;; 11A7C;SOYOMBO LETTER RA;Lo;0;L;;;;;N;;;;; 11A7D;SOYOMBO LETTER LA;Lo;0;L;;;;;N;;;;; 11A7E;SOYOMBO LETTER VA;Lo;0;L;;;;;N;;;;; 11A7F;SOYOMBO LETTER SHA;Lo;0;L;;;;;N;;;;; 11A80;SOYOMBO LETTER SSA;Lo;0;L;;;;;N;;;;; 11A81;SOYOMBO LETTER SA;Lo;0;L;;;;;N;;;;; 11A82;SOYOMBO LETTER HA;Lo;0;L;;;;;N;;;;; 11A83;SOYOMBO LETTER KSSA;Lo;0;L;;;;;N;;;;; 11A84;SOYOMBO SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;; 11A85;SOYOMBO SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;; 11A86;SOYOMBO CLUSTER-INITIAL LETTER RA;Lo;0;L;;;;;N;;;;; 11A87;SOYOMBO CLUSTER-INITIAL LETTER LA;Lo;0;L;;;;;N;;;;; 11A88;SOYOMBO CLUSTER-INITIAL LETTER SHA;Lo;0;L;;;;;N;;;;; 11A89;SOYOMBO CLUSTER-INITIAL LETTER SA;Lo;0;L;;;;;N;;;;; 11A8A;SOYOMBO FINAL CONSONANT SIGN G;Mn;0;NSM;;;;;N;;;;; 11A8B;SOYOMBO FINAL CONSONANT SIGN K;Mn;0;NSM;;;;;N;;;;; 11A8C;SOYOMBO FINAL CONSONANT SIGN NG;Mn;0;NSM;;;;;N;;;;; 11A8D;SOYOMBO FINAL CONSONANT SIGN D;Mn;0;NSM;;;;;N;;;;; 11A8E;SOYOMBO FINAL CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;; 11A8F;SOYOMBO FINAL CONSONANT SIGN B;Mn;0;NSM;;;;;N;;;;; 11A90;SOYOMBO FINAL CONSONANT SIGN M;Mn;0;NSM;;;;;N;;;;; 11A91;SOYOMBO FINAL CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;; 11A92;SOYOMBO FINAL CONSONANT SIGN L;Mn;0;NSM;;;;;N;;;;; 11A93;SOYOMBO FINAL CONSONANT SIGN SH;Mn;0;NSM;;;;;N;;;;; 11A94;SOYOMBO FINAL CONSONANT SIGN S;Mn;0;NSM;;;;;N;;;;; 11A95;SOYOMBO FINAL CONSONANT SIGN -A;Mn;0;NSM;;;;;N;;;;; 11A96;SOYOMBO SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11A97;SOYOMBO SIGN VISARGA;Mc;0;L;;;;;N;;;;; 11A98;SOYOMBO GEMINATION MARK;Mn;0;NSM;;;;;N;;;;; 11A99;SOYOMBO SUBJOINER;Mn;9;NSM;;;;;N;;;;; 11A9A;SOYOMBO MARK TSHEG;Po;0;L;;;;;N;;;;; 11A9B;SOYOMBO MARK SHAD;Po;0;L;;;;;N;;;;; 11A9C;SOYOMBO MARK DOUBLE SHAD;Po;0;L;;;;;N;;;;; 11A9D;SOYOMBO MARK PLUTA;Lo;0;L;;;;;N;;;;; 11A9E;SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME;Po;0;L;;;;;N;;;;; 11A9F;SOYOMBO HEAD MARK WITH MOON AND SUN AND FLAME;Po;0;L;;;;;N;;;;; 11AA0;SOYOMBO HEAD MARK WITH MOON AND SUN;Po;0;L;;;;;N;;;;; 11AA1;SOYOMBO TERMINAL MARK-1;Po;0;L;;;;;N;;;;; 11AA2;SOYOMBO TERMINAL MARK-2;Po;0;L;;;;;N;;;;; 11AB0;CANADIAN SYLLABICS NATTILIK HI;Lo;0;L;;;;;N;;;;; 11AB1;CANADIAN SYLLABICS NATTILIK HII;Lo;0;L;;;;;N;;;;; 11AB2;CANADIAN SYLLABICS NATTILIK HO;Lo;0;L;;;;;N;;;;; 11AB3;CANADIAN SYLLABICS NATTILIK HOO;Lo;0;L;;;;;N;;;;; 11AB4;CANADIAN SYLLABICS NATTILIK HA;Lo;0;L;;;;;N;;;;; 11AB5;CANADIAN SYLLABICS NATTILIK HAA;Lo;0;L;;;;;N;;;;; 11AB6;CANADIAN SYLLABICS NATTILIK SHRI;Lo;0;L;;;;;N;;;;; 11AB7;CANADIAN SYLLABICS NATTILIK SHRII;Lo;0;L;;;;;N;;;;; 11AB8;CANADIAN SYLLABICS NATTILIK SHRO;Lo;0;L;;;;;N;;;;; 11AB9;CANADIAN SYLLABICS NATTILIK SHROO;Lo;0;L;;;;;N;;;;; 11ABA;CANADIAN SYLLABICS NATTILIK SHRA;Lo;0;L;;;;;N;;;;; 11ABB;CANADIAN SYLLABICS NATTILIK SHRAA;Lo;0;L;;;;;N;;;;; 11ABC;CANADIAN SYLLABICS SPE;Lo;0;L;;;;;N;;;;; 11ABD;CANADIAN SYLLABICS SPI;Lo;0;L;;;;;N;;;;; 11ABE;CANADIAN SYLLABICS SPO;Lo;0;L;;;;;N;;;;; 11ABF;CANADIAN SYLLABICS SPA;Lo;0;L;;;;;N;;;;; 11AC0;PAU CIN HAU LETTER PA;Lo;0;L;;;;;N;;;;; 11AC1;PAU CIN HAU LETTER KA;Lo;0;L;;;;;N;;;;; 11AC2;PAU CIN HAU LETTER LA;Lo;0;L;;;;;N;;;;; 11AC3;PAU CIN HAU LETTER MA;Lo;0;L;;;;;N;;;;; 11AC4;PAU CIN HAU LETTER DA;Lo;0;L;;;;;N;;;;; 11AC5;PAU CIN HAU LETTER ZA;Lo;0;L;;;;;N;;;;; 11AC6;PAU CIN HAU LETTER VA;Lo;0;L;;;;;N;;;;; 11AC7;PAU CIN HAU LETTER NGA;Lo;0;L;;;;;N;;;;; 11AC8;PAU CIN HAU LETTER HA;Lo;0;L;;;;;N;;;;; 11AC9;PAU CIN HAU LETTER GA;Lo;0;L;;;;;N;;;;; 11ACA;PAU CIN HAU LETTER KHA;Lo;0;L;;;;;N;;;;; 11ACB;PAU CIN HAU LETTER SA;Lo;0;L;;;;;N;;;;; 11ACC;PAU CIN HAU LETTER BA;Lo;0;L;;;;;N;;;;; 11ACD;PAU CIN HAU LETTER CA;Lo;0;L;;;;;N;;;;; 11ACE;PAU CIN HAU LETTER TA;Lo;0;L;;;;;N;;;;; 11ACF;PAU CIN HAU LETTER THA;Lo;0;L;;;;;N;;;;; 11AD0;PAU CIN HAU LETTER NA;Lo;0;L;;;;;N;;;;; 11AD1;PAU CIN HAU LETTER PHA;Lo;0;L;;;;;N;;;;; 11AD2;PAU CIN HAU LETTER RA;Lo;0;L;;;;;N;;;;; 11AD3;PAU CIN HAU LETTER FA;Lo;0;L;;;;;N;;;;; 11AD4;PAU CIN HAU LETTER CHA;Lo;0;L;;;;;N;;;;; 11AD5;PAU CIN HAU LETTER A;Lo;0;L;;;;;N;;;;; 11AD6;PAU CIN HAU LETTER E;Lo;0;L;;;;;N;;;;; 11AD7;PAU CIN HAU LETTER I;Lo;0;L;;;;;N;;;;; 11AD8;PAU CIN HAU LETTER O;Lo;0;L;;;;;N;;;;; 11AD9;PAU CIN HAU LETTER U;Lo;0;L;;;;;N;;;;; 11ADA;PAU CIN HAU LETTER UA;Lo;0;L;;;;;N;;;;; 11ADB;PAU CIN HAU LETTER IA;Lo;0;L;;;;;N;;;;; 11ADC;PAU CIN HAU LETTER FINAL P;Lo;0;L;;;;;N;;;;; 11ADD;PAU CIN HAU LETTER FINAL K;Lo;0;L;;;;;N;;;;; 11ADE;PAU CIN HAU LETTER FINAL T;Lo;0;L;;;;;N;;;;; 11ADF;PAU CIN HAU LETTER FINAL M;Lo;0;L;;;;;N;;;;; 11AE0;PAU CIN HAU LETTER FINAL N;Lo;0;L;;;;;N;;;;; 11AE1;PAU CIN HAU LETTER FINAL L;Lo;0;L;;;;;N;;;;; 11AE2;PAU CIN HAU LETTER FINAL W;Lo;0;L;;;;;N;;;;; 11AE3;PAU CIN HAU LETTER FINAL NG;Lo;0;L;;;;;N;;;;; 11AE4;PAU CIN HAU LETTER FINAL Y;Lo;0;L;;;;;N;;;;; 11AE5;PAU CIN HAU RISING TONE LONG;Lo;0;L;;;;;N;;;;; 11AE6;PAU CIN HAU RISING TONE;Lo;0;L;;;;;N;;;;; 11AE7;PAU CIN HAU SANDHI GLOTTAL STOP;Lo;0;L;;;;;N;;;;; 11AE8;PAU CIN HAU RISING TONE LONG FINAL;Lo;0;L;;;;;N;;;;; 11AE9;PAU CIN HAU RISING TONE FINAL;Lo;0;L;;;;;N;;;;; 11AEA;PAU CIN HAU SANDHI GLOTTAL STOP FINAL;Lo;0;L;;;;;N;;;;; 11AEB;PAU CIN HAU SANDHI TONE LONG;Lo;0;L;;;;;N;;;;; 11AEC;PAU CIN HAU SANDHI TONE;Lo;0;L;;;;;N;;;;; 11AED;PAU CIN HAU SANDHI TONE LONG FINAL;Lo;0;L;;;;;N;;;;; 11AEE;PAU CIN HAU SANDHI TONE FINAL;Lo;0;L;;;;;N;;;;; 11AEF;PAU CIN HAU MID-LEVEL TONE;Lo;0;L;;;;;N;;;;; 11AF0;PAU CIN HAU GLOTTAL STOP VARIANT;Lo;0;L;;;;;N;;;;; 11AF1;PAU CIN HAU MID-LEVEL TONE LONG FINAL;Lo;0;L;;;;;N;;;;; 11AF2;PAU CIN HAU MID-LEVEL TONE FINAL;Lo;0;L;;;;;N;;;;; 11AF3;PAU CIN HAU LOW-FALLING TONE LONG;Lo;0;L;;;;;N;;;;; 11AF4;PAU CIN HAU LOW-FALLING TONE;Lo;0;L;;;;;N;;;;; 11AF5;PAU CIN HAU GLOTTAL STOP;Lo;0;L;;;;;N;;;;; 11AF6;PAU CIN HAU LOW-FALLING TONE LONG FINAL;Lo;0;L;;;;;N;;;;; 11AF7;PAU CIN HAU LOW-FALLING TONE FINAL;Lo;0;L;;;;;N;;;;; 11AF8;PAU CIN HAU GLOTTAL STOP FINAL;Lo;0;L;;;;;N;;;;; 11C00;BHAIKSUKI LETTER A;Lo;0;L;;;;;N;;;;; 11C01;BHAIKSUKI LETTER AA;Lo;0;L;;;;;N;;;;; 11C02;BHAIKSUKI LETTER I;Lo;0;L;;;;;N;;;;; 11C03;BHAIKSUKI LETTER II;Lo;0;L;;;;;N;;;;; 11C04;BHAIKSUKI LETTER U;Lo;0;L;;;;;N;;;;; 11C05;BHAIKSUKI LETTER UU;Lo;0;L;;;;;N;;;;; 11C06;BHAIKSUKI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 11C07;BHAIKSUKI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 11C08;BHAIKSUKI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 11C0A;BHAIKSUKI LETTER E;Lo;0;L;;;;;N;;;;; 11C0B;BHAIKSUKI LETTER AI;Lo;0;L;;;;;N;;;;; 11C0C;BHAIKSUKI LETTER O;Lo;0;L;;;;;N;;;;; 11C0D;BHAIKSUKI LETTER AU;Lo;0;L;;;;;N;;;;; 11C0E;BHAIKSUKI LETTER KA;Lo;0;L;;;;;N;;;;; 11C0F;BHAIKSUKI LETTER KHA;Lo;0;L;;;;;N;;;;; 11C10;BHAIKSUKI LETTER GA;Lo;0;L;;;;;N;;;;; 11C11;BHAIKSUKI LETTER GHA;Lo;0;L;;;;;N;;;;; 11C12;BHAIKSUKI LETTER NGA;Lo;0;L;;;;;N;;;;; 11C13;BHAIKSUKI LETTER CA;Lo;0;L;;;;;N;;;;; 11C14;BHAIKSUKI LETTER CHA;Lo;0;L;;;;;N;;;;; 11C15;BHAIKSUKI LETTER JA;Lo;0;L;;;;;N;;;;; 11C16;BHAIKSUKI LETTER JHA;Lo;0;L;;;;;N;;;;; 11C17;BHAIKSUKI LETTER NYA;Lo;0;L;;;;;N;;;;; 11C18;BHAIKSUKI LETTER TTA;Lo;0;L;;;;;N;;;;; 11C19;BHAIKSUKI LETTER TTHA;Lo;0;L;;;;;N;;;;; 11C1A;BHAIKSUKI LETTER DDA;Lo;0;L;;;;;N;;;;; 11C1B;BHAIKSUKI LETTER DDHA;Lo;0;L;;;;;N;;;;; 11C1C;BHAIKSUKI LETTER NNA;Lo;0;L;;;;;N;;;;; 11C1D;BHAIKSUKI LETTER TA;Lo;0;L;;;;;N;;;;; 11C1E;BHAIKSUKI LETTER THA;Lo;0;L;;;;;N;;;;; 11C1F;BHAIKSUKI LETTER DA;Lo;0;L;;;;;N;;;;; 11C20;BHAIKSUKI LETTER DHA;Lo;0;L;;;;;N;;;;; 11C21;BHAIKSUKI LETTER NA;Lo;0;L;;;;;N;;;;; 11C22;BHAIKSUKI LETTER PA;Lo;0;L;;;;;N;;;;; 11C23;BHAIKSUKI LETTER PHA;Lo;0;L;;;;;N;;;;; 11C24;BHAIKSUKI LETTER BA;Lo;0;L;;;;;N;;;;; 11C25;BHAIKSUKI LETTER BHA;Lo;0;L;;;;;N;;;;; 11C26;BHAIKSUKI LETTER MA;Lo;0;L;;;;;N;;;;; 11C27;BHAIKSUKI LETTER YA;Lo;0;L;;;;;N;;;;; 11C28;BHAIKSUKI LETTER RA;Lo;0;L;;;;;N;;;;; 11C29;BHAIKSUKI LETTER LA;Lo;0;L;;;;;N;;;;; 11C2A;BHAIKSUKI LETTER VA;Lo;0;L;;;;;N;;;;; 11C2B;BHAIKSUKI LETTER SHA;Lo;0;L;;;;;N;;;;; 11C2C;BHAIKSUKI LETTER SSA;Lo;0;L;;;;;N;;;;; 11C2D;BHAIKSUKI LETTER SA;Lo;0;L;;;;;N;;;;; 11C2E;BHAIKSUKI LETTER HA;Lo;0;L;;;;;N;;;;; 11C2F;BHAIKSUKI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 11C30;BHAIKSUKI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 11C31;BHAIKSUKI VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 11C32;BHAIKSUKI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11C33;BHAIKSUKI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 11C34;BHAIKSUKI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 11C35;BHAIKSUKI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 11C36;BHAIKSUKI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 11C38;BHAIKSUKI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 11C39;BHAIKSUKI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 11C3A;BHAIKSUKI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 11C3B;BHAIKSUKI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 11C3C;BHAIKSUKI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 11C3D;BHAIKSUKI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11C3E;BHAIKSUKI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 11C3F;BHAIKSUKI SIGN VIRAMA;Mn;9;L;;;;;N;;;;; 11C40;BHAIKSUKI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 11C41;BHAIKSUKI DANDA;Po;0;L;;;;;N;;;;; 11C42;BHAIKSUKI DOUBLE DANDA;Po;0;L;;;;;N;;;;; 11C43;BHAIKSUKI WORD SEPARATOR;Po;0;L;;;;;N;;;;; 11C44;BHAIKSUKI GAP FILLER-1;Po;0;L;;;;;N;;;;; 11C45;BHAIKSUKI GAP FILLER-2;Po;0;L;;;;;N;;;;; 11C50;BHAIKSUKI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 11C51;BHAIKSUKI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 11C52;BHAIKSUKI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 11C53;BHAIKSUKI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 11C54;BHAIKSUKI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 11C55;BHAIKSUKI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 11C56;BHAIKSUKI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 11C57;BHAIKSUKI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 11C58;BHAIKSUKI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 11C59;BHAIKSUKI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11C5A;BHAIKSUKI NUMBER ONE;No;0;L;;;;1;N;;;;; 11C5B;BHAIKSUKI NUMBER TWO;No;0;L;;;;2;N;;;;; 11C5C;BHAIKSUKI NUMBER THREE;No;0;L;;;;3;N;;;;; 11C5D;BHAIKSUKI NUMBER FOUR;No;0;L;;;;4;N;;;;; 11C5E;BHAIKSUKI NUMBER FIVE;No;0;L;;;;5;N;;;;; 11C5F;BHAIKSUKI NUMBER SIX;No;0;L;;;;6;N;;;;; 11C60;BHAIKSUKI NUMBER SEVEN;No;0;L;;;;7;N;;;;; 11C61;BHAIKSUKI NUMBER EIGHT;No;0;L;;;;8;N;;;;; 11C62;BHAIKSUKI NUMBER NINE;No;0;L;;;;9;N;;;;; 11C63;BHAIKSUKI NUMBER TEN;No;0;L;;;;10;N;;;;; 11C64;BHAIKSUKI NUMBER TWENTY;No;0;L;;;;20;N;;;;; 11C65;BHAIKSUKI NUMBER THIRTY;No;0;L;;;;30;N;;;;; 11C66;BHAIKSUKI NUMBER FORTY;No;0;L;;;;40;N;;;;; 11C67;BHAIKSUKI NUMBER FIFTY;No;0;L;;;;50;N;;;;; 11C68;BHAIKSUKI NUMBER SIXTY;No;0;L;;;;60;N;;;;; 11C69;BHAIKSUKI NUMBER SEVENTY;No;0;L;;;;70;N;;;;; 11C6A;BHAIKSUKI NUMBER EIGHTY;No;0;L;;;;80;N;;;;; 11C6B;BHAIKSUKI NUMBER NINETY;No;0;L;;;;90;N;;;;; 11C6C;BHAIKSUKI HUNDREDS UNIT MARK;No;0;L;;;;100;N;;;;; 11C70;MARCHEN HEAD MARK;Po;0;L;;;;;N;;;;; 11C71;MARCHEN MARK SHAD;Po;0;L;;;;;N;;;;; 11C72;MARCHEN LETTER KA;Lo;0;L;;;;;N;;;;; 11C73;MARCHEN LETTER KHA;Lo;0;L;;;;;N;;;;; 11C74;MARCHEN LETTER GA;Lo;0;L;;;;;N;;;;; 11C75;MARCHEN LETTER NGA;Lo;0;L;;;;;N;;;;; 11C76;MARCHEN LETTER CA;Lo;0;L;;;;;N;;;;; 11C77;MARCHEN LETTER CHA;Lo;0;L;;;;;N;;;;; 11C78;MARCHEN LETTER JA;Lo;0;L;;;;;N;;;;; 11C79;MARCHEN LETTER NYA;Lo;0;L;;;;;N;;;;; 11C7A;MARCHEN LETTER TA;Lo;0;L;;;;;N;;;;; 11C7B;MARCHEN LETTER THA;Lo;0;L;;;;;N;;;;; 11C7C;MARCHEN LETTER DA;Lo;0;L;;;;;N;;;;; 11C7D;MARCHEN LETTER NA;Lo;0;L;;;;;N;;;;; 11C7E;MARCHEN LETTER PA;Lo;0;L;;;;;N;;;;; 11C7F;MARCHEN LETTER PHA;Lo;0;L;;;;;N;;;;; 11C80;MARCHEN LETTER BA;Lo;0;L;;;;;N;;;;; 11C81;MARCHEN LETTER MA;Lo;0;L;;;;;N;;;;; 11C82;MARCHEN LETTER TSA;Lo;0;L;;;;;N;;;;; 11C83;MARCHEN LETTER TSHA;Lo;0;L;;;;;N;;;;; 11C84;MARCHEN LETTER DZA;Lo;0;L;;;;;N;;;;; 11C85;MARCHEN LETTER WA;Lo;0;L;;;;;N;;;;; 11C86;MARCHEN LETTER ZHA;Lo;0;L;;;;;N;;;;; 11C87;MARCHEN LETTER ZA;Lo;0;L;;;;;N;;;;; 11C88;MARCHEN LETTER -A;Lo;0;L;;;;;N;;;;; 11C89;MARCHEN LETTER YA;Lo;0;L;;;;;N;;;;; 11C8A;MARCHEN LETTER RA;Lo;0;L;;;;;N;;;;; 11C8B;MARCHEN LETTER LA;Lo;0;L;;;;;N;;;;; 11C8C;MARCHEN LETTER SHA;Lo;0;L;;;;;N;;;;; 11C8D;MARCHEN LETTER SA;Lo;0;L;;;;;N;;;;; 11C8E;MARCHEN LETTER HA;Lo;0;L;;;;;N;;;;; 11C8F;MARCHEN LETTER A;Lo;0;L;;;;;N;;;;; 11C92;MARCHEN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;; 11C93;MARCHEN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;; 11C94;MARCHEN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;; 11C95;MARCHEN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;; 11C96;MARCHEN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;; 11C97;MARCHEN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;; 11C98;MARCHEN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;; 11C99;MARCHEN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;; 11C9A;MARCHEN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;; 11C9B;MARCHEN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;; 11C9C;MARCHEN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;; 11C9D;MARCHEN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;; 11C9E;MARCHEN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;; 11C9F;MARCHEN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;; 11CA0;MARCHEN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;; 11CA1;MARCHEN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;; 11CA2;MARCHEN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;; 11CA3;MARCHEN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;; 11CA4;MARCHEN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;; 11CA5;MARCHEN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;;;; 11CA6;MARCHEN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;; 11CA7;MARCHEN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;; 11CA9;MARCHEN SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;; 11CAA;MARCHEN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;;;; 11CAB;MARCHEN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;; 11CAC;MARCHEN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;; 11CAD;MARCHEN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;; 11CAE;MARCHEN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;; 11CAF;MARCHEN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;; 11CB0;MARCHEN VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; 11CB1;MARCHEN VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 11CB2;MARCHEN VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11CB3;MARCHEN VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 11CB4;MARCHEN VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 11CB5;MARCHEN SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11CB6;MARCHEN SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 11D00;MASARAM GONDI LETTER A;Lo;0;L;;;;;N;;;;; 11D01;MASARAM GONDI LETTER AA;Lo;0;L;;;;;N;;;;; 11D02;MASARAM GONDI LETTER I;Lo;0;L;;;;;N;;;;; 11D03;MASARAM GONDI LETTER II;Lo;0;L;;;;;N;;;;; 11D04;MASARAM GONDI LETTER U;Lo;0;L;;;;;N;;;;; 11D05;MASARAM GONDI LETTER UU;Lo;0;L;;;;;N;;;;; 11D06;MASARAM GONDI LETTER E;Lo;0;L;;;;;N;;;;; 11D08;MASARAM GONDI LETTER AI;Lo;0;L;;;;;N;;;;; 11D09;MASARAM GONDI LETTER O;Lo;0;L;;;;;N;;;;; 11D0B;MASARAM GONDI LETTER AU;Lo;0;L;;;;;N;;;;; 11D0C;MASARAM GONDI LETTER KA;Lo;0;L;;;;;N;;;;; 11D0D;MASARAM GONDI LETTER KHA;Lo;0;L;;;;;N;;;;; 11D0E;MASARAM GONDI LETTER GA;Lo;0;L;;;;;N;;;;; 11D0F;MASARAM GONDI LETTER GHA;Lo;0;L;;;;;N;;;;; 11D10;MASARAM GONDI LETTER NGA;Lo;0;L;;;;;N;;;;; 11D11;MASARAM GONDI LETTER CA;Lo;0;L;;;;;N;;;;; 11D12;MASARAM GONDI LETTER CHA;Lo;0;L;;;;;N;;;;; 11D13;MASARAM GONDI LETTER JA;Lo;0;L;;;;;N;;;;; 11D14;MASARAM GONDI LETTER JHA;Lo;0;L;;;;;N;;;;; 11D15;MASARAM GONDI LETTER NYA;Lo;0;L;;;;;N;;;;; 11D16;MASARAM GONDI LETTER TTA;Lo;0;L;;;;;N;;;;; 11D17;MASARAM GONDI LETTER TTHA;Lo;0;L;;;;;N;;;;; 11D18;MASARAM GONDI LETTER DDA;Lo;0;L;;;;;N;;;;; 11D19;MASARAM GONDI LETTER DDHA;Lo;0;L;;;;;N;;;;; 11D1A;MASARAM GONDI LETTER NNA;Lo;0;L;;;;;N;;;;; 11D1B;MASARAM GONDI LETTER TA;Lo;0;L;;;;;N;;;;; 11D1C;MASARAM GONDI LETTER THA;Lo;0;L;;;;;N;;;;; 11D1D;MASARAM GONDI LETTER DA;Lo;0;L;;;;;N;;;;; 11D1E;MASARAM GONDI LETTER DHA;Lo;0;L;;;;;N;;;;; 11D1F;MASARAM GONDI LETTER NA;Lo;0;L;;;;;N;;;;; 11D20;MASARAM GONDI LETTER PA;Lo;0;L;;;;;N;;;;; 11D21;MASARAM GONDI LETTER PHA;Lo;0;L;;;;;N;;;;; 11D22;MASARAM GONDI LETTER BA;Lo;0;L;;;;;N;;;;; 11D23;MASARAM GONDI LETTER BHA;Lo;0;L;;;;;N;;;;; 11D24;MASARAM GONDI LETTER MA;Lo;0;L;;;;;N;;;;; 11D25;MASARAM GONDI LETTER YA;Lo;0;L;;;;;N;;;;; 11D26;MASARAM GONDI LETTER RA;Lo;0;L;;;;;N;;;;; 11D27;MASARAM GONDI LETTER LA;Lo;0;L;;;;;N;;;;; 11D28;MASARAM GONDI LETTER VA;Lo;0;L;;;;;N;;;;; 11D29;MASARAM GONDI LETTER SHA;Lo;0;L;;;;;N;;;;; 11D2A;MASARAM GONDI LETTER SSA;Lo;0;L;;;;;N;;;;; 11D2B;MASARAM GONDI LETTER SA;Lo;0;L;;;;;N;;;;; 11D2C;MASARAM GONDI LETTER HA;Lo;0;L;;;;;N;;;;; 11D2D;MASARAM GONDI LETTER LLA;Lo;0;L;;;;;N;;;;; 11D2E;MASARAM GONDI LETTER KSSA;Lo;0;L;;;;;N;;;;; 11D2F;MASARAM GONDI LETTER JNYA;Lo;0;L;;;;;N;;;;; 11D30;MASARAM GONDI LETTER TRA;Lo;0;L;;;;;N;;;;; 11D31;MASARAM GONDI VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; 11D32;MASARAM GONDI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 11D33;MASARAM GONDI VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 11D34;MASARAM GONDI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11D35;MASARAM GONDI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 11D36;MASARAM GONDI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 11D3A;MASARAM GONDI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 11D3C;MASARAM GONDI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 11D3D;MASARAM GONDI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 11D3F;MASARAM GONDI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 11D40;MASARAM GONDI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11D41;MASARAM GONDI SIGN VISARGA;Mn;0;NSM;;;;;N;;;;; 11D42;MASARAM GONDI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 11D43;MASARAM GONDI SIGN CANDRA;Mn;0;NSM;;;;;N;;;;; 11D44;MASARAM GONDI SIGN HALANTA;Mn;9;NSM;;;;;N;;;;; 11D45;MASARAM GONDI VIRAMA;Mn;9;NSM;;;;;N;;;;; 11D46;MASARAM GONDI REPHA;Lo;0;L;;;;;N;;;;; 11D47;MASARAM GONDI RA-KARA;Mn;0;NSM;;;;;N;;;;; 11D50;MASARAM GONDI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 11D51;MASARAM GONDI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 11D52;MASARAM GONDI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 11D53;MASARAM GONDI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 11D54;MASARAM GONDI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 11D55;MASARAM GONDI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 11D56;MASARAM GONDI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 11D57;MASARAM GONDI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 11D58;MASARAM GONDI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 11D59;MASARAM GONDI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11D60;GUNJALA GONDI LETTER A;Lo;0;L;;;;;N;;;;; 11D61;GUNJALA GONDI LETTER AA;Lo;0;L;;;;;N;;;;; 11D62;GUNJALA GONDI LETTER I;Lo;0;L;;;;;N;;;;; 11D63;GUNJALA GONDI LETTER II;Lo;0;L;;;;;N;;;;; 11D64;GUNJALA GONDI LETTER U;Lo;0;L;;;;;N;;;;; 11D65;GUNJALA GONDI LETTER UU;Lo;0;L;;;;;N;;;;; 11D67;GUNJALA GONDI LETTER EE;Lo;0;L;;;;;N;;;;; 11D68;GUNJALA GONDI LETTER AI;Lo;0;L;;;;;N;;;;; 11D6A;GUNJALA GONDI LETTER OO;Lo;0;L;;;;;N;;;;; 11D6B;GUNJALA GONDI LETTER AU;Lo;0;L;;;;;N;;;;; 11D6C;GUNJALA GONDI LETTER YA;Lo;0;L;;;;;N;;;;; 11D6D;GUNJALA GONDI LETTER VA;Lo;0;L;;;;;N;;;;; 11D6E;GUNJALA GONDI LETTER BA;Lo;0;L;;;;;N;;;;; 11D6F;GUNJALA GONDI LETTER BHA;Lo;0;L;;;;;N;;;;; 11D70;GUNJALA GONDI LETTER MA;Lo;0;L;;;;;N;;;;; 11D71;GUNJALA GONDI LETTER KA;Lo;0;L;;;;;N;;;;; 11D72;GUNJALA GONDI LETTER KHA;Lo;0;L;;;;;N;;;;; 11D73;GUNJALA GONDI LETTER TA;Lo;0;L;;;;;N;;;;; 11D74;GUNJALA GONDI LETTER THA;Lo;0;L;;;;;N;;;;; 11D75;GUNJALA GONDI LETTER LA;Lo;0;L;;;;;N;;;;; 11D76;GUNJALA GONDI LETTER GA;Lo;0;L;;;;;N;;;;; 11D77;GUNJALA GONDI LETTER GHA;Lo;0;L;;;;;N;;;;; 11D78;GUNJALA GONDI LETTER DA;Lo;0;L;;;;;N;;;;; 11D79;GUNJALA GONDI LETTER DHA;Lo;0;L;;;;;N;;;;; 11D7A;GUNJALA GONDI LETTER NA;Lo;0;L;;;;;N;;;;; 11D7B;GUNJALA GONDI LETTER CA;Lo;0;L;;;;;N;;;;; 11D7C;GUNJALA GONDI LETTER CHA;Lo;0;L;;;;;N;;;;; 11D7D;GUNJALA GONDI LETTER TTA;Lo;0;L;;;;;N;;;;; 11D7E;GUNJALA GONDI LETTER TTHA;Lo;0;L;;;;;N;;;;; 11D7F;GUNJALA GONDI LETTER LLA;Lo;0;L;;;;;N;;;;; 11D80;GUNJALA GONDI LETTER JA;Lo;0;L;;;;;N;;;;; 11D81;GUNJALA GONDI LETTER JHA;Lo;0;L;;;;;N;;;;; 11D82;GUNJALA GONDI LETTER DDA;Lo;0;L;;;;;N;;;;; 11D83;GUNJALA GONDI LETTER DDHA;Lo;0;L;;;;;N;;;;; 11D84;GUNJALA GONDI LETTER NGA;Lo;0;L;;;;;N;;;;; 11D85;GUNJALA GONDI LETTER PA;Lo;0;L;;;;;N;;;;; 11D86;GUNJALA GONDI LETTER PHA;Lo;0;L;;;;;N;;;;; 11D87;GUNJALA GONDI LETTER HA;Lo;0;L;;;;;N;;;;; 11D88;GUNJALA GONDI LETTER RA;Lo;0;L;;;;;N;;;;; 11D89;GUNJALA GONDI LETTER SA;Lo;0;L;;;;;N;;;;; 11D8A;GUNJALA GONDI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 11D8B;GUNJALA GONDI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 11D8C;GUNJALA GONDI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 11D8D;GUNJALA GONDI VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 11D8E;GUNJALA GONDI VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 11D90;GUNJALA GONDI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;; 11D91;GUNJALA GONDI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 11D93;GUNJALA GONDI VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; 11D94;GUNJALA GONDI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 11D95;GUNJALA GONDI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11D96;GUNJALA GONDI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 11D97;GUNJALA GONDI VIRAMA;Mn;9;NSM;;;;;N;;;;; 11D98;GUNJALA GONDI OM;Lo;0;L;;;;;N;;;;; 11DA0;GUNJALA GONDI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 11DA1;GUNJALA GONDI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 11DA2;GUNJALA GONDI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 11DA3;GUNJALA GONDI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 11DA4;GUNJALA GONDI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 11DA5;GUNJALA GONDI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 11DA6;GUNJALA GONDI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 11DA7;GUNJALA GONDI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 11DA8;GUNJALA GONDI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 11DA9;GUNJALA GONDI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11EE0;MAKASAR LETTER KA;Lo;0;L;;;;;N;;;;; 11EE1;MAKASAR LETTER GA;Lo;0;L;;;;;N;;;;; 11EE2;MAKASAR LETTER NGA;Lo;0;L;;;;;N;;;;; 11EE3;MAKASAR LETTER PA;Lo;0;L;;;;;N;;;;; 11EE4;MAKASAR LETTER BA;Lo;0;L;;;;;N;;;;; 11EE5;MAKASAR LETTER MA;Lo;0;L;;;;;N;;;;; 11EE6;MAKASAR LETTER TA;Lo;0;L;;;;;N;;;;; 11EE7;MAKASAR LETTER DA;Lo;0;L;;;;;N;;;;; 11EE8;MAKASAR LETTER NA;Lo;0;L;;;;;N;;;;; 11EE9;MAKASAR LETTER CA;Lo;0;L;;;;;N;;;;; 11EEA;MAKASAR LETTER JA;Lo;0;L;;;;;N;;;;; 11EEB;MAKASAR LETTER NYA;Lo;0;L;;;;;N;;;;; 11EEC;MAKASAR LETTER YA;Lo;0;L;;;;;N;;;;; 11EED;MAKASAR LETTER RA;Lo;0;L;;;;;N;;;;; 11EEE;MAKASAR LETTER LA;Lo;0;L;;;;;N;;;;; 11EEF;MAKASAR LETTER VA;Lo;0;L;;;;;N;;;;; 11EF0;MAKASAR LETTER SA;Lo;0;L;;;;;N;;;;; 11EF1;MAKASAR LETTER A;Lo;0;L;;;;;N;;;;; 11EF2;MAKASAR ANGKA;Lo;0;L;;;;;N;;;;; 11EF3;MAKASAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 11EF4;MAKASAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11EF5;MAKASAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 11EF6;MAKASAR VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 11EF7;MAKASAR PASSIMBANG;Po;0;L;;;;;N;;;;; 11EF8;MAKASAR END OF SECTION;Po;0;L;;;;;N;;;;; 11FB0;LISU LETTER YHA;Lo;0;L;;;;;N;;;;; 11FC0;TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH;No;0;L;;;;1/320;N;;;;; 11FC1;TAMIL FRACTION ONE ONE-HUNDRED-AND-SIXTIETH;No;0;L;;;;1/160;N;;;;; 11FC2;TAMIL FRACTION ONE EIGHTIETH;No;0;L;;;;1/80;N;;;;; 11FC3;TAMIL FRACTION ONE SIXTY-FOURTH;No;0;L;;;;1/64;N;;;;; 11FC4;TAMIL FRACTION ONE FORTIETH;No;0;L;;;;1/40;N;;;;; 11FC5;TAMIL FRACTION ONE THIRTY-SECOND;No;0;L;;;;1/32;N;;;;; 11FC6;TAMIL FRACTION THREE EIGHTIETHS;No;0;L;;;;3/80;N;;;;; 11FC7;TAMIL FRACTION THREE SIXTY-FOURTHS;No;0;L;;;;3/64;N;;;;; 11FC8;TAMIL FRACTION ONE TWENTIETH;No;0;L;;;;1/20;N;;;;; 11FC9;TAMIL FRACTION ONE SIXTEENTH-1;No;0;L;;;;1/16;N;;;;; 11FCA;TAMIL FRACTION ONE SIXTEENTH-2;No;0;L;;;;1/16;N;;;;; 11FCB;TAMIL FRACTION ONE TENTH;No;0;L;;;;1/10;N;;;;; 11FCC;TAMIL FRACTION ONE EIGHTH;No;0;L;;;;1/8;N;;;;; 11FCD;TAMIL FRACTION THREE TWENTIETHS;No;0;L;;;;3/20;N;;;;; 11FCE;TAMIL FRACTION THREE SIXTEENTHS;No;0;L;;;;3/16;N;;;;; 11FCF;TAMIL FRACTION ONE FIFTH;No;0;L;;;;1/5;N;;;;; 11FD0;TAMIL FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;; 11FD1;TAMIL FRACTION ONE HALF-1;No;0;L;;;;1/2;N;;;;; 11FD2;TAMIL FRACTION ONE HALF-2;No;0;L;;;;1/2;N;;;;; 11FD3;TAMIL FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;; 11FD4;TAMIL FRACTION DOWNSCALING FACTOR KIIZH;No;0;L;;;;1/320;N;;;;; 11FD5;TAMIL SIGN NEL;So;0;ON;;;;;N;;;;; 11FD6;TAMIL SIGN CEVITU;So;0;ON;;;;;N;;;;; 11FD7;TAMIL SIGN AAZHAAKKU;So;0;ON;;;;;N;;;;; 11FD8;TAMIL SIGN UZHAKKU;So;0;ON;;;;;N;;;;; 11FD9;TAMIL SIGN MUUVUZHAKKU;So;0;ON;;;;;N;;;;; 11FDA;TAMIL SIGN KURUNI;So;0;ON;;;;;N;;;;; 11FDB;TAMIL SIGN PATHAKKU;So;0;ON;;;;;N;;;;; 11FDC;TAMIL SIGN MUKKURUNI;So;0;ON;;;;;N;;;;; 11FDD;TAMIL SIGN KAACU;Sc;0;ET;;;;;N;;;;; 11FDE;TAMIL SIGN PANAM;Sc;0;ET;;;;;N;;;;; 11FDF;TAMIL SIGN PON;Sc;0;ET;;;;;N;;;;; 11FE0;TAMIL SIGN VARAAKAN;Sc;0;ET;;;;;N;;;;; 11FE1;TAMIL SIGN PAARAM;So;0;ON;;;;;N;;;;; 11FE2;TAMIL SIGN KUZHI;So;0;ON;;;;;N;;;;; 11FE3;TAMIL SIGN VELI;So;0;ON;;;;;N;;;;; 11FE4;TAMIL WET CULTIVATION SIGN;So;0;ON;;;;;N;;;;; 11FE5;TAMIL DRY CULTIVATION SIGN;So;0;ON;;;;;N;;;;; 11FE6;TAMIL LAND SIGN;So;0;ON;;;;;N;;;;; 11FE7;TAMIL SALT PAN SIGN;So;0;ON;;;;;N;;;;; 11FE8;TAMIL TRADITIONAL CREDIT SIGN;So;0;ON;;;;;N;;;;; 11FE9;TAMIL TRADITIONAL NUMBER SIGN;So;0;ON;;;;;N;;;;; 11FEA;TAMIL CURRENT SIGN;So;0;ON;;;;;N;;;;; 11FEB;TAMIL AND ODD SIGN;So;0;ON;;;;;N;;;;; 11FEC;TAMIL SPENT SIGN;So;0;ON;;;;;N;;;;; 11FED;TAMIL TOTAL SIGN;So;0;ON;;;;;N;;;;; 11FEE;TAMIL IN POSSESSION SIGN;So;0;ON;;;;;N;;;;; 11FEF;TAMIL STARTING FROM SIGN;So;0;ON;;;;;N;;;;; 11FF0;TAMIL SIGN MUTHALIYA;So;0;ON;;;;;N;;;;; 11FF1;TAMIL SIGN VAKAIYARAA;So;0;ON;;;;;N;;;;; 11FFF;TAMIL PUNCTUATION END OF TEXT;Po;0;L;;;;;N;;;;; 12000;CUNEIFORM SIGN A;Lo;0;L;;;;;N;;;;; 12001;CUNEIFORM SIGN A TIMES A;Lo;0;L;;;;;N;;;;; 12002;CUNEIFORM SIGN A TIMES BAD;Lo;0;L;;;;;N;;;;; 12003;CUNEIFORM SIGN A TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 12004;CUNEIFORM SIGN A TIMES HA;Lo;0;L;;;;;N;;;;; 12005;CUNEIFORM SIGN A TIMES IGI;Lo;0;L;;;;;N;;;;; 12006;CUNEIFORM SIGN A TIMES LAGAR GUNU;Lo;0;L;;;;;N;;;;; 12007;CUNEIFORM SIGN A TIMES MUSH;Lo;0;L;;;;;N;;;;; 12008;CUNEIFORM SIGN A TIMES SAG;Lo;0;L;;;;;N;;;;; 12009;CUNEIFORM SIGN A2;Lo;0;L;;;;;N;;;;; 1200A;CUNEIFORM SIGN AB;Lo;0;L;;;;;N;;;;; 1200B;CUNEIFORM SIGN AB TIMES ASH2;Lo;0;L;;;;;N;;;;; 1200C;CUNEIFORM SIGN AB TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;; 1200D;CUNEIFORM SIGN AB TIMES GAL;Lo;0;L;;;;;N;;;;; 1200E;CUNEIFORM SIGN AB TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 1200F;CUNEIFORM SIGN AB TIMES HA;Lo;0;L;;;;;N;;;;; 12010;CUNEIFORM SIGN AB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 12011;CUNEIFORM SIGN AB TIMES IMIN;Lo;0;L;;;;;N;;;;; 12012;CUNEIFORM SIGN AB TIMES LAGAB;Lo;0;L;;;;;N;;;;; 12013;CUNEIFORM SIGN AB TIMES SHESH;Lo;0;L;;;;;N;;;;; 12014;CUNEIFORM SIGN AB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;; 12015;CUNEIFORM SIGN AB GUNU;Lo;0;L;;;;;N;;;;; 12016;CUNEIFORM SIGN AB2;Lo;0;L;;;;;N;;;;; 12017;CUNEIFORM SIGN AB2 TIMES BALAG;Lo;0;L;;;;;N;;;;; 12018;CUNEIFORM SIGN AB2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 12019;CUNEIFORM SIGN AB2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; 1201A;CUNEIFORM SIGN AB2 TIMES SHA3;Lo;0;L;;;;;N;;;;; 1201B;CUNEIFORM SIGN AB2 TIMES TAK4;Lo;0;L;;;;;N;;;;; 1201C;CUNEIFORM SIGN AD;Lo;0;L;;;;;N;;;;; 1201D;CUNEIFORM SIGN AK;Lo;0;L;;;;;N;;;;; 1201E;CUNEIFORM SIGN AK TIMES ERIN2;Lo;0;L;;;;;N;;;;; 1201F;CUNEIFORM SIGN AK TIMES SHITA PLUS GISH;Lo;0;L;;;;;N;;;;; 12020;CUNEIFORM SIGN AL;Lo;0;L;;;;;N;;;;; 12021;CUNEIFORM SIGN AL TIMES AL;Lo;0;L;;;;;N;;;;; 12022;CUNEIFORM SIGN AL TIMES DIM2;Lo;0;L;;;;;N;;;;; 12023;CUNEIFORM SIGN AL TIMES GISH;Lo;0;L;;;;;N;;;;; 12024;CUNEIFORM SIGN AL TIMES HA;Lo;0;L;;;;;N;;;;; 12025;CUNEIFORM SIGN AL TIMES KAD3;Lo;0;L;;;;;N;;;;; 12026;CUNEIFORM SIGN AL TIMES KI;Lo;0;L;;;;;N;;;;; 12027;CUNEIFORM SIGN AL TIMES SHE;Lo;0;L;;;;;N;;;;; 12028;CUNEIFORM SIGN AL TIMES USH;Lo;0;L;;;;;N;;;;; 12029;CUNEIFORM SIGN ALAN;Lo;0;L;;;;;N;;;;; 1202A;CUNEIFORM SIGN ALEPH;Lo;0;L;;;;;N;;;;; 1202B;CUNEIFORM SIGN AMAR;Lo;0;L;;;;;N;;;;; 1202C;CUNEIFORM SIGN AMAR TIMES SHE;Lo;0;L;;;;;N;;;;; 1202D;CUNEIFORM SIGN AN;Lo;0;L;;;;;N;;;;; 1202E;CUNEIFORM SIGN AN OVER AN;Lo;0;L;;;;;N;;;;; 1202F;CUNEIFORM SIGN AN THREE TIMES;Lo;0;L;;;;;N;;;;; 12030;CUNEIFORM SIGN AN PLUS NAGA OPPOSING AN PLUS NAGA;Lo;0;L;;;;;N;;;;; 12031;CUNEIFORM SIGN AN PLUS NAGA SQUARED;Lo;0;L;;;;;N;;;;; 12032;CUNEIFORM SIGN ANSHE;Lo;0;L;;;;;N;;;;; 12033;CUNEIFORM SIGN APIN;Lo;0;L;;;;;N;;;;; 12034;CUNEIFORM SIGN ARAD;Lo;0;L;;;;;N;;;;; 12035;CUNEIFORM SIGN ARAD TIMES KUR;Lo;0;L;;;;;N;;;;; 12036;CUNEIFORM SIGN ARKAB;Lo;0;L;;;;;N;;;;; 12037;CUNEIFORM SIGN ASAL2;Lo;0;L;;;;;N;;;;; 12038;CUNEIFORM SIGN ASH;Lo;0;L;;;;;N;;;;; 12039;CUNEIFORM SIGN ASH ZIDA TENU;Lo;0;L;;;;;N;;;;; 1203A;CUNEIFORM SIGN ASH KABA TENU;Lo;0;L;;;;;N;;;;; 1203B;CUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAP;Lo;0;L;;;;;N;;;;; 1203C;CUNEIFORM SIGN ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;; 1203D;CUNEIFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;; 1203E;CUNEIFORM SIGN ASH2;Lo;0;L;;;;;N;;;;; 1203F;CUNEIFORM SIGN ASHGAB;Lo;0;L;;;;;N;;;;; 12040;CUNEIFORM SIGN BA;Lo;0;L;;;;;N;;;;; 12041;CUNEIFORM SIGN BAD;Lo;0;L;;;;;N;;;;; 12042;CUNEIFORM SIGN BAG3;Lo;0;L;;;;;N;;;;; 12043;CUNEIFORM SIGN BAHAR2;Lo;0;L;;;;;N;;;;; 12044;CUNEIFORM SIGN BAL;Lo;0;L;;;;;N;;;;; 12045;CUNEIFORM SIGN BAL OVER BAL;Lo;0;L;;;;;N;;;;; 12046;CUNEIFORM SIGN BALAG;Lo;0;L;;;;;N;;;;; 12047;CUNEIFORM SIGN BAR;Lo;0;L;;;;;N;;;;; 12048;CUNEIFORM SIGN BARA2;Lo;0;L;;;;;N;;;;; 12049;CUNEIFORM SIGN BI;Lo;0;L;;;;;N;;;;; 1204A;CUNEIFORM SIGN BI TIMES A;Lo;0;L;;;;;N;;;;; 1204B;CUNEIFORM SIGN BI TIMES GAR;Lo;0;L;;;;;N;;;;; 1204C;CUNEIFORM SIGN BI TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 1204D;CUNEIFORM SIGN BU;Lo;0;L;;;;;N;;;;; 1204E;CUNEIFORM SIGN BU OVER BU AB;Lo;0;L;;;;;N;;;;; 1204F;CUNEIFORM SIGN BU OVER BU UN;Lo;0;L;;;;;N;;;;; 12050;CUNEIFORM SIGN BU CROSSING BU;Lo;0;L;;;;;N;;;;; 12051;CUNEIFORM SIGN BULUG;Lo;0;L;;;;;N;;;;; 12052;CUNEIFORM SIGN BULUG OVER BULUG;Lo;0;L;;;;;N;;;;; 12053;CUNEIFORM SIGN BUR;Lo;0;L;;;;;N;;;;; 12054;CUNEIFORM SIGN BUR2;Lo;0;L;;;;;N;;;;; 12055;CUNEIFORM SIGN DA;Lo;0;L;;;;;N;;;;; 12056;CUNEIFORM SIGN DAG;Lo;0;L;;;;;N;;;;; 12057;CUNEIFORM SIGN DAG KISIM5 TIMES A PLUS MASH;Lo;0;L;;;;;N;;;;; 12058;CUNEIFORM SIGN DAG KISIM5 TIMES AMAR;Lo;0;L;;;;;N;;;;; 12059;CUNEIFORM SIGN DAG KISIM5 TIMES BALAG;Lo;0;L;;;;;N;;;;; 1205A;CUNEIFORM SIGN DAG KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;; 1205B;CUNEIFORM SIGN DAG KISIM5 TIMES GA;Lo;0;L;;;;;N;;;;; 1205C;CUNEIFORM SIGN DAG KISIM5 TIMES GA PLUS MASH;Lo;0;L;;;;;N;;;;; 1205D;CUNEIFORM SIGN DAG KISIM5 TIMES GI;Lo;0;L;;;;;N;;;;; 1205E;CUNEIFORM SIGN DAG KISIM5 TIMES GIR2;Lo;0;L;;;;;N;;;;; 1205F;CUNEIFORM SIGN DAG KISIM5 TIMES GUD;Lo;0;L;;;;;N;;;;; 12060;CUNEIFORM SIGN DAG KISIM5 TIMES HA;Lo;0;L;;;;;N;;;;; 12061;CUNEIFORM SIGN DAG KISIM5 TIMES IR;Lo;0;L;;;;;N;;;;; 12062;CUNEIFORM SIGN DAG KISIM5 TIMES IR PLUS LU;Lo;0;L;;;;;N;;;;; 12063;CUNEIFORM SIGN DAG KISIM5 TIMES KAK;Lo;0;L;;;;;N;;;;; 12064;CUNEIFORM SIGN DAG KISIM5 TIMES LA;Lo;0;L;;;;;N;;;;; 12065;CUNEIFORM SIGN DAG KISIM5 TIMES LU;Lo;0;L;;;;;N;;;;; 12066;CUNEIFORM SIGN DAG KISIM5 TIMES LU PLUS MASH2;Lo;0;L;;;;;N;;;;; 12067;CUNEIFORM SIGN DAG KISIM5 TIMES LUM;Lo;0;L;;;;;N;;;;; 12068;CUNEIFORM SIGN DAG KISIM5 TIMES NE;Lo;0;L;;;;;N;;;;; 12069;CUNEIFORM SIGN DAG KISIM5 TIMES PAP PLUS PAP;Lo;0;L;;;;;N;;;;; 1206A;CUNEIFORM SIGN DAG KISIM5 TIMES SI;Lo;0;L;;;;;N;;;;; 1206B;CUNEIFORM SIGN DAG KISIM5 TIMES TAK4;Lo;0;L;;;;;N;;;;; 1206C;CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS GIR2;Lo;0;L;;;;;N;;;;; 1206D;CUNEIFORM SIGN DAG KISIM5 TIMES USH;Lo;0;L;;;;;N;;;;; 1206E;CUNEIFORM SIGN DAM;Lo;0;L;;;;;N;;;;; 1206F;CUNEIFORM SIGN DAR;Lo;0;L;;;;;N;;;;; 12070;CUNEIFORM SIGN DARA3;Lo;0;L;;;;;N;;;;; 12071;CUNEIFORM SIGN DARA4;Lo;0;L;;;;;N;;;;; 12072;CUNEIFORM SIGN DI;Lo;0;L;;;;;N;;;;; 12073;CUNEIFORM SIGN DIB;Lo;0;L;;;;;N;;;;; 12074;CUNEIFORM SIGN DIM;Lo;0;L;;;;;N;;;;; 12075;CUNEIFORM SIGN DIM TIMES SHE;Lo;0;L;;;;;N;;;;; 12076;CUNEIFORM SIGN DIM2;Lo;0;L;;;;;N;;;;; 12077;CUNEIFORM SIGN DIN;Lo;0;L;;;;;N;;;;; 12078;CUNEIFORM SIGN DIN KASKAL U GUNU DISH;Lo;0;L;;;;;N;;;;; 12079;CUNEIFORM SIGN DISH;Lo;0;L;;;;;N;;;;; 1207A;CUNEIFORM SIGN DU;Lo;0;L;;;;;N;;;;; 1207B;CUNEIFORM SIGN DU OVER DU;Lo;0;L;;;;;N;;;;; 1207C;CUNEIFORM SIGN DU GUNU;Lo;0;L;;;;;N;;;;; 1207D;CUNEIFORM SIGN DU SHESHIG;Lo;0;L;;;;;N;;;;; 1207E;CUNEIFORM SIGN DUB;Lo;0;L;;;;;N;;;;; 1207F;CUNEIFORM SIGN DUB TIMES ESH2;Lo;0;L;;;;;N;;;;; 12080;CUNEIFORM SIGN DUB2;Lo;0;L;;;;;N;;;;; 12081;CUNEIFORM SIGN DUG;Lo;0;L;;;;;N;;;;; 12082;CUNEIFORM SIGN DUGUD;Lo;0;L;;;;;N;;;;; 12083;CUNEIFORM SIGN DUH;Lo;0;L;;;;;N;;;;; 12084;CUNEIFORM SIGN DUN;Lo;0;L;;;;;N;;;;; 12085;CUNEIFORM SIGN DUN3;Lo;0;L;;;;;N;;;;; 12086;CUNEIFORM SIGN DUN3 GUNU;Lo;0;L;;;;;N;;;;; 12087;CUNEIFORM SIGN DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;; 12088;CUNEIFORM SIGN DUN4;Lo;0;L;;;;;N;;;;; 12089;CUNEIFORM SIGN DUR2;Lo;0;L;;;;;N;;;;; 1208A;CUNEIFORM SIGN E;Lo;0;L;;;;;N;;;;; 1208B;CUNEIFORM SIGN E TIMES PAP;Lo;0;L;;;;;N;;;;; 1208C;CUNEIFORM SIGN E OVER E NUN OVER NUN;Lo;0;L;;;;;N;;;;; 1208D;CUNEIFORM SIGN E2;Lo;0;L;;;;;N;;;;; 1208E;CUNEIFORM SIGN E2 TIMES A PLUS HA PLUS DA;Lo;0;L;;;;;N;;;;; 1208F;CUNEIFORM SIGN E2 TIMES GAR;Lo;0;L;;;;;N;;;;; 12090;CUNEIFORM SIGN E2 TIMES MI;Lo;0;L;;;;;N;;;;; 12091;CUNEIFORM SIGN E2 TIMES SAL;Lo;0;L;;;;;N;;;;; 12092;CUNEIFORM SIGN E2 TIMES SHE;Lo;0;L;;;;;N;;;;; 12093;CUNEIFORM SIGN E2 TIMES U;Lo;0;L;;;;;N;;;;; 12094;CUNEIFORM SIGN EDIN;Lo;0;L;;;;;N;;;;; 12095;CUNEIFORM SIGN EGIR;Lo;0;L;;;;;N;;;;; 12096;CUNEIFORM SIGN EL;Lo;0;L;;;;;N;;;;; 12097;CUNEIFORM SIGN EN;Lo;0;L;;;;;N;;;;; 12098;CUNEIFORM SIGN EN TIMES GAN2;Lo;0;L;;;;;N;;;;; 12099;CUNEIFORM SIGN EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 1209A;CUNEIFORM SIGN EN TIMES ME;Lo;0;L;;;;;N;;;;; 1209B;CUNEIFORM SIGN EN CROSSING EN;Lo;0;L;;;;;N;;;;; 1209C;CUNEIFORM SIGN EN OPPOSING EN;Lo;0;L;;;;;N;;;;; 1209D;CUNEIFORM SIGN EN SQUARED;Lo;0;L;;;;;N;;;;; 1209E;CUNEIFORM SIGN EREN;Lo;0;L;;;;;N;;;;; 1209F;CUNEIFORM SIGN ERIN2;Lo;0;L;;;;;N;;;;; 120A0;CUNEIFORM SIGN ESH2;Lo;0;L;;;;;N;;;;; 120A1;CUNEIFORM SIGN EZEN;Lo;0;L;;;;;N;;;;; 120A2;CUNEIFORM SIGN EZEN TIMES A;Lo;0;L;;;;;N;;;;; 120A3;CUNEIFORM SIGN EZEN TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;; 120A4;CUNEIFORM SIGN EZEN TIMES A PLUS LAL TIMES LAL;Lo;0;L;;;;;N;;;;; 120A5;CUNEIFORM SIGN EZEN TIMES AN;Lo;0;L;;;;;N;;;;; 120A6;CUNEIFORM SIGN EZEN TIMES BAD;Lo;0;L;;;;;N;;;;; 120A7;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;; 120A8;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;; 120A9;CUNEIFORM SIGN EZEN TIMES HA;Lo;0;L;;;;;N;;;;; 120AA;CUNEIFORM SIGN EZEN TIMES HA GUNU;Lo;0;L;;;;;N;;;;; 120AB;CUNEIFORM SIGN EZEN TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 120AC;CUNEIFORM SIGN EZEN TIMES KASKAL;Lo;0;L;;;;;N;;;;; 120AD;CUNEIFORM SIGN EZEN TIMES KASKAL SQUARED;Lo;0;L;;;;;N;;;;; 120AE;CUNEIFORM SIGN EZEN TIMES KU3;Lo;0;L;;;;;N;;;;; 120AF;CUNEIFORM SIGN EZEN TIMES LA;Lo;0;L;;;;;N;;;;; 120B0;CUNEIFORM SIGN EZEN TIMES LAL TIMES LAL;Lo;0;L;;;;;N;;;;; 120B1;CUNEIFORM SIGN EZEN TIMES LI;Lo;0;L;;;;;N;;;;; 120B2;CUNEIFORM SIGN EZEN TIMES LU;Lo;0;L;;;;;N;;;;; 120B3;CUNEIFORM SIGN EZEN TIMES U2;Lo;0;L;;;;;N;;;;; 120B4;CUNEIFORM SIGN EZEN TIMES UD;Lo;0;L;;;;;N;;;;; 120B5;CUNEIFORM SIGN GA;Lo;0;L;;;;;N;;;;; 120B6;CUNEIFORM SIGN GA GUNU;Lo;0;L;;;;;N;;;;; 120B7;CUNEIFORM SIGN GA2;Lo;0;L;;;;;N;;;;; 120B8;CUNEIFORM SIGN GA2 TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;; 120B9;CUNEIFORM SIGN GA2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;; 120BA;CUNEIFORM SIGN GA2 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;; 120BB;CUNEIFORM SIGN GA2 TIMES AB2 TENU PLUS TAB;Lo;0;L;;;;;N;;;;; 120BC;CUNEIFORM SIGN GA2 TIMES AN;Lo;0;L;;;;;N;;;;; 120BD;CUNEIFORM SIGN GA2 TIMES ASH;Lo;0;L;;;;;N;;;;; 120BE;CUNEIFORM SIGN GA2 TIMES ASH2 PLUS GAL;Lo;0;L;;;;;N;;;;; 120BF;CUNEIFORM SIGN GA2 TIMES BAD;Lo;0;L;;;;;N;;;;; 120C0;CUNEIFORM SIGN GA2 TIMES BAR PLUS RA;Lo;0;L;;;;;N;;;;; 120C1;CUNEIFORM SIGN GA2 TIMES BUR;Lo;0;L;;;;;N;;;;; 120C2;CUNEIFORM SIGN GA2 TIMES BUR PLUS RA;Lo;0;L;;;;;N;;;;; 120C3;CUNEIFORM SIGN GA2 TIMES DA;Lo;0;L;;;;;N;;;;; 120C4;CUNEIFORM SIGN GA2 TIMES DI;Lo;0;L;;;;;N;;;;; 120C5;CUNEIFORM SIGN GA2 TIMES DIM TIMES SHE;Lo;0;L;;;;;N;;;;; 120C6;CUNEIFORM SIGN GA2 TIMES DUB;Lo;0;L;;;;;N;;;;; 120C7;CUNEIFORM SIGN GA2 TIMES EL;Lo;0;L;;;;;N;;;;; 120C8;CUNEIFORM SIGN GA2 TIMES EL PLUS LA;Lo;0;L;;;;;N;;;;; 120C9;CUNEIFORM SIGN GA2 TIMES EN;Lo;0;L;;;;;N;;;;; 120CA;CUNEIFORM SIGN GA2 TIMES EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 120CB;CUNEIFORM SIGN GA2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 120CC;CUNEIFORM SIGN GA2 TIMES GAR;Lo;0;L;;;;;N;;;;; 120CD;CUNEIFORM SIGN GA2 TIMES GI;Lo;0;L;;;;;N;;;;; 120CE;CUNEIFORM SIGN GA2 TIMES GI4;Lo;0;L;;;;;N;;;;; 120CF;CUNEIFORM SIGN GA2 TIMES GI4 PLUS A;Lo;0;L;;;;;N;;;;; 120D0;CUNEIFORM SIGN GA2 TIMES GIR2 PLUS SU;Lo;0;L;;;;;N;;;;; 120D1;CUNEIFORM SIGN GA2 TIMES HA PLUS LU PLUS ESH2;Lo;0;L;;;;;N;;;;; 120D2;CUNEIFORM SIGN GA2 TIMES HAL;Lo;0;L;;;;;N;;;;; 120D3;CUNEIFORM SIGN GA2 TIMES HAL PLUS LA;Lo;0;L;;;;;N;;;;; 120D4;CUNEIFORM SIGN GA2 TIMES HI PLUS LI;Lo;0;L;;;;;N;;;;; 120D5;CUNEIFORM SIGN GA2 TIMES HUB2;Lo;0;L;;;;;N;;;;; 120D6;CUNEIFORM SIGN GA2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 120D7;CUNEIFORM SIGN GA2 TIMES ISH PLUS HU PLUS ASH;Lo;0;L;;;;;N;;;;; 120D8;CUNEIFORM SIGN GA2 TIMES KAK;Lo;0;L;;;;;N;;;;; 120D9;CUNEIFORM SIGN GA2 TIMES KASKAL;Lo;0;L;;;;;N;;;;; 120DA;CUNEIFORM SIGN GA2 TIMES KID;Lo;0;L;;;;;N;;;;; 120DB;CUNEIFORM SIGN GA2 TIMES KID PLUS LAL;Lo;0;L;;;;;N;;;;; 120DC;CUNEIFORM SIGN GA2 TIMES KU3 PLUS AN;Lo;0;L;;;;;N;;;;; 120DD;CUNEIFORM SIGN GA2 TIMES LA;Lo;0;L;;;;;N;;;;; 120DE;CUNEIFORM SIGN GA2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; 120DF;CUNEIFORM SIGN GA2 TIMES MI;Lo;0;L;;;;;N;;;;; 120E0;CUNEIFORM SIGN GA2 TIMES NUN;Lo;0;L;;;;;N;;;;; 120E1;CUNEIFORM SIGN GA2 TIMES NUN OVER NUN;Lo;0;L;;;;;N;;;;; 120E2;CUNEIFORM SIGN GA2 TIMES PA;Lo;0;L;;;;;N;;;;; 120E3;CUNEIFORM SIGN GA2 TIMES SAL;Lo;0;L;;;;;N;;;;; 120E4;CUNEIFORM SIGN GA2 TIMES SAR;Lo;0;L;;;;;N;;;;; 120E5;CUNEIFORM SIGN GA2 TIMES SHE;Lo;0;L;;;;;N;;;;; 120E6;CUNEIFORM SIGN GA2 TIMES SHE PLUS TUR;Lo;0;L;;;;;N;;;;; 120E7;CUNEIFORM SIGN GA2 TIMES SHID;Lo;0;L;;;;;N;;;;; 120E8;CUNEIFORM SIGN GA2 TIMES SUM;Lo;0;L;;;;;N;;;;; 120E9;CUNEIFORM SIGN GA2 TIMES TAK4;Lo;0;L;;;;;N;;;;; 120EA;CUNEIFORM SIGN GA2 TIMES U;Lo;0;L;;;;;N;;;;; 120EB;CUNEIFORM SIGN GA2 TIMES UD;Lo;0;L;;;;;N;;;;; 120EC;CUNEIFORM SIGN GA2 TIMES UD PLUS DU;Lo;0;L;;;;;N;;;;; 120ED;CUNEIFORM SIGN GA2 OVER GA2;Lo;0;L;;;;;N;;;;; 120EE;CUNEIFORM SIGN GABA;Lo;0;L;;;;;N;;;;; 120EF;CUNEIFORM SIGN GABA CROSSING GABA;Lo;0;L;;;;;N;;;;; 120F0;CUNEIFORM SIGN GAD;Lo;0;L;;;;;N;;;;; 120F1;CUNEIFORM SIGN GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; 120F2;CUNEIFORM SIGN GAL;Lo;0;L;;;;;N;;;;; 120F3;CUNEIFORM SIGN GAL GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; 120F4;CUNEIFORM SIGN GALAM;Lo;0;L;;;;;N;;;;; 120F5;CUNEIFORM SIGN GAM;Lo;0;L;;;;;N;;;;; 120F6;CUNEIFORM SIGN GAN;Lo;0;L;;;;;N;;;;; 120F7;CUNEIFORM SIGN GAN2;Lo;0;L;;;;;N;;;;; 120F8;CUNEIFORM SIGN GAN2 TENU;Lo;0;L;;;;;N;;;;; 120F9;CUNEIFORM SIGN GAN2 OVER GAN2;Lo;0;L;;;;;N;;;;; 120FA;CUNEIFORM SIGN GAN2 CROSSING GAN2;Lo;0;L;;;;;N;;;;; 120FB;CUNEIFORM SIGN GAR;Lo;0;L;;;;;N;;;;; 120FC;CUNEIFORM SIGN GAR3;Lo;0;L;;;;;N;;;;; 120FD;CUNEIFORM SIGN GASHAN;Lo;0;L;;;;;N;;;;; 120FE;CUNEIFORM SIGN GESHTIN;Lo;0;L;;;;;N;;;;; 120FF;CUNEIFORM SIGN GESHTIN TIMES KUR;Lo;0;L;;;;;N;;;;; 12100;CUNEIFORM SIGN GI;Lo;0;L;;;;;N;;;;; 12101;CUNEIFORM SIGN GI TIMES E;Lo;0;L;;;;;N;;;;; 12102;CUNEIFORM SIGN GI TIMES U;Lo;0;L;;;;;N;;;;; 12103;CUNEIFORM SIGN GI CROSSING GI;Lo;0;L;;;;;N;;;;; 12104;CUNEIFORM SIGN GI4;Lo;0;L;;;;;N;;;;; 12105;CUNEIFORM SIGN GI4 OVER GI4;Lo;0;L;;;;;N;;;;; 12106;CUNEIFORM SIGN GI4 CROSSING GI4;Lo;0;L;;;;;N;;;;; 12107;CUNEIFORM SIGN GIDIM;Lo;0;L;;;;;N;;;;; 12108;CUNEIFORM SIGN GIR2;Lo;0;L;;;;;N;;;;; 12109;CUNEIFORM SIGN GIR2 GUNU;Lo;0;L;;;;;N;;;;; 1210A;CUNEIFORM SIGN GIR3;Lo;0;L;;;;;N;;;;; 1210B;CUNEIFORM SIGN GIR3 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;; 1210C;CUNEIFORM SIGN GIR3 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 1210D;CUNEIFORM SIGN GIR3 TIMES IGI;Lo;0;L;;;;;N;;;;; 1210E;CUNEIFORM SIGN GIR3 TIMES LU PLUS IGI;Lo;0;L;;;;;N;;;;; 1210F;CUNEIFORM SIGN GIR3 TIMES PA;Lo;0;L;;;;;N;;;;; 12110;CUNEIFORM SIGN GISAL;Lo;0;L;;;;;N;;;;; 12111;CUNEIFORM SIGN GISH;Lo;0;L;;;;;N;;;;; 12112;CUNEIFORM SIGN GISH CROSSING GISH;Lo;0;L;;;;;N;;;;; 12113;CUNEIFORM SIGN GISH TIMES BAD;Lo;0;L;;;;;N;;;;; 12114;CUNEIFORM SIGN GISH TIMES TAK4;Lo;0;L;;;;;N;;;;; 12115;CUNEIFORM SIGN GISH TENU;Lo;0;L;;;;;N;;;;; 12116;CUNEIFORM SIGN GU;Lo;0;L;;;;;N;;;;; 12117;CUNEIFORM SIGN GU CROSSING GU;Lo;0;L;;;;;N;;;;; 12118;CUNEIFORM SIGN GU2;Lo;0;L;;;;;N;;;;; 12119;CUNEIFORM SIGN GU2 TIMES KAK;Lo;0;L;;;;;N;;;;; 1211A;CUNEIFORM SIGN GU2 TIMES KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 1211B;CUNEIFORM SIGN GU2 TIMES NUN;Lo;0;L;;;;;N;;;;; 1211C;CUNEIFORM SIGN GU2 TIMES SAL PLUS TUG2;Lo;0;L;;;;;N;;;;; 1211D;CUNEIFORM SIGN GU2 GUNU;Lo;0;L;;;;;N;;;;; 1211E;CUNEIFORM SIGN GUD;Lo;0;L;;;;;N;;;;; 1211F;CUNEIFORM SIGN GUD TIMES A PLUS KUR;Lo;0;L;;;;;N;;;;; 12120;CUNEIFORM SIGN GUD TIMES KUR;Lo;0;L;;;;;N;;;;; 12121;CUNEIFORM SIGN GUD OVER GUD LUGAL;Lo;0;L;;;;;N;;;;; 12122;CUNEIFORM SIGN GUL;Lo;0;L;;;;;N;;;;; 12123;CUNEIFORM SIGN GUM;Lo;0;L;;;;;N;;;;; 12124;CUNEIFORM SIGN GUM TIMES SHE;Lo;0;L;;;;;N;;;;; 12125;CUNEIFORM SIGN GUR;Lo;0;L;;;;;N;;;;; 12126;CUNEIFORM SIGN GUR7;Lo;0;L;;;;;N;;;;; 12127;CUNEIFORM SIGN GURUN;Lo;0;L;;;;;N;;;;; 12128;CUNEIFORM SIGN GURUSH;Lo;0;L;;;;;N;;;;; 12129;CUNEIFORM SIGN HA;Lo;0;L;;;;;N;;;;; 1212A;CUNEIFORM SIGN HA TENU;Lo;0;L;;;;;N;;;;; 1212B;CUNEIFORM SIGN HA GUNU;Lo;0;L;;;;;N;;;;; 1212C;CUNEIFORM SIGN HAL;Lo;0;L;;;;;N;;;;; 1212D;CUNEIFORM SIGN HI;Lo;0;L;;;;;N;;;;; 1212E;CUNEIFORM SIGN HI TIMES ASH;Lo;0;L;;;;;N;;;;; 1212F;CUNEIFORM SIGN HI TIMES ASH2;Lo;0;L;;;;;N;;;;; 12130;CUNEIFORM SIGN HI TIMES BAD;Lo;0;L;;;;;N;;;;; 12131;CUNEIFORM SIGN HI TIMES DISH;Lo;0;L;;;;;N;;;;; 12132;CUNEIFORM SIGN HI TIMES GAD;Lo;0;L;;;;;N;;;;; 12133;CUNEIFORM SIGN HI TIMES KIN;Lo;0;L;;;;;N;;;;; 12134;CUNEIFORM SIGN HI TIMES NUN;Lo;0;L;;;;;N;;;;; 12135;CUNEIFORM SIGN HI TIMES SHE;Lo;0;L;;;;;N;;;;; 12136;CUNEIFORM SIGN HI TIMES U;Lo;0;L;;;;;N;;;;; 12137;CUNEIFORM SIGN HU;Lo;0;L;;;;;N;;;;; 12138;CUNEIFORM SIGN HUB2;Lo;0;L;;;;;N;;;;; 12139;CUNEIFORM SIGN HUB2 TIMES AN;Lo;0;L;;;;;N;;;;; 1213A;CUNEIFORM SIGN HUB2 TIMES HAL;Lo;0;L;;;;;N;;;;; 1213B;CUNEIFORM SIGN HUB2 TIMES KASKAL;Lo;0;L;;;;;N;;;;; 1213C;CUNEIFORM SIGN HUB2 TIMES LISH;Lo;0;L;;;;;N;;;;; 1213D;CUNEIFORM SIGN HUB2 TIMES UD;Lo;0;L;;;;;N;;;;; 1213E;CUNEIFORM SIGN HUL2;Lo;0;L;;;;;N;;;;; 1213F;CUNEIFORM SIGN I;Lo;0;L;;;;;N;;;;; 12140;CUNEIFORM SIGN I A;Lo;0;L;;;;;N;;;;; 12141;CUNEIFORM SIGN IB;Lo;0;L;;;;;N;;;;; 12142;CUNEIFORM SIGN IDIM;Lo;0;L;;;;;N;;;;; 12143;CUNEIFORM SIGN IDIM OVER IDIM BUR;Lo;0;L;;;;;N;;;;; 12144;CUNEIFORM SIGN IDIM OVER IDIM SQUARED;Lo;0;L;;;;;N;;;;; 12145;CUNEIFORM SIGN IG;Lo;0;L;;;;;N;;;;; 12146;CUNEIFORM SIGN IGI;Lo;0;L;;;;;N;;;;; 12147;CUNEIFORM SIGN IGI DIB;Lo;0;L;;;;;N;;;;; 12148;CUNEIFORM SIGN IGI RI;Lo;0;L;;;;;N;;;;; 12149;CUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OVER UD;Lo;0;L;;;;;N;;;;; 1214A;CUNEIFORM SIGN IGI GUNU;Lo;0;L;;;;;N;;;;; 1214B;CUNEIFORM SIGN IL;Lo;0;L;;;;;N;;;;; 1214C;CUNEIFORM SIGN IL TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 1214D;CUNEIFORM SIGN IL2;Lo;0;L;;;;;N;;;;; 1214E;CUNEIFORM SIGN IM;Lo;0;L;;;;;N;;;;; 1214F;CUNEIFORM SIGN IM TIMES TAK4;Lo;0;L;;;;;N;;;;; 12150;CUNEIFORM SIGN IM CROSSING IM;Lo;0;L;;;;;N;;;;; 12151;CUNEIFORM SIGN IM OPPOSING IM;Lo;0;L;;;;;N;;;;; 12152;CUNEIFORM SIGN IM SQUARED;Lo;0;L;;;;;N;;;;; 12153;CUNEIFORM SIGN IMIN;Lo;0;L;;;;;N;;;;; 12154;CUNEIFORM SIGN IN;Lo;0;L;;;;;N;;;;; 12155;CUNEIFORM SIGN IR;Lo;0;L;;;;;N;;;;; 12156;CUNEIFORM SIGN ISH;Lo;0;L;;;;;N;;;;; 12157;CUNEIFORM SIGN KA;Lo;0;L;;;;;N;;;;; 12158;CUNEIFORM SIGN KA TIMES A;Lo;0;L;;;;;N;;;;; 12159;CUNEIFORM SIGN KA TIMES AD;Lo;0;L;;;;;N;;;;; 1215A;CUNEIFORM SIGN KA TIMES AD PLUS KU3;Lo;0;L;;;;;N;;;;; 1215B;CUNEIFORM SIGN KA TIMES ASH2;Lo;0;L;;;;;N;;;;; 1215C;CUNEIFORM SIGN KA TIMES BAD;Lo;0;L;;;;;N;;;;; 1215D;CUNEIFORM SIGN KA TIMES BALAG;Lo;0;L;;;;;N;;;;; 1215E;CUNEIFORM SIGN KA TIMES BAR;Lo;0;L;;;;;N;;;;; 1215F;CUNEIFORM SIGN KA TIMES BI;Lo;0;L;;;;;N;;;;; 12160;CUNEIFORM SIGN KA TIMES ERIN2;Lo;0;L;;;;;N;;;;; 12161;CUNEIFORM SIGN KA TIMES ESH2;Lo;0;L;;;;;N;;;;; 12162;CUNEIFORM SIGN KA TIMES GA;Lo;0;L;;;;;N;;;;; 12163;CUNEIFORM SIGN KA TIMES GAL;Lo;0;L;;;;;N;;;;; 12164;CUNEIFORM SIGN KA TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 12165;CUNEIFORM SIGN KA TIMES GAR;Lo;0;L;;;;;N;;;;; 12166;CUNEIFORM SIGN KA TIMES GAR PLUS SHA3 PLUS A;Lo;0;L;;;;;N;;;;; 12167;CUNEIFORM SIGN KA TIMES GI;Lo;0;L;;;;;N;;;;; 12168;CUNEIFORM SIGN KA TIMES GIR2;Lo;0;L;;;;;N;;;;; 12169;CUNEIFORM SIGN KA TIMES GISH PLUS SAR;Lo;0;L;;;;;N;;;;; 1216A;CUNEIFORM SIGN KA TIMES GISH CROSSING GISH;Lo;0;L;;;;;N;;;;; 1216B;CUNEIFORM SIGN KA TIMES GU;Lo;0;L;;;;;N;;;;; 1216C;CUNEIFORM SIGN KA TIMES GUR7;Lo;0;L;;;;;N;;;;; 1216D;CUNEIFORM SIGN KA TIMES IGI;Lo;0;L;;;;;N;;;;; 1216E;CUNEIFORM SIGN KA TIMES IM;Lo;0;L;;;;;N;;;;; 1216F;CUNEIFORM SIGN KA TIMES KAK;Lo;0;L;;;;;N;;;;; 12170;CUNEIFORM SIGN KA TIMES KI;Lo;0;L;;;;;N;;;;; 12171;CUNEIFORM SIGN KA TIMES KID;Lo;0;L;;;;;N;;;;; 12172;CUNEIFORM SIGN KA TIMES LI;Lo;0;L;;;;;N;;;;; 12173;CUNEIFORM SIGN KA TIMES LU;Lo;0;L;;;;;N;;;;; 12174;CUNEIFORM SIGN KA TIMES ME;Lo;0;L;;;;;N;;;;; 12175;CUNEIFORM SIGN KA TIMES ME PLUS DU;Lo;0;L;;;;;N;;;;; 12176;CUNEIFORM SIGN KA TIMES ME PLUS GI;Lo;0;L;;;;;N;;;;; 12177;CUNEIFORM SIGN KA TIMES ME PLUS TE;Lo;0;L;;;;;N;;;;; 12178;CUNEIFORM SIGN KA TIMES MI;Lo;0;L;;;;;N;;;;; 12179;CUNEIFORM SIGN KA TIMES MI PLUS NUNUZ;Lo;0;L;;;;;N;;;;; 1217A;CUNEIFORM SIGN KA TIMES NE;Lo;0;L;;;;;N;;;;; 1217B;CUNEIFORM SIGN KA TIMES NUN;Lo;0;L;;;;;N;;;;; 1217C;CUNEIFORM SIGN KA TIMES PI;Lo;0;L;;;;;N;;;;; 1217D;CUNEIFORM SIGN KA TIMES RU;Lo;0;L;;;;;N;;;;; 1217E;CUNEIFORM SIGN KA TIMES SA;Lo;0;L;;;;;N;;;;; 1217F;CUNEIFORM SIGN KA TIMES SAR;Lo;0;L;;;;;N;;;;; 12180;CUNEIFORM SIGN KA TIMES SHA;Lo;0;L;;;;;N;;;;; 12181;CUNEIFORM SIGN KA TIMES SHE;Lo;0;L;;;;;N;;;;; 12182;CUNEIFORM SIGN KA TIMES SHID;Lo;0;L;;;;;N;;;;; 12183;CUNEIFORM SIGN KA TIMES SHU;Lo;0;L;;;;;N;;;;; 12184;CUNEIFORM SIGN KA TIMES SIG;Lo;0;L;;;;;N;;;;; 12185;CUNEIFORM SIGN KA TIMES SUHUR;Lo;0;L;;;;;N;;;;; 12186;CUNEIFORM SIGN KA TIMES TAR;Lo;0;L;;;;;N;;;;; 12187;CUNEIFORM SIGN KA TIMES U;Lo;0;L;;;;;N;;;;; 12188;CUNEIFORM SIGN KA TIMES U2;Lo;0;L;;;;;N;;;;; 12189;CUNEIFORM SIGN KA TIMES UD;Lo;0;L;;;;;N;;;;; 1218A;CUNEIFORM SIGN KA TIMES UMUM TIMES PA;Lo;0;L;;;;;N;;;;; 1218B;CUNEIFORM SIGN KA TIMES USH;Lo;0;L;;;;;N;;;;; 1218C;CUNEIFORM SIGN KA TIMES ZI;Lo;0;L;;;;;N;;;;; 1218D;CUNEIFORM SIGN KA2;Lo;0;L;;;;;N;;;;; 1218E;CUNEIFORM SIGN KA2 CROSSING KA2;Lo;0;L;;;;;N;;;;; 1218F;CUNEIFORM SIGN KAB;Lo;0;L;;;;;N;;;;; 12190;CUNEIFORM SIGN KAD2;Lo;0;L;;;;;N;;;;; 12191;CUNEIFORM SIGN KAD3;Lo;0;L;;;;;N;;;;; 12192;CUNEIFORM SIGN KAD4;Lo;0;L;;;;;N;;;;; 12193;CUNEIFORM SIGN KAD5;Lo;0;L;;;;;N;;;;; 12194;CUNEIFORM SIGN KAD5 OVER KAD5;Lo;0;L;;;;;N;;;;; 12195;CUNEIFORM SIGN KAK;Lo;0;L;;;;;N;;;;; 12196;CUNEIFORM SIGN KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 12197;CUNEIFORM SIGN KAL;Lo;0;L;;;;;N;;;;; 12198;CUNEIFORM SIGN KAL TIMES BAD;Lo;0;L;;;;;N;;;;; 12199;CUNEIFORM SIGN KAL CROSSING KAL;Lo;0;L;;;;;N;;;;; 1219A;CUNEIFORM SIGN KAM2;Lo;0;L;;;;;N;;;;; 1219B;CUNEIFORM SIGN KAM4;Lo;0;L;;;;;N;;;;; 1219C;CUNEIFORM SIGN KASKAL;Lo;0;L;;;;;N;;;;; 1219D;CUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;; 1219E;CUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;; 1219F;CUNEIFORM SIGN KESH2;Lo;0;L;;;;;N;;;;; 121A0;CUNEIFORM SIGN KI;Lo;0;L;;;;;N;;;;; 121A1;CUNEIFORM SIGN KI TIMES BAD;Lo;0;L;;;;;N;;;;; 121A2;CUNEIFORM SIGN KI TIMES U;Lo;0;L;;;;;N;;;;; 121A3;CUNEIFORM SIGN KI TIMES UD;Lo;0;L;;;;;N;;;;; 121A4;CUNEIFORM SIGN KID;Lo;0;L;;;;;N;;;;; 121A5;CUNEIFORM SIGN KIN;Lo;0;L;;;;;N;;;;; 121A6;CUNEIFORM SIGN KISAL;Lo;0;L;;;;;N;;;;; 121A7;CUNEIFORM SIGN KISH;Lo;0;L;;;;;N;;;;; 121A8;CUNEIFORM SIGN KISIM5;Lo;0;L;;;;;N;;;;; 121A9;CUNEIFORM SIGN KISIM5 OVER KISIM5;Lo;0;L;;;;;N;;;;; 121AA;CUNEIFORM SIGN KU;Lo;0;L;;;;;N;;;;; 121AB;CUNEIFORM SIGN KU OVER HI TIMES ASH2 KU OVER HI TIMES ASH2;Lo;0;L;;;;;N;;;;; 121AC;CUNEIFORM SIGN KU3;Lo;0;L;;;;;N;;;;; 121AD;CUNEIFORM SIGN KU4;Lo;0;L;;;;;N;;;;; 121AE;CUNEIFORM SIGN KU4 VARIANT FORM;Lo;0;L;;;;;N;;;;; 121AF;CUNEIFORM SIGN KU7;Lo;0;L;;;;;N;;;;; 121B0;CUNEIFORM SIGN KUL;Lo;0;L;;;;;N;;;;; 121B1;CUNEIFORM SIGN KUL GUNU;Lo;0;L;;;;;N;;;;; 121B2;CUNEIFORM SIGN KUN;Lo;0;L;;;;;N;;;;; 121B3;CUNEIFORM SIGN KUR;Lo;0;L;;;;;N;;;;; 121B4;CUNEIFORM SIGN KUR OPPOSING KUR;Lo;0;L;;;;;N;;;;; 121B5;CUNEIFORM SIGN KUSHU2;Lo;0;L;;;;;N;;;;; 121B6;CUNEIFORM SIGN KWU318;Lo;0;L;;;;;N;;;;; 121B7;CUNEIFORM SIGN LA;Lo;0;L;;;;;N;;;;; 121B8;CUNEIFORM SIGN LAGAB;Lo;0;L;;;;;N;;;;; 121B9;CUNEIFORM SIGN LAGAB TIMES A;Lo;0;L;;;;;N;;;;; 121BA;CUNEIFORM SIGN LAGAB TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;; 121BB;CUNEIFORM SIGN LAGAB TIMES A PLUS GAR;Lo;0;L;;;;;N;;;;; 121BC;CUNEIFORM SIGN LAGAB TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;; 121BD;CUNEIFORM SIGN LAGAB TIMES AL;Lo;0;L;;;;;N;;;;; 121BE;CUNEIFORM SIGN LAGAB TIMES AN;Lo;0;L;;;;;N;;;;; 121BF;CUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENU;Lo;0;L;;;;;N;;;;; 121C0;CUNEIFORM SIGN LAGAB TIMES BAD;Lo;0;L;;;;;N;;;;; 121C1;CUNEIFORM SIGN LAGAB TIMES BI;Lo;0;L;;;;;N;;;;; 121C2;CUNEIFORM SIGN LAGAB TIMES DAR;Lo;0;L;;;;;N;;;;; 121C3;CUNEIFORM SIGN LAGAB TIMES EN;Lo;0;L;;;;;N;;;;; 121C4;CUNEIFORM SIGN LAGAB TIMES GA;Lo;0;L;;;;;N;;;;; 121C5;CUNEIFORM SIGN LAGAB TIMES GAR;Lo;0;L;;;;;N;;;;; 121C6;CUNEIFORM SIGN LAGAB TIMES GUD;Lo;0;L;;;;;N;;;;; 121C7;CUNEIFORM SIGN LAGAB TIMES GUD PLUS GUD;Lo;0;L;;;;;N;;;;; 121C8;CUNEIFORM SIGN LAGAB TIMES HA;Lo;0;L;;;;;N;;;;; 121C9;CUNEIFORM SIGN LAGAB TIMES HAL;Lo;0;L;;;;;N;;;;; 121CA;CUNEIFORM SIGN LAGAB TIMES HI TIMES NUN;Lo;0;L;;;;;N;;;;; 121CB;CUNEIFORM SIGN LAGAB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 121CC;CUNEIFORM SIGN LAGAB TIMES IM;Lo;0;L;;;;;N;;;;; 121CD;CUNEIFORM SIGN LAGAB TIMES IM PLUS HA;Lo;0;L;;;;;N;;;;; 121CE;CUNEIFORM SIGN LAGAB TIMES IM PLUS LU;Lo;0;L;;;;;N;;;;; 121CF;CUNEIFORM SIGN LAGAB TIMES KI;Lo;0;L;;;;;N;;;;; 121D0;CUNEIFORM SIGN LAGAB TIMES KIN;Lo;0;L;;;;;N;;;;; 121D1;CUNEIFORM SIGN LAGAB TIMES KU3;Lo;0;L;;;;;N;;;;; 121D2;CUNEIFORM SIGN LAGAB TIMES KUL;Lo;0;L;;;;;N;;;;; 121D3;CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS A;Lo;0;L;;;;;N;;;;; 121D4;CUNEIFORM SIGN LAGAB TIMES LAGAB;Lo;0;L;;;;;N;;;;; 121D5;CUNEIFORM SIGN LAGAB TIMES LISH;Lo;0;L;;;;;N;;;;; 121D6;CUNEIFORM SIGN LAGAB TIMES LU;Lo;0;L;;;;;N;;;;; 121D7;CUNEIFORM SIGN LAGAB TIMES LUL;Lo;0;L;;;;;N;;;;; 121D8;CUNEIFORM SIGN LAGAB TIMES ME;Lo;0;L;;;;;N;;;;; 121D9;CUNEIFORM SIGN LAGAB TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; 121DA;CUNEIFORM SIGN LAGAB TIMES MUSH;Lo;0;L;;;;;N;;;;; 121DB;CUNEIFORM SIGN LAGAB TIMES NE;Lo;0;L;;;;;N;;;;; 121DC;CUNEIFORM SIGN LAGAB TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;; 121DD;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH PLUS ERIN2;Lo;0;L;;;;;N;;;;; 121DE;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU;Lo;0;L;;;;;N;;;;; 121DF;CUNEIFORM SIGN LAGAB TIMES SHU2;Lo;0;L;;;;;N;;;;; 121E0;CUNEIFORM SIGN LAGAB TIMES SHU2 PLUS SHU2;Lo;0;L;;;;;N;;;;; 121E1;CUNEIFORM SIGN LAGAB TIMES SUM;Lo;0;L;;;;;N;;;;; 121E2;CUNEIFORM SIGN LAGAB TIMES TAG;Lo;0;L;;;;;N;;;;; 121E3;CUNEIFORM SIGN LAGAB TIMES TAK4;Lo;0;L;;;;;N;;;;; 121E4;CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NA;Lo;0;L;;;;;N;;;;; 121E5;CUNEIFORM SIGN LAGAB TIMES U;Lo;0;L;;;;;N;;;;; 121E6;CUNEIFORM SIGN LAGAB TIMES U PLUS A;Lo;0;L;;;;;N;;;;; 121E7;CUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;; 121E8;CUNEIFORM SIGN LAGAB TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;; 121E9;CUNEIFORM SIGN LAGAB TIMES UD;Lo;0;L;;;;;N;;;;; 121EA;CUNEIFORM SIGN LAGAB TIMES USH;Lo;0;L;;;;;N;;;;; 121EB;CUNEIFORM SIGN LAGAB SQUARED;Lo;0;L;;;;;N;;;;; 121EC;CUNEIFORM SIGN LAGAR;Lo;0;L;;;;;N;;;;; 121ED;CUNEIFORM SIGN LAGAR TIMES SHE;Lo;0;L;;;;;N;;;;; 121EE;CUNEIFORM SIGN LAGAR TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;; 121EF;CUNEIFORM SIGN LAGAR GUNU;Lo;0;L;;;;;N;;;;; 121F0;CUNEIFORM SIGN LAGAR GUNU OVER LAGAR GUNU SHE;Lo;0;L;;;;;N;;;;; 121F1;CUNEIFORM SIGN LAHSHU;Lo;0;L;;;;;N;;;;; 121F2;CUNEIFORM SIGN LAL;Lo;0;L;;;;;N;;;;; 121F3;CUNEIFORM SIGN LAL TIMES LAL;Lo;0;L;;;;;N;;;;; 121F4;CUNEIFORM SIGN LAM;Lo;0;L;;;;;N;;;;; 121F5;CUNEIFORM SIGN LAM TIMES KUR;Lo;0;L;;;;;N;;;;; 121F6;CUNEIFORM SIGN LAM TIMES KUR PLUS RU;Lo;0;L;;;;;N;;;;; 121F7;CUNEIFORM SIGN LI;Lo;0;L;;;;;N;;;;; 121F8;CUNEIFORM SIGN LIL;Lo;0;L;;;;;N;;;;; 121F9;CUNEIFORM SIGN LIMMU2;Lo;0;L;;;;;N;;;;; 121FA;CUNEIFORM SIGN LISH;Lo;0;L;;;;;N;;;;; 121FB;CUNEIFORM SIGN LU;Lo;0;L;;;;;N;;;;; 121FC;CUNEIFORM SIGN LU TIMES BAD;Lo;0;L;;;;;N;;;;; 121FD;CUNEIFORM SIGN LU2;Lo;0;L;;;;;N;;;;; 121FE;CUNEIFORM SIGN LU2 TIMES AL;Lo;0;L;;;;;N;;;;; 121FF;CUNEIFORM SIGN LU2 TIMES BAD;Lo;0;L;;;;;N;;;;; 12200;CUNEIFORM SIGN LU2 TIMES ESH2;Lo;0;L;;;;;N;;;;; 12201;CUNEIFORM SIGN LU2 TIMES ESH2 TENU;Lo;0;L;;;;;N;;;;; 12202;CUNEIFORM SIGN LU2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 12203;CUNEIFORM SIGN LU2 TIMES HI TIMES BAD;Lo;0;L;;;;;N;;;;; 12204;CUNEIFORM SIGN LU2 TIMES IM;Lo;0;L;;;;;N;;;;; 12205;CUNEIFORM SIGN LU2 TIMES KAD2;Lo;0;L;;;;;N;;;;; 12206;CUNEIFORM SIGN LU2 TIMES KAD3;Lo;0;L;;;;;N;;;;; 12207;CUNEIFORM SIGN LU2 TIMES KAD3 PLUS ASH;Lo;0;L;;;;;N;;;;; 12208;CUNEIFORM SIGN LU2 TIMES KI;Lo;0;L;;;;;N;;;;; 12209;CUNEIFORM SIGN LU2 TIMES LA PLUS ASH;Lo;0;L;;;;;N;;;;; 1220A;CUNEIFORM SIGN LU2 TIMES LAGAB;Lo;0;L;;;;;N;;;;; 1220B;CUNEIFORM SIGN LU2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; 1220C;CUNEIFORM SIGN LU2 TIMES NE;Lo;0;L;;;;;N;;;;; 1220D;CUNEIFORM SIGN LU2 TIMES NU;Lo;0;L;;;;;N;;;;; 1220E;CUNEIFORM SIGN LU2 TIMES SI PLUS ASH;Lo;0;L;;;;;N;;;;; 1220F;CUNEIFORM SIGN LU2 TIMES SIK2 PLUS BU;Lo;0;L;;;;;N;;;;; 12210;CUNEIFORM SIGN LU2 TIMES TUG2;Lo;0;L;;;;;N;;;;; 12211;CUNEIFORM SIGN LU2 TENU;Lo;0;L;;;;;N;;;;; 12212;CUNEIFORM SIGN LU2 CROSSING LU2;Lo;0;L;;;;;N;;;;; 12213;CUNEIFORM SIGN LU2 OPPOSING LU2;Lo;0;L;;;;;N;;;;; 12214;CUNEIFORM SIGN LU2 SQUARED;Lo;0;L;;;;;N;;;;; 12215;CUNEIFORM SIGN LU2 SHESHIG;Lo;0;L;;;;;N;;;;; 12216;CUNEIFORM SIGN LU3;Lo;0;L;;;;;N;;;;; 12217;CUNEIFORM SIGN LUGAL;Lo;0;L;;;;;N;;;;; 12218;CUNEIFORM SIGN LUGAL OVER LUGAL;Lo;0;L;;;;;N;;;;; 12219;CUNEIFORM SIGN LUGAL OPPOSING LUGAL;Lo;0;L;;;;;N;;;;; 1221A;CUNEIFORM SIGN LUGAL SHESHIG;Lo;0;L;;;;;N;;;;; 1221B;CUNEIFORM SIGN LUH;Lo;0;L;;;;;N;;;;; 1221C;CUNEIFORM SIGN LUL;Lo;0;L;;;;;N;;;;; 1221D;CUNEIFORM SIGN LUM;Lo;0;L;;;;;N;;;;; 1221E;CUNEIFORM SIGN LUM OVER LUM;Lo;0;L;;;;;N;;;;; 1221F;CUNEIFORM SIGN LUM OVER LUM GAR OVER GAR;Lo;0;L;;;;;N;;;;; 12220;CUNEIFORM SIGN MA;Lo;0;L;;;;;N;;;;; 12221;CUNEIFORM SIGN MA TIMES TAK4;Lo;0;L;;;;;N;;;;; 12222;CUNEIFORM SIGN MA GUNU;Lo;0;L;;;;;N;;;;; 12223;CUNEIFORM SIGN MA2;Lo;0;L;;;;;N;;;;; 12224;CUNEIFORM SIGN MAH;Lo;0;L;;;;;N;;;;; 12225;CUNEIFORM SIGN MAR;Lo;0;L;;;;;N;;;;; 12226;CUNEIFORM SIGN MASH;Lo;0;L;;;;;N;;;;; 12227;CUNEIFORM SIGN MASH2;Lo;0;L;;;;;N;;;;; 12228;CUNEIFORM SIGN ME;Lo;0;L;;;;;N;;;;; 12229;CUNEIFORM SIGN MES;Lo;0;L;;;;;N;;;;; 1222A;CUNEIFORM SIGN MI;Lo;0;L;;;;;N;;;;; 1222B;CUNEIFORM SIGN MIN;Lo;0;L;;;;;N;;;;; 1222C;CUNEIFORM SIGN MU;Lo;0;L;;;;;N;;;;; 1222D;CUNEIFORM SIGN MU OVER MU;Lo;0;L;;;;;N;;;;; 1222E;CUNEIFORM SIGN MUG;Lo;0;L;;;;;N;;;;; 1222F;CUNEIFORM SIGN MUG GUNU;Lo;0;L;;;;;N;;;;; 12230;CUNEIFORM SIGN MUNSUB;Lo;0;L;;;;;N;;;;; 12231;CUNEIFORM SIGN MURGU2;Lo;0;L;;;;;N;;;;; 12232;CUNEIFORM SIGN MUSH;Lo;0;L;;;;;N;;;;; 12233;CUNEIFORM SIGN MUSH TIMES A;Lo;0;L;;;;;N;;;;; 12234;CUNEIFORM SIGN MUSH TIMES KUR;Lo;0;L;;;;;N;;;;; 12235;CUNEIFORM SIGN MUSH TIMES ZA;Lo;0;L;;;;;N;;;;; 12236;CUNEIFORM SIGN MUSH OVER MUSH;Lo;0;L;;;;;N;;;;; 12237;CUNEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NA;Lo;0;L;;;;;N;;;;; 12238;CUNEIFORM SIGN MUSH CROSSING MUSH;Lo;0;L;;;;;N;;;;; 12239;CUNEIFORM SIGN MUSH3;Lo;0;L;;;;;N;;;;; 1223A;CUNEIFORM SIGN MUSH3 TIMES A;Lo;0;L;;;;;N;;;;; 1223B;CUNEIFORM SIGN MUSH3 TIMES A PLUS DI;Lo;0;L;;;;;N;;;;; 1223C;CUNEIFORM SIGN MUSH3 TIMES DI;Lo;0;L;;;;;N;;;;; 1223D;CUNEIFORM SIGN MUSH3 GUNU;Lo;0;L;;;;;N;;;;; 1223E;CUNEIFORM SIGN NA;Lo;0;L;;;;;N;;;;; 1223F;CUNEIFORM SIGN NA2;Lo;0;L;;;;;N;;;;; 12240;CUNEIFORM SIGN NAGA;Lo;0;L;;;;;N;;;;; 12241;CUNEIFORM SIGN NAGA INVERTED;Lo;0;L;;;;;N;;;;; 12242;CUNEIFORM SIGN NAGA TIMES SHU TENU;Lo;0;L;;;;;N;;;;; 12243;CUNEIFORM SIGN NAGA OPPOSING NAGA;Lo;0;L;;;;;N;;;;; 12244;CUNEIFORM SIGN NAGAR;Lo;0;L;;;;;N;;;;; 12245;CUNEIFORM SIGN NAM NUTILLU;Lo;0;L;;;;;N;;;;; 12246;CUNEIFORM SIGN NAM;Lo;0;L;;;;;N;;;;; 12247;CUNEIFORM SIGN NAM2;Lo;0;L;;;;;N;;;;; 12248;CUNEIFORM SIGN NE;Lo;0;L;;;;;N;;;;; 12249;CUNEIFORM SIGN NE TIMES A;Lo;0;L;;;;;N;;;;; 1224A;CUNEIFORM SIGN NE TIMES UD;Lo;0;L;;;;;N;;;;; 1224B;CUNEIFORM SIGN NE SHESHIG;Lo;0;L;;;;;N;;;;; 1224C;CUNEIFORM SIGN NI;Lo;0;L;;;;;N;;;;; 1224D;CUNEIFORM SIGN NI TIMES E;Lo;0;L;;;;;N;;;;; 1224E;CUNEIFORM SIGN NI2;Lo;0;L;;;;;N;;;;; 1224F;CUNEIFORM SIGN NIM;Lo;0;L;;;;;N;;;;; 12250;CUNEIFORM SIGN NIM TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 12251;CUNEIFORM SIGN NIM TIMES GAR PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;; 12252;CUNEIFORM SIGN NINDA2;Lo;0;L;;;;;N;;;;; 12253;CUNEIFORM SIGN NINDA2 TIMES AN;Lo;0;L;;;;;N;;;;; 12254;CUNEIFORM SIGN NINDA2 TIMES ASH;Lo;0;L;;;;;N;;;;; 12255;CUNEIFORM SIGN NINDA2 TIMES ASH PLUS ASH;Lo;0;L;;;;;N;;;;; 12256;CUNEIFORM SIGN NINDA2 TIMES GUD;Lo;0;L;;;;;N;;;;; 12257;CUNEIFORM SIGN NINDA2 TIMES ME PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;; 12258;CUNEIFORM SIGN NINDA2 TIMES NE;Lo;0;L;;;;;N;;;;; 12259;CUNEIFORM SIGN NINDA2 TIMES NUN;Lo;0;L;;;;;N;;;;; 1225A;CUNEIFORM SIGN NINDA2 TIMES SHE;Lo;0;L;;;;;N;;;;; 1225B;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS A AN;Lo;0;L;;;;;N;;;;; 1225C;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH;Lo;0;L;;;;;N;;;;; 1225D;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH PLUS ASH;Lo;0;L;;;;;N;;;;; 1225E;CUNEIFORM SIGN NINDA2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;; 1225F;CUNEIFORM SIGN NINDA2 TIMES USH;Lo;0;L;;;;;N;;;;; 12260;CUNEIFORM SIGN NISAG;Lo;0;L;;;;;N;;;;; 12261;CUNEIFORM SIGN NU;Lo;0;L;;;;;N;;;;; 12262;CUNEIFORM SIGN NU11;Lo;0;L;;;;;N;;;;; 12263;CUNEIFORM SIGN NUN;Lo;0;L;;;;;N;;;;; 12264;CUNEIFORM SIGN NUN LAGAR TIMES GAR;Lo;0;L;;;;;N;;;;; 12265;CUNEIFORM SIGN NUN LAGAR TIMES MASH;Lo;0;L;;;;;N;;;;; 12266;CUNEIFORM SIGN NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;; 12267;CUNEIFORM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;; 12268;CUNEIFORM SIGN NUN LAGAR TIMES USH;Lo;0;L;;;;;N;;;;; 12269;CUNEIFORM SIGN NUN TENU;Lo;0;L;;;;;N;;;;; 1226A;CUNEIFORM SIGN NUN OVER NUN;Lo;0;L;;;;;N;;;;; 1226B;CUNEIFORM SIGN NUN CROSSING NUN;Lo;0;L;;;;;N;;;;; 1226C;CUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGAR;Lo;0;L;;;;;N;;;;; 1226D;CUNEIFORM SIGN NUNUZ;Lo;0;L;;;;;N;;;;; 1226E;CUNEIFORM SIGN NUNUZ AB2 TIMES ASHGAB;Lo;0;L;;;;;N;;;;; 1226F;CUNEIFORM SIGN NUNUZ AB2 TIMES BI;Lo;0;L;;;;;N;;;;; 12270;CUNEIFORM SIGN NUNUZ AB2 TIMES DUG;Lo;0;L;;;;;N;;;;; 12271;CUNEIFORM SIGN NUNUZ AB2 TIMES GUD;Lo;0;L;;;;;N;;;;; 12272;CUNEIFORM SIGN NUNUZ AB2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 12273;CUNEIFORM SIGN NUNUZ AB2 TIMES KAD3;Lo;0;L;;;;;N;;;;; 12274;CUNEIFORM SIGN NUNUZ AB2 TIMES LA;Lo;0;L;;;;;N;;;;; 12275;CUNEIFORM SIGN NUNUZ AB2 TIMES NE;Lo;0;L;;;;;N;;;;; 12276;CUNEIFORM SIGN NUNUZ AB2 TIMES SILA3;Lo;0;L;;;;;N;;;;; 12277;CUNEIFORM SIGN NUNUZ AB2 TIMES U2;Lo;0;L;;;;;N;;;;; 12278;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;; 12279;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI U;Lo;0;L;;;;;N;;;;; 1227A;CUNEIFORM SIGN PA;Lo;0;L;;;;;N;;;;; 1227B;CUNEIFORM SIGN PAD;Lo;0;L;;;;;N;;;;; 1227C;CUNEIFORM SIGN PAN;Lo;0;L;;;;;N;;;;; 1227D;CUNEIFORM SIGN PAP;Lo;0;L;;;;;N;;;;; 1227E;CUNEIFORM SIGN PESH2;Lo;0;L;;;;;N;;;;; 1227F;CUNEIFORM SIGN PI;Lo;0;L;;;;;N;;;;; 12280;CUNEIFORM SIGN PI TIMES A;Lo;0;L;;;;;N;;;;; 12281;CUNEIFORM SIGN PI TIMES AB;Lo;0;L;;;;;N;;;;; 12282;CUNEIFORM SIGN PI TIMES BI;Lo;0;L;;;;;N;;;;; 12283;CUNEIFORM SIGN PI TIMES BU;Lo;0;L;;;;;N;;;;; 12284;CUNEIFORM SIGN PI TIMES E;Lo;0;L;;;;;N;;;;; 12285;CUNEIFORM SIGN PI TIMES I;Lo;0;L;;;;;N;;;;; 12286;CUNEIFORM SIGN PI TIMES IB;Lo;0;L;;;;;N;;;;; 12287;CUNEIFORM SIGN PI TIMES U;Lo;0;L;;;;;N;;;;; 12288;CUNEIFORM SIGN PI TIMES U2;Lo;0;L;;;;;N;;;;; 12289;CUNEIFORM SIGN PI CROSSING PI;Lo;0;L;;;;;N;;;;; 1228A;CUNEIFORM SIGN PIRIG;Lo;0;L;;;;;N;;;;; 1228B;CUNEIFORM SIGN PIRIG TIMES KAL;Lo;0;L;;;;;N;;;;; 1228C;CUNEIFORM SIGN PIRIG TIMES UD;Lo;0;L;;;;;N;;;;; 1228D;CUNEIFORM SIGN PIRIG TIMES ZA;Lo;0;L;;;;;N;;;;; 1228E;CUNEIFORM SIGN PIRIG OPPOSING PIRIG;Lo;0;L;;;;;N;;;;; 1228F;CUNEIFORM SIGN RA;Lo;0;L;;;;;N;;;;; 12290;CUNEIFORM SIGN RAB;Lo;0;L;;;;;N;;;;; 12291;CUNEIFORM SIGN RI;Lo;0;L;;;;;N;;;;; 12292;CUNEIFORM SIGN RU;Lo;0;L;;;;;N;;;;; 12293;CUNEIFORM SIGN SA;Lo;0;L;;;;;N;;;;; 12294;CUNEIFORM SIGN SAG NUTILLU;Lo;0;L;;;;;N;;;;; 12295;CUNEIFORM SIGN SAG;Lo;0;L;;;;;N;;;;; 12296;CUNEIFORM SIGN SAG TIMES A;Lo;0;L;;;;;N;;;;; 12297;CUNEIFORM SIGN SAG TIMES DU;Lo;0;L;;;;;N;;;;; 12298;CUNEIFORM SIGN SAG TIMES DUB;Lo;0;L;;;;;N;;;;; 12299;CUNEIFORM SIGN SAG TIMES HA;Lo;0;L;;;;;N;;;;; 1229A;CUNEIFORM SIGN SAG TIMES KAK;Lo;0;L;;;;;N;;;;; 1229B;CUNEIFORM SIGN SAG TIMES KUR;Lo;0;L;;;;;N;;;;; 1229C;CUNEIFORM SIGN SAG TIMES LUM;Lo;0;L;;;;;N;;;;; 1229D;CUNEIFORM SIGN SAG TIMES MI;Lo;0;L;;;;;N;;;;; 1229E;CUNEIFORM SIGN SAG TIMES NUN;Lo;0;L;;;;;N;;;;; 1229F;CUNEIFORM SIGN SAG TIMES SAL;Lo;0;L;;;;;N;;;;; 122A0;CUNEIFORM SIGN SAG TIMES SHID;Lo;0;L;;;;;N;;;;; 122A1;CUNEIFORM SIGN SAG TIMES TAB;Lo;0;L;;;;;N;;;;; 122A2;CUNEIFORM SIGN SAG TIMES U2;Lo;0;L;;;;;N;;;;; 122A3;CUNEIFORM SIGN SAG TIMES UB;Lo;0;L;;;;;N;;;;; 122A4;CUNEIFORM SIGN SAG TIMES UM;Lo;0;L;;;;;N;;;;; 122A5;CUNEIFORM SIGN SAG TIMES UR;Lo;0;L;;;;;N;;;;; 122A6;CUNEIFORM SIGN SAG TIMES USH;Lo;0;L;;;;;N;;;;; 122A7;CUNEIFORM SIGN SAG OVER SAG;Lo;0;L;;;;;N;;;;; 122A8;CUNEIFORM SIGN SAG GUNU;Lo;0;L;;;;;N;;;;; 122A9;CUNEIFORM SIGN SAL;Lo;0;L;;;;;N;;;;; 122AA;CUNEIFORM SIGN SAL LAGAB TIMES ASH2;Lo;0;L;;;;;N;;;;; 122AB;CUNEIFORM SIGN SANGA2;Lo;0;L;;;;;N;;;;; 122AC;CUNEIFORM SIGN SAR;Lo;0;L;;;;;N;;;;; 122AD;CUNEIFORM SIGN SHA;Lo;0;L;;;;;N;;;;; 122AE;CUNEIFORM SIGN SHA3;Lo;0;L;;;;;N;;;;; 122AF;CUNEIFORM SIGN SHA3 TIMES A;Lo;0;L;;;;;N;;;;; 122B0;CUNEIFORM SIGN SHA3 TIMES BAD;Lo;0;L;;;;;N;;;;; 122B1;CUNEIFORM SIGN SHA3 TIMES GISH;Lo;0;L;;;;;N;;;;; 122B2;CUNEIFORM SIGN SHA3 TIMES NE;Lo;0;L;;;;;N;;;;; 122B3;CUNEIFORM SIGN SHA3 TIMES SHU2;Lo;0;L;;;;;N;;;;; 122B4;CUNEIFORM SIGN SHA3 TIMES TUR;Lo;0;L;;;;;N;;;;; 122B5;CUNEIFORM SIGN SHA3 TIMES U;Lo;0;L;;;;;N;;;;; 122B6;CUNEIFORM SIGN SHA3 TIMES U PLUS A;Lo;0;L;;;;;N;;;;; 122B7;CUNEIFORM SIGN SHA6;Lo;0;L;;;;;N;;;;; 122B8;CUNEIFORM SIGN SHAB6;Lo;0;L;;;;;N;;;;; 122B9;CUNEIFORM SIGN SHAR2;Lo;0;L;;;;;N;;;;; 122BA;CUNEIFORM SIGN SHE;Lo;0;L;;;;;N;;;;; 122BB;CUNEIFORM SIGN SHE HU;Lo;0;L;;;;;N;;;;; 122BC;CUNEIFORM SIGN SHE OVER SHE GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; 122BD;CUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GAR;Lo;0;L;;;;;N;;;;; 122BE;CUNEIFORM SIGN SHEG9;Lo;0;L;;;;;N;;;;; 122BF;CUNEIFORM SIGN SHEN;Lo;0;L;;;;;N;;;;; 122C0;CUNEIFORM SIGN SHESH;Lo;0;L;;;;;N;;;;; 122C1;CUNEIFORM SIGN SHESH2;Lo;0;L;;;;;N;;;;; 122C2;CUNEIFORM SIGN SHESHLAM;Lo;0;L;;;;;N;;;;; 122C3;CUNEIFORM SIGN SHID;Lo;0;L;;;;;N;;;;; 122C4;CUNEIFORM SIGN SHID TIMES A;Lo;0;L;;;;;N;;;;; 122C5;CUNEIFORM SIGN SHID TIMES IM;Lo;0;L;;;;;N;;;;; 122C6;CUNEIFORM SIGN SHIM;Lo;0;L;;;;;N;;;;; 122C7;CUNEIFORM SIGN SHIM TIMES A;Lo;0;L;;;;;N;;;;; 122C8;CUNEIFORM SIGN SHIM TIMES BAL;Lo;0;L;;;;;N;;;;; 122C9;CUNEIFORM SIGN SHIM TIMES BULUG;Lo;0;L;;;;;N;;;;; 122CA;CUNEIFORM SIGN SHIM TIMES DIN;Lo;0;L;;;;;N;;;;; 122CB;CUNEIFORM SIGN SHIM TIMES GAR;Lo;0;L;;;;;N;;;;; 122CC;CUNEIFORM SIGN SHIM TIMES IGI;Lo;0;L;;;;;N;;;;; 122CD;CUNEIFORM SIGN SHIM TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 122CE;CUNEIFORM SIGN SHIM TIMES KUSHU2;Lo;0;L;;;;;N;;;;; 122CF;CUNEIFORM SIGN SHIM TIMES LUL;Lo;0;L;;;;;N;;;;; 122D0;CUNEIFORM SIGN SHIM TIMES MUG;Lo;0;L;;;;;N;;;;; 122D1;CUNEIFORM SIGN SHIM TIMES SAL;Lo;0;L;;;;;N;;;;; 122D2;CUNEIFORM SIGN SHINIG;Lo;0;L;;;;;N;;;;; 122D3;CUNEIFORM SIGN SHIR;Lo;0;L;;;;;N;;;;; 122D4;CUNEIFORM SIGN SHIR TENU;Lo;0;L;;;;;N;;;;; 122D5;CUNEIFORM SIGN SHIR OVER SHIR BUR OVER BUR;Lo;0;L;;;;;N;;;;; 122D6;CUNEIFORM SIGN SHITA;Lo;0;L;;;;;N;;;;; 122D7;CUNEIFORM SIGN SHU;Lo;0;L;;;;;N;;;;; 122D8;CUNEIFORM SIGN SHU OVER INVERTED SHU;Lo;0;L;;;;;N;;;;; 122D9;CUNEIFORM SIGN SHU2;Lo;0;L;;;;;N;;;;; 122DA;CUNEIFORM SIGN SHUBUR;Lo;0;L;;;;;N;;;;; 122DB;CUNEIFORM SIGN SI;Lo;0;L;;;;;N;;;;; 122DC;CUNEIFORM SIGN SI GUNU;Lo;0;L;;;;;N;;;;; 122DD;CUNEIFORM SIGN SIG;Lo;0;L;;;;;N;;;;; 122DE;CUNEIFORM SIGN SIG4;Lo;0;L;;;;;N;;;;; 122DF;CUNEIFORM SIGN SIG4 OVER SIG4 SHU2;Lo;0;L;;;;;N;;;;; 122E0;CUNEIFORM SIGN SIK2;Lo;0;L;;;;;N;;;;; 122E1;CUNEIFORM SIGN SILA3;Lo;0;L;;;;;N;;;;; 122E2;CUNEIFORM SIGN SU;Lo;0;L;;;;;N;;;;; 122E3;CUNEIFORM SIGN SU OVER SU;Lo;0;L;;;;;N;;;;; 122E4;CUNEIFORM SIGN SUD;Lo;0;L;;;;;N;;;;; 122E5;CUNEIFORM SIGN SUD2;Lo;0;L;;;;;N;;;;; 122E6;CUNEIFORM SIGN SUHUR;Lo;0;L;;;;;N;;;;; 122E7;CUNEIFORM SIGN SUM;Lo;0;L;;;;;N;;;;; 122E8;CUNEIFORM SIGN SUMASH;Lo;0;L;;;;;N;;;;; 122E9;CUNEIFORM SIGN SUR;Lo;0;L;;;;;N;;;;; 122EA;CUNEIFORM SIGN SUR9;Lo;0;L;;;;;N;;;;; 122EB;CUNEIFORM SIGN TA;Lo;0;L;;;;;N;;;;; 122EC;CUNEIFORM SIGN TA ASTERISK;Lo;0;L;;;;;N;;;;; 122ED;CUNEIFORM SIGN TA TIMES HI;Lo;0;L;;;;;N;;;;; 122EE;CUNEIFORM SIGN TA TIMES MI;Lo;0;L;;;;;N;;;;; 122EF;CUNEIFORM SIGN TA GUNU;Lo;0;L;;;;;N;;;;; 122F0;CUNEIFORM SIGN TAB;Lo;0;L;;;;;N;;;;; 122F1;CUNEIFORM SIGN TAB OVER TAB NI OVER NI DISH OVER DISH;Lo;0;L;;;;;N;;;;; 122F2;CUNEIFORM SIGN TAB SQUARED;Lo;0;L;;;;;N;;;;; 122F3;CUNEIFORM SIGN TAG;Lo;0;L;;;;;N;;;;; 122F4;CUNEIFORM SIGN TAG TIMES BI;Lo;0;L;;;;;N;;;;; 122F5;CUNEIFORM SIGN TAG TIMES GUD;Lo;0;L;;;;;N;;;;; 122F6;CUNEIFORM SIGN TAG TIMES SHE;Lo;0;L;;;;;N;;;;; 122F7;CUNEIFORM SIGN TAG TIMES SHU;Lo;0;L;;;;;N;;;;; 122F8;CUNEIFORM SIGN TAG TIMES TUG2;Lo;0;L;;;;;N;;;;; 122F9;CUNEIFORM SIGN TAG TIMES UD;Lo;0;L;;;;;N;;;;; 122FA;CUNEIFORM SIGN TAK4;Lo;0;L;;;;;N;;;;; 122FB;CUNEIFORM SIGN TAR;Lo;0;L;;;;;N;;;;; 122FC;CUNEIFORM SIGN TE;Lo;0;L;;;;;N;;;;; 122FD;CUNEIFORM SIGN TE GUNU;Lo;0;L;;;;;N;;;;; 122FE;CUNEIFORM SIGN TI;Lo;0;L;;;;;N;;;;; 122FF;CUNEIFORM SIGN TI TENU;Lo;0;L;;;;;N;;;;; 12300;CUNEIFORM SIGN TIL;Lo;0;L;;;;;N;;;;; 12301;CUNEIFORM SIGN TIR;Lo;0;L;;;;;N;;;;; 12302;CUNEIFORM SIGN TIR TIMES TAK4;Lo;0;L;;;;;N;;;;; 12303;CUNEIFORM SIGN TIR OVER TIR;Lo;0;L;;;;;N;;;;; 12304;CUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; 12305;CUNEIFORM SIGN TU;Lo;0;L;;;;;N;;;;; 12306;CUNEIFORM SIGN TUG2;Lo;0;L;;;;;N;;;;; 12307;CUNEIFORM SIGN TUK;Lo;0;L;;;;;N;;;;; 12308;CUNEIFORM SIGN TUM;Lo;0;L;;;;;N;;;;; 12309;CUNEIFORM SIGN TUR;Lo;0;L;;;;;N;;;;; 1230A;CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA;Lo;0;L;;;;;N;;;;; 1230B;CUNEIFORM SIGN U;Lo;0;L;;;;;N;;;;; 1230C;CUNEIFORM SIGN U GUD;Lo;0;L;;;;;N;;;;; 1230D;CUNEIFORM SIGN U U U;Lo;0;L;;;;;N;;;;; 1230E;CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR;Lo;0;L;;;;;N;;;;; 1230F;CUNEIFORM SIGN U OVER U SUR OVER SUR;Lo;0;L;;;;;N;;;;; 12310;CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED;Lo;0;L;;;;;N;;;;; 12311;CUNEIFORM SIGN U2;Lo;0;L;;;;;N;;;;; 12312;CUNEIFORM SIGN UB;Lo;0;L;;;;;N;;;;; 12313;CUNEIFORM SIGN UD;Lo;0;L;;;;;N;;;;; 12314;CUNEIFORM SIGN UD KUSHU2;Lo;0;L;;;;;N;;;;; 12315;CUNEIFORM SIGN UD TIMES BAD;Lo;0;L;;;;;N;;;;; 12316;CUNEIFORM SIGN UD TIMES MI;Lo;0;L;;;;;N;;;;; 12317;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;; 12318;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U GUNU;Lo;0;L;;;;;N;;;;; 12319;CUNEIFORM SIGN UD GUNU;Lo;0;L;;;;;N;;;;; 1231A;CUNEIFORM SIGN UD SHESHIG;Lo;0;L;;;;;N;;;;; 1231B;CUNEIFORM SIGN UD SHESHIG TIMES BAD;Lo;0;L;;;;;N;;;;; 1231C;CUNEIFORM SIGN UDUG;Lo;0;L;;;;;N;;;;; 1231D;CUNEIFORM SIGN UM;Lo;0;L;;;;;N;;;;; 1231E;CUNEIFORM SIGN UM TIMES LAGAB;Lo;0;L;;;;;N;;;;; 1231F;CUNEIFORM SIGN UM TIMES ME PLUS DA;Lo;0;L;;;;;N;;;;; 12320;CUNEIFORM SIGN UM TIMES SHA3;Lo;0;L;;;;;N;;;;; 12321;CUNEIFORM SIGN UM TIMES U;Lo;0;L;;;;;N;;;;; 12322;CUNEIFORM SIGN UMBIN;Lo;0;L;;;;;N;;;;; 12323;CUNEIFORM SIGN UMUM;Lo;0;L;;;;;N;;;;; 12324;CUNEIFORM SIGN UMUM TIMES KASKAL;Lo;0;L;;;;;N;;;;; 12325;CUNEIFORM SIGN UMUM TIMES PA;Lo;0;L;;;;;N;;;;; 12326;CUNEIFORM SIGN UN;Lo;0;L;;;;;N;;;;; 12327;CUNEIFORM SIGN UN GUNU;Lo;0;L;;;;;N;;;;; 12328;CUNEIFORM SIGN UR;Lo;0;L;;;;;N;;;;; 12329;CUNEIFORM SIGN UR CROSSING UR;Lo;0;L;;;;;N;;;;; 1232A;CUNEIFORM SIGN UR SHESHIG;Lo;0;L;;;;;N;;;;; 1232B;CUNEIFORM SIGN UR2;Lo;0;L;;;;;N;;;;; 1232C;CUNEIFORM SIGN UR2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;; 1232D;CUNEIFORM SIGN UR2 TIMES A PLUS NA;Lo;0;L;;;;;N;;;;; 1232E;CUNEIFORM SIGN UR2 TIMES AL;Lo;0;L;;;;;N;;;;; 1232F;CUNEIFORM SIGN UR2 TIMES HA;Lo;0;L;;;;;N;;;;; 12330;CUNEIFORM SIGN UR2 TIMES NUN;Lo;0;L;;;;;N;;;;; 12331;CUNEIFORM SIGN UR2 TIMES U2;Lo;0;L;;;;;N;;;;; 12332;CUNEIFORM SIGN UR2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;; 12333;CUNEIFORM SIGN UR2 TIMES U2 PLUS BI;Lo;0;L;;;;;N;;;;; 12334;CUNEIFORM SIGN UR4;Lo;0;L;;;;;N;;;;; 12335;CUNEIFORM SIGN URI;Lo;0;L;;;;;N;;;;; 12336;CUNEIFORM SIGN URI3;Lo;0;L;;;;;N;;;;; 12337;CUNEIFORM SIGN URU;Lo;0;L;;;;;N;;;;; 12338;CUNEIFORM SIGN URU TIMES A;Lo;0;L;;;;;N;;;;; 12339;CUNEIFORM SIGN URU TIMES ASHGAB;Lo;0;L;;;;;N;;;;; 1233A;CUNEIFORM SIGN URU TIMES BAR;Lo;0;L;;;;;N;;;;; 1233B;CUNEIFORM SIGN URU TIMES DUN;Lo;0;L;;;;;N;;;;; 1233C;CUNEIFORM SIGN URU TIMES GA;Lo;0;L;;;;;N;;;;; 1233D;CUNEIFORM SIGN URU TIMES GAL;Lo;0;L;;;;;N;;;;; 1233E;CUNEIFORM SIGN URU TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 1233F;CUNEIFORM SIGN URU TIMES GAR;Lo;0;L;;;;;N;;;;; 12340;CUNEIFORM SIGN URU TIMES GU;Lo;0;L;;;;;N;;;;; 12341;CUNEIFORM SIGN URU TIMES HA;Lo;0;L;;;;;N;;;;; 12342;CUNEIFORM SIGN URU TIMES IGI;Lo;0;L;;;;;N;;;;; 12343;CUNEIFORM SIGN URU TIMES IM;Lo;0;L;;;;;N;;;;; 12344;CUNEIFORM SIGN URU TIMES ISH;Lo;0;L;;;;;N;;;;; 12345;CUNEIFORM SIGN URU TIMES KI;Lo;0;L;;;;;N;;;;; 12346;CUNEIFORM SIGN URU TIMES LUM;Lo;0;L;;;;;N;;;;; 12347;CUNEIFORM SIGN URU TIMES MIN;Lo;0;L;;;;;N;;;;; 12348;CUNEIFORM SIGN URU TIMES PA;Lo;0;L;;;;;N;;;;; 12349;CUNEIFORM SIGN URU TIMES SHE;Lo;0;L;;;;;N;;;;; 1234A;CUNEIFORM SIGN URU TIMES SIG4;Lo;0;L;;;;;N;;;;; 1234B;CUNEIFORM SIGN URU TIMES TU;Lo;0;L;;;;;N;;;;; 1234C;CUNEIFORM SIGN URU TIMES U PLUS GUD;Lo;0;L;;;;;N;;;;; 1234D;CUNEIFORM SIGN URU TIMES UD;Lo;0;L;;;;;N;;;;; 1234E;CUNEIFORM SIGN URU TIMES URUDA;Lo;0;L;;;;;N;;;;; 1234F;CUNEIFORM SIGN URUDA;Lo;0;L;;;;;N;;;;; 12350;CUNEIFORM SIGN URUDA TIMES U;Lo;0;L;;;;;N;;;;; 12351;CUNEIFORM SIGN USH;Lo;0;L;;;;;N;;;;; 12352;CUNEIFORM SIGN USH TIMES A;Lo;0;L;;;;;N;;;;; 12353;CUNEIFORM SIGN USH TIMES KU;Lo;0;L;;;;;N;;;;; 12354;CUNEIFORM SIGN USH TIMES KUR;Lo;0;L;;;;;N;;;;; 12355;CUNEIFORM SIGN USH TIMES TAK4;Lo;0;L;;;;;N;;;;; 12356;CUNEIFORM SIGN USHX;Lo;0;L;;;;;N;;;;; 12357;CUNEIFORM SIGN USH2;Lo;0;L;;;;;N;;;;; 12358;CUNEIFORM SIGN USHUMX;Lo;0;L;;;;;N;;;;; 12359;CUNEIFORM SIGN UTUKI;Lo;0;L;;;;;N;;;;; 1235A;CUNEIFORM SIGN UZ3;Lo;0;L;;;;;N;;;;; 1235B;CUNEIFORM SIGN UZ3 TIMES KASKAL;Lo;0;L;;;;;N;;;;; 1235C;CUNEIFORM SIGN UZU;Lo;0;L;;;;;N;;;;; 1235D;CUNEIFORM SIGN ZA;Lo;0;L;;;;;N;;;;; 1235E;CUNEIFORM SIGN ZA TENU;Lo;0;L;;;;;N;;;;; 1235F;CUNEIFORM SIGN ZA SQUARED TIMES KUR;Lo;0;L;;;;;N;;;;; 12360;CUNEIFORM SIGN ZAG;Lo;0;L;;;;;N;;;;; 12361;CUNEIFORM SIGN ZAMX;Lo;0;L;;;;;N;;;;; 12362;CUNEIFORM SIGN ZE2;Lo;0;L;;;;;N;;;;; 12363;CUNEIFORM SIGN ZI;Lo;0;L;;;;;N;;;;; 12364;CUNEIFORM SIGN ZI OVER ZI;Lo;0;L;;;;;N;;;;; 12365;CUNEIFORM SIGN ZI3;Lo;0;L;;;;;N;;;;; 12366;CUNEIFORM SIGN ZIB;Lo;0;L;;;;;N;;;;; 12367;CUNEIFORM SIGN ZIB KABA TENU;Lo;0;L;;;;;N;;;;; 12368;CUNEIFORM SIGN ZIG;Lo;0;L;;;;;N;;;;; 12369;CUNEIFORM SIGN ZIZ2;Lo;0;L;;;;;N;;;;; 1236A;CUNEIFORM SIGN ZU;Lo;0;L;;;;;N;;;;; 1236B;CUNEIFORM SIGN ZU5;Lo;0;L;;;;;N;;;;; 1236C;CUNEIFORM SIGN ZU5 TIMES A;Lo;0;L;;;;;N;;;;; 1236D;CUNEIFORM SIGN ZUBUR;Lo;0;L;;;;;N;;;;; 1236E;CUNEIFORM SIGN ZUM;Lo;0;L;;;;;N;;;;; 1236F;CUNEIFORM SIGN KAP ELAMITE;Lo;0;L;;;;;N;;;;; 12370;CUNEIFORM SIGN AB TIMES NUN;Lo;0;L;;;;;N;;;;; 12371;CUNEIFORM SIGN AB2 TIMES A;Lo;0;L;;;;;N;;;;; 12372;CUNEIFORM SIGN AMAR TIMES KUG;Lo;0;L;;;;;N;;;;; 12373;CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS MASH;Lo;0;L;;;;;N;;;;; 12374;CUNEIFORM SIGN DAG3;Lo;0;L;;;;;N;;;;; 12375;CUNEIFORM SIGN DISH PLUS SHU;Lo;0;L;;;;;N;;;;; 12376;CUNEIFORM SIGN DUB TIMES SHE;Lo;0;L;;;;;N;;;;; 12377;CUNEIFORM SIGN EZEN TIMES GUD;Lo;0;L;;;;;N;;;;; 12378;CUNEIFORM SIGN EZEN TIMES SHE;Lo;0;L;;;;;N;;;;; 12379;CUNEIFORM SIGN GA2 TIMES AN PLUS KAK PLUS A;Lo;0;L;;;;;N;;;;; 1237A;CUNEIFORM SIGN GA2 TIMES ASH2;Lo;0;L;;;;;N;;;;; 1237B;CUNEIFORM SIGN GE22;Lo;0;L;;;;;N;;;;; 1237C;CUNEIFORM SIGN GIG;Lo;0;L;;;;;N;;;;; 1237D;CUNEIFORM SIGN HUSH;Lo;0;L;;;;;N;;;;; 1237E;CUNEIFORM SIGN KA TIMES ANSHE;Lo;0;L;;;;;N;;;;; 1237F;CUNEIFORM SIGN KA TIMES ASH3;Lo;0;L;;;;;N;;;;; 12380;CUNEIFORM SIGN KA TIMES GISH;Lo;0;L;;;;;N;;;;; 12381;CUNEIFORM SIGN KA TIMES GUD;Lo;0;L;;;;;N;;;;; 12382;CUNEIFORM SIGN KA TIMES HI TIMES ASH2;Lo;0;L;;;;;N;;;;; 12383;CUNEIFORM SIGN KA TIMES LUM;Lo;0;L;;;;;N;;;;; 12384;CUNEIFORM SIGN KA TIMES PA;Lo;0;L;;;;;N;;;;; 12385;CUNEIFORM SIGN KA TIMES SHUL;Lo;0;L;;;;;N;;;;; 12386;CUNEIFORM SIGN KA TIMES TU;Lo;0;L;;;;;N;;;;; 12387;CUNEIFORM SIGN KA TIMES UR2;Lo;0;L;;;;;N;;;;; 12388;CUNEIFORM SIGN LAGAB TIMES GI;Lo;0;L;;;;;N;;;;; 12389;CUNEIFORM SIGN LU2 SHESHIG TIMES BAD;Lo;0;L;;;;;N;;;;; 1238A;CUNEIFORM SIGN LU2 TIMES ESH2 PLUS LAL;Lo;0;L;;;;;N;;;;; 1238B;CUNEIFORM SIGN LU2 TIMES SHU;Lo;0;L;;;;;N;;;;; 1238C;CUNEIFORM SIGN MESH;Lo;0;L;;;;;N;;;;; 1238D;CUNEIFORM SIGN MUSH3 TIMES ZA;Lo;0;L;;;;;N;;;;; 1238E;CUNEIFORM SIGN NA4;Lo;0;L;;;;;N;;;;; 1238F;CUNEIFORM SIGN NIN;Lo;0;L;;;;;N;;;;; 12390;CUNEIFORM SIGN NIN9;Lo;0;L;;;;;N;;;;; 12391;CUNEIFORM SIGN NINDA2 TIMES BAL;Lo;0;L;;;;;N;;;;; 12392;CUNEIFORM SIGN NINDA2 TIMES GI;Lo;0;L;;;;;N;;;;; 12393;CUNEIFORM SIGN NU11 ROTATED NINETY DEGREES;Lo;0;L;;;;;N;;;;; 12394;CUNEIFORM SIGN PESH2 ASTERISK;Lo;0;L;;;;;N;;;;; 12395;CUNEIFORM SIGN PIR2;Lo;0;L;;;;;N;;;;; 12396;CUNEIFORM SIGN SAG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 12397;CUNEIFORM SIGN TI2;Lo;0;L;;;;;N;;;;; 12398;CUNEIFORM SIGN UM TIMES ME;Lo;0;L;;;;;N;;;;; 12399;CUNEIFORM SIGN U U;Lo;0;L;;;;;N;;;;; 12400;CUNEIFORM NUMERIC SIGN TWO ASH;Nl;0;L;;;;2;N;;;;; 12401;CUNEIFORM NUMERIC SIGN THREE ASH;Nl;0;L;;;;3;N;;;;; 12402;CUNEIFORM NUMERIC SIGN FOUR ASH;Nl;0;L;;;;4;N;;;;; 12403;CUNEIFORM NUMERIC SIGN FIVE ASH;Nl;0;L;;;;5;N;;;;; 12404;CUNEIFORM NUMERIC SIGN SIX ASH;Nl;0;L;;;;6;N;;;;; 12405;CUNEIFORM NUMERIC SIGN SEVEN ASH;Nl;0;L;;;;7;N;;;;; 12406;CUNEIFORM NUMERIC SIGN EIGHT ASH;Nl;0;L;;;;8;N;;;;; 12407;CUNEIFORM NUMERIC SIGN NINE ASH;Nl;0;L;;;;9;N;;;;; 12408;CUNEIFORM NUMERIC SIGN THREE DISH;Nl;0;L;;;;3;N;;;;; 12409;CUNEIFORM NUMERIC SIGN FOUR DISH;Nl;0;L;;;;4;N;;;;; 1240A;CUNEIFORM NUMERIC SIGN FIVE DISH;Nl;0;L;;;;5;N;;;;; 1240B;CUNEIFORM NUMERIC SIGN SIX DISH;Nl;0;L;;;;6;N;;;;; 1240C;CUNEIFORM NUMERIC SIGN SEVEN DISH;Nl;0;L;;;;7;N;;;;; 1240D;CUNEIFORM NUMERIC SIGN EIGHT DISH;Nl;0;L;;;;8;N;;;;; 1240E;CUNEIFORM NUMERIC SIGN NINE DISH;Nl;0;L;;;;9;N;;;;; 1240F;CUNEIFORM NUMERIC SIGN FOUR U;Nl;0;L;;;;4;N;;;;; 12410;CUNEIFORM NUMERIC SIGN FIVE U;Nl;0;L;;;;5;N;;;;; 12411;CUNEIFORM NUMERIC SIGN SIX U;Nl;0;L;;;;6;N;;;;; 12412;CUNEIFORM NUMERIC SIGN SEVEN U;Nl;0;L;;;;7;N;;;;; 12413;CUNEIFORM NUMERIC SIGN EIGHT U;Nl;0;L;;;;8;N;;;;; 12414;CUNEIFORM NUMERIC SIGN NINE U;Nl;0;L;;;;9;N;;;;; 12415;CUNEIFORM NUMERIC SIGN ONE GESH2;Nl;0;L;;;;1;N;;;;; 12416;CUNEIFORM NUMERIC SIGN TWO GESH2;Nl;0;L;;;;2;N;;;;; 12417;CUNEIFORM NUMERIC SIGN THREE GESH2;Nl;0;L;;;;3;N;;;;; 12418;CUNEIFORM NUMERIC SIGN FOUR GESH2;Nl;0;L;;;;4;N;;;;; 12419;CUNEIFORM NUMERIC SIGN FIVE GESH2;Nl;0;L;;;;5;N;;;;; 1241A;CUNEIFORM NUMERIC SIGN SIX GESH2;Nl;0;L;;;;6;N;;;;; 1241B;CUNEIFORM NUMERIC SIGN SEVEN GESH2;Nl;0;L;;;;7;N;;;;; 1241C;CUNEIFORM NUMERIC SIGN EIGHT GESH2;Nl;0;L;;;;8;N;;;;; 1241D;CUNEIFORM NUMERIC SIGN NINE GESH2;Nl;0;L;;;;9;N;;;;; 1241E;CUNEIFORM NUMERIC SIGN ONE GESHU;Nl;0;L;;;;1;N;;;;; 1241F;CUNEIFORM NUMERIC SIGN TWO GESHU;Nl;0;L;;;;2;N;;;;; 12420;CUNEIFORM NUMERIC SIGN THREE GESHU;Nl;0;L;;;;3;N;;;;; 12421;CUNEIFORM NUMERIC SIGN FOUR GESHU;Nl;0;L;;;;4;N;;;;; 12422;CUNEIFORM NUMERIC SIGN FIVE GESHU;Nl;0;L;;;;5;N;;;;; 12423;CUNEIFORM NUMERIC SIGN TWO SHAR2;Nl;0;L;;;;2;N;;;;; 12424;CUNEIFORM NUMERIC SIGN THREE SHAR2;Nl;0;L;;;;3;N;;;;; 12425;CUNEIFORM NUMERIC SIGN THREE SHAR2 VARIANT FORM;Nl;0;L;;;;3;N;;;;; 12426;CUNEIFORM NUMERIC SIGN FOUR SHAR2;Nl;0;L;;;;4;N;;;;; 12427;CUNEIFORM NUMERIC SIGN FIVE SHAR2;Nl;0;L;;;;5;N;;;;; 12428;CUNEIFORM NUMERIC SIGN SIX SHAR2;Nl;0;L;;;;6;N;;;;; 12429;CUNEIFORM NUMERIC SIGN SEVEN SHAR2;Nl;0;L;;;;7;N;;;;; 1242A;CUNEIFORM NUMERIC SIGN EIGHT SHAR2;Nl;0;L;;;;8;N;;;;; 1242B;CUNEIFORM NUMERIC SIGN NINE SHAR2;Nl;0;L;;;;9;N;;;;; 1242C;CUNEIFORM NUMERIC SIGN ONE SHARU;Nl;0;L;;;;1;N;;;;; 1242D;CUNEIFORM NUMERIC SIGN TWO SHARU;Nl;0;L;;;;2;N;;;;; 1242E;CUNEIFORM NUMERIC SIGN THREE SHARU;Nl;0;L;;;;3;N;;;;; 1242F;CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM;Nl;0;L;;;;3;N;;;;; 12430;CUNEIFORM NUMERIC SIGN FOUR SHARU;Nl;0;L;;;;4;N;;;;; 12431;CUNEIFORM NUMERIC SIGN FIVE SHARU;Nl;0;L;;;;5;N;;;;; 12432;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS DISH;Nl;0;L;;;;216000;N;;;;; 12433;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS MIN;Nl;0;L;;;;432000;N;;;;; 12434;CUNEIFORM NUMERIC SIGN ONE BURU;Nl;0;L;;;;1;N;;;;; 12435;CUNEIFORM NUMERIC SIGN TWO BURU;Nl;0;L;;;;2;N;;;;; 12436;CUNEIFORM NUMERIC SIGN THREE BURU;Nl;0;L;;;;3;N;;;;; 12437;CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM;Nl;0;L;;;;3;N;;;;; 12438;CUNEIFORM NUMERIC SIGN FOUR BURU;Nl;0;L;;;;4;N;;;;; 12439;CUNEIFORM NUMERIC SIGN FIVE BURU;Nl;0;L;;;;5;N;;;;; 1243A;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16;Nl;0;L;;;;3;N;;;;; 1243B;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH21;Nl;0;L;;;;3;N;;;;; 1243C;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU;Nl;0;L;;;;4;N;;;;; 1243D;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU4;Nl;0;L;;;;4;N;;;;; 1243E;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU A;Nl;0;L;;;;4;N;;;;; 1243F;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B;Nl;0;L;;;;4;N;;;;; 12440;CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9;Nl;0;L;;;;6;N;;;;; 12441;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3;Nl;0;L;;;;7;N;;;;; 12442;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN A;Nl;0;L;;;;7;N;;;;; 12443;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B;Nl;0;L;;;;7;N;;;;; 12444;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU;Nl;0;L;;;;8;N;;;;; 12445;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3;Nl;0;L;;;;8;N;;;;; 12446;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU;Nl;0;L;;;;9;N;;;;; 12447;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU3;Nl;0;L;;;;9;N;;;;; 12448;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU4;Nl;0;L;;;;9;N;;;;; 12449;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A;Nl;0;L;;;;9;N;;;;; 1244A;CUNEIFORM NUMERIC SIGN TWO ASH TENU;Nl;0;L;;;;2;N;;;;; 1244B;CUNEIFORM NUMERIC SIGN THREE ASH TENU;Nl;0;L;;;;3;N;;;;; 1244C;CUNEIFORM NUMERIC SIGN FOUR ASH TENU;Nl;0;L;;;;4;N;;;;; 1244D;CUNEIFORM NUMERIC SIGN FIVE ASH TENU;Nl;0;L;;;;5;N;;;;; 1244E;CUNEIFORM NUMERIC SIGN SIX ASH TENU;Nl;0;L;;;;6;N;;;;; 1244F;CUNEIFORM NUMERIC SIGN ONE BAN2;Nl;0;L;;;;1;N;;;;; 12450;CUNEIFORM NUMERIC SIGN TWO BAN2;Nl;0;L;;;;2;N;;;;; 12451;CUNEIFORM NUMERIC SIGN THREE BAN2;Nl;0;L;;;;3;N;;;;; 12452;CUNEIFORM NUMERIC SIGN FOUR BAN2;Nl;0;L;;;;4;N;;;;; 12453;CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORM;Nl;0;L;;;;4;N;;;;; 12454;CUNEIFORM NUMERIC SIGN FIVE BAN2;Nl;0;L;;;;5;N;;;;; 12455;CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORM;Nl;0;L;;;;5;N;;;;; 12456;CUNEIFORM NUMERIC SIGN NIGIDAMIN;Nl;0;L;;;;2;N;;;;; 12457;CUNEIFORM NUMERIC SIGN NIGIDAESH;Nl;0;L;;;;3;N;;;;; 12458;CUNEIFORM NUMERIC SIGN ONE ESHE3;Nl;0;L;;;;1;N;;;;; 12459;CUNEIFORM NUMERIC SIGN TWO ESHE3;Nl;0;L;;;;2;N;;;;; 1245A;CUNEIFORM NUMERIC SIGN ONE THIRD DISH;Nl;0;L;;;;1/3;N;;;;; 1245B;CUNEIFORM NUMERIC SIGN TWO THIRDS DISH;Nl;0;L;;;;2/3;N;;;;; 1245C;CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH;Nl;0;L;;;;5/6;N;;;;; 1245D;CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A;Nl;0;L;;;;1/3;N;;;;; 1245E;CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A;Nl;0;L;;;;2/3;N;;;;; 1245F;CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH;Nl;0;L;;;;1/8;N;;;;; 12460;CUNEIFORM NUMERIC SIGN ONE QUARTER ASH;Nl;0;L;;;;1/4;N;;;;; 12461;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH;Nl;0;L;;;;1/6;N;;;;; 12462;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER;Nl;0;L;;;;1/4;N;;;;; 12463;CUNEIFORM NUMERIC SIGN ONE QUARTER GUR;Nl;0;L;;;;1/4;N;;;;; 12464;CUNEIFORM NUMERIC SIGN ONE HALF GUR;Nl;0;L;;;;1/2;N;;;;; 12465;CUNEIFORM NUMERIC SIGN ELAMITE ONE THIRD;Nl;0;L;;;;1/3;N;;;;; 12466;CUNEIFORM NUMERIC SIGN ELAMITE TWO THIRDS;Nl;0;L;;;;2/3;N;;;;; 12467;CUNEIFORM NUMERIC SIGN ELAMITE FORTY;Nl;0;L;;;;40;N;;;;; 12468;CUNEIFORM NUMERIC SIGN ELAMITE FIFTY;Nl;0;L;;;;50;N;;;;; 12469;CUNEIFORM NUMERIC SIGN FOUR U VARIANT FORM;Nl;0;L;;;;4;N;;;;; 1246A;CUNEIFORM NUMERIC SIGN FIVE U VARIANT FORM;Nl;0;L;;;;5;N;;;;; 1246B;CUNEIFORM NUMERIC SIGN SIX U VARIANT FORM;Nl;0;L;;;;6;N;;;;; 1246C;CUNEIFORM NUMERIC SIGN SEVEN U VARIANT FORM;Nl;0;L;;;;7;N;;;;; 1246D;CUNEIFORM NUMERIC SIGN EIGHT U VARIANT FORM;Nl;0;L;;;;8;N;;;;; 1246E;CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM;Nl;0;L;;;;9;N;;;;; 12470;CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER;Po;0;L;;;;;N;;;;; 12471;CUNEIFORM PUNCTUATION SIGN VERTICAL COLON;Po;0;L;;;;;N;;;;; 12472;CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON;Po;0;L;;;;;N;;;;; 12473;CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON;Po;0;L;;;;;N;;;;; 12474;CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON;Po;0;L;;;;;N;;;;; 12480;CUNEIFORM SIGN AB TIMES NUN TENU;Lo;0;L;;;;;N;;;;; 12481;CUNEIFORM SIGN AB TIMES SHU2;Lo;0;L;;;;;N;;;;; 12482;CUNEIFORM SIGN AD TIMES ESH2;Lo;0;L;;;;;N;;;;; 12483;CUNEIFORM SIGN BAD TIMES DISH TENU;Lo;0;L;;;;;N;;;;; 12484;CUNEIFORM SIGN BAHAR2 TIMES AB2;Lo;0;L;;;;;N;;;;; 12485;CUNEIFORM SIGN BAHAR2 TIMES NI;Lo;0;L;;;;;N;;;;; 12486;CUNEIFORM SIGN BAHAR2 TIMES ZA;Lo;0;L;;;;;N;;;;; 12487;CUNEIFORM SIGN BU OVER BU TIMES NA2;Lo;0;L;;;;;N;;;;; 12488;CUNEIFORM SIGN DA TIMES TAK4;Lo;0;L;;;;;N;;;;; 12489;CUNEIFORM SIGN DAG TIMES KUR;Lo;0;L;;;;;N;;;;; 1248A;CUNEIFORM SIGN DIM TIMES IGI;Lo;0;L;;;;;N;;;;; 1248B;CUNEIFORM SIGN DIM TIMES U U U;Lo;0;L;;;;;N;;;;; 1248C;CUNEIFORM SIGN DIM2 TIMES UD;Lo;0;L;;;;;N;;;;; 1248D;CUNEIFORM SIGN DUG TIMES ANSHE;Lo;0;L;;;;;N;;;;; 1248E;CUNEIFORM SIGN DUG TIMES ASH;Lo;0;L;;;;;N;;;;; 1248F;CUNEIFORM SIGN DUG TIMES ASH AT LEFT;Lo;0;L;;;;;N;;;;; 12490;CUNEIFORM SIGN DUG TIMES DIN;Lo;0;L;;;;;N;;;;; 12491;CUNEIFORM SIGN DUG TIMES DUN;Lo;0;L;;;;;N;;;;; 12492;CUNEIFORM SIGN DUG TIMES ERIN2;Lo;0;L;;;;;N;;;;; 12493;CUNEIFORM SIGN DUG TIMES GA;Lo;0;L;;;;;N;;;;; 12494;CUNEIFORM SIGN DUG TIMES GI;Lo;0;L;;;;;N;;;;; 12495;CUNEIFORM SIGN DUG TIMES GIR2 GUNU;Lo;0;L;;;;;N;;;;; 12496;CUNEIFORM SIGN DUG TIMES GISH;Lo;0;L;;;;;N;;;;; 12497;CUNEIFORM SIGN DUG TIMES HA;Lo;0;L;;;;;N;;;;; 12498;CUNEIFORM SIGN DUG TIMES HI;Lo;0;L;;;;;N;;;;; 12499;CUNEIFORM SIGN DUG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 1249A;CUNEIFORM SIGN DUG TIMES KASKAL;Lo;0;L;;;;;N;;;;; 1249B;CUNEIFORM SIGN DUG TIMES KUR;Lo;0;L;;;;;N;;;;; 1249C;CUNEIFORM SIGN DUG TIMES KUSHU2;Lo;0;L;;;;;N;;;;; 1249D;CUNEIFORM SIGN DUG TIMES KUSHU2 PLUS KASKAL;Lo;0;L;;;;;N;;;;; 1249E;CUNEIFORM SIGN DUG TIMES LAK-020;Lo;0;L;;;;;N;;;;; 1249F;CUNEIFORM SIGN DUG TIMES LAM;Lo;0;L;;;;;N;;;;; 124A0;CUNEIFORM SIGN DUG TIMES LAM TIMES KUR;Lo;0;L;;;;;N;;;;; 124A1;CUNEIFORM SIGN DUG TIMES LUH PLUS GISH;Lo;0;L;;;;;N;;;;; 124A2;CUNEIFORM SIGN DUG TIMES MASH;Lo;0;L;;;;;N;;;;; 124A3;CUNEIFORM SIGN DUG TIMES MES;Lo;0;L;;;;;N;;;;; 124A4;CUNEIFORM SIGN DUG TIMES MI;Lo;0;L;;;;;N;;;;; 124A5;CUNEIFORM SIGN DUG TIMES NI;Lo;0;L;;;;;N;;;;; 124A6;CUNEIFORM SIGN DUG TIMES PI;Lo;0;L;;;;;N;;;;; 124A7;CUNEIFORM SIGN DUG TIMES SHE;Lo;0;L;;;;;N;;;;; 124A8;CUNEIFORM SIGN DUG TIMES SI GUNU;Lo;0;L;;;;;N;;;;; 124A9;CUNEIFORM SIGN E2 TIMES KUR;Lo;0;L;;;;;N;;;;; 124AA;CUNEIFORM SIGN E2 TIMES PAP;Lo;0;L;;;;;N;;;;; 124AB;CUNEIFORM SIGN ERIN2 X;Lo;0;L;;;;;N;;;;; 124AC;CUNEIFORM SIGN ESH2 CROSSING ESH2;Lo;0;L;;;;;N;;;;; 124AD;CUNEIFORM SIGN EZEN SHESHIG TIMES ASH;Lo;0;L;;;;;N;;;;; 124AE;CUNEIFORM SIGN EZEN SHESHIG TIMES HI;Lo;0;L;;;;;N;;;;; 124AF;CUNEIFORM SIGN EZEN SHESHIG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 124B0;CUNEIFORM SIGN EZEN SHESHIG TIMES LA;Lo;0;L;;;;;N;;;;; 124B1;CUNEIFORM SIGN EZEN SHESHIG TIMES LAL;Lo;0;L;;;;;N;;;;; 124B2;CUNEIFORM SIGN EZEN SHESHIG TIMES ME;Lo;0;L;;;;;N;;;;; 124B3;CUNEIFORM SIGN EZEN SHESHIG TIMES MES;Lo;0;L;;;;;N;;;;; 124B4;CUNEIFORM SIGN EZEN SHESHIG TIMES SU;Lo;0;L;;;;;N;;;;; 124B5;CUNEIFORM SIGN EZEN TIMES SU;Lo;0;L;;;;;N;;;;; 124B6;CUNEIFORM SIGN GA2 TIMES BAHAR2;Lo;0;L;;;;;N;;;;; 124B7;CUNEIFORM SIGN GA2 TIMES DIM GUNU;Lo;0;L;;;;;N;;;;; 124B8;CUNEIFORM SIGN GA2 TIMES DUG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 124B9;CUNEIFORM SIGN GA2 TIMES DUG TIMES KASKAL;Lo;0;L;;;;;N;;;;; 124BA;CUNEIFORM SIGN GA2 TIMES EREN;Lo;0;L;;;;;N;;;;; 124BB;CUNEIFORM SIGN GA2 TIMES GA;Lo;0;L;;;;;N;;;;; 124BC;CUNEIFORM SIGN GA2 TIMES GAR PLUS DI;Lo;0;L;;;;;N;;;;; 124BD;CUNEIFORM SIGN GA2 TIMES GAR PLUS NE;Lo;0;L;;;;;N;;;;; 124BE;CUNEIFORM SIGN GA2 TIMES HA PLUS A;Lo;0;L;;;;;N;;;;; 124BF;CUNEIFORM SIGN GA2 TIMES KUSHU2 PLUS KASKAL;Lo;0;L;;;;;N;;;;; 124C0;CUNEIFORM SIGN GA2 TIMES LAM;Lo;0;L;;;;;N;;;;; 124C1;CUNEIFORM SIGN GA2 TIMES LAM TIMES KUR;Lo;0;L;;;;;N;;;;; 124C2;CUNEIFORM SIGN GA2 TIMES LUH;Lo;0;L;;;;;N;;;;; 124C3;CUNEIFORM SIGN GA2 TIMES MUSH;Lo;0;L;;;;;N;;;;; 124C4;CUNEIFORM SIGN GA2 TIMES NE;Lo;0;L;;;;;N;;;;; 124C5;CUNEIFORM SIGN GA2 TIMES NE PLUS E2;Lo;0;L;;;;;N;;;;; 124C6;CUNEIFORM SIGN GA2 TIMES NE PLUS GI;Lo;0;L;;;;;N;;;;; 124C7;CUNEIFORM SIGN GA2 TIMES SHIM;Lo;0;L;;;;;N;;;;; 124C8;CUNEIFORM SIGN GA2 TIMES ZIZ2;Lo;0;L;;;;;N;;;;; 124C9;CUNEIFORM SIGN GABA ROTATED NINETY DEGREES;Lo;0;L;;;;;N;;;;; 124CA;CUNEIFORM SIGN GESHTIN TIMES U;Lo;0;L;;;;;N;;;;; 124CB;CUNEIFORM SIGN GISH TIMES GISH CROSSING GISH;Lo;0;L;;;;;N;;;;; 124CC;CUNEIFORM SIGN GU2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 124CD;CUNEIFORM SIGN GUD PLUS GISH TIMES TAK4;Lo;0;L;;;;;N;;;;; 124CE;CUNEIFORM SIGN HA TENU GUNU;Lo;0;L;;;;;N;;;;; 124CF;CUNEIFORM SIGN HI TIMES ASH OVER HI TIMES ASH;Lo;0;L;;;;;N;;;;; 124D0;CUNEIFORM SIGN KA TIMES BU;Lo;0;L;;;;;N;;;;; 124D1;CUNEIFORM SIGN KA TIMES KA;Lo;0;L;;;;;N;;;;; 124D2;CUNEIFORM SIGN KA TIMES U U U;Lo;0;L;;;;;N;;;;; 124D3;CUNEIFORM SIGN KA TIMES UR;Lo;0;L;;;;;N;;;;; 124D4;CUNEIFORM SIGN LAGAB TIMES ZU OVER ZU;Lo;0;L;;;;;N;;;;; 124D5;CUNEIFORM SIGN LAK-003;Lo;0;L;;;;;N;;;;; 124D6;CUNEIFORM SIGN LAK-021;Lo;0;L;;;;;N;;;;; 124D7;CUNEIFORM SIGN LAK-025;Lo;0;L;;;;;N;;;;; 124D8;CUNEIFORM SIGN LAK-030;Lo;0;L;;;;;N;;;;; 124D9;CUNEIFORM SIGN LAK-050;Lo;0;L;;;;;N;;;;; 124DA;CUNEIFORM SIGN LAK-051;Lo;0;L;;;;;N;;;;; 124DB;CUNEIFORM SIGN LAK-062;Lo;0;L;;;;;N;;;;; 124DC;CUNEIFORM SIGN LAK-079 OVER LAK-079 GUNU;Lo;0;L;;;;;N;;;;; 124DD;CUNEIFORM SIGN LAK-080;Lo;0;L;;;;;N;;;;; 124DE;CUNEIFORM SIGN LAK-081 OVER LAK-081;Lo;0;L;;;;;N;;;;; 124DF;CUNEIFORM SIGN LAK-092;Lo;0;L;;;;;N;;;;; 124E0;CUNEIFORM SIGN LAK-130;Lo;0;L;;;;;N;;;;; 124E1;CUNEIFORM SIGN LAK-142;Lo;0;L;;;;;N;;;;; 124E2;CUNEIFORM SIGN LAK-210;Lo;0;L;;;;;N;;;;; 124E3;CUNEIFORM SIGN LAK-219;Lo;0;L;;;;;N;;;;; 124E4;CUNEIFORM SIGN LAK-220;Lo;0;L;;;;;N;;;;; 124E5;CUNEIFORM SIGN LAK-225;Lo;0;L;;;;;N;;;;; 124E6;CUNEIFORM SIGN LAK-228;Lo;0;L;;;;;N;;;;; 124E7;CUNEIFORM SIGN LAK-238;Lo;0;L;;;;;N;;;;; 124E8;CUNEIFORM SIGN LAK-265;Lo;0;L;;;;;N;;;;; 124E9;CUNEIFORM SIGN LAK-266;Lo;0;L;;;;;N;;;;; 124EA;CUNEIFORM SIGN LAK-343;Lo;0;L;;;;;N;;;;; 124EB;CUNEIFORM SIGN LAK-347;Lo;0;L;;;;;N;;;;; 124EC;CUNEIFORM SIGN LAK-348;Lo;0;L;;;;;N;;;;; 124ED;CUNEIFORM SIGN LAK-383;Lo;0;L;;;;;N;;;;; 124EE;CUNEIFORM SIGN LAK-384;Lo;0;L;;;;;N;;;;; 124EF;CUNEIFORM SIGN LAK-390;Lo;0;L;;;;;N;;;;; 124F0;CUNEIFORM SIGN LAK-441;Lo;0;L;;;;;N;;;;; 124F1;CUNEIFORM SIGN LAK-449;Lo;0;L;;;;;N;;;;; 124F2;CUNEIFORM SIGN LAK-449 TIMES GU;Lo;0;L;;;;;N;;;;; 124F3;CUNEIFORM SIGN LAK-449 TIMES IGI;Lo;0;L;;;;;N;;;;; 124F4;CUNEIFORM SIGN LAK-449 TIMES PAP PLUS LU3;Lo;0;L;;;;;N;;;;; 124F5;CUNEIFORM SIGN LAK-449 TIMES PAP PLUS PAP PLUS LU3;Lo;0;L;;;;;N;;;;; 124F6;CUNEIFORM SIGN LAK-449 TIMES U2 PLUS BA;Lo;0;L;;;;;N;;;;; 124F7;CUNEIFORM SIGN LAK-450;Lo;0;L;;;;;N;;;;; 124F8;CUNEIFORM SIGN LAK-457;Lo;0;L;;;;;N;;;;; 124F9;CUNEIFORM SIGN LAK-470;Lo;0;L;;;;;N;;;;; 124FA;CUNEIFORM SIGN LAK-483;Lo;0;L;;;;;N;;;;; 124FB;CUNEIFORM SIGN LAK-490;Lo;0;L;;;;;N;;;;; 124FC;CUNEIFORM SIGN LAK-492;Lo;0;L;;;;;N;;;;; 124FD;CUNEIFORM SIGN LAK-493;Lo;0;L;;;;;N;;;;; 124FE;CUNEIFORM SIGN LAK-495;Lo;0;L;;;;;N;;;;; 124FF;CUNEIFORM SIGN LAK-550;Lo;0;L;;;;;N;;;;; 12500;CUNEIFORM SIGN LAK-608;Lo;0;L;;;;;N;;;;; 12501;CUNEIFORM SIGN LAK-617;Lo;0;L;;;;;N;;;;; 12502;CUNEIFORM SIGN LAK-617 TIMES ASH;Lo;0;L;;;;;N;;;;; 12503;CUNEIFORM SIGN LAK-617 TIMES BAD;Lo;0;L;;;;;N;;;;; 12504;CUNEIFORM SIGN LAK-617 TIMES DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;; 12505;CUNEIFORM SIGN LAK-617 TIMES KU3;Lo;0;L;;;;;N;;;;; 12506;CUNEIFORM SIGN LAK-617 TIMES LA;Lo;0;L;;;;;N;;;;; 12507;CUNEIFORM SIGN LAK-617 TIMES TAR;Lo;0;L;;;;;N;;;;; 12508;CUNEIFORM SIGN LAK-617 TIMES TE;Lo;0;L;;;;;N;;;;; 12509;CUNEIFORM SIGN LAK-617 TIMES U2;Lo;0;L;;;;;N;;;;; 1250A;CUNEIFORM SIGN LAK-617 TIMES UD;Lo;0;L;;;;;N;;;;; 1250B;CUNEIFORM SIGN LAK-617 TIMES URUDA;Lo;0;L;;;;;N;;;;; 1250C;CUNEIFORM SIGN LAK-636;Lo;0;L;;;;;N;;;;; 1250D;CUNEIFORM SIGN LAK-648;Lo;0;L;;;;;N;;;;; 1250E;CUNEIFORM SIGN LAK-648 TIMES DUB;Lo;0;L;;;;;N;;;;; 1250F;CUNEIFORM SIGN LAK-648 TIMES GA;Lo;0;L;;;;;N;;;;; 12510;CUNEIFORM SIGN LAK-648 TIMES IGI;Lo;0;L;;;;;N;;;;; 12511;CUNEIFORM SIGN LAK-648 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 12512;CUNEIFORM SIGN LAK-648 TIMES NI;Lo;0;L;;;;;N;;;;; 12513;CUNEIFORM SIGN LAK-648 TIMES PAP PLUS PAP PLUS LU3;Lo;0;L;;;;;N;;;;; 12514;CUNEIFORM SIGN LAK-648 TIMES SHESH PLUS KI;Lo;0;L;;;;;N;;;;; 12515;CUNEIFORM SIGN LAK-648 TIMES UD;Lo;0;L;;;;;N;;;;; 12516;CUNEIFORM SIGN LAK-648 TIMES URUDA;Lo;0;L;;;;;N;;;;; 12517;CUNEIFORM SIGN LAK-724;Lo;0;L;;;;;N;;;;; 12518;CUNEIFORM SIGN LAK-749;Lo;0;L;;;;;N;;;;; 12519;CUNEIFORM SIGN LU2 GUNU TIMES ASH;Lo;0;L;;;;;N;;;;; 1251A;CUNEIFORM SIGN LU2 TIMES DISH;Lo;0;L;;;;;N;;;;; 1251B;CUNEIFORM SIGN LU2 TIMES HAL;Lo;0;L;;;;;N;;;;; 1251C;CUNEIFORM SIGN LU2 TIMES PAP;Lo;0;L;;;;;N;;;;; 1251D;CUNEIFORM SIGN LU2 TIMES PAP PLUS PAP PLUS LU3;Lo;0;L;;;;;N;;;;; 1251E;CUNEIFORM SIGN LU2 TIMES TAK4;Lo;0;L;;;;;N;;;;; 1251F;CUNEIFORM SIGN MI PLUS ZA7;Lo;0;L;;;;;N;;;;; 12520;CUNEIFORM SIGN MUSH OVER MUSH TIMES GA;Lo;0;L;;;;;N;;;;; 12521;CUNEIFORM SIGN MUSH OVER MUSH TIMES KAK;Lo;0;L;;;;;N;;;;; 12522;CUNEIFORM SIGN NINDA2 TIMES DIM GUNU;Lo;0;L;;;;;N;;;;; 12523;CUNEIFORM SIGN NINDA2 TIMES GISH;Lo;0;L;;;;;N;;;;; 12524;CUNEIFORM SIGN NINDA2 TIMES GUL;Lo;0;L;;;;;N;;;;; 12525;CUNEIFORM SIGN NINDA2 TIMES HI;Lo;0;L;;;;;N;;;;; 12526;CUNEIFORM SIGN NINDA2 TIMES KESH2;Lo;0;L;;;;;N;;;;; 12527;CUNEIFORM SIGN NINDA2 TIMES LAK-050;Lo;0;L;;;;;N;;;;; 12528;CUNEIFORM SIGN NINDA2 TIMES MASH;Lo;0;L;;;;;N;;;;; 12529;CUNEIFORM SIGN NINDA2 TIMES PAP PLUS PAP;Lo;0;L;;;;;N;;;;; 1252A;CUNEIFORM SIGN NINDA2 TIMES U;Lo;0;L;;;;;N;;;;; 1252B;CUNEIFORM SIGN NINDA2 TIMES U PLUS U;Lo;0;L;;;;;N;;;;; 1252C;CUNEIFORM SIGN NINDA2 TIMES URUDA;Lo;0;L;;;;;N;;;;; 1252D;CUNEIFORM SIGN SAG GUNU TIMES HA;Lo;0;L;;;;;N;;;;; 1252E;CUNEIFORM SIGN SAG TIMES EN;Lo;0;L;;;;;N;;;;; 1252F;CUNEIFORM SIGN SAG TIMES SHE AT LEFT;Lo;0;L;;;;;N;;;;; 12530;CUNEIFORM SIGN SAG TIMES TAK4;Lo;0;L;;;;;N;;;;; 12531;CUNEIFORM SIGN SHA6 TENU;Lo;0;L;;;;;N;;;;; 12532;CUNEIFORM SIGN SHE OVER SHE;Lo;0;L;;;;;N;;;;; 12533;CUNEIFORM SIGN SHE PLUS HUB2;Lo;0;L;;;;;N;;;;; 12534;CUNEIFORM SIGN SHE PLUS NAM2;Lo;0;L;;;;;N;;;;; 12535;CUNEIFORM SIGN SHE PLUS SAR;Lo;0;L;;;;;N;;;;; 12536;CUNEIFORM SIGN SHU2 PLUS DUG TIMES NI;Lo;0;L;;;;;N;;;;; 12537;CUNEIFORM SIGN SHU2 PLUS E2 TIMES AN;Lo;0;L;;;;;N;;;;; 12538;CUNEIFORM SIGN SI TIMES TAK4;Lo;0;L;;;;;N;;;;; 12539;CUNEIFORM SIGN TAK4 PLUS SAG;Lo;0;L;;;;;N;;;;; 1253A;CUNEIFORM SIGN TUM TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 1253B;CUNEIFORM SIGN TUM TIMES THREE DISH;Lo;0;L;;;;;N;;;;; 1253C;CUNEIFORM SIGN UR2 INVERTED;Lo;0;L;;;;;N;;;;; 1253D;CUNEIFORM SIGN UR2 TIMES UD;Lo;0;L;;;;;N;;;;; 1253E;CUNEIFORM SIGN URU TIMES DARA3;Lo;0;L;;;;;N;;;;; 1253F;CUNEIFORM SIGN URU TIMES LAK-668;Lo;0;L;;;;;N;;;;; 12540;CUNEIFORM SIGN URU TIMES LU3;Lo;0;L;;;;;N;;;;; 12541;CUNEIFORM SIGN ZA7;Lo;0;L;;;;;N;;;;; 12542;CUNEIFORM SIGN ZU OVER ZU PLUS SAR;Lo;0;L;;;;;N;;;;; 12543;CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU;Lo;0;L;;;;;N;;;;; 12F90;CYPRO-MINOAN SIGN CM001;Lo;0;L;;;;;N;;;;; 12F91;CYPRO-MINOAN SIGN CM002;Lo;0;L;;;;;N;;;;; 12F92;CYPRO-MINOAN SIGN CM004;Lo;0;L;;;;;N;;;;; 12F93;CYPRO-MINOAN SIGN CM005;Lo;0;L;;;;;N;;;;; 12F94;CYPRO-MINOAN SIGN CM006;Lo;0;L;;;;;N;;;;; 12F95;CYPRO-MINOAN SIGN CM007;Lo;0;L;;;;;N;;;;; 12F96;CYPRO-MINOAN SIGN CM008;Lo;0;L;;;;;N;;;;; 12F97;CYPRO-MINOAN SIGN CM009;Lo;0;L;;;;;N;;;;; 12F98;CYPRO-MINOAN SIGN CM010;Lo;0;L;;;;;N;;;;; 12F99;CYPRO-MINOAN SIGN CM011;Lo;0;L;;;;;N;;;;; 12F9A;CYPRO-MINOAN SIGN CM012;Lo;0;L;;;;;N;;;;; 12F9B;CYPRO-MINOAN SIGN CM012B;Lo;0;L;;;;;N;;;;; 12F9C;CYPRO-MINOAN SIGN CM013;Lo;0;L;;;;;N;;;;; 12F9D;CYPRO-MINOAN SIGN CM015;Lo;0;L;;;;;N;;;;; 12F9E;CYPRO-MINOAN SIGN CM017;Lo;0;L;;;;;N;;;;; 12F9F;CYPRO-MINOAN SIGN CM019;Lo;0;L;;;;;N;;;;; 12FA0;CYPRO-MINOAN SIGN CM021;Lo;0;L;;;;;N;;;;; 12FA1;CYPRO-MINOAN SIGN CM023;Lo;0;L;;;;;N;;;;; 12FA2;CYPRO-MINOAN SIGN CM024;Lo;0;L;;;;;N;;;;; 12FA3;CYPRO-MINOAN SIGN CM025;Lo;0;L;;;;;N;;;;; 12FA4;CYPRO-MINOAN SIGN CM026;Lo;0;L;;;;;N;;;;; 12FA5;CYPRO-MINOAN SIGN CM027;Lo;0;L;;;;;N;;;;; 12FA6;CYPRO-MINOAN SIGN CM028;Lo;0;L;;;;;N;;;;; 12FA7;CYPRO-MINOAN SIGN CM029;Lo;0;L;;;;;N;;;;; 12FA8;CYPRO-MINOAN SIGN CM030;Lo;0;L;;;;;N;;;;; 12FA9;CYPRO-MINOAN SIGN CM033;Lo;0;L;;;;;N;;;;; 12FAA;CYPRO-MINOAN SIGN CM034;Lo;0;L;;;;;N;;;;; 12FAB;CYPRO-MINOAN SIGN CM035;Lo;0;L;;;;;N;;;;; 12FAC;CYPRO-MINOAN SIGN CM036;Lo;0;L;;;;;N;;;;; 12FAD;CYPRO-MINOAN SIGN CM037;Lo;0;L;;;;;N;;;;; 12FAE;CYPRO-MINOAN SIGN CM038;Lo;0;L;;;;;N;;;;; 12FAF;CYPRO-MINOAN SIGN CM039;Lo;0;L;;;;;N;;;;; 12FB0;CYPRO-MINOAN SIGN CM040;Lo;0;L;;;;;N;;;;; 12FB1;CYPRO-MINOAN SIGN CM041;Lo;0;L;;;;;N;;;;; 12FB2;CYPRO-MINOAN SIGN CM044;Lo;0;L;;;;;N;;;;; 12FB3;CYPRO-MINOAN SIGN CM046;Lo;0;L;;;;;N;;;;; 12FB4;CYPRO-MINOAN SIGN CM047;Lo;0;L;;;;;N;;;;; 12FB5;CYPRO-MINOAN SIGN CM049;Lo;0;L;;;;;N;;;;; 12FB6;CYPRO-MINOAN SIGN CM050;Lo;0;L;;;;;N;;;;; 12FB7;CYPRO-MINOAN SIGN CM051;Lo;0;L;;;;;N;;;;; 12FB8;CYPRO-MINOAN SIGN CM052;Lo;0;L;;;;;N;;;;; 12FB9;CYPRO-MINOAN SIGN CM053;Lo;0;L;;;;;N;;;;; 12FBA;CYPRO-MINOAN SIGN CM054;Lo;0;L;;;;;N;;;;; 12FBB;CYPRO-MINOAN SIGN CM055;Lo;0;L;;;;;N;;;;; 12FBC;CYPRO-MINOAN SIGN CM056;Lo;0;L;;;;;N;;;;; 12FBD;CYPRO-MINOAN SIGN CM058;Lo;0;L;;;;;N;;;;; 12FBE;CYPRO-MINOAN SIGN CM059;Lo;0;L;;;;;N;;;;; 12FBF;CYPRO-MINOAN SIGN CM060;Lo;0;L;;;;;N;;;;; 12FC0;CYPRO-MINOAN SIGN CM061;Lo;0;L;;;;;N;;;;; 12FC1;CYPRO-MINOAN SIGN CM062;Lo;0;L;;;;;N;;;;; 12FC2;CYPRO-MINOAN SIGN CM063;Lo;0;L;;;;;N;;;;; 12FC3;CYPRO-MINOAN SIGN CM064;Lo;0;L;;;;;N;;;;; 12FC4;CYPRO-MINOAN SIGN CM066;Lo;0;L;;;;;N;;;;; 12FC5;CYPRO-MINOAN SIGN CM067;Lo;0;L;;;;;N;;;;; 12FC6;CYPRO-MINOAN SIGN CM068;Lo;0;L;;;;;N;;;;; 12FC7;CYPRO-MINOAN SIGN CM069;Lo;0;L;;;;;N;;;;; 12FC8;CYPRO-MINOAN SIGN CM070;Lo;0;L;;;;;N;;;;; 12FC9;CYPRO-MINOAN SIGN CM071;Lo;0;L;;;;;N;;;;; 12FCA;CYPRO-MINOAN SIGN CM072;Lo;0;L;;;;;N;;;;; 12FCB;CYPRO-MINOAN SIGN CM073;Lo;0;L;;;;;N;;;;; 12FCC;CYPRO-MINOAN SIGN CM074;Lo;0;L;;;;;N;;;;; 12FCD;CYPRO-MINOAN SIGN CM075;Lo;0;L;;;;;N;;;;; 12FCE;CYPRO-MINOAN SIGN CM075B;Lo;0;L;;;;;N;;;;; 12FCF;CYPRO-MINOAN SIGN CM076;Lo;0;L;;;;;N;;;;; 12FD0;CYPRO-MINOAN SIGN CM078;Lo;0;L;;;;;N;;;;; 12FD1;CYPRO-MINOAN SIGN CM079;Lo;0;L;;;;;N;;;;; 12FD2;CYPRO-MINOAN SIGN CM080;Lo;0;L;;;;;N;;;;; 12FD3;CYPRO-MINOAN SIGN CM081;Lo;0;L;;;;;N;;;;; 12FD4;CYPRO-MINOAN SIGN CM082;Lo;0;L;;;;;N;;;;; 12FD5;CYPRO-MINOAN SIGN CM083;Lo;0;L;;;;;N;;;;; 12FD6;CYPRO-MINOAN SIGN CM084;Lo;0;L;;;;;N;;;;; 12FD7;CYPRO-MINOAN SIGN CM085;Lo;0;L;;;;;N;;;;; 12FD8;CYPRO-MINOAN SIGN CM086;Lo;0;L;;;;;N;;;;; 12FD9;CYPRO-MINOAN SIGN CM087;Lo;0;L;;;;;N;;;;; 12FDA;CYPRO-MINOAN SIGN CM088;Lo;0;L;;;;;N;;;;; 12FDB;CYPRO-MINOAN SIGN CM089;Lo;0;L;;;;;N;;;;; 12FDC;CYPRO-MINOAN SIGN CM090;Lo;0;L;;;;;N;;;;; 12FDD;CYPRO-MINOAN SIGN CM091;Lo;0;L;;;;;N;;;;; 12FDE;CYPRO-MINOAN SIGN CM092;Lo;0;L;;;;;N;;;;; 12FDF;CYPRO-MINOAN SIGN CM094;Lo;0;L;;;;;N;;;;; 12FE0;CYPRO-MINOAN SIGN CM095;Lo;0;L;;;;;N;;;;; 12FE1;CYPRO-MINOAN SIGN CM096;Lo;0;L;;;;;N;;;;; 12FE2;CYPRO-MINOAN SIGN CM097;Lo;0;L;;;;;N;;;;; 12FE3;CYPRO-MINOAN SIGN CM098;Lo;0;L;;;;;N;;;;; 12FE4;CYPRO-MINOAN SIGN CM099;Lo;0;L;;;;;N;;;;; 12FE5;CYPRO-MINOAN SIGN CM100;Lo;0;L;;;;;N;;;;; 12FE6;CYPRO-MINOAN SIGN CM101;Lo;0;L;;;;;N;;;;; 12FE7;CYPRO-MINOAN SIGN CM102;Lo;0;L;;;;;N;;;;; 12FE8;CYPRO-MINOAN SIGN CM103;Lo;0;L;;;;;N;;;;; 12FE9;CYPRO-MINOAN SIGN CM104;Lo;0;L;;;;;N;;;;; 12FEA;CYPRO-MINOAN SIGN CM105;Lo;0;L;;;;;N;;;;; 12FEB;CYPRO-MINOAN SIGN CM107;Lo;0;L;;;;;N;;;;; 12FEC;CYPRO-MINOAN SIGN CM108;Lo;0;L;;;;;N;;;;; 12FED;CYPRO-MINOAN SIGN CM109;Lo;0;L;;;;;N;;;;; 12FEE;CYPRO-MINOAN SIGN CM110;Lo;0;L;;;;;N;;;;; 12FEF;CYPRO-MINOAN SIGN CM112;Lo;0;L;;;;;N;;;;; 12FF0;CYPRO-MINOAN SIGN CM114;Lo;0;L;;;;;N;;;;; 12FF1;CYPRO-MINOAN SIGN CM301;Po;0;L;;;;;N;;;;; 12FF2;CYPRO-MINOAN SIGN CM302;Po;0;L;;;;;N;;;;; 13000;EGYPTIAN HIEROGLYPH A001;Lo;0;L;;;;;N;;;;; 13001;EGYPTIAN HIEROGLYPH A002;Lo;0;L;;;;;N;;;;; 13002;EGYPTIAN HIEROGLYPH A003;Lo;0;L;;;;;N;;;;; 13003;EGYPTIAN HIEROGLYPH A004;Lo;0;L;;;;;N;;;;; 13004;EGYPTIAN HIEROGLYPH A005;Lo;0;L;;;;;N;;;;; 13005;EGYPTIAN HIEROGLYPH A005A;Lo;0;L;;;;;N;;;;; 13006;EGYPTIAN HIEROGLYPH A006;Lo;0;L;;;;;N;;;;; 13007;EGYPTIAN HIEROGLYPH A006A;Lo;0;L;;;;;N;;;;; 13008;EGYPTIAN HIEROGLYPH A006B;Lo;0;L;;;;;N;;;;; 13009;EGYPTIAN HIEROGLYPH A007;Lo;0;L;;;;;N;;;;; 1300A;EGYPTIAN HIEROGLYPH A008;Lo;0;L;;;;;N;;;;; 1300B;EGYPTIAN HIEROGLYPH A009;Lo;0;L;;;;;N;;;;; 1300C;EGYPTIAN HIEROGLYPH A010;Lo;0;L;;;;;N;;;;; 1300D;EGYPTIAN HIEROGLYPH A011;Lo;0;L;;;;;N;;;;; 1300E;EGYPTIAN HIEROGLYPH A012;Lo;0;L;;;;;N;;;;; 1300F;EGYPTIAN HIEROGLYPH A013;Lo;0;L;;;;;N;;;;; 13010;EGYPTIAN HIEROGLYPH A014;Lo;0;L;;;;;N;;;;; 13011;EGYPTIAN HIEROGLYPH A014A;Lo;0;L;;;;;N;;;;; 13012;EGYPTIAN HIEROGLYPH A015;Lo;0;L;;;;;N;;;;; 13013;EGYPTIAN HIEROGLYPH A016;Lo;0;L;;;;;N;;;;; 13014;EGYPTIAN HIEROGLYPH A017;Lo;0;L;;;;;N;;;;; 13015;EGYPTIAN HIEROGLYPH A017A;Lo;0;L;;;;;N;;;;; 13016;EGYPTIAN HIEROGLYPH A018;Lo;0;L;;;;;N;;;;; 13017;EGYPTIAN HIEROGLYPH A019;Lo;0;L;;;;;N;;;;; 13018;EGYPTIAN HIEROGLYPH A020;Lo;0;L;;;;;N;;;;; 13019;EGYPTIAN HIEROGLYPH A021;Lo;0;L;;;;;N;;;;; 1301A;EGYPTIAN HIEROGLYPH A022;Lo;0;L;;;;;N;;;;; 1301B;EGYPTIAN HIEROGLYPH A023;Lo;0;L;;;;;N;;;;; 1301C;EGYPTIAN HIEROGLYPH A024;Lo;0;L;;;;;N;;;;; 1301D;EGYPTIAN HIEROGLYPH A025;Lo;0;L;;;;;N;;;;; 1301E;EGYPTIAN HIEROGLYPH A026;Lo;0;L;;;;;N;;;;; 1301F;EGYPTIAN HIEROGLYPH A027;Lo;0;L;;;;;N;;;;; 13020;EGYPTIAN HIEROGLYPH A028;Lo;0;L;;;;;N;;;;; 13021;EGYPTIAN HIEROGLYPH A029;Lo;0;L;;;;;N;;;;; 13022;EGYPTIAN HIEROGLYPH A030;Lo;0;L;;;;;N;;;;; 13023;EGYPTIAN HIEROGLYPH A031;Lo;0;L;;;;;N;;;;; 13024;EGYPTIAN HIEROGLYPH A032;Lo;0;L;;;;;N;;;;; 13025;EGYPTIAN HIEROGLYPH A032A;Lo;0;L;;;;;N;;;;; 13026;EGYPTIAN HIEROGLYPH A033;Lo;0;L;;;;;N;;;;; 13027;EGYPTIAN HIEROGLYPH A034;Lo;0;L;;;;;N;;;;; 13028;EGYPTIAN HIEROGLYPH A035;Lo;0;L;;;;;N;;;;; 13029;EGYPTIAN HIEROGLYPH A036;Lo;0;L;;;;;N;;;;; 1302A;EGYPTIAN HIEROGLYPH A037;Lo;0;L;;;;;N;;;;; 1302B;EGYPTIAN HIEROGLYPH A038;Lo;0;L;;;;;N;;;;; 1302C;EGYPTIAN HIEROGLYPH A039;Lo;0;L;;;;;N;;;;; 1302D;EGYPTIAN HIEROGLYPH A040;Lo;0;L;;;;;N;;;;; 1302E;EGYPTIAN HIEROGLYPH A040A;Lo;0;L;;;;;N;;;;; 1302F;EGYPTIAN HIEROGLYPH A041;Lo;0;L;;;;;N;;;;; 13030;EGYPTIAN HIEROGLYPH A042;Lo;0;L;;;;;N;;;;; 13031;EGYPTIAN HIEROGLYPH A042A;Lo;0;L;;;;;N;;;;; 13032;EGYPTIAN HIEROGLYPH A043;Lo;0;L;;;;;N;;;;; 13033;EGYPTIAN HIEROGLYPH A043A;Lo;0;L;;;;;N;;;;; 13034;EGYPTIAN HIEROGLYPH A044;Lo;0;L;;;;;N;;;;; 13035;EGYPTIAN HIEROGLYPH A045;Lo;0;L;;;;;N;;;;; 13036;EGYPTIAN HIEROGLYPH A045A;Lo;0;L;;;;;N;;;;; 13037;EGYPTIAN HIEROGLYPH A046;Lo;0;L;;;;;N;;;;; 13038;EGYPTIAN HIEROGLYPH A047;Lo;0;L;;;;;N;;;;; 13039;EGYPTIAN HIEROGLYPH A048;Lo;0;L;;;;;N;;;;; 1303A;EGYPTIAN HIEROGLYPH A049;Lo;0;L;;;;;N;;;;; 1303B;EGYPTIAN HIEROGLYPH A050;Lo;0;L;;;;;N;;;;; 1303C;EGYPTIAN HIEROGLYPH A051;Lo;0;L;;;;;N;;;;; 1303D;EGYPTIAN HIEROGLYPH A052;Lo;0;L;;;;;N;;;;; 1303E;EGYPTIAN HIEROGLYPH A053;Lo;0;L;;;;;N;;;;; 1303F;EGYPTIAN HIEROGLYPH A054;Lo;0;L;;;;;N;;;;; 13040;EGYPTIAN HIEROGLYPH A055;Lo;0;L;;;;;N;;;;; 13041;EGYPTIAN HIEROGLYPH A056;Lo;0;L;;;;;N;;;;; 13042;EGYPTIAN HIEROGLYPH A057;Lo;0;L;;;;;N;;;;; 13043;EGYPTIAN HIEROGLYPH A058;Lo;0;L;;;;;N;;;;; 13044;EGYPTIAN HIEROGLYPH A059;Lo;0;L;;;;;N;;;;; 13045;EGYPTIAN HIEROGLYPH A060;Lo;0;L;;;;;N;;;;; 13046;EGYPTIAN HIEROGLYPH A061;Lo;0;L;;;;;N;;;;; 13047;EGYPTIAN HIEROGLYPH A062;Lo;0;L;;;;;N;;;;; 13048;EGYPTIAN HIEROGLYPH A063;Lo;0;L;;;;;N;;;;; 13049;EGYPTIAN HIEROGLYPH A064;Lo;0;L;;;;;N;;;;; 1304A;EGYPTIAN HIEROGLYPH A065;Lo;0;L;;;;;N;;;;; 1304B;EGYPTIAN HIEROGLYPH A066;Lo;0;L;;;;;N;;;;; 1304C;EGYPTIAN HIEROGLYPH A067;Lo;0;L;;;;;N;;;;; 1304D;EGYPTIAN HIEROGLYPH A068;Lo;0;L;;;;;N;;;;; 1304E;EGYPTIAN HIEROGLYPH A069;Lo;0;L;;;;;N;;;;; 1304F;EGYPTIAN HIEROGLYPH A070;Lo;0;L;;;;;N;;;;; 13050;EGYPTIAN HIEROGLYPH B001;Lo;0;L;;;;;N;;;;; 13051;EGYPTIAN HIEROGLYPH B002;Lo;0;L;;;;;N;;;;; 13052;EGYPTIAN HIEROGLYPH B003;Lo;0;L;;;;;N;;;;; 13053;EGYPTIAN HIEROGLYPH B004;Lo;0;L;;;;;N;;;;; 13054;EGYPTIAN HIEROGLYPH B005;Lo;0;L;;;;;N;;;;; 13055;EGYPTIAN HIEROGLYPH B005A;Lo;0;L;;;;;N;;;;; 13056;EGYPTIAN HIEROGLYPH B006;Lo;0;L;;;;;N;;;;; 13057;EGYPTIAN HIEROGLYPH B007;Lo;0;L;;;;;N;;;;; 13058;EGYPTIAN HIEROGLYPH B008;Lo;0;L;;;;;N;;;;; 13059;EGYPTIAN HIEROGLYPH B009;Lo;0;L;;;;;N;;;;; 1305A;EGYPTIAN HIEROGLYPH C001;Lo;0;L;;;;;N;;;;; 1305B;EGYPTIAN HIEROGLYPH C002;Lo;0;L;;;;;N;;;;; 1305C;EGYPTIAN HIEROGLYPH C002A;Lo;0;L;;;;;N;;;;; 1305D;EGYPTIAN HIEROGLYPH C002B;Lo;0;L;;;;;N;;;;; 1305E;EGYPTIAN HIEROGLYPH C002C;Lo;0;L;;;;;N;;;;; 1305F;EGYPTIAN HIEROGLYPH C003;Lo;0;L;;;;;N;;;;; 13060;EGYPTIAN HIEROGLYPH C004;Lo;0;L;;;;;N;;;;; 13061;EGYPTIAN HIEROGLYPH C005;Lo;0;L;;;;;N;;;;; 13062;EGYPTIAN HIEROGLYPH C006;Lo;0;L;;;;;N;;;;; 13063;EGYPTIAN HIEROGLYPH C007;Lo;0;L;;;;;N;;;;; 13064;EGYPTIAN HIEROGLYPH C008;Lo;0;L;;;;;N;;;;; 13065;EGYPTIAN HIEROGLYPH C009;Lo;0;L;;;;;N;;;;; 13066;EGYPTIAN HIEROGLYPH C010;Lo;0;L;;;;;N;;;;; 13067;EGYPTIAN HIEROGLYPH C010A;Lo;0;L;;;;;N;;;;; 13068;EGYPTIAN HIEROGLYPH C011;Lo;0;L;;;;;N;;;;; 13069;EGYPTIAN HIEROGLYPH C012;Lo;0;L;;;;;N;;;;; 1306A;EGYPTIAN HIEROGLYPH C013;Lo;0;L;;;;;N;;;;; 1306B;EGYPTIAN HIEROGLYPH C014;Lo;0;L;;;;;N;;;;; 1306C;EGYPTIAN HIEROGLYPH C015;Lo;0;L;;;;;N;;;;; 1306D;EGYPTIAN HIEROGLYPH C016;Lo;0;L;;;;;N;;;;; 1306E;EGYPTIAN HIEROGLYPH C017;Lo;0;L;;;;;N;;;;; 1306F;EGYPTIAN HIEROGLYPH C018;Lo;0;L;;;;;N;;;;; 13070;EGYPTIAN HIEROGLYPH C019;Lo;0;L;;;;;N;;;;; 13071;EGYPTIAN HIEROGLYPH C020;Lo;0;L;;;;;N;;;;; 13072;EGYPTIAN HIEROGLYPH C021;Lo;0;L;;;;;N;;;;; 13073;EGYPTIAN HIEROGLYPH C022;Lo;0;L;;;;;N;;;;; 13074;EGYPTIAN HIEROGLYPH C023;Lo;0;L;;;;;N;;;;; 13075;EGYPTIAN HIEROGLYPH C024;Lo;0;L;;;;;N;;;;; 13076;EGYPTIAN HIEROGLYPH D001;Lo;0;L;;;;;N;;;;; 13077;EGYPTIAN HIEROGLYPH D002;Lo;0;L;;;;;N;;;;; 13078;EGYPTIAN HIEROGLYPH D003;Lo;0;L;;;;;N;;;;; 13079;EGYPTIAN HIEROGLYPH D004;Lo;0;L;;;;;N;;;;; 1307A;EGYPTIAN HIEROGLYPH D005;Lo;0;L;;;;;N;;;;; 1307B;EGYPTIAN HIEROGLYPH D006;Lo;0;L;;;;;N;;;;; 1307C;EGYPTIAN HIEROGLYPH D007;Lo;0;L;;;;;N;;;;; 1307D;EGYPTIAN HIEROGLYPH D008;Lo;0;L;;;;;N;;;;; 1307E;EGYPTIAN HIEROGLYPH D008A;Lo;0;L;;;;;N;;;;; 1307F;EGYPTIAN HIEROGLYPH D009;Lo;0;L;;;;;N;;;;; 13080;EGYPTIAN HIEROGLYPH D010;Lo;0;L;;;;;N;;;;; 13081;EGYPTIAN HIEROGLYPH D011;Lo;0;L;;;;;N;;;;; 13082;EGYPTIAN HIEROGLYPH D012;Lo;0;L;;;;;N;;;;; 13083;EGYPTIAN HIEROGLYPH D013;Lo;0;L;;;;;N;;;;; 13084;EGYPTIAN HIEROGLYPH D014;Lo;0;L;;;;;N;;;;; 13085;EGYPTIAN HIEROGLYPH D015;Lo;0;L;;;;;N;;;;; 13086;EGYPTIAN HIEROGLYPH D016;Lo;0;L;;;;;N;;;;; 13087;EGYPTIAN HIEROGLYPH D017;Lo;0;L;;;;;N;;;;; 13088;EGYPTIAN HIEROGLYPH D018;Lo;0;L;;;;;N;;;;; 13089;EGYPTIAN HIEROGLYPH D019;Lo;0;L;;;;;N;;;;; 1308A;EGYPTIAN HIEROGLYPH D020;Lo;0;L;;;;;N;;;;; 1308B;EGYPTIAN HIEROGLYPH D021;Lo;0;L;;;;;N;;;;; 1308C;EGYPTIAN HIEROGLYPH D022;Lo;0;L;;;;;N;;;;; 1308D;EGYPTIAN HIEROGLYPH D023;Lo;0;L;;;;;N;;;;; 1308E;EGYPTIAN HIEROGLYPH D024;Lo;0;L;;;;;N;;;;; 1308F;EGYPTIAN HIEROGLYPH D025;Lo;0;L;;;;;N;;;;; 13090;EGYPTIAN HIEROGLYPH D026;Lo;0;L;;;;;N;;;;; 13091;EGYPTIAN HIEROGLYPH D027;Lo;0;L;;;;;N;;;;; 13092;EGYPTIAN HIEROGLYPH D027A;Lo;0;L;;;;;N;;;;; 13093;EGYPTIAN HIEROGLYPH D028;Lo;0;L;;;;;N;;;;; 13094;EGYPTIAN HIEROGLYPH D029;Lo;0;L;;;;;N;;;;; 13095;EGYPTIAN HIEROGLYPH D030;Lo;0;L;;;;;N;;;;; 13096;EGYPTIAN HIEROGLYPH D031;Lo;0;L;;;;;N;;;;; 13097;EGYPTIAN HIEROGLYPH D031A;Lo;0;L;;;;;N;;;;; 13098;EGYPTIAN HIEROGLYPH D032;Lo;0;L;;;;;N;;;;; 13099;EGYPTIAN HIEROGLYPH D033;Lo;0;L;;;;;N;;;;; 1309A;EGYPTIAN HIEROGLYPH D034;Lo;0;L;;;;;N;;;;; 1309B;EGYPTIAN HIEROGLYPH D034A;Lo;0;L;;;;;N;;;;; 1309C;EGYPTIAN HIEROGLYPH D035;Lo;0;L;;;;;N;;;;; 1309D;EGYPTIAN HIEROGLYPH D036;Lo;0;L;;;;;N;;;;; 1309E;EGYPTIAN HIEROGLYPH D037;Lo;0;L;;;;;N;;;;; 1309F;EGYPTIAN HIEROGLYPH D038;Lo;0;L;;;;;N;;;;; 130A0;EGYPTIAN HIEROGLYPH D039;Lo;0;L;;;;;N;;;;; 130A1;EGYPTIAN HIEROGLYPH D040;Lo;0;L;;;;;N;;;;; 130A2;EGYPTIAN HIEROGLYPH D041;Lo;0;L;;;;;N;;;;; 130A3;EGYPTIAN HIEROGLYPH D042;Lo;0;L;;;;;N;;;;; 130A4;EGYPTIAN HIEROGLYPH D043;Lo;0;L;;;;;N;;;;; 130A5;EGYPTIAN HIEROGLYPH D044;Lo;0;L;;;;;N;;;;; 130A6;EGYPTIAN HIEROGLYPH D045;Lo;0;L;;;;;N;;;;; 130A7;EGYPTIAN HIEROGLYPH D046;Lo;0;L;;;;;N;;;;; 130A8;EGYPTIAN HIEROGLYPH D046A;Lo;0;L;;;;;N;;;;; 130A9;EGYPTIAN HIEROGLYPH D047;Lo;0;L;;;;;N;;;;; 130AA;EGYPTIAN HIEROGLYPH D048;Lo;0;L;;;;;N;;;;; 130AB;EGYPTIAN HIEROGLYPH D048A;Lo;0;L;;;;;N;;;;; 130AC;EGYPTIAN HIEROGLYPH D049;Lo;0;L;;;;;N;;;;; 130AD;EGYPTIAN HIEROGLYPH D050;Lo;0;L;;;;;N;;;;; 130AE;EGYPTIAN HIEROGLYPH D050A;Lo;0;L;;;;;N;;;;; 130AF;EGYPTIAN HIEROGLYPH D050B;Lo;0;L;;;;;N;;;;; 130B0;EGYPTIAN HIEROGLYPH D050C;Lo;0;L;;;;;N;;;;; 130B1;EGYPTIAN HIEROGLYPH D050D;Lo;0;L;;;;;N;;;;; 130B2;EGYPTIAN HIEROGLYPH D050E;Lo;0;L;;;;;N;;;;; 130B3;EGYPTIAN HIEROGLYPH D050F;Lo;0;L;;;;;N;;;;; 130B4;EGYPTIAN HIEROGLYPH D050G;Lo;0;L;;;;;N;;;;; 130B5;EGYPTIAN HIEROGLYPH D050H;Lo;0;L;;;;;N;;;;; 130B6;EGYPTIAN HIEROGLYPH D050I;Lo;0;L;;;;;N;;;;; 130B7;EGYPTIAN HIEROGLYPH D051;Lo;0;L;;;;;N;;;;; 130B8;EGYPTIAN HIEROGLYPH D052;Lo;0;L;;;;;N;;;;; 130B9;EGYPTIAN HIEROGLYPH D052A;Lo;0;L;;;;;N;;;;; 130BA;EGYPTIAN HIEROGLYPH D053;Lo;0;L;;;;;N;;;;; 130BB;EGYPTIAN HIEROGLYPH D054;Lo;0;L;;;;;N;;;;; 130BC;EGYPTIAN HIEROGLYPH D054A;Lo;0;L;;;;;N;;;;; 130BD;EGYPTIAN HIEROGLYPH D055;Lo;0;L;;;;;N;;;;; 130BE;EGYPTIAN HIEROGLYPH D056;Lo;0;L;;;;;N;;;;; 130BF;EGYPTIAN HIEROGLYPH D057;Lo;0;L;;;;;N;;;;; 130C0;EGYPTIAN HIEROGLYPH D058;Lo;0;L;;;;;N;;;;; 130C1;EGYPTIAN HIEROGLYPH D059;Lo;0;L;;;;;N;;;;; 130C2;EGYPTIAN HIEROGLYPH D060;Lo;0;L;;;;;N;;;;; 130C3;EGYPTIAN HIEROGLYPH D061;Lo;0;L;;;;;N;;;;; 130C4;EGYPTIAN HIEROGLYPH D062;Lo;0;L;;;;;N;;;;; 130C5;EGYPTIAN HIEROGLYPH D063;Lo;0;L;;;;;N;;;;; 130C6;EGYPTIAN HIEROGLYPH D064;Lo;0;L;;;;;N;;;;; 130C7;EGYPTIAN HIEROGLYPH D065;Lo;0;L;;;;;N;;;;; 130C8;EGYPTIAN HIEROGLYPH D066;Lo;0;L;;;;;N;;;;; 130C9;EGYPTIAN HIEROGLYPH D067;Lo;0;L;;;;;N;;;;; 130CA;EGYPTIAN HIEROGLYPH D067A;Lo;0;L;;;;;N;;;;; 130CB;EGYPTIAN HIEROGLYPH D067B;Lo;0;L;;;;;N;;;;; 130CC;EGYPTIAN HIEROGLYPH D067C;Lo;0;L;;;;;N;;;;; 130CD;EGYPTIAN HIEROGLYPH D067D;Lo;0;L;;;;;N;;;;; 130CE;EGYPTIAN HIEROGLYPH D067E;Lo;0;L;;;;;N;;;;; 130CF;EGYPTIAN HIEROGLYPH D067F;Lo;0;L;;;;;N;;;;; 130D0;EGYPTIAN HIEROGLYPH D067G;Lo;0;L;;;;;N;;;;; 130D1;EGYPTIAN HIEROGLYPH D067H;Lo;0;L;;;;;N;;;;; 130D2;EGYPTIAN HIEROGLYPH E001;Lo;0;L;;;;;N;;;;; 130D3;EGYPTIAN HIEROGLYPH E002;Lo;0;L;;;;;N;;;;; 130D4;EGYPTIAN HIEROGLYPH E003;Lo;0;L;;;;;N;;;;; 130D5;EGYPTIAN HIEROGLYPH E004;Lo;0;L;;;;;N;;;;; 130D6;EGYPTIAN HIEROGLYPH E005;Lo;0;L;;;;;N;;;;; 130D7;EGYPTIAN HIEROGLYPH E006;Lo;0;L;;;;;N;;;;; 130D8;EGYPTIAN HIEROGLYPH E007;Lo;0;L;;;;;N;;;;; 130D9;EGYPTIAN HIEROGLYPH E008;Lo;0;L;;;;;N;;;;; 130DA;EGYPTIAN HIEROGLYPH E008A;Lo;0;L;;;;;N;;;;; 130DB;EGYPTIAN HIEROGLYPH E009;Lo;0;L;;;;;N;;;;; 130DC;EGYPTIAN HIEROGLYPH E009A;Lo;0;L;;;;;N;;;;; 130DD;EGYPTIAN HIEROGLYPH E010;Lo;0;L;;;;;N;;;;; 130DE;EGYPTIAN HIEROGLYPH E011;Lo;0;L;;;;;N;;;;; 130DF;EGYPTIAN HIEROGLYPH E012;Lo;0;L;;;;;N;;;;; 130E0;EGYPTIAN HIEROGLYPH E013;Lo;0;L;;;;;N;;;;; 130E1;EGYPTIAN HIEROGLYPH E014;Lo;0;L;;;;;N;;;;; 130E2;EGYPTIAN HIEROGLYPH E015;Lo;0;L;;;;;N;;;;; 130E3;EGYPTIAN HIEROGLYPH E016;Lo;0;L;;;;;N;;;;; 130E4;EGYPTIAN HIEROGLYPH E016A;Lo;0;L;;;;;N;;;;; 130E5;EGYPTIAN HIEROGLYPH E017;Lo;0;L;;;;;N;;;;; 130E6;EGYPTIAN HIEROGLYPH E017A;Lo;0;L;;;;;N;;;;; 130E7;EGYPTIAN HIEROGLYPH E018;Lo;0;L;;;;;N;;;;; 130E8;EGYPTIAN HIEROGLYPH E019;Lo;0;L;;;;;N;;;;; 130E9;EGYPTIAN HIEROGLYPH E020;Lo;0;L;;;;;N;;;;; 130EA;EGYPTIAN HIEROGLYPH E020A;Lo;0;L;;;;;N;;;;; 130EB;EGYPTIAN HIEROGLYPH E021;Lo;0;L;;;;;N;;;;; 130EC;EGYPTIAN HIEROGLYPH E022;Lo;0;L;;;;;N;;;;; 130ED;EGYPTIAN HIEROGLYPH E023;Lo;0;L;;;;;N;;;;; 130EE;EGYPTIAN HIEROGLYPH E024;Lo;0;L;;;;;N;;;;; 130EF;EGYPTIAN HIEROGLYPH E025;Lo;0;L;;;;;N;;;;; 130F0;EGYPTIAN HIEROGLYPH E026;Lo;0;L;;;;;N;;;;; 130F1;EGYPTIAN HIEROGLYPH E027;Lo;0;L;;;;;N;;;;; 130F2;EGYPTIAN HIEROGLYPH E028;Lo;0;L;;;;;N;;;;; 130F3;EGYPTIAN HIEROGLYPH E028A;Lo;0;L;;;;;N;;;;; 130F4;EGYPTIAN HIEROGLYPH E029;Lo;0;L;;;;;N;;;;; 130F5;EGYPTIAN HIEROGLYPH E030;Lo;0;L;;;;;N;;;;; 130F6;EGYPTIAN HIEROGLYPH E031;Lo;0;L;;;;;N;;;;; 130F7;EGYPTIAN HIEROGLYPH E032;Lo;0;L;;;;;N;;;;; 130F8;EGYPTIAN HIEROGLYPH E033;Lo;0;L;;;;;N;;;;; 130F9;EGYPTIAN HIEROGLYPH E034;Lo;0;L;;;;;N;;;;; 130FA;EGYPTIAN HIEROGLYPH E034A;Lo;0;L;;;;;N;;;;; 130FB;EGYPTIAN HIEROGLYPH E036;Lo;0;L;;;;;N;;;;; 130FC;EGYPTIAN HIEROGLYPH E037;Lo;0;L;;;;;N;;;;; 130FD;EGYPTIAN HIEROGLYPH E038;Lo;0;L;;;;;N;;;;; 130FE;EGYPTIAN HIEROGLYPH F001;Lo;0;L;;;;;N;;;;; 130FF;EGYPTIAN HIEROGLYPH F001A;Lo;0;L;;;;;N;;;;; 13100;EGYPTIAN HIEROGLYPH F002;Lo;0;L;;;;;N;;;;; 13101;EGYPTIAN HIEROGLYPH F003;Lo;0;L;;;;;N;;;;; 13102;EGYPTIAN HIEROGLYPH F004;Lo;0;L;;;;;N;;;;; 13103;EGYPTIAN HIEROGLYPH F005;Lo;0;L;;;;;N;;;;; 13104;EGYPTIAN HIEROGLYPH F006;Lo;0;L;;;;;N;;;;; 13105;EGYPTIAN HIEROGLYPH F007;Lo;0;L;;;;;N;;;;; 13106;EGYPTIAN HIEROGLYPH F008;Lo;0;L;;;;;N;;;;; 13107;EGYPTIAN HIEROGLYPH F009;Lo;0;L;;;;;N;;;;; 13108;EGYPTIAN HIEROGLYPH F010;Lo;0;L;;;;;N;;;;; 13109;EGYPTIAN HIEROGLYPH F011;Lo;0;L;;;;;N;;;;; 1310A;EGYPTIAN HIEROGLYPH F012;Lo;0;L;;;;;N;;;;; 1310B;EGYPTIAN HIEROGLYPH F013;Lo;0;L;;;;;N;;;;; 1310C;EGYPTIAN HIEROGLYPH F013A;Lo;0;L;;;;;N;;;;; 1310D;EGYPTIAN HIEROGLYPH F014;Lo;0;L;;;;;N;;;;; 1310E;EGYPTIAN HIEROGLYPH F015;Lo;0;L;;;;;N;;;;; 1310F;EGYPTIAN HIEROGLYPH F016;Lo;0;L;;;;;N;;;;; 13110;EGYPTIAN HIEROGLYPH F017;Lo;0;L;;;;;N;;;;; 13111;EGYPTIAN HIEROGLYPH F018;Lo;0;L;;;;;N;;;;; 13112;EGYPTIAN HIEROGLYPH F019;Lo;0;L;;;;;N;;;;; 13113;EGYPTIAN HIEROGLYPH F020;Lo;0;L;;;;;N;;;;; 13114;EGYPTIAN HIEROGLYPH F021;Lo;0;L;;;;;N;;;;; 13115;EGYPTIAN HIEROGLYPH F021A;Lo;0;L;;;;;N;;;;; 13116;EGYPTIAN HIEROGLYPH F022;Lo;0;L;;;;;N;;;;; 13117;EGYPTIAN HIEROGLYPH F023;Lo;0;L;;;;;N;;;;; 13118;EGYPTIAN HIEROGLYPH F024;Lo;0;L;;;;;N;;;;; 13119;EGYPTIAN HIEROGLYPH F025;Lo;0;L;;;;;N;;;;; 1311A;EGYPTIAN HIEROGLYPH F026;Lo;0;L;;;;;N;;;;; 1311B;EGYPTIAN HIEROGLYPH F027;Lo;0;L;;;;;N;;;;; 1311C;EGYPTIAN HIEROGLYPH F028;Lo;0;L;;;;;N;;;;; 1311D;EGYPTIAN HIEROGLYPH F029;Lo;0;L;;;;;N;;;;; 1311E;EGYPTIAN HIEROGLYPH F030;Lo;0;L;;;;;N;;;;; 1311F;EGYPTIAN HIEROGLYPH F031;Lo;0;L;;;;;N;;;;; 13120;EGYPTIAN HIEROGLYPH F031A;Lo;0;L;;;;;N;;;;; 13121;EGYPTIAN HIEROGLYPH F032;Lo;0;L;;;;;N;;;;; 13122;EGYPTIAN HIEROGLYPH F033;Lo;0;L;;;;;N;;;;; 13123;EGYPTIAN HIEROGLYPH F034;Lo;0;L;;;;;N;;;;; 13124;EGYPTIAN HIEROGLYPH F035;Lo;0;L;;;;;N;;;;; 13125;EGYPTIAN HIEROGLYPH F036;Lo;0;L;;;;;N;;;;; 13126;EGYPTIAN HIEROGLYPH F037;Lo;0;L;;;;;N;;;;; 13127;EGYPTIAN HIEROGLYPH F037A;Lo;0;L;;;;;N;;;;; 13128;EGYPTIAN HIEROGLYPH F038;Lo;0;L;;;;;N;;;;; 13129;EGYPTIAN HIEROGLYPH F038A;Lo;0;L;;;;;N;;;;; 1312A;EGYPTIAN HIEROGLYPH F039;Lo;0;L;;;;;N;;;;; 1312B;EGYPTIAN HIEROGLYPH F040;Lo;0;L;;;;;N;;;;; 1312C;EGYPTIAN HIEROGLYPH F041;Lo;0;L;;;;;N;;;;; 1312D;EGYPTIAN HIEROGLYPH F042;Lo;0;L;;;;;N;;;;; 1312E;EGYPTIAN HIEROGLYPH F043;Lo;0;L;;;;;N;;;;; 1312F;EGYPTIAN HIEROGLYPH F044;Lo;0;L;;;;;N;;;;; 13130;EGYPTIAN HIEROGLYPH F045;Lo;0;L;;;;;N;;;;; 13131;EGYPTIAN HIEROGLYPH F045A;Lo;0;L;;;;;N;;;;; 13132;EGYPTIAN HIEROGLYPH F046;Lo;0;L;;;;;N;;;;; 13133;EGYPTIAN HIEROGLYPH F046A;Lo;0;L;;;;;N;;;;; 13134;EGYPTIAN HIEROGLYPH F047;Lo;0;L;;;;;N;;;;; 13135;EGYPTIAN HIEROGLYPH F047A;Lo;0;L;;;;;N;;;;; 13136;EGYPTIAN HIEROGLYPH F048;Lo;0;L;;;;;N;;;;; 13137;EGYPTIAN HIEROGLYPH F049;Lo;0;L;;;;;N;;;;; 13138;EGYPTIAN HIEROGLYPH F050;Lo;0;L;;;;;N;;;;; 13139;EGYPTIAN HIEROGLYPH F051;Lo;0;L;;;;;N;;;;; 1313A;EGYPTIAN HIEROGLYPH F051A;Lo;0;L;;;;;N;;;;; 1313B;EGYPTIAN HIEROGLYPH F051B;Lo;0;L;;;;;N;;;;; 1313C;EGYPTIAN HIEROGLYPH F051C;Lo;0;L;;;;;N;;;;; 1313D;EGYPTIAN HIEROGLYPH F052;Lo;0;L;;;;;N;;;;; 1313E;EGYPTIAN HIEROGLYPH F053;Lo;0;L;;;;;N;;;;; 1313F;EGYPTIAN HIEROGLYPH G001;Lo;0;L;;;;;N;;;;; 13140;EGYPTIAN HIEROGLYPH G002;Lo;0;L;;;;;N;;;;; 13141;EGYPTIAN HIEROGLYPH G003;Lo;0;L;;;;;N;;;;; 13142;EGYPTIAN HIEROGLYPH G004;Lo;0;L;;;;;N;;;;; 13143;EGYPTIAN HIEROGLYPH G005;Lo;0;L;;;;;N;;;;; 13144;EGYPTIAN HIEROGLYPH G006;Lo;0;L;;;;;N;;;;; 13145;EGYPTIAN HIEROGLYPH G006A;Lo;0;L;;;;;N;;;;; 13146;EGYPTIAN HIEROGLYPH G007;Lo;0;L;;;;;N;;;;; 13147;EGYPTIAN HIEROGLYPH G007A;Lo;0;L;;;;;N;;;;; 13148;EGYPTIAN HIEROGLYPH G007B;Lo;0;L;;;;;N;;;;; 13149;EGYPTIAN HIEROGLYPH G008;Lo;0;L;;;;;N;;;;; 1314A;EGYPTIAN HIEROGLYPH G009;Lo;0;L;;;;;N;;;;; 1314B;EGYPTIAN HIEROGLYPH G010;Lo;0;L;;;;;N;;;;; 1314C;EGYPTIAN HIEROGLYPH G011;Lo;0;L;;;;;N;;;;; 1314D;EGYPTIAN HIEROGLYPH G011A;Lo;0;L;;;;;N;;;;; 1314E;EGYPTIAN HIEROGLYPH G012;Lo;0;L;;;;;N;;;;; 1314F;EGYPTIAN HIEROGLYPH G013;Lo;0;L;;;;;N;;;;; 13150;EGYPTIAN HIEROGLYPH G014;Lo;0;L;;;;;N;;;;; 13151;EGYPTIAN HIEROGLYPH G015;Lo;0;L;;;;;N;;;;; 13152;EGYPTIAN HIEROGLYPH G016;Lo;0;L;;;;;N;;;;; 13153;EGYPTIAN HIEROGLYPH G017;Lo;0;L;;;;;N;;;;; 13154;EGYPTIAN HIEROGLYPH G018;Lo;0;L;;;;;N;;;;; 13155;EGYPTIAN HIEROGLYPH G019;Lo;0;L;;;;;N;;;;; 13156;EGYPTIAN HIEROGLYPH G020;Lo;0;L;;;;;N;;;;; 13157;EGYPTIAN HIEROGLYPH G020A;Lo;0;L;;;;;N;;;;; 13158;EGYPTIAN HIEROGLYPH G021;Lo;0;L;;;;;N;;;;; 13159;EGYPTIAN HIEROGLYPH G022;Lo;0;L;;;;;N;;;;; 1315A;EGYPTIAN HIEROGLYPH G023;Lo;0;L;;;;;N;;;;; 1315B;EGYPTIAN HIEROGLYPH G024;Lo;0;L;;;;;N;;;;; 1315C;EGYPTIAN HIEROGLYPH G025;Lo;0;L;;;;;N;;;;; 1315D;EGYPTIAN HIEROGLYPH G026;Lo;0;L;;;;;N;;;;; 1315E;EGYPTIAN HIEROGLYPH G026A;Lo;0;L;;;;;N;;;;; 1315F;EGYPTIAN HIEROGLYPH G027;Lo;0;L;;;;;N;;;;; 13160;EGYPTIAN HIEROGLYPH G028;Lo;0;L;;;;;N;;;;; 13161;EGYPTIAN HIEROGLYPH G029;Lo;0;L;;;;;N;;;;; 13162;EGYPTIAN HIEROGLYPH G030;Lo;0;L;;;;;N;;;;; 13163;EGYPTIAN HIEROGLYPH G031;Lo;0;L;;;;;N;;;;; 13164;EGYPTIAN HIEROGLYPH G032;Lo;0;L;;;;;N;;;;; 13165;EGYPTIAN HIEROGLYPH G033;Lo;0;L;;;;;N;;;;; 13166;EGYPTIAN HIEROGLYPH G034;Lo;0;L;;;;;N;;;;; 13167;EGYPTIAN HIEROGLYPH G035;Lo;0;L;;;;;N;;;;; 13168;EGYPTIAN HIEROGLYPH G036;Lo;0;L;;;;;N;;;;; 13169;EGYPTIAN HIEROGLYPH G036A;Lo;0;L;;;;;N;;;;; 1316A;EGYPTIAN HIEROGLYPH G037;Lo;0;L;;;;;N;;;;; 1316B;EGYPTIAN HIEROGLYPH G037A;Lo;0;L;;;;;N;;;;; 1316C;EGYPTIAN HIEROGLYPH G038;Lo;0;L;;;;;N;;;;; 1316D;EGYPTIAN HIEROGLYPH G039;Lo;0;L;;;;;N;;;;; 1316E;EGYPTIAN HIEROGLYPH G040;Lo;0;L;;;;;N;;;;; 1316F;EGYPTIAN HIEROGLYPH G041;Lo;0;L;;;;;N;;;;; 13170;EGYPTIAN HIEROGLYPH G042;Lo;0;L;;;;;N;;;;; 13171;EGYPTIAN HIEROGLYPH G043;Lo;0;L;;;;;N;;;;; 13172;EGYPTIAN HIEROGLYPH G043A;Lo;0;L;;;;;N;;;;; 13173;EGYPTIAN HIEROGLYPH G044;Lo;0;L;;;;;N;;;;; 13174;EGYPTIAN HIEROGLYPH G045;Lo;0;L;;;;;N;;;;; 13175;EGYPTIAN HIEROGLYPH G045A;Lo;0;L;;;;;N;;;;; 13176;EGYPTIAN HIEROGLYPH G046;Lo;0;L;;;;;N;;;;; 13177;EGYPTIAN HIEROGLYPH G047;Lo;0;L;;;;;N;;;;; 13178;EGYPTIAN HIEROGLYPH G048;Lo;0;L;;;;;N;;;;; 13179;EGYPTIAN HIEROGLYPH G049;Lo;0;L;;;;;N;;;;; 1317A;EGYPTIAN HIEROGLYPH G050;Lo;0;L;;;;;N;;;;; 1317B;EGYPTIAN HIEROGLYPH G051;Lo;0;L;;;;;N;;;;; 1317C;EGYPTIAN HIEROGLYPH G052;Lo;0;L;;;;;N;;;;; 1317D;EGYPTIAN HIEROGLYPH G053;Lo;0;L;;;;;N;;;;; 1317E;EGYPTIAN HIEROGLYPH G054;Lo;0;L;;;;;N;;;;; 1317F;EGYPTIAN HIEROGLYPH H001;Lo;0;L;;;;;N;;;;; 13180;EGYPTIAN HIEROGLYPH H002;Lo;0;L;;;;;N;;;;; 13181;EGYPTIAN HIEROGLYPH H003;Lo;0;L;;;;;N;;;;; 13182;EGYPTIAN HIEROGLYPH H004;Lo;0;L;;;;;N;;;;; 13183;EGYPTIAN HIEROGLYPH H005;Lo;0;L;;;;;N;;;;; 13184;EGYPTIAN HIEROGLYPH H006;Lo;0;L;;;;;N;;;;; 13185;EGYPTIAN HIEROGLYPH H006A;Lo;0;L;;;;;N;;;;; 13186;EGYPTIAN HIEROGLYPH H007;Lo;0;L;;;;;N;;;;; 13187;EGYPTIAN HIEROGLYPH H008;Lo;0;L;;;;;N;;;;; 13188;EGYPTIAN HIEROGLYPH I001;Lo;0;L;;;;;N;;;;; 13189;EGYPTIAN HIEROGLYPH I002;Lo;0;L;;;;;N;;;;; 1318A;EGYPTIAN HIEROGLYPH I003;Lo;0;L;;;;;N;;;;; 1318B;EGYPTIAN HIEROGLYPH I004;Lo;0;L;;;;;N;;;;; 1318C;EGYPTIAN HIEROGLYPH I005;Lo;0;L;;;;;N;;;;; 1318D;EGYPTIAN HIEROGLYPH I005A;Lo;0;L;;;;;N;;;;; 1318E;EGYPTIAN HIEROGLYPH I006;Lo;0;L;;;;;N;;;;; 1318F;EGYPTIAN HIEROGLYPH I007;Lo;0;L;;;;;N;;;;; 13190;EGYPTIAN HIEROGLYPH I008;Lo;0;L;;;;;N;;;;; 13191;EGYPTIAN HIEROGLYPH I009;Lo;0;L;;;;;N;;;;; 13192;EGYPTIAN HIEROGLYPH I009A;Lo;0;L;;;;;N;;;;; 13193;EGYPTIAN HIEROGLYPH I010;Lo;0;L;;;;;N;;;;; 13194;EGYPTIAN HIEROGLYPH I010A;Lo;0;L;;;;;N;;;;; 13195;EGYPTIAN HIEROGLYPH I011;Lo;0;L;;;;;N;;;;; 13196;EGYPTIAN HIEROGLYPH I011A;Lo;0;L;;;;;N;;;;; 13197;EGYPTIAN HIEROGLYPH I012;Lo;0;L;;;;;N;;;;; 13198;EGYPTIAN HIEROGLYPH I013;Lo;0;L;;;;;N;;;;; 13199;EGYPTIAN HIEROGLYPH I014;Lo;0;L;;;;;N;;;;; 1319A;EGYPTIAN HIEROGLYPH I015;Lo;0;L;;;;;N;;;;; 1319B;EGYPTIAN HIEROGLYPH K001;Lo;0;L;;;;;N;;;;; 1319C;EGYPTIAN HIEROGLYPH K002;Lo;0;L;;;;;N;;;;; 1319D;EGYPTIAN HIEROGLYPH K003;Lo;0;L;;;;;N;;;;; 1319E;EGYPTIAN HIEROGLYPH K004;Lo;0;L;;;;;N;;;;; 1319F;EGYPTIAN HIEROGLYPH K005;Lo;0;L;;;;;N;;;;; 131A0;EGYPTIAN HIEROGLYPH K006;Lo;0;L;;;;;N;;;;; 131A1;EGYPTIAN HIEROGLYPH K007;Lo;0;L;;;;;N;;;;; 131A2;EGYPTIAN HIEROGLYPH K008;Lo;0;L;;;;;N;;;;; 131A3;EGYPTIAN HIEROGLYPH L001;Lo;0;L;;;;;N;;;;; 131A4;EGYPTIAN HIEROGLYPH L002;Lo;0;L;;;;;N;;;;; 131A5;EGYPTIAN HIEROGLYPH L002A;Lo;0;L;;;;;N;;;;; 131A6;EGYPTIAN HIEROGLYPH L003;Lo;0;L;;;;;N;;;;; 131A7;EGYPTIAN HIEROGLYPH L004;Lo;0;L;;;;;N;;;;; 131A8;EGYPTIAN HIEROGLYPH L005;Lo;0;L;;;;;N;;;;; 131A9;EGYPTIAN HIEROGLYPH L006;Lo;0;L;;;;;N;;;;; 131AA;EGYPTIAN HIEROGLYPH L006A;Lo;0;L;;;;;N;;;;; 131AB;EGYPTIAN HIEROGLYPH L007;Lo;0;L;;;;;N;;;;; 131AC;EGYPTIAN HIEROGLYPH L008;Lo;0;L;;;;;N;;;;; 131AD;EGYPTIAN HIEROGLYPH M001;Lo;0;L;;;;;N;;;;; 131AE;EGYPTIAN HIEROGLYPH M001A;Lo;0;L;;;;;N;;;;; 131AF;EGYPTIAN HIEROGLYPH M001B;Lo;0;L;;;;;N;;;;; 131B0;EGYPTIAN HIEROGLYPH M002;Lo;0;L;;;;;N;;;;; 131B1;EGYPTIAN HIEROGLYPH M003;Lo;0;L;;;;;N;;;;; 131B2;EGYPTIAN HIEROGLYPH M003A;Lo;0;L;;;;;N;;;;; 131B3;EGYPTIAN HIEROGLYPH M004;Lo;0;L;;;;;N;;;;; 131B4;EGYPTIAN HIEROGLYPH M005;Lo;0;L;;;;;N;;;;; 131B5;EGYPTIAN HIEROGLYPH M006;Lo;0;L;;;;;N;;;;; 131B6;EGYPTIAN HIEROGLYPH M007;Lo;0;L;;;;;N;;;;; 131B7;EGYPTIAN HIEROGLYPH M008;Lo;0;L;;;;;N;;;;; 131B8;EGYPTIAN HIEROGLYPH M009;Lo;0;L;;;;;N;;;;; 131B9;EGYPTIAN HIEROGLYPH M010;Lo;0;L;;;;;N;;;;; 131BA;EGYPTIAN HIEROGLYPH M010A;Lo;0;L;;;;;N;;;;; 131BB;EGYPTIAN HIEROGLYPH M011;Lo;0;L;;;;;N;;;;; 131BC;EGYPTIAN HIEROGLYPH M012;Lo;0;L;;;;;N;;;;; 131BD;EGYPTIAN HIEROGLYPH M012A;Lo;0;L;;;;;N;;;;; 131BE;EGYPTIAN HIEROGLYPH M012B;Lo;0;L;;;;;N;;;;; 131BF;EGYPTIAN HIEROGLYPH M012C;Lo;0;L;;;;;N;;;;; 131C0;EGYPTIAN HIEROGLYPH M012D;Lo;0;L;;;;;N;;;;; 131C1;EGYPTIAN HIEROGLYPH M012E;Lo;0;L;;;;;N;;;;; 131C2;EGYPTIAN HIEROGLYPH M012F;Lo;0;L;;;;;N;;;;; 131C3;EGYPTIAN HIEROGLYPH M012G;Lo;0;L;;;;;N;;;;; 131C4;EGYPTIAN HIEROGLYPH M012H;Lo;0;L;;;;;N;;;;; 131C5;EGYPTIAN HIEROGLYPH M013;Lo;0;L;;;;;N;;;;; 131C6;EGYPTIAN HIEROGLYPH M014;Lo;0;L;;;;;N;;;;; 131C7;EGYPTIAN HIEROGLYPH M015;Lo;0;L;;;;;N;;;;; 131C8;EGYPTIAN HIEROGLYPH M015A;Lo;0;L;;;;;N;;;;; 131C9;EGYPTIAN HIEROGLYPH M016;Lo;0;L;;;;;N;;;;; 131CA;EGYPTIAN HIEROGLYPH M016A;Lo;0;L;;;;;N;;;;; 131CB;EGYPTIAN HIEROGLYPH M017;Lo;0;L;;;;;N;;;;; 131CC;EGYPTIAN HIEROGLYPH M017A;Lo;0;L;;;;;N;;;;; 131CD;EGYPTIAN HIEROGLYPH M018;Lo;0;L;;;;;N;;;;; 131CE;EGYPTIAN HIEROGLYPH M019;Lo;0;L;;;;;N;;;;; 131CF;EGYPTIAN HIEROGLYPH M020;Lo;0;L;;;;;N;;;;; 131D0;EGYPTIAN HIEROGLYPH M021;Lo;0;L;;;;;N;;;;; 131D1;EGYPTIAN HIEROGLYPH M022;Lo;0;L;;;;;N;;;;; 131D2;EGYPTIAN HIEROGLYPH M022A;Lo;0;L;;;;;N;;;;; 131D3;EGYPTIAN HIEROGLYPH M023;Lo;0;L;;;;;N;;;;; 131D4;EGYPTIAN HIEROGLYPH M024;Lo;0;L;;;;;N;;;;; 131D5;EGYPTIAN HIEROGLYPH M024A;Lo;0;L;;;;;N;;;;; 131D6;EGYPTIAN HIEROGLYPH M025;Lo;0;L;;;;;N;;;;; 131D7;EGYPTIAN HIEROGLYPH M026;Lo;0;L;;;;;N;;;;; 131D8;EGYPTIAN HIEROGLYPH M027;Lo;0;L;;;;;N;;;;; 131D9;EGYPTIAN HIEROGLYPH M028;Lo;0;L;;;;;N;;;;; 131DA;EGYPTIAN HIEROGLYPH M028A;Lo;0;L;;;;;N;;;;; 131DB;EGYPTIAN HIEROGLYPH M029;Lo;0;L;;;;;N;;;;; 131DC;EGYPTIAN HIEROGLYPH M030;Lo;0;L;;;;;N;;;;; 131DD;EGYPTIAN HIEROGLYPH M031;Lo;0;L;;;;;N;;;;; 131DE;EGYPTIAN HIEROGLYPH M031A;Lo;0;L;;;;;N;;;;; 131DF;EGYPTIAN HIEROGLYPH M032;Lo;0;L;;;;;N;;;;; 131E0;EGYPTIAN HIEROGLYPH M033;Lo;0;L;;;;;N;;;;; 131E1;EGYPTIAN HIEROGLYPH M033A;Lo;0;L;;;;;N;;;;; 131E2;EGYPTIAN HIEROGLYPH M033B;Lo;0;L;;;;;N;;;;; 131E3;EGYPTIAN HIEROGLYPH M034;Lo;0;L;;;;;N;;;;; 131E4;EGYPTIAN HIEROGLYPH M035;Lo;0;L;;;;;N;;;;; 131E5;EGYPTIAN HIEROGLYPH M036;Lo;0;L;;;;;N;;;;; 131E6;EGYPTIAN HIEROGLYPH M037;Lo;0;L;;;;;N;;;;; 131E7;EGYPTIAN HIEROGLYPH M038;Lo;0;L;;;;;N;;;;; 131E8;EGYPTIAN HIEROGLYPH M039;Lo;0;L;;;;;N;;;;; 131E9;EGYPTIAN HIEROGLYPH M040;Lo;0;L;;;;;N;;;;; 131EA;EGYPTIAN HIEROGLYPH M040A;Lo;0;L;;;;;N;;;;; 131EB;EGYPTIAN HIEROGLYPH M041;Lo;0;L;;;;;N;;;;; 131EC;EGYPTIAN HIEROGLYPH M042;Lo;0;L;;;;;N;;;;; 131ED;EGYPTIAN HIEROGLYPH M043;Lo;0;L;;;;;N;;;;; 131EE;EGYPTIAN HIEROGLYPH M044;Lo;0;L;;;;;N;;;;; 131EF;EGYPTIAN HIEROGLYPH N001;Lo;0;L;;;;;N;;;;; 131F0;EGYPTIAN HIEROGLYPH N002;Lo;0;L;;;;;N;;;;; 131F1;EGYPTIAN HIEROGLYPH N003;Lo;0;L;;;;;N;;;;; 131F2;EGYPTIAN HIEROGLYPH N004;Lo;0;L;;;;;N;;;;; 131F3;EGYPTIAN HIEROGLYPH N005;Lo;0;L;;;;;N;;;;; 131F4;EGYPTIAN HIEROGLYPH N006;Lo;0;L;;;;;N;;;;; 131F5;EGYPTIAN HIEROGLYPH N007;Lo;0;L;;;;;N;;;;; 131F6;EGYPTIAN HIEROGLYPH N008;Lo;0;L;;;;;N;;;;; 131F7;EGYPTIAN HIEROGLYPH N009;Lo;0;L;;;;;N;;;;; 131F8;EGYPTIAN HIEROGLYPH N010;Lo;0;L;;;;;N;;;;; 131F9;EGYPTIAN HIEROGLYPH N011;Lo;0;L;;;;;N;;;;; 131FA;EGYPTIAN HIEROGLYPH N012;Lo;0;L;;;;;N;;;;; 131FB;EGYPTIAN HIEROGLYPH N013;Lo;0;L;;;;;N;;;;; 131FC;EGYPTIAN HIEROGLYPH N014;Lo;0;L;;;;;N;;;;; 131FD;EGYPTIAN HIEROGLYPH N015;Lo;0;L;;;;;N;;;;; 131FE;EGYPTIAN HIEROGLYPH N016;Lo;0;L;;;;;N;;;;; 131FF;EGYPTIAN HIEROGLYPH N017;Lo;0;L;;;;;N;;;;; 13200;EGYPTIAN HIEROGLYPH N018;Lo;0;L;;;;;N;;;;; 13201;EGYPTIAN HIEROGLYPH N018A;Lo;0;L;;;;;N;;;;; 13202;EGYPTIAN HIEROGLYPH N018B;Lo;0;L;;;;;N;;;;; 13203;EGYPTIAN HIEROGLYPH N019;Lo;0;L;;;;;N;;;;; 13204;EGYPTIAN HIEROGLYPH N020;Lo;0;L;;;;;N;;;;; 13205;EGYPTIAN HIEROGLYPH N021;Lo;0;L;;;;;N;;;;; 13206;EGYPTIAN HIEROGLYPH N022;Lo;0;L;;;;;N;;;;; 13207;EGYPTIAN HIEROGLYPH N023;Lo;0;L;;;;;N;;;;; 13208;EGYPTIAN HIEROGLYPH N024;Lo;0;L;;;;;N;;;;; 13209;EGYPTIAN HIEROGLYPH N025;Lo;0;L;;;;;N;;;;; 1320A;EGYPTIAN HIEROGLYPH N025A;Lo;0;L;;;;;N;;;;; 1320B;EGYPTIAN HIEROGLYPH N026;Lo;0;L;;;;;N;;;;; 1320C;EGYPTIAN HIEROGLYPH N027;Lo;0;L;;;;;N;;;;; 1320D;EGYPTIAN HIEROGLYPH N028;Lo;0;L;;;;;N;;;;; 1320E;EGYPTIAN HIEROGLYPH N029;Lo;0;L;;;;;N;;;;; 1320F;EGYPTIAN HIEROGLYPH N030;Lo;0;L;;;;;N;;;;; 13210;EGYPTIAN HIEROGLYPH N031;Lo;0;L;;;;;N;;;;; 13211;EGYPTIAN HIEROGLYPH N032;Lo;0;L;;;;;N;;;;; 13212;EGYPTIAN HIEROGLYPH N033;Lo;0;L;;;;;N;;;;; 13213;EGYPTIAN HIEROGLYPH N033A;Lo;0;L;;;;;N;;;;; 13214;EGYPTIAN HIEROGLYPH N034;Lo;0;L;;;;;N;;;;; 13215;EGYPTIAN HIEROGLYPH N034A;Lo;0;L;;;;;N;;;;; 13216;EGYPTIAN HIEROGLYPH N035;Lo;0;L;;;;;N;;;;; 13217;EGYPTIAN HIEROGLYPH N035A;Lo;0;L;;;;;N;;;;; 13218;EGYPTIAN HIEROGLYPH N036;Lo;0;L;;;;;N;;;;; 13219;EGYPTIAN HIEROGLYPH N037;Lo;0;L;;;;;N;;;;; 1321A;EGYPTIAN HIEROGLYPH N037A;Lo;0;L;;;;;N;;;;; 1321B;EGYPTIAN HIEROGLYPH N038;Lo;0;L;;;;;N;;;;; 1321C;EGYPTIAN HIEROGLYPH N039;Lo;0;L;;;;;N;;;;; 1321D;EGYPTIAN HIEROGLYPH N040;Lo;0;L;;;;;N;;;;; 1321E;EGYPTIAN HIEROGLYPH N041;Lo;0;L;;;;;N;;;;; 1321F;EGYPTIAN HIEROGLYPH N042;Lo;0;L;;;;;N;;;;; 13220;EGYPTIAN HIEROGLYPH NL001;Lo;0;L;;;;;N;;;;; 13221;EGYPTIAN HIEROGLYPH NL002;Lo;0;L;;;;;N;;;;; 13222;EGYPTIAN HIEROGLYPH NL003;Lo;0;L;;;;;N;;;;; 13223;EGYPTIAN HIEROGLYPH NL004;Lo;0;L;;;;;N;;;;; 13224;EGYPTIAN HIEROGLYPH NL005;Lo;0;L;;;;;N;;;;; 13225;EGYPTIAN HIEROGLYPH NL005A;Lo;0;L;;;;;N;;;;; 13226;EGYPTIAN HIEROGLYPH NL006;Lo;0;L;;;;;N;;;;; 13227;EGYPTIAN HIEROGLYPH NL007;Lo;0;L;;;;;N;;;;; 13228;EGYPTIAN HIEROGLYPH NL008;Lo;0;L;;;;;N;;;;; 13229;EGYPTIAN HIEROGLYPH NL009;Lo;0;L;;;;;N;;;;; 1322A;EGYPTIAN HIEROGLYPH NL010;Lo;0;L;;;;;N;;;;; 1322B;EGYPTIAN HIEROGLYPH NL011;Lo;0;L;;;;;N;;;;; 1322C;EGYPTIAN HIEROGLYPH NL012;Lo;0;L;;;;;N;;;;; 1322D;EGYPTIAN HIEROGLYPH NL013;Lo;0;L;;;;;N;;;;; 1322E;EGYPTIAN HIEROGLYPH NL014;Lo;0;L;;;;;N;;;;; 1322F;EGYPTIAN HIEROGLYPH NL015;Lo;0;L;;;;;N;;;;; 13230;EGYPTIAN HIEROGLYPH NL016;Lo;0;L;;;;;N;;;;; 13231;EGYPTIAN HIEROGLYPH NL017;Lo;0;L;;;;;N;;;;; 13232;EGYPTIAN HIEROGLYPH NL017A;Lo;0;L;;;;;N;;;;; 13233;EGYPTIAN HIEROGLYPH NL018;Lo;0;L;;;;;N;;;;; 13234;EGYPTIAN HIEROGLYPH NL019;Lo;0;L;;;;;N;;;;; 13235;EGYPTIAN HIEROGLYPH NL020;Lo;0;L;;;;;N;;;;; 13236;EGYPTIAN HIEROGLYPH NU001;Lo;0;L;;;;;N;;;;; 13237;EGYPTIAN HIEROGLYPH NU002;Lo;0;L;;;;;N;;;;; 13238;EGYPTIAN HIEROGLYPH NU003;Lo;0;L;;;;;N;;;;; 13239;EGYPTIAN HIEROGLYPH NU004;Lo;0;L;;;;;N;;;;; 1323A;EGYPTIAN HIEROGLYPH NU005;Lo;0;L;;;;;N;;;;; 1323B;EGYPTIAN HIEROGLYPH NU006;Lo;0;L;;;;;N;;;;; 1323C;EGYPTIAN HIEROGLYPH NU007;Lo;0;L;;;;;N;;;;; 1323D;EGYPTIAN HIEROGLYPH NU008;Lo;0;L;;;;;N;;;;; 1323E;EGYPTIAN HIEROGLYPH NU009;Lo;0;L;;;;;N;;;;; 1323F;EGYPTIAN HIEROGLYPH NU010;Lo;0;L;;;;;N;;;;; 13240;EGYPTIAN HIEROGLYPH NU010A;Lo;0;L;;;;;N;;;;; 13241;EGYPTIAN HIEROGLYPH NU011;Lo;0;L;;;;;N;;;;; 13242;EGYPTIAN HIEROGLYPH NU011A;Lo;0;L;;;;;N;;;;; 13243;EGYPTIAN HIEROGLYPH NU012;Lo;0;L;;;;;N;;;;; 13244;EGYPTIAN HIEROGLYPH NU013;Lo;0;L;;;;;N;;;;; 13245;EGYPTIAN HIEROGLYPH NU014;Lo;0;L;;;;;N;;;;; 13246;EGYPTIAN HIEROGLYPH NU015;Lo;0;L;;;;;N;;;;; 13247;EGYPTIAN HIEROGLYPH NU016;Lo;0;L;;;;;N;;;;; 13248;EGYPTIAN HIEROGLYPH NU017;Lo;0;L;;;;;N;;;;; 13249;EGYPTIAN HIEROGLYPH NU018;Lo;0;L;;;;;N;;;;; 1324A;EGYPTIAN HIEROGLYPH NU018A;Lo;0;L;;;;;N;;;;; 1324B;EGYPTIAN HIEROGLYPH NU019;Lo;0;L;;;;;N;;;;; 1324C;EGYPTIAN HIEROGLYPH NU020;Lo;0;L;;;;;N;;;;; 1324D;EGYPTIAN HIEROGLYPH NU021;Lo;0;L;;;;;N;;;;; 1324E;EGYPTIAN HIEROGLYPH NU022;Lo;0;L;;;;;N;;;;; 1324F;EGYPTIAN HIEROGLYPH NU022A;Lo;0;L;;;;;N;;;;; 13250;EGYPTIAN HIEROGLYPH O001;Lo;0;L;;;;;N;;;;; 13251;EGYPTIAN HIEROGLYPH O001A;Lo;0;L;;;;;N;;;;; 13252;EGYPTIAN HIEROGLYPH O002;Lo;0;L;;;;;N;;;;; 13253;EGYPTIAN HIEROGLYPH O003;Lo;0;L;;;;;N;;;;; 13254;EGYPTIAN HIEROGLYPH O004;Lo;0;L;;;;;N;;;;; 13255;EGYPTIAN HIEROGLYPH O005;Lo;0;L;;;;;N;;;;; 13256;EGYPTIAN HIEROGLYPH O005A;Lo;0;L;;;;;N;;;;; 13257;EGYPTIAN HIEROGLYPH O006;Lo;0;L;;;;;N;;;;; 13258;EGYPTIAN HIEROGLYPH O006A;Lo;0;L;;;;;N;;;;; 13259;EGYPTIAN HIEROGLYPH O006B;Lo;0;L;;;;;N;;;;; 1325A;EGYPTIAN HIEROGLYPH O006C;Lo;0;L;;;;;N;;;;; 1325B;EGYPTIAN HIEROGLYPH O006D;Lo;0;L;;;;;N;;;;; 1325C;EGYPTIAN HIEROGLYPH O006E;Lo;0;L;;;;;N;;;;; 1325D;EGYPTIAN HIEROGLYPH O006F;Lo;0;L;;;;;N;;;;; 1325E;EGYPTIAN HIEROGLYPH O007;Lo;0;L;;;;;N;;;;; 1325F;EGYPTIAN HIEROGLYPH O008;Lo;0;L;;;;;N;;;;; 13260;EGYPTIAN HIEROGLYPH O009;Lo;0;L;;;;;N;;;;; 13261;EGYPTIAN HIEROGLYPH O010;Lo;0;L;;;;;N;;;;; 13262;EGYPTIAN HIEROGLYPH O010A;Lo;0;L;;;;;N;;;;; 13263;EGYPTIAN HIEROGLYPH O010B;Lo;0;L;;;;;N;;;;; 13264;EGYPTIAN HIEROGLYPH O010C;Lo;0;L;;;;;N;;;;; 13265;EGYPTIAN HIEROGLYPH O011;Lo;0;L;;;;;N;;;;; 13266;EGYPTIAN HIEROGLYPH O012;Lo;0;L;;;;;N;;;;; 13267;EGYPTIAN HIEROGLYPH O013;Lo;0;L;;;;;N;;;;; 13268;EGYPTIAN HIEROGLYPH O014;Lo;0;L;;;;;N;;;;; 13269;EGYPTIAN HIEROGLYPH O015;Lo;0;L;;;;;N;;;;; 1326A;EGYPTIAN HIEROGLYPH O016;Lo;0;L;;;;;N;;;;; 1326B;EGYPTIAN HIEROGLYPH O017;Lo;0;L;;;;;N;;;;; 1326C;EGYPTIAN HIEROGLYPH O018;Lo;0;L;;;;;N;;;;; 1326D;EGYPTIAN HIEROGLYPH O019;Lo;0;L;;;;;N;;;;; 1326E;EGYPTIAN HIEROGLYPH O019A;Lo;0;L;;;;;N;;;;; 1326F;EGYPTIAN HIEROGLYPH O020;Lo;0;L;;;;;N;;;;; 13270;EGYPTIAN HIEROGLYPH O020A;Lo;0;L;;;;;N;;;;; 13271;EGYPTIAN HIEROGLYPH O021;Lo;0;L;;;;;N;;;;; 13272;EGYPTIAN HIEROGLYPH O022;Lo;0;L;;;;;N;;;;; 13273;EGYPTIAN HIEROGLYPH O023;Lo;0;L;;;;;N;;;;; 13274;EGYPTIAN HIEROGLYPH O024;Lo;0;L;;;;;N;;;;; 13275;EGYPTIAN HIEROGLYPH O024A;Lo;0;L;;;;;N;;;;; 13276;EGYPTIAN HIEROGLYPH O025;Lo;0;L;;;;;N;;;;; 13277;EGYPTIAN HIEROGLYPH O025A;Lo;0;L;;;;;N;;;;; 13278;EGYPTIAN HIEROGLYPH O026;Lo;0;L;;;;;N;;;;; 13279;EGYPTIAN HIEROGLYPH O027;Lo;0;L;;;;;N;;;;; 1327A;EGYPTIAN HIEROGLYPH O028;Lo;0;L;;;;;N;;;;; 1327B;EGYPTIAN HIEROGLYPH O029;Lo;0;L;;;;;N;;;;; 1327C;EGYPTIAN HIEROGLYPH O029A;Lo;0;L;;;;;N;;;;; 1327D;EGYPTIAN HIEROGLYPH O030;Lo;0;L;;;;;N;;;;; 1327E;EGYPTIAN HIEROGLYPH O030A;Lo;0;L;;;;;N;;;;; 1327F;EGYPTIAN HIEROGLYPH O031;Lo;0;L;;;;;N;;;;; 13280;EGYPTIAN HIEROGLYPH O032;Lo;0;L;;;;;N;;;;; 13281;EGYPTIAN HIEROGLYPH O033;Lo;0;L;;;;;N;;;;; 13282;EGYPTIAN HIEROGLYPH O033A;Lo;0;L;;;;;N;;;;; 13283;EGYPTIAN HIEROGLYPH O034;Lo;0;L;;;;;N;;;;; 13284;EGYPTIAN HIEROGLYPH O035;Lo;0;L;;;;;N;;;;; 13285;EGYPTIAN HIEROGLYPH O036;Lo;0;L;;;;;N;;;;; 13286;EGYPTIAN HIEROGLYPH O036A;Lo;0;L;;;;;N;;;;; 13287;EGYPTIAN HIEROGLYPH O036B;Lo;0;L;;;;;N;;;;; 13288;EGYPTIAN HIEROGLYPH O036C;Lo;0;L;;;;;N;;;;; 13289;EGYPTIAN HIEROGLYPH O036D;Lo;0;L;;;;;N;;;;; 1328A;EGYPTIAN HIEROGLYPH O037;Lo;0;L;;;;;N;;;;; 1328B;EGYPTIAN HIEROGLYPH O038;Lo;0;L;;;;;N;;;;; 1328C;EGYPTIAN HIEROGLYPH O039;Lo;0;L;;;;;N;;;;; 1328D;EGYPTIAN HIEROGLYPH O040;Lo;0;L;;;;;N;;;;; 1328E;EGYPTIAN HIEROGLYPH O041;Lo;0;L;;;;;N;;;;; 1328F;EGYPTIAN HIEROGLYPH O042;Lo;0;L;;;;;N;;;;; 13290;EGYPTIAN HIEROGLYPH O043;Lo;0;L;;;;;N;;;;; 13291;EGYPTIAN HIEROGLYPH O044;Lo;0;L;;;;;N;;;;; 13292;EGYPTIAN HIEROGLYPH O045;Lo;0;L;;;;;N;;;;; 13293;EGYPTIAN HIEROGLYPH O046;Lo;0;L;;;;;N;;;;; 13294;EGYPTIAN HIEROGLYPH O047;Lo;0;L;;;;;N;;;;; 13295;EGYPTIAN HIEROGLYPH O048;Lo;0;L;;;;;N;;;;; 13296;EGYPTIAN HIEROGLYPH O049;Lo;0;L;;;;;N;;;;; 13297;EGYPTIAN HIEROGLYPH O050;Lo;0;L;;;;;N;;;;; 13298;EGYPTIAN HIEROGLYPH O050A;Lo;0;L;;;;;N;;;;; 13299;EGYPTIAN HIEROGLYPH O050B;Lo;0;L;;;;;N;;;;; 1329A;EGYPTIAN HIEROGLYPH O051;Lo;0;L;;;;;N;;;;; 1329B;EGYPTIAN HIEROGLYPH P001;Lo;0;L;;;;;N;;;;; 1329C;EGYPTIAN HIEROGLYPH P001A;Lo;0;L;;;;;N;;;;; 1329D;EGYPTIAN HIEROGLYPH P002;Lo;0;L;;;;;N;;;;; 1329E;EGYPTIAN HIEROGLYPH P003;Lo;0;L;;;;;N;;;;; 1329F;EGYPTIAN HIEROGLYPH P003A;Lo;0;L;;;;;N;;;;; 132A0;EGYPTIAN HIEROGLYPH P004;Lo;0;L;;;;;N;;;;; 132A1;EGYPTIAN HIEROGLYPH P005;Lo;0;L;;;;;N;;;;; 132A2;EGYPTIAN HIEROGLYPH P006;Lo;0;L;;;;;N;;;;; 132A3;EGYPTIAN HIEROGLYPH P007;Lo;0;L;;;;;N;;;;; 132A4;EGYPTIAN HIEROGLYPH P008;Lo;0;L;;;;;N;;;;; 132A5;EGYPTIAN HIEROGLYPH P009;Lo;0;L;;;;;N;;;;; 132A6;EGYPTIAN HIEROGLYPH P010;Lo;0;L;;;;;N;;;;; 132A7;EGYPTIAN HIEROGLYPH P011;Lo;0;L;;;;;N;;;;; 132A8;EGYPTIAN HIEROGLYPH Q001;Lo;0;L;;;;;N;;;;; 132A9;EGYPTIAN HIEROGLYPH Q002;Lo;0;L;;;;;N;;;;; 132AA;EGYPTIAN HIEROGLYPH Q003;Lo;0;L;;;;;N;;;;; 132AB;EGYPTIAN HIEROGLYPH Q004;Lo;0;L;;;;;N;;;;; 132AC;EGYPTIAN HIEROGLYPH Q005;Lo;0;L;;;;;N;;;;; 132AD;EGYPTIAN HIEROGLYPH Q006;Lo;0;L;;;;;N;;;;; 132AE;EGYPTIAN HIEROGLYPH Q007;Lo;0;L;;;;;N;;;;; 132AF;EGYPTIAN HIEROGLYPH R001;Lo;0;L;;;;;N;;;;; 132B0;EGYPTIAN HIEROGLYPH R002;Lo;0;L;;;;;N;;;;; 132B1;EGYPTIAN HIEROGLYPH R002A;Lo;0;L;;;;;N;;;;; 132B2;EGYPTIAN HIEROGLYPH R003;Lo;0;L;;;;;N;;;;; 132B3;EGYPTIAN HIEROGLYPH R003A;Lo;0;L;;;;;N;;;;; 132B4;EGYPTIAN HIEROGLYPH R003B;Lo;0;L;;;;;N;;;;; 132B5;EGYPTIAN HIEROGLYPH R004;Lo;0;L;;;;;N;;;;; 132B6;EGYPTIAN HIEROGLYPH R005;Lo;0;L;;;;;N;;;;; 132B7;EGYPTIAN HIEROGLYPH R006;Lo;0;L;;;;;N;;;;; 132B8;EGYPTIAN HIEROGLYPH R007;Lo;0;L;;;;;N;;;;; 132B9;EGYPTIAN HIEROGLYPH R008;Lo;0;L;;;;;N;;;;; 132BA;EGYPTIAN HIEROGLYPH R009;Lo;0;L;;;;;N;;;;; 132BB;EGYPTIAN HIEROGLYPH R010;Lo;0;L;;;;;N;;;;; 132BC;EGYPTIAN HIEROGLYPH R010A;Lo;0;L;;;;;N;;;;; 132BD;EGYPTIAN HIEROGLYPH R011;Lo;0;L;;;;;N;;;;; 132BE;EGYPTIAN HIEROGLYPH R012;Lo;0;L;;;;;N;;;;; 132BF;EGYPTIAN HIEROGLYPH R013;Lo;0;L;;;;;N;;;;; 132C0;EGYPTIAN HIEROGLYPH R014;Lo;0;L;;;;;N;;;;; 132C1;EGYPTIAN HIEROGLYPH R015;Lo;0;L;;;;;N;;;;; 132C2;EGYPTIAN HIEROGLYPH R016;Lo;0;L;;;;;N;;;;; 132C3;EGYPTIAN HIEROGLYPH R016A;Lo;0;L;;;;;N;;;;; 132C4;EGYPTIAN HIEROGLYPH R017;Lo;0;L;;;;;N;;;;; 132C5;EGYPTIAN HIEROGLYPH R018;Lo;0;L;;;;;N;;;;; 132C6;EGYPTIAN HIEROGLYPH R019;Lo;0;L;;;;;N;;;;; 132C7;EGYPTIAN HIEROGLYPH R020;Lo;0;L;;;;;N;;;;; 132C8;EGYPTIAN HIEROGLYPH R021;Lo;0;L;;;;;N;;;;; 132C9;EGYPTIAN HIEROGLYPH R022;Lo;0;L;;;;;N;;;;; 132CA;EGYPTIAN HIEROGLYPH R023;Lo;0;L;;;;;N;;;;; 132CB;EGYPTIAN HIEROGLYPH R024;Lo;0;L;;;;;N;;;;; 132CC;EGYPTIAN HIEROGLYPH R025;Lo;0;L;;;;;N;;;;; 132CD;EGYPTIAN HIEROGLYPH R026;Lo;0;L;;;;;N;;;;; 132CE;EGYPTIAN HIEROGLYPH R027;Lo;0;L;;;;;N;;;;; 132CF;EGYPTIAN HIEROGLYPH R028;Lo;0;L;;;;;N;;;;; 132D0;EGYPTIAN HIEROGLYPH R029;Lo;0;L;;;;;N;;;;; 132D1;EGYPTIAN HIEROGLYPH S001;Lo;0;L;;;;;N;;;;; 132D2;EGYPTIAN HIEROGLYPH S002;Lo;0;L;;;;;N;;;;; 132D3;EGYPTIAN HIEROGLYPH S002A;Lo;0;L;;;;;N;;;;; 132D4;EGYPTIAN HIEROGLYPH S003;Lo;0;L;;;;;N;;;;; 132D5;EGYPTIAN HIEROGLYPH S004;Lo;0;L;;;;;N;;;;; 132D6;EGYPTIAN HIEROGLYPH S005;Lo;0;L;;;;;N;;;;; 132D7;EGYPTIAN HIEROGLYPH S006;Lo;0;L;;;;;N;;;;; 132D8;EGYPTIAN HIEROGLYPH S006A;Lo;0;L;;;;;N;;;;; 132D9;EGYPTIAN HIEROGLYPH S007;Lo;0;L;;;;;N;;;;; 132DA;EGYPTIAN HIEROGLYPH S008;Lo;0;L;;;;;N;;;;; 132DB;EGYPTIAN HIEROGLYPH S009;Lo;0;L;;;;;N;;;;; 132DC;EGYPTIAN HIEROGLYPH S010;Lo;0;L;;;;;N;;;;; 132DD;EGYPTIAN HIEROGLYPH S011;Lo;0;L;;;;;N;;;;; 132DE;EGYPTIAN HIEROGLYPH S012;Lo;0;L;;;;;N;;;;; 132DF;EGYPTIAN HIEROGLYPH S013;Lo;0;L;;;;;N;;;;; 132E0;EGYPTIAN HIEROGLYPH S014;Lo;0;L;;;;;N;;;;; 132E1;EGYPTIAN HIEROGLYPH S014A;Lo;0;L;;;;;N;;;;; 132E2;EGYPTIAN HIEROGLYPH S014B;Lo;0;L;;;;;N;;;;; 132E3;EGYPTIAN HIEROGLYPH S015;Lo;0;L;;;;;N;;;;; 132E4;EGYPTIAN HIEROGLYPH S016;Lo;0;L;;;;;N;;;;; 132E5;EGYPTIAN HIEROGLYPH S017;Lo;0;L;;;;;N;;;;; 132E6;EGYPTIAN HIEROGLYPH S017A;Lo;0;L;;;;;N;;;;; 132E7;EGYPTIAN HIEROGLYPH S018;Lo;0;L;;;;;N;;;;; 132E8;EGYPTIAN HIEROGLYPH S019;Lo;0;L;;;;;N;;;;; 132E9;EGYPTIAN HIEROGLYPH S020;Lo;0;L;;;;;N;;;;; 132EA;EGYPTIAN HIEROGLYPH S021;Lo;0;L;;;;;N;;;;; 132EB;EGYPTIAN HIEROGLYPH S022;Lo;0;L;;;;;N;;;;; 132EC;EGYPTIAN HIEROGLYPH S023;Lo;0;L;;;;;N;;;;; 132ED;EGYPTIAN HIEROGLYPH S024;Lo;0;L;;;;;N;;;;; 132EE;EGYPTIAN HIEROGLYPH S025;Lo;0;L;;;;;N;;;;; 132EF;EGYPTIAN HIEROGLYPH S026;Lo;0;L;;;;;N;;;;; 132F0;EGYPTIAN HIEROGLYPH S026A;Lo;0;L;;;;;N;;;;; 132F1;EGYPTIAN HIEROGLYPH S026B;Lo;0;L;;;;;N;;;;; 132F2;EGYPTIAN HIEROGLYPH S027;Lo;0;L;;;;;N;;;;; 132F3;EGYPTIAN HIEROGLYPH S028;Lo;0;L;;;;;N;;;;; 132F4;EGYPTIAN HIEROGLYPH S029;Lo;0;L;;;;;N;;;;; 132F5;EGYPTIAN HIEROGLYPH S030;Lo;0;L;;;;;N;;;;; 132F6;EGYPTIAN HIEROGLYPH S031;Lo;0;L;;;;;N;;;;; 132F7;EGYPTIAN HIEROGLYPH S032;Lo;0;L;;;;;N;;;;; 132F8;EGYPTIAN HIEROGLYPH S033;Lo;0;L;;;;;N;;;;; 132F9;EGYPTIAN HIEROGLYPH S034;Lo;0;L;;;;;N;;;;; 132FA;EGYPTIAN HIEROGLYPH S035;Lo;0;L;;;;;N;;;;; 132FB;EGYPTIAN HIEROGLYPH S035A;Lo;0;L;;;;;N;;;;; 132FC;EGYPTIAN HIEROGLYPH S036;Lo;0;L;;;;;N;;;;; 132FD;EGYPTIAN HIEROGLYPH S037;Lo;0;L;;;;;N;;;;; 132FE;EGYPTIAN HIEROGLYPH S038;Lo;0;L;;;;;N;;;;; 132FF;EGYPTIAN HIEROGLYPH S039;Lo;0;L;;;;;N;;;;; 13300;EGYPTIAN HIEROGLYPH S040;Lo;0;L;;;;;N;;;;; 13301;EGYPTIAN HIEROGLYPH S041;Lo;0;L;;;;;N;;;;; 13302;EGYPTIAN HIEROGLYPH S042;Lo;0;L;;;;;N;;;;; 13303;EGYPTIAN HIEROGLYPH S043;Lo;0;L;;;;;N;;;;; 13304;EGYPTIAN HIEROGLYPH S044;Lo;0;L;;;;;N;;;;; 13305;EGYPTIAN HIEROGLYPH S045;Lo;0;L;;;;;N;;;;; 13306;EGYPTIAN HIEROGLYPH S046;Lo;0;L;;;;;N;;;;; 13307;EGYPTIAN HIEROGLYPH T001;Lo;0;L;;;;;N;;;;; 13308;EGYPTIAN HIEROGLYPH T002;Lo;0;L;;;;;N;;;;; 13309;EGYPTIAN HIEROGLYPH T003;Lo;0;L;;;;;N;;;;; 1330A;EGYPTIAN HIEROGLYPH T003A;Lo;0;L;;;;;N;;;;; 1330B;EGYPTIAN HIEROGLYPH T004;Lo;0;L;;;;;N;;;;; 1330C;EGYPTIAN HIEROGLYPH T005;Lo;0;L;;;;;N;;;;; 1330D;EGYPTIAN HIEROGLYPH T006;Lo;0;L;;;;;N;;;;; 1330E;EGYPTIAN HIEROGLYPH T007;Lo;0;L;;;;;N;;;;; 1330F;EGYPTIAN HIEROGLYPH T007A;Lo;0;L;;;;;N;;;;; 13310;EGYPTIAN HIEROGLYPH T008;Lo;0;L;;;;;N;;;;; 13311;EGYPTIAN HIEROGLYPH T008A;Lo;0;L;;;;;N;;;;; 13312;EGYPTIAN HIEROGLYPH T009;Lo;0;L;;;;;N;;;;; 13313;EGYPTIAN HIEROGLYPH T009A;Lo;0;L;;;;;N;;;;; 13314;EGYPTIAN HIEROGLYPH T010;Lo;0;L;;;;;N;;;;; 13315;EGYPTIAN HIEROGLYPH T011;Lo;0;L;;;;;N;;;;; 13316;EGYPTIAN HIEROGLYPH T011A;Lo;0;L;;;;;N;;;;; 13317;EGYPTIAN HIEROGLYPH T012;Lo;0;L;;;;;N;;;;; 13318;EGYPTIAN HIEROGLYPH T013;Lo;0;L;;;;;N;;;;; 13319;EGYPTIAN HIEROGLYPH T014;Lo;0;L;;;;;N;;;;; 1331A;EGYPTIAN HIEROGLYPH T015;Lo;0;L;;;;;N;;;;; 1331B;EGYPTIAN HIEROGLYPH T016;Lo;0;L;;;;;N;;;;; 1331C;EGYPTIAN HIEROGLYPH T016A;Lo;0;L;;;;;N;;;;; 1331D;EGYPTIAN HIEROGLYPH T017;Lo;0;L;;;;;N;;;;; 1331E;EGYPTIAN HIEROGLYPH T018;Lo;0;L;;;;;N;;;;; 1331F;EGYPTIAN HIEROGLYPH T019;Lo;0;L;;;;;N;;;;; 13320;EGYPTIAN HIEROGLYPH T020;Lo;0;L;;;;;N;;;;; 13321;EGYPTIAN HIEROGLYPH T021;Lo;0;L;;;;;N;;;;; 13322;EGYPTIAN HIEROGLYPH T022;Lo;0;L;;;;;N;;;;; 13323;EGYPTIAN HIEROGLYPH T023;Lo;0;L;;;;;N;;;;; 13324;EGYPTIAN HIEROGLYPH T024;Lo;0;L;;;;;N;;;;; 13325;EGYPTIAN HIEROGLYPH T025;Lo;0;L;;;;;N;;;;; 13326;EGYPTIAN HIEROGLYPH T026;Lo;0;L;;;;;N;;;;; 13327;EGYPTIAN HIEROGLYPH T027;Lo;0;L;;;;;N;;;;; 13328;EGYPTIAN HIEROGLYPH T028;Lo;0;L;;;;;N;;;;; 13329;EGYPTIAN HIEROGLYPH T029;Lo;0;L;;;;;N;;;;; 1332A;EGYPTIAN HIEROGLYPH T030;Lo;0;L;;;;;N;;;;; 1332B;EGYPTIAN HIEROGLYPH T031;Lo;0;L;;;;;N;;;;; 1332C;EGYPTIAN HIEROGLYPH T032;Lo;0;L;;;;;N;;;;; 1332D;EGYPTIAN HIEROGLYPH T032A;Lo;0;L;;;;;N;;;;; 1332E;EGYPTIAN HIEROGLYPH T033;Lo;0;L;;;;;N;;;;; 1332F;EGYPTIAN HIEROGLYPH T033A;Lo;0;L;;;;;N;;;;; 13330;EGYPTIAN HIEROGLYPH T034;Lo;0;L;;;;;N;;;;; 13331;EGYPTIAN HIEROGLYPH T035;Lo;0;L;;;;;N;;;;; 13332;EGYPTIAN HIEROGLYPH T036;Lo;0;L;;;;;N;;;;; 13333;EGYPTIAN HIEROGLYPH U001;Lo;0;L;;;;;N;;;;; 13334;EGYPTIAN HIEROGLYPH U002;Lo;0;L;;;;;N;;;;; 13335;EGYPTIAN HIEROGLYPH U003;Lo;0;L;;;;;N;;;;; 13336;EGYPTIAN HIEROGLYPH U004;Lo;0;L;;;;;N;;;;; 13337;EGYPTIAN HIEROGLYPH U005;Lo;0;L;;;;;N;;;;; 13338;EGYPTIAN HIEROGLYPH U006;Lo;0;L;;;;;N;;;;; 13339;EGYPTIAN HIEROGLYPH U006A;Lo;0;L;;;;;N;;;;; 1333A;EGYPTIAN HIEROGLYPH U006B;Lo;0;L;;;;;N;;;;; 1333B;EGYPTIAN HIEROGLYPH U007;Lo;0;L;;;;;N;;;;; 1333C;EGYPTIAN HIEROGLYPH U008;Lo;0;L;;;;;N;;;;; 1333D;EGYPTIAN HIEROGLYPH U009;Lo;0;L;;;;;N;;;;; 1333E;EGYPTIAN HIEROGLYPH U010;Lo;0;L;;;;;N;;;;; 1333F;EGYPTIAN HIEROGLYPH U011;Lo;0;L;;;;;N;;;;; 13340;EGYPTIAN HIEROGLYPH U012;Lo;0;L;;;;;N;;;;; 13341;EGYPTIAN HIEROGLYPH U013;Lo;0;L;;;;;N;;;;; 13342;EGYPTIAN HIEROGLYPH U014;Lo;0;L;;;;;N;;;;; 13343;EGYPTIAN HIEROGLYPH U015;Lo;0;L;;;;;N;;;;; 13344;EGYPTIAN HIEROGLYPH U016;Lo;0;L;;;;;N;;;;; 13345;EGYPTIAN HIEROGLYPH U017;Lo;0;L;;;;;N;;;;; 13346;EGYPTIAN HIEROGLYPH U018;Lo;0;L;;;;;N;;;;; 13347;EGYPTIAN HIEROGLYPH U019;Lo;0;L;;;;;N;;;;; 13348;EGYPTIAN HIEROGLYPH U020;Lo;0;L;;;;;N;;;;; 13349;EGYPTIAN HIEROGLYPH U021;Lo;0;L;;;;;N;;;;; 1334A;EGYPTIAN HIEROGLYPH U022;Lo;0;L;;;;;N;;;;; 1334B;EGYPTIAN HIEROGLYPH U023;Lo;0;L;;;;;N;;;;; 1334C;EGYPTIAN HIEROGLYPH U023A;Lo;0;L;;;;;N;;;;; 1334D;EGYPTIAN HIEROGLYPH U024;Lo;0;L;;;;;N;;;;; 1334E;EGYPTIAN HIEROGLYPH U025;Lo;0;L;;;;;N;;;;; 1334F;EGYPTIAN HIEROGLYPH U026;Lo;0;L;;;;;N;;;;; 13350;EGYPTIAN HIEROGLYPH U027;Lo;0;L;;;;;N;;;;; 13351;EGYPTIAN HIEROGLYPH U028;Lo;0;L;;;;;N;;;;; 13352;EGYPTIAN HIEROGLYPH U029;Lo;0;L;;;;;N;;;;; 13353;EGYPTIAN HIEROGLYPH U029A;Lo;0;L;;;;;N;;;;; 13354;EGYPTIAN HIEROGLYPH U030;Lo;0;L;;;;;N;;;;; 13355;EGYPTIAN HIEROGLYPH U031;Lo;0;L;;;;;N;;;;; 13356;EGYPTIAN HIEROGLYPH U032;Lo;0;L;;;;;N;;;;; 13357;EGYPTIAN HIEROGLYPH U032A;Lo;0;L;;;;;N;;;;; 13358;EGYPTIAN HIEROGLYPH U033;Lo;0;L;;;;;N;;;;; 13359;EGYPTIAN HIEROGLYPH U034;Lo;0;L;;;;;N;;;;; 1335A;EGYPTIAN HIEROGLYPH U035;Lo;0;L;;;;;N;;;;; 1335B;EGYPTIAN HIEROGLYPH U036;Lo;0;L;;;;;N;;;;; 1335C;EGYPTIAN HIEROGLYPH U037;Lo;0;L;;;;;N;;;;; 1335D;EGYPTIAN HIEROGLYPH U038;Lo;0;L;;;;;N;;;;; 1335E;EGYPTIAN HIEROGLYPH U039;Lo;0;L;;;;;N;;;;; 1335F;EGYPTIAN HIEROGLYPH U040;Lo;0;L;;;;;N;;;;; 13360;EGYPTIAN HIEROGLYPH U041;Lo;0;L;;;;;N;;;;; 13361;EGYPTIAN HIEROGLYPH U042;Lo;0;L;;;;;N;;;;; 13362;EGYPTIAN HIEROGLYPH V001;Lo;0;L;;;;;N;;;;; 13363;EGYPTIAN HIEROGLYPH V001A;Lo;0;L;;;;;N;;;;; 13364;EGYPTIAN HIEROGLYPH V001B;Lo;0;L;;;;;N;;;;; 13365;EGYPTIAN HIEROGLYPH V001C;Lo;0;L;;;;;N;;;;; 13366;EGYPTIAN HIEROGLYPH V001D;Lo;0;L;;;;;N;;;;; 13367;EGYPTIAN HIEROGLYPH V001E;Lo;0;L;;;;;N;;;;; 13368;EGYPTIAN HIEROGLYPH V001F;Lo;0;L;;;;;N;;;;; 13369;EGYPTIAN HIEROGLYPH V001G;Lo;0;L;;;;;N;;;;; 1336A;EGYPTIAN HIEROGLYPH V001H;Lo;0;L;;;;;N;;;;; 1336B;EGYPTIAN HIEROGLYPH V001I;Lo;0;L;;;;;N;;;;; 1336C;EGYPTIAN HIEROGLYPH V002;Lo;0;L;;;;;N;;;;; 1336D;EGYPTIAN HIEROGLYPH V002A;Lo;0;L;;;;;N;;;;; 1336E;EGYPTIAN HIEROGLYPH V003;Lo;0;L;;;;;N;;;;; 1336F;EGYPTIAN HIEROGLYPH V004;Lo;0;L;;;;;N;;;;; 13370;EGYPTIAN HIEROGLYPH V005;Lo;0;L;;;;;N;;;;; 13371;EGYPTIAN HIEROGLYPH V006;Lo;0;L;;;;;N;;;;; 13372;EGYPTIAN HIEROGLYPH V007;Lo;0;L;;;;;N;;;;; 13373;EGYPTIAN HIEROGLYPH V007A;Lo;0;L;;;;;N;;;;; 13374;EGYPTIAN HIEROGLYPH V007B;Lo;0;L;;;;;N;;;;; 13375;EGYPTIAN HIEROGLYPH V008;Lo;0;L;;;;;N;;;;; 13376;EGYPTIAN HIEROGLYPH V009;Lo;0;L;;;;;N;;;;; 13377;EGYPTIAN HIEROGLYPH V010;Lo;0;L;;;;;N;;;;; 13378;EGYPTIAN HIEROGLYPH V011;Lo;0;L;;;;;N;;;;; 13379;EGYPTIAN HIEROGLYPH V011A;Lo;0;L;;;;;N;;;;; 1337A;EGYPTIAN HIEROGLYPH V011B;Lo;0;L;;;;;N;;;;; 1337B;EGYPTIAN HIEROGLYPH V011C;Lo;0;L;;;;;N;;;;; 1337C;EGYPTIAN HIEROGLYPH V012;Lo;0;L;;;;;N;;;;; 1337D;EGYPTIAN HIEROGLYPH V012A;Lo;0;L;;;;;N;;;;; 1337E;EGYPTIAN HIEROGLYPH V012B;Lo;0;L;;;;;N;;;;; 1337F;EGYPTIAN HIEROGLYPH V013;Lo;0;L;;;;;N;;;;; 13380;EGYPTIAN HIEROGLYPH V014;Lo;0;L;;;;;N;;;;; 13381;EGYPTIAN HIEROGLYPH V015;Lo;0;L;;;;;N;;;;; 13382;EGYPTIAN HIEROGLYPH V016;Lo;0;L;;;;;N;;;;; 13383;EGYPTIAN HIEROGLYPH V017;Lo;0;L;;;;;N;;;;; 13384;EGYPTIAN HIEROGLYPH V018;Lo;0;L;;;;;N;;;;; 13385;EGYPTIAN HIEROGLYPH V019;Lo;0;L;;;;;N;;;;; 13386;EGYPTIAN HIEROGLYPH V020;Lo;0;L;;;;;N;;;;; 13387;EGYPTIAN HIEROGLYPH V020A;Lo;0;L;;;;;N;;;;; 13388;EGYPTIAN HIEROGLYPH V020B;Lo;0;L;;;;;N;;;;; 13389;EGYPTIAN HIEROGLYPH V020C;Lo;0;L;;;;;N;;;;; 1338A;EGYPTIAN HIEROGLYPH V020D;Lo;0;L;;;;;N;;;;; 1338B;EGYPTIAN HIEROGLYPH V020E;Lo;0;L;;;;;N;;;;; 1338C;EGYPTIAN HIEROGLYPH V020F;Lo;0;L;;;;;N;;;;; 1338D;EGYPTIAN HIEROGLYPH V020G;Lo;0;L;;;;;N;;;;; 1338E;EGYPTIAN HIEROGLYPH V020H;Lo;0;L;;;;;N;;;;; 1338F;EGYPTIAN HIEROGLYPH V020I;Lo;0;L;;;;;N;;;;; 13390;EGYPTIAN HIEROGLYPH V020J;Lo;0;L;;;;;N;;;;; 13391;EGYPTIAN HIEROGLYPH V020K;Lo;0;L;;;;;N;;;;; 13392;EGYPTIAN HIEROGLYPH V020L;Lo;0;L;;;;;N;;;;; 13393;EGYPTIAN HIEROGLYPH V021;Lo;0;L;;;;;N;;;;; 13394;EGYPTIAN HIEROGLYPH V022;Lo;0;L;;;;;N;;;;; 13395;EGYPTIAN HIEROGLYPH V023;Lo;0;L;;;;;N;;;;; 13396;EGYPTIAN HIEROGLYPH V023A;Lo;0;L;;;;;N;;;;; 13397;EGYPTIAN HIEROGLYPH V024;Lo;0;L;;;;;N;;;;; 13398;EGYPTIAN HIEROGLYPH V025;Lo;0;L;;;;;N;;;;; 13399;EGYPTIAN HIEROGLYPH V026;Lo;0;L;;;;;N;;;;; 1339A;EGYPTIAN HIEROGLYPH V027;Lo;0;L;;;;;N;;;;; 1339B;EGYPTIAN HIEROGLYPH V028;Lo;0;L;;;;;N;;;;; 1339C;EGYPTIAN HIEROGLYPH V028A;Lo;0;L;;;;;N;;;;; 1339D;EGYPTIAN HIEROGLYPH V029;Lo;0;L;;;;;N;;;;; 1339E;EGYPTIAN HIEROGLYPH V029A;Lo;0;L;;;;;N;;;;; 1339F;EGYPTIAN HIEROGLYPH V030;Lo;0;L;;;;;N;;;;; 133A0;EGYPTIAN HIEROGLYPH V030A;Lo;0;L;;;;;N;;;;; 133A1;EGYPTIAN HIEROGLYPH V031;Lo;0;L;;;;;N;;;;; 133A2;EGYPTIAN HIEROGLYPH V031A;Lo;0;L;;;;;N;;;;; 133A3;EGYPTIAN HIEROGLYPH V032;Lo;0;L;;;;;N;;;;; 133A4;EGYPTIAN HIEROGLYPH V033;Lo;0;L;;;;;N;;;;; 133A5;EGYPTIAN HIEROGLYPH V033A;Lo;0;L;;;;;N;;;;; 133A6;EGYPTIAN HIEROGLYPH V034;Lo;0;L;;;;;N;;;;; 133A7;EGYPTIAN HIEROGLYPH V035;Lo;0;L;;;;;N;;;;; 133A8;EGYPTIAN HIEROGLYPH V036;Lo;0;L;;;;;N;;;;; 133A9;EGYPTIAN HIEROGLYPH V037;Lo;0;L;;;;;N;;;;; 133AA;EGYPTIAN HIEROGLYPH V037A;Lo;0;L;;;;;N;;;;; 133AB;EGYPTIAN HIEROGLYPH V038;Lo;0;L;;;;;N;;;;; 133AC;EGYPTIAN HIEROGLYPH V039;Lo;0;L;;;;;N;;;;; 133AD;EGYPTIAN HIEROGLYPH V040;Lo;0;L;;;;;N;;;;; 133AE;EGYPTIAN HIEROGLYPH V040A;Lo;0;L;;;;;N;;;;; 133AF;EGYPTIAN HIEROGLYPH W001;Lo;0;L;;;;;N;;;;; 133B0;EGYPTIAN HIEROGLYPH W002;Lo;0;L;;;;;N;;;;; 133B1;EGYPTIAN HIEROGLYPH W003;Lo;0;L;;;;;N;;;;; 133B2;EGYPTIAN HIEROGLYPH W003A;Lo;0;L;;;;;N;;;;; 133B3;EGYPTIAN HIEROGLYPH W004;Lo;0;L;;;;;N;;;;; 133B4;EGYPTIAN HIEROGLYPH W005;Lo;0;L;;;;;N;;;;; 133B5;EGYPTIAN HIEROGLYPH W006;Lo;0;L;;;;;N;;;;; 133B6;EGYPTIAN HIEROGLYPH W007;Lo;0;L;;;;;N;;;;; 133B7;EGYPTIAN HIEROGLYPH W008;Lo;0;L;;;;;N;;;;; 133B8;EGYPTIAN HIEROGLYPH W009;Lo;0;L;;;;;N;;;;; 133B9;EGYPTIAN HIEROGLYPH W009A;Lo;0;L;;;;;N;;;;; 133BA;EGYPTIAN HIEROGLYPH W010;Lo;0;L;;;;;N;;;;; 133BB;EGYPTIAN HIEROGLYPH W010A;Lo;0;L;;;;;N;;;;; 133BC;EGYPTIAN HIEROGLYPH W011;Lo;0;L;;;;;N;;;;; 133BD;EGYPTIAN HIEROGLYPH W012;Lo;0;L;;;;;N;;;;; 133BE;EGYPTIAN HIEROGLYPH W013;Lo;0;L;;;;;N;;;;; 133BF;EGYPTIAN HIEROGLYPH W014;Lo;0;L;;;;;N;;;;; 133C0;EGYPTIAN HIEROGLYPH W014A;Lo;0;L;;;;;N;;;;; 133C1;EGYPTIAN HIEROGLYPH W015;Lo;0;L;;;;;N;;;;; 133C2;EGYPTIAN HIEROGLYPH W016;Lo;0;L;;;;;N;;;;; 133C3;EGYPTIAN HIEROGLYPH W017;Lo;0;L;;;;;N;;;;; 133C4;EGYPTIAN HIEROGLYPH W017A;Lo;0;L;;;;;N;;;;; 133C5;EGYPTIAN HIEROGLYPH W018;Lo;0;L;;;;;N;;;;; 133C6;EGYPTIAN HIEROGLYPH W018A;Lo;0;L;;;;;N;;;;; 133C7;EGYPTIAN HIEROGLYPH W019;Lo;0;L;;;;;N;;;;; 133C8;EGYPTIAN HIEROGLYPH W020;Lo;0;L;;;;;N;;;;; 133C9;EGYPTIAN HIEROGLYPH W021;Lo;0;L;;;;;N;;;;; 133CA;EGYPTIAN HIEROGLYPH W022;Lo;0;L;;;;;N;;;;; 133CB;EGYPTIAN HIEROGLYPH W023;Lo;0;L;;;;;N;;;;; 133CC;EGYPTIAN HIEROGLYPH W024;Lo;0;L;;;;;N;;;;; 133CD;EGYPTIAN HIEROGLYPH W024A;Lo;0;L;;;;;N;;;;; 133CE;EGYPTIAN HIEROGLYPH W025;Lo;0;L;;;;;N;;;;; 133CF;EGYPTIAN HIEROGLYPH X001;Lo;0;L;;;;;N;;;;; 133D0;EGYPTIAN HIEROGLYPH X002;Lo;0;L;;;;;N;;;;; 133D1;EGYPTIAN HIEROGLYPH X003;Lo;0;L;;;;;N;;;;; 133D2;EGYPTIAN HIEROGLYPH X004;Lo;0;L;;;;;N;;;;; 133D3;EGYPTIAN HIEROGLYPH X004A;Lo;0;L;;;;;N;;;;; 133D4;EGYPTIAN HIEROGLYPH X004B;Lo;0;L;;;;;N;;;;; 133D5;EGYPTIAN HIEROGLYPH X005;Lo;0;L;;;;;N;;;;; 133D6;EGYPTIAN HIEROGLYPH X006;Lo;0;L;;;;;N;;;;; 133D7;EGYPTIAN HIEROGLYPH X006A;Lo;0;L;;;;;N;;;;; 133D8;EGYPTIAN HIEROGLYPH X007;Lo;0;L;;;;;N;;;;; 133D9;EGYPTIAN HIEROGLYPH X008;Lo;0;L;;;;;N;;;;; 133DA;EGYPTIAN HIEROGLYPH X008A;Lo;0;L;;;;;N;;;;; 133DB;EGYPTIAN HIEROGLYPH Y001;Lo;0;L;;;;;N;;;;; 133DC;EGYPTIAN HIEROGLYPH Y001A;Lo;0;L;;;;;N;;;;; 133DD;EGYPTIAN HIEROGLYPH Y002;Lo;0;L;;;;;N;;;;; 133DE;EGYPTIAN HIEROGLYPH Y003;Lo;0;L;;;;;N;;;;; 133DF;EGYPTIAN HIEROGLYPH Y004;Lo;0;L;;;;;N;;;;; 133E0;EGYPTIAN HIEROGLYPH Y005;Lo;0;L;;;;;N;;;;; 133E1;EGYPTIAN HIEROGLYPH Y006;Lo;0;L;;;;;N;;;;; 133E2;EGYPTIAN HIEROGLYPH Y007;Lo;0;L;;;;;N;;;;; 133E3;EGYPTIAN HIEROGLYPH Y008;Lo;0;L;;;;;N;;;;; 133E4;EGYPTIAN HIEROGLYPH Z001;Lo;0;L;;;;;N;;;;; 133E5;EGYPTIAN HIEROGLYPH Z002;Lo;0;L;;;;;N;;;;; 133E6;EGYPTIAN HIEROGLYPH Z002A;Lo;0;L;;;;;N;;;;; 133E7;EGYPTIAN HIEROGLYPH Z002B;Lo;0;L;;;;;N;;;;; 133E8;EGYPTIAN HIEROGLYPH Z002C;Lo;0;L;;;;;N;;;;; 133E9;EGYPTIAN HIEROGLYPH Z002D;Lo;0;L;;;;;N;;;;; 133EA;EGYPTIAN HIEROGLYPH Z003;Lo;0;L;;;;;N;;;;; 133EB;EGYPTIAN HIEROGLYPH Z003A;Lo;0;L;;;;;N;;;;; 133EC;EGYPTIAN HIEROGLYPH Z003B;Lo;0;L;;;;;N;;;;; 133ED;EGYPTIAN HIEROGLYPH Z004;Lo;0;L;;;;;N;;;;; 133EE;EGYPTIAN HIEROGLYPH Z004A;Lo;0;L;;;;;N;;;;; 133EF;EGYPTIAN HIEROGLYPH Z005;Lo;0;L;;;;;N;;;;; 133F0;EGYPTIAN HIEROGLYPH Z005A;Lo;0;L;;;;;N;;;;; 133F1;EGYPTIAN HIEROGLYPH Z006;Lo;0;L;;;;;N;;;;; 133F2;EGYPTIAN HIEROGLYPH Z007;Lo;0;L;;;;;N;;;;; 133F3;EGYPTIAN HIEROGLYPH Z008;Lo;0;L;;;;;N;;;;; 133F4;EGYPTIAN HIEROGLYPH Z009;Lo;0;L;;;;;N;;;;; 133F5;EGYPTIAN HIEROGLYPH Z010;Lo;0;L;;;;;N;;;;; 133F6;EGYPTIAN HIEROGLYPH Z011;Lo;0;L;;;;;N;;;;; 133F7;EGYPTIAN HIEROGLYPH Z012;Lo;0;L;;;;;N;;;;; 133F8;EGYPTIAN HIEROGLYPH Z013;Lo;0;L;;;;;N;;;;; 133F9;EGYPTIAN HIEROGLYPH Z014;Lo;0;L;;;;;N;;;;; 133FA;EGYPTIAN HIEROGLYPH Z015;Lo;0;L;;;;;N;;;;; 133FB;EGYPTIAN HIEROGLYPH Z015A;Lo;0;L;;;;;N;;;;; 133FC;EGYPTIAN HIEROGLYPH Z015B;Lo;0;L;;;;;N;;;;; 133FD;EGYPTIAN HIEROGLYPH Z015C;Lo;0;L;;;;;N;;;;; 133FE;EGYPTIAN HIEROGLYPH Z015D;Lo;0;L;;;;;N;;;;; 133FF;EGYPTIAN HIEROGLYPH Z015E;Lo;0;L;;;;;N;;;;; 13400;EGYPTIAN HIEROGLYPH Z015F;Lo;0;L;;;;;N;;;;; 13401;EGYPTIAN HIEROGLYPH Z015G;Lo;0;L;;;;;N;;;;; 13402;EGYPTIAN HIEROGLYPH Z015H;Lo;0;L;;;;;N;;;;; 13403;EGYPTIAN HIEROGLYPH Z015I;Lo;0;L;;;;;N;;;;; 13404;EGYPTIAN HIEROGLYPH Z016;Lo;0;L;;;;;N;;;;; 13405;EGYPTIAN HIEROGLYPH Z016A;Lo;0;L;;;;;N;;;;; 13406;EGYPTIAN HIEROGLYPH Z016B;Lo;0;L;;;;;N;;;;; 13407;EGYPTIAN HIEROGLYPH Z016C;Lo;0;L;;;;;N;;;;; 13408;EGYPTIAN HIEROGLYPH Z016D;Lo;0;L;;;;;N;;;;; 13409;EGYPTIAN HIEROGLYPH Z016E;Lo;0;L;;;;;N;;;;; 1340A;EGYPTIAN HIEROGLYPH Z016F;Lo;0;L;;;;;N;;;;; 1340B;EGYPTIAN HIEROGLYPH Z016G;Lo;0;L;;;;;N;;;;; 1340C;EGYPTIAN HIEROGLYPH Z016H;Lo;0;L;;;;;N;;;;; 1340D;EGYPTIAN HIEROGLYPH AA001;Lo;0;L;;;;;N;;;;; 1340E;EGYPTIAN HIEROGLYPH AA002;Lo;0;L;;;;;N;;;;; 1340F;EGYPTIAN HIEROGLYPH AA003;Lo;0;L;;;;;N;;;;; 13410;EGYPTIAN HIEROGLYPH AA004;Lo;0;L;;;;;N;;;;; 13411;EGYPTIAN HIEROGLYPH AA005;Lo;0;L;;;;;N;;;;; 13412;EGYPTIAN HIEROGLYPH AA006;Lo;0;L;;;;;N;;;;; 13413;EGYPTIAN HIEROGLYPH AA007;Lo;0;L;;;;;N;;;;; 13414;EGYPTIAN HIEROGLYPH AA007A;Lo;0;L;;;;;N;;;;; 13415;EGYPTIAN HIEROGLYPH AA007B;Lo;0;L;;;;;N;;;;; 13416;EGYPTIAN HIEROGLYPH AA008;Lo;0;L;;;;;N;;;;; 13417;EGYPTIAN HIEROGLYPH AA009;Lo;0;L;;;;;N;;;;; 13418;EGYPTIAN HIEROGLYPH AA010;Lo;0;L;;;;;N;;;;; 13419;EGYPTIAN HIEROGLYPH AA011;Lo;0;L;;;;;N;;;;; 1341A;EGYPTIAN HIEROGLYPH AA012;Lo;0;L;;;;;N;;;;; 1341B;EGYPTIAN HIEROGLYPH AA013;Lo;0;L;;;;;N;;;;; 1341C;EGYPTIAN HIEROGLYPH AA014;Lo;0;L;;;;;N;;;;; 1341D;EGYPTIAN HIEROGLYPH AA015;Lo;0;L;;;;;N;;;;; 1341E;EGYPTIAN HIEROGLYPH AA016;Lo;0;L;;;;;N;;;;; 1341F;EGYPTIAN HIEROGLYPH AA017;Lo;0;L;;;;;N;;;;; 13420;EGYPTIAN HIEROGLYPH AA018;Lo;0;L;;;;;N;;;;; 13421;EGYPTIAN HIEROGLYPH AA019;Lo;0;L;;;;;N;;;;; 13422;EGYPTIAN HIEROGLYPH AA020;Lo;0;L;;;;;N;;;;; 13423;EGYPTIAN HIEROGLYPH AA021;Lo;0;L;;;;;N;;;;; 13424;EGYPTIAN HIEROGLYPH AA022;Lo;0;L;;;;;N;;;;; 13425;EGYPTIAN HIEROGLYPH AA023;Lo;0;L;;;;;N;;;;; 13426;EGYPTIAN HIEROGLYPH AA024;Lo;0;L;;;;;N;;;;; 13427;EGYPTIAN HIEROGLYPH AA025;Lo;0;L;;;;;N;;;;; 13428;EGYPTIAN HIEROGLYPH AA026;Lo;0;L;;;;;N;;;;; 13429;EGYPTIAN HIEROGLYPH AA027;Lo;0;L;;;;;N;;;;; 1342A;EGYPTIAN HIEROGLYPH AA028;Lo;0;L;;;;;N;;;;; 1342B;EGYPTIAN HIEROGLYPH AA029;Lo;0;L;;;;;N;;;;; 1342C;EGYPTIAN HIEROGLYPH AA030;Lo;0;L;;;;;N;;;;; 1342D;EGYPTIAN HIEROGLYPH AA031;Lo;0;L;;;;;N;;;;; 1342E;EGYPTIAN HIEROGLYPH AA032;Lo;0;L;;;;;N;;;;; 13430;EGYPTIAN HIEROGLYPH VERTICAL JOINER;Cf;0;L;;;;;N;;;;; 13431;EGYPTIAN HIEROGLYPH HORIZONTAL JOINER;Cf;0;L;;;;;N;;;;; 13432;EGYPTIAN HIEROGLYPH INSERT AT TOP START;Cf;0;L;;;;;N;;;;; 13433;EGYPTIAN HIEROGLYPH INSERT AT BOTTOM START;Cf;0;L;;;;;N;;;;; 13434;EGYPTIAN HIEROGLYPH INSERT AT TOP END;Cf;0;L;;;;;N;;;;; 13435;EGYPTIAN HIEROGLYPH INSERT AT BOTTOM END;Cf;0;L;;;;;N;;;;; 13436;EGYPTIAN HIEROGLYPH OVERLAY MIDDLE;Cf;0;L;;;;;N;;;;; 13437;EGYPTIAN HIEROGLYPH BEGIN SEGMENT;Cf;0;L;;;;;N;;;;; 13438;EGYPTIAN HIEROGLYPH END SEGMENT;Cf;0;L;;;;;N;;;;; 14400;ANATOLIAN HIEROGLYPH A001;Lo;0;L;;;;;N;;;;; 14401;ANATOLIAN HIEROGLYPH A002;Lo;0;L;;;;;N;;;;; 14402;ANATOLIAN HIEROGLYPH A003;Lo;0;L;;;;;N;;;;; 14403;ANATOLIAN HIEROGLYPH A004;Lo;0;L;;;;;N;;;;; 14404;ANATOLIAN HIEROGLYPH A005;Lo;0;L;;;;;N;;;;; 14405;ANATOLIAN HIEROGLYPH A006;Lo;0;L;;;;;N;;;;; 14406;ANATOLIAN HIEROGLYPH A007;Lo;0;L;;;;;N;;;;; 14407;ANATOLIAN HIEROGLYPH A008;Lo;0;L;;;;;N;;;;; 14408;ANATOLIAN HIEROGLYPH A009;Lo;0;L;;;;;N;;;;; 14409;ANATOLIAN HIEROGLYPH A010;Lo;0;L;;;;;N;;;;; 1440A;ANATOLIAN HIEROGLYPH A010A;Lo;0;L;;;;;N;;;;; 1440B;ANATOLIAN HIEROGLYPH A011;Lo;0;L;;;;;N;;;;; 1440C;ANATOLIAN HIEROGLYPH A012;Lo;0;L;;;;;N;;;;; 1440D;ANATOLIAN HIEROGLYPH A013;Lo;0;L;;;;;N;;;;; 1440E;ANATOLIAN HIEROGLYPH A014;Lo;0;L;;;;;N;;;;; 1440F;ANATOLIAN HIEROGLYPH A015;Lo;0;L;;;;;N;;;;; 14410;ANATOLIAN HIEROGLYPH A016;Lo;0;L;;;;;N;;;;; 14411;ANATOLIAN HIEROGLYPH A017;Lo;0;L;;;;;N;;;;; 14412;ANATOLIAN HIEROGLYPH A018;Lo;0;L;;;;;N;;;;; 14413;ANATOLIAN HIEROGLYPH A019;Lo;0;L;;;;;N;;;;; 14414;ANATOLIAN HIEROGLYPH A020;Lo;0;L;;;;;N;;;;; 14415;ANATOLIAN HIEROGLYPH A021;Lo;0;L;;;;;N;;;;; 14416;ANATOLIAN HIEROGLYPH A022;Lo;0;L;;;;;N;;;;; 14417;ANATOLIAN HIEROGLYPH A023;Lo;0;L;;;;;N;;;;; 14418;ANATOLIAN HIEROGLYPH A024;Lo;0;L;;;;;N;;;;; 14419;ANATOLIAN HIEROGLYPH A025;Lo;0;L;;;;;N;;;;; 1441A;ANATOLIAN HIEROGLYPH A026;Lo;0;L;;;;;N;;;;; 1441B;ANATOLIAN HIEROGLYPH A026A;Lo;0;L;;;;;N;;;;; 1441C;ANATOLIAN HIEROGLYPH A027;Lo;0;L;;;;;N;;;;; 1441D;ANATOLIAN HIEROGLYPH A028;Lo;0;L;;;;;N;;;;; 1441E;ANATOLIAN HIEROGLYPH A029;Lo;0;L;;;;;N;;;;; 1441F;ANATOLIAN HIEROGLYPH A030;Lo;0;L;;;;;N;;;;; 14420;ANATOLIAN HIEROGLYPH A031;Lo;0;L;;;;;N;;;;; 14421;ANATOLIAN HIEROGLYPH A032;Lo;0;L;;;;;N;;;;; 14422;ANATOLIAN HIEROGLYPH A033;Lo;0;L;;;;;N;;;;; 14423;ANATOLIAN HIEROGLYPH A034;Lo;0;L;;;;;N;;;;; 14424;ANATOLIAN HIEROGLYPH A035;Lo;0;L;;;;;N;;;;; 14425;ANATOLIAN HIEROGLYPH A036;Lo;0;L;;;;;N;;;;; 14426;ANATOLIAN HIEROGLYPH A037;Lo;0;L;;;;;N;;;;; 14427;ANATOLIAN HIEROGLYPH A038;Lo;0;L;;;;;N;;;;; 14428;ANATOLIAN HIEROGLYPH A039;Lo;0;L;;;;;N;;;;; 14429;ANATOLIAN HIEROGLYPH A039A;Lo;0;L;;;;;N;;;;; 1442A;ANATOLIAN HIEROGLYPH A040;Lo;0;L;;;;;N;;;;; 1442B;ANATOLIAN HIEROGLYPH A041;Lo;0;L;;;;;N;;;;; 1442C;ANATOLIAN HIEROGLYPH A041A;Lo;0;L;;;;;N;;;;; 1442D;ANATOLIAN HIEROGLYPH A042;Lo;0;L;;;;;N;;;;; 1442E;ANATOLIAN HIEROGLYPH A043;Lo;0;L;;;;;N;;;;; 1442F;ANATOLIAN HIEROGLYPH A044;Lo;0;L;;;;;N;;;;; 14430;ANATOLIAN HIEROGLYPH A045;Lo;0;L;;;;;N;;;;; 14431;ANATOLIAN HIEROGLYPH A045A;Lo;0;L;;;;;N;;;;; 14432;ANATOLIAN HIEROGLYPH A046;Lo;0;L;;;;;N;;;;; 14433;ANATOLIAN HIEROGLYPH A046A;Lo;0;L;;;;;N;;;;; 14434;ANATOLIAN HIEROGLYPH A046B;Lo;0;L;;;;;N;;;;; 14435;ANATOLIAN HIEROGLYPH A047;Lo;0;L;;;;;N;;;;; 14436;ANATOLIAN HIEROGLYPH A048;Lo;0;L;;;;;N;;;;; 14437;ANATOLIAN HIEROGLYPH A049;Lo;0;L;;;;;N;;;;; 14438;ANATOLIAN HIEROGLYPH A050;Lo;0;L;;;;;N;;;;; 14439;ANATOLIAN HIEROGLYPH A051;Lo;0;L;;;;;N;;;;; 1443A;ANATOLIAN HIEROGLYPH A052;Lo;0;L;;;;;N;;;;; 1443B;ANATOLIAN HIEROGLYPH A053;Lo;0;L;;;;;N;;;;; 1443C;ANATOLIAN HIEROGLYPH A054;Lo;0;L;;;;;N;;;;; 1443D;ANATOLIAN HIEROGLYPH A055;Lo;0;L;;;;;N;;;;; 1443E;ANATOLIAN HIEROGLYPH A056;Lo;0;L;;;;;N;;;;; 1443F;ANATOLIAN HIEROGLYPH A057;Lo;0;L;;;;;N;;;;; 14440;ANATOLIAN HIEROGLYPH A058;Lo;0;L;;;;;N;;;;; 14441;ANATOLIAN HIEROGLYPH A059;Lo;0;L;;;;;N;;;;; 14442;ANATOLIAN HIEROGLYPH A060;Lo;0;L;;;;;N;;;;; 14443;ANATOLIAN HIEROGLYPH A061;Lo;0;L;;;;;N;;;;; 14444;ANATOLIAN HIEROGLYPH A062;Lo;0;L;;;;;N;;;;; 14445;ANATOLIAN HIEROGLYPH A063;Lo;0;L;;;;;N;;;;; 14446;ANATOLIAN HIEROGLYPH A064;Lo;0;L;;;;;N;;;;; 14447;ANATOLIAN HIEROGLYPH A065;Lo;0;L;;;;;N;;;;; 14448;ANATOLIAN HIEROGLYPH A066;Lo;0;L;;;;;N;;;;; 14449;ANATOLIAN HIEROGLYPH A066A;Lo;0;L;;;;;N;;;;; 1444A;ANATOLIAN HIEROGLYPH A066B;Lo;0;L;;;;;N;;;;; 1444B;ANATOLIAN HIEROGLYPH A066C;Lo;0;L;;;;;N;;;;; 1444C;ANATOLIAN HIEROGLYPH A067;Lo;0;L;;;;;N;;;;; 1444D;ANATOLIAN HIEROGLYPH A068;Lo;0;L;;;;;N;;;;; 1444E;ANATOLIAN HIEROGLYPH A069;Lo;0;L;;;;;N;;;;; 1444F;ANATOLIAN HIEROGLYPH A070;Lo;0;L;;;;;N;;;;; 14450;ANATOLIAN HIEROGLYPH A071;Lo;0;L;;;;;N;;;;; 14451;ANATOLIAN HIEROGLYPH A072;Lo;0;L;;;;;N;;;;; 14452;ANATOLIAN HIEROGLYPH A073;Lo;0;L;;;;;N;;;;; 14453;ANATOLIAN HIEROGLYPH A074;Lo;0;L;;;;;N;;;;; 14454;ANATOLIAN HIEROGLYPH A075;Lo;0;L;;;;;N;;;;; 14455;ANATOLIAN HIEROGLYPH A076;Lo;0;L;;;;;N;;;;; 14456;ANATOLIAN HIEROGLYPH A077;Lo;0;L;;;;;N;;;;; 14457;ANATOLIAN HIEROGLYPH A078;Lo;0;L;;;;;N;;;;; 14458;ANATOLIAN HIEROGLYPH A079;Lo;0;L;;;;;N;;;;; 14459;ANATOLIAN HIEROGLYPH A080;Lo;0;L;;;;;N;;;;; 1445A;ANATOLIAN HIEROGLYPH A081;Lo;0;L;;;;;N;;;;; 1445B;ANATOLIAN HIEROGLYPH A082;Lo;0;L;;;;;N;;;;; 1445C;ANATOLIAN HIEROGLYPH A083;Lo;0;L;;;;;N;;;;; 1445D;ANATOLIAN HIEROGLYPH A084;Lo;0;L;;;;;N;;;;; 1445E;ANATOLIAN HIEROGLYPH A085;Lo;0;L;;;;;N;;;;; 1445F;ANATOLIAN HIEROGLYPH A086;Lo;0;L;;;;;N;;;;; 14460;ANATOLIAN HIEROGLYPH A087;Lo;0;L;;;;;N;;;;; 14461;ANATOLIAN HIEROGLYPH A088;Lo;0;L;;;;;N;;;;; 14462;ANATOLIAN HIEROGLYPH A089;Lo;0;L;;;;;N;;;;; 14463;ANATOLIAN HIEROGLYPH A090;Lo;0;L;;;;;N;;;;; 14464;ANATOLIAN HIEROGLYPH A091;Lo;0;L;;;;;N;;;;; 14465;ANATOLIAN HIEROGLYPH A092;Lo;0;L;;;;;N;;;;; 14466;ANATOLIAN HIEROGLYPH A093;Lo;0;L;;;;;N;;;;; 14467;ANATOLIAN HIEROGLYPH A094;Lo;0;L;;;;;N;;;;; 14468;ANATOLIAN HIEROGLYPH A095;Lo;0;L;;;;;N;;;;; 14469;ANATOLIAN HIEROGLYPH A096;Lo;0;L;;;;;N;;;;; 1446A;ANATOLIAN HIEROGLYPH A097;Lo;0;L;;;;;N;;;;; 1446B;ANATOLIAN HIEROGLYPH A097A;Lo;0;L;;;;;N;;;;; 1446C;ANATOLIAN HIEROGLYPH A098;Lo;0;L;;;;;N;;;;; 1446D;ANATOLIAN HIEROGLYPH A098A;Lo;0;L;;;;;N;;;;; 1446E;ANATOLIAN HIEROGLYPH A099;Lo;0;L;;;;;N;;;;; 1446F;ANATOLIAN HIEROGLYPH A100;Lo;0;L;;;;;N;;;;; 14470;ANATOLIAN HIEROGLYPH A100A;Lo;0;L;;;;;N;;;;; 14471;ANATOLIAN HIEROGLYPH A101;Lo;0;L;;;;;N;;;;; 14472;ANATOLIAN HIEROGLYPH A101A;Lo;0;L;;;;;N;;;;; 14473;ANATOLIAN HIEROGLYPH A102;Lo;0;L;;;;;N;;;;; 14474;ANATOLIAN HIEROGLYPH A102A;Lo;0;L;;;;;N;;;;; 14475;ANATOLIAN HIEROGLYPH A103;Lo;0;L;;;;;N;;;;; 14476;ANATOLIAN HIEROGLYPH A104;Lo;0;L;;;;;N;;;;; 14477;ANATOLIAN HIEROGLYPH A104A;Lo;0;L;;;;;N;;;;; 14478;ANATOLIAN HIEROGLYPH A104B;Lo;0;L;;;;;N;;;;; 14479;ANATOLIAN HIEROGLYPH A104C;Lo;0;L;;;;;N;;;;; 1447A;ANATOLIAN HIEROGLYPH A105;Lo;0;L;;;;;N;;;;; 1447B;ANATOLIAN HIEROGLYPH A105A;Lo;0;L;;;;;N;;;;; 1447C;ANATOLIAN HIEROGLYPH A105B;Lo;0;L;;;;;N;;;;; 1447D;ANATOLIAN HIEROGLYPH A106;Lo;0;L;;;;;N;;;;; 1447E;ANATOLIAN HIEROGLYPH A107;Lo;0;L;;;;;N;;;;; 1447F;ANATOLIAN HIEROGLYPH A107A;Lo;0;L;;;;;N;;;;; 14480;ANATOLIAN HIEROGLYPH A107B;Lo;0;L;;;;;N;;;;; 14481;ANATOLIAN HIEROGLYPH A107C;Lo;0;L;;;;;N;;;;; 14482;ANATOLIAN HIEROGLYPH A108;Lo;0;L;;;;;N;;;;; 14483;ANATOLIAN HIEROGLYPH A109;Lo;0;L;;;;;N;;;;; 14484;ANATOLIAN HIEROGLYPH A110;Lo;0;L;;;;;N;;;;; 14485;ANATOLIAN HIEROGLYPH A110A;Lo;0;L;;;;;N;;;;; 14486;ANATOLIAN HIEROGLYPH A110B;Lo;0;L;;;;;N;;;;; 14487;ANATOLIAN HIEROGLYPH A111;Lo;0;L;;;;;N;;;;; 14488;ANATOLIAN HIEROGLYPH A112;Lo;0;L;;;;;N;;;;; 14489;ANATOLIAN HIEROGLYPH A113;Lo;0;L;;;;;N;;;;; 1448A;ANATOLIAN HIEROGLYPH A114;Lo;0;L;;;;;N;;;;; 1448B;ANATOLIAN HIEROGLYPH A115;Lo;0;L;;;;;N;;;;; 1448C;ANATOLIAN HIEROGLYPH A115A;Lo;0;L;;;;;N;;;;; 1448D;ANATOLIAN HIEROGLYPH A116;Lo;0;L;;;;;N;;;;; 1448E;ANATOLIAN HIEROGLYPH A117;Lo;0;L;;;;;N;;;;; 1448F;ANATOLIAN HIEROGLYPH A118;Lo;0;L;;;;;N;;;;; 14490;ANATOLIAN HIEROGLYPH A119;Lo;0;L;;;;;N;;;;; 14491;ANATOLIAN HIEROGLYPH A120;Lo;0;L;;;;;N;;;;; 14492;ANATOLIAN HIEROGLYPH A121;Lo;0;L;;;;;N;;;;; 14493;ANATOLIAN HIEROGLYPH A122;Lo;0;L;;;;;N;;;;; 14494;ANATOLIAN HIEROGLYPH A123;Lo;0;L;;;;;N;;;;; 14495;ANATOLIAN HIEROGLYPH A124;Lo;0;L;;;;;N;;;;; 14496;ANATOLIAN HIEROGLYPH A125;Lo;0;L;;;;;N;;;;; 14497;ANATOLIAN HIEROGLYPH A125A;Lo;0;L;;;;;N;;;;; 14498;ANATOLIAN HIEROGLYPH A126;Lo;0;L;;;;;N;;;;; 14499;ANATOLIAN HIEROGLYPH A127;Lo;0;L;;;;;N;;;;; 1449A;ANATOLIAN HIEROGLYPH A128;Lo;0;L;;;;;N;;;;; 1449B;ANATOLIAN HIEROGLYPH A129;Lo;0;L;;;;;N;;;;; 1449C;ANATOLIAN HIEROGLYPH A130;Lo;0;L;;;;;N;;;;; 1449D;ANATOLIAN HIEROGLYPH A131;Lo;0;L;;;;;N;;;;; 1449E;ANATOLIAN HIEROGLYPH A132;Lo;0;L;;;;;N;;;;; 1449F;ANATOLIAN HIEROGLYPH A133;Lo;0;L;;;;;N;;;;; 144A0;ANATOLIAN HIEROGLYPH A134;Lo;0;L;;;;;N;;;;; 144A1;ANATOLIAN HIEROGLYPH A135;Lo;0;L;;;;;N;;;;; 144A2;ANATOLIAN HIEROGLYPH A135A;Lo;0;L;;;;;N;;;;; 144A3;ANATOLIAN HIEROGLYPH A136;Lo;0;L;;;;;N;;;;; 144A4;ANATOLIAN HIEROGLYPH A137;Lo;0;L;;;;;N;;;;; 144A5;ANATOLIAN HIEROGLYPH A138;Lo;0;L;;;;;N;;;;; 144A6;ANATOLIAN HIEROGLYPH A139;Lo;0;L;;;;;N;;;;; 144A7;ANATOLIAN HIEROGLYPH A140;Lo;0;L;;;;;N;;;;; 144A8;ANATOLIAN HIEROGLYPH A141;Lo;0;L;;;;;N;;;;; 144A9;ANATOLIAN HIEROGLYPH A142;Lo;0;L;;;;;N;;;;; 144AA;ANATOLIAN HIEROGLYPH A143;Lo;0;L;;;;;N;;;;; 144AB;ANATOLIAN HIEROGLYPH A144;Lo;0;L;;;;;N;;;;; 144AC;ANATOLIAN HIEROGLYPH A145;Lo;0;L;;;;;N;;;;; 144AD;ANATOLIAN HIEROGLYPH A146;Lo;0;L;;;;;N;;;;; 144AE;ANATOLIAN HIEROGLYPH A147;Lo;0;L;;;;;N;;;;; 144AF;ANATOLIAN HIEROGLYPH A148;Lo;0;L;;;;;N;;;;; 144B0;ANATOLIAN HIEROGLYPH A149;Lo;0;L;;;;;N;;;;; 144B1;ANATOLIAN HIEROGLYPH A150;Lo;0;L;;;;;N;;;;; 144B2;ANATOLIAN HIEROGLYPH A151;Lo;0;L;;;;;N;;;;; 144B3;ANATOLIAN HIEROGLYPH A152;Lo;0;L;;;;;N;;;;; 144B4;ANATOLIAN HIEROGLYPH A153;Lo;0;L;;;;;N;;;;; 144B5;ANATOLIAN HIEROGLYPH A154;Lo;0;L;;;;;N;;;;; 144B6;ANATOLIAN HIEROGLYPH A155;Lo;0;L;;;;;N;;;;; 144B7;ANATOLIAN HIEROGLYPH A156;Lo;0;L;;;;;N;;;;; 144B8;ANATOLIAN HIEROGLYPH A157;Lo;0;L;;;;;N;;;;; 144B9;ANATOLIAN HIEROGLYPH A158;Lo;0;L;;;;;N;;;;; 144BA;ANATOLIAN HIEROGLYPH A159;Lo;0;L;;;;;N;;;;; 144BB;ANATOLIAN HIEROGLYPH A160;Lo;0;L;;;;;N;;;;; 144BC;ANATOLIAN HIEROGLYPH A161;Lo;0;L;;;;;N;;;;; 144BD;ANATOLIAN HIEROGLYPH A162;Lo;0;L;;;;;N;;;;; 144BE;ANATOLIAN HIEROGLYPH A163;Lo;0;L;;;;;N;;;;; 144BF;ANATOLIAN HIEROGLYPH A164;Lo;0;L;;;;;N;;;;; 144C0;ANATOLIAN HIEROGLYPH A165;Lo;0;L;;;;;N;;;;; 144C1;ANATOLIAN HIEROGLYPH A166;Lo;0;L;;;;;N;;;;; 144C2;ANATOLIAN HIEROGLYPH A167;Lo;0;L;;;;;N;;;;; 144C3;ANATOLIAN HIEROGLYPH A168;Lo;0;L;;;;;N;;;;; 144C4;ANATOLIAN HIEROGLYPH A169;Lo;0;L;;;;;N;;;;; 144C5;ANATOLIAN HIEROGLYPH A170;Lo;0;L;;;;;N;;;;; 144C6;ANATOLIAN HIEROGLYPH A171;Lo;0;L;;;;;N;;;;; 144C7;ANATOLIAN HIEROGLYPH A172;Lo;0;L;;;;;N;;;;; 144C8;ANATOLIAN HIEROGLYPH A173;Lo;0;L;;;;;N;;;;; 144C9;ANATOLIAN HIEROGLYPH A174;Lo;0;L;;;;;N;;;;; 144CA;ANATOLIAN HIEROGLYPH A175;Lo;0;L;;;;;N;;;;; 144CB;ANATOLIAN HIEROGLYPH A176;Lo;0;L;;;;;N;;;;; 144CC;ANATOLIAN HIEROGLYPH A177;Lo;0;L;;;;;N;;;;; 144CD;ANATOLIAN HIEROGLYPH A178;Lo;0;L;;;;;N;;;;; 144CE;ANATOLIAN HIEROGLYPH A179;Lo;0;L;;;;;N;;;;; 144CF;ANATOLIAN HIEROGLYPH A180;Lo;0;L;;;;;N;;;;; 144D0;ANATOLIAN HIEROGLYPH A181;Lo;0;L;;;;;N;;;;; 144D1;ANATOLIAN HIEROGLYPH A182;Lo;0;L;;;;;N;;;;; 144D2;ANATOLIAN HIEROGLYPH A183;Lo;0;L;;;;;N;;;;; 144D3;ANATOLIAN HIEROGLYPH A184;Lo;0;L;;;;;N;;;;; 144D4;ANATOLIAN HIEROGLYPH A185;Lo;0;L;;;;;N;;;;; 144D5;ANATOLIAN HIEROGLYPH A186;Lo;0;L;;;;;N;;;;; 144D6;ANATOLIAN HIEROGLYPH A187;Lo;0;L;;;;;N;;;;; 144D7;ANATOLIAN HIEROGLYPH A188;Lo;0;L;;;;;N;;;;; 144D8;ANATOLIAN HIEROGLYPH A189;Lo;0;L;;;;;N;;;;; 144D9;ANATOLIAN HIEROGLYPH A190;Lo;0;L;;;;;N;;;;; 144DA;ANATOLIAN HIEROGLYPH A191;Lo;0;L;;;;;N;;;;; 144DB;ANATOLIAN HIEROGLYPH A192;Lo;0;L;;;;;N;;;;; 144DC;ANATOLIAN HIEROGLYPH A193;Lo;0;L;;;;;N;;;;; 144DD;ANATOLIAN HIEROGLYPH A194;Lo;0;L;;;;;N;;;;; 144DE;ANATOLIAN HIEROGLYPH A195;Lo;0;L;;;;;N;;;;; 144DF;ANATOLIAN HIEROGLYPH A196;Lo;0;L;;;;;N;;;;; 144E0;ANATOLIAN HIEROGLYPH A197;Lo;0;L;;;;;N;;;;; 144E1;ANATOLIAN HIEROGLYPH A198;Lo;0;L;;;;;N;;;;; 144E2;ANATOLIAN HIEROGLYPH A199;Lo;0;L;;;;;N;;;;; 144E3;ANATOLIAN HIEROGLYPH A200;Lo;0;L;;;;;N;;;;; 144E4;ANATOLIAN HIEROGLYPH A201;Lo;0;L;;;;;N;;;;; 144E5;ANATOLIAN HIEROGLYPH A202;Lo;0;L;;;;;N;;;;; 144E6;ANATOLIAN HIEROGLYPH A202A;Lo;0;L;;;;;N;;;;; 144E7;ANATOLIAN HIEROGLYPH A202B;Lo;0;L;;;;;N;;;;; 144E8;ANATOLIAN HIEROGLYPH A203;Lo;0;L;;;;;N;;;;; 144E9;ANATOLIAN HIEROGLYPH A204;Lo;0;L;;;;;N;;;;; 144EA;ANATOLIAN HIEROGLYPH A205;Lo;0;L;;;;;N;;;;; 144EB;ANATOLIAN HIEROGLYPH A206;Lo;0;L;;;;;N;;;;; 144EC;ANATOLIAN HIEROGLYPH A207;Lo;0;L;;;;;N;;;;; 144ED;ANATOLIAN HIEROGLYPH A207A;Lo;0;L;;;;;N;;;;; 144EE;ANATOLIAN HIEROGLYPH A208;Lo;0;L;;;;;N;;;;; 144EF;ANATOLIAN HIEROGLYPH A209;Lo;0;L;;;;;N;;;;; 144F0;ANATOLIAN HIEROGLYPH A209A;Lo;0;L;;;;;N;;;;; 144F1;ANATOLIAN HIEROGLYPH A210;Lo;0;L;;;;;N;;;;; 144F2;ANATOLIAN HIEROGLYPH A211;Lo;0;L;;;;;N;;;;; 144F3;ANATOLIAN HIEROGLYPH A212;Lo;0;L;;;;;N;;;;; 144F4;ANATOLIAN HIEROGLYPH A213;Lo;0;L;;;;;N;;;;; 144F5;ANATOLIAN HIEROGLYPH A214;Lo;0;L;;;;;N;;;;; 144F6;ANATOLIAN HIEROGLYPH A215;Lo;0;L;;;;;N;;;;; 144F7;ANATOLIAN HIEROGLYPH A215A;Lo;0;L;;;;;N;;;;; 144F8;ANATOLIAN HIEROGLYPH A216;Lo;0;L;;;;;N;;;;; 144F9;ANATOLIAN HIEROGLYPH A216A;Lo;0;L;;;;;N;;;;; 144FA;ANATOLIAN HIEROGLYPH A217;Lo;0;L;;;;;N;;;;; 144FB;ANATOLIAN HIEROGLYPH A218;Lo;0;L;;;;;N;;;;; 144FC;ANATOLIAN HIEROGLYPH A219;Lo;0;L;;;;;N;;;;; 144FD;ANATOLIAN HIEROGLYPH A220;Lo;0;L;;;;;N;;;;; 144FE;ANATOLIAN HIEROGLYPH A221;Lo;0;L;;;;;N;;;;; 144FF;ANATOLIAN HIEROGLYPH A222;Lo;0;L;;;;;N;;;;; 14500;ANATOLIAN HIEROGLYPH A223;Lo;0;L;;;;;N;;;;; 14501;ANATOLIAN HIEROGLYPH A224;Lo;0;L;;;;;N;;;;; 14502;ANATOLIAN HIEROGLYPH A225;Lo;0;L;;;;;N;;;;; 14503;ANATOLIAN HIEROGLYPH A226;Lo;0;L;;;;;N;;;;; 14504;ANATOLIAN HIEROGLYPH A227;Lo;0;L;;;;;N;;;;; 14505;ANATOLIAN HIEROGLYPH A227A;Lo;0;L;;;;;N;;;;; 14506;ANATOLIAN HIEROGLYPH A228;Lo;0;L;;;;;N;;;;; 14507;ANATOLIAN HIEROGLYPH A229;Lo;0;L;;;;;N;;;;; 14508;ANATOLIAN HIEROGLYPH A230;Lo;0;L;;;;;N;;;;; 14509;ANATOLIAN HIEROGLYPH A231;Lo;0;L;;;;;N;;;;; 1450A;ANATOLIAN HIEROGLYPH A232;Lo;0;L;;;;;N;;;;; 1450B;ANATOLIAN HIEROGLYPH A233;Lo;0;L;;;;;N;;;;; 1450C;ANATOLIAN HIEROGLYPH A234;Lo;0;L;;;;;N;;;;; 1450D;ANATOLIAN HIEROGLYPH A235;Lo;0;L;;;;;N;;;;; 1450E;ANATOLIAN HIEROGLYPH A236;Lo;0;L;;;;;N;;;;; 1450F;ANATOLIAN HIEROGLYPH A237;Lo;0;L;;;;;N;;;;; 14510;ANATOLIAN HIEROGLYPH A238;Lo;0;L;;;;;N;;;;; 14511;ANATOLIAN HIEROGLYPH A239;Lo;0;L;;;;;N;;;;; 14512;ANATOLIAN HIEROGLYPH A240;Lo;0;L;;;;;N;;;;; 14513;ANATOLIAN HIEROGLYPH A241;Lo;0;L;;;;;N;;;;; 14514;ANATOLIAN HIEROGLYPH A242;Lo;0;L;;;;;N;;;;; 14515;ANATOLIAN HIEROGLYPH A243;Lo;0;L;;;;;N;;;;; 14516;ANATOLIAN HIEROGLYPH A244;Lo;0;L;;;;;N;;;;; 14517;ANATOLIAN HIEROGLYPH A245;Lo;0;L;;;;;N;;;;; 14518;ANATOLIAN HIEROGLYPH A246;Lo;0;L;;;;;N;;;;; 14519;ANATOLIAN HIEROGLYPH A247;Lo;0;L;;;;;N;;;;; 1451A;ANATOLIAN HIEROGLYPH A248;Lo;0;L;;;;;N;;;;; 1451B;ANATOLIAN HIEROGLYPH A249;Lo;0;L;;;;;N;;;;; 1451C;ANATOLIAN HIEROGLYPH A250;Lo;0;L;;;;;N;;;;; 1451D;ANATOLIAN HIEROGLYPH A251;Lo;0;L;;;;;N;;;;; 1451E;ANATOLIAN HIEROGLYPH A252;Lo;0;L;;;;;N;;;;; 1451F;ANATOLIAN HIEROGLYPH A253;Lo;0;L;;;;;N;;;;; 14520;ANATOLIAN HIEROGLYPH A254;Lo;0;L;;;;;N;;;;; 14521;ANATOLIAN HIEROGLYPH A255;Lo;0;L;;;;;N;;;;; 14522;ANATOLIAN HIEROGLYPH A256;Lo;0;L;;;;;N;;;;; 14523;ANATOLIAN HIEROGLYPH A257;Lo;0;L;;;;;N;;;;; 14524;ANATOLIAN HIEROGLYPH A258;Lo;0;L;;;;;N;;;;; 14525;ANATOLIAN HIEROGLYPH A259;Lo;0;L;;;;;N;;;;; 14526;ANATOLIAN HIEROGLYPH A260;Lo;0;L;;;;;N;;;;; 14527;ANATOLIAN HIEROGLYPH A261;Lo;0;L;;;;;N;;;;; 14528;ANATOLIAN HIEROGLYPH A262;Lo;0;L;;;;;N;;;;; 14529;ANATOLIAN HIEROGLYPH A263;Lo;0;L;;;;;N;;;;; 1452A;ANATOLIAN HIEROGLYPH A264;Lo;0;L;;;;;N;;;;; 1452B;ANATOLIAN HIEROGLYPH A265;Lo;0;L;;;;;N;;;;; 1452C;ANATOLIAN HIEROGLYPH A266;Lo;0;L;;;;;N;;;;; 1452D;ANATOLIAN HIEROGLYPH A267;Lo;0;L;;;;;N;;;;; 1452E;ANATOLIAN HIEROGLYPH A267A;Lo;0;L;;;;;N;;;;; 1452F;ANATOLIAN HIEROGLYPH A268;Lo;0;L;;;;;N;;;;; 14530;ANATOLIAN HIEROGLYPH A269;Lo;0;L;;;;;N;;;;; 14531;ANATOLIAN HIEROGLYPH A270;Lo;0;L;;;;;N;;;;; 14532;ANATOLIAN HIEROGLYPH A271;Lo;0;L;;;;;N;;;;; 14533;ANATOLIAN HIEROGLYPH A272;Lo;0;L;;;;;N;;;;; 14534;ANATOLIAN HIEROGLYPH A273;Lo;0;L;;;;;N;;;;; 14535;ANATOLIAN HIEROGLYPH A274;Lo;0;L;;;;;N;;;;; 14536;ANATOLIAN HIEROGLYPH A275;Lo;0;L;;;;;N;;;;; 14537;ANATOLIAN HIEROGLYPH A276;Lo;0;L;;;;;N;;;;; 14538;ANATOLIAN HIEROGLYPH A277;Lo;0;L;;;;;N;;;;; 14539;ANATOLIAN HIEROGLYPH A278;Lo;0;L;;;;;N;;;;; 1453A;ANATOLIAN HIEROGLYPH A279;Lo;0;L;;;;;N;;;;; 1453B;ANATOLIAN HIEROGLYPH A280;Lo;0;L;;;;;N;;;;; 1453C;ANATOLIAN HIEROGLYPH A281;Lo;0;L;;;;;N;;;;; 1453D;ANATOLIAN HIEROGLYPH A282;Lo;0;L;;;;;N;;;;; 1453E;ANATOLIAN HIEROGLYPH A283;Lo;0;L;;;;;N;;;;; 1453F;ANATOLIAN HIEROGLYPH A284;Lo;0;L;;;;;N;;;;; 14540;ANATOLIAN HIEROGLYPH A285;Lo;0;L;;;;;N;;;;; 14541;ANATOLIAN HIEROGLYPH A286;Lo;0;L;;;;;N;;;;; 14542;ANATOLIAN HIEROGLYPH A287;Lo;0;L;;;;;N;;;;; 14543;ANATOLIAN HIEROGLYPH A288;Lo;0;L;;;;;N;;;;; 14544;ANATOLIAN HIEROGLYPH A289;Lo;0;L;;;;;N;;;;; 14545;ANATOLIAN HIEROGLYPH A289A;Lo;0;L;;;;;N;;;;; 14546;ANATOLIAN HIEROGLYPH A290;Lo;0;L;;;;;N;;;;; 14547;ANATOLIAN HIEROGLYPH A291;Lo;0;L;;;;;N;;;;; 14548;ANATOLIAN HIEROGLYPH A292;Lo;0;L;;;;;N;;;;; 14549;ANATOLIAN HIEROGLYPH A293;Lo;0;L;;;;;N;;;;; 1454A;ANATOLIAN HIEROGLYPH A294;Lo;0;L;;;;;N;;;;; 1454B;ANATOLIAN HIEROGLYPH A294A;Lo;0;L;;;;;N;;;;; 1454C;ANATOLIAN HIEROGLYPH A295;Lo;0;L;;;;;N;;;;; 1454D;ANATOLIAN HIEROGLYPH A296;Lo;0;L;;;;;N;;;;; 1454E;ANATOLIAN HIEROGLYPH A297;Lo;0;L;;;;;N;;;;; 1454F;ANATOLIAN HIEROGLYPH A298;Lo;0;L;;;;;N;;;;; 14550;ANATOLIAN HIEROGLYPH A299;Lo;0;L;;;;;N;;;;; 14551;ANATOLIAN HIEROGLYPH A299A;Lo;0;L;;;;;N;;;;; 14552;ANATOLIAN HIEROGLYPH A300;Lo;0;L;;;;;N;;;;; 14553;ANATOLIAN HIEROGLYPH A301;Lo;0;L;;;;;N;;;;; 14554;ANATOLIAN HIEROGLYPH A302;Lo;0;L;;;;;N;;;;; 14555;ANATOLIAN HIEROGLYPH A303;Lo;0;L;;;;;N;;;;; 14556;ANATOLIAN HIEROGLYPH A304;Lo;0;L;;;;;N;;;;; 14557;ANATOLIAN HIEROGLYPH A305;Lo;0;L;;;;;N;;;;; 14558;ANATOLIAN HIEROGLYPH A306;Lo;0;L;;;;;N;;;;; 14559;ANATOLIAN HIEROGLYPH A307;Lo;0;L;;;;;N;;;;; 1455A;ANATOLIAN HIEROGLYPH A308;Lo;0;L;;;;;N;;;;; 1455B;ANATOLIAN HIEROGLYPH A309;Lo;0;L;;;;;N;;;;; 1455C;ANATOLIAN HIEROGLYPH A309A;Lo;0;L;;;;;N;;;;; 1455D;ANATOLIAN HIEROGLYPH A310;Lo;0;L;;;;;N;;;;; 1455E;ANATOLIAN HIEROGLYPH A311;Lo;0;L;;;;;N;;;;; 1455F;ANATOLIAN HIEROGLYPH A312;Lo;0;L;;;;;N;;;;; 14560;ANATOLIAN HIEROGLYPH A313;Lo;0;L;;;;;N;;;;; 14561;ANATOLIAN HIEROGLYPH A314;Lo;0;L;;;;;N;;;;; 14562;ANATOLIAN HIEROGLYPH A315;Lo;0;L;;;;;N;;;;; 14563;ANATOLIAN HIEROGLYPH A316;Lo;0;L;;;;;N;;;;; 14564;ANATOLIAN HIEROGLYPH A317;Lo;0;L;;;;;N;;;;; 14565;ANATOLIAN HIEROGLYPH A318;Lo;0;L;;;;;N;;;;; 14566;ANATOLIAN HIEROGLYPH A319;Lo;0;L;;;;;N;;;;; 14567;ANATOLIAN HIEROGLYPH A320;Lo;0;L;;;;;N;;;;; 14568;ANATOLIAN HIEROGLYPH A321;Lo;0;L;;;;;N;;;;; 14569;ANATOLIAN HIEROGLYPH A322;Lo;0;L;;;;;N;;;;; 1456A;ANATOLIAN HIEROGLYPH A323;Lo;0;L;;;;;N;;;;; 1456B;ANATOLIAN HIEROGLYPH A324;Lo;0;L;;;;;N;;;;; 1456C;ANATOLIAN HIEROGLYPH A325;Lo;0;L;;;;;N;;;;; 1456D;ANATOLIAN HIEROGLYPH A326;Lo;0;L;;;;;N;;;;; 1456E;ANATOLIAN HIEROGLYPH A327;Lo;0;L;;;;;N;;;;; 1456F;ANATOLIAN HIEROGLYPH A328;Lo;0;L;;;;;N;;;;; 14570;ANATOLIAN HIEROGLYPH A329;Lo;0;L;;;;;N;;;;; 14571;ANATOLIAN HIEROGLYPH A329A;Lo;0;L;;;;;N;;;;; 14572;ANATOLIAN HIEROGLYPH A330;Lo;0;L;;;;;N;;;;; 14573;ANATOLIAN HIEROGLYPH A331;Lo;0;L;;;;;N;;;;; 14574;ANATOLIAN HIEROGLYPH A332A;Lo;0;L;;;;;N;;;;; 14575;ANATOLIAN HIEROGLYPH A332B;Lo;0;L;;;;;N;;;;; 14576;ANATOLIAN HIEROGLYPH A332C;Lo;0;L;;;;;N;;;;; 14577;ANATOLIAN HIEROGLYPH A333;Lo;0;L;;;;;N;;;;; 14578;ANATOLIAN HIEROGLYPH A334;Lo;0;L;;;;;N;;;;; 14579;ANATOLIAN HIEROGLYPH A335;Lo;0;L;;;;;N;;;;; 1457A;ANATOLIAN HIEROGLYPH A336;Lo;0;L;;;;;N;;;;; 1457B;ANATOLIAN HIEROGLYPH A336A;Lo;0;L;;;;;N;;;;; 1457C;ANATOLIAN HIEROGLYPH A336B;Lo;0;L;;;;;N;;;;; 1457D;ANATOLIAN HIEROGLYPH A336C;Lo;0;L;;;;;N;;;;; 1457E;ANATOLIAN HIEROGLYPH A337;Lo;0;L;;;;;N;;;;; 1457F;ANATOLIAN HIEROGLYPH A338;Lo;0;L;;;;;N;;;;; 14580;ANATOLIAN HIEROGLYPH A339;Lo;0;L;;;;;N;;;;; 14581;ANATOLIAN HIEROGLYPH A340;Lo;0;L;;;;;N;;;;; 14582;ANATOLIAN HIEROGLYPH A341;Lo;0;L;;;;;N;;;;; 14583;ANATOLIAN HIEROGLYPH A342;Lo;0;L;;;;;N;;;;; 14584;ANATOLIAN HIEROGLYPH A343;Lo;0;L;;;;;N;;;;; 14585;ANATOLIAN HIEROGLYPH A344;Lo;0;L;;;;;N;;;;; 14586;ANATOLIAN HIEROGLYPH A345;Lo;0;L;;;;;N;;;;; 14587;ANATOLIAN HIEROGLYPH A346;Lo;0;L;;;;;N;;;;; 14588;ANATOLIAN HIEROGLYPH A347;Lo;0;L;;;;;N;;;;; 14589;ANATOLIAN HIEROGLYPH A348;Lo;0;L;;;;;N;;;;; 1458A;ANATOLIAN HIEROGLYPH A349;Lo;0;L;;;;;N;;;;; 1458B;ANATOLIAN HIEROGLYPH A350;Lo;0;L;;;;;N;;;;; 1458C;ANATOLIAN HIEROGLYPH A351;Lo;0;L;;;;;N;;;;; 1458D;ANATOLIAN HIEROGLYPH A352;Lo;0;L;;;;;N;;;;; 1458E;ANATOLIAN HIEROGLYPH A353;Lo;0;L;;;;;N;;;;; 1458F;ANATOLIAN HIEROGLYPH A354;Lo;0;L;;;;;N;;;;; 14590;ANATOLIAN HIEROGLYPH A355;Lo;0;L;;;;;N;;;;; 14591;ANATOLIAN HIEROGLYPH A356;Lo;0;L;;;;;N;;;;; 14592;ANATOLIAN HIEROGLYPH A357;Lo;0;L;;;;;N;;;;; 14593;ANATOLIAN HIEROGLYPH A358;Lo;0;L;;;;;N;;;;; 14594;ANATOLIAN HIEROGLYPH A359;Lo;0;L;;;;;N;;;;; 14595;ANATOLIAN HIEROGLYPH A359A;Lo;0;L;;;;;N;;;;; 14596;ANATOLIAN HIEROGLYPH A360;Lo;0;L;;;;;N;;;;; 14597;ANATOLIAN HIEROGLYPH A361;Lo;0;L;;;;;N;;;;; 14598;ANATOLIAN HIEROGLYPH A362;Lo;0;L;;;;;N;;;;; 14599;ANATOLIAN HIEROGLYPH A363;Lo;0;L;;;;;N;;;;; 1459A;ANATOLIAN HIEROGLYPH A364;Lo;0;L;;;;;N;;;;; 1459B;ANATOLIAN HIEROGLYPH A364A;Lo;0;L;;;;;N;;;;; 1459C;ANATOLIAN HIEROGLYPH A365;Lo;0;L;;;;;N;;;;; 1459D;ANATOLIAN HIEROGLYPH A366;Lo;0;L;;;;;N;;;;; 1459E;ANATOLIAN HIEROGLYPH A367;Lo;0;L;;;;;N;;;;; 1459F;ANATOLIAN HIEROGLYPH A368;Lo;0;L;;;;;N;;;;; 145A0;ANATOLIAN HIEROGLYPH A368A;Lo;0;L;;;;;N;;;;; 145A1;ANATOLIAN HIEROGLYPH A369;Lo;0;L;;;;;N;;;;; 145A2;ANATOLIAN HIEROGLYPH A370;Lo;0;L;;;;;N;;;;; 145A3;ANATOLIAN HIEROGLYPH A371;Lo;0;L;;;;;N;;;;; 145A4;ANATOLIAN HIEROGLYPH A371A;Lo;0;L;;;;;N;;;;; 145A5;ANATOLIAN HIEROGLYPH A372;Lo;0;L;;;;;N;;;;; 145A6;ANATOLIAN HIEROGLYPH A373;Lo;0;L;;;;;N;;;;; 145A7;ANATOLIAN HIEROGLYPH A374;Lo;0;L;;;;;N;;;;; 145A8;ANATOLIAN HIEROGLYPH A375;Lo;0;L;;;;;N;;;;; 145A9;ANATOLIAN HIEROGLYPH A376;Lo;0;L;;;;;N;;;;; 145AA;ANATOLIAN HIEROGLYPH A377;Lo;0;L;;;;;N;;;;; 145AB;ANATOLIAN HIEROGLYPH A378;Lo;0;L;;;;;N;;;;; 145AC;ANATOLIAN HIEROGLYPH A379;Lo;0;L;;;;;N;;;;; 145AD;ANATOLIAN HIEROGLYPH A380;Lo;0;L;;;;;N;;;;; 145AE;ANATOLIAN HIEROGLYPH A381;Lo;0;L;;;;;N;;;;; 145AF;ANATOLIAN HIEROGLYPH A381A;Lo;0;L;;;;;N;;;;; 145B0;ANATOLIAN HIEROGLYPH A382;Lo;0;L;;;;;N;;;;; 145B1;ANATOLIAN HIEROGLYPH A383 RA OR RI;Lo;0;L;;;;;N;;;;; 145B2;ANATOLIAN HIEROGLYPH A383A;Lo;0;L;;;;;N;;;;; 145B3;ANATOLIAN HIEROGLYPH A384;Lo;0;L;;;;;N;;;;; 145B4;ANATOLIAN HIEROGLYPH A385;Lo;0;L;;;;;N;;;;; 145B5;ANATOLIAN HIEROGLYPH A386;Lo;0;L;;;;;N;;;;; 145B6;ANATOLIAN HIEROGLYPH A386A;Lo;0;L;;;;;N;;;;; 145B7;ANATOLIAN HIEROGLYPH A387;Lo;0;L;;;;;N;;;;; 145B8;ANATOLIAN HIEROGLYPH A388;Lo;0;L;;;;;N;;;;; 145B9;ANATOLIAN HIEROGLYPH A389;Lo;0;L;;;;;N;;;;; 145BA;ANATOLIAN HIEROGLYPH A390;Lo;0;L;;;;;N;;;;; 145BB;ANATOLIAN HIEROGLYPH A391;Lo;0;L;;;;;N;;;;; 145BC;ANATOLIAN HIEROGLYPH A392;Lo;0;L;;;;;N;;;;; 145BD;ANATOLIAN HIEROGLYPH A393 EIGHT;Lo;0;L;;;;;N;;;;; 145BE;ANATOLIAN HIEROGLYPH A394;Lo;0;L;;;;;N;;;;; 145BF;ANATOLIAN HIEROGLYPH A395;Lo;0;L;;;;;N;;;;; 145C0;ANATOLIAN HIEROGLYPH A396;Lo;0;L;;;;;N;;;;; 145C1;ANATOLIAN HIEROGLYPH A397;Lo;0;L;;;;;N;;;;; 145C2;ANATOLIAN HIEROGLYPH A398;Lo;0;L;;;;;N;;;;; 145C3;ANATOLIAN HIEROGLYPH A399;Lo;0;L;;;;;N;;;;; 145C4;ANATOLIAN HIEROGLYPH A400;Lo;0;L;;;;;N;;;;; 145C5;ANATOLIAN HIEROGLYPH A401;Lo;0;L;;;;;N;;;;; 145C6;ANATOLIAN HIEROGLYPH A402;Lo;0;L;;;;;N;;;;; 145C7;ANATOLIAN HIEROGLYPH A403;Lo;0;L;;;;;N;;;;; 145C8;ANATOLIAN HIEROGLYPH A404;Lo;0;L;;;;;N;;;;; 145C9;ANATOLIAN HIEROGLYPH A405;Lo;0;L;;;;;N;;;;; 145CA;ANATOLIAN HIEROGLYPH A406;Lo;0;L;;;;;N;;;;; 145CB;ANATOLIAN HIEROGLYPH A407;Lo;0;L;;;;;N;;;;; 145CC;ANATOLIAN HIEROGLYPH A408;Lo;0;L;;;;;N;;;;; 145CD;ANATOLIAN HIEROGLYPH A409;Lo;0;L;;;;;N;;;;; 145CE;ANATOLIAN HIEROGLYPH A410 BEGIN LOGOGRAM MARK;Lo;0;L;;;;;N;;;;; 145CF;ANATOLIAN HIEROGLYPH A410A END LOGOGRAM MARK;Lo;0;L;;;;;N;;;;; 145D0;ANATOLIAN HIEROGLYPH A411;Lo;0;L;;;;;N;;;;; 145D1;ANATOLIAN HIEROGLYPH A412;Lo;0;L;;;;;N;;;;; 145D2;ANATOLIAN HIEROGLYPH A413;Lo;0;L;;;;;N;;;;; 145D3;ANATOLIAN HIEROGLYPH A414;Lo;0;L;;;;;N;;;;; 145D4;ANATOLIAN HIEROGLYPH A415;Lo;0;L;;;;;N;;;;; 145D5;ANATOLIAN HIEROGLYPH A416;Lo;0;L;;;;;N;;;;; 145D6;ANATOLIAN HIEROGLYPH A417;Lo;0;L;;;;;N;;;;; 145D7;ANATOLIAN HIEROGLYPH A418;Lo;0;L;;;;;N;;;;; 145D8;ANATOLIAN HIEROGLYPH A419;Lo;0;L;;;;;N;;;;; 145D9;ANATOLIAN HIEROGLYPH A420;Lo;0;L;;;;;N;;;;; 145DA;ANATOLIAN HIEROGLYPH A421;Lo;0;L;;;;;N;;;;; 145DB;ANATOLIAN HIEROGLYPH A422;Lo;0;L;;;;;N;;;;; 145DC;ANATOLIAN HIEROGLYPH A423;Lo;0;L;;;;;N;;;;; 145DD;ANATOLIAN HIEROGLYPH A424;Lo;0;L;;;;;N;;;;; 145DE;ANATOLIAN HIEROGLYPH A425;Lo;0;L;;;;;N;;;;; 145DF;ANATOLIAN HIEROGLYPH A426;Lo;0;L;;;;;N;;;;; 145E0;ANATOLIAN HIEROGLYPH A427;Lo;0;L;;;;;N;;;;; 145E1;ANATOLIAN HIEROGLYPH A428;Lo;0;L;;;;;N;;;;; 145E2;ANATOLIAN HIEROGLYPH A429;Lo;0;L;;;;;N;;;;; 145E3;ANATOLIAN HIEROGLYPH A430;Lo;0;L;;;;;N;;;;; 145E4;ANATOLIAN HIEROGLYPH A431;Lo;0;L;;;;;N;;;;; 145E5;ANATOLIAN HIEROGLYPH A432;Lo;0;L;;;;;N;;;;; 145E6;ANATOLIAN HIEROGLYPH A433;Lo;0;L;;;;;N;;;;; 145E7;ANATOLIAN HIEROGLYPH A434;Lo;0;L;;;;;N;;;;; 145E8;ANATOLIAN HIEROGLYPH A435;Lo;0;L;;;;;N;;;;; 145E9;ANATOLIAN HIEROGLYPH A436;Lo;0;L;;;;;N;;;;; 145EA;ANATOLIAN HIEROGLYPH A437;Lo;0;L;;;;;N;;;;; 145EB;ANATOLIAN HIEROGLYPH A438;Lo;0;L;;;;;N;;;;; 145EC;ANATOLIAN HIEROGLYPH A439;Lo;0;L;;;;;N;;;;; 145ED;ANATOLIAN HIEROGLYPH A440;Lo;0;L;;;;;N;;;;; 145EE;ANATOLIAN HIEROGLYPH A441;Lo;0;L;;;;;N;;;;; 145EF;ANATOLIAN HIEROGLYPH A442;Lo;0;L;;;;;N;;;;; 145F0;ANATOLIAN HIEROGLYPH A443;Lo;0;L;;;;;N;;;;; 145F1;ANATOLIAN HIEROGLYPH A444;Lo;0;L;;;;;N;;;;; 145F2;ANATOLIAN HIEROGLYPH A445;Lo;0;L;;;;;N;;;;; 145F3;ANATOLIAN HIEROGLYPH A446;Lo;0;L;;;;;N;;;;; 145F4;ANATOLIAN HIEROGLYPH A447;Lo;0;L;;;;;N;;;;; 145F5;ANATOLIAN HIEROGLYPH A448;Lo;0;L;;;;;N;;;;; 145F6;ANATOLIAN HIEROGLYPH A449;Lo;0;L;;;;;N;;;;; 145F7;ANATOLIAN HIEROGLYPH A450;Lo;0;L;;;;;N;;;;; 145F8;ANATOLIAN HIEROGLYPH A450A;Lo;0;L;;;;;N;;;;; 145F9;ANATOLIAN HIEROGLYPH A451;Lo;0;L;;;;;N;;;;; 145FA;ANATOLIAN HIEROGLYPH A452;Lo;0;L;;;;;N;;;;; 145FB;ANATOLIAN HIEROGLYPH A453;Lo;0;L;;;;;N;;;;; 145FC;ANATOLIAN HIEROGLYPH A454;Lo;0;L;;;;;N;;;;; 145FD;ANATOLIAN HIEROGLYPH A455;Lo;0;L;;;;;N;;;;; 145FE;ANATOLIAN HIEROGLYPH A456;Lo;0;L;;;;;N;;;;; 145FF;ANATOLIAN HIEROGLYPH A457;Lo;0;L;;;;;N;;;;; 14600;ANATOLIAN HIEROGLYPH A457A;Lo;0;L;;;;;N;;;;; 14601;ANATOLIAN HIEROGLYPH A458;Lo;0;L;;;;;N;;;;; 14602;ANATOLIAN HIEROGLYPH A459;Lo;0;L;;;;;N;;;;; 14603;ANATOLIAN HIEROGLYPH A460;Lo;0;L;;;;;N;;;;; 14604;ANATOLIAN HIEROGLYPH A461;Lo;0;L;;;;;N;;;;; 14605;ANATOLIAN HIEROGLYPH A462;Lo;0;L;;;;;N;;;;; 14606;ANATOLIAN HIEROGLYPH A463;Lo;0;L;;;;;N;;;;; 14607;ANATOLIAN HIEROGLYPH A464;Lo;0;L;;;;;N;;;;; 14608;ANATOLIAN HIEROGLYPH A465;Lo;0;L;;;;;N;;;;; 14609;ANATOLIAN HIEROGLYPH A466;Lo;0;L;;;;;N;;;;; 1460A;ANATOLIAN HIEROGLYPH A467;Lo;0;L;;;;;N;;;;; 1460B;ANATOLIAN HIEROGLYPH A468;Lo;0;L;;;;;N;;;;; 1460C;ANATOLIAN HIEROGLYPH A469;Lo;0;L;;;;;N;;;;; 1460D;ANATOLIAN HIEROGLYPH A470;Lo;0;L;;;;;N;;;;; 1460E;ANATOLIAN HIEROGLYPH A471;Lo;0;L;;;;;N;;;;; 1460F;ANATOLIAN HIEROGLYPH A472;Lo;0;L;;;;;N;;;;; 14610;ANATOLIAN HIEROGLYPH A473;Lo;0;L;;;;;N;;;;; 14611;ANATOLIAN HIEROGLYPH A474;Lo;0;L;;;;;N;;;;; 14612;ANATOLIAN HIEROGLYPH A475;Lo;0;L;;;;;N;;;;; 14613;ANATOLIAN HIEROGLYPH A476;Lo;0;L;;;;;N;;;;; 14614;ANATOLIAN HIEROGLYPH A477;Lo;0;L;;;;;N;;;;; 14615;ANATOLIAN HIEROGLYPH A478;Lo;0;L;;;;;N;;;;; 14616;ANATOLIAN HIEROGLYPH A479;Lo;0;L;;;;;N;;;;; 14617;ANATOLIAN HIEROGLYPH A480;Lo;0;L;;;;;N;;;;; 14618;ANATOLIAN HIEROGLYPH A481;Lo;0;L;;;;;N;;;;; 14619;ANATOLIAN HIEROGLYPH A482;Lo;0;L;;;;;N;;;;; 1461A;ANATOLIAN HIEROGLYPH A483;Lo;0;L;;;;;N;;;;; 1461B;ANATOLIAN HIEROGLYPH A484;Lo;0;L;;;;;N;;;;; 1461C;ANATOLIAN HIEROGLYPH A485;Lo;0;L;;;;;N;;;;; 1461D;ANATOLIAN HIEROGLYPH A486;Lo;0;L;;;;;N;;;;; 1461E;ANATOLIAN HIEROGLYPH A487;Lo;0;L;;;;;N;;;;; 1461F;ANATOLIAN HIEROGLYPH A488;Lo;0;L;;;;;N;;;;; 14620;ANATOLIAN HIEROGLYPH A489;Lo;0;L;;;;;N;;;;; 14621;ANATOLIAN HIEROGLYPH A490;Lo;0;L;;;;;N;;;;; 14622;ANATOLIAN HIEROGLYPH A491;Lo;0;L;;;;;N;;;;; 14623;ANATOLIAN HIEROGLYPH A492;Lo;0;L;;;;;N;;;;; 14624;ANATOLIAN HIEROGLYPH A493;Lo;0;L;;;;;N;;;;; 14625;ANATOLIAN HIEROGLYPH A494;Lo;0;L;;;;;N;;;;; 14626;ANATOLIAN HIEROGLYPH A495;Lo;0;L;;;;;N;;;;; 14627;ANATOLIAN HIEROGLYPH A496;Lo;0;L;;;;;N;;;;; 14628;ANATOLIAN HIEROGLYPH A497;Lo;0;L;;;;;N;;;;; 14629;ANATOLIAN HIEROGLYPH A501;Lo;0;L;;;;;N;;;;; 1462A;ANATOLIAN HIEROGLYPH A502;Lo;0;L;;;;;N;;;;; 1462B;ANATOLIAN HIEROGLYPH A503;Lo;0;L;;;;;N;;;;; 1462C;ANATOLIAN HIEROGLYPH A504;Lo;0;L;;;;;N;;;;; 1462D;ANATOLIAN HIEROGLYPH A505;Lo;0;L;;;;;N;;;;; 1462E;ANATOLIAN HIEROGLYPH A506;Lo;0;L;;;;;N;;;;; 1462F;ANATOLIAN HIEROGLYPH A507;Lo;0;L;;;;;N;;;;; 14630;ANATOLIAN HIEROGLYPH A508;Lo;0;L;;;;;N;;;;; 14631;ANATOLIAN HIEROGLYPH A509;Lo;0;L;;;;;N;;;;; 14632;ANATOLIAN HIEROGLYPH A510;Lo;0;L;;;;;N;;;;; 14633;ANATOLIAN HIEROGLYPH A511;Lo;0;L;;;;;N;;;;; 14634;ANATOLIAN HIEROGLYPH A512;Lo;0;L;;;;;N;;;;; 14635;ANATOLIAN HIEROGLYPH A513;Lo;0;L;;;;;N;;;;; 14636;ANATOLIAN HIEROGLYPH A514;Lo;0;L;;;;;N;;;;; 14637;ANATOLIAN HIEROGLYPH A515;Lo;0;L;;;;;N;;;;; 14638;ANATOLIAN HIEROGLYPH A516;Lo;0;L;;;;;N;;;;; 14639;ANATOLIAN HIEROGLYPH A517;Lo;0;L;;;;;N;;;;; 1463A;ANATOLIAN HIEROGLYPH A518;Lo;0;L;;;;;N;;;;; 1463B;ANATOLIAN HIEROGLYPH A519;Lo;0;L;;;;;N;;;;; 1463C;ANATOLIAN HIEROGLYPH A520;Lo;0;L;;;;;N;;;;; 1463D;ANATOLIAN HIEROGLYPH A521;Lo;0;L;;;;;N;;;;; 1463E;ANATOLIAN HIEROGLYPH A522;Lo;0;L;;;;;N;;;;; 1463F;ANATOLIAN HIEROGLYPH A523;Lo;0;L;;;;;N;;;;; 14640;ANATOLIAN HIEROGLYPH A524;Lo;0;L;;;;;N;;;;; 14641;ANATOLIAN HIEROGLYPH A525;Lo;0;L;;;;;N;;;;; 14642;ANATOLIAN HIEROGLYPH A526;Lo;0;L;;;;;N;;;;; 14643;ANATOLIAN HIEROGLYPH A527;Lo;0;L;;;;;N;;;;; 14644;ANATOLIAN HIEROGLYPH A528;Lo;0;L;;;;;N;;;;; 14645;ANATOLIAN HIEROGLYPH A529;Lo;0;L;;;;;N;;;;; 14646;ANATOLIAN HIEROGLYPH A530;Lo;0;L;;;;;N;;;;; 16800;BAMUM LETTER PHASE-A NGKUE MFON;Lo;0;L;;;;;N;;;;; 16801;BAMUM LETTER PHASE-A GBIEE FON;Lo;0;L;;;;;N;;;;; 16802;BAMUM LETTER PHASE-A PON MFON PIPAEMGBIEE;Lo;0;L;;;;;N;;;;; 16803;BAMUM LETTER PHASE-A PON MFON PIPAEMBA;Lo;0;L;;;;;N;;;;; 16804;BAMUM LETTER PHASE-A NAA MFON;Lo;0;L;;;;;N;;;;; 16805;BAMUM LETTER PHASE-A SHUENSHUET;Lo;0;L;;;;;N;;;;; 16806;BAMUM LETTER PHASE-A TITA MFON;Lo;0;L;;;;;N;;;;; 16807;BAMUM LETTER PHASE-A NZA MFON;Lo;0;L;;;;;N;;;;; 16808;BAMUM LETTER PHASE-A SHINDA PA NJI;Lo;0;L;;;;;N;;;;; 16809;BAMUM LETTER PHASE-A PON PA NJI PIPAEMGBIEE;Lo;0;L;;;;;N;;;;; 1680A;BAMUM LETTER PHASE-A PON PA NJI PIPAEMBA;Lo;0;L;;;;;N;;;;; 1680B;BAMUM LETTER PHASE-A MAEMBGBIEE;Lo;0;L;;;;;N;;;;; 1680C;BAMUM LETTER PHASE-A TU MAEMBA;Lo;0;L;;;;;N;;;;; 1680D;BAMUM LETTER PHASE-A NGANGU;Lo;0;L;;;;;N;;;;; 1680E;BAMUM LETTER PHASE-A MAEMVEUX;Lo;0;L;;;;;N;;;;; 1680F;BAMUM LETTER PHASE-A MANSUAE;Lo;0;L;;;;;N;;;;; 16810;BAMUM LETTER PHASE-A MVEUAENGAM;Lo;0;L;;;;;N;;;;; 16811;BAMUM LETTER PHASE-A SEUNYAM;Lo;0;L;;;;;N;;;;; 16812;BAMUM LETTER PHASE-A NTOQPEN;Lo;0;L;;;;;N;;;;; 16813;BAMUM LETTER PHASE-A KEUKEUTNDA;Lo;0;L;;;;;N;;;;; 16814;BAMUM LETTER PHASE-A NKINDI;Lo;0;L;;;;;N;;;;; 16815;BAMUM LETTER PHASE-A SUU;Lo;0;L;;;;;N;;;;; 16816;BAMUM LETTER PHASE-A NGKUENZEUM;Lo;0;L;;;;;N;;;;; 16817;BAMUM LETTER PHASE-A LAPAQ;Lo;0;L;;;;;N;;;;; 16818;BAMUM LETTER PHASE-A LET KUT;Lo;0;L;;;;;N;;;;; 16819;BAMUM LETTER PHASE-A NTAP MFAA;Lo;0;L;;;;;N;;;;; 1681A;BAMUM LETTER PHASE-A MAEKEUP;Lo;0;L;;;;;N;;;;; 1681B;BAMUM LETTER PHASE-A PASHAE;Lo;0;L;;;;;N;;;;; 1681C;BAMUM LETTER PHASE-A GHEUAERAE;Lo;0;L;;;;;N;;;;; 1681D;BAMUM LETTER PHASE-A PAMSHAE;Lo;0;L;;;;;N;;;;; 1681E;BAMUM LETTER PHASE-A MON NGGEUAET;Lo;0;L;;;;;N;;;;; 1681F;BAMUM LETTER PHASE-A NZUN MEUT;Lo;0;L;;;;;N;;;;; 16820;BAMUM LETTER PHASE-A U YUQ NAE;Lo;0;L;;;;;N;;;;; 16821;BAMUM LETTER PHASE-A GHEUAEGHEUAE;Lo;0;L;;;;;N;;;;; 16822;BAMUM LETTER PHASE-A NTAP NTAA;Lo;0;L;;;;;N;;;;; 16823;BAMUM LETTER PHASE-A SISA;Lo;0;L;;;;;N;;;;; 16824;BAMUM LETTER PHASE-A MGBASA;Lo;0;L;;;;;N;;;;; 16825;BAMUM LETTER PHASE-A MEUNJOMNDEUQ;Lo;0;L;;;;;N;;;;; 16826;BAMUM LETTER PHASE-A MOOMPUQ;Lo;0;L;;;;;N;;;;; 16827;BAMUM LETTER PHASE-A KAFA;Lo;0;L;;;;;N;;;;; 16828;BAMUM LETTER PHASE-A PA LEERAEWA;Lo;0;L;;;;;N;;;;; 16829;BAMUM LETTER PHASE-A NDA LEERAEWA;Lo;0;L;;;;;N;;;;; 1682A;BAMUM LETTER PHASE-A PET;Lo;0;L;;;;;N;;;;; 1682B;BAMUM LETTER PHASE-A MAEMKPEN;Lo;0;L;;;;;N;;;;; 1682C;BAMUM LETTER PHASE-A NIKA;Lo;0;L;;;;;N;;;;; 1682D;BAMUM LETTER PHASE-A PUP;Lo;0;L;;;;;N;;;;; 1682E;BAMUM LETTER PHASE-A TUAEP;Lo;0;L;;;;;N;;;;; 1682F;BAMUM LETTER PHASE-A LUAEP;Lo;0;L;;;;;N;;;;; 16830;BAMUM LETTER PHASE-A SONJAM;Lo;0;L;;;;;N;;;;; 16831;BAMUM LETTER PHASE-A TEUTEUWEN;Lo;0;L;;;;;N;;;;; 16832;BAMUM LETTER PHASE-A MAENYI;Lo;0;L;;;;;N;;;;; 16833;BAMUM LETTER PHASE-A KET;Lo;0;L;;;;;N;;;;; 16834;BAMUM LETTER PHASE-A NDAANGGEUAET;Lo;0;L;;;;;N;;;;; 16835;BAMUM LETTER PHASE-A KUOQ;Lo;0;L;;;;;N;;;;; 16836;BAMUM LETTER PHASE-A MOOMEUT;Lo;0;L;;;;;N;;;;; 16837;BAMUM LETTER PHASE-A SHUM;Lo;0;L;;;;;N;;;;; 16838;BAMUM LETTER PHASE-A LOMMAE;Lo;0;L;;;;;N;;;;; 16839;BAMUM LETTER PHASE-A FIRI;Lo;0;L;;;;;N;;;;; 1683A;BAMUM LETTER PHASE-A ROM;Lo;0;L;;;;;N;;;;; 1683B;BAMUM LETTER PHASE-A KPOQ;Lo;0;L;;;;;N;;;;; 1683C;BAMUM LETTER PHASE-A SOQ;Lo;0;L;;;;;N;;;;; 1683D;BAMUM LETTER PHASE-A MAP PIEET;Lo;0;L;;;;;N;;;;; 1683E;BAMUM LETTER PHASE-A SHIRAE;Lo;0;L;;;;;N;;;;; 1683F;BAMUM LETTER PHASE-A NTAP;Lo;0;L;;;;;N;;;;; 16840;BAMUM LETTER PHASE-A SHOQ NSHUT YUM;Lo;0;L;;;;;N;;;;; 16841;BAMUM LETTER PHASE-A NYIT MONGKEUAEQ;Lo;0;L;;;;;N;;;;; 16842;BAMUM LETTER PHASE-A PAARAE;Lo;0;L;;;;;N;;;;; 16843;BAMUM LETTER PHASE-A NKAARAE;Lo;0;L;;;;;N;;;;; 16844;BAMUM LETTER PHASE-A UNKNOWN;Lo;0;L;;;;;N;;;;; 16845;BAMUM LETTER PHASE-A NGGEN;Lo;0;L;;;;;N;;;;; 16846;BAMUM LETTER PHASE-A MAESI;Lo;0;L;;;;;N;;;;; 16847;BAMUM LETTER PHASE-A NJAM;Lo;0;L;;;;;N;;;;; 16848;BAMUM LETTER PHASE-A MBANYI;Lo;0;L;;;;;N;;;;; 16849;BAMUM LETTER PHASE-A NYET;Lo;0;L;;;;;N;;;;; 1684A;BAMUM LETTER PHASE-A TEUAEN;Lo;0;L;;;;;N;;;;; 1684B;BAMUM LETTER PHASE-A SOT;Lo;0;L;;;;;N;;;;; 1684C;BAMUM LETTER PHASE-A PAAM;Lo;0;L;;;;;N;;;;; 1684D;BAMUM LETTER PHASE-A NSHIEE;Lo;0;L;;;;;N;;;;; 1684E;BAMUM LETTER PHASE-A MAEM;Lo;0;L;;;;;N;;;;; 1684F;BAMUM LETTER PHASE-A NYI;Lo;0;L;;;;;N;;;;; 16850;BAMUM LETTER PHASE-A KAQ;Lo;0;L;;;;;N;;;;; 16851;BAMUM LETTER PHASE-A NSHA;Lo;0;L;;;;;N;;;;; 16852;BAMUM LETTER PHASE-A VEE;Lo;0;L;;;;;N;;;;; 16853;BAMUM LETTER PHASE-A LU;Lo;0;L;;;;;N;;;;; 16854;BAMUM LETTER PHASE-A NEN;Lo;0;L;;;;;N;;;;; 16855;BAMUM LETTER PHASE-A NAQ;Lo;0;L;;;;;N;;;;; 16856;BAMUM LETTER PHASE-A MBAQ;Lo;0;L;;;;;N;;;;; 16857;BAMUM LETTER PHASE-B NSHUET;Lo;0;L;;;;;N;;;;; 16858;BAMUM LETTER PHASE-B TU MAEMGBIEE;Lo;0;L;;;;;N;;;;; 16859;BAMUM LETTER PHASE-B SIEE;Lo;0;L;;;;;N;;;;; 1685A;BAMUM LETTER PHASE-B SET TU;Lo;0;L;;;;;N;;;;; 1685B;BAMUM LETTER PHASE-B LOM NTEUM;Lo;0;L;;;;;N;;;;; 1685C;BAMUM LETTER PHASE-B MBA MAELEE;Lo;0;L;;;;;N;;;;; 1685D;BAMUM LETTER PHASE-B KIEEM;Lo;0;L;;;;;N;;;;; 1685E;BAMUM LETTER PHASE-B YEURAE;Lo;0;L;;;;;N;;;;; 1685F;BAMUM LETTER PHASE-B MBAARAE;Lo;0;L;;;;;N;;;;; 16860;BAMUM LETTER PHASE-B KAM;Lo;0;L;;;;;N;;;;; 16861;BAMUM LETTER PHASE-B PEESHI;Lo;0;L;;;;;N;;;;; 16862;BAMUM LETTER PHASE-B YAFU LEERAEWA;Lo;0;L;;;;;N;;;;; 16863;BAMUM LETTER PHASE-B LAM NSHUT NYAM;Lo;0;L;;;;;N;;;;; 16864;BAMUM LETTER PHASE-B NTIEE SHEUOQ;Lo;0;L;;;;;N;;;;; 16865;BAMUM LETTER PHASE-B NDU NJAA;Lo;0;L;;;;;N;;;;; 16866;BAMUM LETTER PHASE-B GHEUGHEUAEM;Lo;0;L;;;;;N;;;;; 16867;BAMUM LETTER PHASE-B PIT;Lo;0;L;;;;;N;;;;; 16868;BAMUM LETTER PHASE-B TU NSIEE;Lo;0;L;;;;;N;;;;; 16869;BAMUM LETTER PHASE-B SHET NJAQ;Lo;0;L;;;;;N;;;;; 1686A;BAMUM LETTER PHASE-B SHEUAEQTU;Lo;0;L;;;;;N;;;;; 1686B;BAMUM LETTER PHASE-B MFON TEUAEQ;Lo;0;L;;;;;N;;;;; 1686C;BAMUM LETTER PHASE-B MBIT MBAAKET;Lo;0;L;;;;;N;;;;; 1686D;BAMUM LETTER PHASE-B NYI NTEUM;Lo;0;L;;;;;N;;;;; 1686E;BAMUM LETTER PHASE-B KEUPUQ;Lo;0;L;;;;;N;;;;; 1686F;BAMUM LETTER PHASE-B GHEUGHEN;Lo;0;L;;;;;N;;;;; 16870;BAMUM LETTER PHASE-B KEUYEUX;Lo;0;L;;;;;N;;;;; 16871;BAMUM LETTER PHASE-B LAANAE;Lo;0;L;;;;;N;;;;; 16872;BAMUM LETTER PHASE-B PARUM;Lo;0;L;;;;;N;;;;; 16873;BAMUM LETTER PHASE-B VEUM;Lo;0;L;;;;;N;;;;; 16874;BAMUM LETTER PHASE-B NGKINDI MVOP;Lo;0;L;;;;;N;;;;; 16875;BAMUM LETTER PHASE-B NGGEU MBU;Lo;0;L;;;;;N;;;;; 16876;BAMUM LETTER PHASE-B WUAET;Lo;0;L;;;;;N;;;;; 16877;BAMUM LETTER PHASE-B SAKEUAE;Lo;0;L;;;;;N;;;;; 16878;BAMUM LETTER PHASE-B TAAM;Lo;0;L;;;;;N;;;;; 16879;BAMUM LETTER PHASE-B MEUQ;Lo;0;L;;;;;N;;;;; 1687A;BAMUM LETTER PHASE-B NGGUOQ;Lo;0;L;;;;;N;;;;; 1687B;BAMUM LETTER PHASE-B NGGUOQ LARGE;Lo;0;L;;;;;N;;;;; 1687C;BAMUM LETTER PHASE-B MFIYAQ;Lo;0;L;;;;;N;;;;; 1687D;BAMUM LETTER PHASE-B SUE;Lo;0;L;;;;;N;;;;; 1687E;BAMUM LETTER PHASE-B MBEURI;Lo;0;L;;;;;N;;;;; 1687F;BAMUM LETTER PHASE-B MONTIEEN;Lo;0;L;;;;;N;;;;; 16880;BAMUM LETTER PHASE-B NYAEMAE;Lo;0;L;;;;;N;;;;; 16881;BAMUM LETTER PHASE-B PUNGAAM;Lo;0;L;;;;;N;;;;; 16882;BAMUM LETTER PHASE-B MEUT NGGEET;Lo;0;L;;;;;N;;;;; 16883;BAMUM LETTER PHASE-B FEUX;Lo;0;L;;;;;N;;;;; 16884;BAMUM LETTER PHASE-B MBUOQ;Lo;0;L;;;;;N;;;;; 16885;BAMUM LETTER PHASE-B FEE;Lo;0;L;;;;;N;;;;; 16886;BAMUM LETTER PHASE-B KEUAEM;Lo;0;L;;;;;N;;;;; 16887;BAMUM LETTER PHASE-B MA NJEUAENA;Lo;0;L;;;;;N;;;;; 16888;BAMUM LETTER PHASE-B MA NJUQA;Lo;0;L;;;;;N;;;;; 16889;BAMUM LETTER PHASE-B LET;Lo;0;L;;;;;N;;;;; 1688A;BAMUM LETTER PHASE-B NGGAAM;Lo;0;L;;;;;N;;;;; 1688B;BAMUM LETTER PHASE-B NSEN;Lo;0;L;;;;;N;;;;; 1688C;BAMUM LETTER PHASE-B MA;Lo;0;L;;;;;N;;;;; 1688D;BAMUM LETTER PHASE-B KIQ;Lo;0;L;;;;;N;;;;; 1688E;BAMUM LETTER PHASE-B NGOM;Lo;0;L;;;;;N;;;;; 1688F;BAMUM LETTER PHASE-C NGKUE MAEMBA;Lo;0;L;;;;;N;;;;; 16890;BAMUM LETTER PHASE-C NZA;Lo;0;L;;;;;N;;;;; 16891;BAMUM LETTER PHASE-C YUM;Lo;0;L;;;;;N;;;;; 16892;BAMUM LETTER PHASE-C WANGKUOQ;Lo;0;L;;;;;N;;;;; 16893;BAMUM LETTER PHASE-C NGGEN;Lo;0;L;;;;;N;;;;; 16894;BAMUM LETTER PHASE-C NDEUAEREE;Lo;0;L;;;;;N;;;;; 16895;BAMUM LETTER PHASE-C NGKAQ;Lo;0;L;;;;;N;;;;; 16896;BAMUM LETTER PHASE-C GHARAE;Lo;0;L;;;;;N;;;;; 16897;BAMUM LETTER PHASE-C MBEEKEET;Lo;0;L;;;;;N;;;;; 16898;BAMUM LETTER PHASE-C GBAYI;Lo;0;L;;;;;N;;;;; 16899;BAMUM LETTER PHASE-C NYIR MKPARAQ MEUN;Lo;0;L;;;;;N;;;;; 1689A;BAMUM LETTER PHASE-C NTU MBIT;Lo;0;L;;;;;N;;;;; 1689B;BAMUM LETTER PHASE-C MBEUM;Lo;0;L;;;;;N;;;;; 1689C;BAMUM LETTER PHASE-C PIRIEEN;Lo;0;L;;;;;N;;;;; 1689D;BAMUM LETTER PHASE-C NDOMBU;Lo;0;L;;;;;N;;;;; 1689E;BAMUM LETTER PHASE-C MBAA CABBAGE-TREE;Lo;0;L;;;;;N;;;;; 1689F;BAMUM LETTER PHASE-C KEUSHEUAEP;Lo;0;L;;;;;N;;;;; 168A0;BAMUM LETTER PHASE-C GHAP;Lo;0;L;;;;;N;;;;; 168A1;BAMUM LETTER PHASE-C KEUKAQ;Lo;0;L;;;;;N;;;;; 168A2;BAMUM LETTER PHASE-C YU MUOMAE;Lo;0;L;;;;;N;;;;; 168A3;BAMUM LETTER PHASE-C NZEUM;Lo;0;L;;;;;N;;;;; 168A4;BAMUM LETTER PHASE-C MBUE;Lo;0;L;;;;;N;;;;; 168A5;BAMUM LETTER PHASE-C NSEUAEN;Lo;0;L;;;;;N;;;;; 168A6;BAMUM LETTER PHASE-C MBIT;Lo;0;L;;;;;N;;;;; 168A7;BAMUM LETTER PHASE-C YEUQ;Lo;0;L;;;;;N;;;;; 168A8;BAMUM LETTER PHASE-C KPARAQ;Lo;0;L;;;;;N;;;;; 168A9;BAMUM LETTER PHASE-C KAA;Lo;0;L;;;;;N;;;;; 168AA;BAMUM LETTER PHASE-C SEUX;Lo;0;L;;;;;N;;;;; 168AB;BAMUM LETTER PHASE-C NDIDA;Lo;0;L;;;;;N;;;;; 168AC;BAMUM LETTER PHASE-C TAASHAE;Lo;0;L;;;;;N;;;;; 168AD;BAMUM LETTER PHASE-C NJUEQ;Lo;0;L;;;;;N;;;;; 168AE;BAMUM LETTER PHASE-C TITA YUE;Lo;0;L;;;;;N;;;;; 168AF;BAMUM LETTER PHASE-C SUAET;Lo;0;L;;;;;N;;;;; 168B0;BAMUM LETTER PHASE-C NGGUAEN NYAM;Lo;0;L;;;;;N;;;;; 168B1;BAMUM LETTER PHASE-C VEUX;Lo;0;L;;;;;N;;;;; 168B2;BAMUM LETTER PHASE-C NANSANAQ;Lo;0;L;;;;;N;;;;; 168B3;BAMUM LETTER PHASE-C MA KEUAERI;Lo;0;L;;;;;N;;;;; 168B4;BAMUM LETTER PHASE-C NTAA;Lo;0;L;;;;;N;;;;; 168B5;BAMUM LETTER PHASE-C NGGUON;Lo;0;L;;;;;N;;;;; 168B6;BAMUM LETTER PHASE-C LAP;Lo;0;L;;;;;N;;;;; 168B7;BAMUM LETTER PHASE-C MBIRIEEN;Lo;0;L;;;;;N;;;;; 168B8;BAMUM LETTER PHASE-C MGBASAQ;Lo;0;L;;;;;N;;;;; 168B9;BAMUM LETTER PHASE-C NTEUNGBA;Lo;0;L;;;;;N;;;;; 168BA;BAMUM LETTER PHASE-C TEUTEUX;Lo;0;L;;;;;N;;;;; 168BB;BAMUM LETTER PHASE-C NGGUM;Lo;0;L;;;;;N;;;;; 168BC;BAMUM LETTER PHASE-C FUE;Lo;0;L;;;;;N;;;;; 168BD;BAMUM LETTER PHASE-C NDEUT;Lo;0;L;;;;;N;;;;; 168BE;BAMUM LETTER PHASE-C NSA;Lo;0;L;;;;;N;;;;; 168BF;BAMUM LETTER PHASE-C NSHAQ;Lo;0;L;;;;;N;;;;; 168C0;BAMUM LETTER PHASE-C BUNG;Lo;0;L;;;;;N;;;;; 168C1;BAMUM LETTER PHASE-C VEUAEPEN;Lo;0;L;;;;;N;;;;; 168C2;BAMUM LETTER PHASE-C MBERAE;Lo;0;L;;;;;N;;;;; 168C3;BAMUM LETTER PHASE-C RU;Lo;0;L;;;;;N;;;;; 168C4;BAMUM LETTER PHASE-C NJAEM;Lo;0;L;;;;;N;;;;; 168C5;BAMUM LETTER PHASE-C LAM;Lo;0;L;;;;;N;;;;; 168C6;BAMUM LETTER PHASE-C TITUAEP;Lo;0;L;;;;;N;;;;; 168C7;BAMUM LETTER PHASE-C NSUOT NGOM;Lo;0;L;;;;;N;;;;; 168C8;BAMUM LETTER PHASE-C NJEEEE;Lo;0;L;;;;;N;;;;; 168C9;BAMUM LETTER PHASE-C KET;Lo;0;L;;;;;N;;;;; 168CA;BAMUM LETTER PHASE-C NGGU;Lo;0;L;;;;;N;;;;; 168CB;BAMUM LETTER PHASE-C MAESI;Lo;0;L;;;;;N;;;;; 168CC;BAMUM LETTER PHASE-C MBUAEM;Lo;0;L;;;;;N;;;;; 168CD;BAMUM LETTER PHASE-C LU;Lo;0;L;;;;;N;;;;; 168CE;BAMUM LETTER PHASE-C KUT;Lo;0;L;;;;;N;;;;; 168CF;BAMUM LETTER PHASE-C NJAM;Lo;0;L;;;;;N;;;;; 168D0;BAMUM LETTER PHASE-C NGOM;Lo;0;L;;;;;N;;;;; 168D1;BAMUM LETTER PHASE-C WUP;Lo;0;L;;;;;N;;;;; 168D2;BAMUM LETTER PHASE-C NGGUEET;Lo;0;L;;;;;N;;;;; 168D3;BAMUM LETTER PHASE-C NSOM;Lo;0;L;;;;;N;;;;; 168D4;BAMUM LETTER PHASE-C NTEN;Lo;0;L;;;;;N;;;;; 168D5;BAMUM LETTER PHASE-C KUOP NKAARAE;Lo;0;L;;;;;N;;;;; 168D6;BAMUM LETTER PHASE-C NSUN;Lo;0;L;;;;;N;;;;; 168D7;BAMUM LETTER PHASE-C NDAM;Lo;0;L;;;;;N;;;;; 168D8;BAMUM LETTER PHASE-C MA NSIEE;Lo;0;L;;;;;N;;;;; 168D9;BAMUM LETTER PHASE-C YAA;Lo;0;L;;;;;N;;;;; 168DA;BAMUM LETTER PHASE-C NDAP;Lo;0;L;;;;;N;;;;; 168DB;BAMUM LETTER PHASE-C SHUEQ;Lo;0;L;;;;;N;;;;; 168DC;BAMUM LETTER PHASE-C SETFON;Lo;0;L;;;;;N;;;;; 168DD;BAMUM LETTER PHASE-C MBI;Lo;0;L;;;;;N;;;;; 168DE;BAMUM LETTER PHASE-C MAEMBA;Lo;0;L;;;;;N;;;;; 168DF;BAMUM LETTER PHASE-C MBANYI;Lo;0;L;;;;;N;;;;; 168E0;BAMUM LETTER PHASE-C KEUSEUX;Lo;0;L;;;;;N;;;;; 168E1;BAMUM LETTER PHASE-C MBEUX;Lo;0;L;;;;;N;;;;; 168E2;BAMUM LETTER PHASE-C KEUM;Lo;0;L;;;;;N;;;;; 168E3;BAMUM LETTER PHASE-C MBAA PICKET;Lo;0;L;;;;;N;;;;; 168E4;BAMUM LETTER PHASE-C YUWOQ;Lo;0;L;;;;;N;;;;; 168E5;BAMUM LETTER PHASE-C NJEUX;Lo;0;L;;;;;N;;;;; 168E6;BAMUM LETTER PHASE-C MIEE;Lo;0;L;;;;;N;;;;; 168E7;BAMUM LETTER PHASE-C MUAE;Lo;0;L;;;;;N;;;;; 168E8;BAMUM LETTER PHASE-C SHIQ;Lo;0;L;;;;;N;;;;; 168E9;BAMUM LETTER PHASE-C KEN LAW;Lo;0;L;;;;;N;;;;; 168EA;BAMUM LETTER PHASE-C KEN FATIGUE;Lo;0;L;;;;;N;;;;; 168EB;BAMUM LETTER PHASE-C NGAQ;Lo;0;L;;;;;N;;;;; 168EC;BAMUM LETTER PHASE-C NAQ;Lo;0;L;;;;;N;;;;; 168ED;BAMUM LETTER PHASE-C LIQ;Lo;0;L;;;;;N;;;;; 168EE;BAMUM LETTER PHASE-C PIN;Lo;0;L;;;;;N;;;;; 168EF;BAMUM LETTER PHASE-C PEN;Lo;0;L;;;;;N;;;;; 168F0;BAMUM LETTER PHASE-C TET;Lo;0;L;;;;;N;;;;; 168F1;BAMUM LETTER PHASE-D MBUO;Lo;0;L;;;;;N;;;;; 168F2;BAMUM LETTER PHASE-D WAP;Lo;0;L;;;;;N;;;;; 168F3;BAMUM LETTER PHASE-D NJI;Lo;0;L;;;;;N;;;;; 168F4;BAMUM LETTER PHASE-D MFON;Lo;0;L;;;;;N;;;;; 168F5;BAMUM LETTER PHASE-D NJIEE;Lo;0;L;;;;;N;;;;; 168F6;BAMUM LETTER PHASE-D LIEE;Lo;0;L;;;;;N;;;;; 168F7;BAMUM LETTER PHASE-D NJEUT;Lo;0;L;;;;;N;;;;; 168F8;BAMUM LETTER PHASE-D NSHEE;Lo;0;L;;;;;N;;;;; 168F9;BAMUM LETTER PHASE-D NGGAAMAE;Lo;0;L;;;;;N;;;;; 168FA;BAMUM LETTER PHASE-D NYAM;Lo;0;L;;;;;N;;;;; 168FB;BAMUM LETTER PHASE-D WUAEN;Lo;0;L;;;;;N;;;;; 168FC;BAMUM LETTER PHASE-D NGKUN;Lo;0;L;;;;;N;;;;; 168FD;BAMUM LETTER PHASE-D SHEE;Lo;0;L;;;;;N;;;;; 168FE;BAMUM LETTER PHASE-D NGKAP;Lo;0;L;;;;;N;;;;; 168FF;BAMUM LETTER PHASE-D KEUAETMEUN;Lo;0;L;;;;;N;;;;; 16900;BAMUM LETTER PHASE-D TEUT;Lo;0;L;;;;;N;;;;; 16901;BAMUM LETTER PHASE-D SHEUAE;Lo;0;L;;;;;N;;;;; 16902;BAMUM LETTER PHASE-D NJAP;Lo;0;L;;;;;N;;;;; 16903;BAMUM LETTER PHASE-D SUE;Lo;0;L;;;;;N;;;;; 16904;BAMUM LETTER PHASE-D KET;Lo;0;L;;;;;N;;;;; 16905;BAMUM LETTER PHASE-D YAEMMAE;Lo;0;L;;;;;N;;;;; 16906;BAMUM LETTER PHASE-D KUOM;Lo;0;L;;;;;N;;;;; 16907;BAMUM LETTER PHASE-D SAP;Lo;0;L;;;;;N;;;;; 16908;BAMUM LETTER PHASE-D MFEUT;Lo;0;L;;;;;N;;;;; 16909;BAMUM LETTER PHASE-D NDEUX;Lo;0;L;;;;;N;;;;; 1690A;BAMUM LETTER PHASE-D MALEERI;Lo;0;L;;;;;N;;;;; 1690B;BAMUM LETTER PHASE-D MEUT;Lo;0;L;;;;;N;;;;; 1690C;BAMUM LETTER PHASE-D SEUAEQ;Lo;0;L;;;;;N;;;;; 1690D;BAMUM LETTER PHASE-D YEN;Lo;0;L;;;;;N;;;;; 1690E;BAMUM LETTER PHASE-D NJEUAEM;Lo;0;L;;;;;N;;;;; 1690F;BAMUM LETTER PHASE-D KEUOT MBUAE;Lo;0;L;;;;;N;;;;; 16910;BAMUM LETTER PHASE-D NGKEURI;Lo;0;L;;;;;N;;;;; 16911;BAMUM LETTER PHASE-D TU;Lo;0;L;;;;;N;;;;; 16912;BAMUM LETTER PHASE-D GHAA;Lo;0;L;;;;;N;;;;; 16913;BAMUM LETTER PHASE-D NGKYEE;Lo;0;L;;;;;N;;;;; 16914;BAMUM LETTER PHASE-D FEUFEUAET;Lo;0;L;;;;;N;;;;; 16915;BAMUM LETTER PHASE-D NDEE;Lo;0;L;;;;;N;;;;; 16916;BAMUM LETTER PHASE-D MGBOFUM;Lo;0;L;;;;;N;;;;; 16917;BAMUM LETTER PHASE-D LEUAEP;Lo;0;L;;;;;N;;;;; 16918;BAMUM LETTER PHASE-D NDON;Lo;0;L;;;;;N;;;;; 16919;BAMUM LETTER PHASE-D MONI;Lo;0;L;;;;;N;;;;; 1691A;BAMUM LETTER PHASE-D MGBEUN;Lo;0;L;;;;;N;;;;; 1691B;BAMUM LETTER PHASE-D PUUT;Lo;0;L;;;;;N;;;;; 1691C;BAMUM LETTER PHASE-D MGBIEE;Lo;0;L;;;;;N;;;;; 1691D;BAMUM LETTER PHASE-D MFO;Lo;0;L;;;;;N;;;;; 1691E;BAMUM LETTER PHASE-D LUM;Lo;0;L;;;;;N;;;;; 1691F;BAMUM LETTER PHASE-D NSIEEP;Lo;0;L;;;;;N;;;;; 16920;BAMUM LETTER PHASE-D MBAA;Lo;0;L;;;;;N;;;;; 16921;BAMUM LETTER PHASE-D KWAET;Lo;0;L;;;;;N;;;;; 16922;BAMUM LETTER PHASE-D NYET;Lo;0;L;;;;;N;;;;; 16923;BAMUM LETTER PHASE-D TEUAEN;Lo;0;L;;;;;N;;;;; 16924;BAMUM LETTER PHASE-D SOT;Lo;0;L;;;;;N;;;;; 16925;BAMUM LETTER PHASE-D YUWOQ;Lo;0;L;;;;;N;;;;; 16926;BAMUM LETTER PHASE-D KEUM;Lo;0;L;;;;;N;;;;; 16927;BAMUM LETTER PHASE-D RAEM;Lo;0;L;;;;;N;;;;; 16928;BAMUM LETTER PHASE-D TEEEE;Lo;0;L;;;;;N;;;;; 16929;BAMUM LETTER PHASE-D NGKEUAEQ;Lo;0;L;;;;;N;;;;; 1692A;BAMUM LETTER PHASE-D MFEUAE;Lo;0;L;;;;;N;;;;; 1692B;BAMUM LETTER PHASE-D NSIEET;Lo;0;L;;;;;N;;;;; 1692C;BAMUM LETTER PHASE-D KEUP;Lo;0;L;;;;;N;;;;; 1692D;BAMUM LETTER PHASE-D PIP;Lo;0;L;;;;;N;;;;; 1692E;BAMUM LETTER PHASE-D PEUTAE;Lo;0;L;;;;;N;;;;; 1692F;BAMUM LETTER PHASE-D NYUE;Lo;0;L;;;;;N;;;;; 16930;BAMUM LETTER PHASE-D LET;Lo;0;L;;;;;N;;;;; 16931;BAMUM LETTER PHASE-D NGGAAM;Lo;0;L;;;;;N;;;;; 16932;BAMUM LETTER PHASE-D MFIEE;Lo;0;L;;;;;N;;;;; 16933;BAMUM LETTER PHASE-D NGGWAEN;Lo;0;L;;;;;N;;;;; 16934;BAMUM LETTER PHASE-D YUOM;Lo;0;L;;;;;N;;;;; 16935;BAMUM LETTER PHASE-D PAP;Lo;0;L;;;;;N;;;;; 16936;BAMUM LETTER PHASE-D YUOP;Lo;0;L;;;;;N;;;;; 16937;BAMUM LETTER PHASE-D NDAM;Lo;0;L;;;;;N;;;;; 16938;BAMUM LETTER PHASE-D NTEUM;Lo;0;L;;;;;N;;;;; 16939;BAMUM LETTER PHASE-D SUAE;Lo;0;L;;;;;N;;;;; 1693A;BAMUM LETTER PHASE-D KUN;Lo;0;L;;;;;N;;;;; 1693B;BAMUM LETTER PHASE-D NGGEUX;Lo;0;L;;;;;N;;;;; 1693C;BAMUM LETTER PHASE-D NGKIEE;Lo;0;L;;;;;N;;;;; 1693D;BAMUM LETTER PHASE-D TUOT;Lo;0;L;;;;;N;;;;; 1693E;BAMUM LETTER PHASE-D MEUN;Lo;0;L;;;;;N;;;;; 1693F;BAMUM LETTER PHASE-D KUQ;Lo;0;L;;;;;N;;;;; 16940;BAMUM LETTER PHASE-D NSUM;Lo;0;L;;;;;N;;;;; 16941;BAMUM LETTER PHASE-D TEUN;Lo;0;L;;;;;N;;;;; 16942;BAMUM LETTER PHASE-D MAENJET;Lo;0;L;;;;;N;;;;; 16943;BAMUM LETTER PHASE-D NGGAP;Lo;0;L;;;;;N;;;;; 16944;BAMUM LETTER PHASE-D LEUM;Lo;0;L;;;;;N;;;;; 16945;BAMUM LETTER PHASE-D NGGUOM;Lo;0;L;;;;;N;;;;; 16946;BAMUM LETTER PHASE-D NSHUT;Lo;0;L;;;;;N;;;;; 16947;BAMUM LETTER PHASE-D NJUEQ;Lo;0;L;;;;;N;;;;; 16948;BAMUM LETTER PHASE-D GHEUAE;Lo;0;L;;;;;N;;;;; 16949;BAMUM LETTER PHASE-D KU;Lo;0;L;;;;;N;;;;; 1694A;BAMUM LETTER PHASE-D REN OLD;Lo;0;L;;;;;N;;;;; 1694B;BAMUM LETTER PHASE-D TAE;Lo;0;L;;;;;N;;;;; 1694C;BAMUM LETTER PHASE-D TOQ;Lo;0;L;;;;;N;;;;; 1694D;BAMUM LETTER PHASE-D NYI;Lo;0;L;;;;;N;;;;; 1694E;BAMUM LETTER PHASE-D RII;Lo;0;L;;;;;N;;;;; 1694F;BAMUM LETTER PHASE-D LEEEE;Lo;0;L;;;;;N;;;;; 16950;BAMUM LETTER PHASE-D MEEEE;Lo;0;L;;;;;N;;;;; 16951;BAMUM LETTER PHASE-D M;Lo;0;L;;;;;N;;;;; 16952;BAMUM LETTER PHASE-D SUU;Lo;0;L;;;;;N;;;;; 16953;BAMUM LETTER PHASE-D MU;Lo;0;L;;;;;N;;;;; 16954;BAMUM LETTER PHASE-D SHII;Lo;0;L;;;;;N;;;;; 16955;BAMUM LETTER PHASE-D SHEUX;Lo;0;L;;;;;N;;;;; 16956;BAMUM LETTER PHASE-D KYEE;Lo;0;L;;;;;N;;;;; 16957;BAMUM LETTER PHASE-D NU;Lo;0;L;;;;;N;;;;; 16958;BAMUM LETTER PHASE-D SHU;Lo;0;L;;;;;N;;;;; 16959;BAMUM LETTER PHASE-D NTEE;Lo;0;L;;;;;N;;;;; 1695A;BAMUM LETTER PHASE-D PEE;Lo;0;L;;;;;N;;;;; 1695B;BAMUM LETTER PHASE-D NI;Lo;0;L;;;;;N;;;;; 1695C;BAMUM LETTER PHASE-D SHOQ;Lo;0;L;;;;;N;;;;; 1695D;BAMUM LETTER PHASE-D PUQ;Lo;0;L;;;;;N;;;;; 1695E;BAMUM LETTER PHASE-D MVOP;Lo;0;L;;;;;N;;;;; 1695F;BAMUM LETTER PHASE-D LOQ;Lo;0;L;;;;;N;;;;; 16960;BAMUM LETTER PHASE-D REN MUCH;Lo;0;L;;;;;N;;;;; 16961;BAMUM LETTER PHASE-D TI;Lo;0;L;;;;;N;;;;; 16962;BAMUM LETTER PHASE-D NTUU;Lo;0;L;;;;;N;;;;; 16963;BAMUM LETTER PHASE-D MBAA SEVEN;Lo;0;L;;;;;N;;;;; 16964;BAMUM LETTER PHASE-D SAQ;Lo;0;L;;;;;N;;;;; 16965;BAMUM LETTER PHASE-D FAA;Lo;0;L;;;;;N;;;;; 16966;BAMUM LETTER PHASE-E NDAP;Lo;0;L;;;;;N;;;;; 16967;BAMUM LETTER PHASE-E TOON;Lo;0;L;;;;;N;;;;; 16968;BAMUM LETTER PHASE-E MBEUM;Lo;0;L;;;;;N;;;;; 16969;BAMUM LETTER PHASE-E LAP;Lo;0;L;;;;;N;;;;; 1696A;BAMUM LETTER PHASE-E VOM;Lo;0;L;;;;;N;;;;; 1696B;BAMUM LETTER PHASE-E LOON;Lo;0;L;;;;;N;;;;; 1696C;BAMUM LETTER PHASE-E PAA;Lo;0;L;;;;;N;;;;; 1696D;BAMUM LETTER PHASE-E SOM;Lo;0;L;;;;;N;;;;; 1696E;BAMUM LETTER PHASE-E RAQ;Lo;0;L;;;;;N;;;;; 1696F;BAMUM LETTER PHASE-E NSHUOP;Lo;0;L;;;;;N;;;;; 16970;BAMUM LETTER PHASE-E NDUN;Lo;0;L;;;;;N;;;;; 16971;BAMUM LETTER PHASE-E PUAE;Lo;0;L;;;;;N;;;;; 16972;BAMUM LETTER PHASE-E TAM;Lo;0;L;;;;;N;;;;; 16973;BAMUM LETTER PHASE-E NGKA;Lo;0;L;;;;;N;;;;; 16974;BAMUM LETTER PHASE-E KPEUX;Lo;0;L;;;;;N;;;;; 16975;BAMUM LETTER PHASE-E WUO;Lo;0;L;;;;;N;;;;; 16976;BAMUM LETTER PHASE-E SEE;Lo;0;L;;;;;N;;;;; 16977;BAMUM LETTER PHASE-E NGGEUAET;Lo;0;L;;;;;N;;;;; 16978;BAMUM LETTER PHASE-E PAAM;Lo;0;L;;;;;N;;;;; 16979;BAMUM LETTER PHASE-E TOO;Lo;0;L;;;;;N;;;;; 1697A;BAMUM LETTER PHASE-E KUOP;Lo;0;L;;;;;N;;;;; 1697B;BAMUM LETTER PHASE-E LOM;Lo;0;L;;;;;N;;;;; 1697C;BAMUM LETTER PHASE-E NSHIEE;Lo;0;L;;;;;N;;;;; 1697D;BAMUM LETTER PHASE-E NGOP;Lo;0;L;;;;;N;;;;; 1697E;BAMUM LETTER PHASE-E MAEM;Lo;0;L;;;;;N;;;;; 1697F;BAMUM LETTER PHASE-E NGKEUX;Lo;0;L;;;;;N;;;;; 16980;BAMUM LETTER PHASE-E NGOQ;Lo;0;L;;;;;N;;;;; 16981;BAMUM LETTER PHASE-E NSHUE;Lo;0;L;;;;;N;;;;; 16982;BAMUM LETTER PHASE-E RIMGBA;Lo;0;L;;;;;N;;;;; 16983;BAMUM LETTER PHASE-E NJEUX;Lo;0;L;;;;;N;;;;; 16984;BAMUM LETTER PHASE-E PEEM;Lo;0;L;;;;;N;;;;; 16985;BAMUM LETTER PHASE-E SAA;Lo;0;L;;;;;N;;;;; 16986;BAMUM LETTER PHASE-E NGGURAE;Lo;0;L;;;;;N;;;;; 16987;BAMUM LETTER PHASE-E MGBA;Lo;0;L;;;;;N;;;;; 16988;BAMUM LETTER PHASE-E GHEUX;Lo;0;L;;;;;N;;;;; 16989;BAMUM LETTER PHASE-E NGKEUAEM;Lo;0;L;;;;;N;;;;; 1698A;BAMUM LETTER PHASE-E NJAEMLI;Lo;0;L;;;;;N;;;;; 1698B;BAMUM LETTER PHASE-E MAP;Lo;0;L;;;;;N;;;;; 1698C;BAMUM LETTER PHASE-E LOOT;Lo;0;L;;;;;N;;;;; 1698D;BAMUM LETTER PHASE-E NGGEEEE;Lo;0;L;;;;;N;;;;; 1698E;BAMUM LETTER PHASE-E NDIQ;Lo;0;L;;;;;N;;;;; 1698F;BAMUM LETTER PHASE-E TAEN NTEUM;Lo;0;L;;;;;N;;;;; 16990;BAMUM LETTER PHASE-E SET;Lo;0;L;;;;;N;;;;; 16991;BAMUM LETTER PHASE-E PUM;Lo;0;L;;;;;N;;;;; 16992;BAMUM LETTER PHASE-E NDAA SOFTNESS;Lo;0;L;;;;;N;;;;; 16993;BAMUM LETTER PHASE-E NGGUAESHAE NYAM;Lo;0;L;;;;;N;;;;; 16994;BAMUM LETTER PHASE-E YIEE;Lo;0;L;;;;;N;;;;; 16995;BAMUM LETTER PHASE-E GHEUN;Lo;0;L;;;;;N;;;;; 16996;BAMUM LETTER PHASE-E TUAE;Lo;0;L;;;;;N;;;;; 16997;BAMUM LETTER PHASE-E YEUAE;Lo;0;L;;;;;N;;;;; 16998;BAMUM LETTER PHASE-E PO;Lo;0;L;;;;;N;;;;; 16999;BAMUM LETTER PHASE-E TUMAE;Lo;0;L;;;;;N;;;;; 1699A;BAMUM LETTER PHASE-E KEUAE;Lo;0;L;;;;;N;;;;; 1699B;BAMUM LETTER PHASE-E SUAEN;Lo;0;L;;;;;N;;;;; 1699C;BAMUM LETTER PHASE-E TEUAEQ;Lo;0;L;;;;;N;;;;; 1699D;BAMUM LETTER PHASE-E VEUAE;Lo;0;L;;;;;N;;;;; 1699E;BAMUM LETTER PHASE-E WEUX;Lo;0;L;;;;;N;;;;; 1699F;BAMUM LETTER PHASE-E LAAM;Lo;0;L;;;;;N;;;;; 169A0;BAMUM LETTER PHASE-E PU;Lo;0;L;;;;;N;;;;; 169A1;BAMUM LETTER PHASE-E TAAQ;Lo;0;L;;;;;N;;;;; 169A2;BAMUM LETTER PHASE-E GHAAMAE;Lo;0;L;;;;;N;;;;; 169A3;BAMUM LETTER PHASE-E NGEUREUT;Lo;0;L;;;;;N;;;;; 169A4;BAMUM LETTER PHASE-E SHEUAEQ;Lo;0;L;;;;;N;;;;; 169A5;BAMUM LETTER PHASE-E MGBEN;Lo;0;L;;;;;N;;;;; 169A6;BAMUM LETTER PHASE-E MBEE;Lo;0;L;;;;;N;;;;; 169A7;BAMUM LETTER PHASE-E NZAQ;Lo;0;L;;;;;N;;;;; 169A8;BAMUM LETTER PHASE-E NKOM;Lo;0;L;;;;;N;;;;; 169A9;BAMUM LETTER PHASE-E GBET;Lo;0;L;;;;;N;;;;; 169AA;BAMUM LETTER PHASE-E TUM;Lo;0;L;;;;;N;;;;; 169AB;BAMUM LETTER PHASE-E KUET;Lo;0;L;;;;;N;;;;; 169AC;BAMUM LETTER PHASE-E YAP;Lo;0;L;;;;;N;;;;; 169AD;BAMUM LETTER PHASE-E NYI CLEAVER;Lo;0;L;;;;;N;;;;; 169AE;BAMUM LETTER PHASE-E YIT;Lo;0;L;;;;;N;;;;; 169AF;BAMUM LETTER PHASE-E MFEUQ;Lo;0;L;;;;;N;;;;; 169B0;BAMUM LETTER PHASE-E NDIAQ;Lo;0;L;;;;;N;;;;; 169B1;BAMUM LETTER PHASE-E PIEEQ;Lo;0;L;;;;;N;;;;; 169B2;BAMUM LETTER PHASE-E YUEQ;Lo;0;L;;;;;N;;;;; 169B3;BAMUM LETTER PHASE-E LEUAEM;Lo;0;L;;;;;N;;;;; 169B4;BAMUM LETTER PHASE-E FUE;Lo;0;L;;;;;N;;;;; 169B5;BAMUM LETTER PHASE-E GBEUX;Lo;0;L;;;;;N;;;;; 169B6;BAMUM LETTER PHASE-E NGKUP;Lo;0;L;;;;;N;;;;; 169B7;BAMUM LETTER PHASE-E KET;Lo;0;L;;;;;N;;;;; 169B8;BAMUM LETTER PHASE-E MAE;Lo;0;L;;;;;N;;;;; 169B9;BAMUM LETTER PHASE-E NGKAAMI;Lo;0;L;;;;;N;;;;; 169BA;BAMUM LETTER PHASE-E GHET;Lo;0;L;;;;;N;;;;; 169BB;BAMUM LETTER PHASE-E FA;Lo;0;L;;;;;N;;;;; 169BC;BAMUM LETTER PHASE-E NTUM;Lo;0;L;;;;;N;;;;; 169BD;BAMUM LETTER PHASE-E PEUT;Lo;0;L;;;;;N;;;;; 169BE;BAMUM LETTER PHASE-E YEUM;Lo;0;L;;;;;N;;;;; 169BF;BAMUM LETTER PHASE-E NGGEUAE;Lo;0;L;;;;;N;;;;; 169C0;BAMUM LETTER PHASE-E NYI BETWEEN;Lo;0;L;;;;;N;;;;; 169C1;BAMUM LETTER PHASE-E NZUQ;Lo;0;L;;;;;N;;;;; 169C2;BAMUM LETTER PHASE-E POON;Lo;0;L;;;;;N;;;;; 169C3;BAMUM LETTER PHASE-E MIEE;Lo;0;L;;;;;N;;;;; 169C4;BAMUM LETTER PHASE-E FUET;Lo;0;L;;;;;N;;;;; 169C5;BAMUM LETTER PHASE-E NAE;Lo;0;L;;;;;N;;;;; 169C6;BAMUM LETTER PHASE-E MUAE;Lo;0;L;;;;;N;;;;; 169C7;BAMUM LETTER PHASE-E GHEUAE;Lo;0;L;;;;;N;;;;; 169C8;BAMUM LETTER PHASE-E FU I;Lo;0;L;;;;;N;;;;; 169C9;BAMUM LETTER PHASE-E MVI;Lo;0;L;;;;;N;;;;; 169CA;BAMUM LETTER PHASE-E PUAQ;Lo;0;L;;;;;N;;;;; 169CB;BAMUM LETTER PHASE-E NGKUM;Lo;0;L;;;;;N;;;;; 169CC;BAMUM LETTER PHASE-E KUT;Lo;0;L;;;;;N;;;;; 169CD;BAMUM LETTER PHASE-E PIET;Lo;0;L;;;;;N;;;;; 169CE;BAMUM LETTER PHASE-E NTAP;Lo;0;L;;;;;N;;;;; 169CF;BAMUM LETTER PHASE-E YEUAET;Lo;0;L;;;;;N;;;;; 169D0;BAMUM LETTER PHASE-E NGGUP;Lo;0;L;;;;;N;;;;; 169D1;BAMUM LETTER PHASE-E PA PEOPLE;Lo;0;L;;;;;N;;;;; 169D2;BAMUM LETTER PHASE-E FU CALL;Lo;0;L;;;;;N;;;;; 169D3;BAMUM LETTER PHASE-E FOM;Lo;0;L;;;;;N;;;;; 169D4;BAMUM LETTER PHASE-E NJEE;Lo;0;L;;;;;N;;;;; 169D5;BAMUM LETTER PHASE-E A;Lo;0;L;;;;;N;;;;; 169D6;BAMUM LETTER PHASE-E TOQ;Lo;0;L;;;;;N;;;;; 169D7;BAMUM LETTER PHASE-E O;Lo;0;L;;;;;N;;;;; 169D8;BAMUM LETTER PHASE-E I;Lo;0;L;;;;;N;;;;; 169D9;BAMUM LETTER PHASE-E LAQ;Lo;0;L;;;;;N;;;;; 169DA;BAMUM LETTER PHASE-E PA PLURAL;Lo;0;L;;;;;N;;;;; 169DB;BAMUM LETTER PHASE-E TAA;Lo;0;L;;;;;N;;;;; 169DC;BAMUM LETTER PHASE-E TAQ;Lo;0;L;;;;;N;;;;; 169DD;BAMUM LETTER PHASE-E NDAA MY HOUSE;Lo;0;L;;;;;N;;;;; 169DE;BAMUM LETTER PHASE-E SHIQ;Lo;0;L;;;;;N;;;;; 169DF;BAMUM LETTER PHASE-E YEUX;Lo;0;L;;;;;N;;;;; 169E0;BAMUM LETTER PHASE-E NGUAE;Lo;0;L;;;;;N;;;;; 169E1;BAMUM LETTER PHASE-E YUAEN;Lo;0;L;;;;;N;;;;; 169E2;BAMUM LETTER PHASE-E YOQ SWIMMING;Lo;0;L;;;;;N;;;;; 169E3;BAMUM LETTER PHASE-E YOQ COVER;Lo;0;L;;;;;N;;;;; 169E4;BAMUM LETTER PHASE-E YUQ;Lo;0;L;;;;;N;;;;; 169E5;BAMUM LETTER PHASE-E YUN;Lo;0;L;;;;;N;;;;; 169E6;BAMUM LETTER PHASE-E KEUX;Lo;0;L;;;;;N;;;;; 169E7;BAMUM LETTER PHASE-E PEUX;Lo;0;L;;;;;N;;;;; 169E8;BAMUM LETTER PHASE-E NJEE EPOCH;Lo;0;L;;;;;N;;;;; 169E9;BAMUM LETTER PHASE-E PUE;Lo;0;L;;;;;N;;;;; 169EA;BAMUM LETTER PHASE-E WUE;Lo;0;L;;;;;N;;;;; 169EB;BAMUM LETTER PHASE-E FEE;Lo;0;L;;;;;N;;;;; 169EC;BAMUM LETTER PHASE-E VEE;Lo;0;L;;;;;N;;;;; 169ED;BAMUM LETTER PHASE-E LU;Lo;0;L;;;;;N;;;;; 169EE;BAMUM LETTER PHASE-E MI;Lo;0;L;;;;;N;;;;; 169EF;BAMUM LETTER PHASE-E REUX;Lo;0;L;;;;;N;;;;; 169F0;BAMUM LETTER PHASE-E RAE;Lo;0;L;;;;;N;;;;; 169F1;BAMUM LETTER PHASE-E NGUAET;Lo;0;L;;;;;N;;;;; 169F2;BAMUM LETTER PHASE-E NGA;Lo;0;L;;;;;N;;;;; 169F3;BAMUM LETTER PHASE-E SHO;Lo;0;L;;;;;N;;;;; 169F4;BAMUM LETTER PHASE-E SHOQ;Lo;0;L;;;;;N;;;;; 169F5;BAMUM LETTER PHASE-E FU REMEDY;Lo;0;L;;;;;N;;;;; 169F6;BAMUM LETTER PHASE-E NA;Lo;0;L;;;;;N;;;;; 169F7;BAMUM LETTER PHASE-E PI;Lo;0;L;;;;;N;;;;; 169F8;BAMUM LETTER PHASE-E LOQ;Lo;0;L;;;;;N;;;;; 169F9;BAMUM LETTER PHASE-E KO;Lo;0;L;;;;;N;;;;; 169FA;BAMUM LETTER PHASE-E MEN;Lo;0;L;;;;;N;;;;; 169FB;BAMUM LETTER PHASE-E MA;Lo;0;L;;;;;N;;;;; 169FC;BAMUM LETTER PHASE-E MAQ;Lo;0;L;;;;;N;;;;; 169FD;BAMUM LETTER PHASE-E TEU;Lo;0;L;;;;;N;;;;; 169FE;BAMUM LETTER PHASE-E KI;Lo;0;L;;;;;N;;;;; 169FF;BAMUM LETTER PHASE-E MON;Lo;0;L;;;;;N;;;;; 16A00;BAMUM LETTER PHASE-E TEN;Lo;0;L;;;;;N;;;;; 16A01;BAMUM LETTER PHASE-E FAQ;Lo;0;L;;;;;N;;;;; 16A02;BAMUM LETTER PHASE-E GHOM;Lo;0;L;;;;;N;;;;; 16A03;BAMUM LETTER PHASE-F KA;Lo;0;L;;;;;N;;;;; 16A04;BAMUM LETTER PHASE-F U;Lo;0;L;;;;;N;;;;; 16A05;BAMUM LETTER PHASE-F KU;Lo;0;L;;;;;N;;;;; 16A06;BAMUM LETTER PHASE-F EE;Lo;0;L;;;;;N;;;;; 16A07;BAMUM LETTER PHASE-F REE;Lo;0;L;;;;;N;;;;; 16A08;BAMUM LETTER PHASE-F TAE;Lo;0;L;;;;;N;;;;; 16A09;BAMUM LETTER PHASE-F NYI;Lo;0;L;;;;;N;;;;; 16A0A;BAMUM LETTER PHASE-F LA;Lo;0;L;;;;;N;;;;; 16A0B;BAMUM LETTER PHASE-F RII;Lo;0;L;;;;;N;;;;; 16A0C;BAMUM LETTER PHASE-F RIEE;Lo;0;L;;;;;N;;;;; 16A0D;BAMUM LETTER PHASE-F MEEEE;Lo;0;L;;;;;N;;;;; 16A0E;BAMUM LETTER PHASE-F TAA;Lo;0;L;;;;;N;;;;; 16A0F;BAMUM LETTER PHASE-F NDAA;Lo;0;L;;;;;N;;;;; 16A10;BAMUM LETTER PHASE-F NJAEM;Lo;0;L;;;;;N;;;;; 16A11;BAMUM LETTER PHASE-F M;Lo;0;L;;;;;N;;;;; 16A12;BAMUM LETTER PHASE-F SUU;Lo;0;L;;;;;N;;;;; 16A13;BAMUM LETTER PHASE-F SHII;Lo;0;L;;;;;N;;;;; 16A14;BAMUM LETTER PHASE-F SI;Lo;0;L;;;;;N;;;;; 16A15;BAMUM LETTER PHASE-F SEUX;Lo;0;L;;;;;N;;;;; 16A16;BAMUM LETTER PHASE-F KYEE;Lo;0;L;;;;;N;;;;; 16A17;BAMUM LETTER PHASE-F KET;Lo;0;L;;;;;N;;;;; 16A18;BAMUM LETTER PHASE-F NUAE;Lo;0;L;;;;;N;;;;; 16A19;BAMUM LETTER PHASE-F NU;Lo;0;L;;;;;N;;;;; 16A1A;BAMUM LETTER PHASE-F NJUAE;Lo;0;L;;;;;N;;;;; 16A1B;BAMUM LETTER PHASE-F YOQ;Lo;0;L;;;;;N;;;;; 16A1C;BAMUM LETTER PHASE-F SHU;Lo;0;L;;;;;N;;;;; 16A1D;BAMUM LETTER PHASE-F YA;Lo;0;L;;;;;N;;;;; 16A1E;BAMUM LETTER PHASE-F NSHA;Lo;0;L;;;;;N;;;;; 16A1F;BAMUM LETTER PHASE-F PEUX;Lo;0;L;;;;;N;;;;; 16A20;BAMUM LETTER PHASE-F NTEE;Lo;0;L;;;;;N;;;;; 16A21;BAMUM LETTER PHASE-F WUE;Lo;0;L;;;;;N;;;;; 16A22;BAMUM LETTER PHASE-F PEE;Lo;0;L;;;;;N;;;;; 16A23;BAMUM LETTER PHASE-F RU;Lo;0;L;;;;;N;;;;; 16A24;BAMUM LETTER PHASE-F NI;Lo;0;L;;;;;N;;;;; 16A25;BAMUM LETTER PHASE-F REUX;Lo;0;L;;;;;N;;;;; 16A26;BAMUM LETTER PHASE-F KEN;Lo;0;L;;;;;N;;;;; 16A27;BAMUM LETTER PHASE-F NGKWAEN;Lo;0;L;;;;;N;;;;; 16A28;BAMUM LETTER PHASE-F NGGA;Lo;0;L;;;;;N;;;;; 16A29;BAMUM LETTER PHASE-F SHO;Lo;0;L;;;;;N;;;;; 16A2A;BAMUM LETTER PHASE-F PUAE;Lo;0;L;;;;;N;;;;; 16A2B;BAMUM LETTER PHASE-F FOM;Lo;0;L;;;;;N;;;;; 16A2C;BAMUM LETTER PHASE-F WA;Lo;0;L;;;;;N;;;;; 16A2D;BAMUM LETTER PHASE-F LI;Lo;0;L;;;;;N;;;;; 16A2E;BAMUM LETTER PHASE-F LOQ;Lo;0;L;;;;;N;;;;; 16A2F;BAMUM LETTER PHASE-F KO;Lo;0;L;;;;;N;;;;; 16A30;BAMUM LETTER PHASE-F MBEN;Lo;0;L;;;;;N;;;;; 16A31;BAMUM LETTER PHASE-F REN;Lo;0;L;;;;;N;;;;; 16A32;BAMUM LETTER PHASE-F MA;Lo;0;L;;;;;N;;;;; 16A33;BAMUM LETTER PHASE-F MO;Lo;0;L;;;;;N;;;;; 16A34;BAMUM LETTER PHASE-F MBAA;Lo;0;L;;;;;N;;;;; 16A35;BAMUM LETTER PHASE-F TET;Lo;0;L;;;;;N;;;;; 16A36;BAMUM LETTER PHASE-F KPA;Lo;0;L;;;;;N;;;;; 16A37;BAMUM LETTER PHASE-F SAMBA;Lo;0;L;;;;;N;;;;; 16A38;BAMUM LETTER PHASE-F VUEQ;Lo;0;L;;;;;N;;;;; 16A40;MRO LETTER TA;Lo;0;L;;;;;N;;;;; 16A41;MRO LETTER NGI;Lo;0;L;;;;;N;;;;; 16A42;MRO LETTER YO;Lo;0;L;;;;;N;;;;; 16A43;MRO LETTER MIM;Lo;0;L;;;;;N;;;;; 16A44;MRO LETTER BA;Lo;0;L;;;;;N;;;;; 16A45;MRO LETTER DA;Lo;0;L;;;;;N;;;;; 16A46;MRO LETTER A;Lo;0;L;;;;;N;;;;; 16A47;MRO LETTER PHI;Lo;0;L;;;;;N;;;;; 16A48;MRO LETTER KHAI;Lo;0;L;;;;;N;;;;; 16A49;MRO LETTER HAO;Lo;0;L;;;;;N;;;;; 16A4A;MRO LETTER DAI;Lo;0;L;;;;;N;;;;; 16A4B;MRO LETTER CHU;Lo;0;L;;;;;N;;;;; 16A4C;MRO LETTER KEAAE;Lo;0;L;;;;;N;;;;; 16A4D;MRO LETTER OL;Lo;0;L;;;;;N;;;;; 16A4E;MRO LETTER MAEM;Lo;0;L;;;;;N;;;;; 16A4F;MRO LETTER NIN;Lo;0;L;;;;;N;;;;; 16A50;MRO LETTER PA;Lo;0;L;;;;;N;;;;; 16A51;MRO LETTER OO;Lo;0;L;;;;;N;;;;; 16A52;MRO LETTER O;Lo;0;L;;;;;N;;;;; 16A53;MRO LETTER RO;Lo;0;L;;;;;N;;;;; 16A54;MRO LETTER SHI;Lo;0;L;;;;;N;;;;; 16A55;MRO LETTER THEA;Lo;0;L;;;;;N;;;;; 16A56;MRO LETTER EA;Lo;0;L;;;;;N;;;;; 16A57;MRO LETTER WA;Lo;0;L;;;;;N;;;;; 16A58;MRO LETTER E;Lo;0;L;;;;;N;;;;; 16A59;MRO LETTER KO;Lo;0;L;;;;;N;;;;; 16A5A;MRO LETTER LAN;Lo;0;L;;;;;N;;;;; 16A5B;MRO LETTER LA;Lo;0;L;;;;;N;;;;; 16A5C;MRO LETTER HAI;Lo;0;L;;;;;N;;;;; 16A5D;MRO LETTER RI;Lo;0;L;;;;;N;;;;; 16A5E;MRO LETTER TEK;Lo;0;L;;;;;N;;;;; 16A60;MRO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 16A61;MRO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 16A62;MRO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 16A63;MRO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 16A64;MRO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 16A65;MRO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 16A66;MRO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 16A67;MRO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 16A68;MRO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 16A69;MRO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 16A6E;MRO DANDA;Po;0;L;;;;;N;;;;; 16A6F;MRO DOUBLE DANDA;Po;0;L;;;;;N;;;;; 16A70;TANGSA LETTER OZ;Lo;0;L;;;;;N;;;;; 16A71;TANGSA LETTER OC;Lo;0;L;;;;;N;;;;; 16A72;TANGSA LETTER OQ;Lo;0;L;;;;;N;;;;; 16A73;TANGSA LETTER OX;Lo;0;L;;;;;N;;;;; 16A74;TANGSA LETTER AZ;Lo;0;L;;;;;N;;;;; 16A75;TANGSA LETTER AC;Lo;0;L;;;;;N;;;;; 16A76;TANGSA LETTER AQ;Lo;0;L;;;;;N;;;;; 16A77;TANGSA LETTER AX;Lo;0;L;;;;;N;;;;; 16A78;TANGSA LETTER VZ;Lo;0;L;;;;;N;;;;; 16A79;TANGSA LETTER VC;Lo;0;L;;;;;N;;;;; 16A7A;TANGSA LETTER VQ;Lo;0;L;;;;;N;;;;; 16A7B;TANGSA LETTER VX;Lo;0;L;;;;;N;;;;; 16A7C;TANGSA LETTER EZ;Lo;0;L;;;;;N;;;;; 16A7D;TANGSA LETTER EC;Lo;0;L;;;;;N;;;;; 16A7E;TANGSA LETTER EQ;Lo;0;L;;;;;N;;;;; 16A7F;TANGSA LETTER EX;Lo;0;L;;;;;N;;;;; 16A80;TANGSA LETTER IZ;Lo;0;L;;;;;N;;;;; 16A81;TANGSA LETTER IC;Lo;0;L;;;;;N;;;;; 16A82;TANGSA LETTER IQ;Lo;0;L;;;;;N;;;;; 16A83;TANGSA LETTER IX;Lo;0;L;;;;;N;;;;; 16A84;TANGSA LETTER UZ;Lo;0;L;;;;;N;;;;; 16A85;TANGSA LETTER UC;Lo;0;L;;;;;N;;;;; 16A86;TANGSA LETTER UQ;Lo;0;L;;;;;N;;;;; 16A87;TANGSA LETTER UX;Lo;0;L;;;;;N;;;;; 16A88;TANGSA LETTER AWZ;Lo;0;L;;;;;N;;;;; 16A89;TANGSA LETTER AWC;Lo;0;L;;;;;N;;;;; 16A8A;TANGSA LETTER AWQ;Lo;0;L;;;;;N;;;;; 16A8B;TANGSA LETTER AWX;Lo;0;L;;;;;N;;;;; 16A8C;TANGSA LETTER UIZ;Lo;0;L;;;;;N;;;;; 16A8D;TANGSA LETTER UIC;Lo;0;L;;;;;N;;;;; 16A8E;TANGSA LETTER UIQ;Lo;0;L;;;;;N;;;;; 16A8F;TANGSA LETTER UIX;Lo;0;L;;;;;N;;;;; 16A90;TANGSA LETTER FINAL NG;Lo;0;L;;;;;N;;;;; 16A91;TANGSA LETTER LONG UEX;Lo;0;L;;;;;N;;;;; 16A92;TANGSA LETTER SHORT UEZ;Lo;0;L;;;;;N;;;;; 16A93;TANGSA LETTER SHORT AWX;Lo;0;L;;;;;N;;;;; 16A94;TANGSA LETTER UEC;Lo;0;L;;;;;N;;;;; 16A95;TANGSA LETTER UEZ;Lo;0;L;;;;;N;;;;; 16A96;TANGSA LETTER UEQ;Lo;0;L;;;;;N;;;;; 16A97;TANGSA LETTER UEX;Lo;0;L;;;;;N;;;;; 16A98;TANGSA LETTER UIUZ;Lo;0;L;;;;;N;;;;; 16A99;TANGSA LETTER UIUC;Lo;0;L;;;;;N;;;;; 16A9A;TANGSA LETTER UIUQ;Lo;0;L;;;;;N;;;;; 16A9B;TANGSA LETTER UIUX;Lo;0;L;;;;;N;;;;; 16A9C;TANGSA LETTER MZ;Lo;0;L;;;;;N;;;;; 16A9D;TANGSA LETTER MC;Lo;0;L;;;;;N;;;;; 16A9E;TANGSA LETTER MQ;Lo;0;L;;;;;N;;;;; 16A9F;TANGSA LETTER MX;Lo;0;L;;;;;N;;;;; 16AA0;TANGSA LETTER KA;Lo;0;L;;;;;N;;;;; 16AA1;TANGSA LETTER KHA;Lo;0;L;;;;;N;;;;; 16AA2;TANGSA LETTER GA;Lo;0;L;;;;;N;;;;; 16AA3;TANGSA LETTER NGA;Lo;0;L;;;;;N;;;;; 16AA4;TANGSA LETTER SA;Lo;0;L;;;;;N;;;;; 16AA5;TANGSA LETTER YA;Lo;0;L;;;;;N;;;;; 16AA6;TANGSA LETTER WA;Lo;0;L;;;;;N;;;;; 16AA7;TANGSA LETTER PA;Lo;0;L;;;;;N;;;;; 16AA8;TANGSA LETTER NYA;Lo;0;L;;;;;N;;;;; 16AA9;TANGSA LETTER PHA;Lo;0;L;;;;;N;;;;; 16AAA;TANGSA LETTER BA;Lo;0;L;;;;;N;;;;; 16AAB;TANGSA LETTER MA;Lo;0;L;;;;;N;;;;; 16AAC;TANGSA LETTER NA;Lo;0;L;;;;;N;;;;; 16AAD;TANGSA LETTER HA;Lo;0;L;;;;;N;;;;; 16AAE;TANGSA LETTER LA;Lo;0;L;;;;;N;;;;; 16AAF;TANGSA LETTER HTA;Lo;0;L;;;;;N;;;;; 16AB0;TANGSA LETTER TA;Lo;0;L;;;;;N;;;;; 16AB1;TANGSA LETTER DA;Lo;0;L;;;;;N;;;;; 16AB2;TANGSA LETTER RA;Lo;0;L;;;;;N;;;;; 16AB3;TANGSA LETTER NHA;Lo;0;L;;;;;N;;;;; 16AB4;TANGSA LETTER SHA;Lo;0;L;;;;;N;;;;; 16AB5;TANGSA LETTER CA;Lo;0;L;;;;;N;;;;; 16AB6;TANGSA LETTER TSA;Lo;0;L;;;;;N;;;;; 16AB7;TANGSA LETTER GHA;Lo;0;L;;;;;N;;;;; 16AB8;TANGSA LETTER HTTA;Lo;0;L;;;;;N;;;;; 16AB9;TANGSA LETTER THA;Lo;0;L;;;;;N;;;;; 16ABA;TANGSA LETTER XA;Lo;0;L;;;;;N;;;;; 16ABB;TANGSA LETTER FA;Lo;0;L;;;;;N;;;;; 16ABC;TANGSA LETTER DHA;Lo;0;L;;;;;N;;;;; 16ABD;TANGSA LETTER CHA;Lo;0;L;;;;;N;;;;; 16ABE;TANGSA LETTER ZA;Lo;0;L;;;;;N;;;;; 16AC0;TANGSA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 16AC1;TANGSA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 16AC2;TANGSA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 16AC3;TANGSA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 16AC4;TANGSA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 16AC5;TANGSA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 16AC6;TANGSA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 16AC7;TANGSA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 16AC8;TANGSA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 16AC9;TANGSA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 16AD0;BASSA VAH LETTER ENNI;Lo;0;L;;;;;N;;;;; 16AD1;BASSA VAH LETTER KA;Lo;0;L;;;;;N;;;;; 16AD2;BASSA VAH LETTER SE;Lo;0;L;;;;;N;;;;; 16AD3;BASSA VAH LETTER FA;Lo;0;L;;;;;N;;;;; 16AD4;BASSA VAH LETTER MBE;Lo;0;L;;;;;N;;;;; 16AD5;BASSA VAH LETTER YIE;Lo;0;L;;;;;N;;;;; 16AD6;BASSA VAH LETTER GAH;Lo;0;L;;;;;N;;;;; 16AD7;BASSA VAH LETTER DHII;Lo;0;L;;;;;N;;;;; 16AD8;BASSA VAH LETTER KPAH;Lo;0;L;;;;;N;;;;; 16AD9;BASSA VAH LETTER JO;Lo;0;L;;;;;N;;;;; 16ADA;BASSA VAH LETTER HWAH;Lo;0;L;;;;;N;;;;; 16ADB;BASSA VAH LETTER WA;Lo;0;L;;;;;N;;;;; 16ADC;BASSA VAH LETTER ZO;Lo;0;L;;;;;N;;;;; 16ADD;BASSA VAH LETTER GBU;Lo;0;L;;;;;N;;;;; 16ADE;BASSA VAH LETTER DO;Lo;0;L;;;;;N;;;;; 16ADF;BASSA VAH LETTER CE;Lo;0;L;;;;;N;;;;; 16AE0;BASSA VAH LETTER UWU;Lo;0;L;;;;;N;;;;; 16AE1;BASSA VAH LETTER TO;Lo;0;L;;;;;N;;;;; 16AE2;BASSA VAH LETTER BA;Lo;0;L;;;;;N;;;;; 16AE3;BASSA VAH LETTER VU;Lo;0;L;;;;;N;;;;; 16AE4;BASSA VAH LETTER YEIN;Lo;0;L;;;;;N;;;;; 16AE5;BASSA VAH LETTER PA;Lo;0;L;;;;;N;;;;; 16AE6;BASSA VAH LETTER WADDA;Lo;0;L;;;;;N;;;;; 16AE7;BASSA VAH LETTER A;Lo;0;L;;;;;N;;;;; 16AE8;BASSA VAH LETTER O;Lo;0;L;;;;;N;;;;; 16AE9;BASSA VAH LETTER OO;Lo;0;L;;;;;N;;;;; 16AEA;BASSA VAH LETTER U;Lo;0;L;;;;;N;;;;; 16AEB;BASSA VAH LETTER EE;Lo;0;L;;;;;N;;;;; 16AEC;BASSA VAH LETTER E;Lo;0;L;;;;;N;;;;; 16AED;BASSA VAH LETTER I;Lo;0;L;;;;;N;;;;; 16AF0;BASSA VAH COMBINING HIGH TONE;Mn;1;NSM;;;;;N;;;;; 16AF1;BASSA VAH COMBINING LOW TONE;Mn;1;NSM;;;;;N;;;;; 16AF2;BASSA VAH COMBINING MID TONE;Mn;1;NSM;;;;;N;;;;; 16AF3;BASSA VAH COMBINING LOW-MID TONE;Mn;1;NSM;;;;;N;;;;; 16AF4;BASSA VAH COMBINING HIGH-LOW TONE;Mn;1;NSM;;;;;N;;;;; 16AF5;BASSA VAH FULL STOP;Po;0;L;;;;;N;;;;; 16B00;PAHAWH HMONG VOWEL KEEB;Lo;0;L;;;;;N;;;;; 16B01;PAHAWH HMONG VOWEL KEEV;Lo;0;L;;;;;N;;;;; 16B02;PAHAWH HMONG VOWEL KIB;Lo;0;L;;;;;N;;;;; 16B03;PAHAWH HMONG VOWEL KIV;Lo;0;L;;;;;N;;;;; 16B04;PAHAWH HMONG VOWEL KAUB;Lo;0;L;;;;;N;;;;; 16B05;PAHAWH HMONG VOWEL KAUV;Lo;0;L;;;;;N;;;;; 16B06;PAHAWH HMONG VOWEL KUB;Lo;0;L;;;;;N;;;;; 16B07;PAHAWH HMONG VOWEL KUV;Lo;0;L;;;;;N;;;;; 16B08;PAHAWH HMONG VOWEL KEB;Lo;0;L;;;;;N;;;;; 16B09;PAHAWH HMONG VOWEL KEV;Lo;0;L;;;;;N;;;;; 16B0A;PAHAWH HMONG VOWEL KAIB;Lo;0;L;;;;;N;;;;; 16B0B;PAHAWH HMONG VOWEL KAIV;Lo;0;L;;;;;N;;;;; 16B0C;PAHAWH HMONG VOWEL KOOB;Lo;0;L;;;;;N;;;;; 16B0D;PAHAWH HMONG VOWEL KOOV;Lo;0;L;;;;;N;;;;; 16B0E;PAHAWH HMONG VOWEL KAWB;Lo;0;L;;;;;N;;;;; 16B0F;PAHAWH HMONG VOWEL KAWV;Lo;0;L;;;;;N;;;;; 16B10;PAHAWH HMONG VOWEL KUAB;Lo;0;L;;;;;N;;;;; 16B11;PAHAWH HMONG VOWEL KUAV;Lo;0;L;;;;;N;;;;; 16B12;PAHAWH HMONG VOWEL KOB;Lo;0;L;;;;;N;;;;; 16B13;PAHAWH HMONG VOWEL KOV;Lo;0;L;;;;;N;;;;; 16B14;PAHAWH HMONG VOWEL KIAB;Lo;0;L;;;;;N;;;;; 16B15;PAHAWH HMONG VOWEL KIAV;Lo;0;L;;;;;N;;;;; 16B16;PAHAWH HMONG VOWEL KAB;Lo;0;L;;;;;N;;;;; 16B17;PAHAWH HMONG VOWEL KAV;Lo;0;L;;;;;N;;;;; 16B18;PAHAWH HMONG VOWEL KWB;Lo;0;L;;;;;N;;;;; 16B19;PAHAWH HMONG VOWEL KWV;Lo;0;L;;;;;N;;;;; 16B1A;PAHAWH HMONG VOWEL KAAB;Lo;0;L;;;;;N;;;;; 16B1B;PAHAWH HMONG VOWEL KAAV;Lo;0;L;;;;;N;;;;; 16B1C;PAHAWH HMONG CONSONANT VAU;Lo;0;L;;;;;N;;;;; 16B1D;PAHAWH HMONG CONSONANT NTSAU;Lo;0;L;;;;;N;;;;; 16B1E;PAHAWH HMONG CONSONANT LAU;Lo;0;L;;;;;N;;;;; 16B1F;PAHAWH HMONG CONSONANT HAU;Lo;0;L;;;;;N;;;;; 16B20;PAHAWH HMONG CONSONANT NLAU;Lo;0;L;;;;;N;;;;; 16B21;PAHAWH HMONG CONSONANT RAU;Lo;0;L;;;;;N;;;;; 16B22;PAHAWH HMONG CONSONANT NKAU;Lo;0;L;;;;;N;;;;; 16B23;PAHAWH HMONG CONSONANT QHAU;Lo;0;L;;;;;N;;;;; 16B24;PAHAWH HMONG CONSONANT YAU;Lo;0;L;;;;;N;;;;; 16B25;PAHAWH HMONG CONSONANT HLAU;Lo;0;L;;;;;N;;;;; 16B26;PAHAWH HMONG CONSONANT MAU;Lo;0;L;;;;;N;;;;; 16B27;PAHAWH HMONG CONSONANT CHAU;Lo;0;L;;;;;N;;;;; 16B28;PAHAWH HMONG CONSONANT NCHAU;Lo;0;L;;;;;N;;;;; 16B29;PAHAWH HMONG CONSONANT HNAU;Lo;0;L;;;;;N;;;;; 16B2A;PAHAWH HMONG CONSONANT PLHAU;Lo;0;L;;;;;N;;;;; 16B2B;PAHAWH HMONG CONSONANT NTHAU;Lo;0;L;;;;;N;;;;; 16B2C;PAHAWH HMONG CONSONANT NAU;Lo;0;L;;;;;N;;;;; 16B2D;PAHAWH HMONG CONSONANT AU;Lo;0;L;;;;;N;;;;; 16B2E;PAHAWH HMONG CONSONANT XAU;Lo;0;L;;;;;N;;;;; 16B2F;PAHAWH HMONG CONSONANT CAU;Lo;0;L;;;;;N;;;;; 16B30;PAHAWH HMONG MARK CIM TUB;Mn;230;NSM;;;;;N;;;;; 16B31;PAHAWH HMONG MARK CIM SO;Mn;230;NSM;;;;;N;;;;; 16B32;PAHAWH HMONG MARK CIM KES;Mn;230;NSM;;;;;N;;;;; 16B33;PAHAWH HMONG MARK CIM KHAV;Mn;230;NSM;;;;;N;;;;; 16B34;PAHAWH HMONG MARK CIM SUAM;Mn;230;NSM;;;;;N;;;;; 16B35;PAHAWH HMONG MARK CIM HOM;Mn;230;NSM;;;;;N;;;;; 16B36;PAHAWH HMONG MARK CIM TAUM;Mn;230;NSM;;;;;N;;;;; 16B37;PAHAWH HMONG SIGN VOS THOM;Po;0;L;;;;;N;;;;; 16B38;PAHAWH HMONG SIGN VOS TSHAB CEEB;Po;0;L;;;;;N;;;;; 16B39;PAHAWH HMONG SIGN CIM CHEEM;Po;0;L;;;;;N;;;;; 16B3A;PAHAWH HMONG SIGN VOS THIAB;Po;0;L;;;;;N;;;;; 16B3B;PAHAWH HMONG SIGN VOS FEEM;Po;0;L;;;;;N;;;;; 16B3C;PAHAWH HMONG SIGN XYEEM NTXIV;So;0;L;;;;;N;;;;; 16B3D;PAHAWH HMONG SIGN XYEEM RHO;So;0;L;;;;;N;;;;; 16B3E;PAHAWH HMONG SIGN XYEEM TOV;So;0;L;;;;;N;;;;; 16B3F;PAHAWH HMONG SIGN XYEEM FAIB;So;0;L;;;;;N;;;;; 16B40;PAHAWH HMONG SIGN VOS SEEV;Lm;0;L;;;;;N;;;;; 16B41;PAHAWH HMONG SIGN MEEJ SUAB;Lm;0;L;;;;;N;;;;; 16B42;PAHAWH HMONG SIGN VOS NRUA;Lm;0;L;;;;;N;;;;; 16B43;PAHAWH HMONG SIGN IB YAM;Lm;0;L;;;;;N;;;;; 16B44;PAHAWH HMONG SIGN XAUS;Po;0;L;;;;;N;;;;; 16B45;PAHAWH HMONG SIGN CIM TSOV ROG;So;0;L;;;;;N;;;;; 16B50;PAHAWH HMONG DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 16B51;PAHAWH HMONG DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 16B52;PAHAWH HMONG DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 16B53;PAHAWH HMONG DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 16B54;PAHAWH HMONG DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 16B55;PAHAWH HMONG DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 16B56;PAHAWH HMONG DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 16B57;PAHAWH HMONG DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 16B58;PAHAWH HMONG DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 16B59;PAHAWH HMONG DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 16B5B;PAHAWH HMONG NUMBER TENS;No;0;L;;;;10;N;;;;; 16B5C;PAHAWH HMONG NUMBER HUNDREDS;No;0;L;;;;100;N;;;;; 16B5D;PAHAWH HMONG NUMBER TEN THOUSANDS;No;0;L;;;;10000;N;;;;; 16B5E;PAHAWH HMONG NUMBER MILLIONS;No;0;L;;;;1000000;N;;;;; 16B5F;PAHAWH HMONG NUMBER HUNDRED MILLIONS;No;0;L;;;;100000000;N;;;;; 16B60;PAHAWH HMONG NUMBER TEN BILLIONS;No;0;L;;;;10000000000;N;;;;; 16B61;PAHAWH HMONG NUMBER TRILLIONS;No;0;L;;;;1000000000000;N;;;;; 16B63;PAHAWH HMONG SIGN VOS LUB;Lo;0;L;;;;;N;;;;; 16B64;PAHAWH HMONG SIGN XYOO;Lo;0;L;;;;;N;;;;; 16B65;PAHAWH HMONG SIGN HLI;Lo;0;L;;;;;N;;;;; 16B66;PAHAWH HMONG SIGN THIRD-STAGE HLI;Lo;0;L;;;;;N;;;;; 16B67;PAHAWH HMONG SIGN ZWJ THAJ;Lo;0;L;;;;;N;;;;; 16B68;PAHAWH HMONG SIGN HNUB;Lo;0;L;;;;;N;;;;; 16B69;PAHAWH HMONG SIGN NQIG;Lo;0;L;;;;;N;;;;; 16B6A;PAHAWH HMONG SIGN XIAB;Lo;0;L;;;;;N;;;;; 16B6B;PAHAWH HMONG SIGN NTUJ;Lo;0;L;;;;;N;;;;; 16B6C;PAHAWH HMONG SIGN AV;Lo;0;L;;;;;N;;;;; 16B6D;PAHAWH HMONG SIGN TXHEEJ CEEV;Lo;0;L;;;;;N;;;;; 16B6E;PAHAWH HMONG SIGN MEEJ TSEEB;Lo;0;L;;;;;N;;;;; 16B6F;PAHAWH HMONG SIGN TAU;Lo;0;L;;;;;N;;;;; 16B70;PAHAWH HMONG SIGN LOS;Lo;0;L;;;;;N;;;;; 16B71;PAHAWH HMONG SIGN MUS;Lo;0;L;;;;;N;;;;; 16B72;PAHAWH HMONG SIGN CIM HAIS LUS NTOG NTOG;Lo;0;L;;;;;N;;;;; 16B73;PAHAWH HMONG SIGN CIM CUAM TSHOOJ;Lo;0;L;;;;;N;;;;; 16B74;PAHAWH HMONG SIGN CIM TXWV;Lo;0;L;;;;;N;;;;; 16B75;PAHAWH HMONG SIGN CIM TXWV CHWV;Lo;0;L;;;;;N;;;;; 16B76;PAHAWH HMONG SIGN CIM PUB DAWB;Lo;0;L;;;;;N;;;;; 16B77;PAHAWH HMONG SIGN CIM NRES TOS;Lo;0;L;;;;;N;;;;; 16B7D;PAHAWH HMONG CLAN SIGN TSHEEJ;Lo;0;L;;;;;N;;;;; 16B7E;PAHAWH HMONG CLAN SIGN YEEG;Lo;0;L;;;;;N;;;;; 16B7F;PAHAWH HMONG CLAN SIGN LIS;Lo;0;L;;;;;N;;;;; 16B80;PAHAWH HMONG CLAN SIGN LAUJ;Lo;0;L;;;;;N;;;;; 16B81;PAHAWH HMONG CLAN SIGN XYOOJ;Lo;0;L;;;;;N;;;;; 16B82;PAHAWH HMONG CLAN SIGN KOO;Lo;0;L;;;;;N;;;;; 16B83;PAHAWH HMONG CLAN SIGN HAWJ;Lo;0;L;;;;;N;;;;; 16B84;PAHAWH HMONG CLAN SIGN MUAS;Lo;0;L;;;;;N;;;;; 16B85;PAHAWH HMONG CLAN SIGN THOJ;Lo;0;L;;;;;N;;;;; 16B86;PAHAWH HMONG CLAN SIGN TSAB;Lo;0;L;;;;;N;;;;; 16B87;PAHAWH HMONG CLAN SIGN PHAB;Lo;0;L;;;;;N;;;;; 16B88;PAHAWH HMONG CLAN SIGN KHAB;Lo;0;L;;;;;N;;;;; 16B89;PAHAWH HMONG CLAN SIGN HAM;Lo;0;L;;;;;N;;;;; 16B8A;PAHAWH HMONG CLAN SIGN VAJ;Lo;0;L;;;;;N;;;;; 16B8B;PAHAWH HMONG CLAN SIGN FAJ;Lo;0;L;;;;;N;;;;; 16B8C;PAHAWH HMONG CLAN SIGN YAJ;Lo;0;L;;;;;N;;;;; 16B8D;PAHAWH HMONG CLAN SIGN TSWB;Lo;0;L;;;;;N;;;;; 16B8E;PAHAWH HMONG CLAN SIGN KWM;Lo;0;L;;;;;N;;;;; 16B8F;PAHAWH HMONG CLAN SIGN VWJ;Lo;0;L;;;;;N;;;;; 16E40;MEDEFAIDRIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;16E60; 16E41;MEDEFAIDRIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;16E61; 16E42;MEDEFAIDRIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;16E62; 16E43;MEDEFAIDRIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;16E63; 16E44;MEDEFAIDRIN CAPITAL LETTER ATIU;Lu;0;L;;;;;N;;;;16E64; 16E45;MEDEFAIDRIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;16E65; 16E46;MEDEFAIDRIN CAPITAL LETTER KP;Lu;0;L;;;;;N;;;;16E66; 16E47;MEDEFAIDRIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;16E67; 16E48;MEDEFAIDRIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;16E68; 16E49;MEDEFAIDRIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;16E69; 16E4A;MEDEFAIDRIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;16E6A; 16E4B;MEDEFAIDRIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;16E6B; 16E4C;MEDEFAIDRIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;16E6C; 16E4D;MEDEFAIDRIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;16E6D; 16E4E;MEDEFAIDRIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;16E6E; 16E4F;MEDEFAIDRIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;16E6F; 16E50;MEDEFAIDRIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;16E70; 16E51;MEDEFAIDRIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;16E71; 16E52;MEDEFAIDRIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;16E72; 16E53;MEDEFAIDRIN CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;16E73; 16E54;MEDEFAIDRIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;16E74; 16E55;MEDEFAIDRIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;16E75; 16E56;MEDEFAIDRIN CAPITAL LETTER HP;Lu;0;L;;;;;N;;;;16E76; 16E57;MEDEFAIDRIN CAPITAL LETTER NY;Lu;0;L;;;;;N;;;;16E77; 16E58;MEDEFAIDRIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;16E78; 16E59;MEDEFAIDRIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;16E79; 16E5A;MEDEFAIDRIN CAPITAL LETTER OE;Lu;0;L;;;;;N;;;;16E7A; 16E5B;MEDEFAIDRIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;16E7B; 16E5C;MEDEFAIDRIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;16E7C; 16E5D;MEDEFAIDRIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;16E7D; 16E5E;MEDEFAIDRIN CAPITAL LETTER AI;Lu;0;L;;;;;N;;;;16E7E; 16E5F;MEDEFAIDRIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;16E7F; 16E60;MEDEFAIDRIN SMALL LETTER M;Ll;0;L;;;;;N;;;16E40;;16E40 16E61;MEDEFAIDRIN SMALL LETTER S;Ll;0;L;;;;;N;;;16E41;;16E41 16E62;MEDEFAIDRIN SMALL LETTER V;Ll;0;L;;;;;N;;;16E42;;16E42 16E63;MEDEFAIDRIN SMALL LETTER W;Ll;0;L;;;;;N;;;16E43;;16E43 16E64;MEDEFAIDRIN SMALL LETTER ATIU;Ll;0;L;;;;;N;;;16E44;;16E44 16E65;MEDEFAIDRIN SMALL LETTER Z;Ll;0;L;;;;;N;;;16E45;;16E45 16E66;MEDEFAIDRIN SMALL LETTER KP;Ll;0;L;;;;;N;;;16E46;;16E46 16E67;MEDEFAIDRIN SMALL LETTER P;Ll;0;L;;;;;N;;;16E47;;16E47 16E68;MEDEFAIDRIN SMALL LETTER T;Ll;0;L;;;;;N;;;16E48;;16E48 16E69;MEDEFAIDRIN SMALL LETTER G;Ll;0;L;;;;;N;;;16E49;;16E49 16E6A;MEDEFAIDRIN SMALL LETTER F;Ll;0;L;;;;;N;;;16E4A;;16E4A 16E6B;MEDEFAIDRIN SMALL LETTER I;Ll;0;L;;;;;N;;;16E4B;;16E4B 16E6C;MEDEFAIDRIN SMALL LETTER K;Ll;0;L;;;;;N;;;16E4C;;16E4C 16E6D;MEDEFAIDRIN SMALL LETTER A;Ll;0;L;;;;;N;;;16E4D;;16E4D 16E6E;MEDEFAIDRIN SMALL LETTER J;Ll;0;L;;;;;N;;;16E4E;;16E4E 16E6F;MEDEFAIDRIN SMALL LETTER E;Ll;0;L;;;;;N;;;16E4F;;16E4F 16E70;MEDEFAIDRIN SMALL LETTER B;Ll;0;L;;;;;N;;;16E50;;16E50 16E71;MEDEFAIDRIN SMALL LETTER C;Ll;0;L;;;;;N;;;16E51;;16E51 16E72;MEDEFAIDRIN SMALL LETTER U;Ll;0;L;;;;;N;;;16E52;;16E52 16E73;MEDEFAIDRIN SMALL LETTER YU;Ll;0;L;;;;;N;;;16E53;;16E53 16E74;MEDEFAIDRIN SMALL LETTER L;Ll;0;L;;;;;N;;;16E54;;16E54 16E75;MEDEFAIDRIN SMALL LETTER Q;Ll;0;L;;;;;N;;;16E55;;16E55 16E76;MEDEFAIDRIN SMALL LETTER HP;Ll;0;L;;;;;N;;;16E56;;16E56 16E77;MEDEFAIDRIN SMALL LETTER NY;Ll;0;L;;;;;N;;;16E57;;16E57 16E78;MEDEFAIDRIN SMALL LETTER X;Ll;0;L;;;;;N;;;16E58;;16E58 16E79;MEDEFAIDRIN SMALL LETTER D;Ll;0;L;;;;;N;;;16E59;;16E59 16E7A;MEDEFAIDRIN SMALL LETTER OE;Ll;0;L;;;;;N;;;16E5A;;16E5A 16E7B;MEDEFAIDRIN SMALL LETTER N;Ll;0;L;;;;;N;;;16E5B;;16E5B 16E7C;MEDEFAIDRIN SMALL LETTER R;Ll;0;L;;;;;N;;;16E5C;;16E5C 16E7D;MEDEFAIDRIN SMALL LETTER O;Ll;0;L;;;;;N;;;16E5D;;16E5D 16E7E;MEDEFAIDRIN SMALL LETTER AI;Ll;0;L;;;;;N;;;16E5E;;16E5E 16E7F;MEDEFAIDRIN SMALL LETTER Y;Ll;0;L;;;;;N;;;16E5F;;16E5F 16E80;MEDEFAIDRIN DIGIT ZERO;No;0;L;;;;0;N;;;;; 16E81;MEDEFAIDRIN DIGIT ONE;No;0;L;;;;1;N;;;;; 16E82;MEDEFAIDRIN DIGIT TWO;No;0;L;;;;2;N;;;;; 16E83;MEDEFAIDRIN DIGIT THREE;No;0;L;;;;3;N;;;;; 16E84;MEDEFAIDRIN DIGIT FOUR;No;0;L;;;;4;N;;;;; 16E85;MEDEFAIDRIN DIGIT FIVE;No;0;L;;;;5;N;;;;; 16E86;MEDEFAIDRIN DIGIT SIX;No;0;L;;;;6;N;;;;; 16E87;MEDEFAIDRIN DIGIT SEVEN;No;0;L;;;;7;N;;;;; 16E88;MEDEFAIDRIN DIGIT EIGHT;No;0;L;;;;8;N;;;;; 16E89;MEDEFAIDRIN DIGIT NINE;No;0;L;;;;9;N;;;;; 16E8A;MEDEFAIDRIN NUMBER TEN;No;0;L;;;;10;N;;;;; 16E8B;MEDEFAIDRIN NUMBER ELEVEN;No;0;L;;;;11;N;;;;; 16E8C;MEDEFAIDRIN NUMBER TWELVE;No;0;L;;;;12;N;;;;; 16E8D;MEDEFAIDRIN NUMBER THIRTEEN;No;0;L;;;;13;N;;;;; 16E8E;MEDEFAIDRIN NUMBER FOURTEEN;No;0;L;;;;14;N;;;;; 16E8F;MEDEFAIDRIN NUMBER FIFTEEN;No;0;L;;;;15;N;;;;; 16E90;MEDEFAIDRIN NUMBER SIXTEEN;No;0;L;;;;16;N;;;;; 16E91;MEDEFAIDRIN NUMBER SEVENTEEN;No;0;L;;;;17;N;;;;; 16E92;MEDEFAIDRIN NUMBER EIGHTEEN;No;0;L;;;;18;N;;;;; 16E93;MEDEFAIDRIN NUMBER NINETEEN;No;0;L;;;;19;N;;;;; 16E94;MEDEFAIDRIN DIGIT ONE ALTERNATE FORM;No;0;L;;;;1;N;;;;; 16E95;MEDEFAIDRIN DIGIT TWO ALTERNATE FORM;No;0;L;;;;2;N;;;;; 16E96;MEDEFAIDRIN DIGIT THREE ALTERNATE FORM;No;0;L;;;;3;N;;;;; 16E97;MEDEFAIDRIN COMMA;Po;0;L;;;;;N;;;;; 16E98;MEDEFAIDRIN FULL STOP;Po;0;L;;;;;N;;;;; 16E99;MEDEFAIDRIN SYMBOL AIVA;Po;0;L;;;;;N;;;;; 16E9A;MEDEFAIDRIN EXCLAMATION OH;Po;0;L;;;;;N;;;;; 16F00;MIAO LETTER PA;Lo;0;L;;;;;N;;;;; 16F01;MIAO LETTER BA;Lo;0;L;;;;;N;;;;; 16F02;MIAO LETTER YI PA;Lo;0;L;;;;;N;;;;; 16F03;MIAO LETTER PLA;Lo;0;L;;;;;N;;;;; 16F04;MIAO LETTER MA;Lo;0;L;;;;;N;;;;; 16F05;MIAO LETTER MHA;Lo;0;L;;;;;N;;;;; 16F06;MIAO LETTER ARCHAIC MA;Lo;0;L;;;;;N;;;;; 16F07;MIAO LETTER FA;Lo;0;L;;;;;N;;;;; 16F08;MIAO LETTER VA;Lo;0;L;;;;;N;;;;; 16F09;MIAO LETTER VFA;Lo;0;L;;;;;N;;;;; 16F0A;MIAO LETTER TA;Lo;0;L;;;;;N;;;;; 16F0B;MIAO LETTER DA;Lo;0;L;;;;;N;;;;; 16F0C;MIAO LETTER YI TTA;Lo;0;L;;;;;N;;;;; 16F0D;MIAO LETTER YI TA;Lo;0;L;;;;;N;;;;; 16F0E;MIAO LETTER TTA;Lo;0;L;;;;;N;;;;; 16F0F;MIAO LETTER DDA;Lo;0;L;;;;;N;;;;; 16F10;MIAO LETTER NA;Lo;0;L;;;;;N;;;;; 16F11;MIAO LETTER NHA;Lo;0;L;;;;;N;;;;; 16F12;MIAO LETTER YI NNA;Lo;0;L;;;;;N;;;;; 16F13;MIAO LETTER ARCHAIC NA;Lo;0;L;;;;;N;;;;; 16F14;MIAO LETTER NNA;Lo;0;L;;;;;N;;;;; 16F15;MIAO LETTER NNHA;Lo;0;L;;;;;N;;;;; 16F16;MIAO LETTER LA;Lo;0;L;;;;;N;;;;; 16F17;MIAO LETTER LYA;Lo;0;L;;;;;N;;;;; 16F18;MIAO LETTER LHA;Lo;0;L;;;;;N;;;;; 16F19;MIAO LETTER LHYA;Lo;0;L;;;;;N;;;;; 16F1A;MIAO LETTER TLHA;Lo;0;L;;;;;N;;;;; 16F1B;MIAO LETTER DLHA;Lo;0;L;;;;;N;;;;; 16F1C;MIAO LETTER TLHYA;Lo;0;L;;;;;N;;;;; 16F1D;MIAO LETTER DLHYA;Lo;0;L;;;;;N;;;;; 16F1E;MIAO LETTER KA;Lo;0;L;;;;;N;;;;; 16F1F;MIAO LETTER GA;Lo;0;L;;;;;N;;;;; 16F20;MIAO LETTER YI KA;Lo;0;L;;;;;N;;;;; 16F21;MIAO LETTER QA;Lo;0;L;;;;;N;;;;; 16F22;MIAO LETTER QGA;Lo;0;L;;;;;N;;;;; 16F23;MIAO LETTER NGA;Lo;0;L;;;;;N;;;;; 16F24;MIAO LETTER NGHA;Lo;0;L;;;;;N;;;;; 16F25;MIAO LETTER ARCHAIC NGA;Lo;0;L;;;;;N;;;;; 16F26;MIAO LETTER HA;Lo;0;L;;;;;N;;;;; 16F27;MIAO LETTER XA;Lo;0;L;;;;;N;;;;; 16F28;MIAO LETTER GHA;Lo;0;L;;;;;N;;;;; 16F29;MIAO LETTER GHHA;Lo;0;L;;;;;N;;;;; 16F2A;MIAO LETTER TSSA;Lo;0;L;;;;;N;;;;; 16F2B;MIAO LETTER DZZA;Lo;0;L;;;;;N;;;;; 16F2C;MIAO LETTER NYA;Lo;0;L;;;;;N;;;;; 16F2D;MIAO LETTER NYHA;Lo;0;L;;;;;N;;;;; 16F2E;MIAO LETTER TSHA;Lo;0;L;;;;;N;;;;; 16F2F;MIAO LETTER DZHA;Lo;0;L;;;;;N;;;;; 16F30;MIAO LETTER YI TSHA;Lo;0;L;;;;;N;;;;; 16F31;MIAO LETTER YI DZHA;Lo;0;L;;;;;N;;;;; 16F32;MIAO LETTER REFORMED TSHA;Lo;0;L;;;;;N;;;;; 16F33;MIAO LETTER SHA;Lo;0;L;;;;;N;;;;; 16F34;MIAO LETTER SSA;Lo;0;L;;;;;N;;;;; 16F35;MIAO LETTER ZHA;Lo;0;L;;;;;N;;;;; 16F36;MIAO LETTER ZSHA;Lo;0;L;;;;;N;;;;; 16F37;MIAO LETTER TSA;Lo;0;L;;;;;N;;;;; 16F38;MIAO LETTER DZA;Lo;0;L;;;;;N;;;;; 16F39;MIAO LETTER YI TSA;Lo;0;L;;;;;N;;;;; 16F3A;MIAO LETTER SA;Lo;0;L;;;;;N;;;;; 16F3B;MIAO LETTER ZA;Lo;0;L;;;;;N;;;;; 16F3C;MIAO LETTER ZSA;Lo;0;L;;;;;N;;;;; 16F3D;MIAO LETTER ZZA;Lo;0;L;;;;;N;;;;; 16F3E;MIAO LETTER ZZSA;Lo;0;L;;;;;N;;;;; 16F3F;MIAO LETTER ARCHAIC ZZA;Lo;0;L;;;;;N;;;;; 16F40;MIAO LETTER ZZYA;Lo;0;L;;;;;N;;;;; 16F41;MIAO LETTER ZZSYA;Lo;0;L;;;;;N;;;;; 16F42;MIAO LETTER WA;Lo;0;L;;;;;N;;;;; 16F43;MIAO LETTER AH;Lo;0;L;;;;;N;;;;; 16F44;MIAO LETTER HHA;Lo;0;L;;;;;N;;;;; 16F45;MIAO LETTER BRI;Lo;0;L;;;;;N;;;;; 16F46;MIAO LETTER SYI;Lo;0;L;;;;;N;;;;; 16F47;MIAO LETTER DZYI;Lo;0;L;;;;;N;;;;; 16F48;MIAO LETTER TE;Lo;0;L;;;;;N;;;;; 16F49;MIAO LETTER TSE;Lo;0;L;;;;;N;;;;; 16F4A;MIAO LETTER RTE;Lo;0;L;;;;;N;;;;; 16F4F;MIAO SIGN CONSONANT MODIFIER BAR;Mn;0;NSM;;;;;N;;;;; 16F50;MIAO LETTER NASALIZATION;Lo;0;L;;;;;N;;;;; 16F51;MIAO SIGN ASPIRATION;Mc;0;L;;;;;N;;;;; 16F52;MIAO SIGN REFORMED VOICING;Mc;0;L;;;;;N;;;;; 16F53;MIAO SIGN REFORMED ASPIRATION;Mc;0;L;;;;;N;;;;; 16F54;MIAO VOWEL SIGN A;Mc;0;L;;;;;N;;;;; 16F55;MIAO VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 16F56;MIAO VOWEL SIGN AHH;Mc;0;L;;;;;N;;;;; 16F57;MIAO VOWEL SIGN AN;Mc;0;L;;;;;N;;;;; 16F58;MIAO VOWEL SIGN ANG;Mc;0;L;;;;;N;;;;; 16F59;MIAO VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 16F5A;MIAO VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; 16F5B;MIAO VOWEL SIGN WO;Mc;0;L;;;;;N;;;;; 16F5C;MIAO VOWEL SIGN W;Mc;0;L;;;;;N;;;;; 16F5D;MIAO VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 16F5E;MIAO VOWEL SIGN EN;Mc;0;L;;;;;N;;;;; 16F5F;MIAO VOWEL SIGN ENG;Mc;0;L;;;;;N;;;;; 16F60;MIAO VOWEL SIGN OEY;Mc;0;L;;;;;N;;;;; 16F61;MIAO VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 16F62;MIAO VOWEL SIGN IA;Mc;0;L;;;;;N;;;;; 16F63;MIAO VOWEL SIGN IAN;Mc;0;L;;;;;N;;;;; 16F64;MIAO VOWEL SIGN IANG;Mc;0;L;;;;;N;;;;; 16F65;MIAO VOWEL SIGN IO;Mc;0;L;;;;;N;;;;; 16F66;MIAO VOWEL SIGN IE;Mc;0;L;;;;;N;;;;; 16F67;MIAO VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 16F68;MIAO VOWEL SIGN IU;Mc;0;L;;;;;N;;;;; 16F69;MIAO VOWEL SIGN ING;Mc;0;L;;;;;N;;;;; 16F6A;MIAO VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 16F6B;MIAO VOWEL SIGN UA;Mc;0;L;;;;;N;;;;; 16F6C;MIAO VOWEL SIGN UAN;Mc;0;L;;;;;N;;;;; 16F6D;MIAO VOWEL SIGN UANG;Mc;0;L;;;;;N;;;;; 16F6E;MIAO VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 16F6F;MIAO VOWEL SIGN UEI;Mc;0;L;;;;;N;;;;; 16F70;MIAO VOWEL SIGN UNG;Mc;0;L;;;;;N;;;;; 16F71;MIAO VOWEL SIGN Y;Mc;0;L;;;;;N;;;;; 16F72;MIAO VOWEL SIGN YI;Mc;0;L;;;;;N;;;;; 16F73;MIAO VOWEL SIGN AE;Mc;0;L;;;;;N;;;;; 16F74;MIAO VOWEL SIGN AEE;Mc;0;L;;;;;N;;;;; 16F75;MIAO VOWEL SIGN ERR;Mc;0;L;;;;;N;;;;; 16F76;MIAO VOWEL SIGN ROUNDED ERR;Mc;0;L;;;;;N;;;;; 16F77;MIAO VOWEL SIGN ER;Mc;0;L;;;;;N;;;;; 16F78;MIAO VOWEL SIGN ROUNDED ER;Mc;0;L;;;;;N;;;;; 16F79;MIAO VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 16F7A;MIAO VOWEL SIGN EI;Mc;0;L;;;;;N;;;;; 16F7B;MIAO VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 16F7C;MIAO VOWEL SIGN OU;Mc;0;L;;;;;N;;;;; 16F7D;MIAO VOWEL SIGN N;Mc;0;L;;;;;N;;;;; 16F7E;MIAO VOWEL SIGN NG;Mc;0;L;;;;;N;;;;; 16F7F;MIAO VOWEL SIGN UOG;Mc;0;L;;;;;N;;;;; 16F80;MIAO VOWEL SIGN YUI;Mc;0;L;;;;;N;;;;; 16F81;MIAO VOWEL SIGN OG;Mc;0;L;;;;;N;;;;; 16F82;MIAO VOWEL SIGN OER;Mc;0;L;;;;;N;;;;; 16F83;MIAO VOWEL SIGN VW;Mc;0;L;;;;;N;;;;; 16F84;MIAO VOWEL SIGN IG;Mc;0;L;;;;;N;;;;; 16F85;MIAO VOWEL SIGN EA;Mc;0;L;;;;;N;;;;; 16F86;MIAO VOWEL SIGN IONG;Mc;0;L;;;;;N;;;;; 16F87;MIAO VOWEL SIGN UI;Mc;0;L;;;;;N;;;;; 16F8F;MIAO TONE RIGHT;Mn;0;NSM;;;;;N;;;;; 16F90;MIAO TONE TOP RIGHT;Mn;0;NSM;;;;;N;;;;; 16F91;MIAO TONE ABOVE;Mn;0;NSM;;;;;N;;;;; 16F92;MIAO TONE BELOW;Mn;0;NSM;;;;;N;;;;; 16F93;MIAO LETTER TONE-2;Lm;0;L;;;;;N;;;;; 16F94;MIAO LETTER TONE-3;Lm;0;L;;;;;N;;;;; 16F95;MIAO LETTER TONE-4;Lm;0;L;;;;;N;;;;; 16F96;MIAO LETTER TONE-5;Lm;0;L;;;;;N;;;;; 16F97;MIAO LETTER TONE-6;Lm;0;L;;;;;N;;;;; 16F98;MIAO LETTER TONE-7;Lm;0;L;;;;;N;;;;; 16F99;MIAO LETTER TONE-8;Lm;0;L;;;;;N;;;;; 16F9A;MIAO LETTER REFORMED TONE-1;Lm;0;L;;;;;N;;;;; 16F9B;MIAO LETTER REFORMED TONE-2;Lm;0;L;;;;;N;;;;; 16F9C;MIAO LETTER REFORMED TONE-4;Lm;0;L;;;;;N;;;;; 16F9D;MIAO LETTER REFORMED TONE-5;Lm;0;L;;;;;N;;;;; 16F9E;MIAO LETTER REFORMED TONE-6;Lm;0;L;;;;;N;;;;; 16F9F;MIAO LETTER REFORMED TONE-8;Lm;0;L;;;;;N;;;;; 16FE0;TANGUT ITERATION MARK;Lm;0;L;;;;;N;;;;; 16FE1;NUSHU ITERATION MARK;Lm;0;L;;;;;N;;;;; 16FE2;OLD CHINESE HOOK MARK;Po;0;ON;;;;;N;;;;; 16FE3;OLD CHINESE ITERATION MARK;Lm;0;L;;;;;N;;;;; 16FE4;KHITAN SMALL SCRIPT FILLER;Mn;0;NSM;;;;;N;;;;; 16FF0;VIETNAMESE ALTERNATE READING MARK CA;Mc;6;L;;;;;N;;;;; 16FF1;VIETNAMESE ALTERNATE READING MARK NHAY;Mc;6;L;;;;;N;;;;; 17000;;Lo;0;L;;;;;N;;;;; 187F7;;Lo;0;L;;;;;N;;;;; 18800;TANGUT COMPONENT-001;Lo;0;L;;;;;N;;;;; 18801;TANGUT COMPONENT-002;Lo;0;L;;;;;N;;;;; 18802;TANGUT COMPONENT-003;Lo;0;L;;;;;N;;;;; 18803;TANGUT COMPONENT-004;Lo;0;L;;;;;N;;;;; 18804;TANGUT COMPONENT-005;Lo;0;L;;;;;N;;;;; 18805;TANGUT COMPONENT-006;Lo;0;L;;;;;N;;;;; 18806;TANGUT COMPONENT-007;Lo;0;L;;;;;N;;;;; 18807;TANGUT COMPONENT-008;Lo;0;L;;;;;N;;;;; 18808;TANGUT COMPONENT-009;Lo;0;L;;;;;N;;;;; 18809;TANGUT COMPONENT-010;Lo;0;L;;;;;N;;;;; 1880A;TANGUT COMPONENT-011;Lo;0;L;;;;;N;;;;; 1880B;TANGUT COMPONENT-012;Lo;0;L;;;;;N;;;;; 1880C;TANGUT COMPONENT-013;Lo;0;L;;;;;N;;;;; 1880D;TANGUT COMPONENT-014;Lo;0;L;;;;;N;;;;; 1880E;TANGUT COMPONENT-015;Lo;0;L;;;;;N;;;;; 1880F;TANGUT COMPONENT-016;Lo;0;L;;;;;N;;;;; 18810;TANGUT COMPONENT-017;Lo;0;L;;;;;N;;;;; 18811;TANGUT COMPONENT-018;Lo;0;L;;;;;N;;;;; 18812;TANGUT COMPONENT-019;Lo;0;L;;;;;N;;;;; 18813;TANGUT COMPONENT-020;Lo;0;L;;;;;N;;;;; 18814;TANGUT COMPONENT-021;Lo;0;L;;;;;N;;;;; 18815;TANGUT COMPONENT-022;Lo;0;L;;;;;N;;;;; 18816;TANGUT COMPONENT-023;Lo;0;L;;;;;N;;;;; 18817;TANGUT COMPONENT-024;Lo;0;L;;;;;N;;;;; 18818;TANGUT COMPONENT-025;Lo;0;L;;;;;N;;;;; 18819;TANGUT COMPONENT-026;Lo;0;L;;;;;N;;;;; 1881A;TANGUT COMPONENT-027;Lo;0;L;;;;;N;;;;; 1881B;TANGUT COMPONENT-028;Lo;0;L;;;;;N;;;;; 1881C;TANGUT COMPONENT-029;Lo;0;L;;;;;N;;;;; 1881D;TANGUT COMPONENT-030;Lo;0;L;;;;;N;;;;; 1881E;TANGUT COMPONENT-031;Lo;0;L;;;;;N;;;;; 1881F;TANGUT COMPONENT-032;Lo;0;L;;;;;N;;;;; 18820;TANGUT COMPONENT-033;Lo;0;L;;;;;N;;;;; 18821;TANGUT COMPONENT-034;Lo;0;L;;;;;N;;;;; 18822;TANGUT COMPONENT-035;Lo;0;L;;;;;N;;;;; 18823;TANGUT COMPONENT-036;Lo;0;L;;;;;N;;;;; 18824;TANGUT COMPONENT-037;Lo;0;L;;;;;N;;;;; 18825;TANGUT COMPONENT-038;Lo;0;L;;;;;N;;;;; 18826;TANGUT COMPONENT-039;Lo;0;L;;;;;N;;;;; 18827;TANGUT COMPONENT-040;Lo;0;L;;;;;N;;;;; 18828;TANGUT COMPONENT-041;Lo;0;L;;;;;N;;;;; 18829;TANGUT COMPONENT-042;Lo;0;L;;;;;N;;;;; 1882A;TANGUT COMPONENT-043;Lo;0;L;;;;;N;;;;; 1882B;TANGUT COMPONENT-044;Lo;0;L;;;;;N;;;;; 1882C;TANGUT COMPONENT-045;Lo;0;L;;;;;N;;;;; 1882D;TANGUT COMPONENT-046;Lo;0;L;;;;;N;;;;; 1882E;TANGUT COMPONENT-047;Lo;0;L;;;;;N;;;;; 1882F;TANGUT COMPONENT-048;Lo;0;L;;;;;N;;;;; 18830;TANGUT COMPONENT-049;Lo;0;L;;;;;N;;;;; 18831;TANGUT COMPONENT-050;Lo;0;L;;;;;N;;;;; 18832;TANGUT COMPONENT-051;Lo;0;L;;;;;N;;;;; 18833;TANGUT COMPONENT-052;Lo;0;L;;;;;N;;;;; 18834;TANGUT COMPONENT-053;Lo;0;L;;;;;N;;;;; 18835;TANGUT COMPONENT-054;Lo;0;L;;;;;N;;;;; 18836;TANGUT COMPONENT-055;Lo;0;L;;;;;N;;;;; 18837;TANGUT COMPONENT-056;Lo;0;L;;;;;N;;;;; 18838;TANGUT COMPONENT-057;Lo;0;L;;;;;N;;;;; 18839;TANGUT COMPONENT-058;Lo;0;L;;;;;N;;;;; 1883A;TANGUT COMPONENT-059;Lo;0;L;;;;;N;;;;; 1883B;TANGUT COMPONENT-060;Lo;0;L;;;;;N;;;;; 1883C;TANGUT COMPONENT-061;Lo;0;L;;;;;N;;;;; 1883D;TANGUT COMPONENT-062;Lo;0;L;;;;;N;;;;; 1883E;TANGUT COMPONENT-063;Lo;0;L;;;;;N;;;;; 1883F;TANGUT COMPONENT-064;Lo;0;L;;;;;N;;;;; 18840;TANGUT COMPONENT-065;Lo;0;L;;;;;N;;;;; 18841;TANGUT COMPONENT-066;Lo;0;L;;;;;N;;;;; 18842;TANGUT COMPONENT-067;Lo;0;L;;;;;N;;;;; 18843;TANGUT COMPONENT-068;Lo;0;L;;;;;N;;;;; 18844;TANGUT COMPONENT-069;Lo;0;L;;;;;N;;;;; 18845;TANGUT COMPONENT-070;Lo;0;L;;;;;N;;;;; 18846;TANGUT COMPONENT-071;Lo;0;L;;;;;N;;;;; 18847;TANGUT COMPONENT-072;Lo;0;L;;;;;N;;;;; 18848;TANGUT COMPONENT-073;Lo;0;L;;;;;N;;;;; 18849;TANGUT COMPONENT-074;Lo;0;L;;;;;N;;;;; 1884A;TANGUT COMPONENT-075;Lo;0;L;;;;;N;;;;; 1884B;TANGUT COMPONENT-076;Lo;0;L;;;;;N;;;;; 1884C;TANGUT COMPONENT-077;Lo;0;L;;;;;N;;;;; 1884D;TANGUT COMPONENT-078;Lo;0;L;;;;;N;;;;; 1884E;TANGUT COMPONENT-079;Lo;0;L;;;;;N;;;;; 1884F;TANGUT COMPONENT-080;Lo;0;L;;;;;N;;;;; 18850;TANGUT COMPONENT-081;Lo;0;L;;;;;N;;;;; 18851;TANGUT COMPONENT-082;Lo;0;L;;;;;N;;;;; 18852;TANGUT COMPONENT-083;Lo;0;L;;;;;N;;;;; 18853;TANGUT COMPONENT-084;Lo;0;L;;;;;N;;;;; 18854;TANGUT COMPONENT-085;Lo;0;L;;;;;N;;;;; 18855;TANGUT COMPONENT-086;Lo;0;L;;;;;N;;;;; 18856;TANGUT COMPONENT-087;Lo;0;L;;;;;N;;;;; 18857;TANGUT COMPONENT-088;Lo;0;L;;;;;N;;;;; 18858;TANGUT COMPONENT-089;Lo;0;L;;;;;N;;;;; 18859;TANGUT COMPONENT-090;Lo;0;L;;;;;N;;;;; 1885A;TANGUT COMPONENT-091;Lo;0;L;;;;;N;;;;; 1885B;TANGUT COMPONENT-092;Lo;0;L;;;;;N;;;;; 1885C;TANGUT COMPONENT-093;Lo;0;L;;;;;N;;;;; 1885D;TANGUT COMPONENT-094;Lo;0;L;;;;;N;;;;; 1885E;TANGUT COMPONENT-095;Lo;0;L;;;;;N;;;;; 1885F;TANGUT COMPONENT-096;Lo;0;L;;;;;N;;;;; 18860;TANGUT COMPONENT-097;Lo;0;L;;;;;N;;;;; 18861;TANGUT COMPONENT-098;Lo;0;L;;;;;N;;;;; 18862;TANGUT COMPONENT-099;Lo;0;L;;;;;N;;;;; 18863;TANGUT COMPONENT-100;Lo;0;L;;;;;N;;;;; 18864;TANGUT COMPONENT-101;Lo;0;L;;;;;N;;;;; 18865;TANGUT COMPONENT-102;Lo;0;L;;;;;N;;;;; 18866;TANGUT COMPONENT-103;Lo;0;L;;;;;N;;;;; 18867;TANGUT COMPONENT-104;Lo;0;L;;;;;N;;;;; 18868;TANGUT COMPONENT-105;Lo;0;L;;;;;N;;;;; 18869;TANGUT COMPONENT-106;Lo;0;L;;;;;N;;;;; 1886A;TANGUT COMPONENT-107;Lo;0;L;;;;;N;;;;; 1886B;TANGUT COMPONENT-108;Lo;0;L;;;;;N;;;;; 1886C;TANGUT COMPONENT-109;Lo;0;L;;;;;N;;;;; 1886D;TANGUT COMPONENT-110;Lo;0;L;;;;;N;;;;; 1886E;TANGUT COMPONENT-111;Lo;0;L;;;;;N;;;;; 1886F;TANGUT COMPONENT-112;Lo;0;L;;;;;N;;;;; 18870;TANGUT COMPONENT-113;Lo;0;L;;;;;N;;;;; 18871;TANGUT COMPONENT-114;Lo;0;L;;;;;N;;;;; 18872;TANGUT COMPONENT-115;Lo;0;L;;;;;N;;;;; 18873;TANGUT COMPONENT-116;Lo;0;L;;;;;N;;;;; 18874;TANGUT COMPONENT-117;Lo;0;L;;;;;N;;;;; 18875;TANGUT COMPONENT-118;Lo;0;L;;;;;N;;;;; 18876;TANGUT COMPONENT-119;Lo;0;L;;;;;N;;;;; 18877;TANGUT COMPONENT-120;Lo;0;L;;;;;N;;;;; 18878;TANGUT COMPONENT-121;Lo;0;L;;;;;N;;;;; 18879;TANGUT COMPONENT-122;Lo;0;L;;;;;N;;;;; 1887A;TANGUT COMPONENT-123;Lo;0;L;;;;;N;;;;; 1887B;TANGUT COMPONENT-124;Lo;0;L;;;;;N;;;;; 1887C;TANGUT COMPONENT-125;Lo;0;L;;;;;N;;;;; 1887D;TANGUT COMPONENT-126;Lo;0;L;;;;;N;;;;; 1887E;TANGUT COMPONENT-127;Lo;0;L;;;;;N;;;;; 1887F;TANGUT COMPONENT-128;Lo;0;L;;;;;N;;;;; 18880;TANGUT COMPONENT-129;Lo;0;L;;;;;N;;;;; 18881;TANGUT COMPONENT-130;Lo;0;L;;;;;N;;;;; 18882;TANGUT COMPONENT-131;Lo;0;L;;;;;N;;;;; 18883;TANGUT COMPONENT-132;Lo;0;L;;;;;N;;;;; 18884;TANGUT COMPONENT-133;Lo;0;L;;;;;N;;;;; 18885;TANGUT COMPONENT-134;Lo;0;L;;;;;N;;;;; 18886;TANGUT COMPONENT-135;Lo;0;L;;;;;N;;;;; 18887;TANGUT COMPONENT-136;Lo;0;L;;;;;N;;;;; 18888;TANGUT COMPONENT-137;Lo;0;L;;;;;N;;;;; 18889;TANGUT COMPONENT-138;Lo;0;L;;;;;N;;;;; 1888A;TANGUT COMPONENT-139;Lo;0;L;;;;;N;;;;; 1888B;TANGUT COMPONENT-140;Lo;0;L;;;;;N;;;;; 1888C;TANGUT COMPONENT-141;Lo;0;L;;;;;N;;;;; 1888D;TANGUT COMPONENT-142;Lo;0;L;;;;;N;;;;; 1888E;TANGUT COMPONENT-143;Lo;0;L;;;;;N;;;;; 1888F;TANGUT COMPONENT-144;Lo;0;L;;;;;N;;;;; 18890;TANGUT COMPONENT-145;Lo;0;L;;;;;N;;;;; 18891;TANGUT COMPONENT-146;Lo;0;L;;;;;N;;;;; 18892;TANGUT COMPONENT-147;Lo;0;L;;;;;N;;;;; 18893;TANGUT COMPONENT-148;Lo;0;L;;;;;N;;;;; 18894;TANGUT COMPONENT-149;Lo;0;L;;;;;N;;;;; 18895;TANGUT COMPONENT-150;Lo;0;L;;;;;N;;;;; 18896;TANGUT COMPONENT-151;Lo;0;L;;;;;N;;;;; 18897;TANGUT COMPONENT-152;Lo;0;L;;;;;N;;;;; 18898;TANGUT COMPONENT-153;Lo;0;L;;;;;N;;;;; 18899;TANGUT COMPONENT-154;Lo;0;L;;;;;N;;;;; 1889A;TANGUT COMPONENT-155;Lo;0;L;;;;;N;;;;; 1889B;TANGUT COMPONENT-156;Lo;0;L;;;;;N;;;;; 1889C;TANGUT COMPONENT-157;Lo;0;L;;;;;N;;;;; 1889D;TANGUT COMPONENT-158;Lo;0;L;;;;;N;;;;; 1889E;TANGUT COMPONENT-159;Lo;0;L;;;;;N;;;;; 1889F;TANGUT COMPONENT-160;Lo;0;L;;;;;N;;;;; 188A0;TANGUT COMPONENT-161;Lo;0;L;;;;;N;;;;; 188A1;TANGUT COMPONENT-162;Lo;0;L;;;;;N;;;;; 188A2;TANGUT COMPONENT-163;Lo;0;L;;;;;N;;;;; 188A3;TANGUT COMPONENT-164;Lo;0;L;;;;;N;;;;; 188A4;TANGUT COMPONENT-165;Lo;0;L;;;;;N;;;;; 188A5;TANGUT COMPONENT-166;Lo;0;L;;;;;N;;;;; 188A6;TANGUT COMPONENT-167;Lo;0;L;;;;;N;;;;; 188A7;TANGUT COMPONENT-168;Lo;0;L;;;;;N;;;;; 188A8;TANGUT COMPONENT-169;Lo;0;L;;;;;N;;;;; 188A9;TANGUT COMPONENT-170;Lo;0;L;;;;;N;;;;; 188AA;TANGUT COMPONENT-171;Lo;0;L;;;;;N;;;;; 188AB;TANGUT COMPONENT-172;Lo;0;L;;;;;N;;;;; 188AC;TANGUT COMPONENT-173;Lo;0;L;;;;;N;;;;; 188AD;TANGUT COMPONENT-174;Lo;0;L;;;;;N;;;;; 188AE;TANGUT COMPONENT-175;Lo;0;L;;;;;N;;;;; 188AF;TANGUT COMPONENT-176;Lo;0;L;;;;;N;;;;; 188B0;TANGUT COMPONENT-177;Lo;0;L;;;;;N;;;;; 188B1;TANGUT COMPONENT-178;Lo;0;L;;;;;N;;;;; 188B2;TANGUT COMPONENT-179;Lo;0;L;;;;;N;;;;; 188B3;TANGUT COMPONENT-180;Lo;0;L;;;;;N;;;;; 188B4;TANGUT COMPONENT-181;Lo;0;L;;;;;N;;;;; 188B5;TANGUT COMPONENT-182;Lo;0;L;;;;;N;;;;; 188B6;TANGUT COMPONENT-183;Lo;0;L;;;;;N;;;;; 188B7;TANGUT COMPONENT-184;Lo;0;L;;;;;N;;;;; 188B8;TANGUT COMPONENT-185;Lo;0;L;;;;;N;;;;; 188B9;TANGUT COMPONENT-186;Lo;0;L;;;;;N;;;;; 188BA;TANGUT COMPONENT-187;Lo;0;L;;;;;N;;;;; 188BB;TANGUT COMPONENT-188;Lo;0;L;;;;;N;;;;; 188BC;TANGUT COMPONENT-189;Lo;0;L;;;;;N;;;;; 188BD;TANGUT COMPONENT-190;Lo;0;L;;;;;N;;;;; 188BE;TANGUT COMPONENT-191;Lo;0;L;;;;;N;;;;; 188BF;TANGUT COMPONENT-192;Lo;0;L;;;;;N;;;;; 188C0;TANGUT COMPONENT-193;Lo;0;L;;;;;N;;;;; 188C1;TANGUT COMPONENT-194;Lo;0;L;;;;;N;;;;; 188C2;TANGUT COMPONENT-195;Lo;0;L;;;;;N;;;;; 188C3;TANGUT COMPONENT-196;Lo;0;L;;;;;N;;;;; 188C4;TANGUT COMPONENT-197;Lo;0;L;;;;;N;;;;; 188C5;TANGUT COMPONENT-198;Lo;0;L;;;;;N;;;;; 188C6;TANGUT COMPONENT-199;Lo;0;L;;;;;N;;;;; 188C7;TANGUT COMPONENT-200;Lo;0;L;;;;;N;;;;; 188C8;TANGUT COMPONENT-201;Lo;0;L;;;;;N;;;;; 188C9;TANGUT COMPONENT-202;Lo;0;L;;;;;N;;;;; 188CA;TANGUT COMPONENT-203;Lo;0;L;;;;;N;;;;; 188CB;TANGUT COMPONENT-204;Lo;0;L;;;;;N;;;;; 188CC;TANGUT COMPONENT-205;Lo;0;L;;;;;N;;;;; 188CD;TANGUT COMPONENT-206;Lo;0;L;;;;;N;;;;; 188CE;TANGUT COMPONENT-207;Lo;0;L;;;;;N;;;;; 188CF;TANGUT COMPONENT-208;Lo;0;L;;;;;N;;;;; 188D0;TANGUT COMPONENT-209;Lo;0;L;;;;;N;;;;; 188D1;TANGUT COMPONENT-210;Lo;0;L;;;;;N;;;;; 188D2;TANGUT COMPONENT-211;Lo;0;L;;;;;N;;;;; 188D3;TANGUT COMPONENT-212;Lo;0;L;;;;;N;;;;; 188D4;TANGUT COMPONENT-213;Lo;0;L;;;;;N;;;;; 188D5;TANGUT COMPONENT-214;Lo;0;L;;;;;N;;;;; 188D6;TANGUT COMPONENT-215;Lo;0;L;;;;;N;;;;; 188D7;TANGUT COMPONENT-216;Lo;0;L;;;;;N;;;;; 188D8;TANGUT COMPONENT-217;Lo;0;L;;;;;N;;;;; 188D9;TANGUT COMPONENT-218;Lo;0;L;;;;;N;;;;; 188DA;TANGUT COMPONENT-219;Lo;0;L;;;;;N;;;;; 188DB;TANGUT COMPONENT-220;Lo;0;L;;;;;N;;;;; 188DC;TANGUT COMPONENT-221;Lo;0;L;;;;;N;;;;; 188DD;TANGUT COMPONENT-222;Lo;0;L;;;;;N;;;;; 188DE;TANGUT COMPONENT-223;Lo;0;L;;;;;N;;;;; 188DF;TANGUT COMPONENT-224;Lo;0;L;;;;;N;;;;; 188E0;TANGUT COMPONENT-225;Lo;0;L;;;;;N;;;;; 188E1;TANGUT COMPONENT-226;Lo;0;L;;;;;N;;;;; 188E2;TANGUT COMPONENT-227;Lo;0;L;;;;;N;;;;; 188E3;TANGUT COMPONENT-228;Lo;0;L;;;;;N;;;;; 188E4;TANGUT COMPONENT-229;Lo;0;L;;;;;N;;;;; 188E5;TANGUT COMPONENT-230;Lo;0;L;;;;;N;;;;; 188E6;TANGUT COMPONENT-231;Lo;0;L;;;;;N;;;;; 188E7;TANGUT COMPONENT-232;Lo;0;L;;;;;N;;;;; 188E8;TANGUT COMPONENT-233;Lo;0;L;;;;;N;;;;; 188E9;TANGUT COMPONENT-234;Lo;0;L;;;;;N;;;;; 188EA;TANGUT COMPONENT-235;Lo;0;L;;;;;N;;;;; 188EB;TANGUT COMPONENT-236;Lo;0;L;;;;;N;;;;; 188EC;TANGUT COMPONENT-237;Lo;0;L;;;;;N;;;;; 188ED;TANGUT COMPONENT-238;Lo;0;L;;;;;N;;;;; 188EE;TANGUT COMPONENT-239;Lo;0;L;;;;;N;;;;; 188EF;TANGUT COMPONENT-240;Lo;0;L;;;;;N;;;;; 188F0;TANGUT COMPONENT-241;Lo;0;L;;;;;N;;;;; 188F1;TANGUT COMPONENT-242;Lo;0;L;;;;;N;;;;; 188F2;TANGUT COMPONENT-243;Lo;0;L;;;;;N;;;;; 188F3;TANGUT COMPONENT-244;Lo;0;L;;;;;N;;;;; 188F4;TANGUT COMPONENT-245;Lo;0;L;;;;;N;;;;; 188F5;TANGUT COMPONENT-246;Lo;0;L;;;;;N;;;;; 188F6;TANGUT COMPONENT-247;Lo;0;L;;;;;N;;;;; 188F7;TANGUT COMPONENT-248;Lo;0;L;;;;;N;;;;; 188F8;TANGUT COMPONENT-249;Lo;0;L;;;;;N;;;;; 188F9;TANGUT COMPONENT-250;Lo;0;L;;;;;N;;;;; 188FA;TANGUT COMPONENT-251;Lo;0;L;;;;;N;;;;; 188FB;TANGUT COMPONENT-252;Lo;0;L;;;;;N;;;;; 188FC;TANGUT COMPONENT-253;Lo;0;L;;;;;N;;;;; 188FD;TANGUT COMPONENT-254;Lo;0;L;;;;;N;;;;; 188FE;TANGUT COMPONENT-255;Lo;0;L;;;;;N;;;;; 188FF;TANGUT COMPONENT-256;Lo;0;L;;;;;N;;;;; 18900;TANGUT COMPONENT-257;Lo;0;L;;;;;N;;;;; 18901;TANGUT COMPONENT-258;Lo;0;L;;;;;N;;;;; 18902;TANGUT COMPONENT-259;Lo;0;L;;;;;N;;;;; 18903;TANGUT COMPONENT-260;Lo;0;L;;;;;N;;;;; 18904;TANGUT COMPONENT-261;Lo;0;L;;;;;N;;;;; 18905;TANGUT COMPONENT-262;Lo;0;L;;;;;N;;;;; 18906;TANGUT COMPONENT-263;Lo;0;L;;;;;N;;;;; 18907;TANGUT COMPONENT-264;Lo;0;L;;;;;N;;;;; 18908;TANGUT COMPONENT-265;Lo;0;L;;;;;N;;;;; 18909;TANGUT COMPONENT-266;Lo;0;L;;;;;N;;;;; 1890A;TANGUT COMPONENT-267;Lo;0;L;;;;;N;;;;; 1890B;TANGUT COMPONENT-268;Lo;0;L;;;;;N;;;;; 1890C;TANGUT COMPONENT-269;Lo;0;L;;;;;N;;;;; 1890D;TANGUT COMPONENT-270;Lo;0;L;;;;;N;;;;; 1890E;TANGUT COMPONENT-271;Lo;0;L;;;;;N;;;;; 1890F;TANGUT COMPONENT-272;Lo;0;L;;;;;N;;;;; 18910;TANGUT COMPONENT-273;Lo;0;L;;;;;N;;;;; 18911;TANGUT COMPONENT-274;Lo;0;L;;;;;N;;;;; 18912;TANGUT COMPONENT-275;Lo;0;L;;;;;N;;;;; 18913;TANGUT COMPONENT-276;Lo;0;L;;;;;N;;;;; 18914;TANGUT COMPONENT-277;Lo;0;L;;;;;N;;;;; 18915;TANGUT COMPONENT-278;Lo;0;L;;;;;N;;;;; 18916;TANGUT COMPONENT-279;Lo;0;L;;;;;N;;;;; 18917;TANGUT COMPONENT-280;Lo;0;L;;;;;N;;;;; 18918;TANGUT COMPONENT-281;Lo;0;L;;;;;N;;;;; 18919;TANGUT COMPONENT-282;Lo;0;L;;;;;N;;;;; 1891A;TANGUT COMPONENT-283;Lo;0;L;;;;;N;;;;; 1891B;TANGUT COMPONENT-284;Lo;0;L;;;;;N;;;;; 1891C;TANGUT COMPONENT-285;Lo;0;L;;;;;N;;;;; 1891D;TANGUT COMPONENT-286;Lo;0;L;;;;;N;;;;; 1891E;TANGUT COMPONENT-287;Lo;0;L;;;;;N;;;;; 1891F;TANGUT COMPONENT-288;Lo;0;L;;;;;N;;;;; 18920;TANGUT COMPONENT-289;Lo;0;L;;;;;N;;;;; 18921;TANGUT COMPONENT-290;Lo;0;L;;;;;N;;;;; 18922;TANGUT COMPONENT-291;Lo;0;L;;;;;N;;;;; 18923;TANGUT COMPONENT-292;Lo;0;L;;;;;N;;;;; 18924;TANGUT COMPONENT-293;Lo;0;L;;;;;N;;;;; 18925;TANGUT COMPONENT-294;Lo;0;L;;;;;N;;;;; 18926;TANGUT COMPONENT-295;Lo;0;L;;;;;N;;;;; 18927;TANGUT COMPONENT-296;Lo;0;L;;;;;N;;;;; 18928;TANGUT COMPONENT-297;Lo;0;L;;;;;N;;;;; 18929;TANGUT COMPONENT-298;Lo;0;L;;;;;N;;;;; 1892A;TANGUT COMPONENT-299;Lo;0;L;;;;;N;;;;; 1892B;TANGUT COMPONENT-300;Lo;0;L;;;;;N;;;;; 1892C;TANGUT COMPONENT-301;Lo;0;L;;;;;N;;;;; 1892D;TANGUT COMPONENT-302;Lo;0;L;;;;;N;;;;; 1892E;TANGUT COMPONENT-303;Lo;0;L;;;;;N;;;;; 1892F;TANGUT COMPONENT-304;Lo;0;L;;;;;N;;;;; 18930;TANGUT COMPONENT-305;Lo;0;L;;;;;N;;;;; 18931;TANGUT COMPONENT-306;Lo;0;L;;;;;N;;;;; 18932;TANGUT COMPONENT-307;Lo;0;L;;;;;N;;;;; 18933;TANGUT COMPONENT-308;Lo;0;L;;;;;N;;;;; 18934;TANGUT COMPONENT-309;Lo;0;L;;;;;N;;;;; 18935;TANGUT COMPONENT-310;Lo;0;L;;;;;N;;;;; 18936;TANGUT COMPONENT-311;Lo;0;L;;;;;N;;;;; 18937;TANGUT COMPONENT-312;Lo;0;L;;;;;N;;;;; 18938;TANGUT COMPONENT-313;Lo;0;L;;;;;N;;;;; 18939;TANGUT COMPONENT-314;Lo;0;L;;;;;N;;;;; 1893A;TANGUT COMPONENT-315;Lo;0;L;;;;;N;;;;; 1893B;TANGUT COMPONENT-316;Lo;0;L;;;;;N;;;;; 1893C;TANGUT COMPONENT-317;Lo;0;L;;;;;N;;;;; 1893D;TANGUT COMPONENT-318;Lo;0;L;;;;;N;;;;; 1893E;TANGUT COMPONENT-319;Lo;0;L;;;;;N;;;;; 1893F;TANGUT COMPONENT-320;Lo;0;L;;;;;N;;;;; 18940;TANGUT COMPONENT-321;Lo;0;L;;;;;N;;;;; 18941;TANGUT COMPONENT-322;Lo;0;L;;;;;N;;;;; 18942;TANGUT COMPONENT-323;Lo;0;L;;;;;N;;;;; 18943;TANGUT COMPONENT-324;Lo;0;L;;;;;N;;;;; 18944;TANGUT COMPONENT-325;Lo;0;L;;;;;N;;;;; 18945;TANGUT COMPONENT-326;Lo;0;L;;;;;N;;;;; 18946;TANGUT COMPONENT-327;Lo;0;L;;;;;N;;;;; 18947;TANGUT COMPONENT-328;Lo;0;L;;;;;N;;;;; 18948;TANGUT COMPONENT-329;Lo;0;L;;;;;N;;;;; 18949;TANGUT COMPONENT-330;Lo;0;L;;;;;N;;;;; 1894A;TANGUT COMPONENT-331;Lo;0;L;;;;;N;;;;; 1894B;TANGUT COMPONENT-332;Lo;0;L;;;;;N;;;;; 1894C;TANGUT COMPONENT-333;Lo;0;L;;;;;N;;;;; 1894D;TANGUT COMPONENT-334;Lo;0;L;;;;;N;;;;; 1894E;TANGUT COMPONENT-335;Lo;0;L;;;;;N;;;;; 1894F;TANGUT COMPONENT-336;Lo;0;L;;;;;N;;;;; 18950;TANGUT COMPONENT-337;Lo;0;L;;;;;N;;;;; 18951;TANGUT COMPONENT-338;Lo;0;L;;;;;N;;;;; 18952;TANGUT COMPONENT-339;Lo;0;L;;;;;N;;;;; 18953;TANGUT COMPONENT-340;Lo;0;L;;;;;N;;;;; 18954;TANGUT COMPONENT-341;Lo;0;L;;;;;N;;;;; 18955;TANGUT COMPONENT-342;Lo;0;L;;;;;N;;;;; 18956;TANGUT COMPONENT-343;Lo;0;L;;;;;N;;;;; 18957;TANGUT COMPONENT-344;Lo;0;L;;;;;N;;;;; 18958;TANGUT COMPONENT-345;Lo;0;L;;;;;N;;;;; 18959;TANGUT COMPONENT-346;Lo;0;L;;;;;N;;;;; 1895A;TANGUT COMPONENT-347;Lo;0;L;;;;;N;;;;; 1895B;TANGUT COMPONENT-348;Lo;0;L;;;;;N;;;;; 1895C;TANGUT COMPONENT-349;Lo;0;L;;;;;N;;;;; 1895D;TANGUT COMPONENT-350;Lo;0;L;;;;;N;;;;; 1895E;TANGUT COMPONENT-351;Lo;0;L;;;;;N;;;;; 1895F;TANGUT COMPONENT-352;Lo;0;L;;;;;N;;;;; 18960;TANGUT COMPONENT-353;Lo;0;L;;;;;N;;;;; 18961;TANGUT COMPONENT-354;Lo;0;L;;;;;N;;;;; 18962;TANGUT COMPONENT-355;Lo;0;L;;;;;N;;;;; 18963;TANGUT COMPONENT-356;Lo;0;L;;;;;N;;;;; 18964;TANGUT COMPONENT-357;Lo;0;L;;;;;N;;;;; 18965;TANGUT COMPONENT-358;Lo;0;L;;;;;N;;;;; 18966;TANGUT COMPONENT-359;Lo;0;L;;;;;N;;;;; 18967;TANGUT COMPONENT-360;Lo;0;L;;;;;N;;;;; 18968;TANGUT COMPONENT-361;Lo;0;L;;;;;N;;;;; 18969;TANGUT COMPONENT-362;Lo;0;L;;;;;N;;;;; 1896A;TANGUT COMPONENT-363;Lo;0;L;;;;;N;;;;; 1896B;TANGUT COMPONENT-364;Lo;0;L;;;;;N;;;;; 1896C;TANGUT COMPONENT-365;Lo;0;L;;;;;N;;;;; 1896D;TANGUT COMPONENT-366;Lo;0;L;;;;;N;;;;; 1896E;TANGUT COMPONENT-367;Lo;0;L;;;;;N;;;;; 1896F;TANGUT COMPONENT-368;Lo;0;L;;;;;N;;;;; 18970;TANGUT COMPONENT-369;Lo;0;L;;;;;N;;;;; 18971;TANGUT COMPONENT-370;Lo;0;L;;;;;N;;;;; 18972;TANGUT COMPONENT-371;Lo;0;L;;;;;N;;;;; 18973;TANGUT COMPONENT-372;Lo;0;L;;;;;N;;;;; 18974;TANGUT COMPONENT-373;Lo;0;L;;;;;N;;;;; 18975;TANGUT COMPONENT-374;Lo;0;L;;;;;N;;;;; 18976;TANGUT COMPONENT-375;Lo;0;L;;;;;N;;;;; 18977;TANGUT COMPONENT-376;Lo;0;L;;;;;N;;;;; 18978;TANGUT COMPONENT-377;Lo;0;L;;;;;N;;;;; 18979;TANGUT COMPONENT-378;Lo;0;L;;;;;N;;;;; 1897A;TANGUT COMPONENT-379;Lo;0;L;;;;;N;;;;; 1897B;TANGUT COMPONENT-380;Lo;0;L;;;;;N;;;;; 1897C;TANGUT COMPONENT-381;Lo;0;L;;;;;N;;;;; 1897D;TANGUT COMPONENT-382;Lo;0;L;;;;;N;;;;; 1897E;TANGUT COMPONENT-383;Lo;0;L;;;;;N;;;;; 1897F;TANGUT COMPONENT-384;Lo;0;L;;;;;N;;;;; 18980;TANGUT COMPONENT-385;Lo;0;L;;;;;N;;;;; 18981;TANGUT COMPONENT-386;Lo;0;L;;;;;N;;;;; 18982;TANGUT COMPONENT-387;Lo;0;L;;;;;N;;;;; 18983;TANGUT COMPONENT-388;Lo;0;L;;;;;N;;;;; 18984;TANGUT COMPONENT-389;Lo;0;L;;;;;N;;;;; 18985;TANGUT COMPONENT-390;Lo;0;L;;;;;N;;;;; 18986;TANGUT COMPONENT-391;Lo;0;L;;;;;N;;;;; 18987;TANGUT COMPONENT-392;Lo;0;L;;;;;N;;;;; 18988;TANGUT COMPONENT-393;Lo;0;L;;;;;N;;;;; 18989;TANGUT COMPONENT-394;Lo;0;L;;;;;N;;;;; 1898A;TANGUT COMPONENT-395;Lo;0;L;;;;;N;;;;; 1898B;TANGUT COMPONENT-396;Lo;0;L;;;;;N;;;;; 1898C;TANGUT COMPONENT-397;Lo;0;L;;;;;N;;;;; 1898D;TANGUT COMPONENT-398;Lo;0;L;;;;;N;;;;; 1898E;TANGUT COMPONENT-399;Lo;0;L;;;;;N;;;;; 1898F;TANGUT COMPONENT-400;Lo;0;L;;;;;N;;;;; 18990;TANGUT COMPONENT-401;Lo;0;L;;;;;N;;;;; 18991;TANGUT COMPONENT-402;Lo;0;L;;;;;N;;;;; 18992;TANGUT COMPONENT-403;Lo;0;L;;;;;N;;;;; 18993;TANGUT COMPONENT-404;Lo;0;L;;;;;N;;;;; 18994;TANGUT COMPONENT-405;Lo;0;L;;;;;N;;;;; 18995;TANGUT COMPONENT-406;Lo;0;L;;;;;N;;;;; 18996;TANGUT COMPONENT-407;Lo;0;L;;;;;N;;;;; 18997;TANGUT COMPONENT-408;Lo;0;L;;;;;N;;;;; 18998;TANGUT COMPONENT-409;Lo;0;L;;;;;N;;;;; 18999;TANGUT COMPONENT-410;Lo;0;L;;;;;N;;;;; 1899A;TANGUT COMPONENT-411;Lo;0;L;;;;;N;;;;; 1899B;TANGUT COMPONENT-412;Lo;0;L;;;;;N;;;;; 1899C;TANGUT COMPONENT-413;Lo;0;L;;;;;N;;;;; 1899D;TANGUT COMPONENT-414;Lo;0;L;;;;;N;;;;; 1899E;TANGUT COMPONENT-415;Lo;0;L;;;;;N;;;;; 1899F;TANGUT COMPONENT-416;Lo;0;L;;;;;N;;;;; 189A0;TANGUT COMPONENT-417;Lo;0;L;;;;;N;;;;; 189A1;TANGUT COMPONENT-418;Lo;0;L;;;;;N;;;;; 189A2;TANGUT COMPONENT-419;Lo;0;L;;;;;N;;;;; 189A3;TANGUT COMPONENT-420;Lo;0;L;;;;;N;;;;; 189A4;TANGUT COMPONENT-421;Lo;0;L;;;;;N;;;;; 189A5;TANGUT COMPONENT-422;Lo;0;L;;;;;N;;;;; 189A6;TANGUT COMPONENT-423;Lo;0;L;;;;;N;;;;; 189A7;TANGUT COMPONENT-424;Lo;0;L;;;;;N;;;;; 189A8;TANGUT COMPONENT-425;Lo;0;L;;;;;N;;;;; 189A9;TANGUT COMPONENT-426;Lo;0;L;;;;;N;;;;; 189AA;TANGUT COMPONENT-427;Lo;0;L;;;;;N;;;;; 189AB;TANGUT COMPONENT-428;Lo;0;L;;;;;N;;;;; 189AC;TANGUT COMPONENT-429;Lo;0;L;;;;;N;;;;; 189AD;TANGUT COMPONENT-430;Lo;0;L;;;;;N;;;;; 189AE;TANGUT COMPONENT-431;Lo;0;L;;;;;N;;;;; 189AF;TANGUT COMPONENT-432;Lo;0;L;;;;;N;;;;; 189B0;TANGUT COMPONENT-433;Lo;0;L;;;;;N;;;;; 189B1;TANGUT COMPONENT-434;Lo;0;L;;;;;N;;;;; 189B2;TANGUT COMPONENT-435;Lo;0;L;;;;;N;;;;; 189B3;TANGUT COMPONENT-436;Lo;0;L;;;;;N;;;;; 189B4;TANGUT COMPONENT-437;Lo;0;L;;;;;N;;;;; 189B5;TANGUT COMPONENT-438;Lo;0;L;;;;;N;;;;; 189B6;TANGUT COMPONENT-439;Lo;0;L;;;;;N;;;;; 189B7;TANGUT COMPONENT-440;Lo;0;L;;;;;N;;;;; 189B8;TANGUT COMPONENT-441;Lo;0;L;;;;;N;;;;; 189B9;TANGUT COMPONENT-442;Lo;0;L;;;;;N;;;;; 189BA;TANGUT COMPONENT-443;Lo;0;L;;;;;N;;;;; 189BB;TANGUT COMPONENT-444;Lo;0;L;;;;;N;;;;; 189BC;TANGUT COMPONENT-445;Lo;0;L;;;;;N;;;;; 189BD;TANGUT COMPONENT-446;Lo;0;L;;;;;N;;;;; 189BE;TANGUT COMPONENT-447;Lo;0;L;;;;;N;;;;; 189BF;TANGUT COMPONENT-448;Lo;0;L;;;;;N;;;;; 189C0;TANGUT COMPONENT-449;Lo;0;L;;;;;N;;;;; 189C1;TANGUT COMPONENT-450;Lo;0;L;;;;;N;;;;; 189C2;TANGUT COMPONENT-451;Lo;0;L;;;;;N;;;;; 189C3;TANGUT COMPONENT-452;Lo;0;L;;;;;N;;;;; 189C4;TANGUT COMPONENT-453;Lo;0;L;;;;;N;;;;; 189C5;TANGUT COMPONENT-454;Lo;0;L;;;;;N;;;;; 189C6;TANGUT COMPONENT-455;Lo;0;L;;;;;N;;;;; 189C7;TANGUT COMPONENT-456;Lo;0;L;;;;;N;;;;; 189C8;TANGUT COMPONENT-457;Lo;0;L;;;;;N;;;;; 189C9;TANGUT COMPONENT-458;Lo;0;L;;;;;N;;;;; 189CA;TANGUT COMPONENT-459;Lo;0;L;;;;;N;;;;; 189CB;TANGUT COMPONENT-460;Lo;0;L;;;;;N;;;;; 189CC;TANGUT COMPONENT-461;Lo;0;L;;;;;N;;;;; 189CD;TANGUT COMPONENT-462;Lo;0;L;;;;;N;;;;; 189CE;TANGUT COMPONENT-463;Lo;0;L;;;;;N;;;;; 189CF;TANGUT COMPONENT-464;Lo;0;L;;;;;N;;;;; 189D0;TANGUT COMPONENT-465;Lo;0;L;;;;;N;;;;; 189D1;TANGUT COMPONENT-466;Lo;0;L;;;;;N;;;;; 189D2;TANGUT COMPONENT-467;Lo;0;L;;;;;N;;;;; 189D3;TANGUT COMPONENT-468;Lo;0;L;;;;;N;;;;; 189D4;TANGUT COMPONENT-469;Lo;0;L;;;;;N;;;;; 189D5;TANGUT COMPONENT-470;Lo;0;L;;;;;N;;;;; 189D6;TANGUT COMPONENT-471;Lo;0;L;;;;;N;;;;; 189D7;TANGUT COMPONENT-472;Lo;0;L;;;;;N;;;;; 189D8;TANGUT COMPONENT-473;Lo;0;L;;;;;N;;;;; 189D9;TANGUT COMPONENT-474;Lo;0;L;;;;;N;;;;; 189DA;TANGUT COMPONENT-475;Lo;0;L;;;;;N;;;;; 189DB;TANGUT COMPONENT-476;Lo;0;L;;;;;N;;;;; 189DC;TANGUT COMPONENT-477;Lo;0;L;;;;;N;;;;; 189DD;TANGUT COMPONENT-478;Lo;0;L;;;;;N;;;;; 189DE;TANGUT COMPONENT-479;Lo;0;L;;;;;N;;;;; 189DF;TANGUT COMPONENT-480;Lo;0;L;;;;;N;;;;; 189E0;TANGUT COMPONENT-481;Lo;0;L;;;;;N;;;;; 189E1;TANGUT COMPONENT-482;Lo;0;L;;;;;N;;;;; 189E2;TANGUT COMPONENT-483;Lo;0;L;;;;;N;;;;; 189E3;TANGUT COMPONENT-484;Lo;0;L;;;;;N;;;;; 189E4;TANGUT COMPONENT-485;Lo;0;L;;;;;N;;;;; 189E5;TANGUT COMPONENT-486;Lo;0;L;;;;;N;;;;; 189E6;TANGUT COMPONENT-487;Lo;0;L;;;;;N;;;;; 189E7;TANGUT COMPONENT-488;Lo;0;L;;;;;N;;;;; 189E8;TANGUT COMPONENT-489;Lo;0;L;;;;;N;;;;; 189E9;TANGUT COMPONENT-490;Lo;0;L;;;;;N;;;;; 189EA;TANGUT COMPONENT-491;Lo;0;L;;;;;N;;;;; 189EB;TANGUT COMPONENT-492;Lo;0;L;;;;;N;;;;; 189EC;TANGUT COMPONENT-493;Lo;0;L;;;;;N;;;;; 189ED;TANGUT COMPONENT-494;Lo;0;L;;;;;N;;;;; 189EE;TANGUT COMPONENT-495;Lo;0;L;;;;;N;;;;; 189EF;TANGUT COMPONENT-496;Lo;0;L;;;;;N;;;;; 189F0;TANGUT COMPONENT-497;Lo;0;L;;;;;N;;;;; 189F1;TANGUT COMPONENT-498;Lo;0;L;;;;;N;;;;; 189F2;TANGUT COMPONENT-499;Lo;0;L;;;;;N;;;;; 189F3;TANGUT COMPONENT-500;Lo;0;L;;;;;N;;;;; 189F4;TANGUT COMPONENT-501;Lo;0;L;;;;;N;;;;; 189F5;TANGUT COMPONENT-502;Lo;0;L;;;;;N;;;;; 189F6;TANGUT COMPONENT-503;Lo;0;L;;;;;N;;;;; 189F7;TANGUT COMPONENT-504;Lo;0;L;;;;;N;;;;; 189F8;TANGUT COMPONENT-505;Lo;0;L;;;;;N;;;;; 189F9;TANGUT COMPONENT-506;Lo;0;L;;;;;N;;;;; 189FA;TANGUT COMPONENT-507;Lo;0;L;;;;;N;;;;; 189FB;TANGUT COMPONENT-508;Lo;0;L;;;;;N;;;;; 189FC;TANGUT COMPONENT-509;Lo;0;L;;;;;N;;;;; 189FD;TANGUT COMPONENT-510;Lo;0;L;;;;;N;;;;; 189FE;TANGUT COMPONENT-511;Lo;0;L;;;;;N;;;;; 189FF;TANGUT COMPONENT-512;Lo;0;L;;;;;N;;;;; 18A00;TANGUT COMPONENT-513;Lo;0;L;;;;;N;;;;; 18A01;TANGUT COMPONENT-514;Lo;0;L;;;;;N;;;;; 18A02;TANGUT COMPONENT-515;Lo;0;L;;;;;N;;;;; 18A03;TANGUT COMPONENT-516;Lo;0;L;;;;;N;;;;; 18A04;TANGUT COMPONENT-517;Lo;0;L;;;;;N;;;;; 18A05;TANGUT COMPONENT-518;Lo;0;L;;;;;N;;;;; 18A06;TANGUT COMPONENT-519;Lo;0;L;;;;;N;;;;; 18A07;TANGUT COMPONENT-520;Lo;0;L;;;;;N;;;;; 18A08;TANGUT COMPONENT-521;Lo;0;L;;;;;N;;;;; 18A09;TANGUT COMPONENT-522;Lo;0;L;;;;;N;;;;; 18A0A;TANGUT COMPONENT-523;Lo;0;L;;;;;N;;;;; 18A0B;TANGUT COMPONENT-524;Lo;0;L;;;;;N;;;;; 18A0C;TANGUT COMPONENT-525;Lo;0;L;;;;;N;;;;; 18A0D;TANGUT COMPONENT-526;Lo;0;L;;;;;N;;;;; 18A0E;TANGUT COMPONENT-527;Lo;0;L;;;;;N;;;;; 18A0F;TANGUT COMPONENT-528;Lo;0;L;;;;;N;;;;; 18A10;TANGUT COMPONENT-529;Lo;0;L;;;;;N;;;;; 18A11;TANGUT COMPONENT-530;Lo;0;L;;;;;N;;;;; 18A12;TANGUT COMPONENT-531;Lo;0;L;;;;;N;;;;; 18A13;TANGUT COMPONENT-532;Lo;0;L;;;;;N;;;;; 18A14;TANGUT COMPONENT-533;Lo;0;L;;;;;N;;;;; 18A15;TANGUT COMPONENT-534;Lo;0;L;;;;;N;;;;; 18A16;TANGUT COMPONENT-535;Lo;0;L;;;;;N;;;;; 18A17;TANGUT COMPONENT-536;Lo;0;L;;;;;N;;;;; 18A18;TANGUT COMPONENT-537;Lo;0;L;;;;;N;;;;; 18A19;TANGUT COMPONENT-538;Lo;0;L;;;;;N;;;;; 18A1A;TANGUT COMPONENT-539;Lo;0;L;;;;;N;;;;; 18A1B;TANGUT COMPONENT-540;Lo;0;L;;;;;N;;;;; 18A1C;TANGUT COMPONENT-541;Lo;0;L;;;;;N;;;;; 18A1D;TANGUT COMPONENT-542;Lo;0;L;;;;;N;;;;; 18A1E;TANGUT COMPONENT-543;Lo;0;L;;;;;N;;;;; 18A1F;TANGUT COMPONENT-544;Lo;0;L;;;;;N;;;;; 18A20;TANGUT COMPONENT-545;Lo;0;L;;;;;N;;;;; 18A21;TANGUT COMPONENT-546;Lo;0;L;;;;;N;;;;; 18A22;TANGUT COMPONENT-547;Lo;0;L;;;;;N;;;;; 18A23;TANGUT COMPONENT-548;Lo;0;L;;;;;N;;;;; 18A24;TANGUT COMPONENT-549;Lo;0;L;;;;;N;;;;; 18A25;TANGUT COMPONENT-550;Lo;0;L;;;;;N;;;;; 18A26;TANGUT COMPONENT-551;Lo;0;L;;;;;N;;;;; 18A27;TANGUT COMPONENT-552;Lo;0;L;;;;;N;;;;; 18A28;TANGUT COMPONENT-553;Lo;0;L;;;;;N;;;;; 18A29;TANGUT COMPONENT-554;Lo;0;L;;;;;N;;;;; 18A2A;TANGUT COMPONENT-555;Lo;0;L;;;;;N;;;;; 18A2B;TANGUT COMPONENT-556;Lo;0;L;;;;;N;;;;; 18A2C;TANGUT COMPONENT-557;Lo;0;L;;;;;N;;;;; 18A2D;TANGUT COMPONENT-558;Lo;0;L;;;;;N;;;;; 18A2E;TANGUT COMPONENT-559;Lo;0;L;;;;;N;;;;; 18A2F;TANGUT COMPONENT-560;Lo;0;L;;;;;N;;;;; 18A30;TANGUT COMPONENT-561;Lo;0;L;;;;;N;;;;; 18A31;TANGUT COMPONENT-562;Lo;0;L;;;;;N;;;;; 18A32;TANGUT COMPONENT-563;Lo;0;L;;;;;N;;;;; 18A33;TANGUT COMPONENT-564;Lo;0;L;;;;;N;;;;; 18A34;TANGUT COMPONENT-565;Lo;0;L;;;;;N;;;;; 18A35;TANGUT COMPONENT-566;Lo;0;L;;;;;N;;;;; 18A36;TANGUT COMPONENT-567;Lo;0;L;;;;;N;;;;; 18A37;TANGUT COMPONENT-568;Lo;0;L;;;;;N;;;;; 18A38;TANGUT COMPONENT-569;Lo;0;L;;;;;N;;;;; 18A39;TANGUT COMPONENT-570;Lo;0;L;;;;;N;;;;; 18A3A;TANGUT COMPONENT-571;Lo;0;L;;;;;N;;;;; 18A3B;TANGUT COMPONENT-572;Lo;0;L;;;;;N;;;;; 18A3C;TANGUT COMPONENT-573;Lo;0;L;;;;;N;;;;; 18A3D;TANGUT COMPONENT-574;Lo;0;L;;;;;N;;;;; 18A3E;TANGUT COMPONENT-575;Lo;0;L;;;;;N;;;;; 18A3F;TANGUT COMPONENT-576;Lo;0;L;;;;;N;;;;; 18A40;TANGUT COMPONENT-577;Lo;0;L;;;;;N;;;;; 18A41;TANGUT COMPONENT-578;Lo;0;L;;;;;N;;;;; 18A42;TANGUT COMPONENT-579;Lo;0;L;;;;;N;;;;; 18A43;TANGUT COMPONENT-580;Lo;0;L;;;;;N;;;;; 18A44;TANGUT COMPONENT-581;Lo;0;L;;;;;N;;;;; 18A45;TANGUT COMPONENT-582;Lo;0;L;;;;;N;;;;; 18A46;TANGUT COMPONENT-583;Lo;0;L;;;;;N;;;;; 18A47;TANGUT COMPONENT-584;Lo;0;L;;;;;N;;;;; 18A48;TANGUT COMPONENT-585;Lo;0;L;;;;;N;;;;; 18A49;TANGUT COMPONENT-586;Lo;0;L;;;;;N;;;;; 18A4A;TANGUT COMPONENT-587;Lo;0;L;;;;;N;;;;; 18A4B;TANGUT COMPONENT-588;Lo;0;L;;;;;N;;;;; 18A4C;TANGUT COMPONENT-589;Lo;0;L;;;;;N;;;;; 18A4D;TANGUT COMPONENT-590;Lo;0;L;;;;;N;;;;; 18A4E;TANGUT COMPONENT-591;Lo;0;L;;;;;N;;;;; 18A4F;TANGUT COMPONENT-592;Lo;0;L;;;;;N;;;;; 18A50;TANGUT COMPONENT-593;Lo;0;L;;;;;N;;;;; 18A51;TANGUT COMPONENT-594;Lo;0;L;;;;;N;;;;; 18A52;TANGUT COMPONENT-595;Lo;0;L;;;;;N;;;;; 18A53;TANGUT COMPONENT-596;Lo;0;L;;;;;N;;;;; 18A54;TANGUT COMPONENT-597;Lo;0;L;;;;;N;;;;; 18A55;TANGUT COMPONENT-598;Lo;0;L;;;;;N;;;;; 18A56;TANGUT COMPONENT-599;Lo;0;L;;;;;N;;;;; 18A57;TANGUT COMPONENT-600;Lo;0;L;;;;;N;;;;; 18A58;TANGUT COMPONENT-601;Lo;0;L;;;;;N;;;;; 18A59;TANGUT COMPONENT-602;Lo;0;L;;;;;N;;;;; 18A5A;TANGUT COMPONENT-603;Lo;0;L;;;;;N;;;;; 18A5B;TANGUT COMPONENT-604;Lo;0;L;;;;;N;;;;; 18A5C;TANGUT COMPONENT-605;Lo;0;L;;;;;N;;;;; 18A5D;TANGUT COMPONENT-606;Lo;0;L;;;;;N;;;;; 18A5E;TANGUT COMPONENT-607;Lo;0;L;;;;;N;;;;; 18A5F;TANGUT COMPONENT-608;Lo;0;L;;;;;N;;;;; 18A60;TANGUT COMPONENT-609;Lo;0;L;;;;;N;;;;; 18A61;TANGUT COMPONENT-610;Lo;0;L;;;;;N;;;;; 18A62;TANGUT COMPONENT-611;Lo;0;L;;;;;N;;;;; 18A63;TANGUT COMPONENT-612;Lo;0;L;;;;;N;;;;; 18A64;TANGUT COMPONENT-613;Lo;0;L;;;;;N;;;;; 18A65;TANGUT COMPONENT-614;Lo;0;L;;;;;N;;;;; 18A66;TANGUT COMPONENT-615;Lo;0;L;;;;;N;;;;; 18A67;TANGUT COMPONENT-616;Lo;0;L;;;;;N;;;;; 18A68;TANGUT COMPONENT-617;Lo;0;L;;;;;N;;;;; 18A69;TANGUT COMPONENT-618;Lo;0;L;;;;;N;;;;; 18A6A;TANGUT COMPONENT-619;Lo;0;L;;;;;N;;;;; 18A6B;TANGUT COMPONENT-620;Lo;0;L;;;;;N;;;;; 18A6C;TANGUT COMPONENT-621;Lo;0;L;;;;;N;;;;; 18A6D;TANGUT COMPONENT-622;Lo;0;L;;;;;N;;;;; 18A6E;TANGUT COMPONENT-623;Lo;0;L;;;;;N;;;;; 18A6F;TANGUT COMPONENT-624;Lo;0;L;;;;;N;;;;; 18A70;TANGUT COMPONENT-625;Lo;0;L;;;;;N;;;;; 18A71;TANGUT COMPONENT-626;Lo;0;L;;;;;N;;;;; 18A72;TANGUT COMPONENT-627;Lo;0;L;;;;;N;;;;; 18A73;TANGUT COMPONENT-628;Lo;0;L;;;;;N;;;;; 18A74;TANGUT COMPONENT-629;Lo;0;L;;;;;N;;;;; 18A75;TANGUT COMPONENT-630;Lo;0;L;;;;;N;;;;; 18A76;TANGUT COMPONENT-631;Lo;0;L;;;;;N;;;;; 18A77;TANGUT COMPONENT-632;Lo;0;L;;;;;N;;;;; 18A78;TANGUT COMPONENT-633;Lo;0;L;;;;;N;;;;; 18A79;TANGUT COMPONENT-634;Lo;0;L;;;;;N;;;;; 18A7A;TANGUT COMPONENT-635;Lo;0;L;;;;;N;;;;; 18A7B;TANGUT COMPONENT-636;Lo;0;L;;;;;N;;;;; 18A7C;TANGUT COMPONENT-637;Lo;0;L;;;;;N;;;;; 18A7D;TANGUT COMPONENT-638;Lo;0;L;;;;;N;;;;; 18A7E;TANGUT COMPONENT-639;Lo;0;L;;;;;N;;;;; 18A7F;TANGUT COMPONENT-640;Lo;0;L;;;;;N;;;;; 18A80;TANGUT COMPONENT-641;Lo;0;L;;;;;N;;;;; 18A81;TANGUT COMPONENT-642;Lo;0;L;;;;;N;;;;; 18A82;TANGUT COMPONENT-643;Lo;0;L;;;;;N;;;;; 18A83;TANGUT COMPONENT-644;Lo;0;L;;;;;N;;;;; 18A84;TANGUT COMPONENT-645;Lo;0;L;;;;;N;;;;; 18A85;TANGUT COMPONENT-646;Lo;0;L;;;;;N;;;;; 18A86;TANGUT COMPONENT-647;Lo;0;L;;;;;N;;;;; 18A87;TANGUT COMPONENT-648;Lo;0;L;;;;;N;;;;; 18A88;TANGUT COMPONENT-649;Lo;0;L;;;;;N;;;;; 18A89;TANGUT COMPONENT-650;Lo;0;L;;;;;N;;;;; 18A8A;TANGUT COMPONENT-651;Lo;0;L;;;;;N;;;;; 18A8B;TANGUT COMPONENT-652;Lo;0;L;;;;;N;;;;; 18A8C;TANGUT COMPONENT-653;Lo;0;L;;;;;N;;;;; 18A8D;TANGUT COMPONENT-654;Lo;0;L;;;;;N;;;;; 18A8E;TANGUT COMPONENT-655;Lo;0;L;;;;;N;;;;; 18A8F;TANGUT COMPONENT-656;Lo;0;L;;;;;N;;;;; 18A90;TANGUT COMPONENT-657;Lo;0;L;;;;;N;;;;; 18A91;TANGUT COMPONENT-658;Lo;0;L;;;;;N;;;;; 18A92;TANGUT COMPONENT-659;Lo;0;L;;;;;N;;;;; 18A93;TANGUT COMPONENT-660;Lo;0;L;;;;;N;;;;; 18A94;TANGUT COMPONENT-661;Lo;0;L;;;;;N;;;;; 18A95;TANGUT COMPONENT-662;Lo;0;L;;;;;N;;;;; 18A96;TANGUT COMPONENT-663;Lo;0;L;;;;;N;;;;; 18A97;TANGUT COMPONENT-664;Lo;0;L;;;;;N;;;;; 18A98;TANGUT COMPONENT-665;Lo;0;L;;;;;N;;;;; 18A99;TANGUT COMPONENT-666;Lo;0;L;;;;;N;;;;; 18A9A;TANGUT COMPONENT-667;Lo;0;L;;;;;N;;;;; 18A9B;TANGUT COMPONENT-668;Lo;0;L;;;;;N;;;;; 18A9C;TANGUT COMPONENT-669;Lo;0;L;;;;;N;;;;; 18A9D;TANGUT COMPONENT-670;Lo;0;L;;;;;N;;;;; 18A9E;TANGUT COMPONENT-671;Lo;0;L;;;;;N;;;;; 18A9F;TANGUT COMPONENT-672;Lo;0;L;;;;;N;;;;; 18AA0;TANGUT COMPONENT-673;Lo;0;L;;;;;N;;;;; 18AA1;TANGUT COMPONENT-674;Lo;0;L;;;;;N;;;;; 18AA2;TANGUT COMPONENT-675;Lo;0;L;;;;;N;;;;; 18AA3;TANGUT COMPONENT-676;Lo;0;L;;;;;N;;;;; 18AA4;TANGUT COMPONENT-677;Lo;0;L;;;;;N;;;;; 18AA5;TANGUT COMPONENT-678;Lo;0;L;;;;;N;;;;; 18AA6;TANGUT COMPONENT-679;Lo;0;L;;;;;N;;;;; 18AA7;TANGUT COMPONENT-680;Lo;0;L;;;;;N;;;;; 18AA8;TANGUT COMPONENT-681;Lo;0;L;;;;;N;;;;; 18AA9;TANGUT COMPONENT-682;Lo;0;L;;;;;N;;;;; 18AAA;TANGUT COMPONENT-683;Lo;0;L;;;;;N;;;;; 18AAB;TANGUT COMPONENT-684;Lo;0;L;;;;;N;;;;; 18AAC;TANGUT COMPONENT-685;Lo;0;L;;;;;N;;;;; 18AAD;TANGUT COMPONENT-686;Lo;0;L;;;;;N;;;;; 18AAE;TANGUT COMPONENT-687;Lo;0;L;;;;;N;;;;; 18AAF;TANGUT COMPONENT-688;Lo;0;L;;;;;N;;;;; 18AB0;TANGUT COMPONENT-689;Lo;0;L;;;;;N;;;;; 18AB1;TANGUT COMPONENT-690;Lo;0;L;;;;;N;;;;; 18AB2;TANGUT COMPONENT-691;Lo;0;L;;;;;N;;;;; 18AB3;TANGUT COMPONENT-692;Lo;0;L;;;;;N;;;;; 18AB4;TANGUT COMPONENT-693;Lo;0;L;;;;;N;;;;; 18AB5;TANGUT COMPONENT-694;Lo;0;L;;;;;N;;;;; 18AB6;TANGUT COMPONENT-695;Lo;0;L;;;;;N;;;;; 18AB7;TANGUT COMPONENT-696;Lo;0;L;;;;;N;;;;; 18AB8;TANGUT COMPONENT-697;Lo;0;L;;;;;N;;;;; 18AB9;TANGUT COMPONENT-698;Lo;0;L;;;;;N;;;;; 18ABA;TANGUT COMPONENT-699;Lo;0;L;;;;;N;;;;; 18ABB;TANGUT COMPONENT-700;Lo;0;L;;;;;N;;;;; 18ABC;TANGUT COMPONENT-701;Lo;0;L;;;;;N;;;;; 18ABD;TANGUT COMPONENT-702;Lo;0;L;;;;;N;;;;; 18ABE;TANGUT COMPONENT-703;Lo;0;L;;;;;N;;;;; 18ABF;TANGUT COMPONENT-704;Lo;0;L;;;;;N;;;;; 18AC0;TANGUT COMPONENT-705;Lo;0;L;;;;;N;;;;; 18AC1;TANGUT COMPONENT-706;Lo;0;L;;;;;N;;;;; 18AC2;TANGUT COMPONENT-707;Lo;0;L;;;;;N;;;;; 18AC3;TANGUT COMPONENT-708;Lo;0;L;;;;;N;;;;; 18AC4;TANGUT COMPONENT-709;Lo;0;L;;;;;N;;;;; 18AC5;TANGUT COMPONENT-710;Lo;0;L;;;;;N;;;;; 18AC6;TANGUT COMPONENT-711;Lo;0;L;;;;;N;;;;; 18AC7;TANGUT COMPONENT-712;Lo;0;L;;;;;N;;;;; 18AC8;TANGUT COMPONENT-713;Lo;0;L;;;;;N;;;;; 18AC9;TANGUT COMPONENT-714;Lo;0;L;;;;;N;;;;; 18ACA;TANGUT COMPONENT-715;Lo;0;L;;;;;N;;;;; 18ACB;TANGUT COMPONENT-716;Lo;0;L;;;;;N;;;;; 18ACC;TANGUT COMPONENT-717;Lo;0;L;;;;;N;;;;; 18ACD;TANGUT COMPONENT-718;Lo;0;L;;;;;N;;;;; 18ACE;TANGUT COMPONENT-719;Lo;0;L;;;;;N;;;;; 18ACF;TANGUT COMPONENT-720;Lo;0;L;;;;;N;;;;; 18AD0;TANGUT COMPONENT-721;Lo;0;L;;;;;N;;;;; 18AD1;TANGUT COMPONENT-722;Lo;0;L;;;;;N;;;;; 18AD2;TANGUT COMPONENT-723;Lo;0;L;;;;;N;;;;; 18AD3;TANGUT COMPONENT-724;Lo;0;L;;;;;N;;;;; 18AD4;TANGUT COMPONENT-725;Lo;0;L;;;;;N;;;;; 18AD5;TANGUT COMPONENT-726;Lo;0;L;;;;;N;;;;; 18AD6;TANGUT COMPONENT-727;Lo;0;L;;;;;N;;;;; 18AD7;TANGUT COMPONENT-728;Lo;0;L;;;;;N;;;;; 18AD8;TANGUT COMPONENT-729;Lo;0;L;;;;;N;;;;; 18AD9;TANGUT COMPONENT-730;Lo;0;L;;;;;N;;;;; 18ADA;TANGUT COMPONENT-731;Lo;0;L;;;;;N;;;;; 18ADB;TANGUT COMPONENT-732;Lo;0;L;;;;;N;;;;; 18ADC;TANGUT COMPONENT-733;Lo;0;L;;;;;N;;;;; 18ADD;TANGUT COMPONENT-734;Lo;0;L;;;;;N;;;;; 18ADE;TANGUT COMPONENT-735;Lo;0;L;;;;;N;;;;; 18ADF;TANGUT COMPONENT-736;Lo;0;L;;;;;N;;;;; 18AE0;TANGUT COMPONENT-737;Lo;0;L;;;;;N;;;;; 18AE1;TANGUT COMPONENT-738;Lo;0;L;;;;;N;;;;; 18AE2;TANGUT COMPONENT-739;Lo;0;L;;;;;N;;;;; 18AE3;TANGUT COMPONENT-740;Lo;0;L;;;;;N;;;;; 18AE4;TANGUT COMPONENT-741;Lo;0;L;;;;;N;;;;; 18AE5;TANGUT COMPONENT-742;Lo;0;L;;;;;N;;;;; 18AE6;TANGUT COMPONENT-743;Lo;0;L;;;;;N;;;;; 18AE7;TANGUT COMPONENT-744;Lo;0;L;;;;;N;;;;; 18AE8;TANGUT COMPONENT-745;Lo;0;L;;;;;N;;;;; 18AE9;TANGUT COMPONENT-746;Lo;0;L;;;;;N;;;;; 18AEA;TANGUT COMPONENT-747;Lo;0;L;;;;;N;;;;; 18AEB;TANGUT COMPONENT-748;Lo;0;L;;;;;N;;;;; 18AEC;TANGUT COMPONENT-749;Lo;0;L;;;;;N;;;;; 18AED;TANGUT COMPONENT-750;Lo;0;L;;;;;N;;;;; 18AEE;TANGUT COMPONENT-751;Lo;0;L;;;;;N;;;;; 18AEF;TANGUT COMPONENT-752;Lo;0;L;;;;;N;;;;; 18AF0;TANGUT COMPONENT-753;Lo;0;L;;;;;N;;;;; 18AF1;TANGUT COMPONENT-754;Lo;0;L;;;;;N;;;;; 18AF2;TANGUT COMPONENT-755;Lo;0;L;;;;;N;;;;; 18AF3;TANGUT COMPONENT-756;Lo;0;L;;;;;N;;;;; 18AF4;TANGUT COMPONENT-757;Lo;0;L;;;;;N;;;;; 18AF5;TANGUT COMPONENT-758;Lo;0;L;;;;;N;;;;; 18AF6;TANGUT COMPONENT-759;Lo;0;L;;;;;N;;;;; 18AF7;TANGUT COMPONENT-760;Lo;0;L;;;;;N;;;;; 18AF8;TANGUT COMPONENT-761;Lo;0;L;;;;;N;;;;; 18AF9;TANGUT COMPONENT-762;Lo;0;L;;;;;N;;;;; 18AFA;TANGUT COMPONENT-763;Lo;0;L;;;;;N;;;;; 18AFB;TANGUT COMPONENT-764;Lo;0;L;;;;;N;;;;; 18AFC;TANGUT COMPONENT-765;Lo;0;L;;;;;N;;;;; 18AFD;TANGUT COMPONENT-766;Lo;0;L;;;;;N;;;;; 18AFE;TANGUT COMPONENT-767;Lo;0;L;;;;;N;;;;; 18AFF;TANGUT COMPONENT-768;Lo;0;L;;;;;N;;;;; 18B00;KHITAN SMALL SCRIPT CHARACTER-18B00;Lo;0;L;;;;;N;;;;; 18B01;KHITAN SMALL SCRIPT CHARACTER-18B01;Lo;0;L;;;;;N;;;;; 18B02;KHITAN SMALL SCRIPT CHARACTER-18B02;Lo;0;L;;;;;N;;;;; 18B03;KHITAN SMALL SCRIPT CHARACTER-18B03;Lo;0;L;;;;;N;;;;; 18B04;KHITAN SMALL SCRIPT CHARACTER-18B04;Lo;0;L;;;;;N;;;;; 18B05;KHITAN SMALL SCRIPT CHARACTER-18B05;Lo;0;L;;;;;N;;;;; 18B06;KHITAN SMALL SCRIPT CHARACTER-18B06;Lo;0;L;;;;;N;;;;; 18B07;KHITAN SMALL SCRIPT CHARACTER-18B07;Lo;0;L;;;;;N;;;;; 18B08;KHITAN SMALL SCRIPT CHARACTER-18B08;Lo;0;L;;;;;N;;;;; 18B09;KHITAN SMALL SCRIPT CHARACTER-18B09;Lo;0;L;;;;;N;;;;; 18B0A;KHITAN SMALL SCRIPT CHARACTER-18B0A;Lo;0;L;;;;;N;;;;; 18B0B;KHITAN SMALL SCRIPT CHARACTER-18B0B;Lo;0;L;;;;;N;;;;; 18B0C;KHITAN SMALL SCRIPT CHARACTER-18B0C;Lo;0;L;;;;;N;;;;; 18B0D;KHITAN SMALL SCRIPT CHARACTER-18B0D;Lo;0;L;;;;;N;;;;; 18B0E;KHITAN SMALL SCRIPT CHARACTER-18B0E;Lo;0;L;;;;;N;;;;; 18B0F;KHITAN SMALL SCRIPT CHARACTER-18B0F;Lo;0;L;;;;;N;;;;; 18B10;KHITAN SMALL SCRIPT CHARACTER-18B10;Lo;0;L;;;;;N;;;;; 18B11;KHITAN SMALL SCRIPT CHARACTER-18B11;Lo;0;L;;;;;N;;;;; 18B12;KHITAN SMALL SCRIPT CHARACTER-18B12;Lo;0;L;;;;;N;;;;; 18B13;KHITAN SMALL SCRIPT CHARACTER-18B13;Lo;0;L;;;;;N;;;;; 18B14;KHITAN SMALL SCRIPT CHARACTER-18B14;Lo;0;L;;;;;N;;;;; 18B15;KHITAN SMALL SCRIPT CHARACTER-18B15;Lo;0;L;;;;;N;;;;; 18B16;KHITAN SMALL SCRIPT CHARACTER-18B16;Lo;0;L;;;;;N;;;;; 18B17;KHITAN SMALL SCRIPT CHARACTER-18B17;Lo;0;L;;;;;N;;;;; 18B18;KHITAN SMALL SCRIPT CHARACTER-18B18;Lo;0;L;;;;;N;;;;; 18B19;KHITAN SMALL SCRIPT CHARACTER-18B19;Lo;0;L;;;;;N;;;;; 18B1A;KHITAN SMALL SCRIPT CHARACTER-18B1A;Lo;0;L;;;;;N;;;;; 18B1B;KHITAN SMALL SCRIPT CHARACTER-18B1B;Lo;0;L;;;;;N;;;;; 18B1C;KHITAN SMALL SCRIPT CHARACTER-18B1C;Lo;0;L;;;;;N;;;;; 18B1D;KHITAN SMALL SCRIPT CHARACTER-18B1D;Lo;0;L;;;;;N;;;;; 18B1E;KHITAN SMALL SCRIPT CHARACTER-18B1E;Lo;0;L;;;;;N;;;;; 18B1F;KHITAN SMALL SCRIPT CHARACTER-18B1F;Lo;0;L;;;;;N;;;;; 18B20;KHITAN SMALL SCRIPT CHARACTER-18B20;Lo;0;L;;;;;N;;;;; 18B21;KHITAN SMALL SCRIPT CHARACTER-18B21;Lo;0;L;;;;;N;;;;; 18B22;KHITAN SMALL SCRIPT CHARACTER-18B22;Lo;0;L;;;;;N;;;;; 18B23;KHITAN SMALL SCRIPT CHARACTER-18B23;Lo;0;L;;;;;N;;;;; 18B24;KHITAN SMALL SCRIPT CHARACTER-18B24;Lo;0;L;;;;;N;;;;; 18B25;KHITAN SMALL SCRIPT CHARACTER-18B25;Lo;0;L;;;;;N;;;;; 18B26;KHITAN SMALL SCRIPT CHARACTER-18B26;Lo;0;L;;;;;N;;;;; 18B27;KHITAN SMALL SCRIPT CHARACTER-18B27;Lo;0;L;;;;;N;;;;; 18B28;KHITAN SMALL SCRIPT CHARACTER-18B28;Lo;0;L;;;;;N;;;;; 18B29;KHITAN SMALL SCRIPT CHARACTER-18B29;Lo;0;L;;;;;N;;;;; 18B2A;KHITAN SMALL SCRIPT CHARACTER-18B2A;Lo;0;L;;;;;N;;;;; 18B2B;KHITAN SMALL SCRIPT CHARACTER-18B2B;Lo;0;L;;;;;N;;;;; 18B2C;KHITAN SMALL SCRIPT CHARACTER-18B2C;Lo;0;L;;;;;N;;;;; 18B2D;KHITAN SMALL SCRIPT CHARACTER-18B2D;Lo;0;L;;;;;N;;;;; 18B2E;KHITAN SMALL SCRIPT CHARACTER-18B2E;Lo;0;L;;;;;N;;;;; 18B2F;KHITAN SMALL SCRIPT CHARACTER-18B2F;Lo;0;L;;;;;N;;;;; 18B30;KHITAN SMALL SCRIPT CHARACTER-18B30;Lo;0;L;;;;;N;;;;; 18B31;KHITAN SMALL SCRIPT CHARACTER-18B31;Lo;0;L;;;;;N;;;;; 18B32;KHITAN SMALL SCRIPT CHARACTER-18B32;Lo;0;L;;;;;N;;;;; 18B33;KHITAN SMALL SCRIPT CHARACTER-18B33;Lo;0;L;;;;;N;;;;; 18B34;KHITAN SMALL SCRIPT CHARACTER-18B34;Lo;0;L;;;;;N;;;;; 18B35;KHITAN SMALL SCRIPT CHARACTER-18B35;Lo;0;L;;;;;N;;;;; 18B36;KHITAN SMALL SCRIPT CHARACTER-18B36;Lo;0;L;;;;;N;;;;; 18B37;KHITAN SMALL SCRIPT CHARACTER-18B37;Lo;0;L;;;;;N;;;;; 18B38;KHITAN SMALL SCRIPT CHARACTER-18B38;Lo;0;L;;;;;N;;;;; 18B39;KHITAN SMALL SCRIPT CHARACTER-18B39;Lo;0;L;;;;;N;;;;; 18B3A;KHITAN SMALL SCRIPT CHARACTER-18B3A;Lo;0;L;;;;;N;;;;; 18B3B;KHITAN SMALL SCRIPT CHARACTER-18B3B;Lo;0;L;;;;;N;;;;; 18B3C;KHITAN SMALL SCRIPT CHARACTER-18B3C;Lo;0;L;;;;;N;;;;; 18B3D;KHITAN SMALL SCRIPT CHARACTER-18B3D;Lo;0;L;;;;;N;;;;; 18B3E;KHITAN SMALL SCRIPT CHARACTER-18B3E;Lo;0;L;;;;;N;;;;; 18B3F;KHITAN SMALL SCRIPT CHARACTER-18B3F;Lo;0;L;;;;;N;;;;; 18B40;KHITAN SMALL SCRIPT CHARACTER-18B40;Lo;0;L;;;;;N;;;;; 18B41;KHITAN SMALL SCRIPT CHARACTER-18B41;Lo;0;L;;;;;N;;;;; 18B42;KHITAN SMALL SCRIPT CHARACTER-18B42;Lo;0;L;;;;;N;;;;; 18B43;KHITAN SMALL SCRIPT CHARACTER-18B43;Lo;0;L;;;;;N;;;;; 18B44;KHITAN SMALL SCRIPT CHARACTER-18B44;Lo;0;L;;;;;N;;;;; 18B45;KHITAN SMALL SCRIPT CHARACTER-18B45;Lo;0;L;;;;;N;;;;; 18B46;KHITAN SMALL SCRIPT CHARACTER-18B46;Lo;0;L;;;;;N;;;;; 18B47;KHITAN SMALL SCRIPT CHARACTER-18B47;Lo;0;L;;;;;N;;;;; 18B48;KHITAN SMALL SCRIPT CHARACTER-18B48;Lo;0;L;;;;;N;;;;; 18B49;KHITAN SMALL SCRIPT CHARACTER-18B49;Lo;0;L;;;;;N;;;;; 18B4A;KHITAN SMALL SCRIPT CHARACTER-18B4A;Lo;0;L;;;;;N;;;;; 18B4B;KHITAN SMALL SCRIPT CHARACTER-18B4B;Lo;0;L;;;;;N;;;;; 18B4C;KHITAN SMALL SCRIPT CHARACTER-18B4C;Lo;0;L;;;;;N;;;;; 18B4D;KHITAN SMALL SCRIPT CHARACTER-18B4D;Lo;0;L;;;;;N;;;;; 18B4E;KHITAN SMALL SCRIPT CHARACTER-18B4E;Lo;0;L;;;;;N;;;;; 18B4F;KHITAN SMALL SCRIPT CHARACTER-18B4F;Lo;0;L;;;;;N;;;;; 18B50;KHITAN SMALL SCRIPT CHARACTER-18B50;Lo;0;L;;;;;N;;;;; 18B51;KHITAN SMALL SCRIPT CHARACTER-18B51;Lo;0;L;;;;;N;;;;; 18B52;KHITAN SMALL SCRIPT CHARACTER-18B52;Lo;0;L;;;;;N;;;;; 18B53;KHITAN SMALL SCRIPT CHARACTER-18B53;Lo;0;L;;;;;N;;;;; 18B54;KHITAN SMALL SCRIPT CHARACTER-18B54;Lo;0;L;;;;;N;;;;; 18B55;KHITAN SMALL SCRIPT CHARACTER-18B55;Lo;0;L;;;;;N;;;;; 18B56;KHITAN SMALL SCRIPT CHARACTER-18B56;Lo;0;L;;;;;N;;;;; 18B57;KHITAN SMALL SCRIPT CHARACTER-18B57;Lo;0;L;;;;;N;;;;; 18B58;KHITAN SMALL SCRIPT CHARACTER-18B58;Lo;0;L;;;;;N;;;;; 18B59;KHITAN SMALL SCRIPT CHARACTER-18B59;Lo;0;L;;;;;N;;;;; 18B5A;KHITAN SMALL SCRIPT CHARACTER-18B5A;Lo;0;L;;;;;N;;;;; 18B5B;KHITAN SMALL SCRIPT CHARACTER-18B5B;Lo;0;L;;;;;N;;;;; 18B5C;KHITAN SMALL SCRIPT CHARACTER-18B5C;Lo;0;L;;;;;N;;;;; 18B5D;KHITAN SMALL SCRIPT CHARACTER-18B5D;Lo;0;L;;;;;N;;;;; 18B5E;KHITAN SMALL SCRIPT CHARACTER-18B5E;Lo;0;L;;;;;N;;;;; 18B5F;KHITAN SMALL SCRIPT CHARACTER-18B5F;Lo;0;L;;;;;N;;;;; 18B60;KHITAN SMALL SCRIPT CHARACTER-18B60;Lo;0;L;;;;;N;;;;; 18B61;KHITAN SMALL SCRIPT CHARACTER-18B61;Lo;0;L;;;;;N;;;;; 18B62;KHITAN SMALL SCRIPT CHARACTER-18B62;Lo;0;L;;;;;N;;;;; 18B63;KHITAN SMALL SCRIPT CHARACTER-18B63;Lo;0;L;;;;;N;;;;; 18B64;KHITAN SMALL SCRIPT CHARACTER-18B64;Lo;0;L;;;;;N;;;;; 18B65;KHITAN SMALL SCRIPT CHARACTER-18B65;Lo;0;L;;;;;N;;;;; 18B66;KHITAN SMALL SCRIPT CHARACTER-18B66;Lo;0;L;;;;;N;;;;; 18B67;KHITAN SMALL SCRIPT CHARACTER-18B67;Lo;0;L;;;;;N;;;;; 18B68;KHITAN SMALL SCRIPT CHARACTER-18B68;Lo;0;L;;;;;N;;;;; 18B69;KHITAN SMALL SCRIPT CHARACTER-18B69;Lo;0;L;;;;;N;;;;; 18B6A;KHITAN SMALL SCRIPT CHARACTER-18B6A;Lo;0;L;;;;;N;;;;; 18B6B;KHITAN SMALL SCRIPT CHARACTER-18B6B;Lo;0;L;;;;;N;;;;; 18B6C;KHITAN SMALL SCRIPT CHARACTER-18B6C;Lo;0;L;;;;;N;;;;; 18B6D;KHITAN SMALL SCRIPT CHARACTER-18B6D;Lo;0;L;;;;;N;;;;; 18B6E;KHITAN SMALL SCRIPT CHARACTER-18B6E;Lo;0;L;;;;;N;;;;; 18B6F;KHITAN SMALL SCRIPT CHARACTER-18B6F;Lo;0;L;;;;;N;;;;; 18B70;KHITAN SMALL SCRIPT CHARACTER-18B70;Lo;0;L;;;;;N;;;;; 18B71;KHITAN SMALL SCRIPT CHARACTER-18B71;Lo;0;L;;;;;N;;;;; 18B72;KHITAN SMALL SCRIPT CHARACTER-18B72;Lo;0;L;;;;;N;;;;; 18B73;KHITAN SMALL SCRIPT CHARACTER-18B73;Lo;0;L;;;;;N;;;;; 18B74;KHITAN SMALL SCRIPT CHARACTER-18B74;Lo;0;L;;;;;N;;;;; 18B75;KHITAN SMALL SCRIPT CHARACTER-18B75;Lo;0;L;;;;;N;;;;; 18B76;KHITAN SMALL SCRIPT CHARACTER-18B76;Lo;0;L;;;;;N;;;;; 18B77;KHITAN SMALL SCRIPT CHARACTER-18B77;Lo;0;L;;;;;N;;;;; 18B78;KHITAN SMALL SCRIPT CHARACTER-18B78;Lo;0;L;;;;;N;;;;; 18B79;KHITAN SMALL SCRIPT CHARACTER-18B79;Lo;0;L;;;;;N;;;;; 18B7A;KHITAN SMALL SCRIPT CHARACTER-18B7A;Lo;0;L;;;;;N;;;;; 18B7B;KHITAN SMALL SCRIPT CHARACTER-18B7B;Lo;0;L;;;;;N;;;;; 18B7C;KHITAN SMALL SCRIPT CHARACTER-18B7C;Lo;0;L;;;;;N;;;;; 18B7D;KHITAN SMALL SCRIPT CHARACTER-18B7D;Lo;0;L;;;;;N;;;;; 18B7E;KHITAN SMALL SCRIPT CHARACTER-18B7E;Lo;0;L;;;;;N;;;;; 18B7F;KHITAN SMALL SCRIPT CHARACTER-18B7F;Lo;0;L;;;;;N;;;;; 18B80;KHITAN SMALL SCRIPT CHARACTER-18B80;Lo;0;L;;;;;N;;;;; 18B81;KHITAN SMALL SCRIPT CHARACTER-18B81;Lo;0;L;;;;;N;;;;; 18B82;KHITAN SMALL SCRIPT CHARACTER-18B82;Lo;0;L;;;;;N;;;;; 18B83;KHITAN SMALL SCRIPT CHARACTER-18B83;Lo;0;L;;;;;N;;;;; 18B84;KHITAN SMALL SCRIPT CHARACTER-18B84;Lo;0;L;;;;;N;;;;; 18B85;KHITAN SMALL SCRIPT CHARACTER-18B85;Lo;0;L;;;;;N;;;;; 18B86;KHITAN SMALL SCRIPT CHARACTER-18B86;Lo;0;L;;;;;N;;;;; 18B87;KHITAN SMALL SCRIPT CHARACTER-18B87;Lo;0;L;;;;;N;;;;; 18B88;KHITAN SMALL SCRIPT CHARACTER-18B88;Lo;0;L;;;;;N;;;;; 18B89;KHITAN SMALL SCRIPT CHARACTER-18B89;Lo;0;L;;;;;N;;;;; 18B8A;KHITAN SMALL SCRIPT CHARACTER-18B8A;Lo;0;L;;;;;N;;;;; 18B8B;KHITAN SMALL SCRIPT CHARACTER-18B8B;Lo;0;L;;;;;N;;;;; 18B8C;KHITAN SMALL SCRIPT CHARACTER-18B8C;Lo;0;L;;;;;N;;;;; 18B8D;KHITAN SMALL SCRIPT CHARACTER-18B8D;Lo;0;L;;;;;N;;;;; 18B8E;KHITAN SMALL SCRIPT CHARACTER-18B8E;Lo;0;L;;;;;N;;;;; 18B8F;KHITAN SMALL SCRIPT CHARACTER-18B8F;Lo;0;L;;;;;N;;;;; 18B90;KHITAN SMALL SCRIPT CHARACTER-18B90;Lo;0;L;;;;;N;;;;; 18B91;KHITAN SMALL SCRIPT CHARACTER-18B91;Lo;0;L;;;;;N;;;;; 18B92;KHITAN SMALL SCRIPT CHARACTER-18B92;Lo;0;L;;;;;N;;;;; 18B93;KHITAN SMALL SCRIPT CHARACTER-18B93;Lo;0;L;;;;;N;;;;; 18B94;KHITAN SMALL SCRIPT CHARACTER-18B94;Lo;0;L;;;;;N;;;;; 18B95;KHITAN SMALL SCRIPT CHARACTER-18B95;Lo;0;L;;;;;N;;;;; 18B96;KHITAN SMALL SCRIPT CHARACTER-18B96;Lo;0;L;;;;;N;;;;; 18B97;KHITAN SMALL SCRIPT CHARACTER-18B97;Lo;0;L;;;;;N;;;;; 18B98;KHITAN SMALL SCRIPT CHARACTER-18B98;Lo;0;L;;;;;N;;;;; 18B99;KHITAN SMALL SCRIPT CHARACTER-18B99;Lo;0;L;;;;;N;;;;; 18B9A;KHITAN SMALL SCRIPT CHARACTER-18B9A;Lo;0;L;;;;;N;;;;; 18B9B;KHITAN SMALL SCRIPT CHARACTER-18B9B;Lo;0;L;;;;;N;;;;; 18B9C;KHITAN SMALL SCRIPT CHARACTER-18B9C;Lo;0;L;;;;;N;;;;; 18B9D;KHITAN SMALL SCRIPT CHARACTER-18B9D;Lo;0;L;;;;;N;;;;; 18B9E;KHITAN SMALL SCRIPT CHARACTER-18B9E;Lo;0;L;;;;;N;;;;; 18B9F;KHITAN SMALL SCRIPT CHARACTER-18B9F;Lo;0;L;;;;;N;;;;; 18BA0;KHITAN SMALL SCRIPT CHARACTER-18BA0;Lo;0;L;;;;;N;;;;; 18BA1;KHITAN SMALL SCRIPT CHARACTER-18BA1;Lo;0;L;;;;;N;;;;; 18BA2;KHITAN SMALL SCRIPT CHARACTER-18BA2;Lo;0;L;;;;;N;;;;; 18BA3;KHITAN SMALL SCRIPT CHARACTER-18BA3;Lo;0;L;;;;;N;;;;; 18BA4;KHITAN SMALL SCRIPT CHARACTER-18BA4;Lo;0;L;;;;;N;;;;; 18BA5;KHITAN SMALL SCRIPT CHARACTER-18BA5;Lo;0;L;;;;;N;;;;; 18BA6;KHITAN SMALL SCRIPT CHARACTER-18BA6;Lo;0;L;;;;;N;;;;; 18BA7;KHITAN SMALL SCRIPT CHARACTER-18BA7;Lo;0;L;;;;;N;;;;; 18BA8;KHITAN SMALL SCRIPT CHARACTER-18BA8;Lo;0;L;;;;;N;;;;; 18BA9;KHITAN SMALL SCRIPT CHARACTER-18BA9;Lo;0;L;;;;;N;;;;; 18BAA;KHITAN SMALL SCRIPT CHARACTER-18BAA;Lo;0;L;;;;;N;;;;; 18BAB;KHITAN SMALL SCRIPT CHARACTER-18BAB;Lo;0;L;;;;;N;;;;; 18BAC;KHITAN SMALL SCRIPT CHARACTER-18BAC;Lo;0;L;;;;;N;;;;; 18BAD;KHITAN SMALL SCRIPT CHARACTER-18BAD;Lo;0;L;;;;;N;;;;; 18BAE;KHITAN SMALL SCRIPT CHARACTER-18BAE;Lo;0;L;;;;;N;;;;; 18BAF;KHITAN SMALL SCRIPT CHARACTER-18BAF;Lo;0;L;;;;;N;;;;; 18BB0;KHITAN SMALL SCRIPT CHARACTER-18BB0;Lo;0;L;;;;;N;;;;; 18BB1;KHITAN SMALL SCRIPT CHARACTER-18BB1;Lo;0;L;;;;;N;;;;; 18BB2;KHITAN SMALL SCRIPT CHARACTER-18BB2;Lo;0;L;;;;;N;;;;; 18BB3;KHITAN SMALL SCRIPT CHARACTER-18BB3;Lo;0;L;;;;;N;;;;; 18BB4;KHITAN SMALL SCRIPT CHARACTER-18BB4;Lo;0;L;;;;;N;;;;; 18BB5;KHITAN SMALL SCRIPT CHARACTER-18BB5;Lo;0;L;;;;;N;;;;; 18BB6;KHITAN SMALL SCRIPT CHARACTER-18BB6;Lo;0;L;;;;;N;;;;; 18BB7;KHITAN SMALL SCRIPT CHARACTER-18BB7;Lo;0;L;;;;;N;;;;; 18BB8;KHITAN SMALL SCRIPT CHARACTER-18BB8;Lo;0;L;;;;;N;;;;; 18BB9;KHITAN SMALL SCRIPT CHARACTER-18BB9;Lo;0;L;;;;;N;;;;; 18BBA;KHITAN SMALL SCRIPT CHARACTER-18BBA;Lo;0;L;;;;;N;;;;; 18BBB;KHITAN SMALL SCRIPT CHARACTER-18BBB;Lo;0;L;;;;;N;;;;; 18BBC;KHITAN SMALL SCRIPT CHARACTER-18BBC;Lo;0;L;;;;;N;;;;; 18BBD;KHITAN SMALL SCRIPT CHARACTER-18BBD;Lo;0;L;;;;;N;;;;; 18BBE;KHITAN SMALL SCRIPT CHARACTER-18BBE;Lo;0;L;;;;;N;;;;; 18BBF;KHITAN SMALL SCRIPT CHARACTER-18BBF;Lo;0;L;;;;;N;;;;; 18BC0;KHITAN SMALL SCRIPT CHARACTER-18BC0;Lo;0;L;;;;;N;;;;; 18BC1;KHITAN SMALL SCRIPT CHARACTER-18BC1;Lo;0;L;;;;;N;;;;; 18BC2;KHITAN SMALL SCRIPT CHARACTER-18BC2;Lo;0;L;;;;;N;;;;; 18BC3;KHITAN SMALL SCRIPT CHARACTER-18BC3;Lo;0;L;;;;;N;;;;; 18BC4;KHITAN SMALL SCRIPT CHARACTER-18BC4;Lo;0;L;;;;;N;;;;; 18BC5;KHITAN SMALL SCRIPT CHARACTER-18BC5;Lo;0;L;;;;;N;;;;; 18BC6;KHITAN SMALL SCRIPT CHARACTER-18BC6;Lo;0;L;;;;;N;;;;; 18BC7;KHITAN SMALL SCRIPT CHARACTER-18BC7;Lo;0;L;;;;;N;;;;; 18BC8;KHITAN SMALL SCRIPT CHARACTER-18BC8;Lo;0;L;;;;;N;;;;; 18BC9;KHITAN SMALL SCRIPT CHARACTER-18BC9;Lo;0;L;;;;;N;;;;; 18BCA;KHITAN SMALL SCRIPT CHARACTER-18BCA;Lo;0;L;;;;;N;;;;; 18BCB;KHITAN SMALL SCRIPT CHARACTER-18BCB;Lo;0;L;;;;;N;;;;; 18BCC;KHITAN SMALL SCRIPT CHARACTER-18BCC;Lo;0;L;;;;;N;;;;; 18BCD;KHITAN SMALL SCRIPT CHARACTER-18BCD;Lo;0;L;;;;;N;;;;; 18BCE;KHITAN SMALL SCRIPT CHARACTER-18BCE;Lo;0;L;;;;;N;;;;; 18BCF;KHITAN SMALL SCRIPT CHARACTER-18BCF;Lo;0;L;;;;;N;;;;; 18BD0;KHITAN SMALL SCRIPT CHARACTER-18BD0;Lo;0;L;;;;;N;;;;; 18BD1;KHITAN SMALL SCRIPT CHARACTER-18BD1;Lo;0;L;;;;;N;;;;; 18BD2;KHITAN SMALL SCRIPT CHARACTER-18BD2;Lo;0;L;;;;;N;;;;; 18BD3;KHITAN SMALL SCRIPT CHARACTER-18BD3;Lo;0;L;;;;;N;;;;; 18BD4;KHITAN SMALL SCRIPT CHARACTER-18BD4;Lo;0;L;;;;;N;;;;; 18BD5;KHITAN SMALL SCRIPT CHARACTER-18BD5;Lo;0;L;;;;;N;;;;; 18BD6;KHITAN SMALL SCRIPT CHARACTER-18BD6;Lo;0;L;;;;;N;;;;; 18BD7;KHITAN SMALL SCRIPT CHARACTER-18BD7;Lo;0;L;;;;;N;;;;; 18BD8;KHITAN SMALL SCRIPT CHARACTER-18BD8;Lo;0;L;;;;;N;;;;; 18BD9;KHITAN SMALL SCRIPT CHARACTER-18BD9;Lo;0;L;;;;;N;;;;; 18BDA;KHITAN SMALL SCRIPT CHARACTER-18BDA;Lo;0;L;;;;;N;;;;; 18BDB;KHITAN SMALL SCRIPT CHARACTER-18BDB;Lo;0;L;;;;;N;;;;; 18BDC;KHITAN SMALL SCRIPT CHARACTER-18BDC;Lo;0;L;;;;;N;;;;; 18BDD;KHITAN SMALL SCRIPT CHARACTER-18BDD;Lo;0;L;;;;;N;;;;; 18BDE;KHITAN SMALL SCRIPT CHARACTER-18BDE;Lo;0;L;;;;;N;;;;; 18BDF;KHITAN SMALL SCRIPT CHARACTER-18BDF;Lo;0;L;;;;;N;;;;; 18BE0;KHITAN SMALL SCRIPT CHARACTER-18BE0;Lo;0;L;;;;;N;;;;; 18BE1;KHITAN SMALL SCRIPT CHARACTER-18BE1;Lo;0;L;;;;;N;;;;; 18BE2;KHITAN SMALL SCRIPT CHARACTER-18BE2;Lo;0;L;;;;;N;;;;; 18BE3;KHITAN SMALL SCRIPT CHARACTER-18BE3;Lo;0;L;;;;;N;;;;; 18BE4;KHITAN SMALL SCRIPT CHARACTER-18BE4;Lo;0;L;;;;;N;;;;; 18BE5;KHITAN SMALL SCRIPT CHARACTER-18BE5;Lo;0;L;;;;;N;;;;; 18BE6;KHITAN SMALL SCRIPT CHARACTER-18BE6;Lo;0;L;;;;;N;;;;; 18BE7;KHITAN SMALL SCRIPT CHARACTER-18BE7;Lo;0;L;;;;;N;;;;; 18BE8;KHITAN SMALL SCRIPT CHARACTER-18BE8;Lo;0;L;;;;;N;;;;; 18BE9;KHITAN SMALL SCRIPT CHARACTER-18BE9;Lo;0;L;;;;;N;;;;; 18BEA;KHITAN SMALL SCRIPT CHARACTER-18BEA;Lo;0;L;;;;;N;;;;; 18BEB;KHITAN SMALL SCRIPT CHARACTER-18BEB;Lo;0;L;;;;;N;;;;; 18BEC;KHITAN SMALL SCRIPT CHARACTER-18BEC;Lo;0;L;;;;;N;;;;; 18BED;KHITAN SMALL SCRIPT CHARACTER-18BED;Lo;0;L;;;;;N;;;;; 18BEE;KHITAN SMALL SCRIPT CHARACTER-18BEE;Lo;0;L;;;;;N;;;;; 18BEF;KHITAN SMALL SCRIPT CHARACTER-18BEF;Lo;0;L;;;;;N;;;;; 18BF0;KHITAN SMALL SCRIPT CHARACTER-18BF0;Lo;0;L;;;;;N;;;;; 18BF1;KHITAN SMALL SCRIPT CHARACTER-18BF1;Lo;0;L;;;;;N;;;;; 18BF2;KHITAN SMALL SCRIPT CHARACTER-18BF2;Lo;0;L;;;;;N;;;;; 18BF3;KHITAN SMALL SCRIPT CHARACTER-18BF3;Lo;0;L;;;;;N;;;;; 18BF4;KHITAN SMALL SCRIPT CHARACTER-18BF4;Lo;0;L;;;;;N;;;;; 18BF5;KHITAN SMALL SCRIPT CHARACTER-18BF5;Lo;0;L;;;;;N;;;;; 18BF6;KHITAN SMALL SCRIPT CHARACTER-18BF6;Lo;0;L;;;;;N;;;;; 18BF7;KHITAN SMALL SCRIPT CHARACTER-18BF7;Lo;0;L;;;;;N;;;;; 18BF8;KHITAN SMALL SCRIPT CHARACTER-18BF8;Lo;0;L;;;;;N;;;;; 18BF9;KHITAN SMALL SCRIPT CHARACTER-18BF9;Lo;0;L;;;;;N;;;;; 18BFA;KHITAN SMALL SCRIPT CHARACTER-18BFA;Lo;0;L;;;;;N;;;;; 18BFB;KHITAN SMALL SCRIPT CHARACTER-18BFB;Lo;0;L;;;;;N;;;;; 18BFC;KHITAN SMALL SCRIPT CHARACTER-18BFC;Lo;0;L;;;;;N;;;;; 18BFD;KHITAN SMALL SCRIPT CHARACTER-18BFD;Lo;0;L;;;;;N;;;;; 18BFE;KHITAN SMALL SCRIPT CHARACTER-18BFE;Lo;0;L;;;;;N;;;;; 18BFF;KHITAN SMALL SCRIPT CHARACTER-18BFF;Lo;0;L;;;;;N;;;;; 18C00;KHITAN SMALL SCRIPT CHARACTER-18C00;Lo;0;L;;;;;N;;;;; 18C01;KHITAN SMALL SCRIPT CHARACTER-18C01;Lo;0;L;;;;;N;;;;; 18C02;KHITAN SMALL SCRIPT CHARACTER-18C02;Lo;0;L;;;;;N;;;;; 18C03;KHITAN SMALL SCRIPT CHARACTER-18C03;Lo;0;L;;;;;N;;;;; 18C04;KHITAN SMALL SCRIPT CHARACTER-18C04;Lo;0;L;;;;;N;;;;; 18C05;KHITAN SMALL SCRIPT CHARACTER-18C05;Lo;0;L;;;;;N;;;;; 18C06;KHITAN SMALL SCRIPT CHARACTER-18C06;Lo;0;L;;;;;N;;;;; 18C07;KHITAN SMALL SCRIPT CHARACTER-18C07;Lo;0;L;;;;;N;;;;; 18C08;KHITAN SMALL SCRIPT CHARACTER-18C08;Lo;0;L;;;;;N;;;;; 18C09;KHITAN SMALL SCRIPT CHARACTER-18C09;Lo;0;L;;;;;N;;;;; 18C0A;KHITAN SMALL SCRIPT CHARACTER-18C0A;Lo;0;L;;;;;N;;;;; 18C0B;KHITAN SMALL SCRIPT CHARACTER-18C0B;Lo;0;L;;;;;N;;;;; 18C0C;KHITAN SMALL SCRIPT CHARACTER-18C0C;Lo;0;L;;;;;N;;;;; 18C0D;KHITAN SMALL SCRIPT CHARACTER-18C0D;Lo;0;L;;;;;N;;;;; 18C0E;KHITAN SMALL SCRIPT CHARACTER-18C0E;Lo;0;L;;;;;N;;;;; 18C0F;KHITAN SMALL SCRIPT CHARACTER-18C0F;Lo;0;L;;;;;N;;;;; 18C10;KHITAN SMALL SCRIPT CHARACTER-18C10;Lo;0;L;;;;;N;;;;; 18C11;KHITAN SMALL SCRIPT CHARACTER-18C11;Lo;0;L;;;;;N;;;;; 18C12;KHITAN SMALL SCRIPT CHARACTER-18C12;Lo;0;L;;;;;N;;;;; 18C13;KHITAN SMALL SCRIPT CHARACTER-18C13;Lo;0;L;;;;;N;;;;; 18C14;KHITAN SMALL SCRIPT CHARACTER-18C14;Lo;0;L;;;;;N;;;;; 18C15;KHITAN SMALL SCRIPT CHARACTER-18C15;Lo;0;L;;;;;N;;;;; 18C16;KHITAN SMALL SCRIPT CHARACTER-18C16;Lo;0;L;;;;;N;;;;; 18C17;KHITAN SMALL SCRIPT CHARACTER-18C17;Lo;0;L;;;;;N;;;;; 18C18;KHITAN SMALL SCRIPT CHARACTER-18C18;Lo;0;L;;;;;N;;;;; 18C19;KHITAN SMALL SCRIPT CHARACTER-18C19;Lo;0;L;;;;;N;;;;; 18C1A;KHITAN SMALL SCRIPT CHARACTER-18C1A;Lo;0;L;;;;;N;;;;; 18C1B;KHITAN SMALL SCRIPT CHARACTER-18C1B;Lo;0;L;;;;;N;;;;; 18C1C;KHITAN SMALL SCRIPT CHARACTER-18C1C;Lo;0;L;;;;;N;;;;; 18C1D;KHITAN SMALL SCRIPT CHARACTER-18C1D;Lo;0;L;;;;;N;;;;; 18C1E;KHITAN SMALL SCRIPT CHARACTER-18C1E;Lo;0;L;;;;;N;;;;; 18C1F;KHITAN SMALL SCRIPT CHARACTER-18C1F;Lo;0;L;;;;;N;;;;; 18C20;KHITAN SMALL SCRIPT CHARACTER-18C20;Lo;0;L;;;;;N;;;;; 18C21;KHITAN SMALL SCRIPT CHARACTER-18C21;Lo;0;L;;;;;N;;;;; 18C22;KHITAN SMALL SCRIPT CHARACTER-18C22;Lo;0;L;;;;;N;;;;; 18C23;KHITAN SMALL SCRIPT CHARACTER-18C23;Lo;0;L;;;;;N;;;;; 18C24;KHITAN SMALL SCRIPT CHARACTER-18C24;Lo;0;L;;;;;N;;;;; 18C25;KHITAN SMALL SCRIPT CHARACTER-18C25;Lo;0;L;;;;;N;;;;; 18C26;KHITAN SMALL SCRIPT CHARACTER-18C26;Lo;0;L;;;;;N;;;;; 18C27;KHITAN SMALL SCRIPT CHARACTER-18C27;Lo;0;L;;;;;N;;;;; 18C28;KHITAN SMALL SCRIPT CHARACTER-18C28;Lo;0;L;;;;;N;;;;; 18C29;KHITAN SMALL SCRIPT CHARACTER-18C29;Lo;0;L;;;;;N;;;;; 18C2A;KHITAN SMALL SCRIPT CHARACTER-18C2A;Lo;0;L;;;;;N;;;;; 18C2B;KHITAN SMALL SCRIPT CHARACTER-18C2B;Lo;0;L;;;;;N;;;;; 18C2C;KHITAN SMALL SCRIPT CHARACTER-18C2C;Lo;0;L;;;;;N;;;;; 18C2D;KHITAN SMALL SCRIPT CHARACTER-18C2D;Lo;0;L;;;;;N;;;;; 18C2E;KHITAN SMALL SCRIPT CHARACTER-18C2E;Lo;0;L;;;;;N;;;;; 18C2F;KHITAN SMALL SCRIPT CHARACTER-18C2F;Lo;0;L;;;;;N;;;;; 18C30;KHITAN SMALL SCRIPT CHARACTER-18C30;Lo;0;L;;;;;N;;;;; 18C31;KHITAN SMALL SCRIPT CHARACTER-18C31;Lo;0;L;;;;;N;;;;; 18C32;KHITAN SMALL SCRIPT CHARACTER-18C32;Lo;0;L;;;;;N;;;;; 18C33;KHITAN SMALL SCRIPT CHARACTER-18C33;Lo;0;L;;;;;N;;;;; 18C34;KHITAN SMALL SCRIPT CHARACTER-18C34;Lo;0;L;;;;;N;;;;; 18C35;KHITAN SMALL SCRIPT CHARACTER-18C35;Lo;0;L;;;;;N;;;;; 18C36;KHITAN SMALL SCRIPT CHARACTER-18C36;Lo;0;L;;;;;N;;;;; 18C37;KHITAN SMALL SCRIPT CHARACTER-18C37;Lo;0;L;;;;;N;;;;; 18C38;KHITAN SMALL SCRIPT CHARACTER-18C38;Lo;0;L;;;;;N;;;;; 18C39;KHITAN SMALL SCRIPT CHARACTER-18C39;Lo;0;L;;;;;N;;;;; 18C3A;KHITAN SMALL SCRIPT CHARACTER-18C3A;Lo;0;L;;;;;N;;;;; 18C3B;KHITAN SMALL SCRIPT CHARACTER-18C3B;Lo;0;L;;;;;N;;;;; 18C3C;KHITAN SMALL SCRIPT CHARACTER-18C3C;Lo;0;L;;;;;N;;;;; 18C3D;KHITAN SMALL SCRIPT CHARACTER-18C3D;Lo;0;L;;;;;N;;;;; 18C3E;KHITAN SMALL SCRIPT CHARACTER-18C3E;Lo;0;L;;;;;N;;;;; 18C3F;KHITAN SMALL SCRIPT CHARACTER-18C3F;Lo;0;L;;;;;N;;;;; 18C40;KHITAN SMALL SCRIPT CHARACTER-18C40;Lo;0;L;;;;;N;;;;; 18C41;KHITAN SMALL SCRIPT CHARACTER-18C41;Lo;0;L;;;;;N;;;;; 18C42;KHITAN SMALL SCRIPT CHARACTER-18C42;Lo;0;L;;;;;N;;;;; 18C43;KHITAN SMALL SCRIPT CHARACTER-18C43;Lo;0;L;;;;;N;;;;; 18C44;KHITAN SMALL SCRIPT CHARACTER-18C44;Lo;0;L;;;;;N;;;;; 18C45;KHITAN SMALL SCRIPT CHARACTER-18C45;Lo;0;L;;;;;N;;;;; 18C46;KHITAN SMALL SCRIPT CHARACTER-18C46;Lo;0;L;;;;;N;;;;; 18C47;KHITAN SMALL SCRIPT CHARACTER-18C47;Lo;0;L;;;;;N;;;;; 18C48;KHITAN SMALL SCRIPT CHARACTER-18C48;Lo;0;L;;;;;N;;;;; 18C49;KHITAN SMALL SCRIPT CHARACTER-18C49;Lo;0;L;;;;;N;;;;; 18C4A;KHITAN SMALL SCRIPT CHARACTER-18C4A;Lo;0;L;;;;;N;;;;; 18C4B;KHITAN SMALL SCRIPT CHARACTER-18C4B;Lo;0;L;;;;;N;;;;; 18C4C;KHITAN SMALL SCRIPT CHARACTER-18C4C;Lo;0;L;;;;;N;;;;; 18C4D;KHITAN SMALL SCRIPT CHARACTER-18C4D;Lo;0;L;;;;;N;;;;; 18C4E;KHITAN SMALL SCRIPT CHARACTER-18C4E;Lo;0;L;;;;;N;;;;; 18C4F;KHITAN SMALL SCRIPT CHARACTER-18C4F;Lo;0;L;;;;;N;;;;; 18C50;KHITAN SMALL SCRIPT CHARACTER-18C50;Lo;0;L;;;;;N;;;;; 18C51;KHITAN SMALL SCRIPT CHARACTER-18C51;Lo;0;L;;;;;N;;;;; 18C52;KHITAN SMALL SCRIPT CHARACTER-18C52;Lo;0;L;;;;;N;;;;; 18C53;KHITAN SMALL SCRIPT CHARACTER-18C53;Lo;0;L;;;;;N;;;;; 18C54;KHITAN SMALL SCRIPT CHARACTER-18C54;Lo;0;L;;;;;N;;;;; 18C55;KHITAN SMALL SCRIPT CHARACTER-18C55;Lo;0;L;;;;;N;;;;; 18C56;KHITAN SMALL SCRIPT CHARACTER-18C56;Lo;0;L;;;;;N;;;;; 18C57;KHITAN SMALL SCRIPT CHARACTER-18C57;Lo;0;L;;;;;N;;;;; 18C58;KHITAN SMALL SCRIPT CHARACTER-18C58;Lo;0;L;;;;;N;;;;; 18C59;KHITAN SMALL SCRIPT CHARACTER-18C59;Lo;0;L;;;;;N;;;;; 18C5A;KHITAN SMALL SCRIPT CHARACTER-18C5A;Lo;0;L;;;;;N;;;;; 18C5B;KHITAN SMALL SCRIPT CHARACTER-18C5B;Lo;0;L;;;;;N;;;;; 18C5C;KHITAN SMALL SCRIPT CHARACTER-18C5C;Lo;0;L;;;;;N;;;;; 18C5D;KHITAN SMALL SCRIPT CHARACTER-18C5D;Lo;0;L;;;;;N;;;;; 18C5E;KHITAN SMALL SCRIPT CHARACTER-18C5E;Lo;0;L;;;;;N;;;;; 18C5F;KHITAN SMALL SCRIPT CHARACTER-18C5F;Lo;0;L;;;;;N;;;;; 18C60;KHITAN SMALL SCRIPT CHARACTER-18C60;Lo;0;L;;;;;N;;;;; 18C61;KHITAN SMALL SCRIPT CHARACTER-18C61;Lo;0;L;;;;;N;;;;; 18C62;KHITAN SMALL SCRIPT CHARACTER-18C62;Lo;0;L;;;;;N;;;;; 18C63;KHITAN SMALL SCRIPT CHARACTER-18C63;Lo;0;L;;;;;N;;;;; 18C64;KHITAN SMALL SCRIPT CHARACTER-18C64;Lo;0;L;;;;;N;;;;; 18C65;KHITAN SMALL SCRIPT CHARACTER-18C65;Lo;0;L;;;;;N;;;;; 18C66;KHITAN SMALL SCRIPT CHARACTER-18C66;Lo;0;L;;;;;N;;;;; 18C67;KHITAN SMALL SCRIPT CHARACTER-18C67;Lo;0;L;;;;;N;;;;; 18C68;KHITAN SMALL SCRIPT CHARACTER-18C68;Lo;0;L;;;;;N;;;;; 18C69;KHITAN SMALL SCRIPT CHARACTER-18C69;Lo;0;L;;;;;N;;;;; 18C6A;KHITAN SMALL SCRIPT CHARACTER-18C6A;Lo;0;L;;;;;N;;;;; 18C6B;KHITAN SMALL SCRIPT CHARACTER-18C6B;Lo;0;L;;;;;N;;;;; 18C6C;KHITAN SMALL SCRIPT CHARACTER-18C6C;Lo;0;L;;;;;N;;;;; 18C6D;KHITAN SMALL SCRIPT CHARACTER-18C6D;Lo;0;L;;;;;N;;;;; 18C6E;KHITAN SMALL SCRIPT CHARACTER-18C6E;Lo;0;L;;;;;N;;;;; 18C6F;KHITAN SMALL SCRIPT CHARACTER-18C6F;Lo;0;L;;;;;N;;;;; 18C70;KHITAN SMALL SCRIPT CHARACTER-18C70;Lo;0;L;;;;;N;;;;; 18C71;KHITAN SMALL SCRIPT CHARACTER-18C71;Lo;0;L;;;;;N;;;;; 18C72;KHITAN SMALL SCRIPT CHARACTER-18C72;Lo;0;L;;;;;N;;;;; 18C73;KHITAN SMALL SCRIPT CHARACTER-18C73;Lo;0;L;;;;;N;;;;; 18C74;KHITAN SMALL SCRIPT CHARACTER-18C74;Lo;0;L;;;;;N;;;;; 18C75;KHITAN SMALL SCRIPT CHARACTER-18C75;Lo;0;L;;;;;N;;;;; 18C76;KHITAN SMALL SCRIPT CHARACTER-18C76;Lo;0;L;;;;;N;;;;; 18C77;KHITAN SMALL SCRIPT CHARACTER-18C77;Lo;0;L;;;;;N;;;;; 18C78;KHITAN SMALL SCRIPT CHARACTER-18C78;Lo;0;L;;;;;N;;;;; 18C79;KHITAN SMALL SCRIPT CHARACTER-18C79;Lo;0;L;;;;;N;;;;; 18C7A;KHITAN SMALL SCRIPT CHARACTER-18C7A;Lo;0;L;;;;;N;;;;; 18C7B;KHITAN SMALL SCRIPT CHARACTER-18C7B;Lo;0;L;;;;;N;;;;; 18C7C;KHITAN SMALL SCRIPT CHARACTER-18C7C;Lo;0;L;;;;;N;;;;; 18C7D;KHITAN SMALL SCRIPT CHARACTER-18C7D;Lo;0;L;;;;;N;;;;; 18C7E;KHITAN SMALL SCRIPT CHARACTER-18C7E;Lo;0;L;;;;;N;;;;; 18C7F;KHITAN SMALL SCRIPT CHARACTER-18C7F;Lo;0;L;;;;;N;;;;; 18C80;KHITAN SMALL SCRIPT CHARACTER-18C80;Lo;0;L;;;;;N;;;;; 18C81;KHITAN SMALL SCRIPT CHARACTER-18C81;Lo;0;L;;;;;N;;;;; 18C82;KHITAN SMALL SCRIPT CHARACTER-18C82;Lo;0;L;;;;;N;;;;; 18C83;KHITAN SMALL SCRIPT CHARACTER-18C83;Lo;0;L;;;;;N;;;;; 18C84;KHITAN SMALL SCRIPT CHARACTER-18C84;Lo;0;L;;;;;N;;;;; 18C85;KHITAN SMALL SCRIPT CHARACTER-18C85;Lo;0;L;;;;;N;;;;; 18C86;KHITAN SMALL SCRIPT CHARACTER-18C86;Lo;0;L;;;;;N;;;;; 18C87;KHITAN SMALL SCRIPT CHARACTER-18C87;Lo;0;L;;;;;N;;;;; 18C88;KHITAN SMALL SCRIPT CHARACTER-18C88;Lo;0;L;;;;;N;;;;; 18C89;KHITAN SMALL SCRIPT CHARACTER-18C89;Lo;0;L;;;;;N;;;;; 18C8A;KHITAN SMALL SCRIPT CHARACTER-18C8A;Lo;0;L;;;;;N;;;;; 18C8B;KHITAN SMALL SCRIPT CHARACTER-18C8B;Lo;0;L;;;;;N;;;;; 18C8C;KHITAN SMALL SCRIPT CHARACTER-18C8C;Lo;0;L;;;;;N;;;;; 18C8D;KHITAN SMALL SCRIPT CHARACTER-18C8D;Lo;0;L;;;;;N;;;;; 18C8E;KHITAN SMALL SCRIPT CHARACTER-18C8E;Lo;0;L;;;;;N;;;;; 18C8F;KHITAN SMALL SCRIPT CHARACTER-18C8F;Lo;0;L;;;;;N;;;;; 18C90;KHITAN SMALL SCRIPT CHARACTER-18C90;Lo;0;L;;;;;N;;;;; 18C91;KHITAN SMALL SCRIPT CHARACTER-18C91;Lo;0;L;;;;;N;;;;; 18C92;KHITAN SMALL SCRIPT CHARACTER-18C92;Lo;0;L;;;;;N;;;;; 18C93;KHITAN SMALL SCRIPT CHARACTER-18C93;Lo;0;L;;;;;N;;;;; 18C94;KHITAN SMALL SCRIPT CHARACTER-18C94;Lo;0;L;;;;;N;;;;; 18C95;KHITAN SMALL SCRIPT CHARACTER-18C95;Lo;0;L;;;;;N;;;;; 18C96;KHITAN SMALL SCRIPT CHARACTER-18C96;Lo;0;L;;;;;N;;;;; 18C97;KHITAN SMALL SCRIPT CHARACTER-18C97;Lo;0;L;;;;;N;;;;; 18C98;KHITAN SMALL SCRIPT CHARACTER-18C98;Lo;0;L;;;;;N;;;;; 18C99;KHITAN SMALL SCRIPT CHARACTER-18C99;Lo;0;L;;;;;N;;;;; 18C9A;KHITAN SMALL SCRIPT CHARACTER-18C9A;Lo;0;L;;;;;N;;;;; 18C9B;KHITAN SMALL SCRIPT CHARACTER-18C9B;Lo;0;L;;;;;N;;;;; 18C9C;KHITAN SMALL SCRIPT CHARACTER-18C9C;Lo;0;L;;;;;N;;;;; 18C9D;KHITAN SMALL SCRIPT CHARACTER-18C9D;Lo;0;L;;;;;N;;;;; 18C9E;KHITAN SMALL SCRIPT CHARACTER-18C9E;Lo;0;L;;;;;N;;;;; 18C9F;KHITAN SMALL SCRIPT CHARACTER-18C9F;Lo;0;L;;;;;N;;;;; 18CA0;KHITAN SMALL SCRIPT CHARACTER-18CA0;Lo;0;L;;;;;N;;;;; 18CA1;KHITAN SMALL SCRIPT CHARACTER-18CA1;Lo;0;L;;;;;N;;;;; 18CA2;KHITAN SMALL SCRIPT CHARACTER-18CA2;Lo;0;L;;;;;N;;;;; 18CA3;KHITAN SMALL SCRIPT CHARACTER-18CA3;Lo;0;L;;;;;N;;;;; 18CA4;KHITAN SMALL SCRIPT CHARACTER-18CA4;Lo;0;L;;;;;N;;;;; 18CA5;KHITAN SMALL SCRIPT CHARACTER-18CA5;Lo;0;L;;;;;N;;;;; 18CA6;KHITAN SMALL SCRIPT CHARACTER-18CA6;Lo;0;L;;;;;N;;;;; 18CA7;KHITAN SMALL SCRIPT CHARACTER-18CA7;Lo;0;L;;;;;N;;;;; 18CA8;KHITAN SMALL SCRIPT CHARACTER-18CA8;Lo;0;L;;;;;N;;;;; 18CA9;KHITAN SMALL SCRIPT CHARACTER-18CA9;Lo;0;L;;;;;N;;;;; 18CAA;KHITAN SMALL SCRIPT CHARACTER-18CAA;Lo;0;L;;;;;N;;;;; 18CAB;KHITAN SMALL SCRIPT CHARACTER-18CAB;Lo;0;L;;;;;N;;;;; 18CAC;KHITAN SMALL SCRIPT CHARACTER-18CAC;Lo;0;L;;;;;N;;;;; 18CAD;KHITAN SMALL SCRIPT CHARACTER-18CAD;Lo;0;L;;;;;N;;;;; 18CAE;KHITAN SMALL SCRIPT CHARACTER-18CAE;Lo;0;L;;;;;N;;;;; 18CAF;KHITAN SMALL SCRIPT CHARACTER-18CAF;Lo;0;L;;;;;N;;;;; 18CB0;KHITAN SMALL SCRIPT CHARACTER-18CB0;Lo;0;L;;;;;N;;;;; 18CB1;KHITAN SMALL SCRIPT CHARACTER-18CB1;Lo;0;L;;;;;N;;;;; 18CB2;KHITAN SMALL SCRIPT CHARACTER-18CB2;Lo;0;L;;;;;N;;;;; 18CB3;KHITAN SMALL SCRIPT CHARACTER-18CB3;Lo;0;L;;;;;N;;;;; 18CB4;KHITAN SMALL SCRIPT CHARACTER-18CB4;Lo;0;L;;;;;N;;;;; 18CB5;KHITAN SMALL SCRIPT CHARACTER-18CB5;Lo;0;L;;;;;N;;;;; 18CB6;KHITAN SMALL SCRIPT CHARACTER-18CB6;Lo;0;L;;;;;N;;;;; 18CB7;KHITAN SMALL SCRIPT CHARACTER-18CB7;Lo;0;L;;;;;N;;;;; 18CB8;KHITAN SMALL SCRIPT CHARACTER-18CB8;Lo;0;L;;;;;N;;;;; 18CB9;KHITAN SMALL SCRIPT CHARACTER-18CB9;Lo;0;L;;;;;N;;;;; 18CBA;KHITAN SMALL SCRIPT CHARACTER-18CBA;Lo;0;L;;;;;N;;;;; 18CBB;KHITAN SMALL SCRIPT CHARACTER-18CBB;Lo;0;L;;;;;N;;;;; 18CBC;KHITAN SMALL SCRIPT CHARACTER-18CBC;Lo;0;L;;;;;N;;;;; 18CBD;KHITAN SMALL SCRIPT CHARACTER-18CBD;Lo;0;L;;;;;N;;;;; 18CBE;KHITAN SMALL SCRIPT CHARACTER-18CBE;Lo;0;L;;;;;N;;;;; 18CBF;KHITAN SMALL SCRIPT CHARACTER-18CBF;Lo;0;L;;;;;N;;;;; 18CC0;KHITAN SMALL SCRIPT CHARACTER-18CC0;Lo;0;L;;;;;N;;;;; 18CC1;KHITAN SMALL SCRIPT CHARACTER-18CC1;Lo;0;L;;;;;N;;;;; 18CC2;KHITAN SMALL SCRIPT CHARACTER-18CC2;Lo;0;L;;;;;N;;;;; 18CC3;KHITAN SMALL SCRIPT CHARACTER-18CC3;Lo;0;L;;;;;N;;;;; 18CC4;KHITAN SMALL SCRIPT CHARACTER-18CC4;Lo;0;L;;;;;N;;;;; 18CC5;KHITAN SMALL SCRIPT CHARACTER-18CC5;Lo;0;L;;;;;N;;;;; 18CC6;KHITAN SMALL SCRIPT CHARACTER-18CC6;Lo;0;L;;;;;N;;;;; 18CC7;KHITAN SMALL SCRIPT CHARACTER-18CC7;Lo;0;L;;;;;N;;;;; 18CC8;KHITAN SMALL SCRIPT CHARACTER-18CC8;Lo;0;L;;;;;N;;;;; 18CC9;KHITAN SMALL SCRIPT CHARACTER-18CC9;Lo;0;L;;;;;N;;;;; 18CCA;KHITAN SMALL SCRIPT CHARACTER-18CCA;Lo;0;L;;;;;N;;;;; 18CCB;KHITAN SMALL SCRIPT CHARACTER-18CCB;Lo;0;L;;;;;N;;;;; 18CCC;KHITAN SMALL SCRIPT CHARACTER-18CCC;Lo;0;L;;;;;N;;;;; 18CCD;KHITAN SMALL SCRIPT CHARACTER-18CCD;Lo;0;L;;;;;N;;;;; 18CCE;KHITAN SMALL SCRIPT CHARACTER-18CCE;Lo;0;L;;;;;N;;;;; 18CCF;KHITAN SMALL SCRIPT CHARACTER-18CCF;Lo;0;L;;;;;N;;;;; 18CD0;KHITAN SMALL SCRIPT CHARACTER-18CD0;Lo;0;L;;;;;N;;;;; 18CD1;KHITAN SMALL SCRIPT CHARACTER-18CD1;Lo;0;L;;;;;N;;;;; 18CD2;KHITAN SMALL SCRIPT CHARACTER-18CD2;Lo;0;L;;;;;N;;;;; 18CD3;KHITAN SMALL SCRIPT CHARACTER-18CD3;Lo;0;L;;;;;N;;;;; 18CD4;KHITAN SMALL SCRIPT CHARACTER-18CD4;Lo;0;L;;;;;N;;;;; 18CD5;KHITAN SMALL SCRIPT CHARACTER-18CD5;Lo;0;L;;;;;N;;;;; 18D00;;Lo;0;L;;;;;N;;;;; 18D08;;Lo;0;L;;;;;N;;;;; 1AFF0;KATAKANA LETTER MINNAN TONE-2;Lm;0;L;;;;;N;;;;; 1AFF1;KATAKANA LETTER MINNAN TONE-3;Lm;0;L;;;;;N;;;;; 1AFF2;KATAKANA LETTER MINNAN TONE-4;Lm;0;L;;;;;N;;;;; 1AFF3;KATAKANA LETTER MINNAN TONE-5;Lm;0;L;;;;;N;;;;; 1AFF5;KATAKANA LETTER MINNAN TONE-7;Lm;0;L;;;;;N;;;;; 1AFF6;KATAKANA LETTER MINNAN TONE-8;Lm;0;L;;;;;N;;;;; 1AFF7;KATAKANA LETTER MINNAN NASALIZED TONE-1;Lm;0;L;;;;;N;;;;; 1AFF8;KATAKANA LETTER MINNAN NASALIZED TONE-2;Lm;0;L;;;;;N;;;;; 1AFF9;KATAKANA LETTER MINNAN NASALIZED TONE-3;Lm;0;L;;;;;N;;;;; 1AFFA;KATAKANA LETTER MINNAN NASALIZED TONE-4;Lm;0;L;;;;;N;;;;; 1AFFB;KATAKANA LETTER MINNAN NASALIZED TONE-5;Lm;0;L;;;;;N;;;;; 1AFFD;KATAKANA LETTER MINNAN NASALIZED TONE-7;Lm;0;L;;;;;N;;;;; 1AFFE;KATAKANA LETTER MINNAN NASALIZED TONE-8;Lm;0;L;;;;;N;;;;; 1B000;KATAKANA LETTER ARCHAIC E;Lo;0;L;;;;;N;;;;; 1B001;HIRAGANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;; 1B002;HENTAIGANA LETTER A-1;Lo;0;L;;;;;N;;;;; 1B003;HENTAIGANA LETTER A-2;Lo;0;L;;;;;N;;;;; 1B004;HENTAIGANA LETTER A-3;Lo;0;L;;;;;N;;;;; 1B005;HENTAIGANA LETTER A-WO;Lo;0;L;;;;;N;;;;; 1B006;HENTAIGANA LETTER I-1;Lo;0;L;;;;;N;;;;; 1B007;HENTAIGANA LETTER I-2;Lo;0;L;;;;;N;;;;; 1B008;HENTAIGANA LETTER I-3;Lo;0;L;;;;;N;;;;; 1B009;HENTAIGANA LETTER I-4;Lo;0;L;;;;;N;;;;; 1B00A;HENTAIGANA LETTER U-1;Lo;0;L;;;;;N;;;;; 1B00B;HENTAIGANA LETTER U-2;Lo;0;L;;;;;N;;;;; 1B00C;HENTAIGANA LETTER U-3;Lo;0;L;;;;;N;;;;; 1B00D;HENTAIGANA LETTER U-4;Lo;0;L;;;;;N;;;;; 1B00E;HENTAIGANA LETTER U-5;Lo;0;L;;;;;N;;;;; 1B00F;HENTAIGANA LETTER E-2;Lo;0;L;;;;;N;;;;; 1B010;HENTAIGANA LETTER E-3;Lo;0;L;;;;;N;;;;; 1B011;HENTAIGANA LETTER E-4;Lo;0;L;;;;;N;;;;; 1B012;HENTAIGANA LETTER E-5;Lo;0;L;;;;;N;;;;; 1B013;HENTAIGANA LETTER E-6;Lo;0;L;;;;;N;;;;; 1B014;HENTAIGANA LETTER O-1;Lo;0;L;;;;;N;;;;; 1B015;HENTAIGANA LETTER O-2;Lo;0;L;;;;;N;;;;; 1B016;HENTAIGANA LETTER O-3;Lo;0;L;;;;;N;;;;; 1B017;HENTAIGANA LETTER KA-1;Lo;0;L;;;;;N;;;;; 1B018;HENTAIGANA LETTER KA-2;Lo;0;L;;;;;N;;;;; 1B019;HENTAIGANA LETTER KA-3;Lo;0;L;;;;;N;;;;; 1B01A;HENTAIGANA LETTER KA-4;Lo;0;L;;;;;N;;;;; 1B01B;HENTAIGANA LETTER KA-5;Lo;0;L;;;;;N;;;;; 1B01C;HENTAIGANA LETTER KA-6;Lo;0;L;;;;;N;;;;; 1B01D;HENTAIGANA LETTER KA-7;Lo;0;L;;;;;N;;;;; 1B01E;HENTAIGANA LETTER KA-8;Lo;0;L;;;;;N;;;;; 1B01F;HENTAIGANA LETTER KA-9;Lo;0;L;;;;;N;;;;; 1B020;HENTAIGANA LETTER KA-10;Lo;0;L;;;;;N;;;;; 1B021;HENTAIGANA LETTER KA-11;Lo;0;L;;;;;N;;;;; 1B022;HENTAIGANA LETTER KA-KE;Lo;0;L;;;;;N;;;;; 1B023;HENTAIGANA LETTER KI-1;Lo;0;L;;;;;N;;;;; 1B024;HENTAIGANA LETTER KI-2;Lo;0;L;;;;;N;;;;; 1B025;HENTAIGANA LETTER KI-3;Lo;0;L;;;;;N;;;;; 1B026;HENTAIGANA LETTER KI-4;Lo;0;L;;;;;N;;;;; 1B027;HENTAIGANA LETTER KI-5;Lo;0;L;;;;;N;;;;; 1B028;HENTAIGANA LETTER KI-6;Lo;0;L;;;;;N;;;;; 1B029;HENTAIGANA LETTER KI-7;Lo;0;L;;;;;N;;;;; 1B02A;HENTAIGANA LETTER KI-8;Lo;0;L;;;;;N;;;;; 1B02B;HENTAIGANA LETTER KU-1;Lo;0;L;;;;;N;;;;; 1B02C;HENTAIGANA LETTER KU-2;Lo;0;L;;;;;N;;;;; 1B02D;HENTAIGANA LETTER KU-3;Lo;0;L;;;;;N;;;;; 1B02E;HENTAIGANA LETTER KU-4;Lo;0;L;;;;;N;;;;; 1B02F;HENTAIGANA LETTER KU-5;Lo;0;L;;;;;N;;;;; 1B030;HENTAIGANA LETTER KU-6;Lo;0;L;;;;;N;;;;; 1B031;HENTAIGANA LETTER KU-7;Lo;0;L;;;;;N;;;;; 1B032;HENTAIGANA LETTER KE-1;Lo;0;L;;;;;N;;;;; 1B033;HENTAIGANA LETTER KE-2;Lo;0;L;;;;;N;;;;; 1B034;HENTAIGANA LETTER KE-3;Lo;0;L;;;;;N;;;;; 1B035;HENTAIGANA LETTER KE-4;Lo;0;L;;;;;N;;;;; 1B036;HENTAIGANA LETTER KE-5;Lo;0;L;;;;;N;;;;; 1B037;HENTAIGANA LETTER KE-6;Lo;0;L;;;;;N;;;;; 1B038;HENTAIGANA LETTER KO-1;Lo;0;L;;;;;N;;;;; 1B039;HENTAIGANA LETTER KO-2;Lo;0;L;;;;;N;;;;; 1B03A;HENTAIGANA LETTER KO-3;Lo;0;L;;;;;N;;;;; 1B03B;HENTAIGANA LETTER KO-KI;Lo;0;L;;;;;N;;;;; 1B03C;HENTAIGANA LETTER SA-1;Lo;0;L;;;;;N;;;;; 1B03D;HENTAIGANA LETTER SA-2;Lo;0;L;;;;;N;;;;; 1B03E;HENTAIGANA LETTER SA-3;Lo;0;L;;;;;N;;;;; 1B03F;HENTAIGANA LETTER SA-4;Lo;0;L;;;;;N;;;;; 1B040;HENTAIGANA LETTER SA-5;Lo;0;L;;;;;N;;;;; 1B041;HENTAIGANA LETTER SA-6;Lo;0;L;;;;;N;;;;; 1B042;HENTAIGANA LETTER SA-7;Lo;0;L;;;;;N;;;;; 1B043;HENTAIGANA LETTER SA-8;Lo;0;L;;;;;N;;;;; 1B044;HENTAIGANA LETTER SI-1;Lo;0;L;;;;;N;;;;; 1B045;HENTAIGANA LETTER SI-2;Lo;0;L;;;;;N;;;;; 1B046;HENTAIGANA LETTER SI-3;Lo;0;L;;;;;N;;;;; 1B047;HENTAIGANA LETTER SI-4;Lo;0;L;;;;;N;;;;; 1B048;HENTAIGANA LETTER SI-5;Lo;0;L;;;;;N;;;;; 1B049;HENTAIGANA LETTER SI-6;Lo;0;L;;;;;N;;;;; 1B04A;HENTAIGANA LETTER SU-1;Lo;0;L;;;;;N;;;;; 1B04B;HENTAIGANA LETTER SU-2;Lo;0;L;;;;;N;;;;; 1B04C;HENTAIGANA LETTER SU-3;Lo;0;L;;;;;N;;;;; 1B04D;HENTAIGANA LETTER SU-4;Lo;0;L;;;;;N;;;;; 1B04E;HENTAIGANA LETTER SU-5;Lo;0;L;;;;;N;;;;; 1B04F;HENTAIGANA LETTER SU-6;Lo;0;L;;;;;N;;;;; 1B050;HENTAIGANA LETTER SU-7;Lo;0;L;;;;;N;;;;; 1B051;HENTAIGANA LETTER SU-8;Lo;0;L;;;;;N;;;;; 1B052;HENTAIGANA LETTER SE-1;Lo;0;L;;;;;N;;;;; 1B053;HENTAIGANA LETTER SE-2;Lo;0;L;;;;;N;;;;; 1B054;HENTAIGANA LETTER SE-3;Lo;0;L;;;;;N;;;;; 1B055;HENTAIGANA LETTER SE-4;Lo;0;L;;;;;N;;;;; 1B056;HENTAIGANA LETTER SE-5;Lo;0;L;;;;;N;;;;; 1B057;HENTAIGANA LETTER SO-1;Lo;0;L;;;;;N;;;;; 1B058;HENTAIGANA LETTER SO-2;Lo;0;L;;;;;N;;;;; 1B059;HENTAIGANA LETTER SO-3;Lo;0;L;;;;;N;;;;; 1B05A;HENTAIGANA LETTER SO-4;Lo;0;L;;;;;N;;;;; 1B05B;HENTAIGANA LETTER SO-5;Lo;0;L;;;;;N;;;;; 1B05C;HENTAIGANA LETTER SO-6;Lo;0;L;;;;;N;;;;; 1B05D;HENTAIGANA LETTER SO-7;Lo;0;L;;;;;N;;;;; 1B05E;HENTAIGANA LETTER TA-1;Lo;0;L;;;;;N;;;;; 1B05F;HENTAIGANA LETTER TA-2;Lo;0;L;;;;;N;;;;; 1B060;HENTAIGANA LETTER TA-3;Lo;0;L;;;;;N;;;;; 1B061;HENTAIGANA LETTER TA-4;Lo;0;L;;;;;N;;;;; 1B062;HENTAIGANA LETTER TI-1;Lo;0;L;;;;;N;;;;; 1B063;HENTAIGANA LETTER TI-2;Lo;0;L;;;;;N;;;;; 1B064;HENTAIGANA LETTER TI-3;Lo;0;L;;;;;N;;;;; 1B065;HENTAIGANA LETTER TI-4;Lo;0;L;;;;;N;;;;; 1B066;HENTAIGANA LETTER TI-5;Lo;0;L;;;;;N;;;;; 1B067;HENTAIGANA LETTER TI-6;Lo;0;L;;;;;N;;;;; 1B068;HENTAIGANA LETTER TI-7;Lo;0;L;;;;;N;;;;; 1B069;HENTAIGANA LETTER TU-1;Lo;0;L;;;;;N;;;;; 1B06A;HENTAIGANA LETTER TU-2;Lo;0;L;;;;;N;;;;; 1B06B;HENTAIGANA LETTER TU-3;Lo;0;L;;;;;N;;;;; 1B06C;HENTAIGANA LETTER TU-4;Lo;0;L;;;;;N;;;;; 1B06D;HENTAIGANA LETTER TU-TO;Lo;0;L;;;;;N;;;;; 1B06E;HENTAIGANA LETTER TE-1;Lo;0;L;;;;;N;;;;; 1B06F;HENTAIGANA LETTER TE-2;Lo;0;L;;;;;N;;;;; 1B070;HENTAIGANA LETTER TE-3;Lo;0;L;;;;;N;;;;; 1B071;HENTAIGANA LETTER TE-4;Lo;0;L;;;;;N;;;;; 1B072;HENTAIGANA LETTER TE-5;Lo;0;L;;;;;N;;;;; 1B073;HENTAIGANA LETTER TE-6;Lo;0;L;;;;;N;;;;; 1B074;HENTAIGANA LETTER TE-7;Lo;0;L;;;;;N;;;;; 1B075;HENTAIGANA LETTER TE-8;Lo;0;L;;;;;N;;;;; 1B076;HENTAIGANA LETTER TE-9;Lo;0;L;;;;;N;;;;; 1B077;HENTAIGANA LETTER TO-1;Lo;0;L;;;;;N;;;;; 1B078;HENTAIGANA LETTER TO-2;Lo;0;L;;;;;N;;;;; 1B079;HENTAIGANA LETTER TO-3;Lo;0;L;;;;;N;;;;; 1B07A;HENTAIGANA LETTER TO-4;Lo;0;L;;;;;N;;;;; 1B07B;HENTAIGANA LETTER TO-5;Lo;0;L;;;;;N;;;;; 1B07C;HENTAIGANA LETTER TO-6;Lo;0;L;;;;;N;;;;; 1B07D;HENTAIGANA LETTER TO-RA;Lo;0;L;;;;;N;;;;; 1B07E;HENTAIGANA LETTER NA-1;Lo;0;L;;;;;N;;;;; 1B07F;HENTAIGANA LETTER NA-2;Lo;0;L;;;;;N;;;;; 1B080;HENTAIGANA LETTER NA-3;Lo;0;L;;;;;N;;;;; 1B081;HENTAIGANA LETTER NA-4;Lo;0;L;;;;;N;;;;; 1B082;HENTAIGANA LETTER NA-5;Lo;0;L;;;;;N;;;;; 1B083;HENTAIGANA LETTER NA-6;Lo;0;L;;;;;N;;;;; 1B084;HENTAIGANA LETTER NA-7;Lo;0;L;;;;;N;;;;; 1B085;HENTAIGANA LETTER NA-8;Lo;0;L;;;;;N;;;;; 1B086;HENTAIGANA LETTER NA-9;Lo;0;L;;;;;N;;;;; 1B087;HENTAIGANA LETTER NI-1;Lo;0;L;;;;;N;;;;; 1B088;HENTAIGANA LETTER NI-2;Lo;0;L;;;;;N;;;;; 1B089;HENTAIGANA LETTER NI-3;Lo;0;L;;;;;N;;;;; 1B08A;HENTAIGANA LETTER NI-4;Lo;0;L;;;;;N;;;;; 1B08B;HENTAIGANA LETTER NI-5;Lo;0;L;;;;;N;;;;; 1B08C;HENTAIGANA LETTER NI-6;Lo;0;L;;;;;N;;;;; 1B08D;HENTAIGANA LETTER NI-7;Lo;0;L;;;;;N;;;;; 1B08E;HENTAIGANA LETTER NI-TE;Lo;0;L;;;;;N;;;;; 1B08F;HENTAIGANA LETTER NU-1;Lo;0;L;;;;;N;;;;; 1B090;HENTAIGANA LETTER NU-2;Lo;0;L;;;;;N;;;;; 1B091;HENTAIGANA LETTER NU-3;Lo;0;L;;;;;N;;;;; 1B092;HENTAIGANA LETTER NE-1;Lo;0;L;;;;;N;;;;; 1B093;HENTAIGANA LETTER NE-2;Lo;0;L;;;;;N;;;;; 1B094;HENTAIGANA LETTER NE-3;Lo;0;L;;;;;N;;;;; 1B095;HENTAIGANA LETTER NE-4;Lo;0;L;;;;;N;;;;; 1B096;HENTAIGANA LETTER NE-5;Lo;0;L;;;;;N;;;;; 1B097;HENTAIGANA LETTER NE-6;Lo;0;L;;;;;N;;;;; 1B098;HENTAIGANA LETTER NE-KO;Lo;0;L;;;;;N;;;;; 1B099;HENTAIGANA LETTER NO-1;Lo;0;L;;;;;N;;;;; 1B09A;HENTAIGANA LETTER NO-2;Lo;0;L;;;;;N;;;;; 1B09B;HENTAIGANA LETTER NO-3;Lo;0;L;;;;;N;;;;; 1B09C;HENTAIGANA LETTER NO-4;Lo;0;L;;;;;N;;;;; 1B09D;HENTAIGANA LETTER NO-5;Lo;0;L;;;;;N;;;;; 1B09E;HENTAIGANA LETTER HA-1;Lo;0;L;;;;;N;;;;; 1B09F;HENTAIGANA LETTER HA-2;Lo;0;L;;;;;N;;;;; 1B0A0;HENTAIGANA LETTER HA-3;Lo;0;L;;;;;N;;;;; 1B0A1;HENTAIGANA LETTER HA-4;Lo;0;L;;;;;N;;;;; 1B0A2;HENTAIGANA LETTER HA-5;Lo;0;L;;;;;N;;;;; 1B0A3;HENTAIGANA LETTER HA-6;Lo;0;L;;;;;N;;;;; 1B0A4;HENTAIGANA LETTER HA-7;Lo;0;L;;;;;N;;;;; 1B0A5;HENTAIGANA LETTER HA-8;Lo;0;L;;;;;N;;;;; 1B0A6;HENTAIGANA LETTER HA-9;Lo;0;L;;;;;N;;;;; 1B0A7;HENTAIGANA LETTER HA-10;Lo;0;L;;;;;N;;;;; 1B0A8;HENTAIGANA LETTER HA-11;Lo;0;L;;;;;N;;;;; 1B0A9;HENTAIGANA LETTER HI-1;Lo;0;L;;;;;N;;;;; 1B0AA;HENTAIGANA LETTER HI-2;Lo;0;L;;;;;N;;;;; 1B0AB;HENTAIGANA LETTER HI-3;Lo;0;L;;;;;N;;;;; 1B0AC;HENTAIGANA LETTER HI-4;Lo;0;L;;;;;N;;;;; 1B0AD;HENTAIGANA LETTER HI-5;Lo;0;L;;;;;N;;;;; 1B0AE;HENTAIGANA LETTER HI-6;Lo;0;L;;;;;N;;;;; 1B0AF;HENTAIGANA LETTER HI-7;Lo;0;L;;;;;N;;;;; 1B0B0;HENTAIGANA LETTER HU-1;Lo;0;L;;;;;N;;;;; 1B0B1;HENTAIGANA LETTER HU-2;Lo;0;L;;;;;N;;;;; 1B0B2;HENTAIGANA LETTER HU-3;Lo;0;L;;;;;N;;;;; 1B0B3;HENTAIGANA LETTER HE-1;Lo;0;L;;;;;N;;;;; 1B0B4;HENTAIGANA LETTER HE-2;Lo;0;L;;;;;N;;;;; 1B0B5;HENTAIGANA LETTER HE-3;Lo;0;L;;;;;N;;;;; 1B0B6;HENTAIGANA LETTER HE-4;Lo;0;L;;;;;N;;;;; 1B0B7;HENTAIGANA LETTER HE-5;Lo;0;L;;;;;N;;;;; 1B0B8;HENTAIGANA LETTER HE-6;Lo;0;L;;;;;N;;;;; 1B0B9;HENTAIGANA LETTER HE-7;Lo;0;L;;;;;N;;;;; 1B0BA;HENTAIGANA LETTER HO-1;Lo;0;L;;;;;N;;;;; 1B0BB;HENTAIGANA LETTER HO-2;Lo;0;L;;;;;N;;;;; 1B0BC;HENTAIGANA LETTER HO-3;Lo;0;L;;;;;N;;;;; 1B0BD;HENTAIGANA LETTER HO-4;Lo;0;L;;;;;N;;;;; 1B0BE;HENTAIGANA LETTER HO-5;Lo;0;L;;;;;N;;;;; 1B0BF;HENTAIGANA LETTER HO-6;Lo;0;L;;;;;N;;;;; 1B0C0;HENTAIGANA LETTER HO-7;Lo;0;L;;;;;N;;;;; 1B0C1;HENTAIGANA LETTER HO-8;Lo;0;L;;;;;N;;;;; 1B0C2;HENTAIGANA LETTER MA-1;Lo;0;L;;;;;N;;;;; 1B0C3;HENTAIGANA LETTER MA-2;Lo;0;L;;;;;N;;;;; 1B0C4;HENTAIGANA LETTER MA-3;Lo;0;L;;;;;N;;;;; 1B0C5;HENTAIGANA LETTER MA-4;Lo;0;L;;;;;N;;;;; 1B0C6;HENTAIGANA LETTER MA-5;Lo;0;L;;;;;N;;;;; 1B0C7;HENTAIGANA LETTER MA-6;Lo;0;L;;;;;N;;;;; 1B0C8;HENTAIGANA LETTER MA-7;Lo;0;L;;;;;N;;;;; 1B0C9;HENTAIGANA LETTER MI-1;Lo;0;L;;;;;N;;;;; 1B0CA;HENTAIGANA LETTER MI-2;Lo;0;L;;;;;N;;;;; 1B0CB;HENTAIGANA LETTER MI-3;Lo;0;L;;;;;N;;;;; 1B0CC;HENTAIGANA LETTER MI-4;Lo;0;L;;;;;N;;;;; 1B0CD;HENTAIGANA LETTER MI-5;Lo;0;L;;;;;N;;;;; 1B0CE;HENTAIGANA LETTER MI-6;Lo;0;L;;;;;N;;;;; 1B0CF;HENTAIGANA LETTER MI-7;Lo;0;L;;;;;N;;;;; 1B0D0;HENTAIGANA LETTER MU-1;Lo;0;L;;;;;N;;;;; 1B0D1;HENTAIGANA LETTER MU-2;Lo;0;L;;;;;N;;;;; 1B0D2;HENTAIGANA LETTER MU-3;Lo;0;L;;;;;N;;;;; 1B0D3;HENTAIGANA LETTER MU-4;Lo;0;L;;;;;N;;;;; 1B0D4;HENTAIGANA LETTER ME-1;Lo;0;L;;;;;N;;;;; 1B0D5;HENTAIGANA LETTER ME-2;Lo;0;L;;;;;N;;;;; 1B0D6;HENTAIGANA LETTER ME-MA;Lo;0;L;;;;;N;;;;; 1B0D7;HENTAIGANA LETTER MO-1;Lo;0;L;;;;;N;;;;; 1B0D8;HENTAIGANA LETTER MO-2;Lo;0;L;;;;;N;;;;; 1B0D9;HENTAIGANA LETTER MO-3;Lo;0;L;;;;;N;;;;; 1B0DA;HENTAIGANA LETTER MO-4;Lo;0;L;;;;;N;;;;; 1B0DB;HENTAIGANA LETTER MO-5;Lo;0;L;;;;;N;;;;; 1B0DC;HENTAIGANA LETTER MO-6;Lo;0;L;;;;;N;;;;; 1B0DD;HENTAIGANA LETTER YA-1;Lo;0;L;;;;;N;;;;; 1B0DE;HENTAIGANA LETTER YA-2;Lo;0;L;;;;;N;;;;; 1B0DF;HENTAIGANA LETTER YA-3;Lo;0;L;;;;;N;;;;; 1B0E0;HENTAIGANA LETTER YA-4;Lo;0;L;;;;;N;;;;; 1B0E1;HENTAIGANA LETTER YA-5;Lo;0;L;;;;;N;;;;; 1B0E2;HENTAIGANA LETTER YA-YO;Lo;0;L;;;;;N;;;;; 1B0E3;HENTAIGANA LETTER YU-1;Lo;0;L;;;;;N;;;;; 1B0E4;HENTAIGANA LETTER YU-2;Lo;0;L;;;;;N;;;;; 1B0E5;HENTAIGANA LETTER YU-3;Lo;0;L;;;;;N;;;;; 1B0E6;HENTAIGANA LETTER YU-4;Lo;0;L;;;;;N;;;;; 1B0E7;HENTAIGANA LETTER YO-1;Lo;0;L;;;;;N;;;;; 1B0E8;HENTAIGANA LETTER YO-2;Lo;0;L;;;;;N;;;;; 1B0E9;HENTAIGANA LETTER YO-3;Lo;0;L;;;;;N;;;;; 1B0EA;HENTAIGANA LETTER YO-4;Lo;0;L;;;;;N;;;;; 1B0EB;HENTAIGANA LETTER YO-5;Lo;0;L;;;;;N;;;;; 1B0EC;HENTAIGANA LETTER YO-6;Lo;0;L;;;;;N;;;;; 1B0ED;HENTAIGANA LETTER RA-1;Lo;0;L;;;;;N;;;;; 1B0EE;HENTAIGANA LETTER RA-2;Lo;0;L;;;;;N;;;;; 1B0EF;HENTAIGANA LETTER RA-3;Lo;0;L;;;;;N;;;;; 1B0F0;HENTAIGANA LETTER RA-4;Lo;0;L;;;;;N;;;;; 1B0F1;HENTAIGANA LETTER RI-1;Lo;0;L;;;;;N;;;;; 1B0F2;HENTAIGANA LETTER RI-2;Lo;0;L;;;;;N;;;;; 1B0F3;HENTAIGANA LETTER RI-3;Lo;0;L;;;;;N;;;;; 1B0F4;HENTAIGANA LETTER RI-4;Lo;0;L;;;;;N;;;;; 1B0F5;HENTAIGANA LETTER RI-5;Lo;0;L;;;;;N;;;;; 1B0F6;HENTAIGANA LETTER RI-6;Lo;0;L;;;;;N;;;;; 1B0F7;HENTAIGANA LETTER RI-7;Lo;0;L;;;;;N;;;;; 1B0F8;HENTAIGANA LETTER RU-1;Lo;0;L;;;;;N;;;;; 1B0F9;HENTAIGANA LETTER RU-2;Lo;0;L;;;;;N;;;;; 1B0FA;HENTAIGANA LETTER RU-3;Lo;0;L;;;;;N;;;;; 1B0FB;HENTAIGANA LETTER RU-4;Lo;0;L;;;;;N;;;;; 1B0FC;HENTAIGANA LETTER RU-5;Lo;0;L;;;;;N;;;;; 1B0FD;HENTAIGANA LETTER RU-6;Lo;0;L;;;;;N;;;;; 1B0FE;HENTAIGANA LETTER RE-1;Lo;0;L;;;;;N;;;;; 1B0FF;HENTAIGANA LETTER RE-2;Lo;0;L;;;;;N;;;;; 1B100;HENTAIGANA LETTER RE-3;Lo;0;L;;;;;N;;;;; 1B101;HENTAIGANA LETTER RE-4;Lo;0;L;;;;;N;;;;; 1B102;HENTAIGANA LETTER RO-1;Lo;0;L;;;;;N;;;;; 1B103;HENTAIGANA LETTER RO-2;Lo;0;L;;;;;N;;;;; 1B104;HENTAIGANA LETTER RO-3;Lo;0;L;;;;;N;;;;; 1B105;HENTAIGANA LETTER RO-4;Lo;0;L;;;;;N;;;;; 1B106;HENTAIGANA LETTER RO-5;Lo;0;L;;;;;N;;;;; 1B107;HENTAIGANA LETTER RO-6;Lo;0;L;;;;;N;;;;; 1B108;HENTAIGANA LETTER WA-1;Lo;0;L;;;;;N;;;;; 1B109;HENTAIGANA LETTER WA-2;Lo;0;L;;;;;N;;;;; 1B10A;HENTAIGANA LETTER WA-3;Lo;0;L;;;;;N;;;;; 1B10B;HENTAIGANA LETTER WA-4;Lo;0;L;;;;;N;;;;; 1B10C;HENTAIGANA LETTER WA-5;Lo;0;L;;;;;N;;;;; 1B10D;HENTAIGANA LETTER WI-1;Lo;0;L;;;;;N;;;;; 1B10E;HENTAIGANA LETTER WI-2;Lo;0;L;;;;;N;;;;; 1B10F;HENTAIGANA LETTER WI-3;Lo;0;L;;;;;N;;;;; 1B110;HENTAIGANA LETTER WI-4;Lo;0;L;;;;;N;;;;; 1B111;HENTAIGANA LETTER WI-5;Lo;0;L;;;;;N;;;;; 1B112;HENTAIGANA LETTER WE-1;Lo;0;L;;;;;N;;;;; 1B113;HENTAIGANA LETTER WE-2;Lo;0;L;;;;;N;;;;; 1B114;HENTAIGANA LETTER WE-3;Lo;0;L;;;;;N;;;;; 1B115;HENTAIGANA LETTER WE-4;Lo;0;L;;;;;N;;;;; 1B116;HENTAIGANA LETTER WO-1;Lo;0;L;;;;;N;;;;; 1B117;HENTAIGANA LETTER WO-2;Lo;0;L;;;;;N;;;;; 1B118;HENTAIGANA LETTER WO-3;Lo;0;L;;;;;N;;;;; 1B119;HENTAIGANA LETTER WO-4;Lo;0;L;;;;;N;;;;; 1B11A;HENTAIGANA LETTER WO-5;Lo;0;L;;;;;N;;;;; 1B11B;HENTAIGANA LETTER WO-6;Lo;0;L;;;;;N;;;;; 1B11C;HENTAIGANA LETTER WO-7;Lo;0;L;;;;;N;;;;; 1B11D;HENTAIGANA LETTER N-MU-MO-1;Lo;0;L;;;;;N;;;;; 1B11E;HENTAIGANA LETTER N-MU-MO-2;Lo;0;L;;;;;N;;;;; 1B11F;HIRAGANA LETTER ARCHAIC WU;Lo;0;L;;;;;N;;;;; 1B120;KATAKANA LETTER ARCHAIC YI;Lo;0;L;;;;;N;;;;; 1B121;KATAKANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;; 1B122;KATAKANA LETTER ARCHAIC WU;Lo;0;L;;;;;N;;;;; 1B150;HIRAGANA LETTER SMALL WI;Lo;0;L;;;;;N;;;;; 1B151;HIRAGANA LETTER SMALL WE;Lo;0;L;;;;;N;;;;; 1B152;HIRAGANA LETTER SMALL WO;Lo;0;L;;;;;N;;;;; 1B164;KATAKANA LETTER SMALL WI;Lo;0;L;;;;;N;;;;; 1B165;KATAKANA LETTER SMALL WE;Lo;0;L;;;;;N;;;;; 1B166;KATAKANA LETTER SMALL WO;Lo;0;L;;;;;N;;;;; 1B167;KATAKANA LETTER SMALL N;Lo;0;L;;;;;N;;;;; 1B170;NUSHU CHARACTER-1B170;Lo;0;L;;;;;N;;;;; 1B171;NUSHU CHARACTER-1B171;Lo;0;L;;;;;N;;;;; 1B172;NUSHU CHARACTER-1B172;Lo;0;L;;;;;N;;;;; 1B173;NUSHU CHARACTER-1B173;Lo;0;L;;;;;N;;;;; 1B174;NUSHU CHARACTER-1B174;Lo;0;L;;;;;N;;;;; 1B175;NUSHU CHARACTER-1B175;Lo;0;L;;;;;N;;;;; 1B176;NUSHU CHARACTER-1B176;Lo;0;L;;;;;N;;;;; 1B177;NUSHU CHARACTER-1B177;Lo;0;L;;;;;N;;;;; 1B178;NUSHU CHARACTER-1B178;Lo;0;L;;;;;N;;;;; 1B179;NUSHU CHARACTER-1B179;Lo;0;L;;;;;N;;;;; 1B17A;NUSHU CHARACTER-1B17A;Lo;0;L;;;;;N;;;;; 1B17B;NUSHU CHARACTER-1B17B;Lo;0;L;;;;;N;;;;; 1B17C;NUSHU CHARACTER-1B17C;Lo;0;L;;;;;N;;;;; 1B17D;NUSHU CHARACTER-1B17D;Lo;0;L;;;;;N;;;;; 1B17E;NUSHU CHARACTER-1B17E;Lo;0;L;;;;;N;;;;; 1B17F;NUSHU CHARACTER-1B17F;Lo;0;L;;;;;N;;;;; 1B180;NUSHU CHARACTER-1B180;Lo;0;L;;;;;N;;;;; 1B181;NUSHU CHARACTER-1B181;Lo;0;L;;;;;N;;;;; 1B182;NUSHU CHARACTER-1B182;Lo;0;L;;;;;N;;;;; 1B183;NUSHU CHARACTER-1B183;Lo;0;L;;;;;N;;;;; 1B184;NUSHU CHARACTER-1B184;Lo;0;L;;;;;N;;;;; 1B185;NUSHU CHARACTER-1B185;Lo;0;L;;;;;N;;;;; 1B186;NUSHU CHARACTER-1B186;Lo;0;L;;;;;N;;;;; 1B187;NUSHU CHARACTER-1B187;Lo;0;L;;;;;N;;;;; 1B188;NUSHU CHARACTER-1B188;Lo;0;L;;;;;N;;;;; 1B189;NUSHU CHARACTER-1B189;Lo;0;L;;;;;N;;;;; 1B18A;NUSHU CHARACTER-1B18A;Lo;0;L;;;;;N;;;;; 1B18B;NUSHU CHARACTER-1B18B;Lo;0;L;;;;;N;;;;; 1B18C;NUSHU CHARACTER-1B18C;Lo;0;L;;;;;N;;;;; 1B18D;NUSHU CHARACTER-1B18D;Lo;0;L;;;;;N;;;;; 1B18E;NUSHU CHARACTER-1B18E;Lo;0;L;;;;;N;;;;; 1B18F;NUSHU CHARACTER-1B18F;Lo;0;L;;;;;N;;;;; 1B190;NUSHU CHARACTER-1B190;Lo;0;L;;;;;N;;;;; 1B191;NUSHU CHARACTER-1B191;Lo;0;L;;;;;N;;;;; 1B192;NUSHU CHARACTER-1B192;Lo;0;L;;;;;N;;;;; 1B193;NUSHU CHARACTER-1B193;Lo;0;L;;;;;N;;;;; 1B194;NUSHU CHARACTER-1B194;Lo;0;L;;;;;N;;;;; 1B195;NUSHU CHARACTER-1B195;Lo;0;L;;;;;N;;;;; 1B196;NUSHU CHARACTER-1B196;Lo;0;L;;;;;N;;;;; 1B197;NUSHU CHARACTER-1B197;Lo;0;L;;;;;N;;;;; 1B198;NUSHU CHARACTER-1B198;Lo;0;L;;;;;N;;;;; 1B199;NUSHU CHARACTER-1B199;Lo;0;L;;;;;N;;;;; 1B19A;NUSHU CHARACTER-1B19A;Lo;0;L;;;;;N;;;;; 1B19B;NUSHU CHARACTER-1B19B;Lo;0;L;;;;;N;;;;; 1B19C;NUSHU CHARACTER-1B19C;Lo;0;L;;;;;N;;;;; 1B19D;NUSHU CHARACTER-1B19D;Lo;0;L;;;;;N;;;;; 1B19E;NUSHU CHARACTER-1B19E;Lo;0;L;;;;;N;;;;; 1B19F;NUSHU CHARACTER-1B19F;Lo;0;L;;;;;N;;;;; 1B1A0;NUSHU CHARACTER-1B1A0;Lo;0;L;;;;;N;;;;; 1B1A1;NUSHU CHARACTER-1B1A1;Lo;0;L;;;;;N;;;;; 1B1A2;NUSHU CHARACTER-1B1A2;Lo;0;L;;;;;N;;;;; 1B1A3;NUSHU CHARACTER-1B1A3;Lo;0;L;;;;;N;;;;; 1B1A4;NUSHU CHARACTER-1B1A4;Lo;0;L;;;;;N;;;;; 1B1A5;NUSHU CHARACTER-1B1A5;Lo;0;L;;;;;N;;;;; 1B1A6;NUSHU CHARACTER-1B1A6;Lo;0;L;;;;;N;;;;; 1B1A7;NUSHU CHARACTER-1B1A7;Lo;0;L;;;;;N;;;;; 1B1A8;NUSHU CHARACTER-1B1A8;Lo;0;L;;;;;N;;;;; 1B1A9;NUSHU CHARACTER-1B1A9;Lo;0;L;;;;;N;;;;; 1B1AA;NUSHU CHARACTER-1B1AA;Lo;0;L;;;;;N;;;;; 1B1AB;NUSHU CHARACTER-1B1AB;Lo;0;L;;;;;N;;;;; 1B1AC;NUSHU CHARACTER-1B1AC;Lo;0;L;;;;;N;;;;; 1B1AD;NUSHU CHARACTER-1B1AD;Lo;0;L;;;;;N;;;;; 1B1AE;NUSHU CHARACTER-1B1AE;Lo;0;L;;;;;N;;;;; 1B1AF;NUSHU CHARACTER-1B1AF;Lo;0;L;;;;;N;;;;; 1B1B0;NUSHU CHARACTER-1B1B0;Lo;0;L;;;;;N;;;;; 1B1B1;NUSHU CHARACTER-1B1B1;Lo;0;L;;;;;N;;;;; 1B1B2;NUSHU CHARACTER-1B1B2;Lo;0;L;;;;;N;;;;; 1B1B3;NUSHU CHARACTER-1B1B3;Lo;0;L;;;;;N;;;;; 1B1B4;NUSHU CHARACTER-1B1B4;Lo;0;L;;;;;N;;;;; 1B1B5;NUSHU CHARACTER-1B1B5;Lo;0;L;;;;;N;;;;; 1B1B6;NUSHU CHARACTER-1B1B6;Lo;0;L;;;;;N;;;;; 1B1B7;NUSHU CHARACTER-1B1B7;Lo;0;L;;;;;N;;;;; 1B1B8;NUSHU CHARACTER-1B1B8;Lo;0;L;;;;;N;;;;; 1B1B9;NUSHU CHARACTER-1B1B9;Lo;0;L;;;;;N;;;;; 1B1BA;NUSHU CHARACTER-1B1BA;Lo;0;L;;;;;N;;;;; 1B1BB;NUSHU CHARACTER-1B1BB;Lo;0;L;;;;;N;;;;; 1B1BC;NUSHU CHARACTER-1B1BC;Lo;0;L;;;;;N;;;;; 1B1BD;NUSHU CHARACTER-1B1BD;Lo;0;L;;;;;N;;;;; 1B1BE;NUSHU CHARACTER-1B1BE;Lo;0;L;;;;;N;;;;; 1B1BF;NUSHU CHARACTER-1B1BF;Lo;0;L;;;;;N;;;;; 1B1C0;NUSHU CHARACTER-1B1C0;Lo;0;L;;;;;N;;;;; 1B1C1;NUSHU CHARACTER-1B1C1;Lo;0;L;;;;;N;;;;; 1B1C2;NUSHU CHARACTER-1B1C2;Lo;0;L;;;;;N;;;;; 1B1C3;NUSHU CHARACTER-1B1C3;Lo;0;L;;;;;N;;;;; 1B1C4;NUSHU CHARACTER-1B1C4;Lo;0;L;;;;;N;;;;; 1B1C5;NUSHU CHARACTER-1B1C5;Lo;0;L;;;;;N;;;;; 1B1C6;NUSHU CHARACTER-1B1C6;Lo;0;L;;;;;N;;;;; 1B1C7;NUSHU CHARACTER-1B1C7;Lo;0;L;;;;;N;;;;; 1B1C8;NUSHU CHARACTER-1B1C8;Lo;0;L;;;;;N;;;;; 1B1C9;NUSHU CHARACTER-1B1C9;Lo;0;L;;;;;N;;;;; 1B1CA;NUSHU CHARACTER-1B1CA;Lo;0;L;;;;;N;;;;; 1B1CB;NUSHU CHARACTER-1B1CB;Lo;0;L;;;;;N;;;;; 1B1CC;NUSHU CHARACTER-1B1CC;Lo;0;L;;;;;N;;;;; 1B1CD;NUSHU CHARACTER-1B1CD;Lo;0;L;;;;;N;;;;; 1B1CE;NUSHU CHARACTER-1B1CE;Lo;0;L;;;;;N;;;;; 1B1CF;NUSHU CHARACTER-1B1CF;Lo;0;L;;;;;N;;;;; 1B1D0;NUSHU CHARACTER-1B1D0;Lo;0;L;;;;;N;;;;; 1B1D1;NUSHU CHARACTER-1B1D1;Lo;0;L;;;;;N;;;;; 1B1D2;NUSHU CHARACTER-1B1D2;Lo;0;L;;;;;N;;;;; 1B1D3;NUSHU CHARACTER-1B1D3;Lo;0;L;;;;;N;;;;; 1B1D4;NUSHU CHARACTER-1B1D4;Lo;0;L;;;;;N;;;;; 1B1D5;NUSHU CHARACTER-1B1D5;Lo;0;L;;;;;N;;;;; 1B1D6;NUSHU CHARACTER-1B1D6;Lo;0;L;;;;;N;;;;; 1B1D7;NUSHU CHARACTER-1B1D7;Lo;0;L;;;;;N;;;;; 1B1D8;NUSHU CHARACTER-1B1D8;Lo;0;L;;;;;N;;;;; 1B1D9;NUSHU CHARACTER-1B1D9;Lo;0;L;;;;;N;;;;; 1B1DA;NUSHU CHARACTER-1B1DA;Lo;0;L;;;;;N;;;;; 1B1DB;NUSHU CHARACTER-1B1DB;Lo;0;L;;;;;N;;;;; 1B1DC;NUSHU CHARACTER-1B1DC;Lo;0;L;;;;;N;;;;; 1B1DD;NUSHU CHARACTER-1B1DD;Lo;0;L;;;;;N;;;;; 1B1DE;NUSHU CHARACTER-1B1DE;Lo;0;L;;;;;N;;;;; 1B1DF;NUSHU CHARACTER-1B1DF;Lo;0;L;;;;;N;;;;; 1B1E0;NUSHU CHARACTER-1B1E0;Lo;0;L;;;;;N;;;;; 1B1E1;NUSHU CHARACTER-1B1E1;Lo;0;L;;;;;N;;;;; 1B1E2;NUSHU CHARACTER-1B1E2;Lo;0;L;;;;;N;;;;; 1B1E3;NUSHU CHARACTER-1B1E3;Lo;0;L;;;;;N;;;;; 1B1E4;NUSHU CHARACTER-1B1E4;Lo;0;L;;;;;N;;;;; 1B1E5;NUSHU CHARACTER-1B1E5;Lo;0;L;;;;;N;;;;; 1B1E6;NUSHU CHARACTER-1B1E6;Lo;0;L;;;;;N;;;;; 1B1E7;NUSHU CHARACTER-1B1E7;Lo;0;L;;;;;N;;;;; 1B1E8;NUSHU CHARACTER-1B1E8;Lo;0;L;;;;;N;;;;; 1B1E9;NUSHU CHARACTER-1B1E9;Lo;0;L;;;;;N;;;;; 1B1EA;NUSHU CHARACTER-1B1EA;Lo;0;L;;;;;N;;;;; 1B1EB;NUSHU CHARACTER-1B1EB;Lo;0;L;;;;;N;;;;; 1B1EC;NUSHU CHARACTER-1B1EC;Lo;0;L;;;;;N;;;;; 1B1ED;NUSHU CHARACTER-1B1ED;Lo;0;L;;;;;N;;;;; 1B1EE;NUSHU CHARACTER-1B1EE;Lo;0;L;;;;;N;;;;; 1B1EF;NUSHU CHARACTER-1B1EF;Lo;0;L;;;;;N;;;;; 1B1F0;NUSHU CHARACTER-1B1F0;Lo;0;L;;;;;N;;;;; 1B1F1;NUSHU CHARACTER-1B1F1;Lo;0;L;;;;;N;;;;; 1B1F2;NUSHU CHARACTER-1B1F2;Lo;0;L;;;;;N;;;;; 1B1F3;NUSHU CHARACTER-1B1F3;Lo;0;L;;;;;N;;;;; 1B1F4;NUSHU CHARACTER-1B1F4;Lo;0;L;;;;;N;;;;; 1B1F5;NUSHU CHARACTER-1B1F5;Lo;0;L;;;;;N;;;;; 1B1F6;NUSHU CHARACTER-1B1F6;Lo;0;L;;;;;N;;;;; 1B1F7;NUSHU CHARACTER-1B1F7;Lo;0;L;;;;;N;;;;; 1B1F8;NUSHU CHARACTER-1B1F8;Lo;0;L;;;;;N;;;;; 1B1F9;NUSHU CHARACTER-1B1F9;Lo;0;L;;;;;N;;;;; 1B1FA;NUSHU CHARACTER-1B1FA;Lo;0;L;;;;;N;;;;; 1B1FB;NUSHU CHARACTER-1B1FB;Lo;0;L;;;;;N;;;;; 1B1FC;NUSHU CHARACTER-1B1FC;Lo;0;L;;;;;N;;;;; 1B1FD;NUSHU CHARACTER-1B1FD;Lo;0;L;;;;;N;;;;; 1B1FE;NUSHU CHARACTER-1B1FE;Lo;0;L;;;;;N;;;;; 1B1FF;NUSHU CHARACTER-1B1FF;Lo;0;L;;;;;N;;;;; 1B200;NUSHU CHARACTER-1B200;Lo;0;L;;;;;N;;;;; 1B201;NUSHU CHARACTER-1B201;Lo;0;L;;;;;N;;;;; 1B202;NUSHU CHARACTER-1B202;Lo;0;L;;;;;N;;;;; 1B203;NUSHU CHARACTER-1B203;Lo;0;L;;;;;N;;;;; 1B204;NUSHU CHARACTER-1B204;Lo;0;L;;;;;N;;;;; 1B205;NUSHU CHARACTER-1B205;Lo;0;L;;;;;N;;;;; 1B206;NUSHU CHARACTER-1B206;Lo;0;L;;;;;N;;;;; 1B207;NUSHU CHARACTER-1B207;Lo;0;L;;;;;N;;;;; 1B208;NUSHU CHARACTER-1B208;Lo;0;L;;;;;N;;;;; 1B209;NUSHU CHARACTER-1B209;Lo;0;L;;;;;N;;;;; 1B20A;NUSHU CHARACTER-1B20A;Lo;0;L;;;;;N;;;;; 1B20B;NUSHU CHARACTER-1B20B;Lo;0;L;;;;;N;;;;; 1B20C;NUSHU CHARACTER-1B20C;Lo;0;L;;;;;N;;;;; 1B20D;NUSHU CHARACTER-1B20D;Lo;0;L;;;;;N;;;;; 1B20E;NUSHU CHARACTER-1B20E;Lo;0;L;;;;;N;;;;; 1B20F;NUSHU CHARACTER-1B20F;Lo;0;L;;;;;N;;;;; 1B210;NUSHU CHARACTER-1B210;Lo;0;L;;;;;N;;;;; 1B211;NUSHU CHARACTER-1B211;Lo;0;L;;;;;N;;;;; 1B212;NUSHU CHARACTER-1B212;Lo;0;L;;;;;N;;;;; 1B213;NUSHU CHARACTER-1B213;Lo;0;L;;;;;N;;;;; 1B214;NUSHU CHARACTER-1B214;Lo;0;L;;;;;N;;;;; 1B215;NUSHU CHARACTER-1B215;Lo;0;L;;;;;N;;;;; 1B216;NUSHU CHARACTER-1B216;Lo;0;L;;;;;N;;;;; 1B217;NUSHU CHARACTER-1B217;Lo;0;L;;;;;N;;;;; 1B218;NUSHU CHARACTER-1B218;Lo;0;L;;;;;N;;;;; 1B219;NUSHU CHARACTER-1B219;Lo;0;L;;;;;N;;;;; 1B21A;NUSHU CHARACTER-1B21A;Lo;0;L;;;;;N;;;;; 1B21B;NUSHU CHARACTER-1B21B;Lo;0;L;;;;;N;;;;; 1B21C;NUSHU CHARACTER-1B21C;Lo;0;L;;;;;N;;;;; 1B21D;NUSHU CHARACTER-1B21D;Lo;0;L;;;;;N;;;;; 1B21E;NUSHU CHARACTER-1B21E;Lo;0;L;;;;;N;;;;; 1B21F;NUSHU CHARACTER-1B21F;Lo;0;L;;;;;N;;;;; 1B220;NUSHU CHARACTER-1B220;Lo;0;L;;;;;N;;;;; 1B221;NUSHU CHARACTER-1B221;Lo;0;L;;;;;N;;;;; 1B222;NUSHU CHARACTER-1B222;Lo;0;L;;;;;N;;;;; 1B223;NUSHU CHARACTER-1B223;Lo;0;L;;;;;N;;;;; 1B224;NUSHU CHARACTER-1B224;Lo;0;L;;;;;N;;;;; 1B225;NUSHU CHARACTER-1B225;Lo;0;L;;;;;N;;;;; 1B226;NUSHU CHARACTER-1B226;Lo;0;L;;;;;N;;;;; 1B227;NUSHU CHARACTER-1B227;Lo;0;L;;;;;N;;;;; 1B228;NUSHU CHARACTER-1B228;Lo;0;L;;;;;N;;;;; 1B229;NUSHU CHARACTER-1B229;Lo;0;L;;;;;N;;;;; 1B22A;NUSHU CHARACTER-1B22A;Lo;0;L;;;;;N;;;;; 1B22B;NUSHU CHARACTER-1B22B;Lo;0;L;;;;;N;;;;; 1B22C;NUSHU CHARACTER-1B22C;Lo;0;L;;;;;N;;;;; 1B22D;NUSHU CHARACTER-1B22D;Lo;0;L;;;;;N;;;;; 1B22E;NUSHU CHARACTER-1B22E;Lo;0;L;;;;;N;;;;; 1B22F;NUSHU CHARACTER-1B22F;Lo;0;L;;;;;N;;;;; 1B230;NUSHU CHARACTER-1B230;Lo;0;L;;;;;N;;;;; 1B231;NUSHU CHARACTER-1B231;Lo;0;L;;;;;N;;;;; 1B232;NUSHU CHARACTER-1B232;Lo;0;L;;;;;N;;;;; 1B233;NUSHU CHARACTER-1B233;Lo;0;L;;;;;N;;;;; 1B234;NUSHU CHARACTER-1B234;Lo;0;L;;;;;N;;;;; 1B235;NUSHU CHARACTER-1B235;Lo;0;L;;;;;N;;;;; 1B236;NUSHU CHARACTER-1B236;Lo;0;L;;;;;N;;;;; 1B237;NUSHU CHARACTER-1B237;Lo;0;L;;;;;N;;;;; 1B238;NUSHU CHARACTER-1B238;Lo;0;L;;;;;N;;;;; 1B239;NUSHU CHARACTER-1B239;Lo;0;L;;;;;N;;;;; 1B23A;NUSHU CHARACTER-1B23A;Lo;0;L;;;;;N;;;;; 1B23B;NUSHU CHARACTER-1B23B;Lo;0;L;;;;;N;;;;; 1B23C;NUSHU CHARACTER-1B23C;Lo;0;L;;;;;N;;;;; 1B23D;NUSHU CHARACTER-1B23D;Lo;0;L;;;;;N;;;;; 1B23E;NUSHU CHARACTER-1B23E;Lo;0;L;;;;;N;;;;; 1B23F;NUSHU CHARACTER-1B23F;Lo;0;L;;;;;N;;;;; 1B240;NUSHU CHARACTER-1B240;Lo;0;L;;;;;N;;;;; 1B241;NUSHU CHARACTER-1B241;Lo;0;L;;;;;N;;;;; 1B242;NUSHU CHARACTER-1B242;Lo;0;L;;;;;N;;;;; 1B243;NUSHU CHARACTER-1B243;Lo;0;L;;;;;N;;;;; 1B244;NUSHU CHARACTER-1B244;Lo;0;L;;;;;N;;;;; 1B245;NUSHU CHARACTER-1B245;Lo;0;L;;;;;N;;;;; 1B246;NUSHU CHARACTER-1B246;Lo;0;L;;;;;N;;;;; 1B247;NUSHU CHARACTER-1B247;Lo;0;L;;;;;N;;;;; 1B248;NUSHU CHARACTER-1B248;Lo;0;L;;;;;N;;;;; 1B249;NUSHU CHARACTER-1B249;Lo;0;L;;;;;N;;;;; 1B24A;NUSHU CHARACTER-1B24A;Lo;0;L;;;;;N;;;;; 1B24B;NUSHU CHARACTER-1B24B;Lo;0;L;;;;;N;;;;; 1B24C;NUSHU CHARACTER-1B24C;Lo;0;L;;;;;N;;;;; 1B24D;NUSHU CHARACTER-1B24D;Lo;0;L;;;;;N;;;;; 1B24E;NUSHU CHARACTER-1B24E;Lo;0;L;;;;;N;;;;; 1B24F;NUSHU CHARACTER-1B24F;Lo;0;L;;;;;N;;;;; 1B250;NUSHU CHARACTER-1B250;Lo;0;L;;;;;N;;;;; 1B251;NUSHU CHARACTER-1B251;Lo;0;L;;;;;N;;;;; 1B252;NUSHU CHARACTER-1B252;Lo;0;L;;;;;N;;;;; 1B253;NUSHU CHARACTER-1B253;Lo;0;L;;;;;N;;;;; 1B254;NUSHU CHARACTER-1B254;Lo;0;L;;;;;N;;;;; 1B255;NUSHU CHARACTER-1B255;Lo;0;L;;;;;N;;;;; 1B256;NUSHU CHARACTER-1B256;Lo;0;L;;;;;N;;;;; 1B257;NUSHU CHARACTER-1B257;Lo;0;L;;;;;N;;;;; 1B258;NUSHU CHARACTER-1B258;Lo;0;L;;;;;N;;;;; 1B259;NUSHU CHARACTER-1B259;Lo;0;L;;;;;N;;;;; 1B25A;NUSHU CHARACTER-1B25A;Lo;0;L;;;;;N;;;;; 1B25B;NUSHU CHARACTER-1B25B;Lo;0;L;;;;;N;;;;; 1B25C;NUSHU CHARACTER-1B25C;Lo;0;L;;;;;N;;;;; 1B25D;NUSHU CHARACTER-1B25D;Lo;0;L;;;;;N;;;;; 1B25E;NUSHU CHARACTER-1B25E;Lo;0;L;;;;;N;;;;; 1B25F;NUSHU CHARACTER-1B25F;Lo;0;L;;;;;N;;;;; 1B260;NUSHU CHARACTER-1B260;Lo;0;L;;;;;N;;;;; 1B261;NUSHU CHARACTER-1B261;Lo;0;L;;;;;N;;;;; 1B262;NUSHU CHARACTER-1B262;Lo;0;L;;;;;N;;;;; 1B263;NUSHU CHARACTER-1B263;Lo;0;L;;;;;N;;;;; 1B264;NUSHU CHARACTER-1B264;Lo;0;L;;;;;N;;;;; 1B265;NUSHU CHARACTER-1B265;Lo;0;L;;;;;N;;;;; 1B266;NUSHU CHARACTER-1B266;Lo;0;L;;;;;N;;;;; 1B267;NUSHU CHARACTER-1B267;Lo;0;L;;;;;N;;;;; 1B268;NUSHU CHARACTER-1B268;Lo;0;L;;;;;N;;;;; 1B269;NUSHU CHARACTER-1B269;Lo;0;L;;;;;N;;;;; 1B26A;NUSHU CHARACTER-1B26A;Lo;0;L;;;;;N;;;;; 1B26B;NUSHU CHARACTER-1B26B;Lo;0;L;;;;;N;;;;; 1B26C;NUSHU CHARACTER-1B26C;Lo;0;L;;;;;N;;;;; 1B26D;NUSHU CHARACTER-1B26D;Lo;0;L;;;;;N;;;;; 1B26E;NUSHU CHARACTER-1B26E;Lo;0;L;;;;;N;;;;; 1B26F;NUSHU CHARACTER-1B26F;Lo;0;L;;;;;N;;;;; 1B270;NUSHU CHARACTER-1B270;Lo;0;L;;;;;N;;;;; 1B271;NUSHU CHARACTER-1B271;Lo;0;L;;;;;N;;;;; 1B272;NUSHU CHARACTER-1B272;Lo;0;L;;;;;N;;;;; 1B273;NUSHU CHARACTER-1B273;Lo;0;L;;;;;N;;;;; 1B274;NUSHU CHARACTER-1B274;Lo;0;L;;;;;N;;;;; 1B275;NUSHU CHARACTER-1B275;Lo;0;L;;;;;N;;;;; 1B276;NUSHU CHARACTER-1B276;Lo;0;L;;;;;N;;;;; 1B277;NUSHU CHARACTER-1B277;Lo;0;L;;;;;N;;;;; 1B278;NUSHU CHARACTER-1B278;Lo;0;L;;;;;N;;;;; 1B279;NUSHU CHARACTER-1B279;Lo;0;L;;;;;N;;;;; 1B27A;NUSHU CHARACTER-1B27A;Lo;0;L;;;;;N;;;;; 1B27B;NUSHU CHARACTER-1B27B;Lo;0;L;;;;;N;;;;; 1B27C;NUSHU CHARACTER-1B27C;Lo;0;L;;;;;N;;;;; 1B27D;NUSHU CHARACTER-1B27D;Lo;0;L;;;;;N;;;;; 1B27E;NUSHU CHARACTER-1B27E;Lo;0;L;;;;;N;;;;; 1B27F;NUSHU CHARACTER-1B27F;Lo;0;L;;;;;N;;;;; 1B280;NUSHU CHARACTER-1B280;Lo;0;L;;;;;N;;;;; 1B281;NUSHU CHARACTER-1B281;Lo;0;L;;;;;N;;;;; 1B282;NUSHU CHARACTER-1B282;Lo;0;L;;;;;N;;;;; 1B283;NUSHU CHARACTER-1B283;Lo;0;L;;;;;N;;;;; 1B284;NUSHU CHARACTER-1B284;Lo;0;L;;;;;N;;;;; 1B285;NUSHU CHARACTER-1B285;Lo;0;L;;;;;N;;;;; 1B286;NUSHU CHARACTER-1B286;Lo;0;L;;;;;N;;;;; 1B287;NUSHU CHARACTER-1B287;Lo;0;L;;;;;N;;;;; 1B288;NUSHU CHARACTER-1B288;Lo;0;L;;;;;N;;;;; 1B289;NUSHU CHARACTER-1B289;Lo;0;L;;;;;N;;;;; 1B28A;NUSHU CHARACTER-1B28A;Lo;0;L;;;;;N;;;;; 1B28B;NUSHU CHARACTER-1B28B;Lo;0;L;;;;;N;;;;; 1B28C;NUSHU CHARACTER-1B28C;Lo;0;L;;;;;N;;;;; 1B28D;NUSHU CHARACTER-1B28D;Lo;0;L;;;;;N;;;;; 1B28E;NUSHU CHARACTER-1B28E;Lo;0;L;;;;;N;;;;; 1B28F;NUSHU CHARACTER-1B28F;Lo;0;L;;;;;N;;;;; 1B290;NUSHU CHARACTER-1B290;Lo;0;L;;;;;N;;;;; 1B291;NUSHU CHARACTER-1B291;Lo;0;L;;;;;N;;;;; 1B292;NUSHU CHARACTER-1B292;Lo;0;L;;;;;N;;;;; 1B293;NUSHU CHARACTER-1B293;Lo;0;L;;;;;N;;;;; 1B294;NUSHU CHARACTER-1B294;Lo;0;L;;;;;N;;;;; 1B295;NUSHU CHARACTER-1B295;Lo;0;L;;;;;N;;;;; 1B296;NUSHU CHARACTER-1B296;Lo;0;L;;;;;N;;;;; 1B297;NUSHU CHARACTER-1B297;Lo;0;L;;;;;N;;;;; 1B298;NUSHU CHARACTER-1B298;Lo;0;L;;;;;N;;;;; 1B299;NUSHU CHARACTER-1B299;Lo;0;L;;;;;N;;;;; 1B29A;NUSHU CHARACTER-1B29A;Lo;0;L;;;;;N;;;;; 1B29B;NUSHU CHARACTER-1B29B;Lo;0;L;;;;;N;;;;; 1B29C;NUSHU CHARACTER-1B29C;Lo;0;L;;;;;N;;;;; 1B29D;NUSHU CHARACTER-1B29D;Lo;0;L;;;;;N;;;;; 1B29E;NUSHU CHARACTER-1B29E;Lo;0;L;;;;;N;;;;; 1B29F;NUSHU CHARACTER-1B29F;Lo;0;L;;;;;N;;;;; 1B2A0;NUSHU CHARACTER-1B2A0;Lo;0;L;;;;;N;;;;; 1B2A1;NUSHU CHARACTER-1B2A1;Lo;0;L;;;;;N;;;;; 1B2A2;NUSHU CHARACTER-1B2A2;Lo;0;L;;;;;N;;;;; 1B2A3;NUSHU CHARACTER-1B2A3;Lo;0;L;;;;;N;;;;; 1B2A4;NUSHU CHARACTER-1B2A4;Lo;0;L;;;;;N;;;;; 1B2A5;NUSHU CHARACTER-1B2A5;Lo;0;L;;;;;N;;;;; 1B2A6;NUSHU CHARACTER-1B2A6;Lo;0;L;;;;;N;;;;; 1B2A7;NUSHU CHARACTER-1B2A7;Lo;0;L;;;;;N;;;;; 1B2A8;NUSHU CHARACTER-1B2A8;Lo;0;L;;;;;N;;;;; 1B2A9;NUSHU CHARACTER-1B2A9;Lo;0;L;;;;;N;;;;; 1B2AA;NUSHU CHARACTER-1B2AA;Lo;0;L;;;;;N;;;;; 1B2AB;NUSHU CHARACTER-1B2AB;Lo;0;L;;;;;N;;;;; 1B2AC;NUSHU CHARACTER-1B2AC;Lo;0;L;;;;;N;;;;; 1B2AD;NUSHU CHARACTER-1B2AD;Lo;0;L;;;;;N;;;;; 1B2AE;NUSHU CHARACTER-1B2AE;Lo;0;L;;;;;N;;;;; 1B2AF;NUSHU CHARACTER-1B2AF;Lo;0;L;;;;;N;;;;; 1B2B0;NUSHU CHARACTER-1B2B0;Lo;0;L;;;;;N;;;;; 1B2B1;NUSHU CHARACTER-1B2B1;Lo;0;L;;;;;N;;;;; 1B2B2;NUSHU CHARACTER-1B2B2;Lo;0;L;;;;;N;;;;; 1B2B3;NUSHU CHARACTER-1B2B3;Lo;0;L;;;;;N;;;;; 1B2B4;NUSHU CHARACTER-1B2B4;Lo;0;L;;;;;N;;;;; 1B2B5;NUSHU CHARACTER-1B2B5;Lo;0;L;;;;;N;;;;; 1B2B6;NUSHU CHARACTER-1B2B6;Lo;0;L;;;;;N;;;;; 1B2B7;NUSHU CHARACTER-1B2B7;Lo;0;L;;;;;N;;;;; 1B2B8;NUSHU CHARACTER-1B2B8;Lo;0;L;;;;;N;;;;; 1B2B9;NUSHU CHARACTER-1B2B9;Lo;0;L;;;;;N;;;;; 1B2BA;NUSHU CHARACTER-1B2BA;Lo;0;L;;;;;N;;;;; 1B2BB;NUSHU CHARACTER-1B2BB;Lo;0;L;;;;;N;;;;; 1B2BC;NUSHU CHARACTER-1B2BC;Lo;0;L;;;;;N;;;;; 1B2BD;NUSHU CHARACTER-1B2BD;Lo;0;L;;;;;N;;;;; 1B2BE;NUSHU CHARACTER-1B2BE;Lo;0;L;;;;;N;;;;; 1B2BF;NUSHU CHARACTER-1B2BF;Lo;0;L;;;;;N;;;;; 1B2C0;NUSHU CHARACTER-1B2C0;Lo;0;L;;;;;N;;;;; 1B2C1;NUSHU CHARACTER-1B2C1;Lo;0;L;;;;;N;;;;; 1B2C2;NUSHU CHARACTER-1B2C2;Lo;0;L;;;;;N;;;;; 1B2C3;NUSHU CHARACTER-1B2C3;Lo;0;L;;;;;N;;;;; 1B2C4;NUSHU CHARACTER-1B2C4;Lo;0;L;;;;;N;;;;; 1B2C5;NUSHU CHARACTER-1B2C5;Lo;0;L;;;;;N;;;;; 1B2C6;NUSHU CHARACTER-1B2C6;Lo;0;L;;;;;N;;;;; 1B2C7;NUSHU CHARACTER-1B2C7;Lo;0;L;;;;;N;;;;; 1B2C8;NUSHU CHARACTER-1B2C8;Lo;0;L;;;;;N;;;;; 1B2C9;NUSHU CHARACTER-1B2C9;Lo;0;L;;;;;N;;;;; 1B2CA;NUSHU CHARACTER-1B2CA;Lo;0;L;;;;;N;;;;; 1B2CB;NUSHU CHARACTER-1B2CB;Lo;0;L;;;;;N;;;;; 1B2CC;NUSHU CHARACTER-1B2CC;Lo;0;L;;;;;N;;;;; 1B2CD;NUSHU CHARACTER-1B2CD;Lo;0;L;;;;;N;;;;; 1B2CE;NUSHU CHARACTER-1B2CE;Lo;0;L;;;;;N;;;;; 1B2CF;NUSHU CHARACTER-1B2CF;Lo;0;L;;;;;N;;;;; 1B2D0;NUSHU CHARACTER-1B2D0;Lo;0;L;;;;;N;;;;; 1B2D1;NUSHU CHARACTER-1B2D1;Lo;0;L;;;;;N;;;;; 1B2D2;NUSHU CHARACTER-1B2D2;Lo;0;L;;;;;N;;;;; 1B2D3;NUSHU CHARACTER-1B2D3;Lo;0;L;;;;;N;;;;; 1B2D4;NUSHU CHARACTER-1B2D4;Lo;0;L;;;;;N;;;;; 1B2D5;NUSHU CHARACTER-1B2D5;Lo;0;L;;;;;N;;;;; 1B2D6;NUSHU CHARACTER-1B2D6;Lo;0;L;;;;;N;;;;; 1B2D7;NUSHU CHARACTER-1B2D7;Lo;0;L;;;;;N;;;;; 1B2D8;NUSHU CHARACTER-1B2D8;Lo;0;L;;;;;N;;;;; 1B2D9;NUSHU CHARACTER-1B2D9;Lo;0;L;;;;;N;;;;; 1B2DA;NUSHU CHARACTER-1B2DA;Lo;0;L;;;;;N;;;;; 1B2DB;NUSHU CHARACTER-1B2DB;Lo;0;L;;;;;N;;;;; 1B2DC;NUSHU CHARACTER-1B2DC;Lo;0;L;;;;;N;;;;; 1B2DD;NUSHU CHARACTER-1B2DD;Lo;0;L;;;;;N;;;;; 1B2DE;NUSHU CHARACTER-1B2DE;Lo;0;L;;;;;N;;;;; 1B2DF;NUSHU CHARACTER-1B2DF;Lo;0;L;;;;;N;;;;; 1B2E0;NUSHU CHARACTER-1B2E0;Lo;0;L;;;;;N;;;;; 1B2E1;NUSHU CHARACTER-1B2E1;Lo;0;L;;;;;N;;;;; 1B2E2;NUSHU CHARACTER-1B2E2;Lo;0;L;;;;;N;;;;; 1B2E3;NUSHU CHARACTER-1B2E3;Lo;0;L;;;;;N;;;;; 1B2E4;NUSHU CHARACTER-1B2E4;Lo;0;L;;;;;N;;;;; 1B2E5;NUSHU CHARACTER-1B2E5;Lo;0;L;;;;;N;;;;; 1B2E6;NUSHU CHARACTER-1B2E6;Lo;0;L;;;;;N;;;;; 1B2E7;NUSHU CHARACTER-1B2E7;Lo;0;L;;;;;N;;;;; 1B2E8;NUSHU CHARACTER-1B2E8;Lo;0;L;;;;;N;;;;; 1B2E9;NUSHU CHARACTER-1B2E9;Lo;0;L;;;;;N;;;;; 1B2EA;NUSHU CHARACTER-1B2EA;Lo;0;L;;;;;N;;;;; 1B2EB;NUSHU CHARACTER-1B2EB;Lo;0;L;;;;;N;;;;; 1B2EC;NUSHU CHARACTER-1B2EC;Lo;0;L;;;;;N;;;;; 1B2ED;NUSHU CHARACTER-1B2ED;Lo;0;L;;;;;N;;;;; 1B2EE;NUSHU CHARACTER-1B2EE;Lo;0;L;;;;;N;;;;; 1B2EF;NUSHU CHARACTER-1B2EF;Lo;0;L;;;;;N;;;;; 1B2F0;NUSHU CHARACTER-1B2F0;Lo;0;L;;;;;N;;;;; 1B2F1;NUSHU CHARACTER-1B2F1;Lo;0;L;;;;;N;;;;; 1B2F2;NUSHU CHARACTER-1B2F2;Lo;0;L;;;;;N;;;;; 1B2F3;NUSHU CHARACTER-1B2F3;Lo;0;L;;;;;N;;;;; 1B2F4;NUSHU CHARACTER-1B2F4;Lo;0;L;;;;;N;;;;; 1B2F5;NUSHU CHARACTER-1B2F5;Lo;0;L;;;;;N;;;;; 1B2F6;NUSHU CHARACTER-1B2F6;Lo;0;L;;;;;N;;;;; 1B2F7;NUSHU CHARACTER-1B2F7;Lo;0;L;;;;;N;;;;; 1B2F8;NUSHU CHARACTER-1B2F8;Lo;0;L;;;;;N;;;;; 1B2F9;NUSHU CHARACTER-1B2F9;Lo;0;L;;;;;N;;;;; 1B2FA;NUSHU CHARACTER-1B2FA;Lo;0;L;;;;;N;;;;; 1B2FB;NUSHU CHARACTER-1B2FB;Lo;0;L;;;;;N;;;;; 1BC00;DUPLOYAN LETTER H;Lo;0;L;;;;;N;;;;; 1BC01;DUPLOYAN LETTER X;Lo;0;L;;;;;N;;;;; 1BC02;DUPLOYAN LETTER P;Lo;0;L;;;;;N;;;;; 1BC03;DUPLOYAN LETTER T;Lo;0;L;;;;;N;;;;; 1BC04;DUPLOYAN LETTER F;Lo;0;L;;;;;N;;;;; 1BC05;DUPLOYAN LETTER K;Lo;0;L;;;;;N;;;;; 1BC06;DUPLOYAN LETTER L;Lo;0;L;;;;;N;;;;; 1BC07;DUPLOYAN LETTER B;Lo;0;L;;;;;N;;;;; 1BC08;DUPLOYAN LETTER D;Lo;0;L;;;;;N;;;;; 1BC09;DUPLOYAN LETTER V;Lo;0;L;;;;;N;;;;; 1BC0A;DUPLOYAN LETTER G;Lo;0;L;;;;;N;;;;; 1BC0B;DUPLOYAN LETTER R;Lo;0;L;;;;;N;;;;; 1BC0C;DUPLOYAN LETTER P N;Lo;0;L;;;;;N;;;;; 1BC0D;DUPLOYAN LETTER D S;Lo;0;L;;;;;N;;;;; 1BC0E;DUPLOYAN LETTER F N;Lo;0;L;;;;;N;;;;; 1BC0F;DUPLOYAN LETTER K M;Lo;0;L;;;;;N;;;;; 1BC10;DUPLOYAN LETTER R S;Lo;0;L;;;;;N;;;;; 1BC11;DUPLOYAN LETTER TH;Lo;0;L;;;;;N;;;;; 1BC12;DUPLOYAN LETTER SLOAN DH;Lo;0;L;;;;;N;;;;; 1BC13;DUPLOYAN LETTER DH;Lo;0;L;;;;;N;;;;; 1BC14;DUPLOYAN LETTER KK;Lo;0;L;;;;;N;;;;; 1BC15;DUPLOYAN LETTER SLOAN J;Lo;0;L;;;;;N;;;;; 1BC16;DUPLOYAN LETTER HL;Lo;0;L;;;;;N;;;;; 1BC17;DUPLOYAN LETTER LH;Lo;0;L;;;;;N;;;;; 1BC18;DUPLOYAN LETTER RH;Lo;0;L;;;;;N;;;;; 1BC19;DUPLOYAN LETTER M;Lo;0;L;;;;;N;;;;; 1BC1A;DUPLOYAN LETTER N;Lo;0;L;;;;;N;;;;; 1BC1B;DUPLOYAN LETTER J;Lo;0;L;;;;;N;;;;; 1BC1C;DUPLOYAN LETTER S;Lo;0;L;;;;;N;;;;; 1BC1D;DUPLOYAN LETTER M N;Lo;0;L;;;;;N;;;;; 1BC1E;DUPLOYAN LETTER N M;Lo;0;L;;;;;N;;;;; 1BC1F;DUPLOYAN LETTER J M;Lo;0;L;;;;;N;;;;; 1BC20;DUPLOYAN LETTER S J;Lo;0;L;;;;;N;;;;; 1BC21;DUPLOYAN LETTER M WITH DOT;Lo;0;L;;;;;N;;;;; 1BC22;DUPLOYAN LETTER N WITH DOT;Lo;0;L;;;;;N;;;;; 1BC23;DUPLOYAN LETTER J WITH DOT;Lo;0;L;;;;;N;;;;; 1BC24;DUPLOYAN LETTER J WITH DOTS INSIDE AND ABOVE;Lo;0;L;;;;;N;;;;; 1BC25;DUPLOYAN LETTER S WITH DOT;Lo;0;L;;;;;N;;;;; 1BC26;DUPLOYAN LETTER S WITH DOT BELOW;Lo;0;L;;;;;N;;;;; 1BC27;DUPLOYAN LETTER M S;Lo;0;L;;;;;N;;;;; 1BC28;DUPLOYAN LETTER N S;Lo;0;L;;;;;N;;;;; 1BC29;DUPLOYAN LETTER J S;Lo;0;L;;;;;N;;;;; 1BC2A;DUPLOYAN LETTER S S;Lo;0;L;;;;;N;;;;; 1BC2B;DUPLOYAN LETTER M N S;Lo;0;L;;;;;N;;;;; 1BC2C;DUPLOYAN LETTER N M S;Lo;0;L;;;;;N;;;;; 1BC2D;DUPLOYAN LETTER J M S;Lo;0;L;;;;;N;;;;; 1BC2E;DUPLOYAN LETTER S J S;Lo;0;L;;;;;N;;;;; 1BC2F;DUPLOYAN LETTER J S WITH DOT;Lo;0;L;;;;;N;;;;; 1BC30;DUPLOYAN LETTER J N;Lo;0;L;;;;;N;;;;; 1BC31;DUPLOYAN LETTER J N S;Lo;0;L;;;;;N;;;;; 1BC32;DUPLOYAN LETTER S T;Lo;0;L;;;;;N;;;;; 1BC33;DUPLOYAN LETTER S T R;Lo;0;L;;;;;N;;;;; 1BC34;DUPLOYAN LETTER S P;Lo;0;L;;;;;N;;;;; 1BC35;DUPLOYAN LETTER S P R;Lo;0;L;;;;;N;;;;; 1BC36;DUPLOYAN LETTER T S;Lo;0;L;;;;;N;;;;; 1BC37;DUPLOYAN LETTER T R S;Lo;0;L;;;;;N;;;;; 1BC38;DUPLOYAN LETTER W;Lo;0;L;;;;;N;;;;; 1BC39;DUPLOYAN LETTER WH;Lo;0;L;;;;;N;;;;; 1BC3A;DUPLOYAN LETTER W R;Lo;0;L;;;;;N;;;;; 1BC3B;DUPLOYAN LETTER S N;Lo;0;L;;;;;N;;;;; 1BC3C;DUPLOYAN LETTER S M;Lo;0;L;;;;;N;;;;; 1BC3D;DUPLOYAN LETTER K R S;Lo;0;L;;;;;N;;;;; 1BC3E;DUPLOYAN LETTER G R S;Lo;0;L;;;;;N;;;;; 1BC3F;DUPLOYAN LETTER S K;Lo;0;L;;;;;N;;;;; 1BC40;DUPLOYAN LETTER S K R;Lo;0;L;;;;;N;;;;; 1BC41;DUPLOYAN LETTER A;Lo;0;L;;;;;N;;;;; 1BC42;DUPLOYAN LETTER SLOAN OW;Lo;0;L;;;;;N;;;;; 1BC43;DUPLOYAN LETTER OA;Lo;0;L;;;;;N;;;;; 1BC44;DUPLOYAN LETTER O;Lo;0;L;;;;;N;;;;; 1BC45;DUPLOYAN LETTER AOU;Lo;0;L;;;;;N;;;;; 1BC46;DUPLOYAN LETTER I;Lo;0;L;;;;;N;;;;; 1BC47;DUPLOYAN LETTER E;Lo;0;L;;;;;N;;;;; 1BC48;DUPLOYAN LETTER IE;Lo;0;L;;;;;N;;;;; 1BC49;DUPLOYAN LETTER SHORT I;Lo;0;L;;;;;N;;;;; 1BC4A;DUPLOYAN LETTER UI;Lo;0;L;;;;;N;;;;; 1BC4B;DUPLOYAN LETTER EE;Lo;0;L;;;;;N;;;;; 1BC4C;DUPLOYAN LETTER SLOAN EH;Lo;0;L;;;;;N;;;;; 1BC4D;DUPLOYAN LETTER ROMANIAN I;Lo;0;L;;;;;N;;;;; 1BC4E;DUPLOYAN LETTER SLOAN EE;Lo;0;L;;;;;N;;;;; 1BC4F;DUPLOYAN LETTER LONG I;Lo;0;L;;;;;N;;;;; 1BC50;DUPLOYAN LETTER YE;Lo;0;L;;;;;N;;;;; 1BC51;DUPLOYAN LETTER U;Lo;0;L;;;;;N;;;;; 1BC52;DUPLOYAN LETTER EU;Lo;0;L;;;;;N;;;;; 1BC53;DUPLOYAN LETTER XW;Lo;0;L;;;;;N;;;;; 1BC54;DUPLOYAN LETTER U N;Lo;0;L;;;;;N;;;;; 1BC55;DUPLOYAN LETTER LONG U;Lo;0;L;;;;;N;;;;; 1BC56;DUPLOYAN LETTER ROMANIAN U;Lo;0;L;;;;;N;;;;; 1BC57;DUPLOYAN LETTER UH;Lo;0;L;;;;;N;;;;; 1BC58;DUPLOYAN LETTER SLOAN U;Lo;0;L;;;;;N;;;;; 1BC59;DUPLOYAN LETTER OOH;Lo;0;L;;;;;N;;;;; 1BC5A;DUPLOYAN LETTER OW;Lo;0;L;;;;;N;;;;; 1BC5B;DUPLOYAN LETTER OU;Lo;0;L;;;;;N;;;;; 1BC5C;DUPLOYAN LETTER WA;Lo;0;L;;;;;N;;;;; 1BC5D;DUPLOYAN LETTER WO;Lo;0;L;;;;;N;;;;; 1BC5E;DUPLOYAN LETTER WI;Lo;0;L;;;;;N;;;;; 1BC5F;DUPLOYAN LETTER WEI;Lo;0;L;;;;;N;;;;; 1BC60;DUPLOYAN LETTER WOW;Lo;0;L;;;;;N;;;;; 1BC61;DUPLOYAN LETTER NASAL U;Lo;0;L;;;;;N;;;;; 1BC62;DUPLOYAN LETTER NASAL O;Lo;0;L;;;;;N;;;;; 1BC63;DUPLOYAN LETTER NASAL I;Lo;0;L;;;;;N;;;;; 1BC64;DUPLOYAN LETTER NASAL A;Lo;0;L;;;;;N;;;;; 1BC65;DUPLOYAN LETTER PERNIN AN;Lo;0;L;;;;;N;;;;; 1BC66;DUPLOYAN LETTER PERNIN AM;Lo;0;L;;;;;N;;;;; 1BC67;DUPLOYAN LETTER SLOAN EN;Lo;0;L;;;;;N;;;;; 1BC68;DUPLOYAN LETTER SLOAN AN;Lo;0;L;;;;;N;;;;; 1BC69;DUPLOYAN LETTER SLOAN ON;Lo;0;L;;;;;N;;;;; 1BC6A;DUPLOYAN LETTER VOCALIC M;Lo;0;L;;;;;N;;;;; 1BC70;DUPLOYAN AFFIX LEFT HORIZONTAL SECANT;Lo;0;L;;;;;N;;;;; 1BC71;DUPLOYAN AFFIX MID HORIZONTAL SECANT;Lo;0;L;;;;;N;;;;; 1BC72;DUPLOYAN AFFIX RIGHT HORIZONTAL SECANT;Lo;0;L;;;;;N;;;;; 1BC73;DUPLOYAN AFFIX LOW VERTICAL SECANT;Lo;0;L;;;;;N;;;;; 1BC74;DUPLOYAN AFFIX MID VERTICAL SECANT;Lo;0;L;;;;;N;;;;; 1BC75;DUPLOYAN AFFIX HIGH VERTICAL SECANT;Lo;0;L;;;;;N;;;;; 1BC76;DUPLOYAN AFFIX ATTACHED SECANT;Lo;0;L;;;;;N;;;;; 1BC77;DUPLOYAN AFFIX ATTACHED LEFT-TO-RIGHT SECANT;Lo;0;L;;;;;N;;;;; 1BC78;DUPLOYAN AFFIX ATTACHED TANGENT;Lo;0;L;;;;;N;;;;; 1BC79;DUPLOYAN AFFIX ATTACHED TAIL;Lo;0;L;;;;;N;;;;; 1BC7A;DUPLOYAN AFFIX ATTACHED E HOOK;Lo;0;L;;;;;N;;;;; 1BC7B;DUPLOYAN AFFIX ATTACHED I HOOK;Lo;0;L;;;;;N;;;;; 1BC7C;DUPLOYAN AFFIX ATTACHED TANGENT HOOK;Lo;0;L;;;;;N;;;;; 1BC80;DUPLOYAN AFFIX HIGH ACUTE;Lo;0;L;;;;;N;;;;; 1BC81;DUPLOYAN AFFIX HIGH TIGHT ACUTE;Lo;0;L;;;;;N;;;;; 1BC82;DUPLOYAN AFFIX HIGH GRAVE;Lo;0;L;;;;;N;;;;; 1BC83;DUPLOYAN AFFIX HIGH LONG GRAVE;Lo;0;L;;;;;N;;;;; 1BC84;DUPLOYAN AFFIX HIGH DOT;Lo;0;L;;;;;N;;;;; 1BC85;DUPLOYAN AFFIX HIGH CIRCLE;Lo;0;L;;;;;N;;;;; 1BC86;DUPLOYAN AFFIX HIGH LINE;Lo;0;L;;;;;N;;;;; 1BC87;DUPLOYAN AFFIX HIGH WAVE;Lo;0;L;;;;;N;;;;; 1BC88;DUPLOYAN AFFIX HIGH VERTICAL;Lo;0;L;;;;;N;;;;; 1BC90;DUPLOYAN AFFIX LOW ACUTE;Lo;0;L;;;;;N;;;;; 1BC91;DUPLOYAN AFFIX LOW TIGHT ACUTE;Lo;0;L;;;;;N;;;;; 1BC92;DUPLOYAN AFFIX LOW GRAVE;Lo;0;L;;;;;N;;;;; 1BC93;DUPLOYAN AFFIX LOW LONG GRAVE;Lo;0;L;;;;;N;;;;; 1BC94;DUPLOYAN AFFIX LOW DOT;Lo;0;L;;;;;N;;;;; 1BC95;DUPLOYAN AFFIX LOW CIRCLE;Lo;0;L;;;;;N;;;;; 1BC96;DUPLOYAN AFFIX LOW LINE;Lo;0;L;;;;;N;;;;; 1BC97;DUPLOYAN AFFIX LOW WAVE;Lo;0;L;;;;;N;;;;; 1BC98;DUPLOYAN AFFIX LOW VERTICAL;Lo;0;L;;;;;N;;;;; 1BC99;DUPLOYAN AFFIX LOW ARROW;Lo;0;L;;;;;N;;;;; 1BC9C;DUPLOYAN SIGN O WITH CROSS;So;0;L;;;;;N;;;;; 1BC9D;DUPLOYAN THICK LETTER SELECTOR;Mn;0;NSM;;;;;N;;;;; 1BC9E;DUPLOYAN DOUBLE MARK;Mn;1;NSM;;;;;N;;;;; 1BC9F;DUPLOYAN PUNCTUATION CHINOOK FULL STOP;Po;0;L;;;;;N;;;;; 1BCA0;SHORTHAND FORMAT LETTER OVERLAP;Cf;0;BN;;;;;N;;;;; 1BCA1;SHORTHAND FORMAT CONTINUING OVERLAP;Cf;0;BN;;;;;N;;;;; 1BCA2;SHORTHAND FORMAT DOWN STEP;Cf;0;BN;;;;;N;;;;; 1BCA3;SHORTHAND FORMAT UP STEP;Cf;0;BN;;;;;N;;;;; 1CF00;ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF01;ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF02;ZNAMENNY COMBINING MARK TSATA ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF03;ZNAMENNY COMBINING MARK GORAZDO NIZKO ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF04;ZNAMENNY COMBINING MARK NIZKO ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF05;ZNAMENNY COMBINING MARK SREDNE ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF06;ZNAMENNY COMBINING MARK MALO POVYSHE ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF07;ZNAMENNY COMBINING MARK POVYSHE ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF08;ZNAMENNY COMBINING MARK VYSOKO ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF09;ZNAMENNY COMBINING MARK MALO POVYSHE S KHOKHLOM ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF0A;ZNAMENNY COMBINING MARK POVYSHE S KHOKHLOM ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF0B;ZNAMENNY COMBINING MARK VYSOKO S KHOKHLOM ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF0C;ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON RIGHT;Mn;0;NSM;;;;;N;;;;; 1CF0D;ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON RIGHT;Mn;0;NSM;;;;;N;;;;; 1CF0E;ZNAMENNY COMBINING MARK TSATA ON RIGHT;Mn;0;NSM;;;;;N;;;;; 1CF0F;ZNAMENNY COMBINING MARK GORAZDO NIZKO ON RIGHT;Mn;0;NSM;;;;;N;;;;; 1CF10;ZNAMENNY COMBINING MARK NIZKO ON RIGHT;Mn;0;NSM;;;;;N;;;;; 1CF11;ZNAMENNY COMBINING MARK SREDNE ON RIGHT;Mn;0;NSM;;;;;N;;;;; 1CF12;ZNAMENNY COMBINING MARK MALO POVYSHE ON RIGHT;Mn;0;NSM;;;;;N;;;;; 1CF13;ZNAMENNY COMBINING MARK POVYSHE ON RIGHT;Mn;0;NSM;;;;;N;;;;; 1CF14;ZNAMENNY COMBINING MARK VYSOKO ON RIGHT;Mn;0;NSM;;;;;N;;;;; 1CF15;ZNAMENNY COMBINING MARK MALO POVYSHE S KHOKHLOM ON RIGHT;Mn;0;NSM;;;;;N;;;;; 1CF16;ZNAMENNY COMBINING MARK POVYSHE S KHOKHLOM ON RIGHT;Mn;0;NSM;;;;;N;;;;; 1CF17;ZNAMENNY COMBINING MARK VYSOKO S KHOKHLOM ON RIGHT;Mn;0;NSM;;;;;N;;;;; 1CF18;ZNAMENNY COMBINING MARK TSATA S KRYZHEM;Mn;0;NSM;;;;;N;;;;; 1CF19;ZNAMENNY COMBINING MARK MALO POVYSHE S KRYZHEM;Mn;0;NSM;;;;;N;;;;; 1CF1A;ZNAMENNY COMBINING MARK STRANNO MALO POVYSHE;Mn;0;NSM;;;;;N;;;;; 1CF1B;ZNAMENNY COMBINING MARK POVYSHE S KRYZHEM;Mn;0;NSM;;;;;N;;;;; 1CF1C;ZNAMENNY COMBINING MARK POVYSHE STRANNO;Mn;0;NSM;;;;;N;;;;; 1CF1D;ZNAMENNY COMBINING MARK VYSOKO S KRYZHEM;Mn;0;NSM;;;;;N;;;;; 1CF1E;ZNAMENNY COMBINING MARK MALO POVYSHE STRANNO;Mn;0;NSM;;;;;N;;;;; 1CF1F;ZNAMENNY COMBINING MARK GORAZDO VYSOKO;Mn;0;NSM;;;;;N;;;;; 1CF20;ZNAMENNY COMBINING MARK ZELO;Mn;0;NSM;;;;;N;;;;; 1CF21;ZNAMENNY COMBINING MARK ON;Mn;0;NSM;;;;;N;;;;; 1CF22;ZNAMENNY COMBINING MARK RAVNO;Mn;0;NSM;;;;;N;;;;; 1CF23;ZNAMENNY COMBINING MARK TIKHAYA;Mn;0;NSM;;;;;N;;;;; 1CF24;ZNAMENNY COMBINING MARK BORZAYA;Mn;0;NSM;;;;;N;;;;; 1CF25;ZNAMENNY COMBINING MARK UDARKA;Mn;0;NSM;;;;;N;;;;; 1CF26;ZNAMENNY COMBINING MARK PODVERTKA;Mn;0;NSM;;;;;N;;;;; 1CF27;ZNAMENNY COMBINING MARK LOMKA;Mn;0;NSM;;;;;N;;;;; 1CF28;ZNAMENNY COMBINING MARK KUPNAYA;Mn;0;NSM;;;;;N;;;;; 1CF29;ZNAMENNY COMBINING MARK KACHKA;Mn;0;NSM;;;;;N;;;;; 1CF2A;ZNAMENNY COMBINING MARK ZEVOK;Mn;0;NSM;;;;;N;;;;; 1CF2B;ZNAMENNY COMBINING MARK SKOBA;Mn;0;NSM;;;;;N;;;;; 1CF2C;ZNAMENNY COMBINING MARK RAZSEKA;Mn;0;NSM;;;;;N;;;;; 1CF2D;ZNAMENNY COMBINING MARK KRYZH ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF30;ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO;Mn;0;NSM;;;;;N;;;;; 1CF31;ZNAMENNY COMBINING TONAL RANGE MARK SVETLO;Mn;0;NSM;;;;;N;;;;; 1CF32;ZNAMENNY COMBINING TONAL RANGE MARK TRESVETLO;Mn;0;NSM;;;;;N;;;;; 1CF33;ZNAMENNY COMBINING MARK ZADERZHKA;Mn;0;NSM;;;;;N;;;;; 1CF34;ZNAMENNY COMBINING MARK DEMESTVENNY ZADERZHKA;Mn;0;NSM;;;;;N;;;;; 1CF35;ZNAMENNY COMBINING MARK OTSECHKA;Mn;0;NSM;;;;;N;;;;; 1CF36;ZNAMENNY COMBINING MARK PODCHASHIE;Mn;0;NSM;;;;;N;;;;; 1CF37;ZNAMENNY COMBINING MARK PODCHASHIE WITH VERTICAL STROKE;Mn;0;NSM;;;;;N;;;;; 1CF38;ZNAMENNY COMBINING MARK CHASHKA;Mn;0;NSM;;;;;N;;;;; 1CF39;ZNAMENNY COMBINING MARK CHASHKA POLNAYA;Mn;0;NSM;;;;;N;;;;; 1CF3A;ZNAMENNY COMBINING MARK OBLACHKO;Mn;0;NSM;;;;;N;;;;; 1CF3B;ZNAMENNY COMBINING MARK SOROCHYA NOZHKA;Mn;0;NSM;;;;;N;;;;; 1CF3C;ZNAMENNY COMBINING MARK TOCHKA;Mn;0;NSM;;;;;N;;;;; 1CF3D;ZNAMENNY COMBINING MARK DVOETOCHIE;Mn;0;NSM;;;;;N;;;;; 1CF3E;ZNAMENNY COMBINING ATTACHING VERTICAL OMET;Mn;0;NSM;;;;;N;;;;; 1CF3F;ZNAMENNY COMBINING MARK CURVED OMET;Mn;0;NSM;;;;;N;;;;; 1CF40;ZNAMENNY COMBINING MARK KRYZH;Mn;0;NSM;;;;;N;;;;; 1CF41;ZNAMENNY COMBINING LOWER TONAL RANGE INDICATOR;Mn;0;NSM;;;;;N;;;;; 1CF42;ZNAMENNY PRIZNAK MODIFIER LEVEL-2;Mn;0;NSM;;;;;N;;;;; 1CF43;ZNAMENNY PRIZNAK MODIFIER LEVEL-3;Mn;0;NSM;;;;;N;;;;; 1CF44;ZNAMENNY PRIZNAK MODIFIER DIRECTION FLIP;Mn;0;NSM;;;;;N;;;;; 1CF45;ZNAMENNY PRIZNAK MODIFIER KRYZH;Mn;0;NSM;;;;;N;;;;; 1CF46;ZNAMENNY PRIZNAK MODIFIER ROG;Mn;0;NSM;;;;;N;;;;; 1CF50;ZNAMENNY NEUME KRYUK;So;0;L;;;;;N;;;;; 1CF51;ZNAMENNY NEUME KRYUK TIKHY;So;0;L;;;;;N;;;;; 1CF52;ZNAMENNY NEUME PARAKLIT;So;0;L;;;;;N;;;;; 1CF53;ZNAMENNY NEUME DVA V CHELNU;So;0;L;;;;;N;;;;; 1CF54;ZNAMENNY NEUME KLYUCH;So;0;L;;;;;N;;;;; 1CF55;ZNAMENNY NEUME ZANOZHEK;So;0;L;;;;;N;;;;; 1CF56;ZNAMENNY NEUME STOPITSA;So;0;L;;;;;N;;;;; 1CF57;ZNAMENNY NEUME STOPITSA S OCHKOM;So;0;L;;;;;N;;;;; 1CF58;ZNAMENNY NEUME PEREVODKA;So;0;L;;;;;N;;;;; 1CF59;ZNAMENNY NEUME PEREVODKA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;; 1CF5A;ZNAMENNY NEUME STOPITSA WITH SOROCHYA NOZHKA;So;0;L;;;;;N;;;;; 1CF5B;ZNAMENNY NEUME CHELYUSTKA;So;0;L;;;;;N;;;;; 1CF5C;ZNAMENNY NEUME PALKA;So;0;L;;;;;N;;;;; 1CF5D;ZNAMENNY NEUME ZAPYATAYA;So;0;L;;;;;N;;;;; 1CF5E;ZNAMENNY NEUME GOLUBCHIK BORZY;So;0;L;;;;;N;;;;; 1CF5F;ZNAMENNY NEUME GOLUBCHIK TIKHY;So;0;L;;;;;N;;;;; 1CF60;ZNAMENNY NEUME GOLUBCHIK MRACHNY;So;0;L;;;;;N;;;;; 1CF61;ZNAMENNY NEUME GOLUBCHIK SVETLY;So;0;L;;;;;N;;;;; 1CF62;ZNAMENNY NEUME GOLUBCHIK TRESVETLY;So;0;L;;;;;N;;;;; 1CF63;ZNAMENNY NEUME VRAKHIYA PROSTAYA;So;0;L;;;;;N;;;;; 1CF64;ZNAMENNY NEUME VRAKHIYA MRACHNAYA;So;0;L;;;;;N;;;;; 1CF65;ZNAMENNY NEUME VRAKHIYA SVETLAYA;So;0;L;;;;;N;;;;; 1CF66;ZNAMENNY NEUME VRAKHIYA TRESVETLAYA;So;0;L;;;;;N;;;;; 1CF67;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA PROSTAYA;So;0;L;;;;;N;;;;; 1CF68;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA MRACHNAYA;So;0;L;;;;;N;;;;; 1CF69;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;; 1CF6A;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA TRESVETLAYA;So;0;L;;;;;N;;;;; 1CF6B;ZNAMENNY NEUME DOUBLE ZAPYATAYA;So;0;L;;;;;N;;;;; 1CF6C;ZNAMENNY NEUME REVERSED CHELYUSTKA;So;0;L;;;;;N;;;;; 1CF6D;ZNAMENNY NEUME DERBITSA;So;0;L;;;;;N;;;;; 1CF6E;ZNAMENNY NEUME KHAMILO;So;0;L;;;;;N;;;;; 1CF6F;ZNAMENNY NEUME CHASHKA;So;0;L;;;;;N;;;;; 1CF70;ZNAMENNY NEUME PODCHASHIE;So;0;L;;;;;N;;;;; 1CF71;ZNAMENNY NEUME SKAMEYTSA MRACHNAYA;So;0;L;;;;;N;;;;; 1CF72;ZNAMENNY NEUME SKAMEYTSA SVETLAYA;So;0;L;;;;;N;;;;; 1CF73;ZNAMENNY NEUME SKAMEYTSA TRESVETLAYA;So;0;L;;;;;N;;;;; 1CF74;ZNAMENNY NEUME SKAMEYTSA TIKHAYA;So;0;L;;;;;N;;;;; 1CF75;ZNAMENNY NEUME DEMESTVENNY KLYUCH;So;0;L;;;;;N;;;;; 1CF76;ZNAMENNY NEUME SKAMEYTSA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;; 1CF77;ZNAMENNY NEUME SKAMEYTSA KLYUCHENEPOSTOYANNAYA;So;0;L;;;;;N;;;;; 1CF78;ZNAMENNY NEUME SKAMEYTSA KLYUCHEVAYA TIKHAYA;So;0;L;;;;;N;;;;; 1CF79;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA PROSTAYA;So;0;L;;;;;N;;;;; 1CF7A;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA SVETLAYA;So;0;L;;;;;N;;;;; 1CF7B;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;; 1CF7C;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;; 1CF7D;ZNAMENNY NEUME SLOZHITIE;So;0;L;;;;;N;;;;; 1CF7E;ZNAMENNY NEUME SLOZHITIE S ZAPYATOY;So;0;L;;;;;N;;;;; 1CF7F;ZNAMENNY NEUME SLOZHITIE ZAKRYTOE;So;0;L;;;;;N;;;;; 1CF80;ZNAMENNY NEUME SLOZHITIE S KRYZHEM;So;0;L;;;;;N;;;;; 1CF81;ZNAMENNY NEUME KRYZH;So;0;L;;;;;N;;;;; 1CF82;ZNAMENNY NEUME ROG;So;0;L;;;;;N;;;;; 1CF83;ZNAMENNY NEUME FITA;So;0;L;;;;;N;;;;; 1CF84;ZNAMENNY NEUME KOBYLA;So;0;L;;;;;N;;;;; 1CF85;ZNAMENNY NEUME ZMEYTSA;So;0;L;;;;;N;;;;; 1CF86;ZNAMENNY NEUME STATYA;So;0;L;;;;;N;;;;; 1CF87;ZNAMENNY NEUME STATYA S ZAPYATOY;So;0;L;;;;;N;;;;; 1CF88;ZNAMENNY NEUME STATYA S KRYZHEM;So;0;L;;;;;N;;;;; 1CF89;ZNAMENNY NEUME STATYA S ZAPYATOY I KRYZHEM;So;0;L;;;;;N;;;;; 1CF8A;ZNAMENNY NEUME STATYA S KRYZHEM I ZAPYATOY;So;0;L;;;;;N;;;;; 1CF8B;ZNAMENNY NEUME STATYA ZAKRYTAYA;So;0;L;;;;;N;;;;; 1CF8C;ZNAMENNY NEUME STATYA ZAKRYTAYA S ZAPYATOY;So;0;L;;;;;N;;;;; 1CF8D;ZNAMENNY NEUME STATYA S ROGOM;So;0;L;;;;;N;;;;; 1CF8E;ZNAMENNY NEUME STATYA S DVUMYA ZAPYATYMI;So;0;L;;;;;N;;;;; 1CF8F;ZNAMENNY NEUME STATYA S ZAPYATOY I PODCHASHIEM;So;0;L;;;;;N;;;;; 1CF90;ZNAMENNY NEUME POLKULIZMY;So;0;L;;;;;N;;;;; 1CF91;ZNAMENNY NEUME STATYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;; 1CF92;ZNAMENNY NEUME STRELA PROSTAYA;So;0;L;;;;;N;;;;; 1CF93;ZNAMENNY NEUME STRELA MRACHNOTIKHAYA;So;0;L;;;;;N;;;;; 1CF94;ZNAMENNY NEUME STRELA KRYZHEVAYA;So;0;L;;;;;N;;;;; 1CF95;ZNAMENNY NEUME STRELA POLUPOVODNAYA;So;0;L;;;;;N;;;;; 1CF96;ZNAMENNY NEUME STRELA POVODNAYA;So;0;L;;;;;N;;;;; 1CF97;ZNAMENNY NEUME STRELA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;; 1CF98;ZNAMENNY NEUME STRELA KLYUCHEPOVODNAYA;So;0;L;;;;;N;;;;; 1CF99;ZNAMENNY NEUME STRELA KLYUCHENEPOSTOYANNAYA;So;0;L;;;;;N;;;;; 1CF9A;ZNAMENNY NEUME STRELA TIKHAYA PUTNAYA;So;0;L;;;;;N;;;;; 1CF9B;ZNAMENNY NEUME STRELA DVOECHELNAYA;So;0;L;;;;;N;;;;; 1CF9C;ZNAMENNY NEUME STRELA DVOECHELNOKRYZHEVAYA;So;0;L;;;;;N;;;;; 1CF9D;ZNAMENNY NEUME STRELA DVOECHELNOPOVODNAYA;So;0;L;;;;;N;;;;; 1CF9E;ZNAMENNY NEUME STRELA DVOECHELNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;; 1CF9F;ZNAMENNY NEUME STRELA DVOECHELNOPOVODNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;; 1CFA0;ZNAMENNY NEUME STRELA GROMNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;; 1CFA1;ZNAMENNY NEUME STRELA GROMOPOVODNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;; 1CFA2;ZNAMENNY NEUME STRELA GROMNAYA;So;0;L;;;;;N;;;;; 1CFA3;ZNAMENNY NEUME STRELA GROMOPOVODNAYA;So;0;L;;;;;N;;;;; 1CFA4;ZNAMENNY NEUME STRELA GROMOPOVODNAYA WITH DOUBLE ZAPYATAYA;So;0;L;;;;;N;;;;; 1CFA5;ZNAMENNY NEUME STRELA GROMOKRYZHEVAYA;So;0;L;;;;;N;;;;; 1CFA6;ZNAMENNY NEUME STRELA GROMOKRYZHEVAYA POVODNAYA;So;0;L;;;;;N;;;;; 1CFA7;ZNAMENNY NEUME MECHIK;So;0;L;;;;;N;;;;; 1CFA8;ZNAMENNY NEUME MECHIK POVODNY;So;0;L;;;;;N;;;;; 1CFA9;ZNAMENNY NEUME MECHIK KLYUCHEVOY;So;0;L;;;;;N;;;;; 1CFAA;ZNAMENNY NEUME MECHIK KLYUCHEPOVODNY;So;0;L;;;;;N;;;;; 1CFAB;ZNAMENNY NEUME MECHIK KLYUCHENEPOSTOYANNY;So;0;L;;;;;N;;;;; 1CFAC;ZNAMENNY NEUME STRELA TRYASOGLASNAYA;So;0;L;;;;;N;;;;; 1CFAD;ZNAMENNY NEUME STRELA TRYASOPOVODNAYA;So;0;L;;;;;N;;;;; 1CFAE;ZNAMENNY NEUME STRELA TRYASOSTRELNAYA;So;0;L;;;;;N;;;;; 1CFAF;ZNAMENNY NEUME OSOKA;So;0;L;;;;;N;;;;; 1CFB0;ZNAMENNY NEUME OSOKA SVETLAYA;So;0;L;;;;;N;;;;; 1CFB1;ZNAMENNY NEUME OSOKA TRESVETLAYA;So;0;L;;;;;N;;;;; 1CFB2;ZNAMENNY NEUME OSOKA KRYUKOVAYA SVETLAYA;So;0;L;;;;;N;;;;; 1CFB3;ZNAMENNY NEUME OSOKA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;; 1CFB4;ZNAMENNY NEUME OSOKA KLYUCHEVAYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;; 1CFB5;ZNAMENNY NEUME STRELA KRYUKOVAYA;So;0;L;;;;;N;;;;; 1CFB6;ZNAMENNY NEUME STRELA KRYUKOVAYA POVODNAYA;So;0;L;;;;;N;;;;; 1CFB7;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;; 1CFB8;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;; 1CFB9;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMNAYA;So;0;L;;;;;N;;;;; 1CFBA;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA;So;0;L;;;;;N;;;;; 1CFBB;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA WITH DOUBLE ZAPYATAYA;So;0;L;;;;;N;;;;; 1CFBC;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOKRYZHEVAYA;So;0;L;;;;;N;;;;; 1CFBD;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOKRYZHEVAYA POVODNAYA;So;0;L;;;;;N;;;;; 1CFBE;ZNAMENNY NEUME STRELA KRYUKOVAYA TRYASKA;So;0;L;;;;;N;;;;; 1CFBF;ZNAMENNY NEUME KUFISMA;So;0;L;;;;;N;;;;; 1CFC0;ZNAMENNY NEUME OBLAKO;So;0;L;;;;;N;;;;; 1CFC1;ZNAMENNY NEUME DUDA;So;0;L;;;;;N;;;;; 1CFC2;ZNAMENNY NEUME NEMKA;So;0;L;;;;;N;;;;; 1CFC3;ZNAMENNY NEUME PAUK;So;0;L;;;;;N;;;;; 1D000;BYZANTINE MUSICAL SYMBOL PSILI;So;0;L;;;;;N;;;;; 1D001;BYZANTINE MUSICAL SYMBOL DASEIA;So;0;L;;;;;N;;;;; 1D002;BYZANTINE MUSICAL SYMBOL PERISPOMENI;So;0;L;;;;;N;;;;; 1D003;BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON;So;0;L;;;;;N;;;;; 1D004;BYZANTINE MUSICAL SYMBOL OXEIA DIPLI;So;0;L;;;;;N;;;;; 1D005;BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON;So;0;L;;;;;N;;;;; 1D006;BYZANTINE MUSICAL SYMBOL VAREIA DIPLI;So;0;L;;;;;N;;;;; 1D007;BYZANTINE MUSICAL SYMBOL KATHISTI;So;0;L;;;;;N;;;;; 1D008;BYZANTINE MUSICAL SYMBOL SYRMATIKI;So;0;L;;;;;N;;;;; 1D009;BYZANTINE MUSICAL SYMBOL PARAKLITIKI;So;0;L;;;;;N;;;;; 1D00A;BYZANTINE MUSICAL SYMBOL YPOKRISIS;So;0;L;;;;;N;;;;; 1D00B;BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI;So;0;L;;;;;N;;;;; 1D00C;BYZANTINE MUSICAL SYMBOL KREMASTI;So;0;L;;;;;N;;;;; 1D00D;BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON;So;0;L;;;;;N;;;;; 1D00E;BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON;So;0;L;;;;;N;;;;; 1D00F;BYZANTINE MUSICAL SYMBOL TELEIA;So;0;L;;;;;N;;;;; 1D010;BYZANTINE MUSICAL SYMBOL KENTIMATA;So;0;L;;;;;N;;;;; 1D011;BYZANTINE MUSICAL SYMBOL APOSTROFOS;So;0;L;;;;;N;;;;; 1D012;BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI;So;0;L;;;;;N;;;;; 1D013;BYZANTINE MUSICAL SYMBOL SYNEVMA;So;0;L;;;;;N;;;;; 1D014;BYZANTINE MUSICAL SYMBOL THITA;So;0;L;;;;;N;;;;; 1D015;BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION;So;0;L;;;;;N;;;;; 1D016;BYZANTINE MUSICAL SYMBOL GORGON ARCHAION;So;0;L;;;;;N;;;;; 1D017;BYZANTINE MUSICAL SYMBOL PSILON;So;0;L;;;;;N;;;;; 1D018;BYZANTINE MUSICAL SYMBOL CHAMILON;So;0;L;;;;;N;;;;; 1D019;BYZANTINE MUSICAL SYMBOL VATHY;So;0;L;;;;;N;;;;; 1D01A;BYZANTINE MUSICAL SYMBOL ISON ARCHAION;So;0;L;;;;;N;;;;; 1D01B;BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION;So;0;L;;;;;N;;;;; 1D01C;BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION;So;0;L;;;;;N;;;;; 1D01D;BYZANTINE MUSICAL SYMBOL SAXIMATA;So;0;L;;;;;N;;;;; 1D01E;BYZANTINE MUSICAL SYMBOL PARICHON;So;0;L;;;;;N;;;;; 1D01F;BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA;So;0;L;;;;;N;;;;; 1D020;BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION;So;0;L;;;;;N;;;;; 1D021;BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION;So;0;L;;;;;N;;;;; 1D022;BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION;So;0;L;;;;;N;;;;; 1D023;BYZANTINE MUSICAL SYMBOL APOTHEMA;So;0;L;;;;;N;;;;; 1D024;BYZANTINE MUSICAL SYMBOL KLASMA;So;0;L;;;;;N;;;;; 1D025;BYZANTINE MUSICAL SYMBOL REVMA;So;0;L;;;;;N;;;;; 1D026;BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION;So;0;L;;;;;N;;;;; 1D027;BYZANTINE MUSICAL SYMBOL TINAGMA;So;0;L;;;;;N;;;;; 1D028;BYZANTINE MUSICAL SYMBOL ANATRICHISMA;So;0;L;;;;;N;;;;; 1D029;BYZANTINE MUSICAL SYMBOL SEISMA;So;0;L;;;;;N;;;;; 1D02A;BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION;So;0;L;;;;;N;;;;; 1D02B;BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU;So;0;L;;;;;N;;;;; 1D02C;BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION;So;0;L;;;;;N;;;;; 1D02D;BYZANTINE MUSICAL SYMBOL THEMA;So;0;L;;;;;N;;;;; 1D02E;BYZANTINE MUSICAL SYMBOL LEMOI;So;0;L;;;;;N;;;;; 1D02F;BYZANTINE MUSICAL SYMBOL DYO;So;0;L;;;;;N;;;;; 1D030;BYZANTINE MUSICAL SYMBOL TRIA;So;0;L;;;;;N;;;;; 1D031;BYZANTINE MUSICAL SYMBOL TESSERA;So;0;L;;;;;N;;;;; 1D032;BYZANTINE MUSICAL SYMBOL KRATIMATA;So;0;L;;;;;N;;;;; 1D033;BYZANTINE MUSICAL SYMBOL APESO EXO NEO;So;0;L;;;;;N;;;;; 1D034;BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION;So;0;L;;;;;N;;;;; 1D035;BYZANTINE MUSICAL SYMBOL IMIFTHORA;So;0;L;;;;;N;;;;; 1D036;BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION;So;0;L;;;;;N;;;;; 1D037;BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON;So;0;L;;;;;N;;;;; 1D038;BYZANTINE MUSICAL SYMBOL PELASTON;So;0;L;;;;;N;;;;; 1D039;BYZANTINE MUSICAL SYMBOL PSIFISTON;So;0;L;;;;;N;;;;; 1D03A;BYZANTINE MUSICAL SYMBOL KONTEVMA;So;0;L;;;;;N;;;;; 1D03B;BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION;So;0;L;;;;;N;;;;; 1D03C;BYZANTINE MUSICAL SYMBOL RAPISMA;So;0;L;;;;;N;;;;; 1D03D;BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION;So;0;L;;;;;N;;;;; 1D03E;BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION;So;0;L;;;;;N;;;;; 1D03F;BYZANTINE MUSICAL SYMBOL ICHADIN;So;0;L;;;;;N;;;;; 1D040;BYZANTINE MUSICAL SYMBOL NANA;So;0;L;;;;;N;;;;; 1D041;BYZANTINE MUSICAL SYMBOL PETASMA;So;0;L;;;;;N;;;;; 1D042;BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO;So;0;L;;;;;N;;;;; 1D043;BYZANTINE MUSICAL SYMBOL TROMIKON ALLO;So;0;L;;;;;N;;;;; 1D044;BYZANTINE MUSICAL SYMBOL STRAGGISMATA;So;0;L;;;;;N;;;;; 1D045;BYZANTINE MUSICAL SYMBOL GRONTHISMATA;So;0;L;;;;;N;;;;; 1D046;BYZANTINE MUSICAL SYMBOL ISON NEO;So;0;L;;;;;N;;;;; 1D047;BYZANTINE MUSICAL SYMBOL OLIGON NEO;So;0;L;;;;;N;;;;; 1D048;BYZANTINE MUSICAL SYMBOL OXEIA NEO;So;0;L;;;;;N;;;;; 1D049;BYZANTINE MUSICAL SYMBOL PETASTI;So;0;L;;;;;N;;;;; 1D04A;BYZANTINE MUSICAL SYMBOL KOUFISMA;So;0;L;;;;;N;;;;; 1D04B;BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA;So;0;L;;;;;N;;;;; 1D04C;BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA;So;0;L;;;;;N;;;;; 1D04D;BYZANTINE MUSICAL SYMBOL PELASTON NEO;So;0;L;;;;;N;;;;; 1D04E;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO;So;0;L;;;;;N;;;;; 1D04F;BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO;So;0;L;;;;;N;;;;; 1D050;BYZANTINE MUSICAL SYMBOL YPSILI;So;0;L;;;;;N;;;;; 1D051;BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO;So;0;L;;;;;N;;;;; 1D052;BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO;So;0;L;;;;;N;;;;; 1D053;BYZANTINE MUSICAL SYMBOL YPORROI;So;0;L;;;;;N;;;;; 1D054;BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON;So;0;L;;;;;N;;;;; 1D055;BYZANTINE MUSICAL SYMBOL ELAFRON;So;0;L;;;;;N;;;;; 1D056;BYZANTINE MUSICAL SYMBOL CHAMILI;So;0;L;;;;;N;;;;; 1D057;BYZANTINE MUSICAL SYMBOL MIKRON ISON;So;0;L;;;;;N;;;;; 1D058;BYZANTINE MUSICAL SYMBOL VAREIA NEO;So;0;L;;;;;N;;;;; 1D059;BYZANTINE MUSICAL SYMBOL PIASMA NEO;So;0;L;;;;;N;;;;; 1D05A;BYZANTINE MUSICAL SYMBOL PSIFISTON NEO;So;0;L;;;;;N;;;;; 1D05B;BYZANTINE MUSICAL SYMBOL OMALON;So;0;L;;;;;N;;;;; 1D05C;BYZANTINE MUSICAL SYMBOL ANTIKENOMA;So;0;L;;;;;N;;;;; 1D05D;BYZANTINE MUSICAL SYMBOL LYGISMA;So;0;L;;;;;N;;;;; 1D05E;BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO;So;0;L;;;;;N;;;;; 1D05F;BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO;So;0;L;;;;;N;;;;; 1D060;BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA;So;0;L;;;;;N;;;;; 1D061;BYZANTINE MUSICAL SYMBOL KYLISMA;So;0;L;;;;;N;;;;; 1D062;BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA;So;0;L;;;;;N;;;;; 1D063;BYZANTINE MUSICAL SYMBOL TROMIKON NEO;So;0;L;;;;;N;;;;; 1D064;BYZANTINE MUSICAL SYMBOL EKSTREPTON;So;0;L;;;;;N;;;;; 1D065;BYZANTINE MUSICAL SYMBOL SYNAGMA NEO;So;0;L;;;;;N;;;;; 1D066;BYZANTINE MUSICAL SYMBOL SYRMA;So;0;L;;;;;N;;;;; 1D067;BYZANTINE MUSICAL SYMBOL CHOREVMA NEO;So;0;L;;;;;N;;;;; 1D068;BYZANTINE MUSICAL SYMBOL EPEGERMA;So;0;L;;;;;N;;;;; 1D069;BYZANTINE MUSICAL SYMBOL SEISMA NEO;So;0;L;;;;;N;;;;; 1D06A;BYZANTINE MUSICAL SYMBOL XIRON KLASMA;So;0;L;;;;;N;;;;; 1D06B;BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON;So;0;L;;;;;N;;;;; 1D06C;BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA;So;0;L;;;;;N;;;;; 1D06D;BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA;So;0;L;;;;;N;;;;; 1D06E;BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA;So;0;L;;;;;N;;;;; 1D06F;BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA;So;0;L;;;;;N;;;;; 1D070;BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA;So;0;L;;;;;N;;;;; 1D071;BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA;So;0;L;;;;;N;;;;; 1D072;BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON;So;0;L;;;;;N;;;;; 1D073;BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON;So;0;L;;;;;N;;;;; 1D074;BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON;So;0;L;;;;;N;;;;; 1D075;BYZANTINE MUSICAL SYMBOL OYRANISMA NEO;So;0;L;;;;;N;;;;; 1D076;BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO;So;0;L;;;;;N;;;;; 1D077;BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO;So;0;L;;;;;N;;;;; 1D078;BYZANTINE MUSICAL SYMBOL THEMA APLOUN;So;0;L;;;;;N;;;;; 1D079;BYZANTINE MUSICAL SYMBOL THES KAI APOTHES;So;0;L;;;;;N;;;;; 1D07A;BYZANTINE MUSICAL SYMBOL KATAVASMA;So;0;L;;;;;N;;;;; 1D07B;BYZANTINE MUSICAL SYMBOL ENDOFONON;So;0;L;;;;;N;;;;; 1D07C;BYZANTINE MUSICAL SYMBOL YFEN KATO;So;0;L;;;;;N;;;;; 1D07D;BYZANTINE MUSICAL SYMBOL YFEN ANO;So;0;L;;;;;N;;;;; 1D07E;BYZANTINE MUSICAL SYMBOL STAVROS;So;0;L;;;;;N;;;;; 1D07F;BYZANTINE MUSICAL SYMBOL KLASMA ANO;So;0;L;;;;;N;;;;; 1D080;BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION;So;0;L;;;;;N;;;;; 1D081;BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION;So;0;L;;;;;N;;;;; 1D082;BYZANTINE MUSICAL SYMBOL KRATIMA ALLO;So;0;L;;;;;N;;;;; 1D083;BYZANTINE MUSICAL SYMBOL KRATIMA NEO;So;0;L;;;;;N;;;;; 1D084;BYZANTINE MUSICAL SYMBOL APODERMA NEO;So;0;L;;;;;N;;;;; 1D085;BYZANTINE MUSICAL SYMBOL APLI;So;0;L;;;;;N;;;;; 1D086;BYZANTINE MUSICAL SYMBOL DIPLI;So;0;L;;;;;N;;;;; 1D087;BYZANTINE MUSICAL SYMBOL TRIPLI;So;0;L;;;;;N;;;;; 1D088;BYZANTINE MUSICAL SYMBOL TETRAPLI;So;0;L;;;;;N;;;;; 1D089;BYZANTINE MUSICAL SYMBOL KORONIS;So;0;L;;;;;N;;;;; 1D08A;BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU;So;0;L;;;;;N;;;;; 1D08B;BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON;So;0;L;;;;;N;;;;; 1D08C;BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON;So;0;L;;;;;N;;;;; 1D08D;BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON;So;0;L;;;;;N;;;;; 1D08E;BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU;So;0;L;;;;;N;;;;; 1D08F;BYZANTINE MUSICAL SYMBOL GORGON NEO ANO;So;0;L;;;;;N;;;;; 1D090;BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA;So;0;L;;;;;N;;;;; 1D091;BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA;So;0;L;;;;;N;;;;; 1D092;BYZANTINE MUSICAL SYMBOL DIGORGON;So;0;L;;;;;N;;;;; 1D093;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO;So;0;L;;;;;N;;;;; 1D094;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO;So;0;L;;;;;N;;;;; 1D095;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA;So;0;L;;;;;N;;;;; 1D096;BYZANTINE MUSICAL SYMBOL TRIGORGON;So;0;L;;;;;N;;;;; 1D097;BYZANTINE MUSICAL SYMBOL ARGON;So;0;L;;;;;N;;;;; 1D098;BYZANTINE MUSICAL SYMBOL IMIDIARGON;So;0;L;;;;;N;;;;; 1D099;BYZANTINE MUSICAL SYMBOL DIARGON;So;0;L;;;;;N;;;;; 1D09A;BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI;So;0;L;;;;;N;;;;; 1D09B;BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI;So;0;L;;;;;N;;;;; 1D09C;BYZANTINE MUSICAL SYMBOL AGOGI ARGI;So;0;L;;;;;N;;;;; 1D09D;BYZANTINE MUSICAL SYMBOL AGOGI METRIA;So;0;L;;;;;N;;;;; 1D09E;BYZANTINE MUSICAL SYMBOL AGOGI MESI;So;0;L;;;;;N;;;;; 1D09F;BYZANTINE MUSICAL SYMBOL AGOGI GORGI;So;0;L;;;;;N;;;;; 1D0A0;BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI;So;0;L;;;;;N;;;;; 1D0A1;BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI;So;0;L;;;;;N;;;;; 1D0A2;BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS;So;0;L;;;;;N;;;;; 1D0A3;BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS;So;0;L;;;;;N;;;;; 1D0A4;BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS;So;0;L;;;;;N;;;;; 1D0A5;BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS;So;0;L;;;;;N;;;;; 1D0A6;BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS;So;0;L;;;;;N;;;;; 1D0A7;BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS;So;0;L;;;;;N;;;;; 1D0A8;BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS;So;0;L;;;;;N;;;;; 1D0A9;BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS;So;0;L;;;;;N;;;;; 1D0AA;BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS;So;0;L;;;;;N;;;;; 1D0AB;BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS;So;0;L;;;;;N;;;;; 1D0AC;BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS;So;0;L;;;;;N;;;;; 1D0AD;BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS;So;0;L;;;;;N;;;;; 1D0AE;BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS;So;0;L;;;;;N;;;;; 1D0AF;BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS;So;0;L;;;;;N;;;;; 1D0B0;BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS;So;0;L;;;;;N;;;;; 1D0B1;BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS;So;0;L;;;;;N;;;;; 1D0B2;BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS;So;0;L;;;;;N;;;;; 1D0B3;BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS;So;0;L;;;;;N;;;;; 1D0B4;BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN;So;0;L;;;;;N;;;;; 1D0B5;BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN;So;0;L;;;;;N;;;;; 1D0B6;BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU;So;0;L;;;;;N;;;;; 1D0B7;BYZANTINE MUSICAL SYMBOL IMIFONON;So;0;L;;;;;N;;;;; 1D0B8;BYZANTINE MUSICAL SYMBOL IMIFTHORON;So;0;L;;;;;N;;;;; 1D0B9;BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU;So;0;L;;;;;N;;;;; 1D0BA;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA;So;0;L;;;;;N;;;;; 1D0BB;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA;So;0;L;;;;;N;;;;; 1D0BC;BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS;So;0;L;;;;;N;;;;; 1D0BD;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI;So;0;L;;;;;N;;;;; 1D0BE;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI;So;0;L;;;;;N;;;;; 1D0BF;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE;So;0;L;;;;;N;;;;; 1D0C0;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO;So;0;L;;;;;N;;;;; 1D0C1;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO;So;0;L;;;;;N;;;;; 1D0C2;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO;So;0;L;;;;;N;;;;; 1D0C3;BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS;So;0;L;;;;;N;;;;; 1D0C4;BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS;So;0;L;;;;;N;;;;; 1D0C5;BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS;So;0;L;;;;;N;;;;; 1D0C6;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI;So;0;L;;;;;N;;;;; 1D0C7;BYZANTINE MUSICAL SYMBOL FTHORA NENANO;So;0;L;;;;;N;;;;; 1D0C8;BYZANTINE MUSICAL SYMBOL CHROA ZYGOS;So;0;L;;;;;N;;;;; 1D0C9;BYZANTINE MUSICAL SYMBOL CHROA KLITON;So;0;L;;;;;N;;;;; 1D0CA;BYZANTINE MUSICAL SYMBOL CHROA SPATHI;So;0;L;;;;;N;;;;; 1D0CB;BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION;So;0;L;;;;;N;;;;; 1D0CC;BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA;So;0;L;;;;;N;;;;; 1D0CD;BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION;So;0;L;;;;;N;;;;; 1D0CE;BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION;So;0;L;;;;;N;;;;; 1D0CF;BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION;So;0;L;;;;;N;;;;; 1D0D0;BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA;So;0;L;;;;;N;;;;; 1D0D1;BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA;So;0;L;;;;;N;;;;; 1D0D2;BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA;So;0;L;;;;;N;;;;; 1D0D3;BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA;So;0;L;;;;;N;;;;; 1D0D4;BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA;So;0;L;;;;;N;;;;; 1D0D5;BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA;So;0;L;;;;;N;;;;; 1D0D6;BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA;So;0;L;;;;;N;;;;; 1D0D7;BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA;So;0;L;;;;;N;;;;; 1D0D8;BYZANTINE MUSICAL SYMBOL GENIKI DIESIS;So;0;L;;;;;N;;;;; 1D0D9;BYZANTINE MUSICAL SYMBOL GENIKI YFESIS;So;0;L;;;;;N;;;;; 1D0DA;BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI;So;0;L;;;;;N;;;;; 1D0DB;BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI;So;0;L;;;;;N;;;;; 1D0DC;BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI;So;0;L;;;;;N;;;;; 1D0DD;BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS;So;0;L;;;;;N;;;;; 1D0DE;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS;So;0;L;;;;;N;;;;; 1D0DF;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU;So;0;L;;;;;N;;;;; 1D0E0;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU;So;0;L;;;;;N;;;;; 1D0E1;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU;So;0;L;;;;;N;;;;; 1D0E2;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS;So;0;L;;;;;N;;;;; 1D0E3;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU;So;0;L;;;;;N;;;;; 1D0E4;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU;So;0;L;;;;;N;;;;; 1D0E5;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU;So;0;L;;;;;N;;;;; 1D0E6;BYZANTINE MUSICAL SYMBOL DIGRAMMA GG;So;0;L;;;;;N;;;;; 1D0E7;BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU;So;0;L;;;;;N;;;;; 1D0E8;BYZANTINE MUSICAL SYMBOL STIGMA;So;0;L;;;;;N;;;;; 1D0E9;BYZANTINE MUSICAL SYMBOL ARKTIKO PA;So;0;L;;;;;N;;;;; 1D0EA;BYZANTINE MUSICAL SYMBOL ARKTIKO VOU;So;0;L;;;;;N;;;;; 1D0EB;BYZANTINE MUSICAL SYMBOL ARKTIKO GA;So;0;L;;;;;N;;;;; 1D0EC;BYZANTINE MUSICAL SYMBOL ARKTIKO DI;So;0;L;;;;;N;;;;; 1D0ED;BYZANTINE MUSICAL SYMBOL ARKTIKO KE;So;0;L;;;;;N;;;;; 1D0EE;BYZANTINE MUSICAL SYMBOL ARKTIKO ZO;So;0;L;;;;;N;;;;; 1D0EF;BYZANTINE MUSICAL SYMBOL ARKTIKO NI;So;0;L;;;;;N;;;;; 1D0F0;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO;So;0;L;;;;;N;;;;; 1D0F1;BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO;So;0;L;;;;;N;;;;; 1D0F2;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO;So;0;L;;;;;N;;;;; 1D0F3;BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO;So;0;L;;;;;N;;;;; 1D0F4;BYZANTINE MUSICAL SYMBOL KLASMA KATO;So;0;L;;;;;N;;;;; 1D0F5;BYZANTINE MUSICAL SYMBOL GORGON NEO KATO;So;0;L;;;;;N;;;;; 1D100;MUSICAL SYMBOL SINGLE BARLINE;So;0;L;;;;;N;;;;; 1D101;MUSICAL SYMBOL DOUBLE BARLINE;So;0;L;;;;;N;;;;; 1D102;MUSICAL SYMBOL FINAL BARLINE;So;0;L;;;;;N;;;;; 1D103;MUSICAL SYMBOL REVERSE FINAL BARLINE;So;0;L;;;;;N;;;;; 1D104;MUSICAL SYMBOL DASHED BARLINE;So;0;L;;;;;N;;;;; 1D105;MUSICAL SYMBOL SHORT BARLINE;So;0;L;;;;;N;;;;; 1D106;MUSICAL SYMBOL LEFT REPEAT SIGN;So;0;L;;;;;N;;;;; 1D107;MUSICAL SYMBOL RIGHT REPEAT SIGN;So;0;L;;;;;N;;;;; 1D108;MUSICAL SYMBOL REPEAT DOTS;So;0;L;;;;;N;;;;; 1D109;MUSICAL SYMBOL DAL SEGNO;So;0;L;;;;;N;;;;; 1D10A;MUSICAL SYMBOL DA CAPO;So;0;L;;;;;N;;;;; 1D10B;MUSICAL SYMBOL SEGNO;So;0;L;;;;;N;;;;; 1D10C;MUSICAL SYMBOL CODA;So;0;L;;;;;N;;;;; 1D10D;MUSICAL SYMBOL REPEATED FIGURE-1;So;0;L;;;;;N;;;;; 1D10E;MUSICAL SYMBOL REPEATED FIGURE-2;So;0;L;;;;;N;;;;; 1D10F;MUSICAL SYMBOL REPEATED FIGURE-3;So;0;L;;;;;N;;;;; 1D110;MUSICAL SYMBOL FERMATA;So;0;L;;;;;N;;;;; 1D111;MUSICAL SYMBOL FERMATA BELOW;So;0;L;;;;;N;;;;; 1D112;MUSICAL SYMBOL BREATH MARK;So;0;L;;;;;N;;;;; 1D113;MUSICAL SYMBOL CAESURA;So;0;L;;;;;N;;;;; 1D114;MUSICAL SYMBOL BRACE;So;0;L;;;;;N;;;;; 1D115;MUSICAL SYMBOL BRACKET;So;0;L;;;;;N;;;;; 1D116;MUSICAL SYMBOL ONE-LINE STAFF;So;0;L;;;;;N;;;;; 1D117;MUSICAL SYMBOL TWO-LINE STAFF;So;0;L;;;;;N;;;;; 1D118;MUSICAL SYMBOL THREE-LINE STAFF;So;0;L;;;;;N;;;;; 1D119;MUSICAL SYMBOL FOUR-LINE STAFF;So;0;L;;;;;N;;;;; 1D11A;MUSICAL SYMBOL FIVE-LINE STAFF;So;0;L;;;;;N;;;;; 1D11B;MUSICAL SYMBOL SIX-LINE STAFF;So;0;L;;;;;N;;;;; 1D11C;MUSICAL SYMBOL SIX-STRING FRETBOARD;So;0;L;;;;;N;;;;; 1D11D;MUSICAL SYMBOL FOUR-STRING FRETBOARD;So;0;L;;;;;N;;;;; 1D11E;MUSICAL SYMBOL G CLEF;So;0;L;;;;;N;;;;; 1D11F;MUSICAL SYMBOL G CLEF OTTAVA ALTA;So;0;L;;;;;N;;;;; 1D120;MUSICAL SYMBOL G CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;; 1D121;MUSICAL SYMBOL C CLEF;So;0;L;;;;;N;;;;; 1D122;MUSICAL SYMBOL F CLEF;So;0;L;;;;;N;;;;; 1D123;MUSICAL SYMBOL F CLEF OTTAVA ALTA;So;0;L;;;;;N;;;;; 1D124;MUSICAL SYMBOL F CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;; 1D125;MUSICAL SYMBOL DRUM CLEF-1;So;0;L;;;;;N;;;;; 1D126;MUSICAL SYMBOL DRUM CLEF-2;So;0;L;;;;;N;;;;; 1D129;MUSICAL SYMBOL MULTIPLE MEASURE REST;So;0;L;;;;;N;;;;; 1D12A;MUSICAL SYMBOL DOUBLE SHARP;So;0;L;;;;;N;;;;; 1D12B;MUSICAL SYMBOL DOUBLE FLAT;So;0;L;;;;;N;;;;; 1D12C;MUSICAL SYMBOL FLAT UP;So;0;L;;;;;N;;;;; 1D12D;MUSICAL SYMBOL FLAT DOWN;So;0;L;;;;;N;;;;; 1D12E;MUSICAL SYMBOL NATURAL UP;So;0;L;;;;;N;;;;; 1D12F;MUSICAL SYMBOL NATURAL DOWN;So;0;L;;;;;N;;;;; 1D130;MUSICAL SYMBOL SHARP UP;So;0;L;;;;;N;;;;; 1D131;MUSICAL SYMBOL SHARP DOWN;So;0;L;;;;;N;;;;; 1D132;MUSICAL SYMBOL QUARTER TONE SHARP;So;0;L;;;;;N;;;;; 1D133;MUSICAL SYMBOL QUARTER TONE FLAT;So;0;L;;;;;N;;;;; 1D134;MUSICAL SYMBOL COMMON TIME;So;0;L;;;;;N;;;;; 1D135;MUSICAL SYMBOL CUT TIME;So;0;L;;;;;N;;;;; 1D136;MUSICAL SYMBOL OTTAVA ALTA;So;0;L;;;;;N;;;;; 1D137;MUSICAL SYMBOL OTTAVA BASSA;So;0;L;;;;;N;;;;; 1D138;MUSICAL SYMBOL QUINDICESIMA ALTA;So;0;L;;;;;N;;;;; 1D139;MUSICAL SYMBOL QUINDICESIMA BASSA;So;0;L;;;;;N;;;;; 1D13A;MUSICAL SYMBOL MULTI REST;So;0;L;;;;;N;;;;; 1D13B;MUSICAL SYMBOL WHOLE REST;So;0;L;;;;;N;;;;; 1D13C;MUSICAL SYMBOL HALF REST;So;0;L;;;;;N;;;;; 1D13D;MUSICAL SYMBOL QUARTER REST;So;0;L;;;;;N;;;;; 1D13E;MUSICAL SYMBOL EIGHTH REST;So;0;L;;;;;N;;;;; 1D13F;MUSICAL SYMBOL SIXTEENTH REST;So;0;L;;;;;N;;;;; 1D140;MUSICAL SYMBOL THIRTY-SECOND REST;So;0;L;;;;;N;;;;; 1D141;MUSICAL SYMBOL SIXTY-FOURTH REST;So;0;L;;;;;N;;;;; 1D142;MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST;So;0;L;;;;;N;;;;; 1D143;MUSICAL SYMBOL X NOTEHEAD;So;0;L;;;;;N;;;;; 1D144;MUSICAL SYMBOL PLUS NOTEHEAD;So;0;L;;;;;N;;;;; 1D145;MUSICAL SYMBOL CIRCLE X NOTEHEAD;So;0;L;;;;;N;;;;; 1D146;MUSICAL SYMBOL SQUARE NOTEHEAD WHITE;So;0;L;;;;;N;;;;; 1D147;MUSICAL SYMBOL SQUARE NOTEHEAD BLACK;So;0;L;;;;;N;;;;; 1D148;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE;So;0;L;;;;;N;;;;; 1D149;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK;So;0;L;;;;;N;;;;; 1D14A;MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE;So;0;L;;;;;N;;;;; 1D14B;MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK;So;0;L;;;;;N;;;;; 1D14C;MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE;So;0;L;;;;;N;;;;; 1D14D;MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK;So;0;L;;;;;N;;;;; 1D14E;MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE;So;0;L;;;;;N;;;;; 1D14F;MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK;So;0;L;;;;;N;;;;; 1D150;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE;So;0;L;;;;;N;;;;; 1D151;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK;So;0;L;;;;;N;;;;; 1D152;MUSICAL SYMBOL MOON NOTEHEAD WHITE;So;0;L;;;;;N;;;;; 1D153;MUSICAL SYMBOL MOON NOTEHEAD BLACK;So;0;L;;;;;N;;;;; 1D154;MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE;So;0;L;;;;;N;;;;; 1D155;MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK;So;0;L;;;;;N;;;;; 1D156;MUSICAL SYMBOL PARENTHESIS NOTEHEAD;So;0;L;;;;;N;;;;; 1D157;MUSICAL SYMBOL VOID NOTEHEAD;So;0;L;;;;;N;;;;; 1D158;MUSICAL SYMBOL NOTEHEAD BLACK;So;0;L;;;;;N;;;;; 1D159;MUSICAL SYMBOL NULL NOTEHEAD;So;0;L;;;;;N;;;;; 1D15A;MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE;So;0;L;;;;;N;;;;; 1D15B;MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK;So;0;L;;;;;N;;;;; 1D15C;MUSICAL SYMBOL BREVE;So;0;L;;;;;N;;;;; 1D15D;MUSICAL SYMBOL WHOLE NOTE;So;0;L;;;;;N;;;;; 1D15E;MUSICAL SYMBOL HALF NOTE;So;0;L;1D157 1D165;;;;N;;;;; 1D15F;MUSICAL SYMBOL QUARTER NOTE;So;0;L;1D158 1D165;;;;N;;;;; 1D160;MUSICAL SYMBOL EIGHTH NOTE;So;0;L;1D15F 1D16E;;;;N;;;;; 1D161;MUSICAL SYMBOL SIXTEENTH NOTE;So;0;L;1D15F 1D16F;;;;N;;;;; 1D162;MUSICAL SYMBOL THIRTY-SECOND NOTE;So;0;L;1D15F 1D170;;;;N;;;;; 1D163;MUSICAL SYMBOL SIXTY-FOURTH NOTE;So;0;L;1D15F 1D171;;;;N;;;;; 1D164;MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE;So;0;L;1D15F 1D172;;;;N;;;;; 1D165;MUSICAL SYMBOL COMBINING STEM;Mc;216;L;;;;;N;;;;; 1D166;MUSICAL SYMBOL COMBINING SPRECHGESANG STEM;Mc;216;L;;;;;N;;;;; 1D167;MUSICAL SYMBOL COMBINING TREMOLO-1;Mn;1;NSM;;;;;N;;;;; 1D168;MUSICAL SYMBOL COMBINING TREMOLO-2;Mn;1;NSM;;;;;N;;;;; 1D169;MUSICAL SYMBOL COMBINING TREMOLO-3;Mn;1;NSM;;;;;N;;;;; 1D16A;MUSICAL SYMBOL FINGERED TREMOLO-1;So;0;L;;;;;N;;;;; 1D16B;MUSICAL SYMBOL FINGERED TREMOLO-2;So;0;L;;;;;N;;;;; 1D16C;MUSICAL SYMBOL FINGERED TREMOLO-3;So;0;L;;;;;N;;;;; 1D16D;MUSICAL SYMBOL COMBINING AUGMENTATION DOT;Mc;226;L;;;;;N;;;;; 1D16E;MUSICAL SYMBOL COMBINING FLAG-1;Mc;216;L;;;;;N;;;;; 1D16F;MUSICAL SYMBOL COMBINING FLAG-2;Mc;216;L;;;;;N;;;;; 1D170;MUSICAL SYMBOL COMBINING FLAG-3;Mc;216;L;;;;;N;;;;; 1D171;MUSICAL SYMBOL COMBINING FLAG-4;Mc;216;L;;;;;N;;;;; 1D172;MUSICAL SYMBOL COMBINING FLAG-5;Mc;216;L;;;;;N;;;;; 1D173;MUSICAL SYMBOL BEGIN BEAM;Cf;0;BN;;;;;N;;;;; 1D174;MUSICAL SYMBOL END BEAM;Cf;0;BN;;;;;N;;;;; 1D175;MUSICAL SYMBOL BEGIN TIE;Cf;0;BN;;;;;N;;;;; 1D176;MUSICAL SYMBOL END TIE;Cf;0;BN;;;;;N;;;;; 1D177;MUSICAL SYMBOL BEGIN SLUR;Cf;0;BN;;;;;N;;;;; 1D178;MUSICAL SYMBOL END SLUR;Cf;0;BN;;;;;N;;;;; 1D179;MUSICAL SYMBOL BEGIN PHRASE;Cf;0;BN;;;;;N;;;;; 1D17A;MUSICAL SYMBOL END PHRASE;Cf;0;BN;;;;;N;;;;; 1D17B;MUSICAL SYMBOL COMBINING ACCENT;Mn;220;NSM;;;;;N;;;;; 1D17C;MUSICAL SYMBOL COMBINING STACCATO;Mn;220;NSM;;;;;N;;;;; 1D17D;MUSICAL SYMBOL COMBINING TENUTO;Mn;220;NSM;;;;;N;;;;; 1D17E;MUSICAL SYMBOL COMBINING STACCATISSIMO;Mn;220;NSM;;;;;N;;;;; 1D17F;MUSICAL SYMBOL COMBINING MARCATO;Mn;220;NSM;;;;;N;;;;; 1D180;MUSICAL SYMBOL COMBINING MARCATO-STACCATO;Mn;220;NSM;;;;;N;;;;; 1D181;MUSICAL SYMBOL COMBINING ACCENT-STACCATO;Mn;220;NSM;;;;;N;;;;; 1D182;MUSICAL SYMBOL COMBINING LOURE;Mn;220;NSM;;;;;N;;;;; 1D183;MUSICAL SYMBOL ARPEGGIATO UP;So;0;L;;;;;N;;;;; 1D184;MUSICAL SYMBOL ARPEGGIATO DOWN;So;0;L;;;;;N;;;;; 1D185;MUSICAL SYMBOL COMBINING DOIT;Mn;230;NSM;;;;;N;;;;; 1D186;MUSICAL SYMBOL COMBINING RIP;Mn;230;NSM;;;;;N;;;;; 1D187;MUSICAL SYMBOL COMBINING FLIP;Mn;230;NSM;;;;;N;;;;; 1D188;MUSICAL SYMBOL COMBINING SMEAR;Mn;230;NSM;;;;;N;;;;; 1D189;MUSICAL SYMBOL COMBINING BEND;Mn;230;NSM;;;;;N;;;;; 1D18A;MUSICAL SYMBOL COMBINING DOUBLE TONGUE;Mn;220;NSM;;;;;N;;;;; 1D18B;MUSICAL SYMBOL COMBINING TRIPLE TONGUE;Mn;220;NSM;;;;;N;;;;; 1D18C;MUSICAL SYMBOL RINFORZANDO;So;0;L;;;;;N;;;;; 1D18D;MUSICAL SYMBOL SUBITO;So;0;L;;;;;N;;;;; 1D18E;MUSICAL SYMBOL Z;So;0;L;;;;;N;;;;; 1D18F;MUSICAL SYMBOL PIANO;So;0;L;;;;;N;;;;; 1D190;MUSICAL SYMBOL MEZZO;So;0;L;;;;;N;;;;; 1D191;MUSICAL SYMBOL FORTE;So;0;L;;;;;N;;;;; 1D192;MUSICAL SYMBOL CRESCENDO;So;0;L;;;;;N;;;;; 1D193;MUSICAL SYMBOL DECRESCENDO;So;0;L;;;;;N;;;;; 1D194;MUSICAL SYMBOL GRACE NOTE SLASH;So;0;L;;;;;N;;;;; 1D195;MUSICAL SYMBOL GRACE NOTE NO SLASH;So;0;L;;;;;N;;;;; 1D196;MUSICAL SYMBOL TR;So;0;L;;;;;N;;;;; 1D197;MUSICAL SYMBOL TURN;So;0;L;;;;;N;;;;; 1D198;MUSICAL SYMBOL INVERTED TURN;So;0;L;;;;;N;;;;; 1D199;MUSICAL SYMBOL TURN SLASH;So;0;L;;;;;N;;;;; 1D19A;MUSICAL SYMBOL TURN UP;So;0;L;;;;;N;;;;; 1D19B;MUSICAL SYMBOL ORNAMENT STROKE-1;So;0;L;;;;;N;;;;; 1D19C;MUSICAL SYMBOL ORNAMENT STROKE-2;So;0;L;;;;;N;;;;; 1D19D;MUSICAL SYMBOL ORNAMENT STROKE-3;So;0;L;;;;;N;;;;; 1D19E;MUSICAL SYMBOL ORNAMENT STROKE-4;So;0;L;;;;;N;;;;; 1D19F;MUSICAL SYMBOL ORNAMENT STROKE-5;So;0;L;;;;;N;;;;; 1D1A0;MUSICAL SYMBOL ORNAMENT STROKE-6;So;0;L;;;;;N;;;;; 1D1A1;MUSICAL SYMBOL ORNAMENT STROKE-7;So;0;L;;;;;N;;;;; 1D1A2;MUSICAL SYMBOL ORNAMENT STROKE-8;So;0;L;;;;;N;;;;; 1D1A3;MUSICAL SYMBOL ORNAMENT STROKE-9;So;0;L;;;;;N;;;;; 1D1A4;MUSICAL SYMBOL ORNAMENT STROKE-10;So;0;L;;;;;N;;;;; 1D1A5;MUSICAL SYMBOL ORNAMENT STROKE-11;So;0;L;;;;;N;;;;; 1D1A6;MUSICAL SYMBOL HAUPTSTIMME;So;0;L;;;;;N;;;;; 1D1A7;MUSICAL SYMBOL NEBENSTIMME;So;0;L;;;;;N;;;;; 1D1A8;MUSICAL SYMBOL END OF STIMME;So;0;L;;;;;N;;;;; 1D1A9;MUSICAL SYMBOL DEGREE SLASH;So;0;L;;;;;N;;;;; 1D1AA;MUSICAL SYMBOL COMBINING DOWN BOW;Mn;230;NSM;;;;;N;;;;; 1D1AB;MUSICAL SYMBOL COMBINING UP BOW;Mn;230;NSM;;;;;N;;;;; 1D1AC;MUSICAL SYMBOL COMBINING HARMONIC;Mn;230;NSM;;;;;N;;;;; 1D1AD;MUSICAL SYMBOL COMBINING SNAP PIZZICATO;Mn;230;NSM;;;;;N;;;;; 1D1AE;MUSICAL SYMBOL PEDAL MARK;So;0;L;;;;;N;;;;; 1D1AF;MUSICAL SYMBOL PEDAL UP MARK;So;0;L;;;;;N;;;;; 1D1B0;MUSICAL SYMBOL HALF PEDAL MARK;So;0;L;;;;;N;;;;; 1D1B1;MUSICAL SYMBOL GLISSANDO UP;So;0;L;;;;;N;;;;; 1D1B2;MUSICAL SYMBOL GLISSANDO DOWN;So;0;L;;;;;N;;;;; 1D1B3;MUSICAL SYMBOL WITH FINGERNAILS;So;0;L;;;;;N;;;;; 1D1B4;MUSICAL SYMBOL DAMP;So;0;L;;;;;N;;;;; 1D1B5;MUSICAL SYMBOL DAMP ALL;So;0;L;;;;;N;;;;; 1D1B6;MUSICAL SYMBOL MAXIMA;So;0;L;;;;;N;;;;; 1D1B7;MUSICAL SYMBOL LONGA;So;0;L;;;;;N;;;;; 1D1B8;MUSICAL SYMBOL BREVIS;So;0;L;;;;;N;;;;; 1D1B9;MUSICAL SYMBOL SEMIBREVIS WHITE;So;0;L;;;;;N;;;;; 1D1BA;MUSICAL SYMBOL SEMIBREVIS BLACK;So;0;L;;;;;N;;;;; 1D1BB;MUSICAL SYMBOL MINIMA;So;0;L;1D1B9 1D165;;;;N;;;;; 1D1BC;MUSICAL SYMBOL MINIMA BLACK;So;0;L;1D1BA 1D165;;;;N;;;;; 1D1BD;MUSICAL SYMBOL SEMIMINIMA WHITE;So;0;L;1D1BB 1D16E;;;;N;;;;; 1D1BE;MUSICAL SYMBOL SEMIMINIMA BLACK;So;0;L;1D1BC 1D16E;;;;N;;;;; 1D1BF;MUSICAL SYMBOL FUSA WHITE;So;0;L;1D1BB 1D16F;;;;N;;;;; 1D1C0;MUSICAL SYMBOL FUSA BLACK;So;0;L;1D1BC 1D16F;;;;N;;;;; 1D1C1;MUSICAL SYMBOL LONGA PERFECTA REST;So;0;L;;;;;N;;;;; 1D1C2;MUSICAL SYMBOL LONGA IMPERFECTA REST;So;0;L;;;;;N;;;;; 1D1C3;MUSICAL SYMBOL BREVIS REST;So;0;L;;;;;N;;;;; 1D1C4;MUSICAL SYMBOL SEMIBREVIS REST;So;0;L;;;;;N;;;;; 1D1C5;MUSICAL SYMBOL MINIMA REST;So;0;L;;;;;N;;;;; 1D1C6;MUSICAL SYMBOL SEMIMINIMA REST;So;0;L;;;;;N;;;;; 1D1C7;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA;So;0;L;;;;;N;;;;; 1D1C8;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA;So;0;L;;;;;N;;;;; 1D1C9;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1;So;0;L;;;;;N;;;;; 1D1CA;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA;So;0;L;;;;;N;;;;; 1D1CB;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA;So;0;L;;;;;N;;;;; 1D1CC;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1;So;0;L;;;;;N;;;;; 1D1CD;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2;So;0;L;;;;;N;;;;; 1D1CE;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3;So;0;L;;;;;N;;;;; 1D1CF;MUSICAL SYMBOL CROIX;So;0;L;;;;;N;;;;; 1D1D0;MUSICAL SYMBOL GREGORIAN C CLEF;So;0;L;;;;;N;;;;; 1D1D1;MUSICAL SYMBOL GREGORIAN F CLEF;So;0;L;;;;;N;;;;; 1D1D2;MUSICAL SYMBOL SQUARE B;So;0;L;;;;;N;;;;; 1D1D3;MUSICAL SYMBOL VIRGA;So;0;L;;;;;N;;;;; 1D1D4;MUSICAL SYMBOL PODATUS;So;0;L;;;;;N;;;;; 1D1D5;MUSICAL SYMBOL CLIVIS;So;0;L;;;;;N;;;;; 1D1D6;MUSICAL SYMBOL SCANDICUS;So;0;L;;;;;N;;;;; 1D1D7;MUSICAL SYMBOL CLIMACUS;So;0;L;;;;;N;;;;; 1D1D8;MUSICAL SYMBOL TORCULUS;So;0;L;;;;;N;;;;; 1D1D9;MUSICAL SYMBOL PORRECTUS;So;0;L;;;;;N;;;;; 1D1DA;MUSICAL SYMBOL PORRECTUS FLEXUS;So;0;L;;;;;N;;;;; 1D1DB;MUSICAL SYMBOL SCANDICUS FLEXUS;So;0;L;;;;;N;;;;; 1D1DC;MUSICAL SYMBOL TORCULUS RESUPINUS;So;0;L;;;;;N;;;;; 1D1DD;MUSICAL SYMBOL PES SUBPUNCTIS;So;0;L;;;;;N;;;;; 1D1DE;MUSICAL SYMBOL KIEVAN C CLEF;So;0;L;;;;;N;;;;; 1D1DF;MUSICAL SYMBOL KIEVAN END OF PIECE;So;0;L;;;;;N;;;;; 1D1E0;MUSICAL SYMBOL KIEVAN FINAL NOTE;So;0;L;;;;;N;;;;; 1D1E1;MUSICAL SYMBOL KIEVAN RECITATIVE MARK;So;0;L;;;;;N;;;;; 1D1E2;MUSICAL SYMBOL KIEVAN WHOLE NOTE;So;0;L;;;;;N;;;;; 1D1E3;MUSICAL SYMBOL KIEVAN HALF NOTE;So;0;L;;;;;N;;;;; 1D1E4;MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM DOWN;So;0;L;;;;;N;;;;; 1D1E5;MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM UP;So;0;L;;;;;N;;;;; 1D1E6;MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM DOWN;So;0;L;;;;;N;;;;; 1D1E7;MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM UP;So;0;L;;;;;N;;;;; 1D1E8;MUSICAL SYMBOL KIEVAN FLAT SIGN;So;0;L;;;;;N;;;;; 1D1E9;MUSICAL SYMBOL SORI;So;0;ON;;;;;N;;;;; 1D1EA;MUSICAL SYMBOL KORON;So;0;ON;;;;;N;;;;; 1D200;GREEK VOCAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;; 1D201;GREEK VOCAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;; 1D202;GREEK VOCAL NOTATION SYMBOL-3;So;0;ON;;;;;N;;;;; 1D203;GREEK VOCAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;; 1D204;GREEK VOCAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;; 1D205;GREEK VOCAL NOTATION SYMBOL-6;So;0;ON;;;;;N;;;;; 1D206;GREEK VOCAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;; 1D207;GREEK VOCAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;; 1D208;GREEK VOCAL NOTATION SYMBOL-9;So;0;ON;;;;;N;;;;; 1D209;GREEK VOCAL NOTATION SYMBOL-10;So;0;ON;;;;;N;;;;; 1D20A;GREEK VOCAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;; 1D20B;GREEK VOCAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;; 1D20C;GREEK VOCAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;; 1D20D;GREEK VOCAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;; 1D20E;GREEK VOCAL NOTATION SYMBOL-15;So;0;ON;;;;;N;;;;; 1D20F;GREEK VOCAL NOTATION SYMBOL-16;So;0;ON;;;;;N;;;;; 1D210;GREEK VOCAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;; 1D211;GREEK VOCAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;; 1D212;GREEK VOCAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;; 1D213;GREEK VOCAL NOTATION SYMBOL-20;So;0;ON;;;;;N;;;;; 1D214;GREEK VOCAL NOTATION SYMBOL-21;So;0;ON;;;;;N;;;;; 1D215;GREEK VOCAL NOTATION SYMBOL-22;So;0;ON;;;;;N;;;;; 1D216;GREEK VOCAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;; 1D217;GREEK VOCAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;; 1D218;GREEK VOCAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;; 1D219;GREEK VOCAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;; 1D21A;GREEK VOCAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;; 1D21B;GREEK VOCAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;; 1D21C;GREEK VOCAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;; 1D21D;GREEK INSTRUMENTAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;; 1D21E;GREEK INSTRUMENTAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;; 1D21F;GREEK INSTRUMENTAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;; 1D220;GREEK INSTRUMENTAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;; 1D221;GREEK INSTRUMENTAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;; 1D222;GREEK INSTRUMENTAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;; 1D223;GREEK INSTRUMENTAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;; 1D224;GREEK INSTRUMENTAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;; 1D225;GREEK INSTRUMENTAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;; 1D226;GREEK INSTRUMENTAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;; 1D227;GREEK INSTRUMENTAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;; 1D228;GREEK INSTRUMENTAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;; 1D229;GREEK INSTRUMENTAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;; 1D22A;GREEK INSTRUMENTAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;; 1D22B;GREEK INSTRUMENTAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;; 1D22C;GREEK INSTRUMENTAL NOTATION SYMBOL-25;So;0;ON;;;;;N;;;;; 1D22D;GREEK INSTRUMENTAL NOTATION SYMBOL-26;So;0;ON;;;;;N;;;;; 1D22E;GREEK INSTRUMENTAL NOTATION SYMBOL-27;So;0;ON;;;;;N;;;;; 1D22F;GREEK INSTRUMENTAL NOTATION SYMBOL-29;So;0;ON;;;;;N;;;;; 1D230;GREEK INSTRUMENTAL NOTATION SYMBOL-30;So;0;ON;;;;;N;;;;; 1D231;GREEK INSTRUMENTAL NOTATION SYMBOL-32;So;0;ON;;;;;N;;;;; 1D232;GREEK INSTRUMENTAL NOTATION SYMBOL-36;So;0;ON;;;;;N;;;;; 1D233;GREEK INSTRUMENTAL NOTATION SYMBOL-37;So;0;ON;;;;;N;;;;; 1D234;GREEK INSTRUMENTAL NOTATION SYMBOL-38;So;0;ON;;;;;N;;;;; 1D235;GREEK INSTRUMENTAL NOTATION SYMBOL-39;So;0;ON;;;;;N;;;;; 1D236;GREEK INSTRUMENTAL NOTATION SYMBOL-40;So;0;ON;;;;;N;;;;; 1D237;GREEK INSTRUMENTAL NOTATION SYMBOL-42;So;0;ON;;;;;N;;;;; 1D238;GREEK INSTRUMENTAL NOTATION SYMBOL-43;So;0;ON;;;;;N;;;;; 1D239;GREEK INSTRUMENTAL NOTATION SYMBOL-45;So;0;ON;;;;;N;;;;; 1D23A;GREEK INSTRUMENTAL NOTATION SYMBOL-47;So;0;ON;;;;;N;;;;; 1D23B;GREEK INSTRUMENTAL NOTATION SYMBOL-48;So;0;ON;;;;;N;;;;; 1D23C;GREEK INSTRUMENTAL NOTATION SYMBOL-49;So;0;ON;;;;;N;;;;; 1D23D;GREEK INSTRUMENTAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;; 1D23E;GREEK INSTRUMENTAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;; 1D23F;GREEK INSTRUMENTAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;; 1D240;GREEK INSTRUMENTAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;; 1D241;GREEK INSTRUMENTAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;; 1D242;COMBINING GREEK MUSICAL TRISEME;Mn;230;NSM;;;;;N;;;;; 1D243;COMBINING GREEK MUSICAL TETRASEME;Mn;230;NSM;;;;;N;;;;; 1D244;COMBINING GREEK MUSICAL PENTASEME;Mn;230;NSM;;;;;N;;;;; 1D245;GREEK MUSICAL LEIMMA;So;0;ON;;;;;N;;;;; 1D2E0;MAYAN NUMERAL ZERO;No;0;L;;;;0;N;;;;; 1D2E1;MAYAN NUMERAL ONE;No;0;L;;;;1;N;;;;; 1D2E2;MAYAN NUMERAL TWO;No;0;L;;;;2;N;;;;; 1D2E3;MAYAN NUMERAL THREE;No;0;L;;;;3;N;;;;; 1D2E4;MAYAN NUMERAL FOUR;No;0;L;;;;4;N;;;;; 1D2E5;MAYAN NUMERAL FIVE;No;0;L;;;;5;N;;;;; 1D2E6;MAYAN NUMERAL SIX;No;0;L;;;;6;N;;;;; 1D2E7;MAYAN NUMERAL SEVEN;No;0;L;;;;7;N;;;;; 1D2E8;MAYAN NUMERAL EIGHT;No;0;L;;;;8;N;;;;; 1D2E9;MAYAN NUMERAL NINE;No;0;L;;;;9;N;;;;; 1D2EA;MAYAN NUMERAL TEN;No;0;L;;;;10;N;;;;; 1D2EB;MAYAN NUMERAL ELEVEN;No;0;L;;;;11;N;;;;; 1D2EC;MAYAN NUMERAL TWELVE;No;0;L;;;;12;N;;;;; 1D2ED;MAYAN NUMERAL THIRTEEN;No;0;L;;;;13;N;;;;; 1D2EE;MAYAN NUMERAL FOURTEEN;No;0;L;;;;14;N;;;;; 1D2EF;MAYAN NUMERAL FIFTEEN;No;0;L;;;;15;N;;;;; 1D2F0;MAYAN NUMERAL SIXTEEN;No;0;L;;;;16;N;;;;; 1D2F1;MAYAN NUMERAL SEVENTEEN;No;0;L;;;;17;N;;;;; 1D2F2;MAYAN NUMERAL EIGHTEEN;No;0;L;;;;18;N;;;;; 1D2F3;MAYAN NUMERAL NINETEEN;No;0;L;;;;19;N;;;;; 1D300;MONOGRAM FOR EARTH;So;0;ON;;;;;N;;;;; 1D301;DIGRAM FOR HEAVENLY EARTH;So;0;ON;;;;;N;;;;; 1D302;DIGRAM FOR HUMAN EARTH;So;0;ON;;;;;N;;;;; 1D303;DIGRAM FOR EARTHLY HEAVEN;So;0;ON;;;;;N;;;;; 1D304;DIGRAM FOR EARTHLY HUMAN;So;0;ON;;;;;N;;;;; 1D305;DIGRAM FOR EARTH;So;0;ON;;;;;N;;;;; 1D306;TETRAGRAM FOR CENTRE;So;0;ON;;;;;N;;;;; 1D307;TETRAGRAM FOR FULL CIRCLE;So;0;ON;;;;;N;;;;; 1D308;TETRAGRAM FOR MIRED;So;0;ON;;;;;N;;;;; 1D309;TETRAGRAM FOR BARRIER;So;0;ON;;;;;N;;;;; 1D30A;TETRAGRAM FOR KEEPING SMALL;So;0;ON;;;;;N;;;;; 1D30B;TETRAGRAM FOR CONTRARIETY;So;0;ON;;;;;N;;;;; 1D30C;TETRAGRAM FOR ASCENT;So;0;ON;;;;;N;;;;; 1D30D;TETRAGRAM FOR OPPOSITION;So;0;ON;;;;;N;;;;; 1D30E;TETRAGRAM FOR BRANCHING OUT;So;0;ON;;;;;N;;;;; 1D30F;TETRAGRAM FOR DEFECTIVENESS OR DISTORTION;So;0;ON;;;;;N;;;;; 1D310;TETRAGRAM FOR DIVERGENCE;So;0;ON;;;;;N;;;;; 1D311;TETRAGRAM FOR YOUTHFULNESS;So;0;ON;;;;;N;;;;; 1D312;TETRAGRAM FOR INCREASE;So;0;ON;;;;;N;;;;; 1D313;TETRAGRAM FOR PENETRATION;So;0;ON;;;;;N;;;;; 1D314;TETRAGRAM FOR REACH;So;0;ON;;;;;N;;;;; 1D315;TETRAGRAM FOR CONTACT;So;0;ON;;;;;N;;;;; 1D316;TETRAGRAM FOR HOLDING BACK;So;0;ON;;;;;N;;;;; 1D317;TETRAGRAM FOR WAITING;So;0;ON;;;;;N;;;;; 1D318;TETRAGRAM FOR FOLLOWING;So;0;ON;;;;;N;;;;; 1D319;TETRAGRAM FOR ADVANCE;So;0;ON;;;;;N;;;;; 1D31A;TETRAGRAM FOR RELEASE;So;0;ON;;;;;N;;;;; 1D31B;TETRAGRAM FOR RESISTANCE;So;0;ON;;;;;N;;;;; 1D31C;TETRAGRAM FOR EASE;So;0;ON;;;;;N;;;;; 1D31D;TETRAGRAM FOR JOY;So;0;ON;;;;;N;;;;; 1D31E;TETRAGRAM FOR CONTENTION;So;0;ON;;;;;N;;;;; 1D31F;TETRAGRAM FOR ENDEAVOUR;So;0;ON;;;;;N;;;;; 1D320;TETRAGRAM FOR DUTIES;So;0;ON;;;;;N;;;;; 1D321;TETRAGRAM FOR CHANGE;So;0;ON;;;;;N;;;;; 1D322;TETRAGRAM FOR DECISIVENESS;So;0;ON;;;;;N;;;;; 1D323;TETRAGRAM FOR BOLD RESOLUTION;So;0;ON;;;;;N;;;;; 1D324;TETRAGRAM FOR PACKING;So;0;ON;;;;;N;;;;; 1D325;TETRAGRAM FOR LEGION;So;0;ON;;;;;N;;;;; 1D326;TETRAGRAM FOR CLOSENESS;So;0;ON;;;;;N;;;;; 1D327;TETRAGRAM FOR KINSHIP;So;0;ON;;;;;N;;;;; 1D328;TETRAGRAM FOR GATHERING;So;0;ON;;;;;N;;;;; 1D329;TETRAGRAM FOR STRENGTH;So;0;ON;;;;;N;;;;; 1D32A;TETRAGRAM FOR PURITY;So;0;ON;;;;;N;;;;; 1D32B;TETRAGRAM FOR FULLNESS;So;0;ON;;;;;N;;;;; 1D32C;TETRAGRAM FOR RESIDENCE;So;0;ON;;;;;N;;;;; 1D32D;TETRAGRAM FOR LAW OR MODEL;So;0;ON;;;;;N;;;;; 1D32E;TETRAGRAM FOR RESPONSE;So;0;ON;;;;;N;;;;; 1D32F;TETRAGRAM FOR GOING TO MEET;So;0;ON;;;;;N;;;;; 1D330;TETRAGRAM FOR ENCOUNTERS;So;0;ON;;;;;N;;;;; 1D331;TETRAGRAM FOR STOVE;So;0;ON;;;;;N;;;;; 1D332;TETRAGRAM FOR GREATNESS;So;0;ON;;;;;N;;;;; 1D333;TETRAGRAM FOR ENLARGEMENT;So;0;ON;;;;;N;;;;; 1D334;TETRAGRAM FOR PATTERN;So;0;ON;;;;;N;;;;; 1D335;TETRAGRAM FOR RITUAL;So;0;ON;;;;;N;;;;; 1D336;TETRAGRAM FOR FLIGHT;So;0;ON;;;;;N;;;;; 1D337;TETRAGRAM FOR VASTNESS OR WASTING;So;0;ON;;;;;N;;;;; 1D338;TETRAGRAM FOR CONSTANCY;So;0;ON;;;;;N;;;;; 1D339;TETRAGRAM FOR MEASURE;So;0;ON;;;;;N;;;;; 1D33A;TETRAGRAM FOR ETERNITY;So;0;ON;;;;;N;;;;; 1D33B;TETRAGRAM FOR UNITY;So;0;ON;;;;;N;;;;; 1D33C;TETRAGRAM FOR DIMINISHMENT;So;0;ON;;;;;N;;;;; 1D33D;TETRAGRAM FOR CLOSED MOUTH;So;0;ON;;;;;N;;;;; 1D33E;TETRAGRAM FOR GUARDEDNESS;So;0;ON;;;;;N;;;;; 1D33F;TETRAGRAM FOR GATHERING IN;So;0;ON;;;;;N;;;;; 1D340;TETRAGRAM FOR MASSING;So;0;ON;;;;;N;;;;; 1D341;TETRAGRAM FOR ACCUMULATION;So;0;ON;;;;;N;;;;; 1D342;TETRAGRAM FOR EMBELLISHMENT;So;0;ON;;;;;N;;;;; 1D343;TETRAGRAM FOR DOUBT;So;0;ON;;;;;N;;;;; 1D344;TETRAGRAM FOR WATCH;So;0;ON;;;;;N;;;;; 1D345;TETRAGRAM FOR SINKING;So;0;ON;;;;;N;;;;; 1D346;TETRAGRAM FOR INNER;So;0;ON;;;;;N;;;;; 1D347;TETRAGRAM FOR DEPARTURE;So;0;ON;;;;;N;;;;; 1D348;TETRAGRAM FOR DARKENING;So;0;ON;;;;;N;;;;; 1D349;TETRAGRAM FOR DIMMING;So;0;ON;;;;;N;;;;; 1D34A;TETRAGRAM FOR EXHAUSTION;So;0;ON;;;;;N;;;;; 1D34B;TETRAGRAM FOR SEVERANCE;So;0;ON;;;;;N;;;;; 1D34C;TETRAGRAM FOR STOPPAGE;So;0;ON;;;;;N;;;;; 1D34D;TETRAGRAM FOR HARDNESS;So;0;ON;;;;;N;;;;; 1D34E;TETRAGRAM FOR COMPLETION;So;0;ON;;;;;N;;;;; 1D34F;TETRAGRAM FOR CLOSURE;So;0;ON;;;;;N;;;;; 1D350;TETRAGRAM FOR FAILURE;So;0;ON;;;;;N;;;;; 1D351;TETRAGRAM FOR AGGRAVATION;So;0;ON;;;;;N;;;;; 1D352;TETRAGRAM FOR COMPLIANCE;So;0;ON;;;;;N;;;;; 1D353;TETRAGRAM FOR ON THE VERGE;So;0;ON;;;;;N;;;;; 1D354;TETRAGRAM FOR DIFFICULTIES;So;0;ON;;;;;N;;;;; 1D355;TETRAGRAM FOR LABOURING;So;0;ON;;;;;N;;;;; 1D356;TETRAGRAM FOR FOSTERING;So;0;ON;;;;;N;;;;; 1D360;COUNTING ROD UNIT DIGIT ONE;No;0;L;;;;1;N;;;;; 1D361;COUNTING ROD UNIT DIGIT TWO;No;0;L;;;;2;N;;;;; 1D362;COUNTING ROD UNIT DIGIT THREE;No;0;L;;;;3;N;;;;; 1D363;COUNTING ROD UNIT DIGIT FOUR;No;0;L;;;;4;N;;;;; 1D364;COUNTING ROD UNIT DIGIT FIVE;No;0;L;;;;5;N;;;;; 1D365;COUNTING ROD UNIT DIGIT SIX;No;0;L;;;;6;N;;;;; 1D366;COUNTING ROD UNIT DIGIT SEVEN;No;0;L;;;;7;N;;;;; 1D367;COUNTING ROD UNIT DIGIT EIGHT;No;0;L;;;;8;N;;;;; 1D368;COUNTING ROD UNIT DIGIT NINE;No;0;L;;;;9;N;;;;; 1D369;COUNTING ROD TENS DIGIT ONE;No;0;L;;;;10;N;;;;; 1D36A;COUNTING ROD TENS DIGIT TWO;No;0;L;;;;20;N;;;;; 1D36B;COUNTING ROD TENS DIGIT THREE;No;0;L;;;;30;N;;;;; 1D36C;COUNTING ROD TENS DIGIT FOUR;No;0;L;;;;40;N;;;;; 1D36D;COUNTING ROD TENS DIGIT FIVE;No;0;L;;;;50;N;;;;; 1D36E;COUNTING ROD TENS DIGIT SIX;No;0;L;;;;60;N;;;;; 1D36F;COUNTING ROD TENS DIGIT SEVEN;No;0;L;;;;70;N;;;;; 1D370;COUNTING ROD TENS DIGIT EIGHT;No;0;L;;;;80;N;;;;; 1D371;COUNTING ROD TENS DIGIT NINE;No;0;L;;;;90;N;;;;; 1D372;IDEOGRAPHIC TALLY MARK ONE;No;0;L;;;;1;N;;;;; 1D373;IDEOGRAPHIC TALLY MARK TWO;No;0;L;;;;2;N;;;;; 1D374;IDEOGRAPHIC TALLY MARK THREE;No;0;L;;;;3;N;;;;; 1D375;IDEOGRAPHIC TALLY MARK FOUR;No;0;L;;;;4;N;;;;; 1D376;IDEOGRAPHIC TALLY MARK FIVE;No;0;L;;;;5;N;;;;; 1D377;TALLY MARK ONE;No;0;L;;;;1;N;;;;; 1D378;TALLY MARK FIVE;No;0;L;;;;5;N;;;;; 1D400;MATHEMATICAL BOLD CAPITAL A;Lu;0;L; 0041;;;;N;;;;; 1D401;MATHEMATICAL BOLD CAPITAL B;Lu;0;L; 0042;;;;N;;;;; 1D402;MATHEMATICAL BOLD CAPITAL C;Lu;0;L; 0043;;;;N;;;;; 1D403;MATHEMATICAL BOLD CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 1D404;MATHEMATICAL BOLD CAPITAL E;Lu;0;L; 0045;;;;N;;;;; 1D405;MATHEMATICAL BOLD CAPITAL F;Lu;0;L; 0046;;;;N;;;;; 1D406;MATHEMATICAL BOLD CAPITAL G;Lu;0;L; 0047;;;;N;;;;; 1D407;MATHEMATICAL BOLD CAPITAL H;Lu;0;L; 0048;;;;N;;;;; 1D408;MATHEMATICAL BOLD CAPITAL I;Lu;0;L; 0049;;;;N;;;;; 1D409;MATHEMATICAL BOLD CAPITAL J;Lu;0;L; 004A;;;;N;;;;; 1D40A;MATHEMATICAL BOLD CAPITAL K;Lu;0;L; 004B;;;;N;;;;; 1D40B;MATHEMATICAL BOLD CAPITAL L;Lu;0;L; 004C;;;;N;;;;; 1D40C;MATHEMATICAL BOLD CAPITAL M;Lu;0;L; 004D;;;;N;;;;; 1D40D;MATHEMATICAL BOLD CAPITAL N;Lu;0;L; 004E;;;;N;;;;; 1D40E;MATHEMATICAL BOLD CAPITAL O;Lu;0;L; 004F;;;;N;;;;; 1D40F;MATHEMATICAL BOLD CAPITAL P;Lu;0;L; 0050;;;;N;;;;; 1D410;MATHEMATICAL BOLD CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; 1D411;MATHEMATICAL BOLD CAPITAL R;Lu;0;L; 0052;;;;N;;;;; 1D412;MATHEMATICAL BOLD CAPITAL S;Lu;0;L; 0053;;;;N;;;;; 1D413;MATHEMATICAL BOLD CAPITAL T;Lu;0;L; 0054;;;;N;;;;; 1D414;MATHEMATICAL BOLD CAPITAL U;Lu;0;L; 0055;;;;N;;;;; 1D415;MATHEMATICAL BOLD CAPITAL V;Lu;0;L; 0056;;;;N;;;;; 1D416;MATHEMATICAL BOLD CAPITAL W;Lu;0;L; 0057;;;;N;;;;; 1D417;MATHEMATICAL BOLD CAPITAL X;Lu;0;L; 0058;;;;N;;;;; 1D418;MATHEMATICAL BOLD CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; 1D419;MATHEMATICAL BOLD CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; 1D41A;MATHEMATICAL BOLD SMALL A;Ll;0;L; 0061;;;;N;;;;; 1D41B;MATHEMATICAL BOLD SMALL B;Ll;0;L; 0062;;;;N;;;;; 1D41C;MATHEMATICAL BOLD SMALL C;Ll;0;L; 0063;;;;N;;;;; 1D41D;MATHEMATICAL BOLD SMALL D;Ll;0;L; 0064;;;;N;;;;; 1D41E;MATHEMATICAL BOLD SMALL E;Ll;0;L; 0065;;;;N;;;;; 1D41F;MATHEMATICAL BOLD SMALL F;Ll;0;L; 0066;;;;N;;;;; 1D420;MATHEMATICAL BOLD SMALL G;Ll;0;L; 0067;;;;N;;;;; 1D421;MATHEMATICAL BOLD SMALL H;Ll;0;L; 0068;;;;N;;;;; 1D422;MATHEMATICAL BOLD SMALL I;Ll;0;L; 0069;;;;N;;;;; 1D423;MATHEMATICAL BOLD SMALL J;Ll;0;L; 006A;;;;N;;;;; 1D424;MATHEMATICAL BOLD SMALL K;Ll;0;L; 006B;;;;N;;;;; 1D425;MATHEMATICAL BOLD SMALL L;Ll;0;L; 006C;;;;N;;;;; 1D426;MATHEMATICAL BOLD SMALL M;Ll;0;L; 006D;;;;N;;;;; 1D427;MATHEMATICAL BOLD SMALL N;Ll;0;L; 006E;;;;N;;;;; 1D428;MATHEMATICAL BOLD SMALL O;Ll;0;L; 006F;;;;N;;;;; 1D429;MATHEMATICAL BOLD SMALL P;Ll;0;L; 0070;;;;N;;;;; 1D42A;MATHEMATICAL BOLD SMALL Q;Ll;0;L; 0071;;;;N;;;;; 1D42B;MATHEMATICAL BOLD SMALL R;Ll;0;L; 0072;;;;N;;;;; 1D42C;MATHEMATICAL BOLD SMALL S;Ll;0;L; 0073;;;;N;;;;; 1D42D;MATHEMATICAL BOLD SMALL T;Ll;0;L; 0074;;;;N;;;;; 1D42E;MATHEMATICAL BOLD SMALL U;Ll;0;L; 0075;;;;N;;;;; 1D42F;MATHEMATICAL BOLD SMALL V;Ll;0;L; 0076;;;;N;;;;; 1D430;MATHEMATICAL BOLD SMALL W;Ll;0;L; 0077;;;;N;;;;; 1D431;MATHEMATICAL BOLD SMALL X;Ll;0;L; 0078;;;;N;;;;; 1D432;MATHEMATICAL BOLD SMALL Y;Ll;0;L; 0079;;;;N;;;;; 1D433;MATHEMATICAL BOLD SMALL Z;Ll;0;L; 007A;;;;N;;;;; 1D434;MATHEMATICAL ITALIC CAPITAL A;Lu;0;L; 0041;;;;N;;;;; 1D435;MATHEMATICAL ITALIC CAPITAL B;Lu;0;L; 0042;;;;N;;;;; 1D436;MATHEMATICAL ITALIC CAPITAL C;Lu;0;L; 0043;;;;N;;;;; 1D437;MATHEMATICAL ITALIC CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 1D438;MATHEMATICAL ITALIC CAPITAL E;Lu;0;L; 0045;;;;N;;;;; 1D439;MATHEMATICAL ITALIC CAPITAL F;Lu;0;L; 0046;;;;N;;;;; 1D43A;MATHEMATICAL ITALIC CAPITAL G;Lu;0;L; 0047;;;;N;;;;; 1D43B;MATHEMATICAL ITALIC CAPITAL H;Lu;0;L; 0048;;;;N;;;;; 1D43C;MATHEMATICAL ITALIC CAPITAL I;Lu;0;L; 0049;;;;N;;;;; 1D43D;MATHEMATICAL ITALIC CAPITAL J;Lu;0;L; 004A;;;;N;;;;; 1D43E;MATHEMATICAL ITALIC CAPITAL K;Lu;0;L; 004B;;;;N;;;;; 1D43F;MATHEMATICAL ITALIC CAPITAL L;Lu;0;L; 004C;;;;N;;;;; 1D440;MATHEMATICAL ITALIC CAPITAL M;Lu;0;L; 004D;;;;N;;;;; 1D441;MATHEMATICAL ITALIC CAPITAL N;Lu;0;L; 004E;;;;N;;;;; 1D442;MATHEMATICAL ITALIC CAPITAL O;Lu;0;L; 004F;;;;N;;;;; 1D443;MATHEMATICAL ITALIC CAPITAL P;Lu;0;L; 0050;;;;N;;;;; 1D444;MATHEMATICAL ITALIC CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; 1D445;MATHEMATICAL ITALIC CAPITAL R;Lu;0;L; 0052;;;;N;;;;; 1D446;MATHEMATICAL ITALIC CAPITAL S;Lu;0;L; 0053;;;;N;;;;; 1D447;MATHEMATICAL ITALIC CAPITAL T;Lu;0;L; 0054;;;;N;;;;; 1D448;MATHEMATICAL ITALIC CAPITAL U;Lu;0;L; 0055;;;;N;;;;; 1D449;MATHEMATICAL ITALIC CAPITAL V;Lu;0;L; 0056;;;;N;;;;; 1D44A;MATHEMATICAL ITALIC CAPITAL W;Lu;0;L; 0057;;;;N;;;;; 1D44B;MATHEMATICAL ITALIC CAPITAL X;Lu;0;L; 0058;;;;N;;;;; 1D44C;MATHEMATICAL ITALIC CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; 1D44D;MATHEMATICAL ITALIC CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; 1D44E;MATHEMATICAL ITALIC SMALL A;Ll;0;L; 0061;;;;N;;;;; 1D44F;MATHEMATICAL ITALIC SMALL B;Ll;0;L; 0062;;;;N;;;;; 1D450;MATHEMATICAL ITALIC SMALL C;Ll;0;L; 0063;;;;N;;;;; 1D451;MATHEMATICAL ITALIC SMALL D;Ll;0;L; 0064;;;;N;;;;; 1D452;MATHEMATICAL ITALIC SMALL E;Ll;0;L; 0065;;;;N;;;;; 1D453;MATHEMATICAL ITALIC SMALL F;Ll;0;L; 0066;;;;N;;;;; 1D454;MATHEMATICAL ITALIC SMALL G;Ll;0;L; 0067;;;;N;;;;; 1D456;MATHEMATICAL ITALIC SMALL I;Ll;0;L; 0069;;;;N;;;;; 1D457;MATHEMATICAL ITALIC SMALL J;Ll;0;L; 006A;;;;N;;;;; 1D458;MATHEMATICAL ITALIC SMALL K;Ll;0;L; 006B;;;;N;;;;; 1D459;MATHEMATICAL ITALIC SMALL L;Ll;0;L; 006C;;;;N;;;;; 1D45A;MATHEMATICAL ITALIC SMALL M;Ll;0;L; 006D;;;;N;;;;; 1D45B;MATHEMATICAL ITALIC SMALL N;Ll;0;L; 006E;;;;N;;;;; 1D45C;MATHEMATICAL ITALIC SMALL O;Ll;0;L; 006F;;;;N;;;;; 1D45D;MATHEMATICAL ITALIC SMALL P;Ll;0;L; 0070;;;;N;;;;; 1D45E;MATHEMATICAL ITALIC SMALL Q;Ll;0;L; 0071;;;;N;;;;; 1D45F;MATHEMATICAL ITALIC SMALL R;Ll;0;L; 0072;;;;N;;;;; 1D460;MATHEMATICAL ITALIC SMALL S;Ll;0;L; 0073;;;;N;;;;; 1D461;MATHEMATICAL ITALIC SMALL T;Ll;0;L; 0074;;;;N;;;;; 1D462;MATHEMATICAL ITALIC SMALL U;Ll;0;L; 0075;;;;N;;;;; 1D463;MATHEMATICAL ITALIC SMALL V;Ll;0;L; 0076;;;;N;;;;; 1D464;MATHEMATICAL ITALIC SMALL W;Ll;0;L; 0077;;;;N;;;;; 1D465;MATHEMATICAL ITALIC SMALL X;Ll;0;L; 0078;;;;N;;;;; 1D466;MATHEMATICAL ITALIC SMALL Y;Ll;0;L; 0079;;;;N;;;;; 1D467;MATHEMATICAL ITALIC SMALL Z;Ll;0;L; 007A;;;;N;;;;; 1D468;MATHEMATICAL BOLD ITALIC CAPITAL A;Lu;0;L; 0041;;;;N;;;;; 1D469;MATHEMATICAL BOLD ITALIC CAPITAL B;Lu;0;L; 0042;;;;N;;;;; 1D46A;MATHEMATICAL BOLD ITALIC CAPITAL C;Lu;0;L; 0043;;;;N;;;;; 1D46B;MATHEMATICAL BOLD ITALIC CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 1D46C;MATHEMATICAL BOLD ITALIC CAPITAL E;Lu;0;L; 0045;;;;N;;;;; 1D46D;MATHEMATICAL BOLD ITALIC CAPITAL F;Lu;0;L; 0046;;;;N;;;;; 1D46E;MATHEMATICAL BOLD ITALIC CAPITAL G;Lu;0;L; 0047;;;;N;;;;; 1D46F;MATHEMATICAL BOLD ITALIC CAPITAL H;Lu;0;L; 0048;;;;N;;;;; 1D470;MATHEMATICAL BOLD ITALIC CAPITAL I;Lu;0;L; 0049;;;;N;;;;; 1D471;MATHEMATICAL BOLD ITALIC CAPITAL J;Lu;0;L; 004A;;;;N;;;;; 1D472;MATHEMATICAL BOLD ITALIC CAPITAL K;Lu;0;L; 004B;;;;N;;;;; 1D473;MATHEMATICAL BOLD ITALIC CAPITAL L;Lu;0;L; 004C;;;;N;;;;; 1D474;MATHEMATICAL BOLD ITALIC CAPITAL M;Lu;0;L; 004D;;;;N;;;;; 1D475;MATHEMATICAL BOLD ITALIC CAPITAL N;Lu;0;L; 004E;;;;N;;;;; 1D476;MATHEMATICAL BOLD ITALIC CAPITAL O;Lu;0;L; 004F;;;;N;;;;; 1D477;MATHEMATICAL BOLD ITALIC CAPITAL P;Lu;0;L; 0050;;;;N;;;;; 1D478;MATHEMATICAL BOLD ITALIC CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; 1D479;MATHEMATICAL BOLD ITALIC CAPITAL R;Lu;0;L; 0052;;;;N;;;;; 1D47A;MATHEMATICAL BOLD ITALIC CAPITAL S;Lu;0;L; 0053;;;;N;;;;; 1D47B;MATHEMATICAL BOLD ITALIC CAPITAL T;Lu;0;L; 0054;;;;N;;;;; 1D47C;MATHEMATICAL BOLD ITALIC CAPITAL U;Lu;0;L; 0055;;;;N;;;;; 1D47D;MATHEMATICAL BOLD ITALIC CAPITAL V;Lu;0;L; 0056;;;;N;;;;; 1D47E;MATHEMATICAL BOLD ITALIC CAPITAL W;Lu;0;L; 0057;;;;N;;;;; 1D47F;MATHEMATICAL BOLD ITALIC CAPITAL X;Lu;0;L; 0058;;;;N;;;;; 1D480;MATHEMATICAL BOLD ITALIC CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; 1D481;MATHEMATICAL BOLD ITALIC CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; 1D482;MATHEMATICAL BOLD ITALIC SMALL A;Ll;0;L; 0061;;;;N;;;;; 1D483;MATHEMATICAL BOLD ITALIC SMALL B;Ll;0;L; 0062;;;;N;;;;; 1D484;MATHEMATICAL BOLD ITALIC SMALL C;Ll;0;L; 0063;;;;N;;;;; 1D485;MATHEMATICAL BOLD ITALIC SMALL D;Ll;0;L; 0064;;;;N;;;;; 1D486;MATHEMATICAL BOLD ITALIC SMALL E;Ll;0;L; 0065;;;;N;;;;; 1D487;MATHEMATICAL BOLD ITALIC SMALL F;Ll;0;L; 0066;;;;N;;;;; 1D488;MATHEMATICAL BOLD ITALIC SMALL G;Ll;0;L; 0067;;;;N;;;;; 1D489;MATHEMATICAL BOLD ITALIC SMALL H;Ll;0;L; 0068;;;;N;;;;; 1D48A;MATHEMATICAL BOLD ITALIC SMALL I;Ll;0;L; 0069;;;;N;;;;; 1D48B;MATHEMATICAL BOLD ITALIC SMALL J;Ll;0;L; 006A;;;;N;;;;; 1D48C;MATHEMATICAL BOLD ITALIC SMALL K;Ll;0;L; 006B;;;;N;;;;; 1D48D;MATHEMATICAL BOLD ITALIC SMALL L;Ll;0;L; 006C;;;;N;;;;; 1D48E;MATHEMATICAL BOLD ITALIC SMALL M;Ll;0;L; 006D;;;;N;;;;; 1D48F;MATHEMATICAL BOLD ITALIC SMALL N;Ll;0;L; 006E;;;;N;;;;; 1D490;MATHEMATICAL BOLD ITALIC SMALL O;Ll;0;L; 006F;;;;N;;;;; 1D491;MATHEMATICAL BOLD ITALIC SMALL P;Ll;0;L; 0070;;;;N;;;;; 1D492;MATHEMATICAL BOLD ITALIC SMALL Q;Ll;0;L; 0071;;;;N;;;;; 1D493;MATHEMATICAL BOLD ITALIC SMALL R;Ll;0;L; 0072;;;;N;;;;; 1D494;MATHEMATICAL BOLD ITALIC SMALL S;Ll;0;L; 0073;;;;N;;;;; 1D495;MATHEMATICAL BOLD ITALIC SMALL T;Ll;0;L; 0074;;;;N;;;;; 1D496;MATHEMATICAL BOLD ITALIC SMALL U;Ll;0;L; 0075;;;;N;;;;; 1D497;MATHEMATICAL BOLD ITALIC SMALL V;Ll;0;L; 0076;;;;N;;;;; 1D498;MATHEMATICAL BOLD ITALIC SMALL W;Ll;0;L; 0077;;;;N;;;;; 1D499;MATHEMATICAL BOLD ITALIC SMALL X;Ll;0;L; 0078;;;;N;;;;; 1D49A;MATHEMATICAL BOLD ITALIC SMALL Y;Ll;0;L; 0079;;;;N;;;;; 1D49B;MATHEMATICAL BOLD ITALIC SMALL Z;Ll;0;L; 007A;;;;N;;;;; 1D49C;MATHEMATICAL SCRIPT CAPITAL A;Lu;0;L; 0041;;;;N;;;;; 1D49E;MATHEMATICAL SCRIPT CAPITAL C;Lu;0;L; 0043;;;;N;;;;; 1D49F;MATHEMATICAL SCRIPT CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 1D4A2;MATHEMATICAL SCRIPT CAPITAL G;Lu;0;L; 0047;;;;N;;;;; 1D4A5;MATHEMATICAL SCRIPT CAPITAL J;Lu;0;L; 004A;;;;N;;;;; 1D4A6;MATHEMATICAL SCRIPT CAPITAL K;Lu;0;L; 004B;;;;N;;;;; 1D4A9;MATHEMATICAL SCRIPT CAPITAL N;Lu;0;L; 004E;;;;N;;;;; 1D4AA;MATHEMATICAL SCRIPT CAPITAL O;Lu;0;L; 004F;;;;N;;;;; 1D4AB;MATHEMATICAL SCRIPT CAPITAL P;Lu;0;L; 0050;;;;N;;;;; 1D4AC;MATHEMATICAL SCRIPT CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; 1D4AE;MATHEMATICAL SCRIPT CAPITAL S;Lu;0;L; 0053;;;;N;;;;; 1D4AF;MATHEMATICAL SCRIPT CAPITAL T;Lu;0;L; 0054;;;;N;;;;; 1D4B0;MATHEMATICAL SCRIPT CAPITAL U;Lu;0;L; 0055;;;;N;;;;; 1D4B1;MATHEMATICAL SCRIPT CAPITAL V;Lu;0;L; 0056;;;;N;;;;; 1D4B2;MATHEMATICAL SCRIPT CAPITAL W;Lu;0;L; 0057;;;;N;;;;; 1D4B3;MATHEMATICAL SCRIPT CAPITAL X;Lu;0;L; 0058;;;;N;;;;; 1D4B4;MATHEMATICAL SCRIPT CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; 1D4B5;MATHEMATICAL SCRIPT CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; 1D4B6;MATHEMATICAL SCRIPT SMALL A;Ll;0;L; 0061;;;;N;;;;; 1D4B7;MATHEMATICAL SCRIPT SMALL B;Ll;0;L; 0062;;;;N;;;;; 1D4B8;MATHEMATICAL SCRIPT SMALL C;Ll;0;L; 0063;;;;N;;;;; 1D4B9;MATHEMATICAL SCRIPT SMALL D;Ll;0;L; 0064;;;;N;;;;; 1D4BB;MATHEMATICAL SCRIPT SMALL F;Ll;0;L; 0066;;;;N;;;;; 1D4BD;MATHEMATICAL SCRIPT SMALL H;Ll;0;L; 0068;;;;N;;;;; 1D4BE;MATHEMATICAL SCRIPT SMALL I;Ll;0;L; 0069;;;;N;;;;; 1D4BF;MATHEMATICAL SCRIPT SMALL J;Ll;0;L; 006A;;;;N;;;;; 1D4C0;MATHEMATICAL SCRIPT SMALL K;Ll;0;L; 006B;;;;N;;;;; 1D4C1;MATHEMATICAL SCRIPT SMALL L;Ll;0;L; 006C;;;;N;;;;; 1D4C2;MATHEMATICAL SCRIPT SMALL M;Ll;0;L; 006D;;;;N;;;;; 1D4C3;MATHEMATICAL SCRIPT SMALL N;Ll;0;L; 006E;;;;N;;;;; 1D4C5;MATHEMATICAL SCRIPT SMALL P;Ll;0;L; 0070;;;;N;;;;; 1D4C6;MATHEMATICAL SCRIPT SMALL Q;Ll;0;L; 0071;;;;N;;;;; 1D4C7;MATHEMATICAL SCRIPT SMALL R;Ll;0;L; 0072;;;;N;;;;; 1D4C8;MATHEMATICAL SCRIPT SMALL S;Ll;0;L; 0073;;;;N;;;;; 1D4C9;MATHEMATICAL SCRIPT SMALL T;Ll;0;L; 0074;;;;N;;;;; 1D4CA;MATHEMATICAL SCRIPT SMALL U;Ll;0;L; 0075;;;;N;;;;; 1D4CB;MATHEMATICAL SCRIPT SMALL V;Ll;0;L; 0076;;;;N;;;;; 1D4CC;MATHEMATICAL SCRIPT SMALL W;Ll;0;L; 0077;;;;N;;;;; 1D4CD;MATHEMATICAL SCRIPT SMALL X;Ll;0;L; 0078;;;;N;;;;; 1D4CE;MATHEMATICAL SCRIPT SMALL Y;Ll;0;L; 0079;;;;N;;;;; 1D4CF;MATHEMATICAL SCRIPT SMALL Z;Ll;0;L; 007A;;;;N;;;;; 1D4D0;MATHEMATICAL BOLD SCRIPT CAPITAL A;Lu;0;L; 0041;;;;N;;;;; 1D4D1;MATHEMATICAL BOLD SCRIPT CAPITAL B;Lu;0;L; 0042;;;;N;;;;; 1D4D2;MATHEMATICAL BOLD SCRIPT CAPITAL C;Lu;0;L; 0043;;;;N;;;;; 1D4D3;MATHEMATICAL BOLD SCRIPT CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 1D4D4;MATHEMATICAL BOLD SCRIPT CAPITAL E;Lu;0;L; 0045;;;;N;;;;; 1D4D5;MATHEMATICAL BOLD SCRIPT CAPITAL F;Lu;0;L; 0046;;;;N;;;;; 1D4D6;MATHEMATICAL BOLD SCRIPT CAPITAL G;Lu;0;L; 0047;;;;N;;;;; 1D4D7;MATHEMATICAL BOLD SCRIPT CAPITAL H;Lu;0;L; 0048;;;;N;;;;; 1D4D8;MATHEMATICAL BOLD SCRIPT CAPITAL I;Lu;0;L; 0049;;;;N;;;;; 1D4D9;MATHEMATICAL BOLD SCRIPT CAPITAL J;Lu;0;L; 004A;;;;N;;;;; 1D4DA;MATHEMATICAL BOLD SCRIPT CAPITAL K;Lu;0;L; 004B;;;;N;;;;; 1D4DB;MATHEMATICAL BOLD SCRIPT CAPITAL L;Lu;0;L; 004C;;;;N;;;;; 1D4DC;MATHEMATICAL BOLD SCRIPT CAPITAL M;Lu;0;L; 004D;;;;N;;;;; 1D4DD;MATHEMATICAL BOLD SCRIPT CAPITAL N;Lu;0;L; 004E;;;;N;;;;; 1D4DE;MATHEMATICAL BOLD SCRIPT CAPITAL O;Lu;0;L; 004F;;;;N;;;;; 1D4DF;MATHEMATICAL BOLD SCRIPT CAPITAL P;Lu;0;L; 0050;;;;N;;;;; 1D4E0;MATHEMATICAL BOLD SCRIPT CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; 1D4E1;MATHEMATICAL BOLD SCRIPT CAPITAL R;Lu;0;L; 0052;;;;N;;;;; 1D4E2;MATHEMATICAL BOLD SCRIPT CAPITAL S;Lu;0;L; 0053;;;;N;;;;; 1D4E3;MATHEMATICAL BOLD SCRIPT CAPITAL T;Lu;0;L; 0054;;;;N;;;;; 1D4E4;MATHEMATICAL BOLD SCRIPT CAPITAL U;Lu;0;L; 0055;;;;N;;;;; 1D4E5;MATHEMATICAL BOLD SCRIPT CAPITAL V;Lu;0;L; 0056;;;;N;;;;; 1D4E6;MATHEMATICAL BOLD SCRIPT CAPITAL W;Lu;0;L; 0057;;;;N;;;;; 1D4E7;MATHEMATICAL BOLD SCRIPT CAPITAL X;Lu;0;L; 0058;;;;N;;;;; 1D4E8;MATHEMATICAL BOLD SCRIPT CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; 1D4E9;MATHEMATICAL BOLD SCRIPT CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; 1D4EA;MATHEMATICAL BOLD SCRIPT SMALL A;Ll;0;L; 0061;;;;N;;;;; 1D4EB;MATHEMATICAL BOLD SCRIPT SMALL B;Ll;0;L; 0062;;;;N;;;;; 1D4EC;MATHEMATICAL BOLD SCRIPT SMALL C;Ll;0;L; 0063;;;;N;;;;; 1D4ED;MATHEMATICAL BOLD SCRIPT SMALL D;Ll;0;L; 0064;;;;N;;;;; 1D4EE;MATHEMATICAL BOLD SCRIPT SMALL E;Ll;0;L; 0065;;;;N;;;;; 1D4EF;MATHEMATICAL BOLD SCRIPT SMALL F;Ll;0;L; 0066;;;;N;;;;; 1D4F0;MATHEMATICAL BOLD SCRIPT SMALL G;Ll;0;L; 0067;;;;N;;;;; 1D4F1;MATHEMATICAL BOLD SCRIPT SMALL H;Ll;0;L; 0068;;;;N;;;;; 1D4F2;MATHEMATICAL BOLD SCRIPT SMALL I;Ll;0;L; 0069;;;;N;;;;; 1D4F3;MATHEMATICAL BOLD SCRIPT SMALL J;Ll;0;L; 006A;;;;N;;;;; 1D4F4;MATHEMATICAL BOLD SCRIPT SMALL K;Ll;0;L; 006B;;;;N;;;;; 1D4F5;MATHEMATICAL BOLD SCRIPT SMALL L;Ll;0;L; 006C;;;;N;;;;; 1D4F6;MATHEMATICAL BOLD SCRIPT SMALL M;Ll;0;L; 006D;;;;N;;;;; 1D4F7;MATHEMATICAL BOLD SCRIPT SMALL N;Ll;0;L; 006E;;;;N;;;;; 1D4F8;MATHEMATICAL BOLD SCRIPT SMALL O;Ll;0;L; 006F;;;;N;;;;; 1D4F9;MATHEMATICAL BOLD SCRIPT SMALL P;Ll;0;L; 0070;;;;N;;;;; 1D4FA;MATHEMATICAL BOLD SCRIPT SMALL Q;Ll;0;L; 0071;;;;N;;;;; 1D4FB;MATHEMATICAL BOLD SCRIPT SMALL R;Ll;0;L; 0072;;;;N;;;;; 1D4FC;MATHEMATICAL BOLD SCRIPT SMALL S;Ll;0;L; 0073;;;;N;;;;; 1D4FD;MATHEMATICAL BOLD SCRIPT SMALL T;Ll;0;L; 0074;;;;N;;;;; 1D4FE;MATHEMATICAL BOLD SCRIPT SMALL U;Ll;0;L; 0075;;;;N;;;;; 1D4FF;MATHEMATICAL BOLD SCRIPT SMALL V;Ll;0;L; 0076;;;;N;;;;; 1D500;MATHEMATICAL BOLD SCRIPT SMALL W;Ll;0;L; 0077;;;;N;;;;; 1D501;MATHEMATICAL BOLD SCRIPT SMALL X;Ll;0;L; 0078;;;;N;;;;; 1D502;MATHEMATICAL BOLD SCRIPT SMALL Y;Ll;0;L; 0079;;;;N;;;;; 1D503;MATHEMATICAL BOLD SCRIPT SMALL Z;Ll;0;L; 007A;;;;N;;;;; 1D504;MATHEMATICAL FRAKTUR CAPITAL A;Lu;0;L; 0041;;;;N;;;;; 1D505;MATHEMATICAL FRAKTUR CAPITAL B;Lu;0;L; 0042;;;;N;;;;; 1D507;MATHEMATICAL FRAKTUR CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 1D508;MATHEMATICAL FRAKTUR CAPITAL E;Lu;0;L; 0045;;;;N;;;;; 1D509;MATHEMATICAL FRAKTUR CAPITAL F;Lu;0;L; 0046;;;;N;;;;; 1D50A;MATHEMATICAL FRAKTUR CAPITAL G;Lu;0;L; 0047;;;;N;;;;; 1D50D;MATHEMATICAL FRAKTUR CAPITAL J;Lu;0;L; 004A;;;;N;;;;; 1D50E;MATHEMATICAL FRAKTUR CAPITAL K;Lu;0;L; 004B;;;;N;;;;; 1D50F;MATHEMATICAL FRAKTUR CAPITAL L;Lu;0;L; 004C;;;;N;;;;; 1D510;MATHEMATICAL FRAKTUR CAPITAL M;Lu;0;L; 004D;;;;N;;;;; 1D511;MATHEMATICAL FRAKTUR CAPITAL N;Lu;0;L; 004E;;;;N;;;;; 1D512;MATHEMATICAL FRAKTUR CAPITAL O;Lu;0;L; 004F;;;;N;;;;; 1D513;MATHEMATICAL FRAKTUR CAPITAL P;Lu;0;L; 0050;;;;N;;;;; 1D514;MATHEMATICAL FRAKTUR CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; 1D516;MATHEMATICAL FRAKTUR CAPITAL S;Lu;0;L; 0053;;;;N;;;;; 1D517;MATHEMATICAL FRAKTUR CAPITAL T;Lu;0;L; 0054;;;;N;;;;; 1D518;MATHEMATICAL FRAKTUR CAPITAL U;Lu;0;L; 0055;;;;N;;;;; 1D519;MATHEMATICAL FRAKTUR CAPITAL V;Lu;0;L; 0056;;;;N;;;;; 1D51A;MATHEMATICAL FRAKTUR CAPITAL W;Lu;0;L; 0057;;;;N;;;;; 1D51B;MATHEMATICAL FRAKTUR CAPITAL X;Lu;0;L; 0058;;;;N;;;;; 1D51C;MATHEMATICAL FRAKTUR CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; 1D51E;MATHEMATICAL FRAKTUR SMALL A;Ll;0;L; 0061;;;;N;;;;; 1D51F;MATHEMATICAL FRAKTUR SMALL B;Ll;0;L; 0062;;;;N;;;;; 1D520;MATHEMATICAL FRAKTUR SMALL C;Ll;0;L; 0063;;;;N;;;;; 1D521;MATHEMATICAL FRAKTUR SMALL D;Ll;0;L; 0064;;;;N;;;;; 1D522;MATHEMATICAL FRAKTUR SMALL E;Ll;0;L; 0065;;;;N;;;;; 1D523;MATHEMATICAL FRAKTUR SMALL F;Ll;0;L; 0066;;;;N;;;;; 1D524;MATHEMATICAL FRAKTUR SMALL G;Ll;0;L; 0067;;;;N;;;;; 1D525;MATHEMATICAL FRAKTUR SMALL H;Ll;0;L; 0068;;;;N;;;;; 1D526;MATHEMATICAL FRAKTUR SMALL I;Ll;0;L; 0069;;;;N;;;;; 1D527;MATHEMATICAL FRAKTUR SMALL J;Ll;0;L; 006A;;;;N;;;;; 1D528;MATHEMATICAL FRAKTUR SMALL K;Ll;0;L; 006B;;;;N;;;;; 1D529;MATHEMATICAL FRAKTUR SMALL L;Ll;0;L; 006C;;;;N;;;;; 1D52A;MATHEMATICAL FRAKTUR SMALL M;Ll;0;L; 006D;;;;N;;;;; 1D52B;MATHEMATICAL FRAKTUR SMALL N;Ll;0;L; 006E;;;;N;;;;; 1D52C;MATHEMATICAL FRAKTUR SMALL O;Ll;0;L; 006F;;;;N;;;;; 1D52D;MATHEMATICAL FRAKTUR SMALL P;Ll;0;L; 0070;;;;N;;;;; 1D52E;MATHEMATICAL FRAKTUR SMALL Q;Ll;0;L; 0071;;;;N;;;;; 1D52F;MATHEMATICAL FRAKTUR SMALL R;Ll;0;L; 0072;;;;N;;;;; 1D530;MATHEMATICAL FRAKTUR SMALL S;Ll;0;L; 0073;;;;N;;;;; 1D531;MATHEMATICAL FRAKTUR SMALL T;Ll;0;L; 0074;;;;N;;;;; 1D532;MATHEMATICAL FRAKTUR SMALL U;Ll;0;L; 0075;;;;N;;;;; 1D533;MATHEMATICAL FRAKTUR SMALL V;Ll;0;L; 0076;;;;N;;;;; 1D534;MATHEMATICAL FRAKTUR SMALL W;Ll;0;L; 0077;;;;N;;;;; 1D535;MATHEMATICAL FRAKTUR SMALL X;Ll;0;L; 0078;;;;N;;;;; 1D536;MATHEMATICAL FRAKTUR SMALL Y;Ll;0;L; 0079;;;;N;;;;; 1D537;MATHEMATICAL FRAKTUR SMALL Z;Ll;0;L; 007A;;;;N;;;;; 1D538;MATHEMATICAL DOUBLE-STRUCK CAPITAL A;Lu;0;L; 0041;;;;N;;;;; 1D539;MATHEMATICAL DOUBLE-STRUCK CAPITAL B;Lu;0;L; 0042;;;;N;;;;; 1D53B;MATHEMATICAL DOUBLE-STRUCK CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 1D53C;MATHEMATICAL DOUBLE-STRUCK CAPITAL E;Lu;0;L; 0045;;;;N;;;;; 1D53D;MATHEMATICAL DOUBLE-STRUCK CAPITAL F;Lu;0;L; 0046;;;;N;;;;; 1D53E;MATHEMATICAL DOUBLE-STRUCK CAPITAL G;Lu;0;L; 0047;;;;N;;;;; 1D540;MATHEMATICAL DOUBLE-STRUCK CAPITAL I;Lu;0;L; 0049;;;;N;;;;; 1D541;MATHEMATICAL DOUBLE-STRUCK CAPITAL J;Lu;0;L; 004A;;;;N;;;;; 1D542;MATHEMATICAL DOUBLE-STRUCK CAPITAL K;Lu;0;L; 004B;;;;N;;;;; 1D543;MATHEMATICAL DOUBLE-STRUCK CAPITAL L;Lu;0;L; 004C;;;;N;;;;; 1D544;MATHEMATICAL DOUBLE-STRUCK CAPITAL M;Lu;0;L; 004D;;;;N;;;;; 1D546;MATHEMATICAL DOUBLE-STRUCK CAPITAL O;Lu;0;L; 004F;;;;N;;;;; 1D54A;MATHEMATICAL DOUBLE-STRUCK CAPITAL S;Lu;0;L; 0053;;;;N;;;;; 1D54B;MATHEMATICAL DOUBLE-STRUCK CAPITAL T;Lu;0;L; 0054;;;;N;;;;; 1D54C;MATHEMATICAL DOUBLE-STRUCK CAPITAL U;Lu;0;L; 0055;;;;N;;;;; 1D54D;MATHEMATICAL DOUBLE-STRUCK CAPITAL V;Lu;0;L; 0056;;;;N;;;;; 1D54E;MATHEMATICAL DOUBLE-STRUCK CAPITAL W;Lu;0;L; 0057;;;;N;;;;; 1D54F;MATHEMATICAL DOUBLE-STRUCK CAPITAL X;Lu;0;L; 0058;;;;N;;;;; 1D550;MATHEMATICAL DOUBLE-STRUCK CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; 1D552;MATHEMATICAL DOUBLE-STRUCK SMALL A;Ll;0;L; 0061;;;;N;;;;; 1D553;MATHEMATICAL DOUBLE-STRUCK SMALL B;Ll;0;L; 0062;;;;N;;;;; 1D554;MATHEMATICAL DOUBLE-STRUCK SMALL C;Ll;0;L; 0063;;;;N;;;;; 1D555;MATHEMATICAL DOUBLE-STRUCK SMALL D;Ll;0;L; 0064;;;;N;;;;; 1D556;MATHEMATICAL DOUBLE-STRUCK SMALL E;Ll;0;L; 0065;;;;N;;;;; 1D557;MATHEMATICAL DOUBLE-STRUCK SMALL F;Ll;0;L; 0066;;;;N;;;;; 1D558;MATHEMATICAL DOUBLE-STRUCK SMALL G;Ll;0;L; 0067;;;;N;;;;; 1D559;MATHEMATICAL DOUBLE-STRUCK SMALL H;Ll;0;L; 0068;;;;N;;;;; 1D55A;MATHEMATICAL DOUBLE-STRUCK SMALL I;Ll;0;L; 0069;;;;N;;;;; 1D55B;MATHEMATICAL DOUBLE-STRUCK SMALL J;Ll;0;L; 006A;;;;N;;;;; 1D55C;MATHEMATICAL DOUBLE-STRUCK SMALL K;Ll;0;L; 006B;;;;N;;;;; 1D55D;MATHEMATICAL DOUBLE-STRUCK SMALL L;Ll;0;L; 006C;;;;N;;;;; 1D55E;MATHEMATICAL DOUBLE-STRUCK SMALL M;Ll;0;L; 006D;;;;N;;;;; 1D55F;MATHEMATICAL DOUBLE-STRUCK SMALL N;Ll;0;L; 006E;;;;N;;;;; 1D560;MATHEMATICAL DOUBLE-STRUCK SMALL O;Ll;0;L; 006F;;;;N;;;;; 1D561;MATHEMATICAL DOUBLE-STRUCK SMALL P;Ll;0;L; 0070;;;;N;;;;; 1D562;MATHEMATICAL DOUBLE-STRUCK SMALL Q;Ll;0;L; 0071;;;;N;;;;; 1D563;MATHEMATICAL DOUBLE-STRUCK SMALL R;Ll;0;L; 0072;;;;N;;;;; 1D564;MATHEMATICAL DOUBLE-STRUCK SMALL S;Ll;0;L; 0073;;;;N;;;;; 1D565;MATHEMATICAL DOUBLE-STRUCK SMALL T;Ll;0;L; 0074;;;;N;;;;; 1D566;MATHEMATICAL DOUBLE-STRUCK SMALL U;Ll;0;L; 0075;;;;N;;;;; 1D567;MATHEMATICAL DOUBLE-STRUCK SMALL V;Ll;0;L; 0076;;;;N;;;;; 1D568;MATHEMATICAL DOUBLE-STRUCK SMALL W;Ll;0;L; 0077;;;;N;;;;; 1D569;MATHEMATICAL DOUBLE-STRUCK SMALL X;Ll;0;L; 0078;;;;N;;;;; 1D56A;MATHEMATICAL DOUBLE-STRUCK SMALL Y;Ll;0;L; 0079;;;;N;;;;; 1D56B;MATHEMATICAL DOUBLE-STRUCK SMALL Z;Ll;0;L; 007A;;;;N;;;;; 1D56C;MATHEMATICAL BOLD FRAKTUR CAPITAL A;Lu;0;L; 0041;;;;N;;;;; 1D56D;MATHEMATICAL BOLD FRAKTUR CAPITAL B;Lu;0;L; 0042;;;;N;;;;; 1D56E;MATHEMATICAL BOLD FRAKTUR CAPITAL C;Lu;0;L; 0043;;;;N;;;;; 1D56F;MATHEMATICAL BOLD FRAKTUR CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 1D570;MATHEMATICAL BOLD FRAKTUR CAPITAL E;Lu;0;L; 0045;;;;N;;;;; 1D571;MATHEMATICAL BOLD FRAKTUR CAPITAL F;Lu;0;L; 0046;;;;N;;;;; 1D572;MATHEMATICAL BOLD FRAKTUR CAPITAL G;Lu;0;L; 0047;;;;N;;;;; 1D573;MATHEMATICAL BOLD FRAKTUR CAPITAL H;Lu;0;L; 0048;;;;N;;;;; 1D574;MATHEMATICAL BOLD FRAKTUR CAPITAL I;Lu;0;L; 0049;;;;N;;;;; 1D575;MATHEMATICAL BOLD FRAKTUR CAPITAL J;Lu;0;L; 004A;;;;N;;;;; 1D576;MATHEMATICAL BOLD FRAKTUR CAPITAL K;Lu;0;L; 004B;;;;N;;;;; 1D577;MATHEMATICAL BOLD FRAKTUR CAPITAL L;Lu;0;L; 004C;;;;N;;;;; 1D578;MATHEMATICAL BOLD FRAKTUR CAPITAL M;Lu;0;L; 004D;;;;N;;;;; 1D579;MATHEMATICAL BOLD FRAKTUR CAPITAL N;Lu;0;L; 004E;;;;N;;;;; 1D57A;MATHEMATICAL BOLD FRAKTUR CAPITAL O;Lu;0;L; 004F;;;;N;;;;; 1D57B;MATHEMATICAL BOLD FRAKTUR CAPITAL P;Lu;0;L; 0050;;;;N;;;;; 1D57C;MATHEMATICAL BOLD FRAKTUR CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; 1D57D;MATHEMATICAL BOLD FRAKTUR CAPITAL R;Lu;0;L; 0052;;;;N;;;;; 1D57E;MATHEMATICAL BOLD FRAKTUR CAPITAL S;Lu;0;L; 0053;;;;N;;;;; 1D57F;MATHEMATICAL BOLD FRAKTUR CAPITAL T;Lu;0;L; 0054;;;;N;;;;; 1D580;MATHEMATICAL BOLD FRAKTUR CAPITAL U;Lu;0;L; 0055;;;;N;;;;; 1D581;MATHEMATICAL BOLD FRAKTUR CAPITAL V;Lu;0;L; 0056;;;;N;;;;; 1D582;MATHEMATICAL BOLD FRAKTUR CAPITAL W;Lu;0;L; 0057;;;;N;;;;; 1D583;MATHEMATICAL BOLD FRAKTUR CAPITAL X;Lu;0;L; 0058;;;;N;;;;; 1D584;MATHEMATICAL BOLD FRAKTUR CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; 1D585;MATHEMATICAL BOLD FRAKTUR CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; 1D586;MATHEMATICAL BOLD FRAKTUR SMALL A;Ll;0;L; 0061;;;;N;;;;; 1D587;MATHEMATICAL BOLD FRAKTUR SMALL B;Ll;0;L; 0062;;;;N;;;;; 1D588;MATHEMATICAL BOLD FRAKTUR SMALL C;Ll;0;L; 0063;;;;N;;;;; 1D589;MATHEMATICAL BOLD FRAKTUR SMALL D;Ll;0;L; 0064;;;;N;;;;; 1D58A;MATHEMATICAL BOLD FRAKTUR SMALL E;Ll;0;L; 0065;;;;N;;;;; 1D58B;MATHEMATICAL BOLD FRAKTUR SMALL F;Ll;0;L; 0066;;;;N;;;;; 1D58C;MATHEMATICAL BOLD FRAKTUR SMALL G;Ll;0;L; 0067;;;;N;;;;; 1D58D;MATHEMATICAL BOLD FRAKTUR SMALL H;Ll;0;L; 0068;;;;N;;;;; 1D58E;MATHEMATICAL BOLD FRAKTUR SMALL I;Ll;0;L; 0069;;;;N;;;;; 1D58F;MATHEMATICAL BOLD FRAKTUR SMALL J;Ll;0;L; 006A;;;;N;;;;; 1D590;MATHEMATICAL BOLD FRAKTUR SMALL K;Ll;0;L; 006B;;;;N;;;;; 1D591;MATHEMATICAL BOLD FRAKTUR SMALL L;Ll;0;L; 006C;;;;N;;;;; 1D592;MATHEMATICAL BOLD FRAKTUR SMALL M;Ll;0;L; 006D;;;;N;;;;; 1D593;MATHEMATICAL BOLD FRAKTUR SMALL N;Ll;0;L; 006E;;;;N;;;;; 1D594;MATHEMATICAL BOLD FRAKTUR SMALL O;Ll;0;L; 006F;;;;N;;;;; 1D595;MATHEMATICAL BOLD FRAKTUR SMALL P;Ll;0;L; 0070;;;;N;;;;; 1D596;MATHEMATICAL BOLD FRAKTUR SMALL Q;Ll;0;L; 0071;;;;N;;;;; 1D597;MATHEMATICAL BOLD FRAKTUR SMALL R;Ll;0;L; 0072;;;;N;;;;; 1D598;MATHEMATICAL BOLD FRAKTUR SMALL S;Ll;0;L; 0073;;;;N;;;;; 1D599;MATHEMATICAL BOLD FRAKTUR SMALL T;Ll;0;L; 0074;;;;N;;;;; 1D59A;MATHEMATICAL BOLD FRAKTUR SMALL U;Ll;0;L; 0075;;;;N;;;;; 1D59B;MATHEMATICAL BOLD FRAKTUR SMALL V;Ll;0;L; 0076;;;;N;;;;; 1D59C;MATHEMATICAL BOLD FRAKTUR SMALL W;Ll;0;L; 0077;;;;N;;;;; 1D59D;MATHEMATICAL BOLD FRAKTUR SMALL X;Ll;0;L; 0078;;;;N;;;;; 1D59E;MATHEMATICAL BOLD FRAKTUR SMALL Y;Ll;0;L; 0079;;;;N;;;;; 1D59F;MATHEMATICAL BOLD FRAKTUR SMALL Z;Ll;0;L; 007A;;;;N;;;;; 1D5A0;MATHEMATICAL SANS-SERIF CAPITAL A;Lu;0;L; 0041;;;;N;;;;; 1D5A1;MATHEMATICAL SANS-SERIF CAPITAL B;Lu;0;L; 0042;;;;N;;;;; 1D5A2;MATHEMATICAL SANS-SERIF CAPITAL C;Lu;0;L; 0043;;;;N;;;;; 1D5A3;MATHEMATICAL SANS-SERIF CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 1D5A4;MATHEMATICAL SANS-SERIF CAPITAL E;Lu;0;L; 0045;;;;N;;;;; 1D5A5;MATHEMATICAL SANS-SERIF CAPITAL F;Lu;0;L; 0046;;;;N;;;;; 1D5A6;MATHEMATICAL SANS-SERIF CAPITAL G;Lu;0;L; 0047;;;;N;;;;; 1D5A7;MATHEMATICAL SANS-SERIF CAPITAL H;Lu;0;L; 0048;;;;N;;;;; 1D5A8;MATHEMATICAL SANS-SERIF CAPITAL I;Lu;0;L; 0049;;;;N;;;;; 1D5A9;MATHEMATICAL SANS-SERIF CAPITAL J;Lu;0;L; 004A;;;;N;;;;; 1D5AA;MATHEMATICAL SANS-SERIF CAPITAL K;Lu;0;L; 004B;;;;N;;;;; 1D5AB;MATHEMATICAL SANS-SERIF CAPITAL L;Lu;0;L; 004C;;;;N;;;;; 1D5AC;MATHEMATICAL SANS-SERIF CAPITAL M;Lu;0;L; 004D;;;;N;;;;; 1D5AD;MATHEMATICAL SANS-SERIF CAPITAL N;Lu;0;L; 004E;;;;N;;;;; 1D5AE;MATHEMATICAL SANS-SERIF CAPITAL O;Lu;0;L; 004F;;;;N;;;;; 1D5AF;MATHEMATICAL SANS-SERIF CAPITAL P;Lu;0;L; 0050;;;;N;;;;; 1D5B0;MATHEMATICAL SANS-SERIF CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; 1D5B1;MATHEMATICAL SANS-SERIF CAPITAL R;Lu;0;L; 0052;;;;N;;;;; 1D5B2;MATHEMATICAL SANS-SERIF CAPITAL S;Lu;0;L; 0053;;;;N;;;;; 1D5B3;MATHEMATICAL SANS-SERIF CAPITAL T;Lu;0;L; 0054;;;;N;;;;; 1D5B4;MATHEMATICAL SANS-SERIF CAPITAL U;Lu;0;L; 0055;;;;N;;;;; 1D5B5;MATHEMATICAL SANS-SERIF CAPITAL V;Lu;0;L; 0056;;;;N;;;;; 1D5B6;MATHEMATICAL SANS-SERIF CAPITAL W;Lu;0;L; 0057;;;;N;;;;; 1D5B7;MATHEMATICAL SANS-SERIF CAPITAL X;Lu;0;L; 0058;;;;N;;;;; 1D5B8;MATHEMATICAL SANS-SERIF CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; 1D5B9;MATHEMATICAL SANS-SERIF CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; 1D5BA;MATHEMATICAL SANS-SERIF SMALL A;Ll;0;L; 0061;;;;N;;;;; 1D5BB;MATHEMATICAL SANS-SERIF SMALL B;Ll;0;L; 0062;;;;N;;;;; 1D5BC;MATHEMATICAL SANS-SERIF SMALL C;Ll;0;L; 0063;;;;N;;;;; 1D5BD;MATHEMATICAL SANS-SERIF SMALL D;Ll;0;L; 0064;;;;N;;;;; 1D5BE;MATHEMATICAL SANS-SERIF SMALL E;Ll;0;L; 0065;;;;N;;;;; 1D5BF;MATHEMATICAL SANS-SERIF SMALL F;Ll;0;L; 0066;;;;N;;;;; 1D5C0;MATHEMATICAL SANS-SERIF SMALL G;Ll;0;L; 0067;;;;N;;;;; 1D5C1;MATHEMATICAL SANS-SERIF SMALL H;Ll;0;L; 0068;;;;N;;;;; 1D5C2;MATHEMATICAL SANS-SERIF SMALL I;Ll;0;L; 0069;;;;N;;;;; 1D5C3;MATHEMATICAL SANS-SERIF SMALL J;Ll;0;L; 006A;;;;N;;;;; 1D5C4;MATHEMATICAL SANS-SERIF SMALL K;Ll;0;L; 006B;;;;N;;;;; 1D5C5;MATHEMATICAL SANS-SERIF SMALL L;Ll;0;L; 006C;;;;N;;;;; 1D5C6;MATHEMATICAL SANS-SERIF SMALL M;Ll;0;L; 006D;;;;N;;;;; 1D5C7;MATHEMATICAL SANS-SERIF SMALL N;Ll;0;L; 006E;;;;N;;;;; 1D5C8;MATHEMATICAL SANS-SERIF SMALL O;Ll;0;L; 006F;;;;N;;;;; 1D5C9;MATHEMATICAL SANS-SERIF SMALL P;Ll;0;L; 0070;;;;N;;;;; 1D5CA;MATHEMATICAL SANS-SERIF SMALL Q;Ll;0;L; 0071;;;;N;;;;; 1D5CB;MATHEMATICAL SANS-SERIF SMALL R;Ll;0;L; 0072;;;;N;;;;; 1D5CC;MATHEMATICAL SANS-SERIF SMALL S;Ll;0;L; 0073;;;;N;;;;; 1D5CD;MATHEMATICAL SANS-SERIF SMALL T;Ll;0;L; 0074;;;;N;;;;; 1D5CE;MATHEMATICAL SANS-SERIF SMALL U;Ll;0;L; 0075;;;;N;;;;; 1D5CF;MATHEMATICAL SANS-SERIF SMALL V;Ll;0;L; 0076;;;;N;;;;; 1D5D0;MATHEMATICAL SANS-SERIF SMALL W;Ll;0;L; 0077;;;;N;;;;; 1D5D1;MATHEMATICAL SANS-SERIF SMALL X;Ll;0;L; 0078;;;;N;;;;; 1D5D2;MATHEMATICAL SANS-SERIF SMALL Y;Ll;0;L; 0079;;;;N;;;;; 1D5D3;MATHEMATICAL SANS-SERIF SMALL Z;Ll;0;L; 007A;;;;N;;;;; 1D5D4;MATHEMATICAL SANS-SERIF BOLD CAPITAL A;Lu;0;L; 0041;;;;N;;;;; 1D5D5;MATHEMATICAL SANS-SERIF BOLD CAPITAL B;Lu;0;L; 0042;;;;N;;;;; 1D5D6;MATHEMATICAL SANS-SERIF BOLD CAPITAL C;Lu;0;L; 0043;;;;N;;;;; 1D5D7;MATHEMATICAL SANS-SERIF BOLD CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 1D5D8;MATHEMATICAL SANS-SERIF BOLD CAPITAL E;Lu;0;L; 0045;;;;N;;;;; 1D5D9;MATHEMATICAL SANS-SERIF BOLD CAPITAL F;Lu;0;L; 0046;;;;N;;;;; 1D5DA;MATHEMATICAL SANS-SERIF BOLD CAPITAL G;Lu;0;L; 0047;;;;N;;;;; 1D5DB;MATHEMATICAL SANS-SERIF BOLD CAPITAL H;Lu;0;L; 0048;;;;N;;;;; 1D5DC;MATHEMATICAL SANS-SERIF BOLD CAPITAL I;Lu;0;L; 0049;;;;N;;;;; 1D5DD;MATHEMATICAL SANS-SERIF BOLD CAPITAL J;Lu;0;L; 004A;;;;N;;;;; 1D5DE;MATHEMATICAL SANS-SERIF BOLD CAPITAL K;Lu;0;L; 004B;;;;N;;;;; 1D5DF;MATHEMATICAL SANS-SERIF BOLD CAPITAL L;Lu;0;L; 004C;;;;N;;;;; 1D5E0;MATHEMATICAL SANS-SERIF BOLD CAPITAL M;Lu;0;L; 004D;;;;N;;;;; 1D5E1;MATHEMATICAL SANS-SERIF BOLD CAPITAL N;Lu;0;L; 004E;;;;N;;;;; 1D5E2;MATHEMATICAL SANS-SERIF BOLD CAPITAL O;Lu;0;L; 004F;;;;N;;;;; 1D5E3;MATHEMATICAL SANS-SERIF BOLD CAPITAL P;Lu;0;L; 0050;;;;N;;;;; 1D5E4;MATHEMATICAL SANS-SERIF BOLD CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; 1D5E5;MATHEMATICAL SANS-SERIF BOLD CAPITAL R;Lu;0;L; 0052;;;;N;;;;; 1D5E6;MATHEMATICAL SANS-SERIF BOLD CAPITAL S;Lu;0;L; 0053;;;;N;;;;; 1D5E7;MATHEMATICAL SANS-SERIF BOLD CAPITAL T;Lu;0;L; 0054;;;;N;;;;; 1D5E8;MATHEMATICAL SANS-SERIF BOLD CAPITAL U;Lu;0;L; 0055;;;;N;;;;; 1D5E9;MATHEMATICAL SANS-SERIF BOLD CAPITAL V;Lu;0;L; 0056;;;;N;;;;; 1D5EA;MATHEMATICAL SANS-SERIF BOLD CAPITAL W;Lu;0;L; 0057;;;;N;;;;; 1D5EB;MATHEMATICAL SANS-SERIF BOLD CAPITAL X;Lu;0;L; 0058;;;;N;;;;; 1D5EC;MATHEMATICAL SANS-SERIF BOLD CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; 1D5ED;MATHEMATICAL SANS-SERIF BOLD CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; 1D5EE;MATHEMATICAL SANS-SERIF BOLD SMALL A;Ll;0;L; 0061;;;;N;;;;; 1D5EF;MATHEMATICAL SANS-SERIF BOLD SMALL B;Ll;0;L; 0062;;;;N;;;;; 1D5F0;MATHEMATICAL SANS-SERIF BOLD SMALL C;Ll;0;L; 0063;;;;N;;;;; 1D5F1;MATHEMATICAL SANS-SERIF BOLD SMALL D;Ll;0;L; 0064;;;;N;;;;; 1D5F2;MATHEMATICAL SANS-SERIF BOLD SMALL E;Ll;0;L; 0065;;;;N;;;;; 1D5F3;MATHEMATICAL SANS-SERIF BOLD SMALL F;Ll;0;L; 0066;;;;N;;;;; 1D5F4;MATHEMATICAL SANS-SERIF BOLD SMALL G;Ll;0;L; 0067;;;;N;;;;; 1D5F5;MATHEMATICAL SANS-SERIF BOLD SMALL H;Ll;0;L; 0068;;;;N;;;;; 1D5F6;MATHEMATICAL SANS-SERIF BOLD SMALL I;Ll;0;L; 0069;;;;N;;;;; 1D5F7;MATHEMATICAL SANS-SERIF BOLD SMALL J;Ll;0;L; 006A;;;;N;;;;; 1D5F8;MATHEMATICAL SANS-SERIF BOLD SMALL K;Ll;0;L; 006B;;;;N;;;;; 1D5F9;MATHEMATICAL SANS-SERIF BOLD SMALL L;Ll;0;L; 006C;;;;N;;;;; 1D5FA;MATHEMATICAL SANS-SERIF BOLD SMALL M;Ll;0;L; 006D;;;;N;;;;; 1D5FB;MATHEMATICAL SANS-SERIF BOLD SMALL N;Ll;0;L; 006E;;;;N;;;;; 1D5FC;MATHEMATICAL SANS-SERIF BOLD SMALL O;Ll;0;L; 006F;;;;N;;;;; 1D5FD;MATHEMATICAL SANS-SERIF BOLD SMALL P;Ll;0;L; 0070;;;;N;;;;; 1D5FE;MATHEMATICAL SANS-SERIF BOLD SMALL Q;Ll;0;L; 0071;;;;N;;;;; 1D5FF;MATHEMATICAL SANS-SERIF BOLD SMALL R;Ll;0;L; 0072;;;;N;;;;; 1D600;MATHEMATICAL SANS-SERIF BOLD SMALL S;Ll;0;L; 0073;;;;N;;;;; 1D601;MATHEMATICAL SANS-SERIF BOLD SMALL T;Ll;0;L; 0074;;;;N;;;;; 1D602;MATHEMATICAL SANS-SERIF BOLD SMALL U;Ll;0;L; 0075;;;;N;;;;; 1D603;MATHEMATICAL SANS-SERIF BOLD SMALL V;Ll;0;L; 0076;;;;N;;;;; 1D604;MATHEMATICAL SANS-SERIF BOLD SMALL W;Ll;0;L; 0077;;;;N;;;;; 1D605;MATHEMATICAL SANS-SERIF BOLD SMALL X;Ll;0;L; 0078;;;;N;;;;; 1D606;MATHEMATICAL SANS-SERIF BOLD SMALL Y;Ll;0;L; 0079;;;;N;;;;; 1D607;MATHEMATICAL SANS-SERIF BOLD SMALL Z;Ll;0;L; 007A;;;;N;;;;; 1D608;MATHEMATICAL SANS-SERIF ITALIC CAPITAL A;Lu;0;L; 0041;;;;N;;;;; 1D609;MATHEMATICAL SANS-SERIF ITALIC CAPITAL B;Lu;0;L; 0042;;;;N;;;;; 1D60A;MATHEMATICAL SANS-SERIF ITALIC CAPITAL C;Lu;0;L; 0043;;;;N;;;;; 1D60B;MATHEMATICAL SANS-SERIF ITALIC CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 1D60C;MATHEMATICAL SANS-SERIF ITALIC CAPITAL E;Lu;0;L; 0045;;;;N;;;;; 1D60D;MATHEMATICAL SANS-SERIF ITALIC CAPITAL F;Lu;0;L; 0046;;;;N;;;;; 1D60E;MATHEMATICAL SANS-SERIF ITALIC CAPITAL G;Lu;0;L; 0047;;;;N;;;;; 1D60F;MATHEMATICAL SANS-SERIF ITALIC CAPITAL H;Lu;0;L; 0048;;;;N;;;;; 1D610;MATHEMATICAL SANS-SERIF ITALIC CAPITAL I;Lu;0;L; 0049;;;;N;;;;; 1D611;MATHEMATICAL SANS-SERIF ITALIC CAPITAL J;Lu;0;L; 004A;;;;N;;;;; 1D612;MATHEMATICAL SANS-SERIF ITALIC CAPITAL K;Lu;0;L; 004B;;;;N;;;;; 1D613;MATHEMATICAL SANS-SERIF ITALIC CAPITAL L;Lu;0;L; 004C;;;;N;;;;; 1D614;MATHEMATICAL SANS-SERIF ITALIC CAPITAL M;Lu;0;L; 004D;;;;N;;;;; 1D615;MATHEMATICAL SANS-SERIF ITALIC CAPITAL N;Lu;0;L; 004E;;;;N;;;;; 1D616;MATHEMATICAL SANS-SERIF ITALIC CAPITAL O;Lu;0;L; 004F;;;;N;;;;; 1D617;MATHEMATICAL SANS-SERIF ITALIC CAPITAL P;Lu;0;L; 0050;;;;N;;;;; 1D618;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; 1D619;MATHEMATICAL SANS-SERIF ITALIC CAPITAL R;Lu;0;L; 0052;;;;N;;;;; 1D61A;MATHEMATICAL SANS-SERIF ITALIC CAPITAL S;Lu;0;L; 0053;;;;N;;;;; 1D61B;MATHEMATICAL SANS-SERIF ITALIC CAPITAL T;Lu;0;L; 0054;;;;N;;;;; 1D61C;MATHEMATICAL SANS-SERIF ITALIC CAPITAL U;Lu;0;L; 0055;;;;N;;;;; 1D61D;MATHEMATICAL SANS-SERIF ITALIC CAPITAL V;Lu;0;L; 0056;;;;N;;;;; 1D61E;MATHEMATICAL SANS-SERIF ITALIC CAPITAL W;Lu;0;L; 0057;;;;N;;;;; 1D61F;MATHEMATICAL SANS-SERIF ITALIC CAPITAL X;Lu;0;L; 0058;;;;N;;;;; 1D620;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; 1D621;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; 1D622;MATHEMATICAL SANS-SERIF ITALIC SMALL A;Ll;0;L; 0061;;;;N;;;;; 1D623;MATHEMATICAL SANS-SERIF ITALIC SMALL B;Ll;0;L; 0062;;;;N;;;;; 1D624;MATHEMATICAL SANS-SERIF ITALIC SMALL C;Ll;0;L; 0063;;;;N;;;;; 1D625;MATHEMATICAL SANS-SERIF ITALIC SMALL D;Ll;0;L; 0064;;;;N;;;;; 1D626;MATHEMATICAL SANS-SERIF ITALIC SMALL E;Ll;0;L; 0065;;;;N;;;;; 1D627;MATHEMATICAL SANS-SERIF ITALIC SMALL F;Ll;0;L; 0066;;;;N;;;;; 1D628;MATHEMATICAL SANS-SERIF ITALIC SMALL G;Ll;0;L; 0067;;;;N;;;;; 1D629;MATHEMATICAL SANS-SERIF ITALIC SMALL H;Ll;0;L; 0068;;;;N;;;;; 1D62A;MATHEMATICAL SANS-SERIF ITALIC SMALL I;Ll;0;L; 0069;;;;N;;;;; 1D62B;MATHEMATICAL SANS-SERIF ITALIC SMALL J;Ll;0;L; 006A;;;;N;;;;; 1D62C;MATHEMATICAL SANS-SERIF ITALIC SMALL K;Ll;0;L; 006B;;;;N;;;;; 1D62D;MATHEMATICAL SANS-SERIF ITALIC SMALL L;Ll;0;L; 006C;;;;N;;;;; 1D62E;MATHEMATICAL SANS-SERIF ITALIC SMALL M;Ll;0;L; 006D;;;;N;;;;; 1D62F;MATHEMATICAL SANS-SERIF ITALIC SMALL N;Ll;0;L; 006E;;;;N;;;;; 1D630;MATHEMATICAL SANS-SERIF ITALIC SMALL O;Ll;0;L; 006F;;;;N;;;;; 1D631;MATHEMATICAL SANS-SERIF ITALIC SMALL P;Ll;0;L; 0070;;;;N;;;;; 1D632;MATHEMATICAL SANS-SERIF ITALIC SMALL Q;Ll;0;L; 0071;;;;N;;;;; 1D633;MATHEMATICAL SANS-SERIF ITALIC SMALL R;Ll;0;L; 0072;;;;N;;;;; 1D634;MATHEMATICAL SANS-SERIF ITALIC SMALL S;Ll;0;L; 0073;;;;N;;;;; 1D635;MATHEMATICAL SANS-SERIF ITALIC SMALL T;Ll;0;L; 0074;;;;N;;;;; 1D636;MATHEMATICAL SANS-SERIF ITALIC SMALL U;Ll;0;L; 0075;;;;N;;;;; 1D637;MATHEMATICAL SANS-SERIF ITALIC SMALL V;Ll;0;L; 0076;;;;N;;;;; 1D638;MATHEMATICAL SANS-SERIF ITALIC SMALL W;Ll;0;L; 0077;;;;N;;;;; 1D639;MATHEMATICAL SANS-SERIF ITALIC SMALL X;Ll;0;L; 0078;;;;N;;;;; 1D63A;MATHEMATICAL SANS-SERIF ITALIC SMALL Y;Ll;0;L; 0079;;;;N;;;;; 1D63B;MATHEMATICAL SANS-SERIF ITALIC SMALL Z;Ll;0;L; 007A;;;;N;;;;; 1D63C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A;Lu;0;L; 0041;;;;N;;;;; 1D63D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B;Lu;0;L; 0042;;;;N;;;;; 1D63E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C;Lu;0;L; 0043;;;;N;;;;; 1D63F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 1D640;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E;Lu;0;L; 0045;;;;N;;;;; 1D641;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F;Lu;0;L; 0046;;;;N;;;;; 1D642;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G;Lu;0;L; 0047;;;;N;;;;; 1D643;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H;Lu;0;L; 0048;;;;N;;;;; 1D644;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I;Lu;0;L; 0049;;;;N;;;;; 1D645;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J;Lu;0;L; 004A;;;;N;;;;; 1D646;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K;Lu;0;L; 004B;;;;N;;;;; 1D647;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L;Lu;0;L; 004C;;;;N;;;;; 1D648;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M;Lu;0;L; 004D;;;;N;;;;; 1D649;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N;Lu;0;L; 004E;;;;N;;;;; 1D64A;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O;Lu;0;L; 004F;;;;N;;;;; 1D64B;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P;Lu;0;L; 0050;;;;N;;;;; 1D64C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; 1D64D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R;Lu;0;L; 0052;;;;N;;;;; 1D64E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S;Lu;0;L; 0053;;;;N;;;;; 1D64F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T;Lu;0;L; 0054;;;;N;;;;; 1D650;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U;Lu;0;L; 0055;;;;N;;;;; 1D651;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V;Lu;0;L; 0056;;;;N;;;;; 1D652;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W;Lu;0;L; 0057;;;;N;;;;; 1D653;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X;Lu;0;L; 0058;;;;N;;;;; 1D654;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; 1D655;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; 1D656;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A;Ll;0;L; 0061;;;;N;;;;; 1D657;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B;Ll;0;L; 0062;;;;N;;;;; 1D658;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C;Ll;0;L; 0063;;;;N;;;;; 1D659;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D;Ll;0;L; 0064;;;;N;;;;; 1D65A;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E;Ll;0;L; 0065;;;;N;;;;; 1D65B;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F;Ll;0;L; 0066;;;;N;;;;; 1D65C;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G;Ll;0;L; 0067;;;;N;;;;; 1D65D;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H;Ll;0;L; 0068;;;;N;;;;; 1D65E;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I;Ll;0;L; 0069;;;;N;;;;; 1D65F;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J;Ll;0;L; 006A;;;;N;;;;; 1D660;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K;Ll;0;L; 006B;;;;N;;;;; 1D661;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L;Ll;0;L; 006C;;;;N;;;;; 1D662;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M;Ll;0;L; 006D;;;;N;;;;; 1D663;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N;Ll;0;L; 006E;;;;N;;;;; 1D664;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O;Ll;0;L; 006F;;;;N;;;;; 1D665;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P;Ll;0;L; 0070;;;;N;;;;; 1D666;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q;Ll;0;L; 0071;;;;N;;;;; 1D667;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R;Ll;0;L; 0072;;;;N;;;;; 1D668;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S;Ll;0;L; 0073;;;;N;;;;; 1D669;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T;Ll;0;L; 0074;;;;N;;;;; 1D66A;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U;Ll;0;L; 0075;;;;N;;;;; 1D66B;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V;Ll;0;L; 0076;;;;N;;;;; 1D66C;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W;Ll;0;L; 0077;;;;N;;;;; 1D66D;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X;Ll;0;L; 0078;;;;N;;;;; 1D66E;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y;Ll;0;L; 0079;;;;N;;;;; 1D66F;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z;Ll;0;L; 007A;;;;N;;;;; 1D670;MATHEMATICAL MONOSPACE CAPITAL A;Lu;0;L; 0041;;;;N;;;;; 1D671;MATHEMATICAL MONOSPACE CAPITAL B;Lu;0;L; 0042;;;;N;;;;; 1D672;MATHEMATICAL MONOSPACE CAPITAL C;Lu;0;L; 0043;;;;N;;;;; 1D673;MATHEMATICAL MONOSPACE CAPITAL D;Lu;0;L; 0044;;;;N;;;;; 1D674;MATHEMATICAL MONOSPACE CAPITAL E;Lu;0;L; 0045;;;;N;;;;; 1D675;MATHEMATICAL MONOSPACE CAPITAL F;Lu;0;L; 0046;;;;N;;;;; 1D676;MATHEMATICAL MONOSPACE CAPITAL G;Lu;0;L; 0047;;;;N;;;;; 1D677;MATHEMATICAL MONOSPACE CAPITAL H;Lu;0;L; 0048;;;;N;;;;; 1D678;MATHEMATICAL MONOSPACE CAPITAL I;Lu;0;L; 0049;;;;N;;;;; 1D679;MATHEMATICAL MONOSPACE CAPITAL J;Lu;0;L; 004A;;;;N;;;;; 1D67A;MATHEMATICAL MONOSPACE CAPITAL K;Lu;0;L; 004B;;;;N;;;;; 1D67B;MATHEMATICAL MONOSPACE CAPITAL L;Lu;0;L; 004C;;;;N;;;;; 1D67C;MATHEMATICAL MONOSPACE CAPITAL M;Lu;0;L; 004D;;;;N;;;;; 1D67D;MATHEMATICAL MONOSPACE CAPITAL N;Lu;0;L; 004E;;;;N;;;;; 1D67E;MATHEMATICAL MONOSPACE CAPITAL O;Lu;0;L; 004F;;;;N;;;;; 1D67F;MATHEMATICAL MONOSPACE CAPITAL P;Lu;0;L; 0050;;;;N;;;;; 1D680;MATHEMATICAL MONOSPACE CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; 1D681;MATHEMATICAL MONOSPACE CAPITAL R;Lu;0;L; 0052;;;;N;;;;; 1D682;MATHEMATICAL MONOSPACE CAPITAL S;Lu;0;L; 0053;;;;N;;;;; 1D683;MATHEMATICAL MONOSPACE CAPITAL T;Lu;0;L; 0054;;;;N;;;;; 1D684;MATHEMATICAL MONOSPACE CAPITAL U;Lu;0;L; 0055;;;;N;;;;; 1D685;MATHEMATICAL MONOSPACE CAPITAL V;Lu;0;L; 0056;;;;N;;;;; 1D686;MATHEMATICAL MONOSPACE CAPITAL W;Lu;0;L; 0057;;;;N;;;;; 1D687;MATHEMATICAL MONOSPACE CAPITAL X;Lu;0;L; 0058;;;;N;;;;; 1D688;MATHEMATICAL MONOSPACE CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; 1D689;MATHEMATICAL MONOSPACE CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; 1D68A;MATHEMATICAL MONOSPACE SMALL A;Ll;0;L; 0061;;;;N;;;;; 1D68B;MATHEMATICAL MONOSPACE SMALL B;Ll;0;L; 0062;;;;N;;;;; 1D68C;MATHEMATICAL MONOSPACE SMALL C;Ll;0;L; 0063;;;;N;;;;; 1D68D;MATHEMATICAL MONOSPACE SMALL D;Ll;0;L; 0064;;;;N;;;;; 1D68E;MATHEMATICAL MONOSPACE SMALL E;Ll;0;L; 0065;;;;N;;;;; 1D68F;MATHEMATICAL MONOSPACE SMALL F;Ll;0;L; 0066;;;;N;;;;; 1D690;MATHEMATICAL MONOSPACE SMALL G;Ll;0;L; 0067;;;;N;;;;; 1D691;MATHEMATICAL MONOSPACE SMALL H;Ll;0;L; 0068;;;;N;;;;; 1D692;MATHEMATICAL MONOSPACE SMALL I;Ll;0;L; 0069;;;;N;;;;; 1D693;MATHEMATICAL MONOSPACE SMALL J;Ll;0;L; 006A;;;;N;;;;; 1D694;MATHEMATICAL MONOSPACE SMALL K;Ll;0;L; 006B;;;;N;;;;; 1D695;MATHEMATICAL MONOSPACE SMALL L;Ll;0;L; 006C;;;;N;;;;; 1D696;MATHEMATICAL MONOSPACE SMALL M;Ll;0;L; 006D;;;;N;;;;; 1D697;MATHEMATICAL MONOSPACE SMALL N;Ll;0;L; 006E;;;;N;;;;; 1D698;MATHEMATICAL MONOSPACE SMALL O;Ll;0;L; 006F;;;;N;;;;; 1D699;MATHEMATICAL MONOSPACE SMALL P;Ll;0;L; 0070;;;;N;;;;; 1D69A;MATHEMATICAL MONOSPACE SMALL Q;Ll;0;L; 0071;;;;N;;;;; 1D69B;MATHEMATICAL MONOSPACE SMALL R;Ll;0;L; 0072;;;;N;;;;; 1D69C;MATHEMATICAL MONOSPACE SMALL S;Ll;0;L; 0073;;;;N;;;;; 1D69D;MATHEMATICAL MONOSPACE SMALL T;Ll;0;L; 0074;;;;N;;;;; 1D69E;MATHEMATICAL MONOSPACE SMALL U;Ll;0;L; 0075;;;;N;;;;; 1D69F;MATHEMATICAL MONOSPACE SMALL V;Ll;0;L; 0076;;;;N;;;;; 1D6A0;MATHEMATICAL MONOSPACE SMALL W;Ll;0;L; 0077;;;;N;;;;; 1D6A1;MATHEMATICAL MONOSPACE SMALL X;Ll;0;L; 0078;;;;N;;;;; 1D6A2;MATHEMATICAL MONOSPACE SMALL Y;Ll;0;L; 0079;;;;N;;;;; 1D6A3;MATHEMATICAL MONOSPACE SMALL Z;Ll;0;L; 007A;;;;N;;;;; 1D6A4;MATHEMATICAL ITALIC SMALL DOTLESS I;Ll;0;L; 0131;;;;N;;;;; 1D6A5;MATHEMATICAL ITALIC SMALL DOTLESS J;Ll;0;L; 0237;;;;N;;;;; 1D6A8;MATHEMATICAL BOLD CAPITAL ALPHA;Lu;0;L; 0391;;;;N;;;;; 1D6A9;MATHEMATICAL BOLD CAPITAL BETA;Lu;0;L; 0392;;;;N;;;;; 1D6AA;MATHEMATICAL BOLD CAPITAL GAMMA;Lu;0;L; 0393;;;;N;;;;; 1D6AB;MATHEMATICAL BOLD CAPITAL DELTA;Lu;0;L; 0394;;;;N;;;;; 1D6AC;MATHEMATICAL BOLD CAPITAL EPSILON;Lu;0;L; 0395;;;;N;;;;; 1D6AD;MATHEMATICAL BOLD CAPITAL ZETA;Lu;0;L; 0396;;;;N;;;;; 1D6AE;MATHEMATICAL BOLD CAPITAL ETA;Lu;0;L; 0397;;;;N;;;;; 1D6AF;MATHEMATICAL BOLD CAPITAL THETA;Lu;0;L; 0398;;;;N;;;;; 1D6B0;MATHEMATICAL BOLD CAPITAL IOTA;Lu;0;L; 0399;;;;N;;;;; 1D6B1;MATHEMATICAL BOLD CAPITAL KAPPA;Lu;0;L; 039A;;;;N;;;;; 1D6B2;MATHEMATICAL BOLD CAPITAL LAMDA;Lu;0;L; 039B;;;;N;;;;; 1D6B3;MATHEMATICAL BOLD CAPITAL MU;Lu;0;L; 039C;;;;N;;;;; 1D6B4;MATHEMATICAL BOLD CAPITAL NU;Lu;0;L; 039D;;;;N;;;;; 1D6B5;MATHEMATICAL BOLD CAPITAL XI;Lu;0;L; 039E;;;;N;;;;; 1D6B6;MATHEMATICAL BOLD CAPITAL OMICRON;Lu;0;L; 039F;;;;N;;;;; 1D6B7;MATHEMATICAL BOLD CAPITAL PI;Lu;0;L; 03A0;;;;N;;;;; 1D6B8;MATHEMATICAL BOLD CAPITAL RHO;Lu;0;L; 03A1;;;;N;;;;; 1D6B9;MATHEMATICAL BOLD CAPITAL THETA SYMBOL;Lu;0;L; 03F4;;;;N;;;;; 1D6BA;MATHEMATICAL BOLD CAPITAL SIGMA;Lu;0;L; 03A3;;;;N;;;;; 1D6BB;MATHEMATICAL BOLD CAPITAL TAU;Lu;0;L; 03A4;;;;N;;;;; 1D6BC;MATHEMATICAL BOLD CAPITAL UPSILON;Lu;0;L; 03A5;;;;N;;;;; 1D6BD;MATHEMATICAL BOLD CAPITAL PHI;Lu;0;L; 03A6;;;;N;;;;; 1D6BE;MATHEMATICAL BOLD CAPITAL CHI;Lu;0;L; 03A7;;;;N;;;;; 1D6BF;MATHEMATICAL BOLD CAPITAL PSI;Lu;0;L; 03A8;;;;N;;;;; 1D6C0;MATHEMATICAL BOLD CAPITAL OMEGA;Lu;0;L; 03A9;;;;N;;;;; 1D6C1;MATHEMATICAL BOLD NABLA;Sm;0;L; 2207;;;;N;;;;; 1D6C2;MATHEMATICAL BOLD SMALL ALPHA;Ll;0;L; 03B1;;;;N;;;;; 1D6C3;MATHEMATICAL BOLD SMALL BETA;Ll;0;L; 03B2;;;;N;;;;; 1D6C4;MATHEMATICAL BOLD SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; 1D6C5;MATHEMATICAL BOLD SMALL DELTA;Ll;0;L; 03B4;;;;N;;;;; 1D6C6;MATHEMATICAL BOLD SMALL EPSILON;Ll;0;L; 03B5;;;;N;;;;; 1D6C7;MATHEMATICAL BOLD SMALL ZETA;Ll;0;L; 03B6;;;;N;;;;; 1D6C8;MATHEMATICAL BOLD SMALL ETA;Ll;0;L; 03B7;;;;N;;;;; 1D6C9;MATHEMATICAL BOLD SMALL THETA;Ll;0;L; 03B8;;;;N;;;;; 1D6CA;MATHEMATICAL BOLD SMALL IOTA;Ll;0;L; 03B9;;;;N;;;;; 1D6CB;MATHEMATICAL BOLD SMALL KAPPA;Ll;0;L; 03BA;;;;N;;;;; 1D6CC;MATHEMATICAL BOLD SMALL LAMDA;Ll;0;L; 03BB;;;;N;;;;; 1D6CD;MATHEMATICAL BOLD SMALL MU;Ll;0;L; 03BC;;;;N;;;;; 1D6CE;MATHEMATICAL BOLD SMALL NU;Ll;0;L; 03BD;;;;N;;;;; 1D6CF;MATHEMATICAL BOLD SMALL XI;Ll;0;L; 03BE;;;;N;;;;; 1D6D0;MATHEMATICAL BOLD SMALL OMICRON;Ll;0;L; 03BF;;;;N;;;;; 1D6D1;MATHEMATICAL BOLD SMALL PI;Ll;0;L; 03C0;;;;N;;;;; 1D6D2;MATHEMATICAL BOLD SMALL RHO;Ll;0;L; 03C1;;;;N;;;;; 1D6D3;MATHEMATICAL BOLD SMALL FINAL SIGMA;Ll;0;L; 03C2;;;;N;;;;; 1D6D4;MATHEMATICAL BOLD SMALL SIGMA;Ll;0;L; 03C3;;;;N;;;;; 1D6D5;MATHEMATICAL BOLD SMALL TAU;Ll;0;L; 03C4;;;;N;;;;; 1D6D6;MATHEMATICAL BOLD SMALL UPSILON;Ll;0;L; 03C5;;;;N;;;;; 1D6D7;MATHEMATICAL BOLD SMALL PHI;Ll;0;L; 03C6;;;;N;;;;; 1D6D8;MATHEMATICAL BOLD SMALL CHI;Ll;0;L; 03C7;;;;N;;;;; 1D6D9;MATHEMATICAL BOLD SMALL PSI;Ll;0;L; 03C8;;;;N;;;;; 1D6DA;MATHEMATICAL BOLD SMALL OMEGA;Ll;0;L; 03C9;;;;N;;;;; 1D6DB;MATHEMATICAL BOLD PARTIAL DIFFERENTIAL;Sm;0;ON; 2202;;;;Y;;;;; 1D6DC;MATHEMATICAL BOLD EPSILON SYMBOL;Ll;0;L; 03F5;;;;N;;;;; 1D6DD;MATHEMATICAL BOLD THETA SYMBOL;Ll;0;L; 03D1;;;;N;;;;; 1D6DE;MATHEMATICAL BOLD KAPPA SYMBOL;Ll;0;L; 03F0;;;;N;;;;; 1D6DF;MATHEMATICAL BOLD PHI SYMBOL;Ll;0;L; 03D5;;;;N;;;;; 1D6E0;MATHEMATICAL BOLD RHO SYMBOL;Ll;0;L; 03F1;;;;N;;;;; 1D6E1;MATHEMATICAL BOLD PI SYMBOL;Ll;0;L; 03D6;;;;N;;;;; 1D6E2;MATHEMATICAL ITALIC CAPITAL ALPHA;Lu;0;L; 0391;;;;N;;;;; 1D6E3;MATHEMATICAL ITALIC CAPITAL BETA;Lu;0;L; 0392;;;;N;;;;; 1D6E4;MATHEMATICAL ITALIC CAPITAL GAMMA;Lu;0;L; 0393;;;;N;;;;; 1D6E5;MATHEMATICAL ITALIC CAPITAL DELTA;Lu;0;L; 0394;;;;N;;;;; 1D6E6;MATHEMATICAL ITALIC CAPITAL EPSILON;Lu;0;L; 0395;;;;N;;;;; 1D6E7;MATHEMATICAL ITALIC CAPITAL ZETA;Lu;0;L; 0396;;;;N;;;;; 1D6E8;MATHEMATICAL ITALIC CAPITAL ETA;Lu;0;L; 0397;;;;N;;;;; 1D6E9;MATHEMATICAL ITALIC CAPITAL THETA;Lu;0;L; 0398;;;;N;;;;; 1D6EA;MATHEMATICAL ITALIC CAPITAL IOTA;Lu;0;L; 0399;;;;N;;;;; 1D6EB;MATHEMATICAL ITALIC CAPITAL KAPPA;Lu;0;L; 039A;;;;N;;;;; 1D6EC;MATHEMATICAL ITALIC CAPITAL LAMDA;Lu;0;L; 039B;;;;N;;;;; 1D6ED;MATHEMATICAL ITALIC CAPITAL MU;Lu;0;L; 039C;;;;N;;;;; 1D6EE;MATHEMATICAL ITALIC CAPITAL NU;Lu;0;L; 039D;;;;N;;;;; 1D6EF;MATHEMATICAL ITALIC CAPITAL XI;Lu;0;L; 039E;;;;N;;;;; 1D6F0;MATHEMATICAL ITALIC CAPITAL OMICRON;Lu;0;L; 039F;;;;N;;;;; 1D6F1;MATHEMATICAL ITALIC CAPITAL PI;Lu;0;L; 03A0;;;;N;;;;; 1D6F2;MATHEMATICAL ITALIC CAPITAL RHO;Lu;0;L; 03A1;;;;N;;;;; 1D6F3;MATHEMATICAL ITALIC CAPITAL THETA SYMBOL;Lu;0;L; 03F4;;;;N;;;;; 1D6F4;MATHEMATICAL ITALIC CAPITAL SIGMA;Lu;0;L; 03A3;;;;N;;;;; 1D6F5;MATHEMATICAL ITALIC CAPITAL TAU;Lu;0;L; 03A4;;;;N;;;;; 1D6F6;MATHEMATICAL ITALIC CAPITAL UPSILON;Lu;0;L; 03A5;;;;N;;;;; 1D6F7;MATHEMATICAL ITALIC CAPITAL PHI;Lu;0;L; 03A6;;;;N;;;;; 1D6F8;MATHEMATICAL ITALIC CAPITAL CHI;Lu;0;L; 03A7;;;;N;;;;; 1D6F9;MATHEMATICAL ITALIC CAPITAL PSI;Lu;0;L; 03A8;;;;N;;;;; 1D6FA;MATHEMATICAL ITALIC CAPITAL OMEGA;Lu;0;L; 03A9;;;;N;;;;; 1D6FB;MATHEMATICAL ITALIC NABLA;Sm;0;L; 2207;;;;N;;;;; 1D6FC;MATHEMATICAL ITALIC SMALL ALPHA;Ll;0;L; 03B1;;;;N;;;;; 1D6FD;MATHEMATICAL ITALIC SMALL BETA;Ll;0;L; 03B2;;;;N;;;;; 1D6FE;MATHEMATICAL ITALIC SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; 1D6FF;MATHEMATICAL ITALIC SMALL DELTA;Ll;0;L; 03B4;;;;N;;;;; 1D700;MATHEMATICAL ITALIC SMALL EPSILON;Ll;0;L; 03B5;;;;N;;;;; 1D701;MATHEMATICAL ITALIC SMALL ZETA;Ll;0;L; 03B6;;;;N;;;;; 1D702;MATHEMATICAL ITALIC SMALL ETA;Ll;0;L; 03B7;;;;N;;;;; 1D703;MATHEMATICAL ITALIC SMALL THETA;Ll;0;L; 03B8;;;;N;;;;; 1D704;MATHEMATICAL ITALIC SMALL IOTA;Ll;0;L; 03B9;;;;N;;;;; 1D705;MATHEMATICAL ITALIC SMALL KAPPA;Ll;0;L; 03BA;;;;N;;;;; 1D706;MATHEMATICAL ITALIC SMALL LAMDA;Ll;0;L; 03BB;;;;N;;;;; 1D707;MATHEMATICAL ITALIC SMALL MU;Ll;0;L; 03BC;;;;N;;;;; 1D708;MATHEMATICAL ITALIC SMALL NU;Ll;0;L; 03BD;;;;N;;;;; 1D709;MATHEMATICAL ITALIC SMALL XI;Ll;0;L; 03BE;;;;N;;;;; 1D70A;MATHEMATICAL ITALIC SMALL OMICRON;Ll;0;L; 03BF;;;;N;;;;; 1D70B;MATHEMATICAL ITALIC SMALL PI;Ll;0;L; 03C0;;;;N;;;;; 1D70C;MATHEMATICAL ITALIC SMALL RHO;Ll;0;L; 03C1;;;;N;;;;; 1D70D;MATHEMATICAL ITALIC SMALL FINAL SIGMA;Ll;0;L; 03C2;;;;N;;;;; 1D70E;MATHEMATICAL ITALIC SMALL SIGMA;Ll;0;L; 03C3;;;;N;;;;; 1D70F;MATHEMATICAL ITALIC SMALL TAU;Ll;0;L; 03C4;;;;N;;;;; 1D710;MATHEMATICAL ITALIC SMALL UPSILON;Ll;0;L; 03C5;;;;N;;;;; 1D711;MATHEMATICAL ITALIC SMALL PHI;Ll;0;L; 03C6;;;;N;;;;; 1D712;MATHEMATICAL ITALIC SMALL CHI;Ll;0;L; 03C7;;;;N;;;;; 1D713;MATHEMATICAL ITALIC SMALL PSI;Ll;0;L; 03C8;;;;N;;;;; 1D714;MATHEMATICAL ITALIC SMALL OMEGA;Ll;0;L; 03C9;;;;N;;;;; 1D715;MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL;Sm;0;ON; 2202;;;;Y;;;;; 1D716;MATHEMATICAL ITALIC EPSILON SYMBOL;Ll;0;L; 03F5;;;;N;;;;; 1D717;MATHEMATICAL ITALIC THETA SYMBOL;Ll;0;L; 03D1;;;;N;;;;; 1D718;MATHEMATICAL ITALIC KAPPA SYMBOL;Ll;0;L; 03F0;;;;N;;;;; 1D719;MATHEMATICAL ITALIC PHI SYMBOL;Ll;0;L; 03D5;;;;N;;;;; 1D71A;MATHEMATICAL ITALIC RHO SYMBOL;Ll;0;L; 03F1;;;;N;;;;; 1D71B;MATHEMATICAL ITALIC PI SYMBOL;Ll;0;L; 03D6;;;;N;;;;; 1D71C;MATHEMATICAL BOLD ITALIC CAPITAL ALPHA;Lu;0;L; 0391;;;;N;;;;; 1D71D;MATHEMATICAL BOLD ITALIC CAPITAL BETA;Lu;0;L; 0392;;;;N;;;;; 1D71E;MATHEMATICAL BOLD ITALIC CAPITAL GAMMA;Lu;0;L; 0393;;;;N;;;;; 1D71F;MATHEMATICAL BOLD ITALIC CAPITAL DELTA;Lu;0;L; 0394;;;;N;;;;; 1D720;MATHEMATICAL BOLD ITALIC CAPITAL EPSILON;Lu;0;L; 0395;;;;N;;;;; 1D721;MATHEMATICAL BOLD ITALIC CAPITAL ZETA;Lu;0;L; 0396;;;;N;;;;; 1D722;MATHEMATICAL BOLD ITALIC CAPITAL ETA;Lu;0;L; 0397;;;;N;;;;; 1D723;MATHEMATICAL BOLD ITALIC CAPITAL THETA;Lu;0;L; 0398;;;;N;;;;; 1D724;MATHEMATICAL BOLD ITALIC CAPITAL IOTA;Lu;0;L; 0399;;;;N;;;;; 1D725;MATHEMATICAL BOLD ITALIC CAPITAL KAPPA;Lu;0;L; 039A;;;;N;;;;; 1D726;MATHEMATICAL BOLD ITALIC CAPITAL LAMDA;Lu;0;L; 039B;;;;N;;;;; 1D727;MATHEMATICAL BOLD ITALIC CAPITAL MU;Lu;0;L; 039C;;;;N;;;;; 1D728;MATHEMATICAL BOLD ITALIC CAPITAL NU;Lu;0;L; 039D;;;;N;;;;; 1D729;MATHEMATICAL BOLD ITALIC CAPITAL XI;Lu;0;L; 039E;;;;N;;;;; 1D72A;MATHEMATICAL BOLD ITALIC CAPITAL OMICRON;Lu;0;L; 039F;;;;N;;;;; 1D72B;MATHEMATICAL BOLD ITALIC CAPITAL PI;Lu;0;L; 03A0;;;;N;;;;; 1D72C;MATHEMATICAL BOLD ITALIC CAPITAL RHO;Lu;0;L; 03A1;;;;N;;;;; 1D72D;MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL;Lu;0;L; 03F4;;;;N;;;;; 1D72E;MATHEMATICAL BOLD ITALIC CAPITAL SIGMA;Lu;0;L; 03A3;;;;N;;;;; 1D72F;MATHEMATICAL BOLD ITALIC CAPITAL TAU;Lu;0;L; 03A4;;;;N;;;;; 1D730;MATHEMATICAL BOLD ITALIC CAPITAL UPSILON;Lu;0;L; 03A5;;;;N;;;;; 1D731;MATHEMATICAL BOLD ITALIC CAPITAL PHI;Lu;0;L; 03A6;;;;N;;;;; 1D732;MATHEMATICAL BOLD ITALIC CAPITAL CHI;Lu;0;L; 03A7;;;;N;;;;; 1D733;MATHEMATICAL BOLD ITALIC CAPITAL PSI;Lu;0;L; 03A8;;;;N;;;;; 1D734;MATHEMATICAL BOLD ITALIC CAPITAL OMEGA;Lu;0;L; 03A9;;;;N;;;;; 1D735;MATHEMATICAL BOLD ITALIC NABLA;Sm;0;L; 2207;;;;N;;;;; 1D736;MATHEMATICAL BOLD ITALIC SMALL ALPHA;Ll;0;L; 03B1;;;;N;;;;; 1D737;MATHEMATICAL BOLD ITALIC SMALL BETA;Ll;0;L; 03B2;;;;N;;;;; 1D738;MATHEMATICAL BOLD ITALIC SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; 1D739;MATHEMATICAL BOLD ITALIC SMALL DELTA;Ll;0;L; 03B4;;;;N;;;;; 1D73A;MATHEMATICAL BOLD ITALIC SMALL EPSILON;Ll;0;L; 03B5;;;;N;;;;; 1D73B;MATHEMATICAL BOLD ITALIC SMALL ZETA;Ll;0;L; 03B6;;;;N;;;;; 1D73C;MATHEMATICAL BOLD ITALIC SMALL ETA;Ll;0;L; 03B7;;;;N;;;;; 1D73D;MATHEMATICAL BOLD ITALIC SMALL THETA;Ll;0;L; 03B8;;;;N;;;;; 1D73E;MATHEMATICAL BOLD ITALIC SMALL IOTA;Ll;0;L; 03B9;;;;N;;;;; 1D73F;MATHEMATICAL BOLD ITALIC SMALL KAPPA;Ll;0;L; 03BA;;;;N;;;;; 1D740;MATHEMATICAL BOLD ITALIC SMALL LAMDA;Ll;0;L; 03BB;;;;N;;;;; 1D741;MATHEMATICAL BOLD ITALIC SMALL MU;Ll;0;L; 03BC;;;;N;;;;; 1D742;MATHEMATICAL BOLD ITALIC SMALL NU;Ll;0;L; 03BD;;;;N;;;;; 1D743;MATHEMATICAL BOLD ITALIC SMALL XI;Ll;0;L; 03BE;;;;N;;;;; 1D744;MATHEMATICAL BOLD ITALIC SMALL OMICRON;Ll;0;L; 03BF;;;;N;;;;; 1D745;MATHEMATICAL BOLD ITALIC SMALL PI;Ll;0;L; 03C0;;;;N;;;;; 1D746;MATHEMATICAL BOLD ITALIC SMALL RHO;Ll;0;L; 03C1;;;;N;;;;; 1D747;MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA;Ll;0;L; 03C2;;;;N;;;;; 1D748;MATHEMATICAL BOLD ITALIC SMALL SIGMA;Ll;0;L; 03C3;;;;N;;;;; 1D749;MATHEMATICAL BOLD ITALIC SMALL TAU;Ll;0;L; 03C4;;;;N;;;;; 1D74A;MATHEMATICAL BOLD ITALIC SMALL UPSILON;Ll;0;L; 03C5;;;;N;;;;; 1D74B;MATHEMATICAL BOLD ITALIC SMALL PHI;Ll;0;L; 03C6;;;;N;;;;; 1D74C;MATHEMATICAL BOLD ITALIC SMALL CHI;Ll;0;L; 03C7;;;;N;;;;; 1D74D;MATHEMATICAL BOLD ITALIC SMALL PSI;Ll;0;L; 03C8;;;;N;;;;; 1D74E;MATHEMATICAL BOLD ITALIC SMALL OMEGA;Ll;0;L; 03C9;;;;N;;;;; 1D74F;MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;ON; 2202;;;;Y;;;;; 1D750;MATHEMATICAL BOLD ITALIC EPSILON SYMBOL;Ll;0;L; 03F5;;;;N;;;;; 1D751;MATHEMATICAL BOLD ITALIC THETA SYMBOL;Ll;0;L; 03D1;;;;N;;;;; 1D752;MATHEMATICAL BOLD ITALIC KAPPA SYMBOL;Ll;0;L; 03F0;;;;N;;;;; 1D753;MATHEMATICAL BOLD ITALIC PHI SYMBOL;Ll;0;L; 03D5;;;;N;;;;; 1D754;MATHEMATICAL BOLD ITALIC RHO SYMBOL;Ll;0;L; 03F1;;;;N;;;;; 1D755;MATHEMATICAL BOLD ITALIC PI SYMBOL;Ll;0;L; 03D6;;;;N;;;;; 1D756;MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA;Lu;0;L; 0391;;;;N;;;;; 1D757;MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA;Lu;0;L; 0392;;;;N;;;;; 1D758;MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA;Lu;0;L; 0393;;;;N;;;;; 1D759;MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA;Lu;0;L; 0394;;;;N;;;;; 1D75A;MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON;Lu;0;L; 0395;;;;N;;;;; 1D75B;MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA;Lu;0;L; 0396;;;;N;;;;; 1D75C;MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA;Lu;0;L; 0397;;;;N;;;;; 1D75D;MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA;Lu;0;L; 0398;;;;N;;;;; 1D75E;MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA;Lu;0;L; 0399;;;;N;;;;; 1D75F;MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA;Lu;0;L; 039A;;;;N;;;;; 1D760;MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA;Lu;0;L; 039B;;;;N;;;;; 1D761;MATHEMATICAL SANS-SERIF BOLD CAPITAL MU;Lu;0;L; 039C;;;;N;;;;; 1D762;MATHEMATICAL SANS-SERIF BOLD CAPITAL NU;Lu;0;L; 039D;;;;N;;;;; 1D763;MATHEMATICAL SANS-SERIF BOLD CAPITAL XI;Lu;0;L; 039E;;;;N;;;;; 1D764;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON;Lu;0;L; 039F;;;;N;;;;; 1D765;MATHEMATICAL SANS-SERIF BOLD CAPITAL PI;Lu;0;L; 03A0;;;;N;;;;; 1D766;MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO;Lu;0;L; 03A1;;;;N;;;;; 1D767;MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL;Lu;0;L; 03F4;;;;N;;;;; 1D768;MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA;Lu;0;L; 03A3;;;;N;;;;; 1D769;MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU;Lu;0;L; 03A4;;;;N;;;;; 1D76A;MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON;Lu;0;L; 03A5;;;;N;;;;; 1D76B;MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI;Lu;0;L; 03A6;;;;N;;;;; 1D76C;MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI;Lu;0;L; 03A7;;;;N;;;;; 1D76D;MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI;Lu;0;L; 03A8;;;;N;;;;; 1D76E;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA;Lu;0;L; 03A9;;;;N;;;;; 1D76F;MATHEMATICAL SANS-SERIF BOLD NABLA;Sm;0;L; 2207;;;;N;;;;; 1D770;MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA;Ll;0;L; 03B1;;;;N;;;;; 1D771;MATHEMATICAL SANS-SERIF BOLD SMALL BETA;Ll;0;L; 03B2;;;;N;;;;; 1D772;MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; 1D773;MATHEMATICAL SANS-SERIF BOLD SMALL DELTA;Ll;0;L; 03B4;;;;N;;;;; 1D774;MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON;Ll;0;L; 03B5;;;;N;;;;; 1D775;MATHEMATICAL SANS-SERIF BOLD SMALL ZETA;Ll;0;L; 03B6;;;;N;;;;; 1D776;MATHEMATICAL SANS-SERIF BOLD SMALL ETA;Ll;0;L; 03B7;;;;N;;;;; 1D777;MATHEMATICAL SANS-SERIF BOLD SMALL THETA;Ll;0;L; 03B8;;;;N;;;;; 1D778;MATHEMATICAL SANS-SERIF BOLD SMALL IOTA;Ll;0;L; 03B9;;;;N;;;;; 1D779;MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA;Ll;0;L; 03BA;;;;N;;;;; 1D77A;MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA;Ll;0;L; 03BB;;;;N;;;;; 1D77B;MATHEMATICAL SANS-SERIF BOLD SMALL MU;Ll;0;L; 03BC;;;;N;;;;; 1D77C;MATHEMATICAL SANS-SERIF BOLD SMALL NU;Ll;0;L; 03BD;;;;N;;;;; 1D77D;MATHEMATICAL SANS-SERIF BOLD SMALL XI;Ll;0;L; 03BE;;;;N;;;;; 1D77E;MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON;Ll;0;L; 03BF;;;;N;;;;; 1D77F;MATHEMATICAL SANS-SERIF BOLD SMALL PI;Ll;0;L; 03C0;;;;N;;;;; 1D780;MATHEMATICAL SANS-SERIF BOLD SMALL RHO;Ll;0;L; 03C1;;;;N;;;;; 1D781;MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA;Ll;0;L; 03C2;;;;N;;;;; 1D782;MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA;Ll;0;L; 03C3;;;;N;;;;; 1D783;MATHEMATICAL SANS-SERIF BOLD SMALL TAU;Ll;0;L; 03C4;;;;N;;;;; 1D784;MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON;Ll;0;L; 03C5;;;;N;;;;; 1D785;MATHEMATICAL SANS-SERIF BOLD SMALL PHI;Ll;0;L; 03C6;;;;N;;;;; 1D786;MATHEMATICAL SANS-SERIF BOLD SMALL CHI;Ll;0;L; 03C7;;;;N;;;;; 1D787;MATHEMATICAL SANS-SERIF BOLD SMALL PSI;Ll;0;L; 03C8;;;;N;;;;; 1D788;MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA;Ll;0;L; 03C9;;;;N;;;;; 1D789;MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL;Sm;0;ON; 2202;;;;Y;;;;; 1D78A;MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL;Ll;0;L; 03F5;;;;N;;;;; 1D78B;MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL;Ll;0;L; 03D1;;;;N;;;;; 1D78C;MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL;Ll;0;L; 03F0;;;;N;;;;; 1D78D;MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL;Ll;0;L; 03D5;;;;N;;;;; 1D78E;MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL;Ll;0;L; 03F1;;;;N;;;;; 1D78F;MATHEMATICAL SANS-SERIF BOLD PI SYMBOL;Ll;0;L; 03D6;;;;N;;;;; 1D790;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA;Lu;0;L; 0391;;;;N;;;;; 1D791;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA;Lu;0;L; 0392;;;;N;;;;; 1D792;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA;Lu;0;L; 0393;;;;N;;;;; 1D793;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA;Lu;0;L; 0394;;;;N;;;;; 1D794;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON;Lu;0;L; 0395;;;;N;;;;; 1D795;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA;Lu;0;L; 0396;;;;N;;;;; 1D796;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA;Lu;0;L; 0397;;;;N;;;;; 1D797;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA;Lu;0;L; 0398;;;;N;;;;; 1D798;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA;Lu;0;L; 0399;;;;N;;;;; 1D799;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA;Lu;0;L; 039A;;;;N;;;;; 1D79A;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA;Lu;0;L; 039B;;;;N;;;;; 1D79B;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU;Lu;0;L; 039C;;;;N;;;;; 1D79C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU;Lu;0;L; 039D;;;;N;;;;; 1D79D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI;Lu;0;L; 039E;;;;N;;;;; 1D79E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON;Lu;0;L; 039F;;;;N;;;;; 1D79F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI;Lu;0;L; 03A0;;;;N;;;;; 1D7A0;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO;Lu;0;L; 03A1;;;;N;;;;; 1D7A1;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL;Lu;0;L; 03F4;;;;N;;;;; 1D7A2;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA;Lu;0;L; 03A3;;;;N;;;;; 1D7A3;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU;Lu;0;L; 03A4;;;;N;;;;; 1D7A4;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON;Lu;0;L; 03A5;;;;N;;;;; 1D7A5;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI;Lu;0;L; 03A6;;;;N;;;;; 1D7A6;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI;Lu;0;L; 03A7;;;;N;;;;; 1D7A7;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI;Lu;0;L; 03A8;;;;N;;;;; 1D7A8;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA;Lu;0;L; 03A9;;;;N;;;;; 1D7A9;MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA;Sm;0;L; 2207;;;;N;;;;; 1D7AA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA;Ll;0;L; 03B1;;;;N;;;;; 1D7AB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA;Ll;0;L; 03B2;;;;N;;;;; 1D7AC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; 1D7AD;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA;Ll;0;L; 03B4;;;;N;;;;; 1D7AE;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON;Ll;0;L; 03B5;;;;N;;;;; 1D7AF;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA;Ll;0;L; 03B6;;;;N;;;;; 1D7B0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA;Ll;0;L; 03B7;;;;N;;;;; 1D7B1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA;Ll;0;L; 03B8;;;;N;;;;; 1D7B2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA;Ll;0;L; 03B9;;;;N;;;;; 1D7B3;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA;Ll;0;L; 03BA;;;;N;;;;; 1D7B4;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA;Ll;0;L; 03BB;;;;N;;;;; 1D7B5;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU;Ll;0;L; 03BC;;;;N;;;;; 1D7B6;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU;Ll;0;L; 03BD;;;;N;;;;; 1D7B7;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI;Ll;0;L; 03BE;;;;N;;;;; 1D7B8;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON;Ll;0;L; 03BF;;;;N;;;;; 1D7B9;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI;Ll;0;L; 03C0;;;;N;;;;; 1D7BA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO;Ll;0;L; 03C1;;;;N;;;;; 1D7BB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA;Ll;0;L; 03C2;;;;N;;;;; 1D7BC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA;Ll;0;L; 03C3;;;;N;;;;; 1D7BD;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU;Ll;0;L; 03C4;;;;N;;;;; 1D7BE;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON;Ll;0;L; 03C5;;;;N;;;;; 1D7BF;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI;Ll;0;L; 03C6;;;;N;;;;; 1D7C0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI;Ll;0;L; 03C7;;;;N;;;;; 1D7C1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI;Ll;0;L; 03C8;;;;N;;;;; 1D7C2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA;Ll;0;L; 03C9;;;;N;;;;; 1D7C3;MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;ON; 2202;;;;Y;;;;; 1D7C4;MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL;Ll;0;L; 03F5;;;;N;;;;; 1D7C5;MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL;Ll;0;L; 03D1;;;;N;;;;; 1D7C6;MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL;Ll;0;L; 03F0;;;;N;;;;; 1D7C7;MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL;Ll;0;L; 03D5;;;;N;;;;; 1D7C8;MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL;Ll;0;L; 03F1;;;;N;;;;; 1D7C9;MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL;Ll;0;L; 03D6;;;;N;;;;; 1D7CA;MATHEMATICAL BOLD CAPITAL DIGAMMA;Lu;0;L; 03DC;;;;N;;;;; 1D7CB;MATHEMATICAL BOLD SMALL DIGAMMA;Ll;0;L; 03DD;;;;N;;;;; 1D7CE;MATHEMATICAL BOLD DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; 1D7CF;MATHEMATICAL BOLD DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; 1D7D0;MATHEMATICAL BOLD DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; 1D7D1;MATHEMATICAL BOLD DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; 1D7D2;MATHEMATICAL BOLD DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; 1D7D3;MATHEMATICAL BOLD DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; 1D7D4;MATHEMATICAL BOLD DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; 1D7D5;MATHEMATICAL BOLD DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; 1D7D6;MATHEMATICAL BOLD DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; 1D7D7;MATHEMATICAL BOLD DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; 1D7D8;MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; 1D7D9;MATHEMATICAL DOUBLE-STRUCK DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; 1D7DA;MATHEMATICAL DOUBLE-STRUCK DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; 1D7DB;MATHEMATICAL DOUBLE-STRUCK DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; 1D7DC;MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; 1D7DD;MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; 1D7DE;MATHEMATICAL DOUBLE-STRUCK DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; 1D7DF;MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; 1D7E0;MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; 1D7E1;MATHEMATICAL DOUBLE-STRUCK DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; 1D7E2;MATHEMATICAL SANS-SERIF DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; 1D7E3;MATHEMATICAL SANS-SERIF DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; 1D7E4;MATHEMATICAL SANS-SERIF DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; 1D7E5;MATHEMATICAL SANS-SERIF DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; 1D7E6;MATHEMATICAL SANS-SERIF DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; 1D7E7;MATHEMATICAL SANS-SERIF DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; 1D7E8;MATHEMATICAL SANS-SERIF DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; 1D7E9;MATHEMATICAL SANS-SERIF DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; 1D7EA;MATHEMATICAL SANS-SERIF DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; 1D7EB;MATHEMATICAL SANS-SERIF DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; 1D7EC;MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; 1D7ED;MATHEMATICAL SANS-SERIF BOLD DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; 1D7EE;MATHEMATICAL SANS-SERIF BOLD DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; 1D7EF;MATHEMATICAL SANS-SERIF BOLD DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; 1D7F0;MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; 1D7F1;MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; 1D7F2;MATHEMATICAL SANS-SERIF BOLD DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; 1D7F3;MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; 1D7F4;MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; 1D7F5;MATHEMATICAL SANS-SERIF BOLD DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; 1D7F6;MATHEMATICAL MONOSPACE DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; 1D7F7;MATHEMATICAL MONOSPACE DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; 1D7F8;MATHEMATICAL MONOSPACE DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; 1D7F9;MATHEMATICAL MONOSPACE DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; 1D7FA;MATHEMATICAL MONOSPACE DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; 1D7FB;MATHEMATICAL MONOSPACE DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; 1D7FC;MATHEMATICAL MONOSPACE DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; 1D7FD;MATHEMATICAL MONOSPACE DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; 1D7FE;MATHEMATICAL MONOSPACE DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; 1D7FF;MATHEMATICAL MONOSPACE DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; 1D800;SIGNWRITING HAND-FIST INDEX;So;0;L;;;;;N;;;;; 1D801;SIGNWRITING HAND-CIRCLE INDEX;So;0;L;;;;;N;;;;; 1D802;SIGNWRITING HAND-CUP INDEX;So;0;L;;;;;N;;;;; 1D803;SIGNWRITING HAND-OVAL INDEX;So;0;L;;;;;N;;;;; 1D804;SIGNWRITING HAND-HINGE INDEX;So;0;L;;;;;N;;;;; 1D805;SIGNWRITING HAND-ANGLE INDEX;So;0;L;;;;;N;;;;; 1D806;SIGNWRITING HAND-FIST INDEX BENT;So;0;L;;;;;N;;;;; 1D807;SIGNWRITING HAND-CIRCLE INDEX BENT;So;0;L;;;;;N;;;;; 1D808;SIGNWRITING HAND-FIST THUMB UNDER INDEX BENT;So;0;L;;;;;N;;;;; 1D809;SIGNWRITING HAND-FIST INDEX RAISED KNUCKLE;So;0;L;;;;;N;;;;; 1D80A;SIGNWRITING HAND-FIST INDEX CUPPED;So;0;L;;;;;N;;;;; 1D80B;SIGNWRITING HAND-FIST INDEX HINGED;So;0;L;;;;;N;;;;; 1D80C;SIGNWRITING HAND-FIST INDEX HINGED LOW;So;0;L;;;;;N;;;;; 1D80D;SIGNWRITING HAND-CIRCLE INDEX HINGE;So;0;L;;;;;N;;;;; 1D80E;SIGNWRITING HAND-FIST INDEX MIDDLE;So;0;L;;;;;N;;;;; 1D80F;SIGNWRITING HAND-CIRCLE INDEX MIDDLE;So;0;L;;;;;N;;;;; 1D810;SIGNWRITING HAND-FIST INDEX MIDDLE BENT;So;0;L;;;;;N;;;;; 1D811;SIGNWRITING HAND-FIST INDEX MIDDLE RAISED KNUCKLES;So;0;L;;;;;N;;;;; 1D812;SIGNWRITING HAND-FIST INDEX MIDDLE HINGED;So;0;L;;;;;N;;;;; 1D813;SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED;So;0;L;;;;;N;;;;; 1D814;SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP;So;0;L;;;;;N;;;;; 1D815;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED;So;0;L;;;;;N;;;;; 1D816;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED INDEX BENT;So;0;L;;;;;N;;;;; 1D817;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED MIDDLE BENT;So;0;L;;;;;N;;;;; 1D818;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED;So;0;L;;;;;N;;;;; 1D819;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED;So;0;L;;;;;N;;;;; 1D81A;SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED;So;0;L;;;;;N;;;;; 1D81B;SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSSED;So;0;L;;;;;N;;;;; 1D81C;SIGNWRITING HAND-FIST MIDDLE BENT OVER INDEX;So;0;L;;;;;N;;;;; 1D81D;SIGNWRITING HAND-FIST INDEX BENT OVER MIDDLE;So;0;L;;;;;N;;;;; 1D81E;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB;So;0;L;;;;;N;;;;; 1D81F;SIGNWRITING HAND-CIRCLE INDEX MIDDLE THUMB;So;0;L;;;;;N;;;;; 1D820;SIGNWRITING HAND-FIST INDEX MIDDLE STRAIGHT THUMB BENT;So;0;L;;;;;N;;;;; 1D821;SIGNWRITING HAND-FIST INDEX MIDDLE BENT THUMB STRAIGHT;So;0;L;;;;;N;;;;; 1D822;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB BENT;So;0;L;;;;;N;;;;; 1D823;SIGNWRITING HAND-FIST INDEX MIDDLE HINGED SPREAD THUMB SIDE;So;0;L;;;;;N;;;;; 1D824;SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB SIDE;So;0;L;;;;;N;;;;; 1D825;SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB CONJOINED;So;0;L;;;;;N;;;;; 1D826;SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP THUMB SIDE;So;0;L;;;;;N;;;;; 1D827;SIGNWRITING HAND-FIST INDEX MIDDLE UP SPREAD THUMB FORWARD;So;0;L;;;;;N;;;;; 1D828;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CUPPED;So;0;L;;;;;N;;;;; 1D829;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CIRCLED;So;0;L;;;;;N;;;;; 1D82A;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HOOKED;So;0;L;;;;;N;;;;; 1D82B;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HINGED;So;0;L;;;;;N;;;;; 1D82C;SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE STRAIGHT;So;0;L;;;;;N;;;;; 1D82D;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE;So;0;L;;;;;N;;;;; 1D82E;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE CONJOINED;So;0;L;;;;;N;;;;; 1D82F;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE BENT;So;0;L;;;;;N;;;;; 1D830;SIGNWRITING HAND-FIST MIDDLE THUMB HOOKED INDEX UP;So;0;L;;;;;N;;;;; 1D831;SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE UP;So;0;L;;;;;N;;;;; 1D832;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED THUMB SIDE;So;0;L;;;;;N;;;;; 1D833;SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED THUMB SIDE;So;0;L;;;;;N;;;;; 1D834;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB FORWARD;So;0;L;;;;;N;;;;; 1D835;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED THUMB FORWARD;So;0;L;;;;;N;;;;; 1D836;SIGNWRITING HAND-FIST MIDDLE THUMB CUPPED INDEX UP;So;0;L;;;;;N;;;;; 1D837;SIGNWRITING HAND-FIST INDEX THUMB CUPPED MIDDLE UP;So;0;L;;;;;N;;;;; 1D838;SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX UP;So;0;L;;;;;N;;;;; 1D839;SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX HINGED;So;0;L;;;;;N;;;;; 1D83A;SIGNWRITING HAND-FIST INDEX THUMB ANGLED OUT MIDDLE UP;So;0;L;;;;;N;;;;; 1D83B;SIGNWRITING HAND-FIST INDEX THUMB ANGLED IN MIDDLE UP;So;0;L;;;;;N;;;;; 1D83C;SIGNWRITING HAND-FIST INDEX THUMB CIRCLED MIDDLE UP;So;0;L;;;;;N;;;;; 1D83D;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CONJOINED HINGED;So;0;L;;;;;N;;;;; 1D83E;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED OUT;So;0;L;;;;;N;;;;; 1D83F;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED;So;0;L;;;;;N;;;;; 1D840;SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX UP;So;0;L;;;;;N;;;;; 1D841;SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX CROSSED;So;0;L;;;;;N;;;;; 1D842;SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED INDEX UP;So;0;L;;;;;N;;;;; 1D843;SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE HINGED;So;0;L;;;;;N;;;;; 1D844;SIGNWRITING HAND-FLAT FOUR FINGERS;So;0;L;;;;;N;;;;; 1D845;SIGNWRITING HAND-FLAT FOUR FINGERS BENT;So;0;L;;;;;N;;;;; 1D846;SIGNWRITING HAND-FLAT FOUR FINGERS HINGED;So;0;L;;;;;N;;;;; 1D847;SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED;So;0;L;;;;;N;;;;; 1D848;SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED SPLIT;So;0;L;;;;;N;;;;; 1D849;SIGNWRITING HAND-CLAW FOUR FINGERS CONJOINED;So;0;L;;;;;N;;;;; 1D84A;SIGNWRITING HAND-FIST FOUR FINGERS CONJOINED BENT;So;0;L;;;;;N;;;;; 1D84B;SIGNWRITING HAND-HINGE FOUR FINGERS CONJOINED;So;0;L;;;;;N;;;;; 1D84C;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD;So;0;L;;;;;N;;;;; 1D84D;SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD;So;0;L;;;;;N;;;;; 1D84E;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD FOUR BENT;So;0;L;;;;;N;;;;; 1D84F;SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD FOUR BENT;So;0;L;;;;;N;;;;; 1D850;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD BENT;So;0;L;;;;;N;;;;; 1D851;SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD BENT;So;0;L;;;;;N;;;;; 1D852;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD THUMB FORWARD;So;0;L;;;;;N;;;;; 1D853;SIGNWRITING HAND-CUP FIVE FINGERS SPREAD;So;0;L;;;;;N;;;;; 1D854;SIGNWRITING HAND-CUP FIVE FINGERS SPREAD OPEN;So;0;L;;;;;N;;;;; 1D855;SIGNWRITING HAND-HINGE FIVE FINGERS SPREAD OPEN;So;0;L;;;;;N;;;;; 1D856;SIGNWRITING HAND-OVAL FIVE FINGERS SPREAD;So;0;L;;;;;N;;;;; 1D857;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED;So;0;L;;;;;N;;;;; 1D858;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED THUMB SIDE;So;0;L;;;;;N;;;;; 1D859;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED NO THUMB;So;0;L;;;;;N;;;;; 1D85A;SIGNWRITING HAND-FLAT;So;0;L;;;;;N;;;;; 1D85B;SIGNWRITING HAND-FLAT BETWEEN PALM FACINGS;So;0;L;;;;;N;;;;; 1D85C;SIGNWRITING HAND-FLAT HEEL;So;0;L;;;;;N;;;;; 1D85D;SIGNWRITING HAND-FLAT THUMB SIDE;So;0;L;;;;;N;;;;; 1D85E;SIGNWRITING HAND-FLAT HEEL THUMB SIDE;So;0;L;;;;;N;;;;; 1D85F;SIGNWRITING HAND-FLAT THUMB BENT;So;0;L;;;;;N;;;;; 1D860;SIGNWRITING HAND-FLAT THUMB FORWARD;So;0;L;;;;;N;;;;; 1D861;SIGNWRITING HAND-FLAT SPLIT INDEX THUMB SIDE;So;0;L;;;;;N;;;;; 1D862;SIGNWRITING HAND-FLAT SPLIT CENTRE;So;0;L;;;;;N;;;;; 1D863;SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE;So;0;L;;;;;N;;;;; 1D864;SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE BENT;So;0;L;;;;;N;;;;; 1D865;SIGNWRITING HAND-FLAT SPLIT LITTLE;So;0;L;;;;;N;;;;; 1D866;SIGNWRITING HAND-CLAW;So;0;L;;;;;N;;;;; 1D867;SIGNWRITING HAND-CLAW THUMB SIDE;So;0;L;;;;;N;;;;; 1D868;SIGNWRITING HAND-CLAW NO THUMB;So;0;L;;;;;N;;;;; 1D869;SIGNWRITING HAND-CLAW THUMB FORWARD;So;0;L;;;;;N;;;;; 1D86A;SIGNWRITING HAND-HOOK CURLICUE;So;0;L;;;;;N;;;;; 1D86B;SIGNWRITING HAND-HOOK;So;0;L;;;;;N;;;;; 1D86C;SIGNWRITING HAND-CUP OPEN;So;0;L;;;;;N;;;;; 1D86D;SIGNWRITING HAND-CUP;So;0;L;;;;;N;;;;; 1D86E;SIGNWRITING HAND-CUP OPEN THUMB SIDE;So;0;L;;;;;N;;;;; 1D86F;SIGNWRITING HAND-CUP THUMB SIDE;So;0;L;;;;;N;;;;; 1D870;SIGNWRITING HAND-CUP OPEN NO THUMB;So;0;L;;;;;N;;;;; 1D871;SIGNWRITING HAND-CUP NO THUMB;So;0;L;;;;;N;;;;; 1D872;SIGNWRITING HAND-CUP OPEN THUMB FORWARD;So;0;L;;;;;N;;;;; 1D873;SIGNWRITING HAND-CUP THUMB FORWARD;So;0;L;;;;;N;;;;; 1D874;SIGNWRITING HAND-CURLICUE OPEN;So;0;L;;;;;N;;;;; 1D875;SIGNWRITING HAND-CURLICUE;So;0;L;;;;;N;;;;; 1D876;SIGNWRITING HAND-CIRCLE;So;0;L;;;;;N;;;;; 1D877;SIGNWRITING HAND-OVAL;So;0;L;;;;;N;;;;; 1D878;SIGNWRITING HAND-OVAL THUMB SIDE;So;0;L;;;;;N;;;;; 1D879;SIGNWRITING HAND-OVAL NO THUMB;So;0;L;;;;;N;;;;; 1D87A;SIGNWRITING HAND-OVAL THUMB FORWARD;So;0;L;;;;;N;;;;; 1D87B;SIGNWRITING HAND-HINGE OPEN;So;0;L;;;;;N;;;;; 1D87C;SIGNWRITING HAND-HINGE OPEN THUMB FORWARD;So;0;L;;;;;N;;;;; 1D87D;SIGNWRITING HAND-HINGE;So;0;L;;;;;N;;;;; 1D87E;SIGNWRITING HAND-HINGE SMALL;So;0;L;;;;;N;;;;; 1D87F;SIGNWRITING HAND-HINGE OPEN THUMB SIDE;So;0;L;;;;;N;;;;; 1D880;SIGNWRITING HAND-HINGE THUMB SIDE;So;0;L;;;;;N;;;;; 1D881;SIGNWRITING HAND-HINGE OPEN NO THUMB;So;0;L;;;;;N;;;;; 1D882;SIGNWRITING HAND-HINGE NO THUMB;So;0;L;;;;;N;;;;; 1D883;SIGNWRITING HAND-HINGE THUMB SIDE TOUCHING INDEX;So;0;L;;;;;N;;;;; 1D884;SIGNWRITING HAND-HINGE THUMB BETWEEN MIDDLE RING;So;0;L;;;;;N;;;;; 1D885;SIGNWRITING HAND-ANGLE;So;0;L;;;;;N;;;;; 1D886;SIGNWRITING HAND-FIST INDEX MIDDLE RING;So;0;L;;;;;N;;;;; 1D887;SIGNWRITING HAND-CIRCLE INDEX MIDDLE RING;So;0;L;;;;;N;;;;; 1D888;SIGNWRITING HAND-HINGE INDEX MIDDLE RING;So;0;L;;;;;N;;;;; 1D889;SIGNWRITING HAND-ANGLE INDEX MIDDLE RING;So;0;L;;;;;N;;;;; 1D88A;SIGNWRITING HAND-HINGE LITTLE;So;0;L;;;;;N;;;;; 1D88B;SIGNWRITING HAND-FIST INDEX MIDDLE RING BENT;So;0;L;;;;;N;;;;; 1D88C;SIGNWRITING HAND-FIST INDEX MIDDLE RING CONJOINED;So;0;L;;;;;N;;;;; 1D88D;SIGNWRITING HAND-HINGE INDEX MIDDLE RING CONJOINED;So;0;L;;;;;N;;;;; 1D88E;SIGNWRITING HAND-FIST LITTLE DOWN;So;0;L;;;;;N;;;;; 1D88F;SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE STRAIGHT;So;0;L;;;;;N;;;;; 1D890;SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE CURVED;So;0;L;;;;;N;;;;; 1D891;SIGNWRITING HAND-FIST LITTLE DOWN OTHERS CIRCLED;So;0;L;;;;;N;;;;; 1D892;SIGNWRITING HAND-FIST LITTLE UP;So;0;L;;;;;N;;;;; 1D893;SIGNWRITING HAND-FIST THUMB UNDER LITTLE UP;So;0;L;;;;;N;;;;; 1D894;SIGNWRITING HAND-CIRCLE LITTLE UP;So;0;L;;;;;N;;;;; 1D895;SIGNWRITING HAND-OVAL LITTLE UP;So;0;L;;;;;N;;;;; 1D896;SIGNWRITING HAND-ANGLE LITTLE UP;So;0;L;;;;;N;;;;; 1D897;SIGNWRITING HAND-FIST LITTLE RAISED KNUCKLE;So;0;L;;;;;N;;;;; 1D898;SIGNWRITING HAND-FIST LITTLE BENT;So;0;L;;;;;N;;;;; 1D899;SIGNWRITING HAND-FIST LITTLE TOUCHES THUMB;So;0;L;;;;;N;;;;; 1D89A;SIGNWRITING HAND-FIST LITTLE THUMB;So;0;L;;;;;N;;;;; 1D89B;SIGNWRITING HAND-HINGE LITTLE THUMB;So;0;L;;;;;N;;;;; 1D89C;SIGNWRITING HAND-FIST LITTLE INDEX THUMB;So;0;L;;;;;N;;;;; 1D89D;SIGNWRITING HAND-HINGE LITTLE INDEX THUMB;So;0;L;;;;;N;;;;; 1D89E;SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB OUT;So;0;L;;;;;N;;;;; 1D89F;SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB;So;0;L;;;;;N;;;;; 1D8A0;SIGNWRITING HAND-FIST LITTLE INDEX;So;0;L;;;;;N;;;;; 1D8A1;SIGNWRITING HAND-CIRCLE LITTLE INDEX;So;0;L;;;;;N;;;;; 1D8A2;SIGNWRITING HAND-HINGE LITTLE INDEX;So;0;L;;;;;N;;;;; 1D8A3;SIGNWRITING HAND-ANGLE LITTLE INDEX;So;0;L;;;;;N;;;;; 1D8A4;SIGNWRITING HAND-FIST INDEX MIDDLE LITTLE;So;0;L;;;;;N;;;;; 1D8A5;SIGNWRITING HAND-CIRCLE INDEX MIDDLE LITTLE;So;0;L;;;;;N;;;;; 1D8A6;SIGNWRITING HAND-HINGE INDEX MIDDLE LITTLE;So;0;L;;;;;N;;;;; 1D8A7;SIGNWRITING HAND-HINGE RING;So;0;L;;;;;N;;;;; 1D8A8;SIGNWRITING HAND-ANGLE INDEX MIDDLE LITTLE;So;0;L;;;;;N;;;;; 1D8A9;SIGNWRITING HAND-FIST INDEX MIDDLE CROSS LITTLE;So;0;L;;;;;N;;;;; 1D8AA;SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSS LITTLE;So;0;L;;;;;N;;;;; 1D8AB;SIGNWRITING HAND-FIST RING DOWN;So;0;L;;;;;N;;;;; 1D8AC;SIGNWRITING HAND-HINGE RING DOWN INDEX THUMB HOOK MIDDLE;So;0;L;;;;;N;;;;; 1D8AD;SIGNWRITING HAND-ANGLE RING DOWN MIDDLE THUMB INDEX CROSS;So;0;L;;;;;N;;;;; 1D8AE;SIGNWRITING HAND-FIST RING UP;So;0;L;;;;;N;;;;; 1D8AF;SIGNWRITING HAND-FIST RING RAISED KNUCKLE;So;0;L;;;;;N;;;;; 1D8B0;SIGNWRITING HAND-FIST RING LITTLE;So;0;L;;;;;N;;;;; 1D8B1;SIGNWRITING HAND-CIRCLE RING LITTLE;So;0;L;;;;;N;;;;; 1D8B2;SIGNWRITING HAND-OVAL RING LITTLE;So;0;L;;;;;N;;;;; 1D8B3;SIGNWRITING HAND-ANGLE RING LITTLE;So;0;L;;;;;N;;;;; 1D8B4;SIGNWRITING HAND-FIST RING MIDDLE;So;0;L;;;;;N;;;;; 1D8B5;SIGNWRITING HAND-FIST RING MIDDLE CONJOINED;So;0;L;;;;;N;;;;; 1D8B6;SIGNWRITING HAND-FIST RING MIDDLE RAISED KNUCKLES;So;0;L;;;;;N;;;;; 1D8B7;SIGNWRITING HAND-FIST RING INDEX;So;0;L;;;;;N;;;;; 1D8B8;SIGNWRITING HAND-FIST RING THUMB;So;0;L;;;;;N;;;;; 1D8B9;SIGNWRITING HAND-HOOK RING THUMB;So;0;L;;;;;N;;;;; 1D8BA;SIGNWRITING HAND-FIST INDEX RING LITTLE;So;0;L;;;;;N;;;;; 1D8BB;SIGNWRITING HAND-CIRCLE INDEX RING LITTLE;So;0;L;;;;;N;;;;; 1D8BC;SIGNWRITING HAND-CURLICUE INDEX RING LITTLE ON;So;0;L;;;;;N;;;;; 1D8BD;SIGNWRITING HAND-HOOK INDEX RING LITTLE OUT;So;0;L;;;;;N;;;;; 1D8BE;SIGNWRITING HAND-HOOK INDEX RING LITTLE IN;So;0;L;;;;;N;;;;; 1D8BF;SIGNWRITING HAND-HOOK INDEX RING LITTLE UNDER;So;0;L;;;;;N;;;;; 1D8C0;SIGNWRITING HAND-CUP INDEX RING LITTLE;So;0;L;;;;;N;;;;; 1D8C1;SIGNWRITING HAND-HINGE INDEX RING LITTLE;So;0;L;;;;;N;;;;; 1D8C2;SIGNWRITING HAND-ANGLE INDEX RING LITTLE OUT;So;0;L;;;;;N;;;;; 1D8C3;SIGNWRITING HAND-ANGLE INDEX RING LITTLE;So;0;L;;;;;N;;;;; 1D8C4;SIGNWRITING HAND-FIST MIDDLE DOWN;So;0;L;;;;;N;;;;; 1D8C5;SIGNWRITING HAND-HINGE MIDDLE;So;0;L;;;;;N;;;;; 1D8C6;SIGNWRITING HAND-FIST MIDDLE UP;So;0;L;;;;;N;;;;; 1D8C7;SIGNWRITING HAND-CIRCLE MIDDLE UP;So;0;L;;;;;N;;;;; 1D8C8;SIGNWRITING HAND-FIST MIDDLE RAISED KNUCKLE;So;0;L;;;;;N;;;;; 1D8C9;SIGNWRITING HAND-FIST MIDDLE UP THUMB SIDE;So;0;L;;;;;N;;;;; 1D8CA;SIGNWRITING HAND-HOOK MIDDLE THUMB;So;0;L;;;;;N;;;;; 1D8CB;SIGNWRITING HAND-FIST MIDDLE THUMB LITTLE;So;0;L;;;;;N;;;;; 1D8CC;SIGNWRITING HAND-FIST MIDDLE LITTLE;So;0;L;;;;;N;;;;; 1D8CD;SIGNWRITING HAND-FIST MIDDLE RING LITTLE;So;0;L;;;;;N;;;;; 1D8CE;SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE;So;0;L;;;;;N;;;;; 1D8CF;SIGNWRITING HAND-CURLICUE MIDDLE RING LITTLE ON;So;0;L;;;;;N;;;;; 1D8D0;SIGNWRITING HAND-CUP MIDDLE RING LITTLE;So;0;L;;;;;N;;;;; 1D8D1;SIGNWRITING HAND-HINGE MIDDLE RING LITTLE;So;0;L;;;;;N;;;;; 1D8D2;SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE OUT;So;0;L;;;;;N;;;;; 1D8D3;SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE IN;So;0;L;;;;;N;;;;; 1D8D4;SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE;So;0;L;;;;;N;;;;; 1D8D5;SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE BENT;So;0;L;;;;;N;;;;; 1D8D6;SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED;So;0;L;;;;;N;;;;; 1D8D7;SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED SIDE;So;0;L;;;;;N;;;;; 1D8D8;SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED OUT;So;0;L;;;;;N;;;;; 1D8D9;SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED IN;So;0;L;;;;;N;;;;; 1D8DA;SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED;So;0;L;;;;;N;;;;; 1D8DB;SIGNWRITING HAND-HINGE INDEX HINGED;So;0;L;;;;;N;;;;; 1D8DC;SIGNWRITING HAND-FIST INDEX THUMB SIDE;So;0;L;;;;;N;;;;; 1D8DD;SIGNWRITING HAND-HINGE INDEX THUMB SIDE;So;0;L;;;;;N;;;;; 1D8DE;SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB DIAGONAL;So;0;L;;;;;N;;;;; 1D8DF;SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB CONJOINED;So;0;L;;;;;N;;;;; 1D8E0;SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB BENT;So;0;L;;;;;N;;;;; 1D8E1;SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX BENT;So;0;L;;;;;N;;;;; 1D8E2;SIGNWRITING HAND-FIST INDEX THUMB SIDE BOTH BENT;So;0;L;;;;;N;;;;; 1D8E3;SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX HINGE;So;0;L;;;;;N;;;;; 1D8E4;SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX STRAIGHT;So;0;L;;;;;N;;;;; 1D8E5;SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX BENT;So;0;L;;;;;N;;;;; 1D8E6;SIGNWRITING HAND-FIST INDEX THUMB HOOK;So;0;L;;;;;N;;;;; 1D8E7;SIGNWRITING HAND-FIST INDEX THUMB CURLICUE;So;0;L;;;;;N;;;;; 1D8E8;SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB INSIDE;So;0;L;;;;;N;;;;; 1D8E9;SIGNWRITING HAND-CLAW INDEX THUMB CURVE THUMB INSIDE;So;0;L;;;;;N;;;;; 1D8EA;SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB UNDER;So;0;L;;;;;N;;;;; 1D8EB;SIGNWRITING HAND-FIST INDEX THUMB CIRCLE;So;0;L;;;;;N;;;;; 1D8EC;SIGNWRITING HAND-CUP INDEX THUMB;So;0;L;;;;;N;;;;; 1D8ED;SIGNWRITING HAND-CUP INDEX THUMB OPEN;So;0;L;;;;;N;;;;; 1D8EE;SIGNWRITING HAND-HINGE INDEX THUMB OPEN;So;0;L;;;;;N;;;;; 1D8EF;SIGNWRITING HAND-HINGE INDEX THUMB LARGE;So;0;L;;;;;N;;;;; 1D8F0;SIGNWRITING HAND-HINGE INDEX THUMB;So;0;L;;;;;N;;;;; 1D8F1;SIGNWRITING HAND-HINGE INDEX THUMB SMALL;So;0;L;;;;;N;;;;; 1D8F2;SIGNWRITING HAND-ANGLE INDEX THUMB OUT;So;0;L;;;;;N;;;;; 1D8F3;SIGNWRITING HAND-ANGLE INDEX THUMB IN;So;0;L;;;;;N;;;;; 1D8F4;SIGNWRITING HAND-ANGLE INDEX THUMB;So;0;L;;;;;N;;;;; 1D8F5;SIGNWRITING HAND-FIST THUMB;So;0;L;;;;;N;;;;; 1D8F6;SIGNWRITING HAND-FIST THUMB HEEL;So;0;L;;;;;N;;;;; 1D8F7;SIGNWRITING HAND-FIST THUMB SIDE DIAGONAL;So;0;L;;;;;N;;;;; 1D8F8;SIGNWRITING HAND-FIST THUMB SIDE CONJOINED;So;0;L;;;;;N;;;;; 1D8F9;SIGNWRITING HAND-FIST THUMB SIDE BENT;So;0;L;;;;;N;;;;; 1D8FA;SIGNWRITING HAND-FIST THUMB FORWARD;So;0;L;;;;;N;;;;; 1D8FB;SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE;So;0;L;;;;;N;;;;; 1D8FC;SIGNWRITING HAND-FIST THUMB BETWEEN MIDDLE RING;So;0;L;;;;;N;;;;; 1D8FD;SIGNWRITING HAND-FIST THUMB BETWEEN RING LITTLE;So;0;L;;;;;N;;;;; 1D8FE;SIGNWRITING HAND-FIST THUMB UNDER TWO FINGERS;So;0;L;;;;;N;;;;; 1D8FF;SIGNWRITING HAND-FIST THUMB OVER TWO FINGERS;So;0;L;;;;;N;;;;; 1D900;SIGNWRITING HAND-FIST THUMB UNDER THREE FINGERS;So;0;L;;;;;N;;;;; 1D901;SIGNWRITING HAND-FIST THUMB UNDER FOUR FINGERS;So;0;L;;;;;N;;;;; 1D902;SIGNWRITING HAND-FIST THUMB OVER FOUR RAISED KNUCKLES;So;0;L;;;;;N;;;;; 1D903;SIGNWRITING HAND-FIST;So;0;L;;;;;N;;;;; 1D904;SIGNWRITING HAND-FIST HEEL;So;0;L;;;;;N;;;;; 1D905;SIGNWRITING TOUCH SINGLE;So;0;L;;;;;N;;;;; 1D906;SIGNWRITING TOUCH MULTIPLE;So;0;L;;;;;N;;;;; 1D907;SIGNWRITING TOUCH BETWEEN;So;0;L;;;;;N;;;;; 1D908;SIGNWRITING GRASP SINGLE;So;0;L;;;;;N;;;;; 1D909;SIGNWRITING GRASP MULTIPLE;So;0;L;;;;;N;;;;; 1D90A;SIGNWRITING GRASP BETWEEN;So;0;L;;;;;N;;;;; 1D90B;SIGNWRITING STRIKE SINGLE;So;0;L;;;;;N;;;;; 1D90C;SIGNWRITING STRIKE MULTIPLE;So;0;L;;;;;N;;;;; 1D90D;SIGNWRITING STRIKE BETWEEN;So;0;L;;;;;N;;;;; 1D90E;SIGNWRITING BRUSH SINGLE;So;0;L;;;;;N;;;;; 1D90F;SIGNWRITING BRUSH MULTIPLE;So;0;L;;;;;N;;;;; 1D910;SIGNWRITING BRUSH BETWEEN;So;0;L;;;;;N;;;;; 1D911;SIGNWRITING RUB SINGLE;So;0;L;;;;;N;;;;; 1D912;SIGNWRITING RUB MULTIPLE;So;0;L;;;;;N;;;;; 1D913;SIGNWRITING RUB BETWEEN;So;0;L;;;;;N;;;;; 1D914;SIGNWRITING SURFACE SYMBOLS;So;0;L;;;;;N;;;;; 1D915;SIGNWRITING SURFACE BETWEEN;So;0;L;;;;;N;;;;; 1D916;SIGNWRITING SQUEEZE LARGE SINGLE;So;0;L;;;;;N;;;;; 1D917;SIGNWRITING SQUEEZE SMALL SINGLE;So;0;L;;;;;N;;;;; 1D918;SIGNWRITING SQUEEZE LARGE MULTIPLE;So;0;L;;;;;N;;;;; 1D919;SIGNWRITING SQUEEZE SMALL MULTIPLE;So;0;L;;;;;N;;;;; 1D91A;SIGNWRITING SQUEEZE SEQUENTIAL;So;0;L;;;;;N;;;;; 1D91B;SIGNWRITING FLICK LARGE SINGLE;So;0;L;;;;;N;;;;; 1D91C;SIGNWRITING FLICK SMALL SINGLE;So;0;L;;;;;N;;;;; 1D91D;SIGNWRITING FLICK LARGE MULTIPLE;So;0;L;;;;;N;;;;; 1D91E;SIGNWRITING FLICK SMALL MULTIPLE;So;0;L;;;;;N;;;;; 1D91F;SIGNWRITING FLICK SEQUENTIAL;So;0;L;;;;;N;;;;; 1D920;SIGNWRITING SQUEEZE FLICK ALTERNATING;So;0;L;;;;;N;;;;; 1D921;SIGNWRITING MOVEMENT-HINGE UP DOWN LARGE;So;0;L;;;;;N;;;;; 1D922;SIGNWRITING MOVEMENT-HINGE UP DOWN SMALL;So;0;L;;;;;N;;;;; 1D923;SIGNWRITING MOVEMENT-HINGE UP SEQUENTIAL;So;0;L;;;;;N;;;;; 1D924;SIGNWRITING MOVEMENT-HINGE DOWN SEQUENTIAL;So;0;L;;;;;N;;;;; 1D925;SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING LARGE;So;0;L;;;;;N;;;;; 1D926;SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING SMALL;So;0;L;;;;;N;;;;; 1D927;SIGNWRITING MOVEMENT-HINGE SIDE TO SIDE SCISSORS;So;0;L;;;;;N;;;;; 1D928;SIGNWRITING MOVEMENT-WALLPLANE FINGER CONTACT;So;0;L;;;;;N;;;;; 1D929;SIGNWRITING MOVEMENT-FLOORPLANE FINGER CONTACT;So;0;L;;;;;N;;;;; 1D92A;SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT SMALL;So;0;L;;;;;N;;;;; 1D92B;SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT MEDIUM;So;0;L;;;;;N;;;;; 1D92C;SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGE;So;0;L;;;;;N;;;;; 1D92D;SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGEST;So;0;L;;;;;N;;;;; 1D92E;SIGNWRITING MOVEMENT-WALLPLANE SINGLE WRIST FLEX;So;0;L;;;;;N;;;;; 1D92F;SIGNWRITING MOVEMENT-WALLPLANE DOUBLE STRAIGHT;So;0;L;;;;;N;;;;; 1D930;SIGNWRITING MOVEMENT-WALLPLANE DOUBLE WRIST FLEX;So;0;L;;;;;N;;;;; 1D931;SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING;So;0;L;;;;;N;;;;; 1D932;SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING WRIST FLEX;So;0;L;;;;;N;;;;; 1D933;SIGNWRITING MOVEMENT-WALLPLANE CROSS;So;0;L;;;;;N;;;;; 1D934;SIGNWRITING MOVEMENT-WALLPLANE TRIPLE STRAIGHT MOVEMENT;So;0;L;;;;;N;;;;; 1D935;SIGNWRITING MOVEMENT-WALLPLANE TRIPLE WRIST FLEX;So;0;L;;;;;N;;;;; 1D936;SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING;So;0;L;;;;;N;;;;; 1D937;SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING WRIST FLEX;So;0;L;;;;;N;;;;; 1D938;SIGNWRITING MOVEMENT-WALLPLANE BEND SMALL;So;0;L;;;;;N;;;;; 1D939;SIGNWRITING MOVEMENT-WALLPLANE BEND MEDIUM;So;0;L;;;;;N;;;;; 1D93A;SIGNWRITING MOVEMENT-WALLPLANE BEND LARGE;So;0;L;;;;;N;;;;; 1D93B;SIGNWRITING MOVEMENT-WALLPLANE CORNER SMALL;So;0;L;;;;;N;;;;; 1D93C;SIGNWRITING MOVEMENT-WALLPLANE CORNER MEDIUM;So;0;L;;;;;N;;;;; 1D93D;SIGNWRITING MOVEMENT-WALLPLANE CORNER LARGE;So;0;L;;;;;N;;;;; 1D93E;SIGNWRITING MOVEMENT-WALLPLANE CORNER ROTATION;So;0;L;;;;;N;;;;; 1D93F;SIGNWRITING MOVEMENT-WALLPLANE CHECK SMALL;So;0;L;;;;;N;;;;; 1D940;SIGNWRITING MOVEMENT-WALLPLANE CHECK MEDIUM;So;0;L;;;;;N;;;;; 1D941;SIGNWRITING MOVEMENT-WALLPLANE CHECK LARGE;So;0;L;;;;;N;;;;; 1D942;SIGNWRITING MOVEMENT-WALLPLANE BOX SMALL;So;0;L;;;;;N;;;;; 1D943;SIGNWRITING MOVEMENT-WALLPLANE BOX MEDIUM;So;0;L;;;;;N;;;;; 1D944;SIGNWRITING MOVEMENT-WALLPLANE BOX LARGE;So;0;L;;;;;N;;;;; 1D945;SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG SMALL;So;0;L;;;;;N;;;;; 1D946;SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG MEDIUM;So;0;L;;;;;N;;;;; 1D947;SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG LARGE;So;0;L;;;;;N;;;;; 1D948;SIGNWRITING MOVEMENT-WALLPLANE PEAKS SMALL;So;0;L;;;;;N;;;;; 1D949;SIGNWRITING MOVEMENT-WALLPLANE PEAKS MEDIUM;So;0;L;;;;;N;;;;; 1D94A;SIGNWRITING MOVEMENT-WALLPLANE PEAKS LARGE;So;0;L;;;;;N;;;;; 1D94B;SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE SINGLE;So;0;L;;;;;N;;;;; 1D94C;SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE DOUBLE;So;0;L;;;;;N;;;;; 1D94D;SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE ALTERNATING;So;0;L;;;;;N;;;;; 1D94E;SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE SINGLE;So;0;L;;;;;N;;;;; 1D94F;SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE DOUBLE;So;0;L;;;;;N;;;;; 1D950;SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE ALTERNATING;So;0;L;;;;;N;;;;; 1D951;SIGNWRITING TRAVEL-WALLPLANE SHAKING;So;0;L;;;;;N;;;;; 1D952;SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL SINGLE;So;0;L;;;;;N;;;;; 1D953;SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL DOUBLE;So;0;L;;;;;N;;;;; 1D954;SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL TRIPLE;So;0;L;;;;;N;;;;; 1D955;SIGNWRITING MOVEMENT-DIAGONAL AWAY SMALL;So;0;L;;;;;N;;;;; 1D956;SIGNWRITING MOVEMENT-DIAGONAL AWAY MEDIUM;So;0;L;;;;;N;;;;; 1D957;SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGE;So;0;L;;;;;N;;;;; 1D958;SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGEST;So;0;L;;;;;N;;;;; 1D959;SIGNWRITING MOVEMENT-DIAGONAL TOWARDS SMALL;So;0;L;;;;;N;;;;; 1D95A;SIGNWRITING MOVEMENT-DIAGONAL TOWARDS MEDIUM;So;0;L;;;;;N;;;;; 1D95B;SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGE;So;0;L;;;;;N;;;;; 1D95C;SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGEST;So;0;L;;;;;N;;;;; 1D95D;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY SMALL;So;0;L;;;;;N;;;;; 1D95E;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY MEDIUM;So;0;L;;;;;N;;;;; 1D95F;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGE;So;0;L;;;;;N;;;;; 1D960;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGEST;So;0;L;;;;;N;;;;; 1D961;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS SMALL;So;0;L;;;;;N;;;;; 1D962;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS MEDIUM;So;0;L;;;;;N;;;;; 1D963;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGE;So;0;L;;;;;N;;;;; 1D964;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGEST;So;0;L;;;;;N;;;;; 1D965;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT SMALL;So;0;L;;;;;N;;;;; 1D966;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT MEDIUM;So;0;L;;;;;N;;;;; 1D967;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGE;So;0;L;;;;;N;;;;; 1D968;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGEST;So;0;L;;;;;N;;;;; 1D969;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE WRIST FLEX;So;0;L;;;;;N;;;;; 1D96A;SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE STRAIGHT;So;0;L;;;;;N;;;;; 1D96B;SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE WRIST FLEX;So;0;L;;;;;N;;;;; 1D96C;SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING;So;0;L;;;;;N;;;;; 1D96D;SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING WRIST FLEX;So;0;L;;;;;N;;;;; 1D96E;SIGNWRITING MOVEMENT-FLOORPLANE CROSS;So;0;L;;;;;N;;;;; 1D96F;SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE STRAIGHT MOVEMENT;So;0;L;;;;;N;;;;; 1D970;SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE WRIST FLEX;So;0;L;;;;;N;;;;; 1D971;SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING MOVEMENT;So;0;L;;;;;N;;;;; 1D972;SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING WRIST FLEX;So;0;L;;;;;N;;;;; 1D973;SIGNWRITING MOVEMENT-FLOORPLANE BEND;So;0;L;;;;;N;;;;; 1D974;SIGNWRITING MOVEMENT-FLOORPLANE CORNER SMALL;So;0;L;;;;;N;;;;; 1D975;SIGNWRITING MOVEMENT-FLOORPLANE CORNER MEDIUM;So;0;L;;;;;N;;;;; 1D976;SIGNWRITING MOVEMENT-FLOORPLANE CORNER LARGE;So;0;L;;;;;N;;;;; 1D977;SIGNWRITING MOVEMENT-FLOORPLANE CHECK;So;0;L;;;;;N;;;;; 1D978;SIGNWRITING MOVEMENT-FLOORPLANE BOX SMALL;So;0;L;;;;;N;;;;; 1D979;SIGNWRITING MOVEMENT-FLOORPLANE BOX MEDIUM;So;0;L;;;;;N;;;;; 1D97A;SIGNWRITING MOVEMENT-FLOORPLANE BOX LARGE;So;0;L;;;;;N;;;;; 1D97B;SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG SMALL;So;0;L;;;;;N;;;;; 1D97C;SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG MEDIUM;So;0;L;;;;;N;;;;; 1D97D;SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG LARGE;So;0;L;;;;;N;;;;; 1D97E;SIGNWRITING MOVEMENT-FLOORPLANE PEAKS SMALL;So;0;L;;;;;N;;;;; 1D97F;SIGNWRITING MOVEMENT-FLOORPLANE PEAKS MEDIUM;So;0;L;;;;;N;;;;; 1D980;SIGNWRITING MOVEMENT-FLOORPLANE PEAKS LARGE;So;0;L;;;;;N;;;;; 1D981;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE SINGLE;So;0;L;;;;;N;;;;; 1D982;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE DOUBLE;So;0;L;;;;;N;;;;; 1D983;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE ALTERNATING;So;0;L;;;;;N;;;;; 1D984;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE SINGLE;So;0;L;;;;;N;;;;; 1D985;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE DOUBLE;So;0;L;;;;;N;;;;; 1D986;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE ALTERNATING;So;0;L;;;;;N;;;;; 1D987;SIGNWRITING TRAVEL-FLOORPLANE SHAKING;So;0;L;;;;;N;;;;; 1D988;SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER SMALL;So;0;L;;;;;N;;;;; 1D989;SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER MEDIUM;So;0;L;;;;;N;;;;; 1D98A;SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGE;So;0;L;;;;;N;;;;; 1D98B;SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGEST;So;0;L;;;;;N;;;;; 1D98C;SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE SMALL;So;0;L;;;;;N;;;;; 1D98D;SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE MEDIUM;So;0;L;;;;;N;;;;; 1D98E;SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGE;So;0;L;;;;;N;;;;; 1D98F;SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGEST;So;0;L;;;;;N;;;;; 1D990;SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE SMALL;So;0;L;;;;;N;;;;; 1D991;SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE MEDIUM;So;0;L;;;;;N;;;;; 1D992;SIGNWRITING MOVEMENT-WALLPLANE HUMP SMALL;So;0;L;;;;;N;;;;; 1D993;SIGNWRITING MOVEMENT-WALLPLANE HUMP MEDIUM;So;0;L;;;;;N;;;;; 1D994;SIGNWRITING MOVEMENT-WALLPLANE HUMP LARGE;So;0;L;;;;;N;;;;; 1D995;SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL;So;0;L;;;;;N;;;;; 1D996;SIGNWRITING MOVEMENT-WALLPLANE LOOP MEDIUM;So;0;L;;;;;N;;;;; 1D997;SIGNWRITING MOVEMENT-WALLPLANE LOOP LARGE;So;0;L;;;;;N;;;;; 1D998;SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL DOUBLE;So;0;L;;;;;N;;;;; 1D999;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE SMALL;So;0;L;;;;;N;;;;; 1D99A;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE MEDIUM;So;0;L;;;;;N;;;;; 1D99B;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE LARGE;So;0;L;;;;;N;;;;; 1D99C;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE SMALL;So;0;L;;;;;N;;;;; 1D99D;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE MEDIUM;So;0;L;;;;;N;;;;; 1D99E;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE LARGE;So;0;L;;;;;N;;;;; 1D99F;SIGNWRITING MOVEMENT-WALLPLANE CURVE THEN STRAIGHT;So;0;L;;;;;N;;;;; 1D9A0;SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS SMALL;So;0;L;;;;;N;;;;; 1D9A1;SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS MEDIUM;So;0;L;;;;;N;;;;; 1D9A2;SIGNWRITING ROTATION-WALLPLANE SINGLE;So;0;L;;;;;N;;;;; 1D9A3;SIGNWRITING ROTATION-WALLPLANE DOUBLE;So;0;L;;;;;N;;;;; 1D9A4;SIGNWRITING ROTATION-WALLPLANE ALTERNATE;So;0;L;;;;;N;;;;; 1D9A5;SIGNWRITING MOVEMENT-WALLPLANE SHAKING;So;0;L;;;;;N;;;;; 1D9A6;SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING FRONT WALL;So;0;L;;;;;N;;;;; 1D9A7;SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING FRONT WALL;So;0;L;;;;;N;;;;; 1D9A8;SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING FRONT WALL;So;0;L;;;;;N;;;;; 1D9A9;SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING FRONT WALL;So;0;L;;;;;N;;;;; 1D9AA;SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING FRONT WALL;So;0;L;;;;;N;;;;; 1D9AB;SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING FRONT WALL;So;0;L;;;;;N;;;;; 1D9AC;SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING FRONT WALL;So;0;L;;;;;N;;;;; 1D9AD;SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING CHEST;So;0;L;;;;;N;;;;; 1D9AE;SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING CHEST;So;0;L;;;;;N;;;;; 1D9AF;SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING CHEST;So;0;L;;;;;N;;;;; 1D9B0;SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING CHEST;So;0;L;;;;;N;;;;; 1D9B1;SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING CHEST;So;0;L;;;;;N;;;;; 1D9B2;SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING CHEST;So;0;L;;;;;N;;;;; 1D9B3;SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING CHEST;So;0;L;;;;;N;;;;; 1D9B4;SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH SMALL;So;0;L;;;;;N;;;;; 1D9B5;SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH MEDIUM;So;0;L;;;;;N;;;;; 1D9B6;SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH LARGE;So;0;L;;;;;N;;;;; 1D9B7;SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING SMALL;So;0;L;;;;;N;;;;; 1D9B8;SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING LARGE;So;0;L;;;;;N;;;;; 1D9B9;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL DOUBLE;So;0;L;;;;;N;;;;; 1D9BA;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE DOUBLE;So;0;L;;;;;N;;;;; 1D9BB;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL TRIPLE;So;0;L;;;;;N;;;;; 1D9BC;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE TRIPLE;So;0;L;;;;;N;;;;; 1D9BD;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL SINGLE;So;0;L;;;;;N;;;;; 1D9BE;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE SINGLE;So;0;L;;;;;N;;;;; 1D9BF;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL DOUBLE;So;0;L;;;;;N;;;;; 1D9C0;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE DOUBLE;So;0;L;;;;;N;;;;; 1D9C1;SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING SMALL;So;0;L;;;;;N;;;;; 1D9C2;SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING LARGE;So;0;L;;;;;N;;;;; 1D9C3;SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING CEILING;So;0;L;;;;;N;;;;; 1D9C4;SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING CEILING;So;0;L;;;;;N;;;;; 1D9C5;SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING CEILING;So;0;L;;;;;N;;;;; 1D9C6;SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR SMALL;So;0;L;;;;;N;;;;; 1D9C7;SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR LARGE;So;0;L;;;;;N;;;;; 1D9C8;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR SMALL DOUBLE;So;0;L;;;;;N;;;;; 1D9C9;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR LARGE DOUBLE;So;0;L;;;;;N;;;;; 1D9CA;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE SMALL TRIPLE;So;0;L;;;;;N;;;;; 1D9CB;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE LARGE TRIPLE;So;0;L;;;;;N;;;;; 1D9CC;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL SINGLE;So;0;L;;;;;N;;;;; 1D9CD;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE SINGLE;So;0;L;;;;;N;;;;; 1D9CE;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL DOUBLE;So;0;L;;;;;N;;;;; 1D9CF;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE DOUBLE;So;0;L;;;;;N;;;;; 1D9D0;SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR SMALL;So;0;L;;;;;N;;;;; 1D9D1;SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR LARGE;So;0;L;;;;;N;;;;; 1D9D2;SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING FLOOR;So;0;L;;;;;N;;;;; 1D9D3;SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING FLOOR;So;0;L;;;;;N;;;;; 1D9D4;SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING FLOOR;So;0;L;;;;;N;;;;; 1D9D5;SIGNWRITING MOVEMENT-FLOORPLANE CURVE SMALL;So;0;L;;;;;N;;;;; 1D9D6;SIGNWRITING MOVEMENT-FLOORPLANE CURVE MEDIUM;So;0;L;;;;;N;;;;; 1D9D7;SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGE;So;0;L;;;;;N;;;;; 1D9D8;SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGEST;So;0;L;;;;;N;;;;; 1D9D9;SIGNWRITING MOVEMENT-FLOORPLANE CURVE COMBINED;So;0;L;;;;;N;;;;; 1D9DA;SIGNWRITING MOVEMENT-FLOORPLANE HUMP SMALL;So;0;L;;;;;N;;;;; 1D9DB;SIGNWRITING MOVEMENT-FLOORPLANE LOOP SMALL;So;0;L;;;;;N;;;;; 1D9DC;SIGNWRITING MOVEMENT-FLOORPLANE WAVE SNAKE;So;0;L;;;;;N;;;;; 1D9DD;SIGNWRITING MOVEMENT-FLOORPLANE WAVE SMALL;So;0;L;;;;;N;;;;; 1D9DE;SIGNWRITING MOVEMENT-FLOORPLANE WAVE LARGE;So;0;L;;;;;N;;;;; 1D9DF;SIGNWRITING ROTATION-FLOORPLANE SINGLE;So;0;L;;;;;N;;;;; 1D9E0;SIGNWRITING ROTATION-FLOORPLANE DOUBLE;So;0;L;;;;;N;;;;; 1D9E1;SIGNWRITING ROTATION-FLOORPLANE ALTERNATING;So;0;L;;;;;N;;;;; 1D9E2;SIGNWRITING MOVEMENT-FLOORPLANE SHAKING PARALLEL;So;0;L;;;;;N;;;;; 1D9E3;SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL SINGLE;So;0;L;;;;;N;;;;; 1D9E4;SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM SINGLE;So;0;L;;;;;N;;;;; 1D9E5;SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL DOUBLE;So;0;L;;;;;N;;;;; 1D9E6;SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM DOUBLE;So;0;L;;;;;N;;;;; 1D9E7;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL SINGLE;So;0;L;;;;;N;;;;; 1D9E8;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM SINGLE;So;0;L;;;;;N;;;;; 1D9E9;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE SINGLE;So;0;L;;;;;N;;;;; 1D9EA;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL DOUBLE;So;0;L;;;;;N;;;;; 1D9EB;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM DOUBLE;So;0;L;;;;;N;;;;; 1D9EC;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE DOUBLE;So;0;L;;;;;N;;;;; 1D9ED;SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT SINGLE;So;0;L;;;;;N;;;;; 1D9EE;SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT DOUBLE;So;0;L;;;;;N;;;;; 1D9EF;SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL SINGLE;So;0;L;;;;;N;;;;; 1D9F0;SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL DOUBLE;So;0;L;;;;;N;;;;; 1D9F1;SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES SINGLE;So;0;L;;;;;N;;;;; 1D9F2;SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES DOUBLE;So;0;L;;;;;N;;;;; 1D9F3;SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL SINGLE;So;0;L;;;;;N;;;;; 1D9F4;SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL DOUBLE;So;0;L;;;;;N;;;;; 1D9F5;SIGNWRITING DYNAMIC ARROWHEAD SMALL;So;0;L;;;;;N;;;;; 1D9F6;SIGNWRITING DYNAMIC ARROWHEAD LARGE;So;0;L;;;;;N;;;;; 1D9F7;SIGNWRITING DYNAMIC FAST;So;0;L;;;;;N;;;;; 1D9F8;SIGNWRITING DYNAMIC SLOW;So;0;L;;;;;N;;;;; 1D9F9;SIGNWRITING DYNAMIC TENSE;So;0;L;;;;;N;;;;; 1D9FA;SIGNWRITING DYNAMIC RELAXED;So;0;L;;;;;N;;;;; 1D9FB;SIGNWRITING DYNAMIC SIMULTANEOUS;So;0;L;;;;;N;;;;; 1D9FC;SIGNWRITING DYNAMIC SIMULTANEOUS ALTERNATING;So;0;L;;;;;N;;;;; 1D9FD;SIGNWRITING DYNAMIC EVERY OTHER TIME;So;0;L;;;;;N;;;;; 1D9FE;SIGNWRITING DYNAMIC GRADUAL;So;0;L;;;;;N;;;;; 1D9FF;SIGNWRITING HEAD;So;0;L;;;;;N;;;;; 1DA00;SIGNWRITING HEAD RIM;Mn;0;NSM;;;;;N;;;;; 1DA01;SIGNWRITING HEAD MOVEMENT-WALLPLANE STRAIGHT;Mn;0;NSM;;;;;N;;;;; 1DA02;SIGNWRITING HEAD MOVEMENT-WALLPLANE TILT;Mn;0;NSM;;;;;N;;;;; 1DA03;SIGNWRITING HEAD MOVEMENT-FLOORPLANE STRAIGHT;Mn;0;NSM;;;;;N;;;;; 1DA04;SIGNWRITING HEAD MOVEMENT-WALLPLANE CURVE;Mn;0;NSM;;;;;N;;;;; 1DA05;SIGNWRITING HEAD MOVEMENT-FLOORPLANE CURVE;Mn;0;NSM;;;;;N;;;;; 1DA06;SIGNWRITING HEAD MOVEMENT CIRCLE;Mn;0;NSM;;;;;N;;;;; 1DA07;SIGNWRITING FACE DIRECTION POSITION NOSE FORWARD TILTING;Mn;0;NSM;;;;;N;;;;; 1DA08;SIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN;Mn;0;NSM;;;;;N;;;;; 1DA09;SIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN TILTING;Mn;0;NSM;;;;;N;;;;; 1DA0A;SIGNWRITING EYEBROWS STRAIGHT UP;Mn;0;NSM;;;;;N;;;;; 1DA0B;SIGNWRITING EYEBROWS STRAIGHT NEUTRAL;Mn;0;NSM;;;;;N;;;;; 1DA0C;SIGNWRITING EYEBROWS STRAIGHT DOWN;Mn;0;NSM;;;;;N;;;;; 1DA0D;SIGNWRITING DREAMY EYEBROWS NEUTRAL DOWN;Mn;0;NSM;;;;;N;;;;; 1DA0E;SIGNWRITING DREAMY EYEBROWS DOWN NEUTRAL;Mn;0;NSM;;;;;N;;;;; 1DA0F;SIGNWRITING DREAMY EYEBROWS UP NEUTRAL;Mn;0;NSM;;;;;N;;;;; 1DA10;SIGNWRITING DREAMY EYEBROWS NEUTRAL UP;Mn;0;NSM;;;;;N;;;;; 1DA11;SIGNWRITING FOREHEAD NEUTRAL;Mn;0;NSM;;;;;N;;;;; 1DA12;SIGNWRITING FOREHEAD CONTACT;Mn;0;NSM;;;;;N;;;;; 1DA13;SIGNWRITING FOREHEAD WRINKLED;Mn;0;NSM;;;;;N;;;;; 1DA14;SIGNWRITING EYES OPEN;Mn;0;NSM;;;;;N;;;;; 1DA15;SIGNWRITING EYES SQUEEZED;Mn;0;NSM;;;;;N;;;;; 1DA16;SIGNWRITING EYES CLOSED;Mn;0;NSM;;;;;N;;;;; 1DA17;SIGNWRITING EYE BLINK SINGLE;Mn;0;NSM;;;;;N;;;;; 1DA18;SIGNWRITING EYE BLINK MULTIPLE;Mn;0;NSM;;;;;N;;;;; 1DA19;SIGNWRITING EYES HALF OPEN;Mn;0;NSM;;;;;N;;;;; 1DA1A;SIGNWRITING EYES WIDE OPEN;Mn;0;NSM;;;;;N;;;;; 1DA1B;SIGNWRITING EYES HALF CLOSED;Mn;0;NSM;;;;;N;;;;; 1DA1C;SIGNWRITING EYES WIDENING MOVEMENT;Mn;0;NSM;;;;;N;;;;; 1DA1D;SIGNWRITING EYE WINK;Mn;0;NSM;;;;;N;;;;; 1DA1E;SIGNWRITING EYELASHES UP;Mn;0;NSM;;;;;N;;;;; 1DA1F;SIGNWRITING EYELASHES DOWN;Mn;0;NSM;;;;;N;;;;; 1DA20;SIGNWRITING EYELASHES FLUTTERING;Mn;0;NSM;;;;;N;;;;; 1DA21;SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT;Mn;0;NSM;;;;;N;;;;; 1DA22;SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT DOUBLE;Mn;0;NSM;;;;;N;;;;; 1DA23;SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT ALTERNATING;Mn;0;NSM;;;;;N;;;;; 1DA24;SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT;Mn;0;NSM;;;;;N;;;;; 1DA25;SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT DOUBLE;Mn;0;NSM;;;;;N;;;;; 1DA26;SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT ALTERNATING;Mn;0;NSM;;;;;N;;;;; 1DA27;SIGNWRITING EYEGAZE-WALLPLANE CURVED;Mn;0;NSM;;;;;N;;;;; 1DA28;SIGNWRITING EYEGAZE-FLOORPLANE CURVED;Mn;0;NSM;;;;;N;;;;; 1DA29;SIGNWRITING EYEGAZE-WALLPLANE CIRCLING;Mn;0;NSM;;;;;N;;;;; 1DA2A;SIGNWRITING CHEEKS PUFFED;Mn;0;NSM;;;;;N;;;;; 1DA2B;SIGNWRITING CHEEKS NEUTRAL;Mn;0;NSM;;;;;N;;;;; 1DA2C;SIGNWRITING CHEEKS SUCKED;Mn;0;NSM;;;;;N;;;;; 1DA2D;SIGNWRITING TENSE CHEEKS HIGH;Mn;0;NSM;;;;;N;;;;; 1DA2E;SIGNWRITING TENSE CHEEKS MIDDLE;Mn;0;NSM;;;;;N;;;;; 1DA2F;SIGNWRITING TENSE CHEEKS LOW;Mn;0;NSM;;;;;N;;;;; 1DA30;SIGNWRITING EARS;Mn;0;NSM;;;;;N;;;;; 1DA31;SIGNWRITING NOSE NEUTRAL;Mn;0;NSM;;;;;N;;;;; 1DA32;SIGNWRITING NOSE CONTACT;Mn;0;NSM;;;;;N;;;;; 1DA33;SIGNWRITING NOSE WRINKLES;Mn;0;NSM;;;;;N;;;;; 1DA34;SIGNWRITING NOSE WIGGLES;Mn;0;NSM;;;;;N;;;;; 1DA35;SIGNWRITING AIR BLOWING OUT;Mn;0;NSM;;;;;N;;;;; 1DA36;SIGNWRITING AIR SUCKING IN;Mn;0;NSM;;;;;N;;;;; 1DA37;SIGNWRITING AIR BLOW SMALL ROTATIONS;So;0;L;;;;;N;;;;; 1DA38;SIGNWRITING AIR SUCK SMALL ROTATIONS;So;0;L;;;;;N;;;;; 1DA39;SIGNWRITING BREATH INHALE;So;0;L;;;;;N;;;;; 1DA3A;SIGNWRITING BREATH EXHALE;So;0;L;;;;;N;;;;; 1DA3B;SIGNWRITING MOUTH CLOSED NEUTRAL;Mn;0;NSM;;;;;N;;;;; 1DA3C;SIGNWRITING MOUTH CLOSED FORWARD;Mn;0;NSM;;;;;N;;;;; 1DA3D;SIGNWRITING MOUTH CLOSED CONTACT;Mn;0;NSM;;;;;N;;;;; 1DA3E;SIGNWRITING MOUTH SMILE;Mn;0;NSM;;;;;N;;;;; 1DA3F;SIGNWRITING MOUTH SMILE WRINKLED;Mn;0;NSM;;;;;N;;;;; 1DA40;SIGNWRITING MOUTH SMILE OPEN;Mn;0;NSM;;;;;N;;;;; 1DA41;SIGNWRITING MOUTH FROWN;Mn;0;NSM;;;;;N;;;;; 1DA42;SIGNWRITING MOUTH FROWN WRINKLED;Mn;0;NSM;;;;;N;;;;; 1DA43;SIGNWRITING MOUTH FROWN OPEN;Mn;0;NSM;;;;;N;;;;; 1DA44;SIGNWRITING MOUTH OPEN CIRCLE;Mn;0;NSM;;;;;N;;;;; 1DA45;SIGNWRITING MOUTH OPEN FORWARD;Mn;0;NSM;;;;;N;;;;; 1DA46;SIGNWRITING MOUTH OPEN WRINKLED;Mn;0;NSM;;;;;N;;;;; 1DA47;SIGNWRITING MOUTH OPEN OVAL;Mn;0;NSM;;;;;N;;;;; 1DA48;SIGNWRITING MOUTH OPEN OVAL WRINKLED;Mn;0;NSM;;;;;N;;;;; 1DA49;SIGNWRITING MOUTH OPEN OVAL YAWN;Mn;0;NSM;;;;;N;;;;; 1DA4A;SIGNWRITING MOUTH OPEN RECTANGLE;Mn;0;NSM;;;;;N;;;;; 1DA4B;SIGNWRITING MOUTH OPEN RECTANGLE WRINKLED;Mn;0;NSM;;;;;N;;;;; 1DA4C;SIGNWRITING MOUTH OPEN RECTANGLE YAWN;Mn;0;NSM;;;;;N;;;;; 1DA4D;SIGNWRITING MOUTH KISS;Mn;0;NSM;;;;;N;;;;; 1DA4E;SIGNWRITING MOUTH KISS FORWARD;Mn;0;NSM;;;;;N;;;;; 1DA4F;SIGNWRITING MOUTH KISS WRINKLED;Mn;0;NSM;;;;;N;;;;; 1DA50;SIGNWRITING MOUTH TENSE;Mn;0;NSM;;;;;N;;;;; 1DA51;SIGNWRITING MOUTH TENSE FORWARD;Mn;0;NSM;;;;;N;;;;; 1DA52;SIGNWRITING MOUTH TENSE SUCKED;Mn;0;NSM;;;;;N;;;;; 1DA53;SIGNWRITING LIPS PRESSED TOGETHER;Mn;0;NSM;;;;;N;;;;; 1DA54;SIGNWRITING LIP LOWER OVER UPPER;Mn;0;NSM;;;;;N;;;;; 1DA55;SIGNWRITING LIP UPPER OVER LOWER;Mn;0;NSM;;;;;N;;;;; 1DA56;SIGNWRITING MOUTH CORNERS;Mn;0;NSM;;;;;N;;;;; 1DA57;SIGNWRITING MOUTH WRINKLES SINGLE;Mn;0;NSM;;;;;N;;;;; 1DA58;SIGNWRITING MOUTH WRINKLES DOUBLE;Mn;0;NSM;;;;;N;;;;; 1DA59;SIGNWRITING TONGUE STICKING OUT FAR;Mn;0;NSM;;;;;N;;;;; 1DA5A;SIGNWRITING TONGUE LICKING LIPS;Mn;0;NSM;;;;;N;;;;; 1DA5B;SIGNWRITING TONGUE TIP BETWEEN LIPS;Mn;0;NSM;;;;;N;;;;; 1DA5C;SIGNWRITING TONGUE TIP TOUCHING INSIDE MOUTH;Mn;0;NSM;;;;;N;;;;; 1DA5D;SIGNWRITING TONGUE INSIDE MOUTH RELAXED;Mn;0;NSM;;;;;N;;;;; 1DA5E;SIGNWRITING TONGUE MOVES AGAINST CHEEK;Mn;0;NSM;;;;;N;;;;; 1DA5F;SIGNWRITING TONGUE CENTRE STICKING OUT;Mn;0;NSM;;;;;N;;;;; 1DA60;SIGNWRITING TONGUE CENTRE INSIDE MOUTH;Mn;0;NSM;;;;;N;;;;; 1DA61;SIGNWRITING TEETH;Mn;0;NSM;;;;;N;;;;; 1DA62;SIGNWRITING TEETH MOVEMENT;Mn;0;NSM;;;;;N;;;;; 1DA63;SIGNWRITING TEETH ON TONGUE;Mn;0;NSM;;;;;N;;;;; 1DA64;SIGNWRITING TEETH ON TONGUE MOVEMENT;Mn;0;NSM;;;;;N;;;;; 1DA65;SIGNWRITING TEETH ON LIPS;Mn;0;NSM;;;;;N;;;;; 1DA66;SIGNWRITING TEETH ON LIPS MOVEMENT;Mn;0;NSM;;;;;N;;;;; 1DA67;SIGNWRITING TEETH BITE LIPS;Mn;0;NSM;;;;;N;;;;; 1DA68;SIGNWRITING MOVEMENT-WALLPLANE JAW;Mn;0;NSM;;;;;N;;;;; 1DA69;SIGNWRITING MOVEMENT-FLOORPLANE JAW;Mn;0;NSM;;;;;N;;;;; 1DA6A;SIGNWRITING NECK;Mn;0;NSM;;;;;N;;;;; 1DA6B;SIGNWRITING HAIR;Mn;0;NSM;;;;;N;;;;; 1DA6C;SIGNWRITING EXCITEMENT;Mn;0;NSM;;;;;N;;;;; 1DA6D;SIGNWRITING SHOULDER HIP SPINE;So;0;L;;;;;N;;;;; 1DA6E;SIGNWRITING SHOULDER HIP POSITIONS;So;0;L;;;;;N;;;;; 1DA6F;SIGNWRITING WALLPLANE SHOULDER HIP MOVE;So;0;L;;;;;N;;;;; 1DA70;SIGNWRITING FLOORPLANE SHOULDER HIP MOVE;So;0;L;;;;;N;;;;; 1DA71;SIGNWRITING SHOULDER TILTING FROM WAIST;So;0;L;;;;;N;;;;; 1DA72;SIGNWRITING TORSO-WALLPLANE STRAIGHT STRETCH;So;0;L;;;;;N;;;;; 1DA73;SIGNWRITING TORSO-WALLPLANE CURVED BEND;So;0;L;;;;;N;;;;; 1DA74;SIGNWRITING TORSO-FLOORPLANE TWISTING;So;0;L;;;;;N;;;;; 1DA75;SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS;Mn;0;NSM;;;;;N;;;;; 1DA76;SIGNWRITING LIMB COMBINATION;So;0;L;;;;;N;;;;; 1DA77;SIGNWRITING LIMB LENGTH-1;So;0;L;;;;;N;;;;; 1DA78;SIGNWRITING LIMB LENGTH-2;So;0;L;;;;;N;;;;; 1DA79;SIGNWRITING LIMB LENGTH-3;So;0;L;;;;;N;;;;; 1DA7A;SIGNWRITING LIMB LENGTH-4;So;0;L;;;;;N;;;;; 1DA7B;SIGNWRITING LIMB LENGTH-5;So;0;L;;;;;N;;;;; 1DA7C;SIGNWRITING LIMB LENGTH-6;So;0;L;;;;;N;;;;; 1DA7D;SIGNWRITING LIMB LENGTH-7;So;0;L;;;;;N;;;;; 1DA7E;SIGNWRITING FINGER;So;0;L;;;;;N;;;;; 1DA7F;SIGNWRITING LOCATION-WALLPLANE SPACE;So;0;L;;;;;N;;;;; 1DA80;SIGNWRITING LOCATION-FLOORPLANE SPACE;So;0;L;;;;;N;;;;; 1DA81;SIGNWRITING LOCATION HEIGHT;So;0;L;;;;;N;;;;; 1DA82;SIGNWRITING LOCATION WIDTH;So;0;L;;;;;N;;;;; 1DA83;SIGNWRITING LOCATION DEPTH;So;0;L;;;;;N;;;;; 1DA84;SIGNWRITING LOCATION HEAD NECK;Mn;0;NSM;;;;;N;;;;; 1DA85;SIGNWRITING LOCATION TORSO;So;0;L;;;;;N;;;;; 1DA86;SIGNWRITING LOCATION LIMBS DIGITS;So;0;L;;;;;N;;;;; 1DA87;SIGNWRITING COMMA;Po;0;L;;;;;N;;;;; 1DA88;SIGNWRITING FULL STOP;Po;0;L;;;;;N;;;;; 1DA89;SIGNWRITING SEMICOLON;Po;0;L;;;;;N;;;;; 1DA8A;SIGNWRITING COLON;Po;0;L;;;;;N;;;;; 1DA8B;SIGNWRITING PARENTHESIS;Po;0;L;;;;;N;;;;; 1DA9B;SIGNWRITING FILL MODIFIER-2;Mn;0;NSM;;;;;N;;;;; 1DA9C;SIGNWRITING FILL MODIFIER-3;Mn;0;NSM;;;;;N;;;;; 1DA9D;SIGNWRITING FILL MODIFIER-4;Mn;0;NSM;;;;;N;;;;; 1DA9E;SIGNWRITING FILL MODIFIER-5;Mn;0;NSM;;;;;N;;;;; 1DA9F;SIGNWRITING FILL MODIFIER-6;Mn;0;NSM;;;;;N;;;;; 1DAA1;SIGNWRITING ROTATION MODIFIER-2;Mn;0;NSM;;;;;N;;;;; 1DAA2;SIGNWRITING ROTATION MODIFIER-3;Mn;0;NSM;;;;;N;;;;; 1DAA3;SIGNWRITING ROTATION MODIFIER-4;Mn;0;NSM;;;;;N;;;;; 1DAA4;SIGNWRITING ROTATION MODIFIER-5;Mn;0;NSM;;;;;N;;;;; 1DAA5;SIGNWRITING ROTATION MODIFIER-6;Mn;0;NSM;;;;;N;;;;; 1DAA6;SIGNWRITING ROTATION MODIFIER-7;Mn;0;NSM;;;;;N;;;;; 1DAA7;SIGNWRITING ROTATION MODIFIER-8;Mn;0;NSM;;;;;N;;;;; 1DAA8;SIGNWRITING ROTATION MODIFIER-9;Mn;0;NSM;;;;;N;;;;; 1DAA9;SIGNWRITING ROTATION MODIFIER-10;Mn;0;NSM;;;;;N;;;;; 1DAAA;SIGNWRITING ROTATION MODIFIER-11;Mn;0;NSM;;;;;N;;;;; 1DAAB;SIGNWRITING ROTATION MODIFIER-12;Mn;0;NSM;;;;;N;;;;; 1DAAC;SIGNWRITING ROTATION MODIFIER-13;Mn;0;NSM;;;;;N;;;;; 1DAAD;SIGNWRITING ROTATION MODIFIER-14;Mn;0;NSM;;;;;N;;;;; 1DAAE;SIGNWRITING ROTATION MODIFIER-15;Mn;0;NSM;;;;;N;;;;; 1DAAF;SIGNWRITING ROTATION MODIFIER-16;Mn;0;NSM;;;;;N;;;;; 1DF00;LATIN SMALL LETTER FENG DIGRAPH WITH TRILL;Ll;0;L;;;;;N;;;;; 1DF01;LATIN SMALL LETTER REVERSED SCRIPT G;Ll;0;L;;;;;N;;;;; 1DF02;LATIN LETTER SMALL CAPITAL TURNED G;Ll;0;L;;;;;N;;;;; 1DF03;LATIN SMALL LETTER REVERSED K;Ll;0;L;;;;;N;;;;; 1DF04;LATIN LETTER SMALL CAPITAL L WITH BELT;Ll;0;L;;;;;N;;;;; 1DF05;LATIN SMALL LETTER LEZH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1DF06;LATIN SMALL LETTER TURNED Y WITH BELT;Ll;0;L;;;;;N;;;;; 1DF07;LATIN SMALL LETTER REVERSED ENG;Ll;0;L;;;;;N;;;;; 1DF08;LATIN SMALL LETTER TURNED R WITH LONG LEG AND RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1DF09;LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1DF0A;LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK;Lo;0;L;;;;;N;;;;; 1DF0B;LATIN SMALL LETTER ESH WITH DOUBLE BAR;Ll;0;L;;;;;N;;;;; 1DF0C;LATIN SMALL LETTER ESH WITH DOUBLE BAR AND CURL;Ll;0;L;;;;;N;;;;; 1DF0D;LATIN SMALL LETTER TURNED T WITH CURL;Ll;0;L;;;;;N;;;;; 1DF0E;LATIN LETTER INVERTED GLOTTAL STOP WITH CURL;Ll;0;L;;;;;N;;;;; 1DF0F;LATIN LETTER STRETCHED C WITH CURL;Ll;0;L;;;;;N;;;;; 1DF10;LATIN LETTER SMALL CAPITAL TURNED K;Ll;0;L;;;;;N;;;;; 1DF11;LATIN SMALL LETTER L WITH FISHHOOK;Ll;0;L;;;;;N;;;;; 1DF12;LATIN SMALL LETTER DEZH DIGRAPH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1DF13;LATIN SMALL LETTER L WITH BELT AND PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1DF14;LATIN SMALL LETTER ENG WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1DF15;LATIN SMALL LETTER TURNED R WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1DF16;LATIN SMALL LETTER R WITH FISHHOOK AND PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1DF17;LATIN SMALL LETTER TESH DIGRAPH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1DF18;LATIN SMALL LETTER EZH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1DF19;LATIN SMALL LETTER DEZH DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1DF1A;LATIN SMALL LETTER I WITH STROKE AND RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1DF1B;LATIN SMALL LETTER O WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1DF1C;LATIN SMALL LETTER TESH DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1DF1D;LATIN SMALL LETTER C WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1DF1E;LATIN SMALL LETTER S WITH CURL;Ll;0;L;;;;;N;;;;; 1E000;COMBINING GLAGOLITIC LETTER AZU;Mn;230;NSM;;;;;N;;;;; 1E001;COMBINING GLAGOLITIC LETTER BUKY;Mn;230;NSM;;;;;N;;;;; 1E002;COMBINING GLAGOLITIC LETTER VEDE;Mn;230;NSM;;;;;N;;;;; 1E003;COMBINING GLAGOLITIC LETTER GLAGOLI;Mn;230;NSM;;;;;N;;;;; 1E004;COMBINING GLAGOLITIC LETTER DOBRO;Mn;230;NSM;;;;;N;;;;; 1E005;COMBINING GLAGOLITIC LETTER YESTU;Mn;230;NSM;;;;;N;;;;; 1E006;COMBINING GLAGOLITIC LETTER ZHIVETE;Mn;230;NSM;;;;;N;;;;; 1E008;COMBINING GLAGOLITIC LETTER ZEMLJA;Mn;230;NSM;;;;;N;;;;; 1E009;COMBINING GLAGOLITIC LETTER IZHE;Mn;230;NSM;;;;;N;;;;; 1E00A;COMBINING GLAGOLITIC LETTER INITIAL IZHE;Mn;230;NSM;;;;;N;;;;; 1E00B;COMBINING GLAGOLITIC LETTER I;Mn;230;NSM;;;;;N;;;;; 1E00C;COMBINING GLAGOLITIC LETTER DJERVI;Mn;230;NSM;;;;;N;;;;; 1E00D;COMBINING GLAGOLITIC LETTER KAKO;Mn;230;NSM;;;;;N;;;;; 1E00E;COMBINING GLAGOLITIC LETTER LJUDIJE;Mn;230;NSM;;;;;N;;;;; 1E00F;COMBINING GLAGOLITIC LETTER MYSLITE;Mn;230;NSM;;;;;N;;;;; 1E010;COMBINING GLAGOLITIC LETTER NASHI;Mn;230;NSM;;;;;N;;;;; 1E011;COMBINING GLAGOLITIC LETTER ONU;Mn;230;NSM;;;;;N;;;;; 1E012;COMBINING GLAGOLITIC LETTER POKOJI;Mn;230;NSM;;;;;N;;;;; 1E013;COMBINING GLAGOLITIC LETTER RITSI;Mn;230;NSM;;;;;N;;;;; 1E014;COMBINING GLAGOLITIC LETTER SLOVO;Mn;230;NSM;;;;;N;;;;; 1E015;COMBINING GLAGOLITIC LETTER TVRIDO;Mn;230;NSM;;;;;N;;;;; 1E016;COMBINING GLAGOLITIC LETTER UKU;Mn;230;NSM;;;;;N;;;;; 1E017;COMBINING GLAGOLITIC LETTER FRITU;Mn;230;NSM;;;;;N;;;;; 1E018;COMBINING GLAGOLITIC LETTER HERU;Mn;230;NSM;;;;;N;;;;; 1E01B;COMBINING GLAGOLITIC LETTER SHTA;Mn;230;NSM;;;;;N;;;;; 1E01C;COMBINING GLAGOLITIC LETTER TSI;Mn;230;NSM;;;;;N;;;;; 1E01D;COMBINING GLAGOLITIC LETTER CHRIVI;Mn;230;NSM;;;;;N;;;;; 1E01E;COMBINING GLAGOLITIC LETTER SHA;Mn;230;NSM;;;;;N;;;;; 1E01F;COMBINING GLAGOLITIC LETTER YERU;Mn;230;NSM;;;;;N;;;;; 1E020;COMBINING GLAGOLITIC LETTER YERI;Mn;230;NSM;;;;;N;;;;; 1E021;COMBINING GLAGOLITIC LETTER YATI;Mn;230;NSM;;;;;N;;;;; 1E023;COMBINING GLAGOLITIC LETTER YU;Mn;230;NSM;;;;;N;;;;; 1E024;COMBINING GLAGOLITIC LETTER SMALL YUS;Mn;230;NSM;;;;;N;;;;; 1E026;COMBINING GLAGOLITIC LETTER YO;Mn;230;NSM;;;;;N;;;;; 1E027;COMBINING GLAGOLITIC LETTER IOTATED SMALL YUS;Mn;230;NSM;;;;;N;;;;; 1E028;COMBINING GLAGOLITIC LETTER BIG YUS;Mn;230;NSM;;;;;N;;;;; 1E029;COMBINING GLAGOLITIC LETTER IOTATED BIG YUS;Mn;230;NSM;;;;;N;;;;; 1E02A;COMBINING GLAGOLITIC LETTER FITA;Mn;230;NSM;;;;;N;;;;; 1E100;NYIAKENG PUACHUE HMONG LETTER MA;Lo;0;L;;;;;N;;;;; 1E101;NYIAKENG PUACHUE HMONG LETTER TSA;Lo;0;L;;;;;N;;;;; 1E102;NYIAKENG PUACHUE HMONG LETTER NTA;Lo;0;L;;;;;N;;;;; 1E103;NYIAKENG PUACHUE HMONG LETTER TA;Lo;0;L;;;;;N;;;;; 1E104;NYIAKENG PUACHUE HMONG LETTER HA;Lo;0;L;;;;;N;;;;; 1E105;NYIAKENG PUACHUE HMONG LETTER NA;Lo;0;L;;;;;N;;;;; 1E106;NYIAKENG PUACHUE HMONG LETTER XA;Lo;0;L;;;;;N;;;;; 1E107;NYIAKENG PUACHUE HMONG LETTER NKA;Lo;0;L;;;;;N;;;;; 1E108;NYIAKENG PUACHUE HMONG LETTER CA;Lo;0;L;;;;;N;;;;; 1E109;NYIAKENG PUACHUE HMONG LETTER LA;Lo;0;L;;;;;N;;;;; 1E10A;NYIAKENG PUACHUE HMONG LETTER SA;Lo;0;L;;;;;N;;;;; 1E10B;NYIAKENG PUACHUE HMONG LETTER ZA;Lo;0;L;;;;;N;;;;; 1E10C;NYIAKENG PUACHUE HMONG LETTER NCA;Lo;0;L;;;;;N;;;;; 1E10D;NYIAKENG PUACHUE HMONG LETTER NTSA;Lo;0;L;;;;;N;;;;; 1E10E;NYIAKENG PUACHUE HMONG LETTER KA;Lo;0;L;;;;;N;;;;; 1E10F;NYIAKENG PUACHUE HMONG LETTER DA;Lo;0;L;;;;;N;;;;; 1E110;NYIAKENG PUACHUE HMONG LETTER NYA;Lo;0;L;;;;;N;;;;; 1E111;NYIAKENG PUACHUE HMONG LETTER NRA;Lo;0;L;;;;;N;;;;; 1E112;NYIAKENG PUACHUE HMONG LETTER VA;Lo;0;L;;;;;N;;;;; 1E113;NYIAKENG PUACHUE HMONG LETTER NTXA;Lo;0;L;;;;;N;;;;; 1E114;NYIAKENG PUACHUE HMONG LETTER TXA;Lo;0;L;;;;;N;;;;; 1E115;NYIAKENG PUACHUE HMONG LETTER FA;Lo;0;L;;;;;N;;;;; 1E116;NYIAKENG PUACHUE HMONG LETTER RA;Lo;0;L;;;;;N;;;;; 1E117;NYIAKENG PUACHUE HMONG LETTER QA;Lo;0;L;;;;;N;;;;; 1E118;NYIAKENG PUACHUE HMONG LETTER YA;Lo;0;L;;;;;N;;;;; 1E119;NYIAKENG PUACHUE HMONG LETTER NQA;Lo;0;L;;;;;N;;;;; 1E11A;NYIAKENG PUACHUE HMONG LETTER PA;Lo;0;L;;;;;N;;;;; 1E11B;NYIAKENG PUACHUE HMONG LETTER XYA;Lo;0;L;;;;;N;;;;; 1E11C;NYIAKENG PUACHUE HMONG LETTER NPA;Lo;0;L;;;;;N;;;;; 1E11D;NYIAKENG PUACHUE HMONG LETTER DLA;Lo;0;L;;;;;N;;;;; 1E11E;NYIAKENG PUACHUE HMONG LETTER NPLA;Lo;0;L;;;;;N;;;;; 1E11F;NYIAKENG PUACHUE HMONG LETTER HAH;Lo;0;L;;;;;N;;;;; 1E120;NYIAKENG PUACHUE HMONG LETTER MLA;Lo;0;L;;;;;N;;;;; 1E121;NYIAKENG PUACHUE HMONG LETTER PLA;Lo;0;L;;;;;N;;;;; 1E122;NYIAKENG PUACHUE HMONG LETTER GA;Lo;0;L;;;;;N;;;;; 1E123;NYIAKENG PUACHUE HMONG LETTER RRA;Lo;0;L;;;;;N;;;;; 1E124;NYIAKENG PUACHUE HMONG LETTER A;Lo;0;L;;;;;N;;;;; 1E125;NYIAKENG PUACHUE HMONG LETTER AA;Lo;0;L;;;;;N;;;;; 1E126;NYIAKENG PUACHUE HMONG LETTER I;Lo;0;L;;;;;N;;;;; 1E127;NYIAKENG PUACHUE HMONG LETTER U;Lo;0;L;;;;;N;;;;; 1E128;NYIAKENG PUACHUE HMONG LETTER O;Lo;0;L;;;;;N;;;;; 1E129;NYIAKENG PUACHUE HMONG LETTER OO;Lo;0;L;;;;;N;;;;; 1E12A;NYIAKENG PUACHUE HMONG LETTER E;Lo;0;L;;;;;N;;;;; 1E12B;NYIAKENG PUACHUE HMONG LETTER EE;Lo;0;L;;;;;N;;;;; 1E12C;NYIAKENG PUACHUE HMONG LETTER W;Lo;0;L;;;;;N;;;;; 1E130;NYIAKENG PUACHUE HMONG TONE-B;Mn;230;NSM;;;;;N;;;;; 1E131;NYIAKENG PUACHUE HMONG TONE-M;Mn;230;NSM;;;;;N;;;;; 1E132;NYIAKENG PUACHUE HMONG TONE-J;Mn;230;NSM;;;;;N;;;;; 1E133;NYIAKENG PUACHUE HMONG TONE-V;Mn;230;NSM;;;;;N;;;;; 1E134;NYIAKENG PUACHUE HMONG TONE-S;Mn;230;NSM;;;;;N;;;;; 1E135;NYIAKENG PUACHUE HMONG TONE-G;Mn;230;NSM;;;;;N;;;;; 1E136;NYIAKENG PUACHUE HMONG TONE-D;Mn;230;NSM;;;;;N;;;;; 1E137;NYIAKENG PUACHUE HMONG SIGN FOR PERSON;Lm;0;L;;;;;N;;;;; 1E138;NYIAKENG PUACHUE HMONG SIGN FOR THING;Lm;0;L;;;;;N;;;;; 1E139;NYIAKENG PUACHUE HMONG SIGN FOR LOCATION;Lm;0;L;;;;;N;;;;; 1E13A;NYIAKENG PUACHUE HMONG SIGN FOR ANIMAL;Lm;0;L;;;;;N;;;;; 1E13B;NYIAKENG PUACHUE HMONG SIGN FOR INVERTEBRATE;Lm;0;L;;;;;N;;;;; 1E13C;NYIAKENG PUACHUE HMONG SIGN XW XW;Lm;0;L;;;;;N;;;;; 1E13D;NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER;Lm;0;L;;;;;N;;;;; 1E140;NYIAKENG PUACHUE HMONG DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1E141;NYIAKENG PUACHUE HMONG DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1E142;NYIAKENG PUACHUE HMONG DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1E143;NYIAKENG PUACHUE HMONG DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1E144;NYIAKENG PUACHUE HMONG DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1E145;NYIAKENG PUACHUE HMONG DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1E146;NYIAKENG PUACHUE HMONG DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1E147;NYIAKENG PUACHUE HMONG DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1E148;NYIAKENG PUACHUE HMONG DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1E149;NYIAKENG PUACHUE HMONG DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1E14E;NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ;Lo;0;L;;;;;N;;;;; 1E14F;NYIAKENG PUACHUE HMONG CIRCLED CA;So;0;L;;;;;N;;;;; 1E290;TOTO LETTER PA;Lo;0;L;;;;;N;;;;; 1E291;TOTO LETTER BA;Lo;0;L;;;;;N;;;;; 1E292;TOTO LETTER TA;Lo;0;L;;;;;N;;;;; 1E293;TOTO LETTER DA;Lo;0;L;;;;;N;;;;; 1E294;TOTO LETTER KA;Lo;0;L;;;;;N;;;;; 1E295;TOTO LETTER GA;Lo;0;L;;;;;N;;;;; 1E296;TOTO LETTER MA;Lo;0;L;;;;;N;;;;; 1E297;TOTO LETTER NA;Lo;0;L;;;;;N;;;;; 1E298;TOTO LETTER NGA;Lo;0;L;;;;;N;;;;; 1E299;TOTO LETTER SA;Lo;0;L;;;;;N;;;;; 1E29A;TOTO LETTER CHA;Lo;0;L;;;;;N;;;;; 1E29B;TOTO LETTER YA;Lo;0;L;;;;;N;;;;; 1E29C;TOTO LETTER WA;Lo;0;L;;;;;N;;;;; 1E29D;TOTO LETTER JA;Lo;0;L;;;;;N;;;;; 1E29E;TOTO LETTER HA;Lo;0;L;;;;;N;;;;; 1E29F;TOTO LETTER RA;Lo;0;L;;;;;N;;;;; 1E2A0;TOTO LETTER LA;Lo;0;L;;;;;N;;;;; 1E2A1;TOTO LETTER I;Lo;0;L;;;;;N;;;;; 1E2A2;TOTO LETTER BREATHY I;Lo;0;L;;;;;N;;;;; 1E2A3;TOTO LETTER IU;Lo;0;L;;;;;N;;;;; 1E2A4;TOTO LETTER BREATHY IU;Lo;0;L;;;;;N;;;;; 1E2A5;TOTO LETTER U;Lo;0;L;;;;;N;;;;; 1E2A6;TOTO LETTER E;Lo;0;L;;;;;N;;;;; 1E2A7;TOTO LETTER BREATHY E;Lo;0;L;;;;;N;;;;; 1E2A8;TOTO LETTER EO;Lo;0;L;;;;;N;;;;; 1E2A9;TOTO LETTER BREATHY EO;Lo;0;L;;;;;N;;;;; 1E2AA;TOTO LETTER O;Lo;0;L;;;;;N;;;;; 1E2AB;TOTO LETTER AE;Lo;0;L;;;;;N;;;;; 1E2AC;TOTO LETTER BREATHY AE;Lo;0;L;;;;;N;;;;; 1E2AD;TOTO LETTER A;Lo;0;L;;;;;N;;;;; 1E2AE;TOTO SIGN RISING TONE;Mn;230;NSM;;;;;N;;;;; 1E2C0;WANCHO LETTER AA;Lo;0;L;;;;;N;;;;; 1E2C1;WANCHO LETTER A;Lo;0;L;;;;;N;;;;; 1E2C2;WANCHO LETTER BA;Lo;0;L;;;;;N;;;;; 1E2C3;WANCHO LETTER CA;Lo;0;L;;;;;N;;;;; 1E2C4;WANCHO LETTER DA;Lo;0;L;;;;;N;;;;; 1E2C5;WANCHO LETTER GA;Lo;0;L;;;;;N;;;;; 1E2C6;WANCHO LETTER YA;Lo;0;L;;;;;N;;;;; 1E2C7;WANCHO LETTER PHA;Lo;0;L;;;;;N;;;;; 1E2C8;WANCHO LETTER LA;Lo;0;L;;;;;N;;;;; 1E2C9;WANCHO LETTER NA;Lo;0;L;;;;;N;;;;; 1E2CA;WANCHO LETTER PA;Lo;0;L;;;;;N;;;;; 1E2CB;WANCHO LETTER TA;Lo;0;L;;;;;N;;;;; 1E2CC;WANCHO LETTER THA;Lo;0;L;;;;;N;;;;; 1E2CD;WANCHO LETTER FA;Lo;0;L;;;;;N;;;;; 1E2CE;WANCHO LETTER SA;Lo;0;L;;;;;N;;;;; 1E2CF;WANCHO LETTER SHA;Lo;0;L;;;;;N;;;;; 1E2D0;WANCHO LETTER JA;Lo;0;L;;;;;N;;;;; 1E2D1;WANCHO LETTER ZA;Lo;0;L;;;;;N;;;;; 1E2D2;WANCHO LETTER WA;Lo;0;L;;;;;N;;;;; 1E2D3;WANCHO LETTER VA;Lo;0;L;;;;;N;;;;; 1E2D4;WANCHO LETTER KA;Lo;0;L;;;;;N;;;;; 1E2D5;WANCHO LETTER O;Lo;0;L;;;;;N;;;;; 1E2D6;WANCHO LETTER AU;Lo;0;L;;;;;N;;;;; 1E2D7;WANCHO LETTER RA;Lo;0;L;;;;;N;;;;; 1E2D8;WANCHO LETTER MA;Lo;0;L;;;;;N;;;;; 1E2D9;WANCHO LETTER KHA;Lo;0;L;;;;;N;;;;; 1E2DA;WANCHO LETTER HA;Lo;0;L;;;;;N;;;;; 1E2DB;WANCHO LETTER E;Lo;0;L;;;;;N;;;;; 1E2DC;WANCHO LETTER I;Lo;0;L;;;;;N;;;;; 1E2DD;WANCHO LETTER NGA;Lo;0;L;;;;;N;;;;; 1E2DE;WANCHO LETTER U;Lo;0;L;;;;;N;;;;; 1E2DF;WANCHO LETTER LLHA;Lo;0;L;;;;;N;;;;; 1E2E0;WANCHO LETTER TSA;Lo;0;L;;;;;N;;;;; 1E2E1;WANCHO LETTER TRA;Lo;0;L;;;;;N;;;;; 1E2E2;WANCHO LETTER ONG;Lo;0;L;;;;;N;;;;; 1E2E3;WANCHO LETTER AANG;Lo;0;L;;;;;N;;;;; 1E2E4;WANCHO LETTER ANG;Lo;0;L;;;;;N;;;;; 1E2E5;WANCHO LETTER ING;Lo;0;L;;;;;N;;;;; 1E2E6;WANCHO LETTER ON;Lo;0;L;;;;;N;;;;; 1E2E7;WANCHO LETTER EN;Lo;0;L;;;;;N;;;;; 1E2E8;WANCHO LETTER AAN;Lo;0;L;;;;;N;;;;; 1E2E9;WANCHO LETTER NYA;Lo;0;L;;;;;N;;;;; 1E2EA;WANCHO LETTER UEN;Lo;0;L;;;;;N;;;;; 1E2EB;WANCHO LETTER YIH;Lo;0;L;;;;;N;;;;; 1E2EC;WANCHO TONE TUP;Mn;230;NSM;;;;;N;;;;; 1E2ED;WANCHO TONE TUPNI;Mn;230;NSM;;;;;N;;;;; 1E2EE;WANCHO TONE KOI;Mn;230;NSM;;;;;N;;;;; 1E2EF;WANCHO TONE KOINI;Mn;230;NSM;;;;;N;;;;; 1E2F0;WANCHO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1E2F1;WANCHO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1E2F2;WANCHO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1E2F3;WANCHO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1E2F4;WANCHO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1E2F5;WANCHO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1E2F6;WANCHO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1E2F7;WANCHO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1E2F8;WANCHO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1E2F9;WANCHO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1E2FF;WANCHO NGUN SIGN;Sc;0;ET;;;;;N;;;;; 1E7E0;ETHIOPIC SYLLABLE HHYA;Lo;0;L;;;;;N;;;;; 1E7E1;ETHIOPIC SYLLABLE HHYU;Lo;0;L;;;;;N;;;;; 1E7E2;ETHIOPIC SYLLABLE HHYI;Lo;0;L;;;;;N;;;;; 1E7E3;ETHIOPIC SYLLABLE HHYAA;Lo;0;L;;;;;N;;;;; 1E7E4;ETHIOPIC SYLLABLE HHYEE;Lo;0;L;;;;;N;;;;; 1E7E5;ETHIOPIC SYLLABLE HHYE;Lo;0;L;;;;;N;;;;; 1E7E6;ETHIOPIC SYLLABLE HHYO;Lo;0;L;;;;;N;;;;; 1E7E8;ETHIOPIC SYLLABLE GURAGE HHWA;Lo;0;L;;;;;N;;;;; 1E7E9;ETHIOPIC SYLLABLE HHWI;Lo;0;L;;;;;N;;;;; 1E7EA;ETHIOPIC SYLLABLE HHWEE;Lo;0;L;;;;;N;;;;; 1E7EB;ETHIOPIC SYLLABLE HHWE;Lo;0;L;;;;;N;;;;; 1E7ED;ETHIOPIC SYLLABLE GURAGE MWI;Lo;0;L;;;;;N;;;;; 1E7EE;ETHIOPIC SYLLABLE GURAGE MWEE;Lo;0;L;;;;;N;;;;; 1E7F0;ETHIOPIC SYLLABLE GURAGE QWI;Lo;0;L;;;;;N;;;;; 1E7F1;ETHIOPIC SYLLABLE GURAGE QWEE;Lo;0;L;;;;;N;;;;; 1E7F2;ETHIOPIC SYLLABLE GURAGE QWE;Lo;0;L;;;;;N;;;;; 1E7F3;ETHIOPIC SYLLABLE GURAGE BWI;Lo;0;L;;;;;N;;;;; 1E7F4;ETHIOPIC SYLLABLE GURAGE BWEE;Lo;0;L;;;;;N;;;;; 1E7F5;ETHIOPIC SYLLABLE GURAGE KWI;Lo;0;L;;;;;N;;;;; 1E7F6;ETHIOPIC SYLLABLE GURAGE KWEE;Lo;0;L;;;;;N;;;;; 1E7F7;ETHIOPIC SYLLABLE GURAGE KWE;Lo;0;L;;;;;N;;;;; 1E7F8;ETHIOPIC SYLLABLE GURAGE GWI;Lo;0;L;;;;;N;;;;; 1E7F9;ETHIOPIC SYLLABLE GURAGE GWEE;Lo;0;L;;;;;N;;;;; 1E7FA;ETHIOPIC SYLLABLE GURAGE GWE;Lo;0;L;;;;;N;;;;; 1E7FB;ETHIOPIC SYLLABLE GURAGE FWI;Lo;0;L;;;;;N;;;;; 1E7FC;ETHIOPIC SYLLABLE GURAGE FWEE;Lo;0;L;;;;;N;;;;; 1E7FD;ETHIOPIC SYLLABLE GURAGE PWI;Lo;0;L;;;;;N;;;;; 1E7FE;ETHIOPIC SYLLABLE GURAGE PWEE;Lo;0;L;;;;;N;;;;; 1E800;MENDE KIKAKUI SYLLABLE M001 KI;Lo;0;R;;;;;N;;;;; 1E801;MENDE KIKAKUI SYLLABLE M002 KA;Lo;0;R;;;;;N;;;;; 1E802;MENDE KIKAKUI SYLLABLE M003 KU;Lo;0;R;;;;;N;;;;; 1E803;MENDE KIKAKUI SYLLABLE M065 KEE;Lo;0;R;;;;;N;;;;; 1E804;MENDE KIKAKUI SYLLABLE M095 KE;Lo;0;R;;;;;N;;;;; 1E805;MENDE KIKAKUI SYLLABLE M076 KOO;Lo;0;R;;;;;N;;;;; 1E806;MENDE KIKAKUI SYLLABLE M048 KO;Lo;0;R;;;;;N;;;;; 1E807;MENDE KIKAKUI SYLLABLE M179 KUA;Lo;0;R;;;;;N;;;;; 1E808;MENDE KIKAKUI SYLLABLE M004 WI;Lo;0;R;;;;;N;;;;; 1E809;MENDE KIKAKUI SYLLABLE M005 WA;Lo;0;R;;;;;N;;;;; 1E80A;MENDE KIKAKUI SYLLABLE M006 WU;Lo;0;R;;;;;N;;;;; 1E80B;MENDE KIKAKUI SYLLABLE M126 WEE;Lo;0;R;;;;;N;;;;; 1E80C;MENDE KIKAKUI SYLLABLE M118 WE;Lo;0;R;;;;;N;;;;; 1E80D;MENDE KIKAKUI SYLLABLE M114 WOO;Lo;0;R;;;;;N;;;;; 1E80E;MENDE KIKAKUI SYLLABLE M045 WO;Lo;0;R;;;;;N;;;;; 1E80F;MENDE KIKAKUI SYLLABLE M194 WUI;Lo;0;R;;;;;N;;;;; 1E810;MENDE KIKAKUI SYLLABLE M143 WEI;Lo;0;R;;;;;N;;;;; 1E811;MENDE KIKAKUI SYLLABLE M061 WVI;Lo;0;R;;;;;N;;;;; 1E812;MENDE KIKAKUI SYLLABLE M049 WVA;Lo;0;R;;;;;N;;;;; 1E813;MENDE KIKAKUI SYLLABLE M139 WVE;Lo;0;R;;;;;N;;;;; 1E814;MENDE KIKAKUI SYLLABLE M007 MIN;Lo;0;R;;;;;N;;;;; 1E815;MENDE KIKAKUI SYLLABLE M008 MAN;Lo;0;R;;;;;N;;;;; 1E816;MENDE KIKAKUI SYLLABLE M009 MUN;Lo;0;R;;;;;N;;;;; 1E817;MENDE KIKAKUI SYLLABLE M059 MEN;Lo;0;R;;;;;N;;;;; 1E818;MENDE KIKAKUI SYLLABLE M094 MON;Lo;0;R;;;;;N;;;;; 1E819;MENDE KIKAKUI SYLLABLE M154 MUAN;Lo;0;R;;;;;N;;;;; 1E81A;MENDE KIKAKUI SYLLABLE M189 MUEN;Lo;0;R;;;;;N;;;;; 1E81B;MENDE KIKAKUI SYLLABLE M010 BI;Lo;0;R;;;;;N;;;;; 1E81C;MENDE KIKAKUI SYLLABLE M011 BA;Lo;0;R;;;;;N;;;;; 1E81D;MENDE KIKAKUI SYLLABLE M012 BU;Lo;0;R;;;;;N;;;;; 1E81E;MENDE KIKAKUI SYLLABLE M150 BEE;Lo;0;R;;;;;N;;;;; 1E81F;MENDE KIKAKUI SYLLABLE M097 BE;Lo;0;R;;;;;N;;;;; 1E820;MENDE KIKAKUI SYLLABLE M103 BOO;Lo;0;R;;;;;N;;;;; 1E821;MENDE KIKAKUI SYLLABLE M138 BO;Lo;0;R;;;;;N;;;;; 1E822;MENDE KIKAKUI SYLLABLE M013 I;Lo;0;R;;;;;N;;;;; 1E823;MENDE KIKAKUI SYLLABLE M014 A;Lo;0;R;;;;;N;;;;; 1E824;MENDE KIKAKUI SYLLABLE M015 U;Lo;0;R;;;;;N;;;;; 1E825;MENDE KIKAKUI SYLLABLE M163 EE;Lo;0;R;;;;;N;;;;; 1E826;MENDE KIKAKUI SYLLABLE M100 E;Lo;0;R;;;;;N;;;;; 1E827;MENDE KIKAKUI SYLLABLE M165 OO;Lo;0;R;;;;;N;;;;; 1E828;MENDE KIKAKUI SYLLABLE M147 O;Lo;0;R;;;;;N;;;;; 1E829;MENDE KIKAKUI SYLLABLE M137 EI;Lo;0;R;;;;;N;;;;; 1E82A;MENDE KIKAKUI SYLLABLE M131 IN;Lo;0;R;;;;;N;;;;; 1E82B;MENDE KIKAKUI SYLLABLE M135 IN;Lo;0;R;;;;;N;;;;; 1E82C;MENDE KIKAKUI SYLLABLE M195 AN;Lo;0;R;;;;;N;;;;; 1E82D;MENDE KIKAKUI SYLLABLE M178 EN;Lo;0;R;;;;;N;;;;; 1E82E;MENDE KIKAKUI SYLLABLE M019 SI;Lo;0;R;;;;;N;;;;; 1E82F;MENDE KIKAKUI SYLLABLE M020 SA;Lo;0;R;;;;;N;;;;; 1E830;MENDE KIKAKUI SYLLABLE M021 SU;Lo;0;R;;;;;N;;;;; 1E831;MENDE KIKAKUI SYLLABLE M162 SEE;Lo;0;R;;;;;N;;;;; 1E832;MENDE KIKAKUI SYLLABLE M116 SE;Lo;0;R;;;;;N;;;;; 1E833;MENDE KIKAKUI SYLLABLE M136 SOO;Lo;0;R;;;;;N;;;;; 1E834;MENDE KIKAKUI SYLLABLE M079 SO;Lo;0;R;;;;;N;;;;; 1E835;MENDE KIKAKUI SYLLABLE M196 SIA;Lo;0;R;;;;;N;;;;; 1E836;MENDE KIKAKUI SYLLABLE M025 LI;Lo;0;R;;;;;N;;;;; 1E837;MENDE KIKAKUI SYLLABLE M026 LA;Lo;0;R;;;;;N;;;;; 1E838;MENDE KIKAKUI SYLLABLE M027 LU;Lo;0;R;;;;;N;;;;; 1E839;MENDE KIKAKUI SYLLABLE M084 LEE;Lo;0;R;;;;;N;;;;; 1E83A;MENDE KIKAKUI SYLLABLE M073 LE;Lo;0;R;;;;;N;;;;; 1E83B;MENDE KIKAKUI SYLLABLE M054 LOO;Lo;0;R;;;;;N;;;;; 1E83C;MENDE KIKAKUI SYLLABLE M153 LO;Lo;0;R;;;;;N;;;;; 1E83D;MENDE KIKAKUI SYLLABLE M110 LONG LE;Lo;0;R;;;;;N;;;;; 1E83E;MENDE KIKAKUI SYLLABLE M016 DI;Lo;0;R;;;;;N;;;;; 1E83F;MENDE KIKAKUI SYLLABLE M017 DA;Lo;0;R;;;;;N;;;;; 1E840;MENDE KIKAKUI SYLLABLE M018 DU;Lo;0;R;;;;;N;;;;; 1E841;MENDE KIKAKUI SYLLABLE M089 DEE;Lo;0;R;;;;;N;;;;; 1E842;MENDE KIKAKUI SYLLABLE M180 DOO;Lo;0;R;;;;;N;;;;; 1E843;MENDE KIKAKUI SYLLABLE M181 DO;Lo;0;R;;;;;N;;;;; 1E844;MENDE KIKAKUI SYLLABLE M022 TI;Lo;0;R;;;;;N;;;;; 1E845;MENDE KIKAKUI SYLLABLE M023 TA;Lo;0;R;;;;;N;;;;; 1E846;MENDE KIKAKUI SYLLABLE M024 TU;Lo;0;R;;;;;N;;;;; 1E847;MENDE KIKAKUI SYLLABLE M091 TEE;Lo;0;R;;;;;N;;;;; 1E848;MENDE KIKAKUI SYLLABLE M055 TE;Lo;0;R;;;;;N;;;;; 1E849;MENDE KIKAKUI SYLLABLE M104 TOO;Lo;0;R;;;;;N;;;;; 1E84A;MENDE KIKAKUI SYLLABLE M069 TO;Lo;0;R;;;;;N;;;;; 1E84B;MENDE KIKAKUI SYLLABLE M028 JI;Lo;0;R;;;;;N;;;;; 1E84C;MENDE KIKAKUI SYLLABLE M029 JA;Lo;0;R;;;;;N;;;;; 1E84D;MENDE KIKAKUI SYLLABLE M030 JU;Lo;0;R;;;;;N;;;;; 1E84E;MENDE KIKAKUI SYLLABLE M157 JEE;Lo;0;R;;;;;N;;;;; 1E84F;MENDE KIKAKUI SYLLABLE M113 JE;Lo;0;R;;;;;N;;;;; 1E850;MENDE KIKAKUI SYLLABLE M160 JOO;Lo;0;R;;;;;N;;;;; 1E851;MENDE KIKAKUI SYLLABLE M063 JO;Lo;0;R;;;;;N;;;;; 1E852;MENDE KIKAKUI SYLLABLE M175 LONG JO;Lo;0;R;;;;;N;;;;; 1E853;MENDE KIKAKUI SYLLABLE M031 YI;Lo;0;R;;;;;N;;;;; 1E854;MENDE KIKAKUI SYLLABLE M032 YA;Lo;0;R;;;;;N;;;;; 1E855;MENDE KIKAKUI SYLLABLE M033 YU;Lo;0;R;;;;;N;;;;; 1E856;MENDE KIKAKUI SYLLABLE M109 YEE;Lo;0;R;;;;;N;;;;; 1E857;MENDE KIKAKUI SYLLABLE M080 YE;Lo;0;R;;;;;N;;;;; 1E858;MENDE KIKAKUI SYLLABLE M141 YOO;Lo;0;R;;;;;N;;;;; 1E859;MENDE KIKAKUI SYLLABLE M121 YO;Lo;0;R;;;;;N;;;;; 1E85A;MENDE KIKAKUI SYLLABLE M034 FI;Lo;0;R;;;;;N;;;;; 1E85B;MENDE KIKAKUI SYLLABLE M035 FA;Lo;0;R;;;;;N;;;;; 1E85C;MENDE KIKAKUI SYLLABLE M036 FU;Lo;0;R;;;;;N;;;;; 1E85D;MENDE KIKAKUI SYLLABLE M078 FEE;Lo;0;R;;;;;N;;;;; 1E85E;MENDE KIKAKUI SYLLABLE M075 FE;Lo;0;R;;;;;N;;;;; 1E85F;MENDE KIKAKUI SYLLABLE M133 FOO;Lo;0;R;;;;;N;;;;; 1E860;MENDE KIKAKUI SYLLABLE M088 FO;Lo;0;R;;;;;N;;;;; 1E861;MENDE KIKAKUI SYLLABLE M197 FUA;Lo;0;R;;;;;N;;;;; 1E862;MENDE KIKAKUI SYLLABLE M101 FAN;Lo;0;R;;;;;N;;;;; 1E863;MENDE KIKAKUI SYLLABLE M037 NIN;Lo;0;R;;;;;N;;;;; 1E864;MENDE KIKAKUI SYLLABLE M038 NAN;Lo;0;R;;;;;N;;;;; 1E865;MENDE KIKAKUI SYLLABLE M039 NUN;Lo;0;R;;;;;N;;;;; 1E866;MENDE KIKAKUI SYLLABLE M117 NEN;Lo;0;R;;;;;N;;;;; 1E867;MENDE KIKAKUI SYLLABLE M169 NON;Lo;0;R;;;;;N;;;;; 1E868;MENDE KIKAKUI SYLLABLE M176 HI;Lo;0;R;;;;;N;;;;; 1E869;MENDE KIKAKUI SYLLABLE M041 HA;Lo;0;R;;;;;N;;;;; 1E86A;MENDE KIKAKUI SYLLABLE M186 HU;Lo;0;R;;;;;N;;;;; 1E86B;MENDE KIKAKUI SYLLABLE M040 HEE;Lo;0;R;;;;;N;;;;; 1E86C;MENDE KIKAKUI SYLLABLE M096 HE;Lo;0;R;;;;;N;;;;; 1E86D;MENDE KIKAKUI SYLLABLE M042 HOO;Lo;0;R;;;;;N;;;;; 1E86E;MENDE KIKAKUI SYLLABLE M140 HO;Lo;0;R;;;;;N;;;;; 1E86F;MENDE KIKAKUI SYLLABLE M083 HEEI;Lo;0;R;;;;;N;;;;; 1E870;MENDE KIKAKUI SYLLABLE M128 HOOU;Lo;0;R;;;;;N;;;;; 1E871;MENDE KIKAKUI SYLLABLE M053 HIN;Lo;0;R;;;;;N;;;;; 1E872;MENDE KIKAKUI SYLLABLE M130 HAN;Lo;0;R;;;;;N;;;;; 1E873;MENDE KIKAKUI SYLLABLE M087 HUN;Lo;0;R;;;;;N;;;;; 1E874;MENDE KIKAKUI SYLLABLE M052 HEN;Lo;0;R;;;;;N;;;;; 1E875;MENDE KIKAKUI SYLLABLE M193 HON;Lo;0;R;;;;;N;;;;; 1E876;MENDE KIKAKUI SYLLABLE M046 HUAN;Lo;0;R;;;;;N;;;;; 1E877;MENDE KIKAKUI SYLLABLE M090 NGGI;Lo;0;R;;;;;N;;;;; 1E878;MENDE KIKAKUI SYLLABLE M043 NGGA;Lo;0;R;;;;;N;;;;; 1E879;MENDE KIKAKUI SYLLABLE M082 NGGU;Lo;0;R;;;;;N;;;;; 1E87A;MENDE KIKAKUI SYLLABLE M115 NGGEE;Lo;0;R;;;;;N;;;;; 1E87B;MENDE KIKAKUI SYLLABLE M146 NGGE;Lo;0;R;;;;;N;;;;; 1E87C;MENDE KIKAKUI SYLLABLE M156 NGGOO;Lo;0;R;;;;;N;;;;; 1E87D;MENDE KIKAKUI SYLLABLE M120 NGGO;Lo;0;R;;;;;N;;;;; 1E87E;MENDE KIKAKUI SYLLABLE M159 NGGAA;Lo;0;R;;;;;N;;;;; 1E87F;MENDE KIKAKUI SYLLABLE M127 NGGUA;Lo;0;R;;;;;N;;;;; 1E880;MENDE KIKAKUI SYLLABLE M086 LONG NGGE;Lo;0;R;;;;;N;;;;; 1E881;MENDE KIKAKUI SYLLABLE M106 LONG NGGOO;Lo;0;R;;;;;N;;;;; 1E882;MENDE KIKAKUI SYLLABLE M183 LONG NGGO;Lo;0;R;;;;;N;;;;; 1E883;MENDE KIKAKUI SYLLABLE M155 GI;Lo;0;R;;;;;N;;;;; 1E884;MENDE KIKAKUI SYLLABLE M111 GA;Lo;0;R;;;;;N;;;;; 1E885;MENDE KIKAKUI SYLLABLE M168 GU;Lo;0;R;;;;;N;;;;; 1E886;MENDE KIKAKUI SYLLABLE M190 GEE;Lo;0;R;;;;;N;;;;; 1E887;MENDE KIKAKUI SYLLABLE M166 GUEI;Lo;0;R;;;;;N;;;;; 1E888;MENDE KIKAKUI SYLLABLE M167 GUAN;Lo;0;R;;;;;N;;;;; 1E889;MENDE KIKAKUI SYLLABLE M184 NGEN;Lo;0;R;;;;;N;;;;; 1E88A;MENDE KIKAKUI SYLLABLE M057 NGON;Lo;0;R;;;;;N;;;;; 1E88B;MENDE KIKAKUI SYLLABLE M177 NGUAN;Lo;0;R;;;;;N;;;;; 1E88C;MENDE KIKAKUI SYLLABLE M068 PI;Lo;0;R;;;;;N;;;;; 1E88D;MENDE KIKAKUI SYLLABLE M099 PA;Lo;0;R;;;;;N;;;;; 1E88E;MENDE KIKAKUI SYLLABLE M050 PU;Lo;0;R;;;;;N;;;;; 1E88F;MENDE KIKAKUI SYLLABLE M081 PEE;Lo;0;R;;;;;N;;;;; 1E890;MENDE KIKAKUI SYLLABLE M051 PE;Lo;0;R;;;;;N;;;;; 1E891;MENDE KIKAKUI SYLLABLE M102 POO;Lo;0;R;;;;;N;;;;; 1E892;MENDE KIKAKUI SYLLABLE M066 PO;Lo;0;R;;;;;N;;;;; 1E893;MENDE KIKAKUI SYLLABLE M145 MBI;Lo;0;R;;;;;N;;;;; 1E894;MENDE KIKAKUI SYLLABLE M062 MBA;Lo;0;R;;;;;N;;;;; 1E895;MENDE KIKAKUI SYLLABLE M122 MBU;Lo;0;R;;;;;N;;;;; 1E896;MENDE KIKAKUI SYLLABLE M047 MBEE;Lo;0;R;;;;;N;;;;; 1E897;MENDE KIKAKUI SYLLABLE M188 MBEE;Lo;0;R;;;;;N;;;;; 1E898;MENDE KIKAKUI SYLLABLE M072 MBE;Lo;0;R;;;;;N;;;;; 1E899;MENDE KIKAKUI SYLLABLE M172 MBOO;Lo;0;R;;;;;N;;;;; 1E89A;MENDE KIKAKUI SYLLABLE M174 MBO;Lo;0;R;;;;;N;;;;; 1E89B;MENDE KIKAKUI SYLLABLE M187 MBUU;Lo;0;R;;;;;N;;;;; 1E89C;MENDE KIKAKUI SYLLABLE M161 LONG MBE;Lo;0;R;;;;;N;;;;; 1E89D;MENDE KIKAKUI SYLLABLE M105 LONG MBOO;Lo;0;R;;;;;N;;;;; 1E89E;MENDE KIKAKUI SYLLABLE M142 LONG MBO;Lo;0;R;;;;;N;;;;; 1E89F;MENDE KIKAKUI SYLLABLE M132 KPI;Lo;0;R;;;;;N;;;;; 1E8A0;MENDE KIKAKUI SYLLABLE M092 KPA;Lo;0;R;;;;;N;;;;; 1E8A1;MENDE KIKAKUI SYLLABLE M074 KPU;Lo;0;R;;;;;N;;;;; 1E8A2;MENDE KIKAKUI SYLLABLE M044 KPEE;Lo;0;R;;;;;N;;;;; 1E8A3;MENDE KIKAKUI SYLLABLE M108 KPE;Lo;0;R;;;;;N;;;;; 1E8A4;MENDE KIKAKUI SYLLABLE M112 KPOO;Lo;0;R;;;;;N;;;;; 1E8A5;MENDE KIKAKUI SYLLABLE M158 KPO;Lo;0;R;;;;;N;;;;; 1E8A6;MENDE KIKAKUI SYLLABLE M124 GBI;Lo;0;R;;;;;N;;;;; 1E8A7;MENDE KIKAKUI SYLLABLE M056 GBA;Lo;0;R;;;;;N;;;;; 1E8A8;MENDE KIKAKUI SYLLABLE M148 GBU;Lo;0;R;;;;;N;;;;; 1E8A9;MENDE KIKAKUI SYLLABLE M093 GBEE;Lo;0;R;;;;;N;;;;; 1E8AA;MENDE KIKAKUI SYLLABLE M107 GBE;Lo;0;R;;;;;N;;;;; 1E8AB;MENDE KIKAKUI SYLLABLE M071 GBOO;Lo;0;R;;;;;N;;;;; 1E8AC;MENDE KIKAKUI SYLLABLE M070 GBO;Lo;0;R;;;;;N;;;;; 1E8AD;MENDE KIKAKUI SYLLABLE M171 RA;Lo;0;R;;;;;N;;;;; 1E8AE;MENDE KIKAKUI SYLLABLE M123 NDI;Lo;0;R;;;;;N;;;;; 1E8AF;MENDE KIKAKUI SYLLABLE M129 NDA;Lo;0;R;;;;;N;;;;; 1E8B0;MENDE KIKAKUI SYLLABLE M125 NDU;Lo;0;R;;;;;N;;;;; 1E8B1;MENDE KIKAKUI SYLLABLE M191 NDEE;Lo;0;R;;;;;N;;;;; 1E8B2;MENDE KIKAKUI SYLLABLE M119 NDE;Lo;0;R;;;;;N;;;;; 1E8B3;MENDE KIKAKUI SYLLABLE M067 NDOO;Lo;0;R;;;;;N;;;;; 1E8B4;MENDE KIKAKUI SYLLABLE M064 NDO;Lo;0;R;;;;;N;;;;; 1E8B5;MENDE KIKAKUI SYLLABLE M152 NJA;Lo;0;R;;;;;N;;;;; 1E8B6;MENDE KIKAKUI SYLLABLE M192 NJU;Lo;0;R;;;;;N;;;;; 1E8B7;MENDE KIKAKUI SYLLABLE M149 NJEE;Lo;0;R;;;;;N;;;;; 1E8B8;MENDE KIKAKUI SYLLABLE M134 NJOO;Lo;0;R;;;;;N;;;;; 1E8B9;MENDE KIKAKUI SYLLABLE M182 VI;Lo;0;R;;;;;N;;;;; 1E8BA;MENDE KIKAKUI SYLLABLE M185 VA;Lo;0;R;;;;;N;;;;; 1E8BB;MENDE KIKAKUI SYLLABLE M151 VU;Lo;0;R;;;;;N;;;;; 1E8BC;MENDE KIKAKUI SYLLABLE M173 VEE;Lo;0;R;;;;;N;;;;; 1E8BD;MENDE KIKAKUI SYLLABLE M085 VE;Lo;0;R;;;;;N;;;;; 1E8BE;MENDE KIKAKUI SYLLABLE M144 VOO;Lo;0;R;;;;;N;;;;; 1E8BF;MENDE KIKAKUI SYLLABLE M077 VO;Lo;0;R;;;;;N;;;;; 1E8C0;MENDE KIKAKUI SYLLABLE M164 NYIN;Lo;0;R;;;;;N;;;;; 1E8C1;MENDE KIKAKUI SYLLABLE M058 NYAN;Lo;0;R;;;;;N;;;;; 1E8C2;MENDE KIKAKUI SYLLABLE M170 NYUN;Lo;0;R;;;;;N;;;;; 1E8C3;MENDE KIKAKUI SYLLABLE M098 NYEN;Lo;0;R;;;;;N;;;;; 1E8C4;MENDE KIKAKUI SYLLABLE M060 NYON;Lo;0;R;;;;;N;;;;; 1E8C7;MENDE KIKAKUI DIGIT ONE;No;0;R;;;;1;N;;;;; 1E8C8;MENDE KIKAKUI DIGIT TWO;No;0;R;;;;2;N;;;;; 1E8C9;MENDE KIKAKUI DIGIT THREE;No;0;R;;;;3;N;;;;; 1E8CA;MENDE KIKAKUI DIGIT FOUR;No;0;R;;;;4;N;;;;; 1E8CB;MENDE KIKAKUI DIGIT FIVE;No;0;R;;;;5;N;;;;; 1E8CC;MENDE KIKAKUI DIGIT SIX;No;0;R;;;;6;N;;;;; 1E8CD;MENDE KIKAKUI DIGIT SEVEN;No;0;R;;;;7;N;;;;; 1E8CE;MENDE KIKAKUI DIGIT EIGHT;No;0;R;;;;8;N;;;;; 1E8CF;MENDE KIKAKUI DIGIT NINE;No;0;R;;;;9;N;;;;; 1E8D0;MENDE KIKAKUI COMBINING NUMBER TEENS;Mn;220;NSM;;;;;N;;;;; 1E8D1;MENDE KIKAKUI COMBINING NUMBER TENS;Mn;220;NSM;;;;;N;;;;; 1E8D2;MENDE KIKAKUI COMBINING NUMBER HUNDREDS;Mn;220;NSM;;;;;N;;;;; 1E8D3;MENDE KIKAKUI COMBINING NUMBER THOUSANDS;Mn;220;NSM;;;;;N;;;;; 1E8D4;MENDE KIKAKUI COMBINING NUMBER TEN THOUSANDS;Mn;220;NSM;;;;;N;;;;; 1E8D5;MENDE KIKAKUI COMBINING NUMBER HUNDRED THOUSANDS;Mn;220;NSM;;;;;N;;;;; 1E8D6;MENDE KIKAKUI COMBINING NUMBER MILLIONS;Mn;220;NSM;;;;;N;;;;; 1E900;ADLAM CAPITAL LETTER ALIF;Lu;0;R;;;;;N;;;;1E922; 1E901;ADLAM CAPITAL LETTER DAALI;Lu;0;R;;;;;N;;;;1E923; 1E902;ADLAM CAPITAL LETTER LAAM;Lu;0;R;;;;;N;;;;1E924; 1E903;ADLAM CAPITAL LETTER MIIM;Lu;0;R;;;;;N;;;;1E925; 1E904;ADLAM CAPITAL LETTER BA;Lu;0;R;;;;;N;;;;1E926; 1E905;ADLAM CAPITAL LETTER SINNYIIYHE;Lu;0;R;;;;;N;;;;1E927; 1E906;ADLAM CAPITAL LETTER PE;Lu;0;R;;;;;N;;;;1E928; 1E907;ADLAM CAPITAL LETTER BHE;Lu;0;R;;;;;N;;;;1E929; 1E908;ADLAM CAPITAL LETTER RA;Lu;0;R;;;;;N;;;;1E92A; 1E909;ADLAM CAPITAL LETTER E;Lu;0;R;;;;;N;;;;1E92B; 1E90A;ADLAM CAPITAL LETTER FA;Lu;0;R;;;;;N;;;;1E92C; 1E90B;ADLAM CAPITAL LETTER I;Lu;0;R;;;;;N;;;;1E92D; 1E90C;ADLAM CAPITAL LETTER O;Lu;0;R;;;;;N;;;;1E92E; 1E90D;ADLAM CAPITAL LETTER DHA;Lu;0;R;;;;;N;;;;1E92F; 1E90E;ADLAM CAPITAL LETTER YHE;Lu;0;R;;;;;N;;;;1E930; 1E90F;ADLAM CAPITAL LETTER WAW;Lu;0;R;;;;;N;;;;1E931; 1E910;ADLAM CAPITAL LETTER NUN;Lu;0;R;;;;;N;;;;1E932; 1E911;ADLAM CAPITAL LETTER KAF;Lu;0;R;;;;;N;;;;1E933; 1E912;ADLAM CAPITAL LETTER YA;Lu;0;R;;;;;N;;;;1E934; 1E913;ADLAM CAPITAL LETTER U;Lu;0;R;;;;;N;;;;1E935; 1E914;ADLAM CAPITAL LETTER JIIM;Lu;0;R;;;;;N;;;;1E936; 1E915;ADLAM CAPITAL LETTER CHI;Lu;0;R;;;;;N;;;;1E937; 1E916;ADLAM CAPITAL LETTER HA;Lu;0;R;;;;;N;;;;1E938; 1E917;ADLAM CAPITAL LETTER QAAF;Lu;0;R;;;;;N;;;;1E939; 1E918;ADLAM CAPITAL LETTER GA;Lu;0;R;;;;;N;;;;1E93A; 1E919;ADLAM CAPITAL LETTER NYA;Lu;0;R;;;;;N;;;;1E93B; 1E91A;ADLAM CAPITAL LETTER TU;Lu;0;R;;;;;N;;;;1E93C; 1E91B;ADLAM CAPITAL LETTER NHA;Lu;0;R;;;;;N;;;;1E93D; 1E91C;ADLAM CAPITAL LETTER VA;Lu;0;R;;;;;N;;;;1E93E; 1E91D;ADLAM CAPITAL LETTER KHA;Lu;0;R;;;;;N;;;;1E93F; 1E91E;ADLAM CAPITAL LETTER GBE;Lu;0;R;;;;;N;;;;1E940; 1E91F;ADLAM CAPITAL LETTER ZAL;Lu;0;R;;;;;N;;;;1E941; 1E920;ADLAM CAPITAL LETTER KPO;Lu;0;R;;;;;N;;;;1E942; 1E921;ADLAM CAPITAL LETTER SHA;Lu;0;R;;;;;N;;;;1E943; 1E922;ADLAM SMALL LETTER ALIF;Ll;0;R;;;;;N;;;1E900;;1E900 1E923;ADLAM SMALL LETTER DAALI;Ll;0;R;;;;;N;;;1E901;;1E901 1E924;ADLAM SMALL LETTER LAAM;Ll;0;R;;;;;N;;;1E902;;1E902 1E925;ADLAM SMALL LETTER MIIM;Ll;0;R;;;;;N;;;1E903;;1E903 1E926;ADLAM SMALL LETTER BA;Ll;0;R;;;;;N;;;1E904;;1E904 1E927;ADLAM SMALL LETTER SINNYIIYHE;Ll;0;R;;;;;N;;;1E905;;1E905 1E928;ADLAM SMALL LETTER PE;Ll;0;R;;;;;N;;;1E906;;1E906 1E929;ADLAM SMALL LETTER BHE;Ll;0;R;;;;;N;;;1E907;;1E907 1E92A;ADLAM SMALL LETTER RA;Ll;0;R;;;;;N;;;1E908;;1E908 1E92B;ADLAM SMALL LETTER E;Ll;0;R;;;;;N;;;1E909;;1E909 1E92C;ADLAM SMALL LETTER FA;Ll;0;R;;;;;N;;;1E90A;;1E90A 1E92D;ADLAM SMALL LETTER I;Ll;0;R;;;;;N;;;1E90B;;1E90B 1E92E;ADLAM SMALL LETTER O;Ll;0;R;;;;;N;;;1E90C;;1E90C 1E92F;ADLAM SMALL LETTER DHA;Ll;0;R;;;;;N;;;1E90D;;1E90D 1E930;ADLAM SMALL LETTER YHE;Ll;0;R;;;;;N;;;1E90E;;1E90E 1E931;ADLAM SMALL LETTER WAW;Ll;0;R;;;;;N;;;1E90F;;1E90F 1E932;ADLAM SMALL LETTER NUN;Ll;0;R;;;;;N;;;1E910;;1E910 1E933;ADLAM SMALL LETTER KAF;Ll;0;R;;;;;N;;;1E911;;1E911 1E934;ADLAM SMALL LETTER YA;Ll;0;R;;;;;N;;;1E912;;1E912 1E935;ADLAM SMALL LETTER U;Ll;0;R;;;;;N;;;1E913;;1E913 1E936;ADLAM SMALL LETTER JIIM;Ll;0;R;;;;;N;;;1E914;;1E914 1E937;ADLAM SMALL LETTER CHI;Ll;0;R;;;;;N;;;1E915;;1E915 1E938;ADLAM SMALL LETTER HA;Ll;0;R;;;;;N;;;1E916;;1E916 1E939;ADLAM SMALL LETTER QAAF;Ll;0;R;;;;;N;;;1E917;;1E917 1E93A;ADLAM SMALL LETTER GA;Ll;0;R;;;;;N;;;1E918;;1E918 1E93B;ADLAM SMALL LETTER NYA;Ll;0;R;;;;;N;;;1E919;;1E919 1E93C;ADLAM SMALL LETTER TU;Ll;0;R;;;;;N;;;1E91A;;1E91A 1E93D;ADLAM SMALL LETTER NHA;Ll;0;R;;;;;N;;;1E91B;;1E91B 1E93E;ADLAM SMALL LETTER VA;Ll;0;R;;;;;N;;;1E91C;;1E91C 1E93F;ADLAM SMALL LETTER KHA;Ll;0;R;;;;;N;;;1E91D;;1E91D 1E940;ADLAM SMALL LETTER GBE;Ll;0;R;;;;;N;;;1E91E;;1E91E 1E941;ADLAM SMALL LETTER ZAL;Ll;0;R;;;;;N;;;1E91F;;1E91F 1E942;ADLAM SMALL LETTER KPO;Ll;0;R;;;;;N;;;1E920;;1E920 1E943;ADLAM SMALL LETTER SHA;Ll;0;R;;;;;N;;;1E921;;1E921 1E944;ADLAM ALIF LENGTHENER;Mn;230;NSM;;;;;N;;;;; 1E945;ADLAM VOWEL LENGTHENER;Mn;230;NSM;;;;;N;;;;; 1E946;ADLAM GEMINATION MARK;Mn;230;NSM;;;;;N;;;;; 1E947;ADLAM HAMZA;Mn;230;NSM;;;;;N;;;;; 1E948;ADLAM CONSONANT MODIFIER;Mn;230;NSM;;;;;N;;;;; 1E949;ADLAM GEMINATE CONSONANT MODIFIER;Mn;230;NSM;;;;;N;;;;; 1E94A;ADLAM NUKTA;Mn;7;NSM;;;;;N;;;;; 1E94B;ADLAM NASALIZATION MARK;Lm;0;R;;;;;N;;;;; 1E950;ADLAM DIGIT ZERO;Nd;0;R;;0;0;0;N;;;;; 1E951;ADLAM DIGIT ONE;Nd;0;R;;1;1;1;N;;;;; 1E952;ADLAM DIGIT TWO;Nd;0;R;;2;2;2;N;;;;; 1E953;ADLAM DIGIT THREE;Nd;0;R;;3;3;3;N;;;;; 1E954;ADLAM DIGIT FOUR;Nd;0;R;;4;4;4;N;;;;; 1E955;ADLAM DIGIT FIVE;Nd;0;R;;5;5;5;N;;;;; 1E956;ADLAM DIGIT SIX;Nd;0;R;;6;6;6;N;;;;; 1E957;ADLAM DIGIT SEVEN;Nd;0;R;;7;7;7;N;;;;; 1E958;ADLAM DIGIT EIGHT;Nd;0;R;;8;8;8;N;;;;; 1E959;ADLAM DIGIT NINE;Nd;0;R;;9;9;9;N;;;;; 1E95E;ADLAM INITIAL EXCLAMATION MARK;Po;0;R;;;;;N;;;;; 1E95F;ADLAM INITIAL QUESTION MARK;Po;0;R;;;;;N;;;;; 1EC71;INDIC SIYAQ NUMBER ONE;No;0;AL;;;;1;N;;;;; 1EC72;INDIC SIYAQ NUMBER TWO;No;0;AL;;;;2;N;;;;; 1EC73;INDIC SIYAQ NUMBER THREE;No;0;AL;;;;3;N;;;;; 1EC74;INDIC SIYAQ NUMBER FOUR;No;0;AL;;;;4;N;;;;; 1EC75;INDIC SIYAQ NUMBER FIVE;No;0;AL;;;;5;N;;;;; 1EC76;INDIC SIYAQ NUMBER SIX;No;0;AL;;;;6;N;;;;; 1EC77;INDIC SIYAQ NUMBER SEVEN;No;0;AL;;;;7;N;;;;; 1EC78;INDIC SIYAQ NUMBER EIGHT;No;0;AL;;;;8;N;;;;; 1EC79;INDIC SIYAQ NUMBER NINE;No;0;AL;;;;9;N;;;;; 1EC7A;INDIC SIYAQ NUMBER TEN;No;0;AL;;;;10;N;;;;; 1EC7B;INDIC SIYAQ NUMBER TWENTY;No;0;AL;;;;20;N;;;;; 1EC7C;INDIC SIYAQ NUMBER THIRTY;No;0;AL;;;;30;N;;;;; 1EC7D;INDIC SIYAQ NUMBER FORTY;No;0;AL;;;;40;N;;;;; 1EC7E;INDIC SIYAQ NUMBER FIFTY;No;0;AL;;;;50;N;;;;; 1EC7F;INDIC SIYAQ NUMBER SIXTY;No;0;AL;;;;60;N;;;;; 1EC80;INDIC SIYAQ NUMBER SEVENTY;No;0;AL;;;;70;N;;;;; 1EC81;INDIC SIYAQ NUMBER EIGHTY;No;0;AL;;;;80;N;;;;; 1EC82;INDIC SIYAQ NUMBER NINETY;No;0;AL;;;;90;N;;;;; 1EC83;INDIC SIYAQ NUMBER ONE HUNDRED;No;0;AL;;;;100;N;;;;; 1EC84;INDIC SIYAQ NUMBER TWO HUNDRED;No;0;AL;;;;200;N;;;;; 1EC85;INDIC SIYAQ NUMBER THREE HUNDRED;No;0;AL;;;;300;N;;;;; 1EC86;INDIC SIYAQ NUMBER FOUR HUNDRED;No;0;AL;;;;400;N;;;;; 1EC87;INDIC SIYAQ NUMBER FIVE HUNDRED;No;0;AL;;;;500;N;;;;; 1EC88;INDIC SIYAQ NUMBER SIX HUNDRED;No;0;AL;;;;600;N;;;;; 1EC89;INDIC SIYAQ NUMBER SEVEN HUNDRED;No;0;AL;;;;700;N;;;;; 1EC8A;INDIC SIYAQ NUMBER EIGHT HUNDRED;No;0;AL;;;;800;N;;;;; 1EC8B;INDIC SIYAQ NUMBER NINE HUNDRED;No;0;AL;;;;900;N;;;;; 1EC8C;INDIC SIYAQ NUMBER ONE THOUSAND;No;0;AL;;;;1000;N;;;;; 1EC8D;INDIC SIYAQ NUMBER TWO THOUSAND;No;0;AL;;;;2000;N;;;;; 1EC8E;INDIC SIYAQ NUMBER THREE THOUSAND;No;0;AL;;;;3000;N;;;;; 1EC8F;INDIC SIYAQ NUMBER FOUR THOUSAND;No;0;AL;;;;4000;N;;;;; 1EC90;INDIC SIYAQ NUMBER FIVE THOUSAND;No;0;AL;;;;5000;N;;;;; 1EC91;INDIC SIYAQ NUMBER SIX THOUSAND;No;0;AL;;;;6000;N;;;;; 1EC92;INDIC SIYAQ NUMBER SEVEN THOUSAND;No;0;AL;;;;7000;N;;;;; 1EC93;INDIC SIYAQ NUMBER EIGHT THOUSAND;No;0;AL;;;;8000;N;;;;; 1EC94;INDIC SIYAQ NUMBER NINE THOUSAND;No;0;AL;;;;9000;N;;;;; 1EC95;INDIC SIYAQ NUMBER TEN THOUSAND;No;0;AL;;;;10000;N;;;;; 1EC96;INDIC SIYAQ NUMBER TWENTY THOUSAND;No;0;AL;;;;20000;N;;;;; 1EC97;INDIC SIYAQ NUMBER THIRTY THOUSAND;No;0;AL;;;;30000;N;;;;; 1EC98;INDIC SIYAQ NUMBER FORTY THOUSAND;No;0;AL;;;;40000;N;;;;; 1EC99;INDIC SIYAQ NUMBER FIFTY THOUSAND;No;0;AL;;;;50000;N;;;;; 1EC9A;INDIC SIYAQ NUMBER SIXTY THOUSAND;No;0;AL;;;;60000;N;;;;; 1EC9B;INDIC SIYAQ NUMBER SEVENTY THOUSAND;No;0;AL;;;;70000;N;;;;; 1EC9C;INDIC SIYAQ NUMBER EIGHTY THOUSAND;No;0;AL;;;;80000;N;;;;; 1EC9D;INDIC SIYAQ NUMBER NINETY THOUSAND;No;0;AL;;;;90000;N;;;;; 1EC9E;INDIC SIYAQ NUMBER LAKH;No;0;AL;;;;100000;N;;;;; 1EC9F;INDIC SIYAQ NUMBER LAKHAN;No;0;AL;;;;200000;N;;;;; 1ECA0;INDIC SIYAQ LAKH MARK;No;0;AL;;;;100000;N;;;;; 1ECA1;INDIC SIYAQ NUMBER KAROR;No;0;AL;;;;10000000;N;;;;; 1ECA2;INDIC SIYAQ NUMBER KARORAN;No;0;AL;;;;20000000;N;;;;; 1ECA3;INDIC SIYAQ NUMBER PREFIXED ONE;No;0;AL;;;;1;N;;;;; 1ECA4;INDIC SIYAQ NUMBER PREFIXED TWO;No;0;AL;;;;2;N;;;;; 1ECA5;INDIC SIYAQ NUMBER PREFIXED THREE;No;0;AL;;;;3;N;;;;; 1ECA6;INDIC SIYAQ NUMBER PREFIXED FOUR;No;0;AL;;;;4;N;;;;; 1ECA7;INDIC SIYAQ NUMBER PREFIXED FIVE;No;0;AL;;;;5;N;;;;; 1ECA8;INDIC SIYAQ NUMBER PREFIXED SIX;No;0;AL;;;;6;N;;;;; 1ECA9;INDIC SIYAQ NUMBER PREFIXED SEVEN;No;0;AL;;;;7;N;;;;; 1ECAA;INDIC SIYAQ NUMBER PREFIXED EIGHT;No;0;AL;;;;8;N;;;;; 1ECAB;INDIC SIYAQ NUMBER PREFIXED NINE;No;0;AL;;;;9;N;;;;; 1ECAC;INDIC SIYAQ PLACEHOLDER;So;0;AL;;;;;N;;;;; 1ECAD;INDIC SIYAQ FRACTION ONE QUARTER;No;0;AL;;;;1/4;N;;;;; 1ECAE;INDIC SIYAQ FRACTION ONE HALF;No;0;AL;;;;1/2;N;;;;; 1ECAF;INDIC SIYAQ FRACTION THREE QUARTERS;No;0;AL;;;;3/4;N;;;;; 1ECB0;INDIC SIYAQ RUPEE MARK;Sc;0;AL;;;;;N;;;;; 1ECB1;INDIC SIYAQ NUMBER ALTERNATE ONE;No;0;AL;;;;1;N;;;;; 1ECB2;INDIC SIYAQ NUMBER ALTERNATE TWO;No;0;AL;;;;2;N;;;;; 1ECB3;INDIC SIYAQ NUMBER ALTERNATE TEN THOUSAND;No;0;AL;;;;10000;N;;;;; 1ECB4;INDIC SIYAQ ALTERNATE LAKH MARK;No;0;AL;;;;100000;N;;;;; 1ED01;OTTOMAN SIYAQ NUMBER ONE;No;0;AL;;;;1;N;;;;; 1ED02;OTTOMAN SIYAQ NUMBER TWO;No;0;AL;;;;2;N;;;;; 1ED03;OTTOMAN SIYAQ NUMBER THREE;No;0;AL;;;;3;N;;;;; 1ED04;OTTOMAN SIYAQ NUMBER FOUR;No;0;AL;;;;4;N;;;;; 1ED05;OTTOMAN SIYAQ NUMBER FIVE;No;0;AL;;;;5;N;;;;; 1ED06;OTTOMAN SIYAQ NUMBER SIX;No;0;AL;;;;6;N;;;;; 1ED07;OTTOMAN SIYAQ NUMBER SEVEN;No;0;AL;;;;7;N;;;;; 1ED08;OTTOMAN SIYAQ NUMBER EIGHT;No;0;AL;;;;8;N;;;;; 1ED09;OTTOMAN SIYAQ NUMBER NINE;No;0;AL;;;;9;N;;;;; 1ED0A;OTTOMAN SIYAQ NUMBER TEN;No;0;AL;;;;10;N;;;;; 1ED0B;OTTOMAN SIYAQ NUMBER TWENTY;No;0;AL;;;;20;N;;;;; 1ED0C;OTTOMAN SIYAQ NUMBER THIRTY;No;0;AL;;;;30;N;;;;; 1ED0D;OTTOMAN SIYAQ NUMBER FORTY;No;0;AL;;;;40;N;;;;; 1ED0E;OTTOMAN SIYAQ NUMBER FIFTY;No;0;AL;;;;50;N;;;;; 1ED0F;OTTOMAN SIYAQ NUMBER SIXTY;No;0;AL;;;;60;N;;;;; 1ED10;OTTOMAN SIYAQ NUMBER SEVENTY;No;0;AL;;;;70;N;;;;; 1ED11;OTTOMAN SIYAQ NUMBER EIGHTY;No;0;AL;;;;80;N;;;;; 1ED12;OTTOMAN SIYAQ NUMBER NINETY;No;0;AL;;;;90;N;;;;; 1ED13;OTTOMAN SIYAQ NUMBER ONE HUNDRED;No;0;AL;;;;100;N;;;;; 1ED14;OTTOMAN SIYAQ NUMBER TWO HUNDRED;No;0;AL;;;;200;N;;;;; 1ED15;OTTOMAN SIYAQ NUMBER THREE HUNDRED;No;0;AL;;;;300;N;;;;; 1ED16;OTTOMAN SIYAQ NUMBER FOUR HUNDRED;No;0;AL;;;;400;N;;;;; 1ED17;OTTOMAN SIYAQ NUMBER FIVE HUNDRED;No;0;AL;;;;500;N;;;;; 1ED18;OTTOMAN SIYAQ NUMBER SIX HUNDRED;No;0;AL;;;;600;N;;;;; 1ED19;OTTOMAN SIYAQ NUMBER SEVEN HUNDRED;No;0;AL;;;;700;N;;;;; 1ED1A;OTTOMAN SIYAQ NUMBER EIGHT HUNDRED;No;0;AL;;;;800;N;;;;; 1ED1B;OTTOMAN SIYAQ NUMBER NINE HUNDRED;No;0;AL;;;;900;N;;;;; 1ED1C;OTTOMAN SIYAQ NUMBER ONE THOUSAND;No;0;AL;;;;1000;N;;;;; 1ED1D;OTTOMAN SIYAQ NUMBER TWO THOUSAND;No;0;AL;;;;2000;N;;;;; 1ED1E;OTTOMAN SIYAQ NUMBER THREE THOUSAND;No;0;AL;;;;3000;N;;;;; 1ED1F;OTTOMAN SIYAQ NUMBER FOUR THOUSAND;No;0;AL;;;;4000;N;;;;; 1ED20;OTTOMAN SIYAQ NUMBER FIVE THOUSAND;No;0;AL;;;;5000;N;;;;; 1ED21;OTTOMAN SIYAQ NUMBER SIX THOUSAND;No;0;AL;;;;6000;N;;;;; 1ED22;OTTOMAN SIYAQ NUMBER SEVEN THOUSAND;No;0;AL;;;;7000;N;;;;; 1ED23;OTTOMAN SIYAQ NUMBER EIGHT THOUSAND;No;0;AL;;;;8000;N;;;;; 1ED24;OTTOMAN SIYAQ NUMBER NINE THOUSAND;No;0;AL;;;;9000;N;;;;; 1ED25;OTTOMAN SIYAQ NUMBER TEN THOUSAND;No;0;AL;;;;10000;N;;;;; 1ED26;OTTOMAN SIYAQ NUMBER TWENTY THOUSAND;No;0;AL;;;;20000;N;;;;; 1ED27;OTTOMAN SIYAQ NUMBER THIRTY THOUSAND;No;0;AL;;;;30000;N;;;;; 1ED28;OTTOMAN SIYAQ NUMBER FORTY THOUSAND;No;0;AL;;;;40000;N;;;;; 1ED29;OTTOMAN SIYAQ NUMBER FIFTY THOUSAND;No;0;AL;;;;50000;N;;;;; 1ED2A;OTTOMAN SIYAQ NUMBER SIXTY THOUSAND;No;0;AL;;;;60000;N;;;;; 1ED2B;OTTOMAN SIYAQ NUMBER SEVENTY THOUSAND;No;0;AL;;;;70000;N;;;;; 1ED2C;OTTOMAN SIYAQ NUMBER EIGHTY THOUSAND;No;0;AL;;;;80000;N;;;;; 1ED2D;OTTOMAN SIYAQ NUMBER NINETY THOUSAND;No;0;AL;;;;90000;N;;;;; 1ED2E;OTTOMAN SIYAQ MARRATAN;So;0;AL;;;;;N;;;;; 1ED2F;OTTOMAN SIYAQ ALTERNATE NUMBER TWO;No;0;AL;;;;2;N;;;;; 1ED30;OTTOMAN SIYAQ ALTERNATE NUMBER THREE;No;0;AL;;;;3;N;;;;; 1ED31;OTTOMAN SIYAQ ALTERNATE NUMBER FOUR;No;0;AL;;;;4;N;;;;; 1ED32;OTTOMAN SIYAQ ALTERNATE NUMBER FIVE;No;0;AL;;;;5;N;;;;; 1ED33;OTTOMAN SIYAQ ALTERNATE NUMBER SIX;No;0;AL;;;;6;N;;;;; 1ED34;OTTOMAN SIYAQ ALTERNATE NUMBER SEVEN;No;0;AL;;;;7;N;;;;; 1ED35;OTTOMAN SIYAQ ALTERNATE NUMBER EIGHT;No;0;AL;;;;8;N;;;;; 1ED36;OTTOMAN SIYAQ ALTERNATE NUMBER NINE;No;0;AL;;;;9;N;;;;; 1ED37;OTTOMAN SIYAQ ALTERNATE NUMBER TEN;No;0;AL;;;;10;N;;;;; 1ED38;OTTOMAN SIYAQ ALTERNATE NUMBER FOUR HUNDRED;No;0;AL;;;;400;N;;;;; 1ED39;OTTOMAN SIYAQ ALTERNATE NUMBER SIX HUNDRED;No;0;AL;;;;600;N;;;;; 1ED3A;OTTOMAN SIYAQ ALTERNATE NUMBER TWO THOUSAND;No;0;AL;;;;2000;N;;;;; 1ED3B;OTTOMAN SIYAQ ALTERNATE NUMBER TEN THOUSAND;No;0;AL;;;;10000;N;;;;; 1ED3C;OTTOMAN SIYAQ FRACTION ONE HALF;No;0;AL;;;;1/2;N;;;;; 1ED3D;OTTOMAN SIYAQ FRACTION ONE SIXTH;No;0;AL;;;;1/6;N;;;;; 1EE00;ARABIC MATHEMATICAL ALEF;Lo;0;AL; 0627;;;;N;;;;; 1EE01;ARABIC MATHEMATICAL BEH;Lo;0;AL; 0628;;;;N;;;;; 1EE02;ARABIC MATHEMATICAL JEEM;Lo;0;AL; 062C;;;;N;;;;; 1EE03;ARABIC MATHEMATICAL DAL;Lo;0;AL; 062F;;;;N;;;;; 1EE05;ARABIC MATHEMATICAL WAW;Lo;0;AL; 0648;;;;N;;;;; 1EE06;ARABIC MATHEMATICAL ZAIN;Lo;0;AL; 0632;;;;N;;;;; 1EE07;ARABIC MATHEMATICAL HAH;Lo;0;AL; 062D;;;;N;;;;; 1EE08;ARABIC MATHEMATICAL TAH;Lo;0;AL; 0637;;;;N;;;;; 1EE09;ARABIC MATHEMATICAL YEH;Lo;0;AL; 064A;;;;N;;;;; 1EE0A;ARABIC MATHEMATICAL KAF;Lo;0;AL; 0643;;;;N;;;;; 1EE0B;ARABIC MATHEMATICAL LAM;Lo;0;AL; 0644;;;;N;;;;; 1EE0C;ARABIC MATHEMATICAL MEEM;Lo;0;AL; 0645;;;;N;;;;; 1EE0D;ARABIC MATHEMATICAL NOON;Lo;0;AL; 0646;;;;N;;;;; 1EE0E;ARABIC MATHEMATICAL SEEN;Lo;0;AL; 0633;;;;N;;;;; 1EE0F;ARABIC MATHEMATICAL AIN;Lo;0;AL; 0639;;;;N;;;;; 1EE10;ARABIC MATHEMATICAL FEH;Lo;0;AL; 0641;;;;N;;;;; 1EE11;ARABIC MATHEMATICAL SAD;Lo;0;AL; 0635;;;;N;;;;; 1EE12;ARABIC MATHEMATICAL QAF;Lo;0;AL; 0642;;;;N;;;;; 1EE13;ARABIC MATHEMATICAL REH;Lo;0;AL; 0631;;;;N;;;;; 1EE14;ARABIC MATHEMATICAL SHEEN;Lo;0;AL; 0634;;;;N;;;;; 1EE15;ARABIC MATHEMATICAL TEH;Lo;0;AL; 062A;;;;N;;;;; 1EE16;ARABIC MATHEMATICAL THEH;Lo;0;AL; 062B;;;;N;;;;; 1EE17;ARABIC MATHEMATICAL KHAH;Lo;0;AL; 062E;;;;N;;;;; 1EE18;ARABIC MATHEMATICAL THAL;Lo;0;AL; 0630;;;;N;;;;; 1EE19;ARABIC MATHEMATICAL DAD;Lo;0;AL; 0636;;;;N;;;;; 1EE1A;ARABIC MATHEMATICAL ZAH;Lo;0;AL; 0638;;;;N;;;;; 1EE1B;ARABIC MATHEMATICAL GHAIN;Lo;0;AL; 063A;;;;N;;;;; 1EE1C;ARABIC MATHEMATICAL DOTLESS BEH;Lo;0;AL; 066E;;;;N;;;;; 1EE1D;ARABIC MATHEMATICAL DOTLESS NOON;Lo;0;AL; 06BA;;;;N;;;;; 1EE1E;ARABIC MATHEMATICAL DOTLESS FEH;Lo;0;AL; 06A1;;;;N;;;;; 1EE1F;ARABIC MATHEMATICAL DOTLESS QAF;Lo;0;AL; 066F;;;;N;;;;; 1EE21;ARABIC MATHEMATICAL INITIAL BEH;Lo;0;AL; 0628;;;;N;;;;; 1EE22;ARABIC MATHEMATICAL INITIAL JEEM;Lo;0;AL; 062C;;;;N;;;;; 1EE24;ARABIC MATHEMATICAL INITIAL HEH;Lo;0;AL; 0647;;;;N;;;;; 1EE27;ARABIC MATHEMATICAL INITIAL HAH;Lo;0;AL; 062D;;;;N;;;;; 1EE29;ARABIC MATHEMATICAL INITIAL YEH;Lo;0;AL; 064A;;;;N;;;;; 1EE2A;ARABIC MATHEMATICAL INITIAL KAF;Lo;0;AL; 0643;;;;N;;;;; 1EE2B;ARABIC MATHEMATICAL INITIAL LAM;Lo;0;AL; 0644;;;;N;;;;; 1EE2C;ARABIC MATHEMATICAL INITIAL MEEM;Lo;0;AL; 0645;;;;N;;;;; 1EE2D;ARABIC MATHEMATICAL INITIAL NOON;Lo;0;AL; 0646;;;;N;;;;; 1EE2E;ARABIC MATHEMATICAL INITIAL SEEN;Lo;0;AL; 0633;;;;N;;;;; 1EE2F;ARABIC MATHEMATICAL INITIAL AIN;Lo;0;AL; 0639;;;;N;;;;; 1EE30;ARABIC MATHEMATICAL INITIAL FEH;Lo;0;AL; 0641;;;;N;;;;; 1EE31;ARABIC MATHEMATICAL INITIAL SAD;Lo;0;AL; 0635;;;;N;;;;; 1EE32;ARABIC MATHEMATICAL INITIAL QAF;Lo;0;AL; 0642;;;;N;;;;; 1EE34;ARABIC MATHEMATICAL INITIAL SHEEN;Lo;0;AL; 0634;;;;N;;;;; 1EE35;ARABIC MATHEMATICAL INITIAL TEH;Lo;0;AL; 062A;;;;N;;;;; 1EE36;ARABIC MATHEMATICAL INITIAL THEH;Lo;0;AL; 062B;;;;N;;;;; 1EE37;ARABIC MATHEMATICAL INITIAL KHAH;Lo;0;AL; 062E;;;;N;;;;; 1EE39;ARABIC MATHEMATICAL INITIAL DAD;Lo;0;AL; 0636;;;;N;;;;; 1EE3B;ARABIC MATHEMATICAL INITIAL GHAIN;Lo;0;AL; 063A;;;;N;;;;; 1EE42;ARABIC MATHEMATICAL TAILED JEEM;Lo;0;AL; 062C;;;;N;;;;; 1EE47;ARABIC MATHEMATICAL TAILED HAH;Lo;0;AL; 062D;;;;N;;;;; 1EE49;ARABIC MATHEMATICAL TAILED YEH;Lo;0;AL; 064A;;;;N;;;;; 1EE4B;ARABIC MATHEMATICAL TAILED LAM;Lo;0;AL; 0644;;;;N;;;;; 1EE4D;ARABIC MATHEMATICAL TAILED NOON;Lo;0;AL; 0646;;;;N;;;;; 1EE4E;ARABIC MATHEMATICAL TAILED SEEN;Lo;0;AL; 0633;;;;N;;;;; 1EE4F;ARABIC MATHEMATICAL TAILED AIN;Lo;0;AL; 0639;;;;N;;;;; 1EE51;ARABIC MATHEMATICAL TAILED SAD;Lo;0;AL; 0635;;;;N;;;;; 1EE52;ARABIC MATHEMATICAL TAILED QAF;Lo;0;AL; 0642;;;;N;;;;; 1EE54;ARABIC MATHEMATICAL TAILED SHEEN;Lo;0;AL; 0634;;;;N;;;;; 1EE57;ARABIC MATHEMATICAL TAILED KHAH;Lo;0;AL; 062E;;;;N;;;;; 1EE59;ARABIC MATHEMATICAL TAILED DAD;Lo;0;AL; 0636;;;;N;;;;; 1EE5B;ARABIC MATHEMATICAL TAILED GHAIN;Lo;0;AL; 063A;;;;N;;;;; 1EE5D;ARABIC MATHEMATICAL TAILED DOTLESS NOON;Lo;0;AL; 06BA;;;;N;;;;; 1EE5F;ARABIC MATHEMATICAL TAILED DOTLESS QAF;Lo;0;AL; 066F;;;;N;;;;; 1EE61;ARABIC MATHEMATICAL STRETCHED BEH;Lo;0;AL; 0628;;;;N;;;;; 1EE62;ARABIC MATHEMATICAL STRETCHED JEEM;Lo;0;AL; 062C;;;;N;;;;; 1EE64;ARABIC MATHEMATICAL STRETCHED HEH;Lo;0;AL; 0647;;;;N;;;;; 1EE67;ARABIC MATHEMATICAL STRETCHED HAH;Lo;0;AL; 062D;;;;N;;;;; 1EE68;ARABIC MATHEMATICAL STRETCHED TAH;Lo;0;AL; 0637;;;;N;;;;; 1EE69;ARABIC MATHEMATICAL STRETCHED YEH;Lo;0;AL; 064A;;;;N;;;;; 1EE6A;ARABIC MATHEMATICAL STRETCHED KAF;Lo;0;AL; 0643;;;;N;;;;; 1EE6C;ARABIC MATHEMATICAL STRETCHED MEEM;Lo;0;AL; 0645;;;;N;;;;; 1EE6D;ARABIC MATHEMATICAL STRETCHED NOON;Lo;0;AL; 0646;;;;N;;;;; 1EE6E;ARABIC MATHEMATICAL STRETCHED SEEN;Lo;0;AL; 0633;;;;N;;;;; 1EE6F;ARABIC MATHEMATICAL STRETCHED AIN;Lo;0;AL; 0639;;;;N;;;;; 1EE70;ARABIC MATHEMATICAL STRETCHED FEH;Lo;0;AL; 0641;;;;N;;;;; 1EE71;ARABIC MATHEMATICAL STRETCHED SAD;Lo;0;AL; 0635;;;;N;;;;; 1EE72;ARABIC MATHEMATICAL STRETCHED QAF;Lo;0;AL; 0642;;;;N;;;;; 1EE74;ARABIC MATHEMATICAL STRETCHED SHEEN;Lo;0;AL; 0634;;;;N;;;;; 1EE75;ARABIC MATHEMATICAL STRETCHED TEH;Lo;0;AL; 062A;;;;N;;;;; 1EE76;ARABIC MATHEMATICAL STRETCHED THEH;Lo;0;AL; 062B;;;;N;;;;; 1EE77;ARABIC MATHEMATICAL STRETCHED KHAH;Lo;0;AL; 062E;;;;N;;;;; 1EE79;ARABIC MATHEMATICAL STRETCHED DAD;Lo;0;AL; 0636;;;;N;;;;; 1EE7A;ARABIC MATHEMATICAL STRETCHED ZAH;Lo;0;AL; 0638;;;;N;;;;; 1EE7B;ARABIC MATHEMATICAL STRETCHED GHAIN;Lo;0;AL; 063A;;;;N;;;;; 1EE7C;ARABIC MATHEMATICAL STRETCHED DOTLESS BEH;Lo;0;AL; 066E;;;;N;;;;; 1EE7E;ARABIC MATHEMATICAL STRETCHED DOTLESS FEH;Lo;0;AL; 06A1;;;;N;;;;; 1EE80;ARABIC MATHEMATICAL LOOPED ALEF;Lo;0;AL; 0627;;;;N;;;;; 1EE81;ARABIC MATHEMATICAL LOOPED BEH;Lo;0;AL; 0628;;;;N;;;;; 1EE82;ARABIC MATHEMATICAL LOOPED JEEM;Lo;0;AL; 062C;;;;N;;;;; 1EE83;ARABIC MATHEMATICAL LOOPED DAL;Lo;0;AL; 062F;;;;N;;;;; 1EE84;ARABIC MATHEMATICAL LOOPED HEH;Lo;0;AL; 0647;;;;N;;;;; 1EE85;ARABIC MATHEMATICAL LOOPED WAW;Lo;0;AL; 0648;;;;N;;;;; 1EE86;ARABIC MATHEMATICAL LOOPED ZAIN;Lo;0;AL; 0632;;;;N;;;;; 1EE87;ARABIC MATHEMATICAL LOOPED HAH;Lo;0;AL; 062D;;;;N;;;;; 1EE88;ARABIC MATHEMATICAL LOOPED TAH;Lo;0;AL; 0637;;;;N;;;;; 1EE89;ARABIC MATHEMATICAL LOOPED YEH;Lo;0;AL; 064A;;;;N;;;;; 1EE8B;ARABIC MATHEMATICAL LOOPED LAM;Lo;0;AL; 0644;;;;N;;;;; 1EE8C;ARABIC MATHEMATICAL LOOPED MEEM;Lo;0;AL; 0645;;;;N;;;;; 1EE8D;ARABIC MATHEMATICAL LOOPED NOON;Lo;0;AL; 0646;;;;N;;;;; 1EE8E;ARABIC MATHEMATICAL LOOPED SEEN;Lo;0;AL; 0633;;;;N;;;;; 1EE8F;ARABIC MATHEMATICAL LOOPED AIN;Lo;0;AL; 0639;;;;N;;;;; 1EE90;ARABIC MATHEMATICAL LOOPED FEH;Lo;0;AL; 0641;;;;N;;;;; 1EE91;ARABIC MATHEMATICAL LOOPED SAD;Lo;0;AL; 0635;;;;N;;;;; 1EE92;ARABIC MATHEMATICAL LOOPED QAF;Lo;0;AL; 0642;;;;N;;;;; 1EE93;ARABIC MATHEMATICAL LOOPED REH;Lo;0;AL; 0631;;;;N;;;;; 1EE94;ARABIC MATHEMATICAL LOOPED SHEEN;Lo;0;AL; 0634;;;;N;;;;; 1EE95;ARABIC MATHEMATICAL LOOPED TEH;Lo;0;AL; 062A;;;;N;;;;; 1EE96;ARABIC MATHEMATICAL LOOPED THEH;Lo;0;AL; 062B;;;;N;;;;; 1EE97;ARABIC MATHEMATICAL LOOPED KHAH;Lo;0;AL; 062E;;;;N;;;;; 1EE98;ARABIC MATHEMATICAL LOOPED THAL;Lo;0;AL; 0630;;;;N;;;;; 1EE99;ARABIC MATHEMATICAL LOOPED DAD;Lo;0;AL; 0636;;;;N;;;;; 1EE9A;ARABIC MATHEMATICAL LOOPED ZAH;Lo;0;AL; 0638;;;;N;;;;; 1EE9B;ARABIC MATHEMATICAL LOOPED GHAIN;Lo;0;AL; 063A;;;;N;;;;; 1EEA1;ARABIC MATHEMATICAL DOUBLE-STRUCK BEH;Lo;0;AL; 0628;;;;N;;;;; 1EEA2;ARABIC MATHEMATICAL DOUBLE-STRUCK JEEM;Lo;0;AL; 062C;;;;N;;;;; 1EEA3;ARABIC MATHEMATICAL DOUBLE-STRUCK DAL;Lo;0;AL; 062F;;;;N;;;;; 1EEA5;ARABIC MATHEMATICAL DOUBLE-STRUCK WAW;Lo;0;AL; 0648;;;;N;;;;; 1EEA6;ARABIC MATHEMATICAL DOUBLE-STRUCK ZAIN;Lo;0;AL; 0632;;;;N;;;;; 1EEA7;ARABIC MATHEMATICAL DOUBLE-STRUCK HAH;Lo;0;AL; 062D;;;;N;;;;; 1EEA8;ARABIC MATHEMATICAL DOUBLE-STRUCK TAH;Lo;0;AL; 0637;;;;N;;;;; 1EEA9;ARABIC MATHEMATICAL DOUBLE-STRUCK YEH;Lo;0;AL; 064A;;;;N;;;;; 1EEAB;ARABIC MATHEMATICAL DOUBLE-STRUCK LAM;Lo;0;AL; 0644;;;;N;;;;; 1EEAC;ARABIC MATHEMATICAL DOUBLE-STRUCK MEEM;Lo;0;AL; 0645;;;;N;;;;; 1EEAD;ARABIC MATHEMATICAL DOUBLE-STRUCK NOON;Lo;0;AL; 0646;;;;N;;;;; 1EEAE;ARABIC MATHEMATICAL DOUBLE-STRUCK SEEN;Lo;0;AL; 0633;;;;N;;;;; 1EEAF;ARABIC MATHEMATICAL DOUBLE-STRUCK AIN;Lo;0;AL; 0639;;;;N;;;;; 1EEB0;ARABIC MATHEMATICAL DOUBLE-STRUCK FEH;Lo;0;AL; 0641;;;;N;;;;; 1EEB1;ARABIC MATHEMATICAL DOUBLE-STRUCK SAD;Lo;0;AL; 0635;;;;N;;;;; 1EEB2;ARABIC MATHEMATICAL DOUBLE-STRUCK QAF;Lo;0;AL; 0642;;;;N;;;;; 1EEB3;ARABIC MATHEMATICAL DOUBLE-STRUCK REH;Lo;0;AL; 0631;;;;N;;;;; 1EEB4;ARABIC MATHEMATICAL DOUBLE-STRUCK SHEEN;Lo;0;AL; 0634;;;;N;;;;; 1EEB5;ARABIC MATHEMATICAL DOUBLE-STRUCK TEH;Lo;0;AL; 062A;;;;N;;;;; 1EEB6;ARABIC MATHEMATICAL DOUBLE-STRUCK THEH;Lo;0;AL; 062B;;;;N;;;;; 1EEB7;ARABIC MATHEMATICAL DOUBLE-STRUCK KHAH;Lo;0;AL; 062E;;;;N;;;;; 1EEB8;ARABIC MATHEMATICAL DOUBLE-STRUCK THAL;Lo;0;AL; 0630;;;;N;;;;; 1EEB9;ARABIC MATHEMATICAL DOUBLE-STRUCK DAD;Lo;0;AL; 0636;;;;N;;;;; 1EEBA;ARABIC MATHEMATICAL DOUBLE-STRUCK ZAH;Lo;0;AL; 0638;;;;N;;;;; 1EEBB;ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN;Lo;0;AL; 063A;;;;N;;;;; 1EEF0;ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL;Sm;0;ON;;;;;N;;;;; 1EEF1;ARABIC MATHEMATICAL OPERATOR HAH WITH DAL;Sm;0;ON;;;;;N;;;;; 1F000;MAHJONG TILE EAST WIND;So;0;ON;;;;;N;;;;; 1F001;MAHJONG TILE SOUTH WIND;So;0;ON;;;;;N;;;;; 1F002;MAHJONG TILE WEST WIND;So;0;ON;;;;;N;;;;; 1F003;MAHJONG TILE NORTH WIND;So;0;ON;;;;;N;;;;; 1F004;MAHJONG TILE RED DRAGON;So;0;ON;;;;;N;;;;; 1F005;MAHJONG TILE GREEN DRAGON;So;0;ON;;;;;N;;;;; 1F006;MAHJONG TILE WHITE DRAGON;So;0;ON;;;;;N;;;;; 1F007;MAHJONG TILE ONE OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F008;MAHJONG TILE TWO OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F009;MAHJONG TILE THREE OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F00A;MAHJONG TILE FOUR OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F00B;MAHJONG TILE FIVE OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F00C;MAHJONG TILE SIX OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F00D;MAHJONG TILE SEVEN OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F00E;MAHJONG TILE EIGHT OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F00F;MAHJONG TILE NINE OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F010;MAHJONG TILE ONE OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F011;MAHJONG TILE TWO OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F012;MAHJONG TILE THREE OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F013;MAHJONG TILE FOUR OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F014;MAHJONG TILE FIVE OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F015;MAHJONG TILE SIX OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F016;MAHJONG TILE SEVEN OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F017;MAHJONG TILE EIGHT OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F018;MAHJONG TILE NINE OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F019;MAHJONG TILE ONE OF CIRCLES;So;0;ON;;;;;N;;;;; 1F01A;MAHJONG TILE TWO OF CIRCLES;So;0;ON;;;;;N;;;;; 1F01B;MAHJONG TILE THREE OF CIRCLES;So;0;ON;;;;;N;;;;; 1F01C;MAHJONG TILE FOUR OF CIRCLES;So;0;ON;;;;;N;;;;; 1F01D;MAHJONG TILE FIVE OF CIRCLES;So;0;ON;;;;;N;;;;; 1F01E;MAHJONG TILE SIX OF CIRCLES;So;0;ON;;;;;N;;;;; 1F01F;MAHJONG TILE SEVEN OF CIRCLES;So;0;ON;;;;;N;;;;; 1F020;MAHJONG TILE EIGHT OF CIRCLES;So;0;ON;;;;;N;;;;; 1F021;MAHJONG TILE NINE OF CIRCLES;So;0;ON;;;;;N;;;;; 1F022;MAHJONG TILE PLUM;So;0;ON;;;;;N;;;;; 1F023;MAHJONG TILE ORCHID;So;0;ON;;;;;N;;;;; 1F024;MAHJONG TILE BAMBOO;So;0;ON;;;;;N;;;;; 1F025;MAHJONG TILE CHRYSANTHEMUM;So;0;ON;;;;;N;;;;; 1F026;MAHJONG TILE SPRING;So;0;ON;;;;;N;;;;; 1F027;MAHJONG TILE SUMMER;So;0;ON;;;;;N;;;;; 1F028;MAHJONG TILE AUTUMN;So;0;ON;;;;;N;;;;; 1F029;MAHJONG TILE WINTER;So;0;ON;;;;;N;;;;; 1F02A;MAHJONG TILE JOKER;So;0;ON;;;;;N;;;;; 1F02B;MAHJONG TILE BACK;So;0;ON;;;;;N;;;;; 1F030;DOMINO TILE HORIZONTAL BACK;So;0;ON;;;;;N;;;;; 1F031;DOMINO TILE HORIZONTAL-00-00;So;0;ON;;;;;N;;;;; 1F032;DOMINO TILE HORIZONTAL-00-01;So;0;ON;;;;;N;;;;; 1F033;DOMINO TILE HORIZONTAL-00-02;So;0;ON;;;;;N;;;;; 1F034;DOMINO TILE HORIZONTAL-00-03;So;0;ON;;;;;N;;;;; 1F035;DOMINO TILE HORIZONTAL-00-04;So;0;ON;;;;;N;;;;; 1F036;DOMINO TILE HORIZONTAL-00-05;So;0;ON;;;;;N;;;;; 1F037;DOMINO TILE HORIZONTAL-00-06;So;0;ON;;;;;N;;;;; 1F038;DOMINO TILE HORIZONTAL-01-00;So;0;ON;;;;;N;;;;; 1F039;DOMINO TILE HORIZONTAL-01-01;So;0;ON;;;;;N;;;;; 1F03A;DOMINO TILE HORIZONTAL-01-02;So;0;ON;;;;;N;;;;; 1F03B;DOMINO TILE HORIZONTAL-01-03;So;0;ON;;;;;N;;;;; 1F03C;DOMINO TILE HORIZONTAL-01-04;So;0;ON;;;;;N;;;;; 1F03D;DOMINO TILE HORIZONTAL-01-05;So;0;ON;;;;;N;;;;; 1F03E;DOMINO TILE HORIZONTAL-01-06;So;0;ON;;;;;N;;;;; 1F03F;DOMINO TILE HORIZONTAL-02-00;So;0;ON;;;;;N;;;;; 1F040;DOMINO TILE HORIZONTAL-02-01;So;0;ON;;;;;N;;;;; 1F041;DOMINO TILE HORIZONTAL-02-02;So;0;ON;;;;;N;;;;; 1F042;DOMINO TILE HORIZONTAL-02-03;So;0;ON;;;;;N;;;;; 1F043;DOMINO TILE HORIZONTAL-02-04;So;0;ON;;;;;N;;;;; 1F044;DOMINO TILE HORIZONTAL-02-05;So;0;ON;;;;;N;;;;; 1F045;DOMINO TILE HORIZONTAL-02-06;So;0;ON;;;;;N;;;;; 1F046;DOMINO TILE HORIZONTAL-03-00;So;0;ON;;;;;N;;;;; 1F047;DOMINO TILE HORIZONTAL-03-01;So;0;ON;;;;;N;;;;; 1F048;DOMINO TILE HORIZONTAL-03-02;So;0;ON;;;;;N;;;;; 1F049;DOMINO TILE HORIZONTAL-03-03;So;0;ON;;;;;N;;;;; 1F04A;DOMINO TILE HORIZONTAL-03-04;So;0;ON;;;;;N;;;;; 1F04B;DOMINO TILE HORIZONTAL-03-05;So;0;ON;;;;;N;;;;; 1F04C;DOMINO TILE HORIZONTAL-03-06;So;0;ON;;;;;N;;;;; 1F04D;DOMINO TILE HORIZONTAL-04-00;So;0;ON;;;;;N;;;;; 1F04E;DOMINO TILE HORIZONTAL-04-01;So;0;ON;;;;;N;;;;; 1F04F;DOMINO TILE HORIZONTAL-04-02;So;0;ON;;;;;N;;;;; 1F050;DOMINO TILE HORIZONTAL-04-03;So;0;ON;;;;;N;;;;; 1F051;DOMINO TILE HORIZONTAL-04-04;So;0;ON;;;;;N;;;;; 1F052;DOMINO TILE HORIZONTAL-04-05;So;0;ON;;;;;N;;;;; 1F053;DOMINO TILE HORIZONTAL-04-06;So;0;ON;;;;;N;;;;; 1F054;DOMINO TILE HORIZONTAL-05-00;So;0;ON;;;;;N;;;;; 1F055;DOMINO TILE HORIZONTAL-05-01;So;0;ON;;;;;N;;;;; 1F056;DOMINO TILE HORIZONTAL-05-02;So;0;ON;;;;;N;;;;; 1F057;DOMINO TILE HORIZONTAL-05-03;So;0;ON;;;;;N;;;;; 1F058;DOMINO TILE HORIZONTAL-05-04;So;0;ON;;;;;N;;;;; 1F059;DOMINO TILE HORIZONTAL-05-05;So;0;ON;;;;;N;;;;; 1F05A;DOMINO TILE HORIZONTAL-05-06;So;0;ON;;;;;N;;;;; 1F05B;DOMINO TILE HORIZONTAL-06-00;So;0;ON;;;;;N;;;;; 1F05C;DOMINO TILE HORIZONTAL-06-01;So;0;ON;;;;;N;;;;; 1F05D;DOMINO TILE HORIZONTAL-06-02;So;0;ON;;;;;N;;;;; 1F05E;DOMINO TILE HORIZONTAL-06-03;So;0;ON;;;;;N;;;;; 1F05F;DOMINO TILE HORIZONTAL-06-04;So;0;ON;;;;;N;;;;; 1F060;DOMINO TILE HORIZONTAL-06-05;So;0;ON;;;;;N;;;;; 1F061;DOMINO TILE HORIZONTAL-06-06;So;0;ON;;;;;N;;;;; 1F062;DOMINO TILE VERTICAL BACK;So;0;ON;;;;;N;;;;; 1F063;DOMINO TILE VERTICAL-00-00;So;0;ON;;;;;N;;;;; 1F064;DOMINO TILE VERTICAL-00-01;So;0;ON;;;;;N;;;;; 1F065;DOMINO TILE VERTICAL-00-02;So;0;ON;;;;;N;;;;; 1F066;DOMINO TILE VERTICAL-00-03;So;0;ON;;;;;N;;;;; 1F067;DOMINO TILE VERTICAL-00-04;So;0;ON;;;;;N;;;;; 1F068;DOMINO TILE VERTICAL-00-05;So;0;ON;;;;;N;;;;; 1F069;DOMINO TILE VERTICAL-00-06;So;0;ON;;;;;N;;;;; 1F06A;DOMINO TILE VERTICAL-01-00;So;0;ON;;;;;N;;;;; 1F06B;DOMINO TILE VERTICAL-01-01;So;0;ON;;;;;N;;;;; 1F06C;DOMINO TILE VERTICAL-01-02;So;0;ON;;;;;N;;;;; 1F06D;DOMINO TILE VERTICAL-01-03;So;0;ON;;;;;N;;;;; 1F06E;DOMINO TILE VERTICAL-01-04;So;0;ON;;;;;N;;;;; 1F06F;DOMINO TILE VERTICAL-01-05;So;0;ON;;;;;N;;;;; 1F070;DOMINO TILE VERTICAL-01-06;So;0;ON;;;;;N;;;;; 1F071;DOMINO TILE VERTICAL-02-00;So;0;ON;;;;;N;;;;; 1F072;DOMINO TILE VERTICAL-02-01;So;0;ON;;;;;N;;;;; 1F073;DOMINO TILE VERTICAL-02-02;So;0;ON;;;;;N;;;;; 1F074;DOMINO TILE VERTICAL-02-03;So;0;ON;;;;;N;;;;; 1F075;DOMINO TILE VERTICAL-02-04;So;0;ON;;;;;N;;;;; 1F076;DOMINO TILE VERTICAL-02-05;So;0;ON;;;;;N;;;;; 1F077;DOMINO TILE VERTICAL-02-06;So;0;ON;;;;;N;;;;; 1F078;DOMINO TILE VERTICAL-03-00;So;0;ON;;;;;N;;;;; 1F079;DOMINO TILE VERTICAL-03-01;So;0;ON;;;;;N;;;;; 1F07A;DOMINO TILE VERTICAL-03-02;So;0;ON;;;;;N;;;;; 1F07B;DOMINO TILE VERTICAL-03-03;So;0;ON;;;;;N;;;;; 1F07C;DOMINO TILE VERTICAL-03-04;So;0;ON;;;;;N;;;;; 1F07D;DOMINO TILE VERTICAL-03-05;So;0;ON;;;;;N;;;;; 1F07E;DOMINO TILE VERTICAL-03-06;So;0;ON;;;;;N;;;;; 1F07F;DOMINO TILE VERTICAL-04-00;So;0;ON;;;;;N;;;;; 1F080;DOMINO TILE VERTICAL-04-01;So;0;ON;;;;;N;;;;; 1F081;DOMINO TILE VERTICAL-04-02;So;0;ON;;;;;N;;;;; 1F082;DOMINO TILE VERTICAL-04-03;So;0;ON;;;;;N;;;;; 1F083;DOMINO TILE VERTICAL-04-04;So;0;ON;;;;;N;;;;; 1F084;DOMINO TILE VERTICAL-04-05;So;0;ON;;;;;N;;;;; 1F085;DOMINO TILE VERTICAL-04-06;So;0;ON;;;;;N;;;;; 1F086;DOMINO TILE VERTICAL-05-00;So;0;ON;;;;;N;;;;; 1F087;DOMINO TILE VERTICAL-05-01;So;0;ON;;;;;N;;;;; 1F088;DOMINO TILE VERTICAL-05-02;So;0;ON;;;;;N;;;;; 1F089;DOMINO TILE VERTICAL-05-03;So;0;ON;;;;;N;;;;; 1F08A;DOMINO TILE VERTICAL-05-04;So;0;ON;;;;;N;;;;; 1F08B;DOMINO TILE VERTICAL-05-05;So;0;ON;;;;;N;;;;; 1F08C;DOMINO TILE VERTICAL-05-06;So;0;ON;;;;;N;;;;; 1F08D;DOMINO TILE VERTICAL-06-00;So;0;ON;;;;;N;;;;; 1F08E;DOMINO TILE VERTICAL-06-01;So;0;ON;;;;;N;;;;; 1F08F;DOMINO TILE VERTICAL-06-02;So;0;ON;;;;;N;;;;; 1F090;DOMINO TILE VERTICAL-06-03;So;0;ON;;;;;N;;;;; 1F091;DOMINO TILE VERTICAL-06-04;So;0;ON;;;;;N;;;;; 1F092;DOMINO TILE VERTICAL-06-05;So;0;ON;;;;;N;;;;; 1F093;DOMINO TILE VERTICAL-06-06;So;0;ON;;;;;N;;;;; 1F0A0;PLAYING CARD BACK;So;0;ON;;;;;N;;;;; 1F0A1;PLAYING CARD ACE OF SPADES;So;0;ON;;;;;N;;;;; 1F0A2;PLAYING CARD TWO OF SPADES;So;0;ON;;;;;N;;;;; 1F0A3;PLAYING CARD THREE OF SPADES;So;0;ON;;;;;N;;;;; 1F0A4;PLAYING CARD FOUR OF SPADES;So;0;ON;;;;;N;;;;; 1F0A5;PLAYING CARD FIVE OF SPADES;So;0;ON;;;;;N;;;;; 1F0A6;PLAYING CARD SIX OF SPADES;So;0;ON;;;;;N;;;;; 1F0A7;PLAYING CARD SEVEN OF SPADES;So;0;ON;;;;;N;;;;; 1F0A8;PLAYING CARD EIGHT OF SPADES;So;0;ON;;;;;N;;;;; 1F0A9;PLAYING CARD NINE OF SPADES;So;0;ON;;;;;N;;;;; 1F0AA;PLAYING CARD TEN OF SPADES;So;0;ON;;;;;N;;;;; 1F0AB;PLAYING CARD JACK OF SPADES;So;0;ON;;;;;N;;;;; 1F0AC;PLAYING CARD KNIGHT OF SPADES;So;0;ON;;;;;N;;;;; 1F0AD;PLAYING CARD QUEEN OF SPADES;So;0;ON;;;;;N;;;;; 1F0AE;PLAYING CARD KING OF SPADES;So;0;ON;;;;;N;;;;; 1F0B1;PLAYING CARD ACE OF HEARTS;So;0;ON;;;;;N;;;;; 1F0B2;PLAYING CARD TWO OF HEARTS;So;0;ON;;;;;N;;;;; 1F0B3;PLAYING CARD THREE OF HEARTS;So;0;ON;;;;;N;;;;; 1F0B4;PLAYING CARD FOUR OF HEARTS;So;0;ON;;;;;N;;;;; 1F0B5;PLAYING CARD FIVE OF HEARTS;So;0;ON;;;;;N;;;;; 1F0B6;PLAYING CARD SIX OF HEARTS;So;0;ON;;;;;N;;;;; 1F0B7;PLAYING CARD SEVEN OF HEARTS;So;0;ON;;;;;N;;;;; 1F0B8;PLAYING CARD EIGHT OF HEARTS;So;0;ON;;;;;N;;;;; 1F0B9;PLAYING CARD NINE OF HEARTS;So;0;ON;;;;;N;;;;; 1F0BA;PLAYING CARD TEN OF HEARTS;So;0;ON;;;;;N;;;;; 1F0BB;PLAYING CARD JACK OF HEARTS;So;0;ON;;;;;N;;;;; 1F0BC;PLAYING CARD KNIGHT OF HEARTS;So;0;ON;;;;;N;;;;; 1F0BD;PLAYING CARD QUEEN OF HEARTS;So;0;ON;;;;;N;;;;; 1F0BE;PLAYING CARD KING OF HEARTS;So;0;ON;;;;;N;;;;; 1F0BF;PLAYING CARD RED JOKER;So;0;ON;;;;;N;;;;; 1F0C1;PLAYING CARD ACE OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0C2;PLAYING CARD TWO OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0C3;PLAYING CARD THREE OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0C4;PLAYING CARD FOUR OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0C5;PLAYING CARD FIVE OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0C6;PLAYING CARD SIX OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0C7;PLAYING CARD SEVEN OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0C8;PLAYING CARD EIGHT OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0C9;PLAYING CARD NINE OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0CA;PLAYING CARD TEN OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0CB;PLAYING CARD JACK OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0CC;PLAYING CARD KNIGHT OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0CD;PLAYING CARD QUEEN OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0CE;PLAYING CARD KING OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0CF;PLAYING CARD BLACK JOKER;So;0;ON;;;;;N;;;;; 1F0D1;PLAYING CARD ACE OF CLUBS;So;0;ON;;;;;N;;;;; 1F0D2;PLAYING CARD TWO OF CLUBS;So;0;ON;;;;;N;;;;; 1F0D3;PLAYING CARD THREE OF CLUBS;So;0;ON;;;;;N;;;;; 1F0D4;PLAYING CARD FOUR OF CLUBS;So;0;ON;;;;;N;;;;; 1F0D5;PLAYING CARD FIVE OF CLUBS;So;0;ON;;;;;N;;;;; 1F0D6;PLAYING CARD SIX OF CLUBS;So;0;ON;;;;;N;;;;; 1F0D7;PLAYING CARD SEVEN OF CLUBS;So;0;ON;;;;;N;;;;; 1F0D8;PLAYING CARD EIGHT OF CLUBS;So;0;ON;;;;;N;;;;; 1F0D9;PLAYING CARD NINE OF CLUBS;So;0;ON;;;;;N;;;;; 1F0DA;PLAYING CARD TEN OF CLUBS;So;0;ON;;;;;N;;;;; 1F0DB;PLAYING CARD JACK OF CLUBS;So;0;ON;;;;;N;;;;; 1F0DC;PLAYING CARD KNIGHT OF CLUBS;So;0;ON;;;;;N;;;;; 1F0DD;PLAYING CARD QUEEN OF CLUBS;So;0;ON;;;;;N;;;;; 1F0DE;PLAYING CARD KING OF CLUBS;So;0;ON;;;;;N;;;;; 1F0DF;PLAYING CARD WHITE JOKER;So;0;ON;;;;;N;;;;; 1F0E0;PLAYING CARD FOOL;So;0;ON;;;;;N;;;;; 1F0E1;PLAYING CARD TRUMP-1;So;0;ON;;;;;N;;;;; 1F0E2;PLAYING CARD TRUMP-2;So;0;ON;;;;;N;;;;; 1F0E3;PLAYING CARD TRUMP-3;So;0;ON;;;;;N;;;;; 1F0E4;PLAYING CARD TRUMP-4;So;0;ON;;;;;N;;;;; 1F0E5;PLAYING CARD TRUMP-5;So;0;ON;;;;;N;;;;; 1F0E6;PLAYING CARD TRUMP-6;So;0;ON;;;;;N;;;;; 1F0E7;PLAYING CARD TRUMP-7;So;0;ON;;;;;N;;;;; 1F0E8;PLAYING CARD TRUMP-8;So;0;ON;;;;;N;;;;; 1F0E9;PLAYING CARD TRUMP-9;So;0;ON;;;;;N;;;;; 1F0EA;PLAYING CARD TRUMP-10;So;0;ON;;;;;N;;;;; 1F0EB;PLAYING CARD TRUMP-11;So;0;ON;;;;;N;;;;; 1F0EC;PLAYING CARD TRUMP-12;So;0;ON;;;;;N;;;;; 1F0ED;PLAYING CARD TRUMP-13;So;0;ON;;;;;N;;;;; 1F0EE;PLAYING CARD TRUMP-14;So;0;ON;;;;;N;;;;; 1F0EF;PLAYING CARD TRUMP-15;So;0;ON;;;;;N;;;;; 1F0F0;PLAYING CARD TRUMP-16;So;0;ON;;;;;N;;;;; 1F0F1;PLAYING CARD TRUMP-17;So;0;ON;;;;;N;;;;; 1F0F2;PLAYING CARD TRUMP-18;So;0;ON;;;;;N;;;;; 1F0F3;PLAYING CARD TRUMP-19;So;0;ON;;;;;N;;;;; 1F0F4;PLAYING CARD TRUMP-20;So;0;ON;;;;;N;;;;; 1F0F5;PLAYING CARD TRUMP-21;So;0;ON;;;;;N;;;;; 1F100;DIGIT ZERO FULL STOP;No;0;EN; 0030 002E;;0;0;N;;;;; 1F101;DIGIT ZERO COMMA;No;0;EN; 0030 002C;;0;0;N;;;;; 1F102;DIGIT ONE COMMA;No;0;EN; 0031 002C;;1;1;N;;;;; 1F103;DIGIT TWO COMMA;No;0;EN; 0032 002C;;2;2;N;;;;; 1F104;DIGIT THREE COMMA;No;0;EN; 0033 002C;;3;3;N;;;;; 1F105;DIGIT FOUR COMMA;No;0;EN; 0034 002C;;4;4;N;;;;; 1F106;DIGIT FIVE COMMA;No;0;EN; 0035 002C;;5;5;N;;;;; 1F107;DIGIT SIX COMMA;No;0;EN; 0036 002C;;6;6;N;;;;; 1F108;DIGIT SEVEN COMMA;No;0;EN; 0037 002C;;7;7;N;;;;; 1F109;DIGIT EIGHT COMMA;No;0;EN; 0038 002C;;8;8;N;;;;; 1F10A;DIGIT NINE COMMA;No;0;EN; 0039 002C;;9;9;N;;;;; 1F10B;DINGBAT CIRCLED SANS-SERIF DIGIT ZERO;No;0;ON;;;;0;N;;;;; 1F10C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO;No;0;ON;;;;0;N;;;;; 1F10D;CIRCLED ZERO WITH SLASH;So;0;ON;;;;;N;;;;; 1F10E;CIRCLED ANTICLOCKWISE ARROW;So;0;ON;;;;;N;;;;; 1F10F;CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH;So;0;ON;;;;;N;;;;; 1F110;PARENTHESIZED LATIN CAPITAL LETTER A;So;0;L; 0028 0041 0029;;;;N;;;;; 1F111;PARENTHESIZED LATIN CAPITAL LETTER B;So;0;L; 0028 0042 0029;;;;N;;;;; 1F112;PARENTHESIZED LATIN CAPITAL LETTER C;So;0;L; 0028 0043 0029;;;;N;;;;; 1F113;PARENTHESIZED LATIN CAPITAL LETTER D;So;0;L; 0028 0044 0029;;;;N;;;;; 1F114;PARENTHESIZED LATIN CAPITAL LETTER E;So;0;L; 0028 0045 0029;;;;N;;;;; 1F115;PARENTHESIZED LATIN CAPITAL LETTER F;So;0;L; 0028 0046 0029;;;;N;;;;; 1F116;PARENTHESIZED LATIN CAPITAL LETTER G;So;0;L; 0028 0047 0029;;;;N;;;;; 1F117;PARENTHESIZED LATIN CAPITAL LETTER H;So;0;L; 0028 0048 0029;;;;N;;;;; 1F118;PARENTHESIZED LATIN CAPITAL LETTER I;So;0;L; 0028 0049 0029;;;;N;;;;; 1F119;PARENTHESIZED LATIN CAPITAL LETTER J;So;0;L; 0028 004A 0029;;;;N;;;;; 1F11A;PARENTHESIZED LATIN CAPITAL LETTER K;So;0;L; 0028 004B 0029;;;;N;;;;; 1F11B;PARENTHESIZED LATIN CAPITAL LETTER L;So;0;L; 0028 004C 0029;;;;N;;;;; 1F11C;PARENTHESIZED LATIN CAPITAL LETTER M;So;0;L; 0028 004D 0029;;;;N;;;;; 1F11D;PARENTHESIZED LATIN CAPITAL LETTER N;So;0;L; 0028 004E 0029;;;;N;;;;; 1F11E;PARENTHESIZED LATIN CAPITAL LETTER O;So;0;L; 0028 004F 0029;;;;N;;;;; 1F11F;PARENTHESIZED LATIN CAPITAL LETTER P;So;0;L; 0028 0050 0029;;;;N;;;;; 1F120;PARENTHESIZED LATIN CAPITAL LETTER Q;So;0;L; 0028 0051 0029;;;;N;;;;; 1F121;PARENTHESIZED LATIN CAPITAL LETTER R;So;0;L; 0028 0052 0029;;;;N;;;;; 1F122;PARENTHESIZED LATIN CAPITAL LETTER S;So;0;L; 0028 0053 0029;;;;N;;;;; 1F123;PARENTHESIZED LATIN CAPITAL LETTER T;So;0;L; 0028 0054 0029;;;;N;;;;; 1F124;PARENTHESIZED LATIN CAPITAL LETTER U;So;0;L; 0028 0055 0029;;;;N;;;;; 1F125;PARENTHESIZED LATIN CAPITAL LETTER V;So;0;L; 0028 0056 0029;;;;N;;;;; 1F126;PARENTHESIZED LATIN CAPITAL LETTER W;So;0;L; 0028 0057 0029;;;;N;;;;; 1F127;PARENTHESIZED LATIN CAPITAL LETTER X;So;0;L; 0028 0058 0029;;;;N;;;;; 1F128;PARENTHESIZED LATIN CAPITAL LETTER Y;So;0;L; 0028 0059 0029;;;;N;;;;; 1F129;PARENTHESIZED LATIN CAPITAL LETTER Z;So;0;L; 0028 005A 0029;;;;N;;;;; 1F12A;TORTOISE SHELL BRACKETED LATIN CAPITAL LETTER S;So;0;L; 3014 0053 3015;;;;N;;;;; 1F12B;CIRCLED ITALIC LATIN CAPITAL LETTER C;So;0;L; 0043;;;;N;;;;; 1F12C;CIRCLED ITALIC LATIN CAPITAL LETTER R;So;0;L; 0052;;;;N;;;;; 1F12D;CIRCLED CD;So;0;L; 0043 0044;;;;N;;;;; 1F12E;CIRCLED WZ;So;0;L; 0057 005A;;;;N;;;;; 1F12F;COPYLEFT SYMBOL;So;0;ON;;;;;N;;;;; 1F130;SQUARED LATIN CAPITAL LETTER A;So;0;L; 0041;;;;N;;;;; 1F131;SQUARED LATIN CAPITAL LETTER B;So;0;L; 0042;;;;N;;;;; 1F132;SQUARED LATIN CAPITAL LETTER C;So;0;L; 0043;;;;N;;;;; 1F133;SQUARED LATIN CAPITAL LETTER D;So;0;L; 0044;;;;N;;;;; 1F134;SQUARED LATIN CAPITAL LETTER E;So;0;L; 0045;;;;N;;;;; 1F135;SQUARED LATIN CAPITAL LETTER F;So;0;L; 0046;;;;N;;;;; 1F136;SQUARED LATIN CAPITAL LETTER G;So;0;L; 0047;;;;N;;;;; 1F137;SQUARED LATIN CAPITAL LETTER H;So;0;L; 0048;;;;N;;;;; 1F138;SQUARED LATIN CAPITAL LETTER I;So;0;L; 0049;;;;N;;;;; 1F139;SQUARED LATIN CAPITAL LETTER J;So;0;L; 004A;;;;N;;;;; 1F13A;SQUARED LATIN CAPITAL LETTER K;So;0;L; 004B;;;;N;;;;; 1F13B;SQUARED LATIN CAPITAL LETTER L;So;0;L; 004C;;;;N;;;;; 1F13C;SQUARED LATIN CAPITAL LETTER M;So;0;L; 004D;;;;N;;;;; 1F13D;SQUARED LATIN CAPITAL LETTER N;So;0;L; 004E;;;;N;;;;; 1F13E;SQUARED LATIN CAPITAL LETTER O;So;0;L; 004F;;;;N;;;;; 1F13F;SQUARED LATIN CAPITAL LETTER P;So;0;L; 0050;;;;N;;;;; 1F140;SQUARED LATIN CAPITAL LETTER Q;So;0;L; 0051;;;;N;;;;; 1F141;SQUARED LATIN CAPITAL LETTER R;So;0;L; 0052;;;;N;;;;; 1F142;SQUARED LATIN CAPITAL LETTER S;So;0;L; 0053;;;;N;;;;; 1F143;SQUARED LATIN CAPITAL LETTER T;So;0;L; 0054;;;;N;;;;; 1F144;SQUARED LATIN CAPITAL LETTER U;So;0;L; 0055;;;;N;;;;; 1F145;SQUARED LATIN CAPITAL LETTER V;So;0;L; 0056;;;;N;;;;; 1F146;SQUARED LATIN CAPITAL LETTER W;So;0;L; 0057;;;;N;;;;; 1F147;SQUARED LATIN CAPITAL LETTER X;So;0;L; 0058;;;;N;;;;; 1F148;SQUARED LATIN CAPITAL LETTER Y;So;0;L; 0059;;;;N;;;;; 1F149;SQUARED LATIN CAPITAL LETTER Z;So;0;L; 005A;;;;N;;;;; 1F14A;SQUARED HV;So;0;L; 0048 0056;;;;N;;;;; 1F14B;SQUARED MV;So;0;L; 004D 0056;;;;N;;;;; 1F14C;SQUARED SD;So;0;L; 0053 0044;;;;N;;;;; 1F14D;SQUARED SS;So;0;L; 0053 0053;;;;N;;;;; 1F14E;SQUARED PPV;So;0;L; 0050 0050 0056;;;;N;;;;; 1F14F;SQUARED WC;So;0;L; 0057 0043;;;;N;;;;; 1F150;NEGATIVE CIRCLED LATIN CAPITAL LETTER A;So;0;L;;;;;N;;;;; 1F151;NEGATIVE CIRCLED LATIN CAPITAL LETTER B;So;0;L;;;;;N;;;;; 1F152;NEGATIVE CIRCLED LATIN CAPITAL LETTER C;So;0;L;;;;;N;;;;; 1F153;NEGATIVE CIRCLED LATIN CAPITAL LETTER D;So;0;L;;;;;N;;;;; 1F154;NEGATIVE CIRCLED LATIN CAPITAL LETTER E;So;0;L;;;;;N;;;;; 1F155;NEGATIVE CIRCLED LATIN CAPITAL LETTER F;So;0;L;;;;;N;;;;; 1F156;NEGATIVE CIRCLED LATIN CAPITAL LETTER G;So;0;L;;;;;N;;;;; 1F157;NEGATIVE CIRCLED LATIN CAPITAL LETTER H;So;0;L;;;;;N;;;;; 1F158;NEGATIVE CIRCLED LATIN CAPITAL LETTER I;So;0;L;;;;;N;;;;; 1F159;NEGATIVE CIRCLED LATIN CAPITAL LETTER J;So;0;L;;;;;N;;;;; 1F15A;NEGATIVE CIRCLED LATIN CAPITAL LETTER K;So;0;L;;;;;N;;;;; 1F15B;NEGATIVE CIRCLED LATIN CAPITAL LETTER L;So;0;L;;;;;N;;;;; 1F15C;NEGATIVE CIRCLED LATIN CAPITAL LETTER M;So;0;L;;;;;N;;;;; 1F15D;NEGATIVE CIRCLED LATIN CAPITAL LETTER N;So;0;L;;;;;N;;;;; 1F15E;NEGATIVE CIRCLED LATIN CAPITAL LETTER O;So;0;L;;;;;N;;;;; 1F15F;NEGATIVE CIRCLED LATIN CAPITAL LETTER P;So;0;L;;;;;N;;;;; 1F160;NEGATIVE CIRCLED LATIN CAPITAL LETTER Q;So;0;L;;;;;N;;;;; 1F161;NEGATIVE CIRCLED LATIN CAPITAL LETTER R;So;0;L;;;;;N;;;;; 1F162;NEGATIVE CIRCLED LATIN CAPITAL LETTER S;So;0;L;;;;;N;;;;; 1F163;NEGATIVE CIRCLED LATIN CAPITAL LETTER T;So;0;L;;;;;N;;;;; 1F164;NEGATIVE CIRCLED LATIN CAPITAL LETTER U;So;0;L;;;;;N;;;;; 1F165;NEGATIVE CIRCLED LATIN CAPITAL LETTER V;So;0;L;;;;;N;;;;; 1F166;NEGATIVE CIRCLED LATIN CAPITAL LETTER W;So;0;L;;;;;N;;;;; 1F167;NEGATIVE CIRCLED LATIN CAPITAL LETTER X;So;0;L;;;;;N;;;;; 1F168;NEGATIVE CIRCLED LATIN CAPITAL LETTER Y;So;0;L;;;;;N;;;;; 1F169;NEGATIVE CIRCLED LATIN CAPITAL LETTER Z;So;0;L;;;;;N;;;;; 1F16A;RAISED MC SIGN;So;0;ON; 004D 0043;;;;N;;;;; 1F16B;RAISED MD SIGN;So;0;ON; 004D 0044;;;;N;;;;; 1F16C;RAISED MR SIGN;So;0;ON; 004D 0052;;;;N;;;;; 1F16D;CIRCLED CC;So;0;ON;;;;;N;;;;; 1F16E;CIRCLED C WITH OVERLAID BACKSLASH;So;0;ON;;;;;N;;;;; 1F16F;CIRCLED HUMAN FIGURE;So;0;ON;;;;;N;;;;; 1F170;NEGATIVE SQUARED LATIN CAPITAL LETTER A;So;0;L;;;;;N;;;;; 1F171;NEGATIVE SQUARED LATIN CAPITAL LETTER B;So;0;L;;;;;N;;;;; 1F172;NEGATIVE SQUARED LATIN CAPITAL LETTER C;So;0;L;;;;;N;;;;; 1F173;NEGATIVE SQUARED LATIN CAPITAL LETTER D;So;0;L;;;;;N;;;;; 1F174;NEGATIVE SQUARED LATIN CAPITAL LETTER E;So;0;L;;;;;N;;;;; 1F175;NEGATIVE SQUARED LATIN CAPITAL LETTER F;So;0;L;;;;;N;;;;; 1F176;NEGATIVE SQUARED LATIN CAPITAL LETTER G;So;0;L;;;;;N;;;;; 1F177;NEGATIVE SQUARED LATIN CAPITAL LETTER H;So;0;L;;;;;N;;;;; 1F178;NEGATIVE SQUARED LATIN CAPITAL LETTER I;So;0;L;;;;;N;;;;; 1F179;NEGATIVE SQUARED LATIN CAPITAL LETTER J;So;0;L;;;;;N;;;;; 1F17A;NEGATIVE SQUARED LATIN CAPITAL LETTER K;So;0;L;;;;;N;;;;; 1F17B;NEGATIVE SQUARED LATIN CAPITAL LETTER L;So;0;L;;;;;N;;;;; 1F17C;NEGATIVE SQUARED LATIN CAPITAL LETTER M;So;0;L;;;;;N;;;;; 1F17D;NEGATIVE SQUARED LATIN CAPITAL LETTER N;So;0;L;;;;;N;;;;; 1F17E;NEGATIVE SQUARED LATIN CAPITAL LETTER O;So;0;L;;;;;N;;;;; 1F17F;NEGATIVE SQUARED LATIN CAPITAL LETTER P;So;0;L;;;;;N;;;;; 1F180;NEGATIVE SQUARED LATIN CAPITAL LETTER Q;So;0;L;;;;;N;;;;; 1F181;NEGATIVE SQUARED LATIN CAPITAL LETTER R;So;0;L;;;;;N;;;;; 1F182;NEGATIVE SQUARED LATIN CAPITAL LETTER S;So;0;L;;;;;N;;;;; 1F183;NEGATIVE SQUARED LATIN CAPITAL LETTER T;So;0;L;;;;;N;;;;; 1F184;NEGATIVE SQUARED LATIN CAPITAL LETTER U;So;0;L;;;;;N;;;;; 1F185;NEGATIVE SQUARED LATIN CAPITAL LETTER V;So;0;L;;;;;N;;;;; 1F186;NEGATIVE SQUARED LATIN CAPITAL LETTER W;So;0;L;;;;;N;;;;; 1F187;NEGATIVE SQUARED LATIN CAPITAL LETTER X;So;0;L;;;;;N;;;;; 1F188;NEGATIVE SQUARED LATIN CAPITAL LETTER Y;So;0;L;;;;;N;;;;; 1F189;NEGATIVE SQUARED LATIN CAPITAL LETTER Z;So;0;L;;;;;N;;;;; 1F18A;CROSSED NEGATIVE SQUARED LATIN CAPITAL LETTER P;So;0;L;;;;;N;;;;; 1F18B;NEGATIVE SQUARED IC;So;0;L;;;;;N;;;;; 1F18C;NEGATIVE SQUARED PA;So;0;L;;;;;N;;;;; 1F18D;NEGATIVE SQUARED SA;So;0;L;;;;;N;;;;; 1F18E;NEGATIVE SQUARED AB;So;0;L;;;;;N;;;;; 1F18F;NEGATIVE SQUARED WC;So;0;L;;;;;N;;;;; 1F190;SQUARE DJ;So;0;L; 0044 004A;;;;N;;;;; 1F191;SQUARED CL;So;0;L;;;;;N;;;;; 1F192;SQUARED COOL;So;0;L;;;;;N;;;;; 1F193;SQUARED FREE;So;0;L;;;;;N;;;;; 1F194;SQUARED ID;So;0;L;;;;;N;;;;; 1F195;SQUARED NEW;So;0;L;;;;;N;;;;; 1F196;SQUARED NG;So;0;L;;;;;N;;;;; 1F197;SQUARED OK;So;0;L;;;;;N;;;;; 1F198;SQUARED SOS;So;0;L;;;;;N;;;;; 1F199;SQUARED UP WITH EXCLAMATION MARK;So;0;L;;;;;N;;;;; 1F19A;SQUARED VS;So;0;L;;;;;N;;;;; 1F19B;SQUARED THREE D;So;0;L;;;;;N;;;;; 1F19C;SQUARED SECOND SCREEN;So;0;L;;;;;N;;;;; 1F19D;SQUARED TWO K;So;0;L;;;;;N;;;;; 1F19E;SQUARED FOUR K;So;0;L;;;;;N;;;;; 1F19F;SQUARED EIGHT K;So;0;L;;;;;N;;;;; 1F1A0;SQUARED FIVE POINT ONE;So;0;L;;;;;N;;;;; 1F1A1;SQUARED SEVEN POINT ONE;So;0;L;;;;;N;;;;; 1F1A2;SQUARED TWENTY-TWO POINT TWO;So;0;L;;;;;N;;;;; 1F1A3;SQUARED SIXTY P;So;0;L;;;;;N;;;;; 1F1A4;SQUARED ONE HUNDRED TWENTY P;So;0;L;;;;;N;;;;; 1F1A5;SQUARED LATIN SMALL LETTER D;So;0;L;;;;;N;;;;; 1F1A6;SQUARED HC;So;0;L;;;;;N;;;;; 1F1A7;SQUARED HDR;So;0;L;;;;;N;;;;; 1F1A8;SQUARED HI-RES;So;0;L;;;;;N;;;;; 1F1A9;SQUARED LOSSLESS;So;0;L;;;;;N;;;;; 1F1AA;SQUARED SHV;So;0;L;;;;;N;;;;; 1F1AB;SQUARED UHD;So;0;L;;;;;N;;;;; 1F1AC;SQUARED VOD;So;0;L;;;;;N;;;;; 1F1AD;MASK WORK SYMBOL;So;0;ON;;;;;N;;;;; 1F1E6;REGIONAL INDICATOR SYMBOL LETTER A;So;0;L;;;;;N;;;;; 1F1E7;REGIONAL INDICATOR SYMBOL LETTER B;So;0;L;;;;;N;;;;; 1F1E8;REGIONAL INDICATOR SYMBOL LETTER C;So;0;L;;;;;N;;;;; 1F1E9;REGIONAL INDICATOR SYMBOL LETTER D;So;0;L;;;;;N;;;;; 1F1EA;REGIONAL INDICATOR SYMBOL LETTER E;So;0;L;;;;;N;;;;; 1F1EB;REGIONAL INDICATOR SYMBOL LETTER F;So;0;L;;;;;N;;;;; 1F1EC;REGIONAL INDICATOR SYMBOL LETTER G;So;0;L;;;;;N;;;;; 1F1ED;REGIONAL INDICATOR SYMBOL LETTER H;So;0;L;;;;;N;;;;; 1F1EE;REGIONAL INDICATOR SYMBOL LETTER I;So;0;L;;;;;N;;;;; 1F1EF;REGIONAL INDICATOR SYMBOL LETTER J;So;0;L;;;;;N;;;;; 1F1F0;REGIONAL INDICATOR SYMBOL LETTER K;So;0;L;;;;;N;;;;; 1F1F1;REGIONAL INDICATOR SYMBOL LETTER L;So;0;L;;;;;N;;;;; 1F1F2;REGIONAL INDICATOR SYMBOL LETTER M;So;0;L;;;;;N;;;;; 1F1F3;REGIONAL INDICATOR SYMBOL LETTER N;So;0;L;;;;;N;;;;; 1F1F4;REGIONAL INDICATOR SYMBOL LETTER O;So;0;L;;;;;N;;;;; 1F1F5;REGIONAL INDICATOR SYMBOL LETTER P;So;0;L;;;;;N;;;;; 1F1F6;REGIONAL INDICATOR SYMBOL LETTER Q;So;0;L;;;;;N;;;;; 1F1F7;REGIONAL INDICATOR SYMBOL LETTER R;So;0;L;;;;;N;;;;; 1F1F8;REGIONAL INDICATOR SYMBOL LETTER S;So;0;L;;;;;N;;;;; 1F1F9;REGIONAL INDICATOR SYMBOL LETTER T;So;0;L;;;;;N;;;;; 1F1FA;REGIONAL INDICATOR SYMBOL LETTER U;So;0;L;;;;;N;;;;; 1F1FB;REGIONAL INDICATOR SYMBOL LETTER V;So;0;L;;;;;N;;;;; 1F1FC;REGIONAL INDICATOR SYMBOL LETTER W;So;0;L;;;;;N;;;;; 1F1FD;REGIONAL INDICATOR SYMBOL LETTER X;So;0;L;;;;;N;;;;; 1F1FE;REGIONAL INDICATOR SYMBOL LETTER Y;So;0;L;;;;;N;;;;; 1F1FF;REGIONAL INDICATOR SYMBOL LETTER Z;So;0;L;;;;;N;;;;; 1F200;SQUARE HIRAGANA HOKA;So;0;L; 307B 304B;;;;N;;;;; 1F201;SQUARED KATAKANA KOKO;So;0;L; 30B3 30B3;;;;N;;;;; 1F202;SQUARED KATAKANA SA;So;0;L; 30B5;;;;N;;;;; 1F210;SQUARED CJK UNIFIED IDEOGRAPH-624B;So;0;L; 624B;;;;N;;;;; 1F211;SQUARED CJK UNIFIED IDEOGRAPH-5B57;So;0;L; 5B57;;;;N;;;;; 1F212;SQUARED CJK UNIFIED IDEOGRAPH-53CC;So;0;L; 53CC;;;;N;;;;; 1F213;SQUARED KATAKANA DE;So;0;L; 30C7;;;;N;;;;; 1F214;SQUARED CJK UNIFIED IDEOGRAPH-4E8C;So;0;L; 4E8C;;;;N;;;;; 1F215;SQUARED CJK UNIFIED IDEOGRAPH-591A;So;0;L; 591A;;;;N;;;;; 1F216;SQUARED CJK UNIFIED IDEOGRAPH-89E3;So;0;L; 89E3;;;;N;;;;; 1F217;SQUARED CJK UNIFIED IDEOGRAPH-5929;So;0;L; 5929;;;;N;;;;; 1F218;SQUARED CJK UNIFIED IDEOGRAPH-4EA4;So;0;L; 4EA4;;;;N;;;;; 1F219;SQUARED CJK UNIFIED IDEOGRAPH-6620;So;0;L; 6620;;;;N;;;;; 1F21A;SQUARED CJK UNIFIED IDEOGRAPH-7121;So;0;L; 7121;;;;N;;;;; 1F21B;SQUARED CJK UNIFIED IDEOGRAPH-6599;So;0;L; 6599;;;;N;;;;; 1F21C;SQUARED CJK UNIFIED IDEOGRAPH-524D;So;0;L; 524D;;;;N;;;;; 1F21D;SQUARED CJK UNIFIED IDEOGRAPH-5F8C;So;0;L; 5F8C;;;;N;;;;; 1F21E;SQUARED CJK UNIFIED IDEOGRAPH-518D;So;0;L; 518D;;;;N;;;;; 1F21F;SQUARED CJK UNIFIED IDEOGRAPH-65B0;So;0;L; 65B0;;;;N;;;;; 1F220;SQUARED CJK UNIFIED IDEOGRAPH-521D;So;0;L; 521D;;;;N;;;;; 1F221;SQUARED CJK UNIFIED IDEOGRAPH-7D42;So;0;L; 7D42;;;;N;;;;; 1F222;SQUARED CJK UNIFIED IDEOGRAPH-751F;So;0;L; 751F;;;;N;;;;; 1F223;SQUARED CJK UNIFIED IDEOGRAPH-8CA9;So;0;L; 8CA9;;;;N;;;;; 1F224;SQUARED CJK UNIFIED IDEOGRAPH-58F0;So;0;L; 58F0;;;;N;;;;; 1F225;SQUARED CJK UNIFIED IDEOGRAPH-5439;So;0;L; 5439;;;;N;;;;; 1F226;SQUARED CJK UNIFIED IDEOGRAPH-6F14;So;0;L; 6F14;;;;N;;;;; 1F227;SQUARED CJK UNIFIED IDEOGRAPH-6295;So;0;L; 6295;;;;N;;;;; 1F228;SQUARED CJK UNIFIED IDEOGRAPH-6355;So;0;L; 6355;;;;N;;;;; 1F229;SQUARED CJK UNIFIED IDEOGRAPH-4E00;So;0;L; 4E00;;;;N;;;;; 1F22A;SQUARED CJK UNIFIED IDEOGRAPH-4E09;So;0;L; 4E09;;;;N;;;;; 1F22B;SQUARED CJK UNIFIED IDEOGRAPH-904A;So;0;L; 904A;;;;N;;;;; 1F22C;SQUARED CJK UNIFIED IDEOGRAPH-5DE6;So;0;L; 5DE6;;;;N;;;;; 1F22D;SQUARED CJK UNIFIED IDEOGRAPH-4E2D;So;0;L; 4E2D;;;;N;;;;; 1F22E;SQUARED CJK UNIFIED IDEOGRAPH-53F3;So;0;L; 53F3;;;;N;;;;; 1F22F;SQUARED CJK UNIFIED IDEOGRAPH-6307;So;0;L; 6307;;;;N;;;;; 1F230;SQUARED CJK UNIFIED IDEOGRAPH-8D70;So;0;L; 8D70;;;;N;;;;; 1F231;SQUARED CJK UNIFIED IDEOGRAPH-6253;So;0;L; 6253;;;;N;;;;; 1F232;SQUARED CJK UNIFIED IDEOGRAPH-7981;So;0;L; 7981;;;;N;;;;; 1F233;SQUARED CJK UNIFIED IDEOGRAPH-7A7A;So;0;L; 7A7A;;;;N;;;;; 1F234;SQUARED CJK UNIFIED IDEOGRAPH-5408;So;0;L; 5408;;;;N;;;;; 1F235;SQUARED CJK UNIFIED IDEOGRAPH-6E80;So;0;L; 6E80;;;;N;;;;; 1F236;SQUARED CJK UNIFIED IDEOGRAPH-6709;So;0;L; 6709;;;;N;;;;; 1F237;SQUARED CJK UNIFIED IDEOGRAPH-6708;So;0;L; 6708;;;;N;;;;; 1F238;SQUARED CJK UNIFIED IDEOGRAPH-7533;So;0;L; 7533;;;;N;;;;; 1F239;SQUARED CJK UNIFIED IDEOGRAPH-5272;So;0;L; 5272;;;;N;;;;; 1F23A;SQUARED CJK UNIFIED IDEOGRAPH-55B6;So;0;L; 55B6;;;;N;;;;; 1F23B;SQUARED CJK UNIFIED IDEOGRAPH-914D;So;0;L; 914D;;;;N;;;;; 1F240;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C;So;0;L; 3014 672C 3015;;;;N;;;;; 1F241;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09;So;0;L; 3014 4E09 3015;;;;N;;;;; 1F242;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C;So;0;L; 3014 4E8C 3015;;;;N;;;;; 1F243;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89;So;0;L; 3014 5B89 3015;;;;N;;;;; 1F244;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9;So;0;L; 3014 70B9 3015;;;;N;;;;; 1F245;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253;So;0;L; 3014 6253 3015;;;;N;;;;; 1F246;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7;So;0;L; 3014 76D7 3015;;;;N;;;;; 1F247;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD;So;0;L; 3014 52DD 3015;;;;N;;;;; 1F248;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557;So;0;L; 3014 6557 3015;;;;N;;;;; 1F250;CIRCLED IDEOGRAPH ADVANTAGE;So;0;L; 5F97;;;;N;;;;; 1F251;CIRCLED IDEOGRAPH ACCEPT;So;0;L; 53EF;;;;N;;;;; 1F260;ROUNDED SYMBOL FOR FU;So;0;ON;;;;;N;;;;; 1F261;ROUNDED SYMBOL FOR LU;So;0;ON;;;;;N;;;;; 1F262;ROUNDED SYMBOL FOR SHOU;So;0;ON;;;;;N;;;;; 1F263;ROUNDED SYMBOL FOR XI;So;0;ON;;;;;N;;;;; 1F264;ROUNDED SYMBOL FOR SHUANGXI;So;0;ON;;;;;N;;;;; 1F265;ROUNDED SYMBOL FOR CAI;So;0;ON;;;;;N;;;;; 1F300;CYCLONE;So;0;ON;;;;;N;;;;; 1F301;FOGGY;So;0;ON;;;;;N;;;;; 1F302;CLOSED UMBRELLA;So;0;ON;;;;;N;;;;; 1F303;NIGHT WITH STARS;So;0;ON;;;;;N;;;;; 1F304;SUNRISE OVER MOUNTAINS;So;0;ON;;;;;N;;;;; 1F305;SUNRISE;So;0;ON;;;;;N;;;;; 1F306;CITYSCAPE AT DUSK;So;0;ON;;;;;N;;;;; 1F307;SUNSET OVER BUILDINGS;So;0;ON;;;;;N;;;;; 1F308;RAINBOW;So;0;ON;;;;;N;;;;; 1F309;BRIDGE AT NIGHT;So;0;ON;;;;;N;;;;; 1F30A;WATER WAVE;So;0;ON;;;;;N;;;;; 1F30B;VOLCANO;So;0;ON;;;;;N;;;;; 1F30C;MILKY WAY;So;0;ON;;;;;N;;;;; 1F30D;EARTH GLOBE EUROPE-AFRICA;So;0;ON;;;;;N;;;;; 1F30E;EARTH GLOBE AMERICAS;So;0;ON;;;;;N;;;;; 1F30F;EARTH GLOBE ASIA-AUSTRALIA;So;0;ON;;;;;N;;;;; 1F310;GLOBE WITH MERIDIANS;So;0;ON;;;;;N;;;;; 1F311;NEW MOON SYMBOL;So;0;ON;;;;;N;;;;; 1F312;WAXING CRESCENT MOON SYMBOL;So;0;ON;;;;;N;;;;; 1F313;FIRST QUARTER MOON SYMBOL;So;0;ON;;;;;N;;;;; 1F314;WAXING GIBBOUS MOON SYMBOL;So;0;ON;;;;;N;;;;; 1F315;FULL MOON SYMBOL;So;0;ON;;;;;N;;;;; 1F316;WANING GIBBOUS MOON SYMBOL;So;0;ON;;;;;N;;;;; 1F317;LAST QUARTER MOON SYMBOL;So;0;ON;;;;;N;;;;; 1F318;WANING CRESCENT MOON SYMBOL;So;0;ON;;;;;N;;;;; 1F319;CRESCENT MOON;So;0;ON;;;;;N;;;;; 1F31A;NEW MOON WITH FACE;So;0;ON;;;;;N;;;;; 1F31B;FIRST QUARTER MOON WITH FACE;So;0;ON;;;;;N;;;;; 1F31C;LAST QUARTER MOON WITH FACE;So;0;ON;;;;;N;;;;; 1F31D;FULL MOON WITH FACE;So;0;ON;;;;;N;;;;; 1F31E;SUN WITH FACE;So;0;ON;;;;;N;;;;; 1F31F;GLOWING STAR;So;0;ON;;;;;N;;;;; 1F320;SHOOTING STAR;So;0;ON;;;;;N;;;;; 1F321;THERMOMETER;So;0;ON;;;;;N;;;;; 1F322;BLACK DROPLET;So;0;ON;;;;;N;;;;; 1F323;WHITE SUN;So;0;ON;;;;;N;;;;; 1F324;WHITE SUN WITH SMALL CLOUD;So;0;ON;;;;;N;;;;; 1F325;WHITE SUN BEHIND CLOUD;So;0;ON;;;;;N;;;;; 1F326;WHITE SUN BEHIND CLOUD WITH RAIN;So;0;ON;;;;;N;;;;; 1F327;CLOUD WITH RAIN;So;0;ON;;;;;N;;;;; 1F328;CLOUD WITH SNOW;So;0;ON;;;;;N;;;;; 1F329;CLOUD WITH LIGHTNING;So;0;ON;;;;;N;;;;; 1F32A;CLOUD WITH TORNADO;So;0;ON;;;;;N;;;;; 1F32B;FOG;So;0;ON;;;;;N;;;;; 1F32C;WIND BLOWING FACE;So;0;ON;;;;;N;;;;; 1F32D;HOT DOG;So;0;ON;;;;;N;;;;; 1F32E;TACO;So;0;ON;;;;;N;;;;; 1F32F;BURRITO;So;0;ON;;;;;N;;;;; 1F330;CHESTNUT;So;0;ON;;;;;N;;;;; 1F331;SEEDLING;So;0;ON;;;;;N;;;;; 1F332;EVERGREEN TREE;So;0;ON;;;;;N;;;;; 1F333;DECIDUOUS TREE;So;0;ON;;;;;N;;;;; 1F334;PALM TREE;So;0;ON;;;;;N;;;;; 1F335;CACTUS;So;0;ON;;;;;N;;;;; 1F336;HOT PEPPER;So;0;ON;;;;;N;;;;; 1F337;TULIP;So;0;ON;;;;;N;;;;; 1F338;CHERRY BLOSSOM;So;0;ON;;;;;N;;;;; 1F339;ROSE;So;0;ON;;;;;N;;;;; 1F33A;HIBISCUS;So;0;ON;;;;;N;;;;; 1F33B;SUNFLOWER;So;0;ON;;;;;N;;;;; 1F33C;BLOSSOM;So;0;ON;;;;;N;;;;; 1F33D;EAR OF MAIZE;So;0;ON;;;;;N;;;;; 1F33E;EAR OF RICE;So;0;ON;;;;;N;;;;; 1F33F;HERB;So;0;ON;;;;;N;;;;; 1F340;FOUR LEAF CLOVER;So;0;ON;;;;;N;;;;; 1F341;MAPLE LEAF;So;0;ON;;;;;N;;;;; 1F342;FALLEN LEAF;So;0;ON;;;;;N;;;;; 1F343;LEAF FLUTTERING IN WIND;So;0;ON;;;;;N;;;;; 1F344;MUSHROOM;So;0;ON;;;;;N;;;;; 1F345;TOMATO;So;0;ON;;;;;N;;;;; 1F346;AUBERGINE;So;0;ON;;;;;N;;;;; 1F347;GRAPES;So;0;ON;;;;;N;;;;; 1F348;MELON;So;0;ON;;;;;N;;;;; 1F349;WATERMELON;So;0;ON;;;;;N;;;;; 1F34A;TANGERINE;So;0;ON;;;;;N;;;;; 1F34B;LEMON;So;0;ON;;;;;N;;;;; 1F34C;BANANA;So;0;ON;;;;;N;;;;; 1F34D;PINEAPPLE;So;0;ON;;;;;N;;;;; 1F34E;RED APPLE;So;0;ON;;;;;N;;;;; 1F34F;GREEN APPLE;So;0;ON;;;;;N;;;;; 1F350;PEAR;So;0;ON;;;;;N;;;;; 1F351;PEACH;So;0;ON;;;;;N;;;;; 1F352;CHERRIES;So;0;ON;;;;;N;;;;; 1F353;STRAWBERRY;So;0;ON;;;;;N;;;;; 1F354;HAMBURGER;So;0;ON;;;;;N;;;;; 1F355;SLICE OF PIZZA;So;0;ON;;;;;N;;;;; 1F356;MEAT ON BONE;So;0;ON;;;;;N;;;;; 1F357;POULTRY LEG;So;0;ON;;;;;N;;;;; 1F358;RICE CRACKER;So;0;ON;;;;;N;;;;; 1F359;RICE BALL;So;0;ON;;;;;N;;;;; 1F35A;COOKED RICE;So;0;ON;;;;;N;;;;; 1F35B;CURRY AND RICE;So;0;ON;;;;;N;;;;; 1F35C;STEAMING BOWL;So;0;ON;;;;;N;;;;; 1F35D;SPAGHETTI;So;0;ON;;;;;N;;;;; 1F35E;BREAD;So;0;ON;;;;;N;;;;; 1F35F;FRENCH FRIES;So;0;ON;;;;;N;;;;; 1F360;ROASTED SWEET POTATO;So;0;ON;;;;;N;;;;; 1F361;DANGO;So;0;ON;;;;;N;;;;; 1F362;ODEN;So;0;ON;;;;;N;;;;; 1F363;SUSHI;So;0;ON;;;;;N;;;;; 1F364;FRIED SHRIMP;So;0;ON;;;;;N;;;;; 1F365;FISH CAKE WITH SWIRL DESIGN;So;0;ON;;;;;N;;;;; 1F366;SOFT ICE CREAM;So;0;ON;;;;;N;;;;; 1F367;SHAVED ICE;So;0;ON;;;;;N;;;;; 1F368;ICE CREAM;So;0;ON;;;;;N;;;;; 1F369;DOUGHNUT;So;0;ON;;;;;N;;;;; 1F36A;COOKIE;So;0;ON;;;;;N;;;;; 1F36B;CHOCOLATE BAR;So;0;ON;;;;;N;;;;; 1F36C;CANDY;So;0;ON;;;;;N;;;;; 1F36D;LOLLIPOP;So;0;ON;;;;;N;;;;; 1F36E;CUSTARD;So;0;ON;;;;;N;;;;; 1F36F;HONEY POT;So;0;ON;;;;;N;;;;; 1F370;SHORTCAKE;So;0;ON;;;;;N;;;;; 1F371;BENTO BOX;So;0;ON;;;;;N;;;;; 1F372;POT OF FOOD;So;0;ON;;;;;N;;;;; 1F373;COOKING;So;0;ON;;;;;N;;;;; 1F374;FORK AND KNIFE;So;0;ON;;;;;N;;;;; 1F375;TEACUP WITHOUT HANDLE;So;0;ON;;;;;N;;;;; 1F376;SAKE BOTTLE AND CUP;So;0;ON;;;;;N;;;;; 1F377;WINE GLASS;So;0;ON;;;;;N;;;;; 1F378;COCKTAIL GLASS;So;0;ON;;;;;N;;;;; 1F379;TROPICAL DRINK;So;0;ON;;;;;N;;;;; 1F37A;BEER MUG;So;0;ON;;;;;N;;;;; 1F37B;CLINKING BEER MUGS;So;0;ON;;;;;N;;;;; 1F37C;BABY BOTTLE;So;0;ON;;;;;N;;;;; 1F37D;FORK AND KNIFE WITH PLATE;So;0;ON;;;;;N;;;;; 1F37E;BOTTLE WITH POPPING CORK;So;0;ON;;;;;N;;;;; 1F37F;POPCORN;So;0;ON;;;;;N;;;;; 1F380;RIBBON;So;0;ON;;;;;N;;;;; 1F381;WRAPPED PRESENT;So;0;ON;;;;;N;;;;; 1F382;BIRTHDAY CAKE;So;0;ON;;;;;N;;;;; 1F383;JACK-O-LANTERN;So;0;ON;;;;;N;;;;; 1F384;CHRISTMAS TREE;So;0;ON;;;;;N;;;;; 1F385;FATHER CHRISTMAS;So;0;ON;;;;;N;;;;; 1F386;FIREWORKS;So;0;ON;;;;;N;;;;; 1F387;FIREWORK SPARKLER;So;0;ON;;;;;N;;;;; 1F388;BALLOON;So;0;ON;;;;;N;;;;; 1F389;PARTY POPPER;So;0;ON;;;;;N;;;;; 1F38A;CONFETTI BALL;So;0;ON;;;;;N;;;;; 1F38B;TANABATA TREE;So;0;ON;;;;;N;;;;; 1F38C;CROSSED FLAGS;So;0;ON;;;;;N;;;;; 1F38D;PINE DECORATION;So;0;ON;;;;;N;;;;; 1F38E;JAPANESE DOLLS;So;0;ON;;;;;N;;;;; 1F38F;CARP STREAMER;So;0;ON;;;;;N;;;;; 1F390;WIND CHIME;So;0;ON;;;;;N;;;;; 1F391;MOON VIEWING CEREMONY;So;0;ON;;;;;N;;;;; 1F392;SCHOOL SATCHEL;So;0;ON;;;;;N;;;;; 1F393;GRADUATION CAP;So;0;ON;;;;;N;;;;; 1F394;HEART WITH TIP ON THE LEFT;So;0;ON;;;;;N;;;;; 1F395;BOUQUET OF FLOWERS;So;0;ON;;;;;N;;;;; 1F396;MILITARY MEDAL;So;0;ON;;;;;N;;;;; 1F397;REMINDER RIBBON;So;0;ON;;;;;N;;;;; 1F398;MUSICAL KEYBOARD WITH JACKS;So;0;ON;;;;;N;;;;; 1F399;STUDIO MICROPHONE;So;0;ON;;;;;N;;;;; 1F39A;LEVEL SLIDER;So;0;ON;;;;;N;;;;; 1F39B;CONTROL KNOBS;So;0;ON;;;;;N;;;;; 1F39C;BEAMED ASCENDING MUSICAL NOTES;So;0;ON;;;;;N;;;;; 1F39D;BEAMED DESCENDING MUSICAL NOTES;So;0;ON;;;;;N;;;;; 1F39E;FILM FRAMES;So;0;ON;;;;;N;;;;; 1F39F;ADMISSION TICKETS;So;0;ON;;;;;N;;;;; 1F3A0;CAROUSEL HORSE;So;0;ON;;;;;N;;;;; 1F3A1;FERRIS WHEEL;So;0;ON;;;;;N;;;;; 1F3A2;ROLLER COASTER;So;0;ON;;;;;N;;;;; 1F3A3;FISHING POLE AND FISH;So;0;ON;;;;;N;;;;; 1F3A4;MICROPHONE;So;0;ON;;;;;N;;;;; 1F3A5;MOVIE CAMERA;So;0;ON;;;;;N;;;;; 1F3A6;CINEMA;So;0;ON;;;;;N;;;;; 1F3A7;HEADPHONE;So;0;ON;;;;;N;;;;; 1F3A8;ARTIST PALETTE;So;0;ON;;;;;N;;;;; 1F3A9;TOP HAT;So;0;ON;;;;;N;;;;; 1F3AA;CIRCUS TENT;So;0;ON;;;;;N;;;;; 1F3AB;TICKET;So;0;ON;;;;;N;;;;; 1F3AC;CLAPPER BOARD;So;0;ON;;;;;N;;;;; 1F3AD;PERFORMING ARTS;So;0;ON;;;;;N;;;;; 1F3AE;VIDEO GAME;So;0;ON;;;;;N;;;;; 1F3AF;DIRECT HIT;So;0;ON;;;;;N;;;;; 1F3B0;SLOT MACHINE;So;0;ON;;;;;N;;;;; 1F3B1;BILLIARDS;So;0;ON;;;;;N;;;;; 1F3B2;GAME DIE;So;0;ON;;;;;N;;;;; 1F3B3;BOWLING;So;0;ON;;;;;N;;;;; 1F3B4;FLOWER PLAYING CARDS;So;0;ON;;;;;N;;;;; 1F3B5;MUSICAL NOTE;So;0;ON;;;;;N;;;;; 1F3B6;MULTIPLE MUSICAL NOTES;So;0;ON;;;;;N;;;;; 1F3B7;SAXOPHONE;So;0;ON;;;;;N;;;;; 1F3B8;GUITAR;So;0;ON;;;;;N;;;;; 1F3B9;MUSICAL KEYBOARD;So;0;ON;;;;;N;;;;; 1F3BA;TRUMPET;So;0;ON;;;;;N;;;;; 1F3BB;VIOLIN;So;0;ON;;;;;N;;;;; 1F3BC;MUSICAL SCORE;So;0;ON;;;;;N;;;;; 1F3BD;RUNNING SHIRT WITH SASH;So;0;ON;;;;;N;;;;; 1F3BE;TENNIS RACQUET AND BALL;So;0;ON;;;;;N;;;;; 1F3BF;SKI AND SKI BOOT;So;0;ON;;;;;N;;;;; 1F3C0;BASKETBALL AND HOOP;So;0;ON;;;;;N;;;;; 1F3C1;CHEQUERED FLAG;So;0;ON;;;;;N;;;;; 1F3C2;SNOWBOARDER;So;0;ON;;;;;N;;;;; 1F3C3;RUNNER;So;0;ON;;;;;N;;;;; 1F3C4;SURFER;So;0;ON;;;;;N;;;;; 1F3C5;SPORTS MEDAL;So;0;ON;;;;;N;;;;; 1F3C6;TROPHY;So;0;ON;;;;;N;;;;; 1F3C7;HORSE RACING;So;0;ON;;;;;N;;;;; 1F3C8;AMERICAN FOOTBALL;So;0;ON;;;;;N;;;;; 1F3C9;RUGBY FOOTBALL;So;0;ON;;;;;N;;;;; 1F3CA;SWIMMER;So;0;ON;;;;;N;;;;; 1F3CB;WEIGHT LIFTER;So;0;ON;;;;;N;;;;; 1F3CC;GOLFER;So;0;ON;;;;;N;;;;; 1F3CD;RACING MOTORCYCLE;So;0;ON;;;;;N;;;;; 1F3CE;RACING CAR;So;0;ON;;;;;N;;;;; 1F3CF;CRICKET BAT AND BALL;So;0;ON;;;;;N;;;;; 1F3D0;VOLLEYBALL;So;0;ON;;;;;N;;;;; 1F3D1;FIELD HOCKEY STICK AND BALL;So;0;ON;;;;;N;;;;; 1F3D2;ICE HOCKEY STICK AND PUCK;So;0;ON;;;;;N;;;;; 1F3D3;TABLE TENNIS PADDLE AND BALL;So;0;ON;;;;;N;;;;; 1F3D4;SNOW CAPPED MOUNTAIN;So;0;ON;;;;;N;;;;; 1F3D5;CAMPING;So;0;ON;;;;;N;;;;; 1F3D6;BEACH WITH UMBRELLA;So;0;ON;;;;;N;;;;; 1F3D7;BUILDING CONSTRUCTION;So;0;ON;;;;;N;;;;; 1F3D8;HOUSE BUILDINGS;So;0;ON;;;;;N;;;;; 1F3D9;CITYSCAPE;So;0;ON;;;;;N;;;;; 1F3DA;DERELICT HOUSE BUILDING;So;0;ON;;;;;N;;;;; 1F3DB;CLASSICAL BUILDING;So;0;ON;;;;;N;;;;; 1F3DC;DESERT;So;0;ON;;;;;N;;;;; 1F3DD;DESERT ISLAND;So;0;ON;;;;;N;;;;; 1F3DE;NATIONAL PARK;So;0;ON;;;;;N;;;;; 1F3DF;STADIUM;So;0;ON;;;;;N;;;;; 1F3E0;HOUSE BUILDING;So;0;ON;;;;;N;;;;; 1F3E1;HOUSE WITH GARDEN;So;0;ON;;;;;N;;;;; 1F3E2;OFFICE BUILDING;So;0;ON;;;;;N;;;;; 1F3E3;JAPANESE POST OFFICE;So;0;ON;;;;;N;;;;; 1F3E4;EUROPEAN POST OFFICE;So;0;ON;;;;;N;;;;; 1F3E5;HOSPITAL;So;0;ON;;;;;N;;;;; 1F3E6;BANK;So;0;ON;;;;;N;;;;; 1F3E7;AUTOMATED TELLER MACHINE;So;0;ON;;;;;N;;;;; 1F3E8;HOTEL;So;0;ON;;;;;N;;;;; 1F3E9;LOVE HOTEL;So;0;ON;;;;;N;;;;; 1F3EA;CONVENIENCE STORE;So;0;ON;;;;;N;;;;; 1F3EB;SCHOOL;So;0;ON;;;;;N;;;;; 1F3EC;DEPARTMENT STORE;So;0;ON;;;;;N;;;;; 1F3ED;FACTORY;So;0;ON;;;;;N;;;;; 1F3EE;IZAKAYA LANTERN;So;0;ON;;;;;N;;;;; 1F3EF;JAPANESE CASTLE;So;0;ON;;;;;N;;;;; 1F3F0;EUROPEAN CASTLE;So;0;ON;;;;;N;;;;; 1F3F1;WHITE PENNANT;So;0;ON;;;;;N;;;;; 1F3F2;BLACK PENNANT;So;0;ON;;;;;N;;;;; 1F3F3;WAVING WHITE FLAG;So;0;ON;;;;;N;;;;; 1F3F4;WAVING BLACK FLAG;So;0;ON;;;;;N;;;;; 1F3F5;ROSETTE;So;0;ON;;;;;N;;;;; 1F3F6;BLACK ROSETTE;So;0;ON;;;;;N;;;;; 1F3F7;LABEL;So;0;ON;;;;;N;;;;; 1F3F8;BADMINTON RACQUET AND SHUTTLECOCK;So;0;ON;;;;;N;;;;; 1F3F9;BOW AND ARROW;So;0;ON;;;;;N;;;;; 1F3FA;AMPHORA;So;0;ON;;;;;N;;;;; 1F3FB;EMOJI MODIFIER FITZPATRICK TYPE-1-2;Sk;0;ON;;;;;N;;;;; 1F3FC;EMOJI MODIFIER FITZPATRICK TYPE-3;Sk;0;ON;;;;;N;;;;; 1F3FD;EMOJI MODIFIER FITZPATRICK TYPE-4;Sk;0;ON;;;;;N;;;;; 1F3FE;EMOJI MODIFIER FITZPATRICK TYPE-5;Sk;0;ON;;;;;N;;;;; 1F3FF;EMOJI MODIFIER FITZPATRICK TYPE-6;Sk;0;ON;;;;;N;;;;; 1F400;RAT;So;0;ON;;;;;N;;;;; 1F401;MOUSE;So;0;ON;;;;;N;;;;; 1F402;OX;So;0;ON;;;;;N;;;;; 1F403;WATER BUFFALO;So;0;ON;;;;;N;;;;; 1F404;COW;So;0;ON;;;;;N;;;;; 1F405;TIGER;So;0;ON;;;;;N;;;;; 1F406;LEOPARD;So;0;ON;;;;;N;;;;; 1F407;RABBIT;So;0;ON;;;;;N;;;;; 1F408;CAT;So;0;ON;;;;;N;;;;; 1F409;DRAGON;So;0;ON;;;;;N;;;;; 1F40A;CROCODILE;So;0;ON;;;;;N;;;;; 1F40B;WHALE;So;0;ON;;;;;N;;;;; 1F40C;SNAIL;So;0;ON;;;;;N;;;;; 1F40D;SNAKE;So;0;ON;;;;;N;;;;; 1F40E;HORSE;So;0;ON;;;;;N;;;;; 1F40F;RAM;So;0;ON;;;;;N;;;;; 1F410;GOAT;So;0;ON;;;;;N;;;;; 1F411;SHEEP;So;0;ON;;;;;N;;;;; 1F412;MONKEY;So;0;ON;;;;;N;;;;; 1F413;ROOSTER;So;0;ON;;;;;N;;;;; 1F414;CHICKEN;So;0;ON;;;;;N;;;;; 1F415;DOG;So;0;ON;;;;;N;;;;; 1F416;PIG;So;0;ON;;;;;N;;;;; 1F417;BOAR;So;0;ON;;;;;N;;;;; 1F418;ELEPHANT;So;0;ON;;;;;N;;;;; 1F419;OCTOPUS;So;0;ON;;;;;N;;;;; 1F41A;SPIRAL SHELL;So;0;ON;;;;;N;;;;; 1F41B;BUG;So;0;ON;;;;;N;;;;; 1F41C;ANT;So;0;ON;;;;;N;;;;; 1F41D;HONEYBEE;So;0;ON;;;;;N;;;;; 1F41E;LADY BEETLE;So;0;ON;;;;;N;;;;; 1F41F;FISH;So;0;ON;;;;;N;;;;; 1F420;TROPICAL FISH;So;0;ON;;;;;N;;;;; 1F421;BLOWFISH;So;0;ON;;;;;N;;;;; 1F422;TURTLE;So;0;ON;;;;;N;;;;; 1F423;HATCHING CHICK;So;0;ON;;;;;N;;;;; 1F424;BABY CHICK;So;0;ON;;;;;N;;;;; 1F425;FRONT-FACING BABY CHICK;So;0;ON;;;;;N;;;;; 1F426;BIRD;So;0;ON;;;;;N;;;;; 1F427;PENGUIN;So;0;ON;;;;;N;;;;; 1F428;KOALA;So;0;ON;;;;;N;;;;; 1F429;POODLE;So;0;ON;;;;;N;;;;; 1F42A;DROMEDARY CAMEL;So;0;ON;;;;;N;;;;; 1F42B;BACTRIAN CAMEL;So;0;ON;;;;;N;;;;; 1F42C;DOLPHIN;So;0;ON;;;;;N;;;;; 1F42D;MOUSE FACE;So;0;ON;;;;;N;;;;; 1F42E;COW FACE;So;0;ON;;;;;N;;;;; 1F42F;TIGER FACE;So;0;ON;;;;;N;;;;; 1F430;RABBIT FACE;So;0;ON;;;;;N;;;;; 1F431;CAT FACE;So;0;ON;;;;;N;;;;; 1F432;DRAGON FACE;So;0;ON;;;;;N;;;;; 1F433;SPOUTING WHALE;So;0;ON;;;;;N;;;;; 1F434;HORSE FACE;So;0;ON;;;;;N;;;;; 1F435;MONKEY FACE;So;0;ON;;;;;N;;;;; 1F436;DOG FACE;So;0;ON;;;;;N;;;;; 1F437;PIG FACE;So;0;ON;;;;;N;;;;; 1F438;FROG FACE;So;0;ON;;;;;N;;;;; 1F439;HAMSTER FACE;So;0;ON;;;;;N;;;;; 1F43A;WOLF FACE;So;0;ON;;;;;N;;;;; 1F43B;BEAR FACE;So;0;ON;;;;;N;;;;; 1F43C;PANDA FACE;So;0;ON;;;;;N;;;;; 1F43D;PIG NOSE;So;0;ON;;;;;N;;;;; 1F43E;PAW PRINTS;So;0;ON;;;;;N;;;;; 1F43F;CHIPMUNK;So;0;ON;;;;;N;;;;; 1F440;EYES;So;0;ON;;;;;N;;;;; 1F441;EYE;So;0;ON;;;;;N;;;;; 1F442;EAR;So;0;ON;;;;;N;;;;; 1F443;NOSE;So;0;ON;;;;;N;;;;; 1F444;MOUTH;So;0;ON;;;;;N;;;;; 1F445;TONGUE;So;0;ON;;;;;N;;;;; 1F446;WHITE UP POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; 1F447;WHITE DOWN POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; 1F448;WHITE LEFT POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; 1F449;WHITE RIGHT POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; 1F44A;FISTED HAND SIGN;So;0;ON;;;;;N;;;;; 1F44B;WAVING HAND SIGN;So;0;ON;;;;;N;;;;; 1F44C;OK HAND SIGN;So;0;ON;;;;;N;;;;; 1F44D;THUMBS UP SIGN;So;0;ON;;;;;N;;;;; 1F44E;THUMBS DOWN SIGN;So;0;ON;;;;;N;;;;; 1F44F;CLAPPING HANDS SIGN;So;0;ON;;;;;N;;;;; 1F450;OPEN HANDS SIGN;So;0;ON;;;;;N;;;;; 1F451;CROWN;So;0;ON;;;;;N;;;;; 1F452;WOMANS HAT;So;0;ON;;;;;N;;;;; 1F453;EYEGLASSES;So;0;ON;;;;;N;;;;; 1F454;NECKTIE;So;0;ON;;;;;N;;;;; 1F455;T-SHIRT;So;0;ON;;;;;N;;;;; 1F456;JEANS;So;0;ON;;;;;N;;;;; 1F457;DRESS;So;0;ON;;;;;N;;;;; 1F458;KIMONO;So;0;ON;;;;;N;;;;; 1F459;BIKINI;So;0;ON;;;;;N;;;;; 1F45A;WOMANS CLOTHES;So;0;ON;;;;;N;;;;; 1F45B;PURSE;So;0;ON;;;;;N;;;;; 1F45C;HANDBAG;So;0;ON;;;;;N;;;;; 1F45D;POUCH;So;0;ON;;;;;N;;;;; 1F45E;MANS SHOE;So;0;ON;;;;;N;;;;; 1F45F;ATHLETIC SHOE;So;0;ON;;;;;N;;;;; 1F460;HIGH-HEELED SHOE;So;0;ON;;;;;N;;;;; 1F461;WOMANS SANDAL;So;0;ON;;;;;N;;;;; 1F462;WOMANS BOOTS;So;0;ON;;;;;N;;;;; 1F463;FOOTPRINTS;So;0;ON;;;;;N;;;;; 1F464;BUST IN SILHOUETTE;So;0;ON;;;;;N;;;;; 1F465;BUSTS IN SILHOUETTE;So;0;ON;;;;;N;;;;; 1F466;BOY;So;0;ON;;;;;N;;;;; 1F467;GIRL;So;0;ON;;;;;N;;;;; 1F468;MAN;So;0;ON;;;;;N;;;;; 1F469;WOMAN;So;0;ON;;;;;N;;;;; 1F46A;FAMILY;So;0;ON;;;;;N;;;;; 1F46B;MAN AND WOMAN HOLDING HANDS;So;0;ON;;;;;N;;;;; 1F46C;TWO MEN HOLDING HANDS;So;0;ON;;;;;N;;;;; 1F46D;TWO WOMEN HOLDING HANDS;So;0;ON;;;;;N;;;;; 1F46E;POLICE OFFICER;So;0;ON;;;;;N;;;;; 1F46F;WOMAN WITH BUNNY EARS;So;0;ON;;;;;N;;;;; 1F470;BRIDE WITH VEIL;So;0;ON;;;;;N;;;;; 1F471;PERSON WITH BLOND HAIR;So;0;ON;;;;;N;;;;; 1F472;MAN WITH GUA PI MAO;So;0;ON;;;;;N;;;;; 1F473;MAN WITH TURBAN;So;0;ON;;;;;N;;;;; 1F474;OLDER MAN;So;0;ON;;;;;N;;;;; 1F475;OLDER WOMAN;So;0;ON;;;;;N;;;;; 1F476;BABY;So;0;ON;;;;;N;;;;; 1F477;CONSTRUCTION WORKER;So;0;ON;;;;;N;;;;; 1F478;PRINCESS;So;0;ON;;;;;N;;;;; 1F479;JAPANESE OGRE;So;0;ON;;;;;N;;;;; 1F47A;JAPANESE GOBLIN;So;0;ON;;;;;N;;;;; 1F47B;GHOST;So;0;ON;;;;;N;;;;; 1F47C;BABY ANGEL;So;0;ON;;;;;N;;;;; 1F47D;EXTRATERRESTRIAL ALIEN;So;0;ON;;;;;N;;;;; 1F47E;ALIEN MONSTER;So;0;ON;;;;;N;;;;; 1F47F;IMP;So;0;ON;;;;;N;;;;; 1F480;SKULL;So;0;ON;;;;;N;;;;; 1F481;INFORMATION DESK PERSON;So;0;ON;;;;;N;;;;; 1F482;GUARDSMAN;So;0;ON;;;;;N;;;;; 1F483;DANCER;So;0;ON;;;;;N;;;;; 1F484;LIPSTICK;So;0;ON;;;;;N;;;;; 1F485;NAIL POLISH;So;0;ON;;;;;N;;;;; 1F486;FACE MASSAGE;So;0;ON;;;;;N;;;;; 1F487;HAIRCUT;So;0;ON;;;;;N;;;;; 1F488;BARBER POLE;So;0;ON;;;;;N;;;;; 1F489;SYRINGE;So;0;ON;;;;;N;;;;; 1F48A;PILL;So;0;ON;;;;;N;;;;; 1F48B;KISS MARK;So;0;ON;;;;;N;;;;; 1F48C;LOVE LETTER;So;0;ON;;;;;N;;;;; 1F48D;RING;So;0;ON;;;;;N;;;;; 1F48E;GEM STONE;So;0;ON;;;;;N;;;;; 1F48F;KISS;So;0;ON;;;;;N;;;;; 1F490;BOUQUET;So;0;ON;;;;;N;;;;; 1F491;COUPLE WITH HEART;So;0;ON;;;;;N;;;;; 1F492;WEDDING;So;0;ON;;;;;N;;;;; 1F493;BEATING HEART;So;0;ON;;;;;N;;;;; 1F494;BROKEN HEART;So;0;ON;;;;;N;;;;; 1F495;TWO HEARTS;So;0;ON;;;;;N;;;;; 1F496;SPARKLING HEART;So;0;ON;;;;;N;;;;; 1F497;GROWING HEART;So;0;ON;;;;;N;;;;; 1F498;HEART WITH ARROW;So;0;ON;;;;;N;;;;; 1F499;BLUE HEART;So;0;ON;;;;;N;;;;; 1F49A;GREEN HEART;So;0;ON;;;;;N;;;;; 1F49B;YELLOW HEART;So;0;ON;;;;;N;;;;; 1F49C;PURPLE HEART;So;0;ON;;;;;N;;;;; 1F49D;HEART WITH RIBBON;So;0;ON;;;;;N;;;;; 1F49E;REVOLVING HEARTS;So;0;ON;;;;;N;;;;; 1F49F;HEART DECORATION;So;0;ON;;;;;N;;;;; 1F4A0;DIAMOND SHAPE WITH A DOT INSIDE;So;0;ON;;;;;N;;;;; 1F4A1;ELECTRIC LIGHT BULB;So;0;ON;;;;;N;;;;; 1F4A2;ANGER SYMBOL;So;0;ON;;;;;N;;;;; 1F4A3;BOMB;So;0;ON;;;;;N;;;;; 1F4A4;SLEEPING SYMBOL;So;0;ON;;;;;N;;;;; 1F4A5;COLLISION SYMBOL;So;0;ON;;;;;N;;;;; 1F4A6;SPLASHING SWEAT SYMBOL;So;0;ON;;;;;N;;;;; 1F4A7;DROPLET;So;0;ON;;;;;N;;;;; 1F4A8;DASH SYMBOL;So;0;ON;;;;;N;;;;; 1F4A9;PILE OF POO;So;0;ON;;;;;N;;;;; 1F4AA;FLEXED BICEPS;So;0;ON;;;;;N;;;;; 1F4AB;DIZZY SYMBOL;So;0;ON;;;;;N;;;;; 1F4AC;SPEECH BALLOON;So;0;ON;;;;;N;;;;; 1F4AD;THOUGHT BALLOON;So;0;ON;;;;;N;;;;; 1F4AE;WHITE FLOWER;So;0;ON;;;;;N;;;;; 1F4AF;HUNDRED POINTS SYMBOL;So;0;ON;;;;;N;;;;; 1F4B0;MONEY BAG;So;0;ON;;;;;N;;;;; 1F4B1;CURRENCY EXCHANGE;So;0;ON;;;;;N;;;;; 1F4B2;HEAVY DOLLAR SIGN;So;0;ON;;;;;N;;;;; 1F4B3;CREDIT CARD;So;0;ON;;;;;N;;;;; 1F4B4;BANKNOTE WITH YEN SIGN;So;0;ON;;;;;N;;;;; 1F4B5;BANKNOTE WITH DOLLAR SIGN;So;0;ON;;;;;N;;;;; 1F4B6;BANKNOTE WITH EURO SIGN;So;0;ON;;;;;N;;;;; 1F4B7;BANKNOTE WITH POUND SIGN;So;0;ON;;;;;N;;;;; 1F4B8;MONEY WITH WINGS;So;0;ON;;;;;N;;;;; 1F4B9;CHART WITH UPWARDS TREND AND YEN SIGN;So;0;ON;;;;;N;;;;; 1F4BA;SEAT;So;0;ON;;;;;N;;;;; 1F4BB;PERSONAL COMPUTER;So;0;ON;;;;;N;;;;; 1F4BC;BRIEFCASE;So;0;ON;;;;;N;;;;; 1F4BD;MINIDISC;So;0;ON;;;;;N;;;;; 1F4BE;FLOPPY DISK;So;0;ON;;;;;N;;;;; 1F4BF;OPTICAL DISC;So;0;ON;;;;;N;;;;; 1F4C0;DVD;So;0;ON;;;;;N;;;;; 1F4C1;FILE FOLDER;So;0;ON;;;;;N;;;;; 1F4C2;OPEN FILE FOLDER;So;0;ON;;;;;N;;;;; 1F4C3;PAGE WITH CURL;So;0;ON;;;;;N;;;;; 1F4C4;PAGE FACING UP;So;0;ON;;;;;N;;;;; 1F4C5;CALENDAR;So;0;ON;;;;;N;;;;; 1F4C6;TEAR-OFF CALENDAR;So;0;ON;;;;;N;;;;; 1F4C7;CARD INDEX;So;0;ON;;;;;N;;;;; 1F4C8;CHART WITH UPWARDS TREND;So;0;ON;;;;;N;;;;; 1F4C9;CHART WITH DOWNWARDS TREND;So;0;ON;;;;;N;;;;; 1F4CA;BAR CHART;So;0;ON;;;;;N;;;;; 1F4CB;CLIPBOARD;So;0;ON;;;;;N;;;;; 1F4CC;PUSHPIN;So;0;ON;;;;;N;;;;; 1F4CD;ROUND PUSHPIN;So;0;ON;;;;;N;;;;; 1F4CE;PAPERCLIP;So;0;ON;;;;;N;;;;; 1F4CF;STRAIGHT RULER;So;0;ON;;;;;N;;;;; 1F4D0;TRIANGULAR RULER;So;0;ON;;;;;N;;;;; 1F4D1;BOOKMARK TABS;So;0;ON;;;;;N;;;;; 1F4D2;LEDGER;So;0;ON;;;;;N;;;;; 1F4D3;NOTEBOOK;So;0;ON;;;;;N;;;;; 1F4D4;NOTEBOOK WITH DECORATIVE COVER;So;0;ON;;;;;N;;;;; 1F4D5;CLOSED BOOK;So;0;ON;;;;;N;;;;; 1F4D6;OPEN BOOK;So;0;ON;;;;;N;;;;; 1F4D7;GREEN BOOK;So;0;ON;;;;;N;;;;; 1F4D8;BLUE BOOK;So;0;ON;;;;;N;;;;; 1F4D9;ORANGE BOOK;So;0;ON;;;;;N;;;;; 1F4DA;BOOKS;So;0;ON;;;;;N;;;;; 1F4DB;NAME BADGE;So;0;ON;;;;;N;;;;; 1F4DC;SCROLL;So;0;ON;;;;;N;;;;; 1F4DD;MEMO;So;0;ON;;;;;N;;;;; 1F4DE;TELEPHONE RECEIVER;So;0;ON;;;;;N;;;;; 1F4DF;PAGER;So;0;ON;;;;;N;;;;; 1F4E0;FAX MACHINE;So;0;ON;;;;;N;;;;; 1F4E1;SATELLITE ANTENNA;So;0;ON;;;;;N;;;;; 1F4E2;PUBLIC ADDRESS LOUDSPEAKER;So;0;ON;;;;;N;;;;; 1F4E3;CHEERING MEGAPHONE;So;0;ON;;;;;N;;;;; 1F4E4;OUTBOX TRAY;So;0;ON;;;;;N;;;;; 1F4E5;INBOX TRAY;So;0;ON;;;;;N;;;;; 1F4E6;PACKAGE;So;0;ON;;;;;N;;;;; 1F4E7;E-MAIL SYMBOL;So;0;ON;;;;;N;;;;; 1F4E8;INCOMING ENVELOPE;So;0;ON;;;;;N;;;;; 1F4E9;ENVELOPE WITH DOWNWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;; 1F4EA;CLOSED MAILBOX WITH LOWERED FLAG;So;0;ON;;;;;N;;;;; 1F4EB;CLOSED MAILBOX WITH RAISED FLAG;So;0;ON;;;;;N;;;;; 1F4EC;OPEN MAILBOX WITH RAISED FLAG;So;0;ON;;;;;N;;;;; 1F4ED;OPEN MAILBOX WITH LOWERED FLAG;So;0;ON;;;;;N;;;;; 1F4EE;POSTBOX;So;0;ON;;;;;N;;;;; 1F4EF;POSTAL HORN;So;0;ON;;;;;N;;;;; 1F4F0;NEWSPAPER;So;0;ON;;;;;N;;;;; 1F4F1;MOBILE PHONE;So;0;ON;;;;;N;;;;; 1F4F2;MOBILE PHONE WITH RIGHTWARDS ARROW AT LEFT;So;0;ON;;;;;N;;;;; 1F4F3;VIBRATION MODE;So;0;ON;;;;;N;;;;; 1F4F4;MOBILE PHONE OFF;So;0;ON;;;;;N;;;;; 1F4F5;NO MOBILE PHONES;So;0;ON;;;;;N;;;;; 1F4F6;ANTENNA WITH BARS;So;0;ON;;;;;N;;;;; 1F4F7;CAMERA;So;0;ON;;;;;N;;;;; 1F4F8;CAMERA WITH FLASH;So;0;ON;;;;;N;;;;; 1F4F9;VIDEO CAMERA;So;0;ON;;;;;N;;;;; 1F4FA;TELEVISION;So;0;ON;;;;;N;;;;; 1F4FB;RADIO;So;0;ON;;;;;N;;;;; 1F4FC;VIDEOCASSETTE;So;0;ON;;;;;N;;;;; 1F4FD;FILM PROJECTOR;So;0;ON;;;;;N;;;;; 1F4FE;PORTABLE STEREO;So;0;ON;;;;;N;;;;; 1F4FF;PRAYER BEADS;So;0;ON;;;;;N;;;;; 1F500;TWISTED RIGHTWARDS ARROWS;So;0;ON;;;;;N;;;;; 1F501;CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS;So;0;ON;;;;;N;;;;; 1F502;CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAY;So;0;ON;;;;;N;;;;; 1F503;CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS;So;0;ON;;;;;N;;;;; 1F504;ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS;So;0;ON;;;;;N;;;;; 1F505;LOW BRIGHTNESS SYMBOL;So;0;ON;;;;;N;;;;; 1F506;HIGH BRIGHTNESS SYMBOL;So;0;ON;;;;;N;;;;; 1F507;SPEAKER WITH CANCELLATION STROKE;So;0;ON;;;;;N;;;;; 1F508;SPEAKER;So;0;ON;;;;;N;;;;; 1F509;SPEAKER WITH ONE SOUND WAVE;So;0;ON;;;;;N;;;;; 1F50A;SPEAKER WITH THREE SOUND WAVES;So;0;ON;;;;;N;;;;; 1F50B;BATTERY;So;0;ON;;;;;N;;;;; 1F50C;ELECTRIC PLUG;So;0;ON;;;;;N;;;;; 1F50D;LEFT-POINTING MAGNIFYING GLASS;So;0;ON;;;;;N;;;;; 1F50E;RIGHT-POINTING MAGNIFYING GLASS;So;0;ON;;;;;N;;;;; 1F50F;LOCK WITH INK PEN;So;0;ON;;;;;N;;;;; 1F510;CLOSED LOCK WITH KEY;So;0;ON;;;;;N;;;;; 1F511;KEY;So;0;ON;;;;;N;;;;; 1F512;LOCK;So;0;ON;;;;;N;;;;; 1F513;OPEN LOCK;So;0;ON;;;;;N;;;;; 1F514;BELL;So;0;ON;;;;;N;;;;; 1F515;BELL WITH CANCELLATION STROKE;So;0;ON;;;;;N;;;;; 1F516;BOOKMARK;So;0;ON;;;;;N;;;;; 1F517;LINK SYMBOL;So;0;ON;;;;;N;;;;; 1F518;RADIO BUTTON;So;0;ON;;;;;N;;;;; 1F519;BACK WITH LEFTWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;; 1F51A;END WITH LEFTWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;; 1F51B;ON WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVE;So;0;ON;;;;;N;;;;; 1F51C;SOON WITH RIGHTWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;; 1F51D;TOP WITH UPWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;; 1F51E;NO ONE UNDER EIGHTEEN SYMBOL;So;0;ON;;;;;N;;;;; 1F51F;KEYCAP TEN;So;0;ON;;;;;N;;;;; 1F520;INPUT SYMBOL FOR LATIN CAPITAL LETTERS;So;0;ON;;;;;N;;;;; 1F521;INPUT SYMBOL FOR LATIN SMALL LETTERS;So;0;ON;;;;;N;;;;; 1F522;INPUT SYMBOL FOR NUMBERS;So;0;ON;;;;;N;;;;; 1F523;INPUT SYMBOL FOR SYMBOLS;So;0;ON;;;;;N;;;;; 1F524;INPUT SYMBOL FOR LATIN LETTERS;So;0;ON;;;;;N;;;;; 1F525;FIRE;So;0;ON;;;;;N;;;;; 1F526;ELECTRIC TORCH;So;0;ON;;;;;N;;;;; 1F527;WRENCH;So;0;ON;;;;;N;;;;; 1F528;HAMMER;So;0;ON;;;;;N;;;;; 1F529;NUT AND BOLT;So;0;ON;;;;;N;;;;; 1F52A;HOCHO;So;0;ON;;;;;N;;;;; 1F52B;PISTOL;So;0;ON;;;;;N;;;;; 1F52C;MICROSCOPE;So;0;ON;;;;;N;;;;; 1F52D;TELESCOPE;So;0;ON;;;;;N;;;;; 1F52E;CRYSTAL BALL;So;0;ON;;;;;N;;;;; 1F52F;SIX POINTED STAR WITH MIDDLE DOT;So;0;ON;;;;;N;;;;; 1F530;JAPANESE SYMBOL FOR BEGINNER;So;0;ON;;;;;N;;;;; 1F531;TRIDENT EMBLEM;So;0;ON;;;;;N;;;;; 1F532;BLACK SQUARE BUTTON;So;0;ON;;;;;N;;;;; 1F533;WHITE SQUARE BUTTON;So;0;ON;;;;;N;;;;; 1F534;LARGE RED CIRCLE;So;0;ON;;;;;N;;;;; 1F535;LARGE BLUE CIRCLE;So;0;ON;;;;;N;;;;; 1F536;LARGE ORANGE DIAMOND;So;0;ON;;;;;N;;;;; 1F537;LARGE BLUE DIAMOND;So;0;ON;;;;;N;;;;; 1F538;SMALL ORANGE DIAMOND;So;0;ON;;;;;N;;;;; 1F539;SMALL BLUE DIAMOND;So;0;ON;;;;;N;;;;; 1F53A;UP-POINTING RED TRIANGLE;So;0;ON;;;;;N;;;;; 1F53B;DOWN-POINTING RED TRIANGLE;So;0;ON;;;;;N;;;;; 1F53C;UP-POINTING SMALL RED TRIANGLE;So;0;ON;;;;;N;;;;; 1F53D;DOWN-POINTING SMALL RED TRIANGLE;So;0;ON;;;;;N;;;;; 1F53E;LOWER RIGHT SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;; 1F53F;UPPER RIGHT SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;; 1F540;CIRCLED CROSS POMMEE;So;0;ON;;;;;N;;;;; 1F541;CROSS POMMEE WITH HALF-CIRCLE BELOW;So;0;ON;;;;;N;;;;; 1F542;CROSS POMMEE;So;0;ON;;;;;N;;;;; 1F543;NOTCHED LEFT SEMICIRCLE WITH THREE DOTS;So;0;ON;;;;;N;;;;; 1F544;NOTCHED RIGHT SEMICIRCLE WITH THREE DOTS;So;0;ON;;;;;N;;;;; 1F545;SYMBOL FOR MARKS CHAPTER;So;0;ON;;;;;N;;;;; 1F546;WHITE LATIN CROSS;So;0;ON;;;;;N;;;;; 1F547;HEAVY LATIN CROSS;So;0;ON;;;;;N;;;;; 1F548;CELTIC CROSS;So;0;ON;;;;;N;;;;; 1F549;OM SYMBOL;So;0;ON;;;;;N;;;;; 1F54A;DOVE OF PEACE;So;0;ON;;;;;N;;;;; 1F54B;KAABA;So;0;ON;;;;;N;;;;; 1F54C;MOSQUE;So;0;ON;;;;;N;;;;; 1F54D;SYNAGOGUE;So;0;ON;;;;;N;;;;; 1F54E;MENORAH WITH NINE BRANCHES;So;0;ON;;;;;N;;;;; 1F54F;BOWL OF HYGIEIA;So;0;ON;;;;;N;;;;; 1F550;CLOCK FACE ONE OCLOCK;So;0;ON;;;;;N;;;;; 1F551;CLOCK FACE TWO OCLOCK;So;0;ON;;;;;N;;;;; 1F552;CLOCK FACE THREE OCLOCK;So;0;ON;;;;;N;;;;; 1F553;CLOCK FACE FOUR OCLOCK;So;0;ON;;;;;N;;;;; 1F554;CLOCK FACE FIVE OCLOCK;So;0;ON;;;;;N;;;;; 1F555;CLOCK FACE SIX OCLOCK;So;0;ON;;;;;N;;;;; 1F556;CLOCK FACE SEVEN OCLOCK;So;0;ON;;;;;N;;;;; 1F557;CLOCK FACE EIGHT OCLOCK;So;0;ON;;;;;N;;;;; 1F558;CLOCK FACE NINE OCLOCK;So;0;ON;;;;;N;;;;; 1F559;CLOCK FACE TEN OCLOCK;So;0;ON;;;;;N;;;;; 1F55A;CLOCK FACE ELEVEN OCLOCK;So;0;ON;;;;;N;;;;; 1F55B;CLOCK FACE TWELVE OCLOCK;So;0;ON;;;;;N;;;;; 1F55C;CLOCK FACE ONE-THIRTY;So;0;ON;;;;;N;;;;; 1F55D;CLOCK FACE TWO-THIRTY;So;0;ON;;;;;N;;;;; 1F55E;CLOCK FACE THREE-THIRTY;So;0;ON;;;;;N;;;;; 1F55F;CLOCK FACE FOUR-THIRTY;So;0;ON;;;;;N;;;;; 1F560;CLOCK FACE FIVE-THIRTY;So;0;ON;;;;;N;;;;; 1F561;CLOCK FACE SIX-THIRTY;So;0;ON;;;;;N;;;;; 1F562;CLOCK FACE SEVEN-THIRTY;So;0;ON;;;;;N;;;;; 1F563;CLOCK FACE EIGHT-THIRTY;So;0;ON;;;;;N;;;;; 1F564;CLOCK FACE NINE-THIRTY;So;0;ON;;;;;N;;;;; 1F565;CLOCK FACE TEN-THIRTY;So;0;ON;;;;;N;;;;; 1F566;CLOCK FACE ELEVEN-THIRTY;So;0;ON;;;;;N;;;;; 1F567;CLOCK FACE TWELVE-THIRTY;So;0;ON;;;;;N;;;;; 1F568;RIGHT SPEAKER;So;0;ON;;;;;N;;;;; 1F569;RIGHT SPEAKER WITH ONE SOUND WAVE;So;0;ON;;;;;N;;;;; 1F56A;RIGHT SPEAKER WITH THREE SOUND WAVES;So;0;ON;;;;;N;;;;; 1F56B;BULLHORN;So;0;ON;;;;;N;;;;; 1F56C;BULLHORN WITH SOUND WAVES;So;0;ON;;;;;N;;;;; 1F56D;RINGING BELL;So;0;ON;;;;;N;;;;; 1F56E;BOOK;So;0;ON;;;;;N;;;;; 1F56F;CANDLE;So;0;ON;;;;;N;;;;; 1F570;MANTELPIECE CLOCK;So;0;ON;;;;;N;;;;; 1F571;BLACK SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;; 1F572;NO PIRACY;So;0;ON;;;;;N;;;;; 1F573;HOLE;So;0;ON;;;;;N;;;;; 1F574;MAN IN BUSINESS SUIT LEVITATING;So;0;ON;;;;;N;;;;; 1F575;SLEUTH OR SPY;So;0;ON;;;;;N;;;;; 1F576;DARK SUNGLASSES;So;0;ON;;;;;N;;;;; 1F577;SPIDER;So;0;ON;;;;;N;;;;; 1F578;SPIDER WEB;So;0;ON;;;;;N;;;;; 1F579;JOYSTICK;So;0;ON;;;;;N;;;;; 1F57A;MAN DANCING;So;0;ON;;;;;N;;;;; 1F57B;LEFT HAND TELEPHONE RECEIVER;So;0;ON;;;;;N;;;;; 1F57C;TELEPHONE RECEIVER WITH PAGE;So;0;ON;;;;;N;;;;; 1F57D;RIGHT HAND TELEPHONE RECEIVER;So;0;ON;;;;;N;;;;; 1F57E;WHITE TOUCHTONE TELEPHONE;So;0;ON;;;;;N;;;;; 1F57F;BLACK TOUCHTONE TELEPHONE;So;0;ON;;;;;N;;;;; 1F580;TELEPHONE ON TOP OF MODEM;So;0;ON;;;;;N;;;;; 1F581;CLAMSHELL MOBILE PHONE;So;0;ON;;;;;N;;;;; 1F582;BACK OF ENVELOPE;So;0;ON;;;;;N;;;;; 1F583;STAMPED ENVELOPE;So;0;ON;;;;;N;;;;; 1F584;ENVELOPE WITH LIGHTNING;So;0;ON;;;;;N;;;;; 1F585;FLYING ENVELOPE;So;0;ON;;;;;N;;;;; 1F586;PEN OVER STAMPED ENVELOPE;So;0;ON;;;;;N;;;;; 1F587;LINKED PAPERCLIPS;So;0;ON;;;;;N;;;;; 1F588;BLACK PUSHPIN;So;0;ON;;;;;N;;;;; 1F589;LOWER LEFT PENCIL;So;0;ON;;;;;N;;;;; 1F58A;LOWER LEFT BALLPOINT PEN;So;0;ON;;;;;N;;;;; 1F58B;LOWER LEFT FOUNTAIN PEN;So;0;ON;;;;;N;;;;; 1F58C;LOWER LEFT PAINTBRUSH;So;0;ON;;;;;N;;;;; 1F58D;LOWER LEFT CRAYON;So;0;ON;;;;;N;;;;; 1F58E;LEFT WRITING HAND;So;0;ON;;;;;N;;;;; 1F58F;TURNED OK HAND SIGN;So;0;ON;;;;;N;;;;; 1F590;RAISED HAND WITH FINGERS SPLAYED;So;0;ON;;;;;N;;;;; 1F591;REVERSED RAISED HAND WITH FINGERS SPLAYED;So;0;ON;;;;;N;;;;; 1F592;REVERSED THUMBS UP SIGN;So;0;ON;;;;;N;;;;; 1F593;REVERSED THUMBS DOWN SIGN;So;0;ON;;;;;N;;;;; 1F594;REVERSED VICTORY HAND;So;0;ON;;;;;N;;;;; 1F595;REVERSED HAND WITH MIDDLE FINGER EXTENDED;So;0;ON;;;;;N;;;;; 1F596;RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS;So;0;ON;;;;;N;;;;; 1F597;WHITE DOWN POINTING LEFT HAND INDEX;So;0;ON;;;;;N;;;;; 1F598;SIDEWAYS WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;; 1F599;SIDEWAYS WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; 1F59A;SIDEWAYS BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;; 1F59B;SIDEWAYS BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; 1F59C;BLACK LEFT POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; 1F59D;BLACK RIGHT POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; 1F59E;SIDEWAYS WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;; 1F59F;SIDEWAYS WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;; 1F5A0;SIDEWAYS BLACK UP POINTING INDEX;So;0;ON;;;;;N;;;;; 1F5A1;SIDEWAYS BLACK DOWN POINTING INDEX;So;0;ON;;;;;N;;;;; 1F5A2;BLACK UP POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; 1F5A3;BLACK DOWN POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; 1F5A4;BLACK HEART;So;0;ON;;;;;N;;;;; 1F5A5;DESKTOP COMPUTER;So;0;ON;;;;;N;;;;; 1F5A6;KEYBOARD AND MOUSE;So;0;ON;;;;;N;;;;; 1F5A7;THREE NETWORKED COMPUTERS;So;0;ON;;;;;N;;;;; 1F5A8;PRINTER;So;0;ON;;;;;N;;;;; 1F5A9;POCKET CALCULATOR;So;0;ON;;;;;N;;;;; 1F5AA;BLACK HARD SHELL FLOPPY DISK;So;0;ON;;;;;N;;;;; 1F5AB;WHITE HARD SHELL FLOPPY DISK;So;0;ON;;;;;N;;;;; 1F5AC;SOFT SHELL FLOPPY DISK;So;0;ON;;;;;N;;;;; 1F5AD;TAPE CARTRIDGE;So;0;ON;;;;;N;;;;; 1F5AE;WIRED KEYBOARD;So;0;ON;;;;;N;;;;; 1F5AF;ONE BUTTON MOUSE;So;0;ON;;;;;N;;;;; 1F5B0;TWO BUTTON MOUSE;So;0;ON;;;;;N;;;;; 1F5B1;THREE BUTTON MOUSE;So;0;ON;;;;;N;;;;; 1F5B2;TRACKBALL;So;0;ON;;;;;N;;;;; 1F5B3;OLD PERSONAL COMPUTER;So;0;ON;;;;;N;;;;; 1F5B4;HARD DISK;So;0;ON;;;;;N;;;;; 1F5B5;SCREEN;So;0;ON;;;;;N;;;;; 1F5B6;PRINTER ICON;So;0;ON;;;;;N;;;;; 1F5B7;FAX ICON;So;0;ON;;;;;N;;;;; 1F5B8;OPTICAL DISC ICON;So;0;ON;;;;;N;;;;; 1F5B9;DOCUMENT WITH TEXT;So;0;ON;;;;;N;;;;; 1F5BA;DOCUMENT WITH TEXT AND PICTURE;So;0;ON;;;;;N;;;;; 1F5BB;DOCUMENT WITH PICTURE;So;0;ON;;;;;N;;;;; 1F5BC;FRAME WITH PICTURE;So;0;ON;;;;;N;;;;; 1F5BD;FRAME WITH TILES;So;0;ON;;;;;N;;;;; 1F5BE;FRAME WITH AN X;So;0;ON;;;;;N;;;;; 1F5BF;BLACK FOLDER;So;0;ON;;;;;N;;;;; 1F5C0;FOLDER;So;0;ON;;;;;N;;;;; 1F5C1;OPEN FOLDER;So;0;ON;;;;;N;;;;; 1F5C2;CARD INDEX DIVIDERS;So;0;ON;;;;;N;;;;; 1F5C3;CARD FILE BOX;So;0;ON;;;;;N;;;;; 1F5C4;FILE CABINET;So;0;ON;;;;;N;;;;; 1F5C5;EMPTY NOTE;So;0;ON;;;;;N;;;;; 1F5C6;EMPTY NOTE PAGE;So;0;ON;;;;;N;;;;; 1F5C7;EMPTY NOTE PAD;So;0;ON;;;;;N;;;;; 1F5C8;NOTE;So;0;ON;;;;;N;;;;; 1F5C9;NOTE PAGE;So;0;ON;;;;;N;;;;; 1F5CA;NOTE PAD;So;0;ON;;;;;N;;;;; 1F5CB;EMPTY DOCUMENT;So;0;ON;;;;;N;;;;; 1F5CC;EMPTY PAGE;So;0;ON;;;;;N;;;;; 1F5CD;EMPTY PAGES;So;0;ON;;;;;N;;;;; 1F5CE;DOCUMENT;So;0;ON;;;;;N;;;;; 1F5CF;PAGE;So;0;ON;;;;;N;;;;; 1F5D0;PAGES;So;0;ON;;;;;N;;;;; 1F5D1;WASTEBASKET;So;0;ON;;;;;N;;;;; 1F5D2;SPIRAL NOTE PAD;So;0;ON;;;;;N;;;;; 1F5D3;SPIRAL CALENDAR PAD;So;0;ON;;;;;N;;;;; 1F5D4;DESKTOP WINDOW;So;0;ON;;;;;N;;;;; 1F5D5;MINIMIZE;So;0;ON;;;;;N;;;;; 1F5D6;MAXIMIZE;So;0;ON;;;;;N;;;;; 1F5D7;OVERLAP;So;0;ON;;;;;N;;;;; 1F5D8;CLOCKWISE RIGHT AND LEFT SEMICIRCLE ARROWS;So;0;ON;;;;;N;;;;; 1F5D9;CANCELLATION X;So;0;ON;;;;;N;;;;; 1F5DA;INCREASE FONT SIZE SYMBOL;So;0;ON;;;;;N;;;;; 1F5DB;DECREASE FONT SIZE SYMBOL;So;0;ON;;;;;N;;;;; 1F5DC;COMPRESSION;So;0;ON;;;;;N;;;;; 1F5DD;OLD KEY;So;0;ON;;;;;N;;;;; 1F5DE;ROLLED-UP NEWSPAPER;So;0;ON;;;;;N;;;;; 1F5DF;PAGE WITH CIRCLED TEXT;So;0;ON;;;;;N;;;;; 1F5E0;STOCK CHART;So;0;ON;;;;;N;;;;; 1F5E1;DAGGER KNIFE;So;0;ON;;;;;N;;;;; 1F5E2;LIPS;So;0;ON;;;;;N;;;;; 1F5E3;SPEAKING HEAD IN SILHOUETTE;So;0;ON;;;;;N;;;;; 1F5E4;THREE RAYS ABOVE;So;0;ON;;;;;N;;;;; 1F5E5;THREE RAYS BELOW;So;0;ON;;;;;N;;;;; 1F5E6;THREE RAYS LEFT;So;0;ON;;;;;N;;;;; 1F5E7;THREE RAYS RIGHT;So;0;ON;;;;;N;;;;; 1F5E8;LEFT SPEECH BUBBLE;So;0;ON;;;;;N;;;;; 1F5E9;RIGHT SPEECH BUBBLE;So;0;ON;;;;;N;;;;; 1F5EA;TWO SPEECH BUBBLES;So;0;ON;;;;;N;;;;; 1F5EB;THREE SPEECH BUBBLES;So;0;ON;;;;;N;;;;; 1F5EC;LEFT THOUGHT BUBBLE;So;0;ON;;;;;N;;;;; 1F5ED;RIGHT THOUGHT BUBBLE;So;0;ON;;;;;N;;;;; 1F5EE;LEFT ANGER BUBBLE;So;0;ON;;;;;N;;;;; 1F5EF;RIGHT ANGER BUBBLE;So;0;ON;;;;;N;;;;; 1F5F0;MOOD BUBBLE;So;0;ON;;;;;N;;;;; 1F5F1;LIGHTNING MOOD BUBBLE;So;0;ON;;;;;N;;;;; 1F5F2;LIGHTNING MOOD;So;0;ON;;;;;N;;;;; 1F5F3;BALLOT BOX WITH BALLOT;So;0;ON;;;;;N;;;;; 1F5F4;BALLOT SCRIPT X;So;0;ON;;;;;N;;;;; 1F5F5;BALLOT BOX WITH SCRIPT X;So;0;ON;;;;;N;;;;; 1F5F6;BALLOT BOLD SCRIPT X;So;0;ON;;;;;N;;;;; 1F5F7;BALLOT BOX WITH BOLD SCRIPT X;So;0;ON;;;;;N;;;;; 1F5F8;LIGHT CHECK MARK;So;0;ON;;;;;N;;;;; 1F5F9;BALLOT BOX WITH BOLD CHECK;So;0;ON;;;;;N;;;;; 1F5FA;WORLD MAP;So;0;ON;;;;;N;;;;; 1F5FB;MOUNT FUJI;So;0;ON;;;;;N;;;;; 1F5FC;TOKYO TOWER;So;0;ON;;;;;N;;;;; 1F5FD;STATUE OF LIBERTY;So;0;ON;;;;;N;;;;; 1F5FE;SILHOUETTE OF JAPAN;So;0;ON;;;;;N;;;;; 1F5FF;MOYAI;So;0;ON;;;;;N;;;;; 1F600;GRINNING FACE;So;0;ON;;;;;N;;;;; 1F601;GRINNING FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;; 1F602;FACE WITH TEARS OF JOY;So;0;ON;;;;;N;;;;; 1F603;SMILING FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; 1F604;SMILING FACE WITH OPEN MOUTH AND SMILING EYES;So;0;ON;;;;;N;;;;; 1F605;SMILING FACE WITH OPEN MOUTH AND COLD SWEAT;So;0;ON;;;;;N;;;;; 1F606;SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES;So;0;ON;;;;;N;;;;; 1F607;SMILING FACE WITH HALO;So;0;ON;;;;;N;;;;; 1F608;SMILING FACE WITH HORNS;So;0;ON;;;;;N;;;;; 1F609;WINKING FACE;So;0;ON;;;;;N;;;;; 1F60A;SMILING FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;; 1F60B;FACE SAVOURING DELICIOUS FOOD;So;0;ON;;;;;N;;;;; 1F60C;RELIEVED FACE;So;0;ON;;;;;N;;;;; 1F60D;SMILING FACE WITH HEART-SHAPED EYES;So;0;ON;;;;;N;;;;; 1F60E;SMILING FACE WITH SUNGLASSES;So;0;ON;;;;;N;;;;; 1F60F;SMIRKING FACE;So;0;ON;;;;;N;;;;; 1F610;NEUTRAL FACE;So;0;ON;;;;;N;;;;; 1F611;EXPRESSIONLESS FACE;So;0;ON;;;;;N;;;;; 1F612;UNAMUSED FACE;So;0;ON;;;;;N;;;;; 1F613;FACE WITH COLD SWEAT;So;0;ON;;;;;N;;;;; 1F614;PENSIVE FACE;So;0;ON;;;;;N;;;;; 1F615;CONFUSED FACE;So;0;ON;;;;;N;;;;; 1F616;CONFOUNDED FACE;So;0;ON;;;;;N;;;;; 1F617;KISSING FACE;So;0;ON;;;;;N;;;;; 1F618;FACE THROWING A KISS;So;0;ON;;;;;N;;;;; 1F619;KISSING FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;; 1F61A;KISSING FACE WITH CLOSED EYES;So;0;ON;;;;;N;;;;; 1F61B;FACE WITH STUCK-OUT TONGUE;So;0;ON;;;;;N;;;;; 1F61C;FACE WITH STUCK-OUT TONGUE AND WINKING EYE;So;0;ON;;;;;N;;;;; 1F61D;FACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYES;So;0;ON;;;;;N;;;;; 1F61E;DISAPPOINTED FACE;So;0;ON;;;;;N;;;;; 1F61F;WORRIED FACE;So;0;ON;;;;;N;;;;; 1F620;ANGRY FACE;So;0;ON;;;;;N;;;;; 1F621;POUTING FACE;So;0;ON;;;;;N;;;;; 1F622;CRYING FACE;So;0;ON;;;;;N;;;;; 1F623;PERSEVERING FACE;So;0;ON;;;;;N;;;;; 1F624;FACE WITH LOOK OF TRIUMPH;So;0;ON;;;;;N;;;;; 1F625;DISAPPOINTED BUT RELIEVED FACE;So;0;ON;;;;;N;;;;; 1F626;FROWNING FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; 1F627;ANGUISHED FACE;So;0;ON;;;;;N;;;;; 1F628;FEARFUL FACE;So;0;ON;;;;;N;;;;; 1F629;WEARY FACE;So;0;ON;;;;;N;;;;; 1F62A;SLEEPY FACE;So;0;ON;;;;;N;;;;; 1F62B;TIRED FACE;So;0;ON;;;;;N;;;;; 1F62C;GRIMACING FACE;So;0;ON;;;;;N;;;;; 1F62D;LOUDLY CRYING FACE;So;0;ON;;;;;N;;;;; 1F62E;FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; 1F62F;HUSHED FACE;So;0;ON;;;;;N;;;;; 1F630;FACE WITH OPEN MOUTH AND COLD SWEAT;So;0;ON;;;;;N;;;;; 1F631;FACE SCREAMING IN FEAR;So;0;ON;;;;;N;;;;; 1F632;ASTONISHED FACE;So;0;ON;;;;;N;;;;; 1F633;FLUSHED FACE;So;0;ON;;;;;N;;;;; 1F634;SLEEPING FACE;So;0;ON;;;;;N;;;;; 1F635;DIZZY FACE;So;0;ON;;;;;N;;;;; 1F636;FACE WITHOUT MOUTH;So;0;ON;;;;;N;;;;; 1F637;FACE WITH MEDICAL MASK;So;0;ON;;;;;N;;;;; 1F638;GRINNING CAT FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;; 1F639;CAT FACE WITH TEARS OF JOY;So;0;ON;;;;;N;;;;; 1F63A;SMILING CAT FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; 1F63B;SMILING CAT FACE WITH HEART-SHAPED EYES;So;0;ON;;;;;N;;;;; 1F63C;CAT FACE WITH WRY SMILE;So;0;ON;;;;;N;;;;; 1F63D;KISSING CAT FACE WITH CLOSED EYES;So;0;ON;;;;;N;;;;; 1F63E;POUTING CAT FACE;So;0;ON;;;;;N;;;;; 1F63F;CRYING CAT FACE;So;0;ON;;;;;N;;;;; 1F640;WEARY CAT FACE;So;0;ON;;;;;N;;;;; 1F641;SLIGHTLY FROWNING FACE;So;0;ON;;;;;N;;;;; 1F642;SLIGHTLY SMILING FACE;So;0;ON;;;;;N;;;;; 1F643;UPSIDE-DOWN FACE;So;0;ON;;;;;N;;;;; 1F644;FACE WITH ROLLING EYES;So;0;ON;;;;;N;;;;; 1F645;FACE WITH NO GOOD GESTURE;So;0;ON;;;;;N;;;;; 1F646;FACE WITH OK GESTURE;So;0;ON;;;;;N;;;;; 1F647;PERSON BOWING DEEPLY;So;0;ON;;;;;N;;;;; 1F648;SEE-NO-EVIL MONKEY;So;0;ON;;;;;N;;;;; 1F649;HEAR-NO-EVIL MONKEY;So;0;ON;;;;;N;;;;; 1F64A;SPEAK-NO-EVIL MONKEY;So;0;ON;;;;;N;;;;; 1F64B;HAPPY PERSON RAISING ONE HAND;So;0;ON;;;;;N;;;;; 1F64C;PERSON RAISING BOTH HANDS IN CELEBRATION;So;0;ON;;;;;N;;;;; 1F64D;PERSON FROWNING;So;0;ON;;;;;N;;;;; 1F64E;PERSON WITH POUTING FACE;So;0;ON;;;;;N;;;;; 1F64F;PERSON WITH FOLDED HANDS;So;0;ON;;;;;N;;;;; 1F650;NORTH WEST POINTING LEAF;So;0;ON;;;;;N;;;;; 1F651;SOUTH WEST POINTING LEAF;So;0;ON;;;;;N;;;;; 1F652;NORTH EAST POINTING LEAF;So;0;ON;;;;;N;;;;; 1F653;SOUTH EAST POINTING LEAF;So;0;ON;;;;;N;;;;; 1F654;TURNED NORTH WEST POINTING LEAF;So;0;ON;;;;;N;;;;; 1F655;TURNED SOUTH WEST POINTING LEAF;So;0;ON;;;;;N;;;;; 1F656;TURNED NORTH EAST POINTING LEAF;So;0;ON;;;;;N;;;;; 1F657;TURNED SOUTH EAST POINTING LEAF;So;0;ON;;;;;N;;;;; 1F658;NORTH WEST POINTING VINE LEAF;So;0;ON;;;;;N;;;;; 1F659;SOUTH WEST POINTING VINE LEAF;So;0;ON;;;;;N;;;;; 1F65A;NORTH EAST POINTING VINE LEAF;So;0;ON;;;;;N;;;;; 1F65B;SOUTH EAST POINTING VINE LEAF;So;0;ON;;;;;N;;;;; 1F65C;HEAVY NORTH WEST POINTING VINE LEAF;So;0;ON;;;;;N;;;;; 1F65D;HEAVY SOUTH WEST POINTING VINE LEAF;So;0;ON;;;;;N;;;;; 1F65E;HEAVY NORTH EAST POINTING VINE LEAF;So;0;ON;;;;;N;;;;; 1F65F;HEAVY SOUTH EAST POINTING VINE LEAF;So;0;ON;;;;;N;;;;; 1F660;NORTH WEST POINTING BUD;So;0;ON;;;;;N;;;;; 1F661;SOUTH WEST POINTING BUD;So;0;ON;;;;;N;;;;; 1F662;NORTH EAST POINTING BUD;So;0;ON;;;;;N;;;;; 1F663;SOUTH EAST POINTING BUD;So;0;ON;;;;;N;;;;; 1F664;HEAVY NORTH WEST POINTING BUD;So;0;ON;;;;;N;;;;; 1F665;HEAVY SOUTH WEST POINTING BUD;So;0;ON;;;;;N;;;;; 1F666;HEAVY NORTH EAST POINTING BUD;So;0;ON;;;;;N;;;;; 1F667;HEAVY SOUTH EAST POINTING BUD;So;0;ON;;;;;N;;;;; 1F668;HOLLOW QUILT SQUARE ORNAMENT;So;0;ON;;;;;N;;;;; 1F669;HOLLOW QUILT SQUARE ORNAMENT IN BLACK SQUARE;So;0;ON;;;;;N;;;;; 1F66A;SOLID QUILT SQUARE ORNAMENT;So;0;ON;;;;;N;;;;; 1F66B;SOLID QUILT SQUARE ORNAMENT IN BLACK SQUARE;So;0;ON;;;;;N;;;;; 1F66C;LEFTWARDS ROCKET;So;0;ON;;;;;N;;;;; 1F66D;UPWARDS ROCKET;So;0;ON;;;;;N;;;;; 1F66E;RIGHTWARDS ROCKET;So;0;ON;;;;;N;;;;; 1F66F;DOWNWARDS ROCKET;So;0;ON;;;;;N;;;;; 1F670;SCRIPT LIGATURE ET ORNAMENT;So;0;ON;;;;;N;;;;; 1F671;HEAVY SCRIPT LIGATURE ET ORNAMENT;So;0;ON;;;;;N;;;;; 1F672;LIGATURE OPEN ET ORNAMENT;So;0;ON;;;;;N;;;;; 1F673;HEAVY LIGATURE OPEN ET ORNAMENT;So;0;ON;;;;;N;;;;; 1F674;HEAVY AMPERSAND ORNAMENT;So;0;ON;;;;;N;;;;; 1F675;SWASH AMPERSAND ORNAMENT;So;0;ON;;;;;N;;;;; 1F676;SANS-SERIF HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 1F677;SANS-SERIF HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 1F678;SANS-SERIF HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 1F679;HEAVY INTERROBANG ORNAMENT;So;0;ON;;;;;N;;;;; 1F67A;SANS-SERIF INTERROBANG ORNAMENT;So;0;ON;;;;;N;;;;; 1F67B;HEAVY SANS-SERIF INTERROBANG ORNAMENT;So;0;ON;;;;;N;;;;; 1F67C;VERY HEAVY SOLIDUS;So;0;ON;;;;;N;;;;; 1F67D;VERY HEAVY REVERSE SOLIDUS;So;0;ON;;;;;N;;;;; 1F67E;CHECKER BOARD;So;0;ON;;;;;N;;;;; 1F67F;REVERSE CHECKER BOARD;So;0;ON;;;;;N;;;;; 1F680;ROCKET;So;0;ON;;;;;N;;;;; 1F681;HELICOPTER;So;0;ON;;;;;N;;;;; 1F682;STEAM LOCOMOTIVE;So;0;ON;;;;;N;;;;; 1F683;RAILWAY CAR;So;0;ON;;;;;N;;;;; 1F684;HIGH-SPEED TRAIN;So;0;ON;;;;;N;;;;; 1F685;HIGH-SPEED TRAIN WITH BULLET NOSE;So;0;ON;;;;;N;;;;; 1F686;TRAIN;So;0;ON;;;;;N;;;;; 1F687;METRO;So;0;ON;;;;;N;;;;; 1F688;LIGHT RAIL;So;0;ON;;;;;N;;;;; 1F689;STATION;So;0;ON;;;;;N;;;;; 1F68A;TRAM;So;0;ON;;;;;N;;;;; 1F68B;TRAM CAR;So;0;ON;;;;;N;;;;; 1F68C;BUS;So;0;ON;;;;;N;;;;; 1F68D;ONCOMING BUS;So;0;ON;;;;;N;;;;; 1F68E;TROLLEYBUS;So;0;ON;;;;;N;;;;; 1F68F;BUS STOP;So;0;ON;;;;;N;;;;; 1F690;MINIBUS;So;0;ON;;;;;N;;;;; 1F691;AMBULANCE;So;0;ON;;;;;N;;;;; 1F692;FIRE ENGINE;So;0;ON;;;;;N;;;;; 1F693;POLICE CAR;So;0;ON;;;;;N;;;;; 1F694;ONCOMING POLICE CAR;So;0;ON;;;;;N;;;;; 1F695;TAXI;So;0;ON;;;;;N;;;;; 1F696;ONCOMING TAXI;So;0;ON;;;;;N;;;;; 1F697;AUTOMOBILE;So;0;ON;;;;;N;;;;; 1F698;ONCOMING AUTOMOBILE;So;0;ON;;;;;N;;;;; 1F699;RECREATIONAL VEHICLE;So;0;ON;;;;;N;;;;; 1F69A;DELIVERY TRUCK;So;0;ON;;;;;N;;;;; 1F69B;ARTICULATED LORRY;So;0;ON;;;;;N;;;;; 1F69C;TRACTOR;So;0;ON;;;;;N;;;;; 1F69D;MONORAIL;So;0;ON;;;;;N;;;;; 1F69E;MOUNTAIN RAILWAY;So;0;ON;;;;;N;;;;; 1F69F;SUSPENSION RAILWAY;So;0;ON;;;;;N;;;;; 1F6A0;MOUNTAIN CABLEWAY;So;0;ON;;;;;N;;;;; 1F6A1;AERIAL TRAMWAY;So;0;ON;;;;;N;;;;; 1F6A2;SHIP;So;0;ON;;;;;N;;;;; 1F6A3;ROWBOAT;So;0;ON;;;;;N;;;;; 1F6A4;SPEEDBOAT;So;0;ON;;;;;N;;;;; 1F6A5;HORIZONTAL TRAFFIC LIGHT;So;0;ON;;;;;N;;;;; 1F6A6;VERTICAL TRAFFIC LIGHT;So;0;ON;;;;;N;;;;; 1F6A7;CONSTRUCTION SIGN;So;0;ON;;;;;N;;;;; 1F6A8;POLICE CARS REVOLVING LIGHT;So;0;ON;;;;;N;;;;; 1F6A9;TRIANGULAR FLAG ON POST;So;0;ON;;;;;N;;;;; 1F6AA;DOOR;So;0;ON;;;;;N;;;;; 1F6AB;NO ENTRY SIGN;So;0;ON;;;;;N;;;;; 1F6AC;SMOKING SYMBOL;So;0;ON;;;;;N;;;;; 1F6AD;NO SMOKING SYMBOL;So;0;ON;;;;;N;;;;; 1F6AE;PUT LITTER IN ITS PLACE SYMBOL;So;0;ON;;;;;N;;;;; 1F6AF;DO NOT LITTER SYMBOL;So;0;ON;;;;;N;;;;; 1F6B0;POTABLE WATER SYMBOL;So;0;ON;;;;;N;;;;; 1F6B1;NON-POTABLE WATER SYMBOL;So;0;ON;;;;;N;;;;; 1F6B2;BICYCLE;So;0;ON;;;;;N;;;;; 1F6B3;NO BICYCLES;So;0;ON;;;;;N;;;;; 1F6B4;BICYCLIST;So;0;ON;;;;;N;;;;; 1F6B5;MOUNTAIN BICYCLIST;So;0;ON;;;;;N;;;;; 1F6B6;PEDESTRIAN;So;0;ON;;;;;N;;;;; 1F6B7;NO PEDESTRIANS;So;0;ON;;;;;N;;;;; 1F6B8;CHILDREN CROSSING;So;0;ON;;;;;N;;;;; 1F6B9;MENS SYMBOL;So;0;ON;;;;;N;;;;; 1F6BA;WOMENS SYMBOL;So;0;ON;;;;;N;;;;; 1F6BB;RESTROOM;So;0;ON;;;;;N;;;;; 1F6BC;BABY SYMBOL;So;0;ON;;;;;N;;;;; 1F6BD;TOILET;So;0;ON;;;;;N;;;;; 1F6BE;WATER CLOSET;So;0;ON;;;;;N;;;;; 1F6BF;SHOWER;So;0;ON;;;;;N;;;;; 1F6C0;BATH;So;0;ON;;;;;N;;;;; 1F6C1;BATHTUB;So;0;ON;;;;;N;;;;; 1F6C2;PASSPORT CONTROL;So;0;ON;;;;;N;;;;; 1F6C3;CUSTOMS;So;0;ON;;;;;N;;;;; 1F6C4;BAGGAGE CLAIM;So;0;ON;;;;;N;;;;; 1F6C5;LEFT LUGGAGE;So;0;ON;;;;;N;;;;; 1F6C6;TRIANGLE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;; 1F6C7;PROHIBITED SIGN;So;0;ON;;;;;N;;;;; 1F6C8;CIRCLED INFORMATION SOURCE;So;0;ON;;;;;N;;;;; 1F6C9;BOYS SYMBOL;So;0;ON;;;;;N;;;;; 1F6CA;GIRLS SYMBOL;So;0;ON;;;;;N;;;;; 1F6CB;COUCH AND LAMP;So;0;ON;;;;;N;;;;; 1F6CC;SLEEPING ACCOMMODATION;So;0;ON;;;;;N;;;;; 1F6CD;SHOPPING BAGS;So;0;ON;;;;;N;;;;; 1F6CE;BELLHOP BELL;So;0;ON;;;;;N;;;;; 1F6CF;BED;So;0;ON;;;;;N;;;;; 1F6D0;PLACE OF WORSHIP;So;0;ON;;;;;N;;;;; 1F6D1;OCTAGONAL SIGN;So;0;ON;;;;;N;;;;; 1F6D2;SHOPPING TROLLEY;So;0;ON;;;;;N;;;;; 1F6D3;STUPA;So;0;ON;;;;;N;;;;; 1F6D4;PAGODA;So;0;ON;;;;;N;;;;; 1F6D5;HINDU TEMPLE;So;0;ON;;;;;N;;;;; 1F6D6;HUT;So;0;ON;;;;;N;;;;; 1F6D7;ELEVATOR;So;0;ON;;;;;N;;;;; 1F6DD;PLAYGROUND SLIDE;So;0;ON;;;;;N;;;;; 1F6DE;WHEEL;So;0;ON;;;;;N;;;;; 1F6DF;RING BUOY;So;0;ON;;;;;N;;;;; 1F6E0;HAMMER AND WRENCH;So;0;ON;;;;;N;;;;; 1F6E1;SHIELD;So;0;ON;;;;;N;;;;; 1F6E2;OIL DRUM;So;0;ON;;;;;N;;;;; 1F6E3;MOTORWAY;So;0;ON;;;;;N;;;;; 1F6E4;RAILWAY TRACK;So;0;ON;;;;;N;;;;; 1F6E5;MOTOR BOAT;So;0;ON;;;;;N;;;;; 1F6E6;UP-POINTING MILITARY AIRPLANE;So;0;ON;;;;;N;;;;; 1F6E7;UP-POINTING AIRPLANE;So;0;ON;;;;;N;;;;; 1F6E8;UP-POINTING SMALL AIRPLANE;So;0;ON;;;;;N;;;;; 1F6E9;SMALL AIRPLANE;So;0;ON;;;;;N;;;;; 1F6EA;NORTHEAST-POINTING AIRPLANE;So;0;ON;;;;;N;;;;; 1F6EB;AIRPLANE DEPARTURE;So;0;ON;;;;;N;;;;; 1F6EC;AIRPLANE ARRIVING;So;0;ON;;;;;N;;;;; 1F6F0;SATELLITE;So;0;ON;;;;;N;;;;; 1F6F1;ONCOMING FIRE ENGINE;So;0;ON;;;;;N;;;;; 1F6F2;DIESEL LOCOMOTIVE;So;0;ON;;;;;N;;;;; 1F6F3;PASSENGER SHIP;So;0;ON;;;;;N;;;;; 1F6F4;SCOOTER;So;0;ON;;;;;N;;;;; 1F6F5;MOTOR SCOOTER;So;0;ON;;;;;N;;;;; 1F6F6;CANOE;So;0;ON;;;;;N;;;;; 1F6F7;SLED;So;0;ON;;;;;N;;;;; 1F6F8;FLYING SAUCER;So;0;ON;;;;;N;;;;; 1F6F9;SKATEBOARD;So;0;ON;;;;;N;;;;; 1F6FA;AUTO RICKSHAW;So;0;ON;;;;;N;;;;; 1F6FB;PICKUP TRUCK;So;0;ON;;;;;N;;;;; 1F6FC;ROLLER SKATE;So;0;ON;;;;;N;;;;; 1F700;ALCHEMICAL SYMBOL FOR QUINTESSENCE;So;0;ON;;;;;N;;;;; 1F701;ALCHEMICAL SYMBOL FOR AIR;So;0;ON;;;;;N;;;;; 1F702;ALCHEMICAL SYMBOL FOR FIRE;So;0;ON;;;;;N;;;;; 1F703;ALCHEMICAL SYMBOL FOR EARTH;So;0;ON;;;;;N;;;;; 1F704;ALCHEMICAL SYMBOL FOR WATER;So;0;ON;;;;;N;;;;; 1F705;ALCHEMICAL SYMBOL FOR AQUAFORTIS;So;0;ON;;;;;N;;;;; 1F706;ALCHEMICAL SYMBOL FOR AQUA REGIA;So;0;ON;;;;;N;;;;; 1F707;ALCHEMICAL SYMBOL FOR AQUA REGIA-2;So;0;ON;;;;;N;;;;; 1F708;ALCHEMICAL SYMBOL FOR AQUA VITAE;So;0;ON;;;;;N;;;;; 1F709;ALCHEMICAL SYMBOL FOR AQUA VITAE-2;So;0;ON;;;;;N;;;;; 1F70A;ALCHEMICAL SYMBOL FOR VINEGAR;So;0;ON;;;;;N;;;;; 1F70B;ALCHEMICAL SYMBOL FOR VINEGAR-2;So;0;ON;;;;;N;;;;; 1F70C;ALCHEMICAL SYMBOL FOR VINEGAR-3;So;0;ON;;;;;N;;;;; 1F70D;ALCHEMICAL SYMBOL FOR SULFUR;So;0;ON;;;;;N;;;;; 1F70E;ALCHEMICAL SYMBOL FOR PHILOSOPHERS SULFUR;So;0;ON;;;;;N;;;;; 1F70F;ALCHEMICAL SYMBOL FOR BLACK SULFUR;So;0;ON;;;;;N;;;;; 1F710;ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE;So;0;ON;;;;;N;;;;; 1F711;ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-2;So;0;ON;;;;;N;;;;; 1F712;ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-3;So;0;ON;;;;;N;;;;; 1F713;ALCHEMICAL SYMBOL FOR CINNABAR;So;0;ON;;;;;N;;;;; 1F714;ALCHEMICAL SYMBOL FOR SALT;So;0;ON;;;;;N;;;;; 1F715;ALCHEMICAL SYMBOL FOR NITRE;So;0;ON;;;;;N;;;;; 1F716;ALCHEMICAL SYMBOL FOR VITRIOL;So;0;ON;;;;;N;;;;; 1F717;ALCHEMICAL SYMBOL FOR VITRIOL-2;So;0;ON;;;;;N;;;;; 1F718;ALCHEMICAL SYMBOL FOR ROCK SALT;So;0;ON;;;;;N;;;;; 1F719;ALCHEMICAL SYMBOL FOR ROCK SALT-2;So;0;ON;;;;;N;;;;; 1F71A;ALCHEMICAL SYMBOL FOR GOLD;So;0;ON;;;;;N;;;;; 1F71B;ALCHEMICAL SYMBOL FOR SILVER;So;0;ON;;;;;N;;;;; 1F71C;ALCHEMICAL SYMBOL FOR IRON ORE;So;0;ON;;;;;N;;;;; 1F71D;ALCHEMICAL SYMBOL FOR IRON ORE-2;So;0;ON;;;;;N;;;;; 1F71E;ALCHEMICAL SYMBOL FOR CROCUS OF IRON;So;0;ON;;;;;N;;;;; 1F71F;ALCHEMICAL SYMBOL FOR REGULUS OF IRON;So;0;ON;;;;;N;;;;; 1F720;ALCHEMICAL SYMBOL FOR COPPER ORE;So;0;ON;;;;;N;;;;; 1F721;ALCHEMICAL SYMBOL FOR IRON-COPPER ORE;So;0;ON;;;;;N;;;;; 1F722;ALCHEMICAL SYMBOL FOR SUBLIMATE OF COPPER;So;0;ON;;;;;N;;;;; 1F723;ALCHEMICAL SYMBOL FOR CROCUS OF COPPER;So;0;ON;;;;;N;;;;; 1F724;ALCHEMICAL SYMBOL FOR CROCUS OF COPPER-2;So;0;ON;;;;;N;;;;; 1F725;ALCHEMICAL SYMBOL FOR COPPER ANTIMONIATE;So;0;ON;;;;;N;;;;; 1F726;ALCHEMICAL SYMBOL FOR SALT OF COPPER ANTIMONIATE;So;0;ON;;;;;N;;;;; 1F727;ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF COPPER;So;0;ON;;;;;N;;;;; 1F728;ALCHEMICAL SYMBOL FOR VERDIGRIS;So;0;ON;;;;;N;;;;; 1F729;ALCHEMICAL SYMBOL FOR TIN ORE;So;0;ON;;;;;N;;;;; 1F72A;ALCHEMICAL SYMBOL FOR LEAD ORE;So;0;ON;;;;;N;;;;; 1F72B;ALCHEMICAL SYMBOL FOR ANTIMONY ORE;So;0;ON;;;;;N;;;;; 1F72C;ALCHEMICAL SYMBOL FOR SUBLIMATE OF ANTIMONY;So;0;ON;;;;;N;;;;; 1F72D;ALCHEMICAL SYMBOL FOR SALT OF ANTIMONY;So;0;ON;;;;;N;;;;; 1F72E;ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF ANTIMONY;So;0;ON;;;;;N;;;;; 1F72F;ALCHEMICAL SYMBOL FOR VINEGAR OF ANTIMONY;So;0;ON;;;;;N;;;;; 1F730;ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY;So;0;ON;;;;;N;;;;; 1F731;ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY-2;So;0;ON;;;;;N;;;;; 1F732;ALCHEMICAL SYMBOL FOR REGULUS;So;0;ON;;;;;N;;;;; 1F733;ALCHEMICAL SYMBOL FOR REGULUS-2;So;0;ON;;;;;N;;;;; 1F734;ALCHEMICAL SYMBOL FOR REGULUS-3;So;0;ON;;;;;N;;;;; 1F735;ALCHEMICAL SYMBOL FOR REGULUS-4;So;0;ON;;;;;N;;;;; 1F736;ALCHEMICAL SYMBOL FOR ALKALI;So;0;ON;;;;;N;;;;; 1F737;ALCHEMICAL SYMBOL FOR ALKALI-2;So;0;ON;;;;;N;;;;; 1F738;ALCHEMICAL SYMBOL FOR MARCASITE;So;0;ON;;;;;N;;;;; 1F739;ALCHEMICAL SYMBOL FOR SAL-AMMONIAC;So;0;ON;;;;;N;;;;; 1F73A;ALCHEMICAL SYMBOL FOR ARSENIC;So;0;ON;;;;;N;;;;; 1F73B;ALCHEMICAL SYMBOL FOR REALGAR;So;0;ON;;;;;N;;;;; 1F73C;ALCHEMICAL SYMBOL FOR REALGAR-2;So;0;ON;;;;;N;;;;; 1F73D;ALCHEMICAL SYMBOL FOR AURIPIGMENT;So;0;ON;;;;;N;;;;; 1F73E;ALCHEMICAL SYMBOL FOR BISMUTH ORE;So;0;ON;;;;;N;;;;; 1F73F;ALCHEMICAL SYMBOL FOR TARTAR;So;0;ON;;;;;N;;;;; 1F740;ALCHEMICAL SYMBOL FOR TARTAR-2;So;0;ON;;;;;N;;;;; 1F741;ALCHEMICAL SYMBOL FOR QUICK LIME;So;0;ON;;;;;N;;;;; 1F742;ALCHEMICAL SYMBOL FOR BORAX;So;0;ON;;;;;N;;;;; 1F743;ALCHEMICAL SYMBOL FOR BORAX-2;So;0;ON;;;;;N;;;;; 1F744;ALCHEMICAL SYMBOL FOR BORAX-3;So;0;ON;;;;;N;;;;; 1F745;ALCHEMICAL SYMBOL FOR ALUM;So;0;ON;;;;;N;;;;; 1F746;ALCHEMICAL SYMBOL FOR OIL;So;0;ON;;;;;N;;;;; 1F747;ALCHEMICAL SYMBOL FOR SPIRIT;So;0;ON;;;;;N;;;;; 1F748;ALCHEMICAL SYMBOL FOR TINCTURE;So;0;ON;;;;;N;;;;; 1F749;ALCHEMICAL SYMBOL FOR GUM;So;0;ON;;;;;N;;;;; 1F74A;ALCHEMICAL SYMBOL FOR WAX;So;0;ON;;;;;N;;;;; 1F74B;ALCHEMICAL SYMBOL FOR POWDER;So;0;ON;;;;;N;;;;; 1F74C;ALCHEMICAL SYMBOL FOR CALX;So;0;ON;;;;;N;;;;; 1F74D;ALCHEMICAL SYMBOL FOR TUTTY;So;0;ON;;;;;N;;;;; 1F74E;ALCHEMICAL SYMBOL FOR CAPUT MORTUUM;So;0;ON;;;;;N;;;;; 1F74F;ALCHEMICAL SYMBOL FOR SCEPTER OF JOVE;So;0;ON;;;;;N;;;;; 1F750;ALCHEMICAL SYMBOL FOR CADUCEUS;So;0;ON;;;;;N;;;;; 1F751;ALCHEMICAL SYMBOL FOR TRIDENT;So;0;ON;;;;;N;;;;; 1F752;ALCHEMICAL SYMBOL FOR STARRED TRIDENT;So;0;ON;;;;;N;;;;; 1F753;ALCHEMICAL SYMBOL FOR LODESTONE;So;0;ON;;;;;N;;;;; 1F754;ALCHEMICAL SYMBOL FOR SOAP;So;0;ON;;;;;N;;;;; 1F755;ALCHEMICAL SYMBOL FOR URINE;So;0;ON;;;;;N;;;;; 1F756;ALCHEMICAL SYMBOL FOR HORSE DUNG;So;0;ON;;;;;N;;;;; 1F757;ALCHEMICAL SYMBOL FOR ASHES;So;0;ON;;;;;N;;;;; 1F758;ALCHEMICAL SYMBOL FOR POT ASHES;So;0;ON;;;;;N;;;;; 1F759;ALCHEMICAL SYMBOL FOR BRICK;So;0;ON;;;;;N;;;;; 1F75A;ALCHEMICAL SYMBOL FOR POWDERED BRICK;So;0;ON;;;;;N;;;;; 1F75B;ALCHEMICAL SYMBOL FOR AMALGAM;So;0;ON;;;;;N;;;;; 1F75C;ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM;So;0;ON;;;;;N;;;;; 1F75D;ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM-2;So;0;ON;;;;;N;;;;; 1F75E;ALCHEMICAL SYMBOL FOR SUBLIMATION;So;0;ON;;;;;N;;;;; 1F75F;ALCHEMICAL SYMBOL FOR PRECIPITATE;So;0;ON;;;;;N;;;;; 1F760;ALCHEMICAL SYMBOL FOR DISTILL;So;0;ON;;;;;N;;;;; 1F761;ALCHEMICAL SYMBOL FOR DISSOLVE;So;0;ON;;;;;N;;;;; 1F762;ALCHEMICAL SYMBOL FOR DISSOLVE-2;So;0;ON;;;;;N;;;;; 1F763;ALCHEMICAL SYMBOL FOR PURIFY;So;0;ON;;;;;N;;;;; 1F764;ALCHEMICAL SYMBOL FOR PUTREFACTION;So;0;ON;;;;;N;;;;; 1F765;ALCHEMICAL SYMBOL FOR CRUCIBLE;So;0;ON;;;;;N;;;;; 1F766;ALCHEMICAL SYMBOL FOR CRUCIBLE-2;So;0;ON;;;;;N;;;;; 1F767;ALCHEMICAL SYMBOL FOR CRUCIBLE-3;So;0;ON;;;;;N;;;;; 1F768;ALCHEMICAL SYMBOL FOR CRUCIBLE-4;So;0;ON;;;;;N;;;;; 1F769;ALCHEMICAL SYMBOL FOR CRUCIBLE-5;So;0;ON;;;;;N;;;;; 1F76A;ALCHEMICAL SYMBOL FOR ALEMBIC;So;0;ON;;;;;N;;;;; 1F76B;ALCHEMICAL SYMBOL FOR BATH OF MARY;So;0;ON;;;;;N;;;;; 1F76C;ALCHEMICAL SYMBOL FOR BATH OF VAPOURS;So;0;ON;;;;;N;;;;; 1F76D;ALCHEMICAL SYMBOL FOR RETORT;So;0;ON;;;;;N;;;;; 1F76E;ALCHEMICAL SYMBOL FOR HOUR;So;0;ON;;;;;N;;;;; 1F76F;ALCHEMICAL SYMBOL FOR NIGHT;So;0;ON;;;;;N;;;;; 1F770;ALCHEMICAL SYMBOL FOR DAY-NIGHT;So;0;ON;;;;;N;;;;; 1F771;ALCHEMICAL SYMBOL FOR MONTH;So;0;ON;;;;;N;;;;; 1F772;ALCHEMICAL SYMBOL FOR HALF DRAM;So;0;ON;;;;;N;;;;; 1F773;ALCHEMICAL SYMBOL FOR HALF OUNCE;So;0;ON;;;;;N;;;;; 1F780;BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 1F781;BLACK UP-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 1F782;BLACK RIGHT-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 1F783;BLACK DOWN-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 1F784;BLACK SLIGHTLY SMALL CIRCLE;So;0;ON;;;;;N;;;;; 1F785;MEDIUM BOLD WHITE CIRCLE;So;0;ON;;;;;N;;;;; 1F786;BOLD WHITE CIRCLE;So;0;ON;;;;;N;;;;; 1F787;HEAVY WHITE CIRCLE;So;0;ON;;;;;N;;;;; 1F788;VERY HEAVY WHITE CIRCLE;So;0;ON;;;;;N;;;;; 1F789;EXTREMELY HEAVY WHITE CIRCLE;So;0;ON;;;;;N;;;;; 1F78A;WHITE CIRCLE CONTAINING BLACK SMALL CIRCLE;So;0;ON;;;;;N;;;;; 1F78B;ROUND TARGET;So;0;ON;;;;;N;;;;; 1F78C;BLACK TINY SQUARE;So;0;ON;;;;;N;;;;; 1F78D;BLACK SLIGHTLY SMALL SQUARE;So;0;ON;;;;;N;;;;; 1F78E;LIGHT WHITE SQUARE;So;0;ON;;;;;N;;;;; 1F78F;MEDIUM WHITE SQUARE;So;0;ON;;;;;N;;;;; 1F790;BOLD WHITE SQUARE;So;0;ON;;;;;N;;;;; 1F791;HEAVY WHITE SQUARE;So;0;ON;;;;;N;;;;; 1F792;VERY HEAVY WHITE SQUARE;So;0;ON;;;;;N;;;;; 1F793;EXTREMELY HEAVY WHITE SQUARE;So;0;ON;;;;;N;;;;; 1F794;WHITE SQUARE CONTAINING BLACK VERY SMALL SQUARE;So;0;ON;;;;;N;;;;; 1F795;WHITE SQUARE CONTAINING BLACK MEDIUM SQUARE;So;0;ON;;;;;N;;;;; 1F796;SQUARE TARGET;So;0;ON;;;;;N;;;;; 1F797;BLACK TINY DIAMOND;So;0;ON;;;;;N;;;;; 1F798;BLACK VERY SMALL DIAMOND;So;0;ON;;;;;N;;;;; 1F799;BLACK MEDIUM SMALL DIAMOND;So;0;ON;;;;;N;;;;; 1F79A;WHITE DIAMOND CONTAINING BLACK VERY SMALL DIAMOND;So;0;ON;;;;;N;;;;; 1F79B;WHITE DIAMOND CONTAINING BLACK MEDIUM DIAMOND;So;0;ON;;;;;N;;;;; 1F79C;DIAMOND TARGET;So;0;ON;;;;;N;;;;; 1F79D;BLACK TINY LOZENGE;So;0;ON;;;;;N;;;;; 1F79E;BLACK VERY SMALL LOZENGE;So;0;ON;;;;;N;;;;; 1F79F;BLACK MEDIUM SMALL LOZENGE;So;0;ON;;;;;N;;;;; 1F7A0;WHITE LOZENGE CONTAINING BLACK SMALL LOZENGE;So;0;ON;;;;;N;;;;; 1F7A1;THIN GREEK CROSS;So;0;ON;;;;;N;;;;; 1F7A2;LIGHT GREEK CROSS;So;0;ON;;;;;N;;;;; 1F7A3;MEDIUM GREEK CROSS;So;0;ON;;;;;N;;;;; 1F7A4;BOLD GREEK CROSS;So;0;ON;;;;;N;;;;; 1F7A5;VERY BOLD GREEK CROSS;So;0;ON;;;;;N;;;;; 1F7A6;VERY HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;; 1F7A7;EXTREMELY HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;; 1F7A8;THIN SALTIRE;So;0;ON;;;;;N;;;;; 1F7A9;LIGHT SALTIRE;So;0;ON;;;;;N;;;;; 1F7AA;MEDIUM SALTIRE;So;0;ON;;;;;N;;;;; 1F7AB;BOLD SALTIRE;So;0;ON;;;;;N;;;;; 1F7AC;HEAVY SALTIRE;So;0;ON;;;;;N;;;;; 1F7AD;VERY HEAVY SALTIRE;So;0;ON;;;;;N;;;;; 1F7AE;EXTREMELY HEAVY SALTIRE;So;0;ON;;;;;N;;;;; 1F7AF;LIGHT FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B0;MEDIUM FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B1;BOLD FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B2;HEAVY FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B3;VERY HEAVY FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B4;EXTREMELY HEAVY FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B5;LIGHT SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B6;MEDIUM SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B7;BOLD SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B8;HEAVY SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B9;VERY HEAVY SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7BA;EXTREMELY HEAVY SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7BB;LIGHT EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7BC;MEDIUM EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7BD;BOLD EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7BE;HEAVY EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7BF;VERY HEAVY EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7C0;LIGHT THREE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7C1;MEDIUM THREE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7C2;THREE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7C3;MEDIUM THREE POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; 1F7C4;LIGHT FOUR POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7C5;MEDIUM FOUR POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7C6;FOUR POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7C7;MEDIUM FOUR POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; 1F7C8;REVERSE LIGHT FOUR POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; 1F7C9;LIGHT FIVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7CA;HEAVY FIVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7CB;MEDIUM SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7CC;HEAVY SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7CD;SIX POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; 1F7CE;MEDIUM EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7CF;HEAVY EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7D0;VERY HEAVY EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7D1;HEAVY EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; 1F7D2;LIGHT TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7D3;HEAVY TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7D4;HEAVY TWELVE POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; 1F7D5;CIRCLED TRIANGLE;So;0;ON;;;;;N;;;;; 1F7D6;NEGATIVE CIRCLED TRIANGLE;So;0;ON;;;;;N;;;;; 1F7D7;CIRCLED SQUARE;So;0;ON;;;;;N;;;;; 1F7D8;NEGATIVE CIRCLED SQUARE;So;0;ON;;;;;N;;;;; 1F7E0;LARGE ORANGE CIRCLE;So;0;ON;;;;;N;;;;; 1F7E1;LARGE YELLOW CIRCLE;So;0;ON;;;;;N;;;;; 1F7E2;LARGE GREEN CIRCLE;So;0;ON;;;;;N;;;;; 1F7E3;LARGE PURPLE CIRCLE;So;0;ON;;;;;N;;;;; 1F7E4;LARGE BROWN CIRCLE;So;0;ON;;;;;N;;;;; 1F7E5;LARGE RED SQUARE;So;0;ON;;;;;N;;;;; 1F7E6;LARGE BLUE SQUARE;So;0;ON;;;;;N;;;;; 1F7E7;LARGE ORANGE SQUARE;So;0;ON;;;;;N;;;;; 1F7E8;LARGE YELLOW SQUARE;So;0;ON;;;;;N;;;;; 1F7E9;LARGE GREEN SQUARE;So;0;ON;;;;;N;;;;; 1F7EA;LARGE PURPLE SQUARE;So;0;ON;;;;;N;;;;; 1F7EB;LARGE BROWN SQUARE;So;0;ON;;;;;N;;;;; 1F7F0;HEAVY EQUALS SIGN;So;0;ON;;;;;N;;;;; 1F800;LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F801;UPWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F802;RIGHTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F803;DOWNWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F804;LEFTWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F805;UPWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F806;RIGHTWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F807;DOWNWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F808;LEFTWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F809;UPWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F80A;RIGHTWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F80B;DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F810;LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F811;UPWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F812;RIGHTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F813;DOWNWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F814;LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F815;UPWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F816;RIGHTWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F817;DOWNWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F818;HEAVY LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F819;HEAVY UPWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F81A;HEAVY RIGHTWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F81B;HEAVY DOWNWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F81C;HEAVY LEFTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F81D;HEAVY UPWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F81E;HEAVY RIGHTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F81F;HEAVY DOWNWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F820;LEFTWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT;So;0;ON;;;;;N;;;;; 1F821;UPWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT;So;0;ON;;;;;N;;;;; 1F822;RIGHTWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT;So;0;ON;;;;;N;;;;; 1F823;DOWNWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT;So;0;ON;;;;;N;;;;; 1F824;LEFTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT;So;0;ON;;;;;N;;;;; 1F825;UPWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT;So;0;ON;;;;;N;;;;; 1F826;RIGHTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT;So;0;ON;;;;;N;;;;; 1F827;DOWNWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT;So;0;ON;;;;;N;;;;; 1F828;LEFTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT;So;0;ON;;;;;N;;;;; 1F829;UPWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT;So;0;ON;;;;;N;;;;; 1F82A;RIGHTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT;So;0;ON;;;;;N;;;;; 1F82B;DOWNWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT;So;0;ON;;;;;N;;;;; 1F82C;LEFTWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT;So;0;ON;;;;;N;;;;; 1F82D;UPWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT;So;0;ON;;;;;N;;;;; 1F82E;RIGHTWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT;So;0;ON;;;;;N;;;;; 1F82F;DOWNWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT;So;0;ON;;;;;N;;;;; 1F830;LEFTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT;So;0;ON;;;;;N;;;;; 1F831;UPWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT;So;0;ON;;;;;N;;;;; 1F832;RIGHTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT;So;0;ON;;;;;N;;;;; 1F833;DOWNWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT;So;0;ON;;;;;N;;;;; 1F834;LEFTWARDS FINGER-POST ARROW;So;0;ON;;;;;N;;;;; 1F835;UPWARDS FINGER-POST ARROW;So;0;ON;;;;;N;;;;; 1F836;RIGHTWARDS FINGER-POST ARROW;So;0;ON;;;;;N;;;;; 1F837;DOWNWARDS FINGER-POST ARROW;So;0;ON;;;;;N;;;;; 1F838;LEFTWARDS SQUARED ARROW;So;0;ON;;;;;N;;;;; 1F839;UPWARDS SQUARED ARROW;So;0;ON;;;;;N;;;;; 1F83A;RIGHTWARDS SQUARED ARROW;So;0;ON;;;;;N;;;;; 1F83B;DOWNWARDS SQUARED ARROW;So;0;ON;;;;;N;;;;; 1F83C;LEFTWARDS COMPRESSED ARROW;So;0;ON;;;;;N;;;;; 1F83D;UPWARDS COMPRESSED ARROW;So;0;ON;;;;;N;;;;; 1F83E;RIGHTWARDS COMPRESSED ARROW;So;0;ON;;;;;N;;;;; 1F83F;DOWNWARDS COMPRESSED ARROW;So;0;ON;;;;;N;;;;; 1F840;LEFTWARDS HEAVY COMPRESSED ARROW;So;0;ON;;;;;N;;;;; 1F841;UPWARDS HEAVY COMPRESSED ARROW;So;0;ON;;;;;N;;;;; 1F842;RIGHTWARDS HEAVY COMPRESSED ARROW;So;0;ON;;;;;N;;;;; 1F843;DOWNWARDS HEAVY COMPRESSED ARROW;So;0;ON;;;;;N;;;;; 1F844;LEFTWARDS HEAVY ARROW;So;0;ON;;;;;N;;;;; 1F845;UPWARDS HEAVY ARROW;So;0;ON;;;;;N;;;;; 1F846;RIGHTWARDS HEAVY ARROW;So;0;ON;;;;;N;;;;; 1F847;DOWNWARDS HEAVY ARROW;So;0;ON;;;;;N;;;;; 1F850;LEFTWARDS SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F851;UPWARDS SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F852;RIGHTWARDS SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F853;DOWNWARDS SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F854;NORTH WEST SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F855;NORTH EAST SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F856;SOUTH EAST SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F857;SOUTH WEST SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F858;LEFT RIGHT SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F859;UP DOWN SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F860;WIDE-HEADED LEFTWARDS LIGHT BARB ARROW;So;0;ON;;;;;N;;;;; 1F861;WIDE-HEADED UPWARDS LIGHT BARB ARROW;So;0;ON;;;;;N;;;;; 1F862;WIDE-HEADED RIGHTWARDS LIGHT BARB ARROW;So;0;ON;;;;;N;;;;; 1F863;WIDE-HEADED DOWNWARDS LIGHT BARB ARROW;So;0;ON;;;;;N;;;;; 1F864;WIDE-HEADED NORTH WEST LIGHT BARB ARROW;So;0;ON;;;;;N;;;;; 1F865;WIDE-HEADED NORTH EAST LIGHT BARB ARROW;So;0;ON;;;;;N;;;;; 1F866;WIDE-HEADED SOUTH EAST LIGHT BARB ARROW;So;0;ON;;;;;N;;;;; 1F867;WIDE-HEADED SOUTH WEST LIGHT BARB ARROW;So;0;ON;;;;;N;;;;; 1F868;WIDE-HEADED LEFTWARDS BARB ARROW;So;0;ON;;;;;N;;;;; 1F869;WIDE-HEADED UPWARDS BARB ARROW;So;0;ON;;;;;N;;;;; 1F86A;WIDE-HEADED RIGHTWARDS BARB ARROW;So;0;ON;;;;;N;;;;; 1F86B;WIDE-HEADED DOWNWARDS BARB ARROW;So;0;ON;;;;;N;;;;; 1F86C;WIDE-HEADED NORTH WEST BARB ARROW;So;0;ON;;;;;N;;;;; 1F86D;WIDE-HEADED NORTH EAST BARB ARROW;So;0;ON;;;;;N;;;;; 1F86E;WIDE-HEADED SOUTH EAST BARB ARROW;So;0;ON;;;;;N;;;;; 1F86F;WIDE-HEADED SOUTH WEST BARB ARROW;So;0;ON;;;;;N;;;;; 1F870;WIDE-HEADED LEFTWARDS MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;; 1F871;WIDE-HEADED UPWARDS MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;; 1F872;WIDE-HEADED RIGHTWARDS MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;; 1F873;WIDE-HEADED DOWNWARDS MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;; 1F874;WIDE-HEADED NORTH WEST MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;; 1F875;WIDE-HEADED NORTH EAST MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;; 1F876;WIDE-HEADED SOUTH EAST MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;; 1F877;WIDE-HEADED SOUTH WEST MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;; 1F878;WIDE-HEADED LEFTWARDS HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F879;WIDE-HEADED UPWARDS HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F87A;WIDE-HEADED RIGHTWARDS HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F87B;WIDE-HEADED DOWNWARDS HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F87C;WIDE-HEADED NORTH WEST HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F87D;WIDE-HEADED NORTH EAST HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F87E;WIDE-HEADED SOUTH EAST HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F87F;WIDE-HEADED SOUTH WEST HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F880;WIDE-HEADED LEFTWARDS VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F881;WIDE-HEADED UPWARDS VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F882;WIDE-HEADED RIGHTWARDS VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F883;WIDE-HEADED DOWNWARDS VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F884;WIDE-HEADED NORTH WEST VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F885;WIDE-HEADED NORTH EAST VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F886;WIDE-HEADED SOUTH EAST VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F887;WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F890;LEFTWARDS TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F891;UPWARDS TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F892;RIGHTWARDS TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F893;DOWNWARDS TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F894;LEFTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F895;UPWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F896;RIGHTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F897;DOWNWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F898;LEFTWARDS ARROW WITH NOTCHED TAIL;So;0;ON;;;;;N;;;;; 1F899;UPWARDS ARROW WITH NOTCHED TAIL;So;0;ON;;;;;N;;;;; 1F89A;RIGHTWARDS ARROW WITH NOTCHED TAIL;So;0;ON;;;;;N;;;;; 1F89B;DOWNWARDS ARROW WITH NOTCHED TAIL;So;0;ON;;;;;N;;;;; 1F89C;HEAVY ARROW SHAFT WIDTH ONE;So;0;ON;;;;;N;;;;; 1F89D;HEAVY ARROW SHAFT WIDTH TWO THIRDS;So;0;ON;;;;;N;;;;; 1F89E;HEAVY ARROW SHAFT WIDTH ONE HALF;So;0;ON;;;;;N;;;;; 1F89F;HEAVY ARROW SHAFT WIDTH ONE THIRD;So;0;ON;;;;;N;;;;; 1F8A0;LEFTWARDS BOTTOM-SHADED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A1;RIGHTWARDS BOTTOM SHADED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A2;LEFTWARDS TOP SHADED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A3;RIGHTWARDS TOP SHADED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A4;LEFTWARDS LEFT-SHADED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A5;RIGHTWARDS RIGHT-SHADED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A6;LEFTWARDS RIGHT-SHADED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A7;RIGHTWARDS LEFT-SHADED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A8;LEFTWARDS BACK-TILTED SHADOWED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A9;RIGHTWARDS BACK-TILTED SHADOWED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8AA;LEFTWARDS FRONT-TILTED SHADOWED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8AB;RIGHTWARDS FRONT-TILTED SHADOWED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8AC;WHITE ARROW SHAFT WIDTH ONE;So;0;ON;;;;;N;;;;; 1F8AD;WHITE ARROW SHAFT WIDTH TWO THIRDS;So;0;ON;;;;;N;;;;; 1F8B0;ARROW POINTING UPWARDS THEN NORTH WEST;So;0;ON;;;;;N;;;;; 1F8B1;ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST;So;0;ON;;;;;N;;;;; 1F900;CIRCLED CROSS FORMEE WITH FOUR DOTS;So;0;ON;;;;;N;;;;; 1F901;CIRCLED CROSS FORMEE WITH TWO DOTS;So;0;ON;;;;;N;;;;; 1F902;CIRCLED CROSS FORMEE;So;0;ON;;;;;N;;;;; 1F903;LEFT HALF CIRCLE WITH FOUR DOTS;So;0;ON;;;;;N;;;;; 1F904;LEFT HALF CIRCLE WITH THREE DOTS;So;0;ON;;;;;N;;;;; 1F905;LEFT HALF CIRCLE WITH TWO DOTS;So;0;ON;;;;;N;;;;; 1F906;LEFT HALF CIRCLE WITH DOT;So;0;ON;;;;;N;;;;; 1F907;LEFT HALF CIRCLE;So;0;ON;;;;;N;;;;; 1F908;DOWNWARD FACING HOOK;So;0;ON;;;;;N;;;;; 1F909;DOWNWARD FACING NOTCHED HOOK;So;0;ON;;;;;N;;;;; 1F90A;DOWNWARD FACING HOOK WITH DOT;So;0;ON;;;;;N;;;;; 1F90B;DOWNWARD FACING NOTCHED HOOK WITH DOT;So;0;ON;;;;;N;;;;; 1F90C;PINCHED FINGERS;So;0;ON;;;;;N;;;;; 1F90D;WHITE HEART;So;0;ON;;;;;N;;;;; 1F90E;BROWN HEART;So;0;ON;;;;;N;;;;; 1F90F;PINCHING HAND;So;0;ON;;;;;N;;;;; 1F910;ZIPPER-MOUTH FACE;So;0;ON;;;;;N;;;;; 1F911;MONEY-MOUTH FACE;So;0;ON;;;;;N;;;;; 1F912;FACE WITH THERMOMETER;So;0;ON;;;;;N;;;;; 1F913;NERD FACE;So;0;ON;;;;;N;;;;; 1F914;THINKING FACE;So;0;ON;;;;;N;;;;; 1F915;FACE WITH HEAD-BANDAGE;So;0;ON;;;;;N;;;;; 1F916;ROBOT FACE;So;0;ON;;;;;N;;;;; 1F917;HUGGING FACE;So;0;ON;;;;;N;;;;; 1F918;SIGN OF THE HORNS;So;0;ON;;;;;N;;;;; 1F919;CALL ME HAND;So;0;ON;;;;;N;;;;; 1F91A;RAISED BACK OF HAND;So;0;ON;;;;;N;;;;; 1F91B;LEFT-FACING FIST;So;0;ON;;;;;N;;;;; 1F91C;RIGHT-FACING FIST;So;0;ON;;;;;N;;;;; 1F91D;HANDSHAKE;So;0;ON;;;;;N;;;;; 1F91E;HAND WITH INDEX AND MIDDLE FINGERS CROSSED;So;0;ON;;;;;N;;;;; 1F91F;I LOVE YOU HAND SIGN;So;0;ON;;;;;N;;;;; 1F920;FACE WITH COWBOY HAT;So;0;ON;;;;;N;;;;; 1F921;CLOWN FACE;So;0;ON;;;;;N;;;;; 1F922;NAUSEATED FACE;So;0;ON;;;;;N;;;;; 1F923;ROLLING ON THE FLOOR LAUGHING;So;0;ON;;;;;N;;;;; 1F924;DROOLING FACE;So;0;ON;;;;;N;;;;; 1F925;LYING FACE;So;0;ON;;;;;N;;;;; 1F926;FACE PALM;So;0;ON;;;;;N;;;;; 1F927;SNEEZING FACE;So;0;ON;;;;;N;;;;; 1F928;FACE WITH ONE EYEBROW RAISED;So;0;ON;;;;;N;;;;; 1F929;GRINNING FACE WITH STAR EYES;So;0;ON;;;;;N;;;;; 1F92A;GRINNING FACE WITH ONE LARGE AND ONE SMALL EYE;So;0;ON;;;;;N;;;;; 1F92B;FACE WITH FINGER COVERING CLOSED LIPS;So;0;ON;;;;;N;;;;; 1F92C;SERIOUS FACE WITH SYMBOLS COVERING MOUTH;So;0;ON;;;;;N;;;;; 1F92D;SMILING FACE WITH SMILING EYES AND HAND COVERING MOUTH;So;0;ON;;;;;N;;;;; 1F92E;FACE WITH OPEN MOUTH VOMITING;So;0;ON;;;;;N;;;;; 1F92F;SHOCKED FACE WITH EXPLODING HEAD;So;0;ON;;;;;N;;;;; 1F930;PREGNANT WOMAN;So;0;ON;;;;;N;;;;; 1F931;BREAST-FEEDING;So;0;ON;;;;;N;;;;; 1F932;PALMS UP TOGETHER;So;0;ON;;;;;N;;;;; 1F933;SELFIE;So;0;ON;;;;;N;;;;; 1F934;PRINCE;So;0;ON;;;;;N;;;;; 1F935;MAN IN TUXEDO;So;0;ON;;;;;N;;;;; 1F936;MOTHER CHRISTMAS;So;0;ON;;;;;N;;;;; 1F937;SHRUG;So;0;ON;;;;;N;;;;; 1F938;PERSON DOING CARTWHEEL;So;0;ON;;;;;N;;;;; 1F939;JUGGLING;So;0;ON;;;;;N;;;;; 1F93A;FENCER;So;0;ON;;;;;N;;;;; 1F93B;MODERN PENTATHLON;So;0;ON;;;;;N;;;;; 1F93C;WRESTLERS;So;0;ON;;;;;N;;;;; 1F93D;WATER POLO;So;0;ON;;;;;N;;;;; 1F93E;HANDBALL;So;0;ON;;;;;N;;;;; 1F93F;DIVING MASK;So;0;ON;;;;;N;;;;; 1F940;WILTED FLOWER;So;0;ON;;;;;N;;;;; 1F941;DRUM WITH DRUMSTICKS;So;0;ON;;;;;N;;;;; 1F942;CLINKING GLASSES;So;0;ON;;;;;N;;;;; 1F943;TUMBLER GLASS;So;0;ON;;;;;N;;;;; 1F944;SPOON;So;0;ON;;;;;N;;;;; 1F945;GOAL NET;So;0;ON;;;;;N;;;;; 1F946;RIFLE;So;0;ON;;;;;N;;;;; 1F947;FIRST PLACE MEDAL;So;0;ON;;;;;N;;;;; 1F948;SECOND PLACE MEDAL;So;0;ON;;;;;N;;;;; 1F949;THIRD PLACE MEDAL;So;0;ON;;;;;N;;;;; 1F94A;BOXING GLOVE;So;0;ON;;;;;N;;;;; 1F94B;MARTIAL ARTS UNIFORM;So;0;ON;;;;;N;;;;; 1F94C;CURLING STONE;So;0;ON;;;;;N;;;;; 1F94D;LACROSSE STICK AND BALL;So;0;ON;;;;;N;;;;; 1F94E;SOFTBALL;So;0;ON;;;;;N;;;;; 1F94F;FLYING DISC;So;0;ON;;;;;N;;;;; 1F950;CROISSANT;So;0;ON;;;;;N;;;;; 1F951;AVOCADO;So;0;ON;;;;;N;;;;; 1F952;CUCUMBER;So;0;ON;;;;;N;;;;; 1F953;BACON;So;0;ON;;;;;N;;;;; 1F954;POTATO;So;0;ON;;;;;N;;;;; 1F955;CARROT;So;0;ON;;;;;N;;;;; 1F956;BAGUETTE BREAD;So;0;ON;;;;;N;;;;; 1F957;GREEN SALAD;So;0;ON;;;;;N;;;;; 1F958;SHALLOW PAN OF FOOD;So;0;ON;;;;;N;;;;; 1F959;STUFFED FLATBREAD;So;0;ON;;;;;N;;;;; 1F95A;EGG;So;0;ON;;;;;N;;;;; 1F95B;GLASS OF MILK;So;0;ON;;;;;N;;;;; 1F95C;PEANUTS;So;0;ON;;;;;N;;;;; 1F95D;KIWIFRUIT;So;0;ON;;;;;N;;;;; 1F95E;PANCAKES;So;0;ON;;;;;N;;;;; 1F95F;DUMPLING;So;0;ON;;;;;N;;;;; 1F960;FORTUNE COOKIE;So;0;ON;;;;;N;;;;; 1F961;TAKEOUT BOX;So;0;ON;;;;;N;;;;; 1F962;CHOPSTICKS;So;0;ON;;;;;N;;;;; 1F963;BOWL WITH SPOON;So;0;ON;;;;;N;;;;; 1F964;CUP WITH STRAW;So;0;ON;;;;;N;;;;; 1F965;COCONUT;So;0;ON;;;;;N;;;;; 1F966;BROCCOLI;So;0;ON;;;;;N;;;;; 1F967;PIE;So;0;ON;;;;;N;;;;; 1F968;PRETZEL;So;0;ON;;;;;N;;;;; 1F969;CUT OF MEAT;So;0;ON;;;;;N;;;;; 1F96A;SANDWICH;So;0;ON;;;;;N;;;;; 1F96B;CANNED FOOD;So;0;ON;;;;;N;;;;; 1F96C;LEAFY GREEN;So;0;ON;;;;;N;;;;; 1F96D;MANGO;So;0;ON;;;;;N;;;;; 1F96E;MOON CAKE;So;0;ON;;;;;N;;;;; 1F96F;BAGEL;So;0;ON;;;;;N;;;;; 1F970;SMILING FACE WITH SMILING EYES AND THREE HEARTS;So;0;ON;;;;;N;;;;; 1F971;YAWNING FACE;So;0;ON;;;;;N;;;;; 1F972;SMILING FACE WITH TEAR;So;0;ON;;;;;N;;;;; 1F973;FACE WITH PARTY HORN AND PARTY HAT;So;0;ON;;;;;N;;;;; 1F974;FACE WITH UNEVEN EYES AND WAVY MOUTH;So;0;ON;;;;;N;;;;; 1F975;OVERHEATED FACE;So;0;ON;;;;;N;;;;; 1F976;FREEZING FACE;So;0;ON;;;;;N;;;;; 1F977;NINJA;So;0;ON;;;;;N;;;;; 1F978;DISGUISED FACE;So;0;ON;;;;;N;;;;; 1F979;FACE HOLDING BACK TEARS;So;0;ON;;;;;N;;;;; 1F97A;FACE WITH PLEADING EYES;So;0;ON;;;;;N;;;;; 1F97B;SARI;So;0;ON;;;;;N;;;;; 1F97C;LAB COAT;So;0;ON;;;;;N;;;;; 1F97D;GOGGLES;So;0;ON;;;;;N;;;;; 1F97E;HIKING BOOT;So;0;ON;;;;;N;;;;; 1F97F;FLAT SHOE;So;0;ON;;;;;N;;;;; 1F980;CRAB;So;0;ON;;;;;N;;;;; 1F981;LION FACE;So;0;ON;;;;;N;;;;; 1F982;SCORPION;So;0;ON;;;;;N;;;;; 1F983;TURKEY;So;0;ON;;;;;N;;;;; 1F984;UNICORN FACE;So;0;ON;;;;;N;;;;; 1F985;EAGLE;So;0;ON;;;;;N;;;;; 1F986;DUCK;So;0;ON;;;;;N;;;;; 1F987;BAT;So;0;ON;;;;;N;;;;; 1F988;SHARK;So;0;ON;;;;;N;;;;; 1F989;OWL;So;0;ON;;;;;N;;;;; 1F98A;FOX FACE;So;0;ON;;;;;N;;;;; 1F98B;BUTTERFLY;So;0;ON;;;;;N;;;;; 1F98C;DEER;So;0;ON;;;;;N;;;;; 1F98D;GORILLA;So;0;ON;;;;;N;;;;; 1F98E;LIZARD;So;0;ON;;;;;N;;;;; 1F98F;RHINOCEROS;So;0;ON;;;;;N;;;;; 1F990;SHRIMP;So;0;ON;;;;;N;;;;; 1F991;SQUID;So;0;ON;;;;;N;;;;; 1F992;GIRAFFE FACE;So;0;ON;;;;;N;;;;; 1F993;ZEBRA FACE;So;0;ON;;;;;N;;;;; 1F994;HEDGEHOG;So;0;ON;;;;;N;;;;; 1F995;SAUROPOD;So;0;ON;;;;;N;;;;; 1F996;T-REX;So;0;ON;;;;;N;;;;; 1F997;CRICKET;So;0;ON;;;;;N;;;;; 1F998;KANGAROO;So;0;ON;;;;;N;;;;; 1F999;LLAMA;So;0;ON;;;;;N;;;;; 1F99A;PEACOCK;So;0;ON;;;;;N;;;;; 1F99B;HIPPOPOTAMUS;So;0;ON;;;;;N;;;;; 1F99C;PARROT;So;0;ON;;;;;N;;;;; 1F99D;RACCOON;So;0;ON;;;;;N;;;;; 1F99E;LOBSTER;So;0;ON;;;;;N;;;;; 1F99F;MOSQUITO;So;0;ON;;;;;N;;;;; 1F9A0;MICROBE;So;0;ON;;;;;N;;;;; 1F9A1;BADGER;So;0;ON;;;;;N;;;;; 1F9A2;SWAN;So;0;ON;;;;;N;;;;; 1F9A3;MAMMOTH;So;0;ON;;;;;N;;;;; 1F9A4;DODO;So;0;ON;;;;;N;;;;; 1F9A5;SLOTH;So;0;ON;;;;;N;;;;; 1F9A6;OTTER;So;0;ON;;;;;N;;;;; 1F9A7;ORANGUTAN;So;0;ON;;;;;N;;;;; 1F9A8;SKUNK;So;0;ON;;;;;N;;;;; 1F9A9;FLAMINGO;So;0;ON;;;;;N;;;;; 1F9AA;OYSTER;So;0;ON;;;;;N;;;;; 1F9AB;BEAVER;So;0;ON;;;;;N;;;;; 1F9AC;BISON;So;0;ON;;;;;N;;;;; 1F9AD;SEAL;So;0;ON;;;;;N;;;;; 1F9AE;GUIDE DOG;So;0;ON;;;;;N;;;;; 1F9AF;PROBING CANE;So;0;ON;;;;;N;;;;; 1F9B0;EMOJI COMPONENT RED HAIR;So;0;ON;;;;;N;;;;; 1F9B1;EMOJI COMPONENT CURLY HAIR;So;0;ON;;;;;N;;;;; 1F9B2;EMOJI COMPONENT BALD;So;0;ON;;;;;N;;;;; 1F9B3;EMOJI COMPONENT WHITE HAIR;So;0;ON;;;;;N;;;;; 1F9B4;BONE;So;0;ON;;;;;N;;;;; 1F9B5;LEG;So;0;ON;;;;;N;;;;; 1F9B6;FOOT;So;0;ON;;;;;N;;;;; 1F9B7;TOOTH;So;0;ON;;;;;N;;;;; 1F9B8;SUPERHERO;So;0;ON;;;;;N;;;;; 1F9B9;SUPERVILLAIN;So;0;ON;;;;;N;;;;; 1F9BA;SAFETY VEST;So;0;ON;;;;;N;;;;; 1F9BB;EAR WITH HEARING AID;So;0;ON;;;;;N;;;;; 1F9BC;MOTORIZED WHEELCHAIR;So;0;ON;;;;;N;;;;; 1F9BD;MANUAL WHEELCHAIR;So;0;ON;;;;;N;;;;; 1F9BE;MECHANICAL ARM;So;0;ON;;;;;N;;;;; 1F9BF;MECHANICAL LEG;So;0;ON;;;;;N;;;;; 1F9C0;CHEESE WEDGE;So;0;ON;;;;;N;;;;; 1F9C1;CUPCAKE;So;0;ON;;;;;N;;;;; 1F9C2;SALT SHAKER;So;0;ON;;;;;N;;;;; 1F9C3;BEVERAGE BOX;So;0;ON;;;;;N;;;;; 1F9C4;GARLIC;So;0;ON;;;;;N;;;;; 1F9C5;ONION;So;0;ON;;;;;N;;;;; 1F9C6;FALAFEL;So;0;ON;;;;;N;;;;; 1F9C7;WAFFLE;So;0;ON;;;;;N;;;;; 1F9C8;BUTTER;So;0;ON;;;;;N;;;;; 1F9C9;MATE DRINK;So;0;ON;;;;;N;;;;; 1F9CA;ICE CUBE;So;0;ON;;;;;N;;;;; 1F9CB;BUBBLE TEA;So;0;ON;;;;;N;;;;; 1F9CC;TROLL;So;0;ON;;;;;N;;;;; 1F9CD;STANDING PERSON;So;0;ON;;;;;N;;;;; 1F9CE;KNEELING PERSON;So;0;ON;;;;;N;;;;; 1F9CF;DEAF PERSON;So;0;ON;;;;;N;;;;; 1F9D0;FACE WITH MONOCLE;So;0;ON;;;;;N;;;;; 1F9D1;ADULT;So;0;ON;;;;;N;;;;; 1F9D2;CHILD;So;0;ON;;;;;N;;;;; 1F9D3;OLDER ADULT;So;0;ON;;;;;N;;;;; 1F9D4;BEARDED PERSON;So;0;ON;;;;;N;;;;; 1F9D5;PERSON WITH HEADSCARF;So;0;ON;;;;;N;;;;; 1F9D6;PERSON IN STEAMY ROOM;So;0;ON;;;;;N;;;;; 1F9D7;PERSON CLIMBING;So;0;ON;;;;;N;;;;; 1F9D8;PERSON IN LOTUS POSITION;So;0;ON;;;;;N;;;;; 1F9D9;MAGE;So;0;ON;;;;;N;;;;; 1F9DA;FAIRY;So;0;ON;;;;;N;;;;; 1F9DB;VAMPIRE;So;0;ON;;;;;N;;;;; 1F9DC;MERPERSON;So;0;ON;;;;;N;;;;; 1F9DD;ELF;So;0;ON;;;;;N;;;;; 1F9DE;GENIE;So;0;ON;;;;;N;;;;; 1F9DF;ZOMBIE;So;0;ON;;;;;N;;;;; 1F9E0;BRAIN;So;0;ON;;;;;N;;;;; 1F9E1;ORANGE HEART;So;0;ON;;;;;N;;;;; 1F9E2;BILLED CAP;So;0;ON;;;;;N;;;;; 1F9E3;SCARF;So;0;ON;;;;;N;;;;; 1F9E4;GLOVES;So;0;ON;;;;;N;;;;; 1F9E5;COAT;So;0;ON;;;;;N;;;;; 1F9E6;SOCKS;So;0;ON;;;;;N;;;;; 1F9E7;RED GIFT ENVELOPE;So;0;ON;;;;;N;;;;; 1F9E8;FIRECRACKER;So;0;ON;;;;;N;;;;; 1F9E9;JIGSAW PUZZLE PIECE;So;0;ON;;;;;N;;;;; 1F9EA;TEST TUBE;So;0;ON;;;;;N;;;;; 1F9EB;PETRI DISH;So;0;ON;;;;;N;;;;; 1F9EC;DNA DOUBLE HELIX;So;0;ON;;;;;N;;;;; 1F9ED;COMPASS;So;0;ON;;;;;N;;;;; 1F9EE;ABACUS;So;0;ON;;;;;N;;;;; 1F9EF;FIRE EXTINGUISHER;So;0;ON;;;;;N;;;;; 1F9F0;TOOLBOX;So;0;ON;;;;;N;;;;; 1F9F1;BRICK;So;0;ON;;;;;N;;;;; 1F9F2;MAGNET;So;0;ON;;;;;N;;;;; 1F9F3;LUGGAGE;So;0;ON;;;;;N;;;;; 1F9F4;LOTION BOTTLE;So;0;ON;;;;;N;;;;; 1F9F5;SPOOL OF THREAD;So;0;ON;;;;;N;;;;; 1F9F6;BALL OF YARN;So;0;ON;;;;;N;;;;; 1F9F7;SAFETY PIN;So;0;ON;;;;;N;;;;; 1F9F8;TEDDY BEAR;So;0;ON;;;;;N;;;;; 1F9F9;BROOM;So;0;ON;;;;;N;;;;; 1F9FA;BASKET;So;0;ON;;;;;N;;;;; 1F9FB;ROLL OF PAPER;So;0;ON;;;;;N;;;;; 1F9FC;BAR OF SOAP;So;0;ON;;;;;N;;;;; 1F9FD;SPONGE;So;0;ON;;;;;N;;;;; 1F9FE;RECEIPT;So;0;ON;;;;;N;;;;; 1F9FF;NAZAR AMULET;So;0;ON;;;;;N;;;;; 1FA00;NEUTRAL CHESS KING;So;0;ON;;;;;N;;;;; 1FA01;NEUTRAL CHESS QUEEN;So;0;ON;;;;;N;;;;; 1FA02;NEUTRAL CHESS ROOK;So;0;ON;;;;;N;;;;; 1FA03;NEUTRAL CHESS BISHOP;So;0;ON;;;;;N;;;;; 1FA04;NEUTRAL CHESS KNIGHT;So;0;ON;;;;;N;;;;; 1FA05;NEUTRAL CHESS PAWN;So;0;ON;;;;;N;;;;; 1FA06;WHITE CHESS KNIGHT ROTATED FORTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; 1FA07;BLACK CHESS KNIGHT ROTATED FORTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; 1FA08;NEUTRAL CHESS KNIGHT ROTATED FORTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; 1FA09;WHITE CHESS KING ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA0A;WHITE CHESS QUEEN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA0B;WHITE CHESS ROOK ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA0C;WHITE CHESS BISHOP ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA0D;WHITE CHESS KNIGHT ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA0E;WHITE CHESS PAWN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA0F;BLACK CHESS KING ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA10;BLACK CHESS QUEEN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA11;BLACK CHESS ROOK ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA12;BLACK CHESS BISHOP ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA13;BLACK CHESS KNIGHT ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA14;BLACK CHESS PAWN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA15;NEUTRAL CHESS KING ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA16;NEUTRAL CHESS QUEEN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA17;NEUTRAL CHESS ROOK ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA18;NEUTRAL CHESS BISHOP ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA19;NEUTRAL CHESS KNIGHT ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA1A;NEUTRAL CHESS PAWN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA1B;WHITE CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; 1FA1C;BLACK CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; 1FA1D;NEUTRAL CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; 1FA1E;WHITE CHESS TURNED KING;So;0;ON;;;;;N;;;;; 1FA1F;WHITE CHESS TURNED QUEEN;So;0;ON;;;;;N;;;;; 1FA20;WHITE CHESS TURNED ROOK;So;0;ON;;;;;N;;;;; 1FA21;WHITE CHESS TURNED BISHOP;So;0;ON;;;;;N;;;;; 1FA22;WHITE CHESS TURNED KNIGHT;So;0;ON;;;;;N;;;;; 1FA23;WHITE CHESS TURNED PAWN;So;0;ON;;;;;N;;;;; 1FA24;BLACK CHESS TURNED KING;So;0;ON;;;;;N;;;;; 1FA25;BLACK CHESS TURNED QUEEN;So;0;ON;;;;;N;;;;; 1FA26;BLACK CHESS TURNED ROOK;So;0;ON;;;;;N;;;;; 1FA27;BLACK CHESS TURNED BISHOP;So;0;ON;;;;;N;;;;; 1FA28;BLACK CHESS TURNED KNIGHT;So;0;ON;;;;;N;;;;; 1FA29;BLACK CHESS TURNED PAWN;So;0;ON;;;;;N;;;;; 1FA2A;NEUTRAL CHESS TURNED KING;So;0;ON;;;;;N;;;;; 1FA2B;NEUTRAL CHESS TURNED QUEEN;So;0;ON;;;;;N;;;;; 1FA2C;NEUTRAL CHESS TURNED ROOK;So;0;ON;;;;;N;;;;; 1FA2D;NEUTRAL CHESS TURNED BISHOP;So;0;ON;;;;;N;;;;; 1FA2E;NEUTRAL CHESS TURNED KNIGHT;So;0;ON;;;;;N;;;;; 1FA2F;NEUTRAL CHESS TURNED PAWN;So;0;ON;;;;;N;;;;; 1FA30;WHITE CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; 1FA31;BLACK CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; 1FA32;NEUTRAL CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; 1FA33;WHITE CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA34;WHITE CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA35;WHITE CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA36;WHITE CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA37;WHITE CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA38;WHITE CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA39;BLACK CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA3A;BLACK CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA3B;BLACK CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA3C;BLACK CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA3D;BLACK CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA3E;BLACK CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA3F;NEUTRAL CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA40;NEUTRAL CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA41;NEUTRAL CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA42;NEUTRAL CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA43;NEUTRAL CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA44;NEUTRAL CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; 1FA45;WHITE CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES;So;0;ON;;;;;N;;;;; 1FA46;BLACK CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES;So;0;ON;;;;;N;;;;; 1FA47;NEUTRAL CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES;So;0;ON;;;;;N;;;;; 1FA48;WHITE CHESS EQUIHOPPER;So;0;ON;;;;;N;;;;; 1FA49;BLACK CHESS EQUIHOPPER;So;0;ON;;;;;N;;;;; 1FA4A;NEUTRAL CHESS EQUIHOPPER;So;0;ON;;;;;N;;;;; 1FA4B;WHITE CHESS EQUIHOPPER ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA4C;BLACK CHESS EQUIHOPPER ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA4D;NEUTRAL CHESS EQUIHOPPER ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; 1FA4E;WHITE CHESS KNIGHT-QUEEN;So;0;ON;;;;;N;;;;; 1FA4F;WHITE CHESS KNIGHT-ROOK;So;0;ON;;;;;N;;;;; 1FA50;WHITE CHESS KNIGHT-BISHOP;So;0;ON;;;;;N;;;;; 1FA51;BLACK CHESS KNIGHT-QUEEN;So;0;ON;;;;;N;;;;; 1FA52;BLACK CHESS KNIGHT-ROOK;So;0;ON;;;;;N;;;;; 1FA53;BLACK CHESS KNIGHT-BISHOP;So;0;ON;;;;;N;;;;; 1FA60;XIANGQI RED GENERAL;So;0;ON;;;;;N;;;;; 1FA61;XIANGQI RED MANDARIN;So;0;ON;;;;;N;;;;; 1FA62;XIANGQI RED ELEPHANT;So;0;ON;;;;;N;;;;; 1FA63;XIANGQI RED HORSE;So;0;ON;;;;;N;;;;; 1FA64;XIANGQI RED CHARIOT;So;0;ON;;;;;N;;;;; 1FA65;XIANGQI RED CANNON;So;0;ON;;;;;N;;;;; 1FA66;XIANGQI RED SOLDIER;So;0;ON;;;;;N;;;;; 1FA67;XIANGQI BLACK GENERAL;So;0;ON;;;;;N;;;;; 1FA68;XIANGQI BLACK MANDARIN;So;0;ON;;;;;N;;;;; 1FA69;XIANGQI BLACK ELEPHANT;So;0;ON;;;;;N;;;;; 1FA6A;XIANGQI BLACK HORSE;So;0;ON;;;;;N;;;;; 1FA6B;XIANGQI BLACK CHARIOT;So;0;ON;;;;;N;;;;; 1FA6C;XIANGQI BLACK CANNON;So;0;ON;;;;;N;;;;; 1FA6D;XIANGQI BLACK SOLDIER;So;0;ON;;;;;N;;;;; 1FA70;BALLET SHOES;So;0;ON;;;;;N;;;;; 1FA71;ONE-PIECE SWIMSUIT;So;0;ON;;;;;N;;;;; 1FA72;BRIEFS;So;0;ON;;;;;N;;;;; 1FA73;SHORTS;So;0;ON;;;;;N;;;;; 1FA74;THONG SANDAL;So;0;ON;;;;;N;;;;; 1FA78;DROP OF BLOOD;So;0;ON;;;;;N;;;;; 1FA79;ADHESIVE BANDAGE;So;0;ON;;;;;N;;;;; 1FA7A;STETHOSCOPE;So;0;ON;;;;;N;;;;; 1FA7B;X-RAY;So;0;ON;;;;;N;;;;; 1FA7C;CRUTCH;So;0;ON;;;;;N;;;;; 1FA80;YO-YO;So;0;ON;;;;;N;;;;; 1FA81;KITE;So;0;ON;;;;;N;;;;; 1FA82;PARACHUTE;So;0;ON;;;;;N;;;;; 1FA83;BOOMERANG;So;0;ON;;;;;N;;;;; 1FA84;MAGIC WAND;So;0;ON;;;;;N;;;;; 1FA85;PINATA;So;0;ON;;;;;N;;;;; 1FA86;NESTING DOLLS;So;0;ON;;;;;N;;;;; 1FA90;RINGED PLANET;So;0;ON;;;;;N;;;;; 1FA91;CHAIR;So;0;ON;;;;;N;;;;; 1FA92;RAZOR;So;0;ON;;;;;N;;;;; 1FA93;AXE;So;0;ON;;;;;N;;;;; 1FA94;DIYA LAMP;So;0;ON;;;;;N;;;;; 1FA95;BANJO;So;0;ON;;;;;N;;;;; 1FA96;MILITARY HELMET;So;0;ON;;;;;N;;;;; 1FA97;ACCORDION;So;0;ON;;;;;N;;;;; 1FA98;LONG DRUM;So;0;ON;;;;;N;;;;; 1FA99;COIN;So;0;ON;;;;;N;;;;; 1FA9A;CARPENTRY SAW;So;0;ON;;;;;N;;;;; 1FA9B;SCREWDRIVER;So;0;ON;;;;;N;;;;; 1FA9C;LADDER;So;0;ON;;;;;N;;;;; 1FA9D;HOOK;So;0;ON;;;;;N;;;;; 1FA9E;MIRROR;So;0;ON;;;;;N;;;;; 1FA9F;WINDOW;So;0;ON;;;;;N;;;;; 1FAA0;PLUNGER;So;0;ON;;;;;N;;;;; 1FAA1;SEWING NEEDLE;So;0;ON;;;;;N;;;;; 1FAA2;KNOT;So;0;ON;;;;;N;;;;; 1FAA3;BUCKET;So;0;ON;;;;;N;;;;; 1FAA4;MOUSE TRAP;So;0;ON;;;;;N;;;;; 1FAA5;TOOTHBRUSH;So;0;ON;;;;;N;;;;; 1FAA6;HEADSTONE;So;0;ON;;;;;N;;;;; 1FAA7;PLACARD;So;0;ON;;;;;N;;;;; 1FAA8;ROCK;So;0;ON;;;;;N;;;;; 1FAA9;MIRROR BALL;So;0;ON;;;;;N;;;;; 1FAAA;IDENTIFICATION CARD;So;0;ON;;;;;N;;;;; 1FAAB;LOW BATTERY;So;0;ON;;;;;N;;;;; 1FAAC;HAMSA;So;0;ON;;;;;N;;;;; 1FAB0;FLY;So;0;ON;;;;;N;;;;; 1FAB1;WORM;So;0;ON;;;;;N;;;;; 1FAB2;BEETLE;So;0;ON;;;;;N;;;;; 1FAB3;COCKROACH;So;0;ON;;;;;N;;;;; 1FAB4;POTTED PLANT;So;0;ON;;;;;N;;;;; 1FAB5;WOOD;So;0;ON;;;;;N;;;;; 1FAB6;FEATHER;So;0;ON;;;;;N;;;;; 1FAB7;LOTUS;So;0;ON;;;;;N;;;;; 1FAB8;CORAL;So;0;ON;;;;;N;;;;; 1FAB9;EMPTY NEST;So;0;ON;;;;;N;;;;; 1FABA;NEST WITH EGGS;So;0;ON;;;;;N;;;;; 1FAC0;ANATOMICAL HEART;So;0;ON;;;;;N;;;;; 1FAC1;LUNGS;So;0;ON;;;;;N;;;;; 1FAC2;PEOPLE HUGGING;So;0;ON;;;;;N;;;;; 1FAC3;PREGNANT MAN;So;0;ON;;;;;N;;;;; 1FAC4;PREGNANT PERSON;So;0;ON;;;;;N;;;;; 1FAC5;PERSON WITH CROWN;So;0;ON;;;;;N;;;;; 1FAD0;BLUEBERRIES;So;0;ON;;;;;N;;;;; 1FAD1;BELL PEPPER;So;0;ON;;;;;N;;;;; 1FAD2;OLIVE;So;0;ON;;;;;N;;;;; 1FAD3;FLATBREAD;So;0;ON;;;;;N;;;;; 1FAD4;TAMALE;So;0;ON;;;;;N;;;;; 1FAD5;FONDUE;So;0;ON;;;;;N;;;;; 1FAD6;TEAPOT;So;0;ON;;;;;N;;;;; 1FAD7;POURING LIQUID;So;0;ON;;;;;N;;;;; 1FAD8;BEANS;So;0;ON;;;;;N;;;;; 1FAD9;JAR;So;0;ON;;;;;N;;;;; 1FAE0;MELTING FACE;So;0;ON;;;;;N;;;;; 1FAE1;SALUTING FACE;So;0;ON;;;;;N;;;;; 1FAE2;FACE WITH OPEN EYES AND HAND OVER MOUTH;So;0;ON;;;;;N;;;;; 1FAE3;FACE WITH PEEKING EYE;So;0;ON;;;;;N;;;;; 1FAE4;FACE WITH DIAGONAL MOUTH;So;0;ON;;;;;N;;;;; 1FAE5;DOTTED LINE FACE;So;0;ON;;;;;N;;;;; 1FAE6;BITING LIP;So;0;ON;;;;;N;;;;; 1FAE7;BUBBLES;So;0;ON;;;;;N;;;;; 1FAF0;HAND WITH INDEX FINGER AND THUMB CROSSED;So;0;ON;;;;;N;;;;; 1FAF1;RIGHTWARDS HAND;So;0;ON;;;;;N;;;;; 1FAF2;LEFTWARDS HAND;So;0;ON;;;;;N;;;;; 1FAF3;PALM DOWN HAND;So;0;ON;;;;;N;;;;; 1FAF4;PALM UP HAND;So;0;ON;;;;;N;;;;; 1FAF5;INDEX POINTING AT THE VIEWER;So;0;ON;;;;;N;;;;; 1FAF6;HEART HANDS;So;0;ON;;;;;N;;;;; 1FB00;BLOCK SEXTANT-1;So;0;ON;;;;;N;;;;; 1FB01;BLOCK SEXTANT-2;So;0;ON;;;;;N;;;;; 1FB02;BLOCK SEXTANT-12;So;0;ON;;;;;N;;;;; 1FB03;BLOCK SEXTANT-3;So;0;ON;;;;;N;;;;; 1FB04;BLOCK SEXTANT-13;So;0;ON;;;;;N;;;;; 1FB05;BLOCK SEXTANT-23;So;0;ON;;;;;N;;;;; 1FB06;BLOCK SEXTANT-123;So;0;ON;;;;;N;;;;; 1FB07;BLOCK SEXTANT-4;So;0;ON;;;;;N;;;;; 1FB08;BLOCK SEXTANT-14;So;0;ON;;;;;N;;;;; 1FB09;BLOCK SEXTANT-24;So;0;ON;;;;;N;;;;; 1FB0A;BLOCK SEXTANT-124;So;0;ON;;;;;N;;;;; 1FB0B;BLOCK SEXTANT-34;So;0;ON;;;;;N;;;;; 1FB0C;BLOCK SEXTANT-134;So;0;ON;;;;;N;;;;; 1FB0D;BLOCK SEXTANT-234;So;0;ON;;;;;N;;;;; 1FB0E;BLOCK SEXTANT-1234;So;0;ON;;;;;N;;;;; 1FB0F;BLOCK SEXTANT-5;So;0;ON;;;;;N;;;;; 1FB10;BLOCK SEXTANT-15;So;0;ON;;;;;N;;;;; 1FB11;BLOCK SEXTANT-25;So;0;ON;;;;;N;;;;; 1FB12;BLOCK SEXTANT-125;So;0;ON;;;;;N;;;;; 1FB13;BLOCK SEXTANT-35;So;0;ON;;;;;N;;;;; 1FB14;BLOCK SEXTANT-235;So;0;ON;;;;;N;;;;; 1FB15;BLOCK SEXTANT-1235;So;0;ON;;;;;N;;;;; 1FB16;BLOCK SEXTANT-45;So;0;ON;;;;;N;;;;; 1FB17;BLOCK SEXTANT-145;So;0;ON;;;;;N;;;;; 1FB18;BLOCK SEXTANT-245;So;0;ON;;;;;N;;;;; 1FB19;BLOCK SEXTANT-1245;So;0;ON;;;;;N;;;;; 1FB1A;BLOCK SEXTANT-345;So;0;ON;;;;;N;;;;; 1FB1B;BLOCK SEXTANT-1345;So;0;ON;;;;;N;;;;; 1FB1C;BLOCK SEXTANT-2345;So;0;ON;;;;;N;;;;; 1FB1D;BLOCK SEXTANT-12345;So;0;ON;;;;;N;;;;; 1FB1E;BLOCK SEXTANT-6;So;0;ON;;;;;N;;;;; 1FB1F;BLOCK SEXTANT-16;So;0;ON;;;;;N;;;;; 1FB20;BLOCK SEXTANT-26;So;0;ON;;;;;N;;;;; 1FB21;BLOCK SEXTANT-126;So;0;ON;;;;;N;;;;; 1FB22;BLOCK SEXTANT-36;So;0;ON;;;;;N;;;;; 1FB23;BLOCK SEXTANT-136;So;0;ON;;;;;N;;;;; 1FB24;BLOCK SEXTANT-236;So;0;ON;;;;;N;;;;; 1FB25;BLOCK SEXTANT-1236;So;0;ON;;;;;N;;;;; 1FB26;BLOCK SEXTANT-46;So;0;ON;;;;;N;;;;; 1FB27;BLOCK SEXTANT-146;So;0;ON;;;;;N;;;;; 1FB28;BLOCK SEXTANT-1246;So;0;ON;;;;;N;;;;; 1FB29;BLOCK SEXTANT-346;So;0;ON;;;;;N;;;;; 1FB2A;BLOCK SEXTANT-1346;So;0;ON;;;;;N;;;;; 1FB2B;BLOCK SEXTANT-2346;So;0;ON;;;;;N;;;;; 1FB2C;BLOCK SEXTANT-12346;So;0;ON;;;;;N;;;;; 1FB2D;BLOCK SEXTANT-56;So;0;ON;;;;;N;;;;; 1FB2E;BLOCK SEXTANT-156;So;0;ON;;;;;N;;;;; 1FB2F;BLOCK SEXTANT-256;So;0;ON;;;;;N;;;;; 1FB30;BLOCK SEXTANT-1256;So;0;ON;;;;;N;;;;; 1FB31;BLOCK SEXTANT-356;So;0;ON;;;;;N;;;;; 1FB32;BLOCK SEXTANT-1356;So;0;ON;;;;;N;;;;; 1FB33;BLOCK SEXTANT-2356;So;0;ON;;;;;N;;;;; 1FB34;BLOCK SEXTANT-12356;So;0;ON;;;;;N;;;;; 1FB35;BLOCK SEXTANT-456;So;0;ON;;;;;N;;;;; 1FB36;BLOCK SEXTANT-1456;So;0;ON;;;;;N;;;;; 1FB37;BLOCK SEXTANT-2456;So;0;ON;;;;;N;;;;; 1FB38;BLOCK SEXTANT-12456;So;0;ON;;;;;N;;;;; 1FB39;BLOCK SEXTANT-3456;So;0;ON;;;;;N;;;;; 1FB3A;BLOCK SEXTANT-13456;So;0;ON;;;;;N;;;;; 1FB3B;BLOCK SEXTANT-23456;So;0;ON;;;;;N;;;;; 1FB3C;LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FB3D;LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;; 1FB3E;LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FB3F;LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;; 1FB40;LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FB41;LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;; 1FB42;LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT;So;0;ON;;;;;N;;;;; 1FB43;LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;; 1FB44;LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT;So;0;ON;;;;;N;;;;; 1FB45;LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;; 1FB46;LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB47;LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB48;LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB49;LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB4A;LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB4B;LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT;So;0;ON;;;;;N;;;;; 1FB4C;LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB4D;LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB4E;LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB4F;LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB50;LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT;So;0;ON;;;;;N;;;;; 1FB51;LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB52;UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FB53;UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;; 1FB54;UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FB55;UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;; 1FB56;UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FB57;UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;; 1FB58;UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT;So;0;ON;;;;;N;;;;; 1FB59;UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;; 1FB5A;UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT;So;0;ON;;;;;N;;;;; 1FB5B;UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;; 1FB5C;UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB5D;UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB5E;UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB5F;UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB60;UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB61;UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT;So;0;ON;;;;;N;;;;; 1FB62;UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB63;UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB64;UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB65;UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB66;UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT;So;0;ON;;;;;N;;;;; 1FB67;UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FB68;UPPER AND RIGHT AND LOWER TRIANGULAR THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;; 1FB69;LEFT AND LOWER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;; 1FB6A;UPPER AND LEFT AND LOWER TRIANGULAR THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;; 1FB6B;LEFT AND UPPER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;; 1FB6C;LEFT TRIANGULAR ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; 1FB6D;UPPER TRIANGULAR ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; 1FB6E;RIGHT TRIANGULAR ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; 1FB6F;LOWER TRIANGULAR ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; 1FB70;VERTICAL ONE EIGHTH BLOCK-2;So;0;ON;;;;;N;;;;; 1FB71;VERTICAL ONE EIGHTH BLOCK-3;So;0;ON;;;;;N;;;;; 1FB72;VERTICAL ONE EIGHTH BLOCK-4;So;0;ON;;;;;N;;;;; 1FB73;VERTICAL ONE EIGHTH BLOCK-5;So;0;ON;;;;;N;;;;; 1FB74;VERTICAL ONE EIGHTH BLOCK-6;So;0;ON;;;;;N;;;;; 1FB75;VERTICAL ONE EIGHTH BLOCK-7;So;0;ON;;;;;N;;;;; 1FB76;HORIZONTAL ONE EIGHTH BLOCK-2;So;0;ON;;;;;N;;;;; 1FB77;HORIZONTAL ONE EIGHTH BLOCK-3;So;0;ON;;;;;N;;;;; 1FB78;HORIZONTAL ONE EIGHTH BLOCK-4;So;0;ON;;;;;N;;;;; 1FB79;HORIZONTAL ONE EIGHTH BLOCK-5;So;0;ON;;;;;N;;;;; 1FB7A;HORIZONTAL ONE EIGHTH BLOCK-6;So;0;ON;;;;;N;;;;; 1FB7B;HORIZONTAL ONE EIGHTH BLOCK-7;So;0;ON;;;;;N;;;;; 1FB7C;LEFT AND LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 1FB7D;LEFT AND UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 1FB7E;RIGHT AND UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 1FB7F;RIGHT AND LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 1FB80;UPPER AND LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 1FB81;HORIZONTAL ONE EIGHTH BLOCK-1358;So;0;ON;;;;;N;;;;; 1FB82;UPPER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; 1FB83;UPPER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 1FB84;UPPER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 1FB85;UPPER THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;; 1FB86;UPPER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 1FB87;RIGHT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; 1FB88;RIGHT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 1FB89;RIGHT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 1FB8A;RIGHT THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;; 1FB8B;RIGHT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 1FB8C;LEFT HALF MEDIUM SHADE;So;0;ON;;;;;N;;;;; 1FB8D;RIGHT HALF MEDIUM SHADE;So;0;ON;;;;;N;;;;; 1FB8E;UPPER HALF MEDIUM SHADE;So;0;ON;;;;;N;;;;; 1FB8F;LOWER HALF MEDIUM SHADE;So;0;ON;;;;;N;;;;; 1FB90;INVERSE MEDIUM SHADE;So;0;ON;;;;;N;;;;; 1FB91;UPPER HALF BLOCK AND LOWER HALF INVERSE MEDIUM SHADE;So;0;ON;;;;;N;;;;; 1FB92;UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK;So;0;ON;;;;;N;;;;; 1FB94;LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;; 1FB95;CHECKER BOARD FILL;So;0;ON;;;;;N;;;;; 1FB96;INVERSE CHECKER BOARD FILL;So;0;ON;;;;;N;;;;; 1FB97;HEAVY HORIZONTAL FILL;So;0;ON;;;;;N;;;;; 1FB98;UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;; 1FB99;UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;; 1FB9A;UPPER AND LOWER TRIANGULAR HALF BLOCK;So;0;ON;;;;;N;;;;; 1FB9B;LEFT AND RIGHT TRIANGULAR HALF BLOCK;So;0;ON;;;;;N;;;;; 1FB9C;UPPER LEFT TRIANGULAR MEDIUM SHADE;So;0;ON;;;;;N;;;;; 1FB9D;UPPER RIGHT TRIANGULAR MEDIUM SHADE;So;0;ON;;;;;N;;;;; 1FB9E;LOWER RIGHT TRIANGULAR MEDIUM SHADE;So;0;ON;;;;;N;;;;; 1FB9F;LOWER LEFT TRIANGULAR MEDIUM SHADE;So;0;ON;;;;;N;;;;; 1FBA0;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT;So;0;ON;;;;;N;;;;; 1FBA1;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FBA2;BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FBA3;BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FBA4;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FBA5;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FBA6;BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FBA7;BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FBA8;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT AND MIDDLE RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FBA9;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT AND MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FBAA;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE TO MIDDLE LEFT;So;0;ON;;;;;N;;;;; 1FBAB;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT;So;0;ON;;;;;N;;;;; 1FBAC;BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FBAD;BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FBAE;BOX DRAWINGS LIGHT DIAGONAL DIAMOND;So;0;ON;;;;;N;;;;; 1FBAF;BOX DRAWINGS LIGHT HORIZONTAL WITH VERTICAL STROKE;So;0;ON;;;;;N;;;;; 1FBB0;ARROWHEAD-SHAPED POINTER;So;0;ON;;;;;N;;;;; 1FBB1;INVERSE CHECK MARK;So;0;ON;;;;;N;;;;; 1FBB2;LEFT HALF RUNNING MAN;So;0;ON;;;;;N;;;;; 1FBB3;RIGHT HALF RUNNING MAN;So;0;ON;;;;;N;;;;; 1FBB4;INVERSE DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;;;;; 1FBB5;LEFTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 1FBB6;RIGHTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 1FBB7;DOWNWARDS ARROW AND RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 1FBB8;UPWARDS ARROW AND RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 1FBB9;LEFT HALF FOLDER;So;0;ON;;;;;N;;;;; 1FBBA;RIGHT HALF FOLDER;So;0;ON;;;;;N;;;;; 1FBBB;VOIDED GREEK CROSS;So;0;ON;;;;;N;;;;; 1FBBC;RIGHT OPEN SQUARED DOT;So;0;ON;;;;;N;;;;; 1FBBD;NEGATIVE DIAGONAL CROSS;So;0;ON;;;;;N;;;;; 1FBBE;NEGATIVE DIAGONAL MIDDLE RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; 1FBBF;NEGATIVE DIAGONAL DIAMOND;So;0;ON;;;;;N;;;;; 1FBC0;WHITE HEAVY SALTIRE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;; 1FBC1;LEFT THIRD WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; 1FBC2;MIDDLE THIRD WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; 1FBC3;RIGHT THIRD WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; 1FBC4;NEGATIVE SQUARED QUESTION MARK;So;0;ON;;;;;N;;;;; 1FBC5;STICK FIGURE;So;0;ON;;;;;N;;;;; 1FBC6;STICK FIGURE WITH ARMS RAISED;So;0;ON;;;;;N;;;;; 1FBC7;STICK FIGURE LEANING LEFT;So;0;ON;;;;;N;;;;; 1FBC8;STICK FIGURE LEANING RIGHT;So;0;ON;;;;;N;;;;; 1FBC9;STICK FIGURE WITH DRESS;So;0;ON;;;;;N;;;;; 1FBCA;WHITE UP-POINTING CHEVRON;So;0;ON;;;;;N;;;;; 1FBF0;SEGMENTED DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; 1FBF1;SEGMENTED DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; 1FBF2;SEGMENTED DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; 1FBF3;SEGMENTED DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; 1FBF4;SEGMENTED DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; 1FBF5;SEGMENTED DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; 1FBF6;SEGMENTED DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; 1FBF7;SEGMENTED DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; 1FBF8;SEGMENTED DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; 1FBF9;SEGMENTED DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; 20000;;Lo;0;L;;;;;N;;;;; 2A6DF;;Lo;0;L;;;;;N;;;;; 2A700;;Lo;0;L;;;;;N;;;;; 2B738;;Lo;0;L;;;;;N;;;;; 2B740;;Lo;0;L;;;;;N;;;;; 2B81D;;Lo;0;L;;;;;N;;;;; 2B820;;Lo;0;L;;;;;N;;;;; 2CEA1;;Lo;0;L;;;;;N;;;;; 2CEB0;;Lo;0;L;;;;;N;;;;; 2EBE0;;Lo;0;L;;;;;N;;;;; 2F800;CJK COMPATIBILITY IDEOGRAPH-2F800;Lo;0;L;4E3D;;;;N;;;;; 2F801;CJK COMPATIBILITY IDEOGRAPH-2F801;Lo;0;L;4E38;;;;N;;;;; 2F802;CJK COMPATIBILITY IDEOGRAPH-2F802;Lo;0;L;4E41;;;;N;;;;; 2F803;CJK COMPATIBILITY IDEOGRAPH-2F803;Lo;0;L;20122;;;;N;;;;; 2F804;CJK COMPATIBILITY IDEOGRAPH-2F804;Lo;0;L;4F60;;;;N;;;;; 2F805;CJK COMPATIBILITY IDEOGRAPH-2F805;Lo;0;L;4FAE;;;;N;;;;; 2F806;CJK COMPATIBILITY IDEOGRAPH-2F806;Lo;0;L;4FBB;;;;N;;;;; 2F807;CJK COMPATIBILITY IDEOGRAPH-2F807;Lo;0;L;5002;;;;N;;;;; 2F808;CJK COMPATIBILITY IDEOGRAPH-2F808;Lo;0;L;507A;;;;N;;;;; 2F809;CJK COMPATIBILITY IDEOGRAPH-2F809;Lo;0;L;5099;;;;N;;;;; 2F80A;CJK COMPATIBILITY IDEOGRAPH-2F80A;Lo;0;L;50E7;;;;N;;;;; 2F80B;CJK COMPATIBILITY IDEOGRAPH-2F80B;Lo;0;L;50CF;;;;N;;;;; 2F80C;CJK COMPATIBILITY IDEOGRAPH-2F80C;Lo;0;L;349E;;;;N;;;;; 2F80D;CJK COMPATIBILITY IDEOGRAPH-2F80D;Lo;0;L;2063A;;;;N;;;;; 2F80E;CJK COMPATIBILITY IDEOGRAPH-2F80E;Lo;0;L;514D;;;;N;;;;; 2F80F;CJK COMPATIBILITY IDEOGRAPH-2F80F;Lo;0;L;5154;;;;N;;;;; 2F810;CJK COMPATIBILITY IDEOGRAPH-2F810;Lo;0;L;5164;;;;N;;;;; 2F811;CJK COMPATIBILITY IDEOGRAPH-2F811;Lo;0;L;5177;;;;N;;;;; 2F812;CJK COMPATIBILITY IDEOGRAPH-2F812;Lo;0;L;2051C;;;;N;;;;; 2F813;CJK COMPATIBILITY IDEOGRAPH-2F813;Lo;0;L;34B9;;;;N;;;;; 2F814;CJK COMPATIBILITY IDEOGRAPH-2F814;Lo;0;L;5167;;;;N;;;;; 2F815;CJK COMPATIBILITY IDEOGRAPH-2F815;Lo;0;L;518D;;;;N;;;;; 2F816;CJK COMPATIBILITY IDEOGRAPH-2F816;Lo;0;L;2054B;;;;N;;;;; 2F817;CJK COMPATIBILITY IDEOGRAPH-2F817;Lo;0;L;5197;;;;N;;;;; 2F818;CJK COMPATIBILITY IDEOGRAPH-2F818;Lo;0;L;51A4;;;;N;;;;; 2F819;CJK COMPATIBILITY IDEOGRAPH-2F819;Lo;0;L;4ECC;;;;N;;;;; 2F81A;CJK COMPATIBILITY IDEOGRAPH-2F81A;Lo;0;L;51AC;;;;N;;;;; 2F81B;CJK COMPATIBILITY IDEOGRAPH-2F81B;Lo;0;L;51B5;;;;N;;;;; 2F81C;CJK COMPATIBILITY IDEOGRAPH-2F81C;Lo;0;L;291DF;;;;N;;;;; 2F81D;CJK COMPATIBILITY IDEOGRAPH-2F81D;Lo;0;L;51F5;;;;N;;;;; 2F81E;CJK COMPATIBILITY IDEOGRAPH-2F81E;Lo;0;L;5203;;;;N;;;;; 2F81F;CJK COMPATIBILITY IDEOGRAPH-2F81F;Lo;0;L;34DF;;;;N;;;;; 2F820;CJK COMPATIBILITY IDEOGRAPH-2F820;Lo;0;L;523B;;;;N;;;;; 2F821;CJK COMPATIBILITY IDEOGRAPH-2F821;Lo;0;L;5246;;;;N;;;;; 2F822;CJK COMPATIBILITY IDEOGRAPH-2F822;Lo;0;L;5272;;;;N;;;;; 2F823;CJK COMPATIBILITY IDEOGRAPH-2F823;Lo;0;L;5277;;;;N;;;;; 2F824;CJK COMPATIBILITY IDEOGRAPH-2F824;Lo;0;L;3515;;;;N;;;;; 2F825;CJK COMPATIBILITY IDEOGRAPH-2F825;Lo;0;L;52C7;;;;N;;;;; 2F826;CJK COMPATIBILITY IDEOGRAPH-2F826;Lo;0;L;52C9;;;;N;;;;; 2F827;CJK COMPATIBILITY IDEOGRAPH-2F827;Lo;0;L;52E4;;;;N;;;;; 2F828;CJK COMPATIBILITY IDEOGRAPH-2F828;Lo;0;L;52FA;;;;N;;;;; 2F829;CJK COMPATIBILITY IDEOGRAPH-2F829;Lo;0;L;5305;;;;N;;;;; 2F82A;CJK COMPATIBILITY IDEOGRAPH-2F82A;Lo;0;L;5306;;;;N;;;;; 2F82B;CJK COMPATIBILITY IDEOGRAPH-2F82B;Lo;0;L;5317;;;;N;;;;; 2F82C;CJK COMPATIBILITY IDEOGRAPH-2F82C;Lo;0;L;5349;;;;N;;;;; 2F82D;CJK COMPATIBILITY IDEOGRAPH-2F82D;Lo;0;L;5351;;;;N;;;;; 2F82E;CJK COMPATIBILITY IDEOGRAPH-2F82E;Lo;0;L;535A;;;;N;;;;; 2F82F;CJK COMPATIBILITY IDEOGRAPH-2F82F;Lo;0;L;5373;;;;N;;;;; 2F830;CJK COMPATIBILITY IDEOGRAPH-2F830;Lo;0;L;537D;;;;N;;;;; 2F831;CJK COMPATIBILITY IDEOGRAPH-2F831;Lo;0;L;537F;;;;N;;;;; 2F832;CJK COMPATIBILITY IDEOGRAPH-2F832;Lo;0;L;537F;;;;N;;;;; 2F833;CJK COMPATIBILITY IDEOGRAPH-2F833;Lo;0;L;537F;;;;N;;;;; 2F834;CJK COMPATIBILITY IDEOGRAPH-2F834;Lo;0;L;20A2C;;;;N;;;;; 2F835;CJK COMPATIBILITY IDEOGRAPH-2F835;Lo;0;L;7070;;;;N;;;;; 2F836;CJK COMPATIBILITY IDEOGRAPH-2F836;Lo;0;L;53CA;;;;N;;;;; 2F837;CJK COMPATIBILITY IDEOGRAPH-2F837;Lo;0;L;53DF;;;;N;;;;; 2F838;CJK COMPATIBILITY IDEOGRAPH-2F838;Lo;0;L;20B63;;;;N;;;;; 2F839;CJK COMPATIBILITY IDEOGRAPH-2F839;Lo;0;L;53EB;;;;N;;;;; 2F83A;CJK COMPATIBILITY IDEOGRAPH-2F83A;Lo;0;L;53F1;;;;N;;;;; 2F83B;CJK COMPATIBILITY IDEOGRAPH-2F83B;Lo;0;L;5406;;;;N;;;;; 2F83C;CJK COMPATIBILITY IDEOGRAPH-2F83C;Lo;0;L;549E;;;;N;;;;; 2F83D;CJK COMPATIBILITY IDEOGRAPH-2F83D;Lo;0;L;5438;;;;N;;;;; 2F83E;CJK COMPATIBILITY IDEOGRAPH-2F83E;Lo;0;L;5448;;;;N;;;;; 2F83F;CJK COMPATIBILITY IDEOGRAPH-2F83F;Lo;0;L;5468;;;;N;;;;; 2F840;CJK COMPATIBILITY IDEOGRAPH-2F840;Lo;0;L;54A2;;;;N;;;;; 2F841;CJK COMPATIBILITY IDEOGRAPH-2F841;Lo;0;L;54F6;;;;N;;;;; 2F842;CJK COMPATIBILITY IDEOGRAPH-2F842;Lo;0;L;5510;;;;N;;;;; 2F843;CJK COMPATIBILITY IDEOGRAPH-2F843;Lo;0;L;5553;;;;N;;;;; 2F844;CJK COMPATIBILITY IDEOGRAPH-2F844;Lo;0;L;5563;;;;N;;;;; 2F845;CJK COMPATIBILITY IDEOGRAPH-2F845;Lo;0;L;5584;;;;N;;;;; 2F846;CJK COMPATIBILITY IDEOGRAPH-2F846;Lo;0;L;5584;;;;N;;;;; 2F847;CJK COMPATIBILITY IDEOGRAPH-2F847;Lo;0;L;5599;;;;N;;;;; 2F848;CJK COMPATIBILITY IDEOGRAPH-2F848;Lo;0;L;55AB;;;;N;;;;; 2F849;CJK COMPATIBILITY IDEOGRAPH-2F849;Lo;0;L;55B3;;;;N;;;;; 2F84A;CJK COMPATIBILITY IDEOGRAPH-2F84A;Lo;0;L;55C2;;;;N;;;;; 2F84B;CJK COMPATIBILITY IDEOGRAPH-2F84B;Lo;0;L;5716;;;;N;;;;; 2F84C;CJK COMPATIBILITY IDEOGRAPH-2F84C;Lo;0;L;5606;;;;N;;;;; 2F84D;CJK COMPATIBILITY IDEOGRAPH-2F84D;Lo;0;L;5717;;;;N;;;;; 2F84E;CJK COMPATIBILITY IDEOGRAPH-2F84E;Lo;0;L;5651;;;;N;;;;; 2F84F;CJK COMPATIBILITY IDEOGRAPH-2F84F;Lo;0;L;5674;;;;N;;;;; 2F850;CJK COMPATIBILITY IDEOGRAPH-2F850;Lo;0;L;5207;;;;N;;;;; 2F851;CJK COMPATIBILITY IDEOGRAPH-2F851;Lo;0;L;58EE;;;;N;;;;; 2F852;CJK COMPATIBILITY IDEOGRAPH-2F852;Lo;0;L;57CE;;;;N;;;;; 2F853;CJK COMPATIBILITY IDEOGRAPH-2F853;Lo;0;L;57F4;;;;N;;;;; 2F854;CJK COMPATIBILITY IDEOGRAPH-2F854;Lo;0;L;580D;;;;N;;;;; 2F855;CJK COMPATIBILITY IDEOGRAPH-2F855;Lo;0;L;578B;;;;N;;;;; 2F856;CJK COMPATIBILITY IDEOGRAPH-2F856;Lo;0;L;5832;;;;N;;;;; 2F857;CJK COMPATIBILITY IDEOGRAPH-2F857;Lo;0;L;5831;;;;N;;;;; 2F858;CJK COMPATIBILITY IDEOGRAPH-2F858;Lo;0;L;58AC;;;;N;;;;; 2F859;CJK COMPATIBILITY IDEOGRAPH-2F859;Lo;0;L;214E4;;;;N;;;;; 2F85A;CJK COMPATIBILITY IDEOGRAPH-2F85A;Lo;0;L;58F2;;;;N;;;;; 2F85B;CJK COMPATIBILITY IDEOGRAPH-2F85B;Lo;0;L;58F7;;;;N;;;;; 2F85C;CJK COMPATIBILITY IDEOGRAPH-2F85C;Lo;0;L;5906;;;;N;;;;; 2F85D;CJK COMPATIBILITY IDEOGRAPH-2F85D;Lo;0;L;591A;;;;N;;;;; 2F85E;CJK COMPATIBILITY IDEOGRAPH-2F85E;Lo;0;L;5922;;;;N;;;;; 2F85F;CJK COMPATIBILITY IDEOGRAPH-2F85F;Lo;0;L;5962;;;;N;;;;; 2F860;CJK COMPATIBILITY IDEOGRAPH-2F860;Lo;0;L;216A8;;;;N;;;;; 2F861;CJK COMPATIBILITY IDEOGRAPH-2F861;Lo;0;L;216EA;;;;N;;;;; 2F862;CJK COMPATIBILITY IDEOGRAPH-2F862;Lo;0;L;59EC;;;;N;;;;; 2F863;CJK COMPATIBILITY IDEOGRAPH-2F863;Lo;0;L;5A1B;;;;N;;;;; 2F864;CJK COMPATIBILITY IDEOGRAPH-2F864;Lo;0;L;5A27;;;;N;;;;; 2F865;CJK COMPATIBILITY IDEOGRAPH-2F865;Lo;0;L;59D8;;;;N;;;;; 2F866;CJK COMPATIBILITY IDEOGRAPH-2F866;Lo;0;L;5A66;;;;N;;;;; 2F867;CJK COMPATIBILITY IDEOGRAPH-2F867;Lo;0;L;36EE;;;;N;;;;; 2F868;CJK COMPATIBILITY IDEOGRAPH-2F868;Lo;0;L;36FC;;;;N;;;;; 2F869;CJK COMPATIBILITY IDEOGRAPH-2F869;Lo;0;L;5B08;;;;N;;;;; 2F86A;CJK COMPATIBILITY IDEOGRAPH-2F86A;Lo;0;L;5B3E;;;;N;;;;; 2F86B;CJK COMPATIBILITY IDEOGRAPH-2F86B;Lo;0;L;5B3E;;;;N;;;;; 2F86C;CJK COMPATIBILITY IDEOGRAPH-2F86C;Lo;0;L;219C8;;;;N;;;;; 2F86D;CJK COMPATIBILITY IDEOGRAPH-2F86D;Lo;0;L;5BC3;;;;N;;;;; 2F86E;CJK COMPATIBILITY IDEOGRAPH-2F86E;Lo;0;L;5BD8;;;;N;;;;; 2F86F;CJK COMPATIBILITY IDEOGRAPH-2F86F;Lo;0;L;5BE7;;;;N;;;;; 2F870;CJK COMPATIBILITY IDEOGRAPH-2F870;Lo;0;L;5BF3;;;;N;;;;; 2F871;CJK COMPATIBILITY IDEOGRAPH-2F871;Lo;0;L;21B18;;;;N;;;;; 2F872;CJK COMPATIBILITY IDEOGRAPH-2F872;Lo;0;L;5BFF;;;;N;;;;; 2F873;CJK COMPATIBILITY IDEOGRAPH-2F873;Lo;0;L;5C06;;;;N;;;;; 2F874;CJK COMPATIBILITY IDEOGRAPH-2F874;Lo;0;L;5F53;;;;N;;;;; 2F875;CJK COMPATIBILITY IDEOGRAPH-2F875;Lo;0;L;5C22;;;;N;;;;; 2F876;CJK COMPATIBILITY IDEOGRAPH-2F876;Lo;0;L;3781;;;;N;;;;; 2F877;CJK COMPATIBILITY IDEOGRAPH-2F877;Lo;0;L;5C60;;;;N;;;;; 2F878;CJK COMPATIBILITY IDEOGRAPH-2F878;Lo;0;L;5C6E;;;;N;;;;; 2F879;CJK COMPATIBILITY IDEOGRAPH-2F879;Lo;0;L;5CC0;;;;N;;;;; 2F87A;CJK COMPATIBILITY IDEOGRAPH-2F87A;Lo;0;L;5C8D;;;;N;;;;; 2F87B;CJK COMPATIBILITY IDEOGRAPH-2F87B;Lo;0;L;21DE4;;;;N;;;;; 2F87C;CJK COMPATIBILITY IDEOGRAPH-2F87C;Lo;0;L;5D43;;;;N;;;;; 2F87D;CJK COMPATIBILITY IDEOGRAPH-2F87D;Lo;0;L;21DE6;;;;N;;;;; 2F87E;CJK COMPATIBILITY IDEOGRAPH-2F87E;Lo;0;L;5D6E;;;;N;;;;; 2F87F;CJK COMPATIBILITY IDEOGRAPH-2F87F;Lo;0;L;5D6B;;;;N;;;;; 2F880;CJK COMPATIBILITY IDEOGRAPH-2F880;Lo;0;L;5D7C;;;;N;;;;; 2F881;CJK COMPATIBILITY IDEOGRAPH-2F881;Lo;0;L;5DE1;;;;N;;;;; 2F882;CJK COMPATIBILITY IDEOGRAPH-2F882;Lo;0;L;5DE2;;;;N;;;;; 2F883;CJK COMPATIBILITY IDEOGRAPH-2F883;Lo;0;L;382F;;;;N;;;;; 2F884;CJK COMPATIBILITY IDEOGRAPH-2F884;Lo;0;L;5DFD;;;;N;;;;; 2F885;CJK COMPATIBILITY IDEOGRAPH-2F885;Lo;0;L;5E28;;;;N;;;;; 2F886;CJK COMPATIBILITY IDEOGRAPH-2F886;Lo;0;L;5E3D;;;;N;;;;; 2F887;CJK COMPATIBILITY IDEOGRAPH-2F887;Lo;0;L;5E69;;;;N;;;;; 2F888;CJK COMPATIBILITY IDEOGRAPH-2F888;Lo;0;L;3862;;;;N;;;;; 2F889;CJK COMPATIBILITY IDEOGRAPH-2F889;Lo;0;L;22183;;;;N;;;;; 2F88A;CJK COMPATIBILITY IDEOGRAPH-2F88A;Lo;0;L;387C;;;;N;;;;; 2F88B;CJK COMPATIBILITY IDEOGRAPH-2F88B;Lo;0;L;5EB0;;;;N;;;;; 2F88C;CJK COMPATIBILITY IDEOGRAPH-2F88C;Lo;0;L;5EB3;;;;N;;;;; 2F88D;CJK COMPATIBILITY IDEOGRAPH-2F88D;Lo;0;L;5EB6;;;;N;;;;; 2F88E;CJK COMPATIBILITY IDEOGRAPH-2F88E;Lo;0;L;5ECA;;;;N;;;;; 2F88F;CJK COMPATIBILITY IDEOGRAPH-2F88F;Lo;0;L;2A392;;;;N;;;;; 2F890;CJK COMPATIBILITY IDEOGRAPH-2F890;Lo;0;L;5EFE;;;9;N;;;;; 2F891;CJK COMPATIBILITY IDEOGRAPH-2F891;Lo;0;L;22331;;;;N;;;;; 2F892;CJK COMPATIBILITY IDEOGRAPH-2F892;Lo;0;L;22331;;;;N;;;;; 2F893;CJK COMPATIBILITY IDEOGRAPH-2F893;Lo;0;L;8201;;;;N;;;;; 2F894;CJK COMPATIBILITY IDEOGRAPH-2F894;Lo;0;L;5F22;;;;N;;;;; 2F895;CJK COMPATIBILITY IDEOGRAPH-2F895;Lo;0;L;5F22;;;;N;;;;; 2F896;CJK COMPATIBILITY IDEOGRAPH-2F896;Lo;0;L;38C7;;;;N;;;;; 2F897;CJK COMPATIBILITY IDEOGRAPH-2F897;Lo;0;L;232B8;;;;N;;;;; 2F898;CJK COMPATIBILITY IDEOGRAPH-2F898;Lo;0;L;261DA;;;;N;;;;; 2F899;CJK COMPATIBILITY IDEOGRAPH-2F899;Lo;0;L;5F62;;;;N;;;;; 2F89A;CJK COMPATIBILITY IDEOGRAPH-2F89A;Lo;0;L;5F6B;;;;N;;;;; 2F89B;CJK COMPATIBILITY IDEOGRAPH-2F89B;Lo;0;L;38E3;;;;N;;;;; 2F89C;CJK COMPATIBILITY IDEOGRAPH-2F89C;Lo;0;L;5F9A;;;;N;;;;; 2F89D;CJK COMPATIBILITY IDEOGRAPH-2F89D;Lo;0;L;5FCD;;;;N;;;;; 2F89E;CJK COMPATIBILITY IDEOGRAPH-2F89E;Lo;0;L;5FD7;;;;N;;;;; 2F89F;CJK COMPATIBILITY IDEOGRAPH-2F89F;Lo;0;L;5FF9;;;;N;;;;; 2F8A0;CJK COMPATIBILITY IDEOGRAPH-2F8A0;Lo;0;L;6081;;;;N;;;;; 2F8A1;CJK COMPATIBILITY IDEOGRAPH-2F8A1;Lo;0;L;393A;;;;N;;;;; 2F8A2;CJK COMPATIBILITY IDEOGRAPH-2F8A2;Lo;0;L;391C;;;;N;;;;; 2F8A3;CJK COMPATIBILITY IDEOGRAPH-2F8A3;Lo;0;L;6094;;;;N;;;;; 2F8A4;CJK COMPATIBILITY IDEOGRAPH-2F8A4;Lo;0;L;226D4;;;;N;;;;; 2F8A5;CJK COMPATIBILITY IDEOGRAPH-2F8A5;Lo;0;L;60C7;;;;N;;;;; 2F8A6;CJK COMPATIBILITY IDEOGRAPH-2F8A6;Lo;0;L;6148;;;;N;;;;; 2F8A7;CJK COMPATIBILITY IDEOGRAPH-2F8A7;Lo;0;L;614C;;;;N;;;;; 2F8A8;CJK COMPATIBILITY IDEOGRAPH-2F8A8;Lo;0;L;614E;;;;N;;;;; 2F8A9;CJK COMPATIBILITY IDEOGRAPH-2F8A9;Lo;0;L;614C;;;;N;;;;; 2F8AA;CJK COMPATIBILITY IDEOGRAPH-2F8AA;Lo;0;L;617A;;;;N;;;;; 2F8AB;CJK COMPATIBILITY IDEOGRAPH-2F8AB;Lo;0;L;618E;;;;N;;;;; 2F8AC;CJK COMPATIBILITY IDEOGRAPH-2F8AC;Lo;0;L;61B2;;;;N;;;;; 2F8AD;CJK COMPATIBILITY IDEOGRAPH-2F8AD;Lo;0;L;61A4;;;;N;;;;; 2F8AE;CJK COMPATIBILITY IDEOGRAPH-2F8AE;Lo;0;L;61AF;;;;N;;;;; 2F8AF;CJK COMPATIBILITY IDEOGRAPH-2F8AF;Lo;0;L;61DE;;;;N;;;;; 2F8B0;CJK COMPATIBILITY IDEOGRAPH-2F8B0;Lo;0;L;61F2;;;;N;;;;; 2F8B1;CJK COMPATIBILITY IDEOGRAPH-2F8B1;Lo;0;L;61F6;;;;N;;;;; 2F8B2;CJK COMPATIBILITY IDEOGRAPH-2F8B2;Lo;0;L;6210;;;;N;;;;; 2F8B3;CJK COMPATIBILITY IDEOGRAPH-2F8B3;Lo;0;L;621B;;;;N;;;;; 2F8B4;CJK COMPATIBILITY IDEOGRAPH-2F8B4;Lo;0;L;625D;;;;N;;;;; 2F8B5;CJK COMPATIBILITY IDEOGRAPH-2F8B5;Lo;0;L;62B1;;;;N;;;;; 2F8B6;CJK COMPATIBILITY IDEOGRAPH-2F8B6;Lo;0;L;62D4;;;;N;;;;; 2F8B7;CJK COMPATIBILITY IDEOGRAPH-2F8B7;Lo;0;L;6350;;;;N;;;;; 2F8B8;CJK COMPATIBILITY IDEOGRAPH-2F8B8;Lo;0;L;22B0C;;;;N;;;;; 2F8B9;CJK COMPATIBILITY IDEOGRAPH-2F8B9;Lo;0;L;633D;;;;N;;;;; 2F8BA;CJK COMPATIBILITY IDEOGRAPH-2F8BA;Lo;0;L;62FC;;;;N;;;;; 2F8BB;CJK COMPATIBILITY IDEOGRAPH-2F8BB;Lo;0;L;6368;;;;N;;;;; 2F8BC;CJK COMPATIBILITY IDEOGRAPH-2F8BC;Lo;0;L;6383;;;;N;;;;; 2F8BD;CJK COMPATIBILITY IDEOGRAPH-2F8BD;Lo;0;L;63E4;;;;N;;;;; 2F8BE;CJK COMPATIBILITY IDEOGRAPH-2F8BE;Lo;0;L;22BF1;;;;N;;;;; 2F8BF;CJK COMPATIBILITY IDEOGRAPH-2F8BF;Lo;0;L;6422;;;;N;;;;; 2F8C0;CJK COMPATIBILITY IDEOGRAPH-2F8C0;Lo;0;L;63C5;;;;N;;;;; 2F8C1;CJK COMPATIBILITY IDEOGRAPH-2F8C1;Lo;0;L;63A9;;;;N;;;;; 2F8C2;CJK COMPATIBILITY IDEOGRAPH-2F8C2;Lo;0;L;3A2E;;;;N;;;;; 2F8C3;CJK COMPATIBILITY IDEOGRAPH-2F8C3;Lo;0;L;6469;;;;N;;;;; 2F8C4;CJK COMPATIBILITY IDEOGRAPH-2F8C4;Lo;0;L;647E;;;;N;;;;; 2F8C5;CJK COMPATIBILITY IDEOGRAPH-2F8C5;Lo;0;L;649D;;;;N;;;;; 2F8C6;CJK COMPATIBILITY IDEOGRAPH-2F8C6;Lo;0;L;6477;;;;N;;;;; 2F8C7;CJK COMPATIBILITY IDEOGRAPH-2F8C7;Lo;0;L;3A6C;;;;N;;;;; 2F8C8;CJK COMPATIBILITY IDEOGRAPH-2F8C8;Lo;0;L;654F;;;;N;;;;; 2F8C9;CJK COMPATIBILITY IDEOGRAPH-2F8C9;Lo;0;L;656C;;;;N;;;;; 2F8CA;CJK COMPATIBILITY IDEOGRAPH-2F8CA;Lo;0;L;2300A;;;;N;;;;; 2F8CB;CJK COMPATIBILITY IDEOGRAPH-2F8CB;Lo;0;L;65E3;;;;N;;;;; 2F8CC;CJK COMPATIBILITY IDEOGRAPH-2F8CC;Lo;0;L;66F8;;;;N;;;;; 2F8CD;CJK COMPATIBILITY IDEOGRAPH-2F8CD;Lo;0;L;6649;;;;N;;;;; 2F8CE;CJK COMPATIBILITY IDEOGRAPH-2F8CE;Lo;0;L;3B19;;;;N;;;;; 2F8CF;CJK COMPATIBILITY IDEOGRAPH-2F8CF;Lo;0;L;6691;;;;N;;;;; 2F8D0;CJK COMPATIBILITY IDEOGRAPH-2F8D0;Lo;0;L;3B08;;;;N;;;;; 2F8D1;CJK COMPATIBILITY IDEOGRAPH-2F8D1;Lo;0;L;3AE4;;;;N;;;;; 2F8D2;CJK COMPATIBILITY IDEOGRAPH-2F8D2;Lo;0;L;5192;;;;N;;;;; 2F8D3;CJK COMPATIBILITY IDEOGRAPH-2F8D3;Lo;0;L;5195;;;;N;;;;; 2F8D4;CJK COMPATIBILITY IDEOGRAPH-2F8D4;Lo;0;L;6700;;;;N;;;;; 2F8D5;CJK COMPATIBILITY IDEOGRAPH-2F8D5;Lo;0;L;669C;;;;N;;;;; 2F8D6;CJK COMPATIBILITY IDEOGRAPH-2F8D6;Lo;0;L;80AD;;;;N;;;;; 2F8D7;CJK COMPATIBILITY IDEOGRAPH-2F8D7;Lo;0;L;43D9;;;;N;;;;; 2F8D8;CJK COMPATIBILITY IDEOGRAPH-2F8D8;Lo;0;L;6717;;;;N;;;;; 2F8D9;CJK COMPATIBILITY IDEOGRAPH-2F8D9;Lo;0;L;671B;;;;N;;;;; 2F8DA;CJK COMPATIBILITY IDEOGRAPH-2F8DA;Lo;0;L;6721;;;;N;;;;; 2F8DB;CJK COMPATIBILITY IDEOGRAPH-2F8DB;Lo;0;L;675E;;;;N;;;;; 2F8DC;CJK COMPATIBILITY IDEOGRAPH-2F8DC;Lo;0;L;6753;;;;N;;;;; 2F8DD;CJK COMPATIBILITY IDEOGRAPH-2F8DD;Lo;0;L;233C3;;;;N;;;;; 2F8DE;CJK COMPATIBILITY IDEOGRAPH-2F8DE;Lo;0;L;3B49;;;;N;;;;; 2F8DF;CJK COMPATIBILITY IDEOGRAPH-2F8DF;Lo;0;L;67FA;;;;N;;;;; 2F8E0;CJK COMPATIBILITY IDEOGRAPH-2F8E0;Lo;0;L;6785;;;;N;;;;; 2F8E1;CJK COMPATIBILITY IDEOGRAPH-2F8E1;Lo;0;L;6852;;;;N;;;;; 2F8E2;CJK COMPATIBILITY IDEOGRAPH-2F8E2;Lo;0;L;6885;;;;N;;;;; 2F8E3;CJK COMPATIBILITY IDEOGRAPH-2F8E3;Lo;0;L;2346D;;;;N;;;;; 2F8E4;CJK COMPATIBILITY IDEOGRAPH-2F8E4;Lo;0;L;688E;;;;N;;;;; 2F8E5;CJK COMPATIBILITY IDEOGRAPH-2F8E5;Lo;0;L;681F;;;;N;;;;; 2F8E6;CJK COMPATIBILITY IDEOGRAPH-2F8E6;Lo;0;L;6914;;;;N;;;;; 2F8E7;CJK COMPATIBILITY IDEOGRAPH-2F8E7;Lo;0;L;3B9D;;;;N;;;;; 2F8E8;CJK COMPATIBILITY IDEOGRAPH-2F8E8;Lo;0;L;6942;;;;N;;;;; 2F8E9;CJK COMPATIBILITY IDEOGRAPH-2F8E9;Lo;0;L;69A3;;;;N;;;;; 2F8EA;CJK COMPATIBILITY IDEOGRAPH-2F8EA;Lo;0;L;69EA;;;;N;;;;; 2F8EB;CJK COMPATIBILITY IDEOGRAPH-2F8EB;Lo;0;L;6AA8;;;;N;;;;; 2F8EC;CJK COMPATIBILITY IDEOGRAPH-2F8EC;Lo;0;L;236A3;;;;N;;;;; 2F8ED;CJK COMPATIBILITY IDEOGRAPH-2F8ED;Lo;0;L;6ADB;;;;N;;;;; 2F8EE;CJK COMPATIBILITY IDEOGRAPH-2F8EE;Lo;0;L;3C18;;;;N;;;;; 2F8EF;CJK COMPATIBILITY IDEOGRAPH-2F8EF;Lo;0;L;6B21;;;;N;;;;; 2F8F0;CJK COMPATIBILITY IDEOGRAPH-2F8F0;Lo;0;L;238A7;;;;N;;;;; 2F8F1;CJK COMPATIBILITY IDEOGRAPH-2F8F1;Lo;0;L;6B54;;;;N;;;;; 2F8F2;CJK COMPATIBILITY IDEOGRAPH-2F8F2;Lo;0;L;3C4E;;;;N;;;;; 2F8F3;CJK COMPATIBILITY IDEOGRAPH-2F8F3;Lo;0;L;6B72;;;;N;;;;; 2F8F4;CJK COMPATIBILITY IDEOGRAPH-2F8F4;Lo;0;L;6B9F;;;;N;;;;; 2F8F5;CJK COMPATIBILITY IDEOGRAPH-2F8F5;Lo;0;L;6BBA;;;;N;;;;; 2F8F6;CJK COMPATIBILITY IDEOGRAPH-2F8F6;Lo;0;L;6BBB;;;;N;;;;; 2F8F7;CJK COMPATIBILITY IDEOGRAPH-2F8F7;Lo;0;L;23A8D;;;;N;;;;; 2F8F8;CJK COMPATIBILITY IDEOGRAPH-2F8F8;Lo;0;L;21D0B;;;;N;;;;; 2F8F9;CJK COMPATIBILITY IDEOGRAPH-2F8F9;Lo;0;L;23AFA;;;;N;;;;; 2F8FA;CJK COMPATIBILITY IDEOGRAPH-2F8FA;Lo;0;L;6C4E;;;;N;;;;; 2F8FB;CJK COMPATIBILITY IDEOGRAPH-2F8FB;Lo;0;L;23CBC;;;;N;;;;; 2F8FC;CJK COMPATIBILITY IDEOGRAPH-2F8FC;Lo;0;L;6CBF;;;;N;;;;; 2F8FD;CJK COMPATIBILITY IDEOGRAPH-2F8FD;Lo;0;L;6CCD;;;;N;;;;; 2F8FE;CJK COMPATIBILITY IDEOGRAPH-2F8FE;Lo;0;L;6C67;;;;N;;;;; 2F8FF;CJK COMPATIBILITY IDEOGRAPH-2F8FF;Lo;0;L;6D16;;;;N;;;;; 2F900;CJK COMPATIBILITY IDEOGRAPH-2F900;Lo;0;L;6D3E;;;;N;;;;; 2F901;CJK COMPATIBILITY IDEOGRAPH-2F901;Lo;0;L;6D77;;;;N;;;;; 2F902;CJK COMPATIBILITY IDEOGRAPH-2F902;Lo;0;L;6D41;;;;N;;;;; 2F903;CJK COMPATIBILITY IDEOGRAPH-2F903;Lo;0;L;6D69;;;;N;;;;; 2F904;CJK COMPATIBILITY IDEOGRAPH-2F904;Lo;0;L;6D78;;;;N;;;;; 2F905;CJK COMPATIBILITY IDEOGRAPH-2F905;Lo;0;L;6D85;;;;N;;;;; 2F906;CJK COMPATIBILITY IDEOGRAPH-2F906;Lo;0;L;23D1E;;;;N;;;;; 2F907;CJK COMPATIBILITY IDEOGRAPH-2F907;Lo;0;L;6D34;;;;N;;;;; 2F908;CJK COMPATIBILITY IDEOGRAPH-2F908;Lo;0;L;6E2F;;;;N;;;;; 2F909;CJK COMPATIBILITY IDEOGRAPH-2F909;Lo;0;L;6E6E;;;;N;;;;; 2F90A;CJK COMPATIBILITY IDEOGRAPH-2F90A;Lo;0;L;3D33;;;;N;;;;; 2F90B;CJK COMPATIBILITY IDEOGRAPH-2F90B;Lo;0;L;6ECB;;;;N;;;;; 2F90C;CJK COMPATIBILITY IDEOGRAPH-2F90C;Lo;0;L;6EC7;;;;N;;;;; 2F90D;CJK COMPATIBILITY IDEOGRAPH-2F90D;Lo;0;L;23ED1;;;;N;;;;; 2F90E;CJK COMPATIBILITY IDEOGRAPH-2F90E;Lo;0;L;6DF9;;;;N;;;;; 2F90F;CJK COMPATIBILITY IDEOGRAPH-2F90F;Lo;0;L;6F6E;;;;N;;;;; 2F910;CJK COMPATIBILITY IDEOGRAPH-2F910;Lo;0;L;23F5E;;;;N;;;;; 2F911;CJK COMPATIBILITY IDEOGRAPH-2F911;Lo;0;L;23F8E;;;;N;;;;; 2F912;CJK COMPATIBILITY IDEOGRAPH-2F912;Lo;0;L;6FC6;;;;N;;;;; 2F913;CJK COMPATIBILITY IDEOGRAPH-2F913;Lo;0;L;7039;;;;N;;;;; 2F914;CJK COMPATIBILITY IDEOGRAPH-2F914;Lo;0;L;701E;;;;N;;;;; 2F915;CJK COMPATIBILITY IDEOGRAPH-2F915;Lo;0;L;701B;;;;N;;;;; 2F916;CJK COMPATIBILITY IDEOGRAPH-2F916;Lo;0;L;3D96;;;;N;;;;; 2F917;CJK COMPATIBILITY IDEOGRAPH-2F917;Lo;0;L;704A;;;;N;;;;; 2F918;CJK COMPATIBILITY IDEOGRAPH-2F918;Lo;0;L;707D;;;;N;;;;; 2F919;CJK COMPATIBILITY IDEOGRAPH-2F919;Lo;0;L;7077;;;;N;;;;; 2F91A;CJK COMPATIBILITY IDEOGRAPH-2F91A;Lo;0;L;70AD;;;;N;;;;; 2F91B;CJK COMPATIBILITY IDEOGRAPH-2F91B;Lo;0;L;20525;;;;N;;;;; 2F91C;CJK COMPATIBILITY IDEOGRAPH-2F91C;Lo;0;L;7145;;;;N;;;;; 2F91D;CJK COMPATIBILITY IDEOGRAPH-2F91D;Lo;0;L;24263;;;;N;;;;; 2F91E;CJK COMPATIBILITY IDEOGRAPH-2F91E;Lo;0;L;719C;;;;N;;;;; 2F91F;CJK COMPATIBILITY IDEOGRAPH-2F91F;Lo;0;L;243AB;;;;N;;;;; 2F920;CJK COMPATIBILITY IDEOGRAPH-2F920;Lo;0;L;7228;;;;N;;;;; 2F921;CJK COMPATIBILITY IDEOGRAPH-2F921;Lo;0;L;7235;;;;N;;;;; 2F922;CJK COMPATIBILITY IDEOGRAPH-2F922;Lo;0;L;7250;;;;N;;;;; 2F923;CJK COMPATIBILITY IDEOGRAPH-2F923;Lo;0;L;24608;;;;N;;;;; 2F924;CJK COMPATIBILITY IDEOGRAPH-2F924;Lo;0;L;7280;;;;N;;;;; 2F925;CJK COMPATIBILITY IDEOGRAPH-2F925;Lo;0;L;7295;;;;N;;;;; 2F926;CJK COMPATIBILITY IDEOGRAPH-2F926;Lo;0;L;24735;;;;N;;;;; 2F927;CJK COMPATIBILITY IDEOGRAPH-2F927;Lo;0;L;24814;;;;N;;;;; 2F928;CJK COMPATIBILITY IDEOGRAPH-2F928;Lo;0;L;737A;;;;N;;;;; 2F929;CJK COMPATIBILITY IDEOGRAPH-2F929;Lo;0;L;738B;;;;N;;;;; 2F92A;CJK COMPATIBILITY IDEOGRAPH-2F92A;Lo;0;L;3EAC;;;;N;;;;; 2F92B;CJK COMPATIBILITY IDEOGRAPH-2F92B;Lo;0;L;73A5;;;;N;;;;; 2F92C;CJK COMPATIBILITY IDEOGRAPH-2F92C;Lo;0;L;3EB8;;;;N;;;;; 2F92D;CJK COMPATIBILITY IDEOGRAPH-2F92D;Lo;0;L;3EB8;;;;N;;;;; 2F92E;CJK COMPATIBILITY IDEOGRAPH-2F92E;Lo;0;L;7447;;;;N;;;;; 2F92F;CJK COMPATIBILITY IDEOGRAPH-2F92F;Lo;0;L;745C;;;;N;;;;; 2F930;CJK COMPATIBILITY IDEOGRAPH-2F930;Lo;0;L;7471;;;;N;;;;; 2F931;CJK COMPATIBILITY IDEOGRAPH-2F931;Lo;0;L;7485;;;;N;;;;; 2F932;CJK COMPATIBILITY IDEOGRAPH-2F932;Lo;0;L;74CA;;;;N;;;;; 2F933;CJK COMPATIBILITY IDEOGRAPH-2F933;Lo;0;L;3F1B;;;;N;;;;; 2F934;CJK COMPATIBILITY IDEOGRAPH-2F934;Lo;0;L;7524;;;;N;;;;; 2F935;CJK COMPATIBILITY IDEOGRAPH-2F935;Lo;0;L;24C36;;;;N;;;;; 2F936;CJK COMPATIBILITY IDEOGRAPH-2F936;Lo;0;L;753E;;;;N;;;;; 2F937;CJK COMPATIBILITY IDEOGRAPH-2F937;Lo;0;L;24C92;;;;N;;;;; 2F938;CJK COMPATIBILITY IDEOGRAPH-2F938;Lo;0;L;7570;;;;N;;;;; 2F939;CJK COMPATIBILITY IDEOGRAPH-2F939;Lo;0;L;2219F;;;;N;;;;; 2F93A;CJK COMPATIBILITY IDEOGRAPH-2F93A;Lo;0;L;7610;;;;N;;;;; 2F93B;CJK COMPATIBILITY IDEOGRAPH-2F93B;Lo;0;L;24FA1;;;;N;;;;; 2F93C;CJK COMPATIBILITY IDEOGRAPH-2F93C;Lo;0;L;24FB8;;;;N;;;;; 2F93D;CJK COMPATIBILITY IDEOGRAPH-2F93D;Lo;0;L;25044;;;;N;;;;; 2F93E;CJK COMPATIBILITY IDEOGRAPH-2F93E;Lo;0;L;3FFC;;;;N;;;;; 2F93F;CJK COMPATIBILITY IDEOGRAPH-2F93F;Lo;0;L;4008;;;;N;;;;; 2F940;CJK COMPATIBILITY IDEOGRAPH-2F940;Lo;0;L;76F4;;;;N;;;;; 2F941;CJK COMPATIBILITY IDEOGRAPH-2F941;Lo;0;L;250F3;;;;N;;;;; 2F942;CJK COMPATIBILITY IDEOGRAPH-2F942;Lo;0;L;250F2;;;;N;;;;; 2F943;CJK COMPATIBILITY IDEOGRAPH-2F943;Lo;0;L;25119;;;;N;;;;; 2F944;CJK COMPATIBILITY IDEOGRAPH-2F944;Lo;0;L;25133;;;;N;;;;; 2F945;CJK COMPATIBILITY IDEOGRAPH-2F945;Lo;0;L;771E;;;;N;;;;; 2F946;CJK COMPATIBILITY IDEOGRAPH-2F946;Lo;0;L;771F;;;;N;;;;; 2F947;CJK COMPATIBILITY IDEOGRAPH-2F947;Lo;0;L;771F;;;;N;;;;; 2F948;CJK COMPATIBILITY IDEOGRAPH-2F948;Lo;0;L;774A;;;;N;;;;; 2F949;CJK COMPATIBILITY IDEOGRAPH-2F949;Lo;0;L;4039;;;;N;;;;; 2F94A;CJK COMPATIBILITY IDEOGRAPH-2F94A;Lo;0;L;778B;;;;N;;;;; 2F94B;CJK COMPATIBILITY IDEOGRAPH-2F94B;Lo;0;L;4046;;;;N;;;;; 2F94C;CJK COMPATIBILITY IDEOGRAPH-2F94C;Lo;0;L;4096;;;;N;;;;; 2F94D;CJK COMPATIBILITY IDEOGRAPH-2F94D;Lo;0;L;2541D;;;;N;;;;; 2F94E;CJK COMPATIBILITY IDEOGRAPH-2F94E;Lo;0;L;784E;;;;N;;;;; 2F94F;CJK COMPATIBILITY IDEOGRAPH-2F94F;Lo;0;L;788C;;;;N;;;;; 2F950;CJK COMPATIBILITY IDEOGRAPH-2F950;Lo;0;L;78CC;;;;N;;;;; 2F951;CJK COMPATIBILITY IDEOGRAPH-2F951;Lo;0;L;40E3;;;;N;;;;; 2F952;CJK COMPATIBILITY IDEOGRAPH-2F952;Lo;0;L;25626;;;;N;;;;; 2F953;CJK COMPATIBILITY IDEOGRAPH-2F953;Lo;0;L;7956;;;;N;;;;; 2F954;CJK COMPATIBILITY IDEOGRAPH-2F954;Lo;0;L;2569A;;;;N;;;;; 2F955;CJK COMPATIBILITY IDEOGRAPH-2F955;Lo;0;L;256C5;;;;N;;;;; 2F956;CJK COMPATIBILITY IDEOGRAPH-2F956;Lo;0;L;798F;;;;N;;;;; 2F957;CJK COMPATIBILITY IDEOGRAPH-2F957;Lo;0;L;79EB;;;;N;;;;; 2F958;CJK COMPATIBILITY IDEOGRAPH-2F958;Lo;0;L;412F;;;;N;;;;; 2F959;CJK COMPATIBILITY IDEOGRAPH-2F959;Lo;0;L;7A40;;;;N;;;;; 2F95A;CJK COMPATIBILITY IDEOGRAPH-2F95A;Lo;0;L;7A4A;;;;N;;;;; 2F95B;CJK COMPATIBILITY IDEOGRAPH-2F95B;Lo;0;L;7A4F;;;;N;;;;; 2F95C;CJK COMPATIBILITY IDEOGRAPH-2F95C;Lo;0;L;2597C;;;;N;;;;; 2F95D;CJK COMPATIBILITY IDEOGRAPH-2F95D;Lo;0;L;25AA7;;;;N;;;;; 2F95E;CJK COMPATIBILITY IDEOGRAPH-2F95E;Lo;0;L;25AA7;;;;N;;;;; 2F95F;CJK COMPATIBILITY IDEOGRAPH-2F95F;Lo;0;L;7AEE;;;;N;;;;; 2F960;CJK COMPATIBILITY IDEOGRAPH-2F960;Lo;0;L;4202;;;;N;;;;; 2F961;CJK COMPATIBILITY IDEOGRAPH-2F961;Lo;0;L;25BAB;;;;N;;;;; 2F962;CJK COMPATIBILITY IDEOGRAPH-2F962;Lo;0;L;7BC6;;;;N;;;;; 2F963;CJK COMPATIBILITY IDEOGRAPH-2F963;Lo;0;L;7BC9;;;;N;;;;; 2F964;CJK COMPATIBILITY IDEOGRAPH-2F964;Lo;0;L;4227;;;;N;;;;; 2F965;CJK COMPATIBILITY IDEOGRAPH-2F965;Lo;0;L;25C80;;;;N;;;;; 2F966;CJK COMPATIBILITY IDEOGRAPH-2F966;Lo;0;L;7CD2;;;;N;;;;; 2F967;CJK COMPATIBILITY IDEOGRAPH-2F967;Lo;0;L;42A0;;;;N;;;;; 2F968;CJK COMPATIBILITY IDEOGRAPH-2F968;Lo;0;L;7CE8;;;;N;;;;; 2F969;CJK COMPATIBILITY IDEOGRAPH-2F969;Lo;0;L;7CE3;;;;N;;;;; 2F96A;CJK COMPATIBILITY IDEOGRAPH-2F96A;Lo;0;L;7D00;;;;N;;;;; 2F96B;CJK COMPATIBILITY IDEOGRAPH-2F96B;Lo;0;L;25F86;;;;N;;;;; 2F96C;CJK COMPATIBILITY IDEOGRAPH-2F96C;Lo;0;L;7D63;;;;N;;;;; 2F96D;CJK COMPATIBILITY IDEOGRAPH-2F96D;Lo;0;L;4301;;;;N;;;;; 2F96E;CJK COMPATIBILITY IDEOGRAPH-2F96E;Lo;0;L;7DC7;;;;N;;;;; 2F96F;CJK COMPATIBILITY IDEOGRAPH-2F96F;Lo;0;L;7E02;;;;N;;;;; 2F970;CJK COMPATIBILITY IDEOGRAPH-2F970;Lo;0;L;7E45;;;;N;;;;; 2F971;CJK COMPATIBILITY IDEOGRAPH-2F971;Lo;0;L;4334;;;;N;;;;; 2F972;CJK COMPATIBILITY IDEOGRAPH-2F972;Lo;0;L;26228;;;;N;;;;; 2F973;CJK COMPATIBILITY IDEOGRAPH-2F973;Lo;0;L;26247;;;;N;;;;; 2F974;CJK COMPATIBILITY IDEOGRAPH-2F974;Lo;0;L;4359;;;;N;;;;; 2F975;CJK COMPATIBILITY IDEOGRAPH-2F975;Lo;0;L;262D9;;;;N;;;;; 2F976;CJK COMPATIBILITY IDEOGRAPH-2F976;Lo;0;L;7F7A;;;;N;;;;; 2F977;CJK COMPATIBILITY IDEOGRAPH-2F977;Lo;0;L;2633E;;;;N;;;;; 2F978;CJK COMPATIBILITY IDEOGRAPH-2F978;Lo;0;L;7F95;;;;N;;;;; 2F979;CJK COMPATIBILITY IDEOGRAPH-2F979;Lo;0;L;7FFA;;;;N;;;;; 2F97A;CJK COMPATIBILITY IDEOGRAPH-2F97A;Lo;0;L;8005;;;;N;;;;; 2F97B;CJK COMPATIBILITY IDEOGRAPH-2F97B;Lo;0;L;264DA;;;;N;;;;; 2F97C;CJK COMPATIBILITY IDEOGRAPH-2F97C;Lo;0;L;26523;;;;N;;;;; 2F97D;CJK COMPATIBILITY IDEOGRAPH-2F97D;Lo;0;L;8060;;;;N;;;;; 2F97E;CJK COMPATIBILITY IDEOGRAPH-2F97E;Lo;0;L;265A8;;;;N;;;;; 2F97F;CJK COMPATIBILITY IDEOGRAPH-2F97F;Lo;0;L;8070;;;;N;;;;; 2F980;CJK COMPATIBILITY IDEOGRAPH-2F980;Lo;0;L;2335F;;;;N;;;;; 2F981;CJK COMPATIBILITY IDEOGRAPH-2F981;Lo;0;L;43D5;;;;N;;;;; 2F982;CJK COMPATIBILITY IDEOGRAPH-2F982;Lo;0;L;80B2;;;;N;;;;; 2F983;CJK COMPATIBILITY IDEOGRAPH-2F983;Lo;0;L;8103;;;;N;;;;; 2F984;CJK COMPATIBILITY IDEOGRAPH-2F984;Lo;0;L;440B;;;;N;;;;; 2F985;CJK COMPATIBILITY IDEOGRAPH-2F985;Lo;0;L;813E;;;;N;;;;; 2F986;CJK COMPATIBILITY IDEOGRAPH-2F986;Lo;0;L;5AB5;;;;N;;;;; 2F987;CJK COMPATIBILITY IDEOGRAPH-2F987;Lo;0;L;267A7;;;;N;;;;; 2F988;CJK COMPATIBILITY IDEOGRAPH-2F988;Lo;0;L;267B5;;;;N;;;;; 2F989;CJK COMPATIBILITY IDEOGRAPH-2F989;Lo;0;L;23393;;;;N;;;;; 2F98A;CJK COMPATIBILITY IDEOGRAPH-2F98A;Lo;0;L;2339C;;;;N;;;;; 2F98B;CJK COMPATIBILITY IDEOGRAPH-2F98B;Lo;0;L;8201;;;;N;;;;; 2F98C;CJK COMPATIBILITY IDEOGRAPH-2F98C;Lo;0;L;8204;;;;N;;;;; 2F98D;CJK COMPATIBILITY IDEOGRAPH-2F98D;Lo;0;L;8F9E;;;;N;;;;; 2F98E;CJK COMPATIBILITY IDEOGRAPH-2F98E;Lo;0;L;446B;;;;N;;;;; 2F98F;CJK COMPATIBILITY IDEOGRAPH-2F98F;Lo;0;L;8291;;;;N;;;;; 2F990;CJK COMPATIBILITY IDEOGRAPH-2F990;Lo;0;L;828B;;;;N;;;;; 2F991;CJK COMPATIBILITY IDEOGRAPH-2F991;Lo;0;L;829D;;;;N;;;;; 2F992;CJK COMPATIBILITY IDEOGRAPH-2F992;Lo;0;L;52B3;;;;N;;;;; 2F993;CJK COMPATIBILITY IDEOGRAPH-2F993;Lo;0;L;82B1;;;;N;;;;; 2F994;CJK COMPATIBILITY IDEOGRAPH-2F994;Lo;0;L;82B3;;;;N;;;;; 2F995;CJK COMPATIBILITY IDEOGRAPH-2F995;Lo;0;L;82BD;;;;N;;;;; 2F996;CJK COMPATIBILITY IDEOGRAPH-2F996;Lo;0;L;82E6;;;;N;;;;; 2F997;CJK COMPATIBILITY IDEOGRAPH-2F997;Lo;0;L;26B3C;;;;N;;;;; 2F998;CJK COMPATIBILITY IDEOGRAPH-2F998;Lo;0;L;82E5;;;;N;;;;; 2F999;CJK COMPATIBILITY IDEOGRAPH-2F999;Lo;0;L;831D;;;;N;;;;; 2F99A;CJK COMPATIBILITY IDEOGRAPH-2F99A;Lo;0;L;8363;;;;N;;;;; 2F99B;CJK COMPATIBILITY IDEOGRAPH-2F99B;Lo;0;L;83AD;;;;N;;;;; 2F99C;CJK COMPATIBILITY IDEOGRAPH-2F99C;Lo;0;L;8323;;;;N;;;;; 2F99D;CJK COMPATIBILITY IDEOGRAPH-2F99D;Lo;0;L;83BD;;;;N;;;;; 2F99E;CJK COMPATIBILITY IDEOGRAPH-2F99E;Lo;0;L;83E7;;;;N;;;;; 2F99F;CJK COMPATIBILITY IDEOGRAPH-2F99F;Lo;0;L;8457;;;;N;;;;; 2F9A0;CJK COMPATIBILITY IDEOGRAPH-2F9A0;Lo;0;L;8353;;;;N;;;;; 2F9A1;CJK COMPATIBILITY IDEOGRAPH-2F9A1;Lo;0;L;83CA;;;;N;;;;; 2F9A2;CJK COMPATIBILITY IDEOGRAPH-2F9A2;Lo;0;L;83CC;;;;N;;;;; 2F9A3;CJK COMPATIBILITY IDEOGRAPH-2F9A3;Lo;0;L;83DC;;;;N;;;;; 2F9A4;CJK COMPATIBILITY IDEOGRAPH-2F9A4;Lo;0;L;26C36;;;;N;;;;; 2F9A5;CJK COMPATIBILITY IDEOGRAPH-2F9A5;Lo;0;L;26D6B;;;;N;;;;; 2F9A6;CJK COMPATIBILITY IDEOGRAPH-2F9A6;Lo;0;L;26CD5;;;;N;;;;; 2F9A7;CJK COMPATIBILITY IDEOGRAPH-2F9A7;Lo;0;L;452B;;;;N;;;;; 2F9A8;CJK COMPATIBILITY IDEOGRAPH-2F9A8;Lo;0;L;84F1;;;;N;;;;; 2F9A9;CJK COMPATIBILITY IDEOGRAPH-2F9A9;Lo;0;L;84F3;;;;N;;;;; 2F9AA;CJK COMPATIBILITY IDEOGRAPH-2F9AA;Lo;0;L;8516;;;;N;;;;; 2F9AB;CJK COMPATIBILITY IDEOGRAPH-2F9AB;Lo;0;L;273CA;;;;N;;;;; 2F9AC;CJK COMPATIBILITY IDEOGRAPH-2F9AC;Lo;0;L;8564;;;;N;;;;; 2F9AD;CJK COMPATIBILITY IDEOGRAPH-2F9AD;Lo;0;L;26F2C;;;;N;;;;; 2F9AE;CJK COMPATIBILITY IDEOGRAPH-2F9AE;Lo;0;L;455D;;;;N;;;;; 2F9AF;CJK COMPATIBILITY IDEOGRAPH-2F9AF;Lo;0;L;4561;;;;N;;;;; 2F9B0;CJK COMPATIBILITY IDEOGRAPH-2F9B0;Lo;0;L;26FB1;;;;N;;;;; 2F9B1;CJK COMPATIBILITY IDEOGRAPH-2F9B1;Lo;0;L;270D2;;;;N;;;;; 2F9B2;CJK COMPATIBILITY IDEOGRAPH-2F9B2;Lo;0;L;456B;;;;N;;;;; 2F9B3;CJK COMPATIBILITY IDEOGRAPH-2F9B3;Lo;0;L;8650;;;;N;;;;; 2F9B4;CJK COMPATIBILITY IDEOGRAPH-2F9B4;Lo;0;L;865C;;;;N;;;;; 2F9B5;CJK COMPATIBILITY IDEOGRAPH-2F9B5;Lo;0;L;8667;;;;N;;;;; 2F9B6;CJK COMPATIBILITY IDEOGRAPH-2F9B6;Lo;0;L;8669;;;;N;;;;; 2F9B7;CJK COMPATIBILITY IDEOGRAPH-2F9B7;Lo;0;L;86A9;;;;N;;;;; 2F9B8;CJK COMPATIBILITY IDEOGRAPH-2F9B8;Lo;0;L;8688;;;;N;;;;; 2F9B9;CJK COMPATIBILITY IDEOGRAPH-2F9B9;Lo;0;L;870E;;;;N;;;;; 2F9BA;CJK COMPATIBILITY IDEOGRAPH-2F9BA;Lo;0;L;86E2;;;;N;;;;; 2F9BB;CJK COMPATIBILITY IDEOGRAPH-2F9BB;Lo;0;L;8779;;;;N;;;;; 2F9BC;CJK COMPATIBILITY IDEOGRAPH-2F9BC;Lo;0;L;8728;;;;N;;;;; 2F9BD;CJK COMPATIBILITY IDEOGRAPH-2F9BD;Lo;0;L;876B;;;;N;;;;; 2F9BE;CJK COMPATIBILITY IDEOGRAPH-2F9BE;Lo;0;L;8786;;;;N;;;;; 2F9BF;CJK COMPATIBILITY IDEOGRAPH-2F9BF;Lo;0;L;45D7;;;;N;;;;; 2F9C0;CJK COMPATIBILITY IDEOGRAPH-2F9C0;Lo;0;L;87E1;;;;N;;;;; 2F9C1;CJK COMPATIBILITY IDEOGRAPH-2F9C1;Lo;0;L;8801;;;;N;;;;; 2F9C2;CJK COMPATIBILITY IDEOGRAPH-2F9C2;Lo;0;L;45F9;;;;N;;;;; 2F9C3;CJK COMPATIBILITY IDEOGRAPH-2F9C3;Lo;0;L;8860;;;;N;;;;; 2F9C4;CJK COMPATIBILITY IDEOGRAPH-2F9C4;Lo;0;L;8863;;;;N;;;;; 2F9C5;CJK COMPATIBILITY IDEOGRAPH-2F9C5;Lo;0;L;27667;;;;N;;;;; 2F9C6;CJK COMPATIBILITY IDEOGRAPH-2F9C6;Lo;0;L;88D7;;;;N;;;;; 2F9C7;CJK COMPATIBILITY IDEOGRAPH-2F9C7;Lo;0;L;88DE;;;;N;;;;; 2F9C8;CJK COMPATIBILITY IDEOGRAPH-2F9C8;Lo;0;L;4635;;;;N;;;;; 2F9C9;CJK COMPATIBILITY IDEOGRAPH-2F9C9;Lo;0;L;88FA;;;;N;;;;; 2F9CA;CJK COMPATIBILITY IDEOGRAPH-2F9CA;Lo;0;L;34BB;;;;N;;;;; 2F9CB;CJK COMPATIBILITY IDEOGRAPH-2F9CB;Lo;0;L;278AE;;;;N;;;;; 2F9CC;CJK COMPATIBILITY IDEOGRAPH-2F9CC;Lo;0;L;27966;;;;N;;;;; 2F9CD;CJK COMPATIBILITY IDEOGRAPH-2F9CD;Lo;0;L;46BE;;;;N;;;;; 2F9CE;CJK COMPATIBILITY IDEOGRAPH-2F9CE;Lo;0;L;46C7;;;;N;;;;; 2F9CF;CJK COMPATIBILITY IDEOGRAPH-2F9CF;Lo;0;L;8AA0;;;;N;;;;; 2F9D0;CJK COMPATIBILITY IDEOGRAPH-2F9D0;Lo;0;L;8AED;;;;N;;;;; 2F9D1;CJK COMPATIBILITY IDEOGRAPH-2F9D1;Lo;0;L;8B8A;;;;N;;;;; 2F9D2;CJK COMPATIBILITY IDEOGRAPH-2F9D2;Lo;0;L;8C55;;;;N;;;;; 2F9D3;CJK COMPATIBILITY IDEOGRAPH-2F9D3;Lo;0;L;27CA8;;;;N;;;;; 2F9D4;CJK COMPATIBILITY IDEOGRAPH-2F9D4;Lo;0;L;8CAB;;;;N;;;;; 2F9D5;CJK COMPATIBILITY IDEOGRAPH-2F9D5;Lo;0;L;8CC1;;;;N;;;;; 2F9D6;CJK COMPATIBILITY IDEOGRAPH-2F9D6;Lo;0;L;8D1B;;;;N;;;;; 2F9D7;CJK COMPATIBILITY IDEOGRAPH-2F9D7;Lo;0;L;8D77;;;;N;;;;; 2F9D8;CJK COMPATIBILITY IDEOGRAPH-2F9D8;Lo;0;L;27F2F;;;;N;;;;; 2F9D9;CJK COMPATIBILITY IDEOGRAPH-2F9D9;Lo;0;L;20804;;;;N;;;;; 2F9DA;CJK COMPATIBILITY IDEOGRAPH-2F9DA;Lo;0;L;8DCB;;;;N;;;;; 2F9DB;CJK COMPATIBILITY IDEOGRAPH-2F9DB;Lo;0;L;8DBC;;;;N;;;;; 2F9DC;CJK COMPATIBILITY IDEOGRAPH-2F9DC;Lo;0;L;8DF0;;;;N;;;;; 2F9DD;CJK COMPATIBILITY IDEOGRAPH-2F9DD;Lo;0;L;208DE;;;;N;;;;; 2F9DE;CJK COMPATIBILITY IDEOGRAPH-2F9DE;Lo;0;L;8ED4;;;;N;;;;; 2F9DF;CJK COMPATIBILITY IDEOGRAPH-2F9DF;Lo;0;L;8F38;;;;N;;;;; 2F9E0;CJK COMPATIBILITY IDEOGRAPH-2F9E0;Lo;0;L;285D2;;;;N;;;;; 2F9E1;CJK COMPATIBILITY IDEOGRAPH-2F9E1;Lo;0;L;285ED;;;;N;;;;; 2F9E2;CJK COMPATIBILITY IDEOGRAPH-2F9E2;Lo;0;L;9094;;;;N;;;;; 2F9E3;CJK COMPATIBILITY IDEOGRAPH-2F9E3;Lo;0;L;90F1;;;;N;;;;; 2F9E4;CJK COMPATIBILITY IDEOGRAPH-2F9E4;Lo;0;L;9111;;;;N;;;;; 2F9E5;CJK COMPATIBILITY IDEOGRAPH-2F9E5;Lo;0;L;2872E;;;;N;;;;; 2F9E6;CJK COMPATIBILITY IDEOGRAPH-2F9E6;Lo;0;L;911B;;;;N;;;;; 2F9E7;CJK COMPATIBILITY IDEOGRAPH-2F9E7;Lo;0;L;9238;;;;N;;;;; 2F9E8;CJK COMPATIBILITY IDEOGRAPH-2F9E8;Lo;0;L;92D7;;;;N;;;;; 2F9E9;CJK COMPATIBILITY IDEOGRAPH-2F9E9;Lo;0;L;92D8;;;;N;;;;; 2F9EA;CJK COMPATIBILITY IDEOGRAPH-2F9EA;Lo;0;L;927C;;;;N;;;;; 2F9EB;CJK COMPATIBILITY IDEOGRAPH-2F9EB;Lo;0;L;93F9;;;;N;;;;; 2F9EC;CJK COMPATIBILITY IDEOGRAPH-2F9EC;Lo;0;L;9415;;;;N;;;;; 2F9ED;CJK COMPATIBILITY IDEOGRAPH-2F9ED;Lo;0;L;28BFA;;;;N;;;;; 2F9EE;CJK COMPATIBILITY IDEOGRAPH-2F9EE;Lo;0;L;958B;;;;N;;;;; 2F9EF;CJK COMPATIBILITY IDEOGRAPH-2F9EF;Lo;0;L;4995;;;;N;;;;; 2F9F0;CJK COMPATIBILITY IDEOGRAPH-2F9F0;Lo;0;L;95B7;;;;N;;;;; 2F9F1;CJK COMPATIBILITY IDEOGRAPH-2F9F1;Lo;0;L;28D77;;;;N;;;;; 2F9F2;CJK COMPATIBILITY IDEOGRAPH-2F9F2;Lo;0;L;49E6;;;;N;;;;; 2F9F3;CJK COMPATIBILITY IDEOGRAPH-2F9F3;Lo;0;L;96C3;;;;N;;;;; 2F9F4;CJK COMPATIBILITY IDEOGRAPH-2F9F4;Lo;0;L;5DB2;;;;N;;;;; 2F9F5;CJK COMPATIBILITY IDEOGRAPH-2F9F5;Lo;0;L;9723;;;;N;;;;; 2F9F6;CJK COMPATIBILITY IDEOGRAPH-2F9F6;Lo;0;L;29145;;;;N;;;;; 2F9F7;CJK COMPATIBILITY IDEOGRAPH-2F9F7;Lo;0;L;2921A;;;;N;;;;; 2F9F8;CJK COMPATIBILITY IDEOGRAPH-2F9F8;Lo;0;L;4A6E;;;;N;;;;; 2F9F9;CJK COMPATIBILITY IDEOGRAPH-2F9F9;Lo;0;L;4A76;;;;N;;;;; 2F9FA;CJK COMPATIBILITY IDEOGRAPH-2F9FA;Lo;0;L;97E0;;;;N;;;;; 2F9FB;CJK COMPATIBILITY IDEOGRAPH-2F9FB;Lo;0;L;2940A;;;;N;;;;; 2F9FC;CJK COMPATIBILITY IDEOGRAPH-2F9FC;Lo;0;L;4AB2;;;;N;;;;; 2F9FD;CJK COMPATIBILITY IDEOGRAPH-2F9FD;Lo;0;L;29496;;;;N;;;;; 2F9FE;CJK COMPATIBILITY IDEOGRAPH-2F9FE;Lo;0;L;980B;;;;N;;;;; 2F9FF;CJK COMPATIBILITY IDEOGRAPH-2F9FF;Lo;0;L;980B;;;;N;;;;; 2FA00;CJK COMPATIBILITY IDEOGRAPH-2FA00;Lo;0;L;9829;;;;N;;;;; 2FA01;CJK COMPATIBILITY IDEOGRAPH-2FA01;Lo;0;L;295B6;;;;N;;;;; 2FA02;CJK COMPATIBILITY IDEOGRAPH-2FA02;Lo;0;L;98E2;;;;N;;;;; 2FA03;CJK COMPATIBILITY IDEOGRAPH-2FA03;Lo;0;L;4B33;;;;N;;;;; 2FA04;CJK COMPATIBILITY IDEOGRAPH-2FA04;Lo;0;L;9929;;;;N;;;;; 2FA05;CJK COMPATIBILITY IDEOGRAPH-2FA05;Lo;0;L;99A7;;;;N;;;;; 2FA06;CJK COMPATIBILITY IDEOGRAPH-2FA06;Lo;0;L;99C2;;;;N;;;;; 2FA07;CJK COMPATIBILITY IDEOGRAPH-2FA07;Lo;0;L;99FE;;;;N;;;;; 2FA08;CJK COMPATIBILITY IDEOGRAPH-2FA08;Lo;0;L;4BCE;;;;N;;;;; 2FA09;CJK COMPATIBILITY IDEOGRAPH-2FA09;Lo;0;L;29B30;;;;N;;;;; 2FA0A;CJK COMPATIBILITY IDEOGRAPH-2FA0A;Lo;0;L;9B12;;;;N;;;;; 2FA0B;CJK COMPATIBILITY IDEOGRAPH-2FA0B;Lo;0;L;9C40;;;;N;;;;; 2FA0C;CJK COMPATIBILITY IDEOGRAPH-2FA0C;Lo;0;L;9CFD;;;;N;;;;; 2FA0D;CJK COMPATIBILITY IDEOGRAPH-2FA0D;Lo;0;L;4CCE;;;;N;;;;; 2FA0E;CJK COMPATIBILITY IDEOGRAPH-2FA0E;Lo;0;L;4CED;;;;N;;;;; 2FA0F;CJK COMPATIBILITY IDEOGRAPH-2FA0F;Lo;0;L;9D67;;;;N;;;;; 2FA10;CJK COMPATIBILITY IDEOGRAPH-2FA10;Lo;0;L;2A0CE;;;;N;;;;; 2FA11;CJK COMPATIBILITY IDEOGRAPH-2FA11;Lo;0;L;4CF8;;;;N;;;;; 2FA12;CJK COMPATIBILITY IDEOGRAPH-2FA12;Lo;0;L;2A105;;;;N;;;;; 2FA13;CJK COMPATIBILITY IDEOGRAPH-2FA13;Lo;0;L;2A20E;;;;N;;;;; 2FA14;CJK COMPATIBILITY IDEOGRAPH-2FA14;Lo;0;L;2A291;;;;N;;;;; 2FA15;CJK COMPATIBILITY IDEOGRAPH-2FA15;Lo;0;L;9EBB;;;;N;;;;; 2FA16;CJK COMPATIBILITY IDEOGRAPH-2FA16;Lo;0;L;4D56;;;;N;;;;; 2FA17;CJK COMPATIBILITY IDEOGRAPH-2FA17;Lo;0;L;9EF9;;;;N;;;;; 2FA18;CJK COMPATIBILITY IDEOGRAPH-2FA18;Lo;0;L;9EFE;;;;N;;;;; 2FA19;CJK COMPATIBILITY IDEOGRAPH-2FA19;Lo;0;L;9F05;;;;N;;;;; 2FA1A;CJK COMPATIBILITY IDEOGRAPH-2FA1A;Lo;0;L;9F0F;;;;N;;;;; 2FA1B;CJK COMPATIBILITY IDEOGRAPH-2FA1B;Lo;0;L;9F16;;;;N;;;;; 2FA1C;CJK COMPATIBILITY IDEOGRAPH-2FA1C;Lo;0;L;9F3B;;;;N;;;;; 2FA1D;CJK COMPATIBILITY IDEOGRAPH-2FA1D;Lo;0;L;2A600;;;;N;;;;; 30000;;Lo;0;L;;;;;N;;;;; 3134A;;Lo;0;L;;;;;N;;;;; E0001;LANGUAGE TAG;Cf;0;BN;;;;;N;;;;; E0020;TAG SPACE;Cf;0;BN;;;;;N;;;;; E0021;TAG EXCLAMATION MARK;Cf;0;BN;;;;;N;;;;; E0022;TAG QUOTATION MARK;Cf;0;BN;;;;;N;;;;; E0023;TAG NUMBER SIGN;Cf;0;BN;;;;;N;;;;; E0024;TAG DOLLAR SIGN;Cf;0;BN;;;;;N;;;;; E0025;TAG PERCENT SIGN;Cf;0;BN;;;;;N;;;;; E0026;TAG AMPERSAND;Cf;0;BN;;;;;N;;;;; E0027;TAG APOSTROPHE;Cf;0;BN;;;;;N;;;;; E0028;TAG LEFT PARENTHESIS;Cf;0;BN;;;;;N;;;;; E0029;TAG RIGHT PARENTHESIS;Cf;0;BN;;;;;N;;;;; E002A;TAG ASTERISK;Cf;0;BN;;;;;N;;;;; E002B;TAG PLUS SIGN;Cf;0;BN;;;;;N;;;;; E002C;TAG COMMA;Cf;0;BN;;;;;N;;;;; E002D;TAG HYPHEN-MINUS;Cf;0;BN;;;;;N;;;;; E002E;TAG FULL STOP;Cf;0;BN;;;;;N;;;;; E002F;TAG SOLIDUS;Cf;0;BN;;;;;N;;;;; E0030;TAG DIGIT ZERO;Cf;0;BN;;;;;N;;;;; E0031;TAG DIGIT ONE;Cf;0;BN;;;;;N;;;;; E0032;TAG DIGIT TWO;Cf;0;BN;;;;;N;;;;; E0033;TAG DIGIT THREE;Cf;0;BN;;;;;N;;;;; E0034;TAG DIGIT FOUR;Cf;0;BN;;;;;N;;;;; E0035;TAG DIGIT FIVE;Cf;0;BN;;;;;N;;;;; E0036;TAG DIGIT SIX;Cf;0;BN;;;;;N;;;;; E0037;TAG DIGIT SEVEN;Cf;0;BN;;;;;N;;;;; E0038;TAG DIGIT EIGHT;Cf;0;BN;;;;;N;;;;; E0039;TAG DIGIT NINE;Cf;0;BN;;;;;N;;;;; E003A;TAG COLON;Cf;0;BN;;;;;N;;;;; E003B;TAG SEMICOLON;Cf;0;BN;;;;;N;;;;; E003C;TAG LESS-THAN SIGN;Cf;0;BN;;;;;N;;;;; E003D;TAG EQUALS SIGN;Cf;0;BN;;;;;N;;;;; E003E;TAG GREATER-THAN SIGN;Cf;0;BN;;;;;N;;;;; E003F;TAG QUESTION MARK;Cf;0;BN;;;;;N;;;;; E0040;TAG COMMERCIAL AT;Cf;0;BN;;;;;N;;;;; E0041;TAG LATIN CAPITAL LETTER A;Cf;0;BN;;;;;N;;;;; E0042;TAG LATIN CAPITAL LETTER B;Cf;0;BN;;;;;N;;;;; E0043;TAG LATIN CAPITAL LETTER C;Cf;0;BN;;;;;N;;;;; E0044;TAG LATIN CAPITAL LETTER D;Cf;0;BN;;;;;N;;;;; E0045;TAG LATIN CAPITAL LETTER E;Cf;0;BN;;;;;N;;;;; E0046;TAG LATIN CAPITAL LETTER F;Cf;0;BN;;;;;N;;;;; E0047;TAG LATIN CAPITAL LETTER G;Cf;0;BN;;;;;N;;;;; E0048;TAG LATIN CAPITAL LETTER H;Cf;0;BN;;;;;N;;;;; E0049;TAG LATIN CAPITAL LETTER I;Cf;0;BN;;;;;N;;;;; E004A;TAG LATIN CAPITAL LETTER J;Cf;0;BN;;;;;N;;;;; E004B;TAG LATIN CAPITAL LETTER K;Cf;0;BN;;;;;N;;;;; E004C;TAG LATIN CAPITAL LETTER L;Cf;0;BN;;;;;N;;;;; E004D;TAG LATIN CAPITAL LETTER M;Cf;0;BN;;;;;N;;;;; E004E;TAG LATIN CAPITAL LETTER N;Cf;0;BN;;;;;N;;;;; E004F;TAG LATIN CAPITAL LETTER O;Cf;0;BN;;;;;N;;;;; E0050;TAG LATIN CAPITAL LETTER P;Cf;0;BN;;;;;N;;;;; E0051;TAG LATIN CAPITAL LETTER Q;Cf;0;BN;;;;;N;;;;; E0052;TAG LATIN CAPITAL LETTER R;Cf;0;BN;;;;;N;;;;; E0053;TAG LATIN CAPITAL LETTER S;Cf;0;BN;;;;;N;;;;; E0054;TAG LATIN CAPITAL LETTER T;Cf;0;BN;;;;;N;;;;; E0055;TAG LATIN CAPITAL LETTER U;Cf;0;BN;;;;;N;;;;; E0056;TAG LATIN CAPITAL LETTER V;Cf;0;BN;;;;;N;;;;; E0057;TAG LATIN CAPITAL LETTER W;Cf;0;BN;;;;;N;;;;; E0058;TAG LATIN CAPITAL LETTER X;Cf;0;BN;;;;;N;;;;; E0059;TAG LATIN CAPITAL LETTER Y;Cf;0;BN;;;;;N;;;;; E005A;TAG LATIN CAPITAL LETTER Z;Cf;0;BN;;;;;N;;;;; E005B;TAG LEFT SQUARE BRACKET;Cf;0;BN;;;;;N;;;;; E005C;TAG REVERSE SOLIDUS;Cf;0;BN;;;;;N;;;;; E005D;TAG RIGHT SQUARE BRACKET;Cf;0;BN;;;;;N;;;;; E005E;TAG CIRCUMFLEX ACCENT;Cf;0;BN;;;;;N;;;;; E005F;TAG LOW LINE;Cf;0;BN;;;;;N;;;;; E0060;TAG GRAVE ACCENT;Cf;0;BN;;;;;N;;;;; E0061;TAG LATIN SMALL LETTER A;Cf;0;BN;;;;;N;;;;; E0062;TAG LATIN SMALL LETTER B;Cf;0;BN;;;;;N;;;;; E0063;TAG LATIN SMALL LETTER C;Cf;0;BN;;;;;N;;;;; E0064;TAG LATIN SMALL LETTER D;Cf;0;BN;;;;;N;;;;; E0065;TAG LATIN SMALL LETTER E;Cf;0;BN;;;;;N;;;;; E0066;TAG LATIN SMALL LETTER F;Cf;0;BN;;;;;N;;;;; E0067;TAG LATIN SMALL LETTER G;Cf;0;BN;;;;;N;;;;; E0068;TAG LATIN SMALL LETTER H;Cf;0;BN;;;;;N;;;;; E0069;TAG LATIN SMALL LETTER I;Cf;0;BN;;;;;N;;;;; E006A;TAG LATIN SMALL LETTER J;Cf;0;BN;;;;;N;;;;; E006B;TAG LATIN SMALL LETTER K;Cf;0;BN;;;;;N;;;;; E006C;TAG LATIN SMALL LETTER L;Cf;0;BN;;;;;N;;;;; E006D;TAG LATIN SMALL LETTER M;Cf;0;BN;;;;;N;;;;; E006E;TAG LATIN SMALL LETTER N;Cf;0;BN;;;;;N;;;;; E006F;TAG LATIN SMALL LETTER O;Cf;0;BN;;;;;N;;;;; E0070;TAG LATIN SMALL LETTER P;Cf;0;BN;;;;;N;;;;; E0071;TAG LATIN SMALL LETTER Q;Cf;0;BN;;;;;N;;;;; E0072;TAG LATIN SMALL LETTER R;Cf;0;BN;;;;;N;;;;; E0073;TAG LATIN SMALL LETTER S;Cf;0;BN;;;;;N;;;;; E0074;TAG LATIN SMALL LETTER T;Cf;0;BN;;;;;N;;;;; E0075;TAG LATIN SMALL LETTER U;Cf;0;BN;;;;;N;;;;; E0076;TAG LATIN SMALL LETTER V;Cf;0;BN;;;;;N;;;;; E0077;TAG LATIN SMALL LETTER W;Cf;0;BN;;;;;N;;;;; E0078;TAG LATIN SMALL LETTER X;Cf;0;BN;;;;;N;;;;; E0079;TAG LATIN SMALL LETTER Y;Cf;0;BN;;;;;N;;;;; E007A;TAG LATIN SMALL LETTER Z;Cf;0;BN;;;;;N;;;;; E007B;TAG LEFT CURLY BRACKET;Cf;0;BN;;;;;N;;;;; E007C;TAG VERTICAL LINE;Cf;0;BN;;;;;N;;;;; E007D;TAG RIGHT CURLY BRACKET;Cf;0;BN;;;;;N;;;;; E007E;TAG TILDE;Cf;0;BN;;;;;N;;;;; E007F;CANCEL TAG;Cf;0;BN;;;;;N;;;;; E0100;VARIATION SELECTOR-17;Mn;0;NSM;;;;;N;;;;; E0101;VARIATION SELECTOR-18;Mn;0;NSM;;;;;N;;;;; E0102;VARIATION SELECTOR-19;Mn;0;NSM;;;;;N;;;;; E0103;VARIATION SELECTOR-20;Mn;0;NSM;;;;;N;;;;; E0104;VARIATION SELECTOR-21;Mn;0;NSM;;;;;N;;;;; E0105;VARIATION SELECTOR-22;Mn;0;NSM;;;;;N;;;;; E0106;VARIATION SELECTOR-23;Mn;0;NSM;;;;;N;;;;; E0107;VARIATION SELECTOR-24;Mn;0;NSM;;;;;N;;;;; E0108;VARIATION SELECTOR-25;Mn;0;NSM;;;;;N;;;;; E0109;VARIATION SELECTOR-26;Mn;0;NSM;;;;;N;;;;; E010A;VARIATION SELECTOR-27;Mn;0;NSM;;;;;N;;;;; E010B;VARIATION SELECTOR-28;Mn;0;NSM;;;;;N;;;;; E010C;VARIATION SELECTOR-29;Mn;0;NSM;;;;;N;;;;; E010D;VARIATION SELECTOR-30;Mn;0;NSM;;;;;N;;;;; E010E;VARIATION SELECTOR-31;Mn;0;NSM;;;;;N;;;;; E010F;VARIATION SELECTOR-32;Mn;0;NSM;;;;;N;;;;; E0110;VARIATION SELECTOR-33;Mn;0;NSM;;;;;N;;;;; E0111;VARIATION SELECTOR-34;Mn;0;NSM;;;;;N;;;;; E0112;VARIATION SELECTOR-35;Mn;0;NSM;;;;;N;;;;; E0113;VARIATION SELECTOR-36;Mn;0;NSM;;;;;N;;;;; E0114;VARIATION SELECTOR-37;Mn;0;NSM;;;;;N;;;;; E0115;VARIATION SELECTOR-38;Mn;0;NSM;;;;;N;;;;; E0116;VARIATION SELECTOR-39;Mn;0;NSM;;;;;N;;;;; E0117;VARIATION SELECTOR-40;Mn;0;NSM;;;;;N;;;;; E0118;VARIATION SELECTOR-41;Mn;0;NSM;;;;;N;;;;; E0119;VARIATION SELECTOR-42;Mn;0;NSM;;;;;N;;;;; E011A;VARIATION SELECTOR-43;Mn;0;NSM;;;;;N;;;;; E011B;VARIATION SELECTOR-44;Mn;0;NSM;;;;;N;;;;; E011C;VARIATION SELECTOR-45;Mn;0;NSM;;;;;N;;;;; E011D;VARIATION SELECTOR-46;Mn;0;NSM;;;;;N;;;;; E011E;VARIATION SELECTOR-47;Mn;0;NSM;;;;;N;;;;; E011F;VARIATION SELECTOR-48;Mn;0;NSM;;;;;N;;;;; E0120;VARIATION SELECTOR-49;Mn;0;NSM;;;;;N;;;;; E0121;VARIATION SELECTOR-50;Mn;0;NSM;;;;;N;;;;; E0122;VARIATION SELECTOR-51;Mn;0;NSM;;;;;N;;;;; E0123;VARIATION SELECTOR-52;Mn;0;NSM;;;;;N;;;;; E0124;VARIATION SELECTOR-53;Mn;0;NSM;;;;;N;;;;; E0125;VARIATION SELECTOR-54;Mn;0;NSM;;;;;N;;;;; E0126;VARIATION SELECTOR-55;Mn;0;NSM;;;;;N;;;;; E0127;VARIATION SELECTOR-56;Mn;0;NSM;;;;;N;;;;; E0128;VARIATION SELECTOR-57;Mn;0;NSM;;;;;N;;;;; E0129;VARIATION SELECTOR-58;Mn;0;NSM;;;;;N;;;;; E012A;VARIATION SELECTOR-59;Mn;0;NSM;;;;;N;;;;; E012B;VARIATION SELECTOR-60;Mn;0;NSM;;;;;N;;;;; E012C;VARIATION SELECTOR-61;Mn;0;NSM;;;;;N;;;;; E012D;VARIATION SELECTOR-62;Mn;0;NSM;;;;;N;;;;; E012E;VARIATION SELECTOR-63;Mn;0;NSM;;;;;N;;;;; E012F;VARIATION SELECTOR-64;Mn;0;NSM;;;;;N;;;;; E0130;VARIATION SELECTOR-65;Mn;0;NSM;;;;;N;;;;; E0131;VARIATION SELECTOR-66;Mn;0;NSM;;;;;N;;;;; E0132;VARIATION SELECTOR-67;Mn;0;NSM;;;;;N;;;;; E0133;VARIATION SELECTOR-68;Mn;0;NSM;;;;;N;;;;; E0134;VARIATION SELECTOR-69;Mn;0;NSM;;;;;N;;;;; E0135;VARIATION SELECTOR-70;Mn;0;NSM;;;;;N;;;;; E0136;VARIATION SELECTOR-71;Mn;0;NSM;;;;;N;;;;; E0137;VARIATION SELECTOR-72;Mn;0;NSM;;;;;N;;;;; E0138;VARIATION SELECTOR-73;Mn;0;NSM;;;;;N;;;;; E0139;VARIATION SELECTOR-74;Mn;0;NSM;;;;;N;;;;; E013A;VARIATION SELECTOR-75;Mn;0;NSM;;;;;N;;;;; E013B;VARIATION SELECTOR-76;Mn;0;NSM;;;;;N;;;;; E013C;VARIATION SELECTOR-77;Mn;0;NSM;;;;;N;;;;; E013D;VARIATION SELECTOR-78;Mn;0;NSM;;;;;N;;;;; E013E;VARIATION SELECTOR-79;Mn;0;NSM;;;;;N;;;;; E013F;VARIATION SELECTOR-80;Mn;0;NSM;;;;;N;;;;; E0140;VARIATION SELECTOR-81;Mn;0;NSM;;;;;N;;;;; E0141;VARIATION SELECTOR-82;Mn;0;NSM;;;;;N;;;;; E0142;VARIATION SELECTOR-83;Mn;0;NSM;;;;;N;;;;; E0143;VARIATION SELECTOR-84;Mn;0;NSM;;;;;N;;;;; E0144;VARIATION SELECTOR-85;Mn;0;NSM;;;;;N;;;;; E0145;VARIATION SELECTOR-86;Mn;0;NSM;;;;;N;;;;; E0146;VARIATION SELECTOR-87;Mn;0;NSM;;;;;N;;;;; E0147;VARIATION SELECTOR-88;Mn;0;NSM;;;;;N;;;;; E0148;VARIATION SELECTOR-89;Mn;0;NSM;;;;;N;;;;; E0149;VARIATION SELECTOR-90;Mn;0;NSM;;;;;N;;;;; E014A;VARIATION SELECTOR-91;Mn;0;NSM;;;;;N;;;;; E014B;VARIATION SELECTOR-92;Mn;0;NSM;;;;;N;;;;; E014C;VARIATION SELECTOR-93;Mn;0;NSM;;;;;N;;;;; E014D;VARIATION SELECTOR-94;Mn;0;NSM;;;;;N;;;;; E014E;VARIATION SELECTOR-95;Mn;0;NSM;;;;;N;;;;; E014F;VARIATION SELECTOR-96;Mn;0;NSM;;;;;N;;;;; E0150;VARIATION SELECTOR-97;Mn;0;NSM;;;;;N;;;;; E0151;VARIATION SELECTOR-98;Mn;0;NSM;;;;;N;;;;; E0152;VARIATION SELECTOR-99;Mn;0;NSM;;;;;N;;;;; E0153;VARIATION SELECTOR-100;Mn;0;NSM;;;;;N;;;;; E0154;VARIATION SELECTOR-101;Mn;0;NSM;;;;;N;;;;; E0155;VARIATION SELECTOR-102;Mn;0;NSM;;;;;N;;;;; E0156;VARIATION SELECTOR-103;Mn;0;NSM;;;;;N;;;;; E0157;VARIATION SELECTOR-104;Mn;0;NSM;;;;;N;;;;; E0158;VARIATION SELECTOR-105;Mn;0;NSM;;;;;N;;;;; E0159;VARIATION SELECTOR-106;Mn;0;NSM;;;;;N;;;;; E015A;VARIATION SELECTOR-107;Mn;0;NSM;;;;;N;;;;; E015B;VARIATION SELECTOR-108;Mn;0;NSM;;;;;N;;;;; E015C;VARIATION SELECTOR-109;Mn;0;NSM;;;;;N;;;;; E015D;VARIATION SELECTOR-110;Mn;0;NSM;;;;;N;;;;; E015E;VARIATION SELECTOR-111;Mn;0;NSM;;;;;N;;;;; E015F;VARIATION SELECTOR-112;Mn;0;NSM;;;;;N;;;;; E0160;VARIATION SELECTOR-113;Mn;0;NSM;;;;;N;;;;; E0161;VARIATION SELECTOR-114;Mn;0;NSM;;;;;N;;;;; E0162;VARIATION SELECTOR-115;Mn;0;NSM;;;;;N;;;;; E0163;VARIATION SELECTOR-116;Mn;0;NSM;;;;;N;;;;; E0164;VARIATION SELECTOR-117;Mn;0;NSM;;;;;N;;;;; E0165;VARIATION SELECTOR-118;Mn;0;NSM;;;;;N;;;;; E0166;VARIATION SELECTOR-119;Mn;0;NSM;;;;;N;;;;; E0167;VARIATION SELECTOR-120;Mn;0;NSM;;;;;N;;;;; E0168;VARIATION SELECTOR-121;Mn;0;NSM;;;;;N;;;;; E0169;VARIATION SELECTOR-122;Mn;0;NSM;;;;;N;;;;; E016A;VARIATION SELECTOR-123;Mn;0;NSM;;;;;N;;;;; E016B;VARIATION SELECTOR-124;Mn;0;NSM;;;;;N;;;;; E016C;VARIATION SELECTOR-125;Mn;0;NSM;;;;;N;;;;; E016D;VARIATION SELECTOR-126;Mn;0;NSM;;;;;N;;;;; E016E;VARIATION SELECTOR-127;Mn;0;NSM;;;;;N;;;;; E016F;VARIATION SELECTOR-128;Mn;0;NSM;;;;;N;;;;; E0170;VARIATION SELECTOR-129;Mn;0;NSM;;;;;N;;;;; E0171;VARIATION SELECTOR-130;Mn;0;NSM;;;;;N;;;;; E0172;VARIATION SELECTOR-131;Mn;0;NSM;;;;;N;;;;; E0173;VARIATION SELECTOR-132;Mn;0;NSM;;;;;N;;;;; E0174;VARIATION SELECTOR-133;Mn;0;NSM;;;;;N;;;;; E0175;VARIATION SELECTOR-134;Mn;0;NSM;;;;;N;;;;; E0176;VARIATION SELECTOR-135;Mn;0;NSM;;;;;N;;;;; E0177;VARIATION SELECTOR-136;Mn;0;NSM;;;;;N;;;;; E0178;VARIATION SELECTOR-137;Mn;0;NSM;;;;;N;;;;; E0179;VARIATION SELECTOR-138;Mn;0;NSM;;;;;N;;;;; E017A;VARIATION SELECTOR-139;Mn;0;NSM;;;;;N;;;;; E017B;VARIATION SELECTOR-140;Mn;0;NSM;;;;;N;;;;; E017C;VARIATION SELECTOR-141;Mn;0;NSM;;;;;N;;;;; E017D;VARIATION SELECTOR-142;Mn;0;NSM;;;;;N;;;;; E017E;VARIATION SELECTOR-143;Mn;0;NSM;;;;;N;;;;; E017F;VARIATION SELECTOR-144;Mn;0;NSM;;;;;N;;;;; E0180;VARIATION SELECTOR-145;Mn;0;NSM;;;;;N;;;;; E0181;VARIATION SELECTOR-146;Mn;0;NSM;;;;;N;;;;; E0182;VARIATION SELECTOR-147;Mn;0;NSM;;;;;N;;;;; E0183;VARIATION SELECTOR-148;Mn;0;NSM;;;;;N;;;;; E0184;VARIATION SELECTOR-149;Mn;0;NSM;;;;;N;;;;; E0185;VARIATION SELECTOR-150;Mn;0;NSM;;;;;N;;;;; E0186;VARIATION SELECTOR-151;Mn;0;NSM;;;;;N;;;;; E0187;VARIATION SELECTOR-152;Mn;0;NSM;;;;;N;;;;; E0188;VARIATION SELECTOR-153;Mn;0;NSM;;;;;N;;;;; E0189;VARIATION SELECTOR-154;Mn;0;NSM;;;;;N;;;;; E018A;VARIATION SELECTOR-155;Mn;0;NSM;;;;;N;;;;; E018B;VARIATION SELECTOR-156;Mn;0;NSM;;;;;N;;;;; E018C;VARIATION SELECTOR-157;Mn;0;NSM;;;;;N;;;;; E018D;VARIATION SELECTOR-158;Mn;0;NSM;;;;;N;;;;; E018E;VARIATION SELECTOR-159;Mn;0;NSM;;;;;N;;;;; E018F;VARIATION SELECTOR-160;Mn;0;NSM;;;;;N;;;;; E0190;VARIATION SELECTOR-161;Mn;0;NSM;;;;;N;;;;; E0191;VARIATION SELECTOR-162;Mn;0;NSM;;;;;N;;;;; E0192;VARIATION SELECTOR-163;Mn;0;NSM;;;;;N;;;;; E0193;VARIATION SELECTOR-164;Mn;0;NSM;;;;;N;;;;; E0194;VARIATION SELECTOR-165;Mn;0;NSM;;;;;N;;;;; E0195;VARIATION SELECTOR-166;Mn;0;NSM;;;;;N;;;;; E0196;VARIATION SELECTOR-167;Mn;0;NSM;;;;;N;;;;; E0197;VARIATION SELECTOR-168;Mn;0;NSM;;;;;N;;;;; E0198;VARIATION SELECTOR-169;Mn;0;NSM;;;;;N;;;;; E0199;VARIATION SELECTOR-170;Mn;0;NSM;;;;;N;;;;; E019A;VARIATION SELECTOR-171;Mn;0;NSM;;;;;N;;;;; E019B;VARIATION SELECTOR-172;Mn;0;NSM;;;;;N;;;;; E019C;VARIATION SELECTOR-173;Mn;0;NSM;;;;;N;;;;; E019D;VARIATION SELECTOR-174;Mn;0;NSM;;;;;N;;;;; E019E;VARIATION SELECTOR-175;Mn;0;NSM;;;;;N;;;;; E019F;VARIATION SELECTOR-176;Mn;0;NSM;;;;;N;;;;; E01A0;VARIATION SELECTOR-177;Mn;0;NSM;;;;;N;;;;; E01A1;VARIATION SELECTOR-178;Mn;0;NSM;;;;;N;;;;; E01A2;VARIATION SELECTOR-179;Mn;0;NSM;;;;;N;;;;; E01A3;VARIATION SELECTOR-180;Mn;0;NSM;;;;;N;;;;; E01A4;VARIATION SELECTOR-181;Mn;0;NSM;;;;;N;;;;; E01A5;VARIATION SELECTOR-182;Mn;0;NSM;;;;;N;;;;; E01A6;VARIATION SELECTOR-183;Mn;0;NSM;;;;;N;;;;; E01A7;VARIATION SELECTOR-184;Mn;0;NSM;;;;;N;;;;; E01A8;VARIATION SELECTOR-185;Mn;0;NSM;;;;;N;;;;; E01A9;VARIATION SELECTOR-186;Mn;0;NSM;;;;;N;;;;; E01AA;VARIATION SELECTOR-187;Mn;0;NSM;;;;;N;;;;; E01AB;VARIATION SELECTOR-188;Mn;0;NSM;;;;;N;;;;; E01AC;VARIATION SELECTOR-189;Mn;0;NSM;;;;;N;;;;; E01AD;VARIATION SELECTOR-190;Mn;0;NSM;;;;;N;;;;; E01AE;VARIATION SELECTOR-191;Mn;0;NSM;;;;;N;;;;; E01AF;VARIATION SELECTOR-192;Mn;0;NSM;;;;;N;;;;; E01B0;VARIATION SELECTOR-193;Mn;0;NSM;;;;;N;;;;; E01B1;VARIATION SELECTOR-194;Mn;0;NSM;;;;;N;;;;; E01B2;VARIATION SELECTOR-195;Mn;0;NSM;;;;;N;;;;; E01B3;VARIATION SELECTOR-196;Mn;0;NSM;;;;;N;;;;; E01B4;VARIATION SELECTOR-197;Mn;0;NSM;;;;;N;;;;; E01B5;VARIATION SELECTOR-198;Mn;0;NSM;;;;;N;;;;; E01B6;VARIATION SELECTOR-199;Mn;0;NSM;;;;;N;;;;; E01B7;VARIATION SELECTOR-200;Mn;0;NSM;;;;;N;;;;; E01B8;VARIATION SELECTOR-201;Mn;0;NSM;;;;;N;;;;; E01B9;VARIATION SELECTOR-202;Mn;0;NSM;;;;;N;;;;; E01BA;VARIATION SELECTOR-203;Mn;0;NSM;;;;;N;;;;; E01BB;VARIATION SELECTOR-204;Mn;0;NSM;;;;;N;;;;; E01BC;VARIATION SELECTOR-205;Mn;0;NSM;;;;;N;;;;; E01BD;VARIATION SELECTOR-206;Mn;0;NSM;;;;;N;;;;; E01BE;VARIATION SELECTOR-207;Mn;0;NSM;;;;;N;;;;; E01BF;VARIATION SELECTOR-208;Mn;0;NSM;;;;;N;;;;; E01C0;VARIATION SELECTOR-209;Mn;0;NSM;;;;;N;;;;; E01C1;VARIATION SELECTOR-210;Mn;0;NSM;;;;;N;;;;; E01C2;VARIATION SELECTOR-211;Mn;0;NSM;;;;;N;;;;; E01C3;VARIATION SELECTOR-212;Mn;0;NSM;;;;;N;;;;; E01C4;VARIATION SELECTOR-213;Mn;0;NSM;;;;;N;;;;; E01C5;VARIATION SELECTOR-214;Mn;0;NSM;;;;;N;;;;; E01C6;VARIATION SELECTOR-215;Mn;0;NSM;;;;;N;;;;; E01C7;VARIATION SELECTOR-216;Mn;0;NSM;;;;;N;;;;; E01C8;VARIATION SELECTOR-217;Mn;0;NSM;;;;;N;;;;; E01C9;VARIATION SELECTOR-218;Mn;0;NSM;;;;;N;;;;; E01CA;VARIATION SELECTOR-219;Mn;0;NSM;;;;;N;;;;; E01CB;VARIATION SELECTOR-220;Mn;0;NSM;;;;;N;;;;; E01CC;VARIATION SELECTOR-221;Mn;0;NSM;;;;;N;;;;; E01CD;VARIATION SELECTOR-222;Mn;0;NSM;;;;;N;;;;; E01CE;VARIATION SELECTOR-223;Mn;0;NSM;;;;;N;;;;; E01CF;VARIATION SELECTOR-224;Mn;0;NSM;;;;;N;;;;; E01D0;VARIATION SELECTOR-225;Mn;0;NSM;;;;;N;;;;; E01D1;VARIATION SELECTOR-226;Mn;0;NSM;;;;;N;;;;; E01D2;VARIATION SELECTOR-227;Mn;0;NSM;;;;;N;;;;; E01D3;VARIATION SELECTOR-228;Mn;0;NSM;;;;;N;;;;; E01D4;VARIATION SELECTOR-229;Mn;0;NSM;;;;;N;;;;; E01D5;VARIATION SELECTOR-230;Mn;0;NSM;;;;;N;;;;; E01D6;VARIATION SELECTOR-231;Mn;0;NSM;;;;;N;;;;; E01D7;VARIATION SELECTOR-232;Mn;0;NSM;;;;;N;;;;; E01D8;VARIATION SELECTOR-233;Mn;0;NSM;;;;;N;;;;; E01D9;VARIATION SELECTOR-234;Mn;0;NSM;;;;;N;;;;; E01DA;VARIATION SELECTOR-235;Mn;0;NSM;;;;;N;;;;; E01DB;VARIATION SELECTOR-236;Mn;0;NSM;;;;;N;;;;; E01DC;VARIATION SELECTOR-237;Mn;0;NSM;;;;;N;;;;; E01DD;VARIATION SELECTOR-238;Mn;0;NSM;;;;;N;;;;; E01DE;VARIATION SELECTOR-239;Mn;0;NSM;;;;;N;;;;; E01DF;VARIATION SELECTOR-240;Mn;0;NSM;;;;;N;;;;; E01E0;VARIATION SELECTOR-241;Mn;0;NSM;;;;;N;;;;; E01E1;VARIATION SELECTOR-242;Mn;0;NSM;;;;;N;;;;; E01E2;VARIATION SELECTOR-243;Mn;0;NSM;;;;;N;;;;; E01E3;VARIATION SELECTOR-244;Mn;0;NSM;;;;;N;;;;; E01E4;VARIATION SELECTOR-245;Mn;0;NSM;;;;;N;;;;; E01E5;VARIATION SELECTOR-246;Mn;0;NSM;;;;;N;;;;; E01E6;VARIATION SELECTOR-247;Mn;0;NSM;;;;;N;;;;; E01E7;VARIATION SELECTOR-248;Mn;0;NSM;;;;;N;;;;; E01E8;VARIATION SELECTOR-249;Mn;0;NSM;;;;;N;;;;; E01E9;VARIATION SELECTOR-250;Mn;0;NSM;;;;;N;;;;; E01EA;VARIATION SELECTOR-251;Mn;0;NSM;;;;;N;;;;; E01EB;VARIATION SELECTOR-252;Mn;0;NSM;;;;;N;;;;; E01EC;VARIATION SELECTOR-253;Mn;0;NSM;;;;;N;;;;; E01ED;VARIATION SELECTOR-254;Mn;0;NSM;;;;;N;;;;; E01EE;VARIATION SELECTOR-255;Mn;0;NSM;;;;;N;;;;; E01EF;VARIATION SELECTOR-256;Mn;0;NSM;;;;;N;;;;; F0000;;Co;0;L;;;;;N;;;;; FFFFD;;Co;0;L;;;;;N;;;;; 100000;;Co;0;L;;;;;N;;;;; 10FFFD;;Co;0;L;;;;;N;;;;; jimtcl-0.84/appveyor.yml000066400000000000000000000016661522604140100153230ustar00rootroot00000000000000version: "0.81.0.{build}" image: Visual Studio 2019 install: - cmd: set MSYSTEM=MINGW32 - cmd: C:\msys64\usr\bin\bash -lc "pacman --sync --needed --noconfirm make mingw-w64-i686-gcc mingw-w64-i686-sqlite3" - cmd: cd C:\projects & mklink /D %APPVEYOR_PROJECT_NAME% %APPVEYOR_PROJECT_SLUG% & exit 0 build_script: - cmd: C:\msys64\usr\bin\bash -lc "cd /c/projects/jimtcl; ./configure --ssl --with-ext='sqlite3 win32 zlib' --disable-docs CFLAGS=-D__MINGW_USE_VC2005_COMPAT" - cmd: C:\msys64\usr\bin\bash -lc "cd /c/projects/jimtcl; make" test_script: - cmd: C:\msys64\usr\bin\bash -lc "cd /c/projects/jimtcl; make test" after_build: - cmd: copy jimsh.exe jimsh_debug.exe - cmd: C:\msys64\usr\bin\bash -lc "cd /c/projects/jimtcl; strip jimsh.exe; 7z a jimsh.zip jimsh.exe jimsh_debug.exe /c/msys64/mingw32/bin/{libcrypto-*.dll,libgcc_s_dw2-1.dll,libsqlite3-0.dll,libssl-*.dll,libwinpthread-1.dll,zlib1.dll}" artifacts: - path: jimsh.zip jimtcl-0.84/auto.def000066400000000000000000000604341522604140100143610ustar00rootroot00000000000000# vim:se syn=tcl: # define JIM_VERSION 84 options-defaults { silent-rules 1 } # Note: modules which support options *must* be included before 'options' use cc cc-shared cc-db cc-lib pkg-config util use local # CFLAGS, CXXFLAGS only come from the user define CFLAGS [get-env CFLAGS ""] define CXXFLAGS [get-env CFLAGS ""] options { utf8=1 => "Disable support for utf8-encoded strings" lineedit=1 => "Disable line editing" references=1 => "Disable support for references" math=1 => "Disable math functions" ssl=1 => "Disable ssl/tls support in the aio extension" ipv6=1 => "Disable ipv6 support in the aio extension" maintainer => {Enable the [debug] command and JimPanic} minimal => "Disable some optional features: ipv6, ssl, math, utf8 and some extensions. Also see --without-ext=default" # Note that full is now the default full allextmod => "Enable all non-default extensions as modules if prerequisites are found" compat => "Enable some backward compatibility behaviour" taint=1 => "Disable taint support" extinfo => "Show information about available extensions" with-jim-shared shared => "Build a shared library instead of a static library" jim-regexp=1 => "Prefer POSIX regex over the the built-in (Tcl-compatible) regex" docs=1 => "Don't build or install the documentation" docdir:path => "Path to install docs (if built)" random-hash => "Randomise hash tables. more secure but hash table results are not predicable" coverage => "Build with code coverage support" introspection=1 => "Disable introspection" with-jim-ext: {with-ext:"ext1,ext2,..."} => { Specify additional Jim extensions to include. Use --extinfo to show information about available extensions. } with-out-jim-ext: {without-ext:"default|ext1,ext2,..."} => { Specify Jim extensions to exclude. If 'default' is given, the default extensions will not be added. } with-jim-extmod: {with-mod:"ext1,ext2,..."} => { Specify Jim extensions to build as separate modules (either C or Tcl). Note that not all extensions can be built as loadable modules. } # To help out openocd with automake install-jim=1 } # Attributes and help for each supportted extensions # tcl=Pure Tcl extension # static=Can't be built as a module # off=Off unless explicitly enabled or required by an enabled extension # optional=Off by default, but selected by --full # cpp=Is a C++ extension # always=Always include, even if minimal global extdb foreach {mod attrs help} { aio { static } {File and socket (networking) I/O} array {} {Tcl-compatible array command} binary { tcl optional } {Tcl-compatible binary command} clock {} {Tcl-compatible clock command} ensemble { optional tcl } {Ensemble command} eventloop { static } {after, vwait, update} exec { static } {Tcl-compatible exec command} file {} {Tcl-compatible file command} glob { tcl } {Tcl-compatible glob command} history {} {Tcl access to interactive history} interp {} {Support for child interpreters} json { optional } {JSON decoder} jsonencode { tcl off } {JSON encoder} load { static } {Load binary extensions at runtime with load or package} mk { cpp off } {Interface to metakit} namespace { static } {Tcl compatible namespace support} nshelper { tcl off } {} oo { tcl } {Object Oriented class support} pack {} {Low level binary pack and unpack} package { static always } {Package management with the package command} posix {} {Posix APIs including os.fork, os.uptime} readdir {} {Read the contents of a directory (used by glob)} readline { off } {Interface to libreadline} redis { off } {Client interface to redis database} regexp {} {Tcl-compatible regexp, regsub commands} rlprompt { tcl off } {readline-based REPL} sdl { off } {SDL graphics interface} signal { static } {Signal handling} sqlite3 { off } {Interface to sqlite3 database} stdlib { tcl static always } {Built-in commands including lambda, stacktrace and some dict subcommands} syslog {} {System logging with syslog} tclcompat { tcl static } {Tcl compatible read, gets, puts, parray, case, ...} tclprefix { optional } {Support for the tcl::prefix command} tree { tcl } {OO tree structure, similar to tcllib ::struct::tree} win32 { off } {Interface to win32} zlib { optional } {zlib compression interface} } { dict set extdb attrs $mod $attrs dict set extdb help $mod $help } if {[opt-bool full]} { user-notice "Note that --full is now the default, and need not be specified (see --minimal)" } if {[opt-bool extinfo]} { use text-formatting use help use_pager nl p { Jim Tcl is very modular and many extensions can be selectively enabled (--with-ext) or disabled (--without-ext). Many extensions may be statically compiled into Jim Tcl or built as loadable modules (--with-mod). This includes both C extensions and Tcl extensions. } # collect extension info set attrs [dict get $extdb attrs] set info {} foreach mod [dict keys $attrs] { set help [dict get $extdb help $mod] if {$help ne ""} { if {"off" in [dict get $attrs $mod]} { set a off } elseif {"optional" in [dict get $attrs $mod]} { set a optional } else { set a default } dict set info $mod [list $a $help] } } proc showmods {heading info type} { p $heading foreach mod [dict keys $info] { lassign [dict get $info $mod] a help if {$a eq $type} { puts "[format %10s $mod] - $help" } } } showmods "These extensions are enabled by default:" $info default nl showmods "These are enabled by default, but disabled by --minimal:" $info optional nl showmods { These are disabled unless explicitly enabled or --allextmod is selected and the prerequisites are met: } $info off exit 0 } # Additional information about certain extensions # dep=list of extensions which are required for this extension # check=[expr] expression to evaluate to determine if the extension can be used # libdep=list of 'define' symbols for dependent libraries # pkg-config=name1 ?args?, name2* ?args? | name3 ?args? # Any set of packages from the alternates is acceptable (e.g. name1 and name2, or name3) # If the pkgname has a * appended, it is optional (so name1 without name2 is OK) # The optional args are pkg-config specifications (e.g. name1 >= 1.3.4) dict set extdb info { binary { dep pack } exec { check {(([have-feature vfork] || [have-feature fork]) && [have-feature waitpid]) || [have-feature system]} } glob { dep readdir } load { check {[have-feature dlopen-compat] || [cc-check-function-in-lib dlopen dl]} libdep lib_dlopen } mk { check {[check-metakit]} libdep lib_mk } namespace { dep nshelper } json { dep jsonencode extrasrcs jsmn/jsmn.c } posix { check {[have-feature waitpid]} } readdir { check {[have-feature opendir]} } readline { pkg-config readline check {[cc-check-function-in-lib readline readline]} libdep lib_readline} rlprompt { dep readline } tree { dep oo } sdl { pkg-config {SDL2_gfx, SDL2_ttf* | SDL_gfx} check false } signal { check {[have-feature sigaction]} } sqlite3 { pkg-config sqlite3 check {[cc-check-function-in-lib sqlite3_prepare_v2 sqlite3]} libdep lib_sqlite3_prepare_v2 } redis { pkg-config hiredis check {[cc-check-function-in-lib redisConnect hiredis]} libdep lib_redisConnect } zlib { pkg-config zlib check {[cc-check-includes zlib.h] && [cc-check-function-in-lib deflate z]} libdep lib_deflate } syslog { check {[have-feature syslog]} } tree { dep oo } win32 { check {[have-feature windows]} } } set warnings {} # Save the user-specified LIBS # We add detected libs to LDLIBS explicitly set LIBS [get-define LIBS] # In case -Werror is passed in CFLAGS, set -Wno-error when doing checks # to prevent warnings from becoming errors if {"-Werror" in [get-define CFLAGS] && [cctest -cflags -Wno-error]} { cc-with {-cflags -Wno-error} } # Very old compilers might not have restrict cc-check-some-feature restrict { cctest -declare {extern void restrict_test(const char * restrict param);} } cc-check-types "long long" cc-check-sizeof int # Default optimisation define-append AS_CPPFLAGS -O2 -Wall -D_GNU_SOURCE define-append AS_CFLAGS -I. define-append AS_CXXFLAGS -I. # check, but don't add to -cflags cc-with {} { cc-check-flags -fno-unwind-tables -fno-asynchronous-unwind-tables } if {[opt-bool coverage]} { if {[cctest -link 1 -cflags --coverage]} { # When using coverage, disable ccache and compiler optimisation define CCACHE "" define-append AS_CFLAGS --coverage -O0 define-append LDFLAGS --coverage define COVERAGE 1 if {[cc-check-progs gcovr]} { define COVERAGE_TOOL gcovr } elseif {[cc-check-progs lcov] && [cc-check-progs genhtml]} { define COVERAGE_TOOL lcov } else { define COVERAGE_TOOL gcov lappend warnings "Note: Neither lcov nor gcovr is available, falling back to gcov" } } else { lappend warnings "Warning: --coverage specified, but compiler does not support --coverage" } } cc-check-includes time.h sys/time.h sys/socket.h netinet/in.h arpa/inet.h netdb.h strings.h cc-check-includes util.h pty.h sys/un.h dlfcn.h unistd.h dirent.h crt_externs.h execinfo.h # Check sizeof time_t so we can warn on non-Y2038 compliance cc-with {-includes time.h} { cc-check-sizeof time_t } define LDLIBS "" # Haiku needs -lnetwork, Solaris needs -lnsl if {[cc-check-function-in-lib inet_ntop {nsl network}]} { # This does nothing if no libs are needed cc-with [list -libs [get-define lib_inet_ntop]] define-append LDLIBS [get-define lib_inet_ntop] } # Solaris needs -lsocket, Windows needs -lwsock32 if {[cc-check-function-in-lib socket socket]} { define-append LDLIBS [get-define lib_socket] } cc-check-functions ualarm fork system select execvpe cc-check-functions geteuid mkstemp isatty cc-check-functions regcomp waitpid sigaction sys_signame sys_siglist isascii cc-check-functions syslog opendir readlink sleep usleep pipe getaddrinfo utimes cc-check-functions shutdown socketpair link symlink fsync dup umask cc-check-functions localtime gmtime strptime if {![cc-check-functions realpath]} { cc-check-functions _fullpath } cc-with {-includes math.h} { cc-check-decls isinf isnan } if {[have-feature fork]} { # Only use vfork if not deprecated cc-with {-nooutput 1} { cc-check-functions vfork } } if {[cc-check-function-in-lib backtrace execinfo]} { define-append LDLIBS [get-define lib_backtrace] } if {[cc-check-functions sysinfo]} { cc-with {-includes sys/sysinfo.h} { cc-check-members "struct sysinfo.uptime" } } cc-with {-includes {sys/types.h sys/stat.h}} { cc-check-members "struct stat.st_mtimespec" cc-check-members "struct stat.st_mtim" } cc-with {-includes fcntl.h} { cc-check-types "struct flock" } cc-check-lfs if {[get-define _FILE_OFFSET_BITS] != 64 || ![cc-check-functions stat64]} { # Modern systems and really old systems have plain stat, fstat, lstat cc-check-functions fstat lstat } else { # But perhaps some 32 bit systems still require explicit use of the 64 bit versions cc-check-functions fstat64 lstat64 lseek64 } define TCL_LIBRARY [get-define libdir]/jim lassign [split [get-define host] -] host_cpu host_vendor host_os # Scrub revision from the host_os regsub -all {[0-9.]} $host_os {} host_os switch -glob -- $host_os { mingw* { # We provide our own implementation of dlopen for mingw32 define-feature dlopen-compat define-feature winconsole define TCL_PLATFORM_OS $host_os define TCL_PLATFORM_PLATFORM windows define TCL_PLATFORM_PATH_SEPARATOR {;} # Target WinXP or later. Should this be configurable? define-append AS_CFLAGS -D_WIN32_WINNT=0x501 -Wno-deprecated-declarations } default { # Note that cygwin is considered a unix platform define TCL_PLATFORM_OS $host_os define TCL_PLATFORM_PLATFORM unix define TCL_PLATFORM_PATH_SEPARATOR : } } # Find some tools cc-check-tools ar ranlib strip define tclsh [quote-if-needed [info nameofexecutable]] # We only support silent-rules for GNU Make define NO_SILENT_RULES if {[get-define AM_SILENT_RULES 0]} { if {[cc-check-progs [get-define MAKE make]]} { # Are we using GNU make? catch {exec [get-define MAKE] --version} makeversion if {[string match "GNU Make*" $makeversion]} { define NO_SILENT_RULES 0 } } } if {[opt-bool docs]} { if {[cc-check-progs asciidoc sed]} { define INSTALL_DOCS docs define HAVE_ASCIIDOC } else { define INSTALL_DOCS shipped } } else { define INSTALL_DOCS nodocs } if {![cc-check-functions _NSGetEnviron]} { msg-checking "Checking environ declared in unistd.h..." if {[cctest -cflags {-D_GNU_SOURCE -D_POSIX_SOURCE} -includes unistd.h -code {char **ep = environ;}]} { define NO_ENVIRON_EXTERN msg-result "yes" } else { msg-result "no" } } # Windows has a mkdir with no permission arg cc-check-includes sys/types.h sys/stat.h msg-checking "Checking for mkdir with one arg..." if {[cctest -includes {sys/types.h sys/stat.h} -code {mkdir("/dummy");}]} { define HAVE_MKDIR_ONE_ARG msg-result yes } else { msg-result no } cc-with {-includes sys/stat.h} { foreach i {S_IXUSR S_IRWXG S_IRWXO} { if {![cc-check-decls $i]} { define $i 0 } } } set extra_objs {} set jimregexp 0 # Like opt-bool except defaults to on normally and off if --minimal # In either case if explicitly enable or disabled, that takes precedence proc opt-bool-unless-minimal {opt} { if {[opt-bool minimal]} { set default 0 } else { set default 1 } # If not explicitly enabled/disabled, use the default based on --minimal set val [opt-bool -nodefault $opt] if {$val < 0} { set val $default } return $val } if {[opt-bool-unless-minimal utf8]} { msg-result "Enabling UTF-8" define JIM_UTF8 define-append AS_CFLAGS -DUSE_UTF8 incr jimregexp } else { define JIM_UTF8 0 } if {[opt-bool maintainer]} { msg-result "Enabling maintainer settings" define JIM_MAINTAINER } if {[opt-bool-unless-minimal math]} { if {[cc-check-function-in-lib sin m]} { msg-result "Enabling math functions" define JIM_MATH_FUNCTIONS define-append LDLIBS [get-define lib_sin] } elseif {[opt-bool -nodefault math] > 0} { user-error "Math functions are not available" } } if {[opt-bool-unless-minimal ipv6]} { msg-result "Enabling IPv6" define JIM_IPV6 } define-append PKG_CONFIG_REQUIRES "" if {[opt-bool-unless-minimal ssl]} { if {[pkg-config-init 0]} { foreach pkg {openssl libssl} { if {[pkg-config $pkg]} { define JIM_SSL define-append LDLIBS [pkg-config-get $pkg LIBS] define-append LDFLAGS [pkg-config-get $pkg LDFLAGS] define-append AS_CFLAGS [pkg-config-get $pkg CFLAGS] msg-result "Enabling SSL ($pkg)" define-append PKG_CONFIG_REQUIRES $pkg break } } } if {![is-defined JIM_SSL]} { if {[cc-check-includes openssl/ssl.h] && [cc-check-function-in-lib ERR_error_string crypto] && [cc-check-function-in-lib TLSv1_2_method ssl]} { msg-result "Enabling SSL" define JIM_SSL define-append LDLIBS [get-define lib_ERR_error_string] [get-define lib_TLSv1_2_method] } elseif {[opt-bool -nodefault ssl] > 0} { user-error "SSL support requires OpenSSL" } } # Later versions deprecate TLSv1_2_method, but older versions don't have TLS_method if {![cc-check-function-in-lib TLS_method ssl]} { define-append AS_CFLAGS -DUSE_TLSv1_2_method } } # Still need to check termios.h and isatty even if lineedit is disabled if {([cc-check-includes termios.h] && [have-feature isatty]) || [have-feature winconsole]} { if {[opt-bool-unless-minimal lineedit]} { msg-result "Enabling line editing" define USE_LINENOISE lappend extra_objs linenoise.o if {[cc-check-inline] && [is-defined inline]} { define-append AS_CFLAGS -Dinline=[get-define inline] } } } if {[opt-bool references]} { msg-result "Enabling references" define JIM_REFERENCES } if {[opt-bool compat]} { msg-result "Enabling compatibility mode" define JIM_COMPAT } if {![opt-bool introspection]} { msg-result "Disabling introspection" define JIM_NO_INTROSPECTION } if {[opt-bool taint]} { msg-result "Enabling taint support" define JIM_TAINT } if {[opt-bool shared with-jim-shared]} { msg-result "Building shared library" } else { msg-result "Building static library" define JIM_STATICLIB } define VERSION [format %.2f [expr {[get-define JIM_VERSION] / 100.0}]] set githash [get-define VERSION] catch { set githash [exec git describe --dirty] } define JIM_GITVERSION $githash define LIBSOEXT [format [get-define SH_SOEXTVER] [get-define VERSION]] if {[get-define libdir] ni {/lib /usr/lib /usr/lib64}} { define SH_LINKRPATH_FLAGS [format [get-define SH_LINKRPATH] [get-define libdir]] } else { define SH_LINKRPATH_FLAGS "" } define JIM_INSTALL [opt-bool install-jim] define JIM_DOCS [opt-bool docs] define JIM_RANDOMISE_HASH [opt-bool random-hash] define docdir [opt-str docdir o {${prefix}/docs/jim}] # autosetup cc-check-function-in-library can't handle C++ libraries proc check-metakit {} { set found 0 msg-checking "Checking for Metakit..." cc-with {-lang c++} { if {[cctest -includes mk4.h -libs -lmk4 -code {c4_Storage dummy();}]} { msg-result ok define lib_mk -lmk4 incr found } else { msg-result "not found" } } return $found } # Takes a list of module names, separated by spaces or commas # and returns them as a single list proc join-ext-names {list} { set result {} # Replace comma with space in each list then concatenate the result foreach l $list { lappend result {*}[string map {, " "} $l] } return $result } # Set up the withinfo array based on what the user selected global withinfo set withinfo(without) [join-ext-names [opt-val {without-ext with-out-jim-ext}]] set withinfo(ext) [join-ext-names [opt-val {with-ext with-jim-ext}]] set withinfo(mod) [join-ext-names [opt-val {with-mod with-jim-extmod}]] set withinfo(nodefault) 0 set withinfo(optional) 1 if {[opt-bool minimal]} { set withinfo(optional) 0 } if {$withinfo(without) eq "default"} { set withinfo(without) {} set withinfo(nodefault) 1 } # Now go check everything - see autosetup/local.tcl array set extinfo [check-extensions [opt-bool allextmod]] define BUILD_JIM_EXT 1 # Now special checks if {[have-feature windows]} { lappend extra_objs jim-win32compat.o if {[get-define JIM_STATICLIB]} { if {[llength $extinfo(module-c)]} { user-error "cygwin/mingw require --shared for dynamic modules" } else { user-notice "Building static library, so build-jim-ext will not work on cygwin/mingw" define BUILD_JIM_EXT 0 } } } else { # We don't trust any version of clock_gettime on windows cc-check-functions clock_gettime } if {[have-feature termios.h]} { lappend extra_objs jim-tty.o } if {[have-feature termios.h] && [cc-check-functions posix_openpt]} { define-append AS_CFLAGS -DHAVE_OPENPTY lappend extra_objs openpty.o } elseif {[have-feature util.h]} { cc-check-function-in-lib openpty util } if {[ext-get-status regexp] in {y m}} { if {![have-feature regcomp]} { # No regcomp means we need to use the built-in version incr jimregexp } } if {$jimregexp || [opt-bool jim-regexp]} { msg-result "Using built-in regexp" define JIM_REGEXP # If the built-in regexp overrides the system regcomp, etc. # jim must be built shared so that the correct symbols are found if {[ext-get-status regexp] eq "m" && [get-define JIM_STATICLIB] && [have-feature regcomp]} { user-error "Must use --shared with regexp module and built-in regexp" } } foreach mod $extinfo(static-c) { if {[dict exists $extdb info $mod extrasrcs]} { foreach src [dict get $extdb info $mod extrasrcs] { # In case we are building out-of-tree and $src is in a subdir file mkdir [file dirname $src] lappend extra_objs {*}[file rootname $src].o } } } # poor-man's signals if {"signal" ni $extinfo(static-c)} { lappend extra_objs jim-nosignal.o } if {[ext-get-status load] eq "n"} { # If we don't have load, no need to support shared objects define SH_LINKFLAGS "" } # Are we cross compiling? if {[get-define host] ne [get-define build]} { define cross_compiling 1 } else { define cross_compiling 0 } msg-result "Jim static extensions: [lsort [concat $extinfo(static-tcl) $extinfo(static-c)]]" if {[llength $extinfo(module-tcl)]} { msg-result "Jim Tcl extensions: [lsort $extinfo(module-tcl)]" } if {[llength $extinfo(module-c)]} { msg-result "Jim dynamic extensions: [lsort $extinfo(module-c)]" } define STATIC_EXTS [concat $extinfo(static-c) $extinfo(static-tcl)] define C_EXT_OBJS [prefix jim- [suffix .o $extinfo(static-c)]] define TCL_EXT_OBJS [suffix .o $extinfo(static-tcl)] define C_EXT_SHOBJS [suffix .so $extinfo(module-c)] define TCL_EXTS [suffix .tcl $extinfo(module-tcl)] define EXTRA_OBJS $extra_objs # Restore the user-specified LIBS define LIBS $LIBS # Now generate the Makefile rules to build the external C shared objects # It is easier to do this here rather than listing them out explicitly in Makefile.in set lines {} foreach mod $extinfo(module-c) { set objs {} set libs [get-define LDLIBS_$mod] set srcs jim-$mod.c if {[dict exists $extdb info $mod extrasrcs]} { lappend srcs {*}[dict get $extdb info $mod extrasrcs] } lappend lines "$mod.so: $srcs \$(LIBJIM)" foreach src $srcs { set obj [file rootname $src].o lappend objs $obj lappend lines "\t\$(ECHO)\t\"\tCC\t$obj\"" lappend lines "\t\$(Q)\$(CC) \$(AS_CFLAGS) \$(AS_CPPFLAGS) \$(CFLAGS) \$(CPPFLAGS) \$(SHOBJ_CFLAGS) -c -o $obj \$(srcdir)/$src" } lappend lines "\t\$(ECHO)\t\"\tLDSO\t\$@\"" lappend lines "\t\$(Q)\$(CC) \$(AS_CFLAGS) \$(CFLAGS) \$(LDFLAGS) \$(SHOBJ_LDFLAGS) -o \$@ $objs \$(SH_LIBJIM) $libs" lappend lines "" } define BUILD_SHOBJS [join $lines \n] make-config-header jim-config.h -auto {HAVE_LONG_LONG* JIM_UTF8 JIM_TAINT JIM_GITVERSION SIZEOF_INT} -bare JIM_VERSION -none * make-config-header jimautoconf.h -none JIM_GITVERSION -auto {jim_ext_* TCL_PLATFORM_* TCL_LIBRARY USE_* JIM_* _FILE_OFFSET*} -bare {S_I*} make-template Makefile.in make-template tests/Makefile.in make-template examples.api/Makefile.in if {[get-define BUILD_JIM_EXT]} { make-template build-jim-ext.in catch {exec chmod +x build-jim-ext} } make-template jimtcl.pc.in if {[get-define SIZEOF_TIME_T] <= 4} { set note "" if {[have-feature windows]} { set note ", consider CFLAGS=-D__MINGW_USE_VC2005_COMPAT on mingw32" } lappend warnings "Warning: sizeof(time_t) is [get-define SIZEOF_TIME_T] -- not Y2038 compliant$note" } # Output any warnings at the end to make them easier to see foreach warning $warnings { user-notice $warning } jimtcl-0.84/autosetup/000077500000000000000000000000001522604140100147535ustar00rootroot00000000000000jimtcl-0.84/autosetup/LICENSE000066400000000000000000000033111522604140100157560ustar00rootroot00000000000000Unless explicitly stated, all files which form part of autosetup are released under the following license: --------------------------------------------------------------------- autosetup - A build environment "autoconfigurator" Copyright (c) 2010-2011, WorkWare Systems Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE WORKWARE SYSTEMS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WORKWARE SYSTEMS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The views and conclusions contained in the software and documentation are those of the authors and should not be interpreted as representing official policies, either expressed or implied, of WorkWare Systems. jimtcl-0.84/autosetup/README.autosetup000066400000000000000000000005761522604140100176730ustar00rootroot00000000000000README.autosetup created by autosetup v0.7.3 This is the autosetup directory for a local install of autosetup. It contains autosetup, support files and loadable modules. *.tcl files in this directory are optional modules which can be loaded with the 'use' directive. *.auto files in this directory are auto-loaded. For more information, see https://msteveb.github.io/autosetup/ jimtcl-0.84/autosetup/autosetup000077500000000000000000001756761522604140100167600ustar00rootroot00000000000000#!/bin/sh # Copyright (c) 2006-2011 WorkWare Systems http://www.workware.net.au/ # All rights reserved # vim:se syntax=tcl: # \ dir=`dirname "$0"`; exec "`$dir/autosetup-find-tclsh`" "$0" "$@" # Note that the version has a trailing + on unreleased versions set autosetup(version) 0.7.3 # Can be set to 1 to debug early-init problems set autosetup(debug) [expr {"--debug" in $argv}] ################################################################## # # Main flow of control, option handling # proc main {argv} { global autosetup define # There are 3 potential directories involved: # 1. The directory containing autosetup (this script) # 2. The directory containing auto.def # 3. The current directory # From this we need to determine: # a. The path to this script (and related support files) # b. The path to auto.def # c. The build directory, where output files are created # This is also complicated by the fact that autosetup may # have been run via the configure wrapper ([getenv WRAPPER] is set) # Here are the rules. # a. This script is $::argv0 # => dir, prog, exe, libdir # b. auto.def is in the directory containing the configure wrapper, # otherwise it is in the current directory. # => srcdir, autodef # c. The build directory is the current directory # => builddir, [pwd] # 'misc' is needed before we can do anything, so set a temporary libdir # in case this is the development version set autosetup(libdir) [file dirname $::argv0]/lib use misc # (a) set autosetup(dir) [realdir [file dirname [realpath $::argv0]]] set autosetup(prog) [file join $autosetup(dir) [file tail $::argv0]] set autosetup(exe) [getenv WRAPPER $autosetup(prog)] if {$autosetup(installed)} { set autosetup(libdir) $autosetup(dir) } else { set autosetup(libdir) [file join $autosetup(dir) lib] } autosetup_add_dep $autosetup(prog) # (b) if {[getenv WRAPPER ""] eq ""} { # Invoked directly set autosetup(srcdir) [pwd] } else { # Invoked via the configure wrapper set autosetup(srcdir) [file-normalize [file dirname $autosetup(exe)]] } set autosetup(autodef) [relative-path $autosetup(srcdir)/auto.def] # (c) set autosetup(builddir) [pwd] set autosetup(argv) $argv set autosetup(cmdline) {} # options is a list of known options set autosetup(options) {} # optset is a dictionary of option values set by the user based on getopt set autosetup(optset) {} # optdefault is a dictionary of default values set autosetup(optdefault) {} # options-defaults is a dictionary of overrides for default values for options set autosetup(options-defaults) {} # optionhelp is a list of lists of {option module description} set autosetup(optionhelp) {} # options-defaults-help is a dictionary of replacment help text for options set autosetup(options-defaults-help) {} set autosetup(showhelp) 0 use util # Parse options use getopt # At the is point we don't know what is a valid option # We simply parse anything that looks like an option set autosetup(getopt) [getopt argv] #"=Core Options:" options-add { help:=all => "display help and options. Optional: module name, such as --help=system" licence license => "display the autosetup license" version => "display the version of autosetup" ref:=text manual:=text reference:=text => "display the autosetup command reference. 'text', 'wiki', 'asciidoc' or 'markdown'" debug => "display debugging output as autosetup runs" install:=. => "install autosetup to the current or given directory" } if {$autosetup(installed)} { # hidden options so we can produce a nice error options-add { sysinstall:path } } else { options-add { sysinstall:path => "install standalone autosetup to the given directory (e.g.: /usr/local)" } } options-add { force init:=help => "create initial auto.def, etc. Use --init=help for known types" # Undocumented options option-checking=1 nopager quiet timing conf: } if {[opt-bool version]} { puts $autosetup(version) exit 0 } # autosetup --conf=alternate-auto.def if {[opt-str conf o]} { set autosetup(autodef) $o } # Debugging output (set this early) incr autosetup(debug) [opt-bool debug] incr autosetup(force) [opt-bool force] incr autosetup(msg-quiet) [opt-bool quiet] incr autosetup(msg-timing) [opt-bool timing] # If the local module exists, source it now to allow for # project-local customisations use -missingok local # Now any auto-load modules autosetup_load_auto_modules if {[opt-str help o]} { incr autosetup(showhelp) use help autosetup_help $o } if {[opt-bool licence license]} { use help autosetup_show_license exit 0 } if {[opt-str {manual ref reference} o]} { use help autosetup_reference $o } # Allow combining --install and --init set earlyexit 0 if {[opt-str install o]} { use install autosetup_install $o incr earlyexit } if {[opt-str init o]} { use init autosetup_init $o incr earlyexit } if {$earlyexit} { exit 0 } if {[opt-str sysinstall o]} { use install autosetup_install $o 1 exit 0 } if {![file exists $autosetup(autodef)]} { # Check for invalid option first options {} user-error "No auto.def found in \"$autosetup(srcdir)\" (use [file tail $::autosetup(exe)] --init to create one)" } # Parse extra arguments into autosetup(cmdline) foreach arg $argv { if {[regexp {([^=]*)=(.*)} $arg -> n v]} { dict set autosetup(cmdline) $n $v define $n $v } else { user-error "Unexpected parameter: $arg" } } autosetup_add_dep $autosetup(autodef) # Add $argv to CONFIGURE_OPTS define-append-argv CONFIGURE_OPTS {*}$autosetup(argv) # Set up AUTOREMAKE to reconfigure with the same args define-append-argv AUTOREMAKE {*}$autosetup(exe) {*}$autosetup(argv) # Log how we were invoked configlog "Invoked as: [getenv WRAPPER $::argv0] [quote-argv $autosetup(argv)]" configlog "Tclsh: [info nameofexecutable]" # Load auto.def as module "auto.def" autosetup_load_module auto.def source $autosetup(autodef) # Could warn here if options {} was not specified show-notices if {$autosetup(debug)} { msg-result "Writing all defines to config.log" configlog "================ defines ======================" foreach n [lsort [array names define]] { configlog "define $n $define($n)" } } exit 0 } # @section Option Handling # @opt-bool ?-nodefault? option ... # # Check each of the named, boolean options and if any have been explicitly enabled # or disabled by the user, return 1 or 0 accordingly. # # If the option was specified more than once, the last value wins. # e.g. With '--enable-foo --disable-foo', '[opt-bool foo]' will return 0 # # If no value was specified by the user, returns the default value for the # first option. If '-nodefault' is given, this behaviour changes and # -1 is returned instead. # proc opt-bool {args} { set nodefault 0 if {[lindex $args 0] eq "-nodefault"} { set nodefault 1 set args [lrange $args 1 end] } option-check-names {*}$args foreach opt $args { if {[dict exists $::autosetup(optset) $opt]} { return [dict get $::autosetup(optset) $opt] } } if {$nodefault} { return -1 } # Default value is the default for the first option return [dict get $::autosetup(optdefault) [lindex $args 0]] } # @opt-val optionlist ?default=""? # # Returns a list containing all the values given for the non-boolean options in '$optionlist'. # There will be one entry in the list for each option given by the user, including if the # same option was used multiple times. # # If no options were set, '$default' is returned (exactly, not as a list). # # Note: For most use cases, 'opt-str' should be preferred. # proc opt-val {names {default ""}} { option-check-names {*}$names foreach opt $names { if {[dict exists $::autosetup(optset) $opt]} { lappend result {*}[dict get $::autosetup(optset) $opt] } } if {[info exists result]} { return $result } return $default } # @opt-str optionlist varname ?default? # # Sets '$varname' in the callers scope to the value for one of the given options. # # For the list of options given in '$optionlist', if any value is set for any option, # the option value is taken to be the *last* value of the last option (in the order given). # # If no option was given, and a default was specified with 'options-defaults', # that value is used. # # If no 'options-defaults' value was given and '$default' was given, it is used. # # If none of the above provided a value, no value is set. # # The return value depends on whether '$default' was specified. # If it was, the option value is returned. # If it was not, 1 is returns if a value was set, or 0 if not. # # Typical usage is as follows: # ## if {[opt-str {myopt altname} o]} { ## do something with $o ## } # # Or: ## define myname [opt-str {myopt altname} o "/usr/local"] # proc opt-str {names varname args} { global autosetup option-check-names {*}$names upvar $varname value if {[llength $args]} { # A default was given, so always return the string value of the option set default [lindex $args 0] set retopt 1 } else { # No default, so return 0 or 1 to indicate if a value was found set retopt 0 } foreach opt $names { if {[dict exists $::autosetup(optset) $opt]} { set result [lindex [dict get $::autosetup(optset) $opt] end] } } if {![info exists result]} { # No user-specified value. Has options-defaults been set? foreach opt $names { if {[dict exists $::autosetup(optdefault) $opt]} { set result [dict get $autosetup(optdefault) $opt] } } } if {[info exists result]} { set value $result if {$retopt} { return $value } return 1 } if {$retopt} { set value $default return $value } return 0 } proc option-check-names {args} { foreach o $args { if {$o ni $::autosetup(options)} { autosetup-error "Request for undeclared option --$o" } } } # Parse the option definition in $opts and update # ::autosetup(setoptions) and ::autosetup(optionhelp) appropriately # proc options-add {opts} { global autosetup # First weed out comment lines set realopts {} foreach line [split $opts \n] { if {![string match "#*" [string trimleft $line]]} { append realopts $line \n } } set opts $realopts for {set i 0} {$i < [llength $opts]} {incr i} { set opt [lindex $opts $i] # Note that previously we supported special headings with a "=" prefix # This is no longer supported unset -nocomplain defaultvalue equal value #puts "i=$i, opt=$opt" regexp {^([^:=]*)(:)?(=)?(.*)$} $opt -> name colon equal value if {$name in $autosetup(options)} { autosetup-error "Option $name already specified" } #puts "$opt => $name $colon $equal $value" # Find the corresponding value in the user options # and set the default if necessary if {[string match "-*" $opt]} { # We no longer support documentation-only options, like "-C " autosetup-error "Option $opt is not supported" } elseif {$colon eq ""} { # Boolean option lappend autosetup(options) $name # Check for override if {[dict exists $autosetup(options-defaults) $name]} { # A default was specified with options-defaults, so use it set value [dict get $autosetup(options-defaults) $name] } if {$value eq "1"} { set opthelp "--disable-$name" } else { set opthelp "--$name" } # Set the default if {$value eq ""} { set value 0 } set defaultvalue $value dict set autosetup(optdefault) $name $defaultvalue if {[dict exists $autosetup(getopt) $name]} { # The option was specified by the user. Look at the last value. lassign [lindex [dict get $autosetup(getopt) $name] end] type setvalue if {$type eq "str"} { # Can we convert the value to a boolean? if {$setvalue in {1 enabled yes}} { set setvalue 1 } elseif {$setvalue in {0 disabled no}} { set setvalue 0 } else { user-error "Boolean option $name given as --$name=$setvalue" } } dict set autosetup(optset) $name $setvalue #puts "Found boolean option --$name=$setvalue" } } else { # String option. lappend autosetup(options) $name if {$equal ne "="} { # Was the option given as "name:value=default"? # If so, set $value to the display name and $defaultvalue to the default # (This is the preferred way to set a default value for a string option) if {[regexp {^([^=]+)=(.*)$} $value -> value defaultvalue]} { dict set autosetup(optdefault) $name $defaultvalue } } # Maybe override the default value if {[dict exists $autosetup(options-defaults) $name]} { # A default was specified with options-defaults, so use it set defaultvalue [dict get $autosetup(options-defaults) $name] dict set autosetup(optdefault) $name $defaultvalue } elseif {![info exists defaultvalue]} { # No default value was given by value=default or options-defaults # so use the value as the default when the plain option with no # value is given (.e.g. just --opt instead of --opt=value) set defaultvalue $value } if {$equal eq "="} { # String option with optional value set opthelp "--$name?=$value?" } else { # String option with required value set opthelp "--$name=$value" } # Get the values specified by the user if {[dict exists $autosetup(getopt) $name]} { set listvalue {} foreach pair [dict get $autosetup(getopt) $name] { lassign $pair type setvalue if {$type eq "bool" && $setvalue} { if {$equal ne "="} { user-error "Option --$name requires a value" } # If given as a boolean, use the default value set setvalue $defaultvalue } lappend listvalue $setvalue } #puts "Found string option --$name=$listvalue" dict set autosetup(optset) $name $listvalue } } # Now create the help for this option if appropriate # taking into account any options-default help text unset -nocomplain desc if {[lindex $opts $i+1] eq "=>"} { set desc [lindex $opts $i+2] incr i 2 } if {[dict exists $autosetup(options-defaults-help) $name]} { set desc [dict get $autosetup(options-defaults-help) $name] } if {[info exists desc]} { if {[info exists defaultvalue]} { set desc [string map [list @default@ $defaultvalue] $desc] } lappend autosetup(optionhelp) [list $opthelp $autosetup(module) $desc] } } } # @module-options optionlist # # Deprecated. Simply use 'options' from within a module. proc module-options {opts} { options $opts } proc max {a b} { expr {$a > $b ? $a : $b} } proc options-wrap-desc {text length firstprefix nextprefix initial} { set len $initial set space $firstprefix foreach word [split $text] { set word [string trim $word] if {$word == ""} { continue } if {$len && [string length $space$word] + $len >= $length} { puts "" set len 0 set space $nextprefix } incr len [string length $space$word] puts -nonewline $space$word set space " " } if {$len} { puts "" } } # Display options (from $autosetup(optionhelp)) for modules that match # glob pattern $what proc options-show {what} { set local 0 # Determine the max option width set max 0 foreach help $::autosetup(optionhelp) { lassign $help opt module desc if {![string match $what $module]} { continue } if {[string match =* $opt] || [string match \n* $desc]} { continue } set max [max $max [string length $opt]] } set indent [string repeat " " [expr {$max+4}]] # $COLUMNS overrides stty for window width set cols 80 if {[env-is-set COLUMNS]} { set cols [getenv COLUMNS] } else { catch { lassign [exec stty size] _ sttycols if {[string is integer -strict $sttycols]} { set cols $sttycols } } } incr cols -1 # Now output foreach help $::autosetup(optionhelp) { lassign $help opt module desc if {![string match $what $module]} { continue } if {$local == 0 && $module eq "auto.def"} { puts "Local Options:" incr local } puts -nonewline " [format %-${max}s $opt]" if {[string match \n* $desc]} { # Output a pre-formatted help description as-is puts $desc } else { options-wrap-desc [string trim $desc] $cols " " $indent [expr {$max+2}] } } } # @options optionspec # # Specifies configuration-time options which may be selected by the user # and checked with 'opt-str' and 'opt-bool'. '$optionspec' contains a series # of options specifications separated by newlines, as follows: # # A boolean option is of the form: # ## name[=0|1] => "Description of this boolean option" # # The default is 'name=0', meaning that the option is disabled by default. # If 'name=1' is used to make the option enabled by default, the description should reflect # that with text like "Disable support for ...". # # An argument option (one which takes a parameter) is of one of the following forms: # ## name:value => "Description of this option" ## name:value=default => "Description of this option with a default value" ## name:=value => "Description of this option with an optional value" # # If the 'name:value' form is used, the value must be provided with the option (as '--name=myvalue'). # If the 'name:value=default' form is used, the option has the given default value even if not # specified by the user. # If the 'name:=value' form is used, the value is optional and the given value is used # if it is not provided. # # The description may contain '@default@', in which case it will be replaced with the default # value for the option (taking into account defaults specified with 'options-defaults'. # # Undocumented options are also supported by omitting the '=> description'. # These options are not displayed with '--help' and can be useful for internal options or as aliases. # # For example, '--disable-lfs' is an alias for '--disable=largefile': # ## lfs=1 largefile=1 => "Disable large file support" # proc options {optlist} { global autosetup options-add $optlist if {$autosetup(showhelp)} { # If --help, stop now to show help return -code break } if {$autosetup(module) eq "auto.def"} { # Check for invalid options if {[opt-bool option-checking]} { foreach o [dict keys $::autosetup(getopt)] { if {$o ni $::autosetup(options)} { user-error "Unknown option --$o" } } } } } # @options-defaults {name value ?=> "Help text"? ...} # # Specifies a dictionary of options and a new default value for each of those options. # After any option it is possible to specify replacement help text with "=> Help text". # Use before any 'use' statements in 'auto.def' to change the defaults for # subsequently included modules. proc options-defaults {dict} { foreach {n v} $dict { if {$n eq "=>"} { dict set ::autosetup(options-defaults-help) $prevn $v } dict set ::autosetup(options-defaults) $n $v set prevn $n } } proc config_guess {} { if {[file-isexec $::autosetup(dir)/autosetup-config.guess]} { if {[catch {exec-with-stderr sh $::autosetup(dir)/autosetup-config.guess} alias]} { user-error $alias } return $alias } else { configlog "No autosetup-config.guess, so using uname" string tolower [exec uname -p]-unknown-[exec uname -s][exec uname -r] } } proc config_sub {alias} { if {[file-isexec $::autosetup(dir)/autosetup-config.sub]} { if {[catch {exec-with-stderr sh $::autosetup(dir)/autosetup-config.sub $alias} alias]} { user-error $alias } } return $alias } # @section Variable Definitions (defines) # @define name ?value=1? # # Defines the named variable to the given value. # These (name, value) pairs represent the results of the configuration check # and are available to be subsequently checked, modified and substituted. # proc define {name {value 1}} { set ::define($name) $value #dputs "$name <= $value" } # @define-push {name ...} script # # Save the values of the given defines, evaluation the script, then restore. # For example, to avoid updating AS_FLAGS and AS_CXXFLAGS: ## define-push {AS_CFLAGS AS_CXXFLAGS} { ## cc-check-flags -Wno-error ## } proc define-push {names script} { array set unset {} foreach name $names { if {[is-defined $name]} { set save($name) [get-define $name] } else { set unset($name) 1 } } uplevel 1 $script array set ::define [array get save] foreach name [array names unset] { unset -nocomplain ::define($name) } } # @undefine name # # Undefine the named variable. # proc undefine {name} { unset -nocomplain ::define($name) #dputs "$name <= " } # @define-append name value ... # # Appends the given value(s) to the given "defined" variable. # If the variable is not defined or empty, it is set to '$value'. # Otherwise the value is appended, separated by a space. # Any extra values are similarly appended. # # Note that define-append is not designed to add values containing spaces. # If values may contain spaces, consider define-append-argv instead. # proc define-append {name args} { if {[get-define $name ""] ne ""} { foreach arg $args { if {$arg eq ""} { continue } append ::define($name) " " $arg } } else { set ::define($name) [join $args] } #dputs "$name += [join $args] => $::define($name)" } # @define-append-argv name value ... # # Similar to define-append except designed to construct shell command # lines, including correct handling of parameters with spaces. # # Each non-empty value is quoted if necessary and then appended to the given variable # if it does not already exist. # proc define-append-argv {name args} { set seen {} set new {} foreach val [list {*}[get-define $name ""] {*}$args] { if {$val ne {} && ![dict exists $seen $val]} { lappend new [quote-if-needed $val] dict set seen $val 1 } } set ::define($name) [join $new " "] #dputs "$name += [join $args] => $::define($name)" } # @get-define name ?default=0? # # Returns the current value of the "defined" variable, or '$default' # if not set. # proc get-define {name {default 0}} { if {[info exists ::define($name)]} { #dputs "$name => $::define($name)" return $::define($name) } #dputs "$name => $default" return $default } # @is-defined name # # Returns 1 if the given variable is defined. # proc is-defined {name} { info exists ::define($name) } # @is-define-set name # # Returns 1 if the given variable is defined and is set # to a value other than "" or 0 # proc is-define-set {name} { if {[get-define $name] in {0 ""}} { return 0 } return 1 } # @all-defines # # Returns a dictionary (name, value list) of all defined variables. # # This is suitable for use with 'dict', 'array set' or 'foreach' # and allows for arbitrary processing of the defined variables. # proc all-defines {} { array get ::define } # @section Environment/Helpers # @get-env name default # # If '$name' was specified on the command line, return it. # Otherwise if '$name' was set in the environment, return it. # Otherwise return '$default'. # proc get-env {name default} { if {[dict exists $::autosetup(cmdline) $name]} { return [dict get $::autosetup(cmdline) $name] } getenv $name $default } # @env-is-set name # # Returns 1 if '$name' was specified on the command line or in the environment. # Note that an empty environment variable is not considered to be set. # proc env-is-set {name} { if {[dict exists $::autosetup(cmdline) $name]} { return 1 } if {[getenv $name ""] ne ""} { return 1 } return 0 } # @readfile filename ?default=""? # # Return the contents of the file, without the trailing newline. # If the file doesn't exist or can't be read, returns '$default'. # proc readfile {filename {default_value ""}} { set result $default_value catch { set f [open $filename] set result [read -nonewline $f] close $f } return $result } # @writefile filename value # # Creates the given file containing '$value'. # Does not add an extra newline. # proc writefile {filename value} { set f [open $filename w] puts -nonewline $f $value close $f } proc quote-if-needed {str} { if {[string match {*[\" ]*} $str]} { return \"[string map [list \" \\" \\ \\\\] $str]\" } return $str } proc quote-argv {argv} { set args {} foreach arg $argv { lappend args [quote-if-needed $arg] } join $args } # @list-non-empty list # # Returns a copy of the given list with empty elements removed proc list-non-empty {list} { set result {} foreach p $list { if {$p ne ""} { lappend result $p } } return $result } # @section Paths, Searching # @find-executable-path name # # Searches the path for an executable with the given name. # Note that the name may include some parameters, e.g. 'cc -mbig-endian', # in which case the parameters are ignored. # Returns the full path to the executable if found, or "" if not found. # proc find-executable-path {name} { # Ignore any parameters set name [lindex $name 0] # The empty string is never a valid executable if {$name ne ""} { foreach p [split-path] { dputs "Looking for $name in $p" set exec [file join $p $name] if {[file-isexec $exec]} { dputs "Found $name -> $exec" return $exec } } } return {} } # @find-executable name # # Searches the path for an executable with the given name. # Note that the name may include some parameters, e.g. 'cc -mbig-endian', # in which case the parameters are ignored. # Returns 1 if found, or 0 if not. # proc find-executable {name} { if {[find-executable-path $name] eq {}} { return 0 } return 1 } # @find-an-executable ?-required? name ... # # Given a list of possible executable names, # searches for one of these on the path. # # Returns the name found, or "" if none found. # If the first parameter is '-required', an error is generated # if no executable is found. # proc find-an-executable {args} { set required 0 if {[lindex $args 0] eq "-required"} { set args [lrange $args 1 end] incr required } foreach name $args { if {[find-executable $name]} { return $name } } if {$required} { if {[llength $args] == 1} { user-error "failed to find: [join $args]" } else { user-error "failed to find one of: [join $args]" } } return "" } # @section Logging, Messages and Errors # @configlog msg # # Writes the given message to the configuration log, 'config.log'. # proc configlog {msg} { if {![info exists ::autosetup(logfh)]} { set ::autosetup(logfh) [open config.log w] } puts $::autosetup(logfh) $msg } # @msg-checking msg # # Writes the message with no newline to stdout. # proc msg-checking {msg} { if {$::autosetup(msg-quiet) == 0} { maybe-show-timestamp puts -nonewline $msg set ::autosetup(msg-checking) 1 } } # @msg-result msg # # Writes the message to stdout. # proc msg-result {msg} { if {$::autosetup(msg-quiet) == 0} { maybe-show-timestamp puts $msg set ::autosetup(msg-checking) 0 show-notices } } # @msg-quiet command ... # # 'msg-quiet' evaluates it's arguments as a command with output # from 'msg-checking' and 'msg-result' suppressed. # # This is useful if a check needs to run a subcheck which isn't # of interest to the user. proc msg-quiet {args} { incr ::autosetup(msg-quiet) set rc [uplevel 1 $args] incr ::autosetup(msg-quiet) -1 return $rc } # Will be overridden by 'use misc' proc error-stacktrace {msg} { return $msg } proc error-location {msg} { return $msg } ################################################################## # # Debugging output # proc dputs {msg} { if {$::autosetup(debug)} { puts $msg } } ################################################################## # # User and system warnings and errors # # Usage errors such as wrong command line options # @user-error msg # # Indicate incorrect usage to the user, including if required components # or features are not found. # 'autosetup' exits with a non-zero return code. # proc user-error {msg} { show-notices puts stderr "Error: $msg" puts stderr "Try: '[file tail $::autosetup(exe)] --help' for options" exit 1 } # @user-notice msg # # Output the given message to stderr. # proc user-notice {msg} { lappend ::autosetup(notices) $msg } # Incorrect usage in the auto.def file. Identify the location. proc autosetup-error {msg} { autosetup-full-error [error-location $msg] } # Like autosetup-error, except $msg is the full error message. proc autosetup-full-error {msg} { show-notices puts stderr $msg exit 1 } proc show-notices {} { if {$::autosetup(msg-checking)} { puts "" set ::autosetup(msg-checking) 0 } flush stdout if {[info exists ::autosetup(notices)]} { puts stderr [join $::autosetup(notices) \n] unset ::autosetup(notices) } } proc maybe-show-timestamp {} { if {$::autosetup(msg-timing) && $::autosetup(msg-checking) == 0} { puts -nonewline [format {[%6.2f] } [expr {([clock millis] - $::autosetup(start)) % 10000 / 1000.0}]] } } # @autosetup-require-version required # # Checks the current version of 'autosetup' against '$required'. # A fatal error is generated if the current version is less than that required. # proc autosetup-require-version {required} { if {[compare-versions $::autosetup(version) $required] < 0} { user-error "autosetup version $required is required, but this is $::autosetup(version)" } } proc autosetup_version {} { return "autosetup v$::autosetup(version)" } ################################################################## # # Directory/path handling # proc realdir {dir} { set oldpwd [pwd] cd $dir set pwd [pwd] cd $oldpwd return $pwd } # Follow symlinks until we get to something which is not a symlink proc realpath {path} { while {1} { if {[catch { set path [file readlink $path] }]} { # Not a link break } } return $path } # Convert absolute path, $path into a path relative # to the given directory (or the current dir, if not given). # proc relative-path {path {pwd {}}} { set diff 0 set same 0 set newf {} set prefix {} set path [file-normalize $path] if {$pwd eq ""} { set pwd [pwd] } else { set pwd [file-normalize $pwd] } if {$path eq $pwd} { return . } # Try to make the filename relative to the current dir foreach p [split $pwd /] f [split $path /] { if {$p ne $f} { incr diff } elseif {!$diff} { incr same } if {$diff} { if {$p ne ""} { # Add .. for sibling or parent dir lappend prefix .. } if {$f ne ""} { lappend newf $f } } } if {$same == 1 || [llength $prefix] > 3} { return $path } file join [join $prefix /] [join $newf /] } # Add filename as a dependency to rerun autosetup # The name will be normalised (converted to a full path) # proc autosetup_add_dep {filename} { lappend ::autosetup(deps) [file-normalize $filename] } # @section Modules Support ################################################################## # # Library module support # # Returns the list of directories to search for library modules. proc autosetup_libdirs {} { global autosetup set dirs {} # srcdir may not be set (during bootstrap) # Search local before libdir so user modules take precedence if {[info exists autosetup(srcdir)]} { lappend dirs $autosetup(srcdir)/autosetup } if {$autosetup(libdir) ni $dirs} { lappend dirs $autosetup(libdir) } return $dirs } # @use ?-missingok? module ... # # Load the given library modules. # e.g. 'use cc cc-shared' # # Note that module 'X' is implemented in either 'autosetup/X.tcl' # or 'autosetup/X/init.tcl' # # The latter form is useful for a complex module which requires additional # support file. In this form, '$::usedir' is set to the module directory # when it is loaded. # # If -missingok is given, missing modules are ignored instead of generating an error. proc use {args} { global autosetup libmodule modsource set missingok 0 if {[lindex $args 0] eq "-missingok"} { set args [lrange $args 1 end] set missingok 1 } set dirs [autosetup_libdirs] foreach m $args { if {[info exists libmodule($m)]} { continue } set libmodule($m) 1 if {[info exists modsource(${m}.tcl)]} { dputs "Loading embedded module $m" autosetup_load_module $m eval $modsource(${m}.tcl) } else { #dputs "Searching for module $m in $dirs" set locs [list ${m}.tcl ${m}/init.tcl] set found 0 foreach dir $dirs { foreach loc $locs { set source $dir/$loc if {[file exists $source]} { incr found break } } if {$found} { break } } if {$found} { # For the convenience of the "use" source, point to the directory # it is being loaded from set ::usedir [file dirname $source] dputs "Loading module $m from $source" autosetup_load_module $m source $source autosetup_add_dep $source } elseif {!$missingok} { autosetup-error "use: No such module: $m" } } } } proc autosetup_load_auto_modules {} { global autosetup modsource # First load any embedded auto modules foreach mod [array names modsource *.auto] { dputs "Loading embedded auto module $mod" autosetup_load_module $mod eval $modsource($mod) } # Now any external auto modules set dirs [autosetup_libdirs] dputs "Loading auto modules from $dirs" foreach dir $dirs { foreach file [glob -nocomplain $dir/*.auto $dir/*/*.auto] { dputs "Loading auto module $file" autosetup_load_module [file tail $file] source $file } } } # Load module source in the global scope by executing the given command proc autosetup_load_module {module args} { global autosetup set prev $autosetup(module) set autosetup(module) $module if {[catch [list uplevel #0 $args] msg opts] ni {0 2 3}} { autosetup-full-error [error-dump $msg $opts $::autosetup(debug)] } set autosetup(module) $prev } # Initial settings set autosetup(exe) $::argv0 set autosetup(istcl) 1 set autosetup(start) [clock millis] set autosetup(installed) 0 set autosetup(sysinstall) 0 set autosetup(msg-checking) 0 set autosetup(msg-quiet) 0 set autosetup(inittypes) {} set autosetup(module) autosetup # Embedded modules are inserted below here set autosetup(installed) 1 set autosetup(sysinstall) 0 # ----- @module asciidoc-formatting.tcl ----- set modsource(asciidoc-formatting.tcl) { # Copyright (c) 2010 WorkWare Systems http://www.workware.net.au/ # All rights reserved # Module which provides text formatting # asciidoc format use formatting proc para {text} { regsub -all "\[ \t\n\]+" [string trim $text] " " } proc title {text} { underline [para $text] = nl } proc p {text} { puts [para $text] nl } proc code {text} { foreach line [parse_code_block $text] { puts " $line" } nl } proc codelines {lines} { foreach line $lines { puts " $line" } nl } proc nl {} { puts "" } proc underline {text char} { regexp "^(\[ \t\]*)(.*)" $text -> indent words puts $text puts $indent[string repeat $char [string length $words]] } proc section {text} { underline "[para $text]" - nl } proc subsection {text} { underline "$text" ~ nl } proc bullet {text} { puts "* [para $text]" } proc indent {text} { puts " :: " puts [para $text] } proc defn {first args} { set sep "" if {$first ne ""} { puts "${first}::" } else { puts " :: " } set defn [string trim [join $args \n]] regsub -all "\n\n" $defn "\n ::\n" defn puts $defn } } # ----- @module formatting.tcl ----- set modsource(formatting.tcl) { # Copyright (c) 2010 WorkWare Systems http://www.workware.net.au/ # All rights reserved # Module which provides common text formatting # This is designed for documentation which looks like: # code {...} # or # code { # ... # ... # } # In the second case, we need to work out the indenting # and strip it from all lines but preserve the remaining indenting. # Note that all lines need to be indented with the same initial # spaces/tabs. # # Returns a list of lines with the indenting removed. # proc parse_code_block {text} { # If the text begins with newline, take the following text, # otherwise just return the original if {![regexp "^\n(.*)" $text -> text]} { return [list [string trim $text]] } # And trip spaces off the end set text [string trimright $text] set min 100 # Examine each line to determine the minimum indent foreach line [split $text \n] { if {$line eq ""} { # Ignore empty lines for the indent calculation continue } regexp "^(\[ \t\]*)" $line -> indent set len [string length $indent] if {$len < $min} { set min $len } } # Now make a list of lines with this indent removed set lines {} foreach line [split $text \n] { lappend lines [string range $line $min end] } # Return the result return $lines } } # ----- @module getopt.tcl ----- set modsource(getopt.tcl) { # Copyright (c) 2006 WorkWare Systems http://www.workware.net.au/ # All rights reserved # Simple getopt module # Parse everything out of the argv list which looks like an option # Everything which doesn't look like an option, or is after --, is left unchanged # Understands --enable-xxx as a synonym for --xxx to enable the boolean option xxx. # Understands --disable-xxx to disable the boolean option xxx. # # The returned value is a dictionary keyed by option name # Each value is a list of {type value} ... where type is "bool" or "str". # The value for a boolean option is 0 or 1. The value of a string option is the value given. proc getopt {argvname} { upvar $argvname argv set nargv {} set opts {} for {set i 0} {$i < [llength $argv]} {incr i} { set arg [lindex $argv $i] #dputs arg=$arg if {$arg eq "--"} { # End of options incr i lappend nargv {*}[lrange $argv $i end] break } if {[regexp {^--([^=][^=]+)=(.*)$} $arg -> name value]} { # --name=value dict lappend opts $name [list str $value] } elseif {[regexp {^--(enable-|disable-)?([^=]*)$} $arg -> prefix name]} { if {$prefix in {enable- ""}} { set value 1 } else { set value 0 } dict lappend opts $name [list bool $value] } else { lappend nargv $arg } } #puts "getopt: argv=[join $argv] => [join $nargv]" #array set getopt $opts #parray getopt set argv $nargv return $opts } } # ----- @module help.tcl ----- set modsource(help.tcl) { # Copyright (c) 2010 WorkWare Systems http://workware.net.au/ # All rights reserved # Module which provides usage, help and the command reference proc autosetup_help {what} { use_pager puts "Usage: [file tail $::autosetup(exe)] \[options\] \[settings\]\n" puts "This is [autosetup_version], a build environment \"autoconfigurator\"" puts "See the documentation online at https://msteveb.github.io/autosetup/\n" if {$what in {all local}} { # Need to load auto.def now if {[file exists $::autosetup(autodef)]} { # Load auto.def as module "auto.def" autosetup_load_module auto.def source $::autosetup(autodef) } if {$what eq "all"} { set what * } else { set what auto.def } } else { use $what puts "Options for module $what:" } options-show $what exit 0 } proc autosetup_show_license {} { global modsource autosetup use_pager if {[info exists modsource(LICENSE)]} { puts $modsource(LICENSE) return } foreach dir [list $autosetup(libdir) $autosetup(srcdir)] { set path [file join $dir LICENSE] if {[file exists $path]} { puts [readfile $path] return } } puts "LICENSE not found" } # If not already paged and stdout is a tty, pipe the output through the pager # This is done by reinvoking autosetup with --nopager added proc use_pager {} { if {![opt-bool nopager] && [getenv PAGER ""] ne "" && [isatty? stdin] && [isatty? stdout]} { if {[catch { exec [info nameofexecutable] $::argv0 --nopager {*}$::argv |& {*}[getenv PAGER] >@stdout <@stdin 2>@stderr } msg opts] == 1} { if {[dict get $opts -errorcode] eq "NONE"} { # an internal/exec error puts stderr $msg exit 1 } } exit 0 } } # Outputs the autosetup references in one of several formats proc autosetup_reference {{type text}} { use_pager switch -glob -- $type { wiki {use wiki-formatting} ascii* {use asciidoc-formatting} md - markdown {use markdown-formatting} default {use text-formatting} } title "[autosetup_version] -- Command Reference" section {Introduction} p { See https://msteveb.github.io/autosetup/ for the online documentation for 'autosetup'. This documentation can also be accessed locally with `autosetup --ref`. } p { 'autosetup' provides a number of built-in commands which are documented below. These may be used from 'auto.def' to test for features, define variables, create files from templates and other similar actions. } automf_command_reference exit 0 } proc autosetup_output_block {type lines} { if {[llength $lines]} { switch $type { section { section $lines } subsection { subsection $lines } code { codelines $lines } p { p [join $lines] } list { foreach line $lines { bullet $line } nl } } } } # Generate a command reference from inline documentation proc automf_command_reference {} { lappend files $::autosetup(prog) lappend files {*}[lsort [glob -nocomplain $::autosetup(libdir)/{*/*.tcl,*.tcl}]] # We want to process all non-module files before module files # and then modules in alphabetical order. # So examine all files and extract docs into doc($modulename) and doc(_core_) # # Each entry is a list of {type data} where $type is one of: section, subsection, code, list, p # and $data is a string for section, subsection or a list of text lines for other types. # XXX: Should commands be in alphabetical order too? Currently they are in file order. set doc(_core_) {} lappend doc(_core_) [list section "Core Commands"] foreach file $files { set modulename [file rootname [file tail $file]] set current _core_ set f [open $file] while {![eof $f]} { set line [gets $f] if {[regexp {^#.*@section (.*)$} $line -> section]} { lappend doc($current) [list section $section] continue } # Find embedded module names if {[regexp {^#.*@module ([^ ]*)} $line -> modulename]} { continue } # Find lines starting with "# @*" and continuing through the remaining comment lines if {![regexp {^# @(.*)} $line -> cmd]} { continue } # Synopsis or command? if {$cmd eq "synopsis:"} { set current $modulename lappend doc($current) [list section "Module: $modulename"] } else { lappend doc($current) [list subsection $cmd] } set lines {} set type p # Now the description while {![eof $f]} { set line [gets $f] if {![regexp {^#(#)? ?(.*)} $line -> hash cmd]} { break } if {$hash eq "#"} { set t code } elseif {[regexp {^- (.*)} $cmd -> cmd]} { set t list } else { set t p } #puts "hash=$hash, oldhash=$oldhash, lines=[llength $lines], cmd=$cmd" if {$t ne $type || $cmd eq ""} { # Finish the current block lappend doc($current) [list $type $lines] set lines {} set type $t } if {$cmd ne ""} { lappend lines $cmd } } lappend doc($current) [list $type $lines] } close $f } # Now format and output the results # _core_ will sort first foreach module [lsort [array names doc]] { foreach item $doc($module) { autosetup_output_block {*}$item } } } } # ----- @module init.tcl ----- set modsource(init.tcl) { # Copyright (c) 2010 WorkWare Systems http://www.workware.net.au/ # All rights reserved # Module to help create auto.def and configure proc autosetup_init {type} { set help 0 if {$type in {? help}} { incr help } elseif {![dict exists $::autosetup(inittypes) $type]} { puts "Unknown type, --init=$type" incr help } if {$help} { puts "Use one of the following types (e.g. --init=make)\n" foreach type [lsort [dict keys $::autosetup(inittypes)]] { lassign [dict get $::autosetup(inittypes) $type] desc # XXX: Use the options-show code to wrap the description puts [format "%-10s %s" $type $desc] } return } lassign [dict get $::autosetup(inittypes) $type] desc script puts "Initialising $type: $desc\n" # All initialisations happens in the top level srcdir cd $::autosetup(srcdir) uplevel #0 $script } proc autosetup_add_init_type {type desc script} { dict set ::autosetup(inittypes) $type [list $desc $script] } # This is for in creating build-system init scripts # # If the file doesn't exist, create it containing $contents # If the file does exist, only overwrite if --force is specified. # proc autosetup_check_create {filename contents} { if {[file exists $filename]} { if {!$::autosetup(force)} { puts "I see $filename already exists." return } else { puts "I will overwrite the existing $filename because you used --force." } } else { puts "I don't see $filename, so I will create it." } writefile $filename $contents } } # ----- @module install.tcl ----- set modsource(install.tcl) { # Copyright (c) 2006-2010 WorkWare Systems http://www.workware.net.au/ # All rights reserved # Module which can install autosetup # autosetup(installed)=1 means that autosetup is not running from source # autosetup(sysinstall)=1 means that autosetup is running from a sysinstall version # shared=1 means that we are trying to do a sysinstall. This is only possible from the development source. proc autosetup_install {dir {shared 0}} { global autosetup if {$shared} { if {$autosetup(installed) || $autosetup(sysinstall)} { user-error "Can only --sysinstall from development sources" } } elseif {$autosetup(installed) && !$autosetup(sysinstall)} { user-error "Can't --install from project install" } if {$autosetup(sysinstall)} { # This is the sysinstall version, so install just uses references cd $dir puts "[autosetup_version] creating configure to use system-installed autosetup" autosetup_create_configure 1 puts "Creating autosetup/README.autosetup" file mkdir autosetup autosetup_install_readme autosetup/README.autosetup 1 return } if {[catch { if {$shared} { set target $dir/bin/autosetup set installedas $target } else { if {$dir eq "."} { set installedas autosetup } else { set installedas $dir/autosetup } cd $dir file mkdir autosetup set target autosetup/autosetup } set targetdir [file dirname $target] file mkdir $targetdir set f [open $target w] set publicmodules {} # First the main script, but only up until "CUT HERE" set in [open $autosetup(dir)/autosetup] while {[gets $in buf] >= 0} { if {$buf ne "##-- CUT HERE --##"} { puts $f $buf continue } # Insert the static modules here # i.e. those which don't contain @synopsis: # All modules are inserted if $shared is set puts $f "set autosetup(installed) 1" puts $f "set autosetup(sysinstall) $shared" foreach file [lsort [glob $autosetup(libdir)/*.{tcl,auto}]] { set modname [file tail $file] set ext [file ext $modname] set buf [readfile $file] if {!$shared} { if {$ext eq ".auto" || [string match "*\n# @synopsis:*" $buf]} { lappend publicmodules $file continue } } dputs "install: importing lib/[file tail $file]" puts $f "# ----- @module $modname -----" puts $f "\nset modsource($modname) \{" puts $f $buf puts $f "\}\n" } if {$shared} { foreach {srcname destname} [list $autosetup(libdir)/README.autosetup-lib README.autosetup \ $autosetup(srcdir)/LICENSE LICENSE] { dputs "install: importing $srcname as $destname" puts $f "\nset modsource($destname) \\\n[list [readfile $srcname]\n]\n" } } } close $in close $f catch {exec chmod 755 $target} set installfiles {autosetup-config.guess autosetup-config.sub autosetup-test-tclsh} set removefiles {} if {!$shared} { autosetup_install_readme $targetdir/README.autosetup 0 # Install public modules foreach file $publicmodules { set tail [file tail $file] autosetup_install_file $file $targetdir/$tail } lappend installfiles jimsh0.c autosetup-find-tclsh LICENSE lappend removefiles config.guess config.sub test-tclsh find-tclsh } else { lappend installfiles {sys-find-tclsh autosetup-find-tclsh} } # Install support files foreach fileinfo $installfiles { if {[llength $fileinfo] == 2} { lassign $fileinfo source dest } else { lassign $fileinfo source set dest $source } autosetup_install_file $autosetup(dir)/$source $targetdir/$dest } # Remove obsolete files foreach file $removefiles { if {[file exists $targetdir/$file]} { file delete $targetdir/$file } } } error]} { user-error "Failed to install autosetup: $error" } if {$shared} { set type "system" } else { set type "local" } puts "Installed $type [autosetup_version] to $installedas" if {!$shared} { # Now create 'configure' if necessary autosetup_create_configure 0 } } proc autosetup_create_configure {shared} { if {[file exists configure]} { if {!$::autosetup(force)} { # Could this be an autosetup configure? if {![string match "*\nWRAPPER=*" [readfile configure]]} { puts "I see configure, but not created by autosetup, so I won't overwrite it." puts "Remove it or use --force to overwrite." return } } else { puts "I will overwrite the existing configure because you used --force." } } else { puts "I don't see configure, so I will create it." } if {$shared} { writefile configure \ {#!/bin/sh WRAPPER="$0"; export WRAPPER; "autosetup" "$@" } } else { writefile configure \ {#!/bin/sh dir="`dirname "$0"`/autosetup" #@@INITCHECK@@# WRAPPER="$0"; export WRAPPER; exec "`"$dir/autosetup-find-tclsh"`" "$dir/autosetup" "$@" } } catch {exec chmod 755 configure} } # Append the contents of $file to filehandle $f proc autosetup_install_append {f file} { dputs "install: include $file" set in [open $file] puts $f [read $in] close $in } proc autosetup_install_file {source target} { dputs "install: $source => $target" if {![file exists $source]} { error "Missing installation file '$source'" } writefile $target [readfile $source]\n # If possible, copy the file mode file stat $source stat set mode [format %o [expr {$stat(mode) & 0x1ff}]] catch {exec chmod $mode $target} } proc autosetup_install_readme {target sysinstall} { set readme "README.autosetup created by [autosetup_version]\n\n" if {$sysinstall} { append readme \ {This is the autosetup directory for a system install of autosetup. Loadable modules can be added here. } } else { append readme \ {This is the autosetup directory for a local install of autosetup. It contains autosetup, support files and loadable modules. } } append readme { *.tcl files in this directory are optional modules which can be loaded with the 'use' directive. *.auto files in this directory are auto-loaded. For more information, see https://msteveb.github.io/autosetup/ } dputs "install: autosetup/README.autosetup" writefile $target $readme } } # ----- @module markdown-formatting.tcl ----- set modsource(markdown-formatting.tcl) { # Copyright (c) 2010 WorkWare Systems http://www.workware.net.au/ # All rights reserved # Module which provides text formatting # markdown format (kramdown syntax) use formatting proc para {text} { regsub -all "\[ \t\n\]+" [string trim $text] " " text regsub -all {([^a-zA-Z])'([^']*)'} $text {\1**`\2`**} text regsub -all {^'([^']*)'} $text {**`\1`**} text regsub -all {(http[^ \t\n]*)} $text {[\1](\1)} text return $text } proc title {text} { underline [para $text] = nl } proc p {text} { puts [para $text] nl } proc codelines {lines} { puts "~~~~~~~~~~~~" foreach line $lines { puts $line } puts "~~~~~~~~~~~~" nl } proc code {text} { puts "~~~~~~~~~~~~" foreach line [parse_code_block $text] { puts $line } puts "~~~~~~~~~~~~" nl } proc nl {} { puts "" } proc underline {text char} { regexp "^(\[ \t\]*)(.*)" $text -> indent words puts $text puts $indent[string repeat $char [string length $words]] } proc section {text} { underline "[para $text]" - nl } proc subsection {text} { puts "### `$text`" nl } proc bullet {text} { puts "* [para $text]" } proc defn {first args} { puts "^" set defn [string trim [join $args \n]] if {$first ne ""} { puts "**${first}**" puts -nonewline ": " regsub -all "\n\n" $defn "\n: " defn } puts "$defn" } } # ----- @module misc.tcl ----- set modsource(misc.tcl) { # Copyright (c) 2007-2010 WorkWare Systems http://www.workware.net.au/ # All rights reserved # Module containing misc procs useful to modules # Largely for platform compatibility set autosetup(istcl) [info exists ::tcl_library] set autosetup(iswin) [string equal windows $tcl_platform(platform)] if {$autosetup(iswin)} { # mingw/windows separates $PATH with semicolons # and doesn't have an executable bit proc split-path {} { split [getenv PATH .] {;} } proc file-isexec {exec} { # Basic test for windows. We ignore .bat if {[file isfile $exec] || [file isfile $exec.exe]} { return 1 } return 0 } } else { # unix separates $PATH with colons and has and executable bit proc split-path {} { split [getenv PATH .] : } # Check for an executable file proc file-isexec {exec} { if {[file executable $exec] && [file isfile $exec]} { return 1 } return 0 } } # Assume that exec can return stdout and stderr proc exec-with-stderr {args} { exec {*}$args 2>@1 } if {$autosetup(istcl)} { # Tcl doesn't have the env command proc getenv {name args} { if {[info exists ::env($name)]} { return $::env($name) } if {[llength $args]} { return [lindex $args 0] } return -code error "environment variable \"$name\" does not exist" } proc isatty? {channel} { dict exists [fconfigure $channel] -xchar } # Jim-compatible stacktrace using info frame proc stacktrace {} { set stacktrace {} # 2 to skip the current frame for {set i 2} {$i < [info frame]} {incr i} { set frame [info frame -$i] if {[dict exists $frame file]} { # We don't need proc, so use "" lappend stacktrace "" [dict get $frame file] [dict get $frame line] "" } } return $stacktrace } } else { if {$autosetup(iswin)} { # On Windows, backslash convert all environment variables # (Assume that Tcl does this for us) proc getenv {name args} { string map {\\ /} [env $name {*}$args] } } else { # Jim on unix is simple alias getenv env } proc isatty? {channel} { set tty 0 catch { # isatty is a recent addition to Jim Tcl set tty [$channel isatty] } return $tty } } # In case 'file normalize' doesn't exist # proc file-normalize {path} { if {[catch {file normalize $path} result]} { if {$path eq ""} { return "" } set oldpwd [pwd] if {[file isdir $path]} { cd $path set result [pwd] } else { cd [file dirname $path] set result [file join [pwd] [file tail $path]] } cd $oldpwd } return $result } # If everything is working properly, the only errors which occur # should be generated in user code (e.g. auto.def). # By default, we only want to show the error location in user code. # We use [info frame] to achieve this, but it works differently on Tcl and Jim. # # This is designed to be called for incorrect usage in auto.def, via autosetup-error # proc error-location {msg} { if {$::autosetup(debug)} { return -code error $msg } set vars {p f l cmd} if {!$::autosetup(istcl) && ![dict exists $::tcl_platform stackFormat]} { # Older versions of Jim had a 3 element stacktrace set vars {p f l} } foreach $vars [stacktrace] { if {[string match *.def $f]} { return "[relative-path $f]:$l: Error: $msg" } #puts "Skipping $f:$l" } return $msg } # If everything is working properly, the only errors which occur # should be generated in user code (e.g. auto.def). # By default, we only want to show the error location in user code. # We use [info frame] to achieve this, but it works differently on Tcl and Jim. # # This is designed to be called for incorrect usage in auto.def, via autosetup-error # proc error-stacktrace {msg} { if {$::autosetup(debug)} { return -code error $msg } # Search back through the stack trace for the first error in a .def file for {set i 1} {$i < [info level]} {incr i} { if {$::autosetup(istcl)} { array set info [info frame -$i] } else { lassign [info frame -$i] info(caller) info(file) info(line) } if {[string match *.def $info(file)]} { return "[relative-path $info(file)]:$info(line): Error: $msg" } #puts "Skipping $info(file):$info(line)" } return $msg } # Given the return from [catch {...} msg opts], returns an appropriate # error message. A nice one for Jim and a less-nice one for Tcl. # If 'fulltrace' is set, a full stack trace is provided. # Otherwise a simple message is provided. # # This is designed for developer errors, e.g. in module code or auto.def code # # proc error-dump {msg opts fulltrace} { if {$::autosetup(istcl)} { if {$fulltrace} { return "Error: [dict get $opts -errorinfo]" } else { return "Error: $msg" } } else { lassign $opts(-errorinfo) p f l if {$f ne ""} { set result "$f:$l: Error: " } append result "$msg\n" if {$fulltrace} { append result [stackdump $opts(-errorinfo)] } # Remove the trailing newline string trim $result } } } # ----- @module text-formatting.tcl ----- set modsource(text-formatting.tcl) { # Copyright (c) 2010 WorkWare Systems http://www.workware.net.au/ # All rights reserved # Module which provides text formatting use formatting proc wordwrap {text length {firstprefix ""} {nextprefix ""}} { set len 0 set space $firstprefix foreach word [split $text] { set word [string trim $word] if {$word eq ""} { continue } if {[info exists partial]} { append partial " " $word if {[string first $quote $word] < 0} { # Haven't found end of quoted word continue } # Finished quoted word set word $partial unset partial unset quote } else { set quote [string index $word 0] if {$quote in {' *}} { if {[string first $quote $word 1] < 0} { # Haven't found end of quoted word # Not a whole word. set first [string index $word 0] # Start of quoted word set partial $word continue } } } if {$len && [string length $space$word] + $len >= $length} { puts "" set len 0 set space $nextprefix } incr len [string length $space$word] # Use man-page conventions for highlighting 'quoted' and *quoted* # single words. # Use x^Hx for *bold* and _^Hx for 'underline'. # # less and more will both understand this. # Pipe through 'col -b' to remove them. if {[regexp {^'(.*)'(.*)} $word -> quoted after]} { set quoted [string map {~ " "} $quoted] regsub -all . $quoted "&\b&" quoted set word $quoted$after } elseif {[regexp {^[*](.*)[*](.*)} $word -> quoted after]} { set quoted [string map {~ " "} $quoted] regsub -all . $quoted "_\b&" quoted set word $quoted$after } puts -nonewline $space$word set space " " } if {[info exists partial]} { # Missing end of quote puts -nonewline $space$partial } if {$len} { puts "" } } proc title {text} { underline [string trim $text] = nl } proc p {text} { wordwrap $text 80 nl } proc codelines {lines} { foreach line $lines { puts " $line" } nl } proc nl {} { puts "" } proc underline {text char} { regexp "^(\[ \t\]*)(.*)" $text -> indent words puts $text puts $indent[string repeat $char [string length $words]] } proc section {text} { underline "[string trim $text]" - nl } proc subsection {text} { underline "$text" ~ nl } proc bullet {text} { wordwrap $text 76 " * " " " } proc indent {text} { wordwrap $text 76 " " " " } proc defn {first args} { if {$first ne ""} { underline " $first" ~ } foreach p $args { if {$p ne ""} { indent $p } } } } # ----- @module util.tcl ----- set modsource(util.tcl) { # Copyright (c) 2012 WorkWare Systems http://www.workware.net.au/ # All rights reserved # Module which contains miscellaneous utility functions # @section Utilities # @compare-versions version1 version2 # # Versions are of the form 'a.b.c' (may be any number of numeric components) # # Compares the two versions and returns: ## -1 if v1 < v2 ## 0 if v1 == v2 ## 1 if v1 > v2 # # If one version has fewer components than the other, 0 is substituted to the right. e.g. ## 0.2 < 0.3 ## 0.2.5 > 0.2 ## 1.1 == 1.1.0 # proc compare-versions {v1 v2} { foreach c1 [split $v1 .] c2 [split $v2 .] { if {$c1 eq ""} { set c1 0 } if {$c2 eq ""} { set c2 0 } if {$c1 < $c2} { return -1 } if {$c1 > $c2} { return 1 } } return 0 } # @suffix suf list # # Takes a list and returns a new list with '$suf' appended # to each element # ## suffix .c {a b c} => {a.c b.c c.c} # proc suffix {suf list} { set result {} foreach p $list { lappend result $p$suf } return $result } # @prefix pre list # # Takes a list and returns a new list with '$pre' prepended # to each element # ## prefix jim- {a.c b.c} => {jim-a.c jim-b.c} # proc prefix {pre list} { set result {} foreach p $list { lappend result $pre$p } return $result } # @lpop list # # Removes the last entry from the given list and returns it. proc lpop {listname} { upvar $listname list set val [lindex $list end] set list [lrange $list 0 end-1] return $val } } # ----- @module wiki-formatting.tcl ----- set modsource(wiki-formatting.tcl) { # Copyright (c) 2010 WorkWare Systems http://www.workware.net.au/ # All rights reserved # Module which provides text formatting # wiki.tcl.tk format output use formatting proc joinlines {text} { set lines {} foreach l [split [string trim $text] \n] { lappend lines [string trim $l] } join $lines } proc p {text} { puts [joinlines $text] puts "" } proc title {text} { puts "*** [joinlines $text] ***" puts "" } proc codelines {lines} { puts "======" foreach line $lines { puts " $line" } puts "======" } proc code {text} { puts "======" foreach line [parse_code_block $text] { puts " $line" } puts "======" } proc nl {} { } proc section {text} { puts "'''$text'''" puts "" } proc subsection {text} { puts "''$text''" puts "" } proc bullet {text} { puts " * [joinlines $text]" } proc indent {text} { puts " : [joinlines $text]" } proc defn {first args} { if {$first ne ""} { indent '''$first''' } foreach p $args { p $p } } } ################################################################## # # Entry/Exit # if {$autosetup(debug)} { main $argv } if {[catch {main $argv} msg opts] == 1} { show-notices autosetup-full-error [error-dump $msg $opts $autosetup(debug)] if {!$autosetup(debug)} { puts stderr "Try: '[file tail $autosetup(exe)] --debug' for a full stack trace" } exit 1 } jimtcl-0.84/autosetup/autosetup-config.guess000077500000000000000000001430671522604140100213350ustar00rootroot00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2024 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2024-07-27' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system '$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2024 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try '$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi # Just in case it came from the environment. GUESS= # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, 'CC_FOR_BUILD' used to be named 'HOST_CC'. We still # use 'HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039,SC3028 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c17 c99 c89 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD=$driver break fi done if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac } # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case $UNAME_SYSTEM in Linux|GNU|GNU/*) LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" #if defined(__ANDROID__) LIBC=android #else #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu #elif defined(__LLVM_LIBC__) LIBC=llvm #else #include /* First heuristic to detect musl libc. */ #ifdef __DEFINED_va_list LIBC=musl #endif #endif #endif EOF cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` eval "$cc_set_libc" # Second heuristic to detect musl libc. if [ "$LIBC" = unknown ] && command -v ldd >/dev/null && ldd --version 2>&1 | grep -q ^musl; then LIBC=musl fi # If the system lacks a compiler, then just pick glibc. # We could probably try harder. if [ "$LIBC" = unknown ]; then LIBC=gnu fi ;; esac # Note: order is significant - the case branches are not exclusive. case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` case $UNAME_MACHINE_ARCH in aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=$UNAME_MACHINE_ARCH-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case $UNAME_VERSION in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. GUESS=$machine-${os}${release}${abi-} ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE ;; *:SecBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE ;; *:MidnightBSD:*:*) GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE ;; *:ekkoBSD:*:*) GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE ;; *:SolidBSD:*:*) GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE ;; *:OS108:*:*) GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE ;; macppc:MirBSD:*:*) GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE ;; *:MirBSD:*:*) GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE ;; *:Sortix:*:*) GUESS=$UNAME_MACHINE-unknown-sortix ;; *:Twizzler:*:*) GUESS=$UNAME_MACHINE-unknown-twizzler ;; *:Redox:*:*) GUESS=$UNAME_MACHINE-unknown-redox ;; mips:OSF1:*.*) GUESS=mips-dec-osf1 ;; alpha:OSF1:*:*) # Reset EXIT trap before exiting to avoid spurious non-zero exit code. trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case $ALPHA_CPU_TYPE in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` GUESS=$UNAME_MACHINE-dec-osf$OSF_REL ;; Amiga*:UNIX_System_V:4.0:*) GUESS=m68k-unknown-sysv4 ;; *:[Aa]miga[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-amigaos ;; *:[Mm]orph[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-morphos ;; *:OS/390:*:*) GUESS=i370-ibm-openedition ;; *:z/VM:*:*) GUESS=s390-ibm-zvmoe ;; *:OS400:*:*) GUESS=powerpc-ibm-os400 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) GUESS=arm-acorn-riscix$UNAME_RELEASE ;; arm*:riscos:*:*|arm*:RISCOS:*:*) GUESS=arm-unknown-riscos ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) GUESS=hppa1.1-hitachi-hiuxmpp ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. case `(/bin/universe) 2>/dev/null` in att) GUESS=pyramid-pyramid-sysv3 ;; *) GUESS=pyramid-pyramid-bsd ;; esac ;; NILE*:*:*:dcosx) GUESS=pyramid-pyramid-svr4 ;; DRS?6000:unix:4.0:6*) GUESS=sparc-icl-nx6 ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) GUESS=sparc-icl-nx7 ;; esac ;; s390x:SunOS:*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL ;; sun4H:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-hal-solaris2$SUN_REL ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris2$SUN_REL ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) GUESS=i386-pc-auroraux$UNAME_RELEASE ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$SUN_ARCH-pc-solaris2$SUN_REL ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris3$SUN_REL ;; sun4*:SunOS:*:*) case `/usr/bin/arch -k` in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like '4.1.3-JL'. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` GUESS=sparc-sun-sunos$SUN_REL ;; sun3*:SunOS:*:*) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case `/bin/arch` in sun3) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac ;; aushp:SunOS:*:*) GUESS=sparc-auspex-sunos$UNAME_RELEASE ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) GUESS=m68k-milan-mint$UNAME_RELEASE ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) GUESS=m68k-hades-mint$UNAME_RELEASE ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) GUESS=m68k-unknown-mint$UNAME_RELEASE ;; m68k:machten:*:*) GUESS=m68k-apple-machten$UNAME_RELEASE ;; powerpc:machten:*:*) GUESS=powerpc-apple-machten$UNAME_RELEASE ;; RISC*:Mach:*:*) GUESS=mips-dec-mach_bsd4.3 ;; RISC*:ULTRIX:*:*) GUESS=mips-dec-ultrix$UNAME_RELEASE ;; VAX*:ULTRIX*:*:*) GUESS=vax-dec-ultrix$UNAME_RELEASE ;; 2020:CLIX:*:* | 2430:CLIX:*:*) GUESS=clipper-intergraph-clix$UNAME_RELEASE ;; mips:*:*:UMIPS | mips:*:*:RISCos) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } GUESS=mips-mips-riscos$UNAME_RELEASE ;; Motorola:PowerMAX_OS:*:*) GUESS=powerpc-motorola-powermax ;; Motorola:*:4.3:PL8-*) GUESS=powerpc-harris-powermax ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) GUESS=powerpc-harris-powermax ;; Night_Hawk:Power_UNIX:*:*) GUESS=powerpc-harris-powerunix ;; m88k:CX/UX:7*:*) GUESS=m88k-harris-cxux7 ;; m88k:*:4*:R4*) GUESS=m88k-motorola-sysv4 ;; m88k:*:3*:R3*) GUESS=m88k-motorola-sysv3 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ test "$TARGET_BINARY_INTERFACE"x = x then GUESS=m88k-dg-dgux$UNAME_RELEASE else GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else GUESS=i586-dg-dgux$UNAME_RELEASE fi ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) GUESS=m88k-dolphin-sysv3 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 GUESS=m88k-motorola-sysv3 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) GUESS=m88k-tektronix-sysv3 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) GUESS=m68k-tektronix-bsd ;; *:IRIX*:*:*) IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` GUESS=mips-sgi-irix$IRIX_REL ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) GUESS=i386-ibm-aix ;; ia64:AIX:*:*) if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int main () { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then GUESS=$SYSTEM_NAME else GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then GUESS=rs6000-ibm-aix3.2.4 else GUESS=rs6000-ibm-aix3.2 fi ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if test -x /usr/bin/lslpp ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$IBM_ARCH-ibm-aix$IBM_REV ;; *:AIX:*:*) GUESS=rs6000-ibm-aix ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) GUESS=romp-ibm-bsd4.4 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) GUESS=rs6000-bull-bosx ;; DPX/2?00:B.O.S.:*:*) GUESS=m68k-bull-sysv3 ;; 9000/[34]??:4.3bsd:1.*:*) GUESS=m68k-hp-bsd ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) GUESS=m68k-hp-bsd4.4 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` case $UNAME_MACHINE in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case $sc_cpu_version in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case $sc_kernel_bits in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if test "$HP_ARCH" = ""; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if test "$HP_ARCH" = hppa2.0w then set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi GUESS=$HP_ARCH-hp-hpux$HPUX_REV ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` GUESS=ia64-hp-hpux$HPUX_REV ;; 3050*:HI-UX:*:*) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } GUESS=unknown-hitachi-hiuxwe2 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) GUESS=hppa1.1-hp-bsd ;; 9000/8??:4.3bsd:*:*) GUESS=hppa1.0-hp-bsd ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) GUESS=hppa1.0-hp-mpeix ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) GUESS=hppa1.1-hp-osf ;; hp8??:OSF1:*:*) GUESS=hppa1.0-hp-osf ;; i*86:OSF1:*:*) if test -x /usr/sbin/sysversion ; then GUESS=$UNAME_MACHINE-unknown-osf1mk else GUESS=$UNAME_MACHINE-unknown-osf1 fi ;; parisc*:Lites*:*:*) GUESS=hppa1.1-hp-lites ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) GUESS=c1-convex-bsd ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) GUESS=c34-convex-bsd ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) GUESS=c38-convex-bsd ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) GUESS=c4-convex-bsd ;; CRAY*Y-MP:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=ymp-cray-unicos$CRAY_REL ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=t90-cray-unicos$CRAY_REL ;; CRAY*T3E:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=alphaev5-cray-unicosmk$CRAY_REL ;; CRAY*SV1:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=sv1-cray-unicos$CRAY_REL ;; *:UNICOS/mp:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=craynv-cray-unicosmp$CRAY_REL ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE ;; sparc*:BSD/OS:*:*) GUESS=sparc-unknown-bsdi$UNAME_RELEASE ;; *:BSD/OS:*:*) GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi else FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf fi ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL ;; i*:CYGWIN*:*) GUESS=$UNAME_MACHINE-pc-cygwin ;; *:MINGW64*:*) GUESS=$UNAME_MACHINE-pc-mingw64 ;; *:MINGW*:*) GUESS=$UNAME_MACHINE-pc-mingw32 ;; *:MSYS*:*) GUESS=$UNAME_MACHINE-pc-msys ;; i*:PW*:*) GUESS=$UNAME_MACHINE-pc-pw32 ;; *:SerenityOS:*:*) GUESS=$UNAME_MACHINE-pc-serenity ;; *:Interix*:*) case $UNAME_MACHINE in x86) GUESS=i586-pc-interix$UNAME_RELEASE ;; authenticamd | genuineintel | EM64T) GUESS=x86_64-unknown-interix$UNAME_RELEASE ;; IA64) GUESS=ia64-unknown-interix$UNAME_RELEASE ;; esac ;; i*:UWIN*:*) GUESS=$UNAME_MACHINE-pc-uwin ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) GUESS=x86_64-pc-cygwin ;; prep*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=powerpcle-unknown-solaris2$SUN_REL ;; *:GNU:*:*) # the GNU system GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL ;; *:GNU/*:*:*) # other systems with GNU libc and userland GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC ;; x86_64:[Mm]anagarm:*:*|i?86:[Mm]anagarm:*:*) GUESS="$UNAME_MACHINE-pc-managarm-mlibc" ;; *:[Mm]anagarm:*:*) GUESS="$UNAME_MACHINE-unknown-managarm-mlibc" ;; *:Minix:*:*) GUESS=$UNAME_MACHINE-unknown-minix ;; aarch64:Linux:*:*) set_cc_for_build CPU=$UNAME_MACHINE LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then ABI=64 sed 's/^ //' << EOF > "$dummy.c" #ifdef __ARM_EABI__ #ifdef __ARM_PCS_VFP ABI=eabihf #else ABI=eabi #endif #endif EOF cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'` eval "$cc_set_abi" case $ABI in eabi | eabihf) CPU=armv8l; LIBCABI=$LIBC$ABI ;; esac fi GUESS=$CPU-unknown-linux-$LIBCABI ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi ;; avr32*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; cris:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; crisv32:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; e2k:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; frv:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; hexagon:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:Linux:*:*) GUESS=$UNAME_MACHINE-pc-linux-$LIBC ;; ia64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; k1om:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; kvx:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; kvx:cos:*:*) GUESS=$UNAME_MACHINE-unknown-cos ;; kvx:mbr:*:*) GUESS=$UNAME_MACHINE-unknown-mbr ;; loongarch32:Linux:*:* | loongarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m32r*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m68*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` eval "$cc_set_vars" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; openrisc*:Linux:*:*) GUESS=or1k-unknown-linux-$LIBC ;; or32:Linux:*:* | or1k*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; padre:Linux:*:*) GUESS=sparc-unknown-linux-$LIBC ;; parisc64:Linux:*:* | hppa64:Linux:*:*) GUESS=hppa64-unknown-linux-$LIBC ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; *) GUESS=hppa-unknown-linux-$LIBC ;; esac ;; ppc64:Linux:*:*) GUESS=powerpc64-unknown-linux-$LIBC ;; ppc:Linux:*:*) GUESS=powerpc-unknown-linux-$LIBC ;; ppc64le:Linux:*:*) GUESS=powerpc64le-unknown-linux-$LIBC ;; ppcle:Linux:*:*) GUESS=powerpcle-unknown-linux-$LIBC ;; riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; s390:Linux:*:* | s390x:Linux:*:*) GUESS=$UNAME_MACHINE-ibm-linux-$LIBC ;; sh64*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sh*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sparc:Linux:*:* | sparc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; tile*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; vax:Linux:*:*) GUESS=$UNAME_MACHINE-dec-linux-$LIBC ;; x86_64:Linux:*:*) set_cc_for_build CPU=$UNAME_MACHINE LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then ABI=64 sed 's/^ //' << EOF > "$dummy.c" #ifdef __i386__ ABI=x86 #else #ifdef __ILP32__ ABI=x32 #endif #endif EOF cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'` eval "$cc_set_abi" case $ABI in x86) CPU=i686 ;; x32) LIBCABI=${LIBC}x32 ;; esac fi GUESS=$CPU-pc-linux-$LIBCABI ;; xtensa*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. GUESS=i386-sequent-sysv4 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION ;; i*86:OS/2:*:*) # If we were able to find 'uname', then EMX Unix compatibility # is probably installed. GUESS=$UNAME_MACHINE-pc-os2-emx ;; i*86:XTS-300:*:STOP) GUESS=$UNAME_MACHINE-unknown-stop ;; i*86:atheos:*:*) GUESS=$UNAME_MACHINE-unknown-atheos ;; i*86:syllable:*:*) GUESS=$UNAME_MACHINE-pc-syllable ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) GUESS=i386-unknown-lynxos$UNAME_RELEASE ;; i*86:*DOS:*:*) GUESS=$UNAME_MACHINE-pc-msdosdjgpp ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv32 fi ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. GUESS=i586-pc-msdosdjgpp ;; Intel:Mach:3*:*) GUESS=i386-pc-mach3 ;; paragon:*:*:*) GUESS=i860-intel-osf1 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi ;; mini*:CTIX:SYS*5:*) # "miniframe" GUESS=m68010-convergent-sysv ;; mc68k:UNIX:SYSTEM5:3.51m) GUESS=m68k-convergent-sysv ;; M680?0:D-NIX:5.3:*) GUESS=m68k-diab-dnix ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) GUESS=m68k-unknown-lynxos$UNAME_RELEASE ;; mc68030:UNIX_System_V:4.*:*) GUESS=m68k-atari-sysv4 ;; TSUNAMI:LynxOS:2.*:*) GUESS=sparc-unknown-lynxos$UNAME_RELEASE ;; rs6000:LynxOS:2.*:*) GUESS=rs6000-unknown-lynxos$UNAME_RELEASE ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) GUESS=powerpc-unknown-lynxos$UNAME_RELEASE ;; SM[BE]S:UNIX_SV:*:*) GUESS=mips-dde-sysv$UNAME_RELEASE ;; RM*:ReliantUNIX-*:*:*) GUESS=mips-sni-sysv4 ;; RM*:SINIX-*:*:*) GUESS=mips-sni-sysv4 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` GUESS=$UNAME_MACHINE-sni-sysv4 else GUESS=ns32k-sni-sysv fi ;; PENTIUM:*:4.0*:*) # Unisys 'ClearPath HMP IX 4000' SVR4/MP effort # says GUESS=i586-unisys-sysv4 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm GUESS=hppa1.1-stratus-sysv4 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. GUESS=i860-stratus-sysv4 ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. GUESS=$UNAME_MACHINE-stratus-vos ;; *:VOS:*:*) # From Paul.Green@stratus.com. GUESS=hppa1.1-stratus-vos ;; mc68*:A/UX:*:*) GUESS=m68k-apple-aux$UNAME_RELEASE ;; news*:NEWS-OS:6*:*) GUESS=mips-sony-newsos6 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if test -d /usr/nec; then GUESS=mips-nec-sysv$UNAME_RELEASE else GUESS=mips-unknown-sysv$UNAME_RELEASE fi ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. GUESS=powerpc-be-beos ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. GUESS=powerpc-apple-beos ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. GUESS=i586-pc-beos ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. GUESS=i586-pc-haiku ;; ppc:Haiku:*:*) # Haiku running on Apple PowerPC GUESS=powerpc-apple-haiku ;; *:Haiku:*:*) # Haiku modern gcc (not bound by BeOS compat) GUESS=$UNAME_MACHINE-unknown-haiku ;; SX-4:SUPER-UX:*:*) GUESS=sx4-nec-superux$UNAME_RELEASE ;; SX-5:SUPER-UX:*:*) GUESS=sx5-nec-superux$UNAME_RELEASE ;; SX-6:SUPER-UX:*:*) GUESS=sx6-nec-superux$UNAME_RELEASE ;; SX-7:SUPER-UX:*:*) GUESS=sx7-nec-superux$UNAME_RELEASE ;; SX-8:SUPER-UX:*:*) GUESS=sx8-nec-superux$UNAME_RELEASE ;; SX-8R:SUPER-UX:*:*) GUESS=sx8r-nec-superux$UNAME_RELEASE ;; SX-ACE:SUPER-UX:*:*) GUESS=sxace-nec-superux$UNAME_RELEASE ;; Power*:Rhapsody:*:*) GUESS=powerpc-apple-rhapsody$UNAME_RELEASE ;; *:Rhapsody:*:*) GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE ;; arm64:Darwin:*:*) GUESS=aarch64-apple-darwin$UNAME_RELEASE ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE ;; *:QNX:*:4*) GUESS=i386-pc-qnx ;; NEO-*:NONSTOP_KERNEL:*:*) GUESS=neo-tandem-nsk$UNAME_RELEASE ;; NSE-*:NONSTOP_KERNEL:*:*) GUESS=nse-tandem-nsk$UNAME_RELEASE ;; NSR-*:NONSTOP_KERNEL:*:*) GUESS=nsr-tandem-nsk$UNAME_RELEASE ;; NSV-*:NONSTOP_KERNEL:*:*) GUESS=nsv-tandem-nsk$UNAME_RELEASE ;; NSX-*:NONSTOP_KERNEL:*:*) GUESS=nsx-tandem-nsk$UNAME_RELEASE ;; *:NonStop-UX:*:*) GUESS=mips-compaq-nonstopux ;; BS2000:POSIX*:*:*) GUESS=bs2000-siemens-sysv ;; DS/*:UNIX_System_V:*:*) GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "${cputype-}" = 386; then UNAME_MACHINE=i386 elif test "x${cputype-}" != x; then UNAME_MACHINE=$cputype fi GUESS=$UNAME_MACHINE-unknown-plan9 ;; *:TOPS-10:*:*) GUESS=pdp10-unknown-tops10 ;; *:TENEX:*:*) GUESS=pdp10-unknown-tenex ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) GUESS=pdp10-dec-tops20 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) GUESS=pdp10-xkl-tops20 ;; *:TOPS-20:*:*) GUESS=pdp10-unknown-tops20 ;; *:ITS:*:*) GUESS=pdp10-unknown-its ;; SEI:*:*:SEIUX) GUESS=mips-sei-seiux$UNAME_RELEASE ;; *:DragonFly:*:*) DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case $UNAME_MACHINE in A*) GUESS=alpha-dec-vms ;; I*) GUESS=ia64-dec-vms ;; V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) GUESS=i386-pc-xenix ;; i*86:skyos:*:*) SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL ;; i*86:rdos:*:*) GUESS=$UNAME_MACHINE-pc-rdos ;; i*86:Fiwix:*:*) GUESS=$UNAME_MACHINE-pc-fiwix ;; *:AROS:*:*) GUESS=$UNAME_MACHINE-unknown-aros ;; x86_64:VMkernel:*:*) GUESS=$UNAME_MACHINE-unknown-esx ;; amd64:Isilon\ OneFS:*:*) GUESS=x86_64-unknown-onefs ;; *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; *:Ironclad:*:*) GUESS=$UNAME_MACHINE-unknown-ironclad ;; esac # Do we have a guess based on uname results? if test "x$GUESS" != x; then echo "$GUESS" exit fi # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" < #include #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include #if defined(_SIZE_T_) || defined(SIGLOST) #include #endif #endif #endif int main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) #include #if defined (BSD) #if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); #else #if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); #else printf ("vax-dec-bsd\n"); exit (0); #endif #endif #else printf ("vax-dec-bsd\n"); exit (0); #endif #else #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } echo "$0: unable to guess system type" >&2 case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF fi exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: jimtcl-0.84/autosetup/autosetup-config.sub000077500000000000000000001154411522604140100207730ustar00rootroot00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2024 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268,SC2162 # see below for rationale timestamp='2024-05-27' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2024 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try '$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Split fields of configuration type saved_IFS=$IFS IFS="-" read field1 field2 field3 field4 <&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 basic_os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in cloudabi*-eabi* \ | kfreebsd*-gnu* \ | knetbsd*-gnu* \ | kopensolaris*-gnu* \ | linux-* \ | managarm-* \ | netbsd*-eabi* \ | netbsd*-gnu* \ | nto-qnx* \ | os2-emx* \ | rtmk-nova* \ | storm-chaos* \ | uclinux-gnu* \ | uclinux-uclibc* \ | windows-* ) basic_machine=$field1 basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown basic_os=linux-android ;; *) basic_machine=$field1-$field2 basic_os=$field3 ;; esac ;; *-*) case $field1-$field2 in # Shorthands that happen to contain a single dash convex-c[12] | convex-c3[248]) basic_machine=$field2-convex basic_os= ;; decstation-3100) basic_machine=mips-dec basic_os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Do not treat sunos as a manufacturer sun*os*) basic_machine=$field1 basic_os=$field2 ;; # Manufacturers 3100* \ | 32* \ | 3300* \ | 3600* \ | 7300* \ | acorn \ | altos* \ | apollo \ | apple \ | atari \ | att* \ | axis \ | be \ | bull \ | cbm \ | ccur \ | cisco \ | commodore \ | convergent* \ | convex* \ | cray \ | crds \ | dec* \ | delta* \ | dg \ | digital \ | dolphin \ | encore* \ | gould \ | harris \ | highlevel \ | hitachi* \ | hp \ | ibm* \ | intergraph \ | isi* \ | knuth \ | masscomp \ | microblaze* \ | mips* \ | motorola* \ | ncr* \ | news \ | next \ | ns \ | oki \ | omron* \ | pc533* \ | rebel \ | rom68k \ | rombug \ | semi \ | sequent* \ | siemens \ | sgi* \ | siemens \ | sim \ | sni \ | sony* \ | stratus \ | sun \ | sun[234]* \ | tektronix \ | tti* \ | ultra \ | unicom* \ | wec \ | winbond \ | wrs) basic_machine=$field1-$field2 basic_os= ;; zephyr*) basic_machine=$field1-unknown basic_os=$field2 ;; *) basic_machine=$field1 basic_os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc basic_os=bsd ;; a29khif) basic_machine=a29k-amd basic_os=udi ;; adobe68k) basic_machine=m68010-adobe basic_os=scout ;; alliant) basic_machine=fx80-alliant basic_os= ;; altos | altos3068) basic_machine=m68k-altos basic_os= ;; am29k) basic_machine=a29k-none basic_os=bsd ;; amdahl) basic_machine=580-amdahl basic_os=sysv ;; amiga) basic_machine=m68k-unknown basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo basic_os=bsd ;; aros) basic_machine=i386-pc basic_os=aros ;; aux) basic_machine=m68k-apple basic_os=aux ;; balance) basic_machine=ns32k-sequent basic_os=dynix ;; blackfin) basic_machine=bfin-unknown basic_os=linux ;; cegcc) basic_machine=arm-unknown basic_os=cegcc ;; cray) basic_machine=j90-cray basic_os=unicos ;; crds | unos) basic_machine=m68k-crds basic_os= ;; da30) basic_machine=m68k-da30 basic_os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec basic_os= ;; delta88) basic_machine=m88k-motorola basic_os=sysv3 ;; dicos) basic_machine=i686-pc basic_os=dicos ;; djgpp) basic_machine=i586-pc basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson basic_os=ose ;; gmicro) basic_machine=tron-gmicro basic_os=sysv ;; go32) basic_machine=i386-pc basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi basic_os=hms ;; harris) basic_machine=m88k-harris basic_os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp basic_os=hpux ;; hp300bsd) basic_machine=m68k-hp basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp basic_os=osf ;; hppro) basic_machine=hppa1.1-hp basic_os=proelf ;; i386mach) basic_machine=i386-mach basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown basic_os=linux ;; magnum | m3230) basic_machine=mips-mips basic_os=sysv ;; merlin) basic_machine=ns32k-utek basic_os=sysv ;; mingw64) basic_machine=x86_64-pc basic_os=mingw64 ;; mingw32) basic_machine=i686-pc basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k basic_os=coff ;; morphos) basic_machine=powerpc-unknown basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown basic_os=moxiebox ;; msdos) basic_machine=i386-pc basic_os=msdos ;; msys) basic_machine=i686-pc basic_os=msys ;; mvs) basic_machine=i370-ibm basic_os=mvs ;; nacl) basic_machine=le32-unknown basic_os=nacl ;; ncr3000) basic_machine=i486-ncr basic_os=sysv4 ;; netbsd386) basic_machine=i386-pc basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony basic_os=newsos ;; news1000) basic_machine=m68030-sony basic_os=newsos ;; necv70) basic_machine=v70-nec basic_os=sysv ;; nh3000) basic_machine=m68k-harris basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris basic_os=cxux ;; nindy960) basic_machine=i960-intel basic_os=nindy ;; mon960) basic_machine=i960-intel basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson basic_os=ose ;; os68k) basic_machine=m68k-none basic_os=os68k ;; paragon) basic_machine=i860-intel basic_os=osf ;; parisc) basic_machine=hppa-unknown basic_os=linux ;; psp) basic_machine=mipsallegrexel-sony basic_os=psp ;; pw32) basic_machine=i586-unknown basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc basic_os=rdos ;; rdos32) basic_machine=i386-pc basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k basic_os=coff ;; sa29200) basic_machine=a29k-amd basic_os=udi ;; sei) basic_machine=mips-sei basic_os=seiux ;; sequent) basic_machine=i386-sequent basic_os= ;; sps7) basic_machine=m68k-bull basic_os=sysv2 ;; st2000) basic_machine=m68k-tandem basic_os= ;; stratus) basic_machine=i860-stratus basic_os=sysv4 ;; sun2) basic_machine=m68000-sun basic_os= ;; sun2os3) basic_machine=m68000-sun basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun basic_os=sunos4 ;; sun3) basic_machine=m68k-sun basic_os= ;; sun3os3) basic_machine=m68k-sun basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun basic_os=sunos4 ;; sun4) basic_machine=sparc-sun basic_os= ;; sun4os3) basic_machine=sparc-sun basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun basic_os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun basic_os= ;; sv1) basic_machine=sv1-cray basic_os=unicos ;; symmetry) basic_machine=i386-sequent basic_os=dynix ;; t3e) basic_machine=alphaev5-cray basic_os=unicos ;; t90) basic_machine=t90-cray basic_os=unicos ;; toad1) basic_machine=pdp10-xkl basic_os=tops20 ;; tpf) basic_machine=s390x-ibm basic_os=tpf ;; udi29k) basic_machine=a29k-amd basic_os=udi ;; ultra3) basic_machine=a29k-nyu basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec basic_os=none ;; vaxv) basic_machine=vax-dec basic_os=sysv ;; vms) basic_machine=vax-dec basic_os=vms ;; vsta) basic_machine=i386-pc basic_os=vsta ;; vxworks960) basic_machine=i960-wrs basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs basic_os=vxworks ;; xbox) basic_machine=i686-pc basic_os=mingw32 ;; ymp) basic_machine=ymp-cray basic_os=unicos ;; *) basic_machine=$1 basic_os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm basic_os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec basic_os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec basic_os=tops20 ;; delta | 3300 | delta-motorola | 3300-motorola | motorola-delta | motorola-3300) cpu=m68k vendor=motorola ;; # This used to be dpx2*, but that gets the RS6000-based # DPX/20 and the x86-based DPX/2-100 wrong. See # https://oldskool.silicium.org/stations/bull_dpx20.htm # https://www.feb-patrimoine.com/english/bull_dpx2.htm # https://www.feb-patrimoine.com/english/unix_and_bull.htm dpx2 | dpx2[23]00 | dpx2[23]xx) cpu=m68k vendor=bull ;; dpx2100 | dpx21xx) cpu=i386 vendor=bull ;; dpx20) cpu=rs6000 vendor=bull ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi basic_os=${basic_os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv32 ;; i*86v4*) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv4 ;; i*86v) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv ;; i*86sol2) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray basic_os=${basic_os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $basic_os in irix*) ;; *) basic_os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari basic_os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony basic_os=newsos ;; next | m*-next) cpu=m68k vendor=next ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki basic_os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde basic_os=${basic_os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs basic_os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond basic_os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; *-*) saved_IFS=$IFS IFS="-" read cpu vendor <&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if test x"$basic_os" != x then # First recognize some ad-hoc cases, or perhaps split kernel-os, or else just # set os. obj= case $basic_os in gnu/linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` ;; os2-emx) kernel=os2 os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` ;; nto-qnx*) kernel=nto os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` ;; *-*) saved_IFS=$IFS IFS="-" read kernel os <&2 fi ;; *) echo "Invalid configuration '$1': OS '$os' not recognized" 1>&2 exit 1 ;; esac case $obj in aout* | coff* | elf* | pe*) ;; '') # empty is fine ;; *) echo "Invalid configuration '$1': Machine code format '$obj' not recognized" 1>&2 exit 1 ;; esac # Here we handle the constraint that a (synthetic) cpu and os are # valid only in combination with each other and nowhere else. case $cpu-$os in # The "javascript-unknown-ghcjs" triple is used by GHC; we # accept it here in order to tolerate that, but reject any # variations. javascript-ghcjs) ;; javascript-* | *-ghcjs) echo "Invalid configuration '$1': cpu '$cpu' is not valid with os '$os$obj'" 1>&2 exit 1 ;; esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. case $kernel-$os-$obj in linux-gnu*- | linux-android*- | linux-dietlibc*- | linux-llvm*- \ | linux-mlibc*- | linux-musl*- | linux-newlib*- \ | linux-relibc*- | linux-uclibc*- | linux-ohos*- ) ;; uclinux-uclibc*- | uclinux-gnu*- ) ;; managarm-mlibc*- | managarm-kernel*- ) ;; windows*-msvc*-) ;; -dietlibc*- | -llvm*- | -mlibc*- | -musl*- | -newlib*- | -relibc*- \ | -uclibc*- ) # These are just libc implementations, not actual OSes, and thus # require a kernel. echo "Invalid configuration '$1': libc '$os' needs explicit kernel." 1>&2 exit 1 ;; -kernel*- ) echo "Invalid configuration '$1': '$os' needs explicit kernel." 1>&2 exit 1 ;; *-kernel*- ) echo "Invalid configuration '$1': '$kernel' does not support '$os'." 1>&2 exit 1 ;; *-msvc*- ) echo "Invalid configuration '$1': '$os' needs 'windows'." 1>&2 exit 1 ;; kfreebsd*-gnu*- | knetbsd*-gnu*- | netbsd*-gnu*- | kopensolaris*-gnu*-) ;; vxworks-simlinux- | vxworks-simwindows- | vxworks-spe-) ;; nto-qnx*-) ;; os2-emx-) ;; rtmk-nova-) ;; *-eabi*- | *-gnueabi*-) ;; none--*) # None (no kernel, i.e. freestanding / bare metal), # can be paired with an machine code file format ;; -*-) # Blank kernel with real OS is always fine. ;; --*) # Blank kernel and OS with real machine code file format is always fine. ;; *-*-*) echo "Invalid configuration '$1': Kernel '$kernel' not known to work with OS '$os'." 1>&2 exit 1 ;; esac # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) case $cpu-$os in *-riscix*) vendor=acorn ;; *-sunos* | *-solaris*) vendor=sun ;; *-cnk* | *-aix*) vendor=ibm ;; *-beos*) vendor=be ;; *-hpux*) vendor=hp ;; *-mpeix*) vendor=hp ;; *-hiux*) vendor=hitachi ;; *-unos*) vendor=crds ;; *-dgux*) vendor=dg ;; *-luna*) vendor=omron ;; *-genix*) vendor=ns ;; *-clix*) vendor=intergraph ;; *-mvs* | *-opened*) vendor=ibm ;; *-os400*) vendor=ibm ;; s390-* | s390x-*) vendor=ibm ;; *-ptx*) vendor=sequent ;; *-tpf*) vendor=ibm ;; *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; *-aux*) vendor=apple ;; *-hms*) vendor=hitachi ;; *-mpw* | *-macos*) vendor=apple ;; *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; *-vos*) vendor=stratus ;; esac ;; esac echo "$cpu-$vendor${kernel:+-$kernel}${os:+-$os}${obj:+-$obj}" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: jimtcl-0.84/autosetup/autosetup-find-tclsh000077500000000000000000000014201522604140100207600ustar00rootroot00000000000000#!/bin/sh # Looks for a suitable tclsh or jimsh in the PATH # If not found, builds a bootstrap jimsh in current dir from source # Prefer $autosetup_tclsh if is set in the environment (unless ./jimsh0 works) # If an argument is given, use that as the test instead of autosetup-test-tclsh d="`dirname "$0"`" for tclsh in ./jimsh0 $autosetup_tclsh jimsh tclsh tclsh8.5 tclsh8.6 tclsh8.7; do { $tclsh "$d/${1-autosetup-test-tclsh}"; } 2>/dev/null && exit 0 done echo 1>&2 "No installed jimsh or tclsh, building local bootstrap jimsh0" for cc in "${CC_FOR_BUILD:-cc}" gcc; do { $cc -o jimsh0 "$d/jimsh0.c"; } 2>/dev/null >/dev/null || continue ./jimsh0 "$d/${1-autosetup-test-tclsh}" && exit 0 done echo 1>&2 "No working C compiler found. Tried ${CC_FOR_BUILD:-cc} and gcc." echo false jimtcl-0.84/autosetup/autosetup-test-tclsh000066400000000000000000000010231522604140100210130ustar00rootroot00000000000000# A small Tcl script to verify that the chosen # interpreter works. Sometimes we might e.g. pick up # an interpreter for a different arch. # Outputs the full path to the interpreter if {[catch {info version} version] == 0} { # This is Jim Tcl if {$version >= 0.72} { # Ensure that regexp works regexp (a.*?) a puts [info nameofexecutable] exit 0 } } elseif {[catch {info tclversion} version] == 0} { if {$version >= 8.5 && ![string match 8.5a* [info patchlevel]]} { puts [info nameofexecutable] exit 0 } } exit 1 jimtcl-0.84/autosetup/cc-db.tcl000066400000000000000000000006061522604140100164310ustar00rootroot00000000000000# Copyright (c) 2011 WorkWare Systems http://www.workware.net.au/ # All rights reserved # @synopsis: # # The 'cc-db' module provides a knowledge-base of system idiosyncrasies. # In general, this module can always be included. use cc options {} # openbsd needs sys/types.h to detect some system headers cc-include-needs sys/socket.h sys/types.h cc-include-needs netinet/in.h sys/types.h jimtcl-0.84/autosetup/cc-lib.tcl000066400000000000000000000106241522604140100166130ustar00rootroot00000000000000# Copyright (c) 2011 WorkWare Systems http://www.workware.net.au/ # All rights reserved # @synopsis: # # Provides a library of common tests on top of the 'cc' module. use cc # @cc-check-lfs # # The equivalent of the 'AC_SYS_LARGEFILE' macro. # # defines 'HAVE_LFS' if LFS is available, # and defines '_FILE_OFFSET_BITS=64' if necessary # # Returns 1 if 'LFS' is available or 0 otherwise # proc cc-check-lfs {} { cc-check-includes sys/types.h msg-checking "Checking if -D_FILE_OFFSET_BITS=64 is needed..." set lfs 1 if {[msg-quiet cc-with {-includes sys/types.h} {cc-check-sizeof off_t}] == 8} { msg-result no } elseif {[msg-quiet cc-with {-includes sys/types.h -cflags -D_FILE_OFFSET_BITS=64} {cc-check-sizeof off_t}] == 8} { define _FILE_OFFSET_BITS 64 msg-result yes } else { set lfs 0 msg-result none } define-feature lfs $lfs return $lfs } # @cc-check-endian # # The equivalent of the 'AC_C_BIGENDIAN' macro. # # defines 'HAVE_BIG_ENDIAN' if endian is known to be big, # or 'HAVE_LITTLE_ENDIAN' if endian is known to be little. # # Returns 1 if determined, or 0 if not. # proc cc-check-endian {} { cc-check-includes sys/types.h sys/param.h set rc 0 msg-checking "Checking endian..." cc-with {-includes {sys/types.h sys/param.h}} { if {[cctest -code { #if !defined(BIG_ENDIAN) || !defined(BYTE_ORDER) #error unknown #elif BYTE_ORDER != BIG_ENDIAN #error little #endif }]} { define-feature big-endian msg-result "big" set rc 1 } elseif {[cctest -code { #if !defined(LITTLE_ENDIAN) || !defined(BYTE_ORDER) #error unknown #elif BYTE_ORDER != LITTLE_ENDIAN #error big #endif }]} { define-feature little-endian msg-result "little" set rc 1 } else { msg-result "unknown" } } return $rc } # @cc-check-flags flag ?...? # # Checks whether the given C/C++ compiler flags can be used. Defines feature # names prefixed with 'HAVE_CFLAG' and 'HAVE_CXXFLAG' respectively, and # appends working flags to '-cflags' and 'AS_CFLAGS' or 'AS_CXXFLAGS'. proc cc-check-flags {args} { set result 1 array set opts [cc-get-settings] switch -exact -- $opts(-lang) { c++ { set lang C++ set prefix CXXFLAG } c { set lang C set prefix CFLAG } default { autosetup-error "cc-check-flags failed with unknown language: $opts(-lang)" } } foreach flag $args { msg-checking "Checking whether the $lang compiler accepts $flag..." if {[cctest -cflags $flag]} { msg-result yes define-feature $prefix$flag cc-with [list -cflags [list $flag]] define-append AS_${prefix}S $flag } else { msg-result no set result 0 } } return $result } # @cc-check-standards ver ?...? # # Checks whether the C/C++ compiler accepts one of the specified '-std=$ver' # options, and appends the first working one to '-cflags' and 'AS_CFLAGS' or # 'AS_CXXFLAGS'. proc cc-check-standards {args} { array set opts [cc-get-settings] foreach std $args { if {[cc-check-flags -std=$std]} { return $std } } return "" } # Checks whether $keyword is usable as alignof proc cctest_alignof {keyword} { msg-checking "Checking for $keyword..." if {[cctest -code "int x = ${keyword}(char), y = ${keyword}('x');"]} then { msg-result ok define-feature $keyword } else { msg-result "not found" } } # @cc-check-c11 # # Checks for several C11/C++11 extensions and their alternatives. Currently # checks for '_Static_assert', '_Alignof', '__alignof__', '__alignof'. proc cc-check-c11 {} { msg-checking "Checking for _Static_assert..." if {[cctest -code { _Static_assert(1, "static assertions are available"); }]} then { msg-result ok define-feature _Static_assert } else { msg-result "not found" } cctest_alignof _Alignof cctest_alignof __alignof__ cctest_alignof __alignof } # @cc-check-alloca # # The equivalent of the 'AC_FUNC_ALLOCA' macro. # # Checks for the existence of 'alloca' # defines 'HAVE_ALLOCA' and returns 1 if it exists. proc cc-check-alloca {} { cc-check-some-feature alloca { cctest -includes alloca.h -code { alloca (2 * sizeof (int)); } } } # @cc-signal-return-type # # The equivalent of the 'AC_TYPE_SIGNAL' macro. # # defines 'RETSIGTYPE' to 'int' or 'void'. proc cc-signal-return-type {} { msg-checking "Checking return type of signal handlers..." cc-with {-includes {sys/types.h signal.h}} { if {[cctest -code {return *(signal (0, 0)) (0) == 1;}]} { set type int } else { set type void } define RETSIGTYPE $type msg-result $type } } jimtcl-0.84/autosetup/cc-shared.tcl000066400000000000000000000071671522604140100173230ustar00rootroot00000000000000# Copyright (c) 2010 WorkWare Systems http://www.workware.net.au/ # All rights reserved # @synopsis: # # The 'cc-shared' module provides support for shared libraries and shared objects. # It defines the following variables: # ## SH_CFLAGS Flags to use compiling sources destined for a shared library ## SH_LDFLAGS Flags to use linking (creating) a shared library ## SH_SOPREFIX Prefix to use to set the soname when creating a shared library ## SH_SOFULLPATH Set to 1 if the shared library soname should include the full install path ## SH_SOEXT Extension for shared libs ## SH_SOEXTVER Format for versioned shared libs - %s = version ## SHOBJ_CFLAGS Flags to use compiling sources destined for a shared object ## SHOBJ_LDFLAGS Flags to use linking a shared object, undefined symbols allowed ## SHOBJ_LDFLAGS_R - as above, but all symbols must be resolved ## SH_LINKRPATH Format for setting the rpath when linking an executable, %s = path ## SH_LINKFLAGS Flags to use linking an executable which will load shared objects ## LD_LIBRARY_PATH Environment variable which specifies path to shared libraries ## STRIPLIBFLAGS Arguments to strip a dynamic library options {} # Defaults: gcc on unix define SHOBJ_CFLAGS -fPIC define SHOBJ_LDFLAGS -shared define SH_CFLAGS -fPIC define SH_LDFLAGS -shared define SH_LINKFLAGS -rdynamic define SH_LINKRPATH "-Wl,-rpath -Wl,%s" define SH_SOEXT .so define SH_SOEXTVER .so.%s define SH_SOPREFIX -Wl,-soname, define LD_LIBRARY_PATH LD_LIBRARY_PATH define STRIPLIBFLAGS --strip-unneeded # Note: This is a helpful reference for identifying the toolchain # http://sourceforge.net/apps/mediawiki/predef/index.php?title=Compilers switch -glob -- [get-define host] { *-*-darwin* { define SHOBJ_CFLAGS "-dynamic -fno-common" define SHOBJ_LDFLAGS "-bundle -undefined dynamic_lookup" define SHOBJ_LDFLAGS_R -bundle define SH_CFLAGS -dynamic define SH_LDFLAGS -dynamiclib define SH_LINKFLAGS "" define SH_SOEXT .dylib define SH_SOEXTVER .%s.dylib define SH_SOPREFIX -Wl,-install_name, define SH_SOFULLPATH define LD_LIBRARY_PATH DYLD_LIBRARY_PATH define STRIPLIBFLAGS -x } *-*-ming* - *-*-cygwin - *-*-msys { define SHOBJ_CFLAGS "" define SHOBJ_LDFLAGS -shared define SH_CFLAGS "" define SH_LDFLAGS -shared define SH_LINKRPATH "" define SH_LINKFLAGS "" define SH_SOEXT .dll define SH_SOEXTVER .dll define SH_SOPREFIX "" define LD_LIBRARY_PATH PATH } sparc* { if {[msg-quiet cc-check-decls __SUNPRO_C]} { msg-result "Found sun stdio compiler" # sun stdio compiler # XXX: These haven't been fully tested. define SHOBJ_CFLAGS -KPIC define SHOBJ_LDFLAGS "-G" define SH_CFLAGS -KPIC define SH_LINKFLAGS -Wl,-export-dynamic define SH_SOPREFIX -Wl,-h, } } *-*-solaris* { if {[msg-quiet cc-check-decls __SUNPRO_C]} { msg-result "Found sun stdio compiler" # sun stdio compiler # XXX: These haven't been fully tested. define SHOBJ_CFLAGS -KPIC define SHOBJ_LDFLAGS "-G" define SH_CFLAGS -KPIC define SH_LINKFLAGS -Wl,-export-dynamic define SH_SOPREFIX -Wl,-h, } } *-*-hpux* { define SHOBJ_CFLAGS +z define SHOBJ_LDFLAGS -b define SH_CFLAGS +z define SH_LDFLAGS -b define SH_LINKFLAGS -Wl,+s define SH_LINKRPATH "-Wl,+b -Wl,%s" define SH_SOPREFIX -Wl,+h, define STRIPLIBFLAGS -Wl,-s } *-*-haiku { define SHOBJ_CFLAGS "" define SHOBJ_LDFLAGS -shared define SH_CFLAGS "" define SH_LDFLAGS -shared define SH_LINKFLAGS "" define SH_SOPREFIX "" define LD_LIBRARY_PATH LIBRARY_PATH } } if {![is-defined SHOBJ_LDFLAGS_R]} { define SHOBJ_LDFLAGS_R [get-define SHOBJ_LDFLAGS] } jimtcl-0.84/autosetup/cc.tcl000066400000000000000000000514451522604140100160550ustar00rootroot00000000000000# Copyright (c) 2010 WorkWare Systems http://www.workware.net.au/ # All rights reserved # @synopsis: # # The 'cc' module supports checking various 'features' of the C or C++ # compiler/linker environment. Common commands are 'cc-check-includes', # 'cc-check-types', 'cc-check-functions', 'cc-with' and 'make-config-header' # # The following environment variables are used if set: # ## CC - C compiler ## CXX - C++ compiler ## CPP - C preprocessor ## CCACHE - Set to "none" to disable automatic use of ccache ## CPPFLAGS - Additional C preprocessor compiler flags (C and C++), before CFLAGS, CXXFLAGS ## CFLAGS - Additional C compiler flags ## CXXFLAGS - Additional C++ compiler flags ## LDFLAGS - Additional compiler flags during linking ## LINKFLAGS - ?How is this different from LDFLAGS? ## LIBS - Additional libraries to use (for all tests) ## CROSS - Tool prefix for cross compilation # # The following variables are defined from the corresponding # environment variables if set. # ## CC_FOR_BUILD ## LD use system options {} # Checks for the existence of the given function by linking # proc cctest_function {function} { cctest -link 1 -declare "extern void $function\(void);" -code "$function\();" } # Checks for the existence of the given type by compiling proc cctest_type {type} { cctest -code "$type _x;" } # Checks for the existence of the given type/structure member. # e.g. "struct stat.st_mtime" proc cctest_member {struct_member} { # split at the first dot regexp {^([^.]+)[.](.*)$} $struct_member -> struct member cctest -code "static $struct _s; return sizeof(_s.$member);" } # Checks for the existence of the given define by compiling # proc cctest_define {name} { cctest -code "#ifndef $name\n#error not defined\n#endif" } # Checks for the existence of the given name either as # a macro (#define) or an rvalue (such as an enum) # proc cctest_decl {name} { cctest -code "#ifndef $name\n(void)$name;\n#endif" } # @cc-check-sizeof type ... # # Checks the size of the given types (between 1 and 32, inclusive). # Defines a variable with the size determined, or 'unknown' otherwise. # e.g. for type 'long long', defines 'SIZEOF_LONG_LONG'. # Returns the size of the last type. # proc cc-check-sizeof {args} { foreach type $args { msg-checking "Checking for sizeof $type..." set size unknown # Try the most common sizes first foreach i {4 8 1 2 16 32} { if {[cctest -code "static int _x\[sizeof($type) == $i ? 1 : -1\] = { 1 };"]} { set size $i break } } msg-result $size set define [feature-define-name $type SIZEOF_] define $define $size } # Return the last result get-define $define } # Checks for each feature in $list by using the given script. # # When the script is evaluated, $each is set to the feature # being checked, and $extra is set to any additional cctest args. # # Returns 1 if all features were found, or 0 otherwise. proc cc-check-some-feature {list script} { set ret 1 foreach each $list { if {![check-feature $each $script]} { set ret 0 } } return $ret } # @cc-check-includes includes ... # # Checks that the given include files can be used. proc cc-check-includes {args} { cc-check-some-feature $args { set with {} if {[dict exists $::autosetup(cc-include-deps) $each]} { set deps [dict keys [dict get $::autosetup(cc-include-deps) $each]] msg-quiet cc-check-includes {*}$deps foreach i $deps { if {[have-feature $i]} { lappend with $i } } } if {[llength $with]} { cc-with [list -includes $with] { cctest -includes $each } } else { cctest -includes $each } } } # @cc-include-needs include required ... # # Ensures that when checking for '$include', a check is first # made for each '$required' file, and if found, it is included with '#include'. proc cc-include-needs {file args} { foreach depfile $args { dict set ::autosetup(cc-include-deps) $file $depfile 1 } } # @cc-check-types type ... # # Checks that the types exist. proc cc-check-types {args} { cc-check-some-feature $args { cctest_type $each } } # @cc-check-defines define ... # # Checks that the given preprocessor symbols are defined. proc cc-check-defines {args} { cc-check-some-feature $args { cctest_define $each } } # @cc-check-decls name ... # # Checks that each given name is either a preprocessor symbol or rvalue # such as an enum. Note that the define used is 'HAVE_DECL_xxx' # rather than 'HAVE_xxx'. proc cc-check-decls {args} { set ret 1 foreach name $args { msg-checking "Checking for $name..." set r [cctest_decl $name] define-feature "decl $name" $r if {$r} { msg-result "ok" } else { msg-result "not found" set ret 0 } } return $ret } # @cc-check-functions function ... # # Checks that the given functions exist (can be linked). proc cc-check-functions {args} { cc-check-some-feature $args { cctest_function $each } } # @cc-check-members type.member ... # # Checks that the given type/structure members exist. # A structure member is of the form 'struct stat.st_mtime'. proc cc-check-members {args} { cc-check-some-feature $args { cctest_member $each } } # @cc-check-function-in-lib function libs ?otherlibs? # # Checks that the given function can be found in one of the libs. # # First checks for no library required, then checks each of the libraries # in turn. # # If the function is found, the feature is defined and 'lib_$function' is defined # to '-l$lib' where the function was found, or "" if no library required. # In addition, '-l$lib' is prepended to the 'LIBS' define. # # If additional libraries may be needed for linking, they should be specified # with '$extralibs' as '-lotherlib1 -lotherlib2'. # These libraries are not automatically added to 'LIBS'. # # Returns 1 if found or 0 if not. # proc cc-check-function-in-lib {function libs {otherlibs {}}} { msg-checking "Checking libs for $function..." set found 0 cc-with [list -libs $otherlibs] { if {[cctest_function $function]} { msg-result "none needed" define lib_$function "" incr found } else { foreach lib $libs { cc-with [list -libs -l$lib] { if {[cctest_function $function]} { msg-result -l$lib define lib_$function -l$lib # prepend to LIBS define LIBS "-l$lib [get-define LIBS]" incr found break } } } } } define-feature $function $found if {!$found} { msg-result "no" } return $found } # @cc-check-tools tool ... # # Checks for existence of the given compiler tools, taking # into account any cross compilation prefix. # # For example, when checking for 'ar', first 'AR' is checked on the command # line and then in the environment. If not found, '${host}-ar' or # simply 'ar' is assumed depending upon whether cross compiling. # The path is searched for this executable, and if found 'AR' is defined # to the executable name. # Note that even when cross compiling, the simple 'ar' is used as a fallback, # but a warning is generated. This is necessary for some toolchains. # # It is an error if the executable is not found. # proc cc-check-tools {args} { foreach tool $args { set TOOL [string toupper $tool] set exe [get-env $TOOL [get-define cross]$tool] if {[find-executable $exe]} { define $TOOL $exe continue } if {[find-executable $tool]} { msg-result "Warning: Failed to find $exe, falling back to $tool which may be incorrect" define $TOOL $tool continue } user-error "Failed to find $exe" } } # @cc-check-progs prog ... # # Checks for existence of the given executables on the path. # # For example, when checking for 'grep', the path is searched for # the executable, 'grep', and if found 'GREP' is defined as 'grep'. # # If the executable is not found, the variable is defined as 'false'. # Returns 1 if all programs were found, or 0 otherwise. # proc cc-check-progs {args} { set failed 0 foreach prog $args { set PROG [string toupper $prog] msg-checking "Checking for $prog..." if {![find-executable $prog]} { msg-result no define $PROG false incr failed } else { msg-result ok define $PROG $prog } } expr {!$failed} } # @cc-path-progs prog ... # # Like cc-check-progs, but sets the define to the full path rather # than just the program name. # proc cc-path-progs {args} { set failed 0 foreach prog $args { set PROG [string toupper $prog] msg-checking "Checking for $prog..." set path [find-executable-path $prog] if {$path eq ""} { msg-result no define $PROG false incr failed } else { msg-result $path define $PROG $path } } expr {!$failed} } # Adds the given settings to $::autosetup(ccsettings) and # returns the old settings. # proc cc-add-settings {settings} { if {[llength $settings] % 2} { autosetup-error "settings list is missing a value: $settings" } set prev [cc-get-settings] # workaround a bug in some versions of jimsh by forcing # conversion of $prev to a list llength $prev array set new $prev foreach {name value} $settings { switch -exact -- $name { -cflags - -includes { # These are given as lists lappend new($name) {*}[list-non-empty $value] } -declare { lappend new($name) $value } -libs { # Note that new libraries are added before previous libraries set new($name) [list {*}[list-non-empty $value] {*}$new($name)] } -link - -lang - -nooutput { set new($name) $value } -source - -sourcefile - -code { # XXX: These probably are only valid directly from cctest set new($name) $value } default { autosetup-error "unknown cctest setting: $name" } } } cc-store-settings [array get new] return $prev } proc cc-store-settings {new} { set ::autosetup(ccsettings) $new } proc cc-get-settings {} { return $::autosetup(ccsettings) } # Similar to cc-add-settings, but each given setting # simply replaces the existing value. # # Returns the previous settings proc cc-update-settings {args} { set prev [cc-get-settings] cc-store-settings [dict merge $prev $args] return $prev } # @cc-with settings ?{ script }? # # Sets the given 'cctest' settings and then runs the tests in '$script'. # Note that settings such as '-lang' replace the current setting, while # those such as '-includes' are appended to the existing setting. # # If no script is given, the settings become the default for the remainder # of the 'auto.def' file. # ## cc-with {-lang c++} { ## # This will check with the C++ compiler ## cc-check-types bool ## cc-with {-includes signal.h} { ## # This will check with the C++ compiler, signal.h and any existing includes. ## ... ## } ## # back to just the C++ compiler ## } # # The '-libs' setting is special in that newer values are added *before* earlier ones. # ## cc-with {-libs {-lc -lm}} { ## cc-with {-libs -ldl} { ## cctest -libs -lsocket ... ## # libs will be in this order: -lsocket -ldl -lc -lm ## } ## } # # If you wish to invoke something like cc-check-flags but not have -cflags updated, # use the following idiom: # ## cc-with {} { ## cc-check-flags ... ## } proc cc-with {settings args} { if {[llength $args] == 0} { cc-add-settings $settings } elseif {[llength $args] > 1} { autosetup-error "usage: cc-with settings ?script?" } else { set save [cc-add-settings $settings] set rc [catch {uplevel 1 [lindex $args 0]} result info] cc-store-settings $save if {$rc != 0} { return -code [dict get $info -code] $result } return $result } } # @cctest ?settings? # # Low level C/C++ compiler checker. Compiles and or links a small C program # according to the arguments and returns 1 if OK, or 0 if not. # # Supported settings are: # ## -cflags cflags A list of flags to pass to the compiler ## -includes list A list of includes, e.g. {stdlib.h stdio.h} ## -declare code Code to declare before main() ## -link 1 Don't just compile, link too ## -lang c|c++ Use the C (default) or C++ compiler ## -libs liblist List of libraries to link, e.g. {-ldl -lm} ## -code code Code to compile in the body of main() ## -source code Compile a complete program. Ignore -includes, -declare and -code ## -sourcefile file Shorthand for -source [readfile [get-define srcdir]/$file] ## -nooutput 1 Treat any compiler output (e.g. a warning) as an error # # Unless '-source' or '-sourcefile' is specified, the C program looks like: # ## #include /* same for remaining includes in the list */ ## declare-code /* any code in -declare, verbatim */ ## int main(void) { ## code /* any code in -code, verbatim */ ## return 0; ## } # # And the command line looks like: # ## CC -cflags CFLAGS CPPFLAGS conftest.c -o conftest.o ## CXX -cflags CXXFLAGS CPPFLAGS conftest.cpp -o conftest.o # # And if linking: # ## CC LDFLAGS -cflags CFLAGS conftest.c -o conftest -libs LIBS ## CXX LDFLAGS -cflags CXXFLAGS conftest.c -o conftest -libs LIBS # # Any failures are recorded in 'config.log' # proc cctest {args} { set tmp conftest__ # Easiest way to merge in the settings cc-with $args { array set opts [cc-get-settings] } if {[info exists opts(-sourcefile)]} { set opts(-source) [readfile [get-define srcdir]/$opts(-sourcefile) "#error can't find $opts(-sourcefile)"] } if {[info exists opts(-source)]} { set lines $opts(-source) } else { foreach i $opts(-includes) { if {$opts(-code) ne "" && ![feature-checked $i]} { # Compiling real code with an unchecked header file # Quickly (and silently) check for it now # Remove all -includes from settings before checking set saveopts [cc-update-settings -includes {}] msg-quiet cc-check-includes $i cc-store-settings $saveopts } if {$opts(-code) eq "" || [have-feature $i]} { lappend source "#include <$i>" } } lappend source {*}$opts(-declare) lappend source "int main(void) {" lappend source $opts(-code) lappend source "return 0;" lappend source "}" set lines [join $source \n] } # Build the command line set cmdline {} lappend cmdline {*}[get-define CCACHE] switch -exact -- $opts(-lang) { c++ { set src conftest__.cpp lappend cmdline {*}[get-define CXX] set cflags [get-define CXXFLAGS] } c { set src conftest__.c lappend cmdline {*}[get-define CC] set cflags [get-define CFLAGS] } default { autosetup-error "cctest called with unknown language: $opts(-lang)" } } if {$opts(-link)} { lappend cmdline {*}[get-define LDFLAGS] } else { lappend cflags {*}[get-define CPPFLAGS] set tmp conftest__.o lappend cmdline -c } lappend cmdline {*}$opts(-cflags) {*}[get-define cc-default-debug ""] {*}$cflags lappend cmdline $src -o $tmp if {$opts(-link)} { lappend cmdline {*}$opts(-libs) {*}[get-define LIBS] } # At this point we have the complete command line and the # complete source to be compiled. Get the result from cache if # we can if {[info exists ::cc_cache($cmdline,$lines)]} { msg-checking "(cached) " set ok $::cc_cache($cmdline,$lines) if {$::autosetup(debug)} { configlog "From cache (ok=$ok): [join $cmdline]" configlog "============" configlog $lines configlog "============" } return $ok } writefile $src $lines\n set ok 1 set err [catch {exec-with-stderr {*}$cmdline} result errinfo] if {$err || ($opts(-nooutput) && [string length $result])} { configlog "Failed: [join $cmdline]" configlog $result configlog "============" configlog "The failed code was:" configlog $lines configlog "============" set ok 0 } elseif {$::autosetup(debug)} { configlog "Compiled OK: [join $cmdline]" configlog "============" configlog $lines configlog "============" } file delete $src file delete $tmp # cache it set ::cc_cache($cmdline,$lines) $ok return $ok } # @make-autoconf-h outfile ?auto-patterns=HAVE_*? ?bare-patterns=SIZEOF_*? # # Deprecated - see 'make-config-header' proc make-autoconf-h {file {autopatterns {HAVE_*}} {barepatterns {SIZEOF_* HAVE_DECL_*}}} { user-notice "*** make-autoconf-h is deprecated -- use make-config-header instead" make-config-header $file -auto $autopatterns -bare $barepatterns } # @make-config-header outfile ?-auto patternlist? ?-bare patternlist? ?-none patternlist? ?-str patternlist? ... # # Examines all defined variables which match the given patterns # and writes an include file, '$file', which defines each of these. # Variables which match '-auto' are output as follows: # - defines which have the value '0' are ignored. # - defines which have integer values are defined as the integer value. # - any other value is defined as a string, e.g. '"value"' # Variables which match '-bare' are defined as-is. # Variables which match '-str' are defined as a string, e.g. '"value"' # Variables which match '-none' are omitted. # # Note that order is important. The first pattern that matches is selected. # Default behaviour is: # ## -bare {SIZEOF_* HAVE_DECL_*} -auto HAVE_* -none * # # If the file would be unchanged, it is not written. proc make-config-header {file args} { set guard _[string toupper [regsub -all {[^a-zA-Z0-9]} [file tail $file] _]] file mkdir [file dirname $file] set lines {} lappend lines "#ifndef $guard" lappend lines "#define $guard" # Add some defaults lappend args -bare {SIZEOF_* HAVE_DECL_*} -auto HAVE_* foreach n [lsort [dict keys [all-defines]]] { set value [get-define $n] set type [calc-define-output-type $n $args] switch -exact -- $type { -bare { # Just output the value unchanged } -none { continue } -str { set value \"[string map [list \\ \\\\ \" \\\"] $value]\" } -auto { # Automatically determine the type if {$value eq "0"} { lappend lines "/* #undef $n */" continue } if {![string is integer -strict $value]} { set value \"[string map [list \\ \\\\ \" \\\"] $value]\" } } "" { continue } default { autosetup-error "Unknown type in make-config-header: $type" } } lappend lines "#define $n $value" } lappend lines "#endif" set buf [join $lines \n] write-if-changed $file $buf { msg-result "Created $file" } } proc calc-define-output-type {name spec} { foreach {type patterns} $spec { foreach pattern $patterns { if {[string match $pattern $name]} { return $type } } } return "" } proc cc-init {} { global autosetup # Initialise some values from the environment or commandline or default settings foreach i {LDFLAGS LIBS CPPFLAGS LINKFLAGS CFLAGS} { lassign $i var default define $var [get-env $var $default] } set try {} if {[env-is-set CC]} { # Set by the user, so don't try anything else lappend try [get-env CC ""] } else { # Try some reasonable options lappend try [get-define cross]cc [get-define cross]gcc # If --host and --build are the same, this isn't really # a cross build, so try 'cc' and 'gcc'. In this case we will reset cross later. if {[get-define host] eq [get-define build]} { lappend try cc gcc } } define CC [find-an-executable -required {*}$try] # If we found cc or gcc, set cross to "" if {[get-define CC] in {cc gcc}} { define cross "" } define CPP [get-env CPP "[get-define CC] -E"] # XXX: Could avoid looking for a C++ compiler until requested # If CXX isn't found, it is set to the empty string. if {[env-is-set CXX]} { set try [list -required [get-env CXX ""]] } else { set try [list [get-define cross]c++ [get-define cross]g++] } define CXX [find-an-executable {*}$try] # CXXFLAGS default to CFLAGS if not specified define CXXFLAGS [get-env CXXFLAGS [get-define CFLAGS]] # May need a CC_FOR_BUILD, so look for one define CC_FOR_BUILD [find-an-executable [get-env CC_FOR_BUILD ""] cc gcc false] # These start empty and never come from the user or environment define AS_CFLAGS "" define AS_CPPFLAGS "" define AS_CXXFLAGS "" define CCACHE [find-an-executable [get-env CCACHE ccache]] # If any of these are set in the environment, propagate them to the AUTOREMAKE commandline foreach i {CC CXX CCACHE CPP CFLAGS CXXFLAGS CXXFLAGS LDFLAGS LIBS CROSS CPPFLAGS LINKFLAGS CC_FOR_BUILD LD} { if {[env-is-set $i]} { # Note: If the variable is set on the command line, get-env will return that value # so the command line will continue to override the environment define-append-argv AUTOREMAKE $i=[get-env $i ""] } } # Initial cctest settings cc-store-settings {-cflags {} -includes {} -declare {} -link 0 -lang c -libs {} -code {} -nooutput 0} set autosetup(cc-include-deps) {} msg-result "C compiler...[get-define CCACHE] [get-define CC] [get-define CFLAGS] [get-define CPPFLAGS]" if {[get-define CXX] ne "false"} { msg-result "C++ compiler...[get-define CCACHE] [get-define CXX] [get-define CXXFLAGS] [get-define CPPFLAGS]" } msg-result "Build C compiler...[get-define CC_FOR_BUILD]" # On Darwin, we prefer to use -g0 to avoid creating .dSYM directories # but some compilers may not support it, so test here. switch -glob -- [get-define host] { *-*-darwin* { if {[cctest -cflags {-g0}]} { define cc-default-debug -g0 } } } if {![cc-check-includes stdlib.h]} { user-error "Compiler does not work. See config.log" } } cc-init jimtcl-0.84/autosetup/default.auto000066400000000000000000000010221522604140100172640ustar00rootroot00000000000000# Copyright (c) 2012 WorkWare Systems http://www.workware.net.au/ # All rights reserved # Auto-load module for 'make' build system integration use init autosetup_add_init_type make {Simple "make" build system} { autosetup_check_create auto.def \ {# Initial auto.def created by 'autosetup --init=make' use cc # Add any user options here options { } make-config-header config.h make-template Makefile.in } if {![file exists Makefile.in]} { puts "Note: I don't see Makefile.in. You will probably need to create one." } } jimtcl-0.84/autosetup/jim-misc.auto000066400000000000000000000013001522604140100173470ustar00rootroot00000000000000# @cc-check-inline # # The equivalent of the 'AC_C_INLINE' macro. # # defines 'HAVE_INLINE' if inline is available, # and defines 'inline' to be __inline__ or __inline if necessary # or to "" if not available. # # Returns 1 if 'inline' is available or 0 otherwise # proc cc-check-inline {} { msg-checking "Checking for inline support..." set ok 0 foreach i {inline __inline__ __inline} { if {[cctest -declare "#ifndef __cplusplus\nstatic $i void testfunc__(void);\n#endif"]} { incr ok break } } if {$ok} { if {$i eq "inline"} { msg-result yes } else { msg-result $i define inline $i } } else { define inline "" msg-result no } define-feature inline $ok return $ok } jimtcl-0.84/autosetup/jimsh0.c000066400000000000000000023713351522604140100163270ustar00rootroot00000000000000/* This is single source file, bootstrap version of Jim Tcl. See http://jim.tcl.tk/ */ #define JIM_COMPAT #define JIM_ANSIC #define JIM_REGEXP #define HAVE_NO_AUTOCONF #define JIM_TINY #define _JIMAUTOCONF_H #define TCL_LIBRARY "." #define jim_ext_bootstrap #define jim_ext_aio #define jim_ext_readdir #define jim_ext_regexp #define jim_ext_file #define jim_ext_glob #define jim_ext_exec #define jim_ext_clock #define jim_ext_array #define jim_ext_stdlib #define jim_ext_tclcompat #if defined(_MSC_VER) #define TCL_PLATFORM_OS "windows" #define TCL_PLATFORM_PLATFORM "windows" #define TCL_PLATFORM_PATH_SEPARATOR ";" #define HAVE_MKDIR_ONE_ARG #define HAVE_SYSTEM #elif defined(__MINGW32__) #define TCL_PLATFORM_OS "mingw" #define TCL_PLATFORM_PLATFORM "windows" #define TCL_PLATFORM_PATH_SEPARATOR ";" #define HAVE_MKDIR_ONE_ARG #define HAVE_SYSTEM #define HAVE_SYS_TIME_H #define HAVE_DIRENT_H #define HAVE_UNISTD_H #define HAVE_UMASK #include #ifndef S_IRWXG #define S_IRWXG 0 #endif #ifndef S_IRWXO #define S_IRWXO 0 #endif #else #define TCL_PLATFORM_OS "unknown" #define TCL_PLATFORM_PLATFORM "unix" #define TCL_PLATFORM_PATH_SEPARATOR ":" #ifdef _MINIX #define vfork fork #define _POSIX_SOURCE #else #define _GNU_SOURCE #endif #ifndef __ixemul__ #define HAVE_FORK #else #define HAVE_VFORK #endif #define HAVE_WAITPID #define HAVE_ISATTY #define HAVE_MKSTEMP #define HAVE_LINK #define HAVE_SYS_TIME_H #define HAVE_DIRENT_H #define HAVE_UNISTD_H #define HAVE_UMASK #define HAVE_PIPE #define _FILE_OFFSET_BITS 64 #endif #define JIM_VERSION 84 #ifndef JIM_WIN32COMPAT_H #define JIM_WIN32COMPAT_H #ifdef __cplusplus extern "C" { #endif #if defined(_WIN32) || defined(WIN32) #define HAVE_DLOPEN void *dlopen(const char *path, int mode); int dlclose(void *handle); void *dlsym(void *handle, const char *symbol); char *dlerror(void); #if defined(__MINGW32__) #define JIM_SPRINTF_DOUBLE_NEEDS_FIX #endif #ifdef _MSC_VER #if _MSC_VER >= 1000 #pragma warning(disable:4146) #endif #include #define jim_wide _int64 #ifndef HAVE_LONG_LONG #define HAVE_LONG_LONG #endif #ifndef LLONG_MAX #define LLONG_MAX 9223372036854775807I64 #endif #ifndef LLONG_MIN #define LLONG_MIN (-LLONG_MAX - 1I64) #endif #define JIM_WIDE_MIN LLONG_MIN #define JIM_WIDE_MAX LLONG_MAX #define JIM_WIDE_MODIFIER "I64d" #define strcasecmp _stricmp #define strtoull _strtoui64 #include #include int gettimeofday(struct timeval *tv, void *unused); #define HAVE_OPENDIR struct dirent { char *d_name; }; typedef struct DIR { long handle; struct _finddata_t info; struct dirent result; char *name; } DIR; DIR *opendir(const char *name); int closedir(DIR *dir); struct dirent *readdir(DIR *dir); #endif #endif #ifdef __cplusplus } #endif #endif #ifndef UTF8_UTIL_H #define UTF8_UTIL_H #ifdef __cplusplus extern "C" { #endif #define MAX_UTF8_LEN 4 int utf8_fromunicode(char *p, unsigned uc); #ifndef JIM_UTF8 #include #define utf8_strlen(S, B) ((B) < 0 ? (int)strlen(S) : (B)) #define utf8_tounicode(S, CP) (*(CP) = (unsigned char)*(S), 1) #define utf8_getchars(CP, C) (*(CP) = (C), 1) #define utf8_upper(C) toupper(C) #define utf8_title(C) toupper(C) #define utf8_lower(C) tolower(C) #define utf8_index(C, I) (I) #define utf8_charlen(C) 1 #define utf8_prev_len(S, L) 1 #else #endif #ifdef __cplusplus } #endif #endif #ifndef __JIM__H #define __JIM__H #ifdef __cplusplus extern "C" { #endif #include #include #include #include #ifndef HAVE_NO_AUTOCONF #endif #ifndef jim_wide # ifdef HAVE_LONG_LONG # define jim_wide long long # ifndef LLONG_MAX # define LLONG_MAX 9223372036854775807LL # endif # ifndef LLONG_MIN # define LLONG_MIN (-LLONG_MAX - 1LL) # endif # define JIM_WIDE_MIN LLONG_MIN # define JIM_WIDE_MAX LLONG_MAX # else # define jim_wide long # define JIM_WIDE_MIN LONG_MIN # define JIM_WIDE_MAX LONG_MAX # endif # ifdef HAVE_LONG_LONG # define JIM_WIDE_MODIFIER "lld" # else # define JIM_WIDE_MODIFIER "ld" # define strtoull strtoul # endif #endif #define UCHAR(c) ((unsigned char)(c)) #define JIM_ABI_VERSION 102 #define JIM_OK 0 #define JIM_ERR 1 #define JIM_RETURN 2 #define JIM_BREAK 3 #define JIM_CONTINUE 4 #define JIM_SIGNAL 5 #define JIM_EXIT 6 #define JIM_USAGE -1 #define JIM_EVAL 7 #define JIM_MAX_CALLFRAME_DEPTH 1000 #define JIM_MAX_EVAL_DEPTH 2000 #define JIM_PRIV_FLAG_SHIFT 20 #define JIM_NONE 0 #define JIM_ERRMSG 1 #define JIM_UNSHARED 4 #define JIM_MUSTEXIST 8 #define JIM_NORESULT 16 #define JIM_SUBST_NOVAR 1 #define JIM_SUBST_NOCMD 2 #define JIM_SUBST_NOESC 4 #define JIM_SUBST_FLAG 128 #define JIM_TAINT_STD 1 /* The "normal" type of taint. Allows for multiple * types of taint in the future */ #define JIM_TAINT_ANY ~0 #define JIM_ENUM_ABBREV 2 #define JIM_CASESENS 0 #define JIM_NOCASE 1 #define JIM_OPT_END 2 #define JIM_PATH_LEN 1024 #define JIM_NOTUSED(V) ((void) V) #define JIM_LIBPATH "auto_path" #define JIM_INTERACTIVE "tcl_interactive" typedef struct Jim_Stack { int len; int maxlen; void **vector; void (*freefunc) (void *ptr); } Jim_Stack; typedef struct Jim_HashEntry { void *key; union { void *val; int intval; } u; struct Jim_HashEntry *next; } Jim_HashEntry; typedef struct Jim_HashTableType { unsigned int (*hashFunction)(const void *key); void *(*keyDup)(void *privdata, const void *key); void *(*valDup)(void *privdata, const void *obj); int (*keyCompare)(void *privdata, const void *key1, const void *key2); void (*keyDestructor)(void *privdata, void *key); void (*valDestructor)(void *privdata, void *obj); } Jim_HashTableType; typedef struct Jim_HashTable { Jim_HashEntry **table; const Jim_HashTableType *type; void *privdata; unsigned int size; unsigned int sizemask; unsigned int used; unsigned int collisions; unsigned int uniq; } Jim_HashTable; typedef struct Jim_HashTableIterator { Jim_HashTable *ht; Jim_HashEntry *entry, *nextEntry; int index; } Jim_HashTableIterator; #define JIM_HT_INITIAL_SIZE 16 #define Jim_FreeEntryVal(ht, entry) \ if ((ht)->type->valDestructor) \ (ht)->type->valDestructor((ht)->privdata, (entry)->u.val) #define Jim_SetHashVal(ht, entry, _val_) do { \ if ((ht)->type->valDup) \ (entry)->u.val = (ht)->type->valDup((ht)->privdata, (_val_)); \ else \ (entry)->u.val = (_val_); \ } while(0) #define Jim_SetHashIntVal(ht, entry, _val_) (entry)->u.intval = (_val_) #define Jim_FreeEntryKey(ht, entry) \ if ((ht)->type->keyDestructor) \ (ht)->type->keyDestructor((ht)->privdata, (entry)->key) #define Jim_SetHashKey(ht, entry, _key_) do { \ if ((ht)->type->keyDup) \ (entry)->key = (ht)->type->keyDup((ht)->privdata, (_key_)); \ else \ (entry)->key = (void *)(_key_); \ } while(0) #define Jim_CompareHashKeys(ht, key1, key2) \ (((ht)->type->keyCompare) ? \ (ht)->type->keyCompare((ht)->privdata, (key1), (key2)) : \ (key1) == (key2)) #define Jim_HashKey(ht, key) ((ht)->type->hashFunction(key) + (ht)->uniq) #define Jim_GetHashEntryKey(he) ((he)->key) #define Jim_GetHashEntryVal(he) ((he)->u.val) #define Jim_GetHashEntryIntVal(he) ((he)->u.intval) #define Jim_GetHashTableCollisions(ht) ((ht)->collisions) #define Jim_GetHashTableSize(ht) ((ht)->size) #define Jim_GetHashTableUsed(ht) ((ht)->used) typedef struct Jim_Obj { char *bytes; const struct Jim_ObjType *typePtr; int refCount; int length; unsigned taint; union { jim_wide wideValue; int intValue; double doubleValue; void *ptr; struct { void *ptr1; void *ptr2; } twoPtrValue; struct { void *ptr; int int1; int int2; } ptrIntValue; struct { struct Jim_VarVal *vv; unsigned long callFrameId; int global; } varValue; struct { struct Jim_Obj *nsObj; struct Jim_Cmd *cmdPtr; unsigned long procEpoch; } cmdValue; struct { struct Jim_Obj **ele; int len; int maxLen; } listValue; struct Jim_Dict *dictValue; struct { int maxLength; int charLength; } strValue; struct { unsigned long id; struct Jim_Reference *refPtr; } refValue; struct { struct Jim_Obj *fileNameObj; int lineNumber; } sourceValue; struct { struct Jim_Obj *varNameObjPtr; struct Jim_Obj *indexObjPtr; } dictSubstValue; struct { int line; int argc; } scriptLineValue; } internalRep; struct Jim_Obj *prevObjPtr; struct Jim_Obj *nextObjPtr; } Jim_Obj; #define Jim_IncrRefCount(objPtr) \ ++(objPtr)->refCount #define Jim_DecrRefCount(interp, objPtr) \ if (--(objPtr)->refCount <= 0) Jim_FreeObj(interp, objPtr) #define Jim_IsShared(objPtr) \ ((objPtr)->refCount > 1) #define Jim_FreeNewObj Jim_FreeObj #define Jim_FreeIntRep(i,o) \ if ((o)->typePtr && (o)->typePtr->freeIntRepProc) \ (o)->typePtr->freeIntRepProc(i, o) #define Jim_GetIntRepPtr(o) (o)->internalRep.ptr #define Jim_SetIntRepPtr(o, p) \ (o)->internalRep.ptr = (p) struct Jim_Interp; typedef void (Jim_FreeInternalRepProc)(struct Jim_Interp *interp, struct Jim_Obj *objPtr); typedef void (Jim_DupInternalRepProc)(struct Jim_Interp *interp, struct Jim_Obj *srcPtr, Jim_Obj *dupPtr); typedef void (Jim_UpdateStringProc)(struct Jim_Obj *objPtr); typedef struct Jim_ObjType { const char *name; Jim_FreeInternalRepProc *freeIntRepProc; Jim_DupInternalRepProc *dupIntRepProc; Jim_UpdateStringProc *updateStringProc; int flags; } Jim_ObjType; #define JIM_TYPE_NONE 0 #define JIM_TYPE_REFERENCES 1 typedef struct Jim_CallFrame { unsigned long id; int level; struct Jim_HashTable vars; struct Jim_HashTable *staticVars; struct Jim_CallFrame *parent; Jim_Obj *const *argv; int argc; Jim_Obj *procArgsObjPtr; Jim_Obj *procBodyObjPtr; struct Jim_CallFrame *next; Jim_Obj *nsObj; Jim_Stack *localCommands; struct Jim_Obj *tailcallObj; struct Jim_Cmd *tailcallCmd; } Jim_CallFrame; typedef struct Jim_EvalFrame { Jim_CallFrame *framePtr; int level; int procLevel; struct Jim_Cmd *cmd; struct Jim_EvalFrame *parent; Jim_Obj *const *argv; int argc; Jim_Obj *scriptObj; } Jim_EvalFrame; typedef struct Jim_VarVal { Jim_Obj *objPtr; struct Jim_CallFrame *linkFramePtr; int refCount; } Jim_VarVal; typedef int Jim_CmdProc(struct Jim_Interp *interp, int argc, Jim_Obj *const *argv); typedef void Jim_DelCmdProc(struct Jim_Interp *interp, void *privData); typedef struct Jim_Dict { struct JimDictHashEntry { int offset; unsigned hash; } *ht; unsigned int size; unsigned int sizemask; unsigned int uniq; Jim_Obj **table; int len; int maxLen; unsigned int dummy; } Jim_Dict; #define JIM_CMD_ISPROC 1 #define JIM_CMD_ISCHANNEL 2 #define JIM_CMD_ISALIAS 4 #define JIM_CMD_NOTAINT 0x100 typedef struct Jim_Cmd { int inUse; int flags; struct Jim_Cmd *prevCmd; Jim_Obj *cmdNameObj; union { struct { Jim_CmdProc *cmdProc; Jim_DelCmdProc *delProc; void *privData; const char *usage; const char *help; short minargs; short maxargs; } native; struct { Jim_Obj *argListObjPtr; Jim_Obj *bodyObjPtr; Jim_HashTable *staticVars; int argListLen; int reqArity; int optArity; int argsPos; int upcall; struct Jim_ProcArg { Jim_Obj *nameObjPtr; Jim_Obj *defaultObjPtr; } *arglist; Jim_Obj *nsObj; } proc; } u; } Jim_Cmd; typedef struct Jim_PrngState { unsigned char sbox[256]; unsigned int i, j; } Jim_PrngState; typedef struct Jim_Interp { Jim_Obj *result; Jim_Obj *currentFilenameObj; int break_level; int maxCallFrameDepth; int maxEvalDepth; int evalDepth; int returnCode; int returnLevel; int exitCode; long id; int signal_level; jim_wide sigmask; int (*signal_set_result)(struct Jim_Interp *interp, jim_wide sigmask); Jim_CallFrame *framePtr; Jim_CallFrame *topFramePtr; struct Jim_HashTable commands; unsigned long procEpoch; /* Incremented every time the result of procedures names lookup caching may no longer be valid. */ unsigned long callFrameEpoch; /* Incremented every time a new callframe is created. This id is used for the 'ID' field contained in the Jim_CallFrame structure. */ int local; int quitting; int safeexpr; Jim_Obj *liveList; Jim_Obj *freeList; Jim_EvalFrame topEvalFrame; Jim_EvalFrame *evalFrame; int procLevel; Jim_Obj *nullScriptObj; Jim_Obj *emptyObj; Jim_Obj *trueObj; Jim_Obj *falseObj; unsigned long referenceNextId; struct Jim_HashTable references; unsigned long lastCollectId; /* reference max Id of the last GC execution. It's set to ~0 while the collection is running as sentinel to avoid to recursive calls via the [collect] command inside finalizers. */ jim_wide lastCollectTime; Jim_Obj *stackTrace; Jim_Obj *errorProc; Jim_Obj *unknown; Jim_Obj *defer; Jim_Obj *traceCmdObj; int unknown_called; int hasErrorStackTrace; void *cmdPrivData; /* Used to pass the private data pointer to a command. It is set to what the user specified via Jim_CreateCommand(). */ Jim_Cmd *oldCmdCache; int oldCmdCacheSize; struct Jim_CallFrame *freeFramesList; struct Jim_HashTable assocData; Jim_PrngState *prngState; struct Jim_HashTable packages; Jim_Stack *loadHandles; unsigned taint; } Jim_Interp; #define Jim_SetResultString(i,s,l) Jim_SetResult(i, Jim_NewStringObj(i,s,l)) #define Jim_SetResultInt(i,intval) Jim_SetResult(i, Jim_NewIntObj(i,intval)) #define Jim_SetResultBool(i,b) Jim_SetResultInt(i, b) #define Jim_SetEmptyResult(i) Jim_SetResult(i, (i)->emptyObj) #define Jim_GetResult(i) ((i)->result) #define Jim_CmdPrivData(i) ((i)->cmdPrivData) #define Jim_SetResult(i,o) do { \ Jim_Obj *_resultObjPtr_ = (o); \ Jim_IncrRefCount(_resultObjPtr_); \ Jim_DecrRefCount(i,(i)->result); \ (i)->result = _resultObjPtr_; \ } while(0) #define Jim_GetId(i) (++(i)->id) #define JIM_REFERENCE_TAGLEN 7 /* The tag is fixed-length, because the reference string representation must be fixed length. */ typedef struct Jim_Reference { Jim_Obj *objPtr; Jim_Obj *finalizerCmdNamePtr; char tag[JIM_REFERENCE_TAGLEN+1]; } Jim_Reference; #define Jim_NewEmptyStringObj(i) Jim_NewStringObj(i, "", 0) #define Jim_FreeHashTableIterator(iter) Jim_Free(iter) #define JIM_EXPORT extern JIM_EXPORT void *(*Jim_Allocator)(void *ptr, size_t size); #define Jim_Free(P) Jim_Allocator((P), 0) #define Jim_Realloc(P, S) Jim_Allocator((P), (S)) #define Jim_Alloc(S) Jim_Allocator(NULL, (S)) JIM_EXPORT char * Jim_StrDup (const char *s); JIM_EXPORT char *Jim_StrDupLen(const char *s, int l); JIM_EXPORT char **Jim_GetEnviron(void); JIM_EXPORT void Jim_SetEnviron(char **env); JIM_EXPORT int Jim_MakeTempFile(Jim_Interp *interp, const char *filename_template, int unlink_file); #ifndef CLOCK_REALTIME # define CLOCK_REALTIME 0 #endif #ifndef CLOCK_MONOTONIC # define CLOCK_MONOTONIC 1 #endif #ifndef CLOCK_MONOTONIC_RAW # define CLOCK_MONOTONIC_RAW CLOCK_MONOTONIC #endif JIM_EXPORT jim_wide Jim_GetTimeUsec(unsigned type); JIM_EXPORT int Jim_Eval(Jim_Interp *interp, const char *script); JIM_EXPORT int Jim_EvalSource(Jim_Interp *interp, const char *filename, int lineno, const char *script); #define Jim_Eval_Named(I, S, F, L) Jim_EvalSource((I), (F), (L), (S)) JIM_EXPORT int Jim_EvalGlobal(Jim_Interp *interp, const char *script); JIM_EXPORT int Jim_EvalFile(Jim_Interp *interp, const char *filename); JIM_EXPORT int Jim_EvalFileGlobal(Jim_Interp *interp, const char *filename); JIM_EXPORT int Jim_EvalObj (Jim_Interp *interp, Jim_Obj *scriptObjPtr); JIM_EXPORT int Jim_EvalObjVector (Jim_Interp *interp, int objc, Jim_Obj *const *objv); JIM_EXPORT int Jim_EvalObjList(Jim_Interp *interp, Jim_Obj *listObj); JIM_EXPORT int Jim_EvalObjPrefix(Jim_Interp *interp, Jim_Obj *prefix, int objc, Jim_Obj *const *objv); #define Jim_EvalPrefix(i, p, oc, ov) Jim_EvalObjPrefix((i), Jim_NewStringObj((i), (p), -1), (oc), (ov)) JIM_EXPORT int Jim_EvalNamespace(Jim_Interp *interp, Jim_Obj *scriptObj, Jim_Obj *nsObj); JIM_EXPORT int Jim_SubstObj (Jim_Interp *interp, Jim_Obj *substObjPtr, Jim_Obj **resObjPtrPtr, int flags); JIM_EXPORT Jim_Obj *Jim_GetSourceInfo(Jim_Interp *interp, Jim_Obj *objPtr, int *lineptr); JIM_EXPORT void Jim_SetSourceInfo(Jim_Interp *interp, Jim_Obj *objPtr, Jim_Obj *fileNameObj, int lineNumber); JIM_EXPORT void Jim_StackInit(Jim_Stack *stack, void (*freefunc) (void *ptr)); JIM_EXPORT void Jim_StackFree(Jim_Stack *stack); JIM_EXPORT void Jim_StackPush(Jim_Stack *stack, void *element); JIM_EXPORT void *Jim_StackPop(Jim_Stack *stack); JIM_EXPORT int Jim_InitHashTable (Jim_HashTable *ht, const Jim_HashTableType *type, void *privdata); JIM_EXPORT void Jim_ExpandHashTable (Jim_HashTable *ht, unsigned int size); JIM_EXPORT int Jim_AddHashEntry (Jim_HashTable *ht, const void *key, void *val); JIM_EXPORT int Jim_ReplaceHashEntry (Jim_HashTable *ht, const void *key, void *val); JIM_EXPORT int Jim_DeleteHashEntry (Jim_HashTable *ht, const void *key); JIM_EXPORT int Jim_FreeHashTable (Jim_HashTable *ht); JIM_EXPORT Jim_HashEntry * Jim_FindHashEntry (Jim_HashTable *ht, const void *key); JIM_EXPORT Jim_HashTableIterator *Jim_GetHashTableIterator (Jim_HashTable *ht); JIM_EXPORT Jim_HashEntry * Jim_NextHashEntry (Jim_HashTableIterator *iter); JIM_EXPORT Jim_Obj * Jim_NewObj (Jim_Interp *interp); JIM_EXPORT void Jim_FreeObj (Jim_Interp *interp, Jim_Obj *objPtr); JIM_EXPORT void Jim_InvalidateStringRep (Jim_Obj *objPtr); JIM_EXPORT Jim_Obj * Jim_DuplicateObj (Jim_Interp *interp, Jim_Obj *objPtr); JIM_EXPORT const char * Jim_GetString(Jim_Obj *objPtr, int *lenPtr); JIM_EXPORT const char *Jim_String(Jim_Obj *objPtr); JIM_EXPORT int Jim_Length(Jim_Obj *objPtr); JIM_EXPORT Jim_Obj * Jim_NewStringObj (Jim_Interp *interp, const char *s, int len); JIM_EXPORT Jim_Obj *Jim_NewStringObjUtf8(Jim_Interp *interp, const char *s, int charlen); JIM_EXPORT Jim_Obj * Jim_NewStringObjNoAlloc (Jim_Interp *interp, char *s, int len); JIM_EXPORT void Jim_AppendString (Jim_Interp *interp, Jim_Obj *objPtr, const char *str, int len); JIM_EXPORT void Jim_AppendObj (Jim_Interp *interp, Jim_Obj *objPtr, Jim_Obj *appendObjPtr); JIM_EXPORT void Jim_AppendStrings (Jim_Interp *interp, Jim_Obj *objPtr, ...); JIM_EXPORT int Jim_StringEqObj(Jim_Obj *aObjPtr, Jim_Obj *bObjPtr); JIM_EXPORT int Jim_StringMatchObj (Jim_Interp *interp, Jim_Obj *patternObjPtr, Jim_Obj *objPtr, int nocase); JIM_EXPORT Jim_Obj * Jim_StringRangeObj (Jim_Interp *interp, Jim_Obj *strObjPtr, Jim_Obj *firstObjPtr, Jim_Obj *lastObjPtr); JIM_EXPORT Jim_Obj * Jim_FormatString (Jim_Interp *interp, Jim_Obj *fmtObjPtr, int objc, Jim_Obj *const *objv); JIM_EXPORT Jim_Obj * Jim_ScanString (Jim_Interp *interp, Jim_Obj *strObjPtr, Jim_Obj *fmtObjPtr, int flags); JIM_EXPORT int Jim_CompareStringImmediate (Jim_Interp *interp, Jim_Obj *objPtr, const char *str); JIM_EXPORT int Jim_StringCompareObj(Jim_Interp *interp, Jim_Obj *firstObjPtr, Jim_Obj *secondObjPtr, int nocase); JIM_EXPORT int Jim_Utf8Length(Jim_Interp *interp, Jim_Obj *objPtr); JIM_EXPORT Jim_Obj * Jim_NewReference (Jim_Interp *interp, Jim_Obj *objPtr, Jim_Obj *tagPtr, Jim_Obj *cmdNamePtr); JIM_EXPORT Jim_Reference * Jim_GetReference (Jim_Interp *interp, Jim_Obj *objPtr); JIM_EXPORT int Jim_SetFinalizer (Jim_Interp *interp, Jim_Obj *objPtr, Jim_Obj *cmdNamePtr); JIM_EXPORT int Jim_GetFinalizer (Jim_Interp *interp, Jim_Obj *objPtr, Jim_Obj **cmdNamePtrPtr); JIM_EXPORT Jim_Interp * Jim_CreateInterp (void); JIM_EXPORT void Jim_FreeInterp (Jim_Interp *i); JIM_EXPORT int Jim_GetExitCode (Jim_Interp *interp); JIM_EXPORT const char *Jim_ReturnCode(int code); JIM_EXPORT void Jim_SetResultFormatted(Jim_Interp *interp, const char *format, ...); JIM_EXPORT Jim_Cmd *Jim_RegisterCommand(Jim_Interp *interp, Jim_Obj *cmdNameObj, Jim_CmdProc *cmdProc, Jim_DelCmdProc *delProc, const char *usage, const char *help, short minargs, short maxargs, int flags, void *privData); JIM_EXPORT int Jim_CreateCommand (Jim_Interp *interp, const char *cmdName, Jim_CmdProc *cmdProc, void *privData, Jim_DelCmdProc *delProc); #define Jim_RegisterSimpleCmd(interp, name, usage, minargs, maxargs, cmdproc) \ Jim_RegisterCommand(interp, Jim_NewStringObj(interp, name, -1), cmdproc, NULL, usage, NULL, minargs, maxargs, 0, NULL) #define Jim_RegisterCmd(interp, name, usage, minargs, maxargs, cmdproc, delproc, privdata, flags) \ Jim_RegisterCommand(interp, Jim_NewStringObj(interp, name, -1), cmdproc, delproc, usage, NULL, minargs, maxargs, flags, privdata) JIM_EXPORT void Jim_RegisterCoreCommands (Jim_Interp *interp); JIM_EXPORT int Jim_CreateCommand (Jim_Interp *interp, const char *cmdName, Jim_CmdProc *cmdProc, void *privData, Jim_DelCmdProc *delProc); JIM_EXPORT int Jim_DeleteCommand (Jim_Interp *interp, Jim_Obj *cmdNameObj); JIM_EXPORT int Jim_RenameCommand (Jim_Interp *interp, Jim_Obj *oldNameObj, Jim_Obj *newNameObj); JIM_EXPORT Jim_Cmd * Jim_GetCommand (Jim_Interp *interp, Jim_Obj *objPtr, int flags); JIM_EXPORT int Jim_SetVariable (Jim_Interp *interp, Jim_Obj *nameObjPtr, Jim_Obj *valObjPtr); JIM_EXPORT int Jim_SetVariableStr (Jim_Interp *interp, const char *name, Jim_Obj *objPtr); JIM_EXPORT int Jim_SetGlobalVariableStr (Jim_Interp *interp, const char *name, Jim_Obj *objPtr); JIM_EXPORT int Jim_SetVariableStrWithStr (Jim_Interp *interp, const char *name, const char *val); JIM_EXPORT int Jim_SetVariableLink (Jim_Interp *interp, Jim_Obj *nameObjPtr, Jim_Obj *targetNameObjPtr, Jim_CallFrame *targetCallFrame); JIM_EXPORT Jim_Obj * Jim_MakeGlobalNamespaceName(Jim_Interp *interp, Jim_Obj *nameObjPtr); JIM_EXPORT Jim_Obj * Jim_GetVariable (Jim_Interp *interp, Jim_Obj *nameObjPtr, int flags); JIM_EXPORT Jim_Obj * Jim_GetGlobalVariable (Jim_Interp *interp, Jim_Obj *nameObjPtr, int flags); JIM_EXPORT Jim_Obj * Jim_GetVariableStr (Jim_Interp *interp, const char *name, int flags); JIM_EXPORT Jim_Obj * Jim_GetGlobalVariableStr (Jim_Interp *interp, const char *name, int flags); JIM_EXPORT int Jim_UnsetVariable (Jim_Interp *interp, Jim_Obj *nameObjPtr, int flags); JIM_EXPORT Jim_CallFrame *Jim_GetCallFrameByLevel(Jim_Interp *interp, Jim_Obj *levelObjPtr); JIM_EXPORT int Jim_Collect (Jim_Interp *interp); JIM_EXPORT void Jim_CollectIfNeeded (Jim_Interp *interp); JIM_EXPORT int Jim_GetIndex (Jim_Interp *interp, Jim_Obj *objPtr, int *indexPtr); JIM_EXPORT Jim_Obj * Jim_NewListObj (Jim_Interp *interp, Jim_Obj *const *elements, int len); JIM_EXPORT void Jim_ListInsertElements (Jim_Interp *interp, Jim_Obj *listPtr, int listindex, int objc, Jim_Obj *const *objVec); JIM_EXPORT void Jim_ListAppendElement (Jim_Interp *interp, Jim_Obj *listPtr, Jim_Obj *objPtr); JIM_EXPORT void Jim_ListAppendList (Jim_Interp *interp, Jim_Obj *listPtr, Jim_Obj *appendListPtr); JIM_EXPORT int Jim_ListLength (Jim_Interp *interp, Jim_Obj *objPtr); JIM_EXPORT int Jim_ListIndex (Jim_Interp *interp, Jim_Obj *listPrt, int listindex, Jim_Obj **objPtrPtr, int seterr); JIM_EXPORT Jim_Obj *Jim_ListGetIndex(Jim_Interp *interp, Jim_Obj *listPtr, int idx); JIM_EXPORT int Jim_SetListIndex (Jim_Interp *interp, Jim_Obj *varNamePtr, Jim_Obj *const *indexv, int indexc, Jim_Obj *newObjPtr); JIM_EXPORT Jim_Obj * Jim_ConcatObj (Jim_Interp *interp, int objc, Jim_Obj *const *objv); JIM_EXPORT Jim_Obj *Jim_ListJoin(Jim_Interp *interp, Jim_Obj *listObjPtr, const char *joinStr, int joinStrLen); JIM_EXPORT Jim_Obj * Jim_NewDictObj (Jim_Interp *interp, Jim_Obj *const *elements, int len); JIM_EXPORT int Jim_DictKey (Jim_Interp *interp, Jim_Obj *dictPtr, Jim_Obj *keyPtr, Jim_Obj **objPtrPtr, int flags); JIM_EXPORT int Jim_DictKeysVector (Jim_Interp *interp, Jim_Obj *dictPtr, Jim_Obj *const *keyv, int keyc, Jim_Obj **objPtrPtr, int flags); JIM_EXPORT int Jim_SetDictKeysVector (Jim_Interp *interp, Jim_Obj *varNamePtr, Jim_Obj *const *keyv, int keyc, Jim_Obj *newObjPtr, int flags); JIM_EXPORT Jim_Obj **Jim_DictPairs(Jim_Interp *interp, Jim_Obj *dictPtr, int *len); JIM_EXPORT int Jim_DictAddElement(Jim_Interp *interp, Jim_Obj *objPtr, Jim_Obj *keyObjPtr, Jim_Obj *valueObjPtr); #define JIM_DICTMATCH_KEYS 0x0001 #define JIM_DICTMATCH_VALUES 0x002 JIM_EXPORT int Jim_DictMatchTypes(Jim_Interp *interp, Jim_Obj *objPtr, Jim_Obj *patternObj, int match_type, int return_types); JIM_EXPORT int Jim_DictSize(Jim_Interp *interp, Jim_Obj *objPtr); JIM_EXPORT int Jim_DictInfo(Jim_Interp *interp, Jim_Obj *objPtr); JIM_EXPORT Jim_Obj *Jim_DictMerge(Jim_Interp *interp, int objc, Jim_Obj *const *objv); JIM_EXPORT int Jim_GetReturnCode (Jim_Interp *interp, Jim_Obj *objPtr, int *intPtr); JIM_EXPORT int Jim_EvalExpression (Jim_Interp *interp, Jim_Obj *exprObjPtr); JIM_EXPORT int Jim_GetBoolFromExpr (Jim_Interp *interp, Jim_Obj *exprObjPtr, int *boolPtr); JIM_EXPORT int Jim_GetBoolean(Jim_Interp *interp, Jim_Obj *objPtr, int *booleanPtr); JIM_EXPORT int Jim_GetWide (Jim_Interp *interp, Jim_Obj *objPtr, jim_wide *widePtr); JIM_EXPORT int Jim_GetWideExpr(Jim_Interp *interp, Jim_Obj *objPtr, jim_wide *widePtr); JIM_EXPORT int Jim_GetLong (Jim_Interp *interp, Jim_Obj *objPtr, long *longPtr); #define Jim_NewWideObj Jim_NewIntObj JIM_EXPORT Jim_Obj * Jim_NewIntObj (Jim_Interp *interp, jim_wide wideValue); JIM_EXPORT int Jim_GetDouble(Jim_Interp *interp, Jim_Obj *objPtr, double *doublePtr); JIM_EXPORT void Jim_SetDouble(Jim_Interp *interp, Jim_Obj *objPtr, double doubleValue); JIM_EXPORT Jim_Obj * Jim_NewDoubleObj(Jim_Interp *interp, double doubleValue); JIM_EXPORT void Jim_WrongNumArgs (Jim_Interp *interp, int argc, Jim_Obj *const *argv, const char *msg); JIM_EXPORT int Jim_GetEnum (Jim_Interp *interp, Jim_Obj *objPtr, const char * const *tablePtr, int *indexPtr, const char *name, int flags); JIM_EXPORT int Jim_CheckShowCommands(Jim_Interp *interp, Jim_Obj *objPtr, const char *const *tablePtr); JIM_EXPORT int Jim_ScriptIsComplete(Jim_Interp *interp, Jim_Obj *scriptObj, char *stateCharPtr); JIM_EXPORT int Jim_FindByName(const char *name, const char * const array[], size_t len); typedef void (Jim_InterpDeleteProc)(Jim_Interp *interp, void *data); JIM_EXPORT void * Jim_GetAssocData(Jim_Interp *interp, const char *key); JIM_EXPORT int Jim_SetAssocData(Jim_Interp *interp, const char *key, Jim_InterpDeleteProc *delProc, void *data); JIM_EXPORT int Jim_DeleteAssocData(Jim_Interp *interp, const char *key); JIM_EXPORT int Jim_CheckAbiVersion(Jim_Interp *interp, int abi_version); JIM_EXPORT int Jim_PackageProvide (Jim_Interp *interp, const char *name, const char *ver, int flags); JIM_EXPORT int Jim_PackageRequire (Jim_Interp *interp, const char *name, int flags); #define Jim_PackageProvideCheck(INTERP, NAME) \ if (Jim_CheckAbiVersion(INTERP, JIM_ABI_VERSION) == JIM_ERR || Jim_PackageProvide(INTERP, NAME, "1.0", JIM_ERRMSG)) \ return JIM_ERR JIM_EXPORT void Jim_MakeErrorMessage (Jim_Interp *interp); JIM_EXPORT int Jim_InteractivePrompt (Jim_Interp *interp); JIM_EXPORT void Jim_HistoryLoad(const char *filename); JIM_EXPORT void Jim_HistorySave(const char *filename); JIM_EXPORT char *Jim_HistoryGetline(Jim_Interp *interp, const char *prompt); JIM_EXPORT void Jim_HistorySetCompletion(Jim_Interp *interp, Jim_Obj *completionCommandObj); JIM_EXPORT void Jim_HistorySetHints(Jim_Interp *interp, Jim_Obj *hintsCommandObj); JIM_EXPORT void Jim_HistoryAdd(const char *line); JIM_EXPORT void Jim_HistoryShow(void); JIM_EXPORT void Jim_HistorySetMaxLen(int length); JIM_EXPORT int Jim_HistoryGetMaxLen(void); JIM_EXPORT int Jim_InitStaticExtensions(Jim_Interp *interp); JIM_EXPORT int Jim_StringToWide(const char *str, jim_wide *widePtr, int base); JIM_EXPORT int Jim_IsBigEndian(void); #define Jim_CheckSignal(i) ((i)->signal_level && (i)->sigmask) JIM_EXPORT void Jim_SignalSetIgnored(jim_wide mask); JIM_EXPORT int Jim_LoadLibrary(Jim_Interp *interp, const char *pathName); JIM_EXPORT void Jim_FreeLoadHandles(Jim_Interp *interp); JIM_EXPORT int Jim_AioFilehandle(Jim_Interp *interp, Jim_Obj *command); JIM_EXPORT int Jim_IsDict(Jim_Obj *objPtr); JIM_EXPORT int Jim_IsList(Jim_Obj *objPtr); JIM_EXPORT void Jim_SetTaintError(Jim_Interp *interp, int cmdargs, Jim_Obj *const *argv); JIM_EXPORT int Jim_CalcTaint(int argc, Jim_Obj *const *argv); #ifdef JIM_TAINT #define Jim_CheckTaint(i, t) ((i)->taint & (t)) #define Jim_TaintObj(o,t) (o)->taint |= (t) #define Jim_UntaintObj(o) (o)->taint = 0 #define Jim_GetObjTaint(o) (o)->taint #else #define Jim_CheckTaint(i, t) 0 #define Jim_TaintObj(o,t) #define Jim_UntaintObj(o) #define Jim_GetObjTaint(o) 0 #endif #ifdef __cplusplus } #endif #endif #ifndef JIM_SUBCMD_H #define JIM_SUBCMD_H #ifdef __cplusplus extern "C" { #endif #define JIM_MODFLAG_HIDDEN 0x0001 #define JIM_MODFLAG_FULLARGV 0x0002 #define JIM_MODFLAG_NOTAINT 0x0004 #define JIM_SUBCMD_BADARGS -1 #define JIM_SUBCMD_TAINTED -2 typedef int jim_subcmd_function(Jim_Interp *interp, int argc, Jim_Obj *const *argv); typedef struct { const char *cmd; const char *args; jim_subcmd_function *function; short minargs; short maxargs; unsigned short flags; } jim_subcmd_type; #define JIM_DEF_SUBCMD(name, args, minargs, maxargs) { name, args, NULL, minargs, maxargs } #define JIM_DEF_SUBCMD_HIDDEN(name, args, minargs, maxargs) { name, args, NULL, minargs, maxargs, JIM_MODFLAG_HIDDEN } const jim_subcmd_type * Jim_ParseSubCmd(Jim_Interp *interp, const jim_subcmd_type *command_table, int argc, Jim_Obj *const *argv); int Jim_SubCmdProc(Jim_Interp *interp, int argc, Jim_Obj *const *argv); int Jim_CallSubCmd(Jim_Interp *interp, const jim_subcmd_type *ct, int argc, Jim_Obj *const *argv); void Jim_SubCmdArgError(Jim_Interp *interp, const jim_subcmd_type *ct, Jim_Obj *subcmd); Jim_Cmd *Jim_RegisterSubCmd(Jim_Interp *interp, const char *cmdname, const jim_subcmd_type *command_table, Jim_DelCmdProc *delProc); #ifdef __cplusplus } #endif #endif #ifndef JIMREGEXP_H #define JIMREGEXP_H #ifdef __cplusplus extern "C" { #endif #include typedef struct { int rm_so; int rm_eo; } regmatch_t; typedef struct regexp { int re_nsub; int cflags; int err; int regstart; int reganch; int regmust; int regmlen; int *program; char *exp; const char *regparse; int p; int proglen; int eflags; const char *start; const char *reginput; const char *regbol; regmatch_t *pmatch; int nmatch; } regexp; typedef regexp regex_t; #define REG_EXTENDED 0 #define REG_ICASE 2 #define REG_NEWLINE_ANCHOR 4 #define REG_NEWLINE_STOP 8 #define REG_NEWLINE (REG_NEWLINE_ANCHOR | REG_NEWLINE_STOP) #define REG_NOTBOL 16 #define REG_EXPANDED 32 enum { REG_NOERROR, REG_NOMATCH, REG_BADPAT, REG_ERR_NULL_ARGUMENT, REG_ERR_UNKNOWN, REG_ERR_TOO_BIG, REG_ERR_NOMEM, REG_ERR_TOO_MANY_PAREN, REG_ERR_UNMATCHED_PAREN, REG_ERR_UNMATCHED_BRACES, REG_ERR_BAD_COUNT, REG_ERR_JUNK_ON_END, REG_ERR_OPERAND_COULD_BE_EMPTY, REG_ERR_NESTED_COUNT, REG_ERR_INTERNAL, REG_ERR_COUNT_FOLLOWS_NOTHING, REG_ERR_INVALID_ESCAPE, REG_ERR_CORRUPTED, REG_ERR_NULL_CHAR, REG_ERR_UNMATCHED_BRACKET, REG_ERR_NUM }; int jim_regcomp(regex_t *preg, const char *regex, int cflags); int jim_regexec(regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags); size_t jim_regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size); void jim_regfree(regex_t *preg); #ifdef __cplusplus } #endif #endif #ifndef JIM_SIGNAL_H #define JIM_SIGNAL_H #ifdef __cplusplus extern "C" { #endif const char *Jim_SignalId(int sig); #ifdef __cplusplus } #endif #endif #ifndef JIMIOCOMPAT_H #define JIMIOCOMPAT_H #include #include #include void Jim_SetResultErrno(Jim_Interp *interp, const char *msg); int Jim_OpenForWrite(const char *filename, int append); int Jim_OpenForRead(const char *filename); #if defined(__MINGW32__) || defined(_WIN32) #ifndef STRICT #define STRICT #endif #define WIN32_LEAN_AND_MEAN #include #include #include #include typedef HANDLE phandle_t; #define JIM_BAD_PHANDLE INVALID_HANDLE_VALUE #define WIFEXITED(STATUS) (((STATUS) & 0xff00) == 0) #define WEXITSTATUS(STATUS) ((STATUS) & 0x00ff) #define WIFSIGNALED(STATUS) (((STATUS) & 0xff00) != 0) #define WTERMSIG(STATUS) (((STATUS) >> 8) & 0xff) #define WNOHANG 1 int Jim_Errno(void); long waitpid(phandle_t phandle, int *status, int nohang); phandle_t JimWaitPid(long processid, int *status, int nohang); long JimProcessPid(phandle_t phandle); #define HAVE_PIPE #define pipe(P) _pipe((P), 0, O_NOINHERIT) typedef struct __stat64 jim_stat_t; #define Jim_Stat _stat64 #define Jim_FileStat _fstat64 #define Jim_Lseek _lseeki64 #define O_TEXT _O_TEXT #define O_BINARY _O_BINARY #define Jim_SetMode _setmode #ifndef STDIN_FILENO #define STDIN_FILENO 0 #endif #else #if defined(HAVE_STAT64) typedef struct stat64 jim_stat_t; #define Jim_Stat stat64 #if defined(HAVE_FSTAT64) #define Jim_FileStat fstat64 #endif #if defined(HAVE_LSTAT64) #define Jim_LinkStat lstat64 #endif #else typedef struct stat jim_stat_t; #define Jim_Stat stat #if defined(HAVE_FSTAT) #define Jim_FileStat fstat #endif #if defined(HAVE_LSTAT) #define Jim_LinkStat lstat #endif #endif #if defined(HAVE_LSEEK64) #define Jim_Lseek lseek64 #else #define Jim_Lseek lseek #endif #if defined(HAVE_UNISTD_H) #include #include #include typedef int phandle_t; #define Jim_Errno() errno #define JIM_BAD_PHANDLE -1 #define JimProcessPid(PIDTYPE) (PIDTYPE) #define JimWaitPid waitpid #ifndef HAVE_EXECVPE #define execvpe(ARG0, ARGV, ENV) execvp(ARG0, ARGV) #endif #endif #ifndef O_TEXT #define O_TEXT 0 #endif #endif # ifndef MAXPATHLEN # ifdef PATH_MAX # define MAXPATHLEN PATH_MAX # else # define MAXPATHLEN JIM_PATH_LEN # endif # endif int Jim_FileStoreStatData(Jim_Interp *interp, Jim_Obj *varName, const jim_stat_t *sb); #endif int Jim_bootstrapInit(Jim_Interp *interp) { if (Jim_PackageProvide(interp, "bootstrap", "1.0", JIM_ERRMSG)) return JIM_ERR; return Jim_EvalSource(interp, "bootstrap.tcl", 1, "\n" "proc package {cmd args} {\n" " if {$cmd eq \"require\"} {\n" " foreach path $::auto_path {\n" " lassign $args pkg\n" " set pkgpath $path/$pkg.tcl\n" " if {$path eq \".\"} {\n" " set pkgpath $pkg.tcl\n" " }\n" " if {[file exists $pkgpath]} {\n" " tailcall uplevel #0 [list source $pkgpath]\n" " }\n" " }\n" " }\n" "}\n" "set tcl_platform(bootstrap) 1\n" ); } int Jim_initjimshInit(Jim_Interp *interp) { if (Jim_PackageProvide(interp, "initjimsh", "1.0", JIM_ERRMSG)) return JIM_ERR; return Jim_EvalSource(interp, "initjimsh.tcl", 1, "\n" "\n" "\n" "proc _jimsh_init {} {\n" " rename _jimsh_init {}\n" " global jim::exe jim::argv0 tcl_interactive auto_path tcl_platform\n" "\n" "\n" " if {[exists jim::argv0]} {\n" " if {[string match \"*/*\" $jim::argv0]} {\n" " set jim::exe [file join [pwd] $jim::argv0]\n" " } else {\n" " set jim::argv0 [file tail $jim::argv0]\n" " set path [split [env PATH \"\"] $tcl_platform(pathSeparator)]\n" " if {$tcl_platform(platform) eq \"windows\"} {\n" "\n" " set path [lmap p [list \"\" {*}$path] { string map {\\\\ /} $p }]\n" " }\n" " foreach p $path {\n" " set exec [file join [pwd] $p $jim::argv0]\n" " if {[file executable $exec]} {\n" " set jim::exe $exec\n" " break\n" " }\n" " }\n" " }\n" " }\n" "\n" "\n" " lappend p {*}[split [env JIMLIB {}] $tcl_platform(pathSeparator)]\n" " if {[exists jim::exe]} {\n" " lappend p [file dirname $jim::exe]\n" " }\n" " lappend p {*}$auto_path\n" " set auto_path $p\n" "\n" " if {$tcl_interactive && [env HOME {}] ne \"\"} {\n" " foreach src {.jimrc jimrc.tcl} {\n" " if {[file exists [env HOME]/$src]} {\n" " uplevel #0 source [env HOME]/$src\n" " break\n" " }\n" " }\n" " }\n" " return \"\"\n" "}\n" "\n" "if {$tcl_platform(platform) eq \"windows\"} {\n" " set jim::argv0 [string map {\\\\ /} $jim::argv0]\n" "}\n" "\n" "\n" "set tcl::autocomplete_commands {array clock debug dict file history info namespace package signal socket string tcl::prefix zlib}\n" "\n" "\n" "\n" "proc tcl::autocomplete {prefix} {\n" " if {[set space [string first \" \" $prefix]] != -1} {\n" " set cmd [string range $prefix 0 $space-1]\n" " if {$cmd in $::tcl::autocomplete_commands || [info channel $cmd] ne \"\"} {\n" " set arg [string range $prefix $space+1 end]\n" "\n" " return [lmap p [$cmd -commands] {\n" " if {![string match \"${arg}*\" $p]} continue\n" " function \"$cmd $p\"\n" " }]\n" " }\n" " }\n" "\n" " if {[string match \"source *\" $prefix]} {\n" " set path [string range $prefix 7 end]\n" " return [lmap p [glob -nocomplain \"${path}*\"] {\n" " function \"source $p\"\n" " }]\n" " }\n" "\n" " return [lmap p [lsort [info commands $prefix*]] {\n" " if {[string match \"* *\" $p]} {\n" " continue\n" " }\n" " function $p\n" " }]\n" "}\n" "\n" "\n" "set tcl::stdhint_commands {array clock debug dict file history info namespace package signal string zlib}\n" "\n" "set tcl::stdhint_cols {\n" " none {0}\n" " black {30}\n" " red {31}\n" " green {32}\n" " yellow {33}\n" " blue {34}\n" " purple {35}\n" " cyan {36}\n" " normal {37}\n" " grey {30 1}\n" " gray {30 1}\n" " lred {31 1}\n" " lgreen {32 1}\n" " lyellow {33 1}\n" " lblue {34 1}\n" " lpurple {35 1}\n" " lcyan {36 1}\n" " white {37 1}\n" "}\n" "\n" "\n" "set tcl::stdhint_col $tcl::stdhint_cols(lcyan)\n" "\n" "\n" "proc tcl::stdhint {string} {\n" " set result \"\"\n" " lassign $string cmd arg\n" " if {[llength $string] >= 2} {\n" " if {$cmd in $::tcl::stdhint_commands || [info channel $cmd] ne \"\"} {\n" " catch {\n" " set help [$cmd -help $arg]\n" " if {[string match \"Usage: $cmd *\" $help]} {\n" " set n [llength $string]\n" " set subcmd [lindex $help $n]\n" " incr n\n" " set hint [join [lrange $help $n end]]\n" " set prefix \"\"\n" " if {![string match \"* \" $string]} {\n" " if {$n == 3 && $subcmd ne $arg} {\n" "\n" " set prefix \"[string range $subcmd [string length $arg] end] \"\n" " } else {\n" " set prefix \" \"\n" " }\n" " }\n" " set result [list $prefix$hint {*}$::tcl::stdhint_col]\n" " }\n" " }\n" " }\n" " } else {\n" " catch {\n" " if {[exists -alias $cmd] && [llength [info alias $cmd]] == 1} {\n" "\n" "\n" "\n" " set help [info usage [info alias $cmd]]\n" " } else {\n" " set help [info usage $cmd]\n" " }\n" " set hint [join [lrange $help 1 end]]\n" " set prefix \" \"\n" " if {[string match \"* \" $string]} {\n" " set prefix \"\"\n" " }\n" " set result [list $prefix$hint {*}$::tcl::stdhint_col]\n" " }\n" " }\n" " return $result\n" "}\n" "\n" "_jimsh_init\n" ); } int Jim_globInit(Jim_Interp *interp) { if (Jim_PackageProvide(interp, "glob", "1.0", JIM_ERRMSG)) return JIM_ERR; return Jim_EvalSource(interp, "glob.tcl", 1, "\n" "\n" "\n" "\n" "\n" "\n" "\n" "package require readdir\n" "\n" "\n" "proc glob.globdir {dir pattern} {\n" " if {[file exists $dir/$pattern]} {\n" "\n" " return [list $pattern]\n" " }\n" "\n" " set result {}\n" " set files [readdir $dir]\n" " lappend files . ..\n" "\n" " foreach name $files {\n" " if {[string match $pattern $name]} {\n" "\n" " if {[string index $name 0] eq \".\" && [string index $pattern 0] ne \".\"} {\n" " continue\n" " }\n" " lappend result $name\n" " }\n" " }\n" "\n" " return $result\n" "}\n" "\n" "\n" "\n" "\n" "proc glob.explode {pattern} {\n" " set oldexp {}\n" " set newexp {\"\"}\n" "\n" " while 1 {\n" " set oldexp $newexp\n" " set newexp {}\n" " set ob [string first \\{ $pattern]\n" " set cb [string first \\} $pattern]\n" "\n" " if {$ob < $cb && $ob != -1} {\n" " set mid [string range $pattern 0 $ob-1]\n" " set subexp [lassign [glob.explode [string range $pattern $ob+1 end]] pattern]\n" " if {$pattern eq \"\"} {\n" " error \"unmatched open brace in glob pattern\"\n" " }\n" " set pattern [string range $pattern 1 end]\n" "\n" " foreach subs $subexp {\n" " foreach sub [split $subs ,] {\n" " foreach old $oldexp {\n" " lappend newexp $old$mid$sub\n" " }\n" " }\n" " }\n" " } elseif {$cb != -1} {\n" " set suf [string range $pattern 0 $cb-1]\n" " set rest [string range $pattern $cb end]\n" " break\n" " } else {\n" " set suf $pattern\n" " set rest \"\"\n" " break\n" " }\n" " }\n" "\n" " foreach old $oldexp {\n" " lappend newexp $old$suf\n" " }\n" " list $rest {*}$newexp\n" "}\n" "\n" "\n" "\n" "proc glob.glob {base pattern} {\n" " set dir [file dirname $pattern]\n" " if {$pattern eq $dir || $pattern eq \"\"} {\n" " return [list [file join $base $dir] $pattern]\n" " } elseif {$pattern eq [file tail $pattern]} {\n" " set dir \"\"\n" " }\n" "\n" "\n" " set dirlist [glob.glob $base $dir]\n" " set pattern [file tail $pattern]\n" "\n" "\n" " set result {}\n" " foreach {realdir dir} $dirlist {\n" " if {![file isdir $realdir]} {\n" " continue\n" " }\n" " if {[string index $dir end] ne \"/\" && $dir ne \"\"} {\n" " append dir /\n" " }\n" " foreach name [glob.globdir $realdir $pattern] {\n" " lappend result [file join $realdir $name] $dir$name\n" " }\n" " }\n" " return $result\n" "}\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "proc glob {args} {\n" " set nocomplain 0\n" " set base \"\"\n" " set tails 0\n" "\n" " set n 0\n" " foreach arg $args {\n" " if {[info exists param]} {\n" " set $param $arg\n" " unset param\n" " incr n\n" " continue\n" " }\n" " switch -glob -- $arg {\n" " -d* {\n" " set switch $arg\n" " set param base\n" " }\n" " -n* {\n" " set nocomplain 1\n" " }\n" " -ta* {\n" " set tails 1\n" " }\n" " -- {\n" " incr n\n" " break\n" " }\n" " -* {\n" " return -code error \"bad option \\\"$arg\\\": must be -directory, -nocomplain, -tails, or --\"\n" " }\n" " * {\n" " break\n" " }\n" " }\n" " incr n\n" " }\n" " if {[info exists param]} {\n" " return -code error \"missing argument to \\\"$switch\\\"\"\n" " }\n" " if {[llength $args] <= $n} {\n" " return -code error \"wrong # args: should be \\\"glob ?options? pattern ?pattern ...?\\\"\"\n" " }\n" "\n" " set args [lrange $args $n end]\n" "\n" " set result {}\n" " foreach pattern $args {\n" " set escpattern [string map {\n" " \\\\\\\\ \\x01 \\\\\\{ \\x02 \\\\\\} \\x03 \\\\, \\x04\n" " } $pattern]\n" " set patexps [lassign [glob.explode $escpattern] rest]\n" " if {$rest ne \"\"} {\n" " return -code error \"unmatched close brace in glob pattern\"\n" " }\n" " foreach patexp $patexps {\n" " set patexp [string map {\n" " \\x01 \\\\\\\\ \\x02 \\{ \\x03 \\} \\x04 ,\n" " } $patexp]\n" " foreach {realname name} [glob.glob $base $patexp] {\n" " incr n\n" " if {$tails} {\n" " lappend result $name\n" " } else {\n" " lappend result [file join $base $name]\n" " }\n" " }\n" " }\n" " }\n" "\n" " if {!$nocomplain && [llength $result] == 0} {\n" " set s $(([llength $args] > 1) ? \"s\" : \"\")\n" " return -code error \"no files matched glob pattern$s \\\"[join $args]\\\"\"\n" " }\n" "\n" " return $result\n" "}\n" ); } int Jim_stdlibInit(Jim_Interp *interp) { if (Jim_PackageProvide(interp, "stdlib", "1.0", JIM_ERRMSG)) return JIM_ERR; return Jim_EvalSource(interp, "stdlib.tcl", 1, "\n" "\n" "if {![exists -command ref]} {\n" "\n" " proc ref {args} {{count 0}} {\n" " format %08x [incr count]\n" " }\n" "}\n" "\n" "\n" "proc lambda {arglist args} {\n" " tailcall proc [ref {} function lambda.finalizer] $arglist {*}$args\n" "}\n" "\n" "proc lambda.finalizer {name val} {\n" " rename $name {}\n" "}\n" "\n" "\n" "proc curry {args} {\n" " alias [ref {} function lambda.finalizer] {*}$args\n" "}\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "proc function {value} {\n" " return $value\n" "}\n" "\n" "\n" "proc stackdump {stacktrace} {\n" " set lines {}\n" " lappend lines \"Traceback (most recent call last):\"\n" " foreach {cmd l f p} [lreverse $stacktrace] {\n" " set line {}\n" " if {$f ne \"\"} {\n" " append line \" File \\\"$f\\\", line $l\"\n" " }\n" " if {$p ne \"\"} {\n" " append line \", in $p\"\n" " }\n" " if {$line ne \"\"} {\n" " lappend lines $line\n" " if {$cmd ne \"\"} {\n" " set nl [string first \\n $cmd 1]\n" " if {$nl >= 0} {\n" " set cmd [string range $cmd 0 $nl-1]...\n" " }\n" " lappend lines \" $cmd\"\n" " }\n" " }\n" " }\n" " if {[llength $lines] > 1} {\n" " return [join $lines \\n]\n" " }\n" "}\n" "\n" "\n" "\n" "proc defer {script} {\n" " upvar jim::defer v\n" " lappend v $script\n" "}\n" "\n" "\n" "\n" "proc errorInfo {msg {stacktrace \"\"}} {\n" " if {$stacktrace eq \"\"} {\n" "\n" " set stacktrace [info stacktrace]\n" " }\n" " lassign $stacktrace p f l cmd\n" " if {$f ne \"\"} {\n" " set result \"$f:$l: Error: \"\n" " }\n" " append result \"$msg\\n\"\n" " append result [stackdump $stacktrace]\n" "\n" "\n" " string trim $result\n" "}\n" "\n" "\n" "\n" "proc {info nameofexecutable} {} {\n" " if {[exists ::jim::exe]} {\n" " return $::jim::exe\n" " }\n" "}\n" "\n" "\n" "proc {dict update} {&varName args script} {\n" " set keys {}\n" " foreach {n v} $args {\n" " upvar $v var_$v\n" " if {[dict exists $varName $n]} {\n" " set var_$v [dict get $varName $n]\n" " }\n" " }\n" " catch {uplevel 1 $script} msg opts\n" " if {[info exists varName]} {\n" " foreach {n v} $args {\n" " if {[info exists var_$v]} {\n" " dict set varName $n [set var_$v]\n" " } else {\n" " dict unset varName $n\n" " }\n" " }\n" " }\n" " return {*}$opts $msg\n" "}\n" "\n" "proc {dict replace} {dictionary {args {key value}}} {\n" " if {[llength ${key value}] % 2} {\n" " tailcall {dict replace}\n" " }\n" " tailcall dict merge $dictionary ${key value}\n" "}\n" "\n" "\n" "proc {dict lappend} {varName key {args value}} {\n" " upvar $varName dict\n" " if {[exists dict] && [dict exists $dict $key]} {\n" " set list [dict get $dict $key]\n" " }\n" " lappend list {*}$value\n" " dict set dict $key $list\n" "}\n" "\n" "\n" "proc {dict append} {varName key {args value}} {\n" " upvar $varName dict\n" " if {[exists dict] && [dict exists $dict $key]} {\n" " set str [dict get $dict $key]\n" " }\n" " append str {*}$value\n" " dict set dict $key $str\n" "}\n" "\n" "\n" "proc {dict incr} {varName key {increment 1}} {\n" " upvar $varName dict\n" " if {[exists dict] && [dict exists $dict $key]} {\n" " set value [dict get $dict $key]\n" " }\n" " incr value $increment\n" " dict set dict $key $value\n" "}\n" "\n" "\n" "proc {dict remove} {dictionary {args key}} {\n" " foreach k $key {\n" " dict unset dictionary $k\n" " }\n" " return $dictionary\n" "}\n" "\n" "\n" "proc {dict for} {vars dictionary script} {\n" " if {[llength $vars] != 2} {\n" " return -code error \"must have exactly two variable names\"\n" " }\n" " dict size $dictionary\n" " tailcall foreach $vars $dictionary $script\n" "}\n" ); } int Jim_tclcompatInit(Jim_Interp *interp) { if (Jim_PackageProvide(interp, "tclcompat", "1.0", JIM_ERRMSG)) return JIM_ERR; return Jim_EvalSource(interp, "tclcompat.tcl", 1, "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "set env [env]\n" "\n" "\n" "if {[exists -command stdout]} {\n" "\n" " foreach p {gets flush close eof seek tell} {\n" " proc $p {chan args} {p} {\n" " tailcall $chan $p {*}$args\n" " }\n" " }\n" " unset p\n" "\n" "\n" "\n" " proc puts {{-nonewline {}} {chan stdout} msg} {\n" " if {${-nonewline} ni {-nonewline {}}} {\n" " tailcall ${-nonewline} puts $msg\n" " }\n" " tailcall $chan puts {*}${-nonewline} $msg\n" " }\n" "\n" "\n" "\n" "\n" "\n" " proc read {{-nonewline {}} chan} {\n" " if {${-nonewline} ni {-nonewline {}}} {\n" " tailcall ${-nonewline} read {*}${chan}\n" " }\n" " tailcall $chan read {*}${-nonewline}\n" " }\n" "\n" " proc fconfigure {f args} {\n" " foreach {n v} $args {\n" " switch -glob -- $n {\n" " -bl* {\n" " $f ndelay $(!$v)\n" " }\n" " -bu* {\n" " $f buffering $v\n" " }\n" " -tr* {\n" " $f translation $v\n" " }\n" " default {\n" " return -code error \"fconfigure: unknown option $n\"\n" " }\n" " }\n" " }\n" " }\n" "}\n" "\n" "\n" "proc fileevent {args} {\n" " tailcall {*}$args\n" "}\n" "\n" "\n" "\n" "\n" "\n" "proc parray {arrayname {pattern *} {puts puts} args} {\n" " upvar $arrayname a\n" "\n" " set max 0\n" " foreach name [array names a $pattern]] {\n" " if {[string length $name] > $max} {\n" " set max [string length $name]\n" " }\n" " }\n" " incr max [string length $arrayname]\n" " incr max 2\n" " foreach name [lsort [array names a $pattern]] {\n" " $puts {*}$args [format \"%-${max}s = %s\" $arrayname\\($name\\) $a($name)]\n" " }\n" "}\n" "\n" "\n" "proc {file copy} {{force {}} source target} {\n" " try {\n" " if {$force ni {{} -force}} {\n" " error \"bad option \\\"$force\\\": should be -force\"\n" " }\n" "\n" " set in [open $source rb]\n" "\n" " if {[file exists $target]} {\n" " if {$force eq \"\"} {\n" " error \"error copying \\\"$source\\\" to \\\"$target\\\": file already exists\"\n" " }\n" "\n" " if {$source eq $target} {\n" " return\n" " }\n" "\n" "\n" " file stat $source ss\n" " file stat $target ts\n" " if {$ss(dev) == $ts(dev) && $ss(ino) == $ts(ino) && $ss(ino)} {\n" " return\n" " }\n" " }\n" " set out [open $target wb]\n" " $in copyto $out\n" " $out close\n" " } on error {msg opts} {\n" " incr opts(-level)\n" " return {*}$opts $msg\n" " } finally {\n" " catch {$in close}\n" " }\n" "}\n" "\n" "\n" "\n" "proc popen {cmd {mode r}} {\n" " lassign [pipe] r w\n" " try {\n" " if {[string match \"w*\" $mode]} {\n" " lappend cmd <@$r &\n" " set pids [exec {*}$cmd]\n" " $r close\n" " set f $w\n" " } else {\n" " lappend cmd >@$w &\n" " set pids [exec {*}$cmd]\n" " $w close\n" " set f $r\n" " }\n" " lambda {cmd args} {f pids} {\n" " if {$cmd eq \"pid\"} {\n" " return $pids\n" " }\n" " if {$cmd eq \"close\"} {\n" " $f close\n" "\n" " set retopts {}\n" " foreach p $pids {\n" " lassign [wait $p] status - rc\n" " if {$status eq \"CHILDSTATUS\"} {\n" " if {$rc == 0} {\n" " continue\n" " }\n" " set msg \"child process exited abnormally\"\n" " } else {\n" " set msg \"child killed: received signal\"\n" " }\n" " set retopts [list -code error -errorcode [list $status $p $rc] $msg]\n" " }\n" " return {*}$retopts\n" " }\n" " tailcall $f $cmd {*}$args\n" " }\n" " } on error {error opts} {\n" " $r close\n" " $w close\n" " error $error\n" " }\n" "}\n" "\n" "\n" "local proc pid {{channelId {}}} {\n" " if {$channelId eq \"\"} {\n" " tailcall upcall pid\n" " }\n" " if {[catch {$channelId tell}]} {\n" " return -code error \"can not find channel named \\\"$channelId\\\"\"\n" " }\n" " if {[catch {$channelId pid} pids]} {\n" " return \"\"\n" " }\n" " return $pids\n" "}\n" "\n" "\n" "\n" "proc throw {code {msg \"\"}} {\n" " return -code $code $msg\n" "}\n" "\n" "\n" "proc {file delete force} {path} {\n" " foreach e [readdir $path] {\n" " file delete -force $path/$e\n" " }\n" " file delete $path\n" "}\n" ); } #include #include #include #include #include #ifdef HAVE_UNISTD_H #include #include #endif #ifdef HAVE_UTIL_H #include #endif #ifdef HAVE_PTY_H #include #endif #if defined(HAVE_SYS_SOCKET_H) && defined(HAVE_SELECT) && defined(HAVE_NETINET_IN_H) && defined(HAVE_NETDB_H) && defined(HAVE_ARPA_INET_H) #include #include #include #include #include #ifdef HAVE_SYS_UN_H #include #endif #define HAVE_SOCKETS #elif defined (__MINGW32__) #endif #if defined(JIM_SSL) #include #include #endif #ifdef HAVE_TERMIOS_H #endif #define AIO_CMD_LEN 32 #define AIO_DEFAULT_RBUF_LEN 256 #define AIO_DEFAULT_WBUF_LIMIT (64 * 1024) #define AIO_KEEPOPEN 1 #define AIO_NODELETE 2 #define AIO_EOF 4 #define AIO_WBUF_NONE 8 #define AIO_NONBLOCK 16 #define AIO_NOTAINT 32 #define AIO_ONEREAD 32 enum wbuftype { WBUF_OPT_NONE, WBUF_OPT_LINE, WBUF_OPT_FULL, }; #if defined(JIM_IPV6) #define IPV6 1 #else #define IPV6 0 #ifndef PF_INET6 #define PF_INET6 0 #endif #endif #if defined(HAVE_SYS_UN_H) && defined(PF_UNIX) #define UNIX_SOCKETS 1 #else #define UNIX_SOCKETS 0 #endif static int JimReadableTimeout(int fd, long ms) { #ifdef HAVE_SELECT int retval; struct timeval tv; fd_set rfds; FD_ZERO(&rfds); FD_SET(fd, &rfds); tv.tv_sec = ms / 1000; tv.tv_usec = (ms % 1000) * 1000; retval = select(fd + 1, &rfds, NULL, NULL, ms == 0 ? NULL : &tv); if (retval > 0) { return JIM_OK; } return JIM_ERR; #else return JIM_OK; #endif } struct AioFile; typedef struct { int (*writer)(struct AioFile *af, const char *buf, int len); int (*reader)(struct AioFile *af, char *buf, int len, int pending); int (*error)(const struct AioFile *af); const char *(*strerror)(struct AioFile *af); } JimAioFopsType; typedef struct AioFile { Jim_Obj *filename; int wbuft; int flags; long timeout; int fd; unsigned taintsource; unsigned taintsink; int addr_family; void *ssl; const JimAioFopsType *fops; Jim_Obj *readbuf; Jim_Obj *writebuf; char *rbuf; size_t rbuf_len; size_t wbuf_limit; } AioFile; static void aio_consume(Jim_Obj *objPtr, int n); static int stdio_writer(struct AioFile *af, const char *buf, int len) { int ret = write(af->fd, buf, len); if (ret < 0 && errno == EPIPE) { aio_consume(af->writebuf, Jim_Length(af->writebuf)); } return ret; } static int stdio_reader(struct AioFile *af, char *buf, int len, int nb) { if (nb || af->timeout == 0 || JimReadableTimeout(af->fd, af->timeout) == JIM_OK) { int ret; errno = 0; ret = read(af->fd, buf, len); if (ret <= 0 && errno != EAGAIN && errno != EINTR) { af->flags |= AIO_EOF; } return ret; } errno = ETIMEDOUT; return -1; } static int stdio_error(const AioFile *af) { if (af->flags & AIO_EOF) { return JIM_OK; } switch (errno) { case EAGAIN: case EINTR: case ETIMEDOUT: #ifdef ECONNRESET case ECONNRESET: #endif #ifdef ECONNABORTED case ECONNABORTED: #endif return JIM_OK; default: return JIM_ERR; } } static const char *stdio_strerror(struct AioFile *af) { return strerror(errno); } static const JimAioFopsType stdio_fops = { stdio_writer, stdio_reader, stdio_error, stdio_strerror, }; static void aio_set_nonblocking(AioFile *af, int nb) { #ifdef O_NDELAY int old = !!(af->flags & AIO_NONBLOCK); if (old != nb) { int fmode = fcntl(af->fd, F_GETFL); if (nb) { fmode |= O_NDELAY; af->flags |= AIO_NONBLOCK; } else { fmode &= ~O_NDELAY; af->flags &= ~AIO_NONBLOCK; } (void)fcntl(af->fd, F_SETFL, fmode); } #endif } static int aio_start_nonblocking(AioFile *af) { int old = !!(af->flags & AIO_NONBLOCK); if (af->timeout) { aio_set_nonblocking(af, 1); } return old; } static int JimAioSubCmdProc(Jim_Interp *interp, int argc, Jim_Obj *const *argv); static void JimAioSetTaint(AioFile *af, int taintsource, int taintsink); static AioFile *JimMakeChannel(Jim_Interp *interp, int fd, Jim_Obj *filename, const char *hdlfmt, int family, int flags); static const char *JimAioErrorString(AioFile *af) { if (af && af->fops) return af->fops->strerror(af); return strerror(errno); } static void JimAioSetError(Jim_Interp *interp, Jim_Obj *name) { AioFile *af = Jim_CmdPrivData(interp); if (name) { Jim_SetResultFormatted(interp, "%#s: %s", name, JimAioErrorString(af)); } else { Jim_SetResultString(interp, JimAioErrorString(af), -1); } } static int aio_eof(AioFile *af) { return af->flags & AIO_EOF; } static int JimCheckStreamError(Jim_Interp *interp, AioFile *af) { int ret = 0; if (!aio_eof(af)) { ret = af->fops->error(af); if (ret) { JimAioSetError(interp, af->filename); } } return ret; } static void aio_consume(Jim_Obj *objPtr, int n) { assert(objPtr->bytes); assert(n <= objPtr->length); memmove(objPtr->bytes, objPtr->bytes + n, objPtr->length - n + 1); objPtr->length -= n; } static int aio_flush(Jim_Interp *interp, AioFile *af); #ifdef jim_ext_eventloop static int aio_autoflush(Jim_Interp *interp, void *clientData, int mask) { AioFile *af = clientData; aio_flush(interp, af); if (Jim_Length(af->writebuf) == 0) { return -1; } return 0; } #endif static int aio_flush(Jim_Interp *interp, AioFile *af) { int len; const char *pt = Jim_GetString(af->writebuf, &len); if (len) { int ret = af->fops->writer(af, pt, len); if (ret > 0) { aio_consume(af->writebuf, ret); } if (ret < 0) { return JimCheckStreamError(interp, af); } if (Jim_Length(af->writebuf)) { #ifdef jim_ext_eventloop void *handler = Jim_FindFileHandler(interp, af->fd, JIM_EVENT_WRITABLE); if (handler == NULL) { Jim_CreateFileHandler(interp, af->fd, JIM_EVENT_WRITABLE, aio_autoflush, af, NULL); return JIM_OK; } else if (handler == af) { return JIM_OK; } #endif Jim_SetResultString(interp, "send buffer is full", -1); return JIM_ERR; } } return JIM_OK; } static int aio_read_len(Jim_Interp *interp, AioFile *af, unsigned flags, int neededLen) { if (!af->readbuf) { af->readbuf = Jim_NewStringObj(interp, NULL, 0); } if (neededLen >= 0) { neededLen -= Jim_Length(af->readbuf); if (neededLen <= 0) { return JIM_OK; } } while (neededLen && !aio_eof(af)) { int retval; int readlen; if (neededLen == -1) { readlen = af->rbuf_len; } else { readlen = (neededLen > af->rbuf_len ? af->rbuf_len : neededLen); } if (!af->rbuf) { af->rbuf = Jim_Alloc(af->rbuf_len); } retval = af->fops->reader(af, af->rbuf, readlen, flags & AIO_NONBLOCK); if (retval > 0) { if (retval) { Jim_AppendString(interp, af->readbuf, af->rbuf, retval); } if (neededLen != -1) { neededLen -= retval; } if (flags & AIO_ONEREAD) { return JIM_OK; } continue; } if ((flags & AIO_ONEREAD) || JimCheckStreamError(interp, af)) { return JIM_ERR; } break; } return JIM_OK; } static Jim_Obj *aio_read_consume(Jim_Interp *interp, AioFile *af, int neededLen) { Jim_Obj *objPtr = NULL; if (neededLen < 0 || af->readbuf == NULL || Jim_Length(af->readbuf) <= neededLen) { objPtr = af->readbuf; af->readbuf = NULL; } else if (af->readbuf) { int len; const char *pt = Jim_GetString(af->readbuf, &len); objPtr = Jim_NewStringObj(interp, pt, neededLen); aio_consume(af->readbuf, neededLen); } return objPtr; } static void JimAioDelProc(Jim_Interp *interp, void *privData) { AioFile *af = privData; JIM_NOTUSED(interp); aio_flush(interp, af); Jim_DecrRefCount(interp, af->writebuf); #if UNIX_SOCKETS if (af->addr_family == PF_UNIX && (af->flags & AIO_NODELETE) == 0) { Jim_Obj *filenameObj = aio_sockname(interp, af->fd); if (filenameObj) { if (Jim_Length(filenameObj)) { remove(Jim_String(filenameObj)); } Jim_FreeNewObj(interp, filenameObj); } } #endif Jim_DecrRefCount(interp, af->filename); #ifdef jim_ext_eventloop Jim_DeleteFileHandler(interp, af->fd, JIM_EVENT_READABLE | JIM_EVENT_WRITABLE | JIM_EVENT_EXCEPTION); #endif #if defined(JIM_SSL) if (af->ssl != NULL) { SSL_free(af->ssl); } #endif if (!(af->flags & AIO_KEEPOPEN)) { close(af->fd); } if (af->readbuf) { Jim_FreeNewObj(interp, af->readbuf); } Jim_Free(af->rbuf); Jim_Free(af); } static int aio_cmd_read(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); int nonewline = 0; jim_wide neededLen = -1; static const char * const options[] = { "-pending", "-nonewline", NULL }; enum { OPT_PENDING, OPT_NONEWLINE }; int option; int nb; Jim_Obj *objPtr; if (argc) { if (*Jim_String(argv[0]) == '-') { if (Jim_GetEnum(interp, argv[0], options, &option, NULL, JIM_ERRMSG) != JIM_OK) { return JIM_ERR; } switch (option) { case OPT_PENDING: break; case OPT_NONEWLINE: nonewline++; break; } } else { if (Jim_GetWide(interp, argv[0], &neededLen) != JIM_OK) return JIM_ERR; if (neededLen < 0) { Jim_SetResultString(interp, "invalid parameter: negative len", -1); return JIM_ERR; } } argc--; argv++; } if (argc) { return JIM_USAGE; } nb = aio_start_nonblocking(af); if (aio_read_len(interp, af, nb ? AIO_NONBLOCK : 0, neededLen) != JIM_OK) { aio_set_nonblocking(af, nb); return JIM_ERR; } objPtr = aio_read_consume(interp, af, neededLen); Jim_TaintObj(objPtr, af->taintsource); aio_set_nonblocking(af, nb); if (objPtr) { if (nonewline) { int len; const char *s = Jim_GetString(objPtr, &len); if (len > 0 && s[len - 1] == '\n') { objPtr->length--; objPtr->bytes[objPtr->length] = '\0'; } } Jim_SetResult(interp, objPtr); } else { Jim_SetEmptyResult(interp); } return JIM_OK; } int Jim_AioFilehandle(Jim_Interp *interp, Jim_Obj *command) { Jim_Cmd *cmdPtr = Jim_GetCommand(interp, command, JIM_ERRMSG); if (cmdPtr && !(cmdPtr->flags & JIM_CMD_ISPROC) && cmdPtr->u.native.cmdProc == JimAioSubCmdProc) { return ((AioFile *) cmdPtr->u.native.privData)->fd; } Jim_SetResultFormatted(interp, "Not a filehandle: \"%#s\"", command); return -1; } static int aio_cmd_getfd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); aio_flush(interp, af); Jim_SetResultInt(interp, af->fd); return JIM_OK; } static int aio_cmd_gettaint(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); static const char * const options[] = { "-source", "-sink", NULL }; enum { OPT_SOURCE, OPT_SINK }; int option; if (Jim_GetEnum(interp, argv[0], options, &option, NULL, JIM_ERRMSG) != JIM_OK) { return JIM_ERR; } switch (option) { case OPT_SOURCE: Jim_SetResultInt(interp, af->taintsource); break; case OPT_SINK: Jim_SetResultInt(interp, af->taintsink); break; } return JIM_OK; } static int aio_cmd_copy(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); jim_wide count = 0; jim_wide maxlen = JIM_WIDE_MAX; int ok = 1; Jim_Obj *objv[4]; long taintsink; if (argc == 2) { if (Jim_GetWide(interp, argv[1], &maxlen) != JIM_OK) { return JIM_ERR; } } objv[0] = argv[0]; objv[1] = Jim_NewStringObj(interp, "gettaint", -1); objv[2] = Jim_NewStringObj(interp, "-sink", -1); if (Jim_EvalObjVector(interp, 3, objv) != JIM_OK || Jim_GetLong(interp, Jim_GetResult(interp), &taintsink) != JIM_OK) { Jim_SetResultFormatted(interp, "Not a filehandle: \"%#s\"", argv[0]); return JIM_ERR; } if (af->taintsource & taintsink) { Jim_SetResultString(interp, "copying tainted source", -1); return JIM_ERR; } objv[0] = argv[0]; objv[1] = Jim_NewStringObj(interp, "flush", -1); if (Jim_EvalObjVector(interp, 2, objv) != JIM_OK) { Jim_SetResultFormatted(interp, "Not a filehandle: \"%#s\"", argv[0]); return JIM_ERR; } objv[0] = argv[0]; objv[1] = Jim_NewStringObj(interp, "puts", -1); objv[2] = Jim_NewStringObj(interp, "-nonewline", -1); Jim_IncrRefCount(objv[1]); Jim_IncrRefCount(objv[2]); while (count < maxlen) { jim_wide len = maxlen - count; if (len > af->rbuf_len) { len = af->rbuf_len; } if (aio_read_len(interp, af, 0, len) != JIM_OK) { ok = 0; break; } objv[3] = aio_read_consume(interp, af, len); count += Jim_Length(objv[3]); if (Jim_EvalObjVector(interp, 4, objv) != JIM_OK) { ok = 0; break; } if (aio_eof(af)) { break; } if (count >= 16384 && af->rbuf_len < 65536) { af->rbuf_len = 65536; af->rbuf = Jim_Realloc(af->rbuf, af->rbuf_len); } } Jim_DecrRefCount(interp, objv[1]); Jim_DecrRefCount(interp, objv[2]); if (!ok) { return JIM_ERR; } Jim_SetResultInt(interp, count); return JIM_OK; } static const char *jim_strstr(const char *haystack, int haylen, const char *needle, int needlen) { if (needlen == 1) { return (const char *)memchr(haystack, needle[0], haylen); } return strstr(haystack, needle); } static int aio_cmd_gets(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); Jim_Obj *objPtr = NULL; int len; int nb; unsigned flags = AIO_ONEREAD; const char *nl = NULL; int offset = 0; long keepnl = 0; const char *nlstr = "\n"; int nlstrlen = 1; while (argc >= 2) { enum {OPT_EOL, OPT_KEEP}; static const char * const options[] = { "-eol", "-keep", NULL }; int opt; if (*Jim_String(argv[0]) != '-') { return JIM_USAGE; } if (Jim_GetEnum(interp, argv[0], options, &opt, NULL, JIM_ERRMSG | JIM_ENUM_ABBREV) != JIM_OK) { return JIM_ERR; } switch (opt) { case OPT_EOL: nlstr = Jim_GetString(argv[1], &nlstrlen); break; case OPT_KEEP: if (Jim_GetLong(interp, argv[1], &keepnl) != JIM_OK) { return JIM_ERR; } break; } argc -= 2; argv += 2; } errno = 0; nb = aio_start_nonblocking(af); if (nb) { flags |= AIO_NONBLOCK; } while (!aio_eof(af)) { if (af->readbuf) { const char *pt = Jim_GetString(af->readbuf, &len); nl = jim_strstr(pt + offset, len - offset, nlstr, nlstrlen); if (nl) { objPtr = Jim_NewStringObj(interp, pt, nl - pt + (keepnl ? nlstrlen : 0)); aio_consume(af->readbuf, nl - pt + nlstrlen); break; } offset = len; } if (aio_read_len(interp, af, flags, -1) != JIM_OK) { break; } } aio_set_nonblocking(af, nb); if (!nl && aio_eof(af) && af->readbuf) { objPtr = af->readbuf; af->readbuf = NULL; } else if (!objPtr) { objPtr = Jim_NewStringObj(interp, NULL, 0); } Jim_TaintObj(objPtr, af->taintsource); if (argc) { if (Jim_SetVariable(interp, argv[0], objPtr) != JIM_OK) { return JIM_ERR; } len = Jim_Length(objPtr); if (!nl && len == 0) { len = -1; } Jim_SetResultInt(interp, len); } else { Jim_SetResult(interp, objPtr); } return JIM_OK; } static int aio_cmd_puts(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); int wlen; const char *wdata; Jim_Obj *strObj; int wnow = 0; int nl = 1; if (Jim_CheckTaint(interp, af->taintsink)) { Jim_SetResultString(interp, "puts: tainted data", -1); return JIM_ERR; } if (argc == 2) { if (!Jim_CompareStringImmediate(interp, argv[0], "-nonewline")) { return JIM_USAGE; } strObj = argv[1]; nl = 0; } else { strObj = argv[0]; } #ifdef JIM_MAINTAINER if (Jim_IsShared(af->writebuf)) { Jim_DecrRefCount(interp, af->writebuf); af->writebuf = Jim_DuplicateObj(interp, af->writebuf); Jim_IncrRefCount(af->writebuf); } #endif Jim_AppendObj(interp, af->writebuf, strObj); if (nl) { Jim_AppendString(interp, af->writebuf, "\n", 1); } wdata = Jim_GetString(af->writebuf, &wlen); switch (af->wbuft) { case WBUF_OPT_NONE: wnow = 1; break; case WBUF_OPT_LINE: if (nl || memchr(wdata, '\n', wlen) != NULL) { wnow = 1; } break; case WBUF_OPT_FULL: if (wlen >= af->wbuf_limit) { wnow = 1; } break; } if (wnow) { return aio_flush(interp, af); } return JIM_OK; } static int aio_cmd_isatty(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { #ifdef HAVE_ISATTY AioFile *af = Jim_CmdPrivData(interp); Jim_SetResultInt(interp, isatty(af->fd)); #else Jim_SetResultInt(interp, 0); #endif return JIM_OK; } static int aio_cmd_flush(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); return aio_flush(interp, af); } static int aio_cmd_eof(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); Jim_SetResultInt(interp, !!aio_eof(af)); return JIM_OK; } static int aio_cmd_close(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); if (argc == 3) { int option = -1; #if defined(HAVE_SOCKETS) static const char * const options[] = { "r", "w", "-nodelete", NULL }; enum { OPT_R, OPT_W, OPT_NODELETE }; if (Jim_GetEnum(interp, argv[2], options, &option, NULL, JIM_ERRMSG) != JIM_OK) { return JIM_ERR; } #endif switch (option) { #if defined(HAVE_SHUTDOWN) case OPT_R: case OPT_W: if (shutdown(af->fd, option == OPT_R ? SHUT_RD : SHUT_WR) == 0) { return JIM_OK; } JimAioSetError(interp, NULL); return JIM_ERR; #endif #if UNIX_SOCKETS case OPT_NODELETE: if (af->addr_family == PF_UNIX) { af->flags |= AIO_NODELETE; break; } #endif default: Jim_SetResultString(interp, "not supported", -1); return JIM_ERR; } } af->flags &= ~AIO_KEEPOPEN; return Jim_DeleteCommand(interp, argv[0]); } static int aio_cmd_seek(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); int orig = SEEK_SET; jim_wide offset; if (argc == 2) { if (Jim_CompareStringImmediate(interp, argv[1], "start")) orig = SEEK_SET; else if (Jim_CompareStringImmediate(interp, argv[1], "current")) orig = SEEK_CUR; else if (Jim_CompareStringImmediate(interp, argv[1], "end")) orig = SEEK_END; else { return JIM_USAGE; } } if (Jim_GetWide(interp, argv[0], &offset) != JIM_OK) { return JIM_ERR; } if (orig != SEEK_CUR || offset != 0) { aio_flush(interp, af); } if (Jim_Lseek(af->fd, offset, orig) == -1) { JimAioSetError(interp, af->filename); return JIM_ERR; } if (af->readbuf) { Jim_FreeNewObj(interp, af->readbuf); af->readbuf = NULL; } af->flags &= ~AIO_EOF; return JIM_OK; } static int aio_cmd_tell(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); Jim_SetResultInt(interp, Jim_Lseek(af->fd, 0, SEEK_CUR)); return JIM_OK; } static int aio_cmd_filename(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); Jim_SetResult(interp, af->filename); return JIM_OK; } #ifdef JIM_TAINT static int aio_cmd_taint(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); static const char * const types[] = { "sink", "source", NULL }; enum { TAINT_TYPE_SINK, TAINT_TYPE_SOURCE, }; int type; long taint; if (Jim_GetEnum(interp, argv[0], types, &type, NULL, JIM_ERRMSG) != JIM_OK) return JIM_ERR; if (argc == 1) { Jim_SetResultInt(interp, type == TAINT_TYPE_SINK ? af->taintsink : af->taintsource); return JIM_OK; } else if (Jim_GetLong(interp, argv[1], &taint) == JIM_OK) { if (type == TAINT_TYPE_SINK) { af->taintsink = taint; } else { af->taintsource = taint; } return JIM_OK; } else { return JIM_ERR; } } #endif #ifdef O_NDELAY static int aio_cmd_ndelay(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); if (argc) { long nb; if (Jim_GetLong(interp, argv[0], &nb) != JIM_OK) { return JIM_ERR; } aio_set_nonblocking(af, nb); } Jim_SetResultInt(interp, (af->flags & AIO_NONBLOCK) ? 1 : 0); return JIM_OK; } #endif #ifdef HAVE_FSYNC static int aio_cmd_sync(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); if (aio_flush(interp, af) != JIM_OK) { return JIM_ERR; } fsync(af->fd); return JIM_OK; } #endif static int aio_cmd_buffering(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); Jim_Obj *resultObj; static const char * const options[] = { "none", "line", "full", NULL }; if (argc) { if (Jim_GetEnum(interp, argv[0], options, &af->wbuft, NULL, JIM_ERRMSG) != JIM_OK) { return JIM_ERR; } if (af->wbuft == WBUF_OPT_FULL && argc == 2) { long l; if (Jim_GetLong(interp, argv[1], &l) != JIM_OK || l <= 0) { return JIM_ERR; } af->wbuf_limit = l; } if (af->wbuft == WBUF_OPT_NONE) { if (aio_flush(interp, af) != JIM_OK) { return JIM_ERR; } } } resultObj = Jim_NewListObj(interp, NULL, 0); Jim_ListAppendElement(interp, resultObj, Jim_NewStringObj(interp, options[af->wbuft], -1)); if (af->wbuft == WBUF_OPT_FULL) { Jim_ListAppendElement(interp, resultObj, Jim_NewIntObj(interp, af->wbuf_limit)); } Jim_SetResult(interp, resultObj); return JIM_OK; } static int aio_cmd_translation(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { enum {OPT_BINARY, OPT_TEXT}; static const char * const options[] = { "binary", "text", NULL }; int opt; if (Jim_GetEnum(interp, argv[0], options, &opt, NULL, JIM_ERRMSG) != JIM_OK) { return JIM_ERR; } #if defined(Jim_SetMode) else { AioFile *af = Jim_CmdPrivData(interp); Jim_SetMode(af->fd, opt == OPT_BINARY ? O_BINARY : O_TEXT); } #endif return JIM_OK; } static int aio_cmd_readsize(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); if (argc) { long l; if (Jim_GetLong(interp, argv[0], &l) != JIM_OK || l <= 0) { return JIM_ERR; } af->rbuf_len = l; if (af->rbuf) { af->rbuf = Jim_Realloc(af->rbuf, af->rbuf_len); } } Jim_SetResultInt(interp, af->rbuf_len); return JIM_OK; } #ifdef jim_ext_eventloop static int aio_cmd_timeout(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { #ifdef HAVE_SELECT AioFile *af = Jim_CmdPrivData(interp); if (argc == 1) { if (Jim_GetLong(interp, argv[0], &af->timeout) != JIM_OK) { return JIM_ERR; } } Jim_SetResultInt(interp, af->timeout); return JIM_OK; #else Jim_SetResultString(interp, "timeout not supported", -1); return JIM_ERR; #endif } static int aio_eventinfo(Jim_Interp *interp, AioFile * af, unsigned mask, int argc, Jim_Obj * const *argv) { if (argc == 0) { Jim_Obj *objPtr = Jim_FindFileHandler(interp, af->fd, mask); if (objPtr) { Jim_SetResult(interp, objPtr); } return JIM_OK; } Jim_DeleteFileHandler(interp, af->fd, mask); if (Jim_Length(argv[0])) { Jim_CreateScriptFileHandler(interp, af->fd, mask, argv[0]); } return JIM_OK; } static int aio_cmd_readable(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); return aio_eventinfo(interp, af, JIM_EVENT_READABLE, argc, argv); } static int aio_cmd_writable(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); return aio_eventinfo(interp, af, JIM_EVENT_WRITABLE, argc, argv); } static int aio_cmd_onexception(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); return aio_eventinfo(interp, af, JIM_EVENT_EXCEPTION, argc, argv); } #endif #if defined(jim_ext_file) && defined(Jim_FileStat) static int aio_cmd_stat(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { jim_stat_t sb; AioFile *af = Jim_CmdPrivData(interp); if (Jim_FileStat(af->fd, &sb) == -1) { JimAioSetError(interp, NULL); return JIM_ERR; } return Jim_FileStoreStatData(interp, argc == 0 ? NULL : argv[0], &sb); } #endif static const jim_subcmd_type aio_command_table[] = { { "read", "?-nonewline|len?", aio_cmd_read, 0, 2, }, { "copyto", "handle ?size?", aio_cmd_copy, 1, 2, }, { "getfd", NULL, aio_cmd_getfd, 0, 0, JIM_MODFLAG_HIDDEN, }, { "gettaint", "?-source|-sink?", aio_cmd_gettaint, 1, 1, JIM_MODFLAG_HIDDEN, }, { "gets", "?-eol ? ?-keep 0|1? ?var?", aio_cmd_gets, 0, -1, }, { "puts", "?-nonewline? str", aio_cmd_puts, 1, 2, }, { "isatty", NULL, aio_cmd_isatty, 0, 0, }, { "flush", NULL, aio_cmd_flush, 0, 0, }, { "eof", NULL, aio_cmd_eof, 0, 0, }, { "close", "?r(ead)|w(rite)?", aio_cmd_close, 0, 1, JIM_MODFLAG_FULLARGV, }, { "seek", "offset ?start|current|end", aio_cmd_seek, 1, 2, }, { "tell", NULL, aio_cmd_tell, 0, 0, }, { "filename", NULL, aio_cmd_filename, 0, 0, }, #ifdef JIM_TAINT { "taint", "source|sink ?0|n?", aio_cmd_taint, 1, 2, }, #endif #ifdef O_NDELAY { "ndelay", "?0|1?", aio_cmd_ndelay, 0, 1, }, #endif #ifdef HAVE_FSYNC { "sync", NULL, aio_cmd_sync, 0, 0, }, #endif { "buffering", "?none|line|full? ?size?", aio_cmd_buffering, 0, 2, }, { "translation", "binary|text", aio_cmd_translation, 1, 1, }, { "readsize", "?size?", aio_cmd_readsize, 0, 1, }, #if defined(jim_ext_file) && defined(Jim_FileStat) { "stat", "?var?", aio_cmd_stat, 0, 1, }, #endif #ifdef jim_ext_eventloop { "readable", "?readable-script?", aio_cmd_readable, 0, 1, }, { "writable", "?writable-script?", aio_cmd_writable, 0, 1, }, { "onexception", "?exception-script?", aio_cmd_onexception, 0, 1, }, { "timeout", "?ms?", aio_cmd_timeout, 0, 1, }, #endif { NULL } }; static int JimAioSubCmdProc(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return Jim_CallSubCmd(interp, Jim_ParseSubCmd(interp, aio_command_table, argc, argv), argc, argv); } static int parse_posix_open_mode(Jim_Interp *interp, Jim_Obj *modeObj) { int i; int flags = 0; #ifndef O_NOCTTY #define O_NOCTTY 0 #endif static const char * const modetypes[] = { "RDONLY", "WRONLY", "RDWR", "APPEND", "BINARY", "CREAT", "EXCL", "NOCTTY", "TRUNC", NULL }; static const int modeflags[] = { O_RDONLY, O_WRONLY, O_RDWR, O_APPEND, 0, O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, }; for (i = 0; i < Jim_ListLength(interp, modeObj); i++) { int opt; Jim_Obj *objPtr = Jim_ListGetIndex(interp, modeObj, i); if (Jim_GetEnum(interp, objPtr, modetypes, &opt, "access mode", JIM_ERRMSG) != JIM_OK) { return -1; } flags |= modeflags[opt]; } return flags; } static int parse_open_mode(Jim_Interp *interp, Jim_Obj *filenameObj, Jim_Obj *modeObj) { int flags; const char *mode = Jim_String(modeObj); if (*mode == 'R' || *mode == 'W') { return parse_posix_open_mode(interp, modeObj); } if (*mode == 'r') { flags = O_RDONLY; } else if (*mode == 'w') { flags = O_WRONLY | O_CREAT | O_TRUNC; } else if (*mode == 'a') { flags = O_WRONLY | O_CREAT | O_APPEND; } else { Jim_SetResultFormatted(interp, "%s: invalid open mode '%s'", Jim_String(filenameObj), mode); return -1; } mode++; if (*mode == 'b') { #ifdef O_BINARY flags |= O_BINARY; #endif mode++; } if (*mode == 't') { #ifdef O_TEXT flags |= O_TEXT; #endif mode++; } if (*mode == '+') { mode++; flags &= ~(O_RDONLY | O_WRONLY); flags |= O_RDWR; } if (*mode == 'x') { mode++; #ifdef O_EXCL flags |= O_EXCL; #endif } if (*mode == 'F') { mode++; #ifdef O_LARGEFILE flags |= O_LARGEFILE; #endif } if (*mode == 'e') { mode++; } return flags; } static int JimAioOpenCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int openflags; AioFile *af; const char *filename; int fd = -1; int n = 0; int flags = AIO_NOTAINT; if (argc > 2 && Jim_CompareStringImmediate(interp, argv[2], "-noclose")) { flags = AIO_KEEPOPEN; n++; } if (Jim_CheckTaint(interp, JIM_TAINT_ANY)) { Jim_SetTaintError(interp, 1, argv); return JIM_ERR; } if (argc > 3 + n) { return JIM_USAGE; } filename = Jim_String(argv[1]); #ifdef jim_ext_tclcompat { if (*filename == '|') { Jim_Obj *evalObj[3]; int i = 0; evalObj[i++] = Jim_NewStringObj(interp, "::popen", -1); evalObj[i++] = Jim_NewStringObj(interp, filename + 1, -1); if (argc == 3 + n) { evalObj[i++] = argv[2 + n]; } return Jim_EvalObjVector(interp, i, evalObj); } } #endif if (argc == 3 + n) { openflags = parse_open_mode(interp, argv[1], argv[2 + n]); if (openflags == -1) { return JIM_ERR; } } else { openflags = O_RDONLY; } fd = open(filename, openflags, 0666); if (fd < 0) { JimAioSetError(interp, argv[1]); return JIM_ERR; } af = JimMakeChannel(interp, fd, argv[1], "aio.handle%ld", 0, flags); if (af) { JimAioSetTaint(af, 0, 0); return JIM_OK; } return JIM_ERR; } static void JimAioSetTaint(AioFile *af, int taintsource, int taintsink) { af->taintsource = taintsource; af->taintsink = taintsink; } static AioFile *JimMakeChannel(Jim_Interp *interp, int fd, Jim_Obj *filename, const char *hdlfmt, int family, int flags) { AioFile *af; char buf[AIO_CMD_LEN]; Jim_Obj *cmdname; snprintf(buf, sizeof(buf), hdlfmt, Jim_GetId(interp)); cmdname = Jim_NewStringObj(interp, buf, -1); if (!filename) { filename = cmdname; } Jim_IncrRefCount(filename); af = Jim_Alloc(sizeof(*af)); memset(af, 0, sizeof(*af)); af->filename = filename; af->fd = fd; af->addr_family = family; af->fops = &stdio_fops; af->ssl = NULL; if (flags & AIO_WBUF_NONE) { af->wbuft = WBUF_OPT_NONE; } else { #ifdef HAVE_ISATTY af->wbuft = isatty(af->fd) ? WBUF_OPT_LINE : WBUF_OPT_FULL; #else af->wbuft = WBUF_OPT_FULL; #endif } #ifdef FD_CLOEXEC if ((flags & AIO_KEEPOPEN) == 0) { (void)fcntl(af->fd, F_SETFD, FD_CLOEXEC); } #endif aio_set_nonblocking(af, !!(flags & AIO_NONBLOCK)); af->flags |= flags; af->writebuf = Jim_NewStringObj(interp, NULL, 0); Jim_IncrRefCount(af->writebuf); af->wbuf_limit = AIO_DEFAULT_WBUF_LIMIT; af->rbuf_len = AIO_DEFAULT_RBUF_LEN; if (!(flags & AIO_NOTAINT)) { JimAioSetTaint(af, JIM_TAINT_STD, JIM_TAINT_STD); } Jim_RegisterCommand(interp, cmdname, JimAioSubCmdProc, JimAioDelProc, NULL, NULL, 0, -1, JIM_CMD_ISCHANNEL, af); Jim_SetResult(interp, Jim_MakeGlobalNamespaceName(interp, cmdname)); return af; } #if defined(HAVE_PIPE) || (defined(HAVE_SOCKETPAIR) && UNIX_SOCKETS) || defined(HAVE_OPENPTY) static int JimMakeChannelPair(Jim_Interp *interp, int p[2], Jim_Obj *filename, const char *hdlfmt, int family, int flags) { if (JimMakeChannel(interp, p[0], filename, hdlfmt, family, flags)) { Jim_Obj *objPtr = Jim_NewListObj(interp, NULL, 0); Jim_ListAppendElement(interp, objPtr, Jim_GetResult(interp)); if (JimMakeChannel(interp, p[1], filename, hdlfmt, family, flags)) { Jim_ListAppendElement(interp, objPtr, Jim_GetResult(interp)); Jim_SetResult(interp, objPtr); return JIM_OK; } } close(p[0]); close(p[1]); JimAioSetError(interp, NULL); return JIM_ERR; } #endif #ifdef HAVE_PIPE static int JimCreatePipe(Jim_Interp *interp, Jim_Obj *filenameObj, int flags) { int p[2]; if (pipe(p) != 0) { JimAioSetError(interp, NULL); return JIM_ERR; } return JimMakeChannelPair(interp, p, filenameObj, "aio.pipe%ld", 0, flags); } static int JimAioPipeCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return JimCreatePipe(interp, argv[0], 0); } #endif #ifdef HAVE_OPENPTY static int JimAioOpenPtyCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int p[2]; char path[MAXPATHLEN]; if (openpty(&p[0], &p[1], path, NULL, NULL) != 0) { JimAioSetError(interp, NULL); return JIM_ERR; } return JimMakeChannelPair(interp, p, Jim_NewStringObj(interp, path, -1), "aio.pty%ld", 0, 0); return JimMakeChannelPair(interp, p, Jim_NewStringObj(interp, path, -1), "aio.pty%ld", 0, 0); } #endif static void JimMakeStdioChannel(Jim_Interp *interp, FILE *fh, const char *name, unsigned flags) { AioFile *af = JimMakeChannel(interp, fileno(fh), NULL, name, 0, AIO_KEEPOPEN | flags); JimAioSetTaint(af, 0, 0); } int Jim_aioInit(Jim_Interp *interp) { Jim_PackageProvideCheck(interp, "aio"); #if defined(JIM_SSL) Jim_RegisterSimpleCmd(interp, "load_ssl_certs", "dir", 1, 1, JimAioLoadSSLCertsCommand); #endif Jim_RegisterCmd(interp, "open", "filename ?-noclose? ?mode?", 1, 3, JimAioOpenCommand, NULL, NULL, JIM_CMD_NOTAINT); #ifdef HAVE_SOCKETS Jim_RegisterCmd(interp, "socket", "?-async? ?-ipv6? socktype ?address?", 1, 4, JimAioSockCommand, NULL, NULL, JIM_CMD_NOTAINT); #endif #ifdef HAVE_PIPE Jim_RegisterSimpleCmd(interp, "pipe", "", 0, 0, JimAioPipeCommand); #endif JimMakeStdioChannel(interp, stdin, "stdin", 0); JimMakeStdioChannel(interp, stdout, "stdout", 0); JimMakeStdioChannel(interp, stderr, "stderr", AIO_WBUF_NONE); return JIM_OK; } #include #include #include #ifdef HAVE_DIRENT_H #include #endif int Jim_ReaddirCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const char *dirPath; DIR *dirPtr; struct dirent *entryPtr; int nocomplain = 0; if (argc == 3 && Jim_CompareStringImmediate(interp, argv[1], "-nocomplain")) { nocomplain = 1; } if (argc != 2 && !nocomplain) { return JIM_USAGE; } dirPath = Jim_String(argv[1 + nocomplain]); dirPtr = opendir(dirPath); if (dirPtr == NULL) { if (nocomplain) { return JIM_OK; } Jim_SetResultString(interp, strerror(errno), -1); return JIM_ERR; } else { Jim_Obj *listObj = Jim_NewListObj(interp, NULL, 0); while ((entryPtr = readdir(dirPtr)) != NULL) { if (entryPtr->d_name[0] == '.') { if (entryPtr->d_name[1] == '\0') { continue; } if ((entryPtr->d_name[1] == '.') && (entryPtr->d_name[2] == '\0')) continue; } Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, entryPtr->d_name, -1)); } closedir(dirPtr); Jim_SetResult(interp, listObj); return JIM_OK; } } int Jim_readdirInit(Jim_Interp *interp) { Jim_PackageProvideCheck(interp, "readdir"); Jim_RegisterSimpleCmd(interp, "readdir", "?-nocomplain? dirPath", 1, 2, Jim_ReaddirCmd); return JIM_OK; } #include #include #if defined(JIM_REGEXP) #else #include #define jim_regcomp regcomp #define jim_regexec regexec #define jim_regerror regerror #define jim_regfree regfree #endif static void FreeRegexpInternalRep(Jim_Interp *interp, Jim_Obj *objPtr) { jim_regfree(objPtr->internalRep.ptrIntValue.ptr); Jim_Free(objPtr->internalRep.ptrIntValue.ptr); } static const Jim_ObjType regexpObjType = { "regexp", FreeRegexpInternalRep, NULL, NULL, JIM_TYPE_NONE }; static regex_t *SetRegexpFromAny(Jim_Interp *interp, Jim_Obj *objPtr, unsigned flags) { regex_t *compre; const char *pattern; int ret; if (objPtr->typePtr == ®expObjType && objPtr->internalRep.ptrIntValue.ptr && objPtr->internalRep.ptrIntValue.int1 == flags) { return objPtr->internalRep.ptrIntValue.ptr; } pattern = Jim_String(objPtr); compre = Jim_Alloc(sizeof(regex_t)); if ((ret = jim_regcomp(compre, pattern, REG_EXTENDED | flags)) != 0) { char buf[100]; jim_regerror(ret, compre, buf, sizeof(buf)); Jim_SetResultFormatted(interp, "couldn't compile regular expression pattern: %s", buf); jim_regfree(compre); Jim_Free(compre); return NULL; } Jim_FreeIntRep(interp, objPtr); objPtr->typePtr = ®expObjType; objPtr->internalRep.ptrIntValue.int1 = flags; objPtr->internalRep.ptrIntValue.ptr = compre; return compre; } int Jim_RegexpCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int opt_indices = 0; int opt_all = 0; int opt_inline = 0; int opt_lineanchor = 0; regex_t *regex; int match, i, j; int offset = 0; regmatch_t *pmatch = NULL; int source_len; int result = JIM_OK; const char *pattern; const char *source_str; int num_matches = 0; int num_vars; Jim_Obj *resultListObj = NULL; int regcomp_flags = 0; int eflags = 0; int option; enum { OPT_INDICES, OPT_NOCASE, OPT_LINE, OPT_LINESTOP, OPT_LINEANCHOR, OPT_ALL, OPT_INLINE, OPT_START, OPT_EXPANDED, OPT_END }; static const char * const options[] = { "-indices", "-nocase", "-line", "-linestop", "-lineanchor", "-all", "-inline", "-start", "-expanded", "--", NULL }; for (i = 1; i < argc; i++) { const char *opt = Jim_String(argv[i]); if (*opt != '-') { break; } if (Jim_GetEnum(interp, argv[i], options, &option, "option", JIM_ERRMSG | JIM_ENUM_ABBREV) != JIM_OK) { return JIM_ERR; } if (option == OPT_END) { i++; break; } switch (option) { case OPT_INDICES: opt_indices = 1; break; case OPT_NOCASE: regcomp_flags |= REG_ICASE; break; case OPT_LINE: regcomp_flags |= REG_NEWLINE; opt_lineanchor = 1; break; #ifdef REG_NEWLINE_STOP case OPT_LINESTOP: regcomp_flags |= REG_NEWLINE_STOP; break; #endif #ifdef REG_NEWLINE_ANCHOR case OPT_LINEANCHOR: regcomp_flags |= REG_NEWLINE_ANCHOR; opt_lineanchor = 1; break; #endif case OPT_ALL: opt_all = 1; break; case OPT_INLINE: opt_inline = 1; break; case OPT_START: if (++i == argc) { return JIM_USAGE; } if (Jim_GetIndex(interp, argv[i], &offset) != JIM_OK) { return JIM_ERR; } break; #ifdef REG_EXPANDED case OPT_EXPANDED: regcomp_flags |= REG_EXPANDED; break; #endif default: Jim_SetResultFormatted(interp, "not supported: %#s", argv[i]); return JIM_ERR; } } if (argc - i < 2) { return JIM_USAGE; } regex = SetRegexpFromAny(interp, argv[i], regcomp_flags); if (!regex) { return JIM_ERR; } pattern = Jim_String(argv[i]); source_str = Jim_GetString(argv[i + 1], &source_len); num_vars = argc - i - 2; if (opt_inline) { if (num_vars) { Jim_SetResultString(interp, "regexp match variables not allowed when using -inline", -1); result = JIM_ERR; goto done; } num_vars = regex->re_nsub + 1; } pmatch = Jim_Alloc((num_vars + 1) * sizeof(*pmatch)); if (offset) { if (offset < 0) { offset += source_len + 1; } if (offset > source_len) { source_str += source_len; } else if (offset > 0) { source_str += utf8_index(source_str, offset); } eflags |= REG_NOTBOL; } if (opt_inline) { resultListObj = Jim_NewListObj(interp, NULL, 0); } next_match: match = jim_regexec(regex, source_str, num_vars + 1, pmatch, eflags); if (match >= REG_BADPAT) { char buf[100]; jim_regerror(match, regex, buf, sizeof(buf)); Jim_SetResultFormatted(interp, "error while matching pattern: %s", buf); result = JIM_ERR; goto done; } if (match == REG_NOMATCH) { goto done; } num_matches++; j = 0; for (j = 0; j < num_vars; j++) { Jim_Obj *resultObj; if (opt_indices) { resultObj = Jim_NewListObj(interp, NULL, 0); } else { resultObj = Jim_NewStringObj(interp, "", 0); } if (pmatch[j].rm_so == -1) { if (opt_indices) { Jim_ListAppendElement(interp, resultObj, Jim_NewIntObj(interp, -1)); Jim_ListAppendElement(interp, resultObj, Jim_NewIntObj(interp, -1)); } } else { if (opt_indices) { int so = utf8_strlen(source_str, pmatch[j].rm_so); int eo = utf8_strlen(source_str, pmatch[j].rm_eo); Jim_ListAppendElement(interp, resultObj, Jim_NewIntObj(interp, offset + so)); Jim_ListAppendElement(interp, resultObj, Jim_NewIntObj(interp, offset + eo - 1)); } else { Jim_AppendString(interp, resultObj, source_str + pmatch[j].rm_so, pmatch[j].rm_eo - pmatch[j].rm_so); } } if (opt_inline) { Jim_ListAppendElement(interp, resultListObj, resultObj); } else { result = Jim_SetVariable(interp, argv[i + 2 + j], resultObj); if (result != JIM_OK) { break; } } } if (opt_all && (pattern[0] != '^' || opt_lineanchor) && *source_str) { if (pmatch[0].rm_eo) { offset += utf8_strlen(source_str, pmatch[0].rm_eo); source_str += pmatch[0].rm_eo; } else { source_str++; offset++; } if (*source_str) { eflags = REG_NOTBOL; goto next_match; } } done: if (result == JIM_OK) { if (opt_inline) { Jim_SetResult(interp, resultListObj); } else { Jim_SetResultInt(interp, num_matches); } } Jim_Free(pmatch); return result; } #define MAX_SUB_MATCHES 50 int Jim_RegsubCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int regcomp_flags = 0; int regexec_flags = 0; int opt_all = 0; int opt_command = 0; int offset = 0; regex_t *regex; const char *p; int result = JIM_OK; regmatch_t pmatch[MAX_SUB_MATCHES + 1]; int num_matches = 0; int i, j, n; Jim_Obj *varname; Jim_Obj *resultObj; Jim_Obj *cmd_prefix = NULL; Jim_Obj *regcomp_obj = NULL; const char *source_str; int source_len; const char *replace_str = NULL; int replace_len; const char *pattern; int option; enum { OPT_NOCASE, OPT_LINE, OPT_LINESTOP, OPT_LINEANCHOR, OPT_ALL, OPT_START, OPT_COMMAND, OPT_EXPANDED, OPT_END }; static const char * const options[] = { "-nocase", "-line", "-linestop", "-lineanchor", "-all", "-start", "-command", "-expanded", "--", NULL }; for (i = 1; i < argc; i++) { const char *opt = Jim_String(argv[i]); if (*opt != '-') { break; } if (Jim_GetEnum(interp, argv[i], options, &option, "option", JIM_ERRMSG | JIM_ENUM_ABBREV) != JIM_OK) { return JIM_ERR; } if (option == OPT_END) { i++; break; } switch (option) { case OPT_NOCASE: regcomp_flags |= REG_ICASE; break; case OPT_LINE: regcomp_flags |= REG_NEWLINE; break; #ifdef REG_NEWLINE_STOP case OPT_LINESTOP: regcomp_flags |= REG_NEWLINE_STOP; break; #endif #ifdef REG_NEWLINE_ANCHOR case OPT_LINEANCHOR: regcomp_flags |= REG_NEWLINE_ANCHOR; break; #endif case OPT_ALL: opt_all = 1; break; case OPT_START: if (++i == argc) { return JIM_USAGE; } if (Jim_GetIndex(interp, argv[i], &offset) != JIM_OK) { return JIM_ERR; } break; case OPT_COMMAND: opt_command = 1; break; #ifdef REG_EXPANDED case OPT_EXPANDED: regcomp_flags |= REG_EXPANDED; break; #endif default: Jim_SetResultFormatted(interp, "not supported: %#s", argv[i]); return JIM_ERR; } } if (argc - i != 3 && argc - i != 4) { return JIM_USAGE; } regcomp_obj = Jim_DuplicateObj(interp, argv[i]); Jim_IncrRefCount(regcomp_obj); regex = SetRegexpFromAny(interp, regcomp_obj, regcomp_flags); if (!regex) { Jim_DecrRefCount(interp, regcomp_obj); return JIM_ERR; } pattern = Jim_String(argv[i]); source_str = Jim_GetString(argv[i + 1], &source_len); if (opt_command) { cmd_prefix = argv[i + 2]; if (Jim_ListLength(interp, cmd_prefix) == 0) { Jim_SetResultString(interp, "command prefix must be a list of at least one element", -1); Jim_DecrRefCount(interp, regcomp_obj); return JIM_ERR; } Jim_IncrRefCount(cmd_prefix); } else { replace_str = Jim_GetString(argv[i + 2], &replace_len); } varname = argv[i + 3]; resultObj = Jim_NewStringObj(interp, "", 0); if (offset) { if (offset < 0) { offset += source_len + 1; } if (offset > source_len) { offset = source_len; } else if (offset < 0) { offset = 0; } } offset = utf8_index(source_str, offset); Jim_AppendString(interp, resultObj, source_str, offset); n = source_len - offset; p = source_str + offset; while (n || pattern[0]) { int match = jim_regexec(regex, p, MAX_SUB_MATCHES, pmatch, regexec_flags); if (match >= REG_BADPAT) { char buf[100]; jim_regerror(match, regex, buf, sizeof(buf)); Jim_SetResultFormatted(interp, "error while matching pattern: %s", buf); return JIM_ERR; } if (match == REG_NOMATCH) { break; } num_matches++; Jim_AppendString(interp, resultObj, p, pmatch[0].rm_so); if (opt_command) { Jim_Obj *cmdListObj = Jim_DuplicateObj(interp, cmd_prefix); for (j = 0; j < MAX_SUB_MATCHES; j++) { if (pmatch[j].rm_so == -1) { break; } else { Jim_Obj *srcObj = Jim_NewStringObj(interp, p + pmatch[j].rm_so, pmatch[j].rm_eo - pmatch[j].rm_so); Jim_ListAppendElement(interp, cmdListObj, srcObj); } } Jim_IncrRefCount(cmdListObj); result = Jim_EvalObj(interp, cmdListObj); Jim_DecrRefCount(interp, cmdListObj); if (result != JIM_OK) { goto cmd_error; } Jim_AppendString(interp, resultObj, Jim_String(Jim_GetResult(interp)), -1); } else { for (j = 0; j < replace_len; j++) { int idx; int c = replace_str[j]; if (c == '&') { idx = 0; } else if (c == '\\' && j < replace_len) { c = replace_str[++j]; if ((c >= '0') && (c <= '9')) { idx = c - '0'; } else if ((c == '\\') || (c == '&')) { Jim_AppendString(interp, resultObj, replace_str + j, 1); continue; } else { Jim_AppendString(interp, resultObj, replace_str + j - 1, (j == replace_len) ? 1 : 2); continue; } } else { Jim_AppendString(interp, resultObj, replace_str + j, 1); continue; } if ((idx < MAX_SUB_MATCHES) && pmatch[idx].rm_so != -1 && pmatch[idx].rm_eo != -1) { Jim_AppendString(interp, resultObj, p + pmatch[idx].rm_so, pmatch[idx].rm_eo - pmatch[idx].rm_so); } } } p += pmatch[0].rm_eo; n -= pmatch[0].rm_eo; if (!opt_all || n == 0) { break; } regexec_flags = 0; if (pmatch[0].rm_eo == pmatch[0].rm_so) { if (pattern[0] == '^') { regexec_flags = REG_NOTBOL; } else { int charlen = utf8_charlen(p[0]); Jim_AppendString(interp, resultObj, p, charlen); p += charlen; n -= charlen; } } } Jim_AppendString(interp, resultObj, p, -1); cmd_error: if (result == JIM_OK) { if (argc - i == 4) { result = Jim_SetVariable(interp, varname, resultObj); if (result == JIM_OK) { Jim_SetResultInt(interp, num_matches); } } else { Jim_SetResult(interp, resultObj); result = JIM_OK; } } else { Jim_FreeObj(interp, resultObj); } if (opt_command) { Jim_DecrRefCount(interp, cmd_prefix); } Jim_DecrRefCount(interp, regcomp_obj); return result; } int Jim_regexpInit(Jim_Interp *interp) { Jim_PackageProvideCheck(interp, "regexp"); Jim_RegisterSimpleCmd(interp, "regexp", "?-option ...? exp string ?matchVar? ?subMatchVar ...?", 2, -1, Jim_RegexpCmd); Jim_RegisterSimpleCmd(interp, "regsub", "?-option ...? exp string subSpec ?varName?", 3, -1, Jim_RegsubCmd); return JIM_OK; } #include #include #include #include #include #ifdef HAVE_UTIMES #include #endif #ifdef HAVE_UNISTD_H #include #elif defined(_MSC_VER) #include #define F_OK 0 #define W_OK 2 #define R_OK 4 #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) #endif #if defined(__MINGW32__) || defined(__MSYS__) || defined(_MSC_VER) #define ISWINDOWS 1 #undef HAVE_SYMLINK #else #define ISWINDOWS 0 #endif #if defined(HAVE_STRUCT_STAT_ST_MTIMESPEC) #define STAT_MTIME_US(STAT) ((STAT).st_mtimespec.tv_sec * 1000000ll + (STAT).st_mtimespec.tv_nsec / 1000) #elif defined(HAVE_STRUCT_STAT_ST_MTIM) #define STAT_MTIME_US(STAT) ((STAT).st_mtim.tv_sec * 1000000ll + (STAT).st_mtim.tv_nsec / 1000) #endif static void JimFixPath(char *path) { if (ISWINDOWS) { char *p = path; while ((p = strchr(p, '\\')) != NULL) { *p++ = '/'; } } } static const char *JimGetFileType(int mode) { if (S_ISREG(mode)) { return "file"; } else if (S_ISDIR(mode)) { return "directory"; } #ifdef S_ISCHR else if (S_ISCHR(mode)) { return "characterSpecial"; } #endif #ifdef S_ISBLK else if (S_ISBLK(mode)) { return "blockSpecial"; } #endif #ifdef S_ISFIFO else if (S_ISFIFO(mode)) { return "fifo"; } #endif #ifdef S_ISLNK else if (S_ISLNK(mode)) { return "link"; } #endif #ifdef S_ISSOCK else if (S_ISSOCK(mode)) { return "socket"; } #endif return "unknown"; } static void AppendStatElement(Jim_Interp *interp, Jim_Obj *listObj, const char *key, jim_wide value) { Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, key, -1)); Jim_ListAppendElement(interp, listObj, Jim_NewIntObj(interp, value)); } int Jim_FileStoreStatData(Jim_Interp *interp, Jim_Obj *varName, const jim_stat_t *sb) { Jim_Obj *listObj = Jim_NewListObj(interp, NULL, 0); AppendStatElement(interp, listObj, "dev", sb->st_dev); AppendStatElement(interp, listObj, "ino", sb->st_ino); AppendStatElement(interp, listObj, "mode", sb->st_mode); AppendStatElement(interp, listObj, "nlink", sb->st_nlink); AppendStatElement(interp, listObj, "uid", sb->st_uid); AppendStatElement(interp, listObj, "gid", sb->st_gid); AppendStatElement(interp, listObj, "size", sb->st_size); AppendStatElement(interp, listObj, "atime", sb->st_atime); AppendStatElement(interp, listObj, "mtime", sb->st_mtime); AppendStatElement(interp, listObj, "ctime", sb->st_ctime); #ifdef STAT_MTIME_US AppendStatElement(interp, listObj, "mtimeus", STAT_MTIME_US(*sb)); #endif Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, "type", -1)); Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, JimGetFileType((int)sb->st_mode), -1)); if (varName) { Jim_Obj *objPtr; objPtr = Jim_GetVariable(interp, varName, JIM_NONE); if (objPtr) { Jim_Obj *objv[2]; objv[0] = objPtr; objv[1] = listObj; objPtr = Jim_DictMerge(interp, 2, objv); if (objPtr == NULL) { Jim_SetResultFormatted(interp, "can't set \"%#s(dev)\": variable isn't array", varName); Jim_FreeNewObj(interp, listObj); return JIM_ERR; } Jim_InvalidateStringRep(objPtr); Jim_FreeNewObj(interp, listObj); listObj = objPtr; } Jim_SetVariable(interp, varName, listObj); } Jim_SetResult(interp, listObj); return JIM_OK; } static int JimPathLenNoTrailingSlashes(const char *path, int len) { int i; for (i = len; i > 1 && path[i - 1] == '/'; i--) { if (ISWINDOWS && path[i - 2] == ':') { break; } } return i; } static Jim_Obj *JimStripTrailingSlashes(Jim_Interp *interp, Jim_Obj *objPtr) { int len = Jim_Length(objPtr); const char *path = Jim_String(objPtr); int i = JimPathLenNoTrailingSlashes(path, len); if (i != len) { objPtr = Jim_NewStringObj(interp, path, i); } Jim_IncrRefCount(objPtr); return objPtr; } static int file_cmd_dirname(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *objPtr = JimStripTrailingSlashes(interp, argv[0]); const char *path = Jim_String(objPtr); const char *p = strrchr(path, '/'); if (!p) { Jim_SetResultString(interp, ".", -1); } else if (p[1] == 0) { Jim_SetResult(interp, objPtr); } else if (p == path) { Jim_SetResultString(interp, "/", -1); } else if (ISWINDOWS && p[-1] == ':') { Jim_SetResultString(interp, path, p - path + 1); } else { int len = JimPathLenNoTrailingSlashes(path, p - path); Jim_SetResultString(interp, path, len); } Jim_DecrRefCount(interp, objPtr); return JIM_OK; } static int file_cmd_split(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *listObj = Jim_NewListObj(interp, NULL, 0); const char *path = Jim_String(argv[0]); if (*path == '/') { Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, "/", 1)); } while (1) { while (*path == '/') { path++; } if (*path) { const char *pt = strchr(path, '/'); if (pt) { Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, path, pt - path)); path = pt; continue; } Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, path, -1)); } break; } Jim_SetResult(interp, listObj); return JIM_OK; } static int file_cmd_rootname(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const char *path = Jim_String(argv[0]); const char *lastSlash = strrchr(path, '/'); const char *p = strrchr(path, '.'); if (p == NULL || (lastSlash != NULL && lastSlash > p)) { Jim_SetResult(interp, argv[0]); } else { Jim_SetResultString(interp, path, p - path); } return JIM_OK; } static int file_cmd_extension(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *objPtr = JimStripTrailingSlashes(interp, argv[0]); const char *path = Jim_String(objPtr); const char *lastSlash = strrchr(path, '/'); const char *p = strrchr(path, '.'); if (p == NULL || (lastSlash != NULL && lastSlash >= p)) { p = ""; } Jim_SetResultString(interp, p, -1); Jim_DecrRefCount(interp, objPtr); return JIM_OK; } static int file_cmd_tail(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *objPtr = JimStripTrailingSlashes(interp, argv[0]); const char *path = Jim_String(objPtr); const char *lastSlash = strrchr(path, '/'); if (lastSlash) { Jim_SetResultString(interp, lastSlash + 1, -1); } else { Jim_SetResult(interp, objPtr); } Jim_DecrRefCount(interp, objPtr); return JIM_OK; } #ifndef HAVE_RESTRICT #define restrict #endif static char *JimRealPath(const char *restrict path, char *restrict resolved_path, size_t len) { #if defined(HAVE__FULLPATH) return _fullpath(resolved_path, path, len); #elif defined(HAVE_REALPATH) return realpath(path, resolved_path); #else return NULL; #endif } static int file_cmd_normalize(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const char *path = Jim_String(argv[0]); char *newname = Jim_Alloc(MAXPATHLEN); if (JimRealPath(path, newname, MAXPATHLEN)) { JimFixPath(newname); Jim_SetResult(interp, Jim_NewStringObjNoAlloc(interp, newname, -1)); return JIM_OK; } Jim_Free(newname); Jim_SetResultFormatted(interp, "can't normalize \"%#s\": %s", argv[0], strerror(errno)); return JIM_ERR; } static int file_cmd_join(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int i; char *newname = Jim_Alloc(MAXPATHLEN + 1); char *last = newname; *newname = 0; for (i = 0; i < argc; i++) { int len; const char *part = Jim_GetString(argv[i], &len); if (*part == '/') { last = newname; } else if (ISWINDOWS && strchr(part, ':')) { last = newname; } else if (part[0] == '.') { if (part[1] == '/') { part += 2; len -= 2; } else if (part[1] == 0 && last != newname) { continue; } } if (last != newname && last[-1] != '/') { *last++ = '/'; } if (len) { if (last + len - newname >= MAXPATHLEN) { Jim_Free(newname); Jim_SetResultString(interp, "Path too long", -1); return JIM_ERR; } memcpy(last, part, len); last += len; } if (last > newname + 1 && last[-1] == '/') { if (!ISWINDOWS || !(last > newname + 2 && last[-2] == ':')) { *--last = 0; } } } *last = 0; Jim_SetResult(interp, Jim_NewStringObjNoAlloc(interp, newname, last - newname)); return JIM_OK; } static int file_access(Jim_Interp *interp, Jim_Obj *filename, int mode) { Jim_SetResultBool(interp, access(Jim_String(filename), mode) != -1); return JIM_OK; } static int file_cmd_readable(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return file_access(interp, argv[0], R_OK); } static int file_cmd_writable(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return file_access(interp, argv[0], W_OK); } static int file_cmd_executable(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { #ifdef X_OK return file_access(interp, argv[0], X_OK); #else Jim_SetResultBool(interp, 1); return JIM_OK; #endif } static int file_cmd_exists(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return file_access(interp, argv[0], F_OK); } static int file_cmd_delete(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int force = Jim_CompareStringImmediate(interp, argv[0], "-force"); if (force || Jim_CompareStringImmediate(interp, argv[0], "--")) { argc--; argv++; } while (argc--) { const char *path = Jim_String(argv[0]); if (unlink(path) == -1 && errno != ENOENT) { if (rmdir(path) == -1) { if (!force || Jim_EvalPrefix(interp, "file delete force", 1, argv) != JIM_OK) { Jim_SetResultFormatted(interp, "couldn't delete file \"%s\": %s", path, strerror(errno)); return JIM_ERR; } } } argv++; } return JIM_OK; } #ifdef HAVE_MKDIR_ONE_ARG #define MKDIR_DEFAULT(PATHNAME) mkdir(PATHNAME) #else #define MKDIR_DEFAULT(PATHNAME) mkdir(PATHNAME, 0755) #endif static int mkdir_all(char *path) { int ok = 1; goto first; while (ok--) { { char *slash = strrchr(path, '/'); if (slash && slash != path) { *slash = 0; if (mkdir_all(path) != 0) { return -1; } *slash = '/'; } } first: if (MKDIR_DEFAULT(path) == 0) { return 0; } if (errno == ENOENT) { continue; } if (errno == EEXIST || errno == ENOTDIR) { jim_stat_t sb; if (Jim_Stat(path, &sb) == 0 && S_ISDIR(sb.st_mode)) { return 0; } errno = EEXIST; } break; } return -1; } static int file_cmd_mkdir(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { while (argc--) { char *path = Jim_StrDup(Jim_String(argv[0])); int rc = mkdir_all(path); Jim_Free(path); if (rc != 0) { Jim_SetResultFormatted(interp, "can't create directory \"%#s\": %s", argv[0], strerror(errno)); return JIM_ERR; } argv++; } return JIM_OK; } static int file_cmd_tempfile(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int fd = Jim_MakeTempFile(interp, (argc >= 1) ? Jim_String(argv[0]) : NULL, 0); if (fd < 0) { return JIM_ERR; } close(fd); return JIM_OK; } static int file_cmd_rename(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const char *source; const char *dest; int force = 0; if (argc == 3) { if (!Jim_CompareStringImmediate(interp, argv[0], "-force")) { return -1; } force++; argv++; argc--; } source = Jim_String(argv[0]); dest = Jim_String(argv[1]); if (!force && access(dest, F_OK) == 0) { Jim_SetResultFormatted(interp, "error renaming \"%#s\" to \"%#s\": target exists", argv[0], argv[1]); return JIM_ERR; } #if ISWINDOWS if (access(dest, F_OK) == 0) { remove(dest); } #endif if (rename(source, dest) != 0) { Jim_SetResultFormatted(interp, "error renaming \"%#s\" to \"%#s\": %s", argv[0], argv[1], strerror(errno)); return JIM_ERR; } return JIM_OK; } #if defined(HAVE_LINK) && defined(HAVE_SYMLINK) static int file_cmd_link(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int ret; const char *source; const char *dest; static const char * const options[] = { "-hard", "-symbolic", NULL }; enum { OPT_HARD, OPT_SYMBOLIC, }; int option = OPT_HARD; if (argc == 3) { if (Jim_GetEnum(interp, argv[0], options, &option, NULL, JIM_ENUM_ABBREV | JIM_ERRMSG) != JIM_OK) { return JIM_ERR; } argv++; argc--; } dest = Jim_String(argv[0]); source = Jim_String(argv[1]); if (option == OPT_HARD) { ret = link(source, dest); } else { ret = symlink(source, dest); } if (ret != 0) { Jim_SetResultFormatted(interp, "error linking \"%#s\" to \"%#s\": %s", argv[0], argv[1], strerror(errno)); return JIM_ERR; } return JIM_OK; } #endif static int file_stat(Jim_Interp *interp, Jim_Obj *filename, jim_stat_t *sb) { const char *path = Jim_String(filename); if (Jim_Stat(path, sb) == -1) { Jim_SetResultFormatted(interp, "could not read \"%#s\": %s", filename, strerror(errno)); return JIM_ERR; } return JIM_OK; } #ifdef Jim_LinkStat static int file_lstat(Jim_Interp *interp, Jim_Obj *filename, jim_stat_t *sb) { const char *path = Jim_String(filename); if (Jim_LinkStat(path, sb) == -1) { Jim_SetResultFormatted(interp, "could not read \"%#s\": %s", filename, strerror(errno)); return JIM_ERR; } return JIM_OK; } #else #define file_lstat file_stat #endif static int file_cmd_atime(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { jim_stat_t sb; if (file_stat(interp, argv[0], &sb) != JIM_OK) { return JIM_ERR; } Jim_SetResultInt(interp, sb.st_atime); return JIM_OK; } static int JimSetFileTimes(Jim_Interp *interp, const char *filename, jim_wide us) { #ifdef HAVE_UTIMES struct timeval times[2]; times[1].tv_sec = times[0].tv_sec = us / 1000000; times[1].tv_usec = times[0].tv_usec = us % 1000000; if (utimes(filename, times) != 0) { Jim_SetResultFormatted(interp, "can't set time on \"%s\": %s", filename, strerror(errno)); return JIM_ERR; } return JIM_OK; #else Jim_SetResultString(interp, "Not implemented", -1); return JIM_ERR; #endif } static int file_cmd_mtime(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { jim_stat_t sb; if (argc == 2) { jim_wide secs; if (Jim_GetWide(interp, argv[1], &secs) != JIM_OK) { return JIM_ERR; } return JimSetFileTimes(interp, Jim_String(argv[0]), secs * 1000000); } if (file_stat(interp, argv[0], &sb) != JIM_OK) { return JIM_ERR; } Jim_SetResultInt(interp, sb.st_mtime); return JIM_OK; } #ifdef STAT_MTIME_US static int file_cmd_mtimeus(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { jim_stat_t sb; if (argc == 2) { jim_wide us; if (Jim_GetWide(interp, argv[1], &us) != JIM_OK) { return JIM_ERR; } return JimSetFileTimes(interp, Jim_String(argv[0]), us); } if (file_stat(interp, argv[0], &sb) != JIM_OK) { return JIM_ERR; } Jim_SetResultInt(interp, STAT_MTIME_US(sb)); return JIM_OK; } #endif static int file_cmd_copy(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return Jim_EvalPrefix(interp, "file copy", argc, argv); } static int file_cmd_size(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { jim_stat_t sb; if (file_stat(interp, argv[0], &sb) != JIM_OK) { return JIM_ERR; } Jim_SetResultInt(interp, sb.st_size); return JIM_OK; } static int file_cmd_isdirectory(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { jim_stat_t sb; int ret = 0; if (file_stat(interp, argv[0], &sb) == JIM_OK) { ret = S_ISDIR(sb.st_mode); } Jim_SetResultInt(interp, ret); return JIM_OK; } static int file_cmd_isfile(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { jim_stat_t sb; int ret = 0; if (file_stat(interp, argv[0], &sb) == JIM_OK) { ret = S_ISREG(sb.st_mode); } Jim_SetResultInt(interp, ret); return JIM_OK; } #ifdef HAVE_GETEUID static int file_cmd_owned(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { jim_stat_t sb; int ret = 0; if (file_stat(interp, argv[0], &sb) == JIM_OK) { ret = (geteuid() == sb.st_uid); } Jim_SetResultInt(interp, ret); return JIM_OK; } #endif #if defined(HAVE_READLINK) static int file_cmd_readlink(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const char *path = Jim_String(argv[0]); char *linkValue = Jim_Alloc(MAXPATHLEN + 1); int linkLength = readlink(path, linkValue, MAXPATHLEN); if (linkLength == -1) { Jim_Free(linkValue); Jim_SetResultFormatted(interp, "could not read link \"%#s\": %s", argv[0], strerror(errno)); return JIM_ERR; } linkValue[linkLength] = 0; Jim_SetResult(interp, Jim_NewStringObjNoAlloc(interp, linkValue, linkLength)); return JIM_OK; } #endif static int file_cmd_type(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { jim_stat_t sb; if (file_lstat(interp, argv[0], &sb) != JIM_OK) { return JIM_ERR; } Jim_SetResultString(interp, JimGetFileType((int)sb.st_mode), -1); return JIM_OK; } #ifdef Jim_LinkStat static int file_cmd_lstat(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { jim_stat_t sb; if (file_lstat(interp, argv[0], &sb) != JIM_OK) { return JIM_ERR; } return Jim_FileStoreStatData(interp, argc == 2 ? argv[1] : NULL, &sb); } #else #define file_cmd_lstat file_cmd_stat #endif static int file_cmd_stat(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { jim_stat_t sb; if (file_stat(interp, argv[0], &sb) != JIM_OK) { return JIM_ERR; } return Jim_FileStoreStatData(interp, argc == 2 ? argv[1] : NULL, &sb); } static const jim_subcmd_type file_command_table[] = { { "atime", "name", file_cmd_atime, 1, 1, }, { "mtime", "name ?time?", file_cmd_mtime, 1, 2, }, #ifdef STAT_MTIME_US { "mtimeus", "name ?time?", file_cmd_mtimeus, 1, 2, }, #endif { "copy", "?-force? source dest", file_cmd_copy, 2, 3, }, { "dirname", "name", file_cmd_dirname, 1, 1, }, { "rootname", "name", file_cmd_rootname, 1, 1, }, { "extension", "name", file_cmd_extension, 1, 1, }, { "tail", "name", file_cmd_tail, 1, 1, }, { "split", "name", file_cmd_split, 1, 1, }, { "normalize", "name", file_cmd_normalize, 1, 1, }, { "join", "name ?name ...?", file_cmd_join, 1, -1, }, { "readable", "name", file_cmd_readable, 1, 1, }, { "writable", "name", file_cmd_writable, 1, 1, }, { "executable", "name", file_cmd_executable, 1, 1, }, { "exists", "name", file_cmd_exists, 1, 1, }, { "delete", "?-force|--? name ...", file_cmd_delete, 1, -1, JIM_MODFLAG_NOTAINT, }, { "mkdir", "dir ...", file_cmd_mkdir, 1, -1, JIM_MODFLAG_NOTAINT, }, { "tempfile", "?template?", file_cmd_tempfile, 0, 1, JIM_MODFLAG_NOTAINT, }, { "rename", "?-force? source dest", file_cmd_rename, 2, 3, JIM_MODFLAG_NOTAINT, }, #if defined(HAVE_LINK) && defined(HAVE_SYMLINK) { "link", "?-symbolic|-hard? newname target", file_cmd_link, 2, 3, }, #endif #if defined(HAVE_READLINK) { "readlink", "name", file_cmd_readlink, 1, 1, }, #endif { "size", "name", file_cmd_size, 1, 1, }, { "stat", "name ?var?", file_cmd_stat, 1, 2, }, { "lstat", "name ?var?", file_cmd_lstat, 1, 2, }, { "type", "name", file_cmd_type, 1, 1, }, #ifdef HAVE_GETEUID { "owned", "name", file_cmd_owned, 1, 1, }, #endif { "isdirectory", "name", file_cmd_isdirectory, 1, 1, }, { "isfile", "name", file_cmd_isfile, 1, 1, }, { NULL } }; static int Jim_CdCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const char *path = Jim_String(argv[1]); if (chdir(path) != 0) { Jim_SetResultFormatted(interp, "couldn't change working directory to \"%s\": %s", path, strerror(errno)); return JIM_ERR; } return JIM_OK; } static int Jim_PwdCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { char *cwd = Jim_Alloc(MAXPATHLEN); if (getcwd(cwd, MAXPATHLEN) == NULL) { Jim_SetResultString(interp, "Failed to get pwd", -1); Jim_Free(cwd); return JIM_ERR; } JimFixPath(cwd); Jim_SetResultString(interp, cwd, -1); Jim_Free(cwd); return JIM_OK; } int Jim_fileInit(Jim_Interp *interp) { Jim_PackageProvideCheck(interp, "file"); Jim_RegisterSubCmd(interp, "file", file_command_table, NULL); Jim_RegisterSimpleCmd(interp, "pwd", "", 0, 0, Jim_PwdCmd); Jim_RegisterCmd(interp, "cd", "dirname", 1, 1, Jim_CdCmd, NULL, NULL, JIM_CMD_NOTAINT); return JIM_OK; } #include #include #if (!(defined(HAVE_VFORK) || defined(HAVE_FORK)) || !defined(HAVE_WAITPID)) && !defined(__MINGW32__) static int Jim_ExecCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *cmdlineObj = Jim_NewEmptyStringObj(interp); int i, j; int rc; for (i = 1; i < argc; i++) { int len; const char *arg = Jim_GetString(argv[i], &len); if (i > 1) { Jim_AppendString(interp, cmdlineObj, " ", 1); } if (strpbrk(arg, "\\\" ") == NULL) { Jim_AppendString(interp, cmdlineObj, arg, len); continue; } Jim_AppendString(interp, cmdlineObj, "\"", 1); for (j = 0; j < len; j++) { if (arg[j] == '\\' || arg[j] == '"') { Jim_AppendString(interp, cmdlineObj, "\\", 1); } Jim_AppendString(interp, cmdlineObj, &arg[j], 1); } Jim_AppendString(interp, cmdlineObj, "\"", 1); } rc = system(Jim_String(cmdlineObj)); Jim_FreeNewObj(interp, cmdlineObj); if (rc) { Jim_Obj *errorCode = Jim_NewListObj(interp, NULL, 0); Jim_ListAppendElement(interp, errorCode, Jim_NewStringObj(interp, "CHILDSTATUS", -1)); Jim_ListAppendElement(interp, errorCode, Jim_NewIntObj(interp, 0)); Jim_ListAppendElement(interp, errorCode, Jim_NewIntObj(interp, rc)); Jim_SetGlobalVariableStr(interp, "errorCode", errorCode); return JIM_ERR; } return JIM_OK; } int Jim_execInit(Jim_Interp *interp) { Jim_PackageProvideCheck(interp, "exec"); Jim_RegisterSimpleCmd(interp, "exec", "arg ?arg ...? ?&?", 1, -1, Jim_ExecCmd); return JIM_OK; } #else #include #include #include struct WaitInfoTable; static char **JimOriginalEnviron(void); static char **JimSaveEnv(char **env); static void JimRestoreEnv(char **env); static int JimCreatePipeline(Jim_Interp *interp, int argc, Jim_Obj *const *argv, phandle_t **pidArrayPtr, int *outPipePtr, int *errFilePtr); static void JimDetachPids(struct WaitInfoTable *table, int numPids, const phandle_t *pidPtr); static int JimCleanupChildren(Jim_Interp *interp, int numPids, phandle_t *pidPtr, Jim_Obj *errStrObj); static int Jim_WaitCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv); #if defined(__MINGW32__) static phandle_t JimStartWinProcess(Jim_Interp *interp, char **argv, char **env, int inputId, int outputId, int errorId); #endif static void Jim_RemoveTrailingNewline(Jim_Obj *objPtr) { int len; const char *s = Jim_GetString(objPtr, &len); if (len > 0 && s[len - 1] == '\n') { objPtr->length--; objPtr->bytes[objPtr->length] = '\0'; } } static int JimAppendStreamToString(Jim_Interp *interp, int fd, Jim_Obj *strObj) { char buf[256]; int ret = 0; while (1) { int retval = read(fd, buf, sizeof(buf)); if (retval > 0) { ret = 1; Jim_AppendString(interp, strObj, buf, retval); } if (retval <= 0) { break; } } close(fd); return ret; } static char **JimBuildEnv(Jim_Interp *interp) { int i; int size; int num; int n; char **envptr; char *envdata; Jim_Obj *objPtr = Jim_GetGlobalVariableStr(interp, "env", JIM_NONE); if (!objPtr) { return JimOriginalEnviron(); } num = Jim_ListLength(interp, objPtr); if (num % 2) { num--; } size = Jim_Length(objPtr) + 2; envptr = Jim_Alloc(sizeof(*envptr) * (num / 2 + 1) + size); envdata = (char *)&envptr[num / 2 + 1]; n = 0; for (i = 0; i < num; i += 2) { const char *s1, *s2; Jim_Obj *elemObj; Jim_ListIndex(interp, objPtr, i, &elemObj, JIM_NONE); s1 = Jim_String(elemObj); Jim_ListIndex(interp, objPtr, i + 1, &elemObj, JIM_NONE); s2 = Jim_String(elemObj); envptr[n] = envdata; envdata += sprintf(envdata, "%s=%s", s1, s2); envdata++; n++; } envptr[n] = NULL; *envdata = 0; return envptr; } static void JimFreeEnv(char **env, char **original_environ) { if (env != original_environ) { Jim_Free(env); } } static Jim_Obj *JimMakeErrorCode(Jim_Interp *interp, long pid, int waitStatus, Jim_Obj *errStrObj) { Jim_Obj *errorCode = Jim_NewListObj(interp, NULL, 0); if (pid <= 0) { Jim_ListAppendElement(interp, errorCode, Jim_NewStringObj(interp, "NONE", -1)); Jim_ListAppendElement(interp, errorCode, Jim_NewIntObj(interp, pid)); Jim_ListAppendElement(interp, errorCode, Jim_NewIntObj(interp, -1)); } else if (WIFEXITED(waitStatus)) { Jim_ListAppendElement(interp, errorCode, Jim_NewStringObj(interp, "CHILDSTATUS", -1)); Jim_ListAppendElement(interp, errorCode, Jim_NewIntObj(interp, pid)); Jim_ListAppendElement(interp, errorCode, Jim_NewIntObj(interp, WEXITSTATUS(waitStatus))); } else { const char *type; const char *action; const char *signame; if (WIFSIGNALED(waitStatus)) { type = "CHILDKILLED"; action = "killed"; signame = Jim_SignalId(WTERMSIG(waitStatus)); } else { type = "CHILDSUSP"; action = "suspended"; signame = "none"; } Jim_ListAppendElement(interp, errorCode, Jim_NewStringObj(interp, type, -1)); if (errStrObj) { Jim_AppendStrings(interp, errStrObj, "child ", action, " by signal ", Jim_SignalId(WTERMSIG(waitStatus)), "\n", NULL); } Jim_ListAppendElement(interp, errorCode, Jim_NewIntObj(interp, pid)); Jim_ListAppendElement(interp, errorCode, Jim_NewStringObj(interp, signame, -1)); } return errorCode; } static int JimCheckWaitStatus(Jim_Interp *interp, long pid, int waitStatus, Jim_Obj *errStrObj) { if (WIFEXITED(waitStatus) && WEXITSTATUS(waitStatus) == 0) { return JIM_OK; } Jim_SetGlobalVariableStr(interp, "errorCode", JimMakeErrorCode(interp, pid, waitStatus, errStrObj)); return JIM_ERR; } struct WaitInfo { phandle_t phandle; int status; int flags; }; struct WaitInfoTable { struct WaitInfo *info; int size; int used; int refcount; }; #define WI_DETACHED 2 #define WAIT_TABLE_GROW_BY 4 static void JimFreeWaitInfoTable(struct Jim_Interp *interp, void *privData) { struct WaitInfoTable *table = privData; if (--table->refcount == 0) { Jim_Free(table->info); Jim_Free(table); } } static struct WaitInfoTable *JimAllocWaitInfoTable(void) { struct WaitInfoTable *table = Jim_Alloc(sizeof(*table)); table->info = NULL; table->size = table->used = 0; table->refcount = 0; return table; } static int JimWaitRemove(struct WaitInfoTable *table, phandle_t phandle) { int i; for (i = 0; i < table->used; i++) { if (phandle == table->info[i].phandle) { if (i != table->used - 1) { table->info[i] = table->info[table->used - 1]; } table->used--; return 0; } } return -1; } static int Jim_ExecCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int outputId; int errorId; phandle_t *pidPtr; int numPids, result; int child_siginfo = 1; Jim_Obj *childErrObj; Jim_Obj *errStrObj; struct WaitInfoTable *table = Jim_CmdPrivData(interp); if (argc > 1 && Jim_CompareStringImmediate(interp, argv[argc - 1], "&")) { Jim_Obj *listObj; int i; argc--; numPids = JimCreatePipeline(interp, argc - 1, argv + 1, &pidPtr, NULL, NULL); if (numPids < 0) { return JIM_ERR; } listObj = Jim_NewListObj(interp, NULL, 0); for (i = 0; i < numPids; i++) { Jim_ListAppendElement(interp, listObj, Jim_NewIntObj(interp, JimProcessPid(pidPtr[i]))); } Jim_SetResult(interp, listObj); JimDetachPids(table, numPids, pidPtr); Jim_Free(pidPtr); return JIM_OK; } numPids = JimCreatePipeline(interp, argc - 1, argv + 1, &pidPtr, &outputId, &errorId); if (numPids < 0) { return JIM_ERR; } result = JIM_OK; errStrObj = Jim_NewStringObj(interp, "", 0); if (outputId != -1) { if (JimAppendStreamToString(interp, outputId, errStrObj) < 0) { result = JIM_ERR; Jim_SetResultErrno(interp, "error reading from output pipe"); } } childErrObj = Jim_NewStringObj(interp, "", 0); Jim_IncrRefCount(childErrObj); if (JimCleanupChildren(interp, numPids, pidPtr, childErrObj) != JIM_OK) { result = JIM_ERR; } if (errorId != -1) { int ret; Jim_Lseek(errorId, 0, SEEK_SET); ret = JimAppendStreamToString(interp, errorId, errStrObj); if (ret < 0) { Jim_SetResultErrno(interp, "error reading from error pipe"); result = JIM_ERR; } else if (ret > 0) { child_siginfo = 0; } } if (child_siginfo) { Jim_AppendObj(interp, errStrObj, childErrObj); } Jim_DecrRefCount(interp, childErrObj); Jim_RemoveTrailingNewline(errStrObj); Jim_SetResult(interp, errStrObj); return result; } static long JimWaitForProcess(struct WaitInfoTable *table, phandle_t phandle, int *statusPtr) { if (JimWaitRemove(table, phandle) == 0) { return waitpid(phandle, statusPtr, 0); } return -1; } static void JimDetachPids(struct WaitInfoTable *table, int numPids, const phandle_t *pidPtr) { int j; for (j = 0; j < numPids; j++) { int i; for (i = 0; i < table->used; i++) { if (pidPtr[j] == table->info[i].phandle) { table->info[i].flags |= WI_DETACHED; break; } } } } static int JimGetChannelFd(Jim_Interp *interp, const char *name) { Jim_Obj *objv[2]; objv[0] = Jim_NewStringObj(interp, name, -1); objv[1] = Jim_NewStringObj(interp, "getfd", -1); if (Jim_EvalObjVector(interp, 2, objv) == JIM_OK) { jim_wide fd; if (Jim_GetWide(interp, Jim_GetResult(interp), &fd) == JIM_OK) { return dup(fd); } } return -1; } static void JimReapDetachedPids(struct WaitInfoTable *table) { struct WaitInfo *waitPtr; int count; int dest; if (!table) { return; } waitPtr = table->info; dest = 0; for (count = table->used; count > 0; waitPtr++, count--) { if (waitPtr->flags & WI_DETACHED) { int status; long pid = waitpid(waitPtr->phandle, &status, WNOHANG); if (pid > 0) { table->used--; continue; } } if (waitPtr != &table->info[dest]) { table->info[dest] = *waitPtr; } dest++; } } static int Jim_WaitCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { struct WaitInfoTable *table = Jim_CmdPrivData(interp); int nohang = 0; long pid; phandle_t phandle; int status; Jim_Obj *errCodeObj; if (argc == 1) { JimReapDetachedPids(table); return JIM_OK; } if (argc > 1 && Jim_CompareStringImmediate(interp, argv[1], "-nohang")) { nohang = 1; } if (argc != nohang + 2) { return JIM_USAGE; } if (Jim_GetLong(interp, argv[nohang + 1], &pid) != JIM_OK) { return JIM_ERR; } phandle = JimWaitPid(pid, &status, nohang ? WNOHANG : 0); if (phandle == JIM_BAD_PHANDLE) { pid = -1; } #ifndef __MINGW32__ else if (pid < 0) { pid = phandle; } else if (phandle == 0) { pid = 0; } #endif errCodeObj = JimMakeErrorCode(interp, pid, status, NULL); if (phandle != JIM_BAD_PHANDLE && (WIFEXITED(status) || WIFSIGNALED(status))) { JimWaitRemove(table, phandle); } Jim_SetResult(interp, errCodeObj); return JIM_OK; } static int Jim_PidCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_SetResultInt(interp, (jim_wide)getpid()); return JIM_OK; } #define JIM_ETT_IN 0x0001 #define JIM_ETT_OUT 0x0002 #define JIM_ETT_ERR 0x0004 #define JIM_ETT_PIPE 0x0008 #define JIM_ETT_NOARG 0x0010 #define JIM_ETT_APPEND 0x0020 #define JIM_ETT_STR 0x0040 #define JIM_ETT_DUPERR 0x0080 #define JIM_ETT_HANDLE 0x0100 #define JIM_ETT_CMD 0xF000 #define JIM_ETT_BAD 0xF001 struct redir_type_t { const char *prefix; unsigned flags; }; static const struct redir_type_t redir_types[] = { { "<<@", JIM_ETT_IN | JIM_ETT_HANDLE | JIM_ETT_STR }, { "<<", JIM_ETT_IN | JIM_ETT_STR }, { "<@", JIM_ETT_IN | JIM_ETT_HANDLE }, { "<", JIM_ETT_IN }, { "2>>", JIM_ETT_ERR | JIM_ETT_APPEND }, { "2>@", JIM_ETT_ERR | JIM_ETT_HANDLE }, { "2>", JIM_ETT_ERR }, { ">>&", JIM_ETT_OUT | JIM_ETT_APPEND | JIM_ETT_DUPERR }, { ">>", JIM_ETT_OUT | JIM_ETT_APPEND }, { ">&@", JIM_ETT_OUT | JIM_ETT_HANDLE | JIM_ETT_DUPERR }, { ">@", JIM_ETT_OUT | JIM_ETT_HANDLE }, { ">&", JIM_ETT_OUT | JIM_ETT_DUPERR }, { ">", JIM_ETT_OUT }, { "|&", JIM_ETT_PIPE | JIM_ETT_DUPERR }, { "|", JIM_ETT_PIPE }, { NULL } }; static unsigned JimExecClassifyArg(const char *arg) { int i; for (i = 0; redir_types[i].prefix; i++) { int len = strlen(redir_types[i].prefix); if (strncmp(arg, redir_types[i].prefix, len) == 0) { if (strlen(arg) > len) { if (redir_types[i].flags & JIM_ETT_NOARG) { return JIM_ETT_BAD; } return redir_types[i].flags; } return redir_types[i].flags | JIM_ETT_NOARG; } } return JIM_ETT_CMD; } static int JimParsePipeline(Jim_Interp *interp, int argc, Jim_Obj *const *argv, Jim_Obj *cmdList, Jim_Obj *redirectList) { int i; int first = 1; const char *arg = NULL; for (i = 0; i < argc; i++) { unsigned ett; if (first) { if (Jim_ListLength(interp, argv[i]) == 0) { Jim_SetResultString(interp, "empty command list", -1); return JIM_ERR; } Jim_ListAppendElement(interp, cmdList, argv[i]); first = 0; continue; } arg = Jim_String(argv[i]); ett = JimExecClassifyArg(arg); if (ett == JIM_ETT_BAD || ett == JIM_ETT_CMD) { Jim_SetResultFormatted(interp, "invalid redirection %s", arg); return JIM_ERR; } if (ett & JIM_ETT_PIPE) { Jim_ListAppendElement(interp, cmdList, argv[i]); first = 1; continue; } Jim_ListAppendElement(interp, redirectList, argv[i]); if ((ett & JIM_ETT_NOARG)) { if (i >= argc - 1) { Jim_SetResultFormatted(interp, "can't specify \"%#s\" as last word in command", argv[i]); return -1; } i++; Jim_ListAppendElement(interp, redirectList, argv[i]); } } if (first) { if (Jim_ListLength(interp, cmdList)) { Jim_SetResultFormatted(interp, "cmdlist required after %s", arg); } else { Jim_SetResultString(interp, "cmdlist is required", -1); } return JIM_ERR; } return JIM_OK; } static int JimParsePipelineLegacy(Jim_Interp *interp, int argc, Jim_Obj *const *argv, Jim_Obj *cmdList, Jim_Obj *redirectList) { int i; Jim_Obj *cmdObj = Jim_NewListObj(interp, NULL, 0); Jim_ListAppendElement(interp, cmdList, cmdObj); const char *arg = NULL; for (i = 0; i < argc; i++) { arg = Jim_String(argv[i]); unsigned ett = JimExecClassifyArg(arg); if (ett == JIM_ETT_BAD) { Jim_SetResultFormatted(interp, "invalid: %s", arg); return JIM_ERR; } if (ett == JIM_ETT_CMD) { Jim_ListAppendElement(interp, cmdObj, argv[i]); continue; } if (ett & JIM_ETT_PIPE) { if (Jim_ListLength(interp, cmdObj) == 0) { goto missing_cmd; } Jim_ListAppendElement(interp, cmdList, argv[i]); cmdObj = Jim_NewListObj(interp, NULL, 0); Jim_ListAppendElement(interp, cmdList, cmdObj); continue; } Jim_ListAppendElement(interp, redirectList, argv[i]); if ((ett & JIM_ETT_NOARG)) { if (i >= argc - 1) { Jim_SetResultFormatted(interp, "can't specify \"%#s\" as last word in command", argv[i]); return -1; } i++; Jim_ListAppendElement(interp, redirectList, argv[i]); } } if (Jim_ListLength(interp, cmdObj) == 0) { missing_cmd: if (arg && *arg == '|') { Jim_SetResultString(interp, "illegal use of | or |& in command", -1); } else { Jim_SetResultString(interp, "didn't specify command to execute", -1); } return JIM_ERR; } return JIM_OK; } static int JimExecPipeline(Jim_Interp *interp, Jim_Obj *cmdList, Jim_Obj *redirectList, phandle_t **pidArrayPtr, int *outPipePtr, int *errFilePtr) { phandle_t *pidPtr = NULL; /* Points to alloc-ed array holding all * the pids of child processes. */ int numPids = 0; /* Actual number of processes that exist * at *pidPtr right now. */ int cmdCount; /* Count of number of distinct commands * found in argc/argv. */ const char *input = NULL; /* Describes input for pipeline, depending * on "inputFile". NULL means take input * from stdin/pipe. */ int input_len = 0; #define FILE_NAME 0 #define FILE_APPEND 1 #define FILE_HANDLE 2 #define FILE_TEXT 3 int inputFile = FILE_NAME; /* 1 means input is name of input file. * 2 means input is filehandle name. * 0 means input holds actual * text to be input to command. */ int outputFile = FILE_NAME; /* 0 means output is the name of output file. * 1 means output is the name of output file, and append. * 2 means output is filehandle name. * All this is ignored if output is NULL */ int errorFile = FILE_NAME; /* 0 means error is the name of error file. * 1 means error is the name of error file, and append. * 2 means error is filehandle name. * All this is ignored if error is NULL */ const char *output = NULL; /* Holds name of output file to pipe to, * or NULL if output goes to stdout/pipe. */ const char *error = NULL; /* Holds name of stderr file to pipe to, * or NULL if stderr goes to stderr/pipe. */ int inputId = -1; int outputId = -1; int errorId = -1; int lastOutputId = -1; int pipeIds[2]; int i; phandle_t phandle; char **save_environ; #if defined(HAVE_EXECVPE) && !defined(__MINGW32__) char **child_environ; #endif struct WaitInfoTable *table = Jim_CmdPrivData(interp); if (outPipePtr != NULL) { *outPipePtr = -1; } if (errFilePtr != NULL) { *errFilePtr = -1; } pipeIds[0] = pipeIds[1] = -1; int redir_len = Jim_ListLength(interp, redirectList); for (i = 0; i < redir_len; i++) { int len; int item_len; Jim_Obj *redirObj = Jim_ListGetIndex(interp, redirectList, i); const char *arg = Jim_GetString(redirObj, &len); unsigned ett = JimExecClassifyArg(arg); const char *item; int type = FILE_NAME; if ((ett & JIM_ETT_NOARG) == 0) { item = arg + 1; if (ett & JIM_ETT_HANDLE) { item++; } if (ett & JIM_ETT_APPEND) { item++; } if (ett & JIM_ETT_DUPERR) { item++; } if (ett & JIM_ETT_ERR) { item++; } if (ett & JIM_ETT_STR) { type = FILE_TEXT; item++; } item_len = len - (item - arg); } else { i++; item = Jim_GetString(Jim_ListGetIndex(interp, redirectList, i), &item_len); } if (ett & JIM_ETT_HANDLE) { type = FILE_HANDLE; } if (ett & JIM_ETT_APPEND) { type = FILE_APPEND; } if (ett & JIM_ETT_STR) { type = FILE_TEXT; } if (ett & JIM_ETT_IN) { input = item; input_len = item_len; inputFile = type; } else if (ett & JIM_ETT_OUT) { output = item; outputFile = type; if (ett & JIM_ETT_DUPERR) { error = output; errorFile = outputFile; } } else if (ett & JIM_ETT_ERR) { error = item; errorFile = type; } } save_environ = JimSaveEnv(JimBuildEnv(interp)); if (input != NULL) { if (inputFile == FILE_TEXT) { inputId = Jim_MakeTempFile(interp, NULL, 1); if (inputId == -1) { goto error; } if (write(inputId, input, input_len) != input_len) { Jim_SetResultErrno(interp, "couldn't write temp file"); close(inputId); goto error; } Jim_Lseek(inputId, 0L, SEEK_SET); } else if (inputFile == FILE_HANDLE) { inputId = JimGetChannelFd(interp, input); if (inputId < 0) { goto error; } } else { inputId = Jim_OpenForRead(input); if (inputId == -1) { Jim_SetResultFormatted(interp, "couldn't read file \"%s\": %s", input, strerror(Jim_Errno())); goto error; } } } if (output != NULL) { if (outputFile == FILE_HANDLE) { lastOutputId = JimGetChannelFd(interp, output); if (lastOutputId < 0) { goto error; } } else { lastOutputId = Jim_OpenForWrite(output, outputFile == FILE_APPEND); if (lastOutputId == -1) { Jim_SetResultFormatted(interp, "couldn't write file \"%s\": %s", output, strerror(Jim_Errno())); goto error; } } } else if (outPipePtr != NULL) { if (pipe(pipeIds) != 0) { Jim_SetResultErrno(interp, "couldn't create output pipe"); goto error; } lastOutputId = pipeIds[1]; *outPipePtr = pipeIds[0]; pipeIds[0] = pipeIds[1] = -1; } if (error != NULL) { if (errorFile == FILE_HANDLE) { if (strcmp(error, "1") == 0) { if (lastOutputId != -1) { errorId = dup(lastOutputId); } else { error = "stdout"; } } if (errorId == -1) { errorId = JimGetChannelFd(interp, error); if (errorId < 0) { goto error; } } } else { errorId = Jim_OpenForWrite(error, errorFile == FILE_APPEND); if (errorId == -1) { Jim_SetResultFormatted(interp, "couldn't write file \"%s\": %s", error, strerror(Jim_Errno())); goto error; } } } else if (errFilePtr != NULL) { errorId = Jim_MakeTempFile(interp, NULL, 1); if (errorId == -1) { goto error; } *errFilePtr = dup(errorId); } int cmd_list_size = Jim_ListLength(interp, cmdList); cmdCount = (cmd_list_size + 1) / 2; pidPtr = Jim_Alloc(cmdCount * sizeof(*pidPtr)); for (i = 0; i < cmd_list_size; ) { char **arg_array; int j; int origErrorId = errorId; Jim_Obj *cmdObj = Jim_ListGetIndex(interp, cmdList, i++); int cmd_len = Jim_ListLength(interp, cmdObj); Jim_Obj *sepObj = NULL; if (i < cmd_list_size - 1) { sepObj = Jim_ListGetIndex(interp, cmdList, i++); } arg_array = Jim_Alloc((cmd_len + 1) * sizeof(*arg_array)); for (j = 0; j < cmd_len; j++) { arg_array[j] = (char *)Jim_String(Jim_ListGetIndex(interp, cmdObj, j)); } arg_array[j] = NULL; if (sepObj == NULL) { outputId = lastOutputId; lastOutputId = -1; } else { if (pipe(pipeIds) != 0) { Jim_SetResultErrno(interp, "couldn't create pipe"); Jim_Free(arg_array); goto error; } outputId = pipeIds[1]; } if (sepObj && Jim_CompareStringImmediate(interp, sepObj, "|&")) { errorId = outputId; } #ifdef __MINGW32__ phandle = JimStartWinProcess(interp, &arg_array[0], save_environ, inputId, outputId, errorId); if (phandle == JIM_BAD_PHANDLE) { Jim_SetResultFormatted(interp, "couldn't exec \"%s\"", arg_array[0]); goto error; } #else int argv0_len = strlen(arg_array[0]); #ifdef HAVE_EXECVPE child_environ = Jim_GetEnviron(); #endif #ifdef HAVE_VFORK phandle = vfork(); #else phandle = fork(); #endif if (phandle < 0) { Jim_SetResultErrno(interp, "couldn't fork child process"); goto error; } if (phandle == 0) { if (inputId != -1 && inputId != fileno(stdin)) { dup2(inputId, fileno(stdin)); close(inputId); } if (outputId != -1 && outputId != fileno(stdout)) { dup2(outputId, fileno(stdout)); if (outputId != errorId) { close(outputId); } } if (errorId != -1 && errorId != fileno(stderr)) { dup2(errorId, fileno(stderr)); close(errorId); } if (outPipePtr && *outPipePtr != -1) { close(*outPipePtr); } if (errFilePtr && *errFilePtr != -1) { close(*errFilePtr); } if (pipeIds[0] != -1) { close(pipeIds[0]); } if (lastOutputId != -1) { close(lastOutputId); } execvpe(arg_array[0], arg_array, child_environ); if (write(fileno(stderr), "couldn't exec \"", 15) && write(fileno(stderr), arg_array[0], argv0_len) && write(fileno(stderr), "\"\n", 2)) { } #ifdef JIM_MAINTAINER { static char *const false_argv[2] = {"false", NULL}; execvp(false_argv[0],false_argv); } #endif _exit(127); } #endif Jim_Free(arg_array); if (table->used == table->size) { table->size += WAIT_TABLE_GROW_BY; table->info = Jim_Realloc(table->info, table->size * sizeof(*table->info)); } table->info[table->used].phandle = phandle; table->info[table->used].flags = 0; table->used++; pidPtr[numPids++] = phandle; errorId = origErrorId; if (inputId != -1) { close(inputId); } if (outputId != -1) { close(outputId); } inputId = pipeIds[0]; pipeIds[0] = pipeIds[1] = -1; } *pidArrayPtr = pidPtr; cleanup: if (inputId != -1) { close(inputId); } if (lastOutputId != -1) { close(lastOutputId); } if (errorId != -1) { close(errorId); } JimRestoreEnv(save_environ); return numPids; error: if ((outPipePtr != NULL) && (*outPipePtr != -1)) { close(*outPipePtr); *outPipePtr = -1; } if ((errFilePtr != NULL) && (*errFilePtr != -1)) { close(*errFilePtr); *errFilePtr = -1; } if (pipeIds[0] != -1) { close(pipeIds[0]); } if (pipeIds[1] != -1) { close(pipeIds[1]); } if (pidPtr != NULL) { for (i = 0; i < numPids; i++) { if (pidPtr[i] != JIM_BAD_PHANDLE) { JimDetachPids(table, 1, &pidPtr[i]); } } Jim_Free(pidPtr); } numPids = -1; goto cleanup; } static int JimCreatePipeline(Jim_Interp *interp, int argc, Jim_Obj *const *argv, phandle_t **pidArrayPtr, int *outPipePtr, int *errFilePtr) { int rc = -1; int ret; Jim_Obj *cmdList = Jim_NewListObj(interp, NULL, 0); Jim_Obj *redirectList = Jim_NewListObj(interp, NULL, 0); Jim_IncrRefCount(cmdList); Jim_IncrRefCount(redirectList); if (argc > 1 && Jim_CompareStringImmediate(interp, argv[0], "|")) { ret = JimParsePipeline(interp, argc - 1, argv + 1, cmdList, redirectList); } else { ret = JimParsePipelineLegacy(interp, argc, argv, cmdList, redirectList); } if (ret == JIM_OK) { rc = JimExecPipeline(interp, cmdList, redirectList, pidArrayPtr, outPipePtr, errFilePtr); } Jim_DecrRefCount(interp, cmdList); Jim_DecrRefCount(interp, redirectList); return rc; } static int JimCleanupChildren(Jim_Interp *interp, int numPids, phandle_t *pidPtr, Jim_Obj *errStrObj) { struct WaitInfoTable *table = Jim_CmdPrivData(interp); int result = JIM_OK; int i; for (i = 0; i < numPids; i++) { int waitStatus = 0; long pid = JimWaitForProcess(table, pidPtr[i], &waitStatus); if (pid > 0) { if (JimCheckWaitStatus(interp, pid, waitStatus, errStrObj) != JIM_OK) { result = JIM_ERR; } } } Jim_Free(pidPtr); return result; } int Jim_execInit(Jim_Interp *interp) { struct WaitInfoTable *waitinfo; Jim_PackageProvideCheck(interp, "exec"); waitinfo = JimAllocWaitInfoTable(); Jim_RegisterCmd(interp, "exec", "arg ?arg ...? ?&?", 1, -1, Jim_ExecCmd, JimFreeWaitInfoTable, waitinfo, JIM_CMD_NOTAINT); waitinfo->refcount++; Jim_RegisterCmd(interp, "wait", "?-nohang? ?pid?", 0, 2, Jim_WaitCommand, JimFreeWaitInfoTable, waitinfo, 0); waitinfo->refcount++; Jim_RegisterSimpleCmd(interp, "pid", "", 0, 0, Jim_PidCommand); return JIM_OK; } #if defined(__MINGW32__) static int JimWinFindExecutable(const char *originalName, char fullPath[MAX_PATH]) { int i; static char extensions[][5] = {".exe", "", ".bat"}; for (i = 0; i < (int) (sizeof(extensions) / sizeof(extensions[0])); i++) { snprintf(fullPath, MAX_PATH, "%s%s", originalName, extensions[i]); if (SearchPath(NULL, fullPath, NULL, MAX_PATH, fullPath, NULL) == 0) { continue; } if (GetFileAttributes(fullPath) & FILE_ATTRIBUTE_DIRECTORY) { continue; } return 0; } return -1; } static char **JimSaveEnv(char **env) { return env; } static void JimRestoreEnv(char **env) { JimFreeEnv(env, Jim_GetEnviron()); } static char **JimOriginalEnviron(void) { return NULL; } static Jim_Obj * JimWinBuildCommandLine(Jim_Interp *interp, char **argv) { char *start, *special; int quote, i; Jim_Obj *strObj = Jim_NewStringObj(interp, "", 0); for (i = 0; argv[i]; i++) { if (i > 0) { Jim_AppendString(interp, strObj, " ", 1); } if (argv[i][0] == '\0') { quote = 1; } else { quote = 0; for (start = argv[i]; *start != '\0'; start++) { if (isspace(UCHAR(*start))) { quote = 1; break; } } } if (quote) { Jim_AppendString(interp, strObj, "\"" , 1); } start = argv[i]; for (special = argv[i]; ; ) { if ((*special == '\\') && (special[1] == '\\' || special[1] == '"' || (quote && special[1] == '\0'))) { Jim_AppendString(interp, strObj, start, special - start); start = special; while (1) { special++; if (*special == '"' || (quote && *special == '\0')) { Jim_AppendString(interp, strObj, start, special - start); break; } if (*special != '\\') { break; } } Jim_AppendString(interp, strObj, start, special - start); start = special; } if (*special == '"') { if (special == start) { Jim_AppendString(interp, strObj, "\"", 1); } else { Jim_AppendString(interp, strObj, start, special - start); } Jim_AppendString(interp, strObj, "\\\"", 2); start = special + 1; } if (*special == '\0') { break; } special++; } Jim_AppendString(interp, strObj, start, special - start); if (quote) { Jim_AppendString(interp, strObj, "\"", 1); } } return strObj; } static phandle_t JimStartWinProcess(Jim_Interp *interp, char **argv, char **env, int inputId, int outputId, int errorId) { STARTUPINFO startInfo; PROCESS_INFORMATION procInfo; HANDLE hProcess; char execPath[MAX_PATH]; phandle_t phandle = INVALID_HANDLE_VALUE; Jim_Obj *cmdLineObj; char *winenv; if (JimWinFindExecutable(argv[0], execPath) < 0) { return phandle; } argv[0] = execPath; hProcess = GetCurrentProcess(); cmdLineObj = JimWinBuildCommandLine(interp, argv); ZeroMemory(&startInfo, sizeof(startInfo)); startInfo.cb = sizeof(startInfo); startInfo.dwFlags = STARTF_USESTDHANDLES; startInfo.hStdInput = INVALID_HANDLE_VALUE; startInfo.hStdOutput= INVALID_HANDLE_VALUE; startInfo.hStdError = INVALID_HANDLE_VALUE; if (inputId == -1) { inputId = _fileno(stdin); } DuplicateHandle(hProcess, (HANDLE)_get_osfhandle(inputId), hProcess, &startInfo.hStdInput, 0, TRUE, DUPLICATE_SAME_ACCESS); if (startInfo.hStdInput == INVALID_HANDLE_VALUE) { goto end; } if (outputId == -1) { outputId = _fileno(stdout); } DuplicateHandle(hProcess, (HANDLE)_get_osfhandle(outputId), hProcess, &startInfo.hStdOutput, 0, TRUE, DUPLICATE_SAME_ACCESS); if (startInfo.hStdOutput == INVALID_HANDLE_VALUE) { goto end; } if (errorId == -1) { errorId = _fileno(stderr); } DuplicateHandle(hProcess, (HANDLE)_get_osfhandle(errorId), hProcess, &startInfo.hStdError, 0, TRUE, DUPLICATE_SAME_ACCESS); if (startInfo.hStdError == INVALID_HANDLE_VALUE) { goto end; } if (env == NULL) { winenv = NULL; } else if (env[0] == NULL) { winenv = (char *)"\0"; } else { winenv = env[0]; } if (!CreateProcess(NULL, (char *)Jim_String(cmdLineObj), NULL, NULL, TRUE, 0, winenv, NULL, &startInfo, &procInfo)) { goto end; } WaitForInputIdle(procInfo.hProcess, 5000); CloseHandle(procInfo.hThread); phandle = procInfo.hProcess; end: Jim_FreeNewObj(interp, cmdLineObj); if (startInfo.hStdInput != INVALID_HANDLE_VALUE) { CloseHandle(startInfo.hStdInput); } if (startInfo.hStdOutput != INVALID_HANDLE_VALUE) { CloseHandle(startInfo.hStdOutput); } if (startInfo.hStdError != INVALID_HANDLE_VALUE) { CloseHandle(startInfo.hStdError); } return phandle; } #else static char **JimOriginalEnviron(void) { return Jim_GetEnviron(); } static char **JimSaveEnv(char **env) { char **saveenv = Jim_GetEnviron(); Jim_SetEnviron(env); return saveenv; } static void JimRestoreEnv(char **env) { JimFreeEnv(Jim_GetEnviron(), env); Jim_SetEnviron(env); } #endif #endif #include #include #include #include #ifdef HAVE_SYS_TIME_H #include #endif struct clock_options { int gmt; const char *format; }; static int parse_clock_options(Jim_Interp *interp, int argc, Jim_Obj *const *argv, struct clock_options *opts) { static const char * const options[] = { "-gmt", "-format", NULL }; enum { OPT_GMT, OPT_FORMAT, }; int i; for (i = 0; i < argc; i += 2) { int option; if (Jim_GetEnum(interp, argv[i], options, &option, NULL, JIM_ERRMSG | JIM_ENUM_ABBREV) != JIM_OK) { return JIM_ERR; } switch (option) { case OPT_GMT: if (Jim_GetBoolean(interp, argv[i + 1], &opts->gmt) != JIM_OK) { return JIM_ERR; } break; case OPT_FORMAT: opts->format = Jim_String(argv[i + 1]); break; } } return JIM_OK; } static int clock_cmd_format(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { char buf[100]; time_t t; jim_wide seconds; struct clock_options options = { 0, "%a %b %d %H:%M:%S %Z %Y" }; struct tm *tm; if (Jim_GetWide(interp, argv[0], &seconds) != JIM_OK) { return JIM_ERR; } if (argc % 2 == 0) { return -1; } if (parse_clock_options(interp, argc - 1, argv + 1, &options) == JIM_ERR) { return JIM_ERR; } t = seconds; tm = options.gmt ? gmtime(&t) : localtime(&t); if (tm == NULL || strftime(buf, sizeof(buf), options.format, tm) == 0) { Jim_SetResultString(interp, "format string too long or invalid time", -1); return JIM_ERR; } Jim_SetResultString(interp, buf, -1); return JIM_OK; } #ifdef HAVE_STRPTIME static time_t jim_timegm(const struct tm *tm) { int m = tm->tm_mon + 1; int y = 1900 + tm->tm_year - (m <= 2); int era = (y >= 0 ? y : y - 399) / 400; unsigned yoe = (unsigned)(y - era * 400); unsigned doy = (153 * (m + (m > 2 ? -3 : 9)) + 2) / 5 + tm->tm_mday - 1; unsigned doe = yoe * 365 + yoe / 4 - yoe / 100 + doy; long days = (era * 146097 + (int)doe - 719468); int secs = tm->tm_hour * 3600 + tm->tm_min * 60 + tm->tm_sec; return days * 24 * 60 * 60 + secs; } static int clock_cmd_scan(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { char *pt; struct tm tm; time_t now = time(NULL); struct clock_options options = { 0, NULL }; if (argc % 2 == 0) { return -1; } if (parse_clock_options(interp, argc - 1, argv + 1, &options) == JIM_ERR) { return JIM_ERR; } if (options.format == NULL) { return -1; } localtime_r(&now, &tm); pt = strptime(Jim_String(argv[0]), options.format, &tm); if (pt == 0 || *pt != 0) { Jim_SetResultString(interp, "Failed to parse time according to format", -1); return JIM_ERR; } tm.tm_isdst = options.gmt ? 0 : -1; Jim_SetResultInt(interp, options.gmt ? jim_timegm(&tm) : mktime(&tm)); return JIM_OK; } #endif static int clock_cmd_seconds(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_SetResultInt(interp, Jim_GetTimeUsec(CLOCK_REALTIME) / 1000000); return JIM_OK; } static int clock_cmd_clicks(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_SetResultInt(interp, Jim_GetTimeUsec(CLOCK_MONOTONIC_RAW)); return JIM_OK; } static int clock_cmd_micros(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_SetResultInt(interp, Jim_GetTimeUsec(CLOCK_REALTIME)); return JIM_OK; } static int clock_cmd_millis(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_SetResultInt(interp, Jim_GetTimeUsec(CLOCK_REALTIME) / 1000); return JIM_OK; } static const jim_subcmd_type clock_command_table[] = { { "clicks", NULL, clock_cmd_clicks, 0, 0, }, { "format", "seconds ?-format string? ?-gmt boolean?", clock_cmd_format, 1, 5, }, { "microseconds", NULL, clock_cmd_micros, 0, 0, }, { "milliseconds", NULL, clock_cmd_millis, 0, 0, }, #ifdef HAVE_STRPTIME { "scan", "str -format format ?-gmt boolean?", clock_cmd_scan, 3, 5, }, #endif { "seconds", NULL, clock_cmd_seconds, 0, 0, }, { NULL } }; int Jim_clockInit(Jim_Interp *interp) { Jim_PackageProvideCheck(interp, "clock"); Jim_RegisterSubCmd(interp, "clock", clock_command_table, NULL); return JIM_OK; } #include #include #include #include #include static int array_cmd_exists(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *dictObj = Jim_GetVariable(interp, argv[0], JIM_UNSHARED); Jim_SetResultInt(interp, dictObj && Jim_DictSize(interp, dictObj) != -1); return JIM_OK; } static int array_cmd_get(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *objPtr = Jim_GetVariable(interp, argv[0], JIM_NONE); Jim_Obj *patternObj; if (!objPtr) { return JIM_OK; } patternObj = (argc == 1) ? NULL : argv[1]; if (patternObj == NULL || Jim_CompareStringImmediate(interp, patternObj, "*")) { if (Jim_IsList(objPtr) && Jim_ListLength(interp, objPtr) % 2 == 0) { Jim_SetResult(interp, objPtr); return JIM_OK; } } return Jim_DictMatchTypes(interp, objPtr, patternObj, JIM_DICTMATCH_KEYS, JIM_DICTMATCH_KEYS | JIM_DICTMATCH_VALUES); } static int array_cmd_names(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *objPtr = Jim_GetVariable(interp, argv[0], JIM_NONE); if (!objPtr) { return JIM_OK; } return Jim_DictMatchTypes(interp, objPtr, argc == 1 ? NULL : argv[1], JIM_DICTMATCH_KEYS, JIM_DICTMATCH_KEYS); } static int array_cmd_unset(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int i; int len; Jim_Obj *resultObj; Jim_Obj *objPtr; Jim_Obj **dictValuesObj; if (argc == 1 || Jim_CompareStringImmediate(interp, argv[1], "*")) { Jim_UnsetVariable(interp, argv[0], JIM_NONE); return JIM_OK; } objPtr = Jim_GetVariable(interp, argv[0], JIM_NONE); if (objPtr == NULL) { return JIM_OK; } dictValuesObj = Jim_DictPairs(interp, objPtr, &len); if (dictValuesObj == NULL) { Jim_SetResultString(interp, "", -1); return JIM_OK; } resultObj = Jim_NewDictObj(interp, NULL, 0); for (i = 0; i < len; i += 2) { if (!Jim_StringMatchObj(interp, argv[1], dictValuesObj[i], 0)) { Jim_DictAddElement(interp, resultObj, dictValuesObj[i], dictValuesObj[i + 1]); } } Jim_SetVariable(interp, argv[0], resultObj); return JIM_OK; } static int array_cmd_size(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *objPtr; int len = 0; objPtr = Jim_GetVariable(interp, argv[0], JIM_NONE); if (objPtr) { len = Jim_DictSize(interp, objPtr); if (len < 0) { Jim_SetResultInt(interp, 0); return JIM_OK; } } Jim_SetResultInt(interp, len); return JIM_OK; } static int array_cmd_stat(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *objPtr = Jim_GetVariable(interp, argv[0], JIM_NONE); if (objPtr) { return Jim_DictInfo(interp, objPtr); } Jim_SetResultFormatted(interp, "\"%#s\" isn't an array", argv[0], NULL); return JIM_ERR; } static int array_cmd_set(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int i; int len; Jim_Obj *listObj = argv[1]; Jim_Obj *dictObj; len = Jim_ListLength(interp, listObj); if (len % 2) { Jim_SetResultString(interp, "list must have an even number of elements", -1); return JIM_ERR; } dictObj = Jim_GetVariable(interp, argv[0], JIM_UNSHARED); if (!dictObj) { return Jim_SetVariable(interp, argv[0], listObj); } else if (Jim_DictSize(interp, dictObj) < 0) { return JIM_ERR; } if (Jim_IsShared(dictObj)) { dictObj = Jim_DuplicateObj(interp, dictObj); } for (i = 0; i < len; i += 2) { Jim_Obj *nameObj; Jim_Obj *valueObj; Jim_ListIndex(interp, listObj, i, &nameObj, JIM_NONE); Jim_ListIndex(interp, listObj, i + 1, &valueObj, JIM_NONE); Jim_DictAddElement(interp, dictObj, nameObj, valueObj); } return Jim_SetVariable(interp, argv[0], dictObj); } static const jim_subcmd_type array_command_table[] = { { "exists", "arrayName", array_cmd_exists, 1, 1, }, { "get", "arrayName ?pattern?", array_cmd_get, 1, 2, }, { "names", "arrayName ?pattern?", array_cmd_names, 1, 2, }, { "set", "arrayName list", array_cmd_set, 2, 2, }, { "size", "arrayName", array_cmd_size, 1, 1, }, { "stat", "arrayName", array_cmd_stat, 1, 1, }, { "unset", "arrayName ?pattern?", array_cmd_unset, 1, 2, }, { NULL } }; int Jim_arrayInit(Jim_Interp *interp) { Jim_PackageProvideCheck(interp, "array"); Jim_RegisterSubCmd(interp, "array", array_command_table, NULL); return JIM_OK; } int Jim_InitStaticExtensions(Jim_Interp *interp) { extern int Jim_bootstrapInit(Jim_Interp *); extern int Jim_aioInit(Jim_Interp *); extern int Jim_readdirInit(Jim_Interp *); extern int Jim_regexpInit(Jim_Interp *); extern int Jim_fileInit(Jim_Interp *); extern int Jim_globInit(Jim_Interp *); extern int Jim_execInit(Jim_Interp *); extern int Jim_clockInit(Jim_Interp *); extern int Jim_arrayInit(Jim_Interp *); extern int Jim_stdlibInit(Jim_Interp *); extern int Jim_tclcompatInit(Jim_Interp *); Jim_bootstrapInit(interp); Jim_aioInit(interp); Jim_readdirInit(interp); Jim_regexpInit(interp); Jim_fileInit(interp); Jim_globInit(interp); Jim_execInit(interp); Jim_clockInit(interp); Jim_arrayInit(interp); Jim_stdlibInit(interp); Jim_tclcompatInit(interp); return JIM_OK; } #ifndef JIM_TINY #define JIM_OPTIMIZATION #endif #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_SYS_TIME_H #include #endif #ifdef HAVE_EXECINFO_H #include #endif #ifdef HAVE_CRT_EXTERNS_H #include #endif #include #ifndef TCL_LIBRARY #define TCL_LIBRARY "." #endif #ifndef TCL_PLATFORM_OS #define TCL_PLATFORM_OS "unknown" #endif #ifndef TCL_PLATFORM_PLATFORM #define TCL_PLATFORM_PLATFORM "unknown" #endif #ifndef TCL_PLATFORM_PATH_SEPARATOR #define TCL_PLATFORM_PATH_SEPARATOR ":" #endif #ifdef JIM_MAINTAINER #define JIM_DEBUG_COMMAND #define JIM_DEBUG_PANIC #endif #define JIM_INTEGER_SPACE 24 #if defined(DEBUG_SHOW_SCRIPT) || defined(DEBUG_SHOW_SCRIPT_TOKENS) || defined(JIM_DEBUG_COMMAND) || defined(DEBUG_SHOW_EXPR_TOKENS) || defined(DEBUG_SHOW_EXPR) #define JIM_TT_NAME static const char *jim_tt_name(int type); #endif #ifdef JIM_DEBUG_PANIC static void JimPanicDump(int fail_condition, const char *fmt, ...); #define JimPanic(X) JimPanicDump X #else #define JimPanic(X) #endif #ifdef JIM_OPTIMIZATION static int JimIsWide(Jim_Obj *objPtr); #define JIM_IF_OPTIM(X) X #else #define JIM_IF_OPTIM(X) #endif static char JimEmptyStringRep[] = ""; static void JimFreeCallFrame(Jim_Interp *interp, Jim_CallFrame *cf, int action); static int ListSetIndex(Jim_Interp *interp, Jim_Obj *listPtr, int listindex, Jim_Obj *newObjPtr, int flags); static int Jim_ListIndices(Jim_Interp *interp, Jim_Obj *listPtr, Jim_Obj *const *indexv, int indexc, Jim_Obj **resultObj, int flags); static int JimDeleteLocalProcs(Jim_Interp *interp, Jim_Stack *localCommands); static Jim_Obj *JimExpandDictSugar(Jim_Interp *interp, Jim_Obj *objPtr); static void SetDictSubstFromAny(Jim_Interp *interp, Jim_Obj *objPtr); static void JimSetFailedEnumResult(Jim_Interp *interp, const char *arg, const char *badtype, const char *prefix, const char *const *tablePtr, const char *name); static int JimCallProcedure(Jim_Interp *interp, Jim_Cmd *cmd, int argc, Jim_Obj *const *argv); static int JimGetWideNoErr(Jim_Interp *interp, Jim_Obj *objPtr, jim_wide * widePtr); static int JimSign(jim_wide w); static void JimPrngSeed(Jim_Interp *interp, unsigned char *seed, int seedLen); static void JimRandomBytes(Jim_Interp *interp, void *dest, unsigned int len); static int JimSetNewVariable(Jim_HashTable *ht, Jim_Obj *nameObjPtr, Jim_VarVal *vv); static Jim_VarVal *JimFindVariable(Jim_HashTable *ht, Jim_Obj *nameObjPtr); static int SetVariableFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr); static int JimCallNative(Jim_Interp *interp, Jim_Cmd *cmd, int argc, Jim_Obj *const *argv); #define JIM_DICT_SUGAR 100 #define JimWideValue(objPtr) (objPtr)->internalRep.wideValue #define JimObjTypeName(O) ((O)->typePtr ? (O)->typePtr->name : "none") static int utf8_tounicode_case(const char *s, int *uc, int upper) { int l = utf8_tounicode(s, uc); if (upper) { *uc = utf8_upper(*uc); } return l; } static Jim_Obj *JimPushInterpObjImpl(Jim_Obj **iop, Jim_Obj *no) { Jim_Obj *io = *iop; Jim_IncrRefCount(no); *iop = no; return io; } #define JimPushInterpObj(IO, NO) JimPushInterpObjImpl(&(IO), NO) #define JimPopInterpObj(I, IO, SO) do { Jim_DecrRefCount(I, IO); IO = SO; } while (0) #define JIM_CHARSET_SCAN 2 #define JIM_CHARSET_GLOB 0 static const char *JimCharsetMatch(const char *pattern, int plen, int c, int flags) { int not = 0; int pchar; int match = 0; int nocase = 0; int n; if (flags & JIM_NOCASE) { nocase++; c = utf8_upper(c); } if (flags & JIM_CHARSET_SCAN) { if (*pattern == '^') { not++; pattern++; plen--; } if (*pattern == ']') { goto first; } } while (plen && *pattern != ']') { if (pattern[0] == '\\') { first: n = utf8_tounicode_case(pattern, &pchar, nocase); pattern += n; plen -= n; } else { int start; int end; n = utf8_tounicode_case(pattern, &start, nocase); pattern += n; plen -= n; if (pattern[0] == '-' && plen > 1) { n = 1 + utf8_tounicode_case(pattern + 1, &end, nocase); pattern += n; plen -= n; if ((c >= start && c <= end) || (c >= end && c <= start)) { match = 1; } continue; } pchar = start; } if (pchar == c) { match = 1; } } if (not) { match = !match; } return match ? pattern : NULL; } static int JimGlobMatch(const char *pattern, int plen, const char *string, int slen, int nocase) { int c; int pchar; int n; const char *p; while (plen) { switch (pattern[0]) { case '*': while (pattern[1] == '*' && plen) { pattern++; plen--; } pattern++; plen--; if (!plen) { return 1; } while (slen) { if (JimGlobMatch(pattern, plen, string, slen, nocase)) return 1; n = utf8_tounicode(string, &c); string += n; slen -= n; } return 0; case '?': n = utf8_tounicode(string, &c); string += n; slen -= n; break; case '[': { n = utf8_tounicode(string, &c); string += n; slen -= n; p = JimCharsetMatch(pattern + 1, plen - 1, c, nocase ? JIM_NOCASE : 0); if (!p) { return 0; } plen -= p - pattern; pattern = p; if (!plen) { continue; } break; } case '\\': if (pattern[1]) { pattern++; plen--; } default: n = utf8_tounicode_case(string, &c, nocase); string += n; slen -= n; utf8_tounicode_case(pattern, &pchar, nocase); if (pchar != c) { return 0; } break; } n = utf8_tounicode_case(pattern, &pchar, nocase); pattern += n; plen -= n; if (!slen) { while (*pattern == '*' && plen) { pattern++; plen--; } break; } } if (!plen && !slen) { return 1; } return 0; } static int JimStringCompareUtf8(const char *s1, int l1, const char *s2, int l2, int nocase) { int minlen = l1; if (l2 < l1) { minlen = l2; } while (minlen) { int c1, c2; s1 += utf8_tounicode_case(s1, &c1, nocase); s2 += utf8_tounicode_case(s2, &c2, nocase); if (c1 != c2) { return JimSign(c1 - c2); } minlen--; } if (l1 < l2) { return -1; } if (l1 > l2) { return 1; } return 0; } static int JimStringFirst(const char *s1, int l1, const char *s2, int l2, int idx) { int i; int l1bytelen; if (!l1 || !l2 || l1 > l2 || idx > l2) { return -1; } if (idx < 0) idx = 0; s2 += utf8_index(s2, idx); l1bytelen = utf8_index(s1, l1); for (i = idx; i <= l2 - l1; i++) { int c; if (memcmp(s2, s1, l1bytelen) == 0) { return i; } s2 += utf8_tounicode(s2, &c); } return -1; } static int JimStringLast(const char *s1, int l1, const char *s2, int l2) { const char *p; if (!l1 || !l2 || l1 > l2) return -1; for (p = s2 + l2 - 1; p != s2 - 1; p--) { if (*p == *s1 && memcmp(s1, p, l1) == 0) { return p - s2; } } return -1; } #ifdef JIM_UTF8 static int JimStringLastUtf8(const char *s1, int l1, const char *s2, int l2) { int n = JimStringLast(s1, utf8_index(s1, l1), s2, utf8_index(s2, l2)); if (n > 0) { n = utf8_strlen(s2, n); } return n; } #endif static int JimCheckConversion(const char *str, const char *endptr) { if (str[0] == '\0' || str == endptr) { return JIM_ERR; } if (endptr[0] != '\0') { while (*endptr) { if (!isspace(UCHAR(*endptr))) { return JIM_ERR; } endptr++; } } return JIM_OK; } static int JimNumberBase(const char *str, int *base, int *sign) { int i = 0; *base = 0; while (isspace(UCHAR(str[i]))) { i++; } if (str[i] == '-') { *sign = -1; i++; } else { if (str[i] == '+') { i++; } *sign = 1; } if (str[i] != '0') { return 0; } switch (str[i + 1]) { case 'x': case 'X': *base = 16; break; case 'o': case 'O': *base = 8; break; case 'b': case 'B': *base = 2; break; case 'd': case 'D': *base = 10; break; default: return 0; } i += 2; if (str[i] != '-' && str[i] != '+' && !isspace(UCHAR(str[i]))) { return i; } *base = 0; return 0; } static long jim_strtol(const char *str, char **endptr) { int sign; int base; int i = JimNumberBase(str, &base, &sign); if (base != 0) { long value = strtol(str + i, endptr, base); if (endptr == NULL || *endptr != str + i) { return value * sign; } } return strtol(str, endptr, 10); } static jim_wide jim_strtoull(const char *str, char **endptr) { #ifdef HAVE_LONG_LONG int sign; int base; int i = JimNumberBase(str, &base, &sign); if (base != 0) { jim_wide value = strtoull(str + i, endptr, base); if (endptr == NULL || *endptr != str + i) { return value * sign; } } return strtoull(str, endptr, 10); #else return (unsigned long)jim_strtol(str, endptr); #endif } int Jim_StringToWide(const char *str, jim_wide * widePtr, int base) { char *endptr; if (base) { *widePtr = strtoull(str, &endptr, base); } else { *widePtr = jim_strtoull(str, &endptr); } return JimCheckConversion(str, endptr); } int Jim_StringToDouble(const char *str, double *doublePtr) { char *endptr; errno = 0; *doublePtr = strtod(str, &endptr); return JimCheckConversion(str, endptr); } static jim_wide JimPowWide(jim_wide b, jim_wide e) { jim_wide res = 1; if (b == 1) { return 1; } if (e < 0) { if (b != -1) { return 0; } e = -e; } while (e) { if (e & 1) { res *= b; } e >>= 1; b *= b; } return res; } #ifdef JIM_DEBUG_PANIC static void JimPanicDump(int condition, const char *fmt, ...) { va_list ap; if (!condition) { return; } va_start(ap, fmt); fprintf(stderr, "\nJIM INTERPRETER PANIC: "); vfprintf(stderr, fmt, ap); fprintf(stderr, "\n\n"); va_end(ap); #if defined(HAVE_BACKTRACE) { void *array[40]; int size, i; char **strings; size = backtrace(array, 40); strings = backtrace_symbols(array, size); for (i = 0; i < size; i++) fprintf(stderr, "[backtrace] %s\n", strings[i]); fprintf(stderr, "[backtrace] Include the above lines and the output\n"); fprintf(stderr, "[backtrace] of 'nm ' in the bug report.\n"); } #endif exit(1); } #endif void *JimDefaultAllocator(void *ptr, size_t size) { if (size == 0) { free(ptr); return NULL; } else if (ptr) { return realloc(ptr, size); } else { return malloc(size); } } void *(*Jim_Allocator)(void *ptr, size_t size) = JimDefaultAllocator; char *Jim_StrDup(const char *s) { return Jim_StrDupLen(s, strlen(s)); } char *Jim_StrDupLen(const char *s, int l) { char *copy = Jim_Alloc(l + 1); memcpy(copy, s, l); copy[l] = 0; return copy; } jim_wide Jim_GetTimeUsec(unsigned type) { long long now; struct timeval tv; #if defined(HAVE_CLOCK_GETTIME) struct timespec ts; if (clock_gettime(type, &ts) == 0) { now = ts.tv_sec * 1000000LL + ts.tv_nsec / 1000; } else #endif { gettimeofday(&tv, NULL); now = tv.tv_sec * 1000000LL + tv.tv_usec; } return now; } static void JimExpandHashTableIfNeeded(Jim_HashTable *ht); static unsigned int JimHashTableNextPower(unsigned int size); static Jim_HashEntry *JimInsertHashEntry(Jim_HashTable *ht, const void *key, int replace); unsigned int Jim_IntHashFunction(unsigned int key) { key += ~(key << 15); key ^= (key >> 10); key += (key << 3); key ^= (key >> 6); key += ~(key << 11); key ^= (key >> 16); return key; } unsigned int Jim_GenHashFunction(const unsigned char *string, int length) { unsigned result = 0; string += length; while (length--) { result += (result << 3) + (unsigned char)(*--string); } return result; } static void JimResetHashTable(Jim_HashTable *ht) { ht->table = NULL; ht->size = 0; ht->sizemask = 0; ht->used = 0; ht->collisions = 0; #ifdef JIM_RANDOMISE_HASH ht->uniq = (rand() ^ time(NULL) ^ clock()); #else ht->uniq = 0; #endif } static void JimInitHashTableIterator(Jim_HashTable *ht, Jim_HashTableIterator *iter) { iter->ht = ht; iter->index = -1; iter->entry = NULL; iter->nextEntry = NULL; } int Jim_InitHashTable(Jim_HashTable *ht, const Jim_HashTableType *type, void *privDataPtr) { JimResetHashTable(ht); ht->type = type; ht->privdata = privDataPtr; return JIM_OK; } void Jim_ExpandHashTable(Jim_HashTable *ht, unsigned int size) { Jim_HashTable n; unsigned int realsize = JimHashTableNextPower(size), i; if (size <= ht->used) return; Jim_InitHashTable(&n, ht->type, ht->privdata); n.size = realsize; n.sizemask = realsize - 1; n.table = Jim_Alloc(realsize * sizeof(Jim_HashEntry *)); n.uniq = ht->uniq; memset(n.table, 0, realsize * sizeof(Jim_HashEntry *)); n.used = ht->used; for (i = 0; ht->used > 0; i++) { Jim_HashEntry *he, *nextHe; if (ht->table[i] == NULL) continue; he = ht->table[i]; while (he) { unsigned int h; nextHe = he->next; h = Jim_HashKey(ht, he->key) & n.sizemask; he->next = n.table[h]; n.table[h] = he; ht->used--; he = nextHe; } } assert(ht->used == 0); Jim_Free(ht->table); *ht = n; } int Jim_AddHashEntry(Jim_HashTable *ht, const void *key, void *val) { Jim_HashEntry *entry = JimInsertHashEntry(ht, key, 0);; if (entry == NULL) return JIM_ERR; Jim_SetHashKey(ht, entry, key); Jim_SetHashVal(ht, entry, val); return JIM_OK; } int Jim_ReplaceHashEntry(Jim_HashTable *ht, const void *key, void *val) { int existed; Jim_HashEntry *entry; entry = JimInsertHashEntry(ht, key, 1); if (entry->key) { if (ht->type->valDestructor && ht->type->valDup) { void *newval = ht->type->valDup(ht->privdata, val); ht->type->valDestructor(ht->privdata, entry->u.val); entry->u.val = newval; } else { Jim_FreeEntryVal(ht, entry); Jim_SetHashVal(ht, entry, val); } existed = 1; } else { Jim_SetHashKey(ht, entry, key); Jim_SetHashVal(ht, entry, val); existed = 0; } return existed; } int Jim_DeleteHashEntry(Jim_HashTable *ht, const void *key) { if (ht->used) { unsigned int h = Jim_HashKey(ht, key) & ht->sizemask; Jim_HashEntry *prevHe = NULL; Jim_HashEntry *he = ht->table[h]; while (he) { if (Jim_CompareHashKeys(ht, key, he->key)) { if (prevHe) prevHe->next = he->next; else ht->table[h] = he->next; ht->used--; Jim_FreeEntryKey(ht, he); Jim_FreeEntryVal(ht, he); Jim_Free(he); return JIM_OK; } prevHe = he; he = he->next; } } return JIM_ERR; } void Jim_ClearHashTable(Jim_HashTable *ht) { unsigned int i; for (i = 0; ht->used > 0; i++) { Jim_HashEntry *he, *nextHe; he = ht->table[i]; while (he) { nextHe = he->next; Jim_FreeEntryKey(ht, he); Jim_FreeEntryVal(ht, he); Jim_Free(he); ht->used--; he = nextHe; } ht->table[i] = NULL; } } int Jim_FreeHashTable(Jim_HashTable *ht) { Jim_ClearHashTable(ht); Jim_Free(ht->table); JimResetHashTable(ht); return JIM_OK; } Jim_HashEntry *Jim_FindHashEntry(Jim_HashTable *ht, const void *key) { Jim_HashEntry *he; unsigned int h; if (ht->used == 0) return NULL; h = Jim_HashKey(ht, key) & ht->sizemask; he = ht->table[h]; while (he) { if (Jim_CompareHashKeys(ht, key, he->key)) return he; he = he->next; } return NULL; } Jim_HashTableIterator *Jim_GetHashTableIterator(Jim_HashTable *ht) { Jim_HashTableIterator *iter = Jim_Alloc(sizeof(*iter)); JimInitHashTableIterator(ht, iter); return iter; } Jim_HashEntry *Jim_NextHashEntry(Jim_HashTableIterator *iter) { while (1) { if (iter->entry == NULL) { iter->index++; if (iter->index >= (signed)iter->ht->size) break; iter->entry = iter->ht->table[iter->index]; } else { iter->entry = iter->nextEntry; } if (iter->entry) { iter->nextEntry = iter->entry->next; return iter->entry; } } return NULL; } static void JimExpandHashTableIfNeeded(Jim_HashTable *ht) { if (ht->size == 0) Jim_ExpandHashTable(ht, JIM_HT_INITIAL_SIZE); if (ht->size == ht->used) Jim_ExpandHashTable(ht, ht->size * 2); } static unsigned int JimHashTableNextPower(unsigned int size) { unsigned int i = JIM_HT_INITIAL_SIZE; if (size >= 2147483648U) return 2147483648U; while (1) { if (i >= size) return i; i *= 2; } } static Jim_HashEntry *JimInsertHashEntry(Jim_HashTable *ht, const void *key, int replace) { unsigned int h; Jim_HashEntry *he; JimExpandHashTableIfNeeded(ht); h = Jim_HashKey(ht, key) & ht->sizemask; he = ht->table[h]; while (he) { if (Jim_CompareHashKeys(ht, key, he->key)) return replace ? he : NULL; he = he->next; } he = Jim_Alloc(sizeof(*he)); he->next = ht->table[h]; ht->table[h] = he; ht->used++; he->key = NULL; return he; } static unsigned int JimStringCopyHTHashFunction(const void *key) { return Jim_GenHashFunction(key, strlen(key)); } static void *JimStringCopyHTDup(void *privdata, const void *key) { return Jim_StrDup(key); } static int JimStringCopyHTKeyCompare(void *privdata, const void *key1, const void *key2) { return strcmp(key1, key2) == 0; } static void JimStringCopyHTKeyDestructor(void *privdata, void *key) { Jim_Free(key); } static const Jim_HashTableType JimPackageHashTableType = { JimStringCopyHTHashFunction, JimStringCopyHTDup, NULL, JimStringCopyHTKeyCompare, JimStringCopyHTKeyDestructor, NULL }; typedef struct AssocDataValue { Jim_InterpDeleteProc *delProc; void *data; } AssocDataValue; static void JimAssocDataHashTableValueDestructor(void *privdata, void *data) { AssocDataValue *assocPtr = (AssocDataValue *) data; if (assocPtr->delProc != NULL) assocPtr->delProc((Jim_Interp *)privdata, assocPtr->data); Jim_Free(data); } static const Jim_HashTableType JimAssocDataHashTableType = { JimStringCopyHTHashFunction, JimStringCopyHTDup, NULL, JimStringCopyHTKeyCompare, JimStringCopyHTKeyDestructor, JimAssocDataHashTableValueDestructor }; void Jim_StackInit(Jim_Stack *stack, void (*freefunc) (void *ptr)) { stack->len = 0; stack->maxlen = 0; stack->vector = NULL; stack->freefunc = freefunc; } void Jim_StackFree(Jim_Stack *stack) { int i; if (stack->freefunc) { for (i = 0; i < stack->len; i++) { stack->freefunc(stack->vector[i]); } } Jim_Free(stack->vector); } void Jim_StackPush(Jim_Stack *stack, void *element) { int neededLen = stack->len + 1; if (neededLen > stack->maxlen) { stack->maxlen = neededLen < 20 ? 20 : neededLen * 2; stack->vector = Jim_Realloc(stack->vector, sizeof(void *) * stack->maxlen); } stack->vector[stack->len] = element; stack->len++; } void *Jim_StackPop(Jim_Stack *stack) { if (stack->len == 0) return NULL; stack->len--; return stack->vector[stack->len]; } #define JIM_TT_NONE 0 #define JIM_TT_STR 1 #define JIM_TT_ESC 2 #define JIM_TT_VAR 3 #define JIM_TT_DICTSUGAR 4 #define JIM_TT_CMD 5 #define JIM_TT_SEP 6 #define JIM_TT_EOL 7 #define JIM_TT_EOF 8 #define JIM_TT_LINE 9 #define JIM_TT_WORD 10 #define JIM_TT_SUBEXPR_START 11 #define JIM_TT_SUBEXPR_END 12 #define JIM_TT_SUBEXPR_COMMA 13 #define JIM_TT_EXPR_INT 14 #define JIM_TT_EXPR_DOUBLE 15 #define JIM_TT_EXPR_BOOLEAN 16 #define JIM_TT_EXPRSUGAR 17 #define JIM_TT_EXPR_OP 20 #define TOKEN_IS_SEP(type) (type >= JIM_TT_SEP && type <= JIM_TT_EOF) #define TOKEN_IS_EXPR_START(type) (type == JIM_TT_NONE || type == JIM_TT_SUBEXPR_START || type == JIM_TT_SUBEXPR_COMMA) #define TOKEN_IS_EXPR_OP(type) (type >= JIM_TT_EXPR_OP) struct JimParseMissing { int ch; int line; }; struct JimParserCtx { const char *p; int len; int linenr; const char *tstart; const char *tend; int tline; int tt; int eof; int inquote; int comment; struct JimParseMissing missing; const char *errmsg; }; static int JimParseScript(struct JimParserCtx *pc); static int JimParseSep(struct JimParserCtx *pc); static int JimParseEol(struct JimParserCtx *pc); static int JimParseCmd(struct JimParserCtx *pc); static int JimParseQuote(struct JimParserCtx *pc); static int JimParseVar(struct JimParserCtx *pc); static int JimParseBrace(struct JimParserCtx *pc); static int JimParseStr(struct JimParserCtx *pc); static int JimParseComment(struct JimParserCtx *pc); static void JimParseSubCmd(struct JimParserCtx *pc); static int JimParseSubQuote(struct JimParserCtx *pc); static Jim_Obj *JimParserGetTokenObj(Jim_Interp *interp, struct JimParserCtx *pc); static void JimParserInit(struct JimParserCtx *pc, const char *prg, int len, int linenr) { pc->p = prg; pc->len = len; pc->tstart = NULL; pc->tend = NULL; pc->tline = 0; pc->tt = JIM_TT_NONE; pc->eof = 0; pc->inquote = 0; pc->linenr = linenr; pc->comment = 1; pc->missing.ch = ' '; pc->missing.line = linenr; } static int JimParseScript(struct JimParserCtx *pc) { while (1) { if (!pc->len) { pc->tstart = pc->p; pc->tend = pc->p - 1; pc->tline = pc->linenr; pc->tt = JIM_TT_EOL; if (pc->inquote) { pc->missing.ch = '"'; } pc->eof = 1; return JIM_OK; } switch (*(pc->p)) { case '\\': if (*(pc->p + 1) == '\n' && !pc->inquote) { return JimParseSep(pc); } pc->comment = 0; return JimParseStr(pc); case ' ': case '\t': case '\r': case '\f': if (!pc->inquote) return JimParseSep(pc); pc->comment = 0; return JimParseStr(pc); case '\n': case ';': pc->comment = 1; if (!pc->inquote) return JimParseEol(pc); return JimParseStr(pc); case '[': pc->comment = 0; return JimParseCmd(pc); case '$': pc->comment = 0; if (JimParseVar(pc) == JIM_ERR) { pc->tstart = pc->tend = pc->p++; pc->len--; pc->tt = JIM_TT_ESC; } return JIM_OK; case '#': if (pc->comment) { JimParseComment(pc); continue; } return JimParseStr(pc); default: pc->comment = 0; return JimParseStr(pc); } return JIM_OK; } } static int JimParseSep(struct JimParserCtx *pc) { pc->tstart = pc->p; pc->tline = pc->linenr; while (isspace(UCHAR(*pc->p)) || (*pc->p == '\\' && *(pc->p + 1) == '\n')) { if (*pc->p == '\n') { break; } if (*pc->p == '\\') { pc->p++; pc->len--; pc->linenr++; } pc->p++; pc->len--; } pc->tend = pc->p - 1; pc->tt = JIM_TT_SEP; return JIM_OK; } static int JimParseEol(struct JimParserCtx *pc) { pc->tstart = pc->p; pc->tline = pc->linenr; while (isspace(UCHAR(*pc->p)) || *pc->p == ';') { if (*pc->p == '\n') pc->linenr++; pc->p++; pc->len--; } pc->tend = pc->p - 1; pc->tt = JIM_TT_EOL; return JIM_OK; } static void JimParseSubBrace(struct JimParserCtx *pc) { int level = 1; pc->p++; pc->len--; while (pc->len) { switch (*pc->p) { case '\\': if (pc->len > 1) { if (*++pc->p == '\n') { pc->linenr++; } pc->len--; } break; case '{': level++; break; case '}': if (--level == 0) { pc->tend = pc->p - 1; pc->p++; pc->len--; return; } break; case '\n': pc->linenr++; break; } pc->p++; pc->len--; } pc->missing.ch = '{'; pc->missing.line = pc->tline; pc->tend = pc->p - 1; } static int JimParseSubQuote(struct JimParserCtx *pc) { int tt = JIM_TT_STR; int line = pc->tline; pc->p++; pc->len--; while (pc->len) { switch (*pc->p) { case '\\': if (pc->len > 1) { if (*++pc->p == '\n') { pc->linenr++; } pc->len--; tt = JIM_TT_ESC; } break; case '"': pc->tend = pc->p - 1; pc->p++; pc->len--; return tt; case '[': JimParseSubCmd(pc); tt = JIM_TT_ESC; continue; case '\n': pc->linenr++; break; case '$': tt = JIM_TT_ESC; break; } pc->p++; pc->len--; } pc->missing.ch = '"'; pc->missing.line = line; pc->tend = pc->p - 1; return tt; } static void JimParseSubCmd(struct JimParserCtx *pc) { int level = 1; int startofword = 1; int line = pc->tline; pc->p++; pc->len--; while (pc->len) { switch (*pc->p) { case '\\': if (pc->len > 1) { if (*++pc->p == '\n') { pc->linenr++; } pc->len--; } break; case '[': level++; break; case ']': if (--level == 0) { pc->tend = pc->p - 1; pc->p++; pc->len--; return; } break; case '"': if (startofword) { JimParseSubQuote(pc); if (pc->missing.ch == '"') { return; } continue; } break; case '{': JimParseSubBrace(pc); startofword = 0; continue; case '\n': pc->linenr++; break; } startofword = isspace(UCHAR(*pc->p)); pc->p++; pc->len--; } pc->missing.ch = '['; pc->missing.line = line; pc->tend = pc->p - 1; } static int JimParseBrace(struct JimParserCtx *pc) { pc->tstart = pc->p + 1; pc->tline = pc->linenr; pc->tt = JIM_TT_STR; JimParseSubBrace(pc); return JIM_OK; } static int JimParseCmd(struct JimParserCtx *pc) { pc->tstart = pc->p + 1; pc->tline = pc->linenr; pc->tt = JIM_TT_CMD; JimParseSubCmd(pc); return JIM_OK; } static int JimParseQuote(struct JimParserCtx *pc) { pc->tstart = pc->p + 1; pc->tline = pc->linenr; pc->tt = JimParseSubQuote(pc); return JIM_OK; } static int JimParseVar(struct JimParserCtx *pc) { pc->p++; pc->len--; #ifdef EXPRSUGAR_BRACKET if (*pc->p == '[') { JimParseCmd(pc); pc->tt = JIM_TT_EXPRSUGAR; return JIM_OK; } #endif pc->tstart = pc->p; pc->tt = JIM_TT_VAR; pc->tline = pc->linenr; if (*pc->p == '{') { pc->tstart = ++pc->p; pc->len--; while (pc->len && *pc->p != '}') { if (*pc->p == '\n') { pc->linenr++; } pc->p++; pc->len--; } pc->tend = pc->p - 1; if (pc->len) { pc->p++; pc->len--; } } else { while (1) { if (pc->p[0] == ':' && pc->p[1] == ':') { while (*pc->p == ':') { pc->p++; pc->len--; } continue; } if (isalnum(UCHAR(*pc->p)) || *pc->p == '_' || UCHAR(*pc->p) >= 0x80) { pc->p++; pc->len--; continue; } break; } if (*pc->p == '(') { int count = 1; const char *paren = NULL; pc->tt = JIM_TT_DICTSUGAR; while (count && pc->len) { pc->p++; pc->len--; if (*pc->p == '\\' && pc->len >= 1) { pc->p++; pc->len--; } else if (*pc->p == '(') { count++; } else if (*pc->p == ')') { paren = pc->p; count--; } } if (count == 0) { pc->p++; pc->len--; } else if (paren) { paren++; pc->len += (pc->p - paren); pc->p = paren; } #ifndef EXPRSUGAR_BRACKET if (*pc->tstart == '(') { pc->tt = JIM_TT_EXPRSUGAR; } #endif } pc->tend = pc->p - 1; } if (pc->tstart == pc->p) { pc->p--; pc->len++; return JIM_ERR; } return JIM_OK; } static int JimParseStr(struct JimParserCtx *pc) { if (pc->tt == JIM_TT_SEP || pc->tt == JIM_TT_EOL || pc->tt == JIM_TT_NONE || pc->tt == JIM_TT_STR) { if (*pc->p == '{') { return JimParseBrace(pc); } if (*pc->p == '"') { pc->inquote = 1; pc->p++; pc->len--; pc->missing.line = pc->tline; } } pc->tstart = pc->p; pc->tline = pc->linenr; while (1) { if (pc->len == 0) { if (pc->inquote) { pc->missing.ch = '"'; } pc->tend = pc->p - 1; pc->tt = JIM_TT_ESC; return JIM_OK; } switch (*pc->p) { case '\\': if (!pc->inquote && *(pc->p + 1) == '\n') { pc->tend = pc->p - 1; pc->tt = JIM_TT_ESC; return JIM_OK; } if (pc->len >= 2) { if (*(pc->p + 1) == '\n') { pc->linenr++; } pc->p++; pc->len--; } else if (pc->len == 1) { pc->missing.ch = '\\'; } break; case '(': if (pc->len > 1 && pc->p[1] != '$') { break; } case ')': if (*pc->p == '(' || pc->tt == JIM_TT_VAR) { if (pc->p == pc->tstart) { pc->p++; pc->len--; } pc->tend = pc->p - 1; pc->tt = JIM_TT_ESC; return JIM_OK; } break; case '$': case '[': pc->tend = pc->p - 1; pc->tt = JIM_TT_ESC; return JIM_OK; case ' ': case '\t': case '\n': case '\r': case '\f': case ';': if (!pc->inquote) { pc->tend = pc->p - 1; pc->tt = JIM_TT_ESC; return JIM_OK; } else if (*pc->p == '\n') { pc->linenr++; } break; case '"': if (pc->inquote) { pc->tend = pc->p - 1; pc->tt = JIM_TT_ESC; pc->p++; pc->len--; pc->inquote = 0; return JIM_OK; } break; } pc->p++; pc->len--; } return JIM_OK; } static int JimParseComment(struct JimParserCtx *pc) { while (*pc->p) { if (*pc->p == '\\') { pc->p++; pc->len--; if (pc->len == 0) { pc->missing.ch = '\\'; return JIM_OK; } if (*pc->p == '\n') { pc->linenr++; } } else if (*pc->p == '\n') { pc->p++; pc->len--; pc->linenr++; break; } pc->p++; pc->len--; } return JIM_OK; } static int xdigitval(int c) { if (c >= '0' && c <= '9') return c - '0'; if (c >= 'a' && c <= 'f') return c - 'a' + 10; if (c >= 'A' && c <= 'F') return c - 'A' + 10; return -1; } static int odigitval(int c) { if (c >= '0' && c <= '7') return c - '0'; return -1; } static int JimEscape(char *dest, const char *s, int slen) { char *p = dest; int i, len; for (i = 0; i < slen; i++) { switch (s[i]) { case '\\': switch (s[i + 1]) { case 'a': *p++ = 0x7; i++; break; case 'b': *p++ = 0x8; i++; break; case 'f': *p++ = 0xc; i++; break; case 'n': *p++ = 0xa; i++; break; case 'r': *p++ = 0xd; i++; break; case 't': *p++ = 0x9; i++; break; case 'u': case 'U': case 'x': { unsigned val = 0; int k; int maxchars = 2; i++; if (s[i] == 'U') { maxchars = 8; } else if (s[i] == 'u') { if (s[i + 1] == '{') { maxchars = 6; i++; } else { maxchars = 4; } } for (k = 0; k < maxchars; k++) { int c = xdigitval(s[i + k + 1]); if (c == -1) { break; } val = (val << 4) | c; } if (s[i] == '{') { if (k == 0 || val > 0x1fffff || s[i + k + 1] != '}') { i--; k = 0; } else { k++; } } if (k) { if (s[i] == 'x') { *p++ = val; } else { p += utf8_fromunicode(p, val); } i += k; break; } *p++ = s[i]; } break; case 'v': *p++ = 0xb; i++; break; case '\0': *p++ = '\\'; i++; break; case '\n': *p++ = ' '; do { i++; } while (s[i + 1] == ' ' || s[i + 1] == '\t'); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': { int val = 0; int c = odigitval(s[i + 1]); val = c; c = odigitval(s[i + 2]); if (c == -1) { *p++ = val; i++; break; } val = (val * 8) + c; c = odigitval(s[i + 3]); if (c == -1) { *p++ = val; i += 2; break; } val = (val * 8) + c; *p++ = val; i += 3; } break; default: *p++ = s[i + 1]; i++; break; } break; default: *p++ = s[i]; break; } } len = p - dest; *p = '\0'; return len; } static Jim_Obj *JimParserGetTokenObj(Jim_Interp *interp, struct JimParserCtx *pc) { const char *start, *end; char *token; int len; start = pc->tstart; end = pc->tend; len = (end - start) + 1; if (len < 0) { len = 0; } token = Jim_Alloc(len + 1); if (pc->tt != JIM_TT_ESC) { memcpy(token, start, len); token[len] = '\0'; } else { len = JimEscape(token, start, len); } return Jim_NewStringObjNoAlloc(interp, token, len); } static int JimParseListSep(struct JimParserCtx *pc); static int JimParseListStr(struct JimParserCtx *pc); static int JimParseListQuote(struct JimParserCtx *pc); static int JimParseList(struct JimParserCtx *pc) { if (isspace(UCHAR(*pc->p))) { return JimParseListSep(pc); } switch (*pc->p) { case '"': return JimParseListQuote(pc); case '{': return JimParseBrace(pc); default: if (pc->len) { return JimParseListStr(pc); } break; } pc->tstart = pc->tend = pc->p; pc->tline = pc->linenr; pc->tt = JIM_TT_EOL; pc->eof = 1; return JIM_OK; } static int JimParseListSep(struct JimParserCtx *pc) { pc->tstart = pc->p; pc->tline = pc->linenr; while (isspace(UCHAR(*pc->p))) { if (*pc->p == '\n') { pc->linenr++; } pc->p++; pc->len--; } pc->tend = pc->p - 1; pc->tt = JIM_TT_SEP; return JIM_OK; } static int JimParseListQuote(struct JimParserCtx *pc) { pc->p++; pc->len--; pc->tstart = pc->p; pc->tline = pc->linenr; pc->tt = JIM_TT_STR; while (pc->len) { switch (*pc->p) { case '\\': pc->tt = JIM_TT_ESC; if (--pc->len == 0) { pc->tend = pc->p; return JIM_OK; } pc->p++; break; case '\n': pc->linenr++; break; case '"': pc->tend = pc->p - 1; pc->p++; pc->len--; return JIM_OK; } pc->p++; pc->len--; } pc->tend = pc->p - 1; return JIM_OK; } static int JimParseListStr(struct JimParserCtx *pc) { pc->tstart = pc->p; pc->tline = pc->linenr; pc->tt = JIM_TT_STR; while (pc->len) { if (isspace(UCHAR(*pc->p))) { pc->tend = pc->p - 1; return JIM_OK; } if (*pc->p == '\\') { if (--pc->len == 0) { pc->tend = pc->p; return JIM_OK; } pc->tt = JIM_TT_ESC; pc->p++; } pc->p++; pc->len--; } pc->tend = pc->p - 1; return JIM_OK; } Jim_Obj *Jim_NewObj(Jim_Interp *interp) { Jim_Obj *objPtr; if (interp->freeList != NULL) { objPtr = interp->freeList; interp->freeList = objPtr->nextObjPtr; } else { objPtr = Jim_Alloc(sizeof(*objPtr)); } objPtr->refCount = 0; objPtr->taint = interp->taint; objPtr->prevObjPtr = NULL; objPtr->nextObjPtr = interp->liveList; if (interp->liveList) interp->liveList->prevObjPtr = objPtr; interp->liveList = objPtr; return objPtr; } void Jim_FreeObj(Jim_Interp *interp, Jim_Obj *objPtr) { JimPanic((objPtr->refCount != 0, "!!!Object %p freed with bad refcount %d, type=%s", objPtr, objPtr->refCount, objPtr->typePtr ? objPtr->typePtr->name : "")); Jim_FreeIntRep(interp, objPtr); if (objPtr->bytes != NULL) { if (objPtr->bytes != JimEmptyStringRep) Jim_Free(objPtr->bytes); } if (objPtr->prevObjPtr) objPtr->prevObjPtr->nextObjPtr = objPtr->nextObjPtr; if (objPtr->nextObjPtr) objPtr->nextObjPtr->prevObjPtr = objPtr->prevObjPtr; if (interp->liveList == objPtr) interp->liveList = objPtr->nextObjPtr; #ifdef JIM_DISABLE_OBJECT_POOL Jim_Free(objPtr); #else objPtr->prevObjPtr = NULL; objPtr->nextObjPtr = interp->freeList; if (interp->freeList) interp->freeList->prevObjPtr = objPtr; interp->freeList = objPtr; objPtr->refCount = -1; #endif } void Jim_InvalidateStringRep(Jim_Obj *objPtr) { if (objPtr->bytes != NULL) { if (objPtr->bytes != JimEmptyStringRep) Jim_Free(objPtr->bytes); } objPtr->bytes = NULL; } Jim_Obj *Jim_DuplicateObj(Jim_Interp *interp, Jim_Obj *objPtr) { Jim_Obj *dupPtr; dupPtr = Jim_NewObj(interp); dupPtr->taint = objPtr->taint; if (objPtr->bytes == NULL) { dupPtr->bytes = NULL; } else if (objPtr->length == 0) { dupPtr->bytes = JimEmptyStringRep; dupPtr->length = 0; dupPtr->typePtr = NULL; return dupPtr; } else { dupPtr->bytes = Jim_Alloc(objPtr->length + 1); dupPtr->length = objPtr->length; memcpy(dupPtr->bytes, objPtr->bytes, objPtr->length + 1); } dupPtr->typePtr = objPtr->typePtr; if (objPtr->typePtr != NULL) { if (objPtr->typePtr->dupIntRepProc == NULL) { dupPtr->internalRep = objPtr->internalRep; } else { objPtr->typePtr->dupIntRepProc(interp, objPtr, dupPtr); } } return dupPtr; } const char *Jim_GetString(Jim_Obj *objPtr, int *lenPtr) { if (objPtr->bytes == NULL) { JimPanic((objPtr->typePtr->updateStringProc == NULL, "UpdateStringProc called against '%s' type.", objPtr->typePtr->name)); objPtr->typePtr->updateStringProc(objPtr); } if (lenPtr) *lenPtr = objPtr->length; return objPtr->bytes; } int Jim_Length(Jim_Obj *objPtr) { if (objPtr->bytes == NULL) { Jim_GetString(objPtr, NULL); } return objPtr->length; } const char *Jim_String(Jim_Obj *objPtr) { if (objPtr->bytes == NULL) { Jim_GetString(objPtr, NULL); } return objPtr->bytes; } static void JimSetStringBytes(Jim_Obj *objPtr, const char *str) { objPtr->bytes = Jim_StrDup(str); objPtr->length = strlen(str); } static void FreeDictSubstInternalRep(Jim_Interp *interp, Jim_Obj *objPtr); static void DupDictSubstInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr); static const Jim_ObjType dictSubstObjType = { "dict-substitution", FreeDictSubstInternalRep, DupDictSubstInternalRep, NULL, JIM_TYPE_NONE, }; static void FreeInterpolatedInternalRep(Jim_Interp *interp, Jim_Obj *objPtr); static void DupInterpolatedInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr); static const Jim_ObjType interpolatedObjType = { "interpolated", FreeInterpolatedInternalRep, DupInterpolatedInternalRep, NULL, JIM_TYPE_NONE, }; static void FreeInterpolatedInternalRep(Jim_Interp *interp, Jim_Obj *objPtr) { Jim_DecrRefCount(interp, objPtr->internalRep.dictSubstValue.indexObjPtr); } static void DupInterpolatedInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr) { dupPtr->internalRep = srcPtr->internalRep; Jim_IncrRefCount(dupPtr->internalRep.dictSubstValue.indexObjPtr); } static void DupStringInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr); static int SetStringFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr); static const Jim_ObjType stringObjType = { "string", NULL, DupStringInternalRep, NULL, JIM_TYPE_REFERENCES, }; static void DupStringInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr) { JIM_NOTUSED(interp); dupPtr->internalRep.strValue.maxLength = srcPtr->length; dupPtr->internalRep.strValue.charLength = srcPtr->internalRep.strValue.charLength; } static int SetStringFromAny(Jim_Interp *interp, Jim_Obj *objPtr) { if (objPtr->typePtr != &stringObjType) { if (objPtr->bytes == NULL) { JimPanic((objPtr->typePtr->updateStringProc == NULL, "UpdateStringProc called against '%s' type.", objPtr->typePtr->name)); objPtr->typePtr->updateStringProc(objPtr); } Jim_FreeIntRep(interp, objPtr); objPtr->typePtr = &stringObjType; objPtr->internalRep.strValue.maxLength = objPtr->length; objPtr->internalRep.strValue.charLength = -1; } return JIM_OK; } int Jim_Utf8Length(Jim_Interp *interp, Jim_Obj *objPtr) { #ifdef JIM_UTF8 SetStringFromAny(interp, objPtr); if (objPtr->internalRep.strValue.charLength < 0) { objPtr->internalRep.strValue.charLength = utf8_strlen(objPtr->bytes, objPtr->length); } return objPtr->internalRep.strValue.charLength; #else return Jim_Length(objPtr); #endif } Jim_Obj *Jim_NewStringObj(Jim_Interp *interp, const char *s, int len) { Jim_Obj *objPtr = Jim_NewObj(interp); if (len == -1) len = strlen(s); if (len == 0) { objPtr->bytes = JimEmptyStringRep; } else { objPtr->bytes = Jim_StrDupLen(s, len); } objPtr->length = len; objPtr->typePtr = NULL; return objPtr; } Jim_Obj *Jim_NewStringObjUtf8(Jim_Interp *interp, const char *s, int charlen) { #ifdef JIM_UTF8 int bytelen = utf8_index(s, charlen); Jim_Obj *objPtr = Jim_NewStringObj(interp, s, bytelen); objPtr->typePtr = &stringObjType; objPtr->internalRep.strValue.maxLength = bytelen; objPtr->internalRep.strValue.charLength = charlen; return objPtr; #else return Jim_NewStringObj(interp, s, charlen); #endif } Jim_Obj *Jim_NewStringObjNoAlloc(Jim_Interp *interp, char *s, int len) { Jim_Obj *objPtr = Jim_NewObj(interp); objPtr->bytes = s; objPtr->length = (len == -1) ? strlen(s) : len; objPtr->typePtr = NULL; return objPtr; } static void StringAppendString(Jim_Obj *objPtr, const char *str, int len) { int needlen; if (len == -1) len = strlen(str); needlen = objPtr->length + len; if (objPtr->internalRep.strValue.maxLength < needlen || objPtr->internalRep.strValue.maxLength == 0) { needlen *= 2; if (needlen < 7) { needlen = 7; } if (objPtr->bytes == JimEmptyStringRep) { objPtr->bytes = Jim_Alloc(needlen + 1); } else { objPtr->bytes = Jim_Realloc(objPtr->bytes, needlen + 1); } objPtr->internalRep.strValue.maxLength = needlen; } memcpy(objPtr->bytes + objPtr->length, str, len); objPtr->bytes[objPtr->length + len] = '\0'; if (objPtr->internalRep.strValue.charLength >= 0) { objPtr->internalRep.strValue.charLength += utf8_strlen(objPtr->bytes + objPtr->length, len); } objPtr->length += len; } void Jim_AppendString(Jim_Interp *interp, Jim_Obj *objPtr, const char *str, int len) { JimPanic((Jim_IsShared(objPtr), "Jim_AppendString called with shared object")); SetStringFromAny(interp, objPtr); StringAppendString(objPtr, str, len); } void Jim_AppendObj(Jim_Interp *interp, Jim_Obj *objPtr, Jim_Obj *appendObjPtr) { int len; const char *str = Jim_GetString(appendObjPtr, &len); Jim_AppendString(interp, objPtr, str, len); objPtr->taint |= appendObjPtr->taint; } void Jim_AppendStrings(Jim_Interp *interp, Jim_Obj *objPtr, ...) { va_list ap; SetStringFromAny(interp, objPtr); va_start(ap, objPtr); while (1) { const char *s = va_arg(ap, const char *); if (s == NULL) break; Jim_AppendString(interp, objPtr, s, -1); } va_end(ap); } int Jim_StringEqObj(Jim_Obj *aObjPtr, Jim_Obj *bObjPtr) { if (aObjPtr == bObjPtr) { return 1; } else { int Alen, Blen; const char *sA = Jim_GetString(aObjPtr, &Alen); const char *sB = Jim_GetString(bObjPtr, &Blen); return Alen == Blen && *sA == *sB && memcmp(sA, sB, Alen) == 0; } } int Jim_StringMatchObj(Jim_Interp *interp, Jim_Obj *patternObjPtr, Jim_Obj *objPtr, int nocase) { int plen, slen; const char *pattern = Jim_GetString(patternObjPtr, &plen); const char *string = Jim_GetString(objPtr, &slen); return JimGlobMatch(pattern, plen, string, slen, nocase); } int Jim_StringCompareObj(Jim_Interp *interp, Jim_Obj *firstObjPtr, Jim_Obj *secondObjPtr, int nocase) { const char *s1 = Jim_String(firstObjPtr); int l1 = Jim_Utf8Length(interp, firstObjPtr); const char *s2 = Jim_String(secondObjPtr); int l2 = Jim_Utf8Length(interp, secondObjPtr); return JimStringCompareUtf8(s1, l1, s2, l2, nocase); } static int JimRelToAbsIndex(int len, int idx) { if (idx < 0 && idx > -INT_MAX) return len + idx; return idx; } static void JimRelToAbsRange(int len, int *firstPtr, int *lastPtr, int *rangeLenPtr) { int rangeLen; if (*firstPtr > *lastPtr) { rangeLen = 0; } else { rangeLen = *lastPtr - *firstPtr + 1; if (rangeLen) { if (*firstPtr < 0) { rangeLen += *firstPtr; *firstPtr = 0; } if (*lastPtr >= len) { rangeLen -= (*lastPtr - (len - 1)); *lastPtr = len - 1; } } } if (rangeLen < 0) rangeLen = 0; *rangeLenPtr = rangeLen; } static int JimStringGetRange(Jim_Interp *interp, Jim_Obj *firstObjPtr, Jim_Obj *lastObjPtr, int len, int *first, int *last, int *range) { if (Jim_GetIndex(interp, firstObjPtr, first) != JIM_OK) { return JIM_ERR; } if (Jim_GetIndex(interp, lastObjPtr, last) != JIM_OK) { return JIM_ERR; } *first = JimRelToAbsIndex(len, *first); *last = JimRelToAbsIndex(len, *last); JimRelToAbsRange(len, first, last, range); return JIM_OK; } Jim_Obj *Jim_StringByteRangeObj(Jim_Interp *interp, Jim_Obj *strObjPtr, Jim_Obj *firstObjPtr, Jim_Obj *lastObjPtr) { int first, last; const char *str; int rangeLen; int bytelen; str = Jim_GetString(strObjPtr, &bytelen); if (JimStringGetRange(interp, firstObjPtr, lastObjPtr, bytelen, &first, &last, &rangeLen) != JIM_OK) { return NULL; } if (first == 0 && rangeLen == bytelen) { return strObjPtr; } return Jim_NewStringObj(interp, str + first, rangeLen); } Jim_Obj *Jim_StringRangeObj(Jim_Interp *interp, Jim_Obj *strObjPtr, Jim_Obj *firstObjPtr, Jim_Obj *lastObjPtr) { #ifdef JIM_UTF8 int first, last; const char *str; int len, rangeLen; int bytelen; str = Jim_GetString(strObjPtr, &bytelen); len = Jim_Utf8Length(interp, strObjPtr); if (JimStringGetRange(interp, firstObjPtr, lastObjPtr, len, &first, &last, &rangeLen) != JIM_OK) { return NULL; } if (first == 0 && rangeLen == len) { return strObjPtr; } if (len == bytelen) { return Jim_NewStringObj(interp, str + first, rangeLen); } return Jim_NewStringObjUtf8(interp, str + utf8_index(str, first), rangeLen); #else return Jim_StringByteRangeObj(interp, strObjPtr, firstObjPtr, lastObjPtr); #endif } Jim_Obj *JimStringReplaceObj(Jim_Interp *interp, Jim_Obj *strObjPtr, Jim_Obj *firstObjPtr, Jim_Obj *lastObjPtr, Jim_Obj *newStrObj) { int first, last; const char *str; int len, rangeLen; Jim_Obj *objPtr; len = Jim_Utf8Length(interp, strObjPtr); if (JimStringGetRange(interp, firstObjPtr, lastObjPtr, len, &first, &last, &rangeLen) != JIM_OK) { return NULL; } if (last < first) { return strObjPtr; } str = Jim_String(strObjPtr); objPtr = Jim_NewStringObjUtf8(interp, str, first); if (newStrObj) { Jim_AppendObj(interp, objPtr, newStrObj); } Jim_AppendString(interp, objPtr, str + utf8_index(str, last + 1), len - last - 1); return objPtr; } static void JimStrCopyUpperLower(char *dest, const char *str, int uc) { while (*str) { int c; str += utf8_tounicode(str, &c); dest += utf8_getchars(dest, uc ? utf8_upper(c) : utf8_lower(c)); } *dest = 0; } static Jim_Obj *JimStringToLower(Jim_Interp *interp, Jim_Obj *strObjPtr) { char *buf; int len; const char *str; str = Jim_GetString(strObjPtr, &len); #ifdef JIM_UTF8 len *= 2; #endif buf = Jim_Alloc(len + 1); JimStrCopyUpperLower(buf, str, 0); return Jim_NewStringObjNoAlloc(interp, buf, -1); } static Jim_Obj *JimStringToUpper(Jim_Interp *interp, Jim_Obj *strObjPtr) { char *buf; const char *str; int len; str = Jim_GetString(strObjPtr, &len); #ifdef JIM_UTF8 len *= 2; #endif buf = Jim_Alloc(len + 1); JimStrCopyUpperLower(buf, str, 1); return Jim_NewStringObjNoAlloc(interp, buf, -1); } static Jim_Obj *JimStringToTitle(Jim_Interp *interp, Jim_Obj *strObjPtr) { char *buf, *p; int len; int c; const char *str; str = Jim_GetString(strObjPtr, &len); #ifdef JIM_UTF8 len *= 2; #endif buf = p = Jim_Alloc(len + 1); str += utf8_tounicode(str, &c); p += utf8_getchars(p, utf8_title(c)); JimStrCopyUpperLower(p, str, 0); return Jim_NewStringObjNoAlloc(interp, buf, -1); } static const char *utf8_memchr(const char *str, int len, int c) { #ifdef JIM_UTF8 while (len) { int sc; int n = utf8_tounicode(str, &sc); if (sc == c) { return str; } str += n; len -= n; } return NULL; #else return memchr(str, c, len); #endif } static const char *JimFindTrimLeft(const char *str, int len, const char *trimchars, int trimlen) { while (len) { int c; int n = utf8_tounicode(str, &c); if (utf8_memchr(trimchars, trimlen, c) == NULL) { break; } str += n; len -= n; } return str; } static const char *JimFindTrimRight(const char *str, int len, const char *trimchars, int trimlen) { str += len; while (len) { int c; int n = utf8_prev_len(str, len); len -= n; str -= n; n = utf8_tounicode(str, &c); if (utf8_memchr(trimchars, trimlen, c) == NULL) { return str + n; } } return NULL; } static const char default_trim_chars[] = " \t\n\r"; static int default_trim_chars_len = sizeof(default_trim_chars); static Jim_Obj *JimStringTrimLeft(Jim_Interp *interp, Jim_Obj *strObjPtr, Jim_Obj *trimcharsObjPtr) { int len; const char *str = Jim_GetString(strObjPtr, &len); const char *trimchars = default_trim_chars; int trimcharslen = default_trim_chars_len; const char *newstr; if (trimcharsObjPtr) { trimchars = Jim_GetString(trimcharsObjPtr, &trimcharslen); } newstr = JimFindTrimLeft(str, len, trimchars, trimcharslen); if (newstr == str) { return strObjPtr; } return Jim_NewStringObj(interp, newstr, len - (newstr - str)); } static Jim_Obj *JimStringTrimRight(Jim_Interp *interp, Jim_Obj *strObjPtr, Jim_Obj *trimcharsObjPtr) { int len; const char *trimchars = default_trim_chars; int trimcharslen = default_trim_chars_len; const char *nontrim; if (trimcharsObjPtr) { trimchars = Jim_GetString(trimcharsObjPtr, &trimcharslen); } SetStringFromAny(interp, strObjPtr); len = Jim_Length(strObjPtr); nontrim = JimFindTrimRight(strObjPtr->bytes, len, trimchars, trimcharslen); if (nontrim == NULL) { return Jim_NewEmptyStringObj(interp); } if (nontrim == strObjPtr->bytes + len) { return strObjPtr; } if (Jim_IsShared(strObjPtr)) { strObjPtr = Jim_NewStringObj(interp, strObjPtr->bytes, (nontrim - strObjPtr->bytes)); } else { strObjPtr->bytes[nontrim - strObjPtr->bytes] = 0; strObjPtr->length = (nontrim - strObjPtr->bytes); } return strObjPtr; } static Jim_Obj *JimStringTrim(Jim_Interp *interp, Jim_Obj *strObjPtr, Jim_Obj *trimcharsObjPtr) { Jim_Obj *objPtr = JimStringTrimLeft(interp, strObjPtr, trimcharsObjPtr); strObjPtr = JimStringTrimRight(interp, objPtr, trimcharsObjPtr); if (objPtr != strObjPtr && objPtr->refCount == 0) { Jim_FreeNewObj(interp, objPtr); } return strObjPtr; } #ifdef HAVE_ISASCII #define jim_isascii isascii #else static int jim_isascii(int c) { return !(c & ~0x7f); } #endif static int JimStringIs(Jim_Interp *interp, Jim_Obj *strObjPtr, Jim_Obj *strClass, int strict) { static const char * const strclassnames[] = { "integer", "alpha", "alnum", "ascii", "digit", "double", "lower", "upper", "space", "xdigit", "control", "print", "graph", "punct", "boolean", NULL }; enum { STR_IS_INTEGER, STR_IS_ALPHA, STR_IS_ALNUM, STR_IS_ASCII, STR_IS_DIGIT, STR_IS_DOUBLE, STR_IS_LOWER, STR_IS_UPPER, STR_IS_SPACE, STR_IS_XDIGIT, STR_IS_CONTROL, STR_IS_PRINT, STR_IS_GRAPH, STR_IS_PUNCT, STR_IS_BOOLEAN, }; int strclass; int len; int i; const char *str; int (*isclassfunc)(int c) = NULL; if (Jim_GetEnum(interp, strClass, strclassnames, &strclass, "class", JIM_ERRMSG | JIM_ENUM_ABBREV) != JIM_OK) { return JIM_ERR; } str = Jim_GetString(strObjPtr, &len); if (len == 0) { Jim_SetResultBool(interp, !strict); return JIM_OK; } switch (strclass) { case STR_IS_INTEGER: { jim_wide w; Jim_SetResultBool(interp, JimGetWideNoErr(interp, strObjPtr, &w) == JIM_OK); return JIM_OK; } case STR_IS_DOUBLE: { double d; Jim_SetResultBool(interp, Jim_GetDouble(interp, strObjPtr, &d) == JIM_OK && errno != ERANGE); return JIM_OK; } case STR_IS_BOOLEAN: { int b; Jim_SetResultBool(interp, Jim_GetBoolean(interp, strObjPtr, &b) == JIM_OK); return JIM_OK; } case STR_IS_ALPHA: isclassfunc = isalpha; break; case STR_IS_ALNUM: isclassfunc = isalnum; break; case STR_IS_ASCII: isclassfunc = jim_isascii; break; case STR_IS_DIGIT: isclassfunc = isdigit; break; case STR_IS_LOWER: isclassfunc = islower; break; case STR_IS_UPPER: isclassfunc = isupper; break; case STR_IS_SPACE: isclassfunc = isspace; break; case STR_IS_XDIGIT: isclassfunc = isxdigit; break; case STR_IS_CONTROL: isclassfunc = iscntrl; break; case STR_IS_PRINT: isclassfunc = isprint; break; case STR_IS_GRAPH: isclassfunc = isgraph; break; case STR_IS_PUNCT: isclassfunc = ispunct; break; default: return JIM_ERR; } for (i = 0; i < len; i++) { if (!isclassfunc(UCHAR(str[i]))) { Jim_SetResultBool(interp, 0); return JIM_OK; } } Jim_SetResultBool(interp, 1); return JIM_OK; } static const Jim_ObjType comparedStringObjType = { "compared-string", NULL, NULL, NULL, JIM_TYPE_REFERENCES, }; int Jim_CompareStringImmediate(Jim_Interp *interp, Jim_Obj *objPtr, const char *str) { if (objPtr->typePtr == &comparedStringObjType && objPtr->internalRep.ptr == str) { return 1; } else { if (strcmp(str, Jim_String(objPtr)) != 0) return 0; if (objPtr->typePtr != &comparedStringObjType) { Jim_FreeIntRep(interp, objPtr); objPtr->typePtr = &comparedStringObjType; } objPtr->internalRep.ptr = (char *)str; return 1; } } static int qsortCompareStringPointers(const void *a, const void *b) { char *const *sa = (char *const *)a; char *const *sb = (char *const *)b; if (strcmp(*sa, "--") == 0) { return 1; } if (strcmp(*sb, "--") == 0) { return -1; } return strcmp(*sa, *sb); } static void FreeSourceInternalRep(Jim_Interp *interp, Jim_Obj *objPtr); static void DupSourceInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr); static const Jim_ObjType sourceObjType = { "source", FreeSourceInternalRep, DupSourceInternalRep, NULL, JIM_TYPE_REFERENCES, }; void FreeSourceInternalRep(Jim_Interp *interp, Jim_Obj *objPtr) { Jim_DecrRefCount(interp, objPtr->internalRep.sourceValue.fileNameObj); } void DupSourceInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr) { dupPtr->internalRep.sourceValue = srcPtr->internalRep.sourceValue; Jim_IncrRefCount(dupPtr->internalRep.sourceValue.fileNameObj); } static const Jim_ObjType scriptLineObjType = { "scriptline", NULL, NULL, NULL, JIM_NONE, }; static Jim_Obj *JimNewScriptLineObj(Jim_Interp *interp, int argc, int line) { Jim_Obj *objPtr; #ifdef DEBUG_SHOW_SCRIPT char buf[100]; snprintf(buf, sizeof(buf), "line=%d, argc=%d", line, argc); objPtr = Jim_NewStringObj(interp, buf, -1); #else objPtr = Jim_NewEmptyStringObj(interp); #endif objPtr->typePtr = &scriptLineObjType; objPtr->internalRep.scriptLineValue.argc = argc; objPtr->internalRep.scriptLineValue.line = line; return objPtr; } static void FreeScriptInternalRep(Jim_Interp *interp, Jim_Obj *objPtr); static void DupScriptInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr); static const Jim_ObjType scriptObjType = { "script", FreeScriptInternalRep, DupScriptInternalRep, NULL, JIM_TYPE_NONE, }; typedef struct ScriptToken { Jim_Obj *objPtr; int type; } ScriptToken; typedef struct ScriptObj { ScriptToken *token; Jim_Obj *fileNameObj; int len; int substFlags; int inUse; /* Used to share a ScriptObj. Currently only used by Jim_EvalObj() as protection against shimmering of the currently evaluated object. */ int firstline; int linenr; int missing; } ScriptObj; static void JimSetScriptFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr); static int JimParseCheckMissing(Jim_Interp *interp, int ch); static ScriptObj *JimGetScript(Jim_Interp *interp, Jim_Obj *objPtr); static void JimSetErrorStack(Jim_Interp *interp, ScriptObj *script); void FreeScriptInternalRep(Jim_Interp *interp, Jim_Obj *objPtr) { int i; struct ScriptObj *script = (void *)objPtr->internalRep.ptr; if (--script->inUse != 0) return; for (i = 0; i < script->len; i++) { Jim_DecrRefCount(interp, script->token[i].objPtr); } Jim_Free(script->token); Jim_DecrRefCount(interp, script->fileNameObj); Jim_Free(script); } void DupScriptInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr) { JIM_NOTUSED(interp); JIM_NOTUSED(srcPtr); dupPtr->typePtr = NULL; } typedef struct { const char *token; int len; int type; int line; } ParseToken; typedef struct { ParseToken *list; int size; int count; ParseToken static_list[20]; } ParseTokenList; static void ScriptTokenListInit(ParseTokenList *tokenlist) { tokenlist->list = tokenlist->static_list; tokenlist->size = sizeof(tokenlist->static_list) / sizeof(ParseToken); tokenlist->count = 0; } static void ScriptTokenListFree(ParseTokenList *tokenlist) { if (tokenlist->list != tokenlist->static_list) { Jim_Free(tokenlist->list); } } static void ScriptAddToken(ParseTokenList *tokenlist, const char *token, int len, int type, int line) { ParseToken *t; if (tokenlist->count == tokenlist->size) { tokenlist->size *= 2; if (tokenlist->list != tokenlist->static_list) { tokenlist->list = Jim_Realloc(tokenlist->list, tokenlist->size * sizeof(*tokenlist->list)); } else { tokenlist->list = Jim_Alloc(tokenlist->size * sizeof(*tokenlist->list)); memcpy(tokenlist->list, tokenlist->static_list, tokenlist->count * sizeof(*tokenlist->list)); } } t = &tokenlist->list[tokenlist->count++]; t->token = token; t->len = len; t->type = type; t->line = line; } static int JimCountWordTokens(struct ScriptObj *script, ParseToken *t) { int expand = 1; int count = 0; if (t->type == JIM_TT_STR && !TOKEN_IS_SEP(t[1].type)) { if ((t->len == 1 && *t->token == '*') || (t->len == 6 && strncmp(t->token, "expand", 6) == 0)) { expand = -1; t++; } else { if (script->missing == ' ') { script->missing = '}'; script->linenr = t[1].line; } } } while (!TOKEN_IS_SEP(t->type)) { t++; count++; } return count * expand; } static Jim_Obj *JimMakeScriptObj(Jim_Interp *interp, const ParseToken *t) { Jim_Obj *objPtr; if (t->type == JIM_TT_ESC && memchr(t->token, '\\', t->len) != NULL) { int len = t->len; char *str = Jim_Alloc(len + 1); len = JimEscape(str, t->token, len); objPtr = Jim_NewStringObjNoAlloc(interp, str, len); } else { objPtr = Jim_NewStringObj(interp, t->token, t->len); } return objPtr; } static void ScriptObjAddTokens(Jim_Interp *interp, struct ScriptObj *script, ParseTokenList *tokenlist) { int i; struct ScriptToken *token; int lineargs = 0; ScriptToken *linefirst; int count; int linenr; #ifdef DEBUG_SHOW_SCRIPT_TOKENS printf("==== Tokens ====\n"); for (i = 0; i < tokenlist->count; i++) { printf("[%2d]@%d %s '%.*s'\n", i, tokenlist->list[i].line, jim_tt_name(tokenlist->list[i].type), tokenlist->list[i].len, tokenlist->list[i].token); } #endif count = tokenlist->count; for (i = 0; i < tokenlist->count; i++) { if (tokenlist->list[i].type == JIM_TT_EOL) { count++; } } linenr = script->firstline = tokenlist->list[0].line; token = script->token = Jim_Alloc(sizeof(ScriptToken) * count); linefirst = token++; for (i = 0; i < tokenlist->count; ) { int wordtokens; while (tokenlist->list[i].type == JIM_TT_SEP) { i++; } wordtokens = JimCountWordTokens(script, tokenlist->list + i); if (wordtokens == 0) { if (lineargs) { linefirst->type = JIM_TT_LINE; linefirst->objPtr = JimNewScriptLineObj(interp, lineargs, linenr); Jim_IncrRefCount(linefirst->objPtr); lineargs = 0; linefirst = token++; } i++; continue; } else if (wordtokens != 1) { token->type = JIM_TT_WORD; token->objPtr = Jim_NewIntObj(interp, wordtokens); Jim_IncrRefCount(token->objPtr); token++; if (wordtokens < 0) { i++; wordtokens = -wordtokens - 1; lineargs--; } } if (lineargs == 0) { linenr = tokenlist->list[i].line; } lineargs++; while (wordtokens--) { const ParseToken *t = &tokenlist->list[i++]; token->type = t->type; token->objPtr = JimMakeScriptObj(interp, t); Jim_IncrRefCount(token->objPtr); Jim_SetSourceInfo(interp, token->objPtr, script->fileNameObj, t->line); token++; } } if (lineargs == 0) { token--; } script->len = token - script->token; JimPanic((script->len >= count, "allocated script array is too short")); #ifdef DEBUG_SHOW_SCRIPT printf("==== Script (%s) ====\n", Jim_String(script->fileNameObj)); for (i = 0; i < script->len; i++) { const ScriptToken *t = &script->token[i]; printf("[%2d] %s %s\n", i, jim_tt_name(t->type), Jim_String(t->objPtr)); } #endif } int Jim_ScriptIsComplete(Jim_Interp *interp, Jim_Obj *scriptObj, char *stateCharPtr) { ScriptObj *script = JimGetScript(interp, scriptObj); if (stateCharPtr) { *stateCharPtr = script->missing; } return script->missing == ' ' || script->missing == '}'; } static int JimParseCheckMissing(Jim_Interp *interp, int ch) { const char *msg; switch (ch) { case '\\': case ' ': return JIM_OK; case '[': msg = "unmatched \"[\""; break; case '{': msg = "missing close-brace"; break; case '}': msg = "extra characters after close-brace"; break; case '"': default: msg = "missing quote"; break; } Jim_SetResultString(interp, msg, -1); return JIM_ERR; } Jim_Obj *Jim_GetSourceInfo(Jim_Interp *interp, Jim_Obj *objPtr, int *lineptr) { int line; Jim_Obj *fileNameObj; if (objPtr->typePtr == &sourceObjType) { fileNameObj = objPtr->internalRep.sourceValue.fileNameObj; line = objPtr->internalRep.sourceValue.lineNumber; } else if (objPtr->typePtr == &scriptObjType) { ScriptObj *script = JimGetScript(interp, objPtr); fileNameObj = script->fileNameObj; line = script->firstline; } else { fileNameObj = interp->emptyObj; line = 1; } *lineptr = line; return fileNameObj; } void Jim_SetSourceInfo(Jim_Interp *interp, Jim_Obj *objPtr, Jim_Obj *fileNameObj, int lineNumber) { JimPanic((Jim_IsShared(objPtr), "Jim_SetSourceInfo called with shared object")); Jim_FreeIntRep(interp, objPtr); Jim_IncrRefCount(fileNameObj); objPtr->internalRep.sourceValue.fileNameObj = fileNameObj; objPtr->internalRep.sourceValue.lineNumber = lineNumber; objPtr->typePtr = &sourceObjType; } static void SubstObjAddTokens(Jim_Interp *interp, struct ScriptObj *script, ParseTokenList *tokenlist) { int i; struct ScriptToken *token; token = script->token = Jim_Alloc(sizeof(ScriptToken) * tokenlist->count); for (i = 0; i < tokenlist->count; i++) { const ParseToken *t = &tokenlist->list[i]; token->type = t->type; token->objPtr = JimMakeScriptObj(interp, t); Jim_IncrRefCount(token->objPtr); token++; } script->len = i; } static void JimSetScriptFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr) { int scriptTextLen; const char *scriptText = Jim_GetString(objPtr, &scriptTextLen); struct JimParserCtx parser; struct ScriptObj *script; ParseTokenList tokenlist; Jim_Obj *fileNameObj; int line; int oldtaint; fileNameObj = Jim_GetSourceInfo(interp, objPtr, &line); ScriptTokenListInit(&tokenlist); JimParserInit(&parser, scriptText, scriptTextLen, line); while (!parser.eof) { JimParseScript(&parser); ScriptAddToken(&tokenlist, parser.tstart, parser.tend - parser.tstart + 1, parser.tt, parser.tline); } ScriptAddToken(&tokenlist, scriptText + scriptTextLen, 0, JIM_TT_EOF, 0); oldtaint = interp->taint; interp->taint = objPtr->taint; script = Jim_Alloc(sizeof(*script)); memset(script, 0, sizeof(*script)); script->inUse = 1; script->fileNameObj = fileNameObj; Jim_IncrRefCount(script->fileNameObj); script->missing = parser.missing.ch; script->linenr = parser.missing.line; ScriptObjAddTokens(interp, script, &tokenlist); ScriptTokenListFree(&tokenlist); Jim_FreeIntRep(interp, objPtr); Jim_SetIntRepPtr(objPtr, script); objPtr->typePtr = &scriptObjType; interp->taint = oldtaint; } static ScriptObj *JimGetScript(Jim_Interp *interp, Jim_Obj *objPtr) { if (objPtr == interp->emptyObj) { objPtr = interp->nullScriptObj; } if (objPtr->typePtr != &scriptObjType || ((struct ScriptObj *)Jim_GetIntRepPtr(objPtr))->substFlags) { JimSetScriptFromAny(interp, objPtr); } return (ScriptObj *)Jim_GetIntRepPtr(objPtr); } void Jim_InterpIncrProcEpoch(Jim_Interp *interp) { interp->procEpoch++; while (interp->oldCmdCache) { Jim_Cmd *next = interp->oldCmdCache->prevCmd; Jim_Free(interp->oldCmdCache); interp->oldCmdCache = next; } interp->oldCmdCacheSize = 0; } static void JimIncrCmdRefCount(Jim_Cmd *cmdPtr) { cmdPtr->inUse++; } static void JimDecrCmdRefCount(Jim_Interp *interp, Jim_Cmd *cmdPtr) { if (--cmdPtr->inUse == 0) { if (cmdPtr->flags & JIM_CMD_ISPROC) { Jim_DecrRefCount(interp, cmdPtr->u.proc.argListObjPtr); Jim_DecrRefCount(interp, cmdPtr->u.proc.bodyObjPtr); Jim_DecrRefCount(interp, cmdPtr->u.proc.nsObj); if (cmdPtr->u.proc.staticVars) { Jim_FreeHashTable(cmdPtr->u.proc.staticVars); Jim_Free(cmdPtr->u.proc.staticVars); } } else { if (cmdPtr->u.native.delProc) { cmdPtr->u.native.delProc(interp, cmdPtr->u.native.privData); } } if (cmdPtr->prevCmd) { JimDecrCmdRefCount(interp, cmdPtr->prevCmd); } cmdPtr->prevCmd = interp->oldCmdCache; interp->oldCmdCache = cmdPtr; if (!interp->quitting && ++interp->oldCmdCacheSize >= 1000) { Jim_InterpIncrProcEpoch(interp); } } } static void JimIncrVarRef(Jim_VarVal *vv) { vv->refCount++; } static void JimDecrVarRef(Jim_Interp *interp, Jim_VarVal *vv) { assert(vv->refCount > 0); if (--vv->refCount == 0) { if (vv->objPtr) { Jim_DecrRefCount(interp, vv->objPtr); } Jim_Free(vv); } } static void JimVariablesHTValDestructor(void *interp, void *val) { JimDecrVarRef(interp, val); } static unsigned int JimObjectHTHashFunction(const void *key) { Jim_Obj *keyObj = (Jim_Obj *)key; int length; const char *string; #ifdef JIM_OPTIMIZATION if (JimIsWide(keyObj) && keyObj->bytes == NULL) { jim_wide objValue = JimWideValue(keyObj); if (objValue > INT_MIN && objValue < INT_MAX) { unsigned result = 0; unsigned value = (unsigned)objValue; if (objValue < 0) { value = (unsigned)-objValue; } do { result += (result << 3) + (value % 10 + '0'); value /= 10; } while (value); if (objValue < 0) { result += (result << 3) + '-'; } return result; } } #endif string = Jim_GetString(keyObj, &length); return Jim_GenHashFunction((const unsigned char *)string, length); } static int JimObjectHTKeyCompare(void *privdata, const void *key1, const void *key2) { return Jim_StringEqObj((Jim_Obj *)key1, (Jim_Obj *)key2); } static void *JimObjectHTKeyValDup(void *privdata, const void *val) { Jim_IncrRefCount((Jim_Obj *)val); return (void *)val; } static void JimObjectHTKeyValDestructor(void *interp, void *val) { Jim_DecrRefCount(interp, (Jim_Obj *)val); } static void *JimVariablesHTValDup(void *privdata, const void *val) { JimIncrVarRef((Jim_VarVal *)val); return (void *)val; } static const Jim_HashTableType JimVariablesHashTableType = { JimObjectHTHashFunction, JimObjectHTKeyValDup, JimVariablesHTValDup, JimObjectHTKeyCompare, JimObjectHTKeyValDestructor, JimVariablesHTValDestructor }; static const char *Jim_GetStringNoQualifier(Jim_Obj *objPtr, int *length) { int len; const char *str = Jim_GetString(objPtr, &len); if (len >= 2 && str[0] == ':' && str[1] == ':') { while (len && *str == ':') { len--; str++; } } *length = len; return str; } static unsigned int JimCommandsHT_HashFunction(const void *key) { int len; const char *str = Jim_GetStringNoQualifier((Jim_Obj *)key, &len); return Jim_GenHashFunction((const unsigned char *)str, len); } static int JimCommandsHT_KeyCompare(void *privdata, const void *key1, const void *key2) { int len1, len2; const char *str1 = Jim_GetStringNoQualifier((Jim_Obj *)key1, &len1); const char *str2 = Jim_GetStringNoQualifier((Jim_Obj *)key2, &len2); return len1 == len2 && *str1 == *str2 && memcmp(str1, str2, len1) == 0; } static void JimCommandsHT_ValDestructor(void *interp, void *val) { JimDecrCmdRefCount(interp, val); } static const Jim_HashTableType JimCommandsHashTableType = { JimCommandsHT_HashFunction, JimObjectHTKeyValDup, NULL, JimCommandsHT_KeyCompare, JimObjectHTKeyValDestructor, JimCommandsHT_ValDestructor }; Jim_Obj *Jim_MakeGlobalNamespaceName(Jim_Interp *interp, Jim_Obj *nameObjPtr) { #ifdef jim_ext_namespace Jim_Obj *resultObj; const char *name = Jim_String(nameObjPtr); if (name[0] == ':' && name[1] == ':') { return nameObjPtr; } Jim_IncrRefCount(nameObjPtr); resultObj = Jim_NewStringObj(interp, "::", -1); Jim_AppendObj(interp, resultObj, nameObjPtr); Jim_DecrRefCount(interp, nameObjPtr); return resultObj; #else return nameObjPtr; #endif } static Jim_Obj *JimQualifyName(Jim_Interp *interp, Jim_Obj *objPtr) { #ifdef jim_ext_namespace if (Jim_Length(interp->framePtr->nsObj)) { int len; const char *name = Jim_GetString(objPtr, &len); if (len < 2 || name[0] != ':' || name[1] != ':') { objPtr = Jim_DuplicateObj(interp, interp->framePtr->nsObj); Jim_AppendStrings(interp, objPtr, "::", name, NULL); } } #endif Jim_IncrRefCount(objPtr); return objPtr; } static void JimCreateCommand(Jim_Interp *interp, Jim_Obj *nameObjPtr, Jim_Cmd *cmd) { JimPanic((nameObjPtr->refCount == 0, "JimCreateCommand called with zero ref count name")); if (interp->local) { Jim_HashEntry *he = Jim_FindHashEntry(&interp->commands, nameObjPtr); if (he) { cmd->prevCmd = Jim_GetHashEntryVal(he); Jim_SetHashVal(&interp->commands, he, cmd); Jim_InterpIncrProcEpoch(interp); return; } } Jim_ReplaceHashEntry(&interp->commands, nameObjPtr, cmd); } Jim_Cmd *Jim_RegisterCommand(Jim_Interp *interp, Jim_Obj *cmdNameObj, Jim_CmdProc *cmdProc, Jim_DelCmdProc *delProc, const char *usage, const char *help, short minargs, short maxargs, int flags, void *privData) { JimPanic(((flags & JIM_CMD_ISPROC), "Jim_RegisterCommand called with JIM_CMD_ISPROC flag")); Jim_Cmd *cmdPtr = Jim_Alloc(sizeof(*cmdPtr)); memset(cmdPtr, 0, sizeof(*cmdPtr)); cmdPtr->inUse = 1; cmdPtr->flags = flags; cmdPtr->u.native.delProc = delProc; cmdPtr->u.native.cmdProc = cmdProc; cmdPtr->u.native.usage = usage; cmdPtr->u.native.help = help; cmdPtr->u.native.minargs = minargs; cmdPtr->u.native.maxargs = maxargs; cmdPtr->u.native.privData = privData; Jim_IncrRefCount(cmdNameObj); JimCreateCommand(interp, cmdNameObj, cmdPtr); Jim_DecrRefCount(interp, cmdNameObj); return cmdPtr; } int Jim_CreateCommand(Jim_Interp *interp, const char *cmdNameStr, Jim_CmdProc *cmdProc, void *privData, Jim_DelCmdProc *delProc) { Jim_RegisterCmd(interp, cmdNameStr, NULL, 0, -1, cmdProc, delProc, privData, 0); return JIM_OK; } static int JimCreateProcedureStatics(Jim_Interp *interp, Jim_Cmd *cmdPtr, Jim_Obj *staticsListObjPtr) { int len, i; len = Jim_ListLength(interp, staticsListObjPtr); if (len == 0) { return JIM_OK; } cmdPtr->u.proc.staticVars = Jim_Alloc(sizeof(Jim_HashTable)); Jim_InitHashTable(cmdPtr->u.proc.staticVars, &JimVariablesHashTableType, interp); for (i = 0; i < len; i++) { Jim_Obj *initObjPtr = NULL; Jim_Obj *nameObjPtr; Jim_VarVal *vv = NULL; Jim_Obj *objPtr = Jim_ListGetIndex(interp, staticsListObjPtr, i); int subLen = Jim_ListLength(interp, objPtr); int byref = 0; if (subLen != 1 && subLen != 2) { Jim_SetResultFormatted(interp, "too many fields in static specifier \"%#s\"", objPtr); return JIM_ERR; } nameObjPtr = Jim_ListGetIndex(interp, objPtr, 0); if (subLen == 1) { int len; const char *pt = Jim_GetString(nameObjPtr, &len); if (*pt == '&') { nameObjPtr = Jim_NewStringObj(interp, pt + 1, len - 1); byref = 1; } } Jim_IncrRefCount(nameObjPtr); if (subLen == 1) { switch (SetVariableFromAny(interp, nameObjPtr)) { case JIM_DICT_SUGAR: if (byref) { Jim_SetResultFormatted(interp, "Can't link to array element \"%#s\"", nameObjPtr); } else { Jim_SetResultFormatted(interp, "Can't initialise array element \"%#s\"", nameObjPtr); } Jim_DecrRefCount(interp, nameObjPtr); return JIM_ERR; case JIM_OK: if (byref) { vv = nameObjPtr->internalRep.varValue.vv; } else { initObjPtr = Jim_GetVariable(interp, nameObjPtr, JIM_NONE); if (!initObjPtr) { Jim_SetResultFormatted(interp, "Could not resolve upvar \"%#s\"'s value", nameObjPtr); Jim_DecrRefCount(interp, nameObjPtr); return JIM_ERR; } } break; case JIM_ERR: Jim_SetResultFormatted(interp, "variable for initialization of static \"%#s\" not found in the local context", nameObjPtr); Jim_DecrRefCount(interp, nameObjPtr); return JIM_ERR; } } else { initObjPtr = Jim_ListGetIndex(interp, objPtr, 1); } if (vv == NULL) { vv = Jim_Alloc(sizeof(*vv)); vv->objPtr = initObjPtr; Jim_IncrRefCount(vv->objPtr); vv->linkFramePtr = NULL; vv->refCount = 0; } if (JimSetNewVariable(cmdPtr->u.proc.staticVars, nameObjPtr, vv) != JIM_OK) { Jim_SetResultFormatted(interp, "static variable name \"%#s\" duplicated in statics list", nameObjPtr); JimIncrVarRef(vv); JimDecrVarRef(interp, vv); Jim_DecrRefCount(interp, nameObjPtr); return JIM_ERR; } Jim_DecrRefCount(interp, nameObjPtr); } return JIM_OK; } #ifdef jim_ext_namespace static const char *Jim_memrchr(const char *p, int c, int len) { int i; for (i = len; i > 0; i--) { if (p[i] == c) { return p + i; } } return NULL; } #endif static void JimUpdateProcNamespace(Jim_Interp *interp, Jim_Cmd *cmdPtr, Jim_Obj *nameObjPtr) { #ifdef jim_ext_namespace if (cmdPtr->flags & JIM_CMD_ISPROC) { int len; const char *cmdname = Jim_GetStringNoQualifier(nameObjPtr, &len); const char *pt = Jim_memrchr(cmdname, ':', len); if (pt && pt != cmdname && pt[-1] == ':') { pt++; Jim_DecrRefCount(interp, cmdPtr->u.proc.nsObj); cmdPtr->u.proc.nsObj = Jim_NewStringObj(interp, cmdname, pt - cmdname - 2); Jim_IncrRefCount(cmdPtr->u.proc.nsObj); Jim_Obj *tempObj = Jim_NewStringObj(interp, pt, len - (pt - cmdname)); if (Jim_FindHashEntry(&interp->commands, tempObj)) { Jim_InterpIncrProcEpoch(interp); } Jim_FreeNewObj(interp, tempObj); } } #endif } static Jim_Cmd *JimCreateProcedureCmd(Jim_Interp *interp, Jim_Obj *argListObjPtr, Jim_Obj *staticsListObjPtr, Jim_Obj *bodyObjPtr, Jim_Obj *nsObj) { Jim_Cmd *cmdPtr; int argListLen; int i; argListLen = Jim_ListLength(interp, argListObjPtr); cmdPtr = Jim_Alloc(sizeof(*cmdPtr) + sizeof(struct Jim_ProcArg) * argListLen); assert(cmdPtr); memset(cmdPtr, 0, sizeof(*cmdPtr)); cmdPtr->inUse = 1; cmdPtr->flags = JIM_CMD_ISPROC; cmdPtr->u.proc.argListObjPtr = argListObjPtr; cmdPtr->u.proc.argListLen = argListLen; cmdPtr->u.proc.bodyObjPtr = bodyObjPtr; cmdPtr->u.proc.argsPos = -1; cmdPtr->u.proc.arglist = (struct Jim_ProcArg *)(cmdPtr + 1); cmdPtr->u.proc.nsObj = nsObj ? nsObj : interp->emptyObj; Jim_IncrRefCount(argListObjPtr); Jim_IncrRefCount(bodyObjPtr); Jim_IncrRefCount(cmdPtr->u.proc.nsObj); if (staticsListObjPtr && JimCreateProcedureStatics(interp, cmdPtr, staticsListObjPtr) != JIM_OK) { goto err; } for (i = 0; i < argListLen; i++) { Jim_Obj *argPtr; Jim_Obj *nameObjPtr; Jim_Obj *defaultObjPtr; int len; argPtr = Jim_ListGetIndex(interp, argListObjPtr, i); len = Jim_ListLength(interp, argPtr); if (len == 0) { Jim_SetResultString(interp, "argument with no name", -1); err: JimDecrCmdRefCount(interp, cmdPtr); return NULL; } if (len > 2) { Jim_SetResultFormatted(interp, "too many fields in argument specifier \"%#s\"", argPtr); goto err; } if (len == 2) { nameObjPtr = Jim_ListGetIndex(interp, argPtr, 0); defaultObjPtr = Jim_ListGetIndex(interp, argPtr, 1); } else { nameObjPtr = argPtr; defaultObjPtr = NULL; } if (Jim_CompareStringImmediate(interp, nameObjPtr, "args")) { if (cmdPtr->u.proc.argsPos >= 0) { Jim_SetResultString(interp, "'args' specified more than once", -1); goto err; } cmdPtr->u.proc.argsPos = i; } else { if (len == 2) { cmdPtr->u.proc.optArity++; } else { cmdPtr->u.proc.reqArity++; } } cmdPtr->u.proc.arglist[i].nameObjPtr = nameObjPtr; cmdPtr->u.proc.arglist[i].defaultObjPtr = defaultObjPtr; } return cmdPtr; } int Jim_DeleteCommand(Jim_Interp *interp, Jim_Obj *nameObj) { int ret = JIM_OK; nameObj = JimQualifyName(interp, nameObj); if (Jim_DeleteHashEntry(&interp->commands, nameObj) == JIM_ERR) { Jim_SetResultFormatted(interp, "can't delete \"%#s\": command doesn't exist", nameObj); ret = JIM_ERR; } Jim_DecrRefCount(interp, nameObj); return ret; } int Jim_RenameCommand(Jim_Interp *interp, Jim_Obj *oldNameObj, Jim_Obj *newNameObj) { int ret = JIM_ERR; Jim_HashEntry *he; Jim_Cmd *cmdPtr; if (Jim_Length(newNameObj) == 0) { return Jim_DeleteCommand(interp, oldNameObj); } oldNameObj = JimQualifyName(interp, oldNameObj); newNameObj = JimQualifyName(interp, newNameObj); he = Jim_FindHashEntry(&interp->commands, oldNameObj); if (he == NULL) { Jim_SetResultFormatted(interp, "can't rename \"%#s\": command doesn't exist", oldNameObj); } else if (Jim_FindHashEntry(&interp->commands, newNameObj)) { Jim_SetResultFormatted(interp, "can't rename to \"%#s\": command already exists", newNameObj); } else { cmdPtr = Jim_GetHashEntryVal(he); if (cmdPtr->prevCmd) { Jim_SetResultFormatted(interp, "can't rename local command \"%#s\"", oldNameObj); } else { JimIncrCmdRefCount(cmdPtr); JimUpdateProcNamespace(interp, cmdPtr, newNameObj); Jim_AddHashEntry(&interp->commands, newNameObj, cmdPtr); Jim_DeleteHashEntry(&interp->commands, oldNameObj); Jim_InterpIncrProcEpoch(interp); ret = JIM_OK; } } Jim_DecrRefCount(interp, oldNameObj); Jim_DecrRefCount(interp, newNameObj); return ret; } static void FreeCommandInternalRep(Jim_Interp *interp, Jim_Obj *objPtr) { Jim_DecrRefCount(interp, objPtr->internalRep.cmdValue.nsObj); } static void DupCommandInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr) { dupPtr->internalRep.cmdValue = srcPtr->internalRep.cmdValue; dupPtr->typePtr = srcPtr->typePtr; Jim_IncrRefCount(dupPtr->internalRep.cmdValue.nsObj); } static const Jim_ObjType commandObjType = { "command", FreeCommandInternalRep, DupCommandInternalRep, NULL, JIM_TYPE_REFERENCES, }; Jim_Cmd *Jim_GetCommand(Jim_Interp *interp, Jim_Obj *objPtr, int flags) { Jim_Cmd *cmd; if (objPtr->typePtr == &commandObjType && objPtr->internalRep.cmdValue.procEpoch == interp->procEpoch #ifdef jim_ext_namespace && Jim_StringEqObj(objPtr->internalRep.cmdValue.nsObj, interp->framePtr->nsObj) #endif && objPtr->internalRep.cmdValue.cmdPtr->inUse) { cmd = objPtr->internalRep.cmdValue.cmdPtr; } else { Jim_Obj *qualifiedNameObj = JimQualifyName(interp, objPtr); Jim_HashEntry *he = Jim_FindHashEntry(&interp->commands, qualifiedNameObj); #ifdef jim_ext_namespace if (he == NULL && Jim_Length(interp->framePtr->nsObj)) { he = Jim_FindHashEntry(&interp->commands, objPtr); } #endif if (he == NULL) { if (flags & JIM_ERRMSG) { Jim_SetResultFormatted(interp, "invalid command name \"%#s\"", objPtr); } Jim_DecrRefCount(interp, qualifiedNameObj); return NULL; } cmd = Jim_GetHashEntryVal(he); cmd->cmdNameObj = Jim_GetHashEntryKey(he); Jim_FreeIntRep(interp, objPtr); objPtr->typePtr = &commandObjType; objPtr->internalRep.cmdValue.procEpoch = interp->procEpoch; objPtr->internalRep.cmdValue.cmdPtr = cmd; objPtr->internalRep.cmdValue.nsObj = interp->framePtr->nsObj; Jim_IncrRefCount(interp->framePtr->nsObj); Jim_DecrRefCount(interp, qualifiedNameObj); } while ((cmd->flags & JIM_CMD_ISPROC) && cmd->u.proc.upcall) { cmd = cmd->prevCmd; } return cmd; } static const Jim_ObjType variableObjType = { "variable", NULL, NULL, NULL, JIM_TYPE_REFERENCES, }; static int SetVariableFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr) { const char *varName; Jim_CallFrame *framePtr; int global; int len; Jim_VarVal *vv; if (objPtr->typePtr == &variableObjType) { framePtr = objPtr->internalRep.varValue.global ? interp->topFramePtr : interp->framePtr; if (objPtr->internalRep.varValue.callFrameId == framePtr->id) { return JIM_OK; } } else if (objPtr->typePtr == &dictSubstObjType) { return JIM_DICT_SUGAR; } varName = Jim_GetString(objPtr, &len); if (len && varName[len - 1] == ')' && strchr(varName, '(') != NULL) { return JIM_DICT_SUGAR; } if (varName[0] == ':' && varName[1] == ':') { while (*varName == ':') { varName++; len--; } global = 1; framePtr = interp->topFramePtr; Jim_Obj *tempObj = Jim_NewStringObj(interp, varName, len); vv = JimFindVariable(&framePtr->vars, tempObj); Jim_FreeNewObj(interp, tempObj); } else { global = 0; framePtr = interp->framePtr; vv = JimFindVariable(&framePtr->vars, objPtr); if (vv == NULL && framePtr->staticVars) { vv = JimFindVariable(framePtr->staticVars, objPtr); } } if (vv == NULL) { return JIM_ERR; } Jim_FreeIntRep(interp, objPtr); objPtr->typePtr = &variableObjType; objPtr->internalRep.varValue.callFrameId = framePtr->id; objPtr->internalRep.varValue.vv = vv; objPtr->internalRep.varValue.global = global; return JIM_OK; } static int JimDictSugarSet(Jim_Interp *interp, Jim_Obj *ObjPtr, Jim_Obj *valObjPtr); static Jim_Obj *JimDictSugarGet(Jim_Interp *interp, Jim_Obj *objPtr, int flags); static int JimSetNewVariable(Jim_HashTable *ht, Jim_Obj *nameObjPtr, Jim_VarVal *vv) { return Jim_AddHashEntry(ht, nameObjPtr, vv); } static Jim_VarVal *JimFindVariable(Jim_HashTable *ht, Jim_Obj *nameObjPtr) { Jim_HashEntry *he = Jim_FindHashEntry(ht, nameObjPtr); if (he) { return (Jim_VarVal *)Jim_GetHashEntryVal(he); } return NULL; } static int JimUnsetVariable(Jim_HashTable *ht, Jim_Obj *nameObjPtr) { return Jim_DeleteHashEntry(ht, nameObjPtr); } static Jim_VarVal *JimCreateVariable(Jim_Interp *interp, Jim_Obj *nameObjPtr, Jim_Obj *valObjPtr) { const char *name; Jim_CallFrame *framePtr; int global; int len; Jim_VarVal *vv = Jim_Alloc(sizeof(*vv)); vv->objPtr = valObjPtr; Jim_IncrRefCount(valObjPtr); vv->linkFramePtr = NULL; vv->refCount = 0; name = Jim_GetString(nameObjPtr, &len); if (name[0] == ':' && name[1] == ':') { while (*name == ':') { name++; len--; } framePtr = interp->topFramePtr; global = 1; JimSetNewVariable(&framePtr->vars, Jim_NewStringObj(interp, name, len), vv); } else { framePtr = interp->framePtr; global = 0; JimSetNewVariable(&framePtr->vars, nameObjPtr, vv); } Jim_FreeIntRep(interp, nameObjPtr); nameObjPtr->typePtr = &variableObjType; nameObjPtr->internalRep.varValue.callFrameId = framePtr->id; nameObjPtr->internalRep.varValue.vv = vv; nameObjPtr->internalRep.varValue.global = global; return vv; } int Jim_SetVariable(Jim_Interp *interp, Jim_Obj *nameObjPtr, Jim_Obj *valObjPtr) { int ret = JIM_OK; Jim_VarVal *vv; switch (SetVariableFromAny(interp, nameObjPtr)) { case JIM_DICT_SUGAR: ret = JimDictSugarSet(interp, nameObjPtr, valObjPtr); break; case JIM_ERR: if (JimCreateVariable(interp, nameObjPtr, valObjPtr) == NULL) { ret = JIM_ERR; } break; case JIM_OK: vv = nameObjPtr->internalRep.varValue.vv; if (vv->linkFramePtr == NULL) { Jim_IncrRefCount(valObjPtr); Jim_DecrRefCount(interp, vv->objPtr); vv->objPtr = valObjPtr; } else { Jim_CallFrame *savedCallFrame; savedCallFrame = interp->framePtr; interp->framePtr = vv->linkFramePtr; ret = Jim_SetVariable(interp, vv->objPtr, valObjPtr); interp->framePtr = savedCallFrame; } break; } if (ret != JIM_OK && valObjPtr->refCount == 0) { Jim_FreeNewObj(interp, valObjPtr); } return ret; } int Jim_SetVariableStr(Jim_Interp *interp, const char *name, Jim_Obj *objPtr) { Jim_Obj *nameObjPtr; int result; nameObjPtr = Jim_NewStringObj(interp, name, -1); Jim_IncrRefCount(nameObjPtr); result = Jim_SetVariable(interp, nameObjPtr, objPtr); Jim_DecrRefCount(interp, nameObjPtr); return result; } int Jim_SetGlobalVariableStr(Jim_Interp *interp, const char *name, Jim_Obj *objPtr) { Jim_CallFrame *savedFramePtr; int result; savedFramePtr = interp->framePtr; interp->framePtr = interp->topFramePtr; result = Jim_SetVariableStr(interp, name, objPtr); interp->framePtr = savedFramePtr; return result; } int Jim_SetVariableStrWithStr(Jim_Interp *interp, const char *name, const char *val) { Jim_Obj *valObjPtr; int result; valObjPtr = Jim_NewStringObj(interp, val, -1); Jim_IncrRefCount(valObjPtr); result = Jim_SetVariableStr(interp, name, valObjPtr); Jim_DecrRefCount(interp, valObjPtr); return result; } int Jim_SetVariableLink(Jim_Interp *interp, Jim_Obj *nameObjPtr, Jim_Obj *targetNameObjPtr, Jim_CallFrame *targetCallFrame) { const char *varName; const char *targetName; Jim_CallFrame *framePtr; Jim_VarVal *vv; int len; int varnamelen; switch (SetVariableFromAny(interp, nameObjPtr)) { case JIM_DICT_SUGAR: Jim_SetResultFormatted(interp, "bad variable name \"%#s\": upvar won't create a scalar variable that looks like an array element", nameObjPtr); return JIM_ERR; case JIM_OK: vv = nameObjPtr->internalRep.varValue.vv; if (vv->linkFramePtr == NULL) { Jim_SetResultFormatted(interp, "variable \"%#s\" already exists", nameObjPtr); return JIM_ERR; } vv->linkFramePtr = NULL; break; } varName = Jim_GetString(nameObjPtr, &varnamelen); if (varName[0] == ':' && varName[1] == ':') { while (*varName == ':') { varName++; varnamelen--; } framePtr = interp->topFramePtr; } else { framePtr = interp->framePtr; } targetName = Jim_GetString(targetNameObjPtr, &len); if (targetName[0] == ':' && targetName[1] == ':') { while (*targetName == ':') { targetName++; len--; } targetNameObjPtr = Jim_NewStringObj(interp, targetName, len); targetCallFrame = interp->topFramePtr; } Jim_IncrRefCount(targetNameObjPtr); if (framePtr->level < targetCallFrame->level) { Jim_SetResultFormatted(interp, "bad variable name \"%#s\": upvar won't create namespace variable that refers to procedure variable", nameObjPtr); Jim_DecrRefCount(interp, targetNameObjPtr); return JIM_ERR; } if (framePtr == targetCallFrame) { Jim_Obj *objPtr = targetNameObjPtr; while (1) { if (Jim_Length(objPtr) == varnamelen && memcmp(Jim_String(objPtr), varName, varnamelen) == 0) { Jim_SetResultString(interp, "can't upvar from variable to itself", -1); Jim_DecrRefCount(interp, targetNameObjPtr); return JIM_ERR; } if (SetVariableFromAny(interp, objPtr) != JIM_OK) break; vv = objPtr->internalRep.varValue.vv; if (vv->linkFramePtr != targetCallFrame) break; objPtr = vv->objPtr; } } Jim_SetVariable(interp, nameObjPtr, targetNameObjPtr); nameObjPtr->internalRep.varValue.vv->linkFramePtr = targetCallFrame; Jim_DecrRefCount(interp, targetNameObjPtr); return JIM_OK; } Jim_Obj *Jim_GetVariable(Jim_Interp *interp, Jim_Obj *nameObjPtr, int flags) { if (interp->safeexpr) { return nameObjPtr; } switch (SetVariableFromAny(interp, nameObjPtr)) { case JIM_OK:{ Jim_VarVal *vv = nameObjPtr->internalRep.varValue.vv; if (vv->linkFramePtr == NULL) { return vv->objPtr; } else { Jim_Obj *objPtr; Jim_CallFrame *savedCallFrame = interp->framePtr; interp->framePtr = vv->linkFramePtr; objPtr = Jim_GetVariable(interp, vv->objPtr, flags); interp->framePtr = savedCallFrame; if (objPtr) { return objPtr; } } } break; case JIM_DICT_SUGAR: return JimDictSugarGet(interp, nameObjPtr, flags); } if (flags & JIM_ERRMSG) { Jim_SetResultFormatted(interp, "can't read \"%#s\": no such variable", nameObjPtr); } return NULL; } Jim_Obj *Jim_GetGlobalVariable(Jim_Interp *interp, Jim_Obj *nameObjPtr, int flags) { Jim_CallFrame *savedFramePtr; Jim_Obj *objPtr; savedFramePtr = interp->framePtr; interp->framePtr = interp->topFramePtr; objPtr = Jim_GetVariable(interp, nameObjPtr, flags); interp->framePtr = savedFramePtr; return objPtr; } Jim_Obj *Jim_GetVariableStr(Jim_Interp *interp, const char *name, int flags) { Jim_Obj *nameObjPtr, *varObjPtr; nameObjPtr = Jim_NewStringObj(interp, name, -1); Jim_IncrRefCount(nameObjPtr); varObjPtr = Jim_GetVariable(interp, nameObjPtr, flags); Jim_DecrRefCount(interp, nameObjPtr); return varObjPtr; } Jim_Obj *Jim_GetGlobalVariableStr(Jim_Interp *interp, const char *name, int flags) { Jim_CallFrame *savedFramePtr; Jim_Obj *objPtr; savedFramePtr = interp->framePtr; interp->framePtr = interp->topFramePtr; objPtr = Jim_GetVariableStr(interp, name, flags); interp->framePtr = savedFramePtr; return objPtr; } int Jim_UnsetVariable(Jim_Interp *interp, Jim_Obj *nameObjPtr, int flags) { Jim_VarVal *vv; int retval; Jim_CallFrame *framePtr; retval = SetVariableFromAny(interp, nameObjPtr); if (retval == JIM_DICT_SUGAR) { return JimDictSugarSet(interp, nameObjPtr, NULL); } else if (retval == JIM_OK) { vv = nameObjPtr->internalRep.varValue.vv; if (vv->linkFramePtr) { framePtr = interp->framePtr; interp->framePtr = vv->linkFramePtr; retval = Jim_UnsetVariable(interp, vv->objPtr, JIM_NONE); interp->framePtr = framePtr; } else { if (nameObjPtr->internalRep.varValue.global) { int len; const char *name = Jim_GetString(nameObjPtr, &len); while (*name == ':') { name++; len--; } framePtr = interp->topFramePtr; Jim_Obj *tempObj = Jim_NewStringObj(interp, name, len); retval = JimUnsetVariable(&framePtr->vars, tempObj); Jim_FreeNewObj(interp, tempObj); } else { framePtr = interp->framePtr; retval = JimUnsetVariable(&framePtr->vars, nameObjPtr); } if (retval == JIM_OK) { framePtr->id = interp->callFrameEpoch++; } } } if (retval != JIM_OK && (flags & JIM_ERRMSG)) { Jim_SetResultFormatted(interp, "can't unset \"%#s\": no such variable", nameObjPtr); } return retval; } static void JimDictSugarParseVarKey(Jim_Interp *interp, Jim_Obj *objPtr, Jim_Obj **varPtrPtr, Jim_Obj **keyPtrPtr) { const char *str, *p; int len, keyLen; Jim_Obj *varObjPtr, *keyObjPtr; str = Jim_GetString(objPtr, &len); p = strchr(str, '('); JimPanic((p == NULL, "JimDictSugarParseVarKey() called for non-dict-sugar (%s)", str)); varObjPtr = Jim_NewStringObj(interp, str, p - str); varObjPtr->taint = objPtr->taint; p++; keyLen = (str + len) - p; if (str[len - 1] == ')') { keyLen--; } keyObjPtr = Jim_NewStringObj(interp, p, keyLen); keyObjPtr->taint = objPtr->taint; Jim_IncrRefCount(varObjPtr); Jim_IncrRefCount(keyObjPtr); *varPtrPtr = varObjPtr; *keyPtrPtr = keyObjPtr; } static int JimDictSugarSet(Jim_Interp *interp, Jim_Obj *objPtr, Jim_Obj *valObjPtr) { int err; SetDictSubstFromAny(interp, objPtr); err = Jim_SetDictKeysVector(interp, objPtr->internalRep.dictSubstValue.varNameObjPtr, &objPtr->internalRep.dictSubstValue.indexObjPtr, 1, valObjPtr, JIM_MUSTEXIST); if (err == JIM_OK) { Jim_SetEmptyResult(interp); } else { if (!valObjPtr) { if (Jim_GetVariable(interp, objPtr->internalRep.dictSubstValue.varNameObjPtr, JIM_NONE)) { Jim_SetResultFormatted(interp, "can't unset \"%#s\": no such element in array", objPtr); return err; } } Jim_SetResultFormatted(interp, "can't %s \"%#s\": variable isn't array", (valObjPtr ? "set" : "unset"), objPtr); } return err; } static Jim_Obj *JimDictExpandArrayVariable(Jim_Interp *interp, Jim_Obj *varObjPtr, Jim_Obj *keyObjPtr, int flags) { Jim_Obj *dictObjPtr; Jim_Obj *resObjPtr = NULL; int ret; dictObjPtr = Jim_GetVariable(interp, varObjPtr, JIM_ERRMSG); if (!dictObjPtr) { return NULL; } ret = Jim_DictKey(interp, dictObjPtr, keyObjPtr, &resObjPtr, JIM_NONE); if (ret != JIM_OK) { Jim_SetResultFormatted(interp, "can't read \"%#s(%#s)\": %s array", varObjPtr, keyObjPtr, ret < 0 ? "variable isn't" : "no such element in"); } else if ((flags & JIM_UNSHARED) && Jim_IsShared(dictObjPtr)) { Jim_SetVariable(interp, varObjPtr, Jim_DuplicateObj(interp, dictObjPtr)); } return resObjPtr; } static Jim_Obj *JimDictSugarGet(Jim_Interp *interp, Jim_Obj *objPtr, int flags) { SetDictSubstFromAny(interp, objPtr); return JimDictExpandArrayVariable(interp, objPtr->internalRep.dictSubstValue.varNameObjPtr, objPtr->internalRep.dictSubstValue.indexObjPtr, flags); } void FreeDictSubstInternalRep(Jim_Interp *interp, Jim_Obj *objPtr) { Jim_DecrRefCount(interp, objPtr->internalRep.dictSubstValue.varNameObjPtr); Jim_DecrRefCount(interp, objPtr->internalRep.dictSubstValue.indexObjPtr); } static void DupDictSubstInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr) { dupPtr->internalRep = srcPtr->internalRep; Jim_IncrRefCount(dupPtr->internalRep.dictSubstValue.varNameObjPtr); Jim_IncrRefCount(dupPtr->internalRep.dictSubstValue.indexObjPtr); } static void SetDictSubstFromAny(Jim_Interp *interp, Jim_Obj *objPtr) { if (objPtr->typePtr != &dictSubstObjType) { Jim_Obj *varObjPtr, *keyObjPtr; if (objPtr->typePtr == &interpolatedObjType) { varObjPtr = objPtr->internalRep.dictSubstValue.varNameObjPtr; keyObjPtr = objPtr->internalRep.dictSubstValue.indexObjPtr; Jim_IncrRefCount(varObjPtr); Jim_IncrRefCount(keyObjPtr); } else { JimDictSugarParseVarKey(interp, objPtr, &varObjPtr, &keyObjPtr); } Jim_FreeIntRep(interp, objPtr); objPtr->typePtr = &dictSubstObjType; objPtr->internalRep.dictSubstValue.varNameObjPtr = varObjPtr; objPtr->internalRep.dictSubstValue.indexObjPtr = keyObjPtr; } } static Jim_Obj *JimExpandDictSugar(Jim_Interp *interp, Jim_Obj *objPtr) { Jim_Obj *resObjPtr = NULL; Jim_Obj *substKeyObjPtr = NULL; if (interp->safeexpr) { return objPtr; } SetDictSubstFromAny(interp, objPtr); if (Jim_SubstObj(interp, objPtr->internalRep.dictSubstValue.indexObjPtr, &substKeyObjPtr, JIM_NONE) != JIM_OK) { return NULL; } Jim_IncrRefCount(substKeyObjPtr); resObjPtr = JimDictExpandArrayVariable(interp, objPtr->internalRep.dictSubstValue.varNameObjPtr, substKeyObjPtr, 0); Jim_DecrRefCount(interp, substKeyObjPtr); return resObjPtr; } static Jim_CallFrame *JimCreateCallFrame(Jim_Interp *interp, Jim_CallFrame *parent, Jim_Obj *nsObj) { Jim_CallFrame *cf; if (interp->freeFramesList) { cf = interp->freeFramesList; interp->freeFramesList = cf->next; cf->argv = NULL; cf->argc = 0; cf->procArgsObjPtr = NULL; cf->procBodyObjPtr = NULL; cf->next = NULL; cf->staticVars = NULL; cf->localCommands = NULL; cf->tailcallObj = NULL; cf->tailcallCmd = NULL; } else { cf = Jim_Alloc(sizeof(*cf)); memset(cf, 0, sizeof(*cf)); Jim_InitHashTable(&cf->vars, &JimVariablesHashTableType, interp); } cf->id = interp->callFrameEpoch++; cf->parent = parent; cf->level = parent ? parent->level + 1 : 0; cf->nsObj = nsObj; Jim_IncrRefCount(nsObj); return cf; } static int JimDeleteLocalProcs(Jim_Interp *interp, Jim_Stack *localCommands) { if (localCommands) { Jim_Obj *cmdNameObj; while ((cmdNameObj = Jim_StackPop(localCommands)) != NULL) { Jim_HashTable *ht = &interp->commands; Jim_HashEntry *he = Jim_FindHashEntry(ht, cmdNameObj); if (he) { Jim_Cmd *cmd = Jim_GetHashEntryVal(he); if (cmd->prevCmd) { Jim_Cmd *prevCmd = cmd->prevCmd; cmd->prevCmd = NULL; JimDecrCmdRefCount(interp, cmd); Jim_SetHashVal(ht, he, prevCmd); } else { Jim_DeleteHashEntry(ht, cmdNameObj); } } Jim_DecrRefCount(interp, cmdNameObj); } Jim_StackFree(localCommands); Jim_Free(localCommands); } return JIM_OK; } static int JimInvokeDefer(Jim_Interp *interp, int retcode) { Jim_Obj *objPtr; if (JimFindVariable(&interp->framePtr->vars, interp->defer) == NULL) { return retcode; } objPtr = Jim_GetVariable(interp, interp->defer, JIM_NONE); if (objPtr) { int ret = JIM_OK; int i; int listLen = Jim_ListLength(interp, objPtr); Jim_Obj *resultObjPtr; Jim_IncrRefCount(objPtr); resultObjPtr = Jim_GetResult(interp); Jim_IncrRefCount(resultObjPtr); Jim_SetEmptyResult(interp); for (i = listLen; i > 0; i--) { Jim_Obj *scriptObjPtr = Jim_ListGetIndex(interp, objPtr, i - 1); ret = Jim_EvalObj(interp, scriptObjPtr); if (ret != JIM_OK) { break; } } if (ret == JIM_OK || retcode == JIM_ERR) { Jim_SetResult(interp, resultObjPtr); } else { retcode = ret; } Jim_DecrRefCount(interp, resultObjPtr); Jim_DecrRefCount(interp, objPtr); } return retcode; } #define JIM_FCF_FULL 0 #define JIM_FCF_REUSE 1 static void JimFreeCallFrame(Jim_Interp *interp, Jim_CallFrame *cf, int action) { JimDeleteLocalProcs(interp, cf->localCommands); if (cf->procArgsObjPtr) Jim_DecrRefCount(interp, cf->procArgsObjPtr); if (cf->procBodyObjPtr) Jim_DecrRefCount(interp, cf->procBodyObjPtr); Jim_DecrRefCount(interp, cf->nsObj); if (action == JIM_FCF_FULL || cf->vars.size != JIM_HT_INITIAL_SIZE) Jim_FreeHashTable(&cf->vars); else { Jim_ClearHashTable(&cf->vars); } cf->next = interp->freeFramesList; interp->freeFramesList = cf; } int Jim_IsBigEndian(void) { union { unsigned short s; unsigned char c[2]; } uval = {0x0102}; return uval.c[0] == 1; } Jim_Interp *Jim_CreateInterp(void) { Jim_Interp *i = Jim_Alloc(sizeof(*i)); memset(i, 0, sizeof(*i)); i->maxCallFrameDepth = JIM_MAX_CALLFRAME_DEPTH; i->maxEvalDepth = JIM_MAX_EVAL_DEPTH; i->lastCollectTime = Jim_GetTimeUsec(CLOCK_MONOTONIC_RAW); Jim_InitHashTable(&i->commands, &JimCommandsHashTableType, i); #ifdef JIM_REFERENCES Jim_InitHashTable(&i->references, &JimReferencesHashTableType, i); #endif Jim_InitHashTable(&i->assocData, &JimAssocDataHashTableType, i); Jim_InitHashTable(&i->packages, &JimPackageHashTableType, NULL); i->emptyObj = Jim_NewEmptyStringObj(i); i->trueObj = Jim_NewIntObj(i, 1); i->falseObj = Jim_NewIntObj(i, 0); i->framePtr = i->topFramePtr = JimCreateCallFrame(i, NULL, i->emptyObj); i->result = i->emptyObj; i->stackTrace = Jim_NewListObj(i, NULL, 0); i->unknown = Jim_NewStringObj(i, "unknown", -1); i->defer = Jim_NewStringObj(i, "jim::defer", -1); i->errorProc = i->emptyObj; i->nullScriptObj = Jim_NewEmptyStringObj(i); i->evalFrame = &i->topEvalFrame; i->currentFilenameObj = Jim_NewEmptyStringObj(i); Jim_IncrRefCount(i->emptyObj); Jim_IncrRefCount(i->result); Jim_IncrRefCount(i->stackTrace); Jim_IncrRefCount(i->unknown); Jim_IncrRefCount(i->defer); Jim_IncrRefCount(i->nullScriptObj); Jim_IncrRefCount(i->errorProc); Jim_IncrRefCount(i->trueObj); Jim_IncrRefCount(i->falseObj); Jim_IncrRefCount(i->currentFilenameObj); Jim_SetVariableStrWithStr(i, JIM_LIBPATH, TCL_LIBRARY); Jim_SetVariableStrWithStr(i, JIM_INTERACTIVE, "0"); Jim_SetVariableStrWithStr(i, "tcl_platform(engine)", "Jim"); Jim_SetVariableStrWithStr(i, "tcl_platform(os)", TCL_PLATFORM_OS); Jim_SetVariableStrWithStr(i, "tcl_platform(platform)", TCL_PLATFORM_PLATFORM); Jim_SetVariableStrWithStr(i, "tcl_platform(pathSeparator)", TCL_PLATFORM_PATH_SEPARATOR); Jim_SetVariableStrWithStr(i, "tcl_platform(byteOrder)", Jim_IsBigEndian() ? "bigEndian" : "littleEndian"); Jim_SetVariableStrWithStr(i, "tcl_platform(threaded)", "0"); Jim_SetVariableStrWithStr(i, "tcl_platform(bootstrap)", "0"); Jim_SetVariableStr(i, "tcl_platform(pointerSize)", Jim_NewIntObj(i, sizeof(void *))); Jim_SetVariableStr(i, "tcl_platform(wordSize)", Jim_NewIntObj(i, sizeof(jim_wide))); Jim_SetVariableStr(i, "tcl_platform(stackFormat)", Jim_NewIntObj(i, 4)); return i; } void Jim_FreeInterp(Jim_Interp *i) { Jim_CallFrame *cf, *cfx; Jim_Obj *objPtr, *nextObjPtr; i->quitting = 1; for (cf = i->framePtr; cf; cf = cfx) { JimInvokeDefer(i, JIM_OK); cfx = cf->parent; JimFreeCallFrame(i, cf, JIM_FCF_FULL); } Jim_FreeHashTable(&i->commands); Jim_DecrRefCount(i, i->emptyObj); Jim_DecrRefCount(i, i->trueObj); Jim_DecrRefCount(i, i->falseObj); Jim_DecrRefCount(i, i->result); Jim_DecrRefCount(i, i->stackTrace); Jim_DecrRefCount(i, i->errorProc); Jim_DecrRefCount(i, i->unknown); Jim_DecrRefCount(i, i->defer); Jim_DecrRefCount(i, i->nullScriptObj); Jim_DecrRefCount(i, i->currentFilenameObj); Jim_InterpIncrProcEpoch(i); #ifdef JIM_REFERENCES Jim_FreeHashTable(&i->references); #endif Jim_FreeHashTable(&i->packages); Jim_Free(i->prngState); Jim_FreeHashTable(&i->assocData); if (i->traceCmdObj) { Jim_DecrRefCount(i, i->traceCmdObj); } #ifdef JIM_MAINTAINER if (i->liveList != NULL) { objPtr = i->liveList; printf("\n-------------------------------------\n"); printf("Objects still in the free list:\n"); while (objPtr) { const char *type = objPtr->typePtr ? objPtr->typePtr->name : "string"; Jim_String(objPtr); if (objPtr->bytes && strlen(objPtr->bytes) > 20) { printf("%p (%d) %-10s: '%.20s...'\n", (void *)objPtr, objPtr->refCount, type, objPtr->bytes); } else { printf("%p (%d) %-10s: '%s'\n", (void *)objPtr, objPtr->refCount, type, objPtr->bytes ? objPtr->bytes : "(null)"); } if (objPtr->typePtr == &sourceObjType) { printf("FILE %s LINE %d\n", Jim_String(objPtr->internalRep.sourceValue.fileNameObj), objPtr->internalRep.sourceValue.lineNumber); } objPtr = objPtr->nextObjPtr; } printf("-------------------------------------\n\n"); JimPanic((1, "Live list non empty freeing the interpreter! Leak?")); } #endif objPtr = i->freeList; while (objPtr) { nextObjPtr = objPtr->nextObjPtr; Jim_Free(objPtr); objPtr = nextObjPtr; } for (cf = i->freeFramesList; cf; cf = cfx) { cfx = cf->next; if (cf->vars.table) Jim_FreeHashTable(&cf->vars); Jim_Free(cf); } Jim_Free(i); } Jim_CallFrame *Jim_GetCallFrameByLevel(Jim_Interp *interp, Jim_Obj *levelObjPtr) { long level; const char *str; Jim_CallFrame *framePtr; if (levelObjPtr) { str = Jim_String(levelObjPtr); if (str[0] == '#') { char *endptr; level = jim_strtol(str + 1, &endptr); if (str[1] == '\0' || endptr[0] != '\0') { level = -1; } } else { if (Jim_GetLong(interp, levelObjPtr, &level) != JIM_OK || level < 0) { level = -1; } else { level = interp->framePtr->level - level; } } } else { str = "1"; level = interp->framePtr->level - 1; } if (level == 0) { return interp->topFramePtr; } if (level > 0) { for (framePtr = interp->framePtr; framePtr; framePtr = framePtr->parent) { if (framePtr->level == level) { return framePtr; } } } Jim_SetResultFormatted(interp, "bad level \"%s\"", str); return NULL; } static Jim_CallFrame *JimGetCallFrameByInteger(Jim_Interp *interp, long level) { Jim_CallFrame *framePtr; if (level == 0) { return interp->framePtr; } if (level < 0) { level = interp->framePtr->level + level; } if (level > 0) { for (framePtr = interp->framePtr; framePtr; framePtr = framePtr->parent) { if (framePtr->level == level) { return framePtr; } } } return NULL; } static Jim_EvalFrame *JimGetEvalFrameByProcLevel(Jim_Interp *interp, int proclevel) { Jim_EvalFrame *evalFrame; if (proclevel == 0) { return interp->evalFrame; } if (proclevel < 0) { proclevel = interp->procLevel + proclevel; } if (proclevel >= 0) { for (evalFrame = interp->evalFrame; evalFrame; evalFrame = evalFrame->parent) { if (evalFrame->procLevel == proclevel) { return evalFrame; } } } return NULL; } static Jim_Obj *JimProcForEvalFrame(Jim_Interp *interp, Jim_EvalFrame *frame) { if (frame == interp->evalFrame || (frame->cmd && frame->cmd->cmdNameObj)) { Jim_EvalFrame *e; for (e = frame->parent; e; e = e->parent) { if (e->cmd && (e->cmd->flags & JIM_CMD_ISPROC) && e->cmd->cmdNameObj) { break; } } if (e && e->cmd && e->cmd->cmdNameObj) { return e->cmd->cmdNameObj; } } return NULL; } static void JimAddStackFrame(Jim_Interp *interp, Jim_EvalFrame *frame, Jim_Obj *listObj) { Jim_Obj *procNameObj = JimProcForEvalFrame(interp, frame); Jim_Obj *fileNameObj = interp->emptyObj; int linenr = 1; if (frame->scriptObj) { ScriptObj *script = JimGetScript(interp, frame->scriptObj); fileNameObj = script->fileNameObj; linenr = script->linenr; } Jim_ListAppendElement(interp, listObj, procNameObj ? procNameObj : interp->emptyObj); Jim_ListAppendElement(interp, listObj, fileNameObj); Jim_ListAppendElement(interp, listObj, Jim_NewIntObj(interp, linenr)); Jim_ListAppendElement(interp, listObj, Jim_NewListObj(interp, frame->argv, frame->argc)); } static void JimSetStackTrace(Jim_Interp *interp, Jim_Obj *stackTraceObj) { Jim_IncrRefCount(stackTraceObj); Jim_DecrRefCount(interp, interp->stackTrace); interp->stackTrace = stackTraceObj; interp->hasErrorStackTrace = 1; } static void JimSetErrorStack(Jim_Interp *interp, ScriptObj *script) { if (!interp->hasErrorStackTrace) { int i; Jim_Obj *stackTrace = Jim_NewListObj(interp, NULL, 0); if (interp->procLevel == 0 && script) { Jim_ListAppendElement(interp, stackTrace, interp->emptyObj); Jim_ListAppendElement(interp, stackTrace, script->fileNameObj); Jim_ListAppendElement(interp, stackTrace, Jim_NewIntObj(interp, script->linenr)); Jim_ListAppendElement(interp, stackTrace, interp->emptyObj); } else { for (i = 0; i <= interp->procLevel; i++) { Jim_EvalFrame *frame = JimGetEvalFrameByProcLevel(interp, -i); if (frame) { JimAddStackFrame(interp, frame, stackTrace); } } } JimSetStackTrace(interp, stackTrace); } } int Jim_SetAssocData(Jim_Interp *interp, const char *key, Jim_InterpDeleteProc * delProc, void *data) { AssocDataValue *assocEntryPtr = (AssocDataValue *) Jim_Alloc(sizeof(AssocDataValue)); assocEntryPtr->delProc = delProc; assocEntryPtr->data = data; return Jim_AddHashEntry(&interp->assocData, key, assocEntryPtr); } void *Jim_GetAssocData(Jim_Interp *interp, const char *key) { Jim_HashEntry *entryPtr = Jim_FindHashEntry(&interp->assocData, key); if (entryPtr != NULL) { AssocDataValue *assocEntryPtr = Jim_GetHashEntryVal(entryPtr); return assocEntryPtr->data; } return NULL; } int Jim_DeleteAssocData(Jim_Interp *interp, const char *key) { return Jim_DeleteHashEntry(&interp->assocData, key); } int Jim_GetExitCode(Jim_Interp *interp) { return interp->exitCode; } static void UpdateStringOfInt(struct Jim_Obj *objPtr); static int SetIntFromAny(Jim_Interp *interp, Jim_Obj *objPtr, int flags); static const Jim_ObjType intObjType = { "int", NULL, NULL, UpdateStringOfInt, JIM_TYPE_NONE, }; static const Jim_ObjType coercedDoubleObjType = { "coerced-double", NULL, NULL, UpdateStringOfInt, JIM_TYPE_NONE, }; static void UpdateStringOfInt(struct Jim_Obj *objPtr) { char buf[JIM_INTEGER_SPACE + 1]; jim_wide wideValue = JimWideValue(objPtr); int pos = 0; if (wideValue == 0) { buf[pos++] = '0'; } else { char tmp[JIM_INTEGER_SPACE]; int num = 0; int i; if (wideValue < 0) { buf[pos++] = '-'; i = wideValue % 10; tmp[num++] = (i > 0) ? (10 - i) : -i; wideValue /= -10; } while (wideValue) { tmp[num++] = wideValue % 10; wideValue /= 10; } for (i = 0; i < num; i++) { buf[pos++] = '0' + tmp[num - i - 1]; } } buf[pos] = 0; JimSetStringBytes(objPtr, buf); } static int SetIntFromAny(Jim_Interp *interp, Jim_Obj *objPtr, int flags) { jim_wide wideValue; const char *str; if (objPtr->typePtr == &coercedDoubleObjType) { objPtr->typePtr = &intObjType; return JIM_OK; } str = Jim_String(objPtr); if (Jim_StringToWide(str, &wideValue, 0) != JIM_OK) { if (flags & JIM_ERRMSG) { Jim_SetResultFormatted(interp, "expected integer but got \"%#s\"", objPtr); } return JIM_ERR; } if ((wideValue == JIM_WIDE_MIN || wideValue == JIM_WIDE_MAX) && errno == ERANGE) { Jim_SetResultString(interp, "Integer value too big to be represented", -1); return JIM_ERR; } Jim_FreeIntRep(interp, objPtr); objPtr->typePtr = &intObjType; objPtr->internalRep.wideValue = wideValue; return JIM_OK; } #ifdef JIM_OPTIMIZATION static int JimIsWide(Jim_Obj *objPtr) { return objPtr->typePtr == &intObjType; } #endif int Jim_GetWide(Jim_Interp *interp, Jim_Obj *objPtr, jim_wide * widePtr) { if (objPtr->typePtr != &intObjType && SetIntFromAny(interp, objPtr, JIM_ERRMSG) == JIM_ERR) return JIM_ERR; *widePtr = JimWideValue(objPtr); return JIM_OK; } int Jim_GetWideExpr(Jim_Interp *interp, Jim_Obj *objPtr, jim_wide * widePtr) { int ret = JIM_OK; if (objPtr->typePtr == &sourceObjType || objPtr->typePtr == NULL) { SetIntFromAny(interp, objPtr, 0); } if (objPtr->typePtr == &intObjType) { *widePtr = JimWideValue(objPtr); } else { JimPanic((interp->safeexpr, "interp->safeexpr is set")); interp->safeexpr++; ret = Jim_EvalExpression(interp, objPtr); interp->safeexpr--; if (ret == JIM_OK) { ret = Jim_GetWide(interp, Jim_GetResult(interp), widePtr); } if (ret != JIM_OK) { Jim_SetResultFormatted(interp, "expected integer expression but got \"%#s\"", objPtr); } } return ret; } static int JimGetWideNoErr(Jim_Interp *interp, Jim_Obj *objPtr, jim_wide * widePtr) { if (objPtr->typePtr != &intObjType && SetIntFromAny(interp, objPtr, JIM_NONE) == JIM_ERR) return JIM_ERR; *widePtr = JimWideValue(objPtr); return JIM_OK; } int Jim_GetLong(Jim_Interp *interp, Jim_Obj *objPtr, long *longPtr) { jim_wide wideValue; int retval; retval = Jim_GetWide(interp, objPtr, &wideValue); if (retval == JIM_OK) { *longPtr = (long)wideValue; return JIM_OK; } return JIM_ERR; } Jim_Obj *Jim_NewIntObj(Jim_Interp *interp, jim_wide wideValue) { Jim_Obj *objPtr; objPtr = Jim_NewObj(interp); objPtr->typePtr = &intObjType; objPtr->bytes = NULL; objPtr->taint = 0; objPtr->internalRep.wideValue = wideValue; return objPtr; } #define JIM_DOUBLE_SPACE 30 static void UpdateStringOfDouble(struct Jim_Obj *objPtr); static int SetDoubleFromAny(Jim_Interp *interp, Jim_Obj *objPtr); static const Jim_ObjType doubleObjType = { "double", NULL, NULL, UpdateStringOfDouble, JIM_TYPE_NONE, }; #if !HAVE_DECL_ISNAN #undef isnan #define isnan(X) ((X) != (X)) #endif #if !HAVE_DECL_ISINF #undef isinf #define isinf(X) (1.0 / (X) == 0.0) #endif static void UpdateStringOfDouble(struct Jim_Obj *objPtr) { double value = objPtr->internalRep.doubleValue; if (isnan(value)) { JimSetStringBytes(objPtr, "NaN"); return; } if (isinf(value)) { if (value < 0) { JimSetStringBytes(objPtr, "-Inf"); } else { JimSetStringBytes(objPtr, "Inf"); } return; } { char buf[JIM_DOUBLE_SPACE + 1]; int i; int len = sprintf(buf, "%.12g", value); for (i = 0; i < len; i++) { if (buf[i] == '.' || buf[i] == 'e') { #if defined(JIM_SPRINTF_DOUBLE_NEEDS_FIX) char *e = strchr(buf, 'e'); if (e && (e[1] == '-' || e[1] == '+') && e[2] == '0') { e += 2; memmove(e, e + 1, len - (e - buf)); } #endif break; } } if (buf[i] == '\0') { buf[i++] = '.'; buf[i++] = '0'; buf[i] = '\0'; } JimSetStringBytes(objPtr, buf); } } static int SetDoubleFromAny(Jim_Interp *interp, Jim_Obj *objPtr) { double doubleValue; jim_wide wideValue; const char *str; #ifdef HAVE_LONG_LONG #define MIN_INT_IN_DOUBLE -(1LL << 53) #define MAX_INT_IN_DOUBLE -(MIN_INT_IN_DOUBLE + 1) if (objPtr->typePtr == &intObjType && JimWideValue(objPtr) >= MIN_INT_IN_DOUBLE && JimWideValue(objPtr) <= MAX_INT_IN_DOUBLE) { objPtr->typePtr = &coercedDoubleObjType; return JIM_OK; } #endif str = Jim_String(objPtr); if (Jim_StringToWide(str, &wideValue, 10) == JIM_OK) { Jim_FreeIntRep(interp, objPtr); objPtr->typePtr = &coercedDoubleObjType; objPtr->internalRep.wideValue = wideValue; return JIM_OK; } else { if (Jim_StringToDouble(str, &doubleValue) != JIM_OK) { Jim_SetResultFormatted(interp, "expected floating-point number but got \"%#s\"", objPtr); return JIM_ERR; } Jim_FreeIntRep(interp, objPtr); } objPtr->typePtr = &doubleObjType; objPtr->internalRep.doubleValue = doubleValue; return JIM_OK; } int Jim_GetDouble(Jim_Interp *interp, Jim_Obj *objPtr, double *doublePtr) { if (objPtr->typePtr == &coercedDoubleObjType) { *doublePtr = JimWideValue(objPtr); return JIM_OK; } if (objPtr->typePtr != &doubleObjType && SetDoubleFromAny(interp, objPtr) == JIM_ERR) return JIM_ERR; if (objPtr->typePtr == &coercedDoubleObjType) { *doublePtr = JimWideValue(objPtr); } else { *doublePtr = objPtr->internalRep.doubleValue; } return JIM_OK; } Jim_Obj *Jim_NewDoubleObj(Jim_Interp *interp, double doubleValue) { Jim_Obj *objPtr; objPtr = Jim_NewObj(interp); objPtr->typePtr = &doubleObjType; objPtr->bytes = NULL; objPtr->taint = 0; objPtr->internalRep.doubleValue = doubleValue; return objPtr; } static int SetBooleanFromAny(Jim_Interp *interp, Jim_Obj *objPtr, int flags); int Jim_GetBoolean(Jim_Interp *interp, Jim_Obj *objPtr, int * booleanPtr) { if (objPtr->typePtr != &intObjType && SetBooleanFromAny(interp, objPtr, JIM_ERRMSG) == JIM_ERR) return JIM_ERR; *booleanPtr = (int) JimWideValue(objPtr); return JIM_OK; } static const char * const jim_true_false_strings[8] = { "1", "true", "yes", "on", "0", "false", "no", "off" }; static const int jim_true_false_lens[8] = { 1, 4, 3, 2, 1, 5, 2, 3, }; static int SetBooleanFromAny(Jim_Interp *interp, Jim_Obj *objPtr, int flags) { int index = Jim_FindByName(Jim_String(objPtr), jim_true_false_strings, sizeof(jim_true_false_strings) / sizeof(*jim_true_false_strings)); if (index < 0) { if (flags & JIM_ERRMSG) { Jim_SetResultFormatted(interp, "expected boolean but got \"%#s\"", objPtr); } return JIM_ERR; } Jim_FreeIntRep(interp, objPtr); objPtr->typePtr = &intObjType; objPtr->internalRep.wideValue = index < 4 ? 1 : 0; return JIM_OK; } static void ListInsertElements(Jim_Obj *listPtr, int idx, int elemc, Jim_Obj *const *elemVec); static void ListAppendElement(Jim_Obj *listPtr, Jim_Obj *objPtr); static void FreeListInternalRep(Jim_Interp *interp, Jim_Obj *objPtr); static void DupListInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr); static void UpdateStringOfList(struct Jim_Obj *objPtr); static int SetListFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr); static const Jim_ObjType listObjType = { "list", FreeListInternalRep, DupListInternalRep, UpdateStringOfList, JIM_TYPE_NONE, }; void FreeListInternalRep(Jim_Interp *interp, Jim_Obj *objPtr) { int i; for (i = 0; i < objPtr->internalRep.listValue.len; i++) { Jim_DecrRefCount(interp, objPtr->internalRep.listValue.ele[i]); } Jim_Free(objPtr->internalRep.listValue.ele); } void DupListInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr) { int i; JIM_NOTUSED(interp); dupPtr->internalRep.listValue.len = srcPtr->internalRep.listValue.len; dupPtr->internalRep.listValue.maxLen = srcPtr->internalRep.listValue.maxLen; dupPtr->internalRep.listValue.ele = Jim_Alloc(sizeof(Jim_Obj *) * srcPtr->internalRep.listValue.maxLen); memcpy(dupPtr->internalRep.listValue.ele, srcPtr->internalRep.listValue.ele, sizeof(Jim_Obj *) * srcPtr->internalRep.listValue.len); for (i = 0; i < dupPtr->internalRep.listValue.len; i++) { Jim_IncrRefCount(dupPtr->internalRep.listValue.ele[i]); } dupPtr->typePtr = &listObjType; } #define JIM_ELESTR_SIMPLE 0 #define JIM_ELESTR_BRACE 1 #define JIM_ELESTR_QUOTE 2 static unsigned char ListElementQuotingType(const char *s, int len) { int i, level, blevel, trySimple = 1; if (len == 0) return JIM_ELESTR_BRACE; if (s[0] == '"' || s[0] == '{') { trySimple = 0; goto testbrace; } for (i = 0; i < len; i++) { switch (s[i]) { case ' ': case '$': case '"': case '[': case ']': case ';': case '\\': case '\r': case '\n': case '\t': case '\f': case '\v': trySimple = 0; case '{': case '}': goto testbrace; } } return JIM_ELESTR_SIMPLE; testbrace: if (s[len - 1] == '\\') return JIM_ELESTR_QUOTE; level = 0; blevel = 0; for (i = 0; i < len; i++) { switch (s[i]) { case '{': level++; break; case '}': level--; if (level < 0) return JIM_ELESTR_QUOTE; break; case '[': blevel++; break; case ']': blevel--; break; case '\\': if (s[i + 1] == '\n') return JIM_ELESTR_QUOTE; else if (s[i + 1] != '\0') i++; break; } } if (blevel < 0) { return JIM_ELESTR_QUOTE; } if (level == 0) { if (!trySimple) return JIM_ELESTR_BRACE; for (i = 0; i < len; i++) { switch (s[i]) { case ' ': case '$': case '"': case '[': case ']': case ';': case '\\': case '\r': case '\n': case '\t': case '\f': case '\v': return JIM_ELESTR_BRACE; break; } } return JIM_ELESTR_SIMPLE; } return JIM_ELESTR_QUOTE; } static int BackslashQuoteString(const char *s, int len, char *q) { char *p = q; while (len--) { switch (*s) { case ' ': case '$': case '"': case '[': case ']': case '{': case '}': case ';': case '\\': *p++ = '\\'; *p++ = *s++; break; case '\n': *p++ = '\\'; *p++ = 'n'; s++; break; case '\r': *p++ = '\\'; *p++ = 'r'; s++; break; case '\t': *p++ = '\\'; *p++ = 't'; s++; break; case '\f': *p++ = '\\'; *p++ = 'f'; s++; break; case '\v': *p++ = '\\'; *p++ = 'v'; s++; break; default: *p++ = *s++; break; } } *p = '\0'; return p - q; } static void JimMakeListStringRep(Jim_Obj *objPtr, Jim_Obj **objv, int objc) { #define STATIC_QUOTING_LEN 32 int i, bufLen, realLength; const char *strRep; char *p; unsigned char *quotingType, staticQuoting[STATIC_QUOTING_LEN]; if (objc > STATIC_QUOTING_LEN) { quotingType = Jim_Alloc(objc); } else { quotingType = staticQuoting; } bufLen = 0; for (i = 0; i < objc; i++) { int len; strRep = Jim_GetString(objv[i], &len); quotingType[i] = ListElementQuotingType(strRep, len); switch (quotingType[i]) { case JIM_ELESTR_SIMPLE: if (i != 0 || strRep[0] != '#') { bufLen += len; break; } quotingType[i] = JIM_ELESTR_BRACE; case JIM_ELESTR_BRACE: bufLen += len + 2; break; case JIM_ELESTR_QUOTE: bufLen += len * 2; break; } bufLen++; } bufLen++; p = objPtr->bytes = Jim_Alloc(bufLen + 1); realLength = 0; for (i = 0; i < objc; i++) { int len, qlen; strRep = Jim_GetString(objv[i], &len); switch (quotingType[i]) { case JIM_ELESTR_SIMPLE: memcpy(p, strRep, len); p += len; realLength += len; break; case JIM_ELESTR_BRACE: *p++ = '{'; memcpy(p, strRep, len); p += len; *p++ = '}'; realLength += len + 2; break; case JIM_ELESTR_QUOTE: if (i == 0 && strRep[0] == '#') { *p++ = '\\'; realLength++; } qlen = BackslashQuoteString(strRep, len, p); p += qlen; realLength += qlen; break; } if (i + 1 != objc) { *p++ = ' '; realLength++; } } *p = '\0'; objPtr->length = realLength; if (quotingType != staticQuoting) { Jim_Free(quotingType); } } static void UpdateStringOfList(struct Jim_Obj *objPtr) { JimMakeListStringRep(objPtr, objPtr->internalRep.listValue.ele, objPtr->internalRep.listValue.len); } static int SetListFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr) { struct JimParserCtx parser; const char *str; int strLen; Jim_Obj *fileNameObj; int linenr; if (objPtr->typePtr == &listObjType) { return JIM_OK; } if (Jim_IsDict(objPtr) && objPtr->bytes == NULL) { Jim_Dict *dict = objPtr->internalRep.dictValue; objPtr->typePtr = &listObjType; objPtr->internalRep.listValue.len = dict->len; objPtr->internalRep.listValue.maxLen = dict->maxLen; objPtr->internalRep.listValue.ele = dict->table; Jim_Free(dict->ht); Jim_Free(dict); return JIM_OK; } fileNameObj = Jim_GetSourceInfo(interp, objPtr, &linenr); Jim_IncrRefCount(fileNameObj); str = Jim_GetString(objPtr, &strLen); Jim_FreeIntRep(interp, objPtr); objPtr->typePtr = &listObjType; objPtr->internalRep.listValue.len = 0; objPtr->internalRep.listValue.maxLen = 0; objPtr->internalRep.listValue.ele = NULL; if (strLen) { JimParserInit(&parser, str, strLen, linenr); while (!parser.eof) { Jim_Obj *elementPtr; JimParseList(&parser); if (parser.tt != JIM_TT_STR && parser.tt != JIM_TT_ESC) continue; elementPtr = JimParserGetTokenObj(interp, &parser); Jim_SetSourceInfo(interp, elementPtr, fileNameObj, parser.tline); elementPtr->taint = objPtr->taint; ListAppendElement(objPtr, elementPtr); } } Jim_DecrRefCount(interp, fileNameObj); return JIM_OK; } Jim_Obj *Jim_NewListObj(Jim_Interp *interp, Jim_Obj *const *elements, int len) { Jim_Obj *objPtr; objPtr = Jim_NewObj(interp); objPtr->typePtr = &listObjType; objPtr->bytes = NULL; objPtr->taint = 0; objPtr->internalRep.listValue.ele = NULL; objPtr->internalRep.listValue.len = 0; objPtr->internalRep.listValue.maxLen = 0; if (len) { ListInsertElements(objPtr, 0, len, elements); } return objPtr; } static void JimListGetElements(Jim_Interp *interp, Jim_Obj *listObj, int *listLen, Jim_Obj ***listVec) { *listLen = Jim_ListLength(interp, listObj); *listVec = listObj->internalRep.listValue.ele; } static int JimSign(jim_wide w) { if (w == 0) { return 0; } else if (w < 0) { return -1; } return 1; } struct lsort_info { jmp_buf jmpbuf; Jim_Obj *command; Jim_Interp *interp; enum { JIM_LSORT_ASCII, JIM_LSORT_NOCASE, JIM_LSORT_INTEGER, JIM_LSORT_REAL, JIM_LSORT_COMMAND, JIM_LSORT_DICT } type; int order; Jim_Obj **indexv; int indexc; int unique; int (*subfn)(Jim_Obj **, Jim_Obj **); }; static struct lsort_info *sort_info; static int ListSortIndexHelper(Jim_Obj **lhsObj, Jim_Obj **rhsObj) { Jim_Obj *lObj, *rObj; if (Jim_ListIndices(sort_info->interp, *lhsObj, sort_info->indexv, sort_info->indexc, &lObj, JIM_ERRMSG) != JIM_OK || Jim_ListIndices(sort_info->interp, *rhsObj, sort_info->indexv, sort_info->indexc, &rObj, JIM_ERRMSG) != JIM_OK) { longjmp(sort_info->jmpbuf, JIM_ERR); } return sort_info->subfn(&lObj, &rObj); } static int ListSortString(Jim_Obj **lhsObj, Jim_Obj **rhsObj) { return Jim_StringCompareObj(sort_info->interp, *lhsObj, *rhsObj, 0) * sort_info->order; } static int ListSortStringNoCase(Jim_Obj **lhsObj, Jim_Obj **rhsObj) { return Jim_StringCompareObj(sort_info->interp, *lhsObj, *rhsObj, 1) * sort_info->order; } static int ListSortDict(Jim_Obj **lhsObj, Jim_Obj **rhsObj) { const char *left = Jim_String(*lhsObj); const char *right = Jim_String(*rhsObj); while (1) { if (isdigit(UCHAR(*left)) && isdigit(UCHAR(*right))) { jim_wide lint, rint; char *lend, *rend; lint = jim_strtoull(left, &lend); rint = jim_strtoull(right, &rend); if (lint != rint) { return JimSign(lint - rint) * sort_info->order; } if (lend -left != rend - right) { return JimSign((lend - left) - (rend - right)) * sort_info->order; } left = lend; right = rend; } else { int cl, cr; left += utf8_tounicode_case(left, &cl, 1); right += utf8_tounicode_case(right, &cr, 1); if (cl != cr) { return JimSign(cl - cr) * sort_info->order; } if (cl == 0) { return Jim_StringCompareObj(sort_info->interp, *lhsObj, *rhsObj, 0) * sort_info->order; } } } } static int ListSortInteger(Jim_Obj **lhsObj, Jim_Obj **rhsObj) { jim_wide lhs = 0, rhs = 0; if (Jim_GetWide(sort_info->interp, *lhsObj, &lhs) != JIM_OK || Jim_GetWide(sort_info->interp, *rhsObj, &rhs) != JIM_OK) { longjmp(sort_info->jmpbuf, JIM_ERR); } return JimSign(lhs - rhs) * sort_info->order; } static int ListSortReal(Jim_Obj **lhsObj, Jim_Obj **rhsObj) { double lhs = 0, rhs = 0; if (Jim_GetDouble(sort_info->interp, *lhsObj, &lhs) != JIM_OK || Jim_GetDouble(sort_info->interp, *rhsObj, &rhs) != JIM_OK) { longjmp(sort_info->jmpbuf, JIM_ERR); } if (lhs == rhs) { return 0; } if (lhs > rhs) { return sort_info->order; } return -sort_info->order; } static int ListSortCommand(Jim_Obj **lhsObj, Jim_Obj **rhsObj) { Jim_Obj *compare_script; int rc; jim_wide ret = 0; compare_script = Jim_DuplicateObj(sort_info->interp, sort_info->command); Jim_ListAppendElement(sort_info->interp, compare_script, *lhsObj); Jim_ListAppendElement(sort_info->interp, compare_script, *rhsObj); rc = Jim_EvalObj(sort_info->interp, compare_script); if (rc != JIM_OK || Jim_GetWide(sort_info->interp, Jim_GetResult(sort_info->interp), &ret) != JIM_OK) { longjmp(sort_info->jmpbuf, rc); } return JimSign(ret) * sort_info->order; } static void ListRemoveDuplicates(Jim_Obj *listObjPtr, int (*comp)(Jim_Obj **lhs, Jim_Obj **rhs)) { int src; int dst = 0; Jim_Obj **ele = listObjPtr->internalRep.listValue.ele; for (src = 1; src < listObjPtr->internalRep.listValue.len; src++) { if (comp(&ele[dst], &ele[src]) == 0) { Jim_DecrRefCount(sort_info->interp, ele[dst]); } else { dst++; } ele[dst] = ele[src]; } dst++; if (dst < listObjPtr->internalRep.listValue.len) { ele[dst] = ele[src]; } listObjPtr->internalRep.listValue.len = dst; } static int ListSortElements(Jim_Interp *interp, Jim_Obj *listObjPtr, struct lsort_info *info) { struct lsort_info *prev_info; typedef int (qsort_comparator) (const void *, const void *); int (*fn) (Jim_Obj **, Jim_Obj **); Jim_Obj **vector; int len; int rc; JimPanic((Jim_IsShared(listObjPtr), "ListSortElements called with shared object")); SetListFromAny(interp, listObjPtr); prev_info = sort_info; sort_info = info; vector = listObjPtr->internalRep.listValue.ele; len = listObjPtr->internalRep.listValue.len; switch (info->type) { case JIM_LSORT_ASCII: fn = ListSortString; break; case JIM_LSORT_NOCASE: fn = ListSortStringNoCase; break; case JIM_LSORT_INTEGER: fn = ListSortInteger; break; case JIM_LSORT_REAL: fn = ListSortReal; break; case JIM_LSORT_COMMAND: fn = ListSortCommand; break; case JIM_LSORT_DICT: fn = ListSortDict; break; default: fn = NULL; JimPanic((1, "ListSort called with invalid sort type")); return -1; } if (info->indexc) { info->subfn = fn; fn = ListSortIndexHelper; } if ((rc = setjmp(info->jmpbuf)) == 0) { qsort(vector, len, sizeof(Jim_Obj *), (qsort_comparator *) fn); if (info->unique && len > 1) { ListRemoveDuplicates(listObjPtr, fn); } Jim_InvalidateStringRep(listObjPtr); } sort_info = prev_info; return rc; } static void ListEnsureLength(Jim_Obj *listPtr, int idx) { assert(idx >= 0); if (idx >= listPtr->internalRep.listValue.maxLen) { if (idx < 4) { idx = 4; } listPtr->internalRep.listValue.ele = Jim_Realloc(listPtr->internalRep.listValue.ele, sizeof(Jim_Obj *) * idx); listPtr->internalRep.listValue.maxLen = idx; } } static void ListInsertElements(Jim_Obj *listPtr, int idx, int elemc, Jim_Obj *const *elemVec) { int currentLen = listPtr->internalRep.listValue.len; int requiredLen = currentLen + elemc; int i; Jim_Obj **point; if (elemc == 0) { return; } if (requiredLen > listPtr->internalRep.listValue.maxLen) { if (currentLen) { requiredLen *= 2; } ListEnsureLength(listPtr, requiredLen); } if (idx < 0) { idx = currentLen; } point = listPtr->internalRep.listValue.ele + idx; memmove(point + elemc, point, (currentLen - idx) * sizeof(Jim_Obj *)); for (i = 0; i < elemc; ++i) { point[i] = elemVec[i]; listPtr->taint |= point[i]->taint; Jim_IncrRefCount(point[i]); } listPtr->internalRep.listValue.len += elemc; } static void ListAppendElement(Jim_Obj *listPtr, Jim_Obj *objPtr) { ListInsertElements(listPtr, -1, 1, &objPtr); } static void ListAppendList(Jim_Obj *listPtr, Jim_Obj *appendListPtr) { ListInsertElements(listPtr, -1, appendListPtr->internalRep.listValue.len, appendListPtr->internalRep.listValue.ele); } void Jim_ListAppendElement(Jim_Interp *interp, Jim_Obj *listPtr, Jim_Obj *objPtr) { JimPanic((Jim_IsShared(listPtr), "Jim_ListAppendElement called with shared object")); SetListFromAny(interp, listPtr); Jim_InvalidateStringRep(listPtr); ListAppendElement(listPtr, objPtr); } void Jim_ListAppendList(Jim_Interp *interp, Jim_Obj *listPtr, Jim_Obj *appendListPtr) { JimPanic((Jim_IsShared(listPtr), "Jim_ListAppendList called with shared object")); SetListFromAny(interp, listPtr); SetListFromAny(interp, appendListPtr); Jim_InvalidateStringRep(listPtr); ListAppendList(listPtr, appendListPtr); } int Jim_ListLength(Jim_Interp *interp, Jim_Obj *objPtr) { SetListFromAny(interp, objPtr); return objPtr->internalRep.listValue.len; } void Jim_ListInsertElements(Jim_Interp *interp, Jim_Obj *listPtr, int idx, int objc, Jim_Obj *const *objVec) { JimPanic((Jim_IsShared(listPtr), "Jim_ListInsertElement called with shared object")); SetListFromAny(interp, listPtr); if (idx >= 0 && idx > listPtr->internalRep.listValue.len) idx = listPtr->internalRep.listValue.len; else if (idx < 0) idx = 0; Jim_InvalidateStringRep(listPtr); ListInsertElements(listPtr, idx, objc, objVec); } Jim_Obj *Jim_ListGetIndex(Jim_Interp *interp, Jim_Obj *listPtr, int idx) { SetListFromAny(interp, listPtr); if ((idx >= 0 && idx >= listPtr->internalRep.listValue.len) || (idx < 0 && (-idx - 1) >= listPtr->internalRep.listValue.len)) { return NULL; } if (idx < 0) idx = listPtr->internalRep.listValue.len + idx; return listPtr->internalRep.listValue.ele[idx]; } int Jim_ListIndex(Jim_Interp *interp, Jim_Obj *listPtr, int idx, Jim_Obj **objPtrPtr, int flags) { *objPtrPtr = Jim_ListGetIndex(interp, listPtr, idx); if (*objPtrPtr == NULL) { if (flags & JIM_ERRMSG) { Jim_SetResultString(interp, "list index out of range", -1); } return JIM_ERR; } return JIM_OK; } static int Jim_ListIndices(Jim_Interp *interp, Jim_Obj *listPtr, Jim_Obj *const *indexv, int indexc, Jim_Obj **resultObj, int flags) { int i; int static_idxes[5]; int *idxes = static_idxes; int ret = JIM_OK; if (indexc > sizeof(static_idxes) / sizeof(*static_idxes)) { idxes = Jim_Alloc(indexc * sizeof(*idxes)); } for (i = 0; i < indexc; i++) { ret = Jim_GetIndex(interp, indexv[i], &idxes[i]); if (ret != JIM_OK) { goto err; } } for (i = 0; i < indexc; i++) { Jim_Obj *objPtr = Jim_ListGetIndex(interp, listPtr, idxes[i]); if (!objPtr) { if (flags & JIM_ERRMSG) { if (idxes[i] < 0 || idxes[i] > Jim_ListLength(interp, listPtr)) { Jim_SetResultFormatted(interp, "index \"%#s\" out of range", indexv[i]); } else { Jim_SetResultFormatted(interp, "element %#s missing from sublist \"%#s\"", indexv[i], listPtr); } } return -1; } listPtr = objPtr; } *resultObj = listPtr; err: if (idxes != static_idxes) Jim_Free(idxes); return ret; } static int ListSetIndex(Jim_Interp *interp, Jim_Obj *listPtr, int idx, Jim_Obj *newObjPtr, int flags) { SetListFromAny(interp, listPtr); if ((idx >= 0 && idx >= listPtr->internalRep.listValue.len) || (idx < 0 && (-idx - 1) >= listPtr->internalRep.listValue.len)) { if (flags & JIM_ERRMSG) { Jim_SetResultString(interp, "list index out of range", -1); } return JIM_ERR; } if (idx < 0) idx = listPtr->internalRep.listValue.len + idx; Jim_DecrRefCount(interp, listPtr->internalRep.listValue.ele[idx]); listPtr->internalRep.listValue.ele[idx] = newObjPtr; listPtr->taint |= newObjPtr->taint; Jim_IncrRefCount(newObjPtr); return JIM_OK; } int Jim_ListSetIndex(Jim_Interp *interp, Jim_Obj *varNamePtr, Jim_Obj *const *indexv, int indexc, Jim_Obj *newObjPtr) { Jim_Obj *varObjPtr, *objPtr, *listObjPtr; int shared, i, idx; varObjPtr = objPtr = Jim_GetVariable(interp, varNamePtr, JIM_ERRMSG | JIM_UNSHARED); if (objPtr == NULL) return JIM_ERR; if ((shared = Jim_IsShared(objPtr))) varObjPtr = objPtr = Jim_DuplicateObj(interp, objPtr); for (i = 0; i < indexc - 1; i++) { listObjPtr = objPtr; if (Jim_GetIndex(interp, indexv[i], &idx) != JIM_OK) goto err; objPtr = Jim_ListGetIndex(interp, listObjPtr, idx); if (objPtr == NULL) { Jim_SetResultFormatted(interp, "index \"%#s\" out of range", indexv[i]); goto err; } if (Jim_IsShared(objPtr)) { objPtr = Jim_DuplicateObj(interp, objPtr); ListSetIndex(interp, listObjPtr, idx, objPtr, JIM_NONE); } Jim_InvalidateStringRep(listObjPtr); } if (Jim_GetIndex(interp, indexv[indexc - 1], &idx) != JIM_OK) goto err; if (ListSetIndex(interp, objPtr, idx, newObjPtr, JIM_ERRMSG) == JIM_ERR) goto err; Jim_InvalidateStringRep(objPtr); Jim_InvalidateStringRep(varObjPtr); if (Jim_SetVariable(interp, varNamePtr, varObjPtr) != JIM_OK) { return JIM_ERR; } Jim_SetResult(interp, varObjPtr); return JIM_OK; err: if (shared) { Jim_FreeNewObj(interp, varObjPtr); } return JIM_ERR; } Jim_Obj *Jim_ListJoin(Jim_Interp *interp, Jim_Obj *listObjPtr, const char *joinStr, int joinStrLen) { int i; int listLen = Jim_ListLength(interp, listObjPtr); Jim_Obj *resObjPtr = Jim_NewEmptyStringObj(interp); for (i = 0; i < listLen; ) { Jim_AppendObj(interp, resObjPtr, Jim_ListGetIndex(interp, listObjPtr, i)); if (++i != listLen) { Jim_AppendString(interp, resObjPtr, joinStr, joinStrLen); } } return resObjPtr; } Jim_Obj *Jim_ConcatObj(Jim_Interp *interp, int objc, Jim_Obj *const *objv) { int i; for (i = 0; i < objc; i++) { if (!Jim_IsList(objv[i])) break; } if (i == objc) { Jim_Obj *objPtr = Jim_NewListObj(interp, NULL, 0); for (i = 0; i < objc; i++) ListAppendList(objPtr, objv[i]); return objPtr; } else { int len = 0, objLen; char *bytes, *p; for (i = 0; i < objc; i++) { len += Jim_Length(objv[i]); } if (objc) len += objc - 1; p = bytes = Jim_Alloc(len + 1); for (i = 0; i < objc; i++) { const char *s = Jim_GetString(objv[i], &objLen); while (objLen && isspace(UCHAR(*s))) { s++; objLen--; len--; } while (objLen && isspace(UCHAR(s[objLen - 1]))) { if (objLen > 1 && s[objLen - 2] == '\\') { break; } objLen--; len--; } memcpy(p, s, objLen); p += objLen; if (i + 1 != objc) { if (objLen) *p++ = ' '; else { len--; } } } *p = '\0'; return Jim_NewStringObjNoAlloc(interp, bytes, len); } } Jim_Obj *Jim_ListRange(Jim_Interp *interp, Jim_Obj *listObjPtr, Jim_Obj *firstObjPtr, Jim_Obj *lastObjPtr) { int first, last; int len, rangeLen; if (Jim_GetIndex(interp, firstObjPtr, &first) != JIM_OK || Jim_GetIndex(interp, lastObjPtr, &last) != JIM_OK) return NULL; len = Jim_ListLength(interp, listObjPtr); first = JimRelToAbsIndex(len, first); last = JimRelToAbsIndex(len, last); JimRelToAbsRange(len, &first, &last, &rangeLen); if (first == 0 && last == len) { return listObjPtr; } return Jim_NewListObj(interp, listObjPtr->internalRep.listValue.ele + first, rangeLen); } static void FreeDictInternalRep(Jim_Interp *interp, Jim_Obj *objPtr); static void DupDictInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr); static void UpdateStringOfDict(struct Jim_Obj *objPtr); static int SetDictFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr); static const Jim_ObjType dictObjType = { "dict", FreeDictInternalRep, DupDictInternalRep, UpdateStringOfDict, JIM_TYPE_NONE, }; static void JimFreeDict(Jim_Interp *interp, Jim_Dict *dict) { int i; for (i = 0; i < dict->len; i++) { Jim_DecrRefCount(interp, dict->table[i]); } Jim_Free(dict->table); Jim_Free(dict->ht); Jim_Free(dict); } enum { DICT_HASH_FIND = -1, DICT_HASH_REMOVE = -2, DICT_HASH_ADD = -3, }; static int JimDictHashFind(Jim_Dict *dict, Jim_Obj *keyObjPtr, int op_tvoffset) { unsigned h = (JimObjectHTHashFunction(keyObjPtr) + dict->uniq); unsigned idx = h & dict->sizemask; int tvoffset = 0; unsigned peturb = h; unsigned first_removed = ~0; if (dict->len) { while ((tvoffset = dict->ht[idx].offset)) { if (tvoffset == -1) { if (first_removed == ~0) { first_removed = idx; } } else if (dict->ht[idx].hash == h) { if (Jim_StringEqObj(keyObjPtr, dict->table[tvoffset - 1])) { break; } } peturb >>= 5; idx = (5 * idx + 1 + peturb) & dict->sizemask; } } switch (op_tvoffset) { case DICT_HASH_FIND: break; case DICT_HASH_REMOVE: if (tvoffset) { dict->ht[idx].offset = -1; dict->dummy++; } break; case DICT_HASH_ADD: if (tvoffset == 0) { if (first_removed != ~0) { idx = first_removed; dict->dummy--; } dict->ht[idx].offset = dict->len + 1; dict->ht[idx].hash = h; } break; default: assert(tvoffset); dict->ht[idx].offset = op_tvoffset; break; } return tvoffset; } static void JimDictExpandHashTable(Jim_Dict *dict, unsigned int size) { int i; struct JimDictHashEntry *prevht = dict->ht; int prevsize = dict->size; dict->size = JimHashTableNextPower(size); dict->sizemask = dict->size - 1; dict->ht = Jim_Alloc(dict->size * sizeof(*dict->ht)); memset(dict->ht, 0, dict->size * sizeof(*dict->ht)); for (i = 0; i < prevsize; i++) { if (prevht[i].offset > 0) { unsigned h = prevht[i].hash; unsigned idx = h & dict->sizemask; unsigned peturb = h; while (dict->ht[idx].offset) { peturb >>= 5; idx = (5 * idx + 1 + peturb) & dict->sizemask; } dict->ht[idx].offset = prevht[i].offset; dict->ht[idx].hash = h; } } Jim_Free(prevht); } static int JimDictAdd(Jim_Dict *dict, Jim_Obj *keyObjPtr) { if (dict->size <= dict->len + dict->dummy) { JimDictExpandHashTable(dict, dict->size ? dict->size * 2 : 8); } return JimDictHashFind(dict, keyObjPtr, DICT_HASH_ADD); } static Jim_Dict *JimDictNew(Jim_Interp *interp, int table_size, int ht_size) { Jim_Dict *dict = Jim_Alloc(sizeof(*dict)); memset(dict, 0, sizeof(*dict)); if (ht_size) { JimDictExpandHashTable(dict, ht_size); } if (table_size) { dict->table = Jim_Alloc(table_size * sizeof(*dict->table)); dict->maxLen = table_size; } #ifdef JIM_RANDOMISE_HASH dict->uniq = (rand() ^ time(NULL) ^ clock()); #endif return dict; } static void FreeDictInternalRep(Jim_Interp *interp, Jim_Obj *objPtr) { JimFreeDict(interp, objPtr->internalRep.dictValue); } static void DupDictInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr) { Jim_Dict *oldDict = srcPtr->internalRep.dictValue; int i; Jim_Dict *newDict = JimDictNew(interp, oldDict->maxLen, oldDict->size); for (i = 0; i < oldDict->len; i++) { newDict->table[i] = oldDict->table[i]; Jim_IncrRefCount(newDict->table[i]); } newDict->len = oldDict->len; newDict->uniq = oldDict->uniq; memcpy(newDict->ht, oldDict->ht, sizeof(*oldDict->ht) * oldDict->size); dupPtr->internalRep.dictValue = newDict; dupPtr->typePtr = &dictObjType; } static void UpdateStringOfDict(struct Jim_Obj *objPtr) { JimMakeListStringRep(objPtr, objPtr->internalRep.dictValue->table, objPtr->internalRep.dictValue->len); } static int SetDictFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr) { int listlen; if (objPtr->typePtr == &dictObjType) { return JIM_OK; } if (Jim_IsList(objPtr) && Jim_IsShared(objPtr)) { Jim_String(objPtr); } listlen = Jim_ListLength(interp, objPtr); if (listlen % 2) { Jim_SetResultString(interp, "missing value to go with key", -1); return JIM_ERR; } else { Jim_Dict *dict = JimDictNew(interp, 0, listlen); int i; dict->table = objPtr->internalRep.listValue.ele; dict->maxLen = objPtr->internalRep.listValue.maxLen; for (i = 0; i < listlen; i += 2) { int tvoffset = JimDictAdd(dict, dict->table[i]); if (tvoffset) { Jim_DecrRefCount(interp, dict->table[tvoffset]); dict->table[tvoffset] = dict->table[i + 1]; Jim_DecrRefCount(interp, dict->table[i]); } else { if (dict->len != i) { dict->table[dict->len++] = dict->table[i]; dict->table[dict->len++] = dict->table[i + 1]; } else { dict->len += 2; } } } objPtr->typePtr = &dictObjType; objPtr->internalRep.dictValue = dict; return JIM_OK; } } static int DictAddElement(Jim_Interp *interp, Jim_Obj *objPtr, Jim_Obj *keyObjPtr, Jim_Obj *valueObjPtr) { Jim_Dict *dict = objPtr->internalRep.dictValue; if (valueObjPtr == NULL) { int tvoffset = JimDictHashFind(dict, keyObjPtr, DICT_HASH_REMOVE); if (tvoffset) { Jim_DecrRefCount(interp, dict->table[tvoffset - 1]); Jim_DecrRefCount(interp, dict->table[tvoffset]); dict->len -= 2; if (tvoffset != dict->len + 1) { dict->table[tvoffset - 1] = dict->table[dict->len]; dict->table[tvoffset] = dict->table[dict->len + 1]; JimDictHashFind(dict, dict->table[tvoffset - 1], tvoffset); } return JIM_OK; } return JIM_ERR; } else { int tvoffset = JimDictAdd(dict, keyObjPtr); if (tvoffset) { Jim_IncrRefCount(valueObjPtr); Jim_DecrRefCount(interp, dict->table[tvoffset]); dict->table[tvoffset] = valueObjPtr; } else { if (dict->maxLen == dict->len) { if (dict->maxLen < 4) { dict->maxLen = 4; } else { dict->maxLen *= 2; } dict->table = Jim_Realloc(dict->table, dict->maxLen * sizeof(*dict->table)); } Jim_IncrRefCount(keyObjPtr); Jim_IncrRefCount(valueObjPtr); dict->table[dict->len++] = keyObjPtr; dict->table[dict->len++] = valueObjPtr; } objPtr->taint |= keyObjPtr->taint | valueObjPtr->taint; return JIM_OK; } } int Jim_DictAddElement(Jim_Interp *interp, Jim_Obj *objPtr, Jim_Obj *keyObjPtr, Jim_Obj *valueObjPtr) { JimPanic((Jim_IsShared(objPtr), "Jim_DictAddElement called with shared object")); if (SetDictFromAny(interp, objPtr) != JIM_OK) { return JIM_ERR; } Jim_InvalidateStringRep(objPtr); return DictAddElement(interp, objPtr, keyObjPtr, valueObjPtr); } Jim_Obj *Jim_NewDictObj(Jim_Interp *interp, Jim_Obj *const *elements, int len) { Jim_Obj *objPtr; int i; JimPanic((len % 2, "Jim_NewDictObj() 'len' argument must be even")); objPtr = Jim_NewObj(interp); objPtr->typePtr = &dictObjType; objPtr->bytes = NULL; objPtr->internalRep.dictValue = JimDictNew(interp, len, len); for (i = 0; i < len; i += 2) DictAddElement(interp, objPtr, elements[i], elements[i + 1]); return objPtr; } int Jim_DictKey(Jim_Interp *interp, Jim_Obj *dictPtr, Jim_Obj *keyPtr, Jim_Obj **objPtrPtr, int flags) { int tvoffset; Jim_Dict *dict; if (SetDictFromAny(interp, dictPtr) != JIM_OK) { return -1; } dict = dictPtr->internalRep.dictValue; tvoffset = JimDictHashFind(dict, keyPtr, DICT_HASH_FIND); if (tvoffset == 0) { if (flags & JIM_ERRMSG) { Jim_SetResultFormatted(interp, "key \"%#s\" not known in dictionary", keyPtr); } return JIM_ERR; } *objPtrPtr = dict->table[tvoffset]; return JIM_OK; } Jim_Obj **Jim_DictPairs(Jim_Interp *interp, Jim_Obj *dictPtr, int *len) { if (Jim_IsList(dictPtr)) { Jim_Obj **table; JimListGetElements(interp, dictPtr, len, &table); if (*len % 2 == 0) { return table; } } if (SetDictFromAny(interp, dictPtr) != JIM_OK) { *len = 1; return NULL; } *len = dictPtr->internalRep.dictValue->len; return dictPtr->internalRep.dictValue->table; } int Jim_DictKeysVector(Jim_Interp *interp, Jim_Obj *dictPtr, Jim_Obj *const *keyv, int keyc, Jim_Obj **objPtrPtr, int flags) { int i; if (keyc == 0) { *objPtrPtr = dictPtr; return JIM_OK; } for (i = 0; i < keyc; i++) { Jim_Obj *objPtr; int rc = Jim_DictKey(interp, dictPtr, keyv[i], &objPtr, flags); if (rc != JIM_OK) { return rc; } dictPtr = objPtr; } *objPtrPtr = dictPtr; return JIM_OK; } int Jim_SetDictKeysVector(Jim_Interp *interp, Jim_Obj *varNamePtr, Jim_Obj *const *keyv, int keyc, Jim_Obj *newObjPtr, int flags) { Jim_Obj *varObjPtr, *objPtr, *dictObjPtr; int shared, i; varObjPtr = objPtr = Jim_GetVariable(interp, varNamePtr, flags); if (objPtr == NULL) { if (newObjPtr == NULL && (flags & JIM_MUSTEXIST)) { return JIM_ERR; } varObjPtr = objPtr = Jim_NewDictObj(interp, NULL, 0); if (Jim_SetVariable(interp, varNamePtr, objPtr) != JIM_OK) { return JIM_ERR; } } if ((shared = Jim_IsShared(objPtr))) varObjPtr = objPtr = Jim_DuplicateObj(interp, objPtr); for (i = 0; i < keyc; i++) { dictObjPtr = objPtr; if (SetDictFromAny(interp, dictObjPtr) != JIM_OK) { goto err; } if (i == keyc - 1) { if (Jim_DictAddElement(interp, objPtr, keyv[keyc - 1], newObjPtr) != JIM_OK) { if (newObjPtr || (flags & JIM_MUSTEXIST)) { goto err; } } if (newObjPtr) { varObjPtr->taint |= newObjPtr->taint; } break; } Jim_InvalidateStringRep(dictObjPtr); if (Jim_DictKey(interp, dictObjPtr, keyv[i], &objPtr, newObjPtr ? JIM_NONE : JIM_ERRMSG) == JIM_OK) { if (Jim_IsShared(objPtr)) { objPtr = Jim_DuplicateObj(interp, objPtr); DictAddElement(interp, dictObjPtr, keyv[i], objPtr); } } else { if (newObjPtr == NULL) { goto err; } objPtr = Jim_NewDictObj(interp, NULL, 0); DictAddElement(interp, dictObjPtr, keyv[i], objPtr); } } Jim_InvalidateStringRep(objPtr); Jim_InvalidateStringRep(varObjPtr); if (Jim_SetVariable(interp, varNamePtr, varObjPtr) != JIM_OK) { return JIM_ERR; } if (!(flags & JIM_NORESULT)) { Jim_SetResult(interp, varObjPtr); } return JIM_OK; err: if (shared) { Jim_FreeNewObj(interp, varObjPtr); } return JIM_ERR; } static void UpdateStringOfIndex(struct Jim_Obj *objPtr); static int SetIndexFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr); static const Jim_ObjType indexObjType = { "index", NULL, NULL, UpdateStringOfIndex, JIM_TYPE_NONE, }; static void UpdateStringOfIndex(struct Jim_Obj *objPtr) { if (objPtr->internalRep.intValue == -1) { JimSetStringBytes(objPtr, "end"); } else { char buf[JIM_INTEGER_SPACE + 1]; if (objPtr->internalRep.intValue >= 0 || objPtr->internalRep.intValue == -INT_MAX) { sprintf(buf, "%d", objPtr->internalRep.intValue); } else { sprintf(buf, "end%d", objPtr->internalRep.intValue + 1); } JimSetStringBytes(objPtr, buf); } } static int SetIndexFromAny(Jim_Interp *interp, Jim_Obj *objPtr) { jim_wide idx; int end = 0; const char *str; Jim_Obj *exprObj = objPtr; JimPanic((objPtr->refCount == 0, "SetIndexFromAny() called with zero refcount object")); str = Jim_String(objPtr); if (strncmp(str, "end", 3) == 0) { end = 1; str += 3; idx = 0; switch (*str) { case '\0': exprObj = NULL; break; case '-': case '+': exprObj = Jim_NewStringObj(interp, str, -1); break; default: goto badindex; } } if (exprObj) { int ret; Jim_IncrRefCount(exprObj); ret = Jim_GetWideExpr(interp, exprObj, &idx); Jim_DecrRefCount(interp, exprObj); if (ret != JIM_OK) { goto badindex; } } if (end) { if (idx > 0) { idx = INT_MAX; } else { idx--; } } else if (idx < 0) { idx = -INT_MAX; } else if (idx > INT_MAX) { goto badindex; } Jim_FreeIntRep(interp, objPtr); objPtr->typePtr = &indexObjType; objPtr->internalRep.intValue = idx; return JIM_OK; badindex: Jim_SetResultFormatted(interp, "bad index \"%#s\": must be intexpr or end?[+-]intexpr?", objPtr); return JIM_ERR; } int Jim_GetIndex(Jim_Interp *interp, Jim_Obj *objPtr, int *indexPtr) { if (objPtr->typePtr == &intObjType) { jim_wide val = JimWideValue(objPtr); if (val < 0) *indexPtr = -INT_MAX; else if (val > INT_MAX) *indexPtr = INT_MAX; else *indexPtr = (int)val; return JIM_OK; } if (objPtr->typePtr != &indexObjType && SetIndexFromAny(interp, objPtr) == JIM_ERR) return JIM_ERR; *indexPtr = objPtr->internalRep.intValue; return JIM_OK; } static const char * const jimReturnCodes[] = { "ok", "error", "return", "break", "continue", "signal", "exit", "eval", NULL }; #define jimReturnCodesSize (sizeof(jimReturnCodes)/sizeof(*jimReturnCodes) - 1) static const Jim_ObjType returnCodeObjType = { "return-code", NULL, NULL, NULL, JIM_TYPE_NONE, }; const char *Jim_ReturnCode(int code) { if (code < 0 || code >= (int)jimReturnCodesSize) { return "?"; } else { return jimReturnCodes[code]; } } static int SetReturnCodeFromAny(Jim_Interp *interp, Jim_Obj *objPtr) { int returnCode; jim_wide wideValue; if (JimGetWideNoErr(interp, objPtr, &wideValue) != JIM_ERR) returnCode = (int)wideValue; else if (Jim_GetEnum(interp, objPtr, jimReturnCodes, &returnCode, NULL, JIM_NONE) != JIM_OK) { Jim_SetResultFormatted(interp, "expected return code but got \"%#s\"", objPtr); return JIM_ERR; } Jim_FreeIntRep(interp, objPtr); objPtr->typePtr = &returnCodeObjType; objPtr->internalRep.intValue = returnCode; return JIM_OK; } int Jim_GetReturnCode(Jim_Interp *interp, Jim_Obj *objPtr, int *intPtr) { if (objPtr->typePtr != &returnCodeObjType && SetReturnCodeFromAny(interp, objPtr) == JIM_ERR) return JIM_ERR; *intPtr = objPtr->internalRep.intValue; return JIM_OK; } static int JimParseExprOperator(struct JimParserCtx *pc); static int JimParseExprNumber(struct JimParserCtx *pc); static int JimParseExprIrrational(struct JimParserCtx *pc); static int JimParseExprBoolean(struct JimParserCtx *pc); enum { JIM_EXPROP_MUL = JIM_TT_EXPR_OP, JIM_EXPROP_DIV, JIM_EXPROP_MOD, JIM_EXPROP_SUB, JIM_EXPROP_ADD, JIM_EXPROP_LSHIFT, JIM_EXPROP_RSHIFT, JIM_EXPROP_ROTL, JIM_EXPROP_ROTR, JIM_EXPROP_LT, JIM_EXPROP_GT, JIM_EXPROP_LTE, JIM_EXPROP_GTE, JIM_EXPROP_NUMEQ, JIM_EXPROP_NUMNE, JIM_EXPROP_BITAND, JIM_EXPROP_BITXOR, JIM_EXPROP_BITOR, JIM_EXPROP_LOGICAND, JIM_EXPROP_LOGICOR, JIM_EXPROP_TERNARY, JIM_EXPROP_COLON, JIM_EXPROP_POW, JIM_EXPROP_STREQ, JIM_EXPROP_STRNE, JIM_EXPROP_STRGLOB, JIM_EXPROP_STRRE, JIM_EXPROP_STRIN, JIM_EXPROP_STRNI, JIM_EXPROP_STRLT, JIM_EXPROP_STRGT, JIM_EXPROP_STRLE, JIM_EXPROP_STRGE, JIM_EXPROP_NOT, JIM_EXPROP_BITNOT, JIM_EXPROP_UNARYMINUS, JIM_EXPROP_UNARYPLUS, JIM_EXPROP_FUNC_INT, JIM_EXPROP_FUNC_WIDE, JIM_EXPROP_FUNC_ABS, JIM_EXPROP_FUNC_DOUBLE, JIM_EXPROP_FUNC_ROUND, JIM_EXPROP_FUNC_RAND, JIM_EXPROP_FUNC_SRAND, JIM_EXPROP_FUNC_SIN, JIM_EXPROP_FUNC_COS, JIM_EXPROP_FUNC_TAN, JIM_EXPROP_FUNC_ASIN, JIM_EXPROP_FUNC_ACOS, JIM_EXPROP_FUNC_ATAN, JIM_EXPROP_FUNC_ATAN2, JIM_EXPROP_FUNC_SINH, JIM_EXPROP_FUNC_COSH, JIM_EXPROP_FUNC_TANH, JIM_EXPROP_FUNC_CEIL, JIM_EXPROP_FUNC_FLOOR, JIM_EXPROP_FUNC_EXP, JIM_EXPROP_FUNC_LOG, JIM_EXPROP_FUNC_LOG10, JIM_EXPROP_FUNC_SQRT, JIM_EXPROP_FUNC_POW, JIM_EXPROP_FUNC_HYPOT, JIM_EXPROP_FUNC_FMOD, }; struct JimExprNode { int type; struct Jim_Obj *objPtr; struct JimExprNode *left; struct JimExprNode *right; struct JimExprNode *ternary; }; typedef struct Jim_ExprOperator { const char *name; int (*funcop) (Jim_Interp *interp, struct JimExprNode *opnode); unsigned char precedence; unsigned char arity; unsigned char attr; unsigned char namelen; } Jim_ExprOperator; static int JimExprGetTerm(Jim_Interp *interp, struct JimExprNode *node, Jim_Obj **objPtrPtr); static int JimExprGetTermBoolean(Jim_Interp *interp, struct JimExprNode *node); static int JimExprEvalTermNode(Jim_Interp *interp, struct JimExprNode *node); static int JimExprOpNumUnary(Jim_Interp *interp, struct JimExprNode *node) { int intresult = 1; int rc, bA = 0; double dA, dC = 0; jim_wide wA, wC = 0; Jim_Obj *A; if ((rc = JimExprGetTerm(interp, node->left, &A)) != JIM_OK) { return rc; } if ((A->typePtr != &doubleObjType || A->bytes) && JimGetWideNoErr(interp, A, &wA) == JIM_OK) { switch (node->type) { case JIM_EXPROP_FUNC_INT: case JIM_EXPROP_FUNC_WIDE: case JIM_EXPROP_FUNC_ROUND: case JIM_EXPROP_UNARYPLUS: wC = wA; break; case JIM_EXPROP_FUNC_DOUBLE: dC = wA; intresult = 0; break; case JIM_EXPROP_FUNC_ABS: wC = wA >= 0 ? wA : -wA; break; case JIM_EXPROP_UNARYMINUS: wC = -wA; break; case JIM_EXPROP_NOT: wC = !wA; break; default: abort(); } } else if ((rc = Jim_GetDouble(interp, A, &dA)) == JIM_OK) { switch (node->type) { case JIM_EXPROP_FUNC_INT: case JIM_EXPROP_FUNC_WIDE: wC = dA; break; case JIM_EXPROP_FUNC_ROUND: wC = dA < 0 ? (dA - 0.5) : (dA + 0.5); break; case JIM_EXPROP_FUNC_DOUBLE: case JIM_EXPROP_UNARYPLUS: dC = dA; intresult = 0; break; case JIM_EXPROP_FUNC_ABS: #ifdef JIM_MATH_FUNCTIONS dC = fabs(dA); #else dC = dA >= 0 ? dA : -dA; #endif intresult = 0; break; case JIM_EXPROP_UNARYMINUS: dC = -dA; intresult = 0; break; case JIM_EXPROP_NOT: wC = !dA; break; default: abort(); } } else if ((rc = Jim_GetBoolean(interp, A, &bA)) == JIM_OK) { switch (node->type) { case JIM_EXPROP_NOT: wC = !bA; break; case JIM_EXPROP_UNARYPLUS: case JIM_EXPROP_UNARYMINUS: rc = JIM_ERR; Jim_SetResultFormatted(interp, "can't use non-numeric string as operand of \"%s\"", node->type == JIM_EXPROP_UNARYPLUS ? "+" : "-"); break; default: abort(); } } if (rc == JIM_OK) { if (intresult) { Jim_SetResultInt(interp, wC); } else { Jim_SetResult(interp, Jim_NewDoubleObj(interp, dC)); } } Jim_DecrRefCount(interp, A); return rc; } static double JimRandDouble(Jim_Interp *interp) { unsigned long x; JimRandomBytes(interp, &x, sizeof(x)); return (double)x / (double)~0UL; } static int JimExprOpIntUnary(Jim_Interp *interp, struct JimExprNode *node) { jim_wide wA; Jim_Obj *A; int rc; if ((rc = JimExprGetTerm(interp, node->left, &A)) != JIM_OK) { return rc; } rc = Jim_GetWide(interp, A, &wA); if (rc == JIM_OK) { switch (node->type) { case JIM_EXPROP_BITNOT: Jim_SetResultInt(interp, ~wA); break; case JIM_EXPROP_FUNC_SRAND: JimPrngSeed(interp, (unsigned char *)&wA, sizeof(wA)); Jim_SetResult(interp, Jim_NewDoubleObj(interp, JimRandDouble(interp))); break; default: abort(); } } Jim_DecrRefCount(interp, A); return rc; } static int JimExprOpNone(Jim_Interp *interp, struct JimExprNode *node) { JimPanic((node->type != JIM_EXPROP_FUNC_RAND, "JimExprOpNone only support rand()")); Jim_SetResult(interp, Jim_NewDoubleObj(interp, JimRandDouble(interp))); return JIM_OK; } #ifdef JIM_MATH_FUNCTIONS static int JimExprOpDoubleUnary(Jim_Interp *interp, struct JimExprNode *node) { int rc; double dA, dC; Jim_Obj *A; if ((rc = JimExprGetTerm(interp, node->left, &A)) != JIM_OK) { return rc; } rc = Jim_GetDouble(interp, A, &dA); if (rc == JIM_OK) { switch (node->type) { case JIM_EXPROP_FUNC_SIN: dC = sin(dA); break; case JIM_EXPROP_FUNC_COS: dC = cos(dA); break; case JIM_EXPROP_FUNC_TAN: dC = tan(dA); break; case JIM_EXPROP_FUNC_ASIN: dC = asin(dA); break; case JIM_EXPROP_FUNC_ACOS: dC = acos(dA); break; case JIM_EXPROP_FUNC_ATAN: dC = atan(dA); break; case JIM_EXPROP_FUNC_SINH: dC = sinh(dA); break; case JIM_EXPROP_FUNC_COSH: dC = cosh(dA); break; case JIM_EXPROP_FUNC_TANH: dC = tanh(dA); break; case JIM_EXPROP_FUNC_CEIL: dC = ceil(dA); break; case JIM_EXPROP_FUNC_FLOOR: dC = floor(dA); break; case JIM_EXPROP_FUNC_EXP: dC = exp(dA); break; case JIM_EXPROP_FUNC_LOG: dC = log(dA); break; case JIM_EXPROP_FUNC_LOG10: dC = log10(dA); break; case JIM_EXPROP_FUNC_SQRT: dC = sqrt(dA); break; default: abort(); } Jim_SetResult(interp, Jim_NewDoubleObj(interp, dC)); } Jim_DecrRefCount(interp, A); return rc; } #endif static int JimExprOpIntBin(Jim_Interp *interp, struct JimExprNode *node) { jim_wide wA, wB; int rc; Jim_Obj *A, *B; if ((rc = JimExprGetTerm(interp, node->left, &A)) != JIM_OK) { return rc; } if ((rc = JimExprGetTerm(interp, node->right, &B)) != JIM_OK) { Jim_DecrRefCount(interp, A); return rc; } rc = JIM_ERR; if (Jim_GetWide(interp, A, &wA) == JIM_OK && Jim_GetWide(interp, B, &wB) == JIM_OK) { jim_wide wC; rc = JIM_OK; switch (node->type) { case JIM_EXPROP_LSHIFT: wC = wA << wB; break; case JIM_EXPROP_RSHIFT: wC = wA >> wB; break; case JIM_EXPROP_BITAND: wC = wA & wB; break; case JIM_EXPROP_BITXOR: wC = wA ^ wB; break; case JIM_EXPROP_BITOR: wC = wA | wB; break; case JIM_EXPROP_MOD: if (wB == 0) { wC = 0; Jim_SetResultString(interp, "Division by zero", -1); rc = JIM_ERR; } else { int negative = 0; if (wB < 0) { wB = -wB; wA = -wA; negative = 1; } wC = wA % wB; if (wC < 0) { wC += wB; } if (negative) { wC = -wC; } } break; case JIM_EXPROP_ROTL: case JIM_EXPROP_ROTR:{ unsigned long uA = (unsigned long)wA; unsigned long uB = (unsigned long)wB; const unsigned int S = sizeof(unsigned long) * 8; uB %= S; if (node->type == JIM_EXPROP_ROTR) { uB = S - uB; } wC = (unsigned long)(uA << uB) | (uA >> (S - uB)); break; } default: abort(); } Jim_SetResultInt(interp, wC); } Jim_DecrRefCount(interp, A); Jim_DecrRefCount(interp, B); return rc; } static int JimExprOpBin(Jim_Interp *interp, struct JimExprNode *node) { int rc = JIM_OK; double dA, dB, dC = 0; jim_wide wA, wB, wC = 0; Jim_Obj *A, *B; if ((rc = JimExprGetTerm(interp, node->left, &A)) != JIM_OK) { return rc; } if ((rc = JimExprGetTerm(interp, node->right, &B)) != JIM_OK) { Jim_DecrRefCount(interp, A); return rc; } if ((A->typePtr != &doubleObjType || A->bytes) && (B->typePtr != &doubleObjType || B->bytes) && JimGetWideNoErr(interp, A, &wA) == JIM_OK && JimGetWideNoErr(interp, B, &wB) == JIM_OK) { switch (node->type) { case JIM_EXPROP_POW: case JIM_EXPROP_FUNC_POW: if (wA == 0 && wB < 0) { Jim_SetResultString(interp, "exponentiation of zero by negative power", -1); rc = JIM_ERR; goto done; } wC = JimPowWide(wA, wB); goto intresult; case JIM_EXPROP_ADD: wC = wA + wB; goto intresult; case JIM_EXPROP_SUB: wC = wA - wB; goto intresult; case JIM_EXPROP_MUL: wC = wA * wB; goto intresult; case JIM_EXPROP_DIV: if (wB == 0) { Jim_SetResultString(interp, "Division by zero", -1); rc = JIM_ERR; goto done; } else { if (wB < 0) { wB = -wB; wA = -wA; } wC = wA / wB; if (wA % wB < 0) { wC--; } goto intresult; } case JIM_EXPROP_LT: wC = wA < wB; goto intresult; case JIM_EXPROP_GT: wC = wA > wB; goto intresult; case JIM_EXPROP_LTE: wC = wA <= wB; goto intresult; case JIM_EXPROP_GTE: wC = wA >= wB; goto intresult; case JIM_EXPROP_NUMEQ: wC = wA == wB; goto intresult; case JIM_EXPROP_NUMNE: wC = wA != wB; goto intresult; } } if (Jim_GetDouble(interp, A, &dA) == JIM_OK && Jim_GetDouble(interp, B, &dB) == JIM_OK) { switch (node->type) { #ifndef JIM_MATH_FUNCTIONS case JIM_EXPROP_POW: case JIM_EXPROP_FUNC_POW: case JIM_EXPROP_FUNC_ATAN2: case JIM_EXPROP_FUNC_HYPOT: case JIM_EXPROP_FUNC_FMOD: Jim_SetResultString(interp, "unsupported", -1); rc = JIM_ERR; goto done; #else case JIM_EXPROP_POW: case JIM_EXPROP_FUNC_POW: dC = pow(dA, dB); goto doubleresult; case JIM_EXPROP_FUNC_ATAN2: dC = atan2(dA, dB); goto doubleresult; case JIM_EXPROP_FUNC_HYPOT: dC = hypot(dA, dB); goto doubleresult; case JIM_EXPROP_FUNC_FMOD: dC = fmod(dA, dB); goto doubleresult; #endif case JIM_EXPROP_ADD: dC = dA + dB; goto doubleresult; case JIM_EXPROP_SUB: dC = dA - dB; goto doubleresult; case JIM_EXPROP_MUL: dC = dA * dB; goto doubleresult; case JIM_EXPROP_DIV: if (dB == 0) { #ifdef INFINITY dC = dA < 0 ? -INFINITY : INFINITY; #else dC = (dA < 0 ? -1.0 : 1.0) * strtod("Inf", NULL); #endif } else { dC = dA / dB; } goto doubleresult; case JIM_EXPROP_LT: wC = dA < dB; goto intresult; case JIM_EXPROP_GT: wC = dA > dB; goto intresult; case JIM_EXPROP_LTE: wC = dA <= dB; goto intresult; case JIM_EXPROP_GTE: wC = dA >= dB; goto intresult; case JIM_EXPROP_NUMEQ: wC = dA == dB; goto intresult; case JIM_EXPROP_NUMNE: wC = dA != dB; goto intresult; } } else { int i = Jim_StringCompareObj(interp, A, B, 0); switch (node->type) { case JIM_EXPROP_LT: wC = i < 0; goto intresult; case JIM_EXPROP_GT: wC = i > 0; goto intresult; case JIM_EXPROP_LTE: wC = i <= 0; goto intresult; case JIM_EXPROP_GTE: wC = i >= 0; goto intresult; case JIM_EXPROP_NUMEQ: wC = i == 0; goto intresult; case JIM_EXPROP_NUMNE: wC = i != 0; goto intresult; } } rc = JIM_ERR; done: Jim_DecrRefCount(interp, A); Jim_DecrRefCount(interp, B); return rc; intresult: Jim_SetResultInt(interp, wC); goto done; doubleresult: Jim_SetResult(interp, Jim_NewDoubleObj(interp, dC)); goto done; } static int JimSearchList(Jim_Interp *interp, Jim_Obj *listObjPtr, Jim_Obj *valObj) { int listlen; int i; listlen = Jim_ListLength(interp, listObjPtr); for (i = 0; i < listlen; i++) { if (Jim_StringEqObj(Jim_ListGetIndex(interp, listObjPtr, i), valObj)) { return 1; } } return 0; } static int JimRegexpMatch(Jim_Interp *interp, Jim_Obj *patternObj, Jim_Obj *objPtr) { Jim_Obj *argv[3]; int argc = 0; long eq; int rc; argv[argc++] = Jim_NewStringObj(interp, "regexp", -1); argv[argc++] = patternObj; argv[argc++] = objPtr; rc = Jim_EvalObjVector(interp, argc, argv); if (rc != JIM_OK || Jim_GetLong(interp, Jim_GetResult(interp), &eq) != JIM_OK) { eq = -rc; } return eq; } static int JimExprOpStrBin(Jim_Interp *interp, struct JimExprNode *node) { Jim_Obj *A, *B; jim_wide wC; int comp, rc; if ((rc = JimExprGetTerm(interp, node->left, &A)) != JIM_OK) { return rc; } if ((rc = JimExprGetTerm(interp, node->right, &B)) != JIM_OK) { Jim_DecrRefCount(interp, A); return rc; } switch (node->type) { case JIM_EXPROP_STREQ: case JIM_EXPROP_STRNE: wC = Jim_StringEqObj(A, B); if (node->type == JIM_EXPROP_STRNE) { wC = !wC; } break; case JIM_EXPROP_STRLT: case JIM_EXPROP_STRGT: case JIM_EXPROP_STRLE: case JIM_EXPROP_STRGE: comp = Jim_StringCompareObj(interp, A, B, 0); if (node->type == JIM_EXPROP_STRLT) { wC = comp == -1; } else if (node->type == JIM_EXPROP_STRGT) { wC = comp == 1; } else if (node->type == JIM_EXPROP_STRLE) { wC = comp == -1 || comp == 0; } else { wC = comp == 0 || comp == 1; } break; case JIM_EXPROP_STRIN: wC = JimSearchList(interp, B, A); break; case JIM_EXPROP_STRNI: wC = !JimSearchList(interp, B, A); break; case JIM_EXPROP_STRGLOB: wC = Jim_StringMatchObj(interp, B, A, 0); break; case JIM_EXPROP_STRRE: wC = JimRegexpMatch(interp, B, A); if (wC < 0) { rc = JIM_ERR; goto error; } break; default: abort(); } Jim_SetResultInt(interp, wC); error: Jim_DecrRefCount(interp, A); Jim_DecrRefCount(interp, B); return rc; } static int ExprBool(Jim_Interp *interp, Jim_Obj *obj) { long l; double d; int b; int ret = -1; Jim_IncrRefCount(obj); if (Jim_GetLong(interp, obj, &l) == JIM_OK) { ret = (l != 0); } else if (Jim_GetDouble(interp, obj, &d) == JIM_OK) { ret = (d != 0); } else if (Jim_GetBoolean(interp, obj, &b) == JIM_OK) { ret = (b != 0); } Jim_DecrRefCount(interp, obj); return ret; } static int JimExprOpAnd(Jim_Interp *interp, struct JimExprNode *node) { int result = JimExprGetTermBoolean(interp, node->left); if (result == 1) { result = JimExprGetTermBoolean(interp, node->right); } if (result == -1) { return JIM_ERR; } Jim_SetResultInt(interp, result); return JIM_OK; } static int JimExprOpOr(Jim_Interp *interp, struct JimExprNode *node) { int result = JimExprGetTermBoolean(interp, node->left); if (result == 0) { result = JimExprGetTermBoolean(interp, node->right); } if (result == -1) { return JIM_ERR; } Jim_SetResultInt(interp, result); return JIM_OK; } static int JimExprOpTernary(Jim_Interp *interp, struct JimExprNode *node) { int result = JimExprGetTermBoolean(interp, node->left); if (result == 1) { return JimExprEvalTermNode(interp, node->right); } else if (result == 0) { return JimExprEvalTermNode(interp, node->ternary); } return JIM_ERR; } enum { OP_FUNC = 0x0001, OP_RIGHT_ASSOC = 0x0002, }; #define OPRINIT_ATTR(N, P, ARITY, F, ATTR) {N, F, P, ARITY, ATTR, sizeof(N) - 1} #define OPRINIT(N, P, ARITY, F) OPRINIT_ATTR(N, P, ARITY, F, 0) static const struct Jim_ExprOperator Jim_ExprOperators[] = { OPRINIT("*", 110, 2, JimExprOpBin), OPRINIT("/", 110, 2, JimExprOpBin), OPRINIT("%", 110, 2, JimExprOpIntBin), OPRINIT("-", 100, 2, JimExprOpBin), OPRINIT("+", 100, 2, JimExprOpBin), OPRINIT("<<", 90, 2, JimExprOpIntBin), OPRINIT(">>", 90, 2, JimExprOpIntBin), OPRINIT("<<<", 90, 2, JimExprOpIntBin), OPRINIT(">>>", 90, 2, JimExprOpIntBin), OPRINIT("<", 80, 2, JimExprOpBin), OPRINIT(">", 80, 2, JimExprOpBin), OPRINIT("<=", 80, 2, JimExprOpBin), OPRINIT(">=", 80, 2, JimExprOpBin), OPRINIT("==", 70, 2, JimExprOpBin), OPRINIT("!=", 70, 2, JimExprOpBin), OPRINIT("&", 50, 2, JimExprOpIntBin), OPRINIT("^", 49, 2, JimExprOpIntBin), OPRINIT("|", 48, 2, JimExprOpIntBin), OPRINIT("&&", 10, 2, JimExprOpAnd), OPRINIT("||", 9, 2, JimExprOpOr), OPRINIT_ATTR("?", 5, 3, JimExprOpTernary, OP_RIGHT_ASSOC), OPRINIT_ATTR(":", 5, 3, NULL, OP_RIGHT_ASSOC), OPRINIT_ATTR("**", 120, 2, JimExprOpBin, OP_RIGHT_ASSOC), OPRINIT("eq", 60, 2, JimExprOpStrBin), OPRINIT("ne", 60, 2, JimExprOpStrBin), OPRINIT("=*", 60, 2, JimExprOpStrBin), OPRINIT("=~", 60, 2, JimExprOpStrBin), OPRINIT("in", 55, 2, JimExprOpStrBin), OPRINIT("ni", 55, 2, JimExprOpStrBin), OPRINIT("lt", 75, 2, JimExprOpStrBin), OPRINIT("gt", 75, 2, JimExprOpStrBin), OPRINIT("le", 75, 2, JimExprOpStrBin), OPRINIT("ge", 75, 2, JimExprOpStrBin), OPRINIT_ATTR("!", 150, 1, JimExprOpNumUnary, OP_RIGHT_ASSOC), OPRINIT_ATTR("~", 150, 1, JimExprOpIntUnary, OP_RIGHT_ASSOC), OPRINIT_ATTR(" -", 150, 1, JimExprOpNumUnary, OP_RIGHT_ASSOC), OPRINIT_ATTR(" +", 150, 1, JimExprOpNumUnary, OP_RIGHT_ASSOC), OPRINIT_ATTR("int", 200, 1, JimExprOpNumUnary, OP_FUNC), OPRINIT_ATTR("wide", 200, 1, JimExprOpNumUnary, OP_FUNC), OPRINIT_ATTR("abs", 200, 1, JimExprOpNumUnary, OP_FUNC), OPRINIT_ATTR("double", 200, 1, JimExprOpNumUnary, OP_FUNC), OPRINIT_ATTR("round", 200, 1, JimExprOpNumUnary, OP_FUNC), OPRINIT_ATTR("rand", 200, 0, JimExprOpNone, OP_FUNC), OPRINIT_ATTR("srand", 200, 1, JimExprOpIntUnary, OP_FUNC), #ifdef JIM_MATH_FUNCTIONS OPRINIT_ATTR("sin", 200, 1, JimExprOpDoubleUnary, OP_FUNC), OPRINIT_ATTR("cos", 200, 1, JimExprOpDoubleUnary, OP_FUNC), OPRINIT_ATTR("tan", 200, 1, JimExprOpDoubleUnary, OP_FUNC), OPRINIT_ATTR("asin", 200, 1, JimExprOpDoubleUnary, OP_FUNC), OPRINIT_ATTR("acos", 200, 1, JimExprOpDoubleUnary, OP_FUNC), OPRINIT_ATTR("atan", 200, 1, JimExprOpDoubleUnary, OP_FUNC), OPRINIT_ATTR("atan2", 200, 2, JimExprOpBin, OP_FUNC), OPRINIT_ATTR("sinh", 200, 1, JimExprOpDoubleUnary, OP_FUNC), OPRINIT_ATTR("cosh", 200, 1, JimExprOpDoubleUnary, OP_FUNC), OPRINIT_ATTR("tanh", 200, 1, JimExprOpDoubleUnary, OP_FUNC), OPRINIT_ATTR("ceil", 200, 1, JimExprOpDoubleUnary, OP_FUNC), OPRINIT_ATTR("floor", 200, 1, JimExprOpDoubleUnary, OP_FUNC), OPRINIT_ATTR("exp", 200, 1, JimExprOpDoubleUnary, OP_FUNC), OPRINIT_ATTR("log", 200, 1, JimExprOpDoubleUnary, OP_FUNC), OPRINIT_ATTR("log10", 200, 1, JimExprOpDoubleUnary, OP_FUNC), OPRINIT_ATTR("sqrt", 200, 1, JimExprOpDoubleUnary, OP_FUNC), OPRINIT_ATTR("pow", 200, 2, JimExprOpBin, OP_FUNC), OPRINIT_ATTR("hypot", 200, 2, JimExprOpBin, OP_FUNC), OPRINIT_ATTR("fmod", 200, 2, JimExprOpBin, OP_FUNC), #endif }; #undef OPRINIT #undef OPRINIT_ATTR #define JIM_EXPR_OPERATORS_NUM \ (sizeof(Jim_ExprOperators)/sizeof(struct Jim_ExprOperator)) static int JimParseExpression(struct JimParserCtx *pc) { pc->errmsg = NULL; while (1) { while (isspace(UCHAR(*pc->p)) || (*(pc->p) == '\\' && *(pc->p + 1) == '\n')) { if (*pc->p == '\n') { pc->linenr++; } pc->p++; pc->len--; } if (*pc->p == '#') { JimParseComment(pc); continue; } break; } pc->tline = pc->linenr; pc->tstart = pc->p; if (pc->len == 0) { pc->tend = pc->p; pc->tt = JIM_TT_EOL; pc->eof = 1; return JIM_OK; } switch (*(pc->p)) { case '(': pc->tt = JIM_TT_SUBEXPR_START; goto singlechar; case ')': pc->tt = JIM_TT_SUBEXPR_END; goto singlechar; case ',': pc->tt = JIM_TT_SUBEXPR_COMMA; singlechar: pc->tend = pc->p; pc->p++; pc->len--; break; case '[': return JimParseCmd(pc); case '$': if (JimParseVar(pc) == JIM_ERR) return JimParseExprOperator(pc); else { if (pc->tt == JIM_TT_EXPRSUGAR) { pc->errmsg = "nesting expr in expr is not allowed"; return JIM_ERR; } return JIM_OK; } break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '.': return JimParseExprNumber(pc); case '"': return JimParseQuote(pc); case '{': return JimParseBrace(pc); case 'N': case 'I': case 'n': case 'i': if (JimParseExprIrrational(pc) == JIM_ERR) if (JimParseExprBoolean(pc) == JIM_ERR) return JimParseExprOperator(pc); break; case 't': case 'f': case 'o': case 'y': if (JimParseExprBoolean(pc) == JIM_ERR) return JimParseExprOperator(pc); break; default: return JimParseExprOperator(pc); break; } return JIM_OK; } static int JimParseExprNumber(struct JimParserCtx *pc) { char *end; pc->tt = JIM_TT_EXPR_INT; jim_strtoull(pc->p, (char **)&pc->p); if (strchr("eENnIi.", *pc->p) || pc->p == pc->tstart) { if (strtod(pc->tstart, &end)) { } if (end == pc->tstart) return JIM_ERR; if (end > pc->p) { pc->tt = JIM_TT_EXPR_DOUBLE; pc->p = end; } } pc->tend = pc->p - 1; pc->len -= (pc->p - pc->tstart); return JIM_OK; } static int JimParseExprIrrational(struct JimParserCtx *pc) { const char *irrationals[] = { "NaN", "nan", "NAN", "Inf", "inf", "INF", NULL }; int i; for (i = 0; irrationals[i]; i++) { const char *irr = irrationals[i]; if (strncmp(irr, pc->p, 3) == 0) { pc->p += 3; pc->len -= 3; pc->tend = pc->p - 1; pc->tt = JIM_TT_EXPR_DOUBLE; return JIM_OK; } } return JIM_ERR; } static int JimParseExprBoolean(struct JimParserCtx *pc) { int i; for (i = 0; i < sizeof(jim_true_false_strings) / sizeof(*jim_true_false_strings); i++) { if (strncmp(pc->p, jim_true_false_strings[i], jim_true_false_lens[i]) == 0) { pc->p += jim_true_false_lens[i]; pc->len -= jim_true_false_lens[i]; pc->tend = pc->p - 1; pc->tt = JIM_TT_EXPR_BOOLEAN; return JIM_OK; } } return JIM_ERR; } static const struct Jim_ExprOperator *JimExprOperatorInfoByOpcode(int opcode) { static Jim_ExprOperator dummy_op; if (opcode < JIM_TT_EXPR_OP) { return &dummy_op; } return &Jim_ExprOperators[opcode - JIM_TT_EXPR_OP]; } static int JimParseExprOperator(struct JimParserCtx *pc) { int i; const struct Jim_ExprOperator *bestOp = NULL; int bestLen = 0; for (i = 0; i < (signed)JIM_EXPR_OPERATORS_NUM; i++) { const struct Jim_ExprOperator *op = &Jim_ExprOperators[i]; if (op->name[0] != pc->p[0]) { continue; } if (op->namelen > bestLen && strncmp(op->name, pc->p, op->namelen) == 0) { bestOp = op; bestLen = op->namelen; } } if (bestOp == NULL) { return JIM_ERR; } if (bestOp->attr & OP_FUNC) { const char *p = pc->p + bestLen; int len = pc->len - bestLen; while (len && isspace(UCHAR(*p))) { len--; p++; } if (*p != '(') { pc->errmsg = "function requires parentheses"; return JIM_ERR; } } pc->tend = pc->p + bestLen - 1; pc->p += bestLen; pc->len -= bestLen; pc->tt = (bestOp - Jim_ExprOperators) + JIM_TT_EXPR_OP; return JIM_OK; } static void FreeExprInternalRep(Jim_Interp *interp, Jim_Obj *objPtr); static void DupExprInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr); static int SetExprFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr); static const Jim_ObjType exprObjType = { "expression", FreeExprInternalRep, DupExprInternalRep, NULL, JIM_TYPE_NONE, }; struct ExprTree { struct JimExprNode *expr; struct JimExprNode *nodes; int len; int inUse; }; static void ExprTreeFreeNodes(Jim_Interp *interp, struct JimExprNode *nodes, int num) { int i; for (i = 0; i < num; i++) { if (nodes[i].objPtr) { Jim_DecrRefCount(interp, nodes[i].objPtr); } } Jim_Free(nodes); } static void ExprTreeFree(Jim_Interp *interp, struct ExprTree *expr) { ExprTreeFreeNodes(interp, expr->nodes, expr->len); Jim_Free(expr); } static void FreeExprInternalRep(Jim_Interp *interp, Jim_Obj *objPtr) { struct ExprTree *expr = (void *)objPtr->internalRep.ptr; if (expr) { if (--expr->inUse != 0) { return; } ExprTreeFree(interp, expr); } } static void DupExprInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr) { JIM_NOTUSED(interp); JIM_NOTUSED(srcPtr); dupPtr->typePtr = NULL; } struct ExprBuilder { int parencount; int level; ParseToken *token; ParseToken *first_token; Jim_Stack stack; Jim_Obj *exprObjPtr; Jim_Obj *fileNameObj; struct JimExprNode *nodes; struct JimExprNode *next; }; #ifdef DEBUG_SHOW_EXPR static void JimShowExprNode(struct JimExprNode *node, int level) { int i; for (i = 0; i < level; i++) { printf(" "); } if (TOKEN_IS_EXPR_OP(node->type)) { printf("%s\n", jim_tt_name(node->type)); if (node->left) { JimShowExprNode(node->left, level + 1); } if (node->right) { JimShowExprNode(node->right, level + 1); } if (node->ternary) { JimShowExprNode(node->ternary, level + 1); } } else { printf("[%s] %s\n", jim_tt_name(node->type), Jim_String(node->objPtr)); } } #endif #define EXPR_UNTIL_CLOSE 0x0001 #define EXPR_FUNC_ARGS 0x0002 #define EXPR_TERNARY 0x0004 static int ExprTreeBuildTree(Jim_Interp *interp, struct ExprBuilder *builder, int precedence, int flags, int exp_numterms) { int rc; struct JimExprNode *node; int exp_stacklen = builder->stack.len + exp_numterms; if (builder->level++ > 200) { Jim_SetResultString(interp, "Expression too complex", -1); return JIM_ERR; } while (builder->token->type != JIM_TT_EOL) { ParseToken *t = builder->token++; int prevtt; if (t == builder->first_token) { prevtt = JIM_TT_NONE; } else { prevtt = t[-1].type; } if (t->type == JIM_TT_SUBEXPR_START) { if (builder->stack.len == exp_stacklen) { Jim_SetResultFormatted(interp, "unexpected open parenthesis in expression: \"%#s\"", builder->exprObjPtr); return JIM_ERR; } builder->parencount++; rc = ExprTreeBuildTree(interp, builder, 0, EXPR_UNTIL_CLOSE, 1); if (rc != JIM_OK) { return rc; } } else if (t->type == JIM_TT_SUBEXPR_END) { if (!(flags & EXPR_UNTIL_CLOSE)) { if (builder->stack.len == exp_stacklen && builder->level > 1) { builder->token--; builder->level--; return JIM_OK; } Jim_SetResultFormatted(interp, "unexpected closing parenthesis in expression: \"%#s\"", builder->exprObjPtr); return JIM_ERR; } builder->parencount--; if (builder->stack.len == exp_stacklen) { break; } } else if (t->type == JIM_TT_SUBEXPR_COMMA) { if (!(flags & EXPR_FUNC_ARGS)) { if (builder->stack.len == exp_stacklen) { builder->token--; builder->level--; return JIM_OK; } Jim_SetResultFormatted(interp, "unexpected comma in expression: \"%#s\"", builder->exprObjPtr); return JIM_ERR; } else { if (builder->stack.len > exp_stacklen) { Jim_SetResultFormatted(interp, "too many arguments to math function"); return JIM_ERR; } } } else if (t->type == JIM_EXPROP_COLON) { if (!(flags & EXPR_TERNARY)) { if (builder->level != 1) { builder->token--; builder->level--; return JIM_OK; } Jim_SetResultFormatted(interp, ": without ? in expression: \"%#s\"", builder->exprObjPtr); return JIM_ERR; } if (builder->stack.len == exp_stacklen) { builder->token--; builder->level--; return JIM_OK; } } else if (TOKEN_IS_EXPR_OP(t->type)) { const struct Jim_ExprOperator *op; if (TOKEN_IS_EXPR_OP(prevtt) || TOKEN_IS_EXPR_START(prevtt)) { if (t->type == JIM_EXPROP_SUB) { t->type = JIM_EXPROP_UNARYMINUS; } else if (t->type == JIM_EXPROP_ADD) { t->type = JIM_EXPROP_UNARYPLUS; } } op = JimExprOperatorInfoByOpcode(t->type); if (op->precedence < precedence || (!(op->attr & OP_RIGHT_ASSOC) && op->precedence == precedence)) { builder->token--; break; } if (op->attr & OP_FUNC) { if (builder->token->type != JIM_TT_SUBEXPR_START) { Jim_SetResultString(interp, "missing arguments for math function", -1); return JIM_ERR; } builder->token++; if (op->arity == 0) { if (builder->token->type != JIM_TT_SUBEXPR_END) { Jim_SetResultString(interp, "too many arguments for math function", -1); return JIM_ERR; } builder->token++; goto noargs; } builder->parencount++; rc = ExprTreeBuildTree(interp, builder, 0, EXPR_FUNC_ARGS | EXPR_UNTIL_CLOSE, op->arity); } else if (t->type == JIM_EXPROP_TERNARY) { rc = ExprTreeBuildTree(interp, builder, op->precedence, EXPR_TERNARY, 2); } else { rc = ExprTreeBuildTree(interp, builder, op->precedence, 0, 1); } if (rc != JIM_OK) { return rc; } noargs: node = builder->next++; node->type = t->type; if (op->arity >= 3) { node->ternary = Jim_StackPop(&builder->stack); if (node->ternary == NULL) { goto missingoperand; } } if (op->arity >= 2) { node->right = Jim_StackPop(&builder->stack); if (node->right == NULL) { goto missingoperand; } } if (op->arity >= 1) { node->left = Jim_StackPop(&builder->stack); if (node->left == NULL) { missingoperand: Jim_SetResultFormatted(interp, "missing operand to %s in expression: \"%#s\"", op->name, builder->exprObjPtr); builder->next--; return JIM_ERR; } } Jim_StackPush(&builder->stack, node); } else { Jim_Obj *objPtr = NULL; if (!TOKEN_IS_EXPR_START(prevtt) && !TOKEN_IS_EXPR_OP(prevtt)) { Jim_SetResultFormatted(interp, "missing operator in expression: \"%#s\"", builder->exprObjPtr); return JIM_ERR; } if (t->type == JIM_TT_EXPR_INT || t->type == JIM_TT_EXPR_DOUBLE) { char *endptr; if (t->type == JIM_TT_EXPR_INT) { objPtr = Jim_NewIntObj(interp, jim_strtoull(t->token, &endptr)); } else { objPtr = Jim_NewDoubleObj(interp, strtod(t->token, &endptr)); } if (endptr != t->token + t->len) { Jim_FreeNewObj(interp, objPtr); objPtr = NULL; } } if (!objPtr) { objPtr = Jim_NewStringObj(interp, t->token, t->len); if (t->type == JIM_TT_CMD) { Jim_SetSourceInfo(interp, objPtr, builder->fileNameObj, t->line); } } node = builder->next++; node->objPtr = objPtr; Jim_IncrRefCount(node->objPtr); node->type = t->type; Jim_StackPush(&builder->stack, node); } } if (builder->stack.len == exp_stacklen) { builder->level--; return JIM_OK; } if ((flags & EXPR_FUNC_ARGS)) { Jim_SetResultFormatted(interp, "too %s arguments for math function", (builder->stack.len < exp_stacklen) ? "few" : "many"); } else { if (builder->stack.len < exp_stacklen) { if (builder->level == 0) { Jim_SetResultFormatted(interp, "empty expression"); } else { Jim_SetResultFormatted(interp, "syntax error in expression \"%#s\": premature end of expression", builder->exprObjPtr); } } else { Jim_SetResultFormatted(interp, "extra terms after expression"); } } return JIM_ERR; } static struct ExprTree *ExprTreeCreateTree(Jim_Interp *interp, const ParseTokenList *tokenlist, Jim_Obj *exprObjPtr, Jim_Obj *fileNameObj) { struct ExprTree *expr; struct ExprBuilder builder; int rc; struct JimExprNode *top = NULL; builder.parencount = 0; builder.level = 0; builder.token = builder.first_token = tokenlist->list; builder.exprObjPtr = exprObjPtr; builder.fileNameObj = fileNameObj; builder.nodes = Jim_Alloc(sizeof(struct JimExprNode) * (tokenlist->count - 1)); memset(builder.nodes, 0, sizeof(struct JimExprNode) * (tokenlist->count - 1)); builder.next = builder.nodes; Jim_StackInit(&builder.stack, NULL); rc = ExprTreeBuildTree(interp, &builder, 0, 0, 1); if (rc == JIM_OK) { top = Jim_StackPop(&builder.stack); if (builder.parencount) { Jim_SetResultString(interp, "missing close parenthesis", -1); rc = JIM_ERR; } } Jim_StackFree(&builder.stack); if (rc != JIM_OK) { ExprTreeFreeNodes(interp, builder.nodes, builder.next - builder.nodes); return NULL; } expr = Jim_Alloc(sizeof(*expr)); expr->inUse = 1; expr->expr = top; expr->nodes = builder.nodes; expr->len = builder.next - builder.nodes; assert(expr->len <= tokenlist->count - 1); return expr; } static int SetExprFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr) { int exprTextLen; const char *exprText; struct JimParserCtx parser; struct ExprTree *expr; ParseTokenList tokenlist; int line; Jim_Obj *fileNameObj; int rc = JIM_ERR; fileNameObj = Jim_GetSourceInfo(interp, objPtr, &line); Jim_IncrRefCount(fileNameObj); exprText = Jim_GetString(objPtr, &exprTextLen); int oldtaint = interp->taint; interp->taint = objPtr->taint; ScriptTokenListInit(&tokenlist); JimParserInit(&parser, exprText, exprTextLen, line); while (!parser.eof) { if (JimParseExpression(&parser) != JIM_OK) { ScriptTokenListFree(&tokenlist); Jim_SetResultFormatted(interp, "syntax error in expression: \"%#s\"", objPtr); if (parser.errmsg) { Jim_AppendStrings(interp, Jim_GetResult(interp), ": ", parser.errmsg, NULL); } expr = NULL; goto err; } ScriptAddToken(&tokenlist, parser.tstart, parser.tend - parser.tstart + 1, parser.tt, parser.tline); } #ifdef DEBUG_SHOW_EXPR_TOKENS { int i; printf("==== Expr Tokens (%s) ====\n", Jim_String(fileNameObj)); for (i = 0; i < tokenlist.count; i++) { printf("[%2d]@%d %s '%.*s'\n", i, tokenlist.list[i].line, jim_tt_name(tokenlist.list[i].type), tokenlist.list[i].len, tokenlist.list[i].token); } } #endif if (tokenlist.count <= 1) { Jim_SetResultString(interp, "empty expression", -1); rc = JIM_ERR; } else { rc = JimParseCheckMissing(interp, parser.missing.ch); } if (rc != JIM_OK) { ScriptTokenListFree(&tokenlist); Jim_DecrRefCount(interp, fileNameObj); return rc; } expr = ExprTreeCreateTree(interp, &tokenlist, objPtr, fileNameObj); ScriptTokenListFree(&tokenlist); if (!expr) { goto err; } #ifdef DEBUG_SHOW_EXPR printf("==== Expr ====\n"); JimShowExprNode(expr->expr, 0); #endif rc = JIM_OK; err: Jim_DecrRefCount(interp, fileNameObj); Jim_FreeIntRep(interp, objPtr); Jim_SetIntRepPtr(objPtr, expr); objPtr->typePtr = &exprObjType; interp->taint = oldtaint; return rc; } static struct ExprTree *JimGetExpression(Jim_Interp *interp, Jim_Obj *objPtr) { if (objPtr->typePtr != &exprObjType) { if (SetExprFromAny(interp, objPtr) != JIM_OK) { return NULL; } } return (struct ExprTree *) Jim_GetIntRepPtr(objPtr); } #ifdef JIM_OPTIMIZATION static Jim_Obj *JimExprIntValOrVar(Jim_Interp *interp, struct JimExprNode *node) { if (node->type == JIM_TT_EXPR_INT) return node->objPtr; else if (node->type == JIM_TT_VAR) return Jim_GetVariable(interp, node->objPtr, JIM_NONE); else if (node->type == JIM_TT_DICTSUGAR) return JimExpandDictSugar(interp, node->objPtr); else return NULL; } #endif static int JimExprEvalTermNode(Jim_Interp *interp, struct JimExprNode *node) { if (TOKEN_IS_EXPR_OP(node->type)) { const struct Jim_ExprOperator *op = JimExprOperatorInfoByOpcode(node->type); return op->funcop(interp, node); } else { Jim_Obj *objPtr; switch (node->type) { case JIM_TT_EXPR_INT: case JIM_TT_EXPR_DOUBLE: case JIM_TT_EXPR_BOOLEAN: case JIM_TT_STR: Jim_SetResult(interp, node->objPtr); return JIM_OK; case JIM_TT_VAR: objPtr = Jim_GetVariable(interp, node->objPtr, JIM_ERRMSG); if (objPtr) { Jim_SetResult(interp, objPtr); return JIM_OK; } return JIM_ERR; case JIM_TT_DICTSUGAR: objPtr = JimExpandDictSugar(interp, node->objPtr); if (objPtr) { Jim_SetResult(interp, objPtr); return JIM_OK; } return JIM_ERR; case JIM_TT_ESC: if (interp->safeexpr) { return JIM_ERR; } if (Jim_SubstObj(interp, node->objPtr, &objPtr, JIM_NONE) == JIM_OK) { Jim_SetResult(interp, objPtr); return JIM_OK; } return JIM_ERR; case JIM_TT_CMD: if (interp->safeexpr) { return JIM_ERR; } return Jim_EvalObj(interp, node->objPtr); default: return JIM_ERR; } } } static int JimExprGetTerm(Jim_Interp *interp, struct JimExprNode *node, Jim_Obj **objPtrPtr) { int rc = JimExprEvalTermNode(interp, node); if (rc == JIM_OK) { *objPtrPtr = Jim_GetResult(interp); Jim_IncrRefCount(*objPtrPtr); } return rc; } static int JimExprGetTermBoolean(Jim_Interp *interp, struct JimExprNode *node) { if (JimExprEvalTermNode(interp, node) == JIM_OK) { return ExprBool(interp, Jim_GetResult(interp)); } return -1; } int Jim_EvalExpression(Jim_Interp *interp, Jim_Obj *exprObjPtr) { struct ExprTree *expr; int retcode = JIM_OK; Jim_IncrRefCount(exprObjPtr); expr = JimGetExpression(interp, exprObjPtr); if (!expr) { retcode = JIM_ERR; goto done; } #ifdef JIM_OPTIMIZATION if (!interp->safeexpr) { Jim_Obj *objPtr; switch (expr->len) { case 1: objPtr = JimExprIntValOrVar(interp, expr->expr); if (objPtr) { Jim_SetResult(interp, objPtr); goto done; } break; case 2: if (expr->expr->type == JIM_EXPROP_NOT) { objPtr = JimExprIntValOrVar(interp, expr->expr->left); if (objPtr && JimIsWide(objPtr)) { Jim_SetResult(interp, JimWideValue(objPtr) ? interp->falseObj : interp->trueObj); goto done; } } break; case 3: objPtr = JimExprIntValOrVar(interp, expr->expr->left); if (objPtr && JimIsWide(objPtr)) { Jim_Obj *objPtr2 = JimExprIntValOrVar(interp, expr->expr->right); if (objPtr2 && JimIsWide(objPtr2)) { jim_wide wideValueA = JimWideValue(objPtr); jim_wide wideValueB = JimWideValue(objPtr2); int cmpRes; switch (expr->expr->type) { case JIM_EXPROP_LT: cmpRes = wideValueA < wideValueB; break; case JIM_EXPROP_LTE: cmpRes = wideValueA <= wideValueB; break; case JIM_EXPROP_GT: cmpRes = wideValueA > wideValueB; break; case JIM_EXPROP_GTE: cmpRes = wideValueA >= wideValueB; break; case JIM_EXPROP_NUMEQ: cmpRes = wideValueA == wideValueB; break; case JIM_EXPROP_NUMNE: cmpRes = wideValueA != wideValueB; break; default: goto noopt; } Jim_SetResult(interp, cmpRes ? interp->trueObj : interp->falseObj); goto done; } } break; } } noopt: #endif expr->inUse++; retcode = JimExprEvalTermNode(interp, expr->expr); Jim_FreeIntRep(interp, exprObjPtr); exprObjPtr->typePtr = &exprObjType; Jim_SetIntRepPtr(exprObjPtr, expr); done: Jim_DecrRefCount(interp, exprObjPtr); return retcode; } int Jim_GetBoolFromExpr(Jim_Interp *interp, Jim_Obj *exprObjPtr, int *boolPtr) { int retcode = Jim_EvalExpression(interp, exprObjPtr); if (retcode == JIM_OK) { switch (ExprBool(interp, Jim_GetResult(interp))) { case 0: *boolPtr = 0; break; case 1: *boolPtr = 1; break; case -1: retcode = JIM_ERR; break; } } return retcode; } typedef struct ScanFmtPartDescr { const char *arg; const char *prefix; size_t width; int pos; char type; char modifier; } ScanFmtPartDescr; typedef struct ScanFmtStringObj { jim_wide size; char *stringRep; size_t count; size_t convCount; size_t maxPos; const char *error; char *scratch; ScanFmtPartDescr descr[1]; } ScanFmtStringObj; static void FreeScanFmtInternalRep(Jim_Interp *interp, Jim_Obj *objPtr); static void DupScanFmtInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr); static void UpdateStringOfScanFmt(Jim_Obj *objPtr); static const Jim_ObjType scanFmtStringObjType = { "scanformatstring", FreeScanFmtInternalRep, DupScanFmtInternalRep, UpdateStringOfScanFmt, JIM_TYPE_NONE, }; void FreeScanFmtInternalRep(Jim_Interp *interp, Jim_Obj *objPtr) { JIM_NOTUSED(interp); Jim_Free((char *)objPtr->internalRep.ptr); objPtr->internalRep.ptr = 0; } void DupScanFmtInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr) { size_t size = (size_t) ((ScanFmtStringObj *) srcPtr->internalRep.ptr)->size; ScanFmtStringObj *newVec = (ScanFmtStringObj *) Jim_Alloc(size); JIM_NOTUSED(interp); memcpy(newVec, srcPtr->internalRep.ptr, size); dupPtr->internalRep.ptr = newVec; dupPtr->typePtr = &scanFmtStringObjType; } static void UpdateStringOfScanFmt(Jim_Obj *objPtr) { JimSetStringBytes(objPtr, ((ScanFmtStringObj *) objPtr->internalRep.ptr)->stringRep); } static int SetScanFmtFromAny(Jim_Interp *interp, Jim_Obj *objPtr) { ScanFmtStringObj *fmtObj; char *buffer; int maxCount, i, approxSize, lastPos = -1; const char *fmt = Jim_String(objPtr); int maxFmtLen = Jim_Length(objPtr); const char *fmtEnd = fmt + maxFmtLen; int curr; Jim_FreeIntRep(interp, objPtr); for (i = 0, maxCount = 0; i < maxFmtLen; ++i) if (fmt[i] == '%') ++maxCount; approxSize = sizeof(ScanFmtStringObj) +(maxCount + 1) * sizeof(ScanFmtPartDescr) +maxFmtLen * sizeof(char) + 3 + 1 + maxFmtLen * sizeof(char) + 1 + maxFmtLen * sizeof(char) +(maxCount + 1) * sizeof(char) +1; fmtObj = (ScanFmtStringObj *) Jim_Alloc(approxSize); memset(fmtObj, 0, approxSize); fmtObj->size = approxSize; fmtObj->maxPos = 0; fmtObj->scratch = (char *)&fmtObj->descr[maxCount + 1]; fmtObj->stringRep = fmtObj->scratch + maxFmtLen + 3 + 1; memcpy(fmtObj->stringRep, fmt, maxFmtLen); buffer = fmtObj->stringRep + maxFmtLen + 1; objPtr->internalRep.ptr = fmtObj; objPtr->typePtr = &scanFmtStringObjType; for (i = 0, curr = 0; fmt < fmtEnd; ++fmt) { int width = 0, skip; ScanFmtPartDescr *descr = &fmtObj->descr[curr]; fmtObj->count++; descr->width = 0; if (*fmt != '%' || fmt[1] == '%') { descr->type = 0; descr->prefix = &buffer[i]; for (; fmt < fmtEnd; ++fmt) { if (*fmt == '%') { if (fmt[1] != '%') break; ++fmt; } buffer[i++] = *fmt; } buffer[i++] = 0; } ++fmt; if (fmt >= fmtEnd) goto done; descr->pos = 0; if (*fmt == '*') { descr->pos = -1; ++fmt; } else fmtObj->convCount++; if (sscanf(fmt, "%d%n", &width, &skip) == 1) { fmt += skip; if (descr->pos != -1 && *fmt == '$') { int prev; ++fmt; descr->pos = width; width = 0; if ((lastPos == 0 && descr->pos > 0) || (lastPos > 0 && descr->pos == 0)) { fmtObj->error = "cannot mix \"%\" and \"%n$\" conversion specifiers"; return JIM_ERR; } for (prev = 0; prev < curr; ++prev) { if (fmtObj->descr[prev].pos == -1) continue; if (fmtObj->descr[prev].pos == descr->pos) { fmtObj->error = "variable is assigned by multiple \"%n$\" conversion specifiers"; return JIM_ERR; } } if (descr->pos < 0) { fmtObj->error = "\"%n$\" conversion specifier is negative"; return JIM_ERR; } if (sscanf(fmt, "%d%n", &width, &skip) == 1) { descr->width = width; fmt += skip; } if (descr->pos > 0 && (size_t) descr->pos > fmtObj->maxPos) fmtObj->maxPos = descr->pos; } else { descr->width = width; } } if (lastPos == -1) lastPos = descr->pos; if (*fmt == '[') { int swapped = 1, beg = i, end, j; descr->type = '['; descr->arg = &buffer[i]; ++fmt; if (*fmt == '^') buffer[i++] = *fmt++; if (*fmt == ']') buffer[i++] = *fmt++; while (*fmt && *fmt != ']') buffer[i++] = *fmt++; if (*fmt != ']') { fmtObj->error = "unmatched [ in format string"; return JIM_ERR; } end = i; buffer[i++] = 0; while (swapped) { swapped = 0; for (j = beg + 1; j < end - 1; ++j) { if (buffer[j] == '-' && buffer[j - 1] > buffer[j + 1]) { char tmp = buffer[j - 1]; buffer[j - 1] = buffer[j + 1]; buffer[j + 1] = tmp; swapped = 1; } } } } else { if (fmt < fmtEnd && strchr("hlL", *fmt)) descr->modifier = tolower((int)*fmt++); if (fmt >= fmtEnd) { fmtObj->error = "missing scan conversion character"; return JIM_ERR; } descr->type = *fmt; if (strchr("efgcsndoxui", *fmt) == 0) { fmtObj->error = "bad scan conversion character"; return JIM_ERR; } else if (*fmt == 'c' && descr->width != 0) { fmtObj->error = "field width may not be specified in %c " "conversion"; return JIM_ERR; } else if (*fmt == 'u' && descr->modifier == 'l') { fmtObj->error = "unsigned wide not supported"; return JIM_ERR; } } curr++; } done: return JIM_OK; } #define FormatGetCnvCount(_fo_) \ ((ScanFmtStringObj*)((_fo_)->internalRep.ptr))->convCount #define FormatGetMaxPos(_fo_) \ ((ScanFmtStringObj*)((_fo_)->internalRep.ptr))->maxPos #define FormatGetError(_fo_) \ ((ScanFmtStringObj*)((_fo_)->internalRep.ptr))->error static Jim_Obj *JimScanAString(Jim_Interp *interp, const char *sdescr, const char *str) { char *buffer = Jim_StrDup(str); char *p = buffer; while (*str) { int c; int n; if (!sdescr && isspace(UCHAR(*str))) break; n = utf8_tounicode(str, &c); if (sdescr && !JimCharsetMatch(sdescr, strlen(sdescr), c, JIM_CHARSET_SCAN)) break; while (n--) *p++ = *str++; } *p = 0; return Jim_NewStringObjNoAlloc(interp, buffer, p - buffer); } static int ScanOneEntry(Jim_Interp *interp, const char *str, int pos, int str_bytelen, ScanFmtStringObj * fmtObj, long idx, Jim_Obj **valObjPtr) { const char *tok; const ScanFmtPartDescr *descr = &fmtObj->descr[idx]; size_t scanned = 0; size_t anchor = pos; int i; Jim_Obj *tmpObj = NULL; *valObjPtr = 0; if (descr->prefix) { for (i = 0; pos < str_bytelen && descr->prefix[i]; ++i) { if (isspace(UCHAR(descr->prefix[i]))) while (pos < str_bytelen && isspace(UCHAR(str[pos]))) ++pos; else if (descr->prefix[i] != str[pos]) break; else ++pos; } if (pos >= str_bytelen) { return -1; } else if (descr->prefix[i] != 0) return 0; } if (descr->type != 'c' && descr->type != '[' && descr->type != 'n') while (isspace(UCHAR(str[pos]))) ++pos; scanned = pos - anchor; if (descr->type == 'n') { *valObjPtr = Jim_NewIntObj(interp, anchor + scanned); } else if (pos >= str_bytelen) { return -1; } else if (descr->type == 'c') { int c; scanned += utf8_tounicode(&str[pos], &c); *valObjPtr = Jim_NewIntObj(interp, c); return scanned; } else { if (descr->width > 0) { size_t sLen = utf8_strlen(&str[pos], str_bytelen - pos); size_t tLen = descr->width > sLen ? sLen : descr->width; tmpObj = Jim_NewStringObjUtf8(interp, str + pos, tLen); tok = tmpObj->bytes; } else { tok = &str[pos]; } switch (descr->type) { case 'd': case 'o': case 'x': case 'u': case 'i':{ char *endp; jim_wide w; int base = descr->type == 'o' ? 8 : descr->type == 'x' ? 16 : descr->type == 'i' ? 0 : 10; if (base == 0) { w = jim_strtoull(tok, &endp); } else { w = strtoull(tok, &endp, base); } if (endp != tok) { *valObjPtr = Jim_NewIntObj(interp, w); scanned += endp - tok; } else { scanned = *tok ? 0 : -1; } break; } case 's': case '[':{ *valObjPtr = JimScanAString(interp, descr->arg, tok); scanned += Jim_Length(*valObjPtr); break; } case 'e': case 'f': case 'g':{ char *endp; double value = strtod(tok, &endp); if (endp != tok) { *valObjPtr = Jim_NewDoubleObj(interp, value); scanned += endp - tok; } else { scanned = *tok ? 0 : -1; } break; } } if (tmpObj) { Jim_FreeNewObj(interp, tmpObj); } } return scanned; } Jim_Obj *Jim_ScanString(Jim_Interp *interp, Jim_Obj *strObjPtr, Jim_Obj *fmtObjPtr, int flags) { size_t i, pos; int scanned = 1; const char *str = Jim_String(strObjPtr); int str_bytelen = Jim_Length(strObjPtr); Jim_Obj *resultList = 0; Jim_Obj **resultVec = 0; int resultc; Jim_Obj *emptyStr = 0; ScanFmtStringObj *fmtObj; JimPanic((fmtObjPtr->typePtr != &scanFmtStringObjType, "Jim_ScanString() for non-scan format")); fmtObj = (ScanFmtStringObj *) fmtObjPtr->internalRep.ptr; if (fmtObj->error != 0) { if (flags & JIM_ERRMSG) Jim_SetResultString(interp, fmtObj->error, -1); return 0; } emptyStr = Jim_NewEmptyStringObj(interp); Jim_IncrRefCount(emptyStr); resultList = Jim_NewListObj(interp, NULL, 0); if (fmtObj->maxPos > 0) { for (i = 0; i < fmtObj->maxPos; ++i) Jim_ListAppendElement(interp, resultList, emptyStr); JimListGetElements(interp, resultList, &resultc, &resultVec); } for (i = 0, pos = 0; i < fmtObj->count; ++i) { ScanFmtPartDescr *descr = &(fmtObj->descr[i]); Jim_Obj *value = 0; if (descr->type == 0) continue; if (scanned > 0) scanned = ScanOneEntry(interp, str, pos, str_bytelen, fmtObj, i, &value); if (scanned == -1 && i == 0) goto eof; pos += scanned; if (value == 0) value = Jim_NewEmptyStringObj(interp); if (descr->pos == -1) { Jim_FreeNewObj(interp, value); } else if (descr->pos == 0) Jim_ListAppendElement(interp, resultList, value); else if (resultVec[descr->pos - 1] == emptyStr) { Jim_DecrRefCount(interp, resultVec[descr->pos - 1]); Jim_IncrRefCount(value); resultVec[descr->pos - 1] = value; } else { Jim_FreeNewObj(interp, value); goto err; } } Jim_DecrRefCount(interp, emptyStr); return resultList; eof: Jim_DecrRefCount(interp, emptyStr); Jim_FreeNewObj(interp, resultList); return (Jim_Obj *)EOF; err: Jim_DecrRefCount(interp, emptyStr); Jim_FreeNewObj(interp, resultList); return 0; } static void JimPrngInit(Jim_Interp *interp) { #define PRNG_SEED_SIZE 256 int i; unsigned int *seed; time_t t = time(NULL); interp->prngState = Jim_Alloc(sizeof(Jim_PrngState)); seed = Jim_Alloc(PRNG_SEED_SIZE * sizeof(*seed)); for (i = 0; i < PRNG_SEED_SIZE; i++) { seed[i] = (rand() ^ t ^ clock()); } JimPrngSeed(interp, (unsigned char *)seed, PRNG_SEED_SIZE * sizeof(*seed)); Jim_Free(seed); } static void JimRandomBytes(Jim_Interp *interp, void *dest, unsigned int len) { Jim_PrngState *prng; unsigned char *destByte = (unsigned char *)dest; unsigned int si, sj, x; if (interp->prngState == NULL) JimPrngInit(interp); prng = interp->prngState; for (x = 0; x < len; x++) { prng->i = (prng->i + 1) & 0xff; si = prng->sbox[prng->i]; prng->j = (prng->j + si) & 0xff; sj = prng->sbox[prng->j]; prng->sbox[prng->i] = sj; prng->sbox[prng->j] = si; *destByte++ = prng->sbox[(si + sj) & 0xff]; } } static void JimPrngSeed(Jim_Interp *interp, unsigned char *seed, int seedLen) { int i; Jim_PrngState *prng; if (interp->prngState == NULL) JimPrngInit(interp); prng = interp->prngState; for (i = 0; i < 256; i++) prng->sbox[i] = i; for (i = 0; i < seedLen; i++) { unsigned char t; t = prng->sbox[i & 0xFF]; prng->sbox[i & 0xFF] = prng->sbox[seed[i]]; prng->sbox[seed[i]] = t; } prng->i = prng->j = 0; for (i = 0; i < 256; i += seedLen) { JimRandomBytes(interp, seed, seedLen); } } static int Jim_IncrCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { jim_wide wideValue, increment = 1; Jim_Obj *intObjPtr; if (argc == 3) { if (Jim_GetWideExpr(interp, argv[2], &increment) != JIM_OK) return JIM_ERR; } intObjPtr = Jim_GetVariable(interp, argv[1], JIM_UNSHARED); if (!intObjPtr) { wideValue = 0; } else if (Jim_GetWide(interp, intObjPtr, &wideValue) != JIM_OK) { return JIM_ERR; } if (!intObjPtr || Jim_IsShared(intObjPtr)) { intObjPtr = Jim_NewIntObj(interp, wideValue + increment); if (Jim_SetVariable(interp, argv[1], intObjPtr) != JIM_OK) { return JIM_ERR; } } else { Jim_InvalidateStringRep(intObjPtr); JimWideValue(intObjPtr) = wideValue + increment; if (argv[1]->typePtr != &variableObjType) { Jim_SetVariable(interp, argv[1], intObjPtr); } } Jim_SetResult(interp, intObjPtr); return JIM_OK; } #define JIM_EVAL_SARGV_LEN 8 #define JIM_EVAL_SINTV_LEN 8 static int JimTraceCallback(Jim_Interp *interp, const char *type, int argc, Jim_Obj *const *argv) { JimPanic((interp->traceCmdObj == NULL, "xtrace invoked with no object")); int ret; Jim_Obj *nargv[7]; Jim_Obj *traceCmdObj = interp->traceCmdObj; Jim_Obj *resultObj = Jim_GetResult(interp); ScriptObj *script = NULL; if (interp->evalFrame->scriptObj) { script = JimGetScript(interp, interp->evalFrame->scriptObj); } nargv[0] = traceCmdObj; nargv[1] = Jim_NewStringObj(interp, type, -1); nargv[2] = script ? script->fileNameObj : interp->emptyObj; nargv[3] = Jim_NewIntObj(interp, script ? script->linenr : 1); nargv[4] = resultObj; nargv[5] = argv[0]; nargv[6] = Jim_NewListObj(interp, argv + 1, argc - 1); interp->traceCmdObj = NULL; Jim_IncrRefCount(resultObj); ret = Jim_EvalObjVector(interp, 7, nargv); Jim_DecrRefCount(interp, resultObj); if (ret == JIM_OK || ret == JIM_RETURN) { interp->traceCmdObj = traceCmdObj; Jim_SetEmptyResult(interp); ret = JIM_OK; } else { Jim_DecrRefCount(interp, traceCmdObj); } return ret; } static int JimUnknown(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int retcode; if (interp->unknown_called > 50) { return JIM_ERR; } if (Jim_GetCommand(interp, interp->unknown, JIM_NONE) == NULL) return JIM_ERR; interp->unknown_called++; retcode = Jim_EvalObjPrefix(interp, interp->unknown, argc, argv); interp->unknown_called--; return retcode; } static void JimPushEvalFrame(Jim_Interp *interp, Jim_EvalFrame *frame, Jim_Obj *scriptObj) { memset(frame, 0, sizeof(*frame)); frame->parent = interp->evalFrame; frame->level = frame->parent->level + 1; frame->procLevel = interp->procLevel; frame->framePtr = interp->framePtr; if (scriptObj) { frame->scriptObj = scriptObj; } else { frame->scriptObj = frame->parent->scriptObj; } interp->evalFrame = frame; #if 0 if (frame->scriptObj) { printf("script: %.*s\n", 20, Jim_String(frame->scriptObj)); } #endif } static void JimPopEvalFrame(Jim_Interp *interp) { interp->evalFrame = interp->evalFrame->parent; } static int JimInvokeCommand(Jim_Interp *interp, int objc, Jim_Obj *const *objv) { int retcode; Jim_Cmd *cmdPtr; void *prevPrivData; Jim_Obj *tailcallObj = NULL; #if 0 printf("invoke"); int j; for (j = 0; j < objc; j++) { printf(" '%s'", Jim_String(objv[j])); } printf("\n"); #endif cmdPtr = Jim_GetCommand(interp, objv[0], JIM_ERRMSG); if (cmdPtr == NULL) { return JimUnknown(interp, objc, objv); } JimIncrCmdRefCount(cmdPtr); if (interp->evalDepth == interp->maxEvalDepth) { Jim_SetResultString(interp, "Infinite eval recursion", -1); retcode = JIM_ERR; goto out; } interp->evalDepth++; prevPrivData = interp->cmdPrivData; tailcall: interp->evalFrame->argc = objc; interp->evalFrame->argv = objv; interp->evalFrame->cmd = cmdPtr; if (!interp->traceCmdObj || (retcode = JimTraceCallback(interp, "cmd", objc, objv)) == JIM_OK) { Jim_SetEmptyResult(interp); interp->taint = Jim_CalcTaint(objc, objv); if (cmdPtr->flags & JIM_CMD_ISPROC) { retcode = JimCallProcedure(interp, cmdPtr, objc, objv); } else if ((cmdPtr->flags & JIM_CMD_NOTAINT) && Jim_CheckTaint(interp, JIM_TAINT_ANY)) { Jim_SetTaintError(interp, 1, objv); retcode = JIM_ERR; } else { retcode = JimCallNative(interp, cmdPtr, objc, objv); } if (retcode == JIM_ERR) { JimSetErrorStack(interp, NULL); } } if (tailcallObj) { Jim_DecrRefCount(interp, tailcallObj); tailcallObj = NULL; } interp->evalFrame->argc = 0; interp->evalFrame->argv = NULL; if (retcode == JIM_EVAL && interp->framePtr->tailcallObj) { JimDecrCmdRefCount(interp, cmdPtr); cmdPtr = interp->framePtr->tailcallCmd; interp->framePtr->tailcallCmd = NULL; tailcallObj = interp->framePtr->tailcallObj; interp->framePtr->tailcallObj = NULL; objc = tailcallObj->internalRep.listValue.len; objv = tailcallObj->internalRep.listValue.ele; goto tailcall; } interp->cmdPrivData = prevPrivData; interp->evalDepth--; out: JimDecrCmdRefCount(interp, cmdPtr); if (retcode == JIM_ERR) { JimSetErrorStack(interp, NULL); } if (interp->framePtr->tailcallObj) { JimDecrCmdRefCount(interp, interp->framePtr->tailcallCmd); Jim_DecrRefCount(interp, interp->framePtr->tailcallObj); interp->framePtr->tailcallCmd = NULL; interp->framePtr->tailcallObj = NULL; } return retcode; } int Jim_EvalObjVector(Jim_Interp *interp, int objc, Jim_Obj *const *objv) { int i, retcode; Jim_EvalFrame frame; for (i = 0; i < objc; i++) Jim_IncrRefCount(objv[i]); JimPushEvalFrame(interp, &frame, NULL); retcode = JimInvokeCommand(interp, objc, objv); JimPopEvalFrame(interp); for (i = 0; i < objc; i++) Jim_DecrRefCount(interp, objv[i]); return retcode; } int Jim_EvalObjPrefix(Jim_Interp *interp, Jim_Obj *prefix, int objc, Jim_Obj *const *objv) { int ret; Jim_Obj **nargv = Jim_Alloc((objc + 1) * sizeof(*nargv)); nargv[0] = prefix; memcpy(&nargv[1], &objv[0], sizeof(nargv[0]) * objc); ret = Jim_EvalObjVector(interp, objc + 1, nargv); Jim_Free(nargv); return ret; } static int JimSubstOneToken(Jim_Interp *interp, const ScriptToken *token, Jim_Obj **objPtrPtr) { Jim_Obj *objPtr; int ret = JIM_ERR; switch (token->type) { case JIM_TT_STR: case JIM_TT_ESC: objPtr = token->objPtr; break; case JIM_TT_VAR: objPtr = Jim_GetVariable(interp, token->objPtr, JIM_ERRMSG); break; case JIM_TT_DICTSUGAR: objPtr = JimExpandDictSugar(interp, token->objPtr); break; case JIM_TT_EXPRSUGAR: ret = Jim_EvalExpression(interp, token->objPtr); if (ret == JIM_OK) { objPtr = Jim_GetResult(interp); } else { objPtr = NULL; } break; case JIM_TT_CMD: ret = Jim_EvalObj(interp, token->objPtr); if (ret == JIM_OK || ret == JIM_RETURN) { objPtr = interp->result; } else { objPtr = NULL; } break; default: JimPanic((1, "default token type (%d) reached " "in Jim_SubstObj().", token->type)); objPtr = NULL; break; } if (objPtr) { *objPtrPtr = objPtr; return JIM_OK; } return ret; } static Jim_Obj *JimInterpolateTokens(Jim_Interp *interp, const ScriptToken * token, int tokens, int flags) { int totlen = 0, i; Jim_Obj **intv; Jim_Obj *sintv[JIM_EVAL_SINTV_LEN]; Jim_Obj *objPtr; char *s; int taint = 0; const char *error_action = NULL; if (tokens <= JIM_EVAL_SINTV_LEN) intv = sintv; else intv = Jim_Alloc(sizeof(Jim_Obj *) * tokens); for (i = 0; i < tokens; i++) { switch (JimSubstOneToken(interp, &token[i], &intv[i])) { case JIM_OK: case JIM_RETURN: break; case JIM_BREAK: if (flags & JIM_SUBST_FLAG) { tokens = i; continue; } error_action = "break"; case JIM_CONTINUE: if (flags & JIM_SUBST_FLAG) { intv[i] = NULL; continue; } if (!error_action) { error_action = "continue"; } default: while (i--) { Jim_DecrRefCount(interp, intv[i]); } if (intv != sintv) { Jim_Free(intv); } if (error_action) { Jim_SetResultFormatted(interp, "invoked \"%s\" outside of a loop", error_action); } return NULL; } taint |= intv[i]->taint; Jim_IncrRefCount(intv[i]); Jim_String(intv[i]); totlen += intv[i]->length; } if (tokens == 1 && intv[0] && intv == sintv) { intv[0]->refCount--; return intv[0]; } objPtr = Jim_NewStringObjNoAlloc(interp, NULL, 0); objPtr->taint = taint; if (tokens == 4 && token[0].type == JIM_TT_ESC && token[1].type == JIM_TT_ESC && token[2].type == JIM_TT_VAR) { objPtr->typePtr = &interpolatedObjType; objPtr->internalRep.dictSubstValue.varNameObjPtr = token[0].objPtr; objPtr->internalRep.dictSubstValue.indexObjPtr = intv[2]; Jim_IncrRefCount(intv[2]); } else if (tokens && intv[0] && intv[0]->typePtr == &sourceObjType) { int line; Jim_Obj *fileNameObj = Jim_GetSourceInfo(interp, intv[0], &line); Jim_SetSourceInfo(interp, objPtr, fileNameObj, line); } s = objPtr->bytes = Jim_Alloc(totlen + 1); objPtr->length = totlen; for (i = 0; i < tokens; i++) { if (intv[i]) { memcpy(s, intv[i]->bytes, intv[i]->length); s += intv[i]->length; Jim_DecrRefCount(interp, intv[i]); } } objPtr->bytes[totlen] = '\0'; if (intv != sintv) { Jim_Free(intv); } return objPtr; } #define JIM_LSUBST_LINE 0x0001 static int JimListSubstObj(Jim_Interp *interp, struct Jim_Obj *objPtr, unsigned flags) { int i; ScriptObj *script; ScriptToken *token; Jim_Obj *resultListObj; int retcode = JIM_OK; Jim_IncrRefCount(objPtr); script = JimGetScript(interp, objPtr); if (JimParseCheckMissing(interp, script->missing) == JIM_ERR) { JimSetErrorStack(interp, script); Jim_DecrRefCount(interp, objPtr); return JIM_ERR; } token = script->token; script->inUse++; resultListObj = Jim_NewListObj(interp, NULL, 0); for (i = 0; i < script->len && retcode == JIM_OK; ) { int argc; int j; Jim_Obj *lineListObj = resultListObj; argc = token[i].objPtr->internalRep.scriptLineValue.argc; script->linenr = token[i].objPtr->internalRep.scriptLineValue.line; i++; if (flags & JIM_LSUBST_LINE) { lineListObj = Jim_NewListObj(interp, NULL, 0); } for (j = 0; j < argc; j++) { long wordtokens = 1; int expand = 0; Jim_Obj *wordObjPtr = NULL; if (token[i].type == JIM_TT_WORD) { wordtokens = JimWideValue(token[i++].objPtr); if (wordtokens < 0) { expand = 1; wordtokens = -wordtokens; } } wordObjPtr = JimInterpolateTokens(interp, token + i, wordtokens, JIM_NONE); if (!wordObjPtr) { if (retcode == JIM_OK) { retcode = JIM_ERR; } break; } Jim_IncrRefCount(wordObjPtr); i += wordtokens; if (!expand) { Jim_ListAppendElement(interp, lineListObj, wordObjPtr); } else { int k; for (k = 0; k < Jim_ListLength(interp, wordObjPtr); k++) { Jim_ListAppendElement(interp, lineListObj, Jim_ListGetIndex(interp, wordObjPtr, k)); } } Jim_DecrRefCount(interp, wordObjPtr); } if (flags & JIM_LSUBST_LINE) { Jim_ListAppendElement(interp, resultListObj, lineListObj); } } Jim_FreeIntRep(interp, objPtr); objPtr->typePtr = &scriptObjType; Jim_SetIntRepPtr(objPtr, script); Jim_DecrRefCount(interp, objPtr); if (retcode == JIM_OK) { Jim_SetResult(interp, resultListObj); } else { Jim_FreeNewObj(interp, resultListObj); } return retcode; } static int JimEvalObjList(Jim_Interp *interp, Jim_Obj *listPtr) { int retcode = JIM_OK; Jim_EvalFrame frame; JimPanic((Jim_IsList(listPtr) == 0, "JimEvalObjList() invoked on non-list.")); JimPushEvalFrame(interp, &frame, NULL); if (listPtr->internalRep.listValue.len) { Jim_IncrRefCount(listPtr); retcode = JimInvokeCommand(interp, listPtr->internalRep.listValue.len, listPtr->internalRep.listValue.ele); Jim_DecrRefCount(interp, listPtr); } JimPopEvalFrame(interp); return retcode; } int Jim_EvalObjList(Jim_Interp *interp, Jim_Obj *listPtr) { SetListFromAny(interp, listPtr); return JimEvalObjList(interp, listPtr); } int Jim_EvalObj(Jim_Interp *interp, Jim_Obj *scriptObjPtr) { int i; ScriptObj *script; ScriptToken *token; int retcode = JIM_OK; Jim_Obj *sargv[JIM_EVAL_SARGV_LEN], **argv = NULL; Jim_EvalFrame frame; if (Jim_IsList(scriptObjPtr) && scriptObjPtr->bytes == NULL) { return JimEvalObjList(interp, scriptObjPtr); } Jim_IncrRefCount(scriptObjPtr); script = JimGetScript(interp, scriptObjPtr); if (JimParseCheckMissing(interp, script->missing) == JIM_ERR) { JimSetErrorStack(interp, script); Jim_DecrRefCount(interp, scriptObjPtr); return JIM_ERR; } Jim_SetEmptyResult(interp); token = script->token; #ifdef JIM_OPTIMIZATION if (script->len == 0) { Jim_DecrRefCount(interp, scriptObjPtr); return JIM_OK; } if (script->len == 3 && token[1].objPtr->typePtr == &commandObjType && (token[1].objPtr->internalRep.cmdValue.cmdPtr->flags & JIM_CMD_ISPROC) == 0 && token[1].objPtr->internalRep.cmdValue.cmdPtr->u.native.cmdProc == Jim_IncrCoreCommand && token[2].objPtr->typePtr == &variableObjType) { Jim_Obj *objPtr = Jim_GetVariable(interp, token[2].objPtr, JIM_NONE); if (objPtr && !Jim_IsShared(objPtr) && objPtr->typePtr == &intObjType) { JimWideValue(objPtr)++; Jim_InvalidateStringRep(objPtr); Jim_DecrRefCount(interp, scriptObjPtr); Jim_SetResult(interp, objPtr); return JIM_OK; } } #endif script->inUse++; JimPushEvalFrame(interp, &frame, scriptObjPtr); interp->hasErrorStackTrace = 0; argv = sargv; for (i = 0; i < script->len && retcode == JIM_OK; ) { int argc; int j; argc = token[i].objPtr->internalRep.scriptLineValue.argc; script->linenr = token[i].objPtr->internalRep.scriptLineValue.line; if (argc > JIM_EVAL_SARGV_LEN) argv = Jim_Alloc(sizeof(Jim_Obj *) * argc); i++; for (j = 0; j < argc; j++) { long wordtokens = 1; int expand = 0; Jim_Obj *wordObjPtr = NULL; if (token[i].type == JIM_TT_WORD) { wordtokens = JimWideValue(token[i++].objPtr); if (wordtokens < 0) { expand = 1; wordtokens = -wordtokens; } } if (wordtokens == 1) { switch (token[i].type) { case JIM_TT_ESC: case JIM_TT_STR: wordObjPtr = token[i].objPtr; break; case JIM_TT_VAR: wordObjPtr = Jim_GetVariable(interp, token[i].objPtr, JIM_ERRMSG); break; case JIM_TT_EXPRSUGAR: retcode = Jim_EvalExpression(interp, token[i].objPtr); if (retcode == JIM_OK) { wordObjPtr = Jim_GetResult(interp); } else { wordObjPtr = NULL; } break; case JIM_TT_DICTSUGAR: wordObjPtr = JimExpandDictSugar(interp, token[i].objPtr); break; case JIM_TT_CMD: retcode = Jim_EvalObj(interp, token[i].objPtr); if (retcode == JIM_OK) { wordObjPtr = Jim_GetResult(interp); } break; default: JimPanic((1, "default token type reached " "in Jim_EvalObj().")); } } else { wordObjPtr = JimInterpolateTokens(interp, token + i, wordtokens, JIM_NONE); } if (!wordObjPtr) { if (retcode == JIM_OK) { retcode = JIM_ERR; } break; } Jim_IncrRefCount(wordObjPtr); i += wordtokens; if (!expand) { argv[j] = wordObjPtr; } else { int len = Jim_ListLength(interp, wordObjPtr); int newargc = argc + len - 1; int k; if (len > 1) { if (argv == sargv) { if (newargc > JIM_EVAL_SARGV_LEN) { argv = Jim_Alloc(sizeof(*argv) * newargc); memcpy(argv, sargv, sizeof(*argv) * j); } } else { argv = Jim_Realloc(argv, sizeof(*argv) * newargc); } } for (k = 0; k < len; k++) { argv[j++] = wordObjPtr->internalRep.listValue.ele[k]; Jim_IncrRefCount(wordObjPtr->internalRep.listValue.ele[k]); } Jim_DecrRefCount(interp, wordObjPtr); j--; argc += len - 1; } } if (retcode == JIM_OK && argc) { retcode = JimInvokeCommand(interp, argc, argv); interp->taint = 0; if (Jim_CheckSignal(interp)) { retcode = JIM_SIGNAL; } } while (j-- > 0) { Jim_DecrRefCount(interp, argv[j]); } if (argv != sargv) { Jim_Free(argv); argv = sargv; } } if (retcode == JIM_ERR) { JimSetErrorStack(interp, NULL); } JimPopEvalFrame(interp); Jim_FreeIntRep(interp, scriptObjPtr); scriptObjPtr->typePtr = &scriptObjType; Jim_SetIntRepPtr(scriptObjPtr, script); Jim_DecrRefCount(interp, scriptObjPtr); return retcode; } static int JimSetProcArg(Jim_Interp *interp, Jim_Obj *argNameObj, Jim_Obj *argValObj) { int retcode; const char *varname = Jim_String(argNameObj); if (*varname == '&') { Jim_Obj *objPtr; Jim_CallFrame *savedCallFrame = interp->framePtr; interp->framePtr = interp->framePtr->parent; objPtr = Jim_GetVariable(interp, argValObj, JIM_ERRMSG); interp->framePtr = savedCallFrame; if (!objPtr) { return JIM_ERR; } objPtr = Jim_NewStringObj(interp, varname + 1, -1); Jim_IncrRefCount(objPtr); retcode = Jim_SetVariableLink(interp, objPtr, argValObj, interp->framePtr->parent); Jim_DecrRefCount(interp, objPtr); } else { retcode = Jim_SetVariable(interp, argNameObj, argValObj); } return retcode; } static Jim_Obj *JimCmdUsage(Jim_Interp *interp, Jim_Obj *cmdNameObj, Jim_Cmd *cmd) { Jim_Obj *usage = Jim_DuplicateObj(interp, cmdNameObj); if (cmd->flags & JIM_CMD_ISPROC) { int i; for (i = 0; i < cmd->u.proc.argListLen; i++) { Jim_AppendString(interp, usage, " ", 1); if (i == cmd->u.proc.argsPos) { if (cmd->u.proc.arglist[i].defaultObjPtr) { Jim_AppendString(interp, usage, "?", 1); Jim_AppendObj(interp, usage, cmd->u.proc.arglist[i].defaultObjPtr); Jim_AppendString(interp, usage, " ...?", -1); } else { Jim_AppendString(interp, usage, "?arg ...?", -1); } } else { if (cmd->u.proc.arglist[i].defaultObjPtr) { Jim_AppendString(interp, usage, "?", 1); Jim_AppendObj(interp, usage, cmd->u.proc.arglist[i].nameObjPtr); Jim_AppendString(interp, usage, "?", 1); } else { const char *arg = Jim_String(cmd->u.proc.arglist[i].nameObjPtr); if (*arg == '&') { arg++; } Jim_AppendString(interp, usage, arg, -1); } } } } else if (cmd->u.native.usage) { if (*cmd->u.native.usage) { Jim_AppendStrings(interp, usage, " ", cmd->u.native.usage, NULL); } } else { Jim_AppendString(interp, usage, " ...", -1); } return usage; } static void JimSetProcWrongArgs(Jim_Interp *interp, Jim_Obj *procNameObj, Jim_Cmd *cmd) { Jim_SetResultFormatted(interp, "wrong # args: should be \"%#s\"", JimCmdUsage(interp, procNameObj, cmd)); } #ifdef jim_ext_namespace int Jim_EvalNamespace(Jim_Interp *interp, Jim_Obj *scriptObj, Jim_Obj *nsObj) { Jim_CallFrame *callFramePtr; int retcode; callFramePtr = JimCreateCallFrame(interp, interp->framePtr, nsObj); callFramePtr->argv = interp->evalFrame->argv; callFramePtr->argc = interp->evalFrame->argc; callFramePtr->procArgsObjPtr = NULL; callFramePtr->procBodyObjPtr = scriptObj; callFramePtr->staticVars = NULL; Jim_IncrRefCount(scriptObj); interp->framePtr = callFramePtr; if (interp->framePtr->level == interp->maxCallFrameDepth) { Jim_SetResultString(interp, "Too many nested calls. Infinite recursion?", -1); retcode = JIM_ERR; } else { retcode = Jim_EvalObj(interp, scriptObj); } interp->framePtr = interp->framePtr->parent; JimFreeCallFrame(interp, callFramePtr, JIM_FCF_REUSE); return retcode; } #endif static int JimCallProcedure(Jim_Interp *interp, Jim_Cmd *cmd, int argc, Jim_Obj *const *argv) { Jim_CallFrame *callFramePtr; int i, d, retcode, optargs; if (argc - 1 < cmd->u.proc.reqArity || (cmd->u.proc.argsPos < 0 && argc - 1 > cmd->u.proc.reqArity + cmd->u.proc.optArity)) { JimSetProcWrongArgs(interp, argv[0], cmd); return JIM_ERR; } if (Jim_Length(cmd->u.proc.bodyObjPtr) == 0) { return JIM_OK; } if (interp->framePtr->level == interp->maxCallFrameDepth) { Jim_SetResultString(interp, "Too many nested calls. Infinite recursion?", -1); return JIM_ERR; } callFramePtr = JimCreateCallFrame(interp, interp->framePtr, cmd->u.proc.nsObj); callFramePtr->argv = argv; callFramePtr->argc = argc; callFramePtr->procArgsObjPtr = cmd->u.proc.argListObjPtr; callFramePtr->procBodyObjPtr = cmd->u.proc.bodyObjPtr; callFramePtr->staticVars = cmd->u.proc.staticVars; interp->procLevel++; Jim_IncrRefCount(cmd->u.proc.argListObjPtr); Jim_IncrRefCount(cmd->u.proc.bodyObjPtr); interp->framePtr = callFramePtr; optargs = (argc - 1 - cmd->u.proc.reqArity); i = 1; for (d = 0; d < cmd->u.proc.argListLen; d++) { Jim_Obj *nameObjPtr = cmd->u.proc.arglist[d].nameObjPtr; if (d == cmd->u.proc.argsPos) { Jim_Obj *listObjPtr; int argsLen = 0; if (cmd->u.proc.reqArity + cmd->u.proc.optArity < argc - 1) { argsLen = argc - 1 - (cmd->u.proc.reqArity + cmd->u.proc.optArity); } listObjPtr = Jim_NewListObj(interp, &argv[i], argsLen); if (cmd->u.proc.arglist[d].defaultObjPtr) { nameObjPtr =cmd->u.proc.arglist[d].defaultObjPtr; } retcode = Jim_SetVariable(interp, nameObjPtr, listObjPtr); if (retcode != JIM_OK) { goto badargset; } i += argsLen; continue; } if (cmd->u.proc.arglist[d].defaultObjPtr == NULL || optargs-- > 0) { retcode = JimSetProcArg(interp, nameObjPtr, argv[i++]); } else { retcode = Jim_SetVariable(interp, nameObjPtr, cmd->u.proc.arglist[d].defaultObjPtr); } if (retcode != JIM_OK) { goto badargset; } } if (interp->traceCmdObj == NULL || (retcode = JimTraceCallback(interp, "proc", argc, argv)) == JIM_OK) { retcode = Jim_EvalObj(interp, cmd->u.proc.bodyObjPtr); } badargset: retcode = JimInvokeDefer(interp, retcode); interp->framePtr = interp->framePtr->parent; JimFreeCallFrame(interp, callFramePtr, JIM_FCF_REUSE); if (retcode == JIM_RETURN) { if (--interp->returnLevel <= 0) { retcode = interp->returnCode; interp->returnCode = JIM_OK; interp->returnLevel = 0; } } interp->procLevel--; return retcode; } static int JimCallNative(Jim_Interp *interp, Jim_Cmd *cmd, int argc, Jim_Obj *const *argv) { int argsok = 1; int ret; if (argc - 1 < cmd->u.native.minargs) { argsok = 0; } else if (cmd->u.native.maxargs >= 0 && argc - 1 > cmd->u.native.maxargs) { argsok = 0; } else if (cmd->u.native.maxargs < -1 && (argc - 1) % -cmd->u.native.maxargs != 0) { argsok = 0; } if (argsok) { interp->cmdPrivData = cmd->u.native.privData; ret = cmd->u.native.cmdProc(interp, argc, argv); if (ret != JIM_USAGE) { return ret; } } //printf("Wrong args for %s, argc=%d, minargs=%d, maxargs=%d\n", Jim_String(argv[0]), argc, cmd->u.native.minargs, cmd->u.native.maxargs); Jim_SetResultFormatted(interp, "wrong # args: should be \"%#s\"", JimCmdUsage(interp, argv[0], cmd)); return JIM_ERR; } int Jim_EvalSource(Jim_Interp *interp, const char *filename, int lineno, const char *script) { int retval; Jim_Obj *scriptObjPtr; scriptObjPtr = Jim_NewStringObj(interp, script, -1); Jim_IncrRefCount(scriptObjPtr); if (filename) { Jim_SetSourceInfo(interp, scriptObjPtr, Jim_NewStringObj(interp, filename, -1), lineno); } retval = Jim_EvalObj(interp, scriptObjPtr); Jim_DecrRefCount(interp, scriptObjPtr); return retval; } int Jim_Eval(Jim_Interp *interp, const char *script) { return Jim_EvalObj(interp, Jim_NewStringObj(interp, script, -1)); } int Jim_EvalGlobal(Jim_Interp *interp, const char *script) { int retval; Jim_CallFrame *savedFramePtr = interp->framePtr; interp->framePtr = interp->topFramePtr; retval = Jim_Eval(interp, script); interp->framePtr = savedFramePtr; return retval; } int Jim_EvalFileGlobal(Jim_Interp *interp, const char *filename) { int retval; Jim_CallFrame *savedFramePtr = interp->framePtr; interp->framePtr = interp->topFramePtr; retval = Jim_EvalFile(interp, filename); interp->framePtr = savedFramePtr; return retval; } #include int Jim_EvalFile(Jim_Interp *interp, const char *filename) { FILE *fp; char *buf; Jim_Obj *scriptObjPtr; Jim_Obj *filenameObj, *oldFilenameObj; int retcode = JIM_ERR; int readlen; #define READ_BUF_SIZE 256 if ((fp = fopen(filename, "rt")) == NULL) { Jim_SetResultFormatted(interp, "couldn't read file \"%s\": %s", filename, strerror(errno)); return JIM_ERR; } scriptObjPtr = Jim_NewStringObj(interp, NULL, 0); buf = Jim_Alloc(READ_BUF_SIZE); while ((readlen = fread(buf, 1, READ_BUF_SIZE, fp)) > 0) { Jim_AppendString(interp, scriptObjPtr, buf, readlen); } Jim_Free(buf); if (ferror(fp)) { fclose(fp); Jim_SetResultFormatted(interp, "failed to load file \"%s\": %s", filename, strerror(errno)); Jim_FreeNewObj(interp, scriptObjPtr); return retcode; } fclose(fp); filenameObj = Jim_NewStringObj(interp, filename, -1); Jim_SetSourceInfo(interp, scriptObjPtr, filenameObj, 1); oldFilenameObj = JimPushInterpObj(interp->currentFilenameObj, filenameObj); retcode = Jim_EvalObj(interp, scriptObjPtr); JimPopInterpObj(interp, interp->currentFilenameObj, oldFilenameObj); if (retcode == JIM_RETURN) { if (--interp->returnLevel <= 0) { retcode = interp->returnCode; interp->returnCode = JIM_OK; interp->returnLevel = 0; } } return retcode; } static void JimParseSubst(struct JimParserCtx *pc, int flags) { pc->tstart = pc->p; pc->tline = pc->linenr; if (pc->len == 0) { pc->tend = pc->p; pc->tt = JIM_TT_EOL; pc->eof = 1; return; } if (*pc->p == '[' && !(flags & JIM_SUBST_NOCMD)) { JimParseCmd(pc); return; } if (*pc->p == '$' && !(flags & JIM_SUBST_NOVAR)) { if (JimParseVar(pc) == JIM_OK) { return; } pc->tstart = pc->p; pc->p++; pc->len--; } while (pc->len) { if (*pc->p == '$' && !(flags & JIM_SUBST_NOVAR)) { break; } if (*pc->p == '[' && !(flags & JIM_SUBST_NOCMD)) { break; } if (*pc->p == '\\' && pc->len > 1) { pc->p++; pc->len--; } pc->p++; pc->len--; } pc->tend = pc->p - 1; pc->tt = (flags & JIM_SUBST_NOESC) ? JIM_TT_STR : JIM_TT_ESC; } static int SetSubstFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr, int flags) { int scriptTextLen; const char *scriptText = Jim_GetString(objPtr, &scriptTextLen); struct JimParserCtx parser; struct ScriptObj *script = Jim_Alloc(sizeof(*script)); ParseTokenList tokenlist; int oldtaint; ScriptTokenListInit(&tokenlist); JimParserInit(&parser, scriptText, scriptTextLen, 1); while (1) { JimParseSubst(&parser, flags); if (parser.eof) { break; } ScriptAddToken(&tokenlist, parser.tstart, parser.tend - parser.tstart + 1, parser.tt, parser.tline); } oldtaint = interp->taint; interp->taint = objPtr->taint; script->inUse = 1; script->substFlags = flags; script->fileNameObj = interp->emptyObj; Jim_IncrRefCount(script->fileNameObj); SubstObjAddTokens(interp, script, &tokenlist); ScriptTokenListFree(&tokenlist); #ifdef DEBUG_SHOW_SUBST { int i; printf("==== Subst ====\n"); for (i = 0; i < script->len; i++) { printf("[%2d] %s '%s'\n", i, jim_tt_name(script->token[i].type), Jim_String(script->token[i].objPtr)); } } #endif Jim_FreeIntRep(interp, objPtr); Jim_SetIntRepPtr(objPtr, script); objPtr->typePtr = &scriptObjType; interp->taint = oldtaint; return JIM_OK; } static ScriptObj *Jim_GetSubst(Jim_Interp *interp, Jim_Obj *objPtr, int flags) { if (objPtr->typePtr != &scriptObjType || ((ScriptObj *)Jim_GetIntRepPtr(objPtr))->substFlags != flags) SetSubstFromAny(interp, objPtr, flags); return (ScriptObj *) Jim_GetIntRepPtr(objPtr); } int Jim_SubstObj(Jim_Interp *interp, Jim_Obj *substObjPtr, Jim_Obj **resObjPtrPtr, int flags) { ScriptObj *script; JimPanic((substObjPtr->refCount == 0, "Jim_SubstObj() called with zero refcount object")); script = Jim_GetSubst(interp, substObjPtr, flags); Jim_IncrRefCount(substObjPtr); script->inUse++; *resObjPtrPtr = JimInterpolateTokens(interp, script->token, script->len, flags); script->inUse--; Jim_DecrRefCount(interp, substObjPtr); if (*resObjPtrPtr == NULL) { return JIM_ERR; } return JIM_OK; } static Jim_Obj *JimJoinCmdArgs(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *objPtr; Jim_Obj *listObjPtr; listObjPtr = Jim_NewListObj(interp, argv, argc); Jim_IncrRefCount(listObjPtr); objPtr = Jim_ListJoin(interp, listObjPtr, " ", 1); Jim_DecrRefCount(interp, listObjPtr); Jim_IncrRefCount(objPtr); return objPtr; } void Jim_WrongNumArgs(Jim_Interp *interp, int argc, Jim_Obj *const *argv, const char *msg) { Jim_Obj *objPtr = JimJoinCmdArgs(interp, argc, argv); if (*msg) { Jim_SetResultFormatted(interp, "wrong # args: should be \"%#s %s\"", objPtr, msg); } else { Jim_SetResultFormatted(interp, "wrong # args: should be \"%#s\"", objPtr); } Jim_DecrRefCount(interp, objPtr); } int Jim_CalcTaint(int argc, Jim_Obj *const *argv) { int taint = 0; #ifdef JIM_TAINT int i; for (i = 0; i < argc; i++) { if (argv[i]) { taint |= argv[i]->taint; } } #endif return taint; } void Jim_SetTaintError(Jim_Interp *interp, int cmdargs, Jim_Obj *const *argv) { #ifdef JIM_TAINT Jim_Obj *objPtr = JimJoinCmdArgs(interp, cmdargs, argv); Jim_SetResultFormatted(interp, "%#s: tainted data", objPtr); Jim_DecrRefCount(interp, objPtr); Jim_SetGlobalVariableStr(interp, "errorCode", Jim_NewStringObj(interp, "TAINTED", -1)); #endif } typedef void JimHashtableIteratorCallbackType(Jim_Interp *interp, Jim_Obj *listObjPtr, Jim_Obj *keyObjPtr, void *value, Jim_Obj *patternObjPtr, int type); #define JimTrivialMatch(pattern) (strpbrk((pattern), "*[?\\") == NULL) static Jim_Obj *JimHashtablePatternMatch(Jim_Interp *interp, Jim_HashTable *ht, Jim_Obj *patternObjPtr, JimHashtableIteratorCallbackType *callback, int type) { Jim_HashEntry *he; Jim_Obj *listObjPtr = Jim_NewListObj(interp, NULL, 0); if (patternObjPtr && JimTrivialMatch(Jim_String(patternObjPtr))) { he = Jim_FindHashEntry(ht, patternObjPtr); if (he) { callback(interp, listObjPtr, Jim_GetHashEntryKey(he), Jim_GetHashEntryVal(he), patternObjPtr, type); } } else { Jim_HashTableIterator htiter; JimInitHashTableIterator(ht, &htiter); while ((he = Jim_NextHashEntry(&htiter)) != NULL) { callback(interp, listObjPtr, Jim_GetHashEntryKey(he), Jim_GetHashEntryVal(he), patternObjPtr, type); } } return listObjPtr; } #define JIM_CMDLIST_COMMANDS 1 #define JIM_CMDLIST_PROCS 2 #define JIM_CMDLIST_ALIASES 4 #define JIM_CMDLIST_CHANNELS 8 #define JIM_CMDLIST_ALL 0x1000 static void JimCommandMatch(Jim_Interp *interp, Jim_Obj *listObjPtr, Jim_Obj *keyObj, void *value, Jim_Obj *patternObj, int type) { Jim_Cmd *cmdPtr = (Jim_Cmd *)value; int match = 1; if ((type & JIM_CMDLIST_PROCS) && !(cmdPtr->flags & JIM_CMD_ISPROC)) { return; } if ((type & JIM_CMDLIST_CHANNELS) && !(cmdPtr->flags & JIM_CMD_ISCHANNEL)) { return; } if ((type & JIM_CMDLIST_ALIASES) && !(cmdPtr->flags & JIM_CMD_ISALIAS)) { return; } if (!(type & JIM_CMDLIST_ALL) && strchr(Jim_String(keyObj), ' ')) { return; } Jim_IncrRefCount(keyObj); if (patternObj) { int plen, slen; const char *pattern = Jim_GetStringNoQualifier(patternObj, &plen); const char *str = Jim_GetStringNoQualifier(keyObj, &slen); #ifdef JIM_NO_INTROSPECTION match = (JimStringCompareUtf8(pattern, plen, str, slen, 0) == 0); #else match = JimGlobMatch(pattern, plen, str, slen, 0); #endif } if (match) { Jim_ListAppendElement(interp, listObjPtr, keyObj); } Jim_DecrRefCount(interp, keyObj); } static Jim_Obj *JimCommandsList(Jim_Interp *interp, Jim_Obj *patternObjPtr, int type) { return JimHashtablePatternMatch(interp, &interp->commands, patternObjPtr, JimCommandMatch, type); } #define JIM_VARLIST_GLOBALS 1 #define JIM_VARLIST_LOCALS 2 #define JIM_VARLIST_VARS 4 #define JIM_VARLIST_VALUES 0x1000 static void JimVariablesMatch(Jim_Interp *interp, Jim_Obj *listObjPtr, Jim_Obj *keyObj, void *value, Jim_Obj *patternObj, int type) { Jim_VarVal *vv = (Jim_VarVal *)value; if (!(type & JIM_VARLIST_LOCALS) || vv->linkFramePtr == NULL) { if (patternObj == NULL || Jim_StringMatchObj(interp, patternObj, keyObj, 0)) { Jim_ListAppendElement(interp, listObjPtr, keyObj); if (type & JIM_VARLIST_VALUES) { Jim_ListAppendElement(interp, listObjPtr, vv->objPtr); } } } } static Jim_Obj *JimVariablesList(Jim_Interp *interp, Jim_Obj *patternObjPtr, int mode) { if ((mode & JIM_VARLIST_LOCALS) && interp->framePtr == interp->topFramePtr) { return interp->emptyObj; } else { Jim_CallFrame *framePtr = (mode & JIM_VARLIST_GLOBALS) ? interp->topFramePtr : interp->framePtr; return JimHashtablePatternMatch(interp, &framePtr->vars, patternObjPtr, JimVariablesMatch, mode); } } static int JimInfoLevel(Jim_Interp *interp, Jim_Obj *levelObjPtr, Jim_Obj **objPtrPtr) { long level; if (Jim_GetLong(interp, levelObjPtr, &level) == JIM_OK) { Jim_CallFrame *targetCallFrame = JimGetCallFrameByInteger(interp, level); if (targetCallFrame && targetCallFrame != interp->topFramePtr) { #ifdef JIM_NO_INTROSPECTION *objPtrPtr = Jim_NewListObj(interp, targetCallFrame->argv, 1); #else *objPtrPtr = Jim_NewListObj(interp, targetCallFrame->argv, targetCallFrame->argc); #endif return JIM_OK; } } Jim_SetResultFormatted(interp, "bad level \"%#s\"", levelObjPtr); return JIM_ERR; } static int JimInfoFrame(Jim_Interp *interp, Jim_Obj *levelObjPtr, Jim_Obj **objPtrPtr) { long level; if (Jim_GetLong(interp, levelObjPtr, &level) == JIM_OK) { Jim_EvalFrame *frame = JimGetEvalFrameByProcLevel(interp, level); if (frame) { Jim_Obj *listObj = Jim_NewListObj(interp, NULL, 0); Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, "type", -1)); Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, "source", -1)); if (frame->scriptObj) { ScriptObj *script = JimGetScript(interp, frame->scriptObj); Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, "line", -1)); Jim_ListAppendElement(interp, listObj, Jim_NewIntObj(interp, script->linenr)); Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, "file", -1)); Jim_ListAppendElement(interp, listObj, script->fileNameObj); } #ifndef JIM_NO_INTROSPECTION { Jim_Obj *cmdObj = Jim_NewListObj(interp, frame->argv, frame->argc); Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, "cmd", -1)); Jim_ListAppendElement(interp, listObj, cmdObj); } #endif { Jim_Obj *procNameObj = JimProcForEvalFrame(interp, frame); if (procNameObj) { Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, "proc", -1)); Jim_ListAppendElement(interp, listObj, procNameObj); } } Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, "level", -1)); Jim_ListAppendElement(interp, listObj, Jim_NewIntObj(interp, interp->framePtr->level - frame->framePtr->level)); *objPtrPtr = listObj; return JIM_OK; } } Jim_SetResultFormatted(interp, "bad level \"%#s\"", levelObjPtr); return JIM_ERR; } static int Jim_PutsCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { if (argc == 3) { if (!Jim_CompareStringImmediate(interp, argv[1], "-nonewline")) { Jim_SetResultString(interp, "The second argument must " "be -nonewline", -1); return JIM_ERR; } else { fputs(Jim_String(argv[2]), stdout); } } else { puts(Jim_String(argv[1])); } return JIM_OK; } static int JimAddMulHelper(Jim_Interp *interp, int argc, Jim_Obj *const *argv, int op) { jim_wide wideValue, res; double doubleValue, doubleRes; int i; res = (op == JIM_EXPROP_ADD) ? 0 : 1; for (i = 1; i < argc; i++) { if (Jim_GetWide(interp, argv[i], &wideValue) != JIM_OK) goto trydouble; if (op == JIM_EXPROP_ADD) res += wideValue; else res *= wideValue; } Jim_SetResultInt(interp, res); return JIM_OK; trydouble: doubleRes = (double)res; for (; i < argc; i++) { if (Jim_GetDouble(interp, argv[i], &doubleValue) != JIM_OK) return JIM_ERR; if (op == JIM_EXPROP_ADD) doubleRes += doubleValue; else doubleRes *= doubleValue; } Jim_SetResult(interp, Jim_NewDoubleObj(interp, doubleRes)); return JIM_OK; } static int JimSubDivHelper(Jim_Interp *interp, int argc, Jim_Obj *const *argv, int op) { jim_wide wideValue, res = 0; double doubleValue, doubleRes = 0; int i = 2; if (argc == 2) { if (Jim_GetWide(interp, argv[1], &wideValue) != JIM_OK) { if (Jim_GetDouble(interp, argv[1], &doubleValue) != JIM_OK) { return JIM_ERR; } else { if (op == JIM_EXPROP_SUB) doubleRes = -doubleValue; else doubleRes = 1.0 / doubleValue; Jim_SetResult(interp, Jim_NewDoubleObj(interp, doubleRes)); return JIM_OK; } } if (op == JIM_EXPROP_SUB) { res = -wideValue; Jim_SetResultInt(interp, res); } else { doubleRes = 1.0 / wideValue; Jim_SetResult(interp, Jim_NewDoubleObj(interp, doubleRes)); } return JIM_OK; } else { if (Jim_GetWide(interp, argv[1], &res) != JIM_OK) { if (Jim_GetDouble(interp, argv[1], &doubleRes) != JIM_OK) { return JIM_ERR; } else { goto trydouble; } } } for (i = 2; i < argc; i++) { if (Jim_GetWide(interp, argv[i], &wideValue) != JIM_OK) { doubleRes = (double)res; goto trydouble; } if (op == JIM_EXPROP_SUB) res -= wideValue; else { if (wideValue == 0) { Jim_SetResultString(interp, "Division by zero", -1); return JIM_ERR; } res /= wideValue; } } Jim_SetResultInt(interp, res); return JIM_OK; trydouble: for (; i < argc; i++) { if (Jim_GetDouble(interp, argv[i], &doubleValue) != JIM_OK) return JIM_ERR; if (op == JIM_EXPROP_SUB) doubleRes -= doubleValue; else doubleRes /= doubleValue; } Jim_SetResult(interp, Jim_NewDoubleObj(interp, doubleRes)); return JIM_OK; } static int Jim_AddCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return JimAddMulHelper(interp, argc, argv, JIM_EXPROP_ADD); } static int Jim_MulCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return JimAddMulHelper(interp, argc, argv, JIM_EXPROP_MUL); } static int Jim_SubCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return JimSubDivHelper(interp, argc, argv, JIM_EXPROP_SUB); } static int Jim_DivCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return JimSubDivHelper(interp, argc, argv, JIM_EXPROP_DIV); } static int Jim_SetCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { if (argc == 2) { Jim_Obj *objPtr; objPtr = Jim_GetVariable(interp, argv[1], JIM_ERRMSG); if (!objPtr) return JIM_ERR; Jim_SetResult(interp, objPtr); return JIM_OK; } if (Jim_SetVariable(interp, argv[1], argv[2]) != JIM_OK) return JIM_ERR; Jim_SetResult(interp, argv[2]); return JIM_OK; } static int Jim_UnsetCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int i = 1; int complain = 1; while (i < argc) { if (Jim_CompareStringImmediate(interp, argv[i], "--")) { i++; break; } if (Jim_CompareStringImmediate(interp, argv[i], "-nocomplain")) { complain = 0; i++; continue; } break; } while (i < argc) { if (Jim_UnsetVariable(interp, argv[i], complain ? JIM_ERRMSG : JIM_NONE) != JIM_OK && complain) { return JIM_ERR; } i++; } Jim_SetEmptyResult(interp); return JIM_OK; } static int JimCheckLoopRetcode(Jim_Interp *interp, int retval) { if (retval == JIM_BREAK || retval == JIM_CONTINUE) { if (--interp->break_level > 0) { return 1; } } return 0; } static int Jim_WhileCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { while (1) { int boolean = 0, retval; if ((retval = Jim_GetBoolFromExpr(interp, argv[1], &boolean)) != JIM_OK) return retval; if (!boolean) break; if ((retval = Jim_EvalObj(interp, argv[2])) != JIM_OK) { if (JimCheckLoopRetcode(interp, retval)) { return retval; } switch (retval) { case JIM_BREAK: goto out; case JIM_CONTINUE: continue; default: return retval; } } } out: Jim_SetEmptyResult(interp); return JIM_OK; } static int Jim_ForCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int retval; int boolean = 1; int immediate = 0; Jim_Obj *varNamePtr = NULL; Jim_Obj *stopVarNamePtr = NULL; if ((retval = Jim_EvalObj(interp, argv[1])) != JIM_OK) { return retval; } retval = Jim_GetBoolFromExpr(interp, argv[2], &boolean); #ifdef JIM_OPTIMIZATION if (retval == JIM_OK && boolean) { ScriptObj *incrScript; struct ExprTree *expr; jim_wide stop, currentVal; Jim_Obj *objPtr; int cmpOffset; expr = JimGetExpression(interp, argv[2]); incrScript = JimGetScript(interp, argv[3]); if (incrScript == NULL || incrScript->len != 3 || !expr || expr->len != 3) { goto evalstart; } if (incrScript->token[1].type != JIM_TT_ESC) { goto evalstart; } if (expr->expr->type == JIM_EXPROP_LT) { cmpOffset = 0; } else if (expr->expr->type == JIM_EXPROP_LTE) { cmpOffset = 1; } else { goto evalstart; } if (expr->expr->left->type != JIM_TT_VAR) { goto evalstart; } if (expr->expr->right->type != JIM_TT_VAR && expr->expr->right->type != JIM_TT_EXPR_INT) { goto evalstart; } if (!Jim_CompareStringImmediate(interp, incrScript->token[1].objPtr, "incr")) { goto evalstart; } if (!Jim_StringEqObj(incrScript->token[2].objPtr, expr->expr->left->objPtr)) { goto evalstart; } if (expr->expr->right->type == JIM_TT_EXPR_INT) { if (Jim_GetWideExpr(interp, expr->expr->right->objPtr, &stop) == JIM_ERR) { goto evalstart; } } else { stopVarNamePtr = expr->expr->right->objPtr; Jim_IncrRefCount(stopVarNamePtr); stop = 0; } varNamePtr = expr->expr->left->objPtr; Jim_IncrRefCount(varNamePtr); objPtr = Jim_GetVariable(interp, varNamePtr, JIM_NONE); if (objPtr == NULL || Jim_GetWide(interp, objPtr, ¤tVal) != JIM_OK) { goto testcond; } while (retval == JIM_OK) { if (stopVarNamePtr) { objPtr = Jim_GetVariable(interp, stopVarNamePtr, JIM_NONE); if (objPtr == NULL || Jim_GetWide(interp, objPtr, &stop) != JIM_OK) { goto testcond; } } if (currentVal >= stop + cmpOffset) { break; } retval = Jim_EvalObj(interp, argv[4]); if (JimCheckLoopRetcode(interp, retval)) { immediate++; goto out; } if (retval == JIM_OK || retval == JIM_CONTINUE) { retval = JIM_OK; objPtr = Jim_GetVariable(interp, varNamePtr, JIM_ERRMSG); if (objPtr == NULL) { retval = JIM_ERR; goto out; } if (!Jim_IsShared(objPtr) && objPtr->typePtr == &intObjType) { currentVal = ++JimWideValue(objPtr); Jim_InvalidateStringRep(objPtr); } else { if (Jim_GetWide(interp, objPtr, ¤tVal) != JIM_OK || Jim_SetVariable(interp, varNamePtr, Jim_NewIntObj(interp, ++currentVal)) != JIM_OK) { goto evalnext; } } } } goto out; } evalstart: #endif while (boolean && (retval == JIM_OK || retval == JIM_CONTINUE)) { retval = Jim_EvalObj(interp, argv[4]); if (JimCheckLoopRetcode(interp, retval)) { immediate++; break; } if (retval == JIM_OK || retval == JIM_CONTINUE) { JIM_IF_OPTIM(evalnext:) retval = Jim_EvalObj(interp, argv[3]); if (retval == JIM_OK || retval == JIM_CONTINUE) { JIM_IF_OPTIM(testcond:) retval = Jim_GetBoolFromExpr(interp, argv[2], &boolean); } } } JIM_IF_OPTIM(out:) if (stopVarNamePtr) { Jim_DecrRefCount(interp, stopVarNamePtr); } if (varNamePtr) { Jim_DecrRefCount(interp, varNamePtr); } if (!immediate) { if (retval == JIM_CONTINUE || retval == JIM_BREAK || retval == JIM_OK) { Jim_SetEmptyResult(interp); return JIM_OK; } } return retval; } static int Jim_LoopCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int retval; jim_wide i; jim_wide limit = 0; jim_wide incr = 1; Jim_Obj *bodyObjPtr; retval = Jim_GetWideExpr(interp, argv[2], &i); if (argc > 4 && retval == JIM_OK) { retval = Jim_GetWideExpr(interp, argv[3], &limit); } if (argc > 5 && retval == JIM_OK) { Jim_GetWideExpr(interp, argv[4], &incr); } if (retval != JIM_OK) { return retval; } if (argc == 4) { limit = i; i = 0; } bodyObjPtr = argv[argc - 1]; retval = Jim_SetVariable(interp, argv[1], Jim_NewIntObj(interp, i)); while (((i < limit && incr > 0) || (i > limit && incr < 0)) && retval == JIM_OK) { retval = Jim_EvalObj(interp, bodyObjPtr); if (JimCheckLoopRetcode(interp, retval)) { return retval; } if (retval == JIM_OK || retval == JIM_CONTINUE) { Jim_Obj *objPtr = Jim_GetVariable(interp, argv[1], JIM_ERRMSG); retval = JIM_OK; i += incr; if (objPtr && !Jim_IsShared(objPtr) && objPtr->typePtr == &intObjType) { if (argv[1]->typePtr != &variableObjType) { if (Jim_SetVariable(interp, argv[1], objPtr) != JIM_OK) { return JIM_ERR; } } JimWideValue(objPtr) = i; Jim_InvalidateStringRep(objPtr); if (argv[1]->typePtr != &variableObjType) { if (Jim_SetVariable(interp, argv[1], objPtr) != JIM_OK) { retval = JIM_ERR; break; } } } else { objPtr = Jim_NewIntObj(interp, i); retval = Jim_SetVariable(interp, argv[1], objPtr); } } } if (retval == JIM_OK || retval == JIM_CONTINUE || retval == JIM_BREAK) { Jim_SetEmptyResult(interp); return JIM_OK; } return retval; } typedef struct { Jim_Obj *objPtr; int idx; } Jim_ListIter; static void JimListIterInit(Jim_ListIter *iter, Jim_Obj *objPtr) { iter->objPtr = objPtr; iter->idx = 0; } static Jim_Obj *JimListIterNext(Jim_Interp *interp, Jim_ListIter *iter) { if (iter->idx >= Jim_ListLength(interp, iter->objPtr)) { return NULL; } return iter->objPtr->internalRep.listValue.ele[iter->idx++]; } static int JimListIterDone(Jim_Interp *interp, Jim_ListIter *iter) { return iter->idx >= Jim_ListLength(interp, iter->objPtr); } static int JimForeachMapHelper(Jim_Interp *interp, int argc, Jim_Obj *const *argv, int doMap) { int result = JIM_OK; int i, numargs; Jim_ListIter twoiters[2]; Jim_ListIter *iters; Jim_Obj *script; Jim_Obj *resultObj; if (argc % 2 != 0) { return JIM_USAGE; } script = argv[argc - 1]; numargs = (argc - 1 - 1); if (numargs == 2) { iters = twoiters; } else { iters = Jim_Alloc(numargs * sizeof(*iters)); } for (i = 0; i < numargs; i++) { JimListIterInit(&iters[i], argv[i + 1]); if (i % 2 == 0 && JimListIterDone(interp, &iters[i])) { result = JIM_ERR; } } if (result != JIM_OK) { Jim_SetResultString(interp, "foreach varlist is empty", -1); goto empty_varlist; } if (doMap) { resultObj = Jim_NewListObj(interp, NULL, 0); } else { resultObj = interp->emptyObj; } Jim_IncrRefCount(resultObj); while (1) { for (i = 0; i < numargs; i += 2) { if (!JimListIterDone(interp, &iters[i + 1])) { break; } } if (i == numargs) { break; } for (i = 0; i < numargs; i += 2) { Jim_Obj *varName; JimListIterInit(&iters[i], argv[i + 1]); while ((varName = JimListIterNext(interp, &iters[i])) != NULL) { Jim_Obj *valObj = JimListIterNext(interp, &iters[i + 1]); if (!valObj) { valObj = interp->emptyObj; } // XXX //Jim_IncrRefCount(valObj); result = Jim_SetVariable(interp, varName, valObj); //Jim_DecrRefCount(interp, valObj); if (result != JIM_OK) { goto err; } } } result = Jim_EvalObj(interp, script); if (JimCheckLoopRetcode(interp, result)) { goto err; } switch (result) { case JIM_OK: if (doMap) { Jim_ListAppendElement(interp, resultObj, interp->result); } break; case JIM_CONTINUE: break; case JIM_BREAK: goto out; default: goto err; } } out: result = JIM_OK; Jim_SetResult(interp, resultObj); err: Jim_DecrRefCount(interp, resultObj); empty_varlist: if (numargs > 2) { Jim_Free(iters); } return result; } static int Jim_ForeachCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return JimForeachMapHelper(interp, argc, argv, 0); } static int Jim_LmapCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return JimForeachMapHelper(interp, argc, argv, 1); } static int Jim_LassignCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int result = JIM_ERR; int i; Jim_ListIter iter; Jim_Obj *resultObj; JimListIterInit(&iter, argv[1]); for (i = 2; i < argc; i++) { Jim_Obj *valObj = JimListIterNext(interp, &iter); result = Jim_SetVariable(interp, argv[i], valObj ? valObj : interp->emptyObj); if (result != JIM_OK) { return result; } } resultObj = Jim_NewListObj(interp, NULL, 0); while (!JimListIterDone(interp, &iter)) { Jim_ListAppendElement(interp, resultObj, JimListIterNext(interp, &iter)); } Jim_SetResult(interp, resultObj); return JIM_OK; } static int Jim_IfCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int boolean, retval, current = 1, falsebody = 0; while (1) { if (current >= argc) { return JIM_USAGE; } if ((retval = Jim_GetBoolFromExpr(interp, argv[current++], &boolean)) != JIM_OK) return retval; if (current >= argc) { return JIM_USAGE; } if (Jim_CompareStringImmediate(interp, argv[current], "then")) current++; if (current >= argc) { return JIM_USAGE; } if (boolean) return Jim_EvalObj(interp, argv[current]); if (++current >= argc) { Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); return JIM_OK; } falsebody = current++; if (Jim_CompareStringImmediate(interp, argv[falsebody], "else")) { if (current != argc - 1) { return JIM_USAGE; } return Jim_EvalObj(interp, argv[current]); } else if (Jim_CompareStringImmediate(interp, argv[falsebody], "elseif")) continue; else if (falsebody != argc - 1) { return JIM_USAGE; } return Jim_EvalObj(interp, argv[falsebody]); } return JIM_OK; } static int JimCommandMatchObj(Jim_Interp *interp, Jim_Obj *commandObj, Jim_Obj *patternObj, Jim_Obj *stringObj, int flags) { Jim_Obj *parms[5]; int argc = 0; long eq; int rc; parms[argc++] = commandObj; if (flags & JIM_NOCASE) { parms[argc++] = Jim_NewStringObj(interp, "-nocase", -1); } if (flags & JIM_OPT_END) { parms[argc++] = Jim_NewStringObj(interp, "--", -1); } parms[argc++] = patternObj; parms[argc++] = stringObj; rc = Jim_EvalObjVector(interp, argc, parms); if (rc != JIM_OK || Jim_GetLong(interp, Jim_GetResult(interp), &eq) != JIM_OK) { eq = -rc; } return eq; } static int Jim_SwitchCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { enum { SWITCH_EXACT, SWITCH_GLOB, SWITCH_RE, SWITCH_CMD }; int matchOpt = SWITCH_EXACT, opt = 1, patCount, i; int match_flags = 0; Jim_Obj *command = NULL, *scriptObj = NULL, *strObj; Jim_Obj **caseList; for (opt = 1; opt < argc; ++opt) { const char *option = Jim_String(argv[opt]); if (*option != '-') break; else if (strncmp(option, "--", 2) == 0) { ++opt; break; } else if (strncmp(option, "-exact", 2) == 0) matchOpt = SWITCH_EXACT; else if (strncmp(option, "-glob", 2) == 0) matchOpt = SWITCH_GLOB; else if (strncmp(option, "-regexp", 2) == 0) { matchOpt = SWITCH_RE; match_flags |= JIM_OPT_END; } else if (strncmp(option, "-command", 2) == 0) { matchOpt = SWITCH_CMD; if ((argc - opt) < 2) return JIM_USAGE; command = argv[++opt]; } else { Jim_SetResultFormatted(interp, "bad option \"%#s\": must be -exact, -glob, -regexp, -command procname or --", argv[opt]); return JIM_ERR; } if ((argc - opt) < 2) return JIM_USAGE; } strObj = argv[opt++]; patCount = argc - opt; if (patCount == 1) { JimListGetElements(interp, argv[opt], &patCount, &caseList); } else caseList = (Jim_Obj **)&argv[opt]; if (patCount == 0 || patCount % 2 != 0) return JIM_USAGE; for (i = 0; scriptObj == NULL && i < patCount; i += 2) { Jim_Obj *patObj = caseList[i]; if (!Jim_CompareStringImmediate(interp, patObj, "default") || i < (patCount - 2)) { switch (matchOpt) { case SWITCH_EXACT: if (Jim_StringEqObj(strObj, patObj)) scriptObj = caseList[i + 1]; break; case SWITCH_GLOB: if (Jim_StringMatchObj(interp, patObj, strObj, 0)) scriptObj = caseList[i + 1]; break; case SWITCH_RE: command = Jim_NewStringObj(interp, "regexp", -1); case SWITCH_CMD:{ int rc = JimCommandMatchObj(interp, command, patObj, strObj, match_flags); if (argc - opt == 1) { JimListGetElements(interp, argv[opt], &patCount, &caseList); } if (rc < 0) { return -rc; } if (rc) scriptObj = caseList[i + 1]; break; } } } else { scriptObj = caseList[i + 1]; } } for (; i < patCount && Jim_CompareStringImmediate(interp, scriptObj, "-"); i += 2) scriptObj = caseList[i + 1]; if (scriptObj && Jim_CompareStringImmediate(interp, scriptObj, "-")) { Jim_SetResultFormatted(interp, "no body specified for pattern \"%#s\"", caseList[i - 2]); return JIM_ERR; } Jim_SetEmptyResult(interp); if (scriptObj) { return Jim_EvalObj(interp, scriptObj); } return JIM_OK; } static int Jim_ListCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *listObjPtr; listObjPtr = Jim_NewListObj(interp, argv + 1, argc - 1); Jim_SetResult(interp, listObjPtr); return JIM_OK; } static int Jim_LindexCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *objPtr; int ret; ret = Jim_ListIndices(interp, argv[1], argv + 2, argc - 2, &objPtr, JIM_NONE); if (ret < 0) { ret = JIM_OK; Jim_SetEmptyResult(interp); } else if (ret == JIM_OK) { Jim_SetResult(interp, objPtr); } return ret; } static int Jim_LlengthCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_SetResultInt(interp, Jim_ListLength(interp, argv[1])); return JIM_OK; } static int Jim_LsearchCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { static const char * const options[] = { "-bool", "-not", "-nocase", "-exact", "-glob", "-regexp", "-all", "-inline", "-command", "-stride", "-index", NULL }; enum { OPT_BOOL, OPT_NOT, OPT_NOCASE, OPT_EXACT, OPT_GLOB, OPT_REGEXP, OPT_ALL, OPT_INLINE, OPT_COMMAND, OPT_STRIDE, OPT_INDEX }; int i; int opt_bool = 0; int opt_not = 0; int opt_all = 0; int opt_inline = 0; int opt_match = OPT_EXACT; int listlen; int rc = JIM_OK; Jim_Obj *listObjPtr = NULL; Jim_Obj *commandObj = NULL; Jim_Obj *indexObj = NULL; int match_flags = 0; long stride = 1; for (i = 1; i < argc - 2; i++) { int option; if (Jim_GetEnum(interp, argv[i], options, &option, NULL, JIM_ERRMSG) != JIM_OK) { return JIM_ERR; } switch (option) { case OPT_BOOL: opt_bool = 1; opt_inline = 0; break; case OPT_NOT: opt_not = 1; break; case OPT_NOCASE: match_flags |= JIM_NOCASE; break; case OPT_INLINE: opt_inline = 1; opt_bool = 0; break; case OPT_ALL: opt_all = 1; break; case OPT_REGEXP: opt_match = option; match_flags |= JIM_OPT_END; break; case OPT_COMMAND: if (i >= argc - 2) { return JIM_USAGE; } commandObj = argv[++i]; case OPT_EXACT: case OPT_GLOB: opt_match = option; break; case OPT_INDEX: if (i >= argc - 2) { return JIM_USAGE; } indexObj = argv[++i]; break; case OPT_STRIDE: if (i >= argc - 2) { return JIM_USAGE; } if (Jim_GetLong(interp, argv[++i], &stride) != JIM_OK) { return JIM_ERR; } if (stride < 1) { Jim_SetResultString(interp, "stride length must be at least 1", -1); return JIM_ERR; } break; } } argc -= i; if (argc < 2) { return JIM_USAGE; } argv += i; listlen = Jim_ListLength(interp, argv[0]); if (listlen % stride) { Jim_SetResultString(interp, "list size must be a multiple of the stride length", -1); return JIM_ERR; } if (opt_all) { listObjPtr = Jim_NewListObj(interp, NULL, 0); } if (opt_match == OPT_REGEXP) { commandObj = Jim_NewStringObj(interp, "regexp", -1); } if (commandObj) { Jim_IncrRefCount(commandObj); } for (i = 0; i < listlen; i += stride) { int eq = 0; Jim_Obj *searchListObj; Jim_Obj *objPtr; int offset; if (indexObj) { int indexlen = Jim_ListLength(interp, indexObj); if (stride == 1) { searchListObj = Jim_ListGetIndex(interp, argv[0], i); } else { searchListObj = Jim_NewListObj(interp, argv[0]->internalRep.listValue.ele + i, stride); } Jim_IncrRefCount(searchListObj); rc = Jim_ListIndices(interp, searchListObj, indexObj->internalRep.listValue.ele, indexlen, &objPtr, JIM_ERRMSG); if (rc != JIM_OK) { Jim_DecrRefCount(interp, searchListObj); rc = JIM_ERR; goto done; } offset = 0; } else { searchListObj = argv[0]; offset = i; objPtr = Jim_ListGetIndex(interp, searchListObj, i); Jim_IncrRefCount(searchListObj); } switch (opt_match) { case OPT_EXACT: eq = Jim_StringCompareObj(interp, argv[1], objPtr, match_flags) == 0; break; case OPT_GLOB: eq = Jim_StringMatchObj(interp, argv[1], objPtr, match_flags); break; case OPT_REGEXP: case OPT_COMMAND: eq = JimCommandMatchObj(interp, commandObj, argv[1], objPtr, match_flags); if (eq < 0) { Jim_DecrRefCount(interp, searchListObj); rc = JIM_ERR; goto done; } break; } if ((!opt_bool && eq == !opt_not) || (opt_bool && (eq || opt_all))) { Jim_Obj *resultObj; if (opt_bool) { resultObj = Jim_NewIntObj(interp, eq ^ opt_not); } else if (!opt_inline) { resultObj = Jim_NewIntObj(interp, i); } else if (stride == 1) { resultObj = objPtr; } else if (opt_all) { ListInsertElements(listObjPtr, -1, stride, searchListObj->internalRep.listValue.ele + offset); resultObj = NULL; } else { resultObj = Jim_NewListObj(interp, searchListObj->internalRep.listValue.ele + offset, stride); } if (opt_all) { if (stride == 1) { Jim_ListAppendElement(interp, listObjPtr, resultObj); } } else { Jim_SetResult(interp, resultObj); Jim_DecrRefCount(interp, searchListObj); goto done; } } Jim_DecrRefCount(interp, searchListObj); } if (opt_all) { Jim_SetResult(interp, listObjPtr); listObjPtr = NULL; } else { if (opt_bool) { Jim_SetResultBool(interp, opt_not); } else if (!opt_inline) { Jim_SetResultInt(interp, -1); } } done: if (listObjPtr) { Jim_FreeNewObj(interp, listObjPtr); } if (commandObj) { Jim_DecrRefCount(interp, commandObj); } return rc; } static int Jim_LappendCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *listObjPtr; int i; listObjPtr = Jim_GetVariable(interp, argv[1], JIM_UNSHARED); if (!listObjPtr) { listObjPtr = Jim_NewListObj(interp, NULL, 0); } else if (Jim_IsShared(listObjPtr)) { listObjPtr = Jim_DuplicateObj(interp, listObjPtr); } for (i = 2; i < argc; i++) Jim_ListAppendElement(interp, listObjPtr, argv[i]); if (Jim_SetVariable(interp, argv[1], listObjPtr) != JIM_OK) { return JIM_ERR; } Jim_SetResult(interp, listObjPtr); return JIM_OK; } static int Jim_LinsertCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int idx, len; Jim_Obj *listPtr; listPtr = argv[1]; if (Jim_IsShared(listPtr)) listPtr = Jim_DuplicateObj(interp, listPtr); if (Jim_GetIndex(interp, argv[2], &idx) != JIM_OK) goto err; len = Jim_ListLength(interp, listPtr); if (idx >= len) idx = len; else if (idx < 0) idx = len + idx + 1; Jim_ListInsertElements(interp, listPtr, idx, argc - 3, &argv[3]); Jim_SetResult(interp, listPtr); return JIM_OK; err: if (listPtr != argv[1]) { Jim_FreeNewObj(interp, listPtr); } return JIM_ERR; } static int Jim_LreplaceCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int first, last, len, rangeLen; Jim_Obj *listObj; Jim_Obj *newListObj; if (Jim_GetIndex(interp, argv[2], &first) != JIM_OK || Jim_GetIndex(interp, argv[3], &last) != JIM_OK) { return JIM_ERR; } listObj = argv[1]; len = Jim_ListLength(interp, listObj); first = JimRelToAbsIndex(len, first); last = JimRelToAbsIndex(len, last); JimRelToAbsRange(len, &first, &last, &rangeLen); if (first > len) { first = len; } newListObj = Jim_NewListObj(interp, listObj->internalRep.listValue.ele, first); ListInsertElements(newListObj, -1, argc - 4, argv + 4); ListInsertElements(newListObj, -1, len - first - rangeLen, listObj->internalRep.listValue.ele + first + rangeLen); Jim_SetResult(interp, newListObj); return JIM_OK; } static int Jim_LsetCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { if (argc == 3) { if (Jim_SetVariable(interp, argv[1], argv[2]) != JIM_OK) return JIM_ERR; Jim_SetResult(interp, argv[2]); return JIM_OK; } return Jim_ListSetIndex(interp, argv[1], argv + 2, argc - 3, argv[argc - 1]); } static int Jim_LsortCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const argv[]) { static const char * const options[] = { "-ascii", "-nocase", "-increasing", "-decreasing", "-command", "-integer", "-real", "-index", "-unique", "-stride", "-dictionary", NULL }; enum { OPT_ASCII, OPT_NOCASE, OPT_INCREASING, OPT_DECREASING, OPT_COMMAND, OPT_INTEGER, OPT_REAL, OPT_INDEX, OPT_UNIQUE, OPT_STRIDE, OPT_DICT }; Jim_Obj *resObj; int i; int retCode; int shared; long stride = 1; Jim_Obj **elements; int listlen; struct lsort_info info; info.type = JIM_LSORT_ASCII; info.order = 1; info.indexc = 0; info.unique = 0; info.command = NULL; info.interp = interp; for (i = 1; i < (argc - 1); i++) { int option; if (Jim_GetEnum(interp, argv[i], options, &option, NULL, JIM_ENUM_ABBREV | JIM_ERRMSG) != JIM_OK) return JIM_ERR; switch (option) { case OPT_ASCII: info.type = JIM_LSORT_ASCII; break; case OPT_DICT: info.type = JIM_LSORT_DICT; break; case OPT_NOCASE: info.type = JIM_LSORT_NOCASE; break; case OPT_INTEGER: info.type = JIM_LSORT_INTEGER; break; case OPT_REAL: info.type = JIM_LSORT_REAL; break; case OPT_INCREASING: info.order = 1; break; case OPT_DECREASING: info.order = -1; break; case OPT_UNIQUE: info.unique = 1; break; case OPT_COMMAND: if (i >= (argc - 2)) { Jim_SetResultString(interp, "\"-command\" option must be followed by comparison command", -1); return JIM_ERR; } info.type = JIM_LSORT_COMMAND; info.command = argv[i + 1]; i++; break; case OPT_STRIDE: if (i >= argc - 2) { return JIM_USAGE; } if (Jim_GetLong(interp, argv[++i], &stride) != JIM_OK) { return JIM_ERR; } if (stride < 2) { Jim_SetResultString(interp, "stride length must be at least 2", -1); return JIM_ERR; } break; case OPT_INDEX: if (i >= (argc - 2)) { badindex: Jim_SetResultString(interp, "\"-index\" option must be followed by list index", -1); return JIM_ERR; } JimListGetElements(interp, argv[i + 1], &info.indexc, &info.indexv); if (info.indexc == 0) { goto badindex; } i++; break; } } resObj = argv[argc - 1]; JimListGetElements(interp, resObj, &listlen, &elements); if (listlen <= 1) { Jim_SetResult(interp, resObj); return JIM_OK; } if (stride > 1) { Jim_Obj *tmpListObj; int i; if (listlen % stride) { Jim_SetResultString(interp, "list size must be a multiple of the stride length", -1); return JIM_ERR; } tmpListObj = Jim_NewListObj(interp, NULL, 0); Jim_IncrRefCount(tmpListObj); for (i = 0; i < listlen; i += stride) { Jim_ListAppendElement(interp, tmpListObj, Jim_NewListObj(interp, elements + i, stride)); } retCode = ListSortElements(interp, tmpListObj, &info); if (retCode == JIM_OK) { resObj = Jim_NewListObj(interp, NULL, 0); for (i = 0; i < listlen; i += stride) { Jim_ListAppendList(interp, resObj, Jim_ListGetIndex(interp, tmpListObj, i / stride)); } Jim_SetResult(interp, resObj); } Jim_DecrRefCount(interp, tmpListObj); } else { if ((shared = Jim_IsShared(resObj))) { resObj = Jim_DuplicateObj(interp, resObj); } retCode = ListSortElements(interp, resObj, &info); if (retCode == JIM_OK) { Jim_SetResult(interp, resObj); } else if (shared) { Jim_FreeNewObj(interp, resObj); } } return retCode; } static int Jim_AppendCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *stringObjPtr; int i; if (argc == 2) { stringObjPtr = Jim_GetVariable(interp, argv[1], JIM_ERRMSG); if (!stringObjPtr) return JIM_ERR; } else { stringObjPtr = Jim_GetVariable(interp, argv[1], JIM_UNSHARED); if (!stringObjPtr) { stringObjPtr = Jim_NewEmptyStringObj(interp); } else if (Jim_IsShared(stringObjPtr)) { stringObjPtr = Jim_DuplicateObj(interp, stringObjPtr); } for (i = 2; i < argc; i++) { Jim_AppendObj(interp, stringObjPtr, argv[i]); } if (Jim_SetVariable(interp, argv[1], stringObjPtr) != JIM_OK) { return JIM_ERR; } } Jim_SetResult(interp, stringObjPtr); return JIM_OK; } static int Jim_EvalCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int rc; if (argc == 2) { rc = Jim_EvalObj(interp, argv[1]); } else { rc = Jim_EvalObj(interp, Jim_ConcatObj(interp, argc - 1, argv + 1)); } return rc; } static int Jim_UplevelCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int retcode; Jim_CallFrame *savedCallFrame, *targetCallFrame; const char *str; savedCallFrame = interp->framePtr; str = Jim_String(argv[1]); if ((str[0] >= '0' && str[0] <= '9') || str[0] == '#') { targetCallFrame = Jim_GetCallFrameByLevel(interp, argv[1]); argc--; argv++; } else { targetCallFrame = Jim_GetCallFrameByLevel(interp, NULL); } if (targetCallFrame == NULL) { return JIM_ERR; } if (argc < 2) { return JIM_USAGE; } interp->framePtr = targetCallFrame; if (argc == 2) { retcode = Jim_EvalObj(interp, argv[1]); } else { retcode = Jim_EvalObj(interp, Jim_ConcatObj(interp, argc - 1, argv + 1)); } interp->framePtr = savedCallFrame; return retcode; } static int Jim_ExprCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { #ifdef JIM_COMPAT if (argc > 2) { int retcode; Jim_Obj *objPtr; objPtr = Jim_ConcatObj(interp, argc - 1, argv + 1); Jim_IncrRefCount(objPtr); retcode = Jim_EvalExpression(interp, objPtr); Jim_DecrRefCount(interp, objPtr); return retcode; } #endif return Jim_EvalExpression(interp, argv[1]); } static int JimBreakContinueHelper(Jim_Interp *interp, int argc, Jim_Obj *const *argv, int retcode) { if (argc == 2) { long level; int ret = Jim_GetLong(interp, argv[1], &level); if (ret != JIM_OK) { return ret; } interp->break_level = level; } return retcode; } static int Jim_BreakCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return JimBreakContinueHelper(interp, argc, argv, JIM_BREAK); } static int Jim_ContinueCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return JimBreakContinueHelper(interp, argc, argv, JIM_CONTINUE); } static int Jim_StacktraceCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *listObj; int i; jim_wide skip = 0; jim_wide last = 0; if (argc > 1) { if (Jim_GetWideExpr(interp, argv[1], &skip) != JIM_OK) { return JIM_ERR; } } if (argc > 2) { if (Jim_GetWideExpr(interp, argv[2], &last) != JIM_OK) { return JIM_ERR; } } listObj = Jim_NewListObj(interp, NULL, 0); for (i = skip; i <= interp->procLevel; i++) { Jim_EvalFrame *frame = JimGetEvalFrameByProcLevel(interp, -i); if (frame->procLevel < last) { break; } JimAddStackFrame(interp, frame, listObj); } Jim_SetResult(interp, listObj); return JIM_OK; } static int Jim_ReturnCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int i; Jim_Obj *stackTraceObj = NULL; Jim_Obj *errorCodeObj = NULL; int returnCode = JIM_OK; long level = 1; for (i = 1; i < argc - 1; i += 2) { if (Jim_CompareStringImmediate(interp, argv[i], "-code")) { if (Jim_GetReturnCode(interp, argv[i + 1], &returnCode) == JIM_ERR) { return JIM_ERR; } } else if (Jim_CompareStringImmediate(interp, argv[i], "-errorinfo")) { stackTraceObj = argv[i + 1]; } else if (Jim_CompareStringImmediate(interp, argv[i], "-errorcode")) { errorCodeObj = argv[i + 1]; } else if (Jim_CompareStringImmediate(interp, argv[i], "-level")) { if (Jim_GetLong(interp, argv[i + 1], &level) != JIM_OK || level < 0) { Jim_SetResultFormatted(interp, "bad level \"%#s\"", argv[i + 1]); return JIM_ERR; } } else { break; } } if (i != argc - 1 && i != argc) { return JIM_USAGE; } if (stackTraceObj && returnCode == JIM_ERR) { JimSetStackTrace(interp, stackTraceObj); } if (errorCodeObj && returnCode == JIM_ERR) { Jim_SetGlobalVariableStr(interp, "errorCode", errorCodeObj); } interp->returnCode = returnCode; interp->returnLevel = level; if (i == argc - 1) { Jim_SetResult(interp, argv[i]); } return level == 0 ? returnCode : JIM_RETURN; } static int Jim_TailcallCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { if (interp->framePtr->level == 0) { Jim_SetResultString(interp, "tailcall can only be called from a proc or lambda", -1); return JIM_ERR; } else if (argc >= 2) { Jim_CallFrame *cf = interp->framePtr->parent; Jim_Cmd *cmdPtr = Jim_GetCommand(interp, argv[1], JIM_ERRMSG); if (cmdPtr == NULL) { return JIM_ERR; } JimPanic((cf->tailcallCmd != NULL, "Already have a tailcallCmd")); JimIncrCmdRefCount(cmdPtr); cf->tailcallCmd = cmdPtr; JimPanic((cf->tailcallObj != NULL, "Already have a tailcallobj")); cf->tailcallObj = Jim_NewListObj(interp, argv + 1, argc - 1); Jim_IncrRefCount(cf->tailcallObj); return JIM_EVAL; } return JIM_OK; } static int JimAliasCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *cmdList; Jim_Obj *prefixListObj = Jim_CmdPrivData(interp); cmdList = Jim_DuplicateObj(interp, prefixListObj); Jim_ListInsertElements(interp, cmdList, Jim_ListLength(interp, cmdList), argc - 1, argv + 1); return JimEvalObjList(interp, cmdList); } static void JimAliasCmdDelete(Jim_Interp *interp, void *privData) { Jim_Obj *prefixListObj = privData; Jim_DecrRefCount(interp, prefixListObj); } static int Jim_AliasCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *prefixListObj = Jim_NewListObj(interp, argv + 2, argc - 2); Jim_IncrRefCount(prefixListObj); Jim_SetResult(interp, argv[1]); Jim_RegisterCommand(interp, argv[1], JimAliasCmd, JimAliasCmdDelete, NULL, NULL, 0, -1, JIM_CMD_ISALIAS, prefixListObj); return JIM_OK; } static int Jim_ProcCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Cmd *cmd; if (argc == 4) { cmd = JimCreateProcedureCmd(interp, argv[2], NULL, argv[3], NULL); } else { cmd = JimCreateProcedureCmd(interp, argv[2], argv[3], argv[4], NULL); } if (cmd) { Jim_Obj *nameObjPtr = JimQualifyName(interp, argv[1]); JimCreateCommand(interp, nameObjPtr, cmd); JimUpdateProcNamespace(interp, cmd, nameObjPtr); Jim_DecrRefCount(interp, nameObjPtr); Jim_SetResult(interp, argv[1]); return JIM_OK; } return JIM_ERR; } static int Jim_XtraceCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { if (interp->traceCmdObj) { Jim_DecrRefCount(interp, interp->traceCmdObj); interp->traceCmdObj = NULL; } if (Jim_Length(argv[1])) { interp->traceCmdObj = argv[1]; Jim_IncrRefCount(interp->traceCmdObj); } return JIM_OK; } static int Jim_LocalCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int retcode; interp->local++; retcode = Jim_EvalObjVector(interp, argc - 1, argv + 1); interp->local--; if (retcode == 0) { Jim_Obj *cmdNameObj = Jim_GetResult(interp); if (Jim_GetCommand(interp, cmdNameObj, JIM_ERRMSG) == NULL) { return JIM_ERR; } if (interp->framePtr->localCommands == NULL) { interp->framePtr->localCommands = Jim_Alloc(sizeof(*interp->framePtr->localCommands)); Jim_StackInit(interp->framePtr->localCommands, NULL); } Jim_IncrRefCount(cmdNameObj); Jim_StackPush(interp->framePtr->localCommands, cmdNameObj); } return retcode; } static int Jim_UpcallCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int retcode; Jim_Cmd *cmdPtr = Jim_GetCommand(interp, argv[1], JIM_ERRMSG); if (cmdPtr == NULL || !(cmdPtr->flags & JIM_CMD_ISPROC) || !cmdPtr->prevCmd) { Jim_SetResultFormatted(interp, "no previous command: \"%#s\"", argv[1]); return JIM_ERR; } cmdPtr->u.proc.upcall++; JimIncrCmdRefCount(cmdPtr); retcode = Jim_EvalObjVector(interp, argc - 1, argv + 1); cmdPtr->u.proc.upcall--; JimDecrCmdRefCount(interp, cmdPtr); return retcode; } static int Jim_ApplyCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int ret; Jim_Cmd *cmd; Jim_Obj *argListObjPtr; Jim_Obj *bodyObjPtr; Jim_Obj *nsObj = NULL; Jim_Obj **nargv; int len = Jim_ListLength(interp, argv[1]); if (len != 2 && len != 3) { Jim_SetResultFormatted(interp, "can't interpret \"%#s\" as a lambda expression", argv[1]); return JIM_ERR; } if (len == 3) { #ifdef jim_ext_namespace nsObj = Jim_ListGetIndex(interp, argv[1], 2); #else Jim_SetResultString(interp, "namespaces not enabled", -1); return JIM_ERR; #endif } argListObjPtr = Jim_ListGetIndex(interp, argv[1], 0); bodyObjPtr = Jim_ListGetIndex(interp, argv[1], 1); cmd = JimCreateProcedureCmd(interp, argListObjPtr, NULL, bodyObjPtr, nsObj); if (cmd) { nargv = Jim_Alloc((argc - 2 + 1) * sizeof(*nargv)); nargv[0] = Jim_NewStringObj(interp, "apply lambdaExpr", -1); Jim_IncrRefCount(nargv[0]); memcpy(&nargv[1], argv + 2, (argc - 2) * sizeof(*nargv)); ret = JimCallProcedure(interp, cmd, argc - 2 + 1, nargv); Jim_DecrRefCount(interp, nargv[0]); Jim_Free(nargv); JimDecrCmdRefCount(interp, cmd); return ret; } return JIM_ERR; } #ifdef JIM_TAINT static int JimTaintVariable(Jim_Interp *interp, Jim_Obj *nameObjPtr, int taint) { Jim_Obj *valueObjPtr = Jim_GetVariable(interp, nameObjPtr, JIM_ERRMSG | JIM_UNSHARED); if (valueObjPtr == NULL) { return JIM_ERR; } if (Jim_IsShared(valueObjPtr)) { valueObjPtr = Jim_DuplicateObj(interp, valueObjPtr); Jim_SetVariable(interp, nameObjPtr, valueObjPtr); } if (taint && nameObjPtr->typePtr == &dictSubstObjType) { Jim_Obj *objPtr = Jim_GetVariable(interp, nameObjPtr->internalRep.dictSubstValue.varNameObjPtr, JIM_NONE); if (objPtr) { SetStringFromAny(interp, valueObjPtr); valueObjPtr->taint = taint; objPtr->taint |= taint; } } SetStringFromAny(interp, valueObjPtr); valueObjPtr->taint = taint; //printf("taint of %s is %d\n", valueObjPtr->bytes, valueObjPtr->taint); return JIM_OK; } static int Jim_TaintCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { if (argc != 2) { Jim_WrongNumArgs(interp, 1, argv, "varname"); return JIM_ERR; } return JimTaintVariable(interp, argv[1], 1); } static int Jim_UntaintCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { if (argc != 2) { Jim_WrongNumArgs(interp, 1, argv, "varname"); return JIM_ERR; } return JimTaintVariable(interp, argv[1], 0); } #endif static int Jim_ConcatCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_SetResult(interp, Jim_ConcatObj(interp, argc - 1, argv + 1)); return JIM_OK; } static int Jim_UpvarCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int i; Jim_CallFrame *targetCallFrame; if (argc > 3 && (argc % 2 == 0)) { targetCallFrame = Jim_GetCallFrameByLevel(interp, argv[1]); argc--; argv++; } else { targetCallFrame = Jim_GetCallFrameByLevel(interp, NULL); } if (targetCallFrame == NULL) { return JIM_ERR; } if (argc < 3) { return JIM_USAGE; } for (i = 1; i < argc; i += 2) { if (Jim_SetVariableLink(interp, argv[i + 1], argv[i], targetCallFrame) != JIM_OK) return JIM_ERR; } return JIM_OK; } static int Jim_GlobalCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int i; if (interp->framePtr->level == 0) return JIM_OK; for (i = 1; i < argc; i++) { const char *name = Jim_String(argv[i]); if (name[0] != ':' || name[1] != ':') { if (Jim_SetVariableLink(interp, argv[i], argv[i], interp->topFramePtr) != JIM_OK) return JIM_ERR; } } return JIM_OK; } static Jim_Obj *JimStringMap(Jim_Interp *interp, Jim_Obj *mapListObjPtr, Jim_Obj *objPtr, int nocase) { int numMaps; const char *str, *noMatchStart = NULL; int strLen, i; Jim_Obj *resultObjPtr; numMaps = Jim_ListLength(interp, mapListObjPtr); if (numMaps % 2) { Jim_SetResultString(interp, "list must contain an even number of elements", -1); return NULL; } str = Jim_String(objPtr); strLen = Jim_Utf8Length(interp, objPtr); resultObjPtr = Jim_NewStringObj(interp, "", 0); while (strLen) { for (i = 0; i < numMaps; i += 2) { Jim_Obj *eachObjPtr; const char *k; int kl; eachObjPtr = Jim_ListGetIndex(interp, mapListObjPtr, i); k = Jim_String(eachObjPtr); kl = Jim_Utf8Length(interp, eachObjPtr); if (strLen >= kl && kl) { int rc; rc = JimStringCompareUtf8(str, kl, k, kl, nocase); if (rc == 0) { if (noMatchStart) { Jim_AppendString(interp, resultObjPtr, noMatchStart, str - noMatchStart); noMatchStart = NULL; } Jim_AppendObj(interp, resultObjPtr, Jim_ListGetIndex(interp, mapListObjPtr, i + 1)); str += utf8_index(str, kl); strLen -= kl; break; } } } if (i == numMaps) { int c; if (noMatchStart == NULL) noMatchStart = str; str += utf8_tounicode(str, &c); strLen--; } } if (noMatchStart) { Jim_AppendString(interp, resultObjPtr, noMatchStart, str - noMatchStart); } return resultObjPtr; } static int Jim_StringCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int len; int opt_case = 1; int option; static const char * const nocase_options[] = { "-nocase", NULL }; static const char * const nocase_length_options[] = { "-nocase", "-length", NULL }; enum { OPT_BYTELENGTH, OPT_BYTERANGE, OPT_CAT, OPT_COMPARE, OPT_EQUAL, OPT_FIRST, OPT_INDEX, OPT_IS, OPT_LAST, OPT_LENGTH, OPT_MAP, OPT_MATCH, OPT_RANGE, OPT_REPEAT, OPT_REPLACE, OPT_REVERSE, OPT_TOLOWER, OPT_TOTITLE, OPT_TOUPPER, OPT_TRIM, OPT_TRIMLEFT, OPT_TRIMRIGHT, OPT_COUNT }; static const jim_subcmd_type cmds[OPT_COUNT + 1] = { JIM_DEF_SUBCMD("bytelength", "string", 1, 1), JIM_DEF_SUBCMD("byterange", "string first last", 3, 3), JIM_DEF_SUBCMD("cat", "?string ...?", 0, -1), JIM_DEF_SUBCMD("compare", "?-nocase? ?-length int? string1 string2", 2, 5), JIM_DEF_SUBCMD("equal", "?-nocase? ?-length int? string1 string2", 2, 5), JIM_DEF_SUBCMD("first", "subString string ?index?", 2, 3), JIM_DEF_SUBCMD("index", "string index", 2, 2), JIM_DEF_SUBCMD("is", "class ?-strict? str", 2, 3), JIM_DEF_SUBCMD("last", "subString string ?index?", 2, 3), JIM_DEF_SUBCMD("length","string", 1, 1), JIM_DEF_SUBCMD("map", "?-nocase? mapList string", 2, 3), JIM_DEF_SUBCMD("match", "?-nocase? pattern string", 2, 3), JIM_DEF_SUBCMD("range", "string first last", 3, 3), JIM_DEF_SUBCMD("repeat", "string count", 2, 2), JIM_DEF_SUBCMD("replace", "string first last ?string?", 3, 4), JIM_DEF_SUBCMD("reverse", "string", 1, 1), JIM_DEF_SUBCMD("tolower", "string", 1, 1), JIM_DEF_SUBCMD("totitle", "string", 1, 1), JIM_DEF_SUBCMD("toupper", "string", 1, 1), JIM_DEF_SUBCMD("trim", "string ?trimchars?", 1, 2), JIM_DEF_SUBCMD("trimleft", "string ?trimchars?", 1, 2), JIM_DEF_SUBCMD("trimright", "string ?trimchars?", 1, 2), { NULL } }; const jim_subcmd_type *ct = Jim_ParseSubCmd(interp, cmds, argc, argv); if (!ct) { return JIM_ERR; } if (ct->function) { return ct->function(interp, argc, argv); } option = ct - cmds; switch (option) { case OPT_LENGTH: Jim_SetResultInt(interp, Jim_Utf8Length(interp, argv[2])); return JIM_OK; case OPT_BYTELENGTH: Jim_SetResultInt(interp, Jim_Length(argv[2])); return JIM_OK; case OPT_CAT:{ Jim_Obj *objPtr; if (argc == 3) { objPtr = argv[2]; } else { int i; objPtr = Jim_NewStringObj(interp, "", 0); for (i = 2; i < argc; i++) { Jim_AppendObj(interp, objPtr, argv[i]); } } Jim_SetResult(interp, objPtr); return JIM_OK; } case OPT_COMPARE: case OPT_EQUAL: { long opt_length = -1; int n = argc - 4; int i = 2; while (n > 0) { int subopt; if (Jim_GetEnum(interp, argv[i++], nocase_length_options, &subopt, NULL, JIM_ENUM_ABBREV) != JIM_OK) { badcompareargs: Jim_SubCmdArgError(interp, ct, argv[0]); return JIM_ERR; } if (subopt == 0) { opt_case = 0; n--; } else { if (n < 2) { goto badcompareargs; } if (Jim_GetLong(interp, argv[i++], &opt_length) != JIM_OK) { return JIM_ERR; } n -= 2; } } if (n) { goto badcompareargs; } argv += argc - 2; if (opt_length < 0 && option != OPT_COMPARE && opt_case) { Jim_SetResultBool(interp, Jim_StringEqObj(argv[0], argv[1])); } else { const char *s1 = Jim_String(argv[0]); int l1 = Jim_Utf8Length(interp, argv[0]); const char *s2 = Jim_String(argv[1]); int l2 = Jim_Utf8Length(interp, argv[1]); if (opt_length >= 0) { if (l1 > opt_length) { l1 = opt_length; } if (l2 > opt_length) { l2 = opt_length; } } n = JimStringCompareUtf8(s1, l1, s2, l2, !opt_case); Jim_SetResultInt(interp, option == OPT_COMPARE ? n : n == 0); } return JIM_OK; } case OPT_MATCH: if (argc != 4 && (argc != 5 || Jim_GetEnum(interp, argv[2], nocase_options, &opt_case, NULL, JIM_ENUM_ABBREV) != JIM_OK)) { Jim_WrongNumArgs(interp, 2, argv, "?-nocase? pattern string"); return JIM_ERR; } if (opt_case == 0) { argv++; } Jim_SetResultBool(interp, Jim_StringMatchObj(interp, argv[2], argv[3], !opt_case)); return JIM_OK; case OPT_MAP:{ Jim_Obj *objPtr; if (argc != 4 && (argc != 5 || Jim_GetEnum(interp, argv[2], nocase_options, &opt_case, NULL, JIM_ENUM_ABBREV) != JIM_OK)) { Jim_WrongNumArgs(interp, 2, argv, "?-nocase? mapList string"); return JIM_ERR; } if (opt_case == 0) { argv++; } objPtr = JimStringMap(interp, argv[2], argv[3], !opt_case); if (objPtr == NULL) { return JIM_ERR; } Jim_SetResult(interp, objPtr); return JIM_OK; } case OPT_RANGE:{ Jim_Obj *objPtr = Jim_StringRangeObj(interp, argv[2], argv[3], argv[4]); if (objPtr == NULL) { return JIM_ERR; } Jim_SetResult(interp, objPtr); return JIM_OK; } case OPT_BYTERANGE:{ Jim_Obj *objPtr = Jim_StringByteRangeObj(interp, argv[2], argv[3], argv[4]); if (objPtr == NULL) { return JIM_ERR; } Jim_SetResult(interp, objPtr); return JIM_OK; } case OPT_REPLACE:{ Jim_Obj *objPtr = JimStringReplaceObj(interp, argv[2], argv[3], argv[4], argc == 6 ? argv[5] : NULL); if (objPtr == NULL) { return JIM_ERR; } Jim_SetResult(interp, objPtr); return JIM_OK; } case OPT_REPEAT:{ Jim_Obj *objPtr; jim_wide count; if (Jim_GetWideExpr(interp, argv[3], &count) != JIM_OK) { return JIM_ERR; } objPtr = Jim_NewStringObj(interp, "", 0); if (count > 0) { while (count--) { Jim_AppendObj(interp, objPtr, argv[2]); } } Jim_SetResult(interp, objPtr); return JIM_OK; } case OPT_REVERSE:{ char *buf, *p; const char *str; int i; str = Jim_GetString(argv[2], &len); buf = Jim_Alloc(len + 1); assert(buf); p = buf + len; *p = 0; for (i = 0; i < len; ) { int c; int l = utf8_tounicode(str, &c); memcpy(p - l, str, l); p -= l; i += l; str += l; } Jim_SetResult(interp, Jim_NewStringObjNoAlloc(interp, buf, len)); return JIM_OK; } case OPT_INDEX:{ int idx; const char *str; if (Jim_GetIndex(interp, argv[3], &idx) != JIM_OK) { return JIM_ERR; } str = Jim_String(argv[2]); len = Jim_Utf8Length(interp, argv[2]); idx = JimRelToAbsIndex(len, idx); if (idx < 0 || idx >= len || str == NULL) { Jim_SetResultString(interp, "", 0); } else if (len == Jim_Length(argv[2])) { Jim_SetResultString(interp, str + idx, 1); } else { int c; int i = utf8_index(str, idx); Jim_SetResultString(interp, str + i, utf8_tounicode(str + i, &c)); } return JIM_OK; } case OPT_FIRST: case OPT_LAST:{ int idx = 0, l1, l2; const char *s1, *s2; s1 = Jim_String(argv[2]); s2 = Jim_String(argv[3]); l1 = Jim_Utf8Length(interp, argv[2]); l2 = Jim_Utf8Length(interp, argv[3]); if (argc == 5) { if (Jim_GetIndex(interp, argv[4], &idx) != JIM_OK) { return JIM_ERR; } idx = JimRelToAbsIndex(l2, idx); if (idx < 0) { idx = 0; } } else if (option == OPT_LAST) { idx = l2; } if (option == OPT_FIRST) { Jim_SetResultInt(interp, JimStringFirst(s1, l1, s2, l2, idx)); } else { #ifdef JIM_UTF8 Jim_SetResultInt(interp, JimStringLastUtf8(s1, l1, s2, idx)); #else Jim_SetResultInt(interp, JimStringLast(s1, l1, s2, idx)); #endif } return JIM_OK; } case OPT_TRIM: Jim_SetResult(interp, JimStringTrim(interp, argv[2], argc == 4 ? argv[3] : NULL)); return JIM_OK; case OPT_TRIMLEFT: Jim_SetResult(interp, JimStringTrimLeft(interp, argv[2], argc == 4 ? argv[3] : NULL)); return JIM_OK; case OPT_TRIMRIGHT:{ Jim_SetResult(interp, JimStringTrimRight(interp, argv[2], argc == 4 ? argv[3] : NULL)); return JIM_OK; } case OPT_TOLOWER: Jim_SetResult(interp, JimStringToLower(interp, argv[2])); return JIM_OK; case OPT_TOUPPER: Jim_SetResult(interp, JimStringToUpper(interp, argv[2])); return JIM_OK; case OPT_TOTITLE: Jim_SetResult(interp, JimStringToTitle(interp, argv[2])); return JIM_OK; case OPT_IS: if (argc == 5 && !Jim_CompareStringImmediate(interp, argv[3], "-strict")) { Jim_SubCmdArgError(interp, ct, argv[0]); return JIM_ERR; } return JimStringIs(interp, argv[argc - 1], argv[2], argc == 5); } return JIM_OK; } static int Jim_TimeCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { long i, count = 1; jim_wide start, elapsed; if (argc == 3) { if (Jim_GetLong(interp, argv[2], &count) != JIM_OK) return JIM_ERR; } if (count < 0) return JIM_OK; i = count; start = Jim_GetTimeUsec(CLOCK_MONOTONIC_RAW); while (i-- > 0) { int retval; retval = Jim_EvalObj(interp, argv[1]); if (retval != JIM_OK) { return retval; } } elapsed = Jim_GetTimeUsec(CLOCK_MONOTONIC_RAW) - start; if (elapsed < count * 10) { Jim_SetResult(interp, Jim_NewDoubleObj(interp, elapsed * 1.0 / count)); } else { Jim_SetResultInt(interp, count == 0 ? 0 : elapsed / count); } Jim_AppendString(interp, Jim_GetResult(interp)," microseconds per iteration", -1); return JIM_OK; } static int Jim_TimerateCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { long us = 0; jim_wide start, delta, overhead; Jim_Obj *objPtr; double us_per_iter; int count; int n; if (argc == 3) { if (Jim_GetLong(interp, argv[2], &us) != JIM_OK) return JIM_ERR; us *= 1000; } if (us < 1) { us = 1000 * 1000; } start = Jim_GetTimeUsec(CLOCK_MONOTONIC_RAW); count = 0; do { int retval = Jim_EvalObj(interp, argv[1]); delta = Jim_GetTimeUsec(CLOCK_MONOTONIC_RAW) - start; if (retval != JIM_OK) { return retval; } count++; } while (delta < us); start = Jim_GetTimeUsec(CLOCK_MONOTONIC_RAW); n = 0; do { int retval = Jim_EvalObj(interp, interp->nullScriptObj); overhead = Jim_GetTimeUsec(CLOCK_MONOTONIC_RAW) - start; if (retval != JIM_OK) { return retval; } n++; } while (n < count); delta -= overhead; us_per_iter = (double)delta / count; objPtr = Jim_NewListObj(interp, NULL, 0); Jim_ListAppendElement(interp, objPtr, Jim_NewStringObj(interp, "us_per_iter", -1)); Jim_ListAppendElement(interp, objPtr, Jim_NewDoubleObj(interp, us_per_iter)); Jim_ListAppendElement(interp, objPtr, Jim_NewStringObj(interp, "iters_per_sec", -1)); Jim_ListAppendElement(interp, objPtr, Jim_NewDoubleObj(interp, 1e6 / us_per_iter)); Jim_ListAppendElement(interp, objPtr, Jim_NewStringObj(interp, "count", -1)); Jim_ListAppendElement(interp, objPtr, Jim_NewIntObj(interp, count)); Jim_ListAppendElement(interp, objPtr, Jim_NewStringObj(interp, "elapsed_us", -1)); Jim_ListAppendElement(interp, objPtr, Jim_NewIntObj(interp, delta)); Jim_SetResult(interp, objPtr); return JIM_OK; } static int Jim_ExitCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { long exitCode = 0; if (argc == 2) { if (Jim_GetLong(interp, argv[1], &exitCode) != JIM_OK) return JIM_ERR; Jim_SetResult(interp, argv[1]); } interp->exitCode = exitCode; return JIM_EXIT; } static int JimMatchReturnCodes(Jim_Interp *interp, Jim_Obj *retcodeListObj, int rc) { int len = Jim_ListLength(interp, retcodeListObj); int i; for (i = 0; i < len; i++) { int returncode; if (Jim_GetReturnCode(interp, Jim_ListGetIndex(interp, retcodeListObj, i), &returncode) != JIM_OK) { return JIM_ERR; } if (rc == returncode) { return JIM_OK; } } return -1; } static int JimCatchTryHelper(Jim_Interp *interp, int istry, int argc, Jim_Obj *const *argv) { int exitCode = 0; int i; int sig = 0; int ok; Jim_Obj *finallyScriptObj = NULL; Jim_Obj *msgVarObj = NULL; Jim_Obj *optsVarObj = NULL; Jim_Obj *handlerScriptObj = NULL; Jim_Obj *errorCodeObj; int idx; jim_wide ignore_mask = (1 << JIM_EXIT) | (1 << JIM_EVAL) | (1 << JIM_SIGNAL); static const int max_ignore_code = sizeof(ignore_mask) * 8; JimPanic((istry != 0 && istry != 1, "wrong args to JimCatchTryHelper")); Jim_SetGlobalVariableStr(interp, "errorCode", Jim_NewStringObj(interp, "NONE", -1)); for (i = 1; i < argc - 1; i++) { const char *arg = Jim_String(argv[i]); jim_wide option; int ignore; if (strcmp(arg, "--") == 0) { i++; break; } if (*arg != '-') { break; } if (strncmp(arg, "-no", 3) == 0) { arg += 3; ignore = 1; } else { arg++; ignore = 0; } if (Jim_StringToWide(arg, &option, 10) != JIM_OK) { option = -1; } if (option < 0) { option = Jim_FindByName(arg, jimReturnCodes, jimReturnCodesSize); } if (option < 0) { return JIM_USAGE; } if (ignore) { ignore_mask |= ((jim_wide)1 << option); } else { ignore_mask &= (~((jim_wide)1 << option)); } } idx = i; if (argc - idx < 1) { return JIM_USAGE; } if ((ignore_mask & (1 << JIM_SIGNAL)) == 0) { sig++; } interp->signal_level += sig; if (Jim_CheckSignal(interp)) { exitCode = JIM_SIGNAL; } else { exitCode = Jim_EvalObj(interp, argv[idx]); interp->hasErrorStackTrace = 0; } interp->signal_level -= sig; errorCodeObj = Jim_GetGlobalVariableStr(interp, "errorCode", JIM_NONE); idx++; if (istry) { while (idx < argc) { int option; int ret; static const char * const try_options[] = { "on", "trap", "finally", NULL }; enum { TRY_ON, TRY_TRAP, TRY_FINALLY, }; if (Jim_GetEnum(interp, argv[idx], try_options, &option, "handler", JIM_ERRMSG) != JIM_OK) { return JIM_ERR; } switch (option) { case TRY_ON: case TRY_TRAP: if (idx + 4 > argc) { return JIM_USAGE; } if (option == TRY_ON) { ret = JimMatchReturnCodes(interp, argv[idx + 1], exitCode); if (ret > JIM_OK) { return JIM_USAGE; } } else if (errorCodeObj) { int len = Jim_ListLength(interp, argv[idx + 1]); if (len > Jim_ListLength(interp, errorCodeObj)) { ret = -1; } else { int i; ret = JIM_OK; for (i = 0; i < len; i++) { Jim_Obj *matchObj = Jim_ListGetIndex(interp, argv[idx + 1], i); Jim_Obj *objPtr = Jim_ListGetIndex(interp, errorCodeObj, i); if (Jim_StringCompareObj(interp, matchObj, objPtr, 0) != 0) { ret = -1; break; } } } } else { ret = -1; } if (ret == JIM_OK && handlerScriptObj == NULL) { msgVarObj = Jim_ListGetIndex(interp, argv[idx + 2], 0); optsVarObj = Jim_ListGetIndex(interp, argv[idx + 2], 1); handlerScriptObj = argv[idx + 3]; } idx += 4; break; case TRY_FINALLY: if (idx + 2 != argc) { return JIM_USAGE; } finallyScriptObj = argv[idx + 1]; idx += 2; break; } } } else { if (argc - idx >= 1) { msgVarObj = argv[idx]; idx++; if (argc - idx >= 1) { optsVarObj = argv[idx]; idx++; } } } if (exitCode >= 0 && exitCode < max_ignore_code && (((unsigned jim_wide)1 << exitCode) & ignore_mask)) { if (finallyScriptObj) { Jim_EvalObj(interp, finallyScriptObj); } return exitCode; } if (sig && exitCode == JIM_SIGNAL) { if (interp->signal_set_result) { interp->signal_set_result(interp, interp->sigmask); } else if (!istry) { Jim_SetResultInt(interp, interp->sigmask); } interp->sigmask = 0; } ok = 1; if (msgVarObj && Jim_Length(msgVarObj)) { if (Jim_SetVariable(interp, msgVarObj, Jim_GetResult(interp)) != JIM_OK) { ok = 0; } } if (ok && optsVarObj && Jim_Length(optsVarObj)) { Jim_Obj *optListObj = Jim_NewListObj(interp, NULL, 0); Jim_ListAppendElement(interp, optListObj, Jim_NewStringObj(interp, "-code", -1)); Jim_ListAppendElement(interp, optListObj, Jim_NewIntObj(interp, exitCode == JIM_RETURN ? interp->returnCode : exitCode)); Jim_ListAppendElement(interp, optListObj, Jim_NewStringObj(interp, "-level", -1)); Jim_ListAppendElement(interp, optListObj, Jim_NewIntObj(interp, interp->returnLevel)); if (exitCode == JIM_ERR) { Jim_ListAppendElement(interp, optListObj, Jim_NewStringObj(interp, "-errorinfo", -1)); Jim_ListAppendElement(interp, optListObj, interp->stackTrace); if (errorCodeObj) { Jim_ListAppendElement(interp, optListObj, Jim_NewStringObj(interp, "-errorcode", -1)); Jim_ListAppendElement(interp, optListObj, errorCodeObj); } } if (Jim_SetVariable(interp, optsVarObj, optListObj) != JIM_OK) { ok = 0; } } if (ok && handlerScriptObj) { exitCode = Jim_EvalObj(interp, handlerScriptObj); } if (finallyScriptObj) { Jim_Obj *prevResultObj = Jim_GetResult(interp); Jim_IncrRefCount(prevResultObj); int ret = Jim_EvalObj(interp, finallyScriptObj); if (ret == JIM_OK) { Jim_SetResult(interp, prevResultObj); } else { exitCode = ret; } Jim_DecrRefCount(interp, prevResultObj); } if (!istry) { Jim_SetResultInt(interp, exitCode); exitCode = JIM_OK; } return exitCode; } static int Jim_CatchCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return JimCatchTryHelper(interp, 0, argc, argv); } static int Jim_TryCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return JimCatchTryHelper(interp, 1, argc, argv); } static int Jim_RenameCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return Jim_RenameCommand(interp, argv[1], argv[2]); } #define JIM_DICTMATCH_KEYS 0x0001 #define JIM_DICTMATCH_VALUES 0x002 int Jim_DictMatchTypes(Jim_Interp *interp, Jim_Obj *objPtr, Jim_Obj *patternObj, int match_type, int return_types) { Jim_Obj *listObjPtr; Jim_Dict *dict; int i; if (SetDictFromAny(interp, objPtr) != JIM_OK) { return JIM_ERR; } dict = objPtr->internalRep.dictValue; listObjPtr = Jim_NewListObj(interp, NULL, 0); for (i = 0; i < dict->len; i += 2 ) { Jim_Obj *keyObj = dict->table[i]; Jim_Obj *valObj = dict->table[i + 1]; if (patternObj) { Jim_Obj *matchObj = (match_type == JIM_DICTMATCH_KEYS) ? keyObj : valObj; if (!Jim_StringMatchObj(interp, patternObj, matchObj, 0)) { continue; } } if (return_types & JIM_DICTMATCH_KEYS) { Jim_ListAppendElement(interp, listObjPtr, keyObj); } if (return_types & JIM_DICTMATCH_VALUES) { Jim_ListAppendElement(interp, listObjPtr, valObj); } } Jim_SetResult(interp, listObjPtr); return JIM_OK; } int Jim_DictSize(Jim_Interp *interp, Jim_Obj *objPtr) { if (SetDictFromAny(interp, objPtr) != JIM_OK) { return -1; } return objPtr->internalRep.dictValue->len / 2; } Jim_Obj *Jim_DictMerge(Jim_Interp *interp, int objc, Jim_Obj *const *objv) { Jim_Obj *objPtr = Jim_NewDictObj(interp, NULL, 0); int i; JimPanic((objc == 0, "Jim_DictMerge called with objc=0")); for (i = 0; i < objc; i++) { Jim_Obj **table; int tablelen; int j; table = Jim_DictPairs(interp, objv[i], &tablelen); if (tablelen && !table) { Jim_FreeNewObj(interp, objPtr); return NULL; } for (j = 0; j < tablelen; j += 2) { DictAddElement(interp, objPtr, table[j], table[j + 1]); } } return objPtr; } int Jim_DictInfo(Jim_Interp *interp, Jim_Obj *objPtr) { char buffer[100]; Jim_Obj *output; Jim_Dict *dict; if (SetDictFromAny(interp, objPtr) != JIM_OK) { return JIM_ERR; } dict = objPtr->internalRep.dictValue; snprintf(buffer, sizeof(buffer), "%d entries in table, %d buckets", dict->len, dict->size); output = Jim_NewStringObj(interp, buffer, -1); Jim_SetResult(interp, output); return JIM_OK; } static int Jim_EvalEnsemble(Jim_Interp *interp, const char *basecmd, const char *subcmd, int argc, Jim_Obj *const *argv) { Jim_Obj *prefixObj = Jim_NewStringObj(interp, basecmd, -1); Jim_AppendString(interp, prefixObj, " ", 1); Jim_AppendString(interp, prefixObj, subcmd, -1); return Jim_EvalObjPrefix(interp, prefixObj, argc, argv); } static int JimDictWith(Jim_Interp *interp, Jim_Obj *dictVarName, Jim_Obj *const *keyv, int keyc, Jim_Obj *scriptObj) { int i; Jim_Obj *objPtr; Jim_Obj *dictObj; Jim_Obj **dictValues; int len; int ret = JIM_OK; dictObj = Jim_GetVariable(interp, dictVarName, JIM_ERRMSG); if (dictObj == NULL || Jim_DictKeysVector(interp, dictObj, keyv, keyc, &objPtr, JIM_ERRMSG) != JIM_OK) { return JIM_ERR; } dictValues = Jim_DictPairs(interp, objPtr, &len); if (len && dictValues == NULL) { return JIM_ERR; } for (i = 0; i < len; i += 2) { if (Jim_SetVariable(interp, dictValues[i], dictValues[i + 1]) == JIM_ERR) { return JIM_ERR; } } if (Jim_Length(scriptObj)) { ret = Jim_EvalObj(interp, scriptObj); if (ret == JIM_OK && Jim_GetVariable(interp, dictVarName, 0) != NULL) { Jim_Obj **newkeyv = Jim_Alloc(sizeof(*newkeyv) * (keyc + 1)); for (i = 0; i < keyc; i++) { newkeyv[i] = keyv[i]; } for (i = 0; i < len; i += 2) { if (Jim_StringCompareObj(interp, dictVarName, dictValues[i], 0) != 0) { objPtr = Jim_GetVariable(interp, dictValues[i], 0); newkeyv[keyc] = dictValues[i]; Jim_SetDictKeysVector(interp, dictVarName, newkeyv, keyc + 1, objPtr, JIM_NORESULT); } } Jim_Free(newkeyv); } } return ret; } static int Jim_DictCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *objPtr; int types = JIM_DICTMATCH_KEYS; enum { OPT_CREATE, OPT_GET, OPT_GETDEF, OPT_GETWITHDEFAULT, OPT_SET, OPT_UNSET, OPT_EXISTS, OPT_KEYS, OPT_SIZE, OPT_INFO, OPT_MERGE, OPT_WITH, OPT_APPEND, OPT_LAPPEND, OPT_INCR, OPT_REMOVE, OPT_VALUES, OPT_FOR, OPT_REPLACE, OPT_UPDATE, OPT_COUNT }; static const jim_subcmd_type cmds[OPT_COUNT + 1] = { JIM_DEF_SUBCMD("create", "?key value ...?", 0, -2), JIM_DEF_SUBCMD("get", "dictionary ?key ...?", 1, -1), JIM_DEF_SUBCMD_HIDDEN("getdef", "dictionary ?key ...? key default", 3, -1), JIM_DEF_SUBCMD("getwithdefault", "dictionary ?key ...? key default", 3, -1), JIM_DEF_SUBCMD("set", "varName key ?key ...? value", 3, -1), JIM_DEF_SUBCMD("unset", "varName key ?key ...?", 2, -1), JIM_DEF_SUBCMD("exists", "dictionary key ?key ...?", 2, -1), JIM_DEF_SUBCMD("keys", "dictionary ?pattern?", 1, 2), JIM_DEF_SUBCMD("size", "dictionary", 1, 1), JIM_DEF_SUBCMD("info", "dictionary", 1, 1), JIM_DEF_SUBCMD("merge", "?...?", 0, -1), JIM_DEF_SUBCMD("with", "dictVar ?key ...? script", 2, -1), JIM_DEF_SUBCMD("append", "varName key ?value ...?", 2, -1), JIM_DEF_SUBCMD("lappend", "varName key ?value ...?", 2, -1), JIM_DEF_SUBCMD("incr", "varName key ?increment?", 2, 3), JIM_DEF_SUBCMD("remove", "dictionary ?key ...?", 1, -1), JIM_DEF_SUBCMD("values", "dictionary ?pattern?", 1, 2), JIM_DEF_SUBCMD("for", "vars dictionary script", 3, 3), JIM_DEF_SUBCMD("replace", "dictionary ?key value ...?", 1, -1), JIM_DEF_SUBCMD("update", "varName ?arg ...? script", 2, -1), { NULL } }; const jim_subcmd_type *ct = Jim_ParseSubCmd(interp, cmds, argc, argv); if (!ct) { return JIM_ERR; } if (ct->function) { return ct->function(interp, argc, argv); } switch (ct - cmds) { case OPT_GET: if (Jim_DictKeysVector(interp, argv[2], argv + 3, argc - 3, &objPtr, JIM_ERRMSG) != JIM_OK) { return JIM_ERR; } Jim_SetResult(interp, objPtr); return JIM_OK; case OPT_GETDEF: case OPT_GETWITHDEFAULT:{ int rc = Jim_DictKeysVector(interp, argv[2], argv + 3, argc - 4, &objPtr, JIM_ERRMSG); if (rc == -1) { return JIM_ERR; } if (rc == JIM_ERR) { Jim_SetResult(interp, argv[argc - 1]); } else { Jim_SetResult(interp, objPtr); } return JIM_OK; } case OPT_SET: return Jim_SetDictKeysVector(interp, argv[2], argv + 3, argc - 4, argv[argc - 1], JIM_ERRMSG | JIM_UNSHARED); case OPT_EXISTS:{ int rc = Jim_DictKeysVector(interp, argv[2], argv + 3, argc - 3, &objPtr, JIM_NONE); if (rc < 0) { return JIM_ERR; } Jim_SetResultBool(interp, rc == JIM_OK); return JIM_OK; } case OPT_UNSET: if (Jim_SetDictKeysVector(interp, argv[2], argv + 3, argc - 3, NULL, JIM_UNSHARED) != JIM_OK) { return JIM_ERR; } return JIM_OK; case OPT_VALUES: types = JIM_DICTMATCH_VALUES; case OPT_KEYS: return Jim_DictMatchTypes(interp, argv[2], argc == 4 ? argv[3] : NULL, types, types); case OPT_SIZE: if (Jim_DictSize(interp, argv[2]) < 0) { return JIM_ERR; } Jim_SetResultInt(interp, Jim_DictSize(interp, argv[2])); return JIM_OK; case OPT_MERGE: if (argc == 2) { return JIM_OK; } objPtr = Jim_DictMerge(interp, argc - 2, argv + 2); if (objPtr == NULL) { return JIM_ERR; } Jim_SetResult(interp, objPtr); return JIM_OK; case OPT_CREATE: objPtr = Jim_NewDictObj(interp, argv + 2, argc - 2); Jim_SetResult(interp, objPtr); return JIM_OK; case OPT_INFO: return Jim_DictInfo(interp, argv[2]); case OPT_WITH: return JimDictWith(interp, argv[2], argv + 3, argc - 4, argv[argc - 1]); case OPT_UPDATE: if (argc < 6 || argc % 2) { argc = 2; } default: return Jim_EvalEnsemble(interp, "dict", Jim_String(argv[1]), argc - 2, argv + 2); } } static int Jim_SubstCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { static const char * const options[] = { "-nobackslashes", "-nocommands", "-novariables", NULL }; enum { OPT_NOBACKSLASHES, OPT_NOCOMMANDS, OPT_NOVARIABLES }; int i; int flags = JIM_SUBST_FLAG; Jim_Obj *objPtr; for (i = 1; i < (argc - 1); i++) { int option; if (Jim_GetEnum(interp, argv[i], options, &option, NULL, JIM_ERRMSG | JIM_ENUM_ABBREV) != JIM_OK) { return JIM_ERR; } switch (option) { case OPT_NOBACKSLASHES: flags |= JIM_SUBST_NOESC; break; case OPT_NOCOMMANDS: flags |= JIM_SUBST_NOCMD; break; case OPT_NOVARIABLES: flags |= JIM_SUBST_NOVAR; break; } } if (Jim_SubstObj(interp, argv[argc - 1], &objPtr, flags) != JIM_OK) { return JIM_ERR; } Jim_SetResult(interp, objPtr); return JIM_OK; } static int Jim_LsubstCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { if (argc == 3) { if (Jim_CompareStringImmediate(interp, argv[1], "-line")) { return JimListSubstObj(interp, argv[2], JIM_LSUBST_LINE); } return JIM_USAGE; } return JimListSubstObj(interp, argv[1], 0); } #ifdef jim_ext_namespace static int JimIsGlobalNamespace(Jim_Obj *objPtr) { int len; const char *str = Jim_GetString(objPtr, &len); return len >= 2 && str[0] == ':' && str[1] == ':'; } #endif static int Jim_InfoCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *objPtr; int mode = 1; enum { INFO_ALIAS, INFO_ALIASES, INFO_ARGS, INFO_BODY, INFO_CHANNELS, INFO_COMMANDS, INFO_COMPLETE, INFO_EXISTS, INFO_FRAME, INFO_GLOBALS, INFO_HELP, INFO_HOSTNAME, INFO_LEVEL, INFO_LOCALS, INFO_NAMEOFEXECUTABLE, INFO_PATCHLEVEL, INFO_PROCS, INFO_REFERENCES, INFO_RETURNCODES, INFO_SCRIPT, INFO_SOURCE, INFO_STACKTRACE, INFO_STATICS, INFO_TAINTED, INFO_USAGE, INFO_VARS, INFO_VERSION, INFO_COUNT }; static const jim_subcmd_type cmds[INFO_COUNT + 1] = { JIM_DEF_SUBCMD("alias", "command", 1, 1), JIM_DEF_SUBCMD("aliases", "?-all? ?pattern?", 0, 2), JIM_DEF_SUBCMD("args", "procname", 1, 1), JIM_DEF_SUBCMD("body", "procname", 1, 1), JIM_DEF_SUBCMD("channels", "?-all? ?pattern?", 0, 2), JIM_DEF_SUBCMD("commands", "?-all? ?pattern?", 0, 2), JIM_DEF_SUBCMD("complete", "script ?missing?", 1, 2), JIM_DEF_SUBCMD("exists", "varName", 1, 1), JIM_DEF_SUBCMD("frame", "?levelNum?", 0, 1), JIM_DEF_SUBCMD("globals", "?pattern?", 0, 1), JIM_DEF_SUBCMD("help", "command", 1, 1), JIM_DEF_SUBCMD("hostname", NULL, 0, 0), JIM_DEF_SUBCMD("level", "?levelNum?", 0, 1), JIM_DEF_SUBCMD("locals", "?pattern?", 0, 1), JIM_DEF_SUBCMD("nameofexecutable", NULL, 0, 0), JIM_DEF_SUBCMD("patchlevel", NULL, 0, 0), JIM_DEF_SUBCMD("procs", "?-all? ?pattern?", 0, 2), JIM_DEF_SUBCMD("references", NULL, 0, 0), JIM_DEF_SUBCMD("returncodes", "?code?", 0, 1), JIM_DEF_SUBCMD("script", "?filename?", 0, 1), JIM_DEF_SUBCMD("source", "source ?filename line?", 1, 3), JIM_DEF_SUBCMD("stacktrace", NULL, 0, 0), JIM_DEF_SUBCMD("statics", "procname", 1, 1), JIM_DEF_SUBCMD("tainted", "value", 1, 1), JIM_DEF_SUBCMD("usage", "command", 1, 1), JIM_DEF_SUBCMD("vars", "?pattern?", 0, 1), JIM_DEF_SUBCMD("version", NULL, 0, 0), { NULL } }; const jim_subcmd_type *ct; #ifdef jim_ext_namespace int nons = 0; if (argc > 2 && Jim_CompareStringImmediate(interp, argv[1], "-nons")) { argc--; argv++; nons = 1; } #endif ct = Jim_ParseSubCmd(interp, cmds, argc, argv); if (!ct) { return JIM_ERR; } if (ct->function) { return ct->function(interp, argc, argv); } int option = ct - cmds; switch (option) { case INFO_EXISTS: Jim_SetResultBool(interp, Jim_GetVariable(interp, argv[2], 0) != NULL); return JIM_OK; case INFO_ALIAS:{ Jim_Cmd *cmdPtr; if ((cmdPtr = Jim_GetCommand(interp, argv[2], JIM_ERRMSG)) == NULL) { return JIM_ERR; } if ((cmdPtr->flags & JIM_CMD_ISALIAS) == 0) { Jim_SetResultFormatted(interp, "command \"%#s\" is not an alias", argv[2]); return JIM_ERR; } Jim_SetResult(interp, (Jim_Obj *)cmdPtr->u.native.privData); return JIM_OK; } case INFO_TAINTED: if (argc != 3) { Jim_WrongNumArgs(interp, 2, argv, "value"); return JIM_ERR; } Jim_SetResultBool(interp, argv[2]->taint != 0); return JIM_OK; case INFO_CHANNELS: mode <<= 1; #ifndef jim_ext_aio Jim_SetResultString(interp, "aio not enabled", -1); return JIM_ERR; #endif case INFO_ALIASES: mode <<= 1; case INFO_PROCS: mode <<= 1; case INFO_COMMANDS:{ int n = 0; if (argc > 2 && Jim_CompareStringImmediate(interp, argv[2], "-all")) { mode |= JIM_CMDLIST_ALL; n++; } if (argc < 2 + n || argc > 3 + n) { Jim_SetResultFormatted(interp, "wrong # args: should be \"info %#s %s\"", argv[1], cmds[option].args); return JIM_ERR; } #ifdef jim_ext_namespace if (!nons) { if (Jim_Length(interp->framePtr->nsObj) || (argc == 3 && JimIsGlobalNamespace(argv[2]))) { return Jim_EvalPrefix(interp, "namespace info", argc - 1, argv + 1); } } #endif Jim_SetResult(interp, JimCommandsList(interp, (argc == 3 + n) ? argv[2 + n] : NULL, mode)); return JIM_OK; } case INFO_VARS: mode <<= 1; case INFO_LOCALS: mode <<= 1; case INFO_GLOBALS: #ifdef jim_ext_namespace if (!nons) { if (Jim_Length(interp->framePtr->nsObj) || (argc == 3 && JimIsGlobalNamespace(argv[2]))) { return Jim_EvalPrefix(interp, "namespace info", argc - 1, argv + 1); } } #endif Jim_SetResult(interp, JimVariablesList(interp, argc == 3 ? argv[2] : NULL, mode)); return JIM_OK; case INFO_SCRIPT: if (argc == 3) { Jim_IncrRefCount(argv[2]); Jim_DecrRefCount(interp, interp->currentFilenameObj); interp->currentFilenameObj = argv[2]; } Jim_SetResult(interp, interp->currentFilenameObj); return JIM_OK; case INFO_SOURCE:{ Jim_Obj *resObjPtr; Jim_Obj *fileNameObj; if (argc == 4) { Jim_SubCmdArgError(interp, ct, argv[0]); return JIM_ERR; } if (argc == 5) { jim_wide line; if (Jim_GetWide(interp, argv[4], &line) != JIM_OK) { return JIM_ERR; } resObjPtr = Jim_NewStringObj(interp, Jim_String(argv[2]), Jim_Length(argv[2])); Jim_SetSourceInfo(interp, resObjPtr, argv[3], line); } else { int line; fileNameObj = Jim_GetSourceInfo(interp, argv[2], &line); resObjPtr = Jim_NewListObj(interp, NULL, 0); Jim_ListAppendElement(interp, resObjPtr, fileNameObj); Jim_ListAppendElement(interp, resObjPtr, Jim_NewIntObj(interp, line)); } Jim_SetResult(interp, resObjPtr); return JIM_OK; } case INFO_STACKTRACE: Jim_SetResult(interp, interp->stackTrace); return JIM_OK; case INFO_LEVEL: if (argc == 2) { Jim_SetResultInt(interp, interp->framePtr->level); } else { if (JimInfoLevel(interp, argv[2], &objPtr) != JIM_OK) { return JIM_ERR; } Jim_SetResult(interp, objPtr); } return JIM_OK; case INFO_FRAME: if (argc == 2) { Jim_SetResultInt(interp, interp->procLevel + 1); } else { if (JimInfoFrame(interp, argv[2], &objPtr) != JIM_OK) { return JIM_ERR; } Jim_SetResult(interp, objPtr); } return JIM_OK; case INFO_USAGE: case INFO_HELP:{ Jim_Cmd *cmdPtr = Jim_GetCommand(interp, argv[2], JIM_ERRMSG); if (!cmdPtr) { return JIM_ERR; } if (option == INFO_USAGE) { Jim_SetResult(interp, JimCmdUsage(interp, argv[2], cmdPtr)); return JIM_OK; } else if ((cmdPtr->flags & JIM_CMD_ISPROC) == 0) { if (cmdPtr->u.native.help) { Jim_SetResultString(interp, cmdPtr->u.native.help, -1); return JIM_OK; } } Jim_SetResultFormatted(interp, "No help available for command \"%#s\"", argv[2]); return JIM_OK; } case INFO_BODY: case INFO_STATICS: case INFO_ARGS:{ Jim_Cmd *cmdPtr; if ((cmdPtr = Jim_GetCommand(interp, argv[2], JIM_ERRMSG)) == NULL) { return JIM_ERR; } if ((cmdPtr->flags & JIM_CMD_ISPROC) == 0) { Jim_SetResultFormatted(interp, "command \"%#s\" is not a procedure", argv[2]); return JIM_ERR; } switch (option) { #ifdef JIM_NO_INTROSPECTION default: Jim_SetResultString(interp, "unsupported", -1); return JIM_ERR; #else case INFO_BODY: Jim_SetResult(interp, cmdPtr->u.proc.bodyObjPtr); break; case INFO_ARGS: Jim_SetResult(interp, cmdPtr->u.proc.argListObjPtr); break; #endif case INFO_STATICS: if (cmdPtr->u.proc.staticVars) { Jim_SetResult(interp, JimHashtablePatternMatch(interp, cmdPtr->u.proc.staticVars, NULL, JimVariablesMatch, JIM_VARLIST_LOCALS | JIM_VARLIST_VALUES)); } break; } return JIM_OK; } case INFO_PATCHLEVEL: #ifdef JIM_GITVERSION Jim_SetResultString(interp, JIM_GITVERSION, -1); return JIM_OK; #endif case INFO_VERSION:{ char versionbuf[64]; snprintf(versionbuf, sizeof(versionbuf), "%d.%d", JIM_VERSION / 100, JIM_VERSION % 100); Jim_SetResultString(interp, versionbuf, -1); return JIM_OK; } case INFO_COMPLETE: { char missing; Jim_SetResultBool(interp, Jim_ScriptIsComplete(interp, argv[2], &missing)); if (missing != ' ' && argc == 4) { Jim_SetVariable(interp, argv[3], Jim_NewStringObj(interp, &missing, 1)); } return JIM_OK; } case INFO_HOSTNAME: return Jim_Eval(interp, "os.gethostname"); case INFO_NAMEOFEXECUTABLE: return Jim_Eval(interp, "{info nameofexecutable}"); case INFO_RETURNCODES: if (argc == 2) { int i; Jim_Obj *listObjPtr = Jim_NewListObj(interp, NULL, 0); for (i = 0; jimReturnCodes[i]; i++) { Jim_ListAppendElement(interp, listObjPtr, Jim_NewIntObj(interp, i)); Jim_ListAppendElement(interp, listObjPtr, Jim_NewStringObj(interp, jimReturnCodes[i], -1)); } Jim_SetResult(interp, listObjPtr); } else if (argc == 3) { long code; const char *name; if (Jim_GetLong(interp, argv[2], &code) != JIM_OK) { return JIM_ERR; } name = Jim_ReturnCode(code); if (*name == '?') { Jim_SetResultInt(interp, code); } else { Jim_SetResultString(interp, name, -1); } } return JIM_OK; case INFO_REFERENCES: #ifdef JIM_REFERENCES return JimInfoReferences(interp, argc, argv); #else Jim_SetResultString(interp, "not supported", -1); return JIM_ERR; #endif default: abort(); } } static int Jim_ExistsCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *objPtr; int result = 0; static const char * const options[] = { "-command", "-proc", "-alias", "-channel", "-var", NULL }; enum { OPT_COMMAND, OPT_PROC, OPT_ALIAS, OPT_CHANNEL, OPT_VAR }; int option; if (argc == 2) { option = OPT_VAR; objPtr = argv[1]; } else if (argc == 3) { if (Jim_GetEnum(interp, argv[1], options, &option, NULL, JIM_ERRMSG | JIM_ENUM_ABBREV) != JIM_OK) { return JIM_ERR; } objPtr = argv[2]; } else { return JIM_USAGE; } if (option == OPT_VAR) { result = Jim_GetVariable(interp, objPtr, 0) != NULL; } else { Jim_Cmd *cmd = Jim_GetCommand(interp, objPtr, JIM_NONE); if (cmd) { switch (option) { case OPT_COMMAND: result = 1; break; case OPT_ALIAS: result = (cmd->flags & JIM_CMD_ISALIAS) != 0; break; case OPT_PROC: result = (cmd->flags & JIM_CMD_ISPROC) != 0; break; case OPT_CHANNEL: result = (cmd->flags & JIM_CMD_ISCHANNEL) != 0; break; } } } Jim_SetResultBool(interp, result); return JIM_OK; } static int Jim_SplitCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const char *str, *splitChars, *noMatchStart; int splitLen, strLen; Jim_Obj *resObjPtr; int c; int len; str = Jim_GetString(argv[1], &len); if (len == 0) { return JIM_OK; } strLen = Jim_Utf8Length(interp, argv[1]); if (argc == 2) { splitChars = " \n\t\r"; splitLen = 4; } else { splitChars = Jim_String(argv[2]); splitLen = Jim_Utf8Length(interp, argv[2]); } noMatchStart = str; resObjPtr = Jim_NewListObj(interp, NULL, 0); if (splitLen) { Jim_Obj *objPtr; while (strLen--) { const char *sc = splitChars; int scLen = splitLen; int sl = utf8_tounicode(str, &c); while (scLen--) { int pc; sc += utf8_tounicode(sc, &pc); if (c == pc) { objPtr = Jim_NewStringObj(interp, noMatchStart, (str - noMatchStart)); Jim_ListAppendElement(interp, resObjPtr, objPtr); noMatchStart = str + sl; break; } } str += sl; } objPtr = Jim_NewStringObj(interp, noMatchStart, (str - noMatchStart)); Jim_ListAppendElement(interp, resObjPtr, objPtr); } else { Jim_Obj **commonObj = NULL; #define NUM_COMMON (128 - 9) while (strLen--) { int n = utf8_tounicode(str, &c); #ifdef JIM_OPTIMIZATION if (c >= 9 && c < 128) { c -= 9; if (!commonObj) { commonObj = Jim_Alloc(sizeof(*commonObj) * NUM_COMMON); memset(commonObj, 0, sizeof(*commonObj) * NUM_COMMON); } if (!commonObj[c]) { commonObj[c] = Jim_NewStringObj(interp, str, 1); } Jim_ListAppendElement(interp, resObjPtr, commonObj[c]); str++; continue; } #endif Jim_ListAppendElement(interp, resObjPtr, Jim_NewStringObjUtf8(interp, str, 1)); str += n; } Jim_Free(commonObj); } Jim_SetResult(interp, resObjPtr); return JIM_OK; } static int Jim_JoinCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const char *joinStr; int joinStrLen; if (argc == 2) { joinStr = " "; joinStrLen = 1; } else { joinStr = Jim_GetString(argv[2], &joinStrLen); } Jim_SetResult(interp, Jim_ListJoin(interp, argv[1], joinStr, joinStrLen)); return JIM_OK; } static int Jim_FormatCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *objPtr; objPtr = Jim_FormatString(interp, argv[1], argc - 2, argv + 2); if (objPtr == NULL) return JIM_ERR; Jim_SetResult(interp, objPtr); return JIM_OK; } static int Jim_ScanCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *listPtr, **outVec; int outc, i; if (argv[2]->typePtr != &scanFmtStringObjType) SetScanFmtFromAny(interp, argv[2]); if (FormatGetError(argv[2]) != 0) { Jim_SetResultString(interp, FormatGetError(argv[2]), -1); return JIM_ERR; } if (argc > 3) { int maxPos = FormatGetMaxPos(argv[2]); int count = FormatGetCnvCount(argv[2]); if (maxPos > argc - 3) { Jim_SetResultString(interp, "\"%n$\" argument index out of range", -1); return JIM_ERR; } else if (count > argc - 3) { Jim_SetResultString(interp, "different numbers of variable names and " "field specifiers", -1); return JIM_ERR; } else if (count < argc - 3) { Jim_SetResultString(interp, "variable is not assigned by any " "conversion specifiers", -1); return JIM_ERR; } } listPtr = Jim_ScanString(interp, argv[1], argv[2], JIM_ERRMSG); if (listPtr == 0) return JIM_ERR; if (argc > 3) { int rc = JIM_OK; int count = 0; if (listPtr != 0 && listPtr != (Jim_Obj *)EOF) { int len = Jim_ListLength(interp, listPtr); if (len != 0) { JimListGetElements(interp, listPtr, &outc, &outVec); for (i = 0; i < outc; ++i) { if (Jim_Length(outVec[i]) > 0) { ++count; if (Jim_SetVariable(interp, argv[3 + i], outVec[i]) != JIM_OK) { rc = JIM_ERR; } } } } Jim_FreeNewObj(interp, listPtr); } else { count = -1; } if (rc == JIM_OK) { Jim_SetResultInt(interp, count); } return rc; } else { if (listPtr == (Jim_Obj *)EOF) { Jim_SetResult(interp, Jim_NewListObj(interp, 0, 0)); return JIM_OK; } Jim_SetResult(interp, listPtr); } return JIM_OK; } static int Jim_ErrorCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_SetResult(interp, argv[1]); if (argc == 3) { JimSetStackTrace(interp, argv[2]); return JIM_ERR; } return JIM_ERR; } static int Jim_LrangeCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *objPtr; if ((objPtr = Jim_ListRange(interp, argv[1], argv[2], argv[3])) == NULL) return JIM_ERR; Jim_SetResult(interp, objPtr); return JIM_OK; } static int Jim_LrepeatCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *objPtr; jim_wide count; if (argc < 2 || Jim_GetWideExpr(interp, argv[1], &count) != JIM_OK || count < 0) { return JIM_USAGE; } if (count == 0 || argc == 2) { Jim_SetEmptyResult(interp); return JIM_OK; } argc -= 2; argv += 2; objPtr = Jim_NewListObj(interp, NULL, 0); ListEnsureLength(objPtr, argc * count); while (count--) { ListInsertElements(objPtr, -1, argc, argv); } Jim_SetResult(interp, objPtr); return JIM_OK; } char **Jim_GetEnviron(void) { #if defined(HAVE__NSGETENVIRON) return *_NSGetEnviron(); #elif defined(_environ) return _environ; #else #if !defined(NO_ENVIRON_EXTERN) extern char **environ; #endif return environ; #endif } void Jim_SetEnviron(char **env) { #if defined(HAVE__NSGETENVIRON) *_NSGetEnviron() = env; #elif defined(_environ) _environ = env; #else #if !defined(NO_ENVIRON_EXTERN) extern char **environ; #endif environ = env; #endif } static int Jim_EnvCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const char *key; const char *val; if (argc == 1) { char **e = Jim_GetEnviron(); int i; Jim_Obj *listObjPtr = Jim_NewListObj(interp, NULL, 0); for (i = 0; e[i]; i++) { const char *equals = strchr(e[i], '='); if (equals) { Jim_ListAppendElement(interp, listObjPtr, Jim_NewStringObj(interp, e[i], equals - e[i])); Jim_ListAppendElement(interp, listObjPtr, Jim_NewStringObj(interp, equals + 1, -1)); } } Jim_SetResult(interp, listObjPtr); return JIM_OK; } key = Jim_String(argv[1]); val = getenv(key); if (val == NULL) { if (argc < 3) { Jim_SetResultFormatted(interp, "environment variable \"%#s\" does not exist", argv[1]); return JIM_ERR; } val = Jim_String(argv[2]); } Jim_SetResult(interp, Jim_NewStringObj(interp, val, -1)); return JIM_OK; } static int Jim_SourceCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int retval = Jim_EvalFile(interp, Jim_String(argv[1])); return retval == JIM_RETURN ? JIM_OK : retval; } static int Jim_LreverseCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *revObjPtr, **ele; int len; JimListGetElements(interp, argv[1], &len, &ele); revObjPtr = Jim_NewListObj(interp, NULL, 0); ListEnsureLength(revObjPtr, len); len--; while (len >= 0) ListAppendElement(revObjPtr, ele[len--]); Jim_SetResult(interp, revObjPtr); return JIM_OK; } static int JimRangeLen(jim_wide start, jim_wide end, jim_wide step) { jim_wide len; if (step == 0) return -1; if (start == end) return 0; else if (step > 0 && start > end) return -1; else if (step < 0 && end > start) return -1; len = end - start; if (len < 0) len = -len; if (step < 0) step = -step; len = 1 + ((len - 1) / step); if (len > INT_MAX) len = INT_MAX; return (int)((len < 0) ? -1 : len); } static int Jim_RangeCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { jim_wide start = 0, end, step = 1; int len, i; Jim_Obj *objPtr; if (argc == 2) { if (Jim_GetWideExpr(interp, argv[1], &end) != JIM_OK) return JIM_ERR; } else { if (Jim_GetWideExpr(interp, argv[1], &start) != JIM_OK || Jim_GetWideExpr(interp, argv[2], &end) != JIM_OK) return JIM_ERR; if (argc == 4 && Jim_GetWideExpr(interp, argv[3], &step) != JIM_OK) return JIM_ERR; } if ((len = JimRangeLen(start, end, step)) == -1) { Jim_SetResultString(interp, "Invalid (infinite?) range specified", -1); return JIM_ERR; } objPtr = Jim_NewListObj(interp, NULL, 0); ListEnsureLength(objPtr, len); for (i = 0; i < len; i++) ListAppendElement(objPtr, Jim_NewIntObj(interp, start + i * step)); Jim_SetResult(interp, objPtr); return JIM_OK; } static int Jim_RandCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { jim_wide min = 0, max = 0, len, maxMul; if (argc == 1) { max = JIM_WIDE_MAX; } else if (argc == 2) { if (Jim_GetWideExpr(interp, argv[1], &max) != JIM_OK) return JIM_ERR; } else if (argc == 3) { if (Jim_GetWideExpr(interp, argv[1], &min) != JIM_OK || Jim_GetWideExpr(interp, argv[2], &max) != JIM_OK) return JIM_ERR; } len = max-min; if (len < 0) { Jim_SetResultString(interp, "Invalid arguments (max < min)", -1); return JIM_ERR; } maxMul = JIM_WIDE_MAX - (len ? (JIM_WIDE_MAX%len) : 0); while (1) { jim_wide r; JimRandomBytes(interp, &r, sizeof(jim_wide)); if (r < 0 || r >= maxMul) continue; r = (len == 0) ? 0 : r%len; Jim_SetResultInt(interp, min+r); return JIM_OK; } } static const struct jim_core_cmd_def_t { const char *name; Jim_CmdProc *cmdProc; short minargs; short maxargs; const char *usage; int flags; } Jim_CoreCommandsTable[] = { {"*", Jim_MulCoreCommand, 0, -1, "?number ...?" }, {"+", Jim_AddCoreCommand, 0, -1, "?number ...?" }, {"-", Jim_SubCoreCommand, 1, -1, "number ?number ...?" }, {"/", Jim_DivCoreCommand, 1, -1, "number ?number ...?" }, {"alias", Jim_AliasCoreCommand, 2, -1, "newname command ?args ...?" }, {"append", Jim_AppendCoreCommand, 1, -1, "varName ?value ...?" }, {"apply", Jim_ApplyCoreCommand, 1, -1, "lambdaExpr ?arg ...?" }, {"break", Jim_BreakCoreCommand, 0, 1, "?level?" }, {"catch", Jim_CatchCoreCommand, 1, -1, "?-?no?code ... --? script ?resultVarName? ?optionVarName?" }, {"concat", Jim_ConcatCoreCommand, 0, -1, "?arg ...?" }, {"continue", Jim_ContinueCoreCommand, 0, 1, "?level?" }, {"dict", Jim_DictCoreCommand, 1, -1, "subcommand ?arg ...?"}, {"env", Jim_EnvCoreCommand, 0, 2, "?varName? ?default?" }, {"error", Jim_ErrorCoreCommand, 1, 2, "message ?stacktrace?" }, {"eval", Jim_EvalCoreCommand, 1, -1, "arg ?arg ...?" }, {"exists", Jim_ExistsCoreCommand, 1, 2, "?-command|-proc|-alias|-channel|-var? name" }, {"exit", Jim_ExitCoreCommand, 0, 1, "?exitCode?" }, #ifdef JIM_COMPAT {"expr", Jim_ExprCoreCommand, 1, -1, "expression ?...?" }, #else {"expr", Jim_ExprCoreCommand, 1, 1, "expression" }, #endif {"for", Jim_ForCoreCommand, 4, 4, "start test next body" }, {"foreach", Jim_ForeachCoreCommand, 3, -1, "varList list ?varList list ...? script" }, {"format", Jim_FormatCoreCommand, 1, -1, "formatString ?arg arg ...?" }, {"global", Jim_GlobalCoreCommand, 1, -1, "varName ?varName ...?" }, {"if", Jim_IfCoreCommand, 2, -1, "condition ?then? trueBody ?elseif ...? ?else? ?falseBody?" }, {"incr", Jim_IncrCoreCommand, 1, 2, "varName ?increment?" }, {"info", Jim_InfoCoreCommand, 1, -1, "subcommand ?arg ...?"}, {"join", Jim_JoinCoreCommand, 1, 2, "list ?joinString?" }, {"lappend", Jim_LappendCoreCommand, 1, -1, "varName ?value value ...?" }, {"lassign", Jim_LassignCoreCommand, 2, -1, "varList list ?varName ...?" }, {"lindex", Jim_LindexCoreCommand, 1, -1, "list ?index ...?" }, {"linsert", Jim_LinsertCoreCommand, 2, -1, "list index ?element ...?" }, {"list", Jim_ListCoreCommand, 0, -1, "?arg ...?" }, {"llength", Jim_LlengthCoreCommand, 1, 1, "list" }, {"lmap", Jim_LmapCoreCommand, 3, -1, "varList list ?varList list ...? script" }, {"local", Jim_LocalCoreCommand, 1, -1, "cmd ?args ...?" }, {"loop", Jim_LoopCoreCommand, 3, 5, "var ?first? limit ?incr? body" }, {"lrange", Jim_LrangeCoreCommand, 3, 3, "list first last" }, {"lrepeat", Jim_LrepeatCoreCommand, 1, -1, "count ?value ...?" }, {"lreplace", Jim_LreplaceCoreCommand, 3, -1, "list first last ?element ...?" }, {"lreverse", Jim_LreverseCoreCommand, 1, 1, "list" }, {"lsearch", Jim_LsearchCoreCommand, 2, -1, "?-exact|-glob|-regexp|-command 'command'? ?-bool|-inline? ?-not? ?-nocase? ?-all? ?-stride len? ?-index val? list value" }, {"lset", Jim_LsetCoreCommand, 2, -1, "listVar ?index ...? value" }, {"lsort", Jim_LsortCoreCommand, 1, -1, "?options? list" }, {"lsubst", Jim_LsubstCoreCommand, 1, 2, "?-line? string" }, {"proc", Jim_ProcCoreCommand, 3, 4, "name arglist ?statics? body" }, {"puts", Jim_PutsCoreCommand, 1, 2, "?-nonewline? string" }, {"rand", Jim_RandCoreCommand, 0, 2, "?min? ?max?" }, {"range", Jim_RangeCoreCommand, 1, 3, "?start? end ?step?" }, {"rename", Jim_RenameCoreCommand, 2, 2, "oldName newName" }, {"return", Jim_ReturnCoreCommand, 0, -1, "?-code code? ?-errorinfo stacktrace? ?-level level? ?result?" }, {"scan", Jim_ScanCoreCommand, 2, -1, "string format ?varName varName ...?" }, {"set", Jim_SetCoreCommand, 1, 2, "varName ?newValue?" }, {"source", Jim_SourceCoreCommand, 1, 1, "fileName", JIM_CMD_NOTAINT }, {"split", Jim_SplitCoreCommand, 1, 2, "string ?splitChars?" }, {"stacktrace", Jim_StacktraceCoreCommand, 0, 2, "?firstlevel? ?lastlevel?" }, {"string", Jim_StringCoreCommand, 1, -1, "subcommand ?arg ...?" }, {"subst", Jim_SubstCoreCommand, 1, 4, "?options? string" }, {"switch", Jim_SwitchCoreCommand, 2, -1, "?options? string pattern body ... ?default body? or pattern body ?pattern body ...?" }, {"tailcall", Jim_TailcallCoreCommand, 0, -1, "?cmd arg ...?" }, {"time", Jim_TimeCoreCommand, 1, 2, "script ?count?" }, {"timerate", Jim_TimerateCoreCommand, 1, 2, "script ?milliseconds?" }, {"try", Jim_TryCoreCommand, 1, -1, "?-?no?code ... --? script ?on|trap codes vars script? ... ?finally script?" }, {"unset", Jim_UnsetCoreCommand, 0, -1, "?-nocomplain? ?--? ?varName ...?"}, {"upcall", Jim_UpcallCoreCommand, 1, -1, "cmd ?args ...?" }, {"uplevel", Jim_UplevelCoreCommand, 1, -1, "?level? command ?arg ...?" }, {"upvar", Jim_UpvarCoreCommand, 2, -1, "?level? otherVar myVar ?otherVar myVar ...?"}, {"while", Jim_WhileCoreCommand, 2, 2, "condition body" }, {"xtrace", Jim_XtraceCoreCommand, 1, 1, "callback" }, #ifdef JIM_REFERENCES {"collect", Jim_CollectCoreCommand, 0, 0, "" }, {"finalize", Jim_FinalizeCoreCommand, 1, 2, "reference ?finalizerProc?" }, {"getref", Jim_GetrefCoreCommand, 1, 1, "reference" }, {"ref", Jim_RefCoreCommand, 2, 3, "string tag ?finalizer?" }, {"setref", Jim_SetrefCoreCommand, 2, 2, "reference newValue" }, #endif #ifdef JIM_TAINT {"taint", Jim_TaintCoreCommand, 1, 1, "varname"}, {"untaint", Jim_UntaintCoreCommand, 1, 1, "varname"}, #endif {NULL, NULL}, }; void Jim_RegisterCoreCommands(Jim_Interp *interp) { const struct jim_core_cmd_def_t *c; for (c = Jim_CoreCommandsTable; c->name; c++) { assert(c->usage); Jim_RegisterCmd(interp, c->name, c->usage, c->minargs, c->maxargs, c->cmdProc, NULL, NULL, c->flags); } } void Jim_MakeErrorMessage(Jim_Interp *interp) { Jim_Obj *argv[2]; argv[0] = Jim_NewStringObj(interp, "errorInfo", -1); argv[1] = interp->result; Jim_EvalObjVector(interp, 2, argv); } static char **JimSortStringTable(const char *const *tablePtr) { int count; char **tablePtrSorted; for (count = 0; tablePtr[count]; count++) { } tablePtrSorted = Jim_Alloc(sizeof(char *) * (count + 1)); memcpy(tablePtrSorted, tablePtr, sizeof(char *) * count); qsort(tablePtrSorted, count, sizeof(char *), qsortCompareStringPointers); tablePtrSorted[count] = NULL; return tablePtrSorted; } static void JimSetFailedEnumResult(Jim_Interp *interp, const char *arg, const char *badtype, const char *prefix, const char *const *tablePtr, const char *name) { char **tablePtrSorted; int i; if (name == NULL) { name = "option"; } Jim_SetResultFormatted(interp, "%s%s \"%s\": must be ", badtype, name, arg); tablePtrSorted = JimSortStringTable(tablePtr); for (i = 0; tablePtrSorted[i]; i++) { if (tablePtrSorted[i + 1] == NULL && i > 0) { Jim_AppendString(interp, Jim_GetResult(interp), "or ", -1); } Jim_AppendStrings(interp, Jim_GetResult(interp), prefix, tablePtrSorted[i], NULL); if (tablePtrSorted[i + 1]) { Jim_AppendString(interp, Jim_GetResult(interp), ", ", -1); } } Jim_Free(tablePtrSorted); } int Jim_CheckShowCommands(Jim_Interp *interp, Jim_Obj *objPtr, const char *const *tablePtr) { if (Jim_CompareStringImmediate(interp, objPtr, "-commands")) { int i; char **tablePtrSorted = JimSortStringTable(tablePtr); Jim_SetResult(interp, Jim_NewListObj(interp, NULL, 0)); for (i = 0; tablePtrSorted[i]; i++) { Jim_ListAppendElement(interp, Jim_GetResult(interp), Jim_NewStringObj(interp, tablePtrSorted[i], -1)); } Jim_Free(tablePtrSorted); return JIM_OK; } return JIM_ERR; } static const Jim_ObjType getEnumObjType = { "get-enum", NULL, NULL, NULL, JIM_TYPE_REFERENCES }; int Jim_GetEnum(Jim_Interp *interp, Jim_Obj *objPtr, const char *const *tablePtr, int *indexPtr, const char *name, int flags) { const char *bad = "bad "; const char *const *entryPtr = NULL; int i; int match = -1; int arglen; const char *arg; if (objPtr->typePtr == &getEnumObjType) { if (objPtr->internalRep.ptrIntValue.ptr == tablePtr && objPtr->internalRep.ptrIntValue.int1 == flags) { *indexPtr = objPtr->internalRep.ptrIntValue.int2; return JIM_OK; } } arg = Jim_GetString(objPtr, &arglen); *indexPtr = -1; for (entryPtr = tablePtr, i = 0; *entryPtr != NULL; entryPtr++, i++) { if (Jim_CompareStringImmediate(interp, objPtr, *entryPtr)) { match = i; goto found; } if (flags & JIM_ENUM_ABBREV) { if (strncmp(arg, *entryPtr, arglen) == 0) { if (*arg == '-' && arglen == 1) { break; } if (match >= 0) { bad = "ambiguous "; goto ambiguous; } match = i; } } } if (match >= 0) { found: Jim_FreeIntRep(interp, objPtr); objPtr->typePtr = &getEnumObjType; objPtr->internalRep.ptrIntValue.ptr = (void *)tablePtr; objPtr->internalRep.ptrIntValue.int1 = flags; objPtr->internalRep.ptrIntValue.int2 = match; *indexPtr = match; return JIM_OK; } ambiguous: if (flags & JIM_ERRMSG) { JimSetFailedEnumResult(interp, arg, bad, "", tablePtr, name); } return JIM_ERR; } int Jim_FindByName(const char *name, const char * const array[], size_t len) { int i; for (i = 0; i < (int)len; i++) { if (array[i] && strcmp(array[i], name) == 0) { return i; } } return -1; } int Jim_IsDict(Jim_Obj *objPtr) { return objPtr->typePtr == &dictObjType; } int Jim_IsList(Jim_Obj *objPtr) { return objPtr->typePtr == &listObjType; } void Jim_SetResultFormatted(Jim_Interp *interp, const char *format, ...) { int len = strlen(format); int extra = 0; int n = 0; const char *params[5]; int nobjparam = 0; Jim_Obj *objparam[5]; char *buf; va_list args; int i; va_start(args, format); for (i = 0; i < len && n < 5; i++) { int l; if (strncmp(format + i, "%s", 2) == 0) { params[n] = va_arg(args, char *); l = strlen(params[n]); } else if (strncmp(format + i, "%#s", 3) == 0) { Jim_Obj *objPtr = va_arg(args, Jim_Obj *); params[n] = Jim_GetString(objPtr, &l); objparam[nobjparam++] = objPtr; Jim_IncrRefCount(objPtr); } else { if (format[i] == '%') { i++; } continue; } n++; extra += l; } len += extra; buf = Jim_Alloc(len + 1); len = snprintf(buf, len + 1, format, params[0], params[1], params[2], params[3], params[4]); va_end(args); Jim_SetResult(interp, Jim_NewStringObjNoAlloc(interp, buf, len)); for (i = 0; i < nobjparam; i++) { Jim_DecrRefCount(interp, objparam[i]); } } int Jim_CheckAbiVersion(Jim_Interp *interp, int abi_version) { if (abi_version != JIM_ABI_VERSION) { Jim_SetResultString(interp, "ABI version mismatch", -1); return JIM_ERR; } return JIM_OK; } #ifndef jim_ext_package int Jim_PackageProvide(Jim_Interp *interp, const char *name, const char *ver, int flags) { return JIM_OK; } #endif #ifndef jim_ext_aio int Jim_AioFilehandle(Jim_Interp *interp, Jim_Obj *fhObj) { return -1; } #endif #include #include static int subcmd_null(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return JIM_OK; } static const jim_subcmd_type dummy_subcmd = { "dummy", NULL, subcmd_null, 0, 0, JIM_MODFLAG_HIDDEN }; static Jim_Obj *subcmd_cmd_list(Jim_Interp *interp, const jim_subcmd_type * ct, const char *sep) { Jim_Obj *listObj = Jim_NewListObj(interp, NULL, 0); Jim_Obj *sortCmd[2]; for (; ct->cmd; ct++) { if (!(ct->flags & JIM_MODFLAG_HIDDEN)) { Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, ct->cmd, -1)); } } sortCmd[0] = Jim_NewStringObj(interp, "lsort", -1); sortCmd[1] = listObj; if (Jim_EvalObjVector(interp, 2, sortCmd) == JIM_OK) { return Jim_ListJoin(interp, Jim_GetResult(interp), sep, strlen(sep)); } return Jim_GetResult(interp); } static void bad_subcmd(Jim_Interp *interp, const jim_subcmd_type * command_table, const char *type, Jim_Obj *cmd, Jim_Obj *subcmd) { Jim_SetResultFormatted(interp, "%#s, %s command \"%#s\": should be %#s", cmd, type, subcmd, subcmd_cmd_list(interp, command_table, ", ")); } static void show_cmd_usage(Jim_Interp *interp, const jim_subcmd_type * command_table, int argc, Jim_Obj *const *argv) { Jim_SetResultFormatted(interp, "Usage: \"%#s command ... \", where command is one of: %#s", argv[0], subcmd_cmd_list(interp, command_table, ", ")); } static void add_cmd_usage(Jim_Interp *interp, const jim_subcmd_type * ct, Jim_Obj *cmd) { if (cmd) { Jim_AppendStrings(interp, Jim_GetResult(interp), Jim_String(cmd), " ", NULL); } Jim_AppendStrings(interp, Jim_GetResult(interp), ct->cmd, NULL); if (ct->args && *ct->args) { Jim_AppendStrings(interp, Jim_GetResult(interp), " ", ct->args, NULL); } } void Jim_SubCmdArgError(Jim_Interp *interp, const jim_subcmd_type * ct, Jim_Obj *subcmd) { Jim_SetResultString(interp, "wrong # args: should be \"", -1); add_cmd_usage(interp, ct, subcmd); Jim_AppendStrings(interp, Jim_GetResult(interp), "\"", NULL); } static const Jim_ObjType subcmdLookupObjType = { "subcmd-lookup", NULL, NULL, NULL, JIM_TYPE_REFERENCES }; const jim_subcmd_type *Jim_ParseSubCmd(Jim_Interp *interp, const jim_subcmd_type * command_table, int argc, Jim_Obj *const *argv) { const jim_subcmd_type *ct; const jim_subcmd_type *partial = 0; int cmdlen; Jim_Obj *cmd; const char *cmdstr; int help = 0; int argsok = 1; if (argc < 2) { Jim_SetResultFormatted(interp, "wrong # args: should be \"%#s command ...\"\n" "Use \"%#s -help ?command?\" for help", argv[0], argv[0]); return 0; } cmd = argv[1]; if (cmd->typePtr == &subcmdLookupObjType) { if (cmd->internalRep.ptrIntValue.ptr == command_table) { ct = command_table + cmd->internalRep.ptrIntValue.int1; goto found; } } if (Jim_CompareStringImmediate(interp, cmd, "-help")) { if (argc == 2) { show_cmd_usage(interp, command_table, argc, argv); return &dummy_subcmd; } help = 1; cmd = argv[2]; } if (Jim_CompareStringImmediate(interp, cmd, "-commands")) { Jim_SetResult(interp, subcmd_cmd_list(interp, command_table, " ")); return &dummy_subcmd; } cmdstr = Jim_GetString(cmd, &cmdlen); for (ct = command_table; ct->cmd; ct++) { if (Jim_CompareStringImmediate(interp, cmd, ct->cmd)) { break; } if (strncmp(cmdstr, ct->cmd, cmdlen) == 0) { if (partial) { if (help) { show_cmd_usage(interp, command_table, argc, argv); return &dummy_subcmd; } bad_subcmd(interp, command_table, "ambiguous", argv[0], argv[1 + help]); return 0; } partial = ct; } continue; } if (partial && !ct->cmd) { ct = partial; } if (!ct->cmd) { if (help) { show_cmd_usage(interp, command_table, argc, argv); return &dummy_subcmd; } bad_subcmd(interp, command_table, "unknown", argv[0], argv[1 + help]); return 0; } if (help) { Jim_SetResultString(interp, "Usage: ", -1); add_cmd_usage(interp, ct, argv[0]); return &dummy_subcmd; } Jim_FreeIntRep(interp, cmd); cmd->typePtr = &subcmdLookupObjType; cmd->internalRep.ptrIntValue.ptr = (void *)command_table; cmd->internalRep.ptrIntValue.int1 = ct - command_table; found: if (argc - 2 < ct->minargs) { argsok = 0; } else if (ct->maxargs >= 0 && argc - 2 > ct->maxargs) { argsok = 0; } else if (ct->maxargs < -1 && (argc - 2) % -ct->maxargs != 0) { argsok = 0; } if (!argsok) { Jim_SetResultString(interp, "wrong # args: should be \"", -1); add_cmd_usage(interp, ct, argv[0]); Jim_AppendStrings(interp, Jim_GetResult(interp), "\"", NULL); return 0; } return ct; } int Jim_CallSubCmd(Jim_Interp *interp, const jim_subcmd_type * ct, int argc, Jim_Obj *const *argv) { int ret = JIM_ERR; if (ct) { if ((ct->flags & JIM_MODFLAG_NOTAINT) && Jim_CheckTaint(interp, JIM_TAINT_ANY)) { ret = JIM_SUBCMD_TAINTED; } else if (ct->flags & JIM_MODFLAG_FULLARGV) { ret = ct->function(interp, argc, argv); } else { ret = ct->function(interp, argc - 2, argv + 2); } if (ret < 0) { if (ret == JIM_SUBCMD_TAINTED) { Jim_SetTaintError(interp, 2, argv); } else { Jim_SubCmdArgError(interp, ct, argv[0]); } ret = JIM_ERR; } } return ret; } int Jim_SubCmdProc(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const jim_subcmd_type *ct = Jim_ParseSubCmd(interp, (const jim_subcmd_type *)Jim_CmdPrivData(interp), argc, argv); return Jim_CallSubCmd(interp, ct, argc, argv); } Jim_Cmd *Jim_RegisterSubCmd(Jim_Interp *interp, const char *cmdname, const jim_subcmd_type *command_table, Jim_DelCmdProc *delProc) { return Jim_RegisterCmd(interp, cmdname, "subcommand ?arg ...?", 1, -1, Jim_SubCmdProc, delProc, (void *)command_table, 0); } #include #include #include #include #include int utf8_fromunicode(char *p, unsigned uc) { if (uc <= 0x7f) { *p = uc; return 1; } else if (uc <= 0x7ff) { *p++ = 0xc0 | ((uc & 0x7c0) >> 6); *p = 0x80 | (uc & 0x3f); return 2; } else if (uc <= 0xffff) { *p++ = 0xe0 | ((uc & 0xf000) >> 12); *p++ = 0x80 | ((uc & 0xfc0) >> 6); *p = 0x80 | (uc & 0x3f); return 3; } else { *p++ = 0xf0 | ((uc & 0x1c0000) >> 18); *p++ = 0x80 | ((uc & 0x3f000) >> 12); *p++ = 0x80 | ((uc & 0xfc0) >> 6); *p = 0x80 | (uc & 0x3f); return 4; } } #include #include #include #define JIM_INTEGER_SPACE 24 #define MAX_FLOAT_WIDTH 320 Jim_Obj *Jim_FormatString(Jim_Interp *interp, Jim_Obj *fmtObjPtr, int objc, Jim_Obj *const *objv) { const char *span, *format, *formatEnd, *msg; int numBytes = 0, objIndex = 0, gotXpg = 0, gotSequential = 0; static const char * const mixedXPG = "cannot mix \"%\" and \"%n$\" conversion specifiers"; static const char * const badIndex[2] = { "not enough arguments for all format specifiers", "\"%n$\" argument index out of range" }; int formatLen; Jim_Obj *resultPtr; char *num_buffer = NULL; int num_buffer_size = 0; span = format = Jim_GetString(fmtObjPtr, &formatLen); formatEnd = format + formatLen; resultPtr = Jim_NewEmptyStringObj(interp); while (format != formatEnd) { char *end; int gotMinus, sawFlag; int gotPrecision, useShort; long width, precision; int newXpg; int ch; int step; int doubleType; char pad = ' '; char spec[2*JIM_INTEGER_SPACE + 12]; char *p; int formatted_chars; int formatted_bytes; const char *formatted_buf; step = utf8_tounicode(format, &ch); format += step; if (ch != '%') { numBytes += step; continue; } if (numBytes) { Jim_AppendString(interp, resultPtr, span, numBytes); numBytes = 0; } step = utf8_tounicode(format, &ch); if (ch == '%') { span = format; numBytes = step; format += step; continue; } newXpg = 0; if (isdigit(ch)) { int position = strtoul(format, &end, 10); if (*end == '$') { newXpg = 1; objIndex = position - 1; format = end + 1; step = utf8_tounicode(format, &ch); } } if (newXpg) { if (gotSequential) { msg = mixedXPG; goto errorMsg; } gotXpg = 1; } else { if (gotXpg) { msg = mixedXPG; goto errorMsg; } gotSequential = 1; } if ((objIndex < 0) || (objIndex >= objc)) { msg = badIndex[gotXpg]; goto errorMsg; } p = spec; *p++ = '%'; gotMinus = 0; sawFlag = 1; do { switch (ch) { case '-': gotMinus = 1; break; case '0': pad = ch; break; case ' ': case '+': case '#': break; default: sawFlag = 0; continue; } *p++ = ch; format += step; step = utf8_tounicode(format, &ch); } while (sawFlag && (p - spec <= 5)); width = 0; if (isdigit(ch)) { width = strtoul(format, &end, 10); format = end; step = utf8_tounicode(format, &ch); } else if (ch == '*') { if (objIndex >= objc - 1) { msg = badIndex[gotXpg]; goto errorMsg; } if (Jim_GetLong(interp, objv[objIndex], &width) != JIM_OK) { goto error; } if (width < 0) { width = -width; if (!gotMinus) { *p++ = '-'; gotMinus = 1; } } objIndex++; format += step; step = utf8_tounicode(format, &ch); } gotPrecision = precision = 0; if (ch == '.') { gotPrecision = 1; format += step; step = utf8_tounicode(format, &ch); } if (isdigit(ch)) { precision = strtol(format, &end, 10); format = end; step = utf8_tounicode(format, &ch); } else if (ch == '*') { if (objIndex >= objc - 1) { msg = badIndex[gotXpg]; goto errorMsg; } if (Jim_GetLong(interp, objv[objIndex], &precision) != JIM_OK) { goto error; } if (precision < 0) { precision = 0; } objIndex++; format += step; step = utf8_tounicode(format, &ch); } useShort = 0; if (ch == 'h') { useShort = 1; format += step; step = utf8_tounicode(format, &ch); } else if (ch == 'l') { format += step; step = utf8_tounicode(format, &ch); if (ch == 'l') { format += step; step = utf8_tounicode(format, &ch); } } format += step; span = format; if (ch == 'i') { ch = 'd'; } doubleType = 0; switch (ch) { case '\0': msg = "format string ended in middle of field specifier"; goto errorMsg; case 's': { formatted_buf = Jim_GetString(objv[objIndex], &formatted_bytes); formatted_chars = Jim_Utf8Length(interp, objv[objIndex]); if (gotPrecision && (precision < formatted_chars)) { formatted_chars = precision; formatted_bytes = utf8_index(formatted_buf, precision); } break; } case 'c': { jim_wide code; if (Jim_GetWide(interp, objv[objIndex], &code) != JIM_OK) { goto error; } formatted_bytes = utf8_getchars(spec, code); formatted_buf = spec; formatted_chars = 1; break; } case 'b': { unsigned jim_wide w; int length; int i; int j; if (Jim_GetWide(interp, objv[objIndex], (jim_wide *)&w) != JIM_OK) { goto error; } length = sizeof(w) * 8; if (num_buffer_size < length + 1) { num_buffer_size = length + 1; num_buffer = Jim_Realloc(num_buffer, num_buffer_size); } j = 0; for (i = length; i > 0; ) { i--; if (w & ((unsigned jim_wide)1 << i)) { num_buffer[j++] = '1'; } else if (j || i == 0) { num_buffer[j++] = '0'; } } num_buffer[j] = 0; formatted_chars = formatted_bytes = j; formatted_buf = num_buffer; break; } case 'e': case 'E': case 'f': case 'g': case 'G': doubleType = 1; case 'd': case 'u': case 'o': case 'x': case 'X': { jim_wide w; double d; int length; if (width) { p += sprintf(p, "%ld", width); } if (gotPrecision) { p += sprintf(p, ".%ld", precision); } if (doubleType) { if (Jim_GetDouble(interp, objv[objIndex], &d) != JIM_OK) { goto error; } length = MAX_FLOAT_WIDTH; } else { if (Jim_GetWide(interp, objv[objIndex], &w) != JIM_OK) { goto error; } length = JIM_INTEGER_SPACE; if (useShort) { if (ch == 'd') { w = (short)w; } else { w = (unsigned short)w; } } *p++ = 'l'; #ifdef HAVE_LONG_LONG if (sizeof(long long) == sizeof(jim_wide)) { *p++ = 'l'; } #endif } *p++ = (char) ch; *p = '\0'; if (width > 10000 || length > 10000 || precision > 10000) { Jim_SetResultString(interp, "format too long", -1); goto error; } if (width > length) { length = width; } if (gotPrecision) { length += precision; } if (num_buffer_size < length + 1) { num_buffer_size = length + 1; num_buffer = Jim_Realloc(num_buffer, num_buffer_size); } if (doubleType) { snprintf(num_buffer, length + 1, spec, d); } else { formatted_bytes = snprintf(num_buffer, length + 1, spec, w); } formatted_chars = formatted_bytes = strlen(num_buffer); formatted_buf = num_buffer; break; } default: { spec[0] = ch; spec[1] = '\0'; Jim_SetResultFormatted(interp, "bad field specifier \"%s\"", spec); goto error; } } if (!gotMinus) { while (formatted_chars < width) { Jim_AppendString(interp, resultPtr, &pad, 1); formatted_chars++; } } Jim_AppendString(interp, resultPtr, formatted_buf, formatted_bytes); while (formatted_chars < width) { Jim_AppendString(interp, resultPtr, &pad, 1); formatted_chars++; } objIndex += gotSequential; } if (numBytes) { Jim_AppendString(interp, resultPtr, span, numBytes); } Jim_Free(num_buffer); return resultPtr; errorMsg: Jim_SetResultString(interp, msg, -1); error: Jim_FreeNewObj(interp, resultPtr); Jim_Free(num_buffer); return NULL; } #if defined(JIM_REGEXP) #include #include #include #include #define REG_MAX_PAREN 100 #define END 0 #define BOL 1 #define EOL 2 #define ANY 3 #define ANYOF 4 #define ANYBUT 5 #define BRANCH 6 #define BACK 7 #define EXACTLY 8 #define NOTHING 9 #define REP 10 #define REPMIN 11 #define REPX 12 #define REPXMIN 13 #define BOLX 14 #define EOLX 15 #define WORDA 16 #define WORDZ 17 #define OPENNC 1000 #define OPEN 1001 #define CLOSENC 2000 #define CLOSE 2001 #define CLOSE_END (CLOSE+REG_MAX_PAREN) #define REG_MAGIC 0xFADED00D #define OP(preg, p) (preg->program[p]) #define NEXT(preg, p) (preg->program[p + 1]) #define OPERAND(p) ((p) + 2) #define FAIL(R,M) { (R)->err = (M); return (M); } #define META "^$.[()|" #define HASWIDTH 1 #define SIMPLE 2 #define SPSTART 4 #define WORST 0 #define MAX_REP_COUNT 1000000 static int reg(regex_t *preg, int paren, int *flagp ); static int regpiece(regex_t *preg, int *flagp ); static int regbranch(regex_t *preg, int *flagp ); static int regatom(regex_t *preg, int *flagp ); static int regnode(regex_t *preg, int op ); static int regnext(regex_t *preg, int p ); static void regc(regex_t *preg, int b ); static int reginsert(regex_t *preg, int op, int size, int opnd ); static void regtail(regex_t *preg, int p, int val); static void regoptail(regex_t *preg, int p, int val ); static int regopsize(regex_t *preg, int p ); static int reg_range_find(const int *string, int c); static const char *str_find(const char *string, int c, int nocase); static int prefix_cmp(const int *prog, int proglen, const char *string, int nocase); #ifdef DEBUG static int regnarrate = 0; static void regdump(regex_t *preg); static const char *regprop( int op ); #endif static int str_is_mult(const char *s) { switch (*s) { case '*': case '+': case '?': return 1; case '{': if (isdigit(UCHAR(s[1]))) { return 1; } break; } return 0; } static int str_int_len(const int *seq) { int n = 0; while (*seq++) { n++; } return n; } static char *reg_expanded_new_pattern(const char *exp) { char *newexp = strdup(exp); char *d = newexp; const char *s = exp; int escape = 0; while (*s) { if (escape) { escape = 0; continue; } else if (*s == '\\') { escape = 1; } else if (strchr(" \t\r\n\f\v", *s)) { s++; continue; } else if (*s == '#') { s++; while (*s && *s != '\n') { s++; } continue; } *d++ = *s++; } *d++ = '\0'; return newexp; } int jim_regcomp(regex_t *preg, const char *exp, int cflags) { int scan; int longest; unsigned len; int flags; #ifdef DEBUG fprintf(stderr, "Compiling: '%s'\n", exp); #endif memset(preg, 0, sizeof(*preg)); if (exp == NULL) FAIL(preg, REG_ERR_NULL_ARGUMENT); if (cflags & REG_EXPANDED) { preg->exp = reg_expanded_new_pattern(exp); exp = preg->exp; } preg->cflags = cflags; preg->regparse = exp; preg->proglen = (strlen(exp) + 1) * 5; preg->program = malloc(preg->proglen * sizeof(int)); if (preg->program == NULL) FAIL(preg, REG_ERR_NOMEM); regc(preg, REG_MAGIC); if (reg(preg, 0, &flags) == 0) { return preg->err; } if (preg->re_nsub >= REG_MAX_PAREN) FAIL(preg,REG_ERR_TOO_BIG); preg->regstart = 0; preg->reganch = 0; preg->regmust = 0; preg->regmlen = 0; scan = 1; if (OP(preg, regnext(preg, scan)) == END) { scan = OPERAND(scan); if (OP(preg, scan) == EXACTLY) { preg->regstart = preg->program[OPERAND(scan)]; } else if (OP(preg, scan) == BOL) preg->reganch++; if (flags&SPSTART) { longest = 0; len = 0; for (; scan != 0; scan = regnext(preg, scan)) { if (OP(preg, scan) == EXACTLY) { int plen = str_int_len(preg->program + OPERAND(scan)); if (plen >= len) { longest = OPERAND(scan); len = plen; } } } preg->regmust = longest; preg->regmlen = len; } } #ifdef DEBUG regdump(preg); #endif return 0; } static int reg(regex_t *preg, int paren, int *flagp ) { int ret; int br; int ender; int parno = 0; int flags; *flagp = HASWIDTH; if (paren) { if (preg->regparse[0] == '?' && preg->regparse[1] == ':') { preg->regparse += 2; parno = -1; } else { parno = ++preg->re_nsub; } ret = regnode(preg, OPEN+parno); } else ret = 0; br = regbranch(preg, &flags); if (br == 0) return 0; if (ret != 0) regtail(preg, ret, br); else ret = br; if (!(flags&HASWIDTH)) *flagp &= ~HASWIDTH; *flagp |= flags&SPSTART; while (*preg->regparse == '|') { preg->regparse++; br = regbranch(preg, &flags); if (br == 0) return 0; regtail(preg, ret, br); if (!(flags&HASWIDTH)) *flagp &= ~HASWIDTH; *flagp |= flags&SPSTART; } ender = regnode(preg, (paren) ? CLOSE+parno : END); regtail(preg, ret, ender); for (br = ret; br != 0; br = regnext(preg, br)) regoptail(preg, br, ender); if (paren && *preg->regparse++ != ')') { preg->err = REG_ERR_UNMATCHED_PAREN; return 0; } else if (!paren && *preg->regparse != '\0') { if (*preg->regparse == ')') { preg->err = REG_ERR_UNMATCHED_PAREN; return 0; } else { preg->err = REG_ERR_JUNK_ON_END; return 0; } } return(ret); } static int regbranch(regex_t *preg, int *flagp ) { int ret; int chain; int latest; int flags; *flagp = WORST; ret = regnode(preg, BRANCH); chain = 0; while (*preg->regparse != '\0' && *preg->regparse != ')' && *preg->regparse != '|') { latest = regpiece(preg, &flags); if (latest == 0) return 0; *flagp |= flags&HASWIDTH; if (chain == 0) { *flagp |= flags&SPSTART; } else { regtail(preg, chain, latest); } chain = latest; } if (chain == 0) (void) regnode(preg, NOTHING); return(ret); } static int regpiece(regex_t *preg, int *flagp) { int ret; char op; int next; int flags; int min; int max; ret = regatom(preg, &flags); if (ret == 0) return 0; if (!str_is_mult(preg->regparse)) { *flagp = flags; return(ret); } op = *preg->regparse; if (!(flags&HASWIDTH) && op != '?') { preg->err = REG_ERR_OPERAND_COULD_BE_EMPTY; return 0; } if (op == '{') { char *end; min = strtoul(preg->regparse + 1, &end, 10); if (end == preg->regparse + 1) { preg->err = REG_ERR_BAD_COUNT; return 0; } if (*end == '}') { max = min; } else if (*end == '\0') { preg->err = REG_ERR_UNMATCHED_BRACES; return 0; } else { preg->regparse = end; max = strtoul(preg->regparse + 1, &end, 10); if (*end != '}') { preg->err = REG_ERR_UNMATCHED_BRACES; return 0; } } if (end == preg->regparse + 1) { max = MAX_REP_COUNT; } else if (max < min || max >= 100) { preg->err = REG_ERR_BAD_COUNT; return 0; } if (min >= 100) { preg->err = REG_ERR_BAD_COUNT; return 0; } preg->regparse = strchr(preg->regparse, '}'); } else { min = (op == '+'); max = (op == '?' ? 1 : MAX_REP_COUNT); } if (preg->regparse[1] == '?') { preg->regparse++; next = reginsert(preg, flags & SIMPLE ? REPMIN : REPXMIN, 5, ret); } else { next = reginsert(preg, flags & SIMPLE ? REP: REPX, 5, ret); } preg->program[ret + 2] = max; preg->program[ret + 3] = min; preg->program[ret + 4] = 0; *flagp = (min) ? (WORST|HASWIDTH) : (WORST|SPSTART); if (!(flags & SIMPLE)) { int back = regnode(preg, BACK); regtail(preg, back, ret); regtail(preg, next, back); } preg->regparse++; if (str_is_mult(preg->regparse)) { preg->err = REG_ERR_NESTED_COUNT; return 0; } return ret; } static void reg_addrange(regex_t *preg, int lower, int upper) { if (lower > upper) { reg_addrange(preg, upper, lower); } regc(preg, upper - lower + 1); regc(preg, lower); } static void reg_addrange_str(regex_t *preg, const char *str) { while (*str) { reg_addrange(preg, *str, *str); str++; } } static int reg_utf8_tounicode_case(const char *s, int *uc, int upper) { int l = utf8_tounicode(s, uc); if (upper) { *uc = utf8_upper(*uc); } return l; } static int hexdigitval(int c) { if (c >= '0' && c <= '9') return c - '0'; if (c >= 'a' && c <= 'f') return c - 'a' + 10; if (c >= 'A' && c <= 'F') return c - 'A' + 10; return -1; } static int parse_hex(const char *s, int n, int *uc) { int val = 0; int k; for (k = 0; k < n; k++) { int c = hexdigitval(*s++); if (c == -1) { break; } val = (val << 4) | c; } if (k) { *uc = val; } return k; } static int reg_decode_escape(const char *s, int *ch) { int n; const char *s0 = s; *ch = *s++; switch (*ch) { case 'b': *ch = '\b'; break; case 'e': *ch = 27; break; case 'f': *ch = '\f'; break; case 'n': *ch = '\n'; break; case 'r': *ch = '\r'; break; case 't': *ch = '\t'; break; case 'v': *ch = '\v'; break; case 'u': if (*s == '{') { n = parse_hex(s + 1, 6, ch); if (n > 0 && s[n + 1] == '}' && *ch >= 0 && *ch <= 0x1fffff) { s += n + 2; } else { *ch = 'u'; } } else if ((n = parse_hex(s, 4, ch)) > 0) { s += n; } break; case 'U': if ((n = parse_hex(s, 8, ch)) > 0) { s += n; } break; case 'x': if ((n = parse_hex(s, 2, ch)) > 0) { s += n; } break; case '\0': s--; *ch = '\\'; break; } return s - s0; } static int regatom(regex_t *preg, int *flagp) { int ret; int flags; int nocase = (preg->cflags & REG_ICASE); int ch; int n = reg_utf8_tounicode_case(preg->regparse, &ch, nocase); *flagp = WORST; preg->regparse += n; switch (ch) { case '^': ret = regnode(preg, BOL); break; case '$': ret = regnode(preg, EOL); break; case '.': ret = regnode(preg, ANY); *flagp |= HASWIDTH|SIMPLE; break; case '[': { const char *pattern = preg->regparse; if (*pattern == '^') { ret = regnode(preg, ANYBUT); pattern++; } else ret = regnode(preg, ANYOF); if (*pattern == ']' || *pattern == '-') { reg_addrange(preg, *pattern, *pattern); pattern++; } while (*pattern != ']') { int start; int end; enum { CC_ALPHA, CC_ALNUM, CC_SPACE, CC_BLANK, CC_UPPER, CC_LOWER, CC_DIGIT, CC_XDIGIT, CC_CNTRL, CC_GRAPH, CC_PRINT, CC_PUNCT, CC_NUM }; int cc; if (!*pattern) { preg->err = REG_ERR_UNMATCHED_BRACKET; return 0; } pattern += reg_utf8_tounicode_case(pattern, &start, nocase); if (start == '\\') { switch (*pattern) { case 's': pattern++; cc = CC_SPACE; goto cc_switch; case 'd': pattern++; cc = CC_DIGIT; goto cc_switch; case 'w': pattern++; reg_addrange(preg, '_', '_'); cc = CC_ALNUM; goto cc_switch; } pattern += reg_decode_escape(pattern, &start); if (start == 0) { preg->err = REG_ERR_NULL_CHAR; return 0; } if (start == '\\' && *pattern == 0) { preg->err = REG_ERR_INVALID_ESCAPE; return 0; } } if (pattern[0] == '-' && pattern[1] && pattern[1] != ']') { pattern += utf8_tounicode(pattern, &end); pattern += reg_utf8_tounicode_case(pattern, &end, nocase); if (end == '\\') { pattern += reg_decode_escape(pattern, &end); if (end == 0) { preg->err = REG_ERR_NULL_CHAR; return 0; } if (end == '\\' && *pattern == 0) { preg->err = REG_ERR_INVALID_ESCAPE; return 0; } } reg_addrange(preg, start, end); continue; } if (start == '[' && pattern[0] == ':') { static const char *character_class[] = { ":alpha:", ":alnum:", ":space:", ":blank:", ":upper:", ":lower:", ":digit:", ":xdigit:", ":cntrl:", ":graph:", ":print:", ":punct:", }; for (cc = 0; cc < CC_NUM; cc++) { n = strlen(character_class[cc]); if (strncmp(pattern, character_class[cc], n) == 0) { if (pattern[n] != ']') { preg->err = REG_ERR_UNMATCHED_BRACKET; return 0; } pattern += n + 1; break; } } if (cc != CC_NUM) { cc_switch: switch (cc) { case CC_ALNUM: reg_addrange(preg, '0', '9'); case CC_ALPHA: if ((preg->cflags & REG_ICASE) == 0) { reg_addrange(preg, 'a', 'z'); } reg_addrange(preg, 'A', 'Z'); break; case CC_SPACE: reg_addrange_str(preg, " \t\r\n\f\v"); break; case CC_BLANK: reg_addrange_str(preg, " \t"); break; case CC_UPPER: reg_addrange(preg, 'A', 'Z'); break; case CC_LOWER: reg_addrange(preg, 'a', 'z'); break; case CC_XDIGIT: reg_addrange(preg, 'a', 'f'); reg_addrange(preg, 'A', 'F'); case CC_DIGIT: reg_addrange(preg, '0', '9'); break; case CC_CNTRL: reg_addrange(preg, 0, 31); reg_addrange(preg, 127, 127); break; case CC_PRINT: reg_addrange(preg, ' ', '~'); break; case CC_GRAPH: reg_addrange(preg, '!', '~'); break; case CC_PUNCT: reg_addrange(preg, '!', '/'); reg_addrange(preg, ':', '@'); reg_addrange(preg, '[', '`'); reg_addrange(preg, '{', '~'); break; } continue; } } reg_addrange(preg, start, start); } regc(preg, '\0'); if (*pattern) { pattern++; } preg->regparse = pattern; *flagp |= HASWIDTH|SIMPLE; } break; case '(': ret = reg(preg, 1, &flags); if (ret == 0) return 0; *flagp |= flags&(HASWIDTH|SPSTART); break; case '\0': case '|': case ')': preg->err = REG_ERR_INTERNAL; return 0; case '\\': ch = *preg->regparse++; switch (ch) { case '\0': preg->err = REG_ERR_INVALID_ESCAPE; return 0; case 'A': ret = regnode(preg, BOLX); break; case 'Z': ret = regnode(preg, EOLX); break; case '<': case 'm': ret = regnode(preg, WORDA); break; case '>': case 'M': ret = regnode(preg, WORDZ); break; case 'd': case 'D': ret = regnode(preg, ch == 'd' ? ANYOF : ANYBUT); reg_addrange(preg, '0', '9'); regc(preg, '\0'); *flagp |= HASWIDTH|SIMPLE; break; case 'w': case 'W': ret = regnode(preg, ch == 'w' ? ANYOF : ANYBUT); if ((preg->cflags & REG_ICASE) == 0) { reg_addrange(preg, 'a', 'z'); } reg_addrange(preg, 'A', 'Z'); reg_addrange(preg, '0', '9'); reg_addrange(preg, '_', '_'); regc(preg, '\0'); *flagp |= HASWIDTH|SIMPLE; break; case 's': case 'S': ret = regnode(preg, ch == 's' ? ANYOF : ANYBUT); reg_addrange_str(preg," \t\r\n\f\v"); regc(preg, '\0'); *flagp |= HASWIDTH|SIMPLE; break; default: preg->regparse--; goto de_fault; } break; de_fault: default: { int added = 0; preg->regparse -= n; if (str_is_mult(preg->regparse)) { preg->err = REG_ERR_COUNT_FOLLOWS_NOTHING; return 0; } ret = regnode(preg, EXACTLY); while (*preg->regparse && strchr(META, *preg->regparse) == NULL && !str_is_mult(preg->regparse)) { n = reg_utf8_tounicode_case(preg->regparse, &ch, (preg->cflags & REG_ICASE)); if (ch == '\\' && preg->regparse[n]) { if (strchr("<>mMwWdDsSAZ", preg->regparse[n])) { break; } n += reg_decode_escape(preg->regparse + n, &ch); if (ch == 0) { preg->err = REG_ERR_NULL_CHAR; return 0; } } if (str_is_mult(&preg->regparse[n])) { if (added) { break; } regc(preg, ch); added++; preg->regparse += n; break; } regc(preg, ch); added++; preg->regparse += n; } regc(preg, '\0'); *flagp |= HASWIDTH; if (added == 1) *flagp |= SIMPLE; break; } break; } return(ret); } static void reg_grow(regex_t *preg, int n) { if (preg->p + n >= preg->proglen) { preg->proglen = (preg->p + n) * 2; preg->program = realloc(preg->program, preg->proglen * sizeof(int)); } } static int regnode(regex_t *preg, int op) { reg_grow(preg, 2); preg->program[preg->p++] = op; preg->program[preg->p++] = 0; return preg->p - 2; } static void regc(regex_t *preg, int b ) { reg_grow(preg, 1); preg->program[preg->p++] = b; } static int reginsert(regex_t *preg, int op, int size, int opnd ) { reg_grow(preg, size); memmove(preg->program + opnd + size, preg->program + opnd, sizeof(int) * (preg->p - opnd)); memset(preg->program + opnd, 0, sizeof(int) * size); preg->program[opnd] = op; preg->p += size; return opnd + size; } static void regtail(regex_t *preg, int p, int val) { int scan; int temp; int offset; scan = p; for (;;) { temp = regnext(preg, scan); if (temp == 0) break; scan = temp; } if (OP(preg, scan) == BACK) offset = scan - val; else offset = val - scan; preg->program[scan + 1] = offset; } static void regoptail(regex_t *preg, int p, int val ) { if (p != 0 && OP(preg, p) == BRANCH) { regtail(preg, OPERAND(p), val); } } static int regtry(regex_t *preg, const char *string ); static int regmatch(regex_t *preg, int prog); static int regrepeat(regex_t *preg, int p, int max); int jim_regexec(regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags) { const char *s; int scan; if (preg == NULL || preg->program == NULL || string == NULL) { return REG_ERR_NULL_ARGUMENT; } if (*preg->program != REG_MAGIC) { return REG_ERR_CORRUPTED; } #ifdef DEBUG fprintf(stderr, "regexec: %s\n", string); regdump(preg); #endif preg->eflags = eflags; preg->pmatch = pmatch; preg->nmatch = nmatch; preg->start = string; for (scan = OPERAND(1); scan != 0; scan += regopsize(preg, scan)) { int op = OP(preg, scan); if (op == END) break; if (op == REPX || op == REPXMIN) preg->program[scan + 4] = 0; } if (preg->regmust != 0) { s = string; while ((s = str_find(s, preg->program[preg->regmust], preg->cflags & REG_ICASE)) != NULL) { if (prefix_cmp(preg->program + preg->regmust, preg->regmlen, s, preg->cflags & REG_ICASE) >= 0) { break; } s++; } if (s == NULL) return REG_NOMATCH; } preg->regbol = string; if (preg->reganch) { if (eflags & REG_NOTBOL) { goto nextline; } while (1) { if (regtry(preg, string)) { return REG_NOERROR; } if (*string) { nextline: if (preg->cflags & REG_NEWLINE_ANCHOR) { string = strchr(string, '\n'); if (string) { preg->regbol = ++string; continue; } } } return REG_NOMATCH; } } s = string; if (preg->regstart != '\0') { while ((s = str_find(s, preg->regstart, preg->cflags & REG_ICASE)) != NULL) { if (regtry(preg, s)) return REG_NOERROR; s++; } } else while (1) { if (regtry(preg, s)) return REG_NOERROR; if (*s == '\0') { break; } else { int c; s += utf8_tounicode(s, &c); } } return REG_NOMATCH; } static int regtry( regex_t *preg, const char *string ) { int i; preg->reginput = string; for (i = 0; i < preg->nmatch; i++) { preg->pmatch[i].rm_so = -1; preg->pmatch[i].rm_eo = -1; } if (regmatch(preg, 1)) { preg->pmatch[0].rm_so = string - preg->start; preg->pmatch[0].rm_eo = preg->reginput - preg->start; return(1); } else return(0); } static int prefix_cmp(const int *prog, int proglen, const char *string, int nocase) { const char *s = string; while (proglen && *s) { int ch; int n = reg_utf8_tounicode_case(s, &ch, nocase); if (ch != *prog) { return -1; } prog++; s += n; proglen--; } if (proglen == 0) { return s - string; } return -1; } static int reg_range_find(const int *range, int c) { while (*range) { if (c >= range[1] && c <= (range[0] + range[1] - 1)) { return 1; } range += 2; } return 0; } static const char *str_find(const char *string, int c, int nocase) { if (nocase) { c = utf8_upper(c); } while (*string) { int ch; int n = reg_utf8_tounicode_case(string, &ch, nocase); if (c == ch) { return string; } string += n; } return NULL; } static int reg_iseol(regex_t *preg, int ch) { if (preg->cflags & REG_NEWLINE_STOP) { return ch == '\0' || ch == '\n'; } else { return ch == '\0'; } } static int regmatchsimplerepeat(regex_t *preg, int scan, int matchmin) { int nextch = '\0'; const char *save; int no; int c; int max = preg->program[scan + 2]; int min = preg->program[scan + 3]; int next = regnext(preg, scan); if (OP(preg, next) == EXACTLY) { nextch = preg->program[OPERAND(next)]; } save = preg->reginput; no = regrepeat(preg, scan + 5, max); if (no < min) { return 0; } if (matchmin) { max = no; no = min; } while (1) { if (matchmin) { if (no > max) { break; } } else { if (no < min) { break; } } preg->reginput = save + utf8_index(save, no); reg_utf8_tounicode_case(preg->reginput, &c, (preg->cflags & REG_ICASE)); if (reg_iseol(preg, nextch) || c == nextch) { if (regmatch(preg, next)) { return(1); } } if (matchmin) { no++; } else { no--; } } return(0); } static int regmatchrepeat(regex_t *preg, int scan, int matchmin) { int *scanpt = preg->program + scan; int max = scanpt[2]; int min = scanpt[3]; if (scanpt[4] < min) { scanpt[4]++; if (regmatch(preg, scan + 5)) { return 1; } scanpt[4]--; return 0; } if (scanpt[4] > max) { return 0; } if (matchmin) { if (regmatch(preg, regnext(preg, scan))) { return 1; } scanpt[4]++; if (regmatch(preg, scan + 5)) { return 1; } scanpt[4]--; return 0; } if (scanpt[4] < max) { scanpt[4]++; if (regmatch(preg, scan + 5)) { return 1; } scanpt[4]--; } return regmatch(preg, regnext(preg, scan)); } static int regmatch(regex_t *preg, int prog) { int scan; int next; const char *save; scan = prog; #ifdef DEBUG if (scan != 0 && regnarrate) fprintf(stderr, "%s(\n", regprop(scan)); #endif while (scan != 0) { int n; int c; #ifdef DEBUG if (regnarrate) { fprintf(stderr, "%3d: %s...\n", scan, regprop(OP(preg, scan))); } #endif next = regnext(preg, scan); n = reg_utf8_tounicode_case(preg->reginput, &c, (preg->cflags & REG_ICASE)); switch (OP(preg, scan)) { case BOLX: if ((preg->eflags & REG_NOTBOL)) { return(0); } case BOL: if (preg->reginput != preg->regbol) { return(0); } break; case EOLX: if (c != 0) { return 0; } break; case EOL: if (!reg_iseol(preg, c)) { return(0); } break; case WORDA: if ((!isalnum(UCHAR(c))) && c != '_') return(0); if (preg->reginput > preg->regbol && (isalnum(UCHAR(preg->reginput[-1])) || preg->reginput[-1] == '_')) return(0); break; case WORDZ: if (preg->reginput > preg->regbol) { if (reg_iseol(preg, c) || !(isalnum(UCHAR(c)) || c == '_')) { c = preg->reginput[-1]; if (isalnum(UCHAR(c)) || c == '_') { break; } } } return(0); case ANY: if (reg_iseol(preg, c)) return 0; preg->reginput += n; break; case EXACTLY: { int opnd; int len; int slen; opnd = OPERAND(scan); len = str_int_len(preg->program + opnd); slen = prefix_cmp(preg->program + opnd, len, preg->reginput, preg->cflags & REG_ICASE); if (slen < 0) { return(0); } preg->reginput += slen; } break; case ANYOF: if (reg_iseol(preg, c) || reg_range_find(preg->program + OPERAND(scan), c) == 0) { return(0); } preg->reginput += n; break; case ANYBUT: if (reg_iseol(preg, c) || reg_range_find(preg->program + OPERAND(scan), c) != 0) { return(0); } preg->reginput += n; break; case NOTHING: break; case BACK: break; case BRANCH: if (OP(preg, next) != BRANCH) next = OPERAND(scan); else { do { save = preg->reginput; if (regmatch(preg, OPERAND(scan))) { return(1); } preg->reginput = save; scan = regnext(preg, scan); } while (scan != 0 && OP(preg, scan) == BRANCH); return(0); } break; case REP: case REPMIN: return regmatchsimplerepeat(preg, scan, OP(preg, scan) == REPMIN); case REPX: case REPXMIN: return regmatchrepeat(preg, scan, OP(preg, scan) == REPXMIN); case END: return 1; case OPENNC: case CLOSENC: return regmatch(preg, next); default: if (OP(preg, scan) >= OPEN+1 && OP(preg, scan) < CLOSE_END) { save = preg->reginput; if (regmatch(preg, next)) { if (OP(preg, scan) < CLOSE) { int no = OP(preg, scan) - OPEN; if (no < preg->nmatch && preg->pmatch[no].rm_so == -1) { preg->pmatch[no].rm_so = save - preg->start; } } else { int no = OP(preg, scan) - CLOSE; if (no < preg->nmatch && preg->pmatch[no].rm_eo == -1) { preg->pmatch[no].rm_eo = save - preg->start; } } return(1); } preg->reginput = save; return(0); } return REG_ERR_INTERNAL; } scan = next; } return REG_ERR_INTERNAL; } static int regrepeat(regex_t *preg, int p, int max) { int count = 0; const char *scan; int opnd; int ch; int n; scan = preg->reginput; opnd = OPERAND(p); switch (OP(preg, p)) { case ANY: while (!reg_iseol(preg, *scan) && count < max) { count++; scan += utf8_charlen(*scan); } break; case EXACTLY: while (count < max) { n = reg_utf8_tounicode_case(scan, &ch, preg->cflags & REG_ICASE); if (preg->program[opnd] != ch) { break; } count++; scan += n; } break; case ANYOF: while (count < max) { n = reg_utf8_tounicode_case(scan, &ch, preg->cflags & REG_ICASE); if (reg_iseol(preg, ch) || reg_range_find(preg->program + opnd, ch) == 0) { break; } count++; scan += n; } break; case ANYBUT: while (count < max) { n = reg_utf8_tounicode_case(scan, &ch, preg->cflags & REG_ICASE); if (reg_iseol(preg, ch) || reg_range_find(preg->program + opnd, ch) != 0) { break; } count++; scan += n; } break; default: preg->err = REG_ERR_INTERNAL; count = 0; break; } preg->reginput = scan; return(count); } static int regnext(regex_t *preg, int p ) { int offset; offset = NEXT(preg, p); if (offset == 0) return 0; if (OP(preg, p) == BACK) return(p-offset); else return(p+offset); } static int regopsize(regex_t *preg, int p ) { switch (OP(preg, p)) { case REP: case REPMIN: case REPX: case REPXMIN: return 5; case ANYOF: case ANYBUT: case EXACTLY: { int s = p + 2; while (preg->program[s++]) { } return s - p; } } return 2; } size_t jim_regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size) { static const char *error_strings[] = { "success", "no match", "bad pattern", "null argument", "unknown error", "too big", "out of memory", "too many ()", "parentheses () not balanced", "braces {} not balanced", "invalid repetition count(s)", "extra characters", "*+ of empty atom", "nested count", "internal error", "count follows nothing", "invalid escape \\ sequence", "corrupted program", "contains null char", "brackets [] not balanced", }; const char *err; if (errcode < 0 || errcode >= REG_ERR_NUM) { err = "Bad error code"; } else { err = error_strings[errcode]; } return snprintf(errbuf, errbuf_size, "%s", err); } void jim_regfree(regex_t *preg) { free(preg->exp); free(preg->program); } #endif #include void Jim_SetResultErrno(Jim_Interp *interp, const char *msg) { Jim_SetResultFormatted(interp, "%s: %s", msg, strerror(Jim_Errno())); } #if defined(_WIN32) || defined(WIN32) #include int Jim_Errno(void) { switch (GetLastError()) { case ERROR_FILE_NOT_FOUND: return ENOENT; case ERROR_PATH_NOT_FOUND: return ENOENT; case ERROR_TOO_MANY_OPEN_FILES: return EMFILE; case ERROR_ACCESS_DENIED: return EACCES; case ERROR_INVALID_HANDLE: return EBADF; case ERROR_BAD_ENVIRONMENT: return E2BIG; case ERROR_BAD_FORMAT: return ENOEXEC; case ERROR_INVALID_ACCESS: return EACCES; case ERROR_INVALID_DRIVE: return ENOENT; case ERROR_CURRENT_DIRECTORY: return EACCES; case ERROR_NOT_SAME_DEVICE: return EXDEV; case ERROR_NO_MORE_FILES: return ENOENT; case ERROR_WRITE_PROTECT: return EROFS; case ERROR_BAD_UNIT: return ENXIO; case ERROR_NOT_READY: return EBUSY; case ERROR_BAD_COMMAND: return EIO; case ERROR_CRC: return EIO; case ERROR_BAD_LENGTH: return EIO; case ERROR_SEEK: return EIO; case ERROR_WRITE_FAULT: return EIO; case ERROR_READ_FAULT: return EIO; case ERROR_GEN_FAILURE: return EIO; case ERROR_SHARING_VIOLATION: return EACCES; case ERROR_LOCK_VIOLATION: return EACCES; case ERROR_SHARING_BUFFER_EXCEEDED: return ENFILE; case ERROR_HANDLE_DISK_FULL: return ENOSPC; case ERROR_NOT_SUPPORTED: return ENODEV; case ERROR_REM_NOT_LIST: return EBUSY; case ERROR_DUP_NAME: return EEXIST; case ERROR_BAD_NETPATH: return ENOENT; case ERROR_NETWORK_BUSY: return EBUSY; case ERROR_DEV_NOT_EXIST: return ENODEV; case ERROR_TOO_MANY_CMDS: return EAGAIN; case ERROR_ADAP_HDW_ERR: return EIO; case ERROR_BAD_NET_RESP: return EIO; case ERROR_UNEXP_NET_ERR: return EIO; case ERROR_NETNAME_DELETED: return ENOENT; case ERROR_NETWORK_ACCESS_DENIED: return EACCES; case ERROR_BAD_DEV_TYPE: return ENODEV; case ERROR_BAD_NET_NAME: return ENOENT; case ERROR_TOO_MANY_NAMES: return ENFILE; case ERROR_TOO_MANY_SESS: return EIO; case ERROR_SHARING_PAUSED: return EAGAIN; case ERROR_REDIR_PAUSED: return EAGAIN; case ERROR_FILE_EXISTS: return EEXIST; case ERROR_CANNOT_MAKE: return ENOSPC; case ERROR_OUT_OF_STRUCTURES: return ENFILE; case ERROR_ALREADY_ASSIGNED: return EEXIST; case ERROR_INVALID_PASSWORD: return EPERM; case ERROR_NET_WRITE_FAULT: return EIO; case ERROR_NO_PROC_SLOTS: return EAGAIN; case ERROR_DISK_CHANGE: return EXDEV; case ERROR_BROKEN_PIPE: return EPIPE; case ERROR_OPEN_FAILED: return ENOENT; case ERROR_DISK_FULL: return ENOSPC; case ERROR_NO_MORE_SEARCH_HANDLES: return EMFILE; case ERROR_INVALID_TARGET_HANDLE: return EBADF; case ERROR_INVALID_NAME: return ENOENT; case ERROR_PROC_NOT_FOUND: return ESRCH; case ERROR_WAIT_NO_CHILDREN: return ECHILD; case ERROR_CHILD_NOT_COMPLETE: return ECHILD; case ERROR_DIRECT_ACCESS_HANDLE: return EBADF; case ERROR_SEEK_ON_DEVICE: return ESPIPE; case ERROR_BUSY_DRIVE: return EAGAIN; case ERROR_DIR_NOT_EMPTY: return EEXIST; case ERROR_NOT_LOCKED: return EACCES; case ERROR_BAD_PATHNAME: return ENOENT; case ERROR_LOCK_FAILED: return EACCES; case ERROR_ALREADY_EXISTS: return EEXIST; case ERROR_FILENAME_EXCED_RANGE: return ENAMETOOLONG; case ERROR_BAD_PIPE: return EPIPE; case ERROR_PIPE_BUSY: return EAGAIN; case ERROR_PIPE_NOT_CONNECTED: return EPIPE; case ERROR_DIRECTORY: return ENOTDIR; } return EINVAL; } long JimProcessPid(phandle_t pid) { if (pid == INVALID_HANDLE_VALUE) { return -1; } return GetProcessId(pid); } phandle_t JimWaitPid(long pid, int *status, int nohang) { if (pid > 0) { HANDLE h = OpenProcess(PROCESS_QUERY_INFORMATION | SYNCHRONIZE, FALSE, pid); if (h) { long pid = waitpid(h, status, nohang); CloseHandle(h); if (pid > 0) { return h; } } } return JIM_BAD_PHANDLE; } long waitpid(phandle_t phandle, int *status, int nohang) { long pid; DWORD ret = WaitForSingleObject(phandle, nohang ? 0 : INFINITE); if (ret == WAIT_TIMEOUT || ret == WAIT_FAILED) { return -1; } GetExitCodeProcess(phandle, &ret); *status = ret; pid = GetProcessId(phandle); CloseHandle(phandle); return pid; } int Jim_MakeTempFile(Jim_Interp *interp, const char *filename_template, int unlink_file) { char name[MAX_PATH]; HANDLE handle; if (!GetTempPath(MAX_PATH, name) || !GetTempFileName(name, filename_template ? filename_template : "JIM", 0, name)) { return -1; } handle = CreateFile(name, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_TEMPORARY | (unlink_file ? FILE_FLAG_DELETE_ON_CLOSE : 0), NULL); if (handle == INVALID_HANDLE_VALUE) { goto error; } Jim_SetResultString(interp, name, -1); return _open_osfhandle((intptr_t)handle, _O_RDWR | _O_TEXT); error: Jim_SetResultErrno(interp, name); DeleteFile(name); return -1; } int Jim_OpenForWrite(const char *filename, int append) { if (strcmp(filename, "/dev/null") == 0) { filename = "nul:"; } int fd = _open(filename, _O_WRONLY | _O_CREAT | _O_TEXT | (append ? _O_APPEND : _O_TRUNC), _S_IREAD | _S_IWRITE); if (fd >= 0 && append) { _lseek(fd, 0L, SEEK_END); } return fd; } int Jim_OpenForRead(const char *filename) { if (strcmp(filename, "/dev/null") == 0) { filename = "nul:"; } return _open(filename, _O_RDONLY | _O_TEXT, 0); } #elif defined(HAVE_UNISTD_H) int Jim_MakeTempFile(Jim_Interp *interp, const char *filename_template, int unlink_file) { int fd; #ifdef HAVE_UMASK mode_t mask; #endif Jim_Obj *filenameObj; if (filename_template == NULL) { const char *tmpdir = getenv("TMPDIR"); if (tmpdir == NULL || *tmpdir == '\0' || access(tmpdir, W_OK) != 0) { tmpdir = "/tmp/"; } filenameObj = Jim_NewStringObj(interp, tmpdir, -1); if (tmpdir[0] && tmpdir[strlen(tmpdir) - 1] != '/') { Jim_AppendString(interp, filenameObj, "/", 1); } Jim_AppendString(interp, filenameObj, "tcl.tmp.XXXXXX", -1); } else { filenameObj = Jim_NewStringObj(interp, filename_template, -1); } #ifdef HAVE_UMASK mask = umask(S_IXUSR | S_IRWXG | S_IRWXO); #endif #ifdef HAVE_MKSTEMP fd = mkstemp(filenameObj->bytes); #else if (mktemp(filenameObj->bytes) == NULL) { fd = -1; } else { fd = open(filenameObj->bytes, O_RDWR | O_CREAT | O_TRUNC); } #endif #ifdef HAVE_UMASK umask(mask); #endif if (fd < 0) { Jim_SetResultErrno(interp, Jim_String(filenameObj)); Jim_FreeNewObj(interp, filenameObj); return -1; } if (unlink_file) { remove(Jim_String(filenameObj)); } Jim_SetResult(interp, filenameObj); return fd; } int Jim_OpenForWrite(const char *filename, int append) { return open(filename, O_WRONLY | O_CREAT | (append ? O_APPEND : O_TRUNC), 0666); } int Jim_OpenForRead(const char *filename) { return open(filename, O_RDONLY, 0); } #endif #if defined(_WIN32) || defined(WIN32) #ifndef STRICT #define STRICT #endif #define WIN32_LEAN_AND_MEAN #include #if defined(HAVE_DLOPEN_COMPAT) void *dlopen(const char *path, int mode) { JIM_NOTUSED(mode); return (void *)LoadLibraryA(path); } int dlclose(void *handle) { FreeLibrary((HANDLE)handle); return 0; } void *dlsym(void *handle, const char *symbol) { return GetProcAddress((HMODULE)handle, symbol); } char *dlerror(void) { static char msg[121]; FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), LANG_NEUTRAL, msg, sizeof(msg) - 1, NULL); return msg; } #endif #ifdef _MSC_VER #include int gettimeofday(struct timeval *tv, void *unused) { struct _timeb tb; _ftime(&tb); tv->tv_sec = tb.time; tv->tv_usec = tb.millitm * 1000; return 0; } DIR *opendir(const char *name) { DIR *dir = 0; if (name && name[0]) { size_t base_length = strlen(name); const char *all = strchr("/\\", name[base_length - 1]) ? "*" : "/*"; if ((dir = (DIR *) Jim_Alloc(sizeof *dir)) != 0 && (dir->name = (char *)Jim_Alloc(base_length + strlen(all) + 1)) != 0) { strcat(strcpy(dir->name, name), all); if ((dir->handle = (long)_findfirst(dir->name, &dir->info)) != -1) dir->result.d_name = 0; else { Jim_Free(dir->name); Jim_Free(dir); dir = 0; } } else { Jim_Free(dir); dir = 0; errno = ENOMEM; } } else { errno = EINVAL; } return dir; } int closedir(DIR * dir) { int result = -1; if (dir) { if (dir->handle != -1) result = _findclose(dir->handle); Jim_Free(dir->name); Jim_Free(dir); } if (result == -1) errno = EBADF; return result; } struct dirent *readdir(DIR * dir) { struct dirent *result = 0; if (dir && dir->handle != -1) { if (!dir->result.d_name || _findnext(dir->handle, &dir->info) != -1) { result = &dir->result; result->d_name = dir->info.name; } } else { errno = EBADF; } return result; } #endif #endif #include #include #ifndef SIGPIPE #define SIGPIPE 13 #endif #ifndef SIGINT #define SIGINT 2 #endif const char *Jim_SignalId(int sig) { static char buf[10]; switch (sig) { case SIGINT: return "SIGINT"; case SIGPIPE: return "SIGPIPE"; } snprintf(buf, sizeof(buf), "%d", sig); return buf; } #ifndef JIM_BOOTSTRAP_LIB_ONLY #include #include #include #ifdef USE_LINENOISE #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_SYS_STAT_H #include #endif #include "linenoise.h" #else #define MAX_LINE_LEN 512 #endif #ifdef USE_LINENOISE struct JimCompletionInfo { Jim_Interp *interp; Jim_Obj *completion_command; Jim_Obj *hints_command; }; static struct JimCompletionInfo *JimGetCompletionInfo(Jim_Interp *interp); static void JimCompletionCallback(const char *prefix, linenoiseCompletions *comp, void *userdata); static const char completion_callback_assoc_key[] = "interactive-completion"; static char *JimHintsCallback(const char *prefix, int *color, int *bold, void *userdata); static void JimFreeHintsCallback(void *hint, void *userdata); #endif char *Jim_HistoryGetline(Jim_Interp *interp, const char *prompt) { #ifdef USE_LINENOISE struct JimCompletionInfo *compinfo = JimGetCompletionInfo(interp); char *result; Jim_Obj *objPtr; long mlmode = 0; if (compinfo->completion_command) { linenoiseSetCompletionCallback(JimCompletionCallback, compinfo); } if (compinfo->hints_command) { linenoiseSetHintsCallback(JimHintsCallback, compinfo); linenoiseSetFreeHintsCallback(JimFreeHintsCallback); } objPtr = Jim_GetVariableStr(interp, "history::multiline", JIM_NONE); if (objPtr && Jim_GetLong(interp, objPtr, &mlmode) == JIM_NONE) { linenoiseSetMultiLine(mlmode); } result = linenoise(prompt); linenoiseSetCompletionCallback(NULL, NULL); linenoiseSetHintsCallback(NULL, NULL); linenoiseSetFreeHintsCallback(NULL); return result; #else int len; char *line = Jim_Alloc(MAX_LINE_LEN); fputs(prompt, stdout); fflush(stdout); if (fgets(line, MAX_LINE_LEN, stdin) == NULL) { Jim_Free(line); return NULL; } len = strlen(line); if (len && line[len - 1] == '\n') { line[len - 1] = '\0'; } return line; #endif } void Jim_HistoryLoad(const char *filename) { #ifdef USE_LINENOISE linenoiseHistoryLoad(filename); #endif } void Jim_HistoryAdd(const char *line) { #ifdef USE_LINENOISE linenoiseHistoryAdd(line); #endif } void Jim_HistorySave(const char *filename) { #ifdef USE_LINENOISE #ifdef HAVE_UMASK mode_t mask; mask = umask(S_IXUSR | S_IRWXG | S_IRWXO); #endif linenoiseHistorySave(filename); #ifdef HAVE_UMASK umask(mask); #endif #endif } void Jim_HistoryShow(void) { #ifdef USE_LINENOISE int i; int len; char **history = linenoiseHistory(&len); for (i = 0; i < len; i++) { printf("%4d %s\n", i + 1, history[i]); } #endif } void Jim_HistorySetMaxLen(int length) { #ifdef USE_LINENOISE linenoiseHistorySetMaxLen(length); #endif } int Jim_HistoryGetMaxLen(void) { #ifdef USE_LINENOISE return linenoiseHistoryGetMaxLen(); #endif return 0; } #ifdef USE_LINENOISE static void JimCompletionCallback(const char *prefix, linenoiseCompletions *comp, void *userdata) { struct JimCompletionInfo *info = (struct JimCompletionInfo *)userdata; Jim_Obj *objv[2]; int ret; objv[0] = info->completion_command; objv[1] = Jim_NewStringObj(info->interp, prefix, -1); ret = Jim_EvalObjVector(info->interp, 2, objv); if (ret == JIM_OK) { int i; Jim_Obj *listObj = Jim_GetResult(info->interp); int len = Jim_ListLength(info->interp, listObj); for (i = 0; i < len; i++) { linenoiseAddCompletion(comp, Jim_String(Jim_ListGetIndex(info->interp, listObj, i))); } } } static char *JimHintsCallback(const char *prefix, int *color, int *bold, void *userdata) { struct JimCompletionInfo *info = (struct JimCompletionInfo *)userdata; Jim_Obj *objv[2]; int ret; char *result = NULL; objv[0] = info->hints_command; objv[1] = Jim_NewStringObj(info->interp, prefix, -1); ret = Jim_EvalObjVector(info->interp, 2, objv); if (ret == JIM_OK) { Jim_Obj *listObj = Jim_GetResult(info->interp); Jim_IncrRefCount(listObj); int len = Jim_ListLength(info->interp, listObj); if (len >= 1) { long x; result = Jim_StrDup(Jim_String(Jim_ListGetIndex(info->interp, listObj, 0))); if (len >= 2 && Jim_GetLong(info->interp, Jim_ListGetIndex(info->interp, listObj, 1), &x) == JIM_OK) { *color = x; } if (len >= 3 && Jim_GetLong(info->interp, Jim_ListGetIndex(info->interp, listObj, 2), &x) == JIM_OK) { *bold = x; } } Jim_DecrRefCount(info->interp, listObj); } return result; } static void JimFreeHintsCallback(void *hint, void *userdata) { Jim_Free(hint); } static void JimHistoryFreeCompletion(Jim_Interp *interp, void *data) { struct JimCompletionInfo *compinfo = data; if (compinfo->completion_command) { Jim_DecrRefCount(interp, compinfo->completion_command); } if (compinfo->hints_command) { Jim_DecrRefCount(interp, compinfo->hints_command); } Jim_Free(compinfo); } static struct JimCompletionInfo *JimGetCompletionInfo(Jim_Interp *interp) { struct JimCompletionInfo *compinfo = Jim_GetAssocData(interp, completion_callback_assoc_key); if (compinfo == NULL) { compinfo = Jim_Alloc(sizeof(*compinfo)); compinfo->interp = interp; compinfo->completion_command = NULL; compinfo->hints_command = NULL; Jim_SetAssocData(interp, completion_callback_assoc_key, JimHistoryFreeCompletion, compinfo); } return compinfo; } #endif void Jim_HistorySetCompletion(Jim_Interp *interp, Jim_Obj *completionCommandObj) { #ifdef USE_LINENOISE struct JimCompletionInfo *compinfo = JimGetCompletionInfo(interp); if (completionCommandObj) { Jim_IncrRefCount(completionCommandObj); } if (compinfo->completion_command) { Jim_DecrRefCount(interp, compinfo->completion_command); } compinfo->completion_command = completionCommandObj; #endif } void Jim_HistorySetHints(Jim_Interp *interp, Jim_Obj *hintsCommandObj) { #ifdef USE_LINENOISE struct JimCompletionInfo *compinfo = JimGetCompletionInfo(interp); if (hintsCommandObj) { Jim_IncrRefCount(hintsCommandObj); } if (compinfo->hints_command) { Jim_DecrRefCount(interp, compinfo->hints_command); } compinfo->hints_command = hintsCommandObj; #endif } int Jim_InteractivePrompt(Jim_Interp *interp) { int retcode = JIM_OK; char *history_file = NULL; #ifdef USE_LINENOISE const char *home; home = getenv("HOME"); if (home && isatty(STDIN_FILENO)) { int history_len = strlen(home) + sizeof("/.jim_history"); history_file = Jim_Alloc(history_len); snprintf(history_file, history_len, "%s/.jim_history", home); Jim_HistoryLoad(history_file); } Jim_HistorySetCompletion(interp, Jim_NewStringObj(interp, "tcl::autocomplete", -1)); Jim_HistorySetHints(interp, Jim_NewStringObj(interp, "tcl::stdhint", -1)); #endif printf("Welcome to Jim version %d.%d\n", JIM_VERSION / 100, JIM_VERSION % 100); Jim_SetVariableStrWithStr(interp, JIM_INTERACTIVE, "1"); while (1) { Jim_Obj *scriptObjPtr; const char *result; int reslen; char prompt[20]; if (retcode != JIM_OK) { const char *retcodestr = Jim_ReturnCode(retcode); if (*retcodestr == '?') { snprintf(prompt, sizeof(prompt) - 3, "[%d] . ", retcode); } else { snprintf(prompt, sizeof(prompt) - 3, "[%s] . ", retcodestr); } } else { strcpy(prompt, ". "); } scriptObjPtr = Jim_NewStringObj(interp, "", 0); Jim_IncrRefCount(scriptObjPtr); while (1) { char state; char *line; line = Jim_HistoryGetline(interp, prompt); if (line == NULL) { if (errno == EINTR) { continue; } Jim_DecrRefCount(interp, scriptObjPtr); retcode = JIM_OK; goto out; } if (Jim_Length(scriptObjPtr) != 0) { Jim_AppendString(interp, scriptObjPtr, "\n", 1); } Jim_AppendString(interp, scriptObjPtr, line, -1); Jim_Free(line); if (Jim_ScriptIsComplete(interp, scriptObjPtr, &state)) break; snprintf(prompt, sizeof(prompt), "%c> ", state); } #ifdef USE_LINENOISE if (strcmp(Jim_String(scriptObjPtr), "h") == 0) { Jim_HistoryShow(); Jim_DecrRefCount(interp, scriptObjPtr); continue; } Jim_HistoryAdd(Jim_String(scriptObjPtr)); if (history_file) { Jim_HistorySave(history_file); } #endif retcode = Jim_EvalObj(interp, scriptObjPtr); Jim_DecrRefCount(interp, scriptObjPtr); if (retcode == JIM_EXIT) { break; } if (retcode == JIM_ERR) { Jim_MakeErrorMessage(interp); } result = Jim_GetString(Jim_GetResult(interp), &reslen); if (reslen) { if (fwrite(result, reslen, 1, stdout) == 0) { } putchar('\n'); } } out: Jim_Free(history_file); return retcode; } #include #include #include extern int Jim_initjimshInit(Jim_Interp *interp); static void JimSetArgv(Jim_Interp *interp, int argc, char *const argv[]) { int n; Jim_Obj *listObj = Jim_NewListObj(interp, NULL, 0); for (n = 0; n < argc; n++) { Jim_Obj *obj = Jim_NewStringObj(interp, argv[n], -1); Jim_ListAppendElement(interp, listObj, obj); } Jim_SetVariableStr(interp, "argv", listObj); Jim_SetVariableStr(interp, "argc", Jim_NewIntObj(interp, argc)); } static void JimPrintErrorMessage(Jim_Interp *interp) { Jim_MakeErrorMessage(interp); fprintf(stderr, "%s\n", Jim_String(Jim_GetResult(interp))); } void usage(const char* executable_name) { printf("jimsh version %d.%d\n", JIM_VERSION / 100, JIM_VERSION % 100); printf("Usage: %s\n", executable_name); printf("or : %s [options] [filename]\n", executable_name); printf("\n"); printf("Without options: Interactive mode\n"); printf("\n"); printf("Options:\n"); printf(" --version : prints the version string\n"); printf(" --help : prints this text\n"); printf(" -e CMD : executes command CMD\n"); printf(" NOTE: all subsequent options will be passed as arguments to the command\n"); printf(" [filename|-] : executes the script contained in the named file, or from stdin if \"-\"\n"); printf(" NOTE: all subsequent options will be passed to the script\n\n"); } int main(int argc, char *const argv[]) { int retcode; Jim_Interp *interp; char *const orig_argv0 = argv[0]; if (argc > 1 && strcmp(argv[1], "--version") == 0) { printf("%d.%d\n", JIM_VERSION / 100, JIM_VERSION % 100); return 0; } else if (argc > 1 && strcmp(argv[1], "--help") == 0) { usage(argv[0]); return 0; } interp = Jim_CreateInterp(); Jim_RegisterCoreCommands(interp); if (Jim_InitStaticExtensions(interp) != JIM_OK) { JimPrintErrorMessage(interp); } Jim_SetVariableStrWithStr(interp, "jim::argv0", orig_argv0); Jim_SetVariableStrWithStr(interp, JIM_INTERACTIVE, argc == 1 ? "1" : "0"); #ifdef USE_LINENOISE Jim_SetVariableStrWithStr(interp, "jim::lineedit", "1"); #else Jim_SetVariableStrWithStr(interp, "jim::lineedit", "0"); #endif retcode = Jim_initjimshInit(interp); if (argc == 1) { if (retcode == JIM_ERR) { JimPrintErrorMessage(interp); } if (retcode != JIM_EXIT) { JimSetArgv(interp, 0, NULL); if (!isatty(STDIN_FILENO)) { goto eval_stdin; } retcode = Jim_InteractivePrompt(interp); } } else { if (argc > 2 && strcmp(argv[1], "-e") == 0) { JimSetArgv(interp, argc - 3, argv + 3); retcode = Jim_Eval(interp, argv[2]); if (retcode != JIM_ERR) { int len; const char *msg = Jim_GetString(Jim_GetResult(interp), &len); if (fwrite(msg, len, 1, stdout) == 0) { } putchar('\n'); } } else { Jim_SetVariableStr(interp, "argv0", Jim_NewStringObj(interp, argv[1], -1)); JimSetArgv(interp, argc - 2, argv + 2); if (strcmp(argv[1], "-") == 0) { eval_stdin: retcode = Jim_Eval(interp, "eval [info source [stdin read] stdin 1]"); } else { retcode = Jim_EvalFile(interp, argv[1]); } } if (retcode == JIM_ERR) { JimPrintErrorMessage(interp); } } if (retcode == JIM_EXIT) { retcode = Jim_GetExitCode(interp); } else if (retcode == JIM_ERR) { retcode = 1; } else { retcode = 0; } Jim_FreeInterp(interp); return retcode; } #endif jimtcl-0.84/autosetup/local.tcl000066400000000000000000000202621522604140100165530ustar00rootroot00000000000000global withinfo global extdb # Final determination of module status dict set extdb status {} # Returns 1 if the extension has the attribute proc ext-has {ext attr} { expr {$attr in [dict get $::extdb attrs $ext]} } # Returns an entry from the extension 'info' table, or $default otherwise proc ext-get {ext key {default {}}} { if {[dict exists $::extdb info $ext $key]} { return [dict get $::extdb info $ext $key] } else { return $default } } # Set the status of the extension to the given value, and returns the value proc ext-set-status {ext value} { dict set ::extdb status $ext $value return $value } # Returns the status of the extension, or ? if unknown proc ext-get-status {ext} { if {[dict exists $::extdb status $ext]} { return [dict get $::extdb status $ext] } return ? } proc check-extension-status {ext required {asmodule 0}} { global withinfo set status [ext-get-status $ext] if {$ext in $withinfo(without)} { # Disabled without further ado msg-result "Extension $ext...disabled" return [ext-set-status $ext n] } if {$status in {m y n}} { return $status } # required is "required" if this extension *must* be enabled # required is "wanted" if it is not fatal for this extension # not to be enabled array set depinfo {m 0 y 0 n 0} # Stash the current value of LIBS set LIBS [get-define LIBS] set use_pkgconfig 0 set pkgconfig [ext-get $ext pkg-config] if {$pkgconfig ne ""} { # pkg-config support is optional, so explicitly initialise it here if {[pkg-config-init 0]} { # Check for at least one set of alternates foreach pinfo [split $pkgconfig |] { set ok 1 set pkgs {} foreach pkg [split $pinfo ,] { set args [lassign $pkg pkgname] set pkg [string trim $pkg] set optional 0 if {[string match {*[*]} $pkg]} { # This package is optional set optional 1 set pkg [string range $pkg 0 end-1] } if {![pkg-config $pkg {*}$args]} { if {!$optional} { set ok 0 break } } else { lappend pkgs $pkg } } if {$ok} { set use_pkgconfig 1 break } } } } if {!$use_pkgconfig} { # Check direct dependencies if [ext-get $ext check 1] { # "check" conditions are met } else { # not met incr depinfo(n) } } # asmodule=1 means that the parent is a module so # any automatically selected dependencies should also be modules if {$asmodule == 0 && $ext in $withinfo(mod)} { set asmodule 1 } if {$asmodule} { # This is a module, so ignore LIBS # LDLIBS_$ext will contain the appropriate libs for this module define LIBS $LIBS } if {$depinfo(n) == 0} { # Now extension dependencies foreach i [ext-get $ext dep] { set status [check-extension-status $i $required $asmodule] #puts "$ext: dep $i $required => $status" incr depinfo($status) if {$depinfo(n)} { break } } } #parray depinfo if {$depinfo(n)} { msg-checking "Extension $ext..." if {$required eq "required"} { user-error "dependencies not met" } msg-result "disabled (dependencies)" return [ext-set-status $ext n] } # Selected as a module directly or because of a parent dependency? if {$asmodule} { if {[ext-has $ext tcl]} { # Easy, a Tcl module msg-result "Extension $ext...tcl" } elseif {[ext-has $ext static]} { user-error "Extension $ext can't be a module" } else { msg-result "Extension $ext...module" if {$use_pkgconfig} { add-pkgconfig-deps $ext $pkgs $asmodule } else { foreach i [ext-get $ext libdep] { define-append LDLIBS_$ext [get-define $i ""] } } } return [ext-set-status $ext m] } # Selected as a static extension? if {[ext-has $ext shared]} { user-error "Extension $ext can only be selected as a module" } elseif {$ext in $withinfo(ext) || $required eq "$required"} { msg-result "Extension $ext...enabled" } elseif {$ext in $withinfo(maybe)} { msg-result "Extension $ext...enabled (default)" } else { # Could be selected, but isn't (yet) return [ext-set-status $ext x] } if {$use_pkgconfig} { add-pkgconfig-deps $ext $pkgs $asmodule } else { foreach i [ext-get $ext libdep] { define-append LDLIBS [get-define $i ""] } } return [ext-set-status $ext y] } # Add dependencies for a pkg-config module to the extension proc add-pkgconfig-deps {ext pkgs asmodule} { foreach pkg $pkgs { if {$asmodule} { define-append LDLIBS_$ext [pkg-config-get $pkg LIBS] } else { define-append LDLIBS [pkg-config-get $pkg LIBS] } define-append LDFLAGS [pkg-config-get $pkg LDFLAGS] define-append AS_CFLAGS [pkg-config-get $pkg CFLAGS] define-append PKG_CONFIG_REQUIRES $pkg } } # Examines the user options (the $withinfo array) # and the extension database ($extdb) to determine # what is selected, and in what way. # # If $allextmod is 1, extensions that would normally be disabled # are enabled as modules if their prerequisites are met # # The results are available via ext-get-status # And a dictionary is returned containing four keys: # static-c extensions which are static C # static-tcl extensions which are static Tcl # module-c extensions which are C modules # module-tcl extensions which are Tcl modules proc check-extensions {allextmod} { global extdb withinfo # Check valid extension names foreach i [concat $withinfo(ext) $withinfo(mod)] { if {![dict exists $extdb attrs $i]} { user-error "Unknown extension: $i" } } set extlist [lsort [dict keys [dict get $extdb attrs]]] set withinfo(maybe) {} set withinfo(maybemod) {} # Now work out the default status. We have. # normal case: include !off, !optional if possible # --without=default: only include always foreach i $extlist { if {$withinfo(nodefault)} { if {[ext-has $i always]} { lappend withinfo(maybe) $i } continue } if {[ext-has $i off]} { if {$allextmod} { lappend withinfo(maybemod) $i } continue } if {[ext-has $i optional] && !$withinfo(optional)} { if {$allextmod} { lappend withinfo(maybemod) $i } continue } lappend withinfo(maybe) $i } foreach i $extlist { define LDLIBS_$i "" } foreach i [concat $withinfo(ext) $withinfo(mod)] { check-extension-status $i required } foreach i $withinfo(maybe) { check-extension-status $i wanted } foreach i $withinfo(maybemod) { check-extension-status $i wanted 1 } array set extinfo {static-c {} static-tcl {} module-c {} module-tcl {}} foreach i $extlist { set status [ext-get-status $i] set tcl [ext-has $i tcl] switch $status,$tcl { y,1 { define jim_ext_$i lappend extinfo(static-tcl) $i } y,0 { define jim_ext_$i lappend extinfo(static-c) $i # If there are any static C++ extensions, jimsh must be linked using # the C++ compiler if {[ext-has $i cpp]} { define HAVE_CXX_EXTENSIONS } } m,1 { lappend extinfo(module-tcl) $i } m,0 { lappend extinfo(module-c) $i } } } return [array get extinfo] } jimtcl-0.84/autosetup/pkg-config.tcl000066400000000000000000000120451522604140100175050ustar00rootroot00000000000000# Copyright (c) 2016 WorkWare Systems http://www.workware.net.au/ # All rights reserved # @synopsis: # # The 'pkg-config' module allows package information to be found via 'pkg-config'. # # If not cross-compiling, the package path should be determined automatically # by 'pkg-config'. # If cross-compiling, the default package path is the compiler sysroot. # If the C compiler doesn't support '-print-sysroot', the path can be supplied # by the '--sysroot' option or by defining 'SYSROOT'. # # 'PKG_CONFIG' may be set to use an alternative to 'pkg-config'. use cc options { sysroot:dir => "Override compiler sysroot for pkg-config search path" } # @pkg-config-init ?required? # # Initialises the 'pkg-config' system. Unless '$required' is set to 0, # it is a fatal error if a usable 'pkg-config' is not found . # # This command will normally be called automatically as required, # but it may be invoked explicitly if lack of 'pkg-config' is acceptable. # # Returns 1 if ok, or 0 if 'pkg-config' not found/usable (only if '$required' is 0). # proc pkg-config-init {{required 1}} { if {[is-defined HAVE_PKG_CONFIG]} { return [get-define HAVE_PKG_CONFIG] } set found 0 define PKG_CONFIG [get-env PKG_CONFIG pkg-config] msg-checking "Checking for pkg-config..." if {[catch {exec [get-define PKG_CONFIG] --version} version]} { msg-result "[get-define PKG_CONFIG] (not found)" if {$required} { user-error "No usable pkg-config" } } else { msg-result $version define PKG_CONFIG_VERSION $version set found 1 if {[opt-str sysroot o]} { define SYSROOT [file-normalize $o] msg-result "Using specified sysroot [get-define SYSROOT]" } elseif {[get-define build] ne [get-define host]} { if {[catch {exec-with-stderr {*}[get-define CC] -print-sysroot} result errinfo] == 0} { # Use the compiler sysroot, if there is one define SYSROOT $result msg-result "Found compiler sysroot $result" } else { configlog "[get-define CC] -print-sysroot: $result" set msg "pkg-config: Cross compiling, but no compiler sysroot and no --sysroot supplied" if {$required} { user-error $msg } else { msg-result $msg } set found 0 } } if {[is-defined SYSROOT]} { set sysroot [get-define SYSROOT] # XXX: It's possible that these should be set only when invoking pkg-config global env set env(PKG_CONFIG_DIR) "" # Supposedly setting PKG_CONFIG_LIBDIR means that PKG_CONFIG_PATH is ignored, # but it doesn't seem to work that way in practice set env(PKG_CONFIG_PATH) "" # Do we need to try /usr/local as well or instead? set env(PKG_CONFIG_LIBDIR) $sysroot/usr/lib/pkgconfig:$sysroot/usr/share/pkgconfig set env(PKG_CONFIG_SYSROOT_DIR) $sysroot } } define HAVE_PKG_CONFIG $found return $found } # @pkg-config module ?requirements? # # Use 'pkg-config' to find the given module meeting the given requirements. # e.g. # ## pkg-config pango >= 1.37.0 # # If found, returns 1 and sets 'HAVE_PKG_PANGO' to 1 along with: # ## PKG_PANGO_VERSION to the found version ## PKG_PANGO_LIBS to the required libs (--libs-only-l) ## PKG_PANGO_LDFLAGS to the required linker flags (--libs-only-L) ## PKG_PANGO_CFLAGS to the required compiler flags (--cflags) # # If not found, returns 0. # proc pkg-config {module args} { set ok [pkg-config-init] msg-checking "Checking for $module $args..." if {!$ok} { msg-result "no pkg-config" return 0 } set pkgconfig [get-define PKG_CONFIG] set ret [catch {exec $pkgconfig --modversion "$module $args"} version] configlog "$pkgconfig --modversion $module $args: $version" if {$ret} { msg-result "not found" return 0 } # Sometimes --modversion succeeds but because of dependencies it isn't usable # This seems to show up with --cflags set ret [catch {exec $pkgconfig --cflags $module} cflags] if {$ret} { msg-result "unusable ($version - see config.log)" configlog "$pkgconfig --cflags $module" configlog $cflags return 0 } msg-result $version set prefix [feature-define-name $module PKG_] define HAVE_${prefix} define ${prefix}_VERSION $version define ${prefix}_CFLAGS $cflags define ${prefix}_LIBS [exec $pkgconfig --libs-only-l $module] define ${prefix}_LDFLAGS [exec $pkgconfig --libs-only-L $module] return 1 } # @pkg-config-get module setting # # Convenience access to the results of 'pkg-config'. # # For example, '[pkg-config-get pango CFLAGS]' returns # the value of 'PKG_PANGO_CFLAGS', or '""' if not defined. proc pkg-config-get {module name} { set prefix [feature-define-name $module PKG_] get-define ${prefix}_${name} "" } # @pkg-config-get-var module variable # # Return the value of the given variable from the given pkg-config module. # The module must already have been successfully detected with pkg-config. # e.g. # ## if {[pkg-config harfbuzz >= 2.5]} { ## define harfbuzz_libdir [pkg-config-get-var harfbuzz libdir] ## } # # Returns the empty string if the variable isn't defined. proc pkg-config-get-var {module variable} { set pkgconfig [get-define PKG_CONFIG] set prefix [feature-define-name $module HAVE_PKG_] exec $pkgconfig $module --variable $variable } jimtcl-0.84/autosetup/system.tcl000066400000000000000000000271701522604140100170120ustar00rootroot00000000000000# Copyright (c) 2010 WorkWare Systems http://www.workware.net.au/ # All rights reserved # @synopsis: # # This module supports common system interrogation and options # such as '--host', '--build', '--prefix', and setting 'srcdir', 'builddir', and 'EXEEXT'. # # It also support the "feature" naming convention, where searching # for a feature such as 'sys/type.h' defines 'HAVE_SYS_TYPES_H'. # # It defines the following variables, based on '--prefix' unless overridden by the user: # ## datadir ## sysconfdir ## sharedstatedir ## localstatedir ## infodir ## mandir ## includedir # # If '--prefix' is not supplied, it defaults to '/usr/local' unless 'options-defaults { prefix ... }' is used *before* # including the 'system' module. if {[is-defined defaultprefix]} { user-notice "Note: defaultprefix is deprecated. Use options-defaults to set default options" options-defaults [list prefix [get-define defaultprefix]] } options { host:host-alias => {a complete or partial cpu-vendor-opsys for the system where the application will run (defaults to the same value as --build)} build:build-alias => {a complete or partial cpu-vendor-opsys for the system where the application will be built (defaults to the result of running config.guess)} prefix:dir=/usr/local => {the target directory for the build (default: '@default@')} # These (hidden) options are supported for autoconf/automake compatibility exec-prefix: bindir: sbindir: includedir: mandir: infodir: libexecdir: datadir: libdir: sysconfdir: sharedstatedir: localstatedir: runstatedir: maintainer-mode=0 dependency-tracking=0 silent-rules=0 program-prefix: program-suffix: program-transform-name: x-includes: x-libraries: } # @check-feature name { script } # # defines feature '$name' to the return value of '$script', # which should be 1 if found or 0 if not found. # # e.g. the following will define 'HAVE_CONST' to 0 or 1. # ## check-feature const { ## cctest -code {const int _x = 0;} ## } proc check-feature {name code} { msg-checking "Checking for $name..." set r [uplevel 1 $code] define-feature $name $r if {$r} { msg-result "ok" } else { msg-result "not found" } return $r } # @have-feature name ?default=0? # # Returns the value of feature '$name' if defined, or '$default' if not. # # See 'feature-define-name' for how the "feature" name # is translated into the "define" name. # proc have-feature {name {default 0}} { get-define [feature-define-name $name] $default } # @define-feature name ?value=1? # # Sets the feature 'define' to '$value'. # # See 'feature-define-name' for how the "feature" name # is translated into the "define" name. # proc define-feature {name {value 1}} { define [feature-define-name $name] $value } # @feature-checked name # # Returns 1 if feature '$name' has been checked, whether true or not. # proc feature-checked {name} { is-defined [feature-define-name $name] } # @feature-define-name name ?prefix=HAVE_? # # Converts a "feature" name to the corresponding "define", # e.g. 'sys/stat.h' becomes 'HAVE_SYS_STAT_H'. # # Converts '*' to 'P' and all non-alphanumeric to underscore. # proc feature-define-name {name {prefix HAVE_}} { string toupper $prefix[regsub -all {[^a-zA-Z0-9]} [regsub -all {[*]} $name p] _] } # @write-if-changed filename contents ?script? # # If '$filename' doesn't exist, or it's contents are different to '$contents', # the file is written and '$script' is evaluated. # # Otherwise a "file is unchanged" message is displayed. proc write-if-changed {file buf {script {}}} { set old [readfile $file ""] if {$old eq $buf && [file exists $file]} { msg-result "$file is unchanged" } else { writefile $file $buf\n uplevel 1 $script } } # @include-file infile mapping # # The core of make-template, called recursively for each @include # directive found within that template so that this proc's result # is the fully-expanded template. # # The mapping parameter is how we expand @varname@ within the template. # We do that inline within this step only for @include directives which # can have variables in the filename arg. A separate substitution pass # happens when this recursive function returns, expanding the rest of # the variables. # proc include-file {infile mapping} { # A stack of true/false conditions, one for each nested conditional # starting with "true" set condstack {1} set result {} set linenum 0 foreach line [split [readfile $infile] \n] { incr linenum if {[regexp {^@(if|else|endif)(\s*)(.*)} $line -> condtype condspace condargs]} { if {$condtype eq "if"} { if {[string length $condspace] == 0} { autosetup-error "$infile:$linenum: Invalid expression: $line" } if {[llength $condargs] == 1} { # ABC => [get-define ABC] ni {0 ""} # !ABC => [get-define ABC] in {0 ""} lassign $condargs condvar if {[regexp {^!(.*)} $condvar -> condvar]} { set op in } else { set op ni } set condexpr "\[[list get-define $condvar]\] $op {0 {}}" } else { # Translate alphanumeric ABC into [get-define ABC] and leave the # rest of the expression untouched regsub -all {([A-Z][[:alnum:]_]*)} $condargs {[get-define \1]} condexpr } if {[catch [list expr $condexpr] condval]} { dputs $condval autosetup-error "$infile:$linenum: Invalid expression: $line" } dputs "@$condtype: $condexpr => $condval" } if {$condtype ne "if"} { if {[llength $condstack] <= 1} { autosetup-error "$infile:$linenum: Error: @$condtype missing @if" } elseif {[string length $condargs] && [string index $condargs 0] ne "#"} { autosetup-error "$infile:$linenum: Error: Extra arguments after @$condtype" } } switch -exact $condtype { if { # push condval lappend condstack $condval } else { # Toggle the last entry set condval [lpop condstack] set condval [expr {!$condval}] lappend condstack $condval } endif { if {[llength $condstack] == 0} { user-notice "$infile:$linenum: Error: @endif missing @if" } lpop condstack } } continue } # Only continue if the stack contains all "true" if {"0" in $condstack} { continue } if {[regexp {^@include\s+(.*)} $line -> filearg]} { set incfile [string map $mapping $filearg] if {[file exists $incfile]} { lappend ::autosetup(deps) [file-normalize $incfile] lappend result {*}[include-file $incfile $mapping] } else { user-error "$infile:$linenum: Include file $incfile is missing" } continue } if {[regexp {^@define\s+(\w+)\s+(.*)} $line -> var val]} { define $var $val continue } lappend result $line } return $result } # @make-template template ?outfile? # # Reads the input file '/$template' and writes the output file '$outfile' # (unless unchanged). # If '$outfile' is blank/omitted, '$template' should end with '.in' which # is removed to create the output file name. # # Each pattern of the form '@define@' is replaced with the corresponding # "define", if it exists, or left unchanged if not. # # The special value '@srcdir@' is substituted with the relative # path to the source directory from the directory where the output # file is created, while the special value '@top_srcdir@' is substituted # with the relative path to the top level source directory. # # Conditional sections may be specified as follows: ## @if NAME eq "value" ## lines ## @else ## lines ## @endif # # Where 'NAME' is a defined variable name and '@else' is optional. # Note that variables names *must* start with an uppercase letter. # If the expression does not match, all lines through '@endif' are ignored. # # The alternative forms may also be used: ## @if NAME (true if the variable is defined, but not empty and not "0") ## @if !NAME (opposite of the form above) ## @if # # In the general Tcl expression, any words beginning with an uppercase letter # are translated into [get-define NAME] # # Expressions may be nested # proc make-template {template {out {}}} { set infile [file join $::autosetup(srcdir) $template] if {![file exists $infile]} { user-error "Template $template is missing" } # Define this as late as possible define AUTODEPS $::autosetup(deps) if {$out eq ""} { if {[file ext $template] ne ".in"} { autosetup-error "make_template $template has no target file and can't guess" } set out [file rootname $template] } set outdir [file dirname $out] # Make sure the directory exists file mkdir $outdir # Set up srcdir and top_srcdir to be relative to the target dir define srcdir [relative-path [file join $::autosetup(srcdir) $outdir] $outdir] define top_srcdir [relative-path $::autosetup(srcdir) $outdir] # Build map from global defines to their values so they can be # substituted into @include file names. proc build-define-mapping {} { set mapping {} foreach {n v} [array get ::define] { lappend mapping @$n@ $v } return $mapping } set mapping [build-define-mapping] set result [include-file $infile $mapping] # Rebuild the define mapping in case we ran across @define # directives in the template or a file it @included, then # apply that mapping to the expanded template. set mapping [build-define-mapping] write-if-changed $out [string map $mapping [join $result \n]] { msg-result "Created [relative-path $out] from [relative-path $template]" } } proc system-init {} { global autosetup # build/host tuples and cross-compilation prefix opt-str build build "" define build_alias $build if {$build eq ""} { define build [config_guess] } else { define build [config_sub $build] } opt-str host host "" define host_alias $host if {$host eq ""} { define host [get-define build] set cross "" } else { define host [config_sub $host] set cross $host- } define cross [get-env CROSS $cross] # build/host _cpu, _vendor and _os foreach type {build host} { set v [get-define $type] if {![regexp {^([^-]+)-([^-]+)-(.*)$} $v -> cpu vendor os]} { user-error "Invalid canonical $type: $v" } define ${type}_cpu $cpu define ${type}_vendor $vendor define ${type}_os $os } opt-str prefix prefix /usr/local # These are for compatibility with autoconf define target [get-define host] define prefix $prefix define builddir $autosetup(builddir) define srcdir $autosetup(srcdir) define top_srcdir $autosetup(srcdir) define abs_top_srcdir [file-normalize $autosetup(srcdir)] define abs_top_builddir [file-normalize $autosetup(builddir)] # autoconf supports all of these define exec_prefix [opt-str exec-prefix exec_prefix $prefix] foreach {name defpath} { bindir /bin sbindir /sbin libexecdir /libexec libdir /lib } { define $name [opt-str $name o $exec_prefix$defpath] } foreach {name defpath} { datadir /share sharedstatedir /com infodir /share/info mandir /share/man includedir /include } { define $name [opt-str $name o $prefix$defpath] } if {$prefix ne {/usr}} { opt-str sysconfdir sysconfdir $prefix/etc } else { opt-str sysconfdir sysconfdir /etc } define sysconfdir $sysconfdir define localstatedir [opt-str localstatedir o /var] define runstatedir [opt-str runstatedir o /run] define SHELL [get-env SHELL [find-an-executable sh bash ksh]] # These could be used to generate Makefiles following some automake conventions define AM_SILENT_RULES [opt-bool silent-rules] define AM_MAINTAINER_MODE [opt-bool maintainer-mode] define AM_DEPENDENCY_TRACKING [opt-bool dependency-tracking] # Windows vs. non-Windows switch -glob -- [get-define host] { *-*-ming* - *-*-cygwin - *-*-msys { define-feature windows define EXEEXT .exe } default { define EXEEXT "" } } # Display msg-result "Host System...[get-define host]" msg-result "Build System...[get-define build]" } system-init jimtcl-0.84/autosetup/tmake.auto000066400000000000000000000037521522604140100167550ustar00rootroot00000000000000# Copyright (c) 2016 WorkWare Systems http://www.workware.net.au/ # All rights reserved # Auto-load module for 'tmake' build system integration use init autosetup_add_init_type tmake "Tcl-based tmake build system" { autosetup_check_create auto.def \ {# Initial auto.def created by 'autosetup --init=tmake' # vim:set syntax=tcl: use cc cc-lib cc-db cc-shared use tmake # Add any user options here # Really want a --configure that takes over the rest of the command line options { } cc-check-tools ar ranlib set objdir [get-env BUILDDIR objdir] make-config-header $objdir/include/autoconf.h make-tmake-settings $objdir/settings.conf {[A-Z]*} *dir lib_* } autosetup_check_create project.spec \ {# Initial project.spec created by 'autosetup --init=tmake' tmake-require-version 0.7.3 # vim:set syntax=tcl: define? DESTDIR _install # XXX If configure creates additional/different files than include/autoconf.h # that should be reflected here Autosetup include/autoconf.h # e.g. for autoconf.h IncludePaths include ifconfig !CONFIGURED { # Not configured, so don't process subdirs AutoSubDirs off # And don't process this file any further ifconfig false } } set configure [readfile configure] # XXX Do we need also need to support a system install of tmake? if {[string first {#@TMAKEUPDATED@} $configure] < 0} { if {[regsub {#@@INITCHECK@@#} $configure \ {test -z "$TMAKE" -a -x "$dir/tmake" \&\& exec "$dir/tmake" --force --configure "$@"; #@TMAKEUPDATED@} configure]} { writefile configure $configure\n exec chmod +x configure puts "Updated configure to invoke local tmake." if {![file exec autosetup/tmake]} { puts "Warning: autosetup/tmake is missing." puts " Install it with: tmake --install=autosetup" } } else { puts "Warning: configure isn't created by a recent autosetup, not updating." } } else { puts "I see configure for tmake already exists." } if {![file exists build.spec]} { puts "Note: I don't see build.spec. Try running: tmake --genie" } } jimtcl-0.84/autosetup/tmake.tcl000066400000000000000000000022711522604140100165620ustar00rootroot00000000000000# Copyright (c) 2011 WorkWare Systems http://www.workware.net.au/ # All rights reserved # @synopsis: # # The 'tmake' module makes it easy to support the tmake build system. # # The following variables are set: # ## CONFIGURED - to indicate that the project is configured use system options {} define CONFIGURED # @make-tmake-settings outfile patterns ... # # Examines all defined variables which match the given patterns (defaults to '*') # and writes a tmake-compatible .conf file defining those variables. # For example, if 'ABC' is '"3 monkeys"' and 'ABC' matches a pattern, then the file will include: # ## define ABC {3 monkeys} # # If the file would be unchanged, it is not written. # # Typical usage is: # ## make-tmake-settings [get-env BUILDDIR objdir]/settings.conf {[A-Z]*} proc make-tmake-settings {file args} { file mkdir [file dirname $file] set lines {} if {[llength $args] == 0} { set args * } foreach n [lsort [dict keys [all-defines]]] { foreach p $args { if {[string match $p $n]} { set value [get-define $n] lappend lines "define $n [list $value]" break } } } set buf [join $lines \n] write-if-changed $file $buf { msg-result "Created $file" } } jimtcl-0.84/bench.tcl000066400000000000000000000416121522604140100145110ustar00rootroot00000000000000set batchmode 0 set benchmarks {} # Run each benchmark for this long (ms) # Can be changed with the -time parameter set benchtime 1000 # If the timerate command doesn't exist, implement it in Tcl if {[info commands timerate] eq ""} { proc timerate {script {ms 1000}} { set start [clock micros] set stop [expr {$start + $ms * 1000}] set count 0 while {1} { uplevel 1 $script incr count set now [clock micros] if {$now >= $stop} { break } } set elapsed [expr {$now - $start}] # Now try to account for the Tcl overhead set start [clock micros] set n 0 while {1} { uplevel 1 {} incr n set now [clock micros] if {$n >= $count} { break } } set elapsed [expr {$elapsed - ($now - $start)}] list us_per_iter [expr {1.0 * $elapsed / $count}] iters_per_sec [expr {1e6 * $count / $elapsed}] \ count $count elapsed_us $elapsed } } proc format_us_time {us} { set units {2 {ps 1e6} 1 {ns 1e3} 0 {us 1} -1 {ms 1e-3} -2 {s 1e-6}} if {$us >= 1e8} { # >= 100 seconds return [format "%.0fs" [expr {$us / 1e6}]] } # Avoid using log10 here in case math functions aren't enabled # How many digits to the left of the decimal place? lassign [split [format %e $us] e] - exp # Work around Tcl's stupid auto-octal detection set exp [regsub -all {([-+])(0+)?(\d)} $exp {\1\3}] set leftdigits [expr {$exp + 1}] #set leftdigits [expr {int(floor(log10($us)) + 1)}] #puts "$leftdigits1 $leftdigits" # Work out how much to shift by, in increments of 10^3 set shift3 [expr {(-$leftdigits / 3) + 1}] set shift [expr {$shift3 * 3}] # Always show 3 significant digits set decimals [expr {3 - ($leftdigits + $shift)}] lassign [dict get $units $shift3] name mult set value [expr {$us * $mult}] return [format "%.${decimals}f%s" $value $name] } proc bench {title script} { global benchmarks batchmode set Title [string range "$title " 0 20] catch {collect} set failed [catch {timerate $script $::benchtime} res] if {$failed} { if {!$batchmode} {puts "$Title - This test can't run on this interpreter ($res)"} lappend benchmarks $title F } else { set us [dict get $res us_per_iter] set count [dict get $res count] set ms [expr {$us / 1000}] lappend benchmarks $title $ms if {!$batchmode} { puts "$Title - [format_us_time $us] per iteration" } } catch { collect } } ### BUSY LOOP ################################################################## proc whilebusyloop {n} { set i 0 while {$i < $n} { set a $i incr i } } proc forbusyloop {n} { for {set i 0} {$i < $n} {incr i} { set a $i } } proc loopbusyloop {n} { loop i 0 $n { set a $i } } ### FIBONACCI ################################################################## proc fibonacci {x} { if {$x <= 1} { expr 1 } else { expr {[fibonacci [expr {$x-1}]] + [fibonacci [expr {$x-2}]]} } } ### HEAPSORT ################################################################### set IM 139968 set IA 3877 set IC 29573 set last 42 proc make_gen_random {} { global IM IA IC set params [list IM $IM IA $IA IC $IC] set body [string map $params { global last expr {($max * [set last [expr {($last * IA + IC) % IM}]]) / IM} }] proc gen_random {max} $body } proc heapsort {ra_name} { upvar 1 $ra_name ra set n [llength $ra] set l [expr {$n / 2}] set ir [expr {$n - 1}] while 1 { if {$l} { set rra [lindex $ra [incr l -1]] } else { set rra [lindex $ra $ir] lset ra $ir [lindex $ra 0] if {[incr ir -1] == 0} { lset ra 0 $rra break } } set i $l set j [expr {(2 * $l) + 1}] while {$j <= $ir} { set tmp [lindex $ra $j] if {$j < $ir} { if {$tmp < [lindex $ra [expr {$j + 1}]]} { set tmp [lindex $ra [incr j]] } } if {$rra >= $tmp} { break } lset ra $i $tmp incr j [set i $j] } lset ra $i $rra } } proc heapsort_main {n} { make_gen_random set data {} for {set i 1} {$i <= $n} {incr i} { lappend data [gen_random 1.0] } heapsort data } ### SIEVE ###################################################################### proc sieve {num} { while {$num > 0} { incr num -1 set count 0 for {set i 2} {$i <= 8192} {incr i} { set flags($i) 1 } for {set i 2} {$i <= 8192} {incr i} { if {$flags($i) == 1} { # remove all multiples of prime: i for {set k [expr {$i+$i}]} {$k <= 8192} {incr k $i} { set flags($k) 0 } incr count } } } return $count } proc sieve_dict {num} { while {$num > 0} { incr num -1 set count 0 for {set i 2} {$i <= 8192} {incr i} { dict set flags $i 1 } for {set i 2} {$i <= 8192} {incr i} { if {[dict get $flags $i] == 1} { # remove all multiples of prime: i for {set k [expr {$i+$i}]} {$k <= 8192} {incr k $i} { dict set flags $k 0 } incr count } } } return $count } ### ARY ######################################################################## proc ary n { for {set i 0} {$i < $n} {incr i} { set x($i) $i } set last [expr {$n - 1}] for {set j $last} {$j >= 0} {incr j -1} { set y($j) $x($j) } } proc ary_dict n { for {set i 0} {$i < $n} {incr i} { dict set x $i $i } set last [expr {$n - 1}] for {set j $last} {$j >= 0} {incr j -1} { dict set y $j $x($j) } } proc ary_static n { for {set i 0} {$i < $n} {incr i} { set a(b) $i set a(c) $i } } ### REPEAT ##################################################################### proc repeat {n body} { for {set i 0} {$i < $n} {incr i} { uplevel 1 $body } } proc use_repeat {n} { set x 0 repeat $n {incr x} } ### UPVAR ###################################################################### proc myincr varname { upvar 1 $varname x incr x } proc upvartest {n} { set y 0 for {set x 0} {$x < $n} {myincr x} { myincr y } } ### NESTED LOOPS ############################################################### proc nestedloops {n} { set x 0 incr n 1 set a $n while {[incr a -1]} { set b $n while {[incr b -1]} { set c $n while {[incr c -1]} { set d $n while {[incr d -1]} { set e $n while {[incr e -1]} { set f $n while {[incr f -1]} { incr x } } } } } } } ### ROTATE ##################################################################### proc rotate {count} { set v 1 for {set n 0} {$n < $count} {incr n} { set v [expr {$v <<< 1}] } } ### DYNAMICALLY GENERATED CODE ################################################# proc dyncode {n} { for {set i 0} {$i < $n} {incr i} { set script "lappend foo $i" eval $script } } proc dyncode_list {n} { for {set i 0} {$i < $n} {incr i} { set script [list lappend foo $i] eval $script } } ### LIST ################################################# proc listcreate {n} { for {set i 0} {$i < $n} {incr i} { set a [list a b c d e f] } } ### PI DIGITS ################################################################## proc pi_digits {N} { set n [expr {$N * 3}] set e 0 set f {} for { set b 0 } { $b <= $n } { incr b } { lappend f 2000 } for { set c $n } { $c > 0 } { incr c -14 } { set d 0 set g [expr { $c * 2 }] set b $c while 1 { incr d [expr { [lindex $f $b] * 10000 }] lset f $b [expr {$d % [incr g -1]}] set d [expr { $d / $g }] incr g -1 if { [incr b -1] == 0 } break set d [expr { $d * $b }] } append result [string range 0000[expr { $e + $d / 10000 }] end-3 end] set e [expr { $d % 10000 }] } #puts $result } ### EXPAND ##################################################################### proc expand {} { set a [list a b c d e f] for {set i 0} {$i < 100000} {incr i} { lappend b {*}$a } } ### MINLOOPS ################################################################### proc miniloops {n} { for {set i 0} {$i < $n} {incr i} { set sum 0 for {set j 0} {$j < 10} {incr j} { # something more or less real incr sum $j } } } ### wiki.tcl.tk/8566 ########################################################### # Internal procedure that indexes into the 2-dimensional array t, # which corresponds to the sequence y, looking for the (i,j)th element. proc Index { t y i j } { set indx [expr { ([llength $y] + 1) * ($i + 1) + ($j + 1) }] return [lindex $t $indx] } # Internal procedure that implements Levenshtein to derive the longest # common subsequence of two lists x and y. proc ComputeLCS { x y } { set t [list] for { set i -1 } { $i < [llength $y] } { incr i } { lappend t 0 } for { set i 0 } { $i < [llength $x] } { incr i } { lappend t 0 for { set j 0 } { $j < [llength $y] } { incr j } { if { [string equal [lindex $x $i] [lindex $y $j]] } { set lastT [Index $t $y [expr { $i - 1 }] [expr {$j - 1}]] set nextT [expr {$lastT + 1}] } else { set lastT1 [Index $t $y $i [expr { $j - 1 }]] set lastT2 [Index $t $y [expr { $i - 1 }] $j] if { $lastT1 > $lastT2 } { set nextT $lastT1 } else { set nextT $lastT2 } } lappend t $nextT } } return $t } # Internal procedure that traces through the array built by ComputeLCS # and finds a longest common subsequence -- specifically, the one that # is lexicographically first. proc TraceLCS { t x y } { set trace {} set i [expr { [llength $x] - 1 }] set j [expr { [llength $y] - 1 }] set k [expr { [Index $t $y $i $j] - 1 }] while { $i >= 0 && $j >= 0 } { set im1 [expr { $i - 1 }] set jm1 [expr { $j - 1 }] if { [Index $t $y $i $j] == [Index $t $y $im1 $jm1] + 1 && [string equal [lindex $x $i] [lindex $y $j]] } { lappend trace xy [list $i $j] set i $im1 set j $jm1 } elseif { [Index $t $y $im1 $j] > [Index $t $y $i $jm1] } { lappend trace x $i set i $im1 } else { lappend trace y $j set j $jm1 } } while { $i >= 0 } { lappend trace x $i incr i -1 } while { $j >= 0 } { lappend trace y $j incr j -1 } return $trace } # list::longestCommonSubsequence::compare -- # # Compare two lists for the longest common subsequence # # Arguments: # x, y - Two lists of strings to compare # matched - Callback to execute on matched elements, see below # unmatchedX - Callback to execute on unmatched elements from the # first list, see below. # unmatchedY - Callback to execute on unmatched elements from the # second list, see below. # # Results: # None. # # Side effects: # Whatever the callbacks do. # # The 'compare' procedure compares the two lists of strings, x and y. # It finds a longest common subsequence between the two. It then walks # the lists in order and makes the following callbacks: # # For an element that is common to both lists, it appends the index in # the first list, the index in the second list, and the string value of # the element as three parameters to the 'matched' callback, and executes # the result. # # For an element that is in the first list but not the second, it appends # the index in the first list and the string value of the element as two # parameters to the 'unmatchedX' callback and executes the result. # # For an element that is in the second list but not the first, it appends # the index in the second list and the string value of the element as two # parameters to the 'unmatchedY' callback and executes the result. proc compare { x y matched unmatchedX unmatchedY } { set t [ComputeLCS $x $y] set trace [TraceLCS $t $x $y] set i [llength $trace] while { $i > 0 } { set indices [lindex $trace [incr i -1]] set type [lindex $trace [incr i -1]] switch -exact -- $type { xy { set c $matched eval lappend c $indices lappend c [lindex $x [lindex $indices 0]] uplevel 1 $c } x { set c $unmatchedX lappend c $indices lappend c [lindex $x $indices] uplevel 1 $c } y { set c $unmatchedY lappend c $indices lappend c [lindex $y $indices] uplevel 1 $c } } } return } proc umx { index value } { global lastx global xlines append xlines "< " $value \n set lastx $index } proc umy { index value } { global lasty global ylines append ylines "> " $value \n set lasty $index } proc matched { index1 index2 value } { global lastx global lasty global xlines global ylines if { [info exists lastx] && [info exists lasty] } { #puts "[expr { $lastx + 1 }],${index1}c[expr {$lasty + 1 }],${index2}" #puts -nonewline $xlines #puts "----" #puts -nonewline $ylines } elseif { [info exists lastx] } { #puts "[expr { $lastx + 1 }],${index1}d${index2}" #puts -nonewline $xlines } elseif { [info exists lasty] } { #puts "${index1}a[expr {$lasty + 1 }],${index2}" #puts -nonewline $ylines } catch { unset lastx } catch { unset xlines } catch { unset lasty } catch { unset ylines } } # Really, we should read the first file in like this: # set f0 [open [lindex $argv 0] r] # set x [split [read $f0] \n] # close $f0 # But I'll just provide some sample lines: proc commonsub_test {n} { set x {} for { set i 0 } { $i < $n } { incr i } { lappend x a r a d e d a b r a x } # The second file, too, should be read in like this: # set f1 [open [lindex $argv 1] r] # set y [split [read $f1] \n] # close $f1 # Once again, I'll just do some sample lines. set y {} for { set i 0 } { $i < $n } { incr i } { lappend y a b r a c a d a b r a } compare $x $y matched umx umy matched [llength $x] [llength $y] {} } ### MANDEL ##################################################################### proc mandel {xres yres infx infy supx supy} { set incremx [expr {(0.0+$supx-$infx)/$xres}] set incremy [expr {(0.0+$supy-$infy)/$yres}] for {set j 0} {$j < $yres} {incr j} { set cim [expr {$infy+$incremy*$j}] set line {} for {set i 0} {$i < $xres} {incr i} { set counter 0 set zim 0 set zre 0 set cre [expr {$infx+$incremx*$i}] while {$counter < 255} { set dam [expr {$zre*$zre-$zim*$zim+$cre}] set zim [expr {2*$zim*$zre+$cim}] set zre $dam if {$zre*$zre+$zim*$zim > 4} break incr counter } # output pixel $i $j } } } ### RUN ALL #################################################################### # bench.tcl ?-batch? ?-time ? ?version? while [llength $argv] { switch -glob -- [lindex $argv 0] { -batch { set batchmode 1 set argv [lrange $argv 1 end] } -time { set arg [lindex $argv 1] if {$arg ne ""} { set benchtime $arg } set argv [lrange $argv 2 end] } default { break } } } set ver [lindex $argv 0] bench {[while] busy loop} {whilebusyloop 10} bench {[for] busy loop} {forbusyloop 10} bench {[loop] busy loop} {loopbusyloop 10} bench {mini loops} {miniloops 10} bench {fibonacci(4)} {fibonacci 4} bench {heapsort} {heapsort_main 50} bench {sieve} {sieve 1} bench {sieve [dict]} {sieve_dict 1} bench {ary} {ary 20} bench {ary [dict]} {ary_dict 20} bench {ary [static]} {ary_static 20} bench {repeat} {use_repeat 20} bench {upvar} {upvartest 20} bench {nested loops} {nestedloops 2} bench {rotate} {rotate 100} bench {dynamic code} {dyncode 100} bench {dynamic code (list)} {dyncode_list 100} bench {PI digits} {pi_digits 100} bench {listcreate} {listcreate 100} bench {expand} {expand} bench {wiki.tcl.tk/8566} {commonsub_test 10} bench {mandel} {mandel 30 30 -2 -1.5 1 1.5} if {$batchmode} { if {$ver == ""} { if {[catch {info patchlevel} ver]} { set ver Jim[info version] } } puts [list $ver $benchmarks] } jimtcl-0.84/binary.tcl000066400000000000000000000142151522604140100147150ustar00rootroot00000000000000# Implements the 'binary scan' and 'binary format' commands. # # (c) 2010 Steve Bennett # # See LICENCE in this directory for licensing. package require pack package require regexp proc binary {cmd args} { tailcall "binary $cmd" {*}$args } proc "binary format" {formatString args} { set bitoffset 0 set result {} # This RE is too unreliable... foreach {conv t u n} [regexp -all -inline {([^[:space:]])(u)?([*0-9]*)} $formatString] { switch -exact -- $t { a - A { set value [binary::nextarg args] set sn [string bytelength $value] if {$n ne "*"} { if {$n eq ""} { set n 1 } if {$n > $sn} { # Need to pad the string with spaces or nulls append value [string repeat [dict get {A " " a \x00} $t] $($n - $sn)] } } else { set n $sn } if {$n} { set bitoffset [pack result $value -str $(8 * $n) $bitoffset] } } x { if {$n eq "*"} { return -code error {cannot use "*" in format string with "x"} } if {$n eq ""} { set n 1 } loop i 0 $n { set bitoffset [pack result 0 -intbe 8 $bitoffset] } } @ { if {$n eq ""} { return -code error {missing count for "@" field specifier} } if {$n eq "*"} { set bitoffset $(8 * [string bytelength $result]) } else { # May need to pad it out set max [string bytelength $result] append result [string repeat \x00 $($n - $max)] set bitoffset $(8 * $n) } } X { if {$n eq "*"} { set bitoffset 0 } elseif {$n eq ""} { incr bitoffset -8 } else { incr bitoffset $($n * -8) } if {$bitoffset < 0} { set bitoffset 0 } } default { if {![info exists ::binary::scalarinfo($t)]} { return -code error "bad field specifier \"$t\"" } # A scalar (integer or float) type lassign $::binary::scalarinfo($t) type convtype size prefix set value [binary::nextarg args] if {$type in {bin hex}} { set value [split $value {}] } set vn [llength $value] if {$n eq "*"} { set n $vn } elseif {$n eq ""} { set n 1 set value [list $value] } elseif {$vn < $n} { if {$type in {bin hex}} { # Need to pad the list with zeros lappend value {*}[lrepeat $($n - $vn) 0] } else { return -code error "number of elements in list does not match count" } } elseif {$vn > $n} { # Need to truncate the list set value [lrange $value 0 $n-1] } set convtype -$::binary::convtype($convtype) foreach v $value { set bitoffset [pack result $prefix$v $convtype $size $bitoffset] } # Now pad out with zeros to the end of the current byte if {$bitoffset % 8} { set bitoffset [pack result 0 $convtype $(8 - $bitoffset % 8) $bitoffset] } } } } return $result } proc "binary scan" {value formatString {args varName}} { # Pops the next arg from the front of the list and returns it. # Throws an error if no more args set bitoffset 0 set count 0 # This RE is too unreliable... foreach {conv t u n} [regexp -all -inline {([^[:space:]])(u)?([*0-9]*)} $formatString] { set rembytes $([string bytelength $value] - $bitoffset / 8) switch -exact -- $t { a - A { if {$n eq "*"} { set n $rembytes } elseif {$n eq ""} { set n 1 } if {$n > $rembytes} { break } set var [binary::nextarg varName] set result [unpack $value -str $bitoffset $($n * 8)] incr bitoffset $([string bytelength $result] * 8) if {$t eq "A"} { set result [string trimright $result] } } x { # Skip bytes if {$n eq "*"} { set n $rembytes } elseif {$n eq ""} { set n 1 } if {$n > $rembytes} { set n $rembytes } incr bitoffset $($n * 8) continue } X { # Back up bytes if {$n eq "*"} { set bitoffset 0 continue } if {$n eq ""} { set n 1 } if {$n * 8 > $bitoffset} { set bitoffset 0 continue } incr bitoffset -$($n * 8) continue } @ { if {$n eq ""} { return -code error {missing count for "@" field specifier} } if {$n eq "*" || $n > $rembytes + $bitoffset / 8} { incr bitoffset $($rembytes * 8) } elseif {$n < 0} { set bitoffset 0 } else { set bitoffset $($n * 8) } continue } default { if {![info exists ::binary::scalarinfo($t)]} { return -code error "bad field specifier \"$t\"" } # A scalar (integer or float) type lassign $::binary::scalarinfo($t) type convtype size prefix set var [binary::nextarg varName] if {$n eq "*"} { set n $($rembytes * 8 / $size) } else { if {$n eq ""} { set n 1 } } if {$n * $size > $rembytes * 8} { break } if {$type in {hex bin}} { set u u } set convtype -$u$::binary::convtype($convtype) set result {} loop i 0 $n { set v [unpack $value $convtype $bitoffset $size] if {$type in {bin hex}} { append result [lindex {0 1 2 3 4 5 6 7 8 9 a b c d e f} $v] } else { lappend result $v } incr bitoffset $size } # Now skip to the end of the current byte if {$bitoffset % 8} { incr bitoffset $(8 - ($bitoffset % 8)) } } } uplevel 1 [list set $var $result] incr count } return $count } # Pops the next arg from the front of the list and returns it. # Throws an error if no more args proc binary::nextarg {&arglist} { if {[llength $arglist] == 0} { return -level 2 -code error "not enough arguments for all format specifiers" } set arglist [lassign $arglist arg] return $arg } set binary::scalarinfo { c {int be 8} s {int le 16} t {int host 16} S {int be 16} i {int le 32} I {int be 32} n {int host 32} w {int le 64} W {int be 64} m {int host 64} h {hex le 4 0x} H {hex be 4 0x} b {bin le 1} B {bin be 1} r {float fle 32} R {float fbe 32} f {float fhost 32} q {float fle 64} Q {float fbe 64} d {float fhost 64} } set binary::convtype { be intbe le intle fbe floatbe fle floatle } if {$::tcl_platform(byteOrder) eq "bigEndian"} { array set binary::convtype {host intbe fhost floatbe} } else { array set binary::convtype {host intle fhost floatle} } jimtcl-0.84/bootstrap.tcl000066400000000000000000000005341522604140100154450ustar00rootroot00000000000000# Minimal support for package require proc package {cmd args} { if {$cmd eq "require"} { foreach path $::auto_path { lassign $args pkg set pkgpath $path/$pkg.tcl if {$path eq "."} { set pkgpath $pkg.tcl } if {[file exists $pkgpath]} { tailcall uplevel #0 [list source $pkgpath] } } } } set tcl_platform(bootstrap) 1 jimtcl-0.84/build-jim-ext.in000066400000000000000000000113451522604140100157300ustar00rootroot00000000000000#!/usr/bin/env jimsh # Separate command line arguments into options and source files set opts {} set sources {} proc usage {{msg {}}} { puts stderr "Usage: build-jim-ext ?--notest? ?--cross? ?--install? ?--static? ?cc-options? ?-o modname? sources..." if {$msg ne ""} { puts stderr \n$msg } exit 1 } set linker "@CC@" set testmod 1 set cross @cross_compiling@ set install 0 set static 0 set verbose 0 set keep 0 set includepaths {} set libpaths {} set libs {} for {set i 0} {$i < [llength $argv]} {incr i} { set arg [lindex $argv $i] switch -glob -- $arg { *.c { lappend sources $arg } *.cpp { lappend sources $arg set linker "@CXX@" } --notest { # Don't test to see if the module can be loaded set testmod 0 } --cross { # Don't use standard include/lib paths if cross compiling set cross 1 } --install { # Install to $DESTDIR/@libdir@/jim set install 1 } --static { # Build a static extension that can be linked set static 1 } --verbose { set verbose 1 } --keep { # Don't remove intermediate files set keep 1 } --help { usage "Easily builds dynamic (loadable) modules for jim" } -o { incr i set modname [file rootname [lindex $argv $i]] if {$modname eq ""} { usage "Option -o requires an argument" } } -I* { lappend includepaths $arg if {$arg eq "-I"} { lappend includepaths [lindex $argv $i] } } -L* { lappend libpaths $arg if {$arg eq "-L"} { lappend libpaths [lindex $argv $i] } } -l* { lappend libs $arg } -* { lappend opts $arg } default { usage "Unexpected '$arg'" } } } if {$sources eq ""} { usage "No sources provided" } if {![info exists modname]} { set modname [file rootname [file tail [lindex $sources 0]]] # Remove jim- prefix if one exists regsub "^jim-" $modname "" modname } if {$static} { set target libjim-$modname.a } else { set target $modname.so } puts "Building $target from $sources\n" if {!$cross} { # If not cross compiling, add the standard location after any user include paths lappend includepaths -I@prefix@/include } # Work around Tcl's strange behaviour of exec failing if stderr is produced # proc exec-catch {verbose cmdlist} { if {$verbose} { puts [join $cmdlist] } flush stdout set rc [catch { exec {*}$cmdlist } msg errinfo] # Handle failed case. # Note that Tcl returns rc=1 if there is any stderr, # even if the exit code is 0 if {$rc} { if {[dict get $errinfo -errorcode] ne "NONE"} { if {!$verbose} { puts stderr [join $cmdlist] } puts stderr $msg return 1 } } if {$msg ne ""} { puts stderr $msg } return 0 } set CPPFLAGS "-D_GNU_SOURCE" set ljim "" set shobj_cflags "" set shobj_ldflags "" if {!$static} { set shobj_cflags "@SHOBJ_CFLAGS@" if {"@JIM_STATICLIB@" eq "1"} { puts stderr "Warning: libjim is static. Dynamic module may not work on some platforms.\n" set shobj_ldflags "@SHOBJ_LDFLAGS@" } else { # If shared, link against the shared libjim to resolve symbols set ljim -ljim set shobj_ldflags "@SHOBJ_LDFLAGS_R@" } } set objs {} foreach source $sources { set obj [file rootname [file tail $source]].o if {[string match *.c $source]} { set compiler "@CC@" } else { set compiler "@CXX@" } set compile "$compiler @CFLAGS@ $CPPFLAGS $shobj_cflags $includepaths $opts -c -o $obj $source" puts "Compile: $obj" lappend objs $obj set rc [exec-catch $verbose $compile] if {$rc} { file delete {*}$objs exit $rc } } if {$static} { set ar "@AR@ cq $target $objs" set ranlib "@RANLIB@ $target" puts "Ar: $target" set rc [exec-catch $verbose $ar] if {$rc == 0} { set rc [exec-catch $verbose $ranlib] } file delete {*}$objs if {$rc} { file delete $target exit $rc } } else { if {!$cross} { # If not cross compiling, add the standard location after any user lib paths lappend libpaths -L@prefix@/lib } set link "$linker @CFLAGS@ @LDFLAGS@ $shobj_ldflags $libpaths $opts -o $target $objs $ljim @LIBS@ $libs" puts "Link: $target" set rc [exec-catch $verbose $link] if {!$keep} { file delete {*}$objs } if {$rc} { file delete $target exit $rc } if {$testmod && !$cross} { # Now, is testing even possible? # We must be running a compatible jimsh with the load command at least set testmod 0 set rc [catch { # This will avoid attempting on Tcl and on jimsh without load if {[info version] > 0.73 && [exists -command load]} { set testmod 1 } } msg] } set rc [catch { if {$testmod && !$cross} { puts "Test: load $target" load ./$target } if {$install} { set dest [env DESTDIR ""]@libdir@/jim puts "Install: $target => $dest" file mkdir $dest file copy $target $dest/$target } puts "\nSuccess!" } msg] if {$rc} { puts stderr $msg exit 1 } } jimtcl-0.84/configure000077500000000000000000000002221522604140100146250ustar00rootroot00000000000000#!/bin/sh dir="`dirname "$0"`/autosetup" #@@INITCHECK@@# WRAPPER="$0"; export WRAPPER; exec "`"$dir/autosetup-find-tclsh"`" "$dir/autosetup" "$@" jimtcl-0.84/ensemble.tcl000066400000000000000000000022731522604140100152240ustar00rootroot00000000000000# Implement the ensemble command proc ensemble {command args} { set autoprefix "$command " set badopts "should be \"ensemble command ?-automap prefix?\"" if {[llength $args] % 2 != 0} { return -code error "wrong # args: $badopts" } foreach {opt value} $args { switch -- $opt { -automap { set autoprefix $value } default { return -code error "wrong # args: $badopts" } } } proc $command {subcmd args} {autoprefix {mapping {}}} { if {![dict exists $mapping $subcmd]} { # Not an exact match, so check for specials, then lookup normally if {$subcmd in {-commands -help}} { # Need to remove $autoprefix from the front of these set prefixlen [string length $autoprefix] set subcmds [lmap p [lsort [info commands -all $autoprefix*]] { string range $p $prefixlen end }] if {$subcmd eq "-commands"} { return $subcmds } set command [lindex [info level 0] 0] return "Usage: \"$command command ... \", where command is one of: [join $subcmds ", "]" } # cache the mapping dict set mapping $subcmd ${autoprefix}$subcmd } # tailcall here we don't add an extra stack frame, e.g. for uplevel tailcall [dict get $mapping $subcmd] {*}$args } } jimtcl-0.84/examples.api/000077500000000000000000000000001522604140100153105ustar00rootroot00000000000000jimtcl-0.84/examples.api/Makefile.in000066400000000000000000000003361522604140100173570ustar00rootroot00000000000000CFLAGS+= -Wall -g CFLAGS+= -I.. LDFLAGS += @LDFLAGS@ LDLIBS += -L.. -ljim @LDLIBS@ EXAMPLES= \ jim_command \ jim_hello \ jim_list \ jim_obj \ jim_return all: $(EXAMPLES) clean: rm -rf $(EXAMPLES) rm -rf *.core jimtcl-0.84/examples.api/README000066400000000000000000000017551522604140100162000ustar00rootroot00000000000000Jim examples ============ BSD 2-clause license, (c) 2010 Wojciech A. Koszek This directory contains examples of Jim interpreter API. In order to start working with Jim API one may just want to copy existing example .c file into new file, modify Makefile and start working on a new program. Existing examples ================= jim_command Simple command implementation in Jim's API. Command is then executed in a script encoded within a program. jim_hello Standard "Hello world!" program, from executing a script. jim_list Will teach you how to create a list in Jim's API. Once created, will show how to name and export it, so that variable is visible in the script's source code. Once done, interpretation of separate print.tcl file is presented. As a result, the script can print a list members created from within ANSI C program. jim_obj Basic object creation in Jim. jim_return Similar to jim_command example, but implemented command actually returns a value. jimtcl-0.84/examples.api/jim_command.c000066400000000000000000000055021522604140100177330ustar00rootroot00000000000000/*- * Copyright (c) 2010 Wojciech A. Koszek * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * $Id$ */ #include #include #include #include #include /* * Program which we want to get executed. */ #define JIM_PROGRAM "if {1 < 2} { MySampleCommand sample }" static int MySampleCommandFunc(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const char *str; int len; /* No need to check arg count here as this is checked by Jim_RegisterCmd() */ str = Jim_GetString(argv[1], &len); printf("%s\n", str); return JIM_OK; } /* * Now we try to write big enough code to duplication our array in Jim's * list implementation. Later, we try to load a sample script in Tcl that * could print our list. */ int main(int argc, char **argv) { Jim_Interp *interp; int error; /* Create an interpreter. */ interp = Jim_CreateInterp(); assert(interp != NULL && "couldn't create interpreter"); /* We register base commands, so that we actually implement Tcl. */ Jim_RegisterCoreCommands(interp); /* And initialise any static extensions */ Jim_InitStaticExtensions(interp); /* Register our Jim commands. This includes usage and min/max arg count */ Jim_RegisterSimpleCmd(interp, "MySampleCommand", "string", 1, 1, MySampleCommandFunc); /* Run a script. */ error = Jim_Eval(interp, JIM_PROGRAM); if (error == JIM_ERR) { Jim_MakeErrorMessage(interp); fprintf(stderr, "%s\n", Jim_GetString(Jim_GetResult(interp), NULL)); Jim_FreeInterp(interp); exit(EXIT_FAILURE); } Jim_FreeInterp(interp); return (EXIT_SUCCESS); } jimtcl-0.84/examples.api/jim_hello.c000066400000000000000000000040051522604140100174150ustar00rootroot00000000000000/*- * Copyright (c) 2010 Wojciech A. Koszek * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * $Id$ */ #include #include #include #include int main(int argc, char **argv) { Jim_Interp *interp; interp = NULL; /* Create Jim instance */ interp = Jim_CreateInterp(); assert(interp != NULL && "couldn't create interpreter!"); /* We register base commands, so that we actually implement Tcl. */ Jim_RegisterCoreCommands(interp); /* And initialise any static extensions */ Jim_InitStaticExtensions(interp); /* Print a string to standard output by evaluating a script with the interpreter */ Jim_Eval(interp, "puts {Hello world!}"); /* Free the interpreter */ Jim_FreeInterp(interp); return (EXIT_SUCCESS); } jimtcl-0.84/examples.api/jim_list.c000066400000000000000000000061301522604140100172660ustar00rootroot00000000000000/*- * Copyright (c) 2010 Wojciech A. Koszek * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * $Id$ */ #include #include #include #include #include /* * We have a list of sample words in 'C'.. */ const char *strings[] = { "simple", "strings", "which", "should", "get", "interpreted", "by", "Jim", }; /* * We have macros which let us to easily obtain of array presented above */ #define ARRAY_SIZE(a) (sizeof((a)) / sizeof((a)[0])) #define SAMPLE_OBJS ARRAY_SIZE(strings) /* * Now we try to write big enough code to duplication our array in Jim's * list implementation. Later, we try to load a sample script in Tcl that * could print our list. */ int main(int argc, char **argv) { Jim_Interp *interp; Jim_Obj *obj[SAMPLE_OBJS]; Jim_Obj *list; int i; int error; /* Create an interpreter */ interp = Jim_CreateInterp(); /* We register base commands, so that we actually implement Tcl. */ Jim_RegisterCoreCommands(interp); /* And initialise any static extensions */ Jim_InitStaticExtensions(interp); /* Create an empty list */ list = Jim_NewListObj(interp, NULL, 0); assert(list != NULL); /* * For each string.. */ for (i = 0; i < SAMPLE_OBJS; i++) { /* Duplicate it as an array member. */ obj[i] = Jim_NewStringObj(interp, strings[i], -1); assert(obj[i] != NULL); /* We append newly created object to the list */ Jim_ListAppendElement(interp, list, obj[i]); } /* * We bind a Tcl's name with our list, so that Tcl script can * identify the variable. */ Jim_SetVariableStr(interp, "MYLIST", list); /* * Parse a script */ error = Jim_EvalFile(interp, "./print.tcl"); if (error == JIM_ERR) { Jim_MakeErrorMessage(interp); fprintf(stderr, "%s\n", Jim_GetString(Jim_GetResult(interp), NULL)); } Jim_FreeInterp(interp); return (EXIT_SUCCESS); } jimtcl-0.84/examples.api/jim_obj.c000066400000000000000000000044521522604140100170720ustar00rootroot00000000000000/*- * Copyright (c) 2010 Wojciech A. Koszek * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * $Id$ */ #include #include #include #include #include #define OBJ_DESC "hello world" int main(int argc, char **argv) { Jim_Interp *interp; Jim_Obj *obj; const char *obj_desc; int obj_size; obj = NULL; obj_desc = NULL; obj_size = -1; /* Create an interpreter */ interp = Jim_CreateInterp(); /* We register base commands, so that we actually implement Tcl. */ Jim_RegisterCoreCommands(interp); /* And initialise any static extensions */ Jim_InitStaticExtensions(interp); /* Create a string object */ obj = Jim_NewStringObj(interp, OBJ_DESC, strlen(OBJ_DESC)); /* Obtain internal representation of an object */ obj_desc = Jim_GetString(obj, &obj_size); assert(obj_desc != NULL && "Jim should return NULL as a description"); printf("Object described as '%s'; object size is %d\n", obj_desc, obj_size); Jim_FreeObj(interp, obj); Jim_FreeInterp(interp); return (EXIT_SUCCESS); } jimtcl-0.84/examples.api/jim_return.c000066400000000000000000000052731522604140100176410ustar00rootroot00000000000000/*- * Copyright (c) 2010 Wojciech A. Koszek * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * $Id$ */ #include #include #include #include #include /* * Program which we want to get executed. */ #define JIM_PROGRAM "set l [CountChars Sample]; puts $l" /* * Our function. */ static int CountCharsFunc(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_SetResult(interp, Jim_NewIntObj(interp, Jim_Length(argv[1]))); return (JIM_OK); } /* * Now we try to write big enough code to duplication our array in Jim's * list implementation. Later, we try to load a sample script in Tcl that * could print our list. */ int main(int argc, char **argv) { Jim_Interp *interp; int error; /* Create an interpreter. */ interp = Jim_CreateInterp(); assert(interp != NULL && "couldn't create interpreter"); /* We register base commands, so that we actually implement Tcl. */ Jim_RegisterCoreCommands(interp); /* And initialise any static extensions */ Jim_InitStaticExtensions(interp); /* Register our Jim command. */ Jim_RegisterSimpleCmd(interp, "CountChars", "string", 1, 1, CountCharsFunc); /* Run a script. */ error = Jim_Eval(interp, JIM_PROGRAM); if (error == JIM_ERR) { Jim_MakeErrorMessage(interp); fprintf(stderr, "%s\n", Jim_GetString(Jim_GetResult(interp), NULL)); Jim_FreeInterp(interp); exit(EXIT_FAILURE); } Jim_FreeInterp(interp); return (EXIT_SUCCESS); } jimtcl-0.84/examples.api/print.tcl000066400000000000000000000002471522604140100171530ustar00rootroot00000000000000puts "-- List present in an array constructed from C program --" foreach {str} $MYLIST { puts $str } puts "---------------------------------------------------------" jimtcl-0.84/examples.ext/000077500000000000000000000000001522604140100153375ustar00rootroot00000000000000jimtcl-0.84/examples.ext/Makefile000066400000000000000000000012211522604140100167730ustar00rootroot00000000000000# Note that if cross compiling, build with: # # make NOTEST=1 # # to avoid trying to load the resulting module. # Also note that you will need a build-host version of jimsh in the # PATH in order to build the extension. # Prefer jimsh in the PATH because it is more likely to be built # for the build-host rather than the target. ifdef NOTEST BUILDOPTS := --notest endif export PATH := $(PATH):.. all: helloworld.so helloworld.so: helloworld.c ../build-jim-ext -I.. -L.. $(BUILDOPTS) $^ # Note: Currently we don't attempt to set LD_LIBRARY_PATH or equivalent test: JIMLIB=. ../jimsh -e 'package require helloworld; hello' clean: rm -f *.o *.so jimtcl-0.84/examples.ext/README000066400000000000000000000001721522604140100162170ustar00rootroot00000000000000This directory contains examples of C extensions for Jim. In general, do: build-jim-ext extsource.c See the Makefile jimtcl-0.84/examples.ext/helloworld.c000066400000000000000000000012261522604140100176570ustar00rootroot00000000000000/* * hello.c -- A minimal Jim C extension. */ #include static int Hello_Cmd(Jim_Interp *interp, int objc, Jim_Obj *const objv[]) { Jim_SetResultString(interp, "Hello, World!", -1); return JIM_OK; } /* * Jim_helloworldInit -- Called when Jim loads your extension. * * Note that the name *must* correspond exactly to the name of the extension: * Jim_Init */ int Jim_helloworldInit(Jim_Interp *interp) { /* Register the package with Jim and check that the ABI matches the interpreter */ Jim_PackageProvideCheck(interp, "helloworld"); Jim_RegisterSimpleCmd(interp, "hello", "", 0, 0, Hello_Cmd); return JIM_OK; } jimtcl-0.84/examples/000077500000000000000000000000001522604140100145405ustar00rootroot00000000000000jimtcl-0.84/examples/COPYING.FreeSans.ttf000066400000000000000000001045131522604140100201000ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . jimtcl-0.84/examples/FreeSans.ttf000066400000000000000000057551701522604140100170110ustar00rootroot000000000000000FFTMY-£ÿÚ\GDEFøóúĶGPOSõBò8tLfGSUB_üŸÉ|VÐOS/2AöÍ¿¸`cmap÷…¬d²cvt ÒÓxˆHfpgm´/§uÌegasp ´glyf²xQÚÔ”headþ¢ðS<6hhea1µt$hmtx´Òžbkernˆ…‰3Üh òloca«,�°xÐbmaxp Ę nameåv6ç\RpostÈj¼çü°prep]“ocx4Rœ:½Ø–Á_<õèËÈ9áËÈ9áûrý‚Ô„ÿ8dÐûrý,Ô€€·du�‘�ŠšÈŠš†1 䃞ÿFýÿ0 „GNU @ ÿÿ ÿ8d„,`¿ß÷ Ù  #XúM|M(,,!y›4È5MIM&…(H2WM.úPÿø,+,f,", ,,#,+,.,%,&úPúPH-H2H2,M÷"š˜PÅ(ºPyPWPý(ÑPd#¢P3PNPÚP(�P(ÅP›0xÐP…©‘¦g@ÿøÕ,,ÿêú/<ú/&<ÞBó<Ö<,<</</L<í"<ð Ò Ü Þ æM+ú_M9ô!Mz,4,,C, d,+M 'r%ôGH(M. 'M^—H2^^M\,A0úWM'^Em(ôHe=e=o,`ššššššØÅ(yPyPyPyP1, ,ÃÚP(((((H_#ÐPÐPÐPÐP¦…PRPgúÞÞ ÿôÿõ<H2 <<<<Þ .<Þ šš›Å(úÅ(úÅ(úÅ(úºPéÃ@yPyPyP‚PyPý(&ý(&ý(&ý(&ÑP<Ò*,ÿùÿæÿú,ÿýÿñ_ÞF÷d€B#ÿó¢P<<3Pò 3PÖ<3P�<3Ph<düÚP<ÚP<ÚP<‡'¥P<(((Ú(—ÅPL<ÅPL<ÅPL-›0í"›0í"›0í"›0í"xx¸xÐP<ÐP<ÐP<ÐP<ÐP<ÐP<©Ò ¦Þ ¦gægægæEJ(˜P/<ÉQÅ((AÃl(˜(/(yÆ(�(a,(¦U<Bk¡P<Y" `PÚÿø<((/ø(Ö8(/<�P›0ô"g^~xPk<õ(·PØe gæk(a ý,"ì1<_r_H2|ûPšPP P¨<ÀPœPö<š,ÿó(ÐP<ÐP<ÐP<ÐP<ÐP<ššØg(+ý(&¢P<((k( ÞÿßPšPý(&aPÚP<šØg#c ššyPyP,ÿßÿ¹,ÿÿÿí((ÅPLÿëÅPL-ÐP<ÐP<›0í"x(žÑP<ÐPgæšyP((((¦Þ Þÿî“’<</<úõ ZTååàù K-2ã ( <<< ÿBÙ«D`<,<,<,<? @<#<òؼLL|L<L<p<p<@ô"+*5ÏT`<ð Ò Þ ú 4ü òòò»((è<ùn<Ë †<^òò™À±Á Œ<9<0æ> c MM§ì ì#g*ôJ 1Æ1úUúPúUúYúOMMMMM3M3MMúYMM\MúYMMSM#MgMgú\úSM M M M MMsM=M9MMMMM º5MM N (((((HHMM�PM3M.MMM:úMMM úPÈÈÈÈM M MþÉÿþÇþ¸þÏþ=þÂÿ&þÌþäþñþÈþÆÿ1þìþbþÂþÂÿ)ÿ2ÿ,þÉþþþèÿÿ5ÿwÿ þäþäþäþXÿUÿ­þòþ“þ°þóþ�þìþýþÏþÀþÆþÆþÂþÂþ}þ�ý§ý§þ>þeý9ýCýCþøþ–þ”þ‚þÓÿ!ý¨þÉÿþ¨ÿ2þžþ¿þÏþŒþ¸þòþ�þhþ‘ýàþ”þ»ÿ:þ¡þQþkþ|þÿ;þ½þnýýþ¯þ´þ¸þ¼þ¼þ©þ´þÔþ¤þ’þäþ‘þ¬þ´þ¥þ¶þjþÞþÏþ”þ›1ÇLÌ"ÈÌ"PMsMšVj�b})ÿꚘPRP»yPgÑP(d¢PšNPÚPr((ÐP�P|(x¦ã(‘ú<õ(ÿþ¦Bñ%3<.<B < (ñ¿%ù<ô<" <ð å R><^ì.<Ç9 º<ØÿÚ.< .<Ø)³t³¼Ø, D ><Èó(442k(kk(kƒPƒPWPÅ(›0d,#ññP}PÚPoÒPš˜P˜PWP,"ƒP“�(ÚPÚP}PŸNPÑP(ÑP†PÅ(xoM(‘æPl2>PSPMoP˜PÅ(ãP®è<†<Fý å#<#<ä<ñV<<</<úœÞ QÜ .<ê2 <¾<†¨<÷<úå< A†<úö$àFÿöóE<Cä<#<Þ <¨¨ /|³d¾G, dêG“ý ed§G�"å+ú<º<(: : ’'°`(R¨¨ ¨¨ Ôþ„þþÿÿ ý×ýüýûP=<µ †P2<YPƒ<fœWPÓ<¤C �(å’Pî<¨P<±  M’äP.<ãPÅ<"P<"(rÅ(úxœ¦L ¦L ¢æ · €2õ(v<à(vPà<“(³“(³þP“ý ŸPâ<¶ÑP<èP/<v<à(ePk<þPššØgƒPÆ((Æ((“ý �(åk(ÚP#<ÚP#<(((Å(úoÞ oÞ oÞ l2ê2WP†<oP¨<fœ‘Ü ‘Ü �(åŸñ(/©È }Pä<×P4<s22ÚFµFÚ(ß<µFï2¾F¿FF�A¹F†FTF#ºFI�2‹A’(÷<S- [(¿FˆBºAè-âF¿FãA”-µFo<�F-x-Ê(úOÞ5ÈMMM MAA'F<#9A"AE#aF'A8F9#(FFF#)FF#8A(,AùÿìF•#'A†#AAý& A!AHAoA(A(#-FtAB,#œ* FZM ß< px€ ȸ»¾¢àåÀ&eÔ>FPŠÿz3¾€:O:ÒV&n?Ô>_'o?`=È:&&9X%o?m0Ô>z3_=K$?98? N3^>#%<¯#¨>œ<�8¸,X7X8É4É2É3É,ôjôjôjrTrW>>…ˆ>Ä#Ä9>ÿ¸…ÿ¸…ÿ¸ýkýkªmId”±sÿ¸Îÿ¸Îÿ¸äÿ¸ªÿ²Xa”ÿ¸ªkkÎÿ¸ΧÎÿ¸>ÿ¸>ÿ¸~Iÿ¸ýkªÿ¸ªc>ÿ¸…ÿ¸ýkÎ,õÍãõÍÜ}© «ý §¬ª¨§Õ”„”ÿ¸”ÿ¸þÑþ×ÿK1LÍÍxÐÿöÐÿöFÿö$ÿö™ÿö�ÿö±ÿö±ÿö±ÿö±ÿöxxxxíÿö ÿö ÿöNÿö¨ÿölÿö„ÿö¿ÿö´ÿö¨ÿö8ÿöÿöcÿöÿö`ÿö4ÿö”*ôÿöQ)8ÿö8ÿößÿöÝÿöìÿöBÿö,ÿö³ÿö³ÿö�ÿö•ÿö•ÿöìÿö†ÿößÿö›ÿöæÿöÿ‡âÿöþ€ºâÿöâÿöâÿ þAþÃþÐþÐþÔþ=þ|þ`âÿ·âÿ!âÿ`âÿ@ÿ^•âþîGÿ‡ýàþ,ÿ2þÔþHþHíÿö ÿö ÿö¿ÿöcÿöÿöÝÿö,ÿö„ÿörÿöþ`þ_¢s¢î?Z?q?X?d?N?f?f?"?‚?�m[ƒ�ÍÍxxÍÍ¿ÿö,ÿö8ÿö¿ÿö?XcÿöìÿöþÇ,"�=ûÿò4/XátD#s#e:Óá+¶ã ˜ýY3‘ÿÑ”˜Ì?ÿßÝ¢ÿé±-½ó R�5ʱŒü½üÌþǸÁÿ±½´þwÿÿ@þžþß'/ÿÆþ6þJÿ/d Ûþ옱Rátþ�þoôAµMß1ñ9ô1â÷`$áyÿçyÿç­ÿû­Þ(! žm+eX1þ¼ÿw_0\ÿù@ÿùeÿà ÿöÓÿùÓÿù™ÿöYÿùÌÿùZÿùªÿøzÿó¸ÿùèÿù‰ÿ÷¢ÿú�ÿø�ÿöuÿùÿú�ÿù‘ÿöŠÿø�ÿ÷‹ÿù€ÿúzÿú–ÿøvÿöqÿô…ÿ÷�ÿøpÿ÷eÿ÷’ÿùÞÿúlÿú¤ÿöÏÿërÿùšÿùšÿùfÿöÿ]ÿóBÿû-ÿ"ýúýúþ ýßþ!ýÏþ®þ®|ÿóúÿúŒÿö�ÿú�ÿú !nn@Mý…•�þÑþœšÿöÖÿùÁ þê£HMPXòYÕWÀWÐZÁZaW#Y³YÏXnYÊV«V·VºYŽWŽY?YêWaZZIWY>WMYšY W4Y.WºW7WjY Y Y 9WYwY³W„YtWþZÌZ–YWYÊV�ZnVñYJYW{YWe¼UúZÙÿ“ÙÿotHtHÃ+Ã+ÊYV|YýýÌýÿŸ:Ô/aW½Yýqý$¯Mµ#üMUšU¦P½U¨S@U­TÅ,vU*Yj>„WW|YxWâY¼YZWìY½YK<l<‚</<X<S<<}Pn<U<«<Z<[PPK<o<YP<ÔO<W<,<[<�NPò<T<�P‹<TPx<Q<´ë´¿¿tÞÁ½KÁÁªÁàªÔÆo¹¿¾¿Ö¸xÁÖÁ�ÚvŠ£¦´<ÁN¦5ô5\ÿêÉÏ5y* $Ú5± ÿê¾ÿë}5 ÿÓÿã5O5GÿýÃg 32Á 5.pÿþÆ£5Ý  #ôBÿæ\5x]‘J ì¨ÿøJ x$œ2 r�5ö¸‚53¸ÿón Æ ÿæ, �ÿón q#øÿû4275ÈÍFi5±ÿØ5²5'[½„ÿù %$mÿæ\$J �áÿèY2…�5H2­2­2­2­2Ö2Ö2Ö2Ö2Ö2Ö2Ö2­2­2­2­2­2­2r2r2r2r2Ö2r2r2r2r2Ö2î2[2¿2I2I2Ä2Ä22Ã2Ï2!2Ø2�2�2�2‘2­2*2ô2­2­2­2­2Ö2Ö2Ö2Ö2Ö2Ö2Ö2­2­2­2­2­2­2Ö2r2Ö2r2r2Ö2r2Ö2Ö2†2Ÿ2L2æ2æ2æ2æ2è2è2è2è2è2è2è2’2�2�2’2�2’2è2”2è2”2”2è2”2è2“2Ý2W2W2W2W2P2P2P2P2P2b2É2P2`2Î2ü2ü2Î2ü2Î2Î2û2ß2û2ü2Î2ü2Þ2û2i2i2Ä2Ä2Ä2‹2P2P2P2P2P2b2É2P2`2`2û2û2`2û2`2a2û2s2û2û2a2û2q2û2i2i2P2P2P2P2P2b2É2P2`2P2û2û2P2û2P2P2û2b2û2û2P2û2`2û2Z22Z2K222È2È2È2È2È2È2È2È2È2d2<2<2È2<2È2È2Ò2Ä2Ò2È2È2È2È2È2È2È2È2È2d2<2<2d2<2d2È2<2È2<2<2È2<2È2Ò2p2ø2 2ø2 2ø22p2ø22l2”2“2l2¤2l2l2”2}2¤2“2l2“2|2“252m252Ê2;2;2[2ò2ü2h2h2>2>2>2V2V2V2V2é2ê2é2ê2é2ê2æ2æ2æ2æ2æ2æ2æ2æ2R2222222|222Ÿ2 2Ÿ2 2Ÿ2 2Ÿ2 2¯2 2Ÿ2 2Ÿ2°2Ÿ2t2ù2Ð2Ì2>2>2>2>2>2>2,2,2,2,2,2,2³2È2W2j2p21212121282828282Ô2Ì2Ñ2æ2æ2æ2æ2æ2æ2æ2æ2æ2æ2‚2P2š2æ2æ2è2è292æ2æ2è2è2 2 2 2 2 2 2 2í2P2Ì2k2k2k2 22k2k2„2P2P2P2P22222 2 2 2¯2Á2 2 2 22†2†2†2†2È2È2È2È2Ò2222222Ò2~2~2~2~2~2~2~2„2è22222P2P2P2P2222212121212v2v2v2v2­2­2Ö2Ö2Ö2Ö2­2­2Ö2Ö2Ö2Ö2­2­2Ö2Ö2Ú2Ö2­2­2Ö2Ö2Ú2Ö2>2>2>2>2>2>2>2>2>2>2>2>2>2>2>2>2>2>2�2Ò2Ò2Ò2Ò2Ò2Ò2Ò2Ò2Ò2Ò2Ò2Ò2Ò2Ò2Ò2Ò2Ò2Ò2 2P2P2È2È2È2È2Ò2Ò2Ò2Ò2Ò2Ò2>2>2À2À2À2À2‡2‡2‡2>2>2>2>2>2‡2‡2>2>2>2>2>2>2Ñ2Ñ2Ñ2Ñ2>2>2>2>2>2>2a2a2‡2‡2‡2‡2ã2ã2ò2ò2ò2ò2>2>2ó2ó2ó2ó2>2>2>2>2>2>2«2«2>2>2>2>2>2>2>2>2Î2Î2Î2Î2>2>2Î2Î2Î2Î2 2>2>2Î2Î2Î2Î2>2>2Î2Î2Î2Î2Ò2Ò2Ò2Ò2Ò2Ò262r2k2 2$2"2Ã2Õ2"222œ2 2 2º2º2 2 2�2�2Ö2Ö2Ö2r2Ö2Ö22è2P2ü2PÈ2È2È2ø2ø2>2>2é222,282|282|2È282È282ä2Ä2Ä2Ö2Ö2®2 2Ä2i2i2Z2Ò262æ2?2?2ß2Ø2Ø2,!,2Š2Z2Š2è2è2ö2P2(2†2v2Š2Ò2Ò2Š2‡2Ø22?2c2èÝ _&û!ý6 Ö6ñÞH}ð6°f6I!×6øÀÿ6ؤÌmBU0 ½ ³-’,"&% ‡”)v&]Î�\'X(o F [ Hš˜P/<˜P/<˜P/<Å(úºP/ºP/ºP/ÒY,ºP/yPyPyPyPyPWPý(&ÑP<ÑP<ÑP<Òÿñ,ÿßÑP<ÿöÿãÿô¢P<¢P<¢P<3PÖ:3PÖÿå3PÖÿå3PÖÿÞNP,<NP,<NP,<ÚP<ÚP<ÚP<ÚP<((((�P/<�P/<ÅPL<ÅPL;ÅPL;ÅPLÿæ›0í"›0í"›0í"›0í"›0í"xxxxÐP<ÐP<ÐP<ÐP<ÐP<…ð …ð ©Ò ©Ò ©Ò ©Ò ©Ò ‘Ü ‘Ü ¦Þ gægægæ<Ò Þ —](ššššššššššššyPyPyPyPy*yPyPyPSÞ:_Þ9((((((((/(/(/(/(/ÐP<ÐP<Pk<Pk<Pk<Pk<Pk<¦Þ ¦Þ ¦Þ ¦Þ BBBBBBBBšš æÿòôÿó´ÿï»ÿí¡ÿñšÿåññññññÚÿóÊÿî„ÿðrÿñcÿïoÿñ%%%%%%%%ÿñ ÿ÷°ÿò²ÿø®ÿô±ÿôTÿÝTÿÝ,8ÿôÿ÷ÿûÿùÿËÿËBÿñAÿõâÿòåÿñÝÿñäÿóŠÿà†ÿÞ      ÿïÿôÞÿòÛÿówÿñ�ÿó.<.<.<.<.<.<.<.<ëÿî“ÿïËÿô_ÿïØØØØØØØØÿóÿñÌÿñÊÿïoÿó–ÿï…ÿ÷…ÿóBBññ%%8  .<.<ØØBBBBBBBB>< ”ÿò”ÿóUÿï\ÿíCÿñ;ÿå%%%%%%%% ÿñ£ÿ÷PÿòUÿøKÿôNÿôñÿÝôÿÝØØØØØØØØ¦ÿó¦ÿñjÿñhÿïÿó5ÿï&ÿ÷)ÿóBBBBBBBšššÿÝš@MtÈMtM M %%%%%Aÿ÷ÿã�|kP�R�BM ÿÍÿÛÿäÿðÿÇÿðÿý�ÿåxÿâ�D�QM .<.<.<.<><><.<<¦¦1ÿÚ;ÿÉÙÿó‰"‰"M ØØØØØAÿ¿AÿêPÿÇ.ÿÚ«(MRMvôèôèMú§,§dM.M.,Dô(è(è(@F6ÿíúaúPúPúa�Y�P�P�W,&,&�K�ZôÆô^¨PW§è P 1Õ1¨11Õ1¨1x ú1ú1nb,|,M,ÿê’;’;¶#H �2§ÿNNyNXMBMB|,.0 …(?’;…(z<ô’;$<W1Ò<Õ<à<Ò<\<à<à<^Œ*^^^^^^^^ ^ ^o^Nh'^^E^^^^^^^^^^ ^ ^o^LknhE^o&g&Y c,,AFªG%[²Po2e<6�$›c :"¬'ÍZ››[€! ó ýùýùÿ6ÿý�ý�ý¨ý¨þwþxþxþ)ý¯ý,ý1ý4ý2ýwûrýCþÁþPþ)þ0üBý®ýüýùý·ý¨þÔf)[)Ò0ù,30@0�(Ò+—(Íg‡.,<V—^„)áëÒL¦@ 'X4›[ &„»Ò]B]Ò]!íè›cõ(õ ¢Pš–oÕÈÅ L)° €:P:ÒV&Cd$:(kFRÒPý<3P,P¦  =�°$³#\1pƒEyp$yoEypEyp&e4eEd,dBd±d…±Çݱd‘±Ç3PÅ(ºPNPÞB¼BšBÒBð Ò ° Ž ÒBÜ Ò ° Ö<ú/,<Û [-Û1[-    Û¨IÛ0¨IÛÛ-¼’Û Û |8‰#Û Û-|8{ Û ŠÞ Û òÛ*òÛ Û Û['Û-[,['D D ›¤X,+›P›P"(Ç Ç H7H7I-H7H7IPôaUU(H2H2H2þÿüˆ(ô5ô?ô–ÉÉ>X2ÈF @FT``((Ñ<Á<‰<Ð7ù2 � �úIlIH2 2H/ô!ô!ô#=Kô%H3H4H2H(H2H2H2ôô!H2ô!H2*H2H2H2H2ß/ó2H2H2H2H2H2H2H2H2H2H2H2H(X<H2H2H2H2»-»-*H-H-H-H-H2H2H2H2H-H-H1H2H-H-H-H-H7H7H7H7H$H2H2H2(((|4|P|B|B|E|E+ + ++ +++++’L’’’ôLLöL|>|>|>|>H`Hèèü=ü=*W×@Æ>H2H2H3H-4¿0¿!H(H(|B|BH2H2H-H-úRè�è�è€7'ÈbÇHÈJÇbH(v–v ’;’;II€(€(€(€,€€,„X„X„X„7„à„7MyM2M€M€M2M€M2v–$8$8 @3 3 DD : 4 = Ó º Ý ¾ æ » Ø Ý L V V V V @ G N = Å D X Ü ¼ ä Ì Û V, ô m  ±##########èèèÌè¤èèèÌè¤èèèÌè¤èÌèÌè¤è¤èèèèèÌèÌè¤è¤èèèèèÌèÌè¤è¤è¤è¤è¤è¤èèèèè¤èèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèè|èÌè|è|èèèèÌè|è|èèèèÌè|è|èèèèèèèèèèèèèèèèèèèèèèèèèèèèèôèèèèèkèèôèôèèèèèèè 2 2 2 2 2 2 2 2 2 2qàqà d d ú úèè|#|#�€�€|^|^�´�ž{^{]|#|#���€|^|^�ˆ�ž{^{]$$$ 'é ' ' ' ' ' ' ' ' ' ' ' ' Š� 2 2 2 ' ’ Š' ' 'è–è–è–è–�K 2 2 2 2 2|#|#|#ü  2 2 2 2 ' ' ' ' � œ œ ž � È È œ¡B###r"¶#S"#r"¶#S"#M7+7Ò7Ò7ŸBy<’2‰"ü ü ü ü=ü=H(`(h8h8ÐHÐHÐH 0Å0Å0ÐHÐHT6ºHæH>HæHh8h8$H¸0¸<ÐH 4ÔHô6X: 0x<D6 HÐHZD6à&¦?|6h8h7ÐH <€8h8h78¨6ÐH8ÐHÅ0ÐH<<6ÆH<6Ø1j.ºHH2M.,?Mô!ô!ô!Ð5Ð&”oo”,9^KºFºF¤F F FRF¢FÐFôFîFîFîFFF F F:F:F F FÐFFXFXFXFXF×F×FíFíF8FzFeFÐFãF×F FHF F¨FHFÇFÎF¸FßFßF FîFeFFF¤FúF¢F¢FèF\F6F#FSFSF±FLFÄF‹F‹F‹FdFdFHFF FFFÀFÓFwFwF¤F1FúFwF8FzFÁF FÁFF F¶FFFF|FÇFÇF@F@F°F°F@F FçFßFÛFFSFzF¨FwF/FþFPF¼F¼F¼FÔFÔFyFyF-FBFqFwFPFFFFFwFwFÍFÍFF{F FIFôFF F F‡FiF/FRF«FBF‚F F4F4F(F`FF(FeF„FLFLF,F,F,F¢FÞFF`FvFŽF¯F¯FèF¯FÔFæFÔFæFèFèFèFèF FFFSFäFlFF’F’FYF FFwFÞFíFFF´F´FŠFFXFXF>FæF>FæFôF\FÀFÀFêF4FÛF%F^FÖFÖFôF-F«F‚F”FyF’F±FÏFFÆFÖFÀFFOFFlFlF¢F¢F¢FFF-F-FËFËFÑF!FFF\FjFFF#F#F#F#FÐFFÓFÑFFFFFFlFzF&F9FžF FFnF,FFCF½F+FFfFÐF†FýF˜FFßFæF0FËF´FÈF¥FF€FSFF¥FôFËFwF0FM8V2Â2Â2ƒ(ïÌ ÑŒ…ìAAA AèAÈ:1�8K%z:P&h? 9R%i?%©#H2<<<<€:€:€:O:ÒV&n?#!s`=&&9X%m0z3_=?98?N3^>#%<¯#Ô>O:&98?€H.„ Þ a?ÆÞ\¿üJ.€d>-£¶Œšâ€Çþa|£,d€Ëì�qV Âé‚€2Cê#€ìIèö³ Cå €øoñM}€ù#pn_åÿÿÛÿÿC™1a\šÿþê<KŽ9øI&7ð7Ê6�OF09057^1F?Ð:’9Y=&2í5í9\FV9#OHI+íN8d03òDçN/0�r7HJ1<n6Añ8L.`O Næ7Ð7·7ï7£7é7É7H7—7‚7ô7Ø7&7€7@7u7Û7M7A7R77”7 7Ä7»77Á7b77)&êÿ²ÿNþ†ÂSþ'þ�pÿ—þäýìþAþ/ý‰þiÙÿíM' 2ÿîÿè4ÿî ÿç’ÿôGÿæ£ÿî&-ÿå!ÿ÷‘ÿâ#ÿáÏ T 5 0ÿè¼ÿÓMK¡ÿîÿî‹ÿïÈÿé/ÿêÿÿÕºšÿÎâÿ×:ÿîwÿî#ÿá2ÿñÿ)ÿî®þÞ"ÿ5ÿ°xÿFxÿYñÿá¸ÿÕ|ÿòß×ÌÿôêÿóÿôOÿçÖÿîØÿó ÿÙäÿñÿåÿßï÷ÿïááÿ÷ ÿáó }ÿù¼ÿð ÿç+ÿéØÿö×ÿøòÿíÒÿëïÿìâÿ×ÅÿóØÿí»ÿó˜ÿÕ8ÿé¸ÿé¸ÿÍ”ÿÙÙÿí”ÿÙÙÿí”ÿÙÙÿíßÿó:ÿÝ8ÿÝ:ÿݘÿÕ˜ÿÕ˜ÿÕrÿéäý++×+×++¬ÿçÿÕKÿó·ÿò·ÿêÿû×ÿçéÿíéÿòéÿóGÿè‘ÿëÿçÿçÿçâÿï˜ÿåÿæÿæ]ÿéŸÿÍq!:!ÃÿàëÿôÿÇVÿâwÿé§ÿÙX X  ²ÿöš,²ÿö�1`Â?n?+ÿÝ+ÿÝõÿß!ÿé¢ÿßÿßþÿÑÕÿÑêÿÓêÿÓÿìÿéÿé¢ÿéÿËíÿËÿååÿé±-Z-PÿÓPÿÓÏÿç@ÿç@ÿçPÿÓÿñÿð ÿáÿð ÿánÿÓmÿÓqÿð ÿë ÿëDÿô½ÿØhÿØ~ÿñùÿðë3ô‡ ó ó gÿÜòÿîHÿçkÿç[ÿé[ÿé+ÿéyÿçÿõyÿç+ÿéÿê.ÿéÏÿé©ÿéÀÿèVÿéXÿéRÿé�ÿÙ�ÿÙÈÿéÈÿéÈÿèƒÿé_ÿèÈÿéÀÿèÿéÿéHÿÓñÿݱÿÒ±ÿÒjÿÕjÿÕñÿñÆÿÕeÿòñÿñ‘ÿßÈÿÕzÿôÿíòÿí“ÿíòÿíÿÎSÿÎCÿî·ÿÝOÿõ ÿëOÿõæÿà¬ÿéÿÎÿ΄ÿé„ÿé/ÿÎHÿéhÿ׃ÿ×hÿ×0ÿç÷ÿß%ÿã÷ÿß%ÿã ÿóÿ÷âÿ× ÿñâÿ×úÿÓïÿì�ÿ׌ÿ׌ÿ×ÊÿñÊÿñ�ÿדÿìâÿ×ïÿì¸ÿç ÿÓ˜ÿé.ÿç¸ÿçFÿç:ÿÝ×+¬ÿç˜ÿåýÿñOÿç}ÿÇ ÿÙÂ?ÿßÝ�ÿèÝ-±- ÿá½ÿØó Àÿç+ÿéÈÿéüÿèÀÿèÐÿôòÿßòÿíâÿ×ïÿìÜÿç¸ÿç“pÿù—q˜+t+ ÿçÍÿç½ÿåšÿå–rÿûÄÿî‡ÿï–q ÿá ÿá ÿá ÿá?ÿë÷ÿëž q ž x ‡ÿú_ÿúCÿçÿçÃÿç£ÿç–ÿöoÿöðÿéÍÿéJÿçÿçñÿññÿñ¬ÿí�ÿí­ÿí„ÿí·ÿΕÿÎâÿ×$ÿ×âÿ×ÿׯÿì†ÿì3ÿ×ÿ×*ÿ×ÿ×­ÿì‹ÿì¹ÿÓ ÿÓCÿçÿçGÿçÿç™ÿítÿí:ÿÝÓ×+¬ÿçã ˜ÿåýÿñOÿç3ÿç}ÿÇ”ÿô ÿÙ˜ÿÕÂ?ÿßÝ¢ÿé±-½ÿØó Hÿçyÿç+ÿéÀÿè§ÿá†ÿçòÿßòÿí©ÿéïÿì¸ÿç ÿç˜ÿé¬ÿëyÿçyÿç™þWþþaþaþ ÿáþ‘þíþÔþn2þþþFýΚÿÉÄÿí¤ÿHÿÿÓ‰ÿ߉ÿíÿï›ÿ×–ÿìPÿçò·ÿÝþc›ÿ•qÿ³ÿï8ÿöÿëÏÿöþ|âÿ`âÿ@þ`ÿ'�ÿå aŸÿö¡ÿöXÿö´ÿþvuêÿöÿöoÿöÚÿöÄÿöÿö?ÿö]ÿöãÿöÿöÿöcÿö‚ÿö®ÿöÒÿöÉÿö¾ÿö'ÿö„)èÿöB(iÿöNÿö¨)¡ÿög'>ÿö>ÿöøÿöÒÿöÿö|)ÿöCÿöÒÿö»ÿö¥ÿöÿöÿöÿö�ÿöøÿöäÿöþÿö|ÿöàÿö2ùÿöàÿöbÚÿöxÿö˜ÿöjÿöjÿö¢ÿörÿö­ÿötÿöèÿöJÿö{ÿö„ÿöèÿö*ÿö*ÿöÿöjÿöUÿöUÿöüÿöØÿö ÿöÚÿµÿöèÿöáÿö�ÿö‹ÿöâÿ<âþcâÿ<âþcâÿ<âþcâÿöâÿöâÿö )ºÿö¾ÿöuÿöÞ#Ïÿÿ³ ÿöþ=ÿ'ùÿöÿ'þ!xxâÿ þ|þ|þ|þ`þYþYæÿö[ÿö¨ÿö8ÿöÿöcÿöÿöôÿö¥ÿösÿö»ÿö*ÿöÿöUÿö ÿö§ÿç€ÿöbÿþ$ÿöÿö.ÿöÿöÁÿôb³ÿöNÿöEÿö9ÿöEÿöoÿöEÿöÿöøÿö¨ÿöæÿöôÿö8ÿöÿëcÿöÿöôÿöäÿö¨ÿöEÿöEÿö9ÿöEÿöÒÿöÒÿöþ¿þaþTÿöþ1 þ@þ>þ[þ£þ³þ¿þBþgþ˜þ¿þRì1Šÿôÿóµÿù´ÿùÄÿù©ÿøïÿù‰ÿ÷¯ÿú‘ÿørÿù‚ÿú‡ÿò•ÿö�ÿ÷‹ÿù‚ÿúrÿú™ÿø{ÿöuÿô�ÿ÷oÿ÷jÿ÷�ÿùáÿúmÿúuÿùgÿöZÿù ÿùhÿë›ÿöÖÿùÖÿùšÿöZÿùÎÿù]ÿùCÿùþaþbþ¿þ_þaþÝþüýè{è2;,,ÒLèå6!ý6Ö6´6A!6ÒB}ð6š6f66I!×6I!ø6ê!Äÿ6ؤíêÌÝ J!ã6á6 º76L!®YwYºY½Y¸Y©YÀYPY­YPZPZPZ¸Y¸Y¸Y¸Y¸Y¸Y¸Y¸YºYŠYçZáYŠYŠYZZZ¸Y¸Y¸Y¸Y¸Y¸YVYVYVY¸Y¸Y¸Y¸Y¸Y¸Y¸Y¸Y¸Y¸Y¹Y¹Y¹Y¹Y¸Y¸Y¸Y¸Y¸Y¸Y¸YŒWŒWŒWBYBYŒYŒYŒYŒYŒYŒY©Y©Y©Y©YŒYŒYŒY¤YßYßYßYßY‚Y‚Y‚YçY=Y¿YYYY:W:W:WŒYŒYŒY@Y=Y@Y@Y@\@\@\ÓZÓZÓZëWëW¸Y¿Y«Z¸YvZvZvZ]Z]Z]Z]Z]Z[W[W[W[W[W[W[W_ZŒZ¤Z\\\ÆZàZäWäW^WàWøWW@W@W@WtYtYtYýYýYýYýY›Y›Y›Y;W;WßWßWßWßWàWiW�W^WY€Y�YäWäWäWKYKYKYKVKYKYKYYYY™Y™YZZZZZZZZZZZZZ§\§\§\-\-\3YÒZÒZÒZ�WWEWJWJWéYéYéY*WüWüWüW÷W¥Z¥Z¥Z>W>W>W'W*W*W*W�W�W�W™Y�Y¸W¸WDW²YÄYJWJWêZêZêZüWüWüWüWþW_W°YÜ\jWjWjWjWjWVVVVVVºTºTºTŠW�W�W�W�WÐWÐWÐWÐW�W�W�W�W�W�W�W"Z"Z"Z6Y6Y6Y6Y6Y6Y6Y6Y6YhXhY�Y�YhXhXhYhXhYÀYÀYÀYÀYÀYÀYÀYÀYÀYÀYÀYÀYXZXZXZZZZŸYŸY–Y–YŸYŸYŸYŸYŸYŸYŸY3W3W3WY¢Y¿Y¿YôYøZñZôYôYšZšZšZõYõYõYõYõYÉYÉYÉYèYtYtYtYvYpYvYYYYðYSYòYðY¤Y¤Y¤YúYúYúYúY’W’W’WBZBZBZÜVÝYÝYXYXYXYXYXYXYXYXYXYXYXYXYVYXXXYXYUYXYUYXYXYXYïWïWïWXYXYXYXYXYXYXYXYXYXYtYtYtXtYtYtXtXtYtXtXtXtXtXtXtXtXtYtYtYtYtYZZZtYtYtYtYtYtYtYtYtYtY¯W¯W¯W¯W¯W¯W¯W¯W¯W¯W¯W°W°W°W¯W¯W¯W¯W¯W¯W¯W¯W¯W¯W¯W¯W¯WUZUZUZ¯W¯W¯WsY#hŒYŒYgggsWsW~YsWrVsYrW�Y�Y�Y�Y1Y1Y1YCWCWCWCW)Z)Z)ZsYsYsYüZüZüZüWüWüWüWüWüWüWüWüWüWüWüWüWüWüWüWüWüWüWüWüWüWüWüWüWüWüWüWüWüZüZüZÙYkZrZUYUYUYUYUYUYUYUYUYUPUYUYUYUYUYUYUYUYUYUYUYU$U0U:UYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYlVlVlVYYYlVlVlVlVlVlVZ!ZœYœYœYœYœYŸZ,\@Z!ZïYïYïYïYïYïYïY=Y=Y=YïYïYïYïYïYòYïYïYïYïYIYIYUYIYIYIYIYIYIYIYIYIYIYIYIYIYIYIYIYIYIYIYIYIYIYHYIYIYIYIYIYHYIYIYIYIYIYIYHYHYHYåYåYåYWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW‰W‰W‰W‰WWWWWWWWWWWWWWWWWW¦Y¦Y¦YWWWWWWWWWWWWWWWW]Z^ZzY˜YúY—Y·Y·Y·Y·Y&W&W&WzYzYzYÅVÅV`V`V`VYZGP'*¢WWWWWWë WW““!’WWWWWWWWW›#›#›#–Y�Y�W�W�WýœtY¼Y“W“YGYðWdZZHYYAWQY�YW4Y0WÀW=WmY¤Y¤Y\Y|YµW†YyWZÑZ”Y[YÌV†ZrV÷YPY W�Y\R   õÒ5,+|=+(ú ú MMMMÈ ¢I<‰ (g-(*((.(&(,('(âÿöâÿ ÙÿöÙÿöÿmDÿö8ÿöÿëcÿö ÿöãÿöÿöÿöÒÿöÒÿöâÿ`âÿ"ªúeôUÿö, D¨, D‚‚~»õ 39ou~ŠŒ¡Î×öùÿ'V_‡Š�Çêô JO w  ƒ Œ � ¨ ° ² ¹ Ä È Î × Ý ã û   ( 0 3 6 9 < B H M Q \ ^ u   : D H N W c u Àõùüôõ "›Ÿ¦²¹¿ùEMWY[]}´ÄÓÛïôþ d q Ž ” µ ¹ á ð! !$!3!"M"U"g"k"s"w"‰"�"¨"µ"½"Ã"Æ"È"Ï"Ù"ã"é"ñ## ####*#®#³$&$i%K%l%ÿ&-&:&g&o'@** -g-o......0¦+§Œ§ªûûû6û<û>ûAûDûOÿýÿÿ  ¾÷$7Ptz„ŒŽ£Ñðùý‚$1Ya‰�°ÐðM y � … � “ ª ² ¶ ¼ Ç Ë × Ü ß æ     * 2 5 8 < > G K Q Y ^ f     = F J W ` f y Ðùû ° ›�¤«·¼ HPY[]_€¶ÆÖÝòö p t �   ¸ Ð ä!! !&!5!>!A!J!M!S!�!¤!©!´!¼!Ð!Ü""4"@"P"W"j"m"v"z"Œ"¢"²"»"À"Å"È"Í"Ö"à"æ"î#### #)#›#²$$`%%P%€&,&9&`&i'@** -0-o....(.0¥§ˆ§ªûûûû8û>û@ûCûFÿùÿÿÿãÿÂÿÀÿ¿ÿ¼ÿ¹ÿ£ÿŸÿ›ÿ–ÿ•ÿ”ÿ“ÿ‘ÿyÿwÿtÿrÿbÿ\ÿXÿOÿMÿLÿKÿGÿ'ÿÿþþþ ü\ü[üZüYüWüUüTüSüPüNüLüJüBü>ü=ü;ü6ü5ü1ü/ü.ü-ü,ü+ü)ü(ü$ü"üüüüù„ùƒù‚ù�ùù~ù}ùuùmùkùhöHö9ö6ö5ó’ó‡ñWíMíLíDíAìÉìÈìÄìÀì¼ìºìzìtìrìpìnìlìkìjìiìhìfìeìdìbìaì_ì^ì]ìRìPìOìDìBì,ì*ììììììììì ëýëóëòëéëãëàëÚë¸ë´ë³ë±ë°ë®ë­ë«ë©ë§ë£ëšë•ë“ë’ë‘ë�ë‡ë�ëë{ëmëfëbëSëNêÞêÛê�êVéÀé¼é©é}éréMéLè|å½å¹â“âŒáæáåáãáÛáÚk i¯i’=0+*)('&} dÇ ~ »b¾õ~÷ ¶$3à79ðPoótuz~„ŠŒŒ!Ž¡"£Î6Ñ×bðöiùùpýq‚ÿôrv$'|1V€Y_¦a‡­‰ŠÔ��Ö°Ç×Ðêïðô  JMOY w\ y Ô � ƒÛ … ŒÞ � �æ “ ¨è ª °þ ² ² ¶ ¹ ¼ Ä Ç È Ë Î × × Ü Ý ß ã æ û!  7  :  @  (B * 0X 2 3_ 5 6a 8 9c < <e > Bf G Hk K Mm Q Qp Y \q ^ ^u f uv  †  ˆ  �  :“ = D¼ F HÄ J NÇ W WÌ ` cÍ f uÑ y á ÀèÐõ ùù/ûü0 ô2‡°õ  M [ \ " a›› d�Ÿ e¤¦ h«² k·¹ s¼¿ vù z t Š E �HM ¶PW ¼YY Ä[[ Å]] Æ_} Ç€´ æ¶Ä ÆÓ *ÖÛ 8Ýï >òô Qöþ T d ] p q  t Ž Ä � ” ß   µ ä ¸ ¹ ú Ð á ü ä ð !! ! !$ %!&!3 ?!5!< M!>!? U!A!E W!J!K \!M!N ^!S! `!�!™ �!¤!§ —!©!ª ›!´!µ �!¼!Ì Ÿ!Ð!Õ °!Ü!Ý ¶""/ ¸"4"> è"@"M ó"P"U"W"g"j"k"m"s"v"w!"z"‰#"Œ"�3"¢"¨E"²"µL"»"½P"À"ÃS"Å"ÆW"È"ÈY"Í"ÏZ"Ö"Ù]"à"ãa"æ"ée"î"ñi##m## n##r# ##s#)#*w#›#®y#²#³�$$&�$`$i¶%%KÀ%P%l %€%ÿ)&,&-©&9&:«&`&g­&i&oµ'@'@¼**½* * Â-0-gÃ-o-oû..ü..ÿ...(...0.0 ¥¦+ §ˆ§Œ7§ª§ª<ûû=ûûCûû6Hû8û<bû>û>gû@ûAhûCûDjûFûOlÿùÿýv€�{ŸÃ™ÈÕ¾€�Ì ©ê  ô     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a†‡‰‹“˜ž£¢¤¦¥§©«ª¬­¯®°±³µ´¶¸·¼»½¾ }rdei x¡pk <vjˆš Ösgw º É ÇS ãl|<¨º�cn ÒT û ¾m} ƒb‚…— p q y z u v¹sÁ: ¡ ð – —>? ~y w { �„Œƒ�Š��‘Ž•–”œ�›óiq{|}z€~j°,°K°*PX°JvY°#?°+X=YK°*PX}Y Ô°.-°, Ú° +-°,KRXE#Y!-°,i °@PX!°@Y-°,°+X!#!zXÝÍYKRXXýíY#!°+X°FvYXÝÍYYY-°, \Z-°,±"ˆPX° ˆ\\°Y-°,±$ˆPX°@ˆ\\°Y-°, 9/-° , }°+XÄÍY °%I# °&J°PXŠeŠa °PX8!!YŠŠa °RX8!!YY-° ,°+X!!Y-° , Ò° +-° , /°+\X G#Faj X db8!!Y!Y-° , 9/ Š GŠFa#Š Š#J°PX#°RX°@8!Y#°PX°@e8!YY-°,°+X=Ö!! ÖŠKRX Š#I °UX8!!Y!!YY-°,# Ö /°+\X# XKS!°YXа&I#Š# ŠIŠ#a8!!!!Y!!!!!Y-°, Ú°+-°, Ò°+-°, /°+\X G#FajŠ G#F#aj` X db8!!Y!!Y-°, РЇ °%Jd#а PX<ÀY-°,³@@BBK¸cK¸c Š ŠUX Š ŠRX#b °#Bb °#BY °@RX² CcB² CcB° c°e!Y!!Y-°,°Cc#°Cc#-¸ÿ…°�K°PX±ŽY±F+X!°YK°RX!°€Y°+\X° E°+D° E°+D° Eºÿ+±Fv+DY°+ ¼ÙR]]J4YTDAPN[WL02?i8FH:=6.`*| ¸ h�è0xè d Ð  ` Ä X Ä „ € ü`T0�¨Ü$\$`ÄŒLÀ8¤¨TÌ4€üp„@( T ´!(!p""|"Ø#4#˜$$l$¤$Ü%&Ä't(((ä) *8+0+Ä,$,˜--<..¤/4/ì0¨1282ä3€3Ä4p4Ì5h5Ä6p6¬7T88 849,:”;„ >8>T?l?¼@@$@@@ŒA$A@AüCC<CôD„D˜E,EœF\FpGœHðJ¨J¼JÔJìKKK4KLKôM8MPMhM€M˜M°MÈMàMøN¼NÔNìOOO4OLO€PdP|P”P¬PÄPÜQhRPRhR€R˜R°RÈRàThU¬UÄUÜUôV V$V<VTVlWHW`WxW�W¨WÀWØXHY4YLYdY|Y”Y¬ZhZ€Z˜Z°ZÈZà[œ]¤]¼]Ô]ì^^^4^L^d^|^”_X`T`l`„`œ`´`Ì`äa´bèccc0cHc`cxc�c¨cÀcØcðddÌeœe´eÌeäeüff,f¸gdg|gÀgØgðhh h8hPh´hÌhähüii,iDi\itiøjdj|j”j¬jÄjÜjôk kÜl�l¨lÀlØlðmm n<olo„oœo´oÌoäoüpp,pDp\r s´sÌsätÌv v$v<vÐw¨wÀwØwðxx x8xPxhx€x˜y|zˆz z¸zÐzè{{{0{H{`{x{�|}~~$~쀀H€\�P‚4‚Dƒƒ°„|„�… …†$† ‡Tˆ„‰4Š,Š�‹‹�ŒŒˆ�@ŽŽ �0�ì�È‘¤’Œ“€”X•$•ø—4˜\˜¼™”šT𸛏œ,œØ�¬�Àž`žôŸ¼ < À¡ˆ¢X£¤,¤ø¥ì¦ˆ¦˜¦°§X§h§€§˜§°§È§à§ø¨¨(¨@¨X¨p¨ˆ¨ ¨¸¨Ð¨è©© ©<©\©|©œ©¼©Ü©üªª0ªLªlªˆª ª¸«ü­0­H­`­x­�®p¯H¯`¯x¯�¯¨¯À¯Ø¯ð°° °8°è±±±<±T±l±„±œ±´±Ì±ä±ü²²,²D²\²t²Œ²¤²¼²Ô²ì³³³4³L³d³|³”³¬³Ä³Ü³ô´ ´$´<´Tµ(¶¶¶0¶°·D·à·ø¸¹ºLºlºˆº º¼ºÔºì» »(»@»X»¬¼Ì½ô¾¾Ü¾ð¿À¿ÔÀèÁÀ˜Ã\ÃpĨŰÅÀÇ4È(ȸÉÜÊøËę̀ÍÐÍäΘÏhÏüÐ`ÐØÑØÒ„ÒÔÓ¤Ó¸Ô˜ÕŒÖDÖü×pØ,Ù(ÚÚ(Ú<Ú¬Û4Û�ÜÜ€ÜðݘݬÞðßlà àœátáˆâ8ã$ãøä”ä¨ä¼äÐå,åÈæ¸çtè�é0éÐéäêœê´êÄë´ìÔìäíÀíÔîîìïÌð¬ñ´ó ô ö÷øäúû8û¼ûØülý,ýüþþ$þ8þLþ`þàþôÿÿÿ,ÿDÿ¨|�œ8Ðä@T¤ô(8xŒ ´Ð0”¨(lÜ$¸(”Ø @ X l € ” ¨ ¼  p Ô 8 � è L ` x ˆ œ ° Ä Ø ì   ( < L   ô€Ô@Th|�¤àô¸Ìàô0Hˆ¤¸Ì,„˜¬À 4ˆèü\¼8L¤(< ´ÈÜ<ì(<Pdx”¨¼Ðì0Œ4¨$8H\l€”¨ÀØ(Äèttˆœ¸Ìàô¤¸Ì8 œ ô!”!¨!Ü!ð"˜"¬"ø# # #4#H#\#p#„#˜#¬#À#Ô#è#ü$ $H$Ä%d%|%”%¤%¸&0&@&�&¨&Ä&Ü&ì&ü'','<'L'œ'è'ø(((Ð(à(ð)8)H)X)¸)È**,*ˆ*˜*¨+€+�,<-- -8-P-h-€-˜-°.”/˜0 0ô1ô2 3T4$4„4ä5�606@7l88Ä9€:@:ü;„;ü<Ø=|>$???4?L?d?|@ˆA8APAhB@CDDDÌE¼FLF\FlFøG G¨G¼GÔGìHHHÜHôIØIèIøJJ KK¼LPLhL€L˜MM MÀMÐNNÜNìOtP€PðQQlRRR R0RˆR˜R¨R¸STT T UU€VV¨WLWÌX”YpZ Z[x[Ø\$\Ø\è]h^h^Ø^ð_P_Ð`H`°`Àaa$a4a”a¤bÈbØcTcÀd0dÈe\ffŒg@h hÈhàhøiüjjÈjØjèkkkÔl„mXmpmˆm nnÔo€p8pürss�søt¨uLuÌvPwwÔy¬{P{`{p|,|è}8}ˆ} }¸}Ô}ð~аÐð€€ ‚‚€‚�‚¬‚ȃ<ƒ„††ü‡ðˆ¨‰hŠ(‹‹`‹¸Œ@ŒÈ�lŽ4Žä���Ð’’¬“4“À”H”ð•”––ˆ— —´˜8˜´™dš4›lœl�džXžÐŸHŸ¤Ÿô �¡¡˜¢¢¬£H£Ð¤P¥¥¬¦¦ˆ§Ø©ª\«Ä¬¬¬0¬è­¨®d¯¯ °0°Ì±`±ä²d²ô³„³”³¬³Ä³Ü³ô´´´,´Dµµ$µ<µTµlµ„µœµ´µÄµÔµì¶¶¶4¶L¶d¶t¶„¶œ¶´¶Ì¶ä¶ü··,·D·\·t·Œ·¤¸ ¸t¸Œ¸¤¹pº<ºØ»h»ð¼p½|¾„¿4¿Ô¿ä¿ôÀÀÀˆÁÁ„œÃ8ÃÈÄpÅ8Å䯔ǰÈÈ´É Ê<ÊàË4ËàÌÜ͈ÍøÏÏœÐ$ÐÀÑØÒ|ÓpÔÕÕ¬ÖèטØ ØÔÚhÚøÜ(Ü„ÝtÞDÞàßüà àhà¤áá$áèâ8ããÄä¸åˆæ4çç„è,é,éèê„êÐëœì�í í´îÀï`ðññ€ò8òøó�ôlõPöl÷$÷´ø\ù@ùÐúìû<ü4ý0ýìÿ ÿ¸p\t¤¼Ü 8T�ð<Pp„Àø<t¸ÌÜð4˜¨,¨lÌDxØ < ä  h Ì p Ü € °  ˜dܘ\ð@äh´X°@4�ìløˆ œœÌ0X”” €Ø˜\è T!!˜!è"p"Ð#$#h%T%¼%ø&d&œ'Ø))�*++¸,H,à-|..„/œ0T1D2,2p2Ø343È44h4¼55ˆ5ø6P6È7@7 7Ü8<8”99œ:x;D;€;¸<\=€=Ì>x?4?H?`?˜?´?ÌAHBÜD`F@GXHÔJ(KÈKàKøLÄM´MÌMäO”QXR T$TØUüWTXLY¬Z¸\„]|^D_<`xa¤bhc8dteˆfØg|g”hHiljpkŒl`m@nn(o$ptpŒqtr¤sltŒuèv$v<vtw@w¤xhyTzzz {ˆ||˜|Ð}} }8}¬~0~p~È~à��T�ˆ�ô‚`‚øƒ8ƒPƒhƒ€ƒ˜ƒ°ƒÈƒàƒø„…ȇä‰$ŠÈ‹‹‹´Œ\� Ž��à‘‘è’l“H“ä”,”D”\”t”Œ”¤”¼”ä•Ô–˜—ȘL˜d™ˆšDšð›ð�žœ ¡¤£x¥H¦¤¨H©p«¬­„®˜¯Ä°ä±à³l´<µ˜·D¸4º(»�¼À½¼¾�¿pÁ<ÂlÃ4Ä$ÄìÅÔÆÐÇtÈ�ÉlÊÊ4ËHÌŒÍ<ÎÎÔÏ(ÐÐŒÑDÒTÓ Ó¬ÓäÔÔ¸ÕÜÕøÖÖL×LØ(Ø@ØXØpÙàÜ�ݼÝÔÞtßDßÜà¤á¨âôãôäèåäççÜè¨èôéÌê êÔììLíXîîØïHððTñpò”óÜõPöÈöàöø÷÷(ø„øœùÈúÄû¤üäþÿ„T@üD„ œ œ  ôX88üdˆ°Œd¼$ÜŒäxØ |!!ä"0"|#Ä$Ü%è' (x)**ä,(-„.H/Ð0˜1h2¤3L3È4Ð649 9è:„;�=¼@XBB C`CxEXFèH€JhJ€KÜKôL MlN O€PÜR„S\UVìX¬ZŒ[h\]$^¸`<a|b$c(cðdÔf ghi¤jðk¤lìmÜnxo0pÀrrät uŒv¨wôxpypz z¨{d|8}L~P€$� ‚D‚\‚t‚Œ‚¤ƒƒx„”‡H‰@ŠÌŒ¤�LŽŽØ�ì�Ø’,“€”�•˜–̘ؗܚ¨›Tœüžè 8¢`£ô¥<§4¨¬ª˜«h¬\­x®Ì¯¬°°²L³H³è´Ð¶T·<¸8¹º »<¼h½¾¼ÀÁ´ˆÃÐĸÅàÆÜÇØÈ€ɬÊÔËŒÍ@ÎðÏ´ШÑÀÓÓàÔüÖD×<×ÄؼÚ@Û@Ü<Ý Þ ß$à4áâ€ãØåTæ0ç`è8éXêLë`ì í4îTîôð�òDô ôàõ¸÷ø8øLø`øtøèú$ú„ûìüèýDþXÿDÿüŒðhàì°xÔ$˜D L à è d  Œhظh$ìð xÔ °$T¤À@М  ü"Œ#H#Ä$<%`& &�''X(,)d*Ì+\+¨,h-d.È/L040¸1|1ä2€3@4@5°6à7ü8¸9p:Ä;ø<ø=¨>¼?„?”?à?ø@D@\@¬@Ä@ä@üAAdA|A”A¬AÄAÜAôB B$B<B\B|BœB´BÌBìC C,CðDDTD”DÐE@E´F$F¸FÐFèG<G€GüHdH|H”H¬HÄII(IpIˆIÈIàJJJ0JpJˆJ J¸JÐJèKKK0KHKhKˆK K¸KÐKèLLPL”M$M˜M°N N8N N¸NØNðOOpOˆO O¸OÐOèPP P8PPPhP€P˜P°PÐPðQQ|Q”Q¬QÄQÜRtRŒS$S<SÔSìT T¤T¼TÔTìUUU4ULUdU|U”U¬UÄUÜUôV V,VÈWdW|W”W¬WÄXDX\XÜXôYtYŒY¬Z,ZDZ\ZtZŒZ¤ZÄZäZü[[4[T[l[„[¤[Ä[ä\`\Ü],]D]”]¬]ü^^4^€^˜^°^È^à^ø__0_H_`_€_ _¸_Ð_ð``0`€`ða@aøb¤c4cLcÜcôd„dœd¼eLede|e”e¬eÄeÜeôff¬g g¸h,hDh¸hÐiDi\i|iðjj j8jPjhj€j˜j°jÈjàjøkk(kHkhkÜl<l„lìmmhm€mènn nˆn n¸nÐnèoo o@oXopo�o°oÈoàoøpp0p�q¨rrXssät´tÌtätüuuÐvŒv¤w¸wÐxäxüyy,yDy\y|yœy´yÌyäyüzz,zDz\{x{Ì{ä|8|P|¤|¼|Ü},}D}\}t}Œ}¤}Ä}ä}ü~~,~D~\~t~Œ~¤~Ä„€€4€¼�D�Ì�ä‚l‚„ƒƒ ƒ¤„,„D„Ì„ì… …œ…ø†@†ø‡‡Ä‡Üˆ”ˆ¬‰h‰€‰ ‰ÀŠX‹0ŒŒÜ�°�È�àޏŽÐ�¨�À�à��ä�ü‘‘,‘D‘ü’È“””\•$•Ж|–”—@—X˜˜˜Ì™D™T™l™„™¤™¼™Ü™ôšš,šÔ›xœ œÈ�xž,žàŸ�Ÿ°ŸÈŸè    8 X¡P¢¸£¨¤˜¥Œ¦|§8§ð¨¬©hª,ª°ªÈ«L«d«è¬¬t­­�­¨®4®L®Ô®ì¯p°°Œ°ü±p±ä²P²¸³ ³Œ´4´Øµ€¶(¶€¶Ô·(·|¸ ¸Ä¹hº ºlºÌ»»0»H»”»ô¼P¼œ¼´¼Ì½½€½è¾8¾Ä¿„¿ÔÀhÀüÁxÂ4Ã<øÄ0ĨÅ Å8ÅPÅÈÆTÆàÇXÇpLjÈÈ�É ɤɼÉÔÊ\ʼËxÌ4ÌèÍÜÏÏÈÐŒÑPÒÓ ÔPÕÕøÖØרظÚÚÐÛÛÛ$Û4ÛDÛ\ÛlÜ(ÜäݔހޘßHà4áââðãüääåÐæ¼ç¨è�éœê ë˜ì€íxîpïLðLñ8òò¼óhô ô$ô<ôèõ¸öˆ÷\÷t÷Œø`ù$ùèú¬úÄúÜûœüŒý|þhþ€þ˜ÿˆ€tlŒÔÌ„<ìÌ 0 ä ü  , D \ t | „ |¬Ä¸ø8päx¬øT°„ 4!„"¤#È$à&<'Ì(è)ð*ø,-D.¬/´0D0¼0Ô0ì11141L1d1|1”1¬1Ä1Ü1ü2242Œ3844ô67888Ü9ø:à<=l><?L@\ATB8CDhE´G8H IJJìKÌLèMüNÔO´PÀQÔRœS`T`U,V0VüW4W¤X<X¸YY¨Z[,[¨\$\¸]]Ø^˜_X`pa„b`c,côdàeÄfðhiiüjàkÄlÄmìo o|oàp°pÀpÐpäpäpôqqq$q4qHqXqhqxqˆq˜q¨q¼qÐqàqðrrr r4rHr\rpr„r˜r¬rÀrÔrèrüss$s8sLs`stsˆsœs°sÄsØsðtt t8tPtht€t˜t°tÈtàtøuu(u@uXv`w w¸wÐwðx x,xLxdx|x”x¬xÄxÜxôy y$y<yTyly„yœy´yÌzÄ{à{ø||(|@|`|||”|¬|Ä|Ü|ô} }$}<}T}l}„}œ}´}Ì}ä}ü~~,~D~\~t~Œ~¤~¼~Ô~ì<\|œ¼Øø€€0€H€`€x€�€¨€À€Ø€ð�� �8�P�h�€�˜�¸�Ð�ð‚‚ ‚8‚P‚h‚€‚˜‚°‚È‚à‚øƒƒ(ƒ@ƒXƒpƒˆƒ¨ƒÈƒè„„„4„L„d„|„”„¬„Ą܄ô… …$…<…T…l…„…œ…´…Ì…ä…ü††,†D†\†t†Œ†¤†¼†Ô†ì‡‡´ˆd‰X‰h‰€‰˜‰°‰È‰èŠŠ Š8ŠXŠpŠ�ЍŠÀŠØŠø‹‹0‹H‹h‹€‹ ‹¸‹Ð‹èŒŒŒ0ŒHŒ`ŒxŒ˜Œ°ŒÐŒè�� �@�X�p�ˆ� �¸�Ð�莎Ž0ŽHŽhހޠޏŽØŽð��(�@�X�p�ˆ� �¸�Ð�è���0�H�`�x���¨�À�Ø�ð‘‘ ‘8‘P‘h‘€‘˜‘°‘È‘à‘ø’’(’@’X’p’ˆ’ ’¸’Ð’è“““0“H“`“x“�“¨“À“ؓ𔔠”8”P”h”€”˜”°”È”à”ø••(•@•X•p•ˆ• •¸•Е薖–0–H–`–x–�–¨–À–Ø–ð—— —8—P—h—€—˜—°—È—à—ø˜˜(˜@˜X˜p˜ˆ˜ ˜¸˜Ð˜è™™™0™H™`™x™�™¨™À™Ø™ðšš š8šPšhš€š˜š°šÈšàšø››(›@›X›p›ˆ› ›¸›Ð›èœœœ0œHœ`œxœ�œ¨œÀœØœð�� �8�P�h�€�˜�°�È�à�øžž(ž@žXžpžˆž ž¸žÐžèŸŸŸ0ŸHŸ`ŸxŸ�Ÿ¨ŸÀŸØŸð    8 P h € ˜ ° È à ø¡¡(¡@¡X¡p¡ˆ¡ ¡¸¡Ð¡è¢¢¢0¢H¢`¢x¢�¢¨¢¸£<£P£`£x£�£¨£À£Ø£ð¤¤ ¤8¤P¤h¤€¤˜¤°¤È¤à¤ø¥¥(¥@¥X¥p¥ˆ¥ ¥¸¥Ð¥è¦¦¦0¦H¦`¦x¦�¦¨¦À¦Ø¦ð§ §$§œ§¬§¼§Ô§ì¨¨¨4¨L¨d¨|¨”¨¬¨¼¨Ð¨Ð¨Ð¨Ð¨Ð¨Ð¨Ð¨Ð¨Ð¨Ð¨Ð¨Ð¨Ð¨Ð¨Ð¨Ð¨Ð©©$©4©l©¤©´©Ä©Øª4ª˜ªø«L«d«|«”«¬¬$¬Ä­­X­h­€­ ­°­°­°­°­°­°­°­°­°¯\±t±¸² ²x²¼³³|³¸´´µtµŒ¶T¶Œ¶Ð··<·`·¤·Ø¸€¹(¹@¹X¹p¹Ðº\ºì»„»˜¼¼˜¼°¼Ô½¤½è¿t¿”¿¼¿äÀÀ4À\ÀŒÀ°ÀØÀØÀØÀØÀØÀØÀØÁ\ÁpÂÂôÃÐÄ0Å0Æ ƤÆèÇÇ@ÇTÇhÇ|Ç�ǤǸÇÌÇàÇôÈÈÈ0ÈDÈXÈlȀȔȨȼÈÐÈäÈøÊÌXÍxÎ4ÏÄÐÔÒ ÔÔ4××ÐØôÙôÚˆÛÛ0ÜHÝtÞÄßtáââ�ã�ãÈää<äxäÜå@å”卿8æüçç<çXçlçÌèè¼éLéˆé¨é¼êê4ê”êäëë(ë<ëTëlëàîHñHò(ò@ó\ôìöäöôøøúØü¼ý|þ�ÿü¼@è”¼Ø  È ØÄ ¼Àø8TÄ8H\xŒœ¬Œ 0è 4"è"ü$Ø$è$ø%%%x%”%¸&|&ð'�'¤'¸(((ø)Ð)ä+Ø+ì, ,,,D,d,„,¤,¼,Ü,ô--4-T-l-|-”-´-Ì-Ü-ô..<.T.d.|.œ.¬.¼.Ì.Ü.ì//$/</L/d/„/¬/Ä/Ô/ì0 00,0<0L0¨11X1´2P2è3`3|3�3¬4,4Ä4Ø4ì5Œ6,6ˆ6è7(7l7ˆ7¤7¸7Ì7è88 8<8X8ì9|9�9¤9¼9Ô:H:¸;(; <8<Ì<à=à>D>ð?Ì@@ABBTB C@DðElE€G4GHG\GÀGÔHDH|H�H¨H¼HôIPIèIøJ$J@J\K8L LtL°MLMäN NpNˆOO,O`OtOèPhP€P Q¸S˜S¼SÐSìTTT<TlTŒTœU`V€VœWlW€W˜X X¸Yø[4[L\¼\Ô\ô] ^ ^8^X^x^˜^¼^Ü^ô__,_H_`_x_¨_Ä_à`\`|aaDa`a|a˜a´aÌaàcc`c¸d<dÀdÜdøee0e”e¨eÄeàeøff°gTgÌgài,jxj�j¨k˜l|m,mDm\m¼mÐmìnn$n8nPnho<oìpp p8pTplpÐpäqPq¼r rœssXs˜s´sÐsìtttXtlt€uu\u¨vv,vHvdv|v�v°vÄw€x<yyìzzz4zLzpz�z´zØ{Ð| |t|ˆ|œ|ô}H}\} }´}ð~4~|~´~ü$8ˆÀ€€,€@€T€¼��|�´‚‚t‚؃ƒPƒ”ƒ¼ƒä„ „4„\„„„¬„Ô„ô……4…T…t…”…´…Ô…ü†$†L†t†œ†Ä†ì‡‡<‡\‡„‡¬‡Ì‡ìˆ ˆ,ˆLˆt‰l‰Ü‰üŠT‹ Œ(�|�4�d‘Ì“P”T•ü—„™ ™@™x™”™°š,š°šÌšè›pœ œ(œDœ˜œð�H� �¼�Ø�ôžž,žHždž€ž”ž¨ž¼žÐŸ8Ÿ¤ ( ¬¡¡”¢¢€¢”¢¨¢¼¢Ð¢ä¢ø£ £ £<£X£t£�£¬£È£ä¤¤¤8¤T¤p¤Œ¤¨¤Ä¤à¥d¥ô¦¦�¦¬¦È¦ä§ˆ§¤§À§Ô¨h¨|¨˜¨´©<©€©œªª|«««8«T«p«Œ«¨«¼«Ð«ä¬`¬è­Œ­ ­´­È­ä®®®8®T®p¯ ¯Ø°´°ì±$±\±”±Ì²²<²„²Ì³³L³„³¼³ô´,´d´x¸ä€ÇÇ$Ç8ǀǔǨÈÈdȀȔȨÈÄÈàÉ$ÉŒÊ(Ê@ÊôËÌÌͬÍÈÏÄÏØÐ4ÐtÐØÐôÑÑLÑœÑÌÒÒ0ÒpҌҨÒÄÒàÒüÓ”Ó¨Ó¼ÓÐÓäÔÔ@Ô\ÔxÔ”Ô¨ÔàÕ4Õ˜ÖtÖ¼×TÙ¸ÚüÜÜhÝÝÝ0ÝLÝèÞ|ÞÈÞÜßPà,à¸àÌáá8áLáháäáøâ(âDâXâtããpã„ãäãøä€ååPåœæHæèççç4èè,è@è\è¤èÀèÜé@éŒéðê@êTíî4ïŒðÔñpò|òìô(õpõÜö ødøàù„údûXü$ü„ý@tŒ  ˜ °   è p   | Ì0Ì<¬Ä,Ð,äÌ�ÐL¬hØxÄ,èÈ(„ÀhèÀ¬<  „!$""ì#´$ì%d%°'D'ü(@( (Ð)Ð* +L+„+Ì,,,L,�,¤,¼,Ô,ì---4-`-|-˜-È.”.¤01ð3`4x67¼9ì:À;ì<¬= >>à?è@ÔAÌC¨EðFðHdHôIÔJPJèKˆLtM OHPLQ@S`T¼UlV”X$Z,[T\à^0_ŒalcŒcØe„fÀhXiÌkl,m|o,q s0tuDuœvxwxÀz {Ø|À}ì~Є€¼�à‚¸ƒÜ…ˆ†H‡ˆˆT‰ð‹ Œ”��Žè�<‘Œ’ ” ”è––l—8—ø˜È™¼››ÜœôžHŸÀ \¡�¢d£Ä¥8§,¨°«(¬H¬Ä­ ¯¯¸±²t´µTµÐ¶Ä·¤¸Ô¹Üº¼»ð½˜¿¨ÀìÁ|ÁÔœÃÄ0ÅtÆ”ÇÐÉÊ”ËÔ͈΀Ð ÐÔÑàÒÔÔ�ÕpÖÖ¸×LؘÚ Ú¬Û¬Ý€Þ à$âã,äÄåÈç$èé¸ëìÈî$ïÜñ¨ó(ôàö4÷¬øTùdúû4ü0üôý þ¸ÿ„¼à¨œÀœ@d , Ø ´ \ h¸”Høx`äèT €¼!4!¸"è#Ä%d&P'Ì)(*ô,<-ð/h1L2¨3Ô5P6Ð8X:@;p4@hAÌCTD(EøHLIÈK„KÐL M8NdO\P¼R<RÄSÀTÄUèWXYh[P]¬^0_@`4`Ðbc�epg�h¨jpl mLnLo˜qrHs|ttèv\wŒwÔx xxz|$}t~~Ô€0�„‚pƒ„œ…|‡tˆ|ˆðŠ‹<Œ¨�àŽ �Ü�ü‘Ä’ˆ“�”È–—„˜è™ìššš$š\šœ›\œH��Ğܟä ô¢¤¤,¥˜¦ü¨�¨¨© ©8©ÔªXª¸«4«œ¬<¬¨­­Œ­ô® ®$®D®d®|®”®¬®Ä®Ü®ô¯ ¯$¯<¯T¯l¯„¯œ¯´¯Ì¯ä¯ü°°,°D°\°t°Œ°¤°¼°Ô°ì±±l±l±l±l±”²4²¨³¤´´ µì¶„·l·ø¸Ô¹¬ºÈ»Œ¼,¼Ì½|½ô¾Œ¿8¿ÐÀ(ÀœÁÁ„Â<ÃdÃÔÄ,ÅÅôÇ@Ç È�ɰʼËxÌÌøÎ ÎØÏìÐèÑôÓ<ÔÔðÖ×dØ@Ù¬ÚxÛ ÛÈ܈ݨÞ°ßÜà¤áðã(ää¨å æ¼çÔètédê,ëdí`ïŒð¨ñœò´óhôdô˜ôðõ|õÔöh÷ ÷Äú|ûèüLý|þØÿlÿô Ì   À œ è � Ô  ü ì D ð ô ô Ä \  ` x ˆ œ ¤ ´ Ä ¼ ü   À @ À !Ä "H #L #À $8 $  %P %Ü &€ 't (P (Ü )¤ *( *Ð , ,¨ - -Ü .è /p 0( 0¬ 1x 2 3d 3Ø 4( 4œ 4ø 5„ 6t 6¬ 7€ 8@ 9 9¼ :ô ;¸ T ?< @l A� B„ Cˆ DÀ Eˆ FH G¸ Hð IØ K° MD Nx Oh P4 P¼ Qè R¸ Sp T Tì Uô V˜ W¸ XÀ Y` Y˜ Z„ [¬ \� ]„ ^P _ˆ `Œ a| a´ bp cˆ d€ e eè fÔ gˆ i jÐ lˆ n@ oÄ q8 s4 u< wH yH { || }˜ œ �D ‚| ƒì …< †è ˆ\ ‰Ð ‹ Œx ŽT �È �ø ’È ” •€ —T ˜Ä š ›\ �´ ŸH ¡h ¤ ¥¸ §Ì ©œ «ä ®0 °h ³ ´¤ ¶d ¸ ¹ä ¼ ¾h ¿ô Á  à Äð Ç ÈÜ Êt Ì, ͨ Ï” Ñø ÔÄ Ø Ú< ÜT Þ< àœ â| äœ åü çØ éØ ì@ îÀ ð˜ ó$ õô ÷À ù` û8 ý„ ÿì L  h h t   ” < Ä D   ¸ ¼ ü T è  " #\ $Ô &Œ (Œ *X , -œ .´ 0 1Œ 2Ì 4@ 58 6Ä 8ˆ :ä <4 =€ ? @È C@ E Ft H¨ IÔ Kˆ M` O< Q˜ S8 T` U¨ W< X” Z \ ]( ^˜ `X a´ c¤ e fl gð iP jô lh nx p0 r s tx uˆ v° x( y| {h } ( €¨ ‚< ƒˆ …L ‡œ Š ‹È �ü �à ‘ð ”„ –H —à ™° › œØ Ÿ,  Ä ¢” ¤È §´ ©< «p ­T ®¬ °0 ±ø ³À µü ·Ð ¹\ »t ½� ¿” ÁL ÃP ÅL ÆÄ É Êø ̘ Î0 Ð| ÒÔ Ôl Õü ×  ÙÐ Û˜ Ýð ß” àè âl ä¸ æÔ èŒ ê| ìp ï ñ´ ó4 õ öü ùH úØ üH ý  ÿ\    ¨ Ô €  Ð x Ð ð ¨ X ì T Œ Ø  $ È œ "< #| $� %° &ü 'ä ), *4 +` ,T -` .p /Ì 1$ 2ø 3ì 5t 6À 80 9` :t ;  <œ ? A4 BÀ E0 GT Iô LH Nè QP S4 T¤ W Y Z` \h ^ `X b8 cô el fˆ hh jØ lä o$ q sp u| wx y$ {( |ì ~ü €¸ ‚ì „Ô ‡ø м ŒT �Œ �h ’4 ”Ô — ™Ø œL ŸH ¡ì £Ä ¥\ ¦t ¨| ª¸ ¬Ì ¯Ü ²� µÌ ¸à », ½ ¾, ¿x Àð Áô Ã| ÄŒ Æœ È\ É� ÊÔ Ì Í μ Ð$ Ñ� Ód Ôx Ö€ ×ô Ù< Ú\ Û@ Ü0 Ýœ Þä ߸ à¼ á  â¬ ãÌ ä” å¼ æ¨ çp èx é¸ ë ëØ ìÈ í˜ ï ð, ñ8 ò òè ôx õ¤ öt ÷„ ø° ù¬ ú< ú” úð ü ü  ýt þ¼ ÿ” 4 ¬ h ° Ô d  (    D D ¨ d \ ü è   0 H ` x � ¨ È Ø ¨ ð È p Ô ì ˆ !à # $8 %¤ ' (ð *T +œ ,Ä . .° /¨ 0l 1¬ 2Œ 4, 5 5ð 7t 8Ä :l ; ;” Ø ?D ?À @P AD B Bø C  D` E@ F  Gˆ H˜ I¸ J` Kˆ L$ Lü Mø N  OÐ Q8 RH Sh T¤ V¨ Y [` ] _ `´ b� cì eü gp i j` kÀ m$ nH oÌ qL rÔ tØ và x| z | }Ð 8 €Ì �T ‚D ƒp „X …8 †d ‡œ ‡´ ‡Ì ˆ¨ ‰| ŠP ‹Ì � �˜ Ž � �Ü ‘ ’¤ ’Ü ’ô ”H ”¬ ”ì •ô — —4 —L —d —| —” —¬ ™0 š š4 šL šd š| š” š¬ œ �° Ÿx  L ¡\ ¢¨ £ì ¤¸ ¥À §4 ¨H ©Œ ªÄ ¬ ¬ô ¬ô ­ì ®ˆ ° ±¸ ³4 ³ø µT ¶¼ ·\ ·t ·Œ ·¤ ·¼ ·Ô ·ô ¸ ¸, ¸D ¸d º »Œ ½\ ¾ü À Á Á� Â| à Ãè ÄÐ Åt Æ@ Æø Çx ÇÌ È„ É` Ê Ê� Ë\ Ì4 ÌŒ ÎÀ Ï€ Ѱ Ô Õä Õü Ö Ö, ÖD Ö\ Öt ÖŒ Ö¤ Ö¼ ÖÔ Öì × × ×4 ×L ×d ×| ×” ׬ ×Ä ×Ü ×ô Ø Ø$ Ø< ÙÜ Û¬ Ý€ Ý  ÝÀ Ýà Þ Þ Þ8 ßä àÐ áø â„ ã ä äH ä¤ åT åè æ, æl æÐ ç4 çh è è` é$ éà êX êÜ ëL ìH ì¼ í í| íà î4 îà ïX ïô ð€ ñD ò óH ó¬ ô( ôl õ õt õÐ ö0 öà ÷Ø øØ ùp ú8 ú¸ ûp üd þ, ( Ü Ì ¸ ˜ ì h ´ ì À è  Ð Ø "< % (P + .X 1ä 4T 6ì 9Ä øB˜D\F¼I\JøLÜN°P¸RäUTX$ZØ]À`HcpfÔh¤jüm”oÔqds¤vxð{h}8œ‚P„Іdˆ„Šü�T�0“(”è—™�›äžt ¸£€¦¤©\«ä®Ì²´€·pºœ½„¿ØÂ$ÅDÆ€ÇôÉhËXÍ�ÎÔМÒ�ÔLÕÈ׈Ù ÚÈÜݸßÄá`ãHåçPéàì4îÔñxô”÷øúxý„¼¤¸È ´ ä˜xÐ|Ôlxðè"4$0%`')*X,-t/0¤2x4˜6œ8ì:Ð=<@AtCdEŒG\I€JÔL N¤PdQØSÌVWŒY€[Ì]¬`bÜde˜gœi4j´l¸op(qàsìu¬w4yL{Ô|ü~°€´‚Ø…lˆH‰À‹x�Žð�˜’È•<—\™¼œtžè¡¨£\¥x§ô© «È®@°x²xµ·Ô¹ºà¼ø¾øÁxÄ(Æ$ȘËPͼÐÒ´ÕÄ×`ÙHÛÈÞ˜á”ã€åÜè„êäí˜ðŒóLõL÷¨úLü8þ´hXÔ t € ð Ø¼ø¼´ P"L$ä'¸)Ð,L.€13Ì6ô9Ø=,@ÐE IK„NtQ¨TŒVüYÔ]_ìcehh4kdm,o|r tàvàyl|l‚,…x‡ˆôŠ|ŒP�Ø�Ì’“`”ô–d˜™ˆ›|�Àžè ˜¢¤¤P¥Ð§èª`«Œ­D¯D°ü²³Äµœ·|¹¨¼@¾À< İǨÊÌͼÐÐÔ<×ÄÙÜÜ€ßxáðä¼çÄê¬íüñ”õˆùHûhþ𠼜 D 0¬pÜ”ØXôà „!Ì#p$Ì&à)X+ä.80¨3�6x8 9ð<,>8?°A°DEðH,J´M OÐRÌVW�Y˜[ä]È`(b´dtfÀiHkTnqrdtPv|xDzŒ}~p€0�”‚Є †ØˆÐ‹T�ø��¤’�”`–ˆ˜€š0œ€Ÿ¡t¤§Pªì®P°x³¶¸º„½0¿„ÁlÃäƈÈÔË ΤÑÓà×ÚÜÔà ã åÈè$êHí<ðˆóü÷4úŒþ@¸¼ X,x08°| #&L(x+(-ô14„88:Œ=X@dC@EìIL|O$R@U°WèZ ]¨_¤b,ef”hdjkôn`q0t$vÜy |Ѐ,ƒ<…܉Œ|޼‘””˜–|˜Ø›x�¤ D£0¥„¨«­°° ³0¶@¹|» ½<¿¨ÁàÃÐÆ0ÈØÊÄÍ<ÏìÒ\Ô¨×pÚ`Ü„ß4âãØæ,èÄëì”î˜ðàòüõ„øLúxý” l xü¼,<ìà œ"L$\&à(H*H,|.d02$4”6è9¸<Ô>ðADD$G˜K(LìOQœT�WœZ€]èa\cdeàh¼kDnq0thx{è}쀄ƒP…¨ˆ`‹l�t�ô’̗ؔLšœ,žÜ¡À¤ §ª$«8¬¼­¼¯H±²8´ µð· ¹ºü½P¾ À¸Ã$Å€ÇÄÉ,ÊLÌÎ<ÐLÒÓ@Ô°Ö׌ØàÚ`Ü|Þ(ß\áâhãŒäÀæìè¤éðëŒí”ïDññxò`ó´õdõ¸õÐõèöLöà÷ÜøøTø ø´øøù<ùxù�ù¨ùÀùÐùàùðúúú ú0ú@úPú`úxú�û°ûÈüPý�ý¨ýÀýàýøþþ(þ@þXþpÿXXl|”#ÿuý #'™²'+´!7+° /´$7+°/´+°/±é² +³@ +°(/° Ö´$<+°$±+±é°±+°2±é°2°±+±é°±%+´#<+±)+±² 999°°9±±9901#54>54&#"#4632#5!%!!k%45%Z%54%F:I8Uolat³ZþÅÚýy4ýÌ.J1-9 /7%B00=#3?RJswhýëhhÖ«üUF|ÐÙ <²+´ +²+° /°Ö°2´<+°2´<+± +± °901#'#5Ð'STÙþ®ßßRý�hh(Ð%Å ^²+°3´ +° 2° /°Ö±é³+´+°/´+°± +±é³  +´ +° /´ +± +013#'73#'(]' ]'Åo††oo††ÿì¹I²+² 333°/³ $3´++³$2°/³$3´++³$2² +³@ +²222° /±!+°6º>ýô¨+ °.°.°± ù°±ùº>òôp+ ° .°.° ± ù°±ù° ³ +³ +³ +³ +° ³ +° ³ +°³+³+³+³+° ³ +° ³ +³ +° ³ +³ +° ³ +@ ........................°@013#3##7##7#537#537337#3å$]jiu'L&|'L&erly$L$}#0| }¹ÄD®DÓÓÓÓD®DÄÄÄþø®!ÿ‚+18Ų+°3´++°22² +³@ +°/±,é°-/°#3´7+°2²- +³@ +°9/°Ö´01+° Ö´ &+°0±+²,222´+²#2222°±5+´<+° Ö´&+±:+±0 ° 9°° 9±²8999°,°$9°-±99°°901%#5&53.546753#.'%5>54&'oi;ÒO $h]e`;[gO@243"þí8<¯CC9MÃ`sggÙ % OXUg 66iU7Fù '8±ð>1ZþzJ716ÿì[Å $0±² +°3´+7+²+´%  +´%7+´  +´7+± À/´ 7+°1/°Ö´ +° ±+´+°±#+´(+°(±.+´+±2+± ´$9±.(³ $9±%+²"#999± ²999012"&46"32654&%3#2#"&46"32654&ÇHcdŒedF)<<*)<;oBþuBÚHceEGddF)<<*)<;­dIEdeŒeF;*)<;)+;^ý'VdHEdeŒdF;)*;;(+;4ÿé}Å*3޲+²+±2é²+´%7+°4/°Ö±/é³ /+´(<+°/±"+´&+°±+´1+±5+±(/° 9°"´,2$9°²+999±±99±%2¶ ,$901%#"&5467.54626=3#>54&#"'32Ò2 ;D\qE]/"dŽ\?2EljÙp&;Y$]]$Y;&2ÿöÚ R²+°/°3´7+°2² +³@ +° /°Ö°2´+° 2² +³@ +² +³@ +± +01##5#5353ÏFÏÏF FÏÏFÏÏWÿmÀh C² +´+°/´+° /°Ö°2´0+´0+°´+°/± +0173#5>=#Wii5hxƒ&&3.ð8(°/´7+´7+°/±+´ +±+01#5ñ8HHP¸h5²+´+²+´+°/°Ö´:+´:+±+017#5¸hhhhÿøÿìÙI²+°3²+°3°/°Ö´+±+°6º=ì±+ °±ù°±ù±..°@013#å7í7Ùý+ÿéûÅ G² +´C+²+±é°/°Ö±é°±+±é±+±± 99±±99014>32#"& 3265+.@;!èwqrvvþäŒJFWYˆM0þŒ¯¹»ÓþßþÜ�—f[ÅC²+²+´ +´+° /°Ö±é² +³@ +°´+°/± +01#5>73#�f>:Xù? .Rý;"ÿÅl²+± é²+±é² +³@ +°/°Ö±é°±+± é°2² +³@ +±+±° 9°³ $9° ° 9± ±9901632!!>?654&#"2ãe~–dA8uþ(Ro\`P<… Ïöt\„R6#B-Wu?47U9L© ÿéúÅ$޲+±é² +³@ +²+±é² +³@ +´ +±é°%/°Ö±é° ֱ鰱+±é°" Ö± é±&+±°9°"µ $9±±99°° 9°° 901"#632#"'332654##5>54&L9XÙesc@8ƒmÚXHHEN“% _OCxSEåh[l'ODexåMJKC�K,A8AÅ \² +²+´  +°3±é°2°/° Ö° 2± é°2² +³@  +² +³@  +±+± °9± ± 9901%!533##5GþÕBAiiXÞª]¾þ4Oªù6þÊ#ÿéÅ!§² +±é² +³@ +²!+±é´ ! +±é² +³@ +° 2°"/°Ö´<+°±+±é±#+°6º?_÷ + ° .°.° ±ù°±!ù°.³ !....°@±² 999°±99±°901!632#".'332654&#"#ÜþÙ;Hfˆk)E-%XrHSTG):Q5ÅWÆ+ƒipŽ)/wXLO[%‚+ÿéÅ%j²+± é²+± é´ +±é³ +°&/°Ö±é°2°±#+±é±'+±°9°#´  $9°° 9± ²999014>32#.#"632#""32654&+"3G?#Qk X >.LQ:i_zƒeîòARR>=PJC^�R3bW38‹‚O~ch‡‚SBD[WCGS.Å 4²+² +± é° /°Ö±é² +³@ +± +± °901#67!5x‹^(|þ�ÅJ þϪ¯ µW%ÿéÅ(z²+±$é²+±é´  +±é°)/°Ö±"é° Ö±é°"±'+±é° Ö±é±*+±@   $$9± $±99°± 99°± 9901"&547.5462&"32654"32654‡z…Ò…y6*w¼w*spCC87D9„RQACSu:waz{av:"@1SjjS2@á=32=<24ìM|NM?>&ÿéýÅ#p²+± é²  +³@ +²+±é´ +±é°$/°Ö±é°±!+°2±é±%+±° 9°!µ  $9°°9±²99901#"&'33267"&54632"2654&ý"3G@#Qk X >.LQBÀzƒeïð=PJ€SRk^�R3bW38‹‚O~ch‡MXCGSTAE[P¸ ;²+´+²+´+°/°Ö°2´:+°2´:+± +017#5#5¸hhhhhh¤hhÿÿPÿm¹ '¤ù-ÿ÷Ú²+°/±+0175% -éþvŠÆEÏO¡¤O2oa °/´7+°/´7+°/± +01!5!5þäþaFF¬FF2ÿ÷Ú²+°/±+015-5þŠþv EÏO¡¤OMýåk²+´+²+±é² +³@ +° /°Ö±é°±+°2±é°2°±+±é±!+±² 999°°9±±9901#54>54&#"#4632#5ý%45%Z%54%F:I8Uolat³Z%.J1-9 /7%B00=#3?RJswhýëhh"ÿr·å2>�² +± é°/±é°*/°&3´3+°2°9/´0+°?/°Ö±é°±-+±<é°<± +±#é±@+± <@  &*06$9±°9°*°9±93· #(-2$9°0±9901332654&#"327#".54>32#"'#"&546322654&#"™SZ @hÑ�žëØŸOrpr|Òy…ワû’~`BLF]œeT&¾A[6(?b:õþè#ŽX}¶ê��à C*k¸m€ß„ܘz¾MHiNm¨Wþ˦L&4‚T1E‹Ù ,²+°3²+´  +±é° /± +± ° 901%!#3# ØþçMcxhepxÛÛÙý')Lþ´PpÙc²+±é²+±é´ +±é° /°Ö±é°2°±+±é° Ö± é±!+±° 9±°9°° 9°° 901%#!!2&4+32>54&+pvaþ·(=Z-eF?}’´´/1>D?ãÐ^rÙ$;;p/T�èèþ³+49Eû(ÿé�åc²+±é² +³@ +²+± é²  +³@ +°/°Ö±é°±+±é° Ö±é±+± ²999± °9014>32#.#"32673!".(0GyLî+_^Wj{€mZ``!þõKwG/d2bjO4îNN¢Œ‰¡ejþß3Ni`P’Ù:²+±é²+±é°/°Ö±é°± +±é±+±±99013!2#'32654&+P‹žŸŠ¼¬lppl¬ÙÂþ¬ÃR�Š‹�P[Ù J²+±é²+±é´  +± é° /°Ö±é°2² +³@ +³@ +³@ +± +01!!!!!­®ýõùþd�LúRÙRéRP9Ù @²+²+±é´ +±é° /°Ö±é°2² +³@ +³@ +± +01#!!!­]éþt\Lþ´ÙRéR(ÿéÁå$›²+²+±é²+±"é²" +³@" +´  +± é°%/°Ö±é°± +´ <+² +³@ +° ° Ö±é°/±é° ´+°/±&+±²999° °9± °9° ±9901326=#5!#'#"&54>32#.#"…$9^PšÙ&u²+° 3²+±"é´# +±é°'/°Ö±é°"2°±+±é° Ö±é² +³@ +±(+±°9±° 9±°9°#°9°"°901#&=4&+#!2'4&+326 +q:>ð]Pks6+LCááJEh&0* ")8.IAC?þÆÙe^>RƒH6û<0ÿémå0 ²$+±é²$ +³@* +² +±é² +³@ +°1/° Ö±é°* Ö±,é°±+±é° Ö±é±2+°6ºïÔÂ+ °°À± ù°À³....³....°@±² $999±± 9901%2>54/&54632#.#"#".'3V8N%†µ�‹x~ŒX^WJY6B·JQ(>gA)KN8%X+U;*)S#0%…cswkGMD7*01`C9=. #7\<64ZÙ:²+²+±é°2°/°Ö±é² +³@ +² +³@ +± +01##5!k]ð<‡ýy‡RRPÿé€Ù7²+±é² +°3°/°Ö± é° ±+±é±+± °9013#"&533265#]™€‚•]eUXdÙþn‚�oþOOTJvÙ!²+²+°3°/±+±°901!#33ydþúdÖÊcÙý—išÙ u²+±33²+² 333° /±+°6º=Áï2+ °.°À±ù°ÀºÂaî¸+ °.±°À± ù° À² ...¶ .......°@01!# #333áf¨£f»h‰¢d¦†hWý©Ùý°Pý°P‚Ù &²+°3²+° 3° /± +±± 9901 # #33€sÇÈqòq»¼ovþŠ0þÐvcþâ—Ù0²+²+°3° /°Ö±é± +±°9±°901#33…]þçsÖÐoþâ»þ�cIÙ ,²+±é² +±é° /± +±°9°°901!!5!5GþL¶ýÕ¶þfÙTýÍRR5R@ÿ,úÙ@²+´7+°/´7+°/°Ö´ +°2´<+´ +°2± +01#3#úggºÙHüãH­ÿøÿìÙI²+°3²+°3°/°Ö´+±+°6ºÂûì±+ °±ù°±ù±..°@01#/í7íÙýíÿ,ÐÙI²+´7+°/´7+°/°Ö°2´ +°´<+°/°´ +°/± +0153#53ggºÔHHüS,I©Å²+°/±+013# #ÅI›EzyEÅþ„,þÔÿêÿPBÿ‚°/´+´+°/±+01!5Bý¨~22Pçä"²+´+°/°Ö´ +±+01#'‡`<•ä””ÿé )4² +°3´7+°*2²+±&é²& +³@& +°5/°Ö±3é°3°) Ö±é°/±)é°3±-+°"2´<+±6+°6ºøÁÆ+ °°À±1 ù°/ÀºÔÀ�+ °°À±1/±1 ù°/À°³+°³+º ±À½+ ³+°1³01/+²01/ Š Š#9²9·/01........·/01........°@±-)²*999°°9±&³.$901632327#"&'#"&54>7>=4&#"26=5Ìad- #()T^O] -<$1&=8:<SEXeJ<6qªIFþÌ)? %(MTG& &(-0þÁI*^  -P,<ÿéÙ]²+² +±é²+²+±é°/°Ö´<+°2´ &+°±+±é±+±± 99±² 999013632#"'#"32654& W0_I\nUqT>#K!CNNDBLK—}€ž[LþJKeV*TJX_a2,ån^_mk^bm<ÜÙP²+°3² +²+´C+°/°Ö´<+° 2°±+´<+±+±°9±° 9014&#"#3>32#‰C)@NSS%K8LYSk70aPþßÙþë0'MBþtB–Ù9²+²+´+²+°/°Ö°2´<+°2´<+± +01#7#5–SST ýô Íiiÿ&«Ù 7²+´+²+°/´ 7+°/° Ö°2´<+° 2±+013#"'53265#5XS�  $SS ý‡mG'%ii<øÙ 5² +°3² +²+° /° Ö´ <+°2± +± ±990173##�Þk¶Ög±QSÙþUÞµþ©PÌÙ<�Ù!²+²+°/°Ö±é±é±+01#�TÙý'Ù<ð!o²!+±33²+²+° 3´C+°2°"/°!Ö± é´&+° ±+±é°±+±é±#+± °9°°9°° 9±!±99013>32>32#4&#"#4&#"#32#4&#"#328TTTM$C( ÃJgþð _;3"ÿéË$µ²"+±é²" +³@$ +²+±é² +³@ +°%/° ֱ鰰 Ö±$é°$/±é°±+±é°° Ö±é°/±é±&+°6ºðÚÁÑ+ ° ° À±ù°À³ ....³ ....°@±³"$9±± 9901732654&/.5462#&#"#"'z5E7C&+N]In¶bXf3<.3PNFucËœ/7-%" C>IWTMT+$# E:LZ³ÿéœf² +´C+²+°3´++°2² +³@ +°/°Ö°2´<+°2² +³@ +°2² +³@ +±+±°901#327#"&5#5353V'14GGS Dþ™F+(ŒD��<ÿéÝ Z²+²+´C+² +°3°/°Ö´ <+° ±+´<+°´&+°/±+± °9± °901!#5#"&5332653ÝK%P:L[S:2ANSI4,NA”þ�/8aP) æ !²+²+°3°/±+±°901!#33[¸^Œ”^ þW© È u²+±33²+² 333° /±+°6º>'ðº+ °.°À±ù°ÀºÂð+ °.±°À± ù° À² ...¶ .......°@01!# #333._je^˜\kdfgh^›þe þh˜þh˜ Ò &²+°3²+° 3° /± +±± 9901#'#373µaƒ…_¹¯_~~^þñÉÉ ¾¾ ÿ&Ô [²+±33°/± é°/±+°6ºÃ2ì+ °.° À± ù°À± ..³ ....°@± °9°°9013#"'5326?3zZé)^ ±Y† ý†l KSþhÈ .²+´C+² +´C+° /± +±±9901!!5!5ºþÉEþV9þÜ Jþ‡IKxI+ÿ,Ù!J²!+´++°/´++°"/°Ö°2´ &+°2²  +³@  +°2±#+±±9901#";#"&=4&'5>=463%$.R%.49",,"94ÙA'µEF&xµ'AE>§E< E ;F§>E_ÿ,›Ù"²+°/°Ö´+´+±+013#_<<ÙüS9ÿ,"Ù J²+´++°/´++°!/°Ö° 2´&+°2² +³@ +°2±"+±±99015326=47&=4&+532#9%RR%/4:!++!:4ÔA'µx%&xµ'AE>§E< E E! Ò¶t°/´ ++²  +³@  +°/´++² +³@ +°/°Ö´+°±+´+±+±°9°±99± °9°± 99°°901"#>3232653#"/&‹/571u5i'*bsNFKE%&�?ÿÿÿÿzÿ3Î J À4ÿˆþt�²+° 3±é°2² +³@ +² +³@ +²+°3±é°2² +³@ +° /° ֱ鰱 +±22´+±22°±+°2±é°2±!+±±99±± 9901673#5.546753#.8`TjW*euue*XcT9XƒEÎþg tZmab “wz˜ ZYcV2<þm–¸UgÿéÙ5в+²+´B+²*+±3é²3* +³@30 +± À/±é°2´"#* +°3´"+°2°6/°'Ö±é²' +³@'" +°±+± é²  +³@  +° ±1+±0é±7+±'³ !$$9± ³$9°1´*3$9°0°9±² 999±"± 99±3#°'9013#632327#"&#"'>54'#53.54632#&#"“& ˆ3C;?!h(+*9J+†#580E8nQ"‰e5>,X„@M ,> 7+'RD'B8.%B;V.&(791![{ 1W9šFC…é'&x°/±!é°/±é°'/° Ö´&+°±$+´&+±(+± ³ $9°$³$9°³$9±!³$9°³ $9°³$901%'#"''7&547'76327'"32654&å:5(<5)380 687,5:(;97�,>?,+?>¾65391+;9-7575:7)42/É>V==*,> !Åz²+²+°3´  +°3´ +°2´ +°3´+°2°/°Ö° 2±é°2² +³@ +°2² +³@ +°2±+±°9±°901#3##5#535#5333着ªX¬¬¬—ÍU¹³UÉb3M3¯¯3M3cþ¾Bþ�dÿ, Ù(²+°/°Ö°2´+°2´+± +013#3#d<<<<Ùþo‹þo+ÿ+úÙ4?Ù²4+²+²*+²+±é°./±é³4+°@/° Ö´>&+°4 Ö±é³> +±é°>±8+´&&+³+&8+±é°/±+é°+° Ö±é°/±é±A+±4° 9±>± 99°°;9°¶".6$9°°9°8±#(99±+°$9±4±+99°³"6;$9°±990132654/.5467&5462#54&#"#".57654/¢=)+57ª1+27,kœaT5,&3 ’=0mkP.4'o¦II¡' E50&2&u"J12G33E`bO/70%"^'J6s)"4 H`*J0ó{'?=3m-<(ÿÿd4Ì&|Y|¦ÿÿ'ÿòùÄ/Ú²Š4zt%/Mæ#-•°/´+° /°3´*+±"22°/´+² +³@ +°./°Ö´(+° Ö´+°(±-+°2´ +±/+±±99±-´ &*$9° ° 9±* ° 9°³ $$901!5%#"'#"&5467>=4#"#63232'3265@þë"/1808DYC";~zTS.9%6b33_,++4,11 , l^³z /(Gj¬¶ °/° 3´+° 2°/±+01757757G˜jj5˜jjãYzSSSSyYzSSSS(V w6°/´7+² +³@ +°/°Ö´+² +³@ +±+01!#5!(øFþNwþßÛÿÿ.ð8ÿÿ'ÿòùÄ/龇4ztw.½/²+´7+²+´7+°/±+´+±+01!5.þî½FF—Æ® N°/´+° /´+°/° Ö´+°±+´+±+±±99± ² 999012#"&46"32654/>YY@=YYfN87&(8®Y>@XZ|Y98&'87('ÿÿ2ÿõo' Êÿ0•†F/_°/´+°/´+² +³@ +°/°Ö´+°2°±+´ +°2±+±² 999±± 9901"#6323!>?654&²$>“@R`?! åþÐ3H:;1ú ˜F8R/ #:IL& / +zB1%—°/´+² +³@ +°/´ +°/´+² +³@ +°&/°Ö´+° Ö´+°±+´ +°# Ö´ +±'+±#³$9°° 9±° 9° ° 9°° 901"#632#"&5332654&'춮&©.#?�@K9GUFHO>,-*0 3@.)ü-,Ž@8;L=IJD.++&'3# $\P-ä"²+´+°/°Ö´ +±+013#¼q•<ä”Aÿ$  e²+°3´7+°2² +³@ +² +°3°/° Ö´ <+° 2° ±+°2´<+±+± °9±° 9° °901%#"'#"'#33265332 !S;h6$SS:1ANS-1? SSßèþ�/8aP)þL)0ÿO ÙY²+´ +°2²  +³@  +° 2°/°Ö´+°´+°/°± +´ +² +³@  +±+01.546;####ÿan‚^ú9@R@ƒ^e‹@ü¶Jü¶ÿÿWã¿K|ÿäþ'ÿ*B²+°/´+° /´+°/°Ö´&+±+±°9° ³ $90132654#"'73632#"'< ! . *& &)B9/NŒ%\8# +2"E†æ/ E²+´+² +³@ +° /° Ö´+²  +³@  +°´+°/± +01#57>73#¨c6$ +>®.0þW(/Dæh°/´+° /´+°/´+°/° Ö´+°±+´+±+± ±99°² 999°±99±± 9901!52"&546"2654&:þùƒDJK†KKC'--N-,b33„ZTOZZRQZ4@78@?79@ÿÿHj­¶mô À=ÿìQÖ ʲ+° 3² +´ +°3´+°2² +³@ +±  À/´+² +³@ +°/° Ö´+²  +³@  +°´+°/°±+°2´+°2² +³@ +² +³@ +±+±° 9°³ $9°°9±²999± °901#57>73#3#%#533##= c6$ +>ã:þ<:¼Ì.CC>�U.0þW˜ý'x; þð5d™ªª=ÿìLÙ *ɲ +²"+´+²+² +´ +´+² +³@ +±  À/´+°+/° Ö´+²  +³@  +°´+°/°±+´+°2°±(+´+° 2±,+± ° 9±² "#999±(´ %$9±³ %$9± °901#57>73#3#"#6323!>?654& c6$ +>Ë:þ<:$>“@R`?! åþÐ3H:;1X.0þW•ý'ˆ ˜F8R/ #:IL& / +ÿìDÞ%)47²4+°(3²+´+² +³@ +²&+´+7(& +°/3´++°12²7+ +³@7- +´(& +´+² +³@ +´ (& +´ +°8/°Ö´+° Ö´+°±+´ +°# Ö´ +° ±4+°52´3+°.2²34 +³@31 +²43 +³@4+ +±9+±#µ()$9°° 9±4 ²&'7999°3°-9±7°,9°°69°° 9° ° 9°° 901"#632#"&5332654&'춮&%3#%#533##=³.#?�@K9GUFHO>,-*0 3@.)ª:þ<:¼Ì.CC>�©-,Ž@8;L=IJD.++&'3# $ý'x; þð5d™ªªÿÿ`ÿ' "] Àÿÿ‹„'X´$ÿÿ‹„'Y$ÿÿ‹„'Zª$ÿÿ‹w#¯ª$ÿÿ‹q#j®¥$ÿÿ‹Æ#}¨Â$ºÙ^²+°3± é²+±é°2´ +±é´  +±é°/°Ö°2± é°2²  +³@  +³@ +³@  +±+01%!#!!!!!!#ØþóUg+nþ�`þ …þdŠÖÖÙRéRúR(_þ¡(ÿ*�å7¥²+±é² +³@ +² +²,+±2é²2, +³@2/ +°/´+°/´ +°8/°&Ö±5é°5±+´ &+° ±+±é°/ Ö±.é±9+±5@   ,2$9±°9°³ $9±2°&901%2673!632#"'732654#"'7.'.54>32#.#"rZ_`!þ÷ &)B90M. 8=4#"#632>3226=%!4&#"Ç01e%TvYˆ88e;L\*FGf$vp TÊ€/\6Ipý�FZgG86&P@?Rê4K%iUak:4TG&9$ N]ªR&,J@7p¸Qe  ,('-üGYWÿ*Ü5²²+±é² +³@ +²+² +±é² +³@ +°%/´-+°2/´+°6/°Ö±é°±0+´"&+°"±+° 2±é° 2±7+±°'9°0@ %(5$9±± 99±-%°'9°2³"(45$9±°901.54632#.#"3273#632#"'732654#"'à5N&j[mT@4DMNEkTt\ %*B9/N.  8=P,‚œb]7;oc]j^m!# +2!)%ÿÿÿé÷ä"CoHÿÿÿé÷ä"vjHÿÿÿé÷×"iqòHÿÿÿé÷×"jk HÿÿÑä"Cêóÿÿ Þä"v±óÿÿÿô×&óiàòÿÿÿõØ&ójÜ ÿéøç*W²+±%é²+± é°+/°Ö±#é°#±(+±é±,+±#² 999°(@  $9± %±99014>32&''7&'77"&"32654&-<8'';a$U4,%Ja(Z*F+"|â|íFPPFEQO@e<' (1-'(,/-%)#MLs>‡““Rm¾mm\anÿÿ<ÝÂ"tõQÿÿÿéøä"CpRÿÿÿéøä"vbRÿÿÿéøÚ"idõRÿÿÿéøÄ"n÷RÿÿÿéøÙ"jc R2Ø <²+´+°/´7+° /´ +° /°Ö° 2´:+°2± +01!5#5#5þ&hhhFF§hhphh ÿâ #v²+±é² +²+°3±é°$/° Ö±"é°"±+±é±%+±" ² 999°³$9°²999±°9°µ $9°±9901#"''7&54632732654&#" ?,}og<= B0~oeA:\î+?FPþéï)EFPÿGIm„•>EJGs„•AA¨þó0m_B· 4m_Dÿÿ<ÿéÝä"CeXÿÿ<ÿéÝä"vsXÿÿ<ÿéÝÙ"iiôXÿÿ<ÿéÝÙ"jh Xÿÿ ÿ&Ôä"vY\<ÿ&Êh² +±é²  +³@ +²+±é² +³@ +°/°Ö´<+±22°±+±é±+±± 99± ° 9°±99013632#"'"32654&é°>°4 Ö±é°/±4é°>±8+±.22±é´ +±A+°6º äÁ‡+ °&°)À±< ù°:ÀºÀ�+ °'°+À±<:±< ù°:À°&³'&)+º 9À«+ °'³('++±'+°&³(&)+°'³)'++º ÀÎ+ °<³;<:+²;<: Š Š#9·)+&'(:;<........·)+&'(:;<........°@±84³15$9° ±99±°9°² 999±15´"9$901632327327#".5467&'#"&54>763>=4#"26=6Ëad- LH&*:1%9QaO]%(@5)1%u:;QEXeJ<6qªIFþÌ)?=7 - ,!( CMTG"3" N-0þÁI*^  -P,ÿÿ(ÿé�„'Y&ÿÿÿéÜä"vaFÿÿ(ÿé�„'ZÒ&ÿÿÿéÜÄ"icßFÿÿ(ÿé�„#|Ú¸&ÿÿÿéÜÙ"|\ Fÿÿ(ÿé�„'[Ö&ÿÿÿéÜÜ"jg÷FÿÿP’„'[¯'ÿÿÿéÐä'^G›Ù t² +± é²+±é´  +° 3´++°2°/° Ö°2± é°2² +³@  +² +³@  +° ±+±é±+± ±99±±9901#53!2#!326&+3YEEŠžžŠþæ]­kppk­«SCCÂþ¬ÃSþÿ��ñCÿé1Ù!š²+²+±é²+²+±é´ +°3´+°2°"/° ֱ鰱+±22´<+°2² +³@ +°´+°/² +³@ +±#+±±99±°9°° 9°°9013##5#"&546325#5353"32654&ò??JFbf|{ea@––SåDTTDBPO�5ý¨;R�‚|—N‹5Lþðn²nlY\mÿÿP[f#q²©(ÿÿÿé÷©"qrìHÿÿP[„#{±¨(ÿÿÿé÷Ù"{rýHÿÿP[ƒ#|°·(ÿÿÿé÷Ù"|q HPÿ3‚Ùu²+°3±é²+± é°/´+´  +± é°/°Ö±é° 2°±+´+² +³@ +³@ +³@ +±+±°9°±9901"&5467!!!!!!#32768L3.þ=ùþd�þs®7'H%0Í4*$:ÙRéRúR,6 - ÿ4÷*0¨²+±(é² +±.é°/´ +´0# +´0++°1/°Ö±#é°02°#±+´+°±++±"é±2+±#±.99°³ (-$9°+³ *$9°"² 999± ° 9°³ $9±#(±99±.0°901%327#"&54>?#"&632!32?4&"í&)(&"&)?L  (pƒméþ~01e%R~RŸ)B,(0 - 0( “›þÏ4K%i�D\WIÿÿP[„'[´(ÿÿÿé÷Ú"j|õHÿÿ(ÿéÁ„'Zæ*ÿÿÿ&êÏ"iuêJÿÿ(ÿéÁ„#{Þ¨*ÿÿÿ&êÚ"{aþJÿÿ(ÿéÁ„#|Û¸*ÿÿÿ&êÙ"|X Jÿÿ(þÔÁå'ÉR*ÿÿÿ&êê#µ¥JÿÿP�„'ZÈ+ÿÿ<Ü„#i‚ŸK´Ùw²+°3²+° 3´ +±é´ +± 33´7+± 22°/°Ö°2±é±22² +³@ +°±+±22±é° 2² +³@ +±+01!5%53!533##!##5¬wþ,]w]44]þŠ^1øZZH™™™™FþLþ´úFîÙ²+°3² +²+´C+´  +°3´ +°2°/°Ö° 2´<+±22² +³@ +² +³@ +°±+´<+±+±°9±°9014&#"##53533#>32#›C)@NS??S––%K8LYSk70aPþßX5LL5”0'MBþtÿÿÿù3i#ÿôœ,ÿÿÿæ º"áíóÿÿf#qÿæ©,ÿÿÿú ©&óqÞìÿÿÿý*„#{ÿî¨,ÿÿÿñÙ"{âýóÿ3êÙL²+°/´+°/°Ö´ +° ± +± é±+± ²999±°9°±9901"&5467#3327ž8L3.^7(H%0Í4*$:Ùý',6 - ÿ3ÒÙ^²+´+°/´+°/°Ö´ +° ±+°2´ <+°2±+± ² 999±°9°²99901"&54673#327#5†8L-(S 0#H%0TÍ4*!8 ýô*6 - ¦iiÿÿ_Çs#|ÿì§,F™ '²+²+°/°Ö´<+´<+±+01#™S ýô ÿÿdÿé¢Ù#-æ,ÿÿBÿ&MÙ#M¢Lÿÿ#ÿé„'ZÝ-ÿÿÿóÿ&Ï&ðißêÿÿPþÔ“Ù'É4.ÿÿ<þÔøÙ'ÉðN<ø 3² +°3² +°3° /° Ö´<+°2± +± ±990173 #%#�Þkþð0gþþS ÞÞþüþøØØ ÿÿP„&Yn/ÿÿ ò„&YOÿÿPþÔÙ'É /ÿÿ<þÔ¦Ù'ÉOOÿÿPä'^/ÿÿ<hä'^´OÿÿPÙ#yP/ÿÿ<OÙ#y�OFÙ O²+±é² +²+°/°Ö° 2±é°2² +³@ +² +³@ +±+±³ $9017!!573Ë««{þ(PP]–yLz÷R9M8uèÙ <²+² +° /°Ö° 2´<+°2² +³@ +² +³@ +± +017#573¦BBS??S¥3@3þ›92@2`ÿÿPŠ„'Y1ÿÿ<Ýä"v}QÿÿPþÔŠÙ'É>1ÿÿ<þÔÝ'ÉðQÿÿPŠ„'[Å1ÿÿ<ÝÛ"jtöQÿÿ'KØ&_×QnPÿð}è$f²+´ C+²+°3´7+²+³+´C+°%/°Ö±é°2°± +± é±&+± ²999±²  99901".#5232654.#"#3632~(B?l)@>Dm]]:�)VR5-LVG½‘Nt;dMþÙM\%H�Rt±c0<ÿ&Ý\²+²+²+´C+°/´C+°/°Ö±é´&+°± +´<+±+± ²999±°901#"'532654&#"#3>32Ý� &:2@NTM#Q:LZŒþmG'·/8aPþß X70Nÿÿ(ÿéèf#qà©2ÿÿÿéø©"qjìRÿÿ(ÿéè„#{à¨2ÿÿÿéøÙ"{lýRÿÿ(ÿéè„'\2ÿÿÿéøä#€œR(ÿì¼å-˜²+±é²+±#é² +± é°*2²+±(é´  +± é°./°Ö±é°±%+±22±é° 2²% +³@ +° 2³@ +±/+±%±99±#°9°°%9° ±99° °&9°(°9014>325!!!!!!5#".7327&#"((=RM'y>­þ°Hþ¸UþNCu(MR<'])94};;|59'dX‹T6XLRîRõRJ^5QˆZIn?' xex'@nÿéy*1�²+° 3±&é°2²& +³@& +²+°3±/é° 2´+ +´+++°2/°Ö±#é°#±)+±é°+2°±,+±é±3+±)#±99°± 99°,² 999°°9±&° 9°+²#)999°/°901%3273#"'#"&54632>32$"32654!4&#"÷01f#TvY„>?ƒq||q‡=e=JqýØŒPPFEQX&P@?Rê4K%iV`gg“‡†’j28J@7päm^`ml^a3GYWÿÿPš„'Y5ÿÿ<Kä"vUÿÿPþÔšÙ'ÉH5ÿÿ<þÔ8'ÉSUÿÿPš„'[Á5ÿÿ-Lå"jUÿÿ0ÿém„'Yú6ÿÿ"ÿéËä"vVVÿÿ0ÿém„'Zª6ÿÿ"ÿéËÐ"iVëV0ÿ*måJâ²?+°#3±é² +±é² +³@ +°,/´4+°9/´&+°K/° Ö±é°C Ö±Fé°±7+´)&+°)±+±é° Ö±é±L+°6ºïÔÂ+ °°À± ù°À³....³....°@±F°A9°7@ #$&,.@$9±4,°.9°9³)/;<$9±?°A9°² D99901%2>54/&54632#.#"632#"'732654#"'7&#'.=3V8N%†µ�‹x~ŒX^WJY6B·JQ;wT&)B9/N.  ,YgX+U;*)S#0%…cswkGMD7*01`C(ED+ # +2"(%E€[64"ÿ*Ë@ñ²+±é² +³@ +°-/´5+°:/´'+°A/° ֱ鰰 Ö±@é°@/±é°±8+´*&+°*±+±é°° Ö±é°/±é±B+°6ºðÚÁÑ+ ° ° À±ù°À³ ....³ ....°@± ±/099±8@ $%'-2=>$9±*°9±5-°/9°:³*0<=$9±'² $>99901732654&/.5462#&#"632#"'732654#"'7&'z5E7C&+N]In¶bXf3<.3PNF4.&O&)B9/N. ¨œ/7-%" C>IWTMT+$# E:/N # +2"(%G ÿÿ0ÿém„'[¨6ÿÿ"ÿéËÝ"jTøVÿ+ZÙ"…²+±é°2° /´+° /´+°#/°Ö±é² +³@ +² +³@ +³+´&+±$+±¶  $9± °"9° ³ $9±²9990132654#"'7##5!##632#"'Å ! . * ð<ï &)B9/N‹%[‡RRýy7# +2"ÿ+œ/»²"+´!7+²+²+°3´++°2² +³@ +°-/´+° /´'+°0/°Ö°2´<+°2² +³@ +°!2² +³@ +°±+´*&+±1+±´  $9°µ $%'-$9±-°/9° ³ *$9±!"°90132654#"'7.5#53533#327632#"'H ! . &(*GGSVV &)B9/N™%S*$ŒD��Dþ™F/# +2"ÿÿZ„'[�7ÿÿÿéšä'^æWZÙ`²+²+±é°2´ +° 3´7+° 2°/°Ö°2± é°2²  +³@ +³@  +² +³@ +³@ +±+01535#5!#3##��ð<ï��]eHÚRRÚHþ›eÿé œ„²+´ C+²+°3´++°2² +³@ +´ +°3´7+°2°/°Ö±22´<+±22² +³@ +° 2³@ +² +³@ +±+± ° 901#3#327#"&=#535#5353 VOO'14LLGGS D�H�F+(´H�D��ÿÿPÿé€i#Ëœ8ÿÿ<ÿéÝ¿"pòXÿÿPÿé€f#qÈ©8ÿÿ<ÿéÝ©"qlìXÿÿPÿ逄#{Ȩ8ÿÿ<ÿéÝ×"{lûXÿÿPÿé€Å#}ÆÁ8ÿÿ<ÿéÝ"}jXÿÿPÿ逄'\æ8ÿÿ<ÿéÝÛ#€„ÿ÷XPÿ3€Ù#{²+±é² +°3°/´+°$/° ֱ鰱+´+°±+±é±%+±±99°°9°²999°±!"99±°"9°²!99901"&5467#"&5332653327 9L"'9,ƒ–]eUXd]%44%H%0Í4)/ €pþOOTJþ4W9046 - <ÿ4 $ ²+´ C+²+²+²+°3° /´+°%/°Ö´<+°±#+´<+³#+´+°/´+°´&+°/±&+±± 99±² 999± ° 9°² 999± °901327#"&547#5#"&533265Ý#*$'>J`%P:L[S:2AN ýô; -2+>1I4,NA”þ�/8aP)ÿÿš„'Z6:ÿÿ ÈÑ#iÂÿìZÿÿ—„'Z¬<ÿÿ ÿ&ÔÏ"iVê\ÿÿ—q#j®¥<ÿÿI„'Yð=ÿÿÈä"v_]ÿÿIq#|˜¥=ÿÿÈÙ"|P ]ÿÿI„'[œ=ÿÿÈÝ"jXø]ÜA²+² +´C+²+´++°/°Ö°2´<+² +³@ +±+013##5354632&#"­SFFA: :ÈDY8?E5ÿé'Ù!”²+²+±é²+² +±é´ +°3´+°2°"/°Ö°2´<+±22´+² +³@ +² +³@ +°± +± é±#+± ± 99±°9°° 9° °901533#632#"'##5"3264&SS––@ae{|fbFJ?$COPBDTT�LL5‹N—|‚�R;X5Äm\Yln²n("Ù 0ˆ²$+± é²+± é°%2²++±é´$+ +±é°1/°Ö±(é°(±$+± é° 2° ±+± é° Ö±é±2+±$(±.99± °9± ° 9°°9± +±9901%2>54&+4+3%"5463!2#!#"3263B1>D?ãF’´´þ�{=G~=Z-eF?vaþ·R1 R+49EûMèè!š1N$;;p/TB^r‚:OÿÿPpÙ…<ÿéÙ o² +²+±é² +´C+²+±é°/° Ö´<+°2´&+² +³@ +°±+±é±+±±99±²99901"32654&!!632#"'!BPPBDUSþÕ‡þÌ9ihx|hk;Ío¸ooY^pþ3ÙIËV”‚�ZC¡ÙJ²+±é² +´  +± é°/°Ö±é° 2°±+±é±+±° 9± °901732654&+332#!'ÞÔ@RQAÔ]]¥–ˆ‚dþÆ€RR=@PhþêxfcËÿé3Ù n²+²+±é² +²+±é°/°Ö´<+° 2´&+°±+±é±+±° 9±±99±³ $9± °901"32654&3632#"'#'CBPPBDUSþÕS9ihx|hk;K]Ío¸ooY^p þìV”‚�ZCËÿÿ(ÿé�å &ÅÎÀ(ÿéåå(~²#+±é²# +³@ +²+±é° Ö±é² +³@ +°)/°Ö±é°± +±!é° Ö±é±*+±²#999± °9±±99± °9014>32632&#"#.#"32673!".(0GyLŠHP _^Wj{€mZ``!þõKwG/d2bjO4O;ORNN¢Œ‰¡ejþß3Ni`ÿé-,"}²+±é² +³@ +²!+±é²! +³@ +°!° Ö´C+°#/°Ö±é°± +°2± é°2±$+± ²!999° °9±°9±!°901632&#"#.#"3273#"&54632“R T@4DMNEkTp^k}jTî>ER7;ob]j~`k•‚œÿÿ›Ù’(DÙ!h²+±é²+±é°2²+± é²+°"/° ֱ鰱+±é°±+±é±#+±± 99± ±99±° 901%32654&+"5463!2#!#"3263_¬lppl¬¼{=Go‹žŸŠþçR1 R�Š‹�Çš1NÂþ¬Ã‚:O(HÙI² +±é²+±é´  +±é°/°Ö±é°±+°2± é² +³@ +±+01754!35!5!!".6;#"(´þtéþ·=Y-] 8'ãã'8Ú×ÔRý'+EF:.)-,ÿéóÙ u² +²+±é²+´C+²+±é°/°Ö±é°±+°2´<+² +³@ +°´ &+° /±+±±99±² 99901"3264&#5#"&546325!5!FSUDBPP£K;kh|xhi9þ̇Íp^Yoo¸oþ3CZ�‚”VËIÿÿÿ; $ G(À)Ù J² +± é²+±é´  +±é° /° Ö°2±é²  +³@  +³@  +³@ +± +01!5!5!5!!5!Ìþs�þdùýõ®LRéRý'Rÿÿ(ÿéžåJ(ÿéeå/†²+±$é²$ +³@$+ +² +±é² +³@ +´ +±é°0/°Ö±é° ֱ鰱)+±+é° Ö±é±1+±µ $$9±$°9°°9°° 901".547&54632#.#";#"32>=3EQv<‚i‹x~ŒX^WJY_?XlC`%N8;U+X6Y\+GG&}1-lcswkGMD7.[RT.)+47Ji5ÿ&CÙ>²+±é° /±é°/±é°/°Ö± é°2² +³@  +³@  +±+01!!!!#"'532Zéþt\þ¤QH DL%RéRþG58Qÿ&Ü]²+´C+²+°3´++°2°/´ C+°/° Ö°2´<+°2² +³@ +°2²  +³@  +±+01##"'53265#5354632&#"W� &FFA: : DýËmG'DY8?E5R(ÿéå.®²+²+±é²+±,é° Ö±$é²$ +³@$( +´  +± é°//°Ö±é°± +´ <+² +³@ +° °( Ö±)é°)/±(é° ´+°/±0+±)²999° ±99± °9° ±99±,$°901326=#5!#'#"&54>32632&#"#.#"…$9^[»þ�cþEgI>K57<ÿé7Ù+|² +²+´C+²+²+´C+°,/° Ö´ <+°2° ±+´<+°±+±&é±-+± °9±±"#99±´&$9°±"#9901#"&54&#"#3>3232>54&'7%714C)@NSS%K8LYI-F&5Hf1?';d+(/70aPþßÙþë0'MBþÕ/#1=+.t3&};²+°3²+° Ö± é°/°Ö±é°2±+± ² 999°° 901#3632&#"#­]] A=4"8  ©,nþÿÿÿÙþ�'=> ªþPv<øÜ<²+°3²+´ C+² +°/°Ö´<+° 2±+± ± 990134632&#"73#32#4&#"#54'7‡tŽ�è�ŽëÀ žÂÂ�>lB @%k=“¥þò¥¤„Цþ΢ÖÓVÓ$$ 6+8]aÿé/w !s²+±é²+±é² +²+°"/°Ö±é°±+±é³+± é±#+±²999°±!99± ° 9±³$9°°901"32654&7#"&63232654' FPPFEQO¸%\%np}~n8R Îm¾mm\an©+8VEg�”••# (ÿ鍿 #v²+² +±é²+°3±é±é°$/°Ö±é°±+± é° ±+±é±%+±² 999° °"9°±99±³ "$9±°901"2654&#"&632632#4&#"‡tŽ�è�ŽëÀ žÂÂ�qVOeTR^(&(*X“¥þò¥¤„Цþ΢ÖÓVÓ89fQýÑM4iÿ8š #„²+±é²+°!3±é²+´++² +³@ +°$/°Ö±é°±+±é°± +± é±%+±²999°°9° ±!99±³$9±°901"32654&#4&#"#"&632632 FPPFEQOHT"'#4np}~nT8@>F@Îm¾mm\an]ýÇM'*I|�”••))I(Ù#m²+² +±é°2²+±é´  +±é°$/°Ö±é°±+±é° 2°±+±é±%+±±99±±99°±99013264&++##"3263#"5463!2_ÂCKKC±q[å]R1 {=Gƒlu‡DxD„]qþË‚:Oš1No<ÿ&Ü "d²+±é²+´!C+²+±é°#/°Ö±é°2´ &+°±+±é±$+±´!$9±°9°± 9901"32654&'632#"'#4632&#""BPPBDTSÞ;lhy{ea@T>9 :Ío¸ooY^p‘¡^š„}—Nþï?9>EPÿƒ{Ùx² +²+² +²+± é´ +±é° /° Ö± é± 22° ±+°2±é±é² +³@ +±!+±±99± ±99°°9°°9013264&+#332#&=4&#­ÂAIIAÂ]]ÐhxVI+q;=DxDþ®½Ùxqct:+�o.IAC?0ÿémå0´² +±é² +³@ +²$+±é²$ +³@! +°1/°Ö±,é°,° Ö±!é°!/± é°,±+±'é°'° Ö±é°/±é±2+°6º³Â7+ °°À±* ù°)À³)*....³)*....°@± ² $999±±'9901%2>=3#".546?>54&#"#>32G;U+X%8NK)Ag>(QJ·B6YJW^XŒ~x‹�µ†%N;46<\7# .=9C`10*7DMGkwsc…%0#S)*"ÿéË$»²+±"é²" +³@" +²+±é² +³@ +°%/°Ö±é° ֱ鰱 +±é° Ö±é±&+°6ºÊÁ»+ ° ° À±ù°Àº—+ ± ° ° À±ù°À³ ....³ ....°@± ³"$9±"±9901%3#"&546?>54&#"#>2326sXËcuFNP3.<3fXb¶nI]N+&C7E4œ³ZL:E #$+TMTWI>C "%-7IÙ ,² +±é²+±é° /± +± ° 9°°9015!!!!5ùÙ þfÛÛ¶ýÕmTRþæþåRRÿ&OÜ v²+´+°/´C+° /´+°!/°Ö´+°± +´<+°´+°/±"+± ³ $9± °9°° 9°²99901"2654&#"&4632327#"5{%%2%$2II29B& �ž$$$#°IdHD8ýT'Gmÿ&œg²+° 3´++° 2°/´C+°/°Ö±22´<+° 2² +³@ +°± +±é° 2± +±±99±±9901.5#53533#327#"'53265°),GGSVV� &+$ŒD��Dþ™£mG'`Ù^² +²+± é°2²+±é°/°Ö±é² +³@ +°± +±é² +³@ +±+± °9± °9014>7!##+"327#"?2Íï]+R16 {Z4+Rýy‡tOÿéÜi² +´C+²+´C+²+°3´++°2°/°Ö°2´<+°2² +³@ +± 22² +³@ +± +±° 9013#327#"&5#5354632&#"®VV'14GGA: :^RDþ™F+(ŒDY8?Eÿ&ZÙ<²+±é°2°/± é°/°Ö±é² +³@ +² +³@ +±+01#5!#327#"&ð<ïD HQmôRRý-;Q8PÿéXT²+±é²+° 3±é°/° ֱ鰱+±é°±+±é±+±°9±°9°°901#"&5332653>54'Þ%ƒ™€‚•]eUXd]X+8f þSn‚�oþOOTJ <ÿéj‹w²+² +´C+²+°3±é°/° Ö´<+°±+´<+°´&+°/°±+±é±+±° 9±°9°°9±°901#5#"&5332653>54'E%�K%P:L[S:2AN]‹+8kþHI4,NA”þ�/8aP) ÿÿ(ÿüÍÙ <õÙÀPÿé�ÙC²+± é²+°3°/°Ö±é°±+±é± +±²999± °901".5332>=4.'3I7MM(](('GF3 4)+l޳,aJ ýÎ - '=a?8ciDA¾Á¯ÂÉÙ>² +²+° 3±é°/° Ö± é±+± °9± ² 999°°901&#"#3632¤  ³]þçsÖ­-A  iþÞþâ»þ�#@   ÿ&`Ül²+´C+² +°3²+°/±é°/±+°6ºÃ2ì+ ° .° À± ù°À± ..³ ....°@±°9° ±9901#"'5326?3>32&#"Ôé(_ ±Y†‘;5&&. ý†l KU þh˜W]E7IÙB² +±é²+±é´  +°3´ ++°2°/±+± ° 9± °9013#!!5#537!5G¹M�ǶýÕÇW‹»þfÙTïCþÿRRCñRÈ H² +´C+²+´C+´  +°3´ ++°2°/±+± ° 9± °9013#!!57#537!5º{SŠ…EþV„]•}þÜ J•C¡IKŸC–I(ÿéMÙl²+±é² +³@ +²+±é´ +±é°/°Ö±é°±+± é² +³@ +± +±³$9±°9°°9017!5!#"'332654#52>M�þf ´,1›|øX ªQjí ÒµRTè +F,dyå—MAžK ÿéCÙq²+± é²  +³@ +²+±é´ +±é° /°Ö±é² +³@ +³@ +°± +± é±!+± ²999±°9°°9013"3273#"&'454>7'5!! íjQª Xø|›1,´ þfÒ KžAM—åyd,F+ èTRÿqø m²+´C+°/± é²  +³@  +°/°Ö± é²  +³@  +° ±+±é±+± ±99°²999°±99± ±9901'5!!#"32673#"&546Ø�‡þÜ�0“NEHHXÚmƒa®JI«K€CKJMåxeXcÿ6ß )¢²'+´&C+°/´ C+°/´C+°° Ö´7+°*/°Ö´ &+° ±+´&+² +³@# +±++± ±&'99°µ %$9°³()$9± °9°°9°± 99±&²)99901#"&#"327#"&543232654&+57!5!(·aW=6Wb]Baa`\0aSH0�þ܇“Pb &E"LBO40+;K«IJ"ÿÅh²+±é²+±é² +³@ +° /°Ö±é°±+±é±!+±²999°´ $9°³ $9±±9901632'!!>7'57654&#"2ãe~‚W§(A8uþ(I_S¡'`P<… Ïöt\{O$MD#B-Wo|9"MB7U9L©ÿëΜ#‘²+´ 7+²  +³@  +²+°3´++°2°$/°Ö´&+°±+°2´<+°2² +³@ +² +³@ +°± +´<+±%+±± 99° ±!99± °901%#"&5332654.=#53533#Îx]hsO?H?H&66&GGSVV&66&«]c|nD^8:)5=.D��D-"&D<ÿ& >²+²+± é°/° Ö± é°2´&+° ±+±é± +± °901>54&#"#3>32�.Si@7*haTK32#.#"…$9^M $5kL\nÎn^_mk^bmýöX(4$@2,—}€ž[LþJ[3468TJÿÿ(ÿéÁ„'[Ü*ÿÿÿ&êÙ"jZôJÿÿP“„'[Ë.ÿÿ<ø„#jfŸN(ÿ#èå&i² +±é°/´+°'/° Ö± é° ±+´+°±$+±é±(+±°!9°$¶ "$9±°9°´ !$901"&5467.54632327"2654&ˆ8L-)‹§Â� ÁN–d0#H%0tŽ�è�ŽÝ4*"7Ξ«ÓÔ°e¦g*6 - p¥þò¥¤„Цÿ#ø&c² +±é°/´+°'/° ֱ鰱+´+°±$+±é±(+±$¶ !$9±°9°´ !$901"&5467.54632327"32654& 8L.*\e~nq}qd0#H%0FPPFEQOÝ4*"8‘v„••ˆy“*6 - «m¾mm\anÿÿ(ÿ#èf#q੪ÿÿÿ#ø‰"qkÌ«ÿÿ(ÿéM„'[›yÿÿÿqîÙ"j_ô5ÿÿÿßÿ&þÊ&ðjÌåÿÿPóÙ#=ª'ÿÿP|Ù#]´'ÿÿÿéôÙ#],Gÿÿ(ÿéÁ„'Y@*ÿÿÿ&ê×#v‚ÿóJP9ç!K²+° /±é°"/°Ö±é±22°± +±é±#+± °9± ²999°±9901>54&#"#3>32¯#O'? >#)k5__=_NB^#.S8d"+þº9$A6F"!*/þ!„×P;%^N,[EP.BÿÿPŠ„'Xæ1ÿÿ<Ýä"CnQÿÿ‹„'YÈ#}¨ B$@0ÿÿÿé „'Yª§ÿÿº„'YˆÿÿÿéI×#v=ÿó¨ÿÿ#ÿéí„'Y@šÿÿ ÿâ ×#v—ÿóºÿÿ‹„&]n$ÿÿÿé Ù#²ÑÿõDÿÿ‹„#´ö¨$ÿÿÿé Ê#´µÿîDÿÿP[„']Œ(ÿÿÿé÷Ù#²ÞÿõHÿÿP[„#´û¨(ÿÿÿé÷Ê#´¿ÿîHÿÿÿß,„&]ß,ÿÿÿ¹Ù#²Wÿõóÿÿÿÿ,„#´=¨,ÿÿÿíÊ#´+ÿîóÿÿ(ÿéè„']´2ÿÿÿéøÙ#²ÉÿõRÿÿ(ÿéè„#´-¨2ÿÿÿéøÊ#´ºÿîRÿÿPš„&]x5ÿÿÿë8Ù#²‰ÿõUÿÿPš„#´¨5ÿÿ-ZÊ#´kÿîUÿÿPÿ逄']Œ8ÿÿ<ÿéÝÙ#²òÿõXÿÿPÿ逄#´¨8ÿÿ<ÿéÝÊ#´¹ÿîXÿÿ0þÔmå'É*6ÿÿ"þÔË'ÉÐVÿÿþÔZÙ'É 7ÿÿþÔœ'ÉlW(ÿœóÅ)U²+±é² +³@ +°*/°Ö±é°±'+± é° Ö±é±++±±99°'² #999°° 901"#632'>54.''67654&L9XÙes1b0;ƒPX>£Š @[{%LCxSEåh[1O1{/O3:WB\$) "K20<8Aÿ¬€(a°/±é² +³@ +°)/°Ö±é°±'+± é° ° Ö±é°/±é±*+±²999°'² #999± ° 901"#4632'>54&''67654Æ'5VbOL`"F52\:8 #ZE9.Ja,Ð80PfXD(: #]4,$J "5E' )QÿÿP�„'[È+ÿÿ<Ü„#j†ŸKPÿ%€åD²+²+²+±é°/°Ö±é°2°± +± é±+± °9±°9013#3632#4&#"­]]Jr‚•]eUXdÙ(4�oý0ÐOOTJÿ(IÙK²+±é²+±é°/´ C+°/°Ö±é°2² +³@ +±+±°9°°901!#"'5326=!5!5GþL¶� &þ)¶þfÙTýͽmG'JR5Rÿ(È T²+´C+²+´C+° /´C+°/°Ö± é² +³@ +±+± ±99±±9901)5!5!!#"'53265tþª9þ܇þÉE� &KxIJþ‡´mG'ÿÿ‹„#|ª¸$ÿÿÿé Ù"|l DPÿ1[Ù&’²+°3±é²+±é°$/´+° /´+´ +±é°'/°Ö±é°2² +³@ +³@ +³@ +°±+´!&+±(+±¶ $&$9±$°&9° ³ !$90132654#"'7#!!!!!#632#"'Ú ! . 'ðùþd�þs®õ &)B9/N…%UÙRéRúR1# +2"ÿ÷/8™²+±6é°-/´+° /´'+°/´0++°9/°Ö±é°02°±+´*&+°*±3+±é±:+±@ $%'-/6$9±3*± 199°°!9±-°/9° ³ *$9±'²$9990132654#"'7.54632!3273632#"'!654&#"� ! . 'esƒmJqþ~+Sf#TmT &)B9/N&T=?Rœ%V”z�›J@7pH(DiR_1# +2"òAYWÿÿ(ÿéèÅ#jâ”"2qâÿÿÿéø "jmÛ"Rqqcÿÿ(ÿéèæ#qç)—ÿÿÿéø "nÙ"Rqrcÿÿ(ÿéè„#|Þ¸2ÿÿÿéø½"|iñRÿÿ(ÿéèÙ#|Þ¤"2qàÿÿÿéø""|iã"Rqkeÿÿ—S#q¬–<ÿÿ ÿ&Ô‰"qTÌ\ÿîÿ&™ %²+°/´ C+° /° Ö´<+±+013#"'53265FS� & ý‡mG'ÿéuÙ 1”²&+²*+°"3±é°2²+²0+°3±é°2°2/°-ֱ鰱 +°2´<+° 2³% +´&+°&/´%+°±+±é±3+± ±*099±±"99±µ$'-$901"32654&32654&#"3632#"'#5#"&54632 DTTEBPP£PBDUSFB£S9ihx|hk;B"O6jz{flÍp[\on[^oo¸ooY^pþìV”‚�ZCE1+™…}—ÿ&t /Ÿ²-+°3±é°2²- +³@- +²#+² +°'3±é°2°0/°Ö±é°±+° 2±é° 2³%+´"+°"/´%+°±+±*é±1+±³ $9±±'-99±-°/9°´"%*$901"32654&32654&#"#"&5463253632#"'ETTEBPO¢PBDTSEBPT9Ðx|hk7'.#"åmƒ€nZvT#f.3!R?327332>7#"#".žþÙY8?Rþ…‚!,#f#TvZd?YE '    -*O=E#ƒm0L0# ÖMSW�-D%iV`>]ŒT r-GB^�›&=0G"ÿéÇ#¡²+±!é²! +³@! +² +±é² +³@ +´ +±é°$/° Ö±é² +³@ +°° Ö±é°/±é°±+±é° Ö±é±%+± °9±³ !$9±!°9°°9°° 901%3#"&547&5462#&#";#"326oXËcuVAn¶bXf3<10>J+;@6E4œ³ZLV&%KIWTMT+$!5L6%-7ÿÿÿéÇ«ÿéÌ:>ʲ<+±é²< +³@> +²+±é² +³@ +² +³@ +´ < +± é° °* Ö± é°?/°>Ö±é° Ö±é°±+±5é²5 +³@ +°° Ö±9é±@+±²<999±5²37999± °99± *±(799± ´'35$9°²/199901732654&+532654&#"#>327332>7#".'&'#"'v5E6@;+J>01<3fXb[`7UE (!  -**">AVucËœ/7-%6L5!$+TMT0O�T r-(SE:>K%&VLZ³ÿéÜ(²+±é²+±é´"! +±"é°)/°Ö±é°±&+±é²& +³@&! +°&° Ö± é±*+±&³$9±° 9±!° 9°"² 999°°901>32#"&547"32654&+532654&az\p",*rcyoßG?GO6=;+5)01?ˆ…WI(5;-LZ„�ÂYsm_-%6L5!$+ÿ&  Q²+°/´ C+°/°3´7+°2°/°Ö°2´<+°2² +³@ +² +³@ +±+0133##"'53265#53lSMM� &NN ÔHþ£mG'#K1\|{db><9 0_I\nUÎn^_mk^bmýž^b2,—}€ž[S9>EþJKeV*TJXÿ& /‘² +±é²+±é²+±é°#/´)7+²)# +³@)& +°0/°Ö±é°°' Ö±&é°&/±'é°±,+° 2±é±1+±,'´ #$9°±99±µ -$9±°901"32654&"&54632>2&#"#"&'3326=CNNDBLKT\|{db<$> 0_I\nUqT>#KÎn^_mk^bmþ—}€žY#. H%þ¸KeV*TJX_a2,ÿé !޲ +²+±é²+±é² +³@ +´  +´+°"/°Ö±é°±+± é² +³@ +° ´ +° /±#+±²999° ° 9° °9±° 9° ±9901326=#53#'#"&54>32#.#"uMb.`‰á,Lln‰$8^;]vV C?UVÿajUB=þàHVš|#HO;'ZR3,k ÿÙ V²+°3°/´7+°!/° Ö´ 1+° ±+±é±"+± °9°±99°°9±³ $9012654&''4>733#"&à" !Q%»\��Y·%[*.N % VW :,RŸþÆ:þaN-8>D@ ÿè#/ž²+±)é°/° 3±é°2² +³@! +°2°0/°!Ö´ &+° ±+´&&+°&±-+´&+°±+´&+±1+± !°"9±&²999°-³$9°± 99±)³$$9°°9012632#4&#"#"&5467&"#>32>54&¢4:;5>`L2 (+<-.=^8)%.4Lb¡E-! ,??�Af@’%6O)Zf)‘?.Y)T}ÃmG?3'1gÿÿ<ÿ3Ü  K À<ÜÜ[²+°3² +´7+²+´C+°/°Ö´<+°2°±+´<+±+±² 999±°9014&#"#4632&#">32#‰C)@NSA::%K8LYSk70aPþße8?E6š0'MBþt<ÿ&ÜÜ%d²+² +´C+²+´C+°/´"C+°&/°Ö´<+°2°±%+´<+±'+±%´ $9±°9014&#"#4632&#">32#"'53265‰C)@NSA: :%K8LY� &k70aPþße8?E5š0'MBþmG'ýÙ`² +²+´+²+´  +° 3´7+°2°/° Ö±22´ <+±22² +³@ +² +³@  +±+01#5533##5#5­TSPPSKÙiiþ_ÔÔHððHBÿéë /² +´C+² +°/° Ö´<+±+± °901327#"&5•'14 þUF+(Ð K²+´7+°2²+´ 7+°2° /°Ö°2´ +°2´ +± +±± 99013#3#53#îIIîRR Hþ„HH|ÅÙŸ²+² +´ +´++² +³@ +´ +´++² +³@ +° /°Ö´+°±+°2±é° 2°±+´+±!+±°9°°9±°9±°9°± 99°± 9901"#>32332653#"/#&~/571T 5i'*T"sNFK2þœ %&�þÙ]—Ùg²+²+´  +°3± é°2´ +´C+°/° Ö´&+°±+±22±é°2² +³@ +±+±± 9901533##"54>5"«T˜˜T—?*("ÿÚþ‹Mþéq&$™R(Dÿ&ðÙ "²+° /´C+° /°Ö±é±+013327#"DT& �mFüÛ'G<ÿqBÙs²+²+²+²+´C+°/± é°/°Ö±é°2² +³@ +°±+±é± +±°9°² 999± °9°³ $901#"'732654#"57!#3!ˆYaƒm•5I7)EN“�þÜTT‡ cXexg.KC‚K«þ=ÙÍJÿÿ<ÿñð  P, À<ÿ8ð !{² +°3´C+°2²  +³@  +²+± 33°"/° ֱ鰱+±é°±+±!é°!´&+°/±#+±° 9°°9°°9±±9901##"'#"&533265332653ðM"K4a,%H4IOT3.3HT3.3HTÈ/*P,$KG‰þ—27P9Iþ—27P9I<ÿ&ð*{²*+° 3²+²+° 3´%C+°2°/´C+°+/°*Ö±)é´&+°)±!+± é° ±+±é±,+±!)°9° °9°² 999±%*±99013>32>32#"'532654&#"#4&#"#32#4&#"#"'53265bM#Q:LZS:2@N� & X70NAþtk/8aPþrmG'<ÿ&6a²+²+²+´C+°/´ C+°/°Ö±é´&+°±+± é±+±°9± ± 99°²999013>32327#"54&#"#%4>2#"'#"&f-EA*‚x3:7,T/3(4ý¸,G|¢{G,$<=!`0.b^`ë:T1 qsIc9!ßß"85H5)JU=('=SL*Fh4ZZ�ÿÿÿ8˜Èfúÿÿÿñ  UL ÀÿñÙ ;²+² +±é²+°/°Ö±é°´&+°/±+±°9017>53#5#"'TTTM$C( IJgÝý'_;3ÿ&h @²+±é²+°/´ C+°/°Ö±é°´&+°/±+±°9017>53327#"=#"'TTT&  ‰$C( IJgý¨'GmÌ;3<ÿ88 (²+² +±é°/°Ö±é´&+±+01#3>328TTTM$C( ÃJgþ(Ô_;3<ÿ&8:²+²+±é° /´C+°/°Ö±é´&+±+±°901327#"53>328TT& �M$C( ÃJgþ¤'Gmy_;3<\ :²+²+´ C+²  +³@  +°/°Ö±é°±+±é±+013#4 #4&'�T T""®mm!%%ÿ84 ;² +´C+² +³@ +³@ +°/°Ö±é°±+± é±+014&'#54 à""T ÈU%%!mmýŠ< [² +°3² +±é´ +±é°/° Ö±é°2°±+±é±+±±99°°9±°9°°901#'##324&+32ÏRCÍgËETø,@![6%‰‰[wHLÝÚÚ 0/#.'›ÿÿ@   à À"ÿ(Ë0¸²$+±é²+±é² +³@ +°//´*C+°1/°Ö±'é°2° Ö±é°'±+±!é°!° Ö±é°/±é±2+°6ºðÚÁÑ+ ° ° À±ù°À³ ....³ ....°@±¶$*,/$9±$°&9°²!99901332654&/.5462#&#"#"'327#""X5E7C&+N]In¶bXf3<.3PNFucN/& �k/7-%" C>IWTMT+$# E:LZL'Gÿ&Ü6²+´C+°/´C+°/° Ö´<+±+±± 9901#"'532654632&#"À� &A: :^ý5mG'±8?Eÿ&Ü[²+´C+°/´ C+°/°3´++°2°/° Ö°2´<+°2² +³@ +°2²  +³@  +±+01##"'53265#534632&#"W� &FFA: :8DþŸmG'@D-8?E5þÚÿ&!6²+´C+°/´C+°/°Ö´ <+±+±± 99014#"5632327#"5u: :A& ��5E?8þ'Gmÿ&ÂÜ &f²+´C+°$/´C+°/±é°'/° Ö´&+°±+°2´"<+°2±(+±±$99±³  "$9°±99013265&#"4>324632&#"&'#"&\#(0#<"#M/8 31A: :"SGœVLg  *5 e8?E5ý‰ HpIÿÿ´ W�Àÿ&œj²+°3´++°2² +³@ +° /´C+°/°Ö°2´<+°2² +³@ +°2² +³@ +±+± ° 9°°901#327#"&5#5353V'14GGS DýÖF+(OD��ÿéF ”²+²+´C+² +°3´  +±33´ 7+±22° /°Ö° 2´<+°2² +³@ +°±+°2´<+°2°´&+°/² +³@ +±!+±°9± °901!#5#"&=#53533533#!326=øK%P:L[IISûSNNþ²:2ANI4,NAxHÔÔÔÔHW/8aP ÿéB *\² +´C+°/°3´C+°(2°+/°Ö°2±é°±$+±é°)2±,+±$µ '($9±³'$901#".5467#5332>54&'53Ò1?';d>Af9& ?1nÔH5%N4,E'5HÔ×&};54&'7Ø714SI-F&5Hf1?';d+(ÐþU/#1=+.t3&};5   ÿqî m²+´C+°/± é²  +³@  +°/°Ö± é° ±+±é² +³@ +±+± ±99°²999°±99± ±9901#"'332654+57!5!4YaƒmÚXHHEN“0�þ܇ cXexåMJKC€K«IJÿvþ )4ƒ²'+´&C+° /´0C+°*/±é°5/°Ö´-&+°-± +±é²  +³@ # +±6+± -´ %3$9°² ()999±*0³ $9°³ $9°&²")99901&'#".54>32654+57!5!"3267&Ya!$nI)</8  '“0�þ܇Í##(-G E cX H /2&&*5   €K«IJþM$ÔÅT²+²+±é² +³@ +°/°Ö±é°±+±é°±+± é±+±±99±° 901"#632#>54&ýL9XÙesC8T_OCxSEåh[9fþ¶�,A8AÔÅT² +²+±é² +³@ +°/°Ö±é°± +± é° ±+±é±+± ±99± °901.#"#&'.54632|=H:CO_T8CseÙàJNA8A,þpJf9[håÿÿÔÅ 7òÅÀ(ÿ+�åY²+± é²  +³@ +°/±é² +³@ +° /°Ö±é°±+±é° Ö±é±!+± ²999014>32#.#"32673!".5(0GyLî+_^Wj{€mZ``!þõKwG/d2bjO4îNN¢Œ¿ˆ¡ejþß3Nh`1ÿÿ(ÿéèå&2ûÿ’ÿÿ<Ê ¦ÿéÜ$…²+±é² +±é´ +±é°%/° Ö±é² +³@ +°° Ö±é°/±é°±"+±é±&+± °9±"² 999±°9°²"999°° 901#"&547&54632'";#"32654&ÛnzcrVAp\~^ß3?10)5+;=6OG?œ�ZLV&%KIW|/+$!5L6%-_msYÿéZ *©² +²+±é²+°3±(é²( +³@($ +°´!C+´  +´+°+/°Ö±é°±+°%2± é² +³@ +°±$é° ´ +° /±,+±²999° ± 99±° 9° ±99±!°901326=#53#'#"&54>32632&#"#.#"uMb.`‰á,Lln‰$8^;c;N :V C?UVÿajUB=þàHVš|#HO;'27E533,kÿÿ<Þ ±ÿ&ÁÙ!o²+´+² +°/´C+°/±é°"/°Ö´&+°±+± 22´<+± 22±#+±±99±³$9°± 9901#54>323&'#"&73265&#"LSë/8 31S"SGœVLM#(0#<"#ÙiiüÄ*5  ýÛ HpI* ÿÿ ÿ7Æ NÀ<r ,²+±é²+°/°Ö±é² +³@ +±+01333EýS”‚�ÔÅ„²+²+±é² +³@ +´ +°3´7+°2°/°Ö±é°±+°2±é°2² +³@ +² +³@ +°±+± é± +±±99±° 901"#6323##5#535>54&ýL9XÙesC8mmTii_OCxSEåh[9fHððHX,A8AÔÅ„²+²+±é² +³@ +´ +° 3´7+° 2°/°Ö±é°±+°2±é° 2² +³@ +² +³@ +°±+±é± +±±99±°901.#"3##5#535&'.54632|=H:CO_iiTmm8CseÙàJNA8A,XHððHf9[håÿé…Ù #“²+´C+²+±é²+² +´!C+²+±é°$/°Ö±é°± +°2´"<+°2²" +³@" +³@" +±%+± ±99°"±99±°9°!´ "$9°°901"32654&%!!5#"&546323 DTTEBPP'þÉEþ$"O6jz{fl5S!Íp[\on[^o?Jþ‡IE1+™…}—QÍIþ¥[ÿq¢Ù*6¾²+²+±1é²+²&+²(+´C+²#+±+é°/± é°7/° Ö±.é°.±4+°%2´<+°'2²4 +³@* +°´+°/°±+±é±8+±4.±#99±°9°² 999± °9±1° 9°¶ *.4$9°+°%901#"'732654#"57!#5#"&546323!%"32654&èYaƒm•5I7)EN“�þßJ"O6jz{fl5S„ý–DTTEBPP cXexg.KC‚K«þ=E1+™…}—QÍJ p[\on[^oÿ �Ù 7:ç²+°3´0C+°2²"+±é²" +³@" +²++²-+´8C+²(+±é´ 5( +´ C+°;/°%ֱ鰱 +°*2´9<+°,2²9 +³@9/ +°9±+°12´+°2°±+´+±<+± ±"(99°9±99°°09±±5:99±0°9° ±999±85³ /%$9°°*901"32654&"32>54##5!5#"&546323!354632 DTTEBPPÙ &"ISNHþõ"O6jz{fl5S†þÉrB4+HþV#Íp[\on[^oþ»   )6)``E1+™…}—QÍJþ‡->5'þ¢^ÿ飜1ݲ!+±é²+±é²'+°+3´&++°-2²'& +³@'* +² +³@ +°2/°$Ö°(2´/<+°*2²/$ +³@/- +²$/ +³@$& +°/± +±é°±+±é°° Ö±é°/±é±3+°6ºðÚÁÑ+ °°À±ù°À³....³....°@±± 99±&² 99901732654&/.5462#&#"#!"&5#53533#Üö2H&+N]In¶bXf3<.3PNFvbþõ05GGSVV6.$" C>IWTMT+$# E:LZ+(ŒD��Dþ�ÿ&øÜ#+•²+´*C+²+´"C+²+°3´++°%2² +³@ +°/´C+°,/°Ö°2´'<+°2²' +³@ +°'± +±$22´<+±-+± '²999±°9±"°901#"'5326=#"&5#5353354632&#"#32¡� &s14GGS A: :S ^ý5mG'C+(ŒD��Y8?Eýª‹þ™ÿ�îœ7A²-+±$'33´C+±<22²- +³@-% +²3+°3´2++°2² +±é² +³@ +²32 +³@36 +´8%6 +´8C+°B/°0Ö°42´<+°62²0 +³@ +²0 +³@02 +°± +±é°±&+°2´%+°;2°%±+±é°°! Ö´@+°@/´!+±C+± ²+-999°°9°&² )999±%±899±@°9±-°)9°8±!99±2± 9901#327&54632#.#"354632##5"'#"&5#5353"32654V a.j[mT@4DMNFB4+HSNHP: YM14GGSÌ 7 Dþ™Fi‚œb]7;ob]j->5=6)``*+(ŒD��þi   ÿ9âÜ0�²+°3²!+´&C+²+°)3´++°2².+´C+°/´ C+°1/°Ö°2´<+°(2² +³@ +°±+±é°± +±é±2+±±!#99°±*+99° ².999±°+901#"'532654&#"####5354632&#"3>32áJF &:2@NT“SFFA: :à#Q:LZŒþ58G'¤/8aPþßÈþ8ÈDY8?E5RX70N<ÿérÙ(·²+²'+±é²+²+±é² +³@ +°)/°Ö±é°2°±+±é°± +±$é°$° Ö±é°/±é±*+°6ºðÚÁÑ+ °°À± ù°!À³ !....³ !....°@±³'$9±°9°²$999017#332654&/.5462#&#"#"�TT+ F7C&+N]In¶bXf3<.3PNFucŒ22Ùý¸&5-%! B>IWTMT+$# E:LZ<%Ù N²+´C+²+²+´ C+° /°Ö± é°2²  +³@ +³@  +± +± ± 9901!!3þÉEþT$ Jþ‡IÙÍIþ¡_ÿÿ0ÿÿùÚ/Z*…)™Z*)™wÈh^° /´7+°´+° 2°/´7+°´+°2°/°Ö°2´+°2°± +°2´ +°2±+01!#5!#!#5!#ªFþâFªFþâFh‰CC߉CC ÿ:Üi²+´C+²+°/´C+² +³@ +°/°Ö´ <+° ±+°2´<+±+± °9±² 999°± 99014&#"563232653##"&5b& �C)@NSS%K8LYN'Gmþ(70aP+ý.0'MB ÿ&YÜ%f²+´C+°/´C+°/´ C+²  +³@ $ +°&/°Ö´<+°± +°#2´<+±'+± °9± ² 99901327#"&=#"&54&#"563232653: :A%K8LY& �C)@NS\5E?8¡0'MBØ'Gmþ(70aP!ÿÿ…)`Kÿó†)™ÿÿ†)b ÿó†)™ÿÿˆpM–)™ÿÿ …ÅäUÿù…)™ÿÿ#|ÈÛUïÛÖføøÚ:²+°/´ +°/´+°/°Ö°2´+±+±°901>=3327#"=#"'776  Y,1 µ0C±þz.G„Gÿÿ*†VÜ Ã\ÛÖfÿÿ†áÜZ‡)™ÿÿ ÷5Û\†)™ÿÿ1¶âÌ �ÿÿ1¶²Ì' �Ð �U÷¾ò ;°/´ +°/´+° /°Ö´0+´0+°2´ +± +01#5433¾ii"7÷xƒ&%5PɹÄ C²+´ +°/´+° /°Ö°2´0+´0+°´+°/± +013#5>=#Pii"7Äxƒ&%5UɾÄ =² +´+°/´+° /° Ö´0+´+´0+°2± +01#"=¾7"iÄh5%&ƒxÿÿYC±òb5ÀOC§ò @°/´+°/´+°/° Ö´+² +³@ +°2±+±° 901"3"&546§$44ò,,4$#4�5ýO°/´+² +³@ +°/°Ö´+°±+´+°±+´ +±+±°901"#>32#5>54&©2%9IEBK,$7>3+Ê6-JKC<%B u¢*%*�5ýO°/´+² +³@ +°/°Ö´+°± +´ +° ±+´+±+± °901.#"#5&'.54632ü(/&+3>7$,KBEIg03*%*¢u B%î8°/°3´ +°/°Ö´ +±+±³$9±°9013#'#–!c&MN&î¯��ÿÿ3>ïgM-ÀO3å-²+´+°2°/°Ö´+±+±°9013#'#t_`?QO@å–``O2å-²+°3´+°/°Ö´+±+±°901#'373Ò_`?QO@O–``ÿÿYL¡°(ÿÿw.½qÿÿ\Q-åvÿÿPçäCYþý¡ÿÂ'°/´ +°/°Ö´+´+±+01#53¡HHþýÅÿÿÿt/ÿºqüýÿÿSÿ7$ÿËC=üçÿÿ#ÿ8ôÿÌmÿÇüçÿÿgå"/tL"Àtg°å" °/´+°/°Ö´+±+013g~?"rÿÿ\ÿÿ´®bñÀÿÿS«±bý¿ •B’D°/´7+°2² +³@ +°/°Ö´+² +³@ +² +³@ +± +017533!5„FxþÉÛ··FFÿÿ •B’wM'À nB¦ X°/°3´7+° 2² +³@ +² +³@ +° /°Ö°2´+° 2² +³@ +² +³@ +± +01%##5#53533ByFxyFxçyyFyy çB-(°/´7+´7+°/±+´+±+01!5BþÉ-FFU<Ü >²+°3° /´++° /°Ö´+°±+´+±+±° 901332673#".;T(0; �$<4ÜB" ‡@sdÛÌ.°/´+´+°/°Ö´:+´:+±+01#5ÛhÌhh=1 L°/´+° /´+°/°Ö´+°±+´+±+±²999± °9012"&546"2654&§,>?V??+$>,+=>+*?>9ÿ3 5²+°/´ +°/°Ö´ +±+± °9°±9901"&54673327½8L3.F7'H%0Í4*$:,6 - e?Í3°/° 3´++³ +´++°2°/°Ö´+±+0123273#"&#"#>[X :Jd :-Í%%h&%16NMä²+°3´+°2°/± +013#73#3qh<Üq�<ä–––êA:)°/±é² +³@ +°/°Ö±+±° 90157332>7#"&'JE/# -*-NŒcK›N&r-£_ÿÿU:G™ÿÌD0 ÿÿ î8Ú„)™ÿÿ5…m`O†)™ÿÿ1îV�)™ÿÿ †6Ü[‡)™ÿÿ †+S8ÿú†)™(Æ 0²+°/´7+°/°Ö´+² +³@ +±+01#!5ÆHþª üàØH(Æ >²+°/´7+² +³@ +°/°Ö°2´+² +³@ +± +01#!5!5ÆHþªV üà3H¥(Æ >²+°/´7+² +³@ +°/°Ö°2´+² +³@ +± +01#!5!ÆHþªV üànHj(Æ >²+°/´7+² +³@ +°/°Ö°2´+² +³@ +± +01#5!5!ÆHþªV üà¥H3(Æ 8²+´7+² +³@ +°/°Ö´+² +³@ +±+01)5!3ÆþbVHHØHÿÿß^8²+´7+² +³@ +°/°Ö´+² +³@ +±+013!HHO_ýéHHßf>²+°/´C+² +³@ +°/°Ö´+°2² +³@ +± +01#3!�HHOþïfþôIÿÿÿ86ÿÎjüéÿÿQ. &qcqÚÿÿPñMÙ zÿÿ3ÿ7ÿçgM&Àÿÿ.ÿ7ÿçgÿûüùÿÿÿ#.ÿðeÿþýÿÿÿ$/ÿñfÿÿýÿÿ:þþÿÑ}ÿýüÍÿÿnçnÿÿÿnM²žÿ ÿÿpM€ÿ"ÿÿ ÿcCÿËüþÿÿPA¸MA°í6°/´7+² +³@ +°/°Ö´+² +³@ +±+013##˜PHíH¥²í6°/´7+² +³@ +°/°Ö´+² +³@ +±+01#5#5²HPíí¥Hÿÿÿ·°¤�ʤÀÿÿÿ¸°¥œÈ¥À ÿ8BÿäB°/´ +°2´7+´ +°2°/°Ö´+°±+´+± +0153!53úHþÉH€d¬¬d ÿ8Bÿä6°/´7+² +³@ +°/°Ö´+² +³@ +±+01!53BþÉH€H¬dÿ$Mÿí#²+°/´+°/±+±° 901!'&/76?Mþò%33%h +00+!ÿÿþÉPÿšäCþ³ÿÿÿPÿàävþ³ÿÿþÇOÿæåiþ³ÿÿþ¸eÿòÍþ³ÿÿþÏwÿá½qþ³þ=us½ ²+´7+²+´7+°/01!5sýʽHHÿÿþÂUÿïÜ{þ³ÿÿÿ&dÿŽÌ|þ³ÿÿþÌdÿçÌjþ³þä4ÿ}õZ°/´+°´+° /´+°/°Ö´+°±+´+±² 999± ± 99°° 901#532654&#"'632Û,, %(04F@ 2&$3ÿÿþð1ÿÄ}þ³ÿÿþÈOå€þÈÿÿþÆOÿååjþ³ÿ1Lÿy#°/´ +°/°Ö´+´+01#53‡HHLÅÿÿþìLÿÅ&°L°»þbNÿ¯ä²+°3´+°2°/01#'##'„354'%Ÿ-I‹+8pT ÿÿÿ ÿ&ÿxÿÕvþÍÿ$þäÿ8ÿÒÿÓ@°/´7+°2² +³@ +°/°Ö´+² +³@ +² +³@ +0153533þäSHSÈHSSHþäÿ8ÿÒÿÓ@°/°3´7+² +³@ +°/°Ö´+² +³@ +² +³@ +01##5#5.SHS-HSSHþäþàÿÒÿÎ T°/°3´7+°2² +³@ +² +³@ +° /°Ö°2´+° 2² +³@ +² +³@ +01##5#5353.SHSSH…HSSHSSÿÿþXÿdÿ�ÿªzþMþ}ÿUÿ&-*°/´ C+²  +³@ +°2°/°Ö´<+01'03#"'053265SS� &-šmG'ÿ­ÿ&X--° /´C+² +³@ +° 2°/° Ö´<+°20150327#"=0& �-y'Gmšÿÿþòÿ[ÿZÿÃ|þü÷ÿÿþ“ÿ^ÿ®ÿÆjþzüúÿÿþ¯ÿÿƒÿÔ}þrüÐþóþÔÿWÿ´ :°/´+° /´+° /°Ö°2±é±é°´ +° /° 3013+52505#þód4.77Lg8A&Nÿÿþ�ÿ*ÿˆzþiÿÿþìÿ3ÿ¼~þ³ÿÿþýÿ ÿEÿÒ°ÿÌüÁþÏÿ;ÿáÿÄ>°/°3´+´+°´7+°/°Ö´+°±+´+01!#5##þÏF†F<‰CCþÀÿTÿòÿÎZ°/°3´+°2°/° Ö´+°±+´+°±+´+±°9°°9°°9±°901#"'#"&=3326=3326=3%&'$3,,2"%34$"""""ÿÿþÆÿ8ÿåÿÎjþ³üéÿÿþÆÿ8ÿåÿÎ jÿøÀÿÿþÂÿ8ÿïÿ¿{þ³üãÿÿþÂÿ8ÿïÿ¿ {ÿþÀÿÿþ}ÿEÿ·ÿ­þxüàÿÿþ�ÿgÿ¢ÿ­qþtüðÿÿý§ÿPÿÿÿ‚Bý½ÿÿý§þêÿÿÿ‚'Bý½ÿšBý½ÿÿþ>Ðÿx8þ9þkÿÿþeèÿw.qþIþqÿÿý9Þÿ‘Õÿ’ŽýCÿóh3#YLýœLhý›ýCÿÃÿóí3#YLýœLíüÖÿÿþøÿÿPÿ²¿þpþØÀÿÿþ–ÿPÿ¨ÿÙÍþwÿÀþ”þÔÿ™ÿÙ4°/´++°/´++°/°Ö´+°±+´+01!!75#þ”þûÁ}'þûD}}þ‚ÿRÿ´ÿÅZ°/°3´+°2°/°Ö´+°±+´+°± +´ +±°9°°9° °9±°9014632632#4&#"#54&#"þ‚3%&'$3,,“%34$þÒ3ÿÓô ?°/°3´ +° 2° /° Ö°2´+°2± ³$9±± 9901''7'7N __ `_ __ _óGHGGHGGÿ!Fÿ‰R/°/´+°/° Ö°2´+³ +´+° 2015654&547w61%&h%%†", g7 ,  eÿÿý¨MåÖcÿÿþÉQÿšåCþ³ÿÿÿPÿàä¤ÿÿþ¨\ÿâÄþ£ÿ÷ÿÿÿ2AÿŠä¶ÿÿþ�Xÿäöþ—ÿìÿÿþ¿ÿVÿ[ÿöþ@ÿÿþÏQÿáÚÍÿÿþŒÿ/ÿžÿÙ&Ôü,ÔüÈÿÿþ¸ÿÿ�ÿÖ&ÌHÌ»þòÿÿ‚ÿ£2°/´+² +³@ +°/°Ö´+² +³@ +013#5#þò�=S]�Wþ�SÿÉM² +°3´++²  +³@  +²+´++°2°/°Ö´+±±99± ° 901#7&#"#>32733273#"ÉC+ :-!%'>1  :J‡4G%16@T%hÿÿþh/ÿ¢„#|þ0ÿË#|þ’¸þcAÿÿþ‘=ÿË,#þŒ_þŒÿØÿÿýàÿ ÿÔÿÓG ‘ýÔÿ þ”þÔÿYÿÉ $°/´ +° /°Ö´+±°901#5'67&'ÿ9 4.8+ A þÔÊ, -19% 5 ÿÿþº!ÿÎîfþžÿÿÿ:Mÿ’ü¿'ÿÿþ¡3ÿÎ #|þ’ÿÏ {ÿÝuÀÿÿþPÿÿQÿÛàÿ~üçÿÿþjÿ#ÿ~ÿð”þPÿÿþ{ÿ$ÿ�ÿñ•þ`þÿ&ÿãÿ× x°/± 33´ +°2°/°6ºÁÂÏ+ °.°À±ù°ÀºìîÂè+ °.°À±ù±°À´.....¶.......°@±° 90157'5%3#'#þýé¼¼K!c&MN&uJ:;¯��ÿÿÿ;=ÿ“ìbÿâ/Àÿÿþ½|ÿ%ä|þJþmþäÿRÿ¼/° /°3´ +°/°Ö´+±°9± °90137''7'7þÈ/PQ5'./&4QPDT,CFFC,ýüÿÿ¤ÿÐ0Ibh°)/°3´4+°J2°G/°P3´+°2°c/°,Ö´1+°1±M+´+±M1µ)>Y$9±G4@  "$,1 M$9°°9012>32#".1#"&54>32>7".#"2654&#"þW   & 2$  $2 &!  *    1   "8   8" \(     &M(&     þ¯"ÿ™ 2°/´+² +³@ +² +³@ +°/°Ö´ +0137#7#þçA%–9?'™ eš_þ³ÿ9NÿÝB°/´++² +³@ +°2°/°Ö´+°±+´ +±±9901267>73"&'.'33232653#"/&²3C+WL**·,"C,317 =A™% *$FKE +); ?ÿÿþ³xNÿUÀþÓþû+ÿâ °/´+° /±°9015!'7'7þÔäE%9YY9%E¨.?3@?3@ÿÿþ£9ÿ_Dþ˜BQÿÿþ‘:ÿFHþ†CQÿÿþã?ÿULþÊ?Qÿÿþ�:ÿERþ…CQÿÿþ«:ÿJ Xþ•CQÿÿþ³;ÿ^Fþ¨DQÿÿþ¤:ÿXXGþšCQÿÿþµ9ÿTPKþž:Qÿÿþi<ÿq PþS<QÿÿþÝ<ÿ> UþÇ<QÿÿþÎ:ÿ*AWþÇCQÿÿþ“:ÿIYþ�:Qÿÿþš:ÿH[þ—:Qÿÿ1¶âÌ\ÿ>‹ °/´ +°/°Ö´+±+017j B‚ˆ@ˆÿ8ÿØG° /´+² +³@ +³@ +°/° Ö´&+°±+´+±+± ° 9012>73#"=3å !1JL£*OQO,"ÿô˜K²+°3´7+²+±é²+° 3´7+²+±é°/°Ö±é±+±°9014&#"#53632#"'#53326>QG!GR#@A0‚pRG!GQUp R&;b>ŒƒR pÿÿÿô”'y ÿökÿÿ"ÿô˜&y öÿÿPÿm¹ ÿÿsPDä¤dlM  G²+°3±é± 22° /°Ö´<+°± +´ <+± +± ²999° °9013#'#5!#5²Za:SES žUSSSSÿÿ‹å V¤¾ 5²+´+²+´+°/°Ö´:+´:+±+01#5¾h hhÿÿóä')˜�ÿÿä'+™¤ñÿÿIä'-‡�ÿÿÿé:å Wÿÿnå L7ÿÿõä'¤ñ<(ÿÿÿéÿø0ý"ãóLÿÿ‹Ù$ÿÿPpÙ%P4Ù,²+²+±é°/°Ö±é² +³@ +±+01!#!4þ|`ä…ý{Ù¬Ù"²+±é²+°/±+±°901)3!¬ýbtöŽÐÙý{;ÿÿP[Ù(ÿÿIÙ=ÿÿP�Ù+(ÿéèåb²+±é² +±é´ +±é°/° ֱ鰱+±é±+±³ $9±± 99°±99°± 9901!5!#"&632%"2654&+þ°P½À žÂÂ� ÁþŸtŽ�è�Ž@R1¢ÖÓVÓÔ‚¥þò¥¤„ЦÿÿdÂÙ,ÿÿP“Ù.‹Ù!²+°3²+°/±+±°9013#3#rcxhÕÙý'uÿÿPþÙ0ÿÿPŠÙ1(JÙ )²+±é²+±é´  +± é° /± +01)5!!5!!5!JýÞ"ýî9þg™S3SþsSÿÿ(ÿéèå2P€Ù/²+°3²+±é°/°Ö±é°±+±é± +01!#!#!€^þŒ^0‡ýyÙÿÿP^Ù3(^Ù (²+± é²+±é° /± +± ±9901)55!!!^ýÊìÊþtÊòÈU#RRþñþÙÿÿZÜ7ÿÿ—ß<(»Ùr²+²+´ +°3´++°2´ +°3´7+° 2° /°Ö±é°±+±22´<+±22°±+± é±!+±± 9901%"&5463532##4&'>H{¥¥|Q}¤¥{SoVWnþèVon_•}yžQQŸx|–_vVk þc r{� lUYqÿÿ‚Ù;<¾ÙW²+² +°3² +±33´ +°3±é°2°/°Ö± é° ±+°2±é°2°±+±é±+01%##5#"&5;332657Î"^"zvZKWVWKZ‚«««laaþÉQAÉþ7AQ7þŸkb(ÍÝ!j²+° 3´7+²222²+´C+°"/°Ö± é° ±+±é±#+± ±99°¶!$9°± 99±±9901%>54&#"!53.546323!¯;D.Žqm‡iMþø¤OZ»ŽšÂhT°þîL /MwAqš nc´#LH.¬eŠÌÂ�i®,Hÿÿÿþ„#jÿå¸-ÿÿ—„#j³¸8ÿÿÿó5ä#–DÿÿÿöÓä"{HÿÿÿJéê#…Jÿÿ<ÿø+è"çLÿÿ<ÿòòý"`óXÿó5%t²+°3± é°#2² +²+±é°&/°Ö±!é°!±+± é° ´+°/±'+±!°9°±99° °9± ±99°´!$9014>353327#"&=#"4&#"326 1S4~,H +%#U?äxRBJFŽHN!CK9%WRþW E #*Nni[Àf<ÿ:Ü(Œ²+±é² +³@ +²+´7+´%$ +±%é°)/°Ö±é°2°±!+± é° Ö´+² +³@$ +±*+±³ $9±°9°$± 99°%° 9°°9014>32#"&'#4&#"32654+5326<*Q;_ihžo_;F!VH?4G8qAE¢2*?Gê7RE$dXw%ž_w$úè3?P^þªTJDˆJI ÿ:ü,² +°3² +±é°/°Ö±é±+±°901#5&#"'4632ü¼V§ $.'v� þìì˜F #7þÐ~ÿð Ù't²+±"é²+´ 7+´ +´++°(/°Ö±é°±%+±é±)+±±99°%³ $9°± 99±"±99°°9° °90174632'5!!#".7"32654&v_ ÓŽþó¯51PR+ =A1ôFRPDOWRòsŽ¢HHŠ92P,Kn8$8]ùgO[]cWRbÿöÓ$—²+´"7+²" +³@" +² +´7+² +³@ +´ +´+°%/°Ö° 2´<+°2² +³@ +°±$+°2´&+°2±&+±$² 999±"°9°°9°° 901%#"547&54>32#.#";#"267Ó mgÖffDY9X| LV;�@@..?AHrXˆPB’_`7EDN'%U/(;(/,(%'ÿ>°ÎS° /´ 7+°/°Ö±é°±+´1+±+±± 99°³ $9°³  $9± ° 901".5467#5!'654&7L=+‰gàdq§­ED&L" .T6ŠÞBH<@ℎ.A7aE!#ÿJéX²+²+°3±é° 2°/°Ö±é°±+±é±+±±99°°9°°9±± 99°° 9014&#"#4#"'632632'‘.>ŠX  $CaR[XÛ 0Q67R0 ß@[/Þ‰ :`þí :V: h?edC))AedAr>n{ßÿ5QO+þ¸6SU.-TT<ÿø /²+±é² +°/° Ö±é±+±°9° °9017327#"&53” .,<@XˆQHE‡<ê 0²+°3²+° 3° /°Ö±é°2± +±±9901!##373êl¬>XXÐrÆ <Î ÒÒÆ ÿôÚ"=²"+²+±é² +±é°#/±$+±"°9°´ $9° °901.#76323267#".' #Ð  6 !$¦0!! z’`') R !0:þJFbþ\<ÿ8à O²+²+± é² +³@ +°/°Ö±é°2°±+°2±é±+±°9± ±9901"&'#332676=3#5+6XX 8)*=VP; "üÓßx##*17jáýõ>%%ÿÿ æ Yÿ>ÇÎ/¦² +´7+°+/´(+°/°!3´7+°0/°Ö±.é°.°% Ö´&+°/´%&+²% +³@%! +³@%) +²% +³@ +°.±+´&+±1+±%.°9°³ $9°°9±+°9°(°9°°901%2'654&+".54>7.5467#5!#";#"jI'J#&8Ca1'3"6D, dt¦*@LXRnJd^F*C=^V"!78.H) K9+HFFT0+E@RxDÿö G²+±é²+´7+°!/°Ö±é°±+± é±"+±±99±± 99014>32#"&2654."0B>!+NM.‡mqð>\11410/1=_8% 6mK†’�E\l8Q)*RpR*ÿüH b²+° 3´++²+´7+± 22°/° Ö± é² +³@  +° ±+±é² +³@ +±+±°9°°901%27#"&5###5!# 0.,ì^F(@@ >0FTþ:ÆFFþ®<ÿ8  Y² +±é²  +³@  +²+´7+°!/°Ö±é°2°±+± é±"+±± 99± °9°° 9014>32#"'#2654."<0B>!r‚‡mc5Xð>\11410/1=_8% �w†’Gþû\l8Q)*RpR*ÿJý$U²+± é²  +³@  +°%/°Ö±é°± +±é°2°±é°/±&+± ´ #$9±°9014632#4&#"'>54'.Œtc|[JB01'?,%680Z sg£vŽu_@F'L4-D%  +,n PœÿôJa²+±é²+±é²+± é°/°Ö±é°±+± é²  +³@ +±+±±99° ° 9± ³ $9014>32!##"&732654&",KO,ˆ@�qsZ[=IOL˜LMp9RRf{•”|k[lZVprÿôØ I²+± é²+´C+°2°/°Ö± é²  +³@  +² +³@ +±+± °901"&5#5!#3272I1¤ÄÈ! # CQ;IIþÍ+O <ÿòò 7² +±é²+°3°/°Ö±é°±+± é±+±° 901732653#".53”1SN4XjnEZ.XèbHK_$þº~V:H7Fÿ8© #p²+°3± é° 2² +³@ +²+±é°$/°Ö± é° ±+°2±é°2°±+±é±%+± ±99± ² 999°±9901"&5467;32+#54&+326'y�ZF*3CiNXy›†n X]OK] –nZŠ$D!d;NiŘzn–¾¾Ohþ•f ÿ,9<²+²+±é°2°/±é°/± +±² 999°´ $901+"&/#.##563233279$=a¸hê•   B ƒ�`ǃ$È 3&ÅþîhN<ô"þ”û$<ÿ8~ \²+°3±é°2² +³@ +² +³@ +² +°3°/° Ö± é° ±+°2±é°2°±+±é±+01%##5"&53332653~�uVt‚ZGUVUGZÖllÆÆjn6þæYQ²þNQYÿ÷º'l²+°3´"7+°2²+° 3°(/°Ö±é°±%+±é°±+± é±)+±%²999°°9°² 999±"³ &$901%2>54'7#"'#"&54673>=3–.4(4lP*F$<=!`0.b^`<4Pl3:7,T™"55H/”u"­NFh4ZZ�j<¸)l�Ic7 ßÿÿÿÚÿø¿"jÁóLÿÿ<ÿòò¿"jhóXÿÿÿöè#�Rÿÿ<ÿòòè"qXÿÿÿ÷ºè#î\ÿôÚ2�²$+±/é²/$ +³@/* +²+´7+´2$ +°3´7+°2°3/°*Ö´+1+°+± +±é°±2+°2±é°2²2 +³@ +±4+± ° 9°2±/9901"34&4>323##".'33265+7 ªâ ",,! CC 1L24N, P>-AI’i——iþ¸1?P2:"$ " 3'@*#HAeX8 &8SG+;^@v–©å L²+² +°3±é² +´*+°!/°Ö±é±"+±°9±²999± ° 901052>32&#"#54.'&Df>! •PK> '&'@2&`.&-…`3ZQ3^³E$. 9\¶x¾¾ETp_+4ÿÿjå"�ÿcÁÿÿ©„#j„¸cÿ8žÈ!q²+°3±é°2² +³@ +²+°3±é°2² +³@ +°"/°Ö±é°±+±22±é±22°±+± é±#+±± 9901463532##5"&73"4&#26ˆŒXzš?nJXzšTa_b^Ø_ae[u™´´—y8^M+¾¾—xSk|oOSkþ„iÿ÷º+ƒ²#+°3´7+°2²++´*7+± 22°,/°&Ö°*2± é° ±+±é°±+±é°2±-+± &°)9°± #99°°!9°± 99°°9±*³!&$901%2>54'!3>=3%##"'#"&5467#5–.4(4Nþ§M3:7,T#>#$<=!`0.b^`!>™"55H/€ee€Ic7 ßžF0y6Fh4ZZ�j(„3F ÿ(" q²+²+°3± é° /´C+°!/°Ö´&+² +³@ +³+´&+°±+± é°2±"+±² 999± ´ $9012733#"'5326=&5#7654&# †”™cgjÏ� &Æ”h:”ka Tc·}�NqºmG'O–³F³c8* ÿï:!P²+²+±é²+²+±é°"/°Ö´&+³+´ &+±#+±· !$901>3273327#"&5#7654&#" Z1;O™cgj-#/,6]1=O”h:”%.+º(9_eµ}�NF<ÿF .l²+±é²+´'7+°/±é°° Ö±é°//°Ö±é°*2°±"+± é±0+±"³$9° ±99±°9°'° 9014>32#"'3263"#"&572654."<0B>!r‚>D+Gc54)-�1'�-Dmð>\11410/1=_8% �wlm&GR4Rl3[\l8Q)*RpR*ÿô”=²+° 3´7+²+±é²+±é²+±é°/°Ö±é±+013273##".546323#&#"xQG!GR#@A0‚pRG!GQUp R&;b>ŒƒR pÿÿÿ&«ÙMÿÿ(ÿéèåaÿôN²+±é² +± é´  +´++°/±+´ +± 22±+±± 99± °901%"4>3"3#ä 1S4CF��FBN!CJ9%LVLBJVÿÿ2ÿôn4À(ÿéMåA²+±é²+±é²+± é²+± é° /°Ö±é±!+± ±99014>323#&#"3273##".(0GyL6,v�$0j{€m( “�)2KwG/d2bjO4 R ¢Œ‰¡ R 3Ni`ÿÿÿéCåpkÎÀÿÿ(ÿéMå'yPpÿÿÿéCå&ydPqÿÿP[„'X¾‰ÿÿP[„&‰j´¸ÿlÐÙk²+°3²+±é°2° /´ ++´ +±é°/°Ö±é°2² +³@ +² +³@ +°±+±é² +³@ +±+012+53254+##5!#+J[ 54Rc9Bî]ÇêÅÆWEþÖ,? BBK9þŒ‰PPÃÿÿP9„'Y܇(ÿé�å |²+± é²  +³@  +²+±é² +³@ +´  +±é°!/°Ö± é°2²  +³@  +° ±+±é° Ö± é±"+± ² 999± °901.#"!!32673!".54>32/^W^x lþ’gZ``!þõKwG/0GyLî+÷NN‚sR~“ejþß3Ni`12bjO4îÿÿ0ÿémå6ÿÿdÂÙ,ÿÿ"„#jÿî¸,ÿÿ#ÿé¼Ù-ÉÙ(k²+° 3±(é²+´ 6+²+±é´' +±é°)/°Ö±é°2°±+±'é°2°'±#+±é±*+±°9±' °#901!#0#52>=!32#'2>54&+Íá,F.%�“�ua 1>M@µ‡{Ch‚_T,^!DNteG¨þÆtY^rR+48FûPÉÙ_²+°3±é²+° 3´ +°3±é° 2°/°Ö±é°2°±+°2±é° 2°±+±é±+±°901!!#3!332#'2>54&+ÞþÐ^]1]Œ|…w` 1>M@¤Lþ´ÙþÅ;þÆuZ\rR+48FûÐÙV² +°3²+± é°2´  +±é°/° Ö± é°2² +³@  +² +³@ +° ±+±é±+012#4+##5!#+J[]Bî]ÇêÅÆWEþÖ;9þŒ‰PPÃÿÿPn„'YðŽÿÿPŠ„'XÒŒÿÿ`„#{�¨—Pÿy‚Ù K²+°3±é² +³@ +²+° 3° /°Ö±é°±+´1+°±+± é± +01!#5#3!3‘Pñ^v^‡‡Ùýy‡ý'ÿÿ‹Ù$PpÙI²+±é²+± é´  +± é°/°Ö±é° 2² +³@ +°±+±é±+01%#!!!3 4.+32>p-Y=þ·éþt´] 8'ãã'8Ú$FE+ÙRÔ×.*,þñ-ÿÿPpÙ%P9Ù,²+²+±é°/°Ö±é² +³@ +±+013#!!­]éþtÙR"ÿy Ùs²+±é²+±é°2°´ +°2² +±é°/°Ö´1+°± +±é°±+±é°±+´1+±+± °9°°901%!!>=!3#5!#5KþúÎE*Â[Pý¸PR5hþÓv ñÙ¥ýqч‡ÑÿÿP[Ù(„Ù:²+± 33²+± 33°/°Ö°2±é°2±+±³ $901 # 333 ##›þânEþåtî]îtþåEvþê]Dþ¼wbþÌ4þÌ4þžþ‰Dþ¼(ÿéeå1…²%+±é²% +³@+ +²+±é² +³@ +´ % +± é°2/°+Ö±-é° Ö±é°-±+±é° Ö±é±3+±´ %$9± °9° °9°°901%2>54&+532654&#"#>32#".'3N8N%`ClX?_YJW^XŒ~x‹i‚(>gA)KN8%X+U;*).TR[.7DMGkwscl-1}9=. #7\<64PŠÙ B² +°3²+°3° /° ֱ鰱+±é± +±±99± ±990133##PX}eXþ‡iÙý¥[ý'VýªÿÿPŠ„#{ƨŒPnÙ 0²+°3²+°3° /°Ö±é°2± +±± 99013#33 #­]]1oþ§z|þ»ÙþÎ2þ§þ€MÿöOÙH²+² +´ 6+²+±é°/°Ö±é°±+±é±+±°9± °901!#52>=!#ñþú,F.%Â^‡RDj„aV-^"FPvgG©ý'ÿÿPþÙ0ÿÿP�Ù+ÿÿ(ÿéèå2P�Ù/²+°3²+±é°/°Ö±é°±+±é± +01!#!##þ‹^1^‡ýyÙý'ÿÿP^Ù3ÿÿ(ÿé�å&ÿÿZÙ7`Ù!²+²+°3°/± +±°9013#733ñq�òq¹¸oôåþ…{(%Ù$0<k²+²#+´1# +°%3±é°2´!2# +°03±!é±22°=/°Ö±8é°8±+±"122±é±%22°±++±é±>+±21±9901032##5".54>;532>4.#"Ö &CcF3'?6K._.K6?'3FcC& _0H5''5H0_0H5''5H0|7jH6W8( ^^ (8W6Hj7]ý×%JdJ%þ†z%JdJ%ÿÿ‚Ù;PÿyÄÙ Q²+± é² +³@ +² +°3° /°Ö± é° ±+±é³+´1+± +± ±9901%33#5!3#^CPýÜ^R‡ýqчÙýy2Ù9²+²+° 3´  +±é°/°Ö±é°±+° 2± é±+01#"&53;3#¿èMX]Lä]]\A)þÅ9tý'PîÙ ?²+±é°2²+± 33° /°Ö±é°± +±é°±+±é± +01%33!333ÎÂ^ýb^Â^R‡ý'Ùýy‡Pÿy1Ùa²+±é°2² +³@ +²+± 33°/°Ö±é°±+±é°± +± é³ +´1+±+±± 9901)333333#áýo^Â^Â^CPÙýy‡ýy‡ýqÑ%Ù I²+±é²+±é´ +±é°/°Ö±é°2² +³@ +°±+± é±+01!#5!32#'32654&+çD¥–ˆ‚dÝÔ@RQAÔ‡RþêxfcRR=@PPÙ S²+°3± é²+°3´ +±é°/°Ö± é°2° ±+±é°±+±é±+± °901)332%32654&+#ŠþÆ]¥–ˆ�þ¾Ô@RQAÔm^Ùþêxfe€RR=@Phý'ÙPpÙ :²+± é²+´ +±é°/°Ö± é°2° ±+±é±+01%#!33232654&+p‚dþÆ]¥–ˆþ=Ô@RQAÔâcÙþêxf“R=@P(ÿé�å a²+±é² +³@ +²+± é²  +³@  +´ +±é°!/° ֱ鰰 Ö±é°/±é±"+±°9013267!5!.#"#632# ˆ`Zgþ‘l x^W^_+îLyG0/GwKþõ! je“~Rs‚MOî4Ojb21`iN3!Pÿé»å|² +²+±é² +²+±é´  +± é°/° Ö±é° 2°±+° 2±é°±+±é±+±°9°±99±°9° ±99°°901#"&'##33>32%"32654&»»Ž•±v^]y«�ž¯þ³r|}rq~|ažÚÁ¢þ´ÙþÅ—°Ñ¢þ좡‡�£^Ù P² +°3²+±é´   +± é°2°/°Ö±é°±+°2±é±+±° 9°± 9901463!###"&6;5#">vaI]oþëneqQ7>53"32654&o,oq}np}$F2?)/J1%S(:“FPPFEQOÕF•ˆ�”•„L„€U  ( N=m¾mm\an<Ê 4&+32632654&#2+[.;bb;.ËŒ'-.&RFE`TGóx,Ž)u›*&!*%P4W%ZAU <r ,²+²+±é°/°Ö±é² +³@ +±+01!##<6âT Lþ@ÿˆ2 r² +±é² +´+°2°´  +°2²+±é°/° Ö´ +° ±+´<+°±+±é³+´+±+±°9017>5!3#5!#573#M0"S@FþnF­Ý¬@÷Ðþ4¸xx¸ t;àÿÿÿé÷H ó =² +±33²+±33°/° Ö°2´<+°2±+± ³ $90173#'#5#'35¨ÀkòjáSájòkÀ ÉÉúþîââââúÉÉÿéÇ#š²!+±é²! +³@# +²+±é² +³@ +´ ! +± é°$/°#Ö±é° Ö±é°±+±é² +³@ +°° Ö±é±%+±³!$9±°9± °9° °9°°901732654&+532654&#"#>2#"'v5E6@;+J>01<3fXb¶nAVucËœ/7-%6L5!$+TMTWIK%&VLZ³<ç E² +°3²+°3° /° ֱ鰱+´<+± +±±99± ±990133##5bST¬ !2  ýôÀb%< B² +°3²+°3° /° Ö± é° ±+±é±+± ±99± ±990133####S?5egke^1Sƒ@CC@CFFþdCBBC@CB½^˜†•#+þï-&�ƒ†™^åÕl¾ll\`nm^_lk]amÿÿ Ò [<ÿˆ Q²+±é² +³@ +²+°3° /°Ö±é°±+±é³ +´ +± +±±990133333#532#"&'33267#53.#"$m[j}k^pTkAMãà I:4@\\cœ‚•k`~^TMIP;7<ÿéÇ#v²+² +±é²+²+±é´  +±é°$/°Ö±é°2°±+°2±é°±!+± é±%+±!± 99±°9°± !99°°9014>32#".5##3%"32654&ð 1W7q}n7W2! ^TTJFPPFEQO51D8'•ˆ�”&8H>é ×™m¾mm\an Õ [² +°3²+±é´   +± é°/°Ö±é°±+°2±é±+±° 9°± 99± ° 9°°9014>;#5##7.7;5#"B!@,øTEËgÍCR[[‰‰*1w/0ýôÚÚÝL=F›+$ÿÿÿé÷ä&©Crÿÿÿé÷Í&©jyÿ]Ù'“²+² +²+´C+°!/´$+´  +°3´ +°2°(/°Ö° 2´<+±22² +³@ +² +³@ +°±'+´<+²' +³@'# +±)+±'±!99±°9014&#"##53533#>32#"'5>5²B*BKSTTS«« *;#KZ7PP 5{\70bNþíT@EE@Ÿ!JDþì?k@#(|\ÿÿ<rä"v#§ÿéÜ^² +±é² +³@ +²+±é² +³@ +´  +±é°/°Ö°2±é°2±+±±99±° 901%#3273#"&54632#.#"3WâMAkTp^k}j[mT@4:I ßèT^~`k•‚œb]7;PIÿÿ$ÿéÍVÿÿFšÙLÿÿÿöÅ"jÝùóÿÿÿ&«ÙMþ e²+°3±é°2²+±é´ +±é° /°Ö´<+² +³@ +°±+±é°2°±+± é±!+±° 90172>=!32+##%#32654&SqmkaFö¬'B8||:81P,‹ŒyÖCXEVÀaŒ�6êž,+(<' a²+°3±é²+° 3´ +°3±é° 2°/°Ö±é°2°±+° 2±é° 2°±+±é±+±±9901!#5##335332'#32654&€öúTTúTqmkbk||;72éé ××ÖBXEWêž.))Ù²+°3² +²+´C+´  +°3´ +°2°/°Ö° 2´<+±22² +³@ +² +³@ +°±+´<+±+±°9±°9014&#"##53533#>32#´B*BKSTTS«« *;#KZS\70bNþíT@EE@Ÿ!JDþ‚ÿÿ<Úä"vR®ÿÿ<çä&Cn¬ÿÿ ÿ&Ô»"{Dß\<ÿˆÞ K²+°3±é² +³@ +²+° 3° /°Ö±é°±+´+°±+± é± +01!#5#3330F®TúTxx þ@Àýô™Ù[²+°3²+°3°/°Ö±é°± +±é°±+±é± +± ±99°°9°±99±±9901!#&53>53653#&'0fKpdFG-*6dBKPRd)EB&f[38~‚Ù¹þê‰TW�—^´ë‘•´oß¾�@˜Ó½ ž d²+°3²+°3°/°Ö´<+°± +´ <+° ±+´<+±+± ±99° °9°±99±±99013#&3>53653#&'ö^ŽRk31RkdR‡^C#"á+Áïp¹i£ïÛÕþâîjwyÙf²+±é²+´  +± é´ +°3±é°2°/°Ö°2±é± 22² +³@ +² +³@ +°±+±é±+01%32654&+532#!#53533#DÔ@RQAÔ¥–ˆ‚dþÆÉÉ]ÍÍRR=@PRxfc#RddR^ˆr²+±é²+°3±é° 2² +³@ +´  +±é°/°Ö°2±é± 22² +³@ +² +³@ +°±+±é±+±°901%32654&+532+#53533|B08:|vkh^Iö­­T°L/)50·k\RI^ÀL||Ldÿé‹å'•²+²+± é²  +³@  +²+²%+±é²% +³@ +´% +°3±é°2°(/°Ö±é°2°±+°2± é°2²  +³@  +° ±+±é° Ö±'é±)+± ² %99901.#"!!32673!".'##33>32^W^x lþ’gZ``!þõHrG1U^^W4GnCî+÷NN‚sR~“ejþß.Ha\0þ´ÙþÅ/WXA(îGÿé "¡²+² +±é² +³@ +²+²+±é² +³@ +´  +°3±é°!2°#/°Ö´<+°2°± +°2±é°!2² +³@ +°±+°2±é°2±$+± ° 9°± 99°±9901%#3273#"&'##33>32#.#"3âMAkTp^f|HSSKz^[mT@4:I ßèT^~`k‰vè ×k{b]7;PIÙ @² +±33²+´  +± é°2°/°Ö±é±+±° 9±° 9013#'##5## RdLde‡^�ac“�Ùý'ÛÛÛÛ)@þÀ # (² +±33²+°/±+± ³ $9013#'#'#0'ñ[\z^AH[;=^O?G? áþÕ££‘‘ �©�dòÙ`²+² 333²+°3´ +°3±é± 22°/°Ö±é°2°± +± é±+± ±99° °9±°901 3#'##5##7##33“�]dLde‡^�acaž^^Á)@þÀ°ý'ÛÛÛÛÛÛÙþPGá R²+² 333²+°3´ +±é°/°Ö´<+°2±+±² 999°°9°±9901'3#'#'#7##33?G?![\z^AH[;=^O}SSŸ �©�©áþÕ££‘‘³³ þõ„Ù <² +±33²+± é°/°Ö±é±+±° 9± ´ $901!###'7§Eã{vþê]þân{1sqÙþÝþJDþ¼Dþ¼´Óœœ ó B²+± 33²+°3±é°/° Ö´ <+±+± °9±´ $9017%0!#'#5#bhþ†.Ö.jáSáj.ÀmmLÞþÒââââ.dVÙj²+² 333²+°3±é´ +±é°/°Ö±é°2°± +± é±+± ²999° °9±± 99±±99017%!###!#3!+sqþjEã{vþê]þân5þ¬^^™‡œœRþÝþJDþ¼Dþ¼cþ�ÙþÜG� q²+² 333²+±33±é´  +± 33±é°/°Ö´<+°2°±+´<+±+±²999°°9± °9°°9010!#'#5#7##3!'7.Ö.jáSájäþSSFbh ÞþÒââââää Ü�mm"ÿ@e'N²I+±é²L+´*+²6+±*é²6* +³@64 +°92°/° 3´6+° 2° Ö´6+´"#I4 +±"é°O/°.Ö±-é°-° Ö±é°/±é°-±3+´4+°4±9+´:+° 2°:±+±Cé°' Ö±?é±P+±3-°9°4³1L$9°9¶ #*"I$9°:°<9°'°A9±I±99±"±C99°#°A9°*²-.?999°6±1<990132632&#"#"&5463232>54&+532654&#"#>7&'332673#"&#"„!M#MY="M<^S;r8N%`ClX?_YJW^XID;T(0;BIi‚(>gA$c 3 ^ EH@K*).TR[.7DMGMi!4B" 4!dGl-1}9=.+ÿFÇ]>þ²=+±é²+±é².+±$é²$. +³@$& +².$ +³@., +°12° /±é°° Ö± é´=, +±é°?/°Ö±é°,2°' Ö±&é°´++°+/°±+±:é°! Ö±6é²!6 +³@! +°!°1 Ö´2+±@+±&+°)9±1µ $=$9±!°49°2³ 38$9±= ±99±±:99°°89°$°69°.±)49901"3263"#"5463232654&+532654&#"#67&'332673#"¸*Y&!]#�?2K(0;+J>01<3fXI;U(0;SAVfS R‹6E-%6L5!$+T_(":B" :!+\K%&VK[ÿÿ<¾Ù;ÿÿ<ÿ8~ [(ÿéèå e²+±é²+±é´ +´7+°/°Ö±é°2°±+° 2±é±+±³ $9±°9°°9°°901#"&632.#"!26èÀ žÂÂ� Á^‹pm�ýþ ‹ÔŒa¢ÖÓVÓÔ�}•–|Fu‹Œÿéø e²+±é²+±é´ +´7+°/° Ö±é°2°±+° 2±é±+±³ $9±°9°°9°° 9012#"&6."!26 q}np}~M€N)þØN|N•ˆ�”••ùRZ[QFNXXæÙ '²+²+±33± é° /± +± °901!#303#ydþúdÖÊÓŒÙý—iR & '²+²+±33± é° /± +± °901!#303#[¸^Œ”ž] þW©Lÿÿæ„']Œèÿÿ &Ù#²Þÿõéÿÿ'ÿ&ˆåf’<(@·´ÿÿÿ&¦'·ÒF²<(@(ÿé8å%r²+´+²+´ +°&/°Ö±$é°$±+² 222´:+² 222°±+±é±'+±±99° ³#$$9°³ !$901!.4>753#=3>54&'#5|_˜]]˜_hH{\5À”hhj�‹lhj�Œ YžÊŸX 8[ƒOŽÂj�pu’‘ä‘ÿé4"v² +´+²+´"+°#/°Ö±é°± +²222´ :+² 222° ±+±é±$+± ³ $9°"´$9°³ $90153#5.4653>54&'#õhbuw`havva9GG9h9GG9h„sm‚ƒàƒAZIIZYGK[ÿÿ™Ô'ø{|'ù*ëÔÿÿ © 'øúÿÈ'ù©7Õÿÿ™„'ÐÁªÔÿÿ žÙ'ÐAÿÿÕÿ$À¡²+°3°/±+°6ºöÀÅ+ ° °À± ù°Àº=ì±+ °.°À±ù°ÀºöÀÅ+ °°À± ù°À°³+±°³+º=ì±+ ³+±° ³ +º=ì±+ °³+±° ³ +º=ì±+ °³ +±° ³ +º=ì±+ °³ +±° ³ +ºõíÀÌ+ °³ +±°³ +ºöÀÅ+ °³+±°³+ºöÀÅ+ °³+±°³+@ ..................@ ....................°@01''#7'57'573Àœ@‰�87;ˆœ?ˆœK7MCÉC²ºBÈBëôþ„cÿì O²+´ +³+´+° ³ +´+° /°Ö´ +°2° ±+°2´+0153353#5#þ„HØHHØc’C’BÿÿþþU+Ü´<ÿÿÿ`ÿª¸‡·üÆäÀ@ÿÿÿ fÿ°¿‡¶ð4@Àý×Cé6°/°3´ +°/±é°/°Ö´+± °9±° 901"#46323".þ}' @[QJFN (N>~— '$I]!)!; ÿÿýÿ† Y&Î'ÎDÿy'Îþºÿy'ÎÍþ3'ÎFüî'Îüf'Îþ»üíÎþ3þ3üýÿUk "/<IT_u²7+°9 Ö´4+²+²!+²;+°/´+° /±é°L/±UZ33´S+°^/´W+±JO22°F/´A+° /±é°/´+°`/°OÖ´P+°P±S+´K+°K±'+´,+°,± +±22´+°± +´+± 22°±+´+°±U+´_+°_±[+´Z+±KS±7699°,³)49<$9° ¶#$*.01;$9±¶!=>H$9°³AFI$9±_U±DC99± ±99°9³"6$9±L7³01$9±FW¶#.$>DH=$9°A³,'C/$9°±)*99013#5265##5463"37'654''&5477#"'7327''7632&#"#"&5335532#4&#þüX/)-YX/)-É?3 ýà?3 >4"   >4" ýI+/*\I+/*JI+/*\I+/*üø>4" ž>4" ý¡?3 !?3 þX/)-ZX/)-PÿyÍ„ ”²+°3² +°3° /´++² +³@ +°2°/°Ö±é°±+´+°±+´+°±+±é³+´1+±+±°9±° 9±°9± ³$901332673#".333#5##Ö;U(0; �$<4‡X}eCPKþ‡i„B" ‡@wý¥[ýqчVýª<ÿˆ#» ›² +° 3²+°3°/´++² +³@ +°2°/° Ö±é³ +´+°± +´<+³ +´+°/´+³ +´+±+±° 9°°9° °9± ³ $901333#5##332673#".7#!#53533#320]vaþ·YY]\\´öÏ1Mû+4^rFxxF| ê q² +±é²+´  +±é´  +°3´7+°2°/° Ö°2±é±22² +³@ +²  +³@  +°±+±é±+±°901%4+3267#!#53533#32�[˜˜)2[UFþù>>THHvph™N›* CS~FHHFKLP^Ù e²+²+±é´ +±é°/°Ö±é°2°±+±é°2±+±° 9°±99±±99°± 99°°901654&+327'7+#!2ÞKCÂÂ62L$0å]-lu<:2°!6a@TM;lhys7U^po¸o@2ƒ?2CNþïæO^š„P996²+²+±é°´ +°/°Ö±é°±+±é± +013#!53!­]Œ]þtÙ`²<cu7²+²+±é² +³@ +°/°Ö±é°±+±é± +01353##<ÓTÓT iµþ@HÙ W²+² +± é´ +°3´7+°2°/°Ö° 2±é°2² +³@ +³@ +² +³@ +±+013###535!!¼jj]KKéþtíFþY§FìRˆ W² +²+±é´  +°3´ 7+°2°/° Ö°2± é°2² +³@  +³@  +² +³@ +±+015!#3###5R6âDDT>HÄLxFþþFPÿR9ÙW²+²+±é°/±é´ +±é°/°Ö±é°2°±+± é²  +³@  +² +³@ +±+013#!!32+532654&+­]éþt¬\]]\40+55+¨ÙR²fZþýZfR/-'-/<ÿq¡ s² +°3² +±é°/´C+´ +´C+°/° Ö± é°2² +³@  +° ±+´<+² +³@ +±+± °9± °90126=4&#"#!#>32+â)C$*=3T'ÓA9I>YLF07�9.[Vd L¹0'IFÏBMÿy„Ù\² +±33² +±33°/°Ö°2±é°2°±+´1+±+±±99°±99± µ $901%3#5### 333D@Pþâ]þânEþáxî]îxþáJчDþ¼Dþ¼wbþÌ4þÌ4þž ÿˆ/ _² +±33² +±33°/°Ö°2´<+°2°±+´+±+±²999°°9± µ $901%3#5#%#5# 35373åJF!þþSþþg0þðkÞSÞkþð@¸xØØØØÞÞÞÞþü(ÿ3eå:ž²4+±-é²-4 +³@-1 +°/´ +°%/±&é°;/°Ö±é°1 Ö±0é°±+´+°±!+±é°* Ö±7é±<+±0· %&-4$9°°9°*°99± ° 9°%² 999°&°99°-°7901%#"'53254&'.'332>54&+532654&#"#>32e€v6L80%H!u„X+U;8N%`ClX?_YJW^XŒ~x‹i‚È\x "7*4 - 6% €t64*).TR[.7DMGkwscl-1ÿ3Ç2¾²+±é² +³@ +°&/´++° /± é°3/°2Ö±é° Ö±é°±-+´#+°#±+±é² +³@ +°° Ö±é±4+±2°19±±()99°-µ&+0$9°#±!99±°9±+&°(9° ²#)999° °9°°901732654&+532654&#"#>2#"'53254&'&'v5E6@;+J>01<3fXb¶nAV_S6L80%H!£œ/7-%6L5!$+TMTWIK%&VDX%5*4 - 6&¢PÿynÙS²+°3² +° 3°/°Ö±é° 2°±+´1+±+±± 99°± 99± ³ $901%3#5##33%IP,þ»]]1oþ§JчMþ³ÙþÎ2þ§<ÿˆÚ V²+°3² +° 3°/°Ö´<+° 2°±+´+±+±± 99°± 99± ³ $901%3#5#'#373š@F$áSSÔ`û@¸xââ ÔÔúP™ÙF²+°3²+° 3°/°Ö±é°2°±+°2´+± 22±+±±9901'#375373#%#Ý0]]0Fõxþ“vtþþF)þ¼ÙþÅ*‰MÕþÆRþ³Þ?<ø I²+°3²+° 3°/°Ö´<+°2°±+°2´+± 22±+±±99017'#375373#'#À1SS1FgkÒòg‹F¯)Ø Þ1k%gÉqÒt* ¢Ùa² +°3²+°3´  +°3´7+°2°/° Ö°2± é±22² +³@  +² +³@  +±+± ² 999013#3 ###5353¼``kxþdŸnþˆ]UU]oF‹;þžþ‰Dþ¼)Fj  d²+° 3²+°3´ +°3´7+°2°/°Ö°2´<+±22² +³@ +² +³@ +±+±² 99901533#73 #%##5FSGGÞkþð0gþþS<Þ..FjÞþüþøØØ˜F>Ù A² +°3²+°3±é° /° Ö± é°2² +³@  +±+± ² 99901#5!3 ##ûçDkxþdŸnþˆ]‡RþÅ;þžþ‰Dþ¼ˆ D² +°3²+°3±é° /° Ö´ <+°2² +³@  +±+± ² 99901#5!73 #%#̸ Þkþð0gþþSÀLÞÞþüþøØØPÿyÄÙa² +°3² +°3´  +± é² +³@ +°/° Ö±é° 2°±+° 2±é³+´1+±+± ±9901%3#5#!#3!3�CPQþ‹^]v^JчLþ´ÙþÅ;<ÿˆ a² +°3² +°3´  +± é² +³@ +°/° Ö±é° 2°±+° 2±é³+´+±+± ±9901%3#5#5##3353Þ32+/)C$*=3TùT¡A9I>YLF07�9.[VdÀþ@ þû0'IFÏBM(ÿéå2?Œ²+°/3±é°2²+± é´8 +±é°@/°Ö± é²  +³@  +° ±+±=é°=±5+±é±A+±=±99°5µ/1$9°± %99±°19°8¶ )*3$901"&54>3"327.54>322>5#"'7654&#"[…®#KŠ^~{mm 1:1JD_cz  J-T741?Ls6/%+?ÆœP‹yFR¡Œ…¦0ƒHZ…B u¼i (!*wK·nT-fK8yÿéh%.|²+°"3± é°2²+±é´* +±é°//°Ö± é° ±+±-é°-±(+±é±0+±-´ $9°(±$99°²"999±* ¶ &$901"&5463"3263&54632327#"'7654#"vtŽ}KiFL ?[4AS< ;: KA6.-):7$“ˆxŸM^fuaDegjeOGC$&Dh+hvA9d(ÿ3�å,z²+±é² +³@ +°/´+°-/°Ö±"é°"± +´+°±(+±)é° Ö±é±.+± "µ %$9°°+9±°9°²99901#"'53254&'.54>32#.#"32673ÉL80%H!Hm:$ 0GyLî+_^Wj{€mZ`` é5o*4 - 6&CUlL"2bjO4îNN¢Œ‰¡ejþò$ÿ3Ü'�²+±é² +³@ +°/´+°(/°Ö±é°± +´+°±"+°2±#é°2±)+± µ  $9°°&9±#"±$99±°9°²99901#"'53254&'.54632#.#"3273bL80%H#Xfj[mT@4DMNEkT\N7o*4 - 6&‘q‚œb]7;ob]j~Vh $ÿyZÙ M²+±é° 2² +³@ +° /°Ö±é² +³@ +³+´1+² +³@ +± +01%3#5##5!#kCPPð<ïJч‡RRÿˆˆ M²+±é° 2² +³@ +° /°Ö±é² +³@ +³+´+² +³@ +± +0173#5##5!#ø32'Y8?R01f#TvZj~PN3*$+: " c0L0# .MSW�4K%iV`‰xU>9A-'!%+m€&=0G"(ÿ;kõ <¡²+±é°0 Ö±7é²70 +³@74 +°*/°3±<é°2°=/°-Ö´91+°9±)+±é°4 Ö´31+°±"+´!+°!±+°2±é±>+±49°09±3)± 299±"° 9°!²999±<±-99901.#"#>3 !32673#5.=.54632#4&"3ÿ &C-Vu_ 3>Z4,ýè{jW^_(ØHAg>)fgM?7AP.C0Ò!-9"f[ :17'þ›Œ¢MOá ¯±:Ne\.uSN];7 4*6Bÿ;•/6β+° 3±é² +³@ +²'+±4é°4° Ö´+² +³@ +´# ' +°3´#++°02°7/°Ö´ +° ±+°$2±é°02°± +´ +° ±1+±.é±8+± ±99°±99° °69° ²'4999°1°9°.°9±±99±#°901%3273#5.'.54632#&#";>32%!4&#"01f#TbJH[lPN3*$+: " c0L0# þ€'X9?Rê4K%iL^ °° †nU>9A-'!%+m€&=0G"DMSWP®Ù!²+²+°/°Ö±é±é±+01#®^Ùý'Ùÿÿ„„#{¨Šÿÿ óº#{ÔÿÞªPÿR�Ùa²+²+°3°/± é´ +±é°/°Ö±é°2°± +±é²  +³@  +±+± °9°°9±°9012+5326=4&+#33«\]]\40+55+ú]]kxþdwfZ¥ZfR/-É-/þÛÙþÅ;þž<ÿqØ p²+°3²+° 3°/´C+´  +´7+°/°Ö´<+°2°±+´<+² +³@ +±+±° 9°° 9± ° 901%4&+#37372+5265gC)lSSÞkþðMLYYL)CY70À ÞÞþüMBzBMI07ÿy–Ùh² +´ 6+² +³@  +²+²+±é°/°Ö±é°±+±é³+´1+±+±°9± ±99°°901!#52>=!3#5#ñþú,F.%ÂGPU‡RDj„aV-^"FPvgG©ýqчÿˆò ]²+±é² +³@ +²+²+± é°/°Ö´ <+° 2° ±+±é³+´+±+±±9901!3#5##0#52>5bS=FK¬ !2  þ4¸xÀ0)CXDG.PAAqQDPÿR�ÙN²+²+° 3°/±é´ +±é°/°Ö±é°2°±+°2± é² +³@ +±+01!!#3!3+5326#þ‹^]v^^\40+5Lþ´ÙþÅ;ý9ZfR/<ÿqÞ T²+°3²+° 3°/´C+´  +± é°/°Ö±é° 2°±+° 2±é² +³@ +±+0126=##3353+*AúTTúTYLF07Èé ××ýôBMPÿyÈÙa²+°3²+°3´ +±é² +³@ +°/°Ö±é°2°±+°2± é³ +´ 1+±+±± 9901!#3!33#5#$þŠ^]w]GPTLþ´ÙþÅ;ýqч<ÿˆ a²+° 3²+°3´  +±é²  +³@ +°/°Ö±é°2°± +°2±é³  +´+±+± ±990133533#5#5##HÄLxF¼³mG'LFÿR‚ÙO²+° 3²+²+°3°/±é°/°Ö´ #+² +³@ +±+± ° 9±±9901! #33+5326ÇÈqòq»¼oöt[40+50þÐvcþâþ�þŠFhR/ ÿqÒ O²+° 3²+²+° 3°/´C+°/°Ö± é² +³@ +±+± ° 9±± 990125'#373+lƒ…_¹¯_~~^°µYL(FFÉÉ ¾¾ýþñBM‚Ù@²+°3² +°3´  +°3´ 7+°2°/±+± °9± °901## ##5333-–ësÇÈqëš—Øq»¼oÜœHþ¬0þÐTH=þâþÃ Ò @²+°3² +°3´  +°3´ 7+°2°/±+± °9± °901##'#7#53'373œj aƒ…_¦i]�_~~^“8HðÉÉðHÔ¾¾Ô(ÿéeå1†² +±é² +³@ +²+±!é²! +³@! +´'*  +±'é°2/°Ö±-é° Ö±$é°-±+±é° Ö±é±3+±$µ ()$9±*°9°'°9°!°901%2>=3#".547&54632#.#";#"?;U+X%8NK)Ag>(‚i‹x~ŒX^WJY_?XlC`%N;46<\7# .=9}1-lcswkGMD7.[RT.)*ÿéÇ#¡²+±!é²! +³@! +² +±é² +³@ +´ +±é°$/° Ö±é² +³@ +°° Ö±é°/±é°±+±é° Ö±é±%+± °9±³ !$9±!°9°°9°° 901%3#"&547&5462#&#";#"326oXËcuVAn¶bXf3<10>J+;@6E4œ³ZLV&%KIWTMT+$!5L6%-7ÿROÙU² +´ 6+²+±é°/±é° /°Ö±é°±+±é² +³@ +±!+±°9± °901!#52>=!+53265ñþú,F.%Â^\40+5‡RDj„aV-^"FPvgG©ý'R\R/-ÿqµ H²+±é²+± é°/´C+°/°Ö´ <+° ± +±é²  +³@  +±+01!+5265##52>5bSYL47¬ !2  ýôBMI(Àb%ÿÿ(ÿÅèå4ÿÿÿ&óTÿÿšÙ:ÿÿ Ç ZÿPnÙ0²+°3²+° 3°/°Ö±é°2±+±±99013#37'373#'#­]]±ru2Ko}hu(§z|þ»Ùþβ](K}U §þ€M<Ú 3²+° 3²+°3°/°Ö´<+°2±+±±99017'373#'#'#�qXu.`Z`u ljáS ÔqH.YOlþîââ PÿyÃÙ S²+± 33²+±é² +³@ +° /°Ö±é°± +±é³  +´1+±+±±9901!#!3#50##þ‹^1BPP‡ýyÙýqч<ÿy  S² +±33²+± é² +³@  +° /° Ö± é° ±+±é³+´1+±+± ±9901!3#50###<¡CPGùT þ>чÀþ@2ÿy_Ù[²+° 3²+´ +±é² +³@ +°/°Ö±é°2°± +±é³ +´1+±+±±9901323#5#4+#3�èMXCPPLä]]Æ\Aßч;9þŒÙ2ÿyñ ]² +±33²+´  +±é²  +³@  +°/° Ö± é°2° ±+±é³+´1+±+± ±9901%3#50#54&+#332®CPG"šTT—;VJчÅ÷ ÉB9Fÿ×ÐÌ?² +±é°/°Ö±é°±+±é±+±° 9°° 9± ± 9901%2653'#"&53YrO_W;[ ˆ1¡z^&:Ipv�ý¬]De$$œžžþc#6"(FyÖJ²+°/´6+° /±é° /°Ö±é°2°±+±é°2±!+±°9± °9012#54.#"!!#4>aRp=_'O=1D&Ñþ/_&>eÖ-XlIRQ:LA)LE8�]–œ;ZR4(ÿÿ¼Ö&[²+°/°3´%*+°2°/±é°'/° Ö±#é°#±&+°2±é°2²& +³@ +±(+±&#°9±%° 901%##5#".54>3234&#";¼k_×?_1:kLBd9# nË^K5J*»´†‡‡/@U8:MZ5$*:4þàTSq=RR_ #K:rO_ 8mÙ+VmL°^��8HC"pvQR/F^<+FÿöyÝR² +±é²+´  +´6+° /°Ö±é°2°±+±é°2±!+±° 9±±9901%26=3".53!!YsN_%=dDSr=_Ñþ/ %:LovQQ9XR6!+XlL¬˜]· 6"*2Ûß.š²+° 3²++±é± À/±é°2² +³@ +´"%+ +±"é°//°Ö±é°2°°" Ö±&é°&/±"é²"& +³@"$ +°±+´+³ +´ <+±0+±²+999±"±990132#4&'!#5332>54.#"3!54>32�(4+{…S!$þYZZ ;[O:,GF"Y�¼þåEƒ]E}YÕ:hH=! ƒ4¸7,BvI=Y-siQLud65}F Ñ B²+± é°/±é² +³@ +° /°Ö± é°2²  +³@  +³@  +± +01%#33#@ú`úúOOÑéMþ´FyÙC²+±é²+±é°/°Ö±é°±+±é°2±+±°9±°901#54.'"!!4>32y_'O=9I& ÕýÍ&>eDRp=Ÿ�Œ9KBAM9þ¹WŸ;ZR4-WlFÿþØ 3_²+°$3±é°/°23±é°02°/±+é°4/°%Ö±$é°$±+±é°±+°2± é°/2±5+±°9±°901"2=#".546;54&'#"#4>;23#ÎE.4Y™_5pQ8Q-Wx´?U³,1_.KL)¿i„66p8^U8‰›¢%AC''>7$iBAE:-ýþ :U+q\KNAÿö|ÎD²+±é² +°3±é°2°/°Ö±é°±+° 2±é° 2±+±°901%"&=4673533#2675#"�mjƒ€m�\c`îEH–AEÃ[po^~\oÀÀKþ~:Où=Qk‰FxÜQ² +² +´ +±é² +³@ +°/° Ö± é°2° ±+±é±+± °9±°9014.#"#3>32#%I8Jg ^b y/Ts>^8MA45%:þâÜÖ"-ZlKGF^Ì5²+´6+² +³@ +°/°Ö±é² +³@ +±+01333F_¹Ìý’^FÿôÓY²+² +±é²+°3±é² +³@ +°/°Ö±é°2°±+±é°±+±é±+±° 901%2>=3#".=##33$#-+_ðTp9k__Ë %II,`KàáþÆ,YjL‘þ@ÓÃá9KA #ÿüú".r²+±,é²+±é° 2²+´&+°2°//°Ö´)<+°)±#+±é±0+±)°9°#³ $9°±99±&,±99±°9013!2.#'#"&54>7'"=4&#"26v\Ÿ^$ A~'‰³Á�8fC4Qþkpš£k`��FyÝS²+°/±é² +³@ +² +³@ +°/°Ö±é°±+°2±é±+±°9±°901%".532>=3#5dTr>^$G2.C) _a \Ÿ,XmLÿ)4C'!">.)LýØ×$ÿ¶4Õ%°/±é°/° Ö´ +±+±°9012&'"#.'%6õ,%'þñ€ /þ†t-Õg.þ¸°£0" ª¸82ÿÖOØ/8r²+±5é²+°0/±!é°/± é°9/°Ö±é° Ö±2é°±)+± é±:+±)· &057$9±5±99°0²&999±!±9901"'54632&'"&54672>=4."327&KD[_�otŽeV I/(9OFA:$55?U)2#š5 2*�WG=BXЇo?c°< ( "''K*>C+ (¢Y,+D%þ0#9A|ØK²+±é° /±é°/°Ö±é°±+±é² +³@ +±+±°9± ±990123#4&'"#546.jƒaÀ=QCK_‚Øq\þ@K@F3&'7672''"jý¾+;?)/<  ?†BwC,@<+XA‚ 13/ `µy^,G  9=C5/2f€· †(L_><ÿöÙÙI²+±é²+°3´ 6+°/°Ö±é°±+± é²  +³@  +±+±°901%2>53#".53\8J%Çj>qSRp=_NK BL7©]þµMmV*-XlI¨þXvo-ÿô&Ø4�²+±é² +³@ +°/±é°$/±-é²$- +³@$( +°5/° Ö± é°( Ö±'é° ±+±é°! Ö±3é±6+±( ±99±!'²-999°°9±°9°°9°$°3901#"&5332>54.+53254&#"#4>32»)B’ny€](2 )##!5-èç…X45G`.[?5T2! ‚cOds{S!35!-= Ms:35,77"&31y ÿ÷×ÙR²+±é²+´6+°/°Ö± é² +³@ +° ±+±é±+± ±99±±9901".'#53326=3¦o=šù&9%sN_< 'UmQJ^þX!6")ov••IjY(ÿô,ã “²+±é²+°!/° Ö± é° ±+±é±"+°6ºò—Ál+ °.°À±ù°À³+³ +² Š Š#9° 9´ .....µ ......°@± °9±±9901467'5&'"2>=3#".5(nRŒ¦`$ôXK*=)`Žq;_8%Ms”TaSþ[R[ F2@FYŠ%7A3FyÙ=²+±é² +³@ +°2°/°Ö±é°±+±é±+±°901#4.'"#4>32y_'O=9I% ^&>eDRp=Ÿþb�9KBAL:þcž;ZR4-WlBÿòGØ#’²+°/±é°$/°Ö±é°± +±é±%+°6ºï�Â"+ °.°À±ù° À° ³ +³ +²  Š Š#9°9´ .....µ ......°@± °9±°901%5>=4.'"547632G-JT-—þnƒ�Œ61!GW_@Ks>c5$ ‚32t_,+'a�^&>eDRp=Ÿþb�BV0 þZ¥æ*+;ZR4-Wl-Êß9�²+°3²4+±é± À/±"é°2²" +³@" +´ +4 +± é°:/°Ö°-2±é°!2´ 1+°±+´+³+´<+±;+± °,9±µ&+4$9±+"°9° ±-99°°901674.#" 632#4&'!#5332654.#&'54>32 )*HL+0L, _¢(4+{…S!$þYZZDk>gI)n)>iB2K?:UH?\."3A5]thH=! ƒ4¸793'4Y#GP<(%7FÄÙR²+± é°/±é² +³@ +°2°/°Ö±é°±+±é°2² +³@ +± +±°9013##4.'"#4>32yKN\'O=9I% ^&>eDRp=Ÿ¥Q¨�9KBAL:þcž;ZR4-WlFÿôyÌ=² +±é² +³@ +°2°/°Ö±é°±+±é±+±° 901%2653#"&53YrO_:sT¡z^$GIpv�þbFh\0œžžþc(3E)AÎÙ X²+°/´6+°/±é°!/°Ö±é°±+°2±é² +³@ +±"+±°9±°9°°901%".=332>=33#5_Tr>^ &:&.C) _Z¼ \Ÿ,XmLed !9)!">.)üý†^×$-ÿôgØ.²#+±,é²,# +³@,) +°/± é² +³@ +°//°Ö±é°) Ö±*é°±+± é° Ö±é±0+°6ºíjÂÂ+ °°À± ù°ÀºñÓÁ—+ ±°°À±±ù°À±°³+ºïŽÂ&+ ³+±³+ºîÇÂ\+ °³+±³+³+·........·........°@±² #,999±,° 901%4.'4632#.'"#".53326 0M^`O6‘kHl4[VRJZ2Oa`O2˜qFnB+YÆHiÂ(3'O9\i(5D&C>75$0)O7\z 2D> Ÿ?FyÙ:²+±é² +³@ +°/°Ö±é°±+±é±+±°901#54.'"#4>32y_'O=9I% ^&>eDRp=Ÿyx9KBAL:þcž;ZR4-Wl<ÿô9Ø(3�²+±é² +³@ +°"/´,C+°2/±é°4/°Ö±*é°*° Ö±é°/±é°*±+± é°. Ö±é±5+±°%9±*°'9°.´"$$9°° 9±"² $%999°,± '99°2±99014>32#"&5332>54.#"'67&62654.#"O.bFêX)F�sqŒ]WI)-"#/$h#jJU[RxP1;!: 9<$¸e% kNb}w`?M6#%95A ž`@79(3FYÓ8²+°/±é² +³@ +°/°Ö±é°2² +³@ +± +0133##F_´´_ÓøPþu-çÕ'-m°/°3±'é°(2²' +³@ +°/°-3± é°2²  +³@ +°./°Ö±%é°%±+± 22±é±(22°±*+±é±/+±'±9901%.54>7532#3674&'\<^E42D]=^;\L8!9@H4^,=/"Ð^Ëob0,?tIGp>,77 (?vL54.ÚÀ–™¼¼›–¾þ­ =E2"†n)OM0!3C=e¤ÍÏš®ÌÌz '?pI~˜5;5#"#".533'".546;32C/,..--þYm")f�l…Ac7# ]§-48#ih_.j~0D þ’?+hG’þG_{$4-mp ;)X=ÙpbÿÿOC§òb5é›Ó 2°/´+° /°Ö±é°´ +° /± +± °90153'65=^35mfP9G"NL­Î °/´+°/°Ö´+±+0173X7iL‚‚A2Ú7²+°/´+°/°Ö´ +±+± °9±± 9901>32327#"&#" 6=,0../8%x"0705ÿÿPçäC L1{²+´+² +³@ +²+° /´+² +³@ +°/°Ö´+°± +´+°±+´+±+± ±99°° 9±°9014>32#"533254#"# #E/:C4*U7%Hn721?/,3a)7e*=3Ä-²+°/´+°/°Ö´+±+±°901'?3! TJQÐ=2TP7Aÿö !u²+° 3±é°2²+±33°"/°Ö±é°±+±é°±+±é°´&+°/±#+±°9°° 9°° 9±±99°± 9901%2653#5#"'#"5332>53(E;XOT4t=c¡X$8()X*B_ZýõI$0[[®hþµ?@ A.1þ«9<Fÿ8ëb²+´ ++² +³@ +²+²+± é°/°Ö±é° 2´&+°±+±é° 2±+±°9± ±9901%#54.#"!!#3632ëX &ŠKþµXO323##4'"#3” !BLddXNGEXS¼   D>þª>È6\_Kþß AÿõêÑZ²+² +±é°/´++°/°Ö±é°2°±+±é°´&+°/±+±° 9±²99901%2=3#5#".57!!ŠWO:k$9% XQþ¯/A«aþ³JU'!1îBÕDG#ÿ8;p² +²+´++°/´ +°/´7+°/°Ö±é°±+± 22´ <+²  +³@  +±+±±99±±99° ° 9017"&54632533#2674&#"ìWrqf7GRc¸1ÖHC:CACEA–muœ+6ýg;LTitKVtrFÿ‡MÑ X²+± é² +³@ +° /´++² +³@ +° /°Ö± é°2° ±+´&+² +³@ +± +01%'5#33#&L”V±±JÃwÑþBþ¹Aÿ8æ]²+² +±é°/´+°/°Ö±é´ &+°±+±é±+±° 9°±99±° 9° ±9901"!!3632#4.#ŠIþ_O323#2=#"aEBHYB=>:(? VNT%B^+)(¦PH $©G^JC>XA79&7.ýùÔA,"$81P<£e@4(I#ÿý9Þb²+´7+²+²+°3´++° 2°/°Ö±é°±+°2± é°2²  +³@ +± +±°9±°90146;533##".2>=#"#mbŒYbb}_1O. à'4 z… h—ÒÒDëfz%9KE¨"FQ;‘½ÆFÿ8ìÌU²+² +±é² +³@ +² +³@  +°/°Ö±é° 2°±+±é±+±° 9± ° 901"#3632#4&'*-XX>]dOX4Ç"H3þ”þÿGhaþ·I?>Fÿ8 -²+°/´+°/°Ö±é² +³@ +±+01#3ºX�9ÔýeFÿ8ÚÉy²+² +±é² +³@  +²+°3±é² +³@ +°/°Ö±é°2°±+±é°±+±é°´&+°/±+±° 9±°901%253#5#".5'##33øŠXO9l1D$–XXï+?«"ýóJV%D7-àý}‘½þ¾BF#ÿøì$�²+´#7+°/´++° 2°´+°%/°Ö± é° ±+´&+°±+±é² +³@ +±&+±² #999°³$9°°9±#± 9901#"&54637&'4734.#"32�"Óe}~P=U3;^’+ZJBIyÄ\LþêšvuŽ*C=64(2@D»8I1ce[mFÿ8íÑJ² +±é² +³@ +²+°/°Ö±é°± +°2±é±+± ° 9± ° 901%2>53#"&'3 *-XX=_fKXG"H3ý, Eia ýô~FìÌM²+°3² +±é² +³@  +°/°Ö±é° 2°±+±é±+±° 9± ° 901"#3632#4&'*-XX>]dOX4Ç"H3þäÌþÿGhaþ·I?>#ÿòÓà&4v²+²+´*7+²#+°5/°Ö±'é°'± +±&é²& +³@& +°&±+°/2´&+±6+±& ±"99°· #*2$9±#*³ 2$9012#5#"&54>74.'47332>54&#"þŽ  KVM D9dx1HJ>@D)H‚EF*: H9=R™- ƒ_þì?3œv4bH;0 -. þPUs.J8Un}Aÿ8.W²+²+°3± é° /´+°/°Ö±é°2°± +±é² +³@ +±+± °9± °90123#4'"#3>8)=d¹QwXRB*)ýç?2\Šþà W$,ûÛ`²+´7+²+°/°Ö´%+°±+± é°2±+±°9°³ $9° °9±° 9°² 99901747'7670!%4&',¡@1>fh1'•³þ:eb ()#ÖØ1@2{T0'žÆþÿF]×,ITƒ=AÿöÍè-ƒ²+°3²+±(é²#+° /´ ++°./°"Ö±%é°%±+´<+°±-+°2±é±/+±%±(99°°9°-°,9°²  999±(°9± #²999014.54>;#"#5#"&'332>7u+3+-,MT6**T) !!AQX$*,: ´6&@&$D%&+9þO8G6™þ�-+2*ÿìÿ8³ -²+° /±é°/°Ö± é±+± °9°°9012>53#"'7& X9I*{ !ýâ^X KFÿöÎéf²+² +´C+²+°/´+°/° Ö±é² +³@ +°±+±é°´1+°/±+±° 9±°901%273#5#"&54>;"ÿ_XPWOAQ%M3A_@1?‡FýôS]F4¼9B-=7>#3(3.+53(E;XOT4t=c¡X(()X*B_Zý,$0[[®hþµ%) A.1þ«9<&ÿ7Ï#5†²+±$é°/´ +°6/°Ö±'é° Ö± é°'±+´-+²- +³@- +°-±3+±é±7+±'°9° ±&99°°*9°-² $999°3°9±$ ³-$901;#"54>54.54>">54&ïA].Ÿ7*k‚Æ…%+%!0/!))4 9/%%(9.GB#šŒ," "?H0#2-$+L4.G) JB@!7(*@)79R&ERAèf²+° 3´++°2² +²+±é°/° Ö± é´ &+° ±+±é±+± ³$9°±99±² 9990172>4&#"#36323#ý GD:4ŠXOÌ_²+±é² +³@ +²+° /´+°/°Ö±é°± +°2±é² +³@ +±+± °9±° 901%2>533#"&'3*-XV®=_fKXG"H3Úü¤8 EiaGþ¹~Aÿó8&x²+°3²+±é²"+°3²+±é°'/°!Ö±$é°$±+±é°° Ö±é°/±é°±+±é±(+±$°9±°9±±9901%253632#4.#"#5#"&53‰U.þ¹&/ ±þäLXpaHþÚSTAÿ8æH²+²+² +±é°/°Ö±é´&+°±+±é±+±° 9±°901"#3632#4.#ŠXO5#"&"32654.#wj\;Q "1J/0<'UA1)89Wiuå5W.-8V-/sœJ?þ:)>*/ ;),.;1-D–?`f;V*ai7R+F /²+´++²+°/°Ö±é² +³@ +±+013#›~Ó þ6B Aÿ88Ó)~²+²+±é² +³@ +²"+²+±é² +³@ +°*/°!Ö±$é°$±+±é° ֱ鰱+±é±++±$°9±°9±±9901%2673632#4.#"##"&53M;T32'"254&umQ15þËVddQ E;%HG+ä4LE:�@g}A¨BLLBFA47kvU_Hf±V^#ÿô %J²+´++² +´++°&/°Ö±é°±!+±é±'+±!± 99±±9901".54>32"32>54.+NL. 1C>!m†"1E; 1/]<2/01 9pM>b;&�wDh:$ Û+U9ka-U98S+*ÿ8oÕ#+2ª²+°3´"++°%2²" +³@ +²" +³@" +°#/°$3´/++° 2°0/´++°3/°Ö´,<+³ ,+´&+°/´ &+°,±+±"/22±é± $22°±)+´<+±4+±,°9±#"°9±0/°901"&54>;32##5#".533332654#'35"Ia!=I/>=Yl*:7-W/(9/!N W%DD�ã5638±PC*; ߆i<_9%ÇÇ7#Jnþ’lS¯–-%�!Fÿø ÓJ²+± é°2° ´++²  +³@  +°/°Ö±é°±+°2±é±+±°901".53326=33#5Ø+> V%*GHVO£>-# `ýÈ-+KD’þàBR$Z¾3²+´+°/´+°/°Ö°2±é°2±é± +015353Zddd¢eeþ^dd ¦&*° /´+°/°Ö´ +±+± ± 990127"':'0AU+Y  "<ÁÙ(‚²+±é°/°'3´+°%2² +³@ +°/±#33´+°!2°)/°Ö±é°±+± 22±é± $22² +³@' +°"2² +³@ +°2±*+±°901%#5#535#5354.'"#54>323#3#o_\\\\ #K:rO_ 8mLSq=RRRRà6968HC"pvQR/F^<++VmL696ÿÿ ÿPÿÄ&ÛƒÛÿÿpÿÔÿÄ'Ûÿg&Û±ƒ&Ûô'Û„ÿƒÛ„ÿÿxÿÏÿÄ&×Þ½ÿÿ€ÿÒÿÄ&ßÂ'Û‚ÿŠÛ‚ ÿ}PÿÄ*°/´7+´7+°/°Ö´+´+013# GGÿœ•¼²+°/°Ö±é±é±+013>Wd üà€ÆÇ*°/´7+´7+°/°Ö´+´+013#GGÇGÿÿF€�ÇèýÇÿÿP¸ ÿÿŠ€ÑÇèÿ ÿÿ}FÿÄ*°/´7+´7+°/°Ö´+´+013#ÿGGþØLz^€ÿÿ¾ÿ¢ÿÄß:FX3² +°3°/° Ö± é° ±+±é±+± ³$901##5467'36=3>Q;”fä&,WP<”fäcW¿D‚'ÒE 'W/��H†(Òþ»Je–:6XA²+±é° 2²+±é°/°Ö± é²  +³@  +² +³@ +°2±+014&+5323!5!•ao‹‘Qv>Jþ[sCVL(CJ)þÒLL±X²+±33² +± é°/±+°6ºÀ‘÷„+ °.°À±ù°À°³+³+² Š Š#9°9³....µ......°@± °901%#73'.#52#B¯uÏQ3G36TC82X¬¬Ë§2C L,V9þ…&X:²+²+°3±é°/°Ö±é² +³@ +² +³@ +± +01#!5!ÌWþ±ù ýô LL?:X :² +°3² +± é°/° Ö° 2±é°±+±é±+± ° 901#.'#53@{lWAZùWXamþ†tQ: Lý¨wþ‰>•X²+°/°Ö±é±é±+0133>WXý¨'(X:²+²+°3±é°/°Ö±é² +³@ +² +³@ +± +01##5!ÕWW ýô LL?;X /²+° 3²+±é°/°Ö±é°± +± é±+014&+#!2#äaJ£W\ŸWt=[ýôX}aþ†=:XM²+±é²+±é°2°/°Ö±é°±+±é±+±² 999±° 9°° 901%26=4&#"5632#"&53�?Y Rzdœ[ƒ„ZzþŒ5c:‘X!°/´+°/°Ö±é±é±+013:WWXþé#&ÿ8ÚX ² +± é° /°Ö±é± +012#4&+5ài‘WaJ²X…Yý¾7>=!53!!'.2W%,4 þ[W¥¿5V+, *bD?Rn(*@5á•?;X 0²+± é² +±é°/°Ö± é° ±+±é±+012!4&+w¬þ¥xT‚X_þ†Xýô+@Uþ@0:Xg²+±33±é²+±33± é°/°Ö±é² +³@ +±+°6º?�øö+ °.°.°±ù°±ù³....°@014&+##532!53ãuWA:X:Nç{¨þÖÓwATýô L�`þ‰L>ÿ8•X°/°Ö±é±é±+013>WÈ üà3FX 6²+±é² +±é° /°Ö±é² +³@ +³@ +± +012!534&#GqŽþí¼RVX€^þ†L(>Z=9X :²+±é²+±é°/°Ö±é°±+± é±+±±9901 "&5!24&+3265¨Ú‘t‡WWT£WPL[ƒ[zvhœrJNþØ>ZY?$ÿÉX°/° Ö±é±+°6ºßÂ+ °°À±ù°ÀºÁŽñù+ °°À±ù°À±°³+³+·........·........°@01737>737ÍxYs# W +C:þÖCþ  &!Xþ¢5:9'LO9ÿ8 X9²+±é° /±é°/° Ö±é² +³@ +°±+±é±+014&+;#"=32#´N]y,@"(½×~}WtTD1L“Òský¾?X*H² +±é²+±*é´# * +±#é°+/°)Ö° 2±é°±+±é±,+±±!"99012+532>=4.+;'.=ôAj=*(GqAµ¯753å [UWÄc¥#W¾Kcþ/ê6þü +“3X²+±é°/°Ö±é±+01!5!3>=3 f<«þ&Fþ²d¥0-W¾@jþóL þý4'“>ÿ8&XE²+±é°/±é°/°Ö°2±é°± +±é±+± ±99±±9901#53>7!5!#&l|>7$5#þoèþoWÿlbL)L®ýŽr%ïX !²+² +± é° /°Ö±é± +012#4&+5ôu†WO\ÈXuiþ†tNJL<ÐXG²+± é° /±é°/°Ö±é°±+±é°±+±é±+±° 9°°9016753+;2653#.53öbWpFd x>WB†W¦{R}¤W,YÏÓG^8\nLRþ©X¦¤ZWþÔ#{XA²+°3±é² +°3±é°/° Ö±é²  +³@  +°±+±é±+014+#5265#5!2#$«ityMI<y‚Wt˜þÔukLDM/Lqmþ†>jX&²+°3°/°Ö±é°±+±é± +01!3!3XþÔXXý¨Xý¨<_X#²+°/°Ö±é°±+±é± +013354.'33##:D! U ;«Ü!,‰jÍWH�V,,Ÿ54'¾*Œ½ S*IC25^M2Z,‰MuGÿ¸«4²+±é°/±é°/°Ö±é² +³@ +³@ +± +01)5!5!5!ýžþÜ‚ZùXÿ¸ÿaY² +°3± é°2²+°/´)+° /°Ö±é² +³@ +±!+±³$9±°9± °901#"&547'!5!73#".5'632 tþm¦þûM ¯8#&'f ²�Z–-þ=Z #}ÿ¸ÿa [² +°3± é±22²+°/´)+°!/°Ö±é² +³@ +±"+±³$9±°9± °901#"&547'!537373#".5'632 tþmÔb(˜þûM ¯9#,&'f 5²�Zšš–-þ=Z#}kÿqÙ­L² +± é°/±é°/±é°/°Ö´+°± +´ +² +³@ +³@  +±+01#532!5!54.#ñyyB\oFþ’("]e�Sé 1)þ×Zy83kÙ­7²+±é°/±é°/° Ö´+²  +³@  +³@  +±+012!5!54.#¯\oFþ’("]e­ 1)þ×Zy83mÿ»…­`²+±é° /°3´6+°/°Ö´+°±+´+°± +± é±+±°9°° 9± ³$901".5463##'2654&#"2>+_UdYƒ IP&44*&>9'X<_„þ”,Ee{OI14XY+6Ld« B²+±é° /±é°/°Ö±é°±+± é±+±±99± ± 9901!"&54632"3264@bz|`ay{1bNQ43J~WZ|}Y[zQK/2KHb±ÿV[s ° /°Ö´ +´ +±+01.54632'K"2X B:€_2@(Ï/}¢ÿ¸O"S²+±33±é°/° Ö´+²  +³@  +°± +´+±+± °9°° 9±° 901!#'#'!53547O$JzþÐøÃÖppssZ½Ã\rÁÿ¸ÿ_ª %²+° 3±é°2²+²+° /±+01'!5!73#ª¯_þ´þðJô.¦Dš¡Z–,þ>Z_ÿ¸ÿ_ª "²+±é°2²+²+° /± +01'!5!73ª¯_þ´þðJôš¡Z–,þ>ÿ¸À²+±é°/± +±±9901%'!5!5Àjþie£O`Z·Áÿ²ÿSõ #/;Tþ²M+´FB+²<+±0é°/´+°P/°63´D6+°/°3´ +°2°*/´$+°U/°AÖ´9+°9±+´$+°±3+´R+³3 +°-3´$+°'2°R±N+±Fé³FN+´!$+°!/´$+±V+± ´ 06<$9±R3´$*P$9±N±99±F°M9±°N9±0<°J9°F°I9°Pµ3A9HKR$9012#"&5462#"&54632#"&546'2#"&5462654&#"".546335'##Þ" ! K" ! Û" ! K" ! h&44*&>9.2>*_Ud†£j¸[ƒ I> ! "² ! " ! "Œ ! "ýNI14XY+6LO)V;_„þ°·Á?ObD”,Ee{aÿ(%Û%°/±é°/°Ö´&+±+±° 901#654#"%632×Z\@Dt€aþþE\I;@Ø•WHO]qZU´;I@nÿ¸p˜²+±é°/±+01)5!7pýHfþUJ³ZûCýÍkÿv…« :²+± é°/° 3±é° /°Ö´&+² +³@ +³@ +± +01)##5!5#…þ‘=S½ØOŸ^ŠÝXþ¯ùùkþÔp²+°/±+01?ks’(þã<žeýô#c7ÿ¸ÿþ±¨&3ž²+±é²+±é°'/´7+³'+±é°4/°Ö´*+²* +³@ +°*±2+´%+°%±+´ +±5+±*°9°2²999±%²999±±%99°µ */2$9°'°9012632#"&'!5!&546254&#"">545):5-AASXDfmþÉ(Jj7&$ "�&/.(# ¨#xOaI8UZ-_hZþ¨Y+M Y :1 0#`n§ÿ2±¨*8в+±é°+/´7+³++±#é°9/°Ö´.+°.±6+´)+°)± +´ +±:+±.°9°6³$9± )²999±±99°#´ .36$9°+°9012632#"''7.5462>54&#"">54&5):5-AAWTS' "dHšDc@( '7&$ !œ&/.(# *¨#xO_J.†2´iS]eþ¨&+M Y :1 0#`4:ÿ¸¤4²+± é°2° ±é²+°/±+± °9°±9901%#"&'!5%277327¤kF3C$þ€&8,ÜA¼(E,71D1Z)m+þÀ>CKÿ¸@ 1² +± é°/´7+°/°Ö´1+±+±° 901%"&546?!5!'7327SdVF9Å?ýœ >"pA0(F)åOL8F3ýÀZ‘ó!."$ÿ¸@ ˜² +±é°/´7+°/°Ö´1+±+°6ºïö + °°À± ù° À³ +°³+³+² Š Š#9²9°9µ ......µ ......°@±°901#"'!!32654'./;Vd%>  ýœ?Åþé)F(0J""€LO‘Z@3*°$"$þÔ‚"M²+± é²+°/±é°#/°Ö±é±$+±² 999±°9°°9° ³$901!5!&'&54735'#"&'iþ)d‘4²6/¢¢i ¬#% W||W þÔZ)Kx_� SI´Â>O] "=,(,!ÿ¸&« X²+°3´+° 2°/± é°/°Ö´&+² +³@ +°± +´ +±+±°9±°9013"&'#53!'5#ó@ÎàŽFý5AdGþUdïïkÙ`R² +± é²+±é´  +±é°/°Ö´+°±+´ +² +³@ +³@ +±+01#532!5!4654&#{{n\oFþ’(T’R³ 1)þ×Z a Q/ÿ¸…«d²+°3±é°2° /° 3± é°/°Ö±é² +³@ +°° Ö± é² +³@ +³@ +±+± °9±°901!#"'!5!'#5!3…Í/þ\° ÈÁ  Ã;;Z÷ZY÷cÿökëI²+°3´5+°° Ö±é°/°Ö´+±+±° 9°± 99°±9901%"#"&54>732632&\ n69KN(Gþ¯n*i :((/C9E¢e*þlSˆÀJ*+99&ÿ¸t 7²+±é°/±é° 2° /°Ö±é² +³@ +³@ +± +01)5!5!537!ýžþÜ Ç$–!ZùXÉ«ÿ¸ÿa./Œ² +°3±!é°2²+°/´)+°/´&++°0/°)Ö´+²) +³@ +°)° Ö±é² +³@! +±1+±)°9°´ $9°±99±°9±! °901#3#".5'632#"&547'!5!732654./±aD�¯8#&'f tþm¦þûMX87.%pOðZ #}�Z–-’0 kÿ8Ù­j²+±é°/±é³+±é°/±é°/°Ö°2´+°±+´ +² +³@ +³ +´+°/´+±+01#53#532!5!4654&#¢{{»{{8\oFþ’(T’ÈRRá 1)þ×Z a Q/ÎTŒ£°/´ +°/°Ö´  +° ±+°6°&±.ɱ.ɰ6ºÂvîk+ °°À°°À°³+°³+² Š Š#9²9³....³....°@± ²999±±9901''7'77''7' &%Y(,$"5'=d+jA!5þÔ½ÿ’�°/´ +°/° Ö´ +°±+°6°&±.ɱ.ɰ6ºÂvîk+ °À°°À³+°³+² Š Š#9²9³....³....°@± ²999±±990177''7'77m &$Y(+#"5(>~+jA!5,þ÷Oé°/°Ö°2´+°2´+013#3#,####s–ò–õ*à;²+°/´ +°/°Ö´ +±±99±±99°°901/'ÂK7K½�Í�Íþü¸ÿÚ0°/´ +°/°Ö´ +±±99±±9901/'šK7Kq�Í�ã5ø K°/´ +³ +´+°/°Ö´$+°± +´$+±± 99± ±99012#"&54'2#"&546©.! !n! "!¤ ! ~ ! "õ*à ° /´ +° /°Ö´ +01'7''7'7Œ8!8 8K K7®^_`‚]�_Íþü¸ÿÚ °/´  +° /°Ö´ +0177'7!9 8 8K K7ª^_`‚]�_Üÿ•ÿµ0°/°3´+°2°/°Ö´+°±+´+013#'3#r##–##K–––}þöšÿÀ0°/´ +°/°Ö´+±±99±±9901/'|KiK@�K�©L[Ê H°/´+° 2°/°3´+° /°Ö´ +²  +³@ +°2² +³@ +°201535#53#3©HH²IIL"< <" ÿDÒÿ H°/´+° 2°/°3´+° /°Ö´ +²  +³@ +°2² +³@ +°201535#53#3 HH²II¼"< <"ÿOvÿ¾ *°/´+´+° /° Ö´$+´$+012#"&546>" ! B ! "«6{ 0°/±é°/´+°/°Ö±é±° 9±°9012"&546/537ù$•/ƒ�++•U y!;9ýÿÍÿÛ 0°/´ +°/±é°/° Ö±é± °9±° 9012#"&467#'7yi.ƒŒ++-$ w";8jvÙ 1²+´+²+´+° /° Ö´$+´$+012#"&546>" ! Ù ! "ÿfqÿÃ$°/´6+´6+°/°Ö±é±é01#53qbbš]jvÙ 1²+´+²+´+° /° Ö´$+´$+012#"&546>" ! Ù ! "ÿOvÿ¾ *°/´+´+° /° Ö´$+´$+012#"&546>" ! B ! " 7xP 5²+´ +°/´+°/° Ö°2´$+°2´$+012#"&5472#"&546).! !7" ! ¦ ! Ì ! "þÔwÿÙ =°/´+°/´ +°/° Ö°2´$+°2´$+± ± 99012#"&54672#"&546?" ! ! "!½ ! "– ! "§7Ú2 #q²+´+°/°3´+° 2°$/° Ö´$+°±+´$+³+´!$+°!/´$+±! ±99±±99±± 99012#"&54632#"&546'2#"&546Þ" ! Û" ! K" ! ¦ ! " ! "Œ ! "¬þÔÕÿÊ !e°/´+°/°3´+°2°"/°Ö´$+³+´$+°± +´$+±±99± ±99±±99014632#"&74632#"&2#"&546¬"! º"! '" ! n! 0"! 0": ! "ª€Ø °/´+°/°Ö´+01%ªþæ¾N,`¨ÿHÚÿâ°/´ +°/°Ö´+01%º þâRHf§7Ô!#)°/´ +°$/° Ö´ +± ³ $9017777''7''7''7''7'²$"$$#" ï ; ; ;> ? ? @ @ ( D C C C B @ B A ÕV¥  )®²$+°3´'+° 2°/°3´+°2° /°3´+°2² +³@ +² +³@ +°*/°Ö°%2´+°!2°± +°2´+°2² +³@ +²  +³@ +°±+°2´+° 2±°9±°9013533##5#6#"&542#"&2#"7#"432ÕV'SR)UÁ, …, ,  ÌOO%QQg, z-� ,„ÿèÓ  ²+²+°/±+±±99017‰þûTàÄWí"þ;É"ýêÿ¸pÃW²+± é²+²+´+°/°Ö´+² +³@ +±+±°9± °9±² 99901!5!732654&/ÁO?ýHfþUJ A"3 Ã'332âD58#"3WýHfþUJwL3BRO?¨#2 #21BþZûC™,6VxSÙÿÿþÑ�G„]ÿÀÿÿþ×�M„&^ý8¡ÿK¸ÿßL°/´+°/°Ö´+01'kJJJLJJJÿÿLbà '^ýª^þÁÿÿ×\'¢Ãa×e=Ó² +²/+±33´6C+°2²8+´ 6 +´C+´ 6 +´++´)$ 6 +´)+°>/°,Ö´9+³!9,+´+°9± +°2´ +² +³@  +² +³@  +±?+±!,°;9±9°9° ±99±±!99°³ &$9°)²;999°/²129999012675#5!###"'#".'73254&#"'226754#"'4>32ß: h`J,œ0dE.;$8? PC*,7AHI3;7\):Q9W@ ÊIIýä ™å+´+°"2²> +³@>. +³>+´ +° /´+² +³@ +±B+±°19° ¶',6;$9°>³%&$9±°#9±1,±;99°°9°°9°°9° °901%"#"&546;5!5!##"37632.'"'46322674&C Y.r"ÂþÉädêH54"0Œd- !(™,  )NÞ�3`IIªM ; �,R?  ([8+ÿöÿiÚ„J² +°3´ C+°2° +³ -H+´ +° /´ +² +³@  +±L+±#°A9°±<99°µ&(/78E$9° °9°H´*56$9° °9°-²3999±A<±/E99±°-9±!*°#9° °9± ²999°°901%"#"&546;5!5!&54632&#"3##"32>32.'"'46322674&C Y.r"ÂþÉ4MM5(!#;KjdêH39 "0Œd- !(™,5)NÞ�3`I^Y53 ;?*Ed063D0aHDE­EIIC2A(U1OZIayF&c…d2'4LIÿöÿú.e;Ô²+´ 7+²0+°33´1C+´ 1 +°&3´7+°(2°54&'"#".'72654&+'32654&'!5!!6{?+FY,63D0aHDE þt8þ¦+7BgO9Y�#'0G"G(IUI`zE&0^P2'4LI*EIIC2A(Lÿöÿõ£e7³²+°3±é²+°"3´ C+´ +±é°8/°Ö°2´+°#2² +³@" +² +³@ +°±+´5+³(5+´-+±9+±5(° 9°-´* /$9±±99°@  $&/$9°±(-99°°*901%27#"&5467'#5'%&'"'>325!5!!674'432"ó)$6:PDI7(“Jþì,b %’-2š ,‰þ+­þr{F7 %,,?+;:R71C *?îÔŸ;˜oN8D�ïIIæ4 J)!-d$%ÿöÿ‰‹e=ö²$+²+²+²+°3´C+°'/´"7+´ ;$ +°23´ C+°2²; +³@;7 +°>/°Ö´+°±7+´6+³)67+´+°6±+´+² +³@ +°±/+´+²/ +³@ +±?+±7² 999°)° 9±³',2$9°/±"-99°±$&99±"'°%9±;³)/$9° ± 9901.54632675!5!#327"&54>54&#"#54&#"sh2-AuX@Q+KþU• 89'77'*(9':Še'77'8$&4J2,)@„@¬SDa73cIIf J20Q4+'!=)M;%;**>& )/"FU >ÿÿÿöÿ{»?'¡Bkÿÿÿöÿ{»\'¢Ökÿöÿ{»ef²+± 33´ C+° /°Ö´+² +³@ +°±+°2´ +²  +³@ +°´1+±!+±´$9012674'%#5!#'>75##'' þï4Å/U<1ÏY7 M÷7IIÒF3 Ãþëî( @=ÿöÿ{»„#}²+±33´ C+° 2°$/°Ö´+² +³@ +°±+° 2´+² +³@ +°° Ö´1+±%+±° 9°µ !"$9±° 9012674'%#5!'73#'>75##'' þï4Ií=û1/U<1ÏY7 M÷7Iä;þáIÒF3 Ãþëî( @=ÿÿ‚3'¡ÿøbÿÿ‚\'¢pb‚„Có²+°3²=+² 333´C+± 22²+´$. +´$C+´ +´++´83 +´8+°D/°;Ö´+³0;+´"+°±+° 2´&+² +³@ +°±+°2´+² +³@ +±E+±0;°9±"° 9°²999°°9±.±"099°³ (5$9°8² )999°=²?@9990123275#5!'73####"#"'#".'73254&#"'22674'"'4>åÖ´+³3>+´%+°±+° 2´&+² +³@ +°±+°2´+² +³@ +±H+±3>°9±%°#9°³!$9±²999°°9±!1±%399°³#+8$9°;² ,999°@²BC9990123275#5!%7'73####"#"'#".'73254&#"'22674'"'4>å‹ZWGˆK)›<€J:"9@ P=2,6BGK1;6[eR=A*&ÊIs74&#"#5#"&54632&#"Ø%Hþ›þ­:HBSyFT.#7IJ*AlVJ#1/'#/>´(  II²PRBXŠ0m1!,/(úž$`D@p L 4)4-ÿöe>Ô²+²+±*33´C+± À/´6C+´<' +±<é´0 +´C+´$ +´C+°?/°Ö´,+², +³@ +°,±+´&+°&±+±)922´+² +³@ +±@+±&±699°²!<999±<6±999°'°:9°±)99°$°"9°² !99901%#"./73275#5!##4>32&#"3275!#'32675#"&{"•;9eE9"< 2'å RIþþ#4)"LLE(þª0/$8W3(Š94D:Pq7)ANNA$."-ŽIIýäP&8 G t7Λ&3::%:(3.Dÿöep²+² +±33´ C+² +³@  +°/° Ö´+°´ +°/² +³@ +°±+´+² +³@ +±+± °901#"&54735#5!###Õ 'f(;—QH¦ sžIIýäÿöXe(­² +²+± 33´C+´  +±é´&  +±&é°)/°Ö´#+²# +³@ +°° Ö´+°#± +°2´ +² +³@ +±*+±°9±#°9° ³!'($9±° 9°°9°&°9°°901.547#5!##5#".=47"327!;…"6ObSIoW2=*£(2.*Wwþæ*IM*^I0%IIýä´G 9&7 -$P'(/Lÿöÿú²e3ò+´*7+² +° 3´ C+´. +±.é°.°1 Ö´C+´ +±é°4/°,Ö´+³,+´+°/´+² +³@ +² +³@ +³@ +±5+±,±.99±±99±1*±,99±±$99°²%999°±9901'%46;5!5!##32>2#".573254#""&[JJJþ¬1Áþ4¼¨û6-?.,"9="4lRB$34P_-q H6yŸJJJ$"!`IIª1= I 4L(6MQ7."FX7p"…ÿöveš² +²+°3´C+´  +±é´  +°3±é°/°Ö´+² +³@ +² +³@ +°± +°2´ +² +³@  +² +³@  +± +±°9° °9±² 99901%2675!5!##5"&547#5!#8d!þ€QIt5@NEªiY&;,º`:ÈIIýäÕEFb->ü44 uIIýä_)9PC2HZC*-gÿöÿi¾e4G ²+°& Ö´++² +±633´ C+´> +´7+°° Ö´F+°° Ö±Bé´ 9 +± é°H/°Ö±;é²; +³@ +°;± +´8+³28 +´+°2°8±+°52´+² +³@ +±I+±;°+9° µ!&/@$9°2³ B$9±8±D99°°F9±+&±/99±±99±>F±5D99±9B°;9° °901%"#"&546;5!5!##5#"'.'"'46322674&7##"3>3232C Y.r"ÂþÉÈRI-‹T&- !(™,4)NέêH 6/ '*'Þ�3`IIýä¼|-F ?  ([ 8+.ªM ( ÿö²e'‡²+² +° 3´ C+´  +±é´ +±é´% +±é°(/°Ö°2´+² +³@ +² +³@ +±)+± °9°³"$9°%²'999°°9016323275!5!##5#"'"'73254&#"p8@‰)'ýà¼SI3%D*Ur0INpK+!–&— ïIIýäÖ!/$V:Fv95ÿöÿúBet²+´7+²+° 3´C+´  +±é°/°Ö´&+² +³@ +°±+´ +²  +³@ +±+±±99± ±9901746;5!5!##"327#"&Ag6—þ�L„Ô)5+6(_3DV{lšòMmpIIºL()A$V*tŽÿöe$�²+°3´C+°/±é° /´C+°%/°Ö´+² +³@ +°± +´+³ +´+°/´+² +³@ +±&+±±99°± 99± ² 99901732654'7#"&546;5!5!##"s(1'EC96LzXj‰`HŽþ—'vÞ$ ò%;#197'1*iP`›UDe}IIÆ#ÿöÿúme/¹²+´&7+²+° 3´C+´* +±*é°*°- Ö´C+´  +±é°0/°(Ö´+³ (+´+°/´ +²  +³@ +² +³@ +³@ +±1+±(±*99± °9±-&±(99±° 9° °!9°°90146;5!5!##32>2#".573254#""&½1Áþ4wcû6-?.,"9="4lRB$34P_-q H6yy"!`IIª1= I 4L(6MQ7."FX7p"…ÿöÿú$e%.«²#+²+° 3´ C+´+# +±+é´# +±é°//°Ö´+² +³@ +°±+´-+°-±+´ +²  +³@ +° ±) +´+±0+±-±#99± ²&+999±+#³&$9°±990174>;5!5!##"&54632#"&>54#"1A+˜þ“.wØ)2YM>4#5 #:<h¥>(2.ü7@,hII²>.?i'-4B,& *= ”L);31ÿöjes²+²+²333´C+´  +± é°/° Ö´+²  +³@  +°±+´+°±+´+² +³@ +±+±° 901####"&=#5!26=#jQJ€MC@U4tþQ-“ýäÁ?YV=ÆIþ¨)1µ¹Vÿöÿÿ>es² +°3²+° 3´C+´ +±é°/°Ö´+² +³@ +°± +°2´ +² +³@ +± +± ±99± ±99014>3!5!5!###"'.*1'þRHQIð?…%4 !! 84+hIIýäj;>¡6 ! ),/4*že1´² +²+±33´C+°+2²'+´  +±é´!$  +´!++°2/°&Ö´+°±+´.+°.± +°2´ +² +³@  +² +³@  +±3+±´#$+0$9°.±99±$´ 0$9°!±.99°°&901%275#5!##5"&'3254&'"327"54>320rahRI &*e (1£5.B; •"3+J_Ç-¼‡ÙIIýäÓ  ›= {)6.0Cs 0 eE AÿöÿÙþe$¬²+° 3´C+°/´C+² +³@ +² +³@ +° /±é°%/°Ö´+² +³@ +°±+´ +²  +³@ +° ³ +´+°/´+±&+±°9° ²999±°9° ±990146;5!5!##"34'432#&'".*E4¿þ”Rð!(ËF&,$:b!In?' &?W`IIª+!„C&1OI8H)93)[e/ϲ +²$+±33´C+°2²$ +³@$! +´ $ +±é´+, $ +´+++°0/°Ö´&+³&+´.+°&±!+´ +° ± +°2´ +² +³@  +² +³@  +±1+±.&°9°!±)99° ±99° ±+,99±,² 999°+±)99°$°901%2675#53##5#".547.54632#54'"63"e9`üRJ_r$: 7-5G3.CI(1:1R ư89ûIIýäÅ_ & ;* U+0HG(%0"R ES4ÿöBeb² +²+° 3´C+´  +´7+² +³@ +°/° Ö°2´ +² +³@ +² +³@  +³@  +±+01463!5!5!####"*JþOLQJà B(%�IIýäGX ÿÿÿöÿËBe'˜X6„ÿöée n² +²+±33´C+´  +±é°/°Ö´+² +³@ +°± +°2´ +² +³@  +±+± °9±° 9017"&=#5!##5'275#ßMh4óSH*I<7Û;¦X@ÞIIýäÍ'J7õÚ%-ÿöçe'²²+²+±&33´C+´# +±é´  +´ 7+°(/°Ö´ +² +³@ +° ±+°%2´+° 2² +³@ +°±+´&+±)+± °9±² 999±±99°#°9°³%$9° ° 9017"&=#5!!632'>54&#"#5'3275#ßMh4ñþ¯D1E^{E"S955H2©;-;8Û¦X@ÞIIº?WDVƒ0j2)&&1þþÉ#œ%-0üÿööe$‘² +²+°3´C+´  +± é´  +´C+°%/°Ö´+°± +°2´ +² +³@  +² +³@  +±&+± ³ "$9± ° 9°´#$9°°901%67!5!##5".54632&'"327'M þ›RIA=5L#YF(,8+'7.#$¥ð IIýä¦/)<0Eh PN,6vLe&±² +²+± 33´C+°2´  +°3±é² +³@ +°'/°$Ö´+°±+´+°2² +³@ +°± +°2´ +² +³@ +² +³@  +±(+±$°"9°±!99°°9±°9°±!$9901235#5!####"&546;54&#"#&546�.I¹hRI¹ b )4N Fc/7°ÏIIýäc r!š/ !0=ÿöe…² +²+± 33´C+´  +°3±é² +³@ +°/°Ö´+°2² +³@ +³@ +°± +°2´ +² +³@ +±+±°9±°90146;5#5!####"&%5# )hRIÏ agÏ "ÏIIýäNpIÏÏÿö6e�² +²+±33´C+´   +´ C+°/°Ö´+² +³@ +°± +°2´+² +³@ +± +±°9° ± 99± ° 9°±99014'#5!##5#"&'326275#¼9�@RJ=Q` %)5LPD¿)A5¿4)IIýäÒ5xd ,µQå,30ZLÿöÿó½en² +²+°3´C+´  +´C+° /°Ö´+² +³@ +² +³@ +±!+±° 9± ±99°°9°±9901#"'.'732=!5!#dK6 :y3 #'1@;J>þÛÇYŒ3BT“ 6")4E])-).ŽIIÿÿÿöÿ°½e'˜›Œÿöÿõše'†²+°3²+°3´C+´% +°3´7+°2°(/° Ö´+°±+°2´+² +³@ +² +³@ +±)+±²999±%² 999°°9017.54632675!5!##'67&'"s77%AV7cLYCBHý÷¤QJ/b B1./Fø4#%@ $@b8D_GB|IIýäXr*!*. ,ÿö:Ÿe/;¦²+°3´C+°/°3´7C+°!2°3/°(3±é°2°75!5!#"'#"&5463232654&#".#"32>P >%þ7©–,RK^'(`HS\DWR:-"+(( K3)VV' `4kIIn 1;,UfY]gVQh¸'NK0+<  *Amu- ÿÿÿöÿ“Ÿe'˜óÿþ�ÿööe޲+² +°3´ C+´ +±é´ +´C+°/°Ö´+°±+° 2´+² +³@ +² +³@ +±+±²999±°9°² 999°°901&'"327!5!##5#"&5463202--@(B<þ±hIABGfWH,(l9'4,<!IIýä¦4j?Eh ÿöÿð�e *­²)+°3²#+² &333´$C+´$ +´C+°+/° Ö´&+²  +³@ # +°±+´&+°±)+´(+²() +³@(& +±,+± ²"999°²999°² 999±)´$9°±99°#° 901&'"32>7#%72>7#"&547#5##7E'(,++yP´2þå./6@,280UlšWGÎM*!Q8EV‰œ4ø5( =(*:85IGýäÿöée z² +²+±33´C+´  +±é°/°Ö´+² +³@ +°± +°2´ +² +³@  +±+± ²999±° 9°±99017"&=#5!##575#327'ßMh4óSH**Ç:.EÊšXAéIIýäÁ'¯Óå&,)Öÿöÿó¥e#)¥²+°3²!+±%33´"C+´)" +´)7+°2°)´C+°*/°Ö´'+²' +³@! +°'±+°$2´&+² +³@ +±++±'²)999°±99±²999°°9°)°9°!±9901###'#"'.'732=!5!5#¥QK¤&D 3`,3 #'1@;J>þÛ¯œ¥ýä%,Iv/6")4E])-).ŽIÿ¶�ÿöÿºðe4Ȳ+´+²+°3´C+´2# +±2é´ +±é°5/° Ö´+°2°´1+°/² +³@ +°±+´+² +³@ +³/+´(+±6+± °9°²#-2999°/°9°±,99±2² (,999°#±!99°°9°°9017".547&546;5!5!#!"632'674&#"{2QS*=_R;AK#îþ£úUþç$/+!99!;,=09X{1< *I-98K>&`IIª 7 8'*.! :ÿ‡fÿË #°/´ +°/°Ö´+´+01#55D ººÿÿÿöì '–Èšþ€ÿ•ÿ)°/´+°/°Ö´+01%'þÊJJJ)JJJÿñ¸K"e² +´7+° /´7+°#/°Ö´+² +³@ +°±+´+±$+±°9°³ $9± ³ $901#".'732>54.546;#"…?ZZ?cJ7vC3Ya.)?[[?>3æé ßN +;470WþAþö ÿò]²+´+° /´+² +³@ +°/°Ö´+°±+´+±² 999±±99°°901"'632#".'332654&q53(;UG7kR'AE3'G vG:> K-0:I.@E .M3MH%" ÿÿþÃþö�ÿò�þÐþèÀþÐþôÿòÿò8²+´+° /´++°/°Ö´+± °9°±99012>7#".546;#"‰ ".E69$E9aT$9É 3. 5%8I=$!þÐþÔ!z(q°!/´++°/´ ++°/´++°)/°%Ö´+³%+´+°/´+±%°'9±!°9°±%99° ² '999°±9901%46;#"6367#"32>?#".547&þÐD:aTC.!"'&)D^ ')O+H<C7@B1$7*7 6)8.0#!þÔ�J;@°/´7+² +³@ +° 2°/° Ö´ +° ±+´+± °9012673#"&'3q+FIoKLoG*!Ø-6N]_L+þ=fÿ¯\P²+´+² +³@ +°° Ö´++°/° Ö´+°±+´+±±9901#54&#"#"&=332632Q?# p$es‹TýäIs32#"'732654'"##".5732654'&#'2654&#"'4>NJJJG+FIoKLoG*!þ³;P5" C7ECRPB:* %!+Q$(0G( /3(S<29}O)(!G$0^'  8*YJJJb-6N]_L+*ZAF&2;2o\Ys1G0@/– .- -@!3HK2!Ô/"3G4/()  (.2ÿ‡fÿË„#°/´+°/°Ö´+´+01#5D„þâýàþÿÿ2°/´+´+°/01!5!ýÚ&þÿ3þ,àÿ2„/°/°/´ ++°/°Ö´+±±99° ° 901.#"67632Î2(1(!!0!å +1$&;ÿ2à8„/°/° /´++°/°Ö´ +± ± 99°°901>32&#"Î!0!!(1(å;&$1+ þÔjJ„R² +´7+² +³@ +°2°/´7+°/°Ö°2´+°±+´+°2±° 901!!72673#"&'3þÕtþŒº+FIoKLoG*!°F·-6N]_L+þHÿ\ÿÛ °/´7+° /01 '7267GþÖG8iHi8¤V))ÿÿþHþÔÿÛ'²ÿx²ÿÿÿöÿ•÷e'˜ñqÿÿÿöÿLe'˜¬ÿ·rÿÿÿöe'˜ÁŠsÿÿÿöÿ›Ée'˜mxÿÿÿöÿLme'˜mÿ·}ÿÿÿöÿL$e&~˜Eÿ·ÿÿÿöÿÐçe&‡˜ÿ;ÿÿÿöÿÄ6e'˜E/‹ÿöÿDŽeGï²(+° 3´7+² +²+²9+°<3´:C+°/´C+´4.(: +´47+°H/°(Ö°72´'+°=2²'( +³@'< +²(' +³@(9 +°'±!+´+° Ö´ +³@!+´E+±I+±@°9°°%9±E ´ $BG$9±°9°(±99°²*999°.@ !%&)+017>?G$9°4°E9°9°B901%"327#"32>7#".547&5467'#5'%&'"'>325!5!!7'432+ML>88O#7( &)B'PD +4)ŽHþñ+b#‘+Æ$oþ5˜þ{|Bà-&A-=8:% <*A.4%'=.D )=ïÕ›9•lM7 S]-çIIà5J* -ÿöþÝ¢e\(²+°3´C+°?/´47+°+/´!C+°Z/°Q3´ C+°2²Z +³@ZV +°]/°Ö´+°±V+´U+°U±+´+² +³@ +³+´H+°H/´+°°1 Ö´D+°D/´1+°±N+´+²N +³@ +±^+±V² 999°U° 9±°F9°1°Q9°°9°N°L9°µ!&+47?$9±4?°=9°+°<9°!±)F99°Zµ(HN$9° ± 9901.54632675!5!#32>7#"32>7#".'47&54>54&#"#54&#"pg0,?rV=O,Jþ^†�4="00",1 '*H ="  '*E6>*";"10"3$&6G,"2=‚>©SE\61_IIc L3+F-'+/ <* "  =) 9'8$%?$>-*7!$(%DR"0þ`þÔ(q7¥° /´+°5/°,3´ +°2²5 +³@51 +°8/°Ö´+°±1+´0+°0±%+´+°±*+´+±1² 999°0° 9±%°9°*±(99°± 99± °9°5´%$9° ° 901.54632632327#".54>54'"#54&'"þ–J& /WA.=2,< %.%"!"0&'9 &/'K'6%#.a/>4E*.& #B(.#, # 9&33"3>'þ_þÔ<Mа2/´)+°!/´+°K/°B3´ +°2²K +³@KG +°N/°Ö´+°±G+´F+°F±;+´+°7 Ö´&+°±@+´+±G² 999°F° 9±7±999±@&±>99°³!)2$9±)2°09°!°/9°±999°K´;$9° ° 901%.54632>32327#"32>7#".'47&54>54'"#54&'"þ—J& 0XA0< 0&2'/'$#!"%1  +  9&.,'.'K'6%#.a/‚B(J*."?14 $,  .+*0;'34"3>'sÿ ¶€°/°Ö´+´+±+01'¶C;ýeE›ÿÿîÿ®Ž&ÀPÀÿ{Z]äò I°/´ 7+°/± é°/°Ö´+°±+´+±+±± 99± ±9901#"&546322654&#"äi]^fi[\jÆ:CB;6E@'aigc`kmàG>:DF<>Cq¿e X²+²+´C+´ +´7+°/° Ö´&+°±+°2´+±+±±99±°9012##"&'463254&#"M]I#9J\i8!a?"$5egRþT;YFI^£,/\'26Xÿ¼òeN²+´C+°/´+°/°Ö´+± +±° 9±² 999°±99°°901>32'#"'472>74&'"X}/Z}#72<‹eB;/0SN?5^#.qU4W7 Í+ÞJ4/q97D/dÿæe,|² +´C+°"/´'+°/±é°-/°Ö´+³+´+°/´+±.+±°9°° 9±'"±*99°°9°°9° ± 99°°901%4&+'3254'"'632'&=43226œb6A,kpfO-w766!@&W?P7os3B/BÍ1?KMDB3 ;(T!"8!HX t0Ÿ><*ENþe#,y° /´)C+°-/° Ö´'+°2³' +´+°/´+°'±++°#2´+³++´+±.+± °9±+'³ $9°°9°°901#"&547.5467>74.'3254Èœk_GE[eZD-?(d,CJX$9X]eDUiWI@OOCHW?L3 B $=]+L ) þÁFKK9ff~²+°3° /´C+°/° Ö´+°±+´+±+°6ºÂ÷ìÀ+ °.°À±ù°À±..³....°@± °9°² 999°°9012#'#"&547327.54Š'%XML+7Og:D E.- â?I*þéðm\_m"f0G=8^fÿ˜äe0�²,+´'C+²*+´)++²%+°/± é°/´C+°*/°1/° Ö´ +°$ Ö´+° ±+´+±2+± ´ "',$9°¶)*$9± ±99°±99°°"9°*±$9901;#"3274'432'"#"&'47&54632&#"°V$HZ/@@0 @!'8C8" RjVg_BH!)G #ÙDIH)(7 V(1'€#ƒ_K`26X;M E "þ\#t°/±é² +³@ +°/´7+°$/° Ö´+°±+´+°±+´+±%+± ° 9±±99°±99±²"999012#".53327"&5464&'"6q5Cç4R4#D²oKcH~)5, 3FT0þ�3^n‘|Jýô}oRF_È@?]$5 0‚ÊcB°/±é² +³@ +°/°Ö´+°±+´+±+±²  99901%#".5473325Ê•43{M‚Z^²¬ :(*-zþv+Cb�ÿ‰Êe$h² +´C+²+°/±é°%/°Ö´"+°"±+´+° Ö´ +±&+±"°9°¶  $9± ±99012.'654'&5462654&#"4K#fPš F$ÛWR'12'^2e%7,H_þøE + t2BYï2 %/Y"+[¶/ˆ R°/´+° /´+°/°Ö´+°±+´+±+±°9°±99± ±99012"&546"2654&Å,>>X>?+$ˆ>,+=>+*?>�ÍE.°/´+´+°/°Ö´+´+±+01#53��Íxÿÿ ;'¡Àaÿÿ× '–¨aÿÿ‚ '–\bÿÿ‚\&Wbÿÿÿ\×e'²vaÿÿþÔ×e'³vaÿÿÿöÿfÉe'˜á7'˜jÿÑ'˜÷;xÿö6e ˆ² +²+±33´C+´   +´ C+°!/°Ö´+² +³@ +°± +°2´+² +³@ +±"+±±99° ² 999± ° 9°³$9014'#5!##5#"&'326327'5#¼9�@RJ=Q` %)5<6#];3p–¿)¿4)IIýäÒ5xd ,!,L+«…å,ÿöÿìBex²+´C+° 2²+° 3´C+´ +´7+² +³@ +°/°Ö°2´ +²  +³@ +³@ +² +³@ +³@ +³@ +±+01463!5!5!#3!5!##"*JþOLQGýȧà B(%�IIþIIX ÿöÿìÉe&¿²+´C+°2² +° 3´ C+´% +±é´ +´7+°'/° Ö´!+°!±+´+² +³@ +³@ +°±+°2´+² +³@ +³@ +² +³@ +±(+±!°9°°9±%±99°± 99° °!901%4.'5!5!5!#3!5!#".'732v(ýÈÓQGýA.’#T9-R90;>b->ü44 uIIþII*)9PC2HZC*-gXòe@²+´C+°/° Ö´ +° ±+´+±+± °9±°901>32#52674&'"X}/Z}|AHOlN?5^#.qUa†©â{A7D/ÿÿÿöÿµme'®&¶}ÿöÿìöe(§²+´C+°2² +°3´ C+´ +±é´!& +´!C+°)/°Ö´+°±+° 2´+² +³@ +³@ +² +³@ +³@ +±*+±³!($9±°9°&´ $$9°!°#901327'67!5!#3!5!5".54632&'"s7.#$¥Ú þ›RHþ[A=5L#YF,(8+!,6vI IIþIIq/)<0Eh PþÇiÿê f° /´+² +³@ +°2°/±é°/°Ö´+°±+±é°±+´+±± 99±° 9±±9901332673#"&74632#"&þÇ6/)'16T:4\eð#,.!@GJ=+# U°/´+°/´+°/°Ö´ +° ±+´ +±+± °9°³$9±± 99012654&#"7"&5462'7†s3V::R7â*à�0(;8-*7<þDá*ß"1åû !+}°/´+°/´+°%/´+°/´*+°,/°Ö°'2´ +°2° ±+°2´ +°"2±-+± ·$%)*$9±± 99±±"'990172654&#"7"&5462'2654&#"7"&5462†s3V::R7_s3V::R7d0(;8-*7<­0(;8-*7<�.%·² +°/´+°/´#+°/°3´+°&/°Ö´+°±!+´ +° ±+´+°± +°2´ +² +³@  +² +³@  +±'+± ²#999°° 9± ° 9°°9°´ !$9°#°9°°901!5!##5'#".'732654&#"'632Û>ýë�G3R4C;aA* 3{F(7?()/S<^2 [?33þ\~I:bi:…—=-'N< ek={6å²+°53° /´+°/´+°%/±333´&+°12²&% +³@&/ +°7/°Ö´+°±+´+°±+´ +° ±+°#2´+°±6+°.2´5+°02²56 +³@53 +±8+±² 999° °9±6°'9± °9°°#9°´ "$9°±99°%±.99°&°,901&'##5'#".'732654&#"'632!5!533##À4-3R4C;aA* 3{F(7?()/S<^>ýë…   3JJ3±:þ\~I:bi:…—=-'N< ek9 [?3 …M3þÿòÿÎû >̰2/´:+°/´+°2° /´+° Ö´+°?/°Ö´+°±7+´6+°6±/+´!+°!° Ö´ +° /´+² +³@ +² +³@  +±@+±°9°7²)*999°6±99°/´ ,#:$9° °9±!°9±± 99013!5!654.#"#"&54732632'&/32654&#"'>32”nþX $l6J0 42Q9HŽR¤@‘®o'";+*9(EAÿö4*?ز+°/´+°/´$+°1/´2+°.2°6/´?+°@/°9Ö´<+²9< +³@91 +³!<9+°3´+°2°<±+´+°±3+´.+².3 +³@.0 +±A+±¶ $'6?$9°²+5999°3° 9°.±*99±°9°°9°@    !'$9°$°*901&547#"'73274&#"'4632>3'23!5!4+"&=33àG)..48+5G"3'!=513>(.^J(c>.]ýÍ«:ÜE1+$‰hkUUkr:d F;#%d1[0N +.N)#,ï5=33?,J °/´"+°3/´ +°8/°3´9+°2°K/°EÖ´F+°2²EF +³@E +°F±6+´+²6 +³@68 +°±'+´+³'+´<+°54'#"&=#5!6=4&#"5473V-BSþõ' 'fP9^8)32R.(< "  7Ý–.>f¥- 7W©6E3¯)2 (/!ZoD_|V'!jwU#3)*%( +-³3 f01@/C°/´!+°*/´ +°//°3´0+°2°7/´A+°4 Ö´+°D/°Ö´+°±+´+³=+´<+°9±=°9°-±7A99±1µ !*4$9°± (99±*!± 99° °&9°/µ ($90123#327#".'&'32>54'#"&=!5!4&#"#"&547326h.DUú2@S'AA#QˆE3313-$B'2"<>)þþ£%-TSR- ==T­7H3©"p9u2J%‡¶V‘Lˆ^R�#/ >*4S:­3.8.21X‹09®²+°3°'/´+°/´+² +³@ +° 2°:/°*Ö´/+°/±+±122´+°2°±+° 2´+° 2² +³@ +±;+±/*°,9°´'-3$9±'µ 19$9°²!999±²$*-999012675333##54&'#5&/67.'#"&547^O>393TT3 632¦$eo  L&*'"$ÿpC; #ö8"6#›þÒ'%y\3þj;D+þìt`N8H4 21& G/3$ t5y;ý°$/´%+°2²$% +³@$" +°./´+°54.'&547#"'7>54.#"&54>:F55&8,7 ‰F.6R^R6�d,* , %* &-#gK>!+;%4 2J.1&6($*R8Mi*1+ %'/!9-#õ;.¤²+°/´+´+°)/´$+°/´+°//°Ö´+°±,+´"+°"±+°2´+±0+±°9°,± 99°"°9°´')$9±°9±)±99°$°'9°³&,$9012#.#"#"&547326324&#"327#"&546›(23GG ORR,BI>F,€ #–;3þO9H_5A@1:'+Sz %/9•#LYGײ+° /° 3´+°2°)/´$+°/´/+°H/°Ö´+°±<+´B+°, Ö´"+°B±+°2´+°52°±7+´+±I+±°9°<°9°,° 9°B°9°"°?9°@ ')/9:@E$9°°39± °9°)±99°$°'9°·&,57$901#4.#"#"&547326324#"327#"&54632654/&5467LW3 >.DTQ,2BTD.+ #›7# %\­Z%*IhiIùW(þ†(/G_A5@1/1+T#x"+'8”(0:&9(D$)!*"I>ø2²1+´&+° /´+° /´!+°3/°.Ö´)+°)±+°#2´+°2±4+±)µ !+,1$9°°9± ±99°!²,999°&´+.$901#".'732654''254&#"&54632ö/ "2)(H75%)3 5Q]L£²1+´&+° /´+° /´!+°M/°@Ö´E+°. Ö´)+°E±+°$2´+°42°±8+´+±N+±)@ !+,154&##5.'7z™þÒ8×6H0/")( [63 Eu6ù"•)‰C`*.33.&N4#B%'6MþfXOM�FX/Ó„+ª² +°/´+°/´&+° /´+² +³@ +°,/°Ö´#+°#±+´+°± +°2´ +°2± é±-+±#° 9°µ!)$9± °9°°9±&±99° ³!$9°± )990133##5./>4'"&54732677W$Ld3443¯:3:*4(%1( &'=¦5FaÝV3þR,‡1-45)*%/DJ+à{+¤°#/´+³#+´&+°/°3´+°2² +³@ +² +³@ +°,/°)Ö´+°±!+´+°± +°2´ +°2±é±-+±!µ&$9±#&² !999±±)99°°9012533##&#"32632'>54#"#"&546Å9M.3443V^!F O",&"'*I N  W15HÇM3þ`›7#)"5"% O %1^µ.%‰²+°#/´+°/± 33´+°&/°Ö´+² +³@ +°±+° 2´+² +³@ +±'+±± 99°²!#999±#² 999°°9°±990127#'47#5!##5./7#"&²& !�&')ÞAt5´33„JN &H“ $ #a133þAAZ (R8 ¿ 8BÒ²7+°3´<+°/´(+°0/´+° /´A+°C/°"Ö´#+°#±2+´+°±++´+³++´9+°9/´+±D+±#"°69°2°79°°9°9¶ (0?$9°±-99±0(°+9°°9° ³-2$9°A±499°<³"#$9°7°6901>32#"'326?#".'732654'#"547&'74&#"32� I4 '.',69(#)ZJ>g@&3"5R0<3% =!o#>(ä<$U¨E$) W<P-JcM|ƒB @ykAE.0,"4”!W>1 —.r°/´+° /°3´+°/° Ö´+°2² +³@ +°±+´+² +³@ +±+± ° 9°°9±° 9° ±990172>54.'&'#5!!2#{#bDLgH—þä"L6: ºG5Yi þŒÔ33=.(LÄÿµý./:µ°/´+°/´0+°6/´(+°/°"3´ +°;/°Ö´9+°#2²9 +³@ +°9±3+´+°±+´+² +³@" +±<+±9±99°3°9°±'99°°(9±°9±60³9$9°(°*9°°8901.#532654&'#"&=#5!!22654'#"'�%8/$22D"9ÉrGWw%.\30%ýþ[ML  þæC1  ;) %> $@t3\2&?^.á33! (/K&†ÿýY.@÷²+°./´:+²:. +³@:3 +°/´%+°/´+°/° 3´+°A/°3Ö´4+°4±+´"+²" +³@ +°"±=+´++°+±+´+² +³@ +³+´+±B+±="¶ (.:$9±+°9±°9°°9±.°9±:³+=$9°%°?9°²"(999°°9°±99017".547#5!!327&547".'32?#"&'&5332654'ó(3 KÖYþÒK9<10 #BP2$*%,SAHƒ3(4&"@(ø2.a1337'!kmHTjN]X !!# B!-"')!3_Žx+FS}A) 6'$&3†$~°/´+°/°3´+° 2² +³@ +³@ +² +³@ +°%/°Ö±22´+°2² +³@ +°±+° 2´+° 2² +³@ +±&+01675!5!33##5.'#5.#7p¡þÔ_ 63JJ3(3+@Y+÷�)ˆCa,+3þÎAÜX3þ=£W8?-�KV1ë:CY² +°/´+° Ö´J+°O/´T+°/ Ö´*+°D/´?+°"/´6+°Z/°Ö´+°±3+´'+°'± +°2´+±9F22°±L+°W2´+°B2±[+±°9°3²999± '´ -/6$9±L²?Q999°°9±J°9±OµGLQ$9°/°9°T±-99°*°F9°D@ ',39;BW$9°?°<901#"&'#4&#"#"547326324&#"327#".5463267>32'"2654&#"532654&»0g,[3EG g!}/69`:, @*  "#! Ÿ*7%!/,=j7_-X83%'/(240gCÈI:¡E9 C<9*#S )5. $ $>�Ab!>-4lxE49!,3%ÿÑF‘'2Ú°/´ +°/´+°/°3´ +°2°3/°+Ö´0+°0±+´+² +³@ +°± +´+°# Ö´+²# +³@ +±4+°6º—À*+ °2°À±&ù°%À³%&2....³%&2....°@±0+°-9°°.9± ²999°#°!9± ±99°°90123!32654#"'632#"&5#5!654'".5473þ.Iþæ;d&!"-:c4,'E<[š #,!*a°7>54'#53&5472654'ƒ/2°™CfHFV2 ¾ P6&):4I<"G0ß,N73k*EFH�ZD N=%3]G54#"'62 ,'M˜þè 35% *>.9d?'’33þq 6Y1&"!=8€[?Ì‘#y²+°/´+°!/°3´+°2²! +³@ +°$/° Ö´+°±+°2´+°2´:+±%+±²999±°9°!² 99901327#"&54>32533##4&#"r, )F>)3& 3553Y$5@‰?3^+1:('Êc3þW+w=ÿß&U.+/G°/´#+²# +³@# +°2°)/´ +°,/´-+°0/°Ö´+°±&+´ +±1+°6ºÀÓõÁ+ °.°À±ù°ÀºÂÝí+ ±°°À±±ù°À°³+ºÀúôÚ+ °³+³+°³+ºÂÃíg+ °³+² Š Š#9²9°9² Š Š#9²9@ .........@ ...........°@±°9°&³ #$9±)#³ $901&54>32#".'332654&#"%5!ü, 8&KcfS5+# 3  $2BLF57þãva '" '{¾y 1&@)I%%7;X/:\IFa!w33ê†0¦² +°/´+°)/´!+°/° 3´/+°2²/ +³@/ +°1/°,Ö´+°±+´+°± +°2´ +°2² +³@ +±2+±,°9°µ%&./$9± °9°°9±!²,9990133##5./67654&#"32727+"&54624\%jI3QQ3";,C&,n'B7) ? (V~Q§8P)YïX3þI% 58<"*$3- 2DJÿéÿþ³.{²+°/°3´+°/°Ö´ +²  +³@  +² +³@ +° ±+´+°° Ö´+°/´+±+± °9±°9°° 901'#5!!67&54Mc3OÊþ¸g”,./j´2"33ê†!PO_ Lcb-Í5%x²+° /´ +° Ö´+°&/°Ö´+°±+± 22´+² +³@ +±'+±°9°³!$9± ¶ %$9°°901"753##5./7&54632&�#y…R3GkMp^),*' ŸyU-J1& DJ3þVGK)[F=8Y325!5!##5.#"c4#4,b3þ©½33B$&3"„&D/F"fÌ33þÃBE--,  ós&p² +°/´+°$/´+° Ö´+² +³@ +°'/° Ö°2´ +°2´ $+±(+± ³$9°²999°$°"901>32533##.''654&#"72767&#" n6…F4==4* »$%.% # 3#43B£1P‚ÑE3þ:H Á"&!$ 9 ,+2&) S.(�² +°&/´+°/´ +°/°3´+°)/° Ö°2´+²  +³@  +°±+´#+±*+±±&(99±& ± 99°± (99°µ#$9013254&##5./67&'#5!!32#"'Ì I<3�8b($f4Rþ9>(69vKZr7 #1?þZFA_ %M#6@33*8&1,'aOaP'% Œ.W²+°/´+°/° 3´ +°/°Ö±22´ +²  +³@ +² +³@ +±+±±9901%.#'675!5!##*–M!~”þÖŒ/3“%ˆY*Š6b++33þ�IX,G5.,0ް /´+°/´*+°%/´ +°2°-/´.+°1/°Ö´+°±+´(+°(±+´+±2+±(µ  "$9±°9°*°9°%²#999° ²"99901#".'32654'#"&54632&#"326%5!¥%`K9bC:"9%”T,P"5R3O)4! K%3þ|5® #!9 @s1Jm_:“¥Q?3Z7?#00:2”33Ê.!t² +°/´+°/±33´+°"/°Ö´+² +³@ +°± +° 2´ +² +³@  +±#+± ³$9±² 99901.'5#5!##54&#"#"&5475Å>N)É33`#B2U)D>=79.�&!"33þ­�C+P,],‰–82Nà±.K² +°/± 33´+°/° Ö°2´ +² +³@ +² +³@  +± +± °90167.+5!##5.')9Ye 6±33)“9?Y7?J"1#9CE33þLCR F7'2jÿÿŒ.' ¬¨ü.&¢²+°/´+°$/°3´ +°2°/°3´+°'/°Ö´+°±!+´ +° ±+°2´+² +³@ +² +³@ +±(+±!² 999° ° 9°°9±$³!$9° ° 9013"&546326325!5!##.#"4&#"V+8>FG;1.+&þkû33 3%'9#.%&;0S>@R0+ ‡33þ!JL0)5…6¯²&+°5/´0+° Ö´+°/°#3´+°!2² +³@ +°°* Ö´+°7/° Ö´-&+°-±&+°2´%+° 2´#%+±8+±- ±99°&±3599±5±399±*0µ 2$9°°9±°901#"'73>54&#"563263533##4&#"327#"É 4$E5‰N3::3Q$!, <X&)-1=8k_  $ÀW3þ^s/6 +½.Q² +°/±33´+°/° Ö±22´+² +³@ +²  +³@  +±+± ²99901&'#5!##5./6&'5À-~½:3BdE*÷I;0|UÖLŠ—#A33þ@]G:%3(?+7qc{šü.(f²+°/´&+°/´+°/±33´+°)/°Ö°2´+² +³@ +±*+±&´ $9°°9°° 9016325.'5#5!##5.#"#"'7326s@5"'2Ä B_$ü53 :'30A,-û84E®¸K7"33þõN4?4j" EÿËñ.#K°/´+° /´!+°$/°Ö´+°±+´+±%+±°9°³ $9012&/32>54&#"&546'5!æ6l•¥Y&©Ù_:&: M$B0d¶ÉëY:o2[p!ºH9!(# $<"%*9+K33þÇÿyÿ7ÿé *²+´+²+° /°Ö´$+´$+014632#"&þÇ"O2"ÿËç.$q°/´#+°/´+°%/° Ö´+²  +³@ +°±#+´+°±+´+±&+± °9°#²999°°9±#°9015!&/32>54&#"&54635-A•¥Y&©Ù_:&: M$B0d/û3NK+o2[p!ºH9!(# $<"%*9+Kÿ±Á{K²+°/° 3´+° 2² +³@ +°/°Ö°2´+° 2´ +±+±°901.+532533##L)Rb3BB3±.38…M3þg² +²+´+´  +°3´ +°2°/° Ö´+² +³@ +²  +³@ +±+± ±99± ²999013###53'>32&#"BIC3G9* €DX’V#‘ŠBUe3þû3:IdNJ&‹Wþw´)$ ²+² +°3´ +°2²+³ +³ +° /´+°/´+°%/°"Ö´+°±+° 2´+°2² +³@ +² +³@ +±&+±² 999± °9° ±99±°"90123###53.#"'67."&546цž AA3@@—f,[€o -@�Hi)Žm3þû3Rv$ *!$%Hÿÿ*iL"_°/´+° /´+°#/°Ö´+°±+´ +±³$9° ±99± ² 999°² 99901'2654'7&'#"&5463267&#"š0 *:()(0M9< */)?/*8BA9/"9S ÿ@þîš$@²+´ +°/´+°/°Ö´ +±°9° ²999°°901463'7&#"327'#"&ÀB1. !+1(£ ˆ)3&0b)5?"!#�&r/þžþÛÿ­)°/°Ö´+01?þž‘+d§sj2QG~8þßþÔ/ƒ 7'?'þßz/}+P��F�…_!V2Q3t8b6s8/.R²+´+°/°3´+°/° Ö´+² +³@ +²  +³@  +±+±³ $9017267#"&5467#5!Ç CL^O<±&[rD3  :ŠfKœ$31›n5qÿÆL,¥²(+´!+°/°3´+°2° /´+°-/° Ö´+°±+´+² +³@ +°±+´+² +³@ +±.+± °9°± 99°± 99°³!($9±!²$&999± ° 9017467#534&+"&47326323#3267#".(GA°Ò-Y)*3,2 K@<G>³=0 C0H"êQ‘/342H #6M3j @~  :9TDÿÿþ6¢{' áþ5ÿÿþJ£4'ÈþIÿ/ÿZÿóÿý²+´ +°/°Ö´ +01'7+¦¦¦{({ ‘13p°$/´/+°/´+°4/°Ö´+°±2+´!+°!±+´+±5+±2´ $)$9±!°9°°9±/´!)*$901"'654.'&54632#".'732654¢+9 &-Ÿ0 J[g7_G:OC# & /þ8- Li 4 ,#H/5.PBTA4(84'  >þìÛ4~°/° 3´+°2°/´+°2° /°Ö´+°± +°2´ +°2² +³@ +² +³@  +±!+±°9° ³$9° °9±°90126323###5374&"#"&547c)B&GRR3VV3(B`T*±4(,3þù3$63!,7ÿÿÿ�.&ö 1ÿÿÿo˜.' ®ÿö÷ÿÿ±.& ¹žÿR‹:¾²+²+°2/´+°/´+² +³@ +° 2°;/°5Ö´:+°:±$+± 22´+°2°±+°2´+°2² +³@ +±<+±:5°79°$¶#(*28$9±±!"99±2¶$($9°² *,999±³/58:$9012675333##54&''75&/67.'#"&547HpCD96þþ0O>393NN37ds4ý™2¦$eo  L&8!$¯/3#(8,8"6#›þÒ'%y\3þi=C+þìGT*8²jU`N8H4 2!$& tþó€yuy°`/´e+°k/´+°/´+² +³@ +° /´.+°v/°(Ö´#+³G#(+´B+°B/´G+°#±+´1+°R2°s Ö´n+°1±h+°92´+°M2°±+´Z+±w+°6ºì¹Âù+ °?°=À±Hù°JÀ°?³>?=+°H³IHJ+²IHJ Š Š#9²>?=9µ=>?HIJ......µ=>?HIJ......°@±#G±&D99°´%.E$9°s±4599°1±bq99°n±Pc99°hµ T`ep$9°±U99±e`°b9°kµZqs$9±³ RU$9°°P9° ¶&(159M$9012>54'.'#"'7>54.#"&54>32>54.'&547#"'732654&#"&546¹5,".]," #,* , %) &-# :F55&8,7 ‰F.6R^R6BCT G0 .8(!*4F2!$19"  *1+ &&0!9-K>!+;%4 2J.1&6($*R83W )$8 3 %1   #&$þ�þÔÿ§T3œ°/´ +°&/´1+°4/°.Ö´)+°)° Ö´ +° /´+°)±#+´+°±+´+±.³ ,$9°)±99°#³ +1$9°°9°°9± °9°&µ,.$9012654.5467#"'732654&#"&54632À=2GG2 LZL/D7#!+45,¸$/",( I5'9 &-  #("2ÿÿþoþÔ—º&îðfAA£® L°/´ +°/´ +°/°Ö´+°±+´+±+±± 99± ±99014&#"326'2#"&54>pA4>I@4O<8DRè^IXncK*8. Ml,)[°/´+° /´ +°*/°Ö°2´+°$2°±+´+±++±°!9°µ "'$9± °901%#"&546332654.'&547ls=.A?1   19O+$==* 1EE1²Mc09/ M=4/!1 40 +0=b1ÿÅâ#% °/´+°&/°Ö´+±'+01#'&/&/33254./&'7‡^2aŠ"HC39@!* R'u  H:''*„"6E@~$@;#''=.V  *!&#-?,ô'S° /´+°/´+°(/°#Ö´+°±+´+±)+±³ !$9±´ !#$9012#"73>54&#"&54>&/;1!)BD$¯a3+mG$6O>$1: 3 #4X7A^/z CŒ„!*4#Dz%1= &,9ŠC 2r²+´++°/´+°3/°&Ö´+° Ö´+°±+´+° Ö´0+±4+± · #+$9±µ  &0$90162654'7>=&#"#"&5467.54>32½\>s(>h%:r"B+%3~aGER'D@=&7/43(J/#C.@ $Þ:O0", *1b8JL?'13M/%8 8&+61·%2µ°/´+°3/°Ö´+°± +´,+±4+°6ºÁ×ðÅ+ °°À±ù°À°³+ºÁôp+ °³+² Š Š#9² Š Š#9µ......µ......°@±, ²999±±.199013&5467."&546?6?&'ø>32#".'732654€ Z #+) .! cI>jF+3=o@1BL2228* #3-(8.!(! A*ZwEo? H“m]E?`Ù0i²&+´+°/´/+°!/´+°1/°#Ö´+°±+° 2´-+±2+±±!&99±/°9°!±-099°±,9901;6363637&54&#"+"./57"#"'463237“5' 89/"NF 6¢ l6(,x&CWLþ�),*&v=g 4X:¤7 $  0o°/´+°/°3´"+±&,22°1/°Ö´+°2°± +´+±2+±°9° ±"99°±$99±±99°"² $99901"32>54&%#"#"'4'76326323;2?Ë*-,;3N#dJ/%,$/-9/'   18#¤@>/#  J†Og3�"# ½>4¢°(/´'+³'(+´+°"/´.+°5/°+Ö´%+³%++´+°/´+°%±+´2+°2±+´+±6+±+°9±%°9°µ'(.$9°2°9±'±99°"³+2$901%>5.'.547?654&#"3"&54632H('E6Q &1$&\xšwR:)&:?G;7Kp I4%  - " *#/=pN` 3 0=+!7.258El: ÿçž. \²+°/´+°/°3´+°/°Ö²222´+² +³@ +² +³@ +±+±³ $901'.+'675!5!##*9Vˆ$ %ˆš9!~”þ½·A3�@>e X,X.ˆ6b++33þÿçž.!Z²+°/´+°/°3´+°"/°Ö±22´+² +³@ +² +³@ +±#+±³!$9017.'77.+'675!5!##Ò`:,n6š9!~”þ½·A3H''%ˆ&&Q . I7 .ˆ6b++33þ�$X,b×a °/´+° /°Ö´ +± +01%.#52¤9Õ{M„]M/báë3=a‰‰OÿûIf$ x°/´ +°/°3´+°2°!/°Ö°2´+°2² +³@ +² +³@ +°±+´+±"+±²999± ±99°±99013#2654'7#"&=#5354'80AA/F-,4_D99VV1$19F3Z/&R*."'<=sJXB3KNbÖa +° /´+² +³@ +° /°Ö´+± +0172673#wÜ63/M]„M•ìàOˆŠa=(K&$ N°/´+°!/°Ö´+°± +´+°±+´+±"+±°9° ²99901%>75>54.#"&54>32%<… 3ïŒ@" '%*8(1[é,µZ „þî:3+$'$. 4)34P: <1¤°/´+² +³@ +°//´+°/´)+°2/°Ö´+°±%+´ +° ±+´,+°,±+´ +±3+±%°09° ±#99°µ")/$9± ° 9±/±99±²#%,99901732>73#"&5463232654&#"&54>32#'"@8K}S5 3AR-2BY., " .9(7, ,!L;h7H“# V‘¨]nÑ«"D8#3(#3'(?=8N/…' °/°Ö´+±+±°90173#"54#62i %*L‰9TG&7N#V.(�°/´++°/´+°$/´+°/´+² +³@ +°)/°Ö´ +² +³@ +° ±!+´+±*+± ° 9°!±99°±99±±!99±$µ "'$9±± 99017"&=4#563232>323#"&=4#"l + 2" *š1î&3 Nü?M?)"Ç 34)Î51e+’‡é%J°/´+°/´+°&/°Ö´+°±+´#+±'+±±99±°#90172654.#"".=4>32Ø1K)! 2,# 1G$#G/98#`ÅP(#3 $ "3 3 554<)"C.Qdt Ù$Z² +´ +°/´+² +³@ +°/´")+°%/°Ö±é±&+±±99±"² 999° ° 901326?63"#".'#"546326.,O+&?43473#"&53£%/YHJX 7„,¹( RlkS%0 ÿwÏX *° /´+´+° /°Ö´+´+014632"&‰00!H $!&000'(m+8{°$/´6+°//´+°/´+°/´+°9/°'Ö° 2´3+°2°3±,+°2´!+°2±:+±,3µ$$9±/6±!'99±± 99012#"&54>4&#"3262#"&54>4&#"326¬2GC84F.e2&$ "!)C #+C86D 6k.  )("mD86DD8 ${&"3 (· 6%5CC8 #,| ) #'+ÿùh�>v²+°3/° 3´4++° 2°?/°0Ö´;+°;±+±+° 2´ +²  +³@ +±@+±;0°&9°°=9°²!999±3³ ;=$9°4°90126?53###"&54>5&'#"&54>54+532676“6+;džAN/7 '$+$BJ;& G8\>]P "3[9'ÔAýÀi JE>&9)H+‹&WI]7/$;"°A /X8DaÿùP�B‘²+°7/± 33´8++° 2²78 +³@7 +°C/°4Ö´?+°?±+±+° 2´+°±+´+² +³@ +±D+±?4°*9°°A9°²#%999±7³ ?A$9°8°90126?5!#####"&54>5&'#"&54>54+532>“6+;¯ž@�AN/7 '$+$BJ;& G8\YWP "3[9'ÔAþºFýÀi JE>&9)H+‹&WI]7/$;"°A /X8 aJÿàt„-2ä²+°!3´+² +³ +° /´0+°$/².333´%++°2°/´*+²* +³@- +°3/°"Ö°&2´!+°2²"! +³@"$ +°!±+´.+°.±+´-+°-±1+´ +°2² 1 +³@  +±4+±!±99°.± *99±-°9°1±99° ±99± °9°0°9014&#"!##"32>2#"&'67&'###535463235Ž@6{׈iëY¤K$>! c6\êœw€@}}p^9iq-{©Î9@ÆAóŽ!f# (asINagnýÀ@AstbTŽœ³ÿö±„5Þ²3+°3´*+²*3 +³@*/ +°"/´+° /²333´ ++°2°/´+² +³@ +°6/° Ö´+² +³@ +°±+´+°±+´!+°02°!±+° 2´+°2² +³@ +±7+± °'9°²*3999±!±-.99°±99±"*°9°°9013567&'#5!4#"#46323####"32>2#"&�-{©þM“wZÌ|<2@SPZt¯¯@£_3LcP¤K$>! d/uÎAœ³þ|T[gnAÅ>:Liis&AýÀ@ó>/!f# 'coÿÿÿùÿfã�"ƒiÊÿÿÿùþñã�"ƒj¼ÿÿÿö§¡"‚k‹ÿÿÿùhÎ":lXÿùÿùßµ/@¦²#+´>+°9/°33´+°./±33´/++°2°/´ ++°A/°-Ö° 2´+°2²- +³@-. +°±0+´+²0 +³@ +³@ +±B+±-°*9°0µ #9$9°°9±9>±099°°9013>7%!2#"!##".5#54&#"#326} xJ[J0þCß]Ž=Z5%biMFu'L54W?2! DY- +Z= '9S26F@�Q0NCA41 *H8*AXo#Dk64 +EC]Ic>+Aþ 8[0OG(5ÿÿÿùhÕ":nÿø¹�%8�²!+°/´++°6/´+° /°3´ ++°9/°Ö´&+°&± +´+² +³@ +²  +³@ +±:+± &´#-$9°³!$9±6+´#$9± °9017"&54632>7!5!##&''327.#"ÝPny]cn-ýïÁp! C A3�³ .% jZ#  7H7rSXky—EAA!-%3,3M:3"®UDÅ'9 ˜$ Jÿóˆ�#�²+°/´++°/´+°/°3´++°2°$/° Ö´+²  +³@  +°±+±22´+² +³@ +±%+± ±99°±99±°9°°!9±° 901%2675!4.'#532!53##5#"'763%Tþð )@E ikY ȇABc›L%³0“@Z=1 A··AýÀ®54'#53232>54&54632Ú'*ʉA$0EA 3:p <>2SDHJ&)4)!¬ �AýÀ�"Bd#¸'KANE.ÎJ3A'+c 'TZz.}ÿ÷›�'0¥²!+°%/´++°//´+°/´+°/°3´++°1/°Ö´+² +³@ +°° Ö´(+°± +´+° 2² +³@ +±2+± ¶!%+-/$9±/+µ#(-$9±± 990174>327654&#!5#5!!32#&'#"&7327&#"<>*>\4+B:þáM¤ýê÷/E"_6,E")Y^D]@;*L;KHY¯+)265-"¶AAv/.NM1mH4SL8(?Lÿú¼�!”²+´++°/°3´++² +³@ +° /° 3´ ++°"/°Ö´+°2² +³@ +°±+°2´+² +³@ +² +³@ +±#+±±99°°9±°9014632!5!5!##".'#"5!32>F3#<þÂ’pZ1MG*9#ØþÄ]O!;1S.?6ÔAAþsOd?zY~~„f3ÿø �&.7Ó²+´7++°'2°//°.3´++°/´+°/° 3´ ++°8/°Ö´+°°3 Ö´+°/´3+²3 +³@ +°±7+´'+°'±+´ +²  +³@ +³+ +´+±9+±3°%9±7°9°'±99±/7±99°±%99°±99014>3!5!5!#!"632#".54>3&>54&'#;$ 6þ ¨ˆþ�-t+™o&tnrn,  "54&#"#"&54676'32>7Â;4=‰q86:;kb 2 ; (K'' &% )3!W- g\'"'#(l*";%™=KAAATW2OQ? &8, - 3M  ±KA!4%ÿúÿý��2°²+´+°/°'3´+°/´+° /± 33´ ++°3/°1Ö´+²1 +³@1 +°±+´+² +³@ +±4+±1±,99°µ'$9°³$9±°9°±%99°°-9°°19°°901;5&'#5!#!"3!#327#"&'.'".54¦[ ‹þöK l•‰þÃ>2Oû+†#! ;+)X  @=;xx7AAA·$,@‘ )70  hÿùÿý“�`²+´+² +³ +° /° 3´ ++° /°Ö´+² +³@ +² +³@ +±!+±°9± °901%#"&'6%5!5!#"32>32zM>àk<þ1š‹&,SAOK#)¦/#>"! euCç!ƒAAà )G/3Lÿöÿþ¡� )ƒ²+´+°/°3´++°*/°Ö´+² +³@ +°±+´ +° ±+´&+²& +³@& +±++±°9° ±99°°9±²&99901%4&#"32>".54>75!5!!wWPuÈ2K, œ\VT3/[<þÚ«þ»4(5,0A1þ� 4$ÿ÷ÿú›�".¸²+´#+°'/´+°/° 3´+² +³@ +° /° 3´ ++°//° Ö´+°2²  +³@ +°±+´+² +³@ +² +³@ +°°% Ö´+±0+± °9°´#'*$9±'#±99±°9014>32!5!5!#!632#"'&'#"254#"77%þ!¤…þ›(%EaG

‘h4:}YK"3# $ u(7A¬AAì!1X-mL37:’K}þä9@(,ÿù›�.•²*+´!+²!* +³!$ +°/´+³+´+° /°3´++°//°Ö´+² +³@ +³@ +² +³@ +±0+±°9±!±99°°9±±99° °90176325.'#5!!&'#.#"32632#".&Z€<; I3 �¢þQàEG2$i!HG‰U² Bn0 PiW´Ö0W AA#W < È@5–*P7 3-"Nÿú‘�*…° /´+² +³ +°/´"+³+´+°'/°3´(++°+/°Ö°$2´+°2² +³@* +² +³@' +³ +±,+±±99±"±9901#".4232654&#"#"543232765!5! 69x$2/6•f(»H@;mZ*LM?l"€)þ —@Mq.?e(>% .5?=>8B5/ÌAAÿúŠ�"² +°/´++°/´+°/± 33´++°#/°Ö°2´+° Ö´+°2² +³@ +°± +±22´ +² +³@ +±$+°6º=üð+ °.°À±ù°!À°³+°!³!+³!+³!+³ !+² Š Š#9²!9° 9°9°9·! ........·! ........°@± ±99±° 9017>54'#5!##5#"!5275!0% `�ˆAXeb !²JhþÔ >Ñ,±(,>AAýÀŽ=ïG!.¬þR=…,Qÿø¥�"œ²+´+² +³ +°/° 3´+² +³@ +° /° 3´ ++°#/° Ö´+°2²  +³@ +°±+´+² +³@ +² +³@ +±$+± °9°±99±°9014632!5!5!#!32632#".5#"[+#þ­‡þžSi(~ )Z5Id6H>5RJÛAAþåoz0 .+*QdEÿöˆ�в +°/´++°/± 33´++°/°Ö´+² +³@ +°° Ö´+°± +°2´ +² +³@ +±+±°9± ±99±° 9°°9017>54'#5!##5#"3270 g’Œ@Y_b >YEhèBŒ-+2AAýÀ¤=Ù3.5fKQ<\ÿôÿþƒ�)¤²+°#3°/´+°2°/°3´++°*/° Ö´+² +³@ +²  +³@  +°±+´+°±'+´+²' +³@ +²' +³@'# +±++±°9°'°9°°9±± 99°°901".54675!5!!5>54&&Ay!3%,.‰Pþï�þÃRˆ  3 wm]H1=A.B/[—AA—�Y+" A=1H]ÿ÷š�#t² +°/´+°/° 3´++°2°$/°Ö´!+²! +³@ +°!± +°2´ +² +³@ +±%+± !±99±´!$901732>73##5#".54654&+532vOW75Í�@Lb(X@)L%*-óH �AýÀ°E(( Ë '7!5!5!#!">3274#"26wE–l1þ#¥‰þÏB2% *)A$?Ta!W+ZQ>90M�O%;tAAµ>&!1 &G8;I‚B1)+*ÿ÷}�!*d²+°/´"++°'/´+°/±33´++°+/°Ö± %22´+² +³@ +±,+±'"± 99°°9°°901!#5#".'>7.'#5!#!352675#÷Az&Q^ %5!I††þŠ?>§§0m ²9_Vv3E32/ (1AA?S-¿þ.;�oJÿ÷z�.8¹²+´ +² +³  +°/´2++°7/´+°"/°%3´#++°9/°Ö´/+°/±+´,+°,°& Ö´!+°!/´&+²&! +³@&% +²!& +³@!" +±:+±/±99°µ(5$9± ±,99±72³($901!".543232>54'#".54>3265!5!#3267&#"*pP6`A(; -hi); $K4^HKþ-ƒp^yþì!)1I,=Ij+!1'=*a-'+,JPaAAƒ]:!WqO!&(<ÿù¡�‡²+°/´+² +³@ +° /°3´ ++°2°/°Ö´ +² +³@ +³@ +° ±+°2´+² +³@ +±+± °9±°9± ± 990174>54&+532!3##!#"+"[giÊŠ@þé&)5YD?o?WEAÏB)AýÀƒvÿúí�"—² +°/´+° /´+°/±!33´++°#/°Ö´+² +³@ +°±+´ +° ± +° 2´+² +³@ +±$+±±"99°±99± ±99±°9014'#5!####"&'76732=35!f `ó‡?•''D˜'@9g+5Öþsä RAAýÀi$5 m*O|Lq“#K_Žãÿúÿÿx�p²+´+°/´++° /° 3´ ++°/°Ö´+² +³@ +°±+°2´+² +³@ +±+±°9±°901".54;5!5!#'26=#"t;‘e‚íþH~…K7$æLZ]i—=l˜AAþeYM?0&Ó(=bbÿöÿü³€&*޲+°&3´+°2°/±(33´++°+/°Ö´ +²  +³@  +² +³@ +° ±+´#+²# +³@# +²# +³@& +±,+± µ ()$9±´#'*$901%2654&##'"3"&5467'#5!##!©BZS>]\?T%/! \}iIN‘½“MGj|_Q|ÿ{:[AGY««^B%; >}][p ’AA’ qZX‚EÿÿÿëÿóÞ� 15²+°13´+° 2²+´ +°&/±)333´'++°6/°!Ö´+²! +³@ +²! +³@!& +³!+±é°/±é°±+´.+². +³@.) +². +³@1 +±7+±!± 99±µ$%*+34$9±±99±& ·!.2$9017#"&546322654&##'"3"&5467'#5!##!R3‚BZT>\\?T%/! \~jHMºæ“NHj|_Q{ÿ|*!& [AFZ««^B%; >~\Zq ’AA’ sYX‚Dÿÿÿùÿý‚�+¥²+´+°/´+° /´+°/°3´++°,/°'Ö´ +² ' +³@  +²' +³@' +° ±+´+² +³@ +±-+± ³$$9°±99±°9°²!"999°°$9° °'901!5!5!#!"3!#327#".'.54>­ þ?‰‰þ¼$'+Nú +6%8 ;*)H/"+)=ÈxAA·.0@.= 1*?5 4% #)ÿùª�%²² +°# Ö´+°/´++² +³@ +°/± 33´++°&/°Ö´+² +³@ +°±+´ :+° ± +°2´ +² +³@ +±'+±²999± ±#99±#±99°°9°°9°°90174>4'#5!##!#"&!54632#"&3/.$s±‰Aþñ  )z$Ú!Z]wpˆAAýÀ“Etvêþ!ÿùª�†² +°/´++² +³@ +°/± 33´++°/°Ö´+² +³@ +°± +°2´ +² +³@ +±+±²999± °9°°9°°90174>4'#5!##!#"&!53/.$s±‰Aþñ  )z$Z]wpˆAAýÀ“Etvêÿöt� x²+´+°/´+° /° 3´ ++°!/°Ö´+² +³@ +°±+´+² +³@ +² +³@ +±"+±°9±°901325!5!##".54>;#"v!6U.]þI~ˆ01;…^ 7$1(LDG3` AAþc.D"L„F #*@ÿ]ÿdÿÇÿÎ *°/´+´+° /° Ö´0+´0+012#"&54}&2%ÿóú5�D°/°3´++² +³@ +°/°Ö´+² +³@ +² +³@ +± +017##5!#—@dBžúFAAÿûè¥j² +° /°3´++°2°/°/´+°/° Ö°2´ +°2² +³@  +² +³@ +° ±+´+±+± °901.#"3###5354632©98G4œœ@}}kc43 âL:_ˆAýÀ@A:ƒg*P6ÿ"B„j² +° /°3´ ++°2°/°/´+°/°Ö´+°± +° 2´+°2² +³@ +²  +³@ +±+± °90123###534&#"#46;^p¯¯@\\<@78@P„ah:AýÀ@AuQ+:F\ýúÿfÿhÿϰ /´++°/± ² 999010#"'5327˜  Y_cUX^r (A('ýúþíÿhÿÊ8°/´+° /´++°/±±99° ±99°² 999010#"'5327#".'5327˜  Y_cUX^iY$G%cUX^w (A('µ' A('þ ‹ÿz¡"°/±é² +³ +°/±°9012#".'&#"54þ7=}!h&=!4Z(¡J&x)$*3!#'ýß�ÿ|Õ(,°/´+°'/´++°)/±°9±'°9014632.#"&5432.#"þ7Éýê+#4hL=Š]j&%T*)%(")("2;#M¡ü_¬:T\HP &  @2 þ!¦ÿm«A° /´+²  +³  +² +³@ +°/°Ö´+°±+±° 901".1&#"#".5432“  -U $) †1+½+/-#4 9ýÏÇÿ‰Õ)W° /´+²  +³@  +° °' Ö´+²' +³@ +°*/° Ö´+² +³@ +² +³@  +01#".54&#"&547232632#"'67&#"þÅ2] $I/a3E& C!+2+ 5/)?4&5$&K,þ®þãÿÅÿÌ °/´+° /°Ö´ +0153&þ® #?1&#il8# 10 ±þ®þãÿÅÿÌ °/´+° /° Ö´+01#.'7; #?1&#iå8# 10 ±ÿó‹� $.¼²+°( Ö´-+°/´++°/´+°/°3´++°2°//° Ö´+²  +³@  +³% +±*é°*/±%é°±+±22´+² +³@ +±0+± *³"(-$9°%°9°°9°±99±°9°°"9±° 901%2675!4.'#532!53##5#"&'76#"546323%\þè*q�  ik0' ɈAY"=˜" !32Ê š/^) A[\·AýÀ®33X[þ¨0ÿúÿô � !*ž²+°3´%+²+´ +°)/´+°/±33´++°+/°Ö°2±é°± +´"+°"±'+°2´+°±+´+² +³@ +±,+±'"°9±%±99±) ± "99017#"&54632746;5!5!####".73275#"_\Hvþ‰@…ƒ7!5!#’<^TA8,h32#"&547#".7"32>54 0W8eh  8M5w-I+ ÝFW#4)29'ö,3%e]'Ü)E8/³aRb?(0$‚?2. ,p+ž#e°/´+°/´+² +³" +°$/°Ö°2´ +° ±+´+±%+± ³$9±±99°±9901463 #"./&543232>54#"#"ŒiþõŸ C^!†>;h2�!^H*l‹{\¶%t�¼4;7[5~H2=DJ�P1+2)[-3?YI.,t9 $ !*))ÿÿ’+5IJ+´4++°//´+°*/°3´)+° 2°6/°'Ö´+²' +³@* +°'° Ö´2+°±+´ +² +³@ +°°, Ö´+±7+±°%9°2°!9°,µ"#$9±±99±/4²999°²!#999°*³ %'$90132654'5".54>4.5474&#"32SZ]`Uj«"+GGJGG,!©jUNPQNŸžÙ5ZX7Z@"“%? ! 5%.C!!C.#3 "@%“"@þm<..<`ò�k² +°/´+°/´++°2°/°Ö´+² +³@ +³@ +°± +°2´ +±+± ±99±³ $9013273#5#".54654&+532¨*$WOMe@@Lc7nCL%*=/<ä(‘8HF�ý°E&9Æ'5&'&54632&54632#"&#"�yH; ]#<`VJ9pÉ1!éAO5mY%47CHK @ -(/(þ"=$7@0 G/V" ^F#7" q BO D DB )$< G˜,K²+°/´+² +³( +°-/°Ö´+² +³ +³* +±.+±±99012#"54?>54&#"#"546Qi� *"9(E*&u8:Fh–K*kJ66  ,‹—z_!;4,*!$"4-^GN-C`+" 3=YX‚"o²+´+° /° 3´+² +³@ +°#/°Ö´ +°2²  +³@  +² +³@ +±$+± °9±°9° °9°°9014632!!32632#".547#"V*³þM-IS%/k4dmQ4@ü2TG@"6`jK1 #=]œc j7¦²/+´(+°#/°53´+²# +³@ +°/´+² +³ +°8/°5Ö´#+°2²5# +³@5 +°#± +´+² +³@ +³ +±9+±#5°9± °9±(/°-9±#±99°± 99014632!&'.54632#"&#"#!32632#".5#"V* @KG @ !-.#`þÎ#K‰_%/kc’R1@ü2TG%) 0H (*7 Z�xB #>^‰wHþÑÃÿè£Z°/°3°/´+°/°Ö´+² +³ +°± +´+²  +³  +± ± 99±±99012#"54654&"#"&546¤BJ0=R= 1M£B5 IC!.1#?I 5BþœÃÿà�B²+´ +²  +³@  +°2°/°Ö´+°±+´+±°901#"&532>7 YHIY 8J7 �UilR$1 4ÿö§�!&•²+´+² +³ +° /´$+°/±"33´++°'/°Ö´"+²" +³@ +°"±%+´ +°2² % +³@  +±(+±"°9°%²999° ±99± °9°$°901767&'#5!##"32>2#"&35.’wZ±ˆg75F;8«L$>! a0nÖD-{©»VZgnAAó . e# 'boÑœ³ÿùã�)/;·²!+´9+°7/°33´++°(/±*33´)++±22°/´+°323##"&/47#532674&##326@sf*cbLEt'L4ަO�zŒy29Z,kaA±6F�Lt#9A#-SP0!4DE"AZn"Dk65 в†$AAÒQ�þb7[î5 ÿÉîØNfrxƒ|²:+´‚++°}/°3´u+°[ Ö´g+²[g +³@[T +°E/±)s33´F++°'2³nFE+´a+°/´J+³ J+´+² +³  +°„/°^Ö´p+°p±W+´O+°O°d Ö´l+°l/´d+°O±B+°G2´s+°'2²Bs +³@BE +°B´t+°s±z+´7+²7z +³@7) +°7° Ö±…+±Wp³[agn$9°l°Y9±Bd±RT99°s±@H99±ztµ:J5$9°7³02Lx$9°±/99±}‚²O7W999±u[°59°g±2Y99°E´1^dlp$9±aF±&99°³L$9012#".#"#.#"!# #".'&5#53>32>#"&547#"&54632'2>54#"%3>74.##32È>sI, %4\;@z  #N80$ )  !�fTBhC1// �{yM"‚ý ) +\FMOdhihWÇ,4$†„@²t‰u4.?,^>+ ,;:) $($A! "! EkI]+:iNƒ>: AŠ™]ELü÷w7 AMD$&  É t}Hh Hÿó£M N²+´C+°/´ 7+°/°Ö´+°± +´+±+± ± 99±±9901%#"&546324&#"326£`MKceIHeI9+);:*+9 LacJGfdI)<<)*::M )�°/´(+°"/´+°/´+°/´ +°*/°Ö°2´%+°2°%± +°2´+°2±++±%±99° ± 99°±99±(°9°"°9°°9±±9901#"&546324&"326"&54624&#"326+):;()8= =8R::R$§)89():9*"÷P:;'(:bXÿòP-;HZ;²+² +±,33±Xé² +´F++°L/´M+°@/´++°&/± 33´17+±5922°[/°.Ö´)+°)±#+´U+°U±Q+´1+²Q +³@QM +°Q°I Ö´1+°±+´1+°±+´C+°C±<+´+±\+±#)±+,99±QU´ 13%X$9°I°9°±599±°79±99°² Q999°&±7S99°1°3901%#"&4632&#"#4&##"&547#"&546326326324'&#"326!4+532654'326PkZVloU@kG\QiY+K"1cEdyx`p4„µ|J)+K¡92ž€´H&78FH96@ýSj))*8W�LB$<âeŠy´ƒKPDþ­QLI L"T F*AS•n’^‰cŽF4]¬}µSSÇœ@=X;=XVM=-(:(D–Lj.Yÿò.LXkz² +²0+±;33´i7+°W2²+°/´++°\/´]+°Q/´+°5/±$33´@7+±DH22°l/°=Ö´8+°8±3+´f+°f±`+´'<+²`' +³@`\ +°'°- Ö´Y1+°Y/´-1+°'± +´1+°±+´T+°T±M+´+°± +´+±m+±38±:;99±`f´0@B5i$9°Y°*9°'±$D99± °F9±T±H99°M´$9°±J99±°9°0°9±i °:9°\µ MT-$9°]µ*3=8f$9°Q²'O999°°`9°5²FJc999°@°B901%#"'732654&'#"&5463&#"#4&##"&547"&546326326324'&#"32%4춮&'326ò¨†NH8?g‡NA][V\u^6YIZQcX!&%$/_FjvupŽs4„³{P**H—C=ˆ¤Iq‚ý$GV82qýgLGBG+&:YMA$aK:LS.=3$3 ƒGKk.Wÿ'Õ-:Fñ²+´++²+° /´ 7+°./´D7+°>/´(++°"/°3´47+°82²"4 +³@" +°G/°1Ö±Aé°A° Ö´&+°/´&+°A±;+´+&+°+±+±é°±+±é±H+±A°%9±;µ(.>D$9°+±"499±°69°²8999°± 99± °9±>D´+1%$9±"(°6901#!"3!!"&463!2654&#"#54&#">32#"&546326324&#"326Õ®zþf%74&¹ýaWFŠBq{Œxm?‡LTdXEYVA*D 9= E,?TYESfd1'%23$'1þi/'&34J1”þàþé0][8TV‡z4M((M5z}^`x]FC\1#¶¶%/^CF[~"&00$%84'&00$%86þlhhn .Yÿö#./8CѲ+²#+°3´A7+°72°3/°;3±é°2°/°3±)é°-2°D/°&Ö±>é°>±9+´ <+° ±+´&+°±+´6<+°6±1+±é±E+±>&±99°9²)#999° °9±°+9±6°9°1²-999°± 99±3A´& $9°± 99°°+901%#"&4632.#"#4&#">32#"&546326324&#"2%4&"326#jaIjaH,P [@ROR@[ P,I`dO`j …@B†{£`?)(;9Týþ:R>=*+8ékˆa˜k* X|H=þ¡_=H|X *kLN_ˆk‡¾RRÁöT>@R:c*??)*:8Yÿ#³/4;î²+±$633´-++°2²+´+°/°3±9é°/´)++°2°/´3C+°5#"33#"&'#5654&"&5462354>3 5#326³‰5;3Ñ325#326Ï¢*a:1 (Cw^Rt4«OX@�úLY8:VX3j€WV�‚G—i€Ÿ, Lþ�¢ N*º Sm3FQ^-SYc›_F3þSBcÞ/"X7PL8a 5:|TuvSF%Fv¼u‚v5d6”@�0ÿÿYÿ#n/&Ä�»VÿóÊ/-9À² +°3´7++°2°/±é°° Ö´1+°/±&é°:/°#Ö±4é´&+°4±.+´&+°± +°2´&+°*2² +³@  +°2±;+±4°9°.± 99°°9° ±&99°°,9±7µ#.4$9±1±,99±±*9901%#"'53254&+532654#"632#"&546324&#"326ÊSD'%$U0$?8$5Òo�(DGW_IWY»¨JvNFIþ•1()13*'/ƒBN IQ&8O'!hkb0]JIdŒf¢¨"S>RT-=9+-@=ÿÿVÿó«/'½±“ÿÿVÿó·/'Ìã“Yÿòº.&/6A¯²+±33´?++±522°:/± 133´C+±#'22°+/´7+°B/°Ö´<+°<±8+°2´3&+°.2°3±0+°'2´1+°"2°± +´1+±C+±8<±?99°3°9°0±99± ±99±:?³$901%#"'53254+#"'#"&546;5463232%54&#"5#32%'5#"326ºVP"as+Äv&`HPfK8rYRm6PhþÁD34BííxuþË'{/(!.¨Tb Jn^øQQcNJ_XrvTYY6NP7]·^X_-@9WÿóŽ- +·²+´++²+´)++² +³@ +´ $ +´ 7+°/´7+°,/°Ö±&é´ &+°&±!+´+°±+±é² +³@ +°±+´1+±-+±!&± 99°±99±°9±)°9°$¶ !&$901)5654&#"632#"&54632334&"326ŽþvYt`\ŠUGWWF]c¬ˆ�¥>ËPýÞ3P23')2:9‡f‡ˆ\GcJIa„i�½²„w?ßþ}*<=+)<<YÿóŽ2!{²+°3±é°/´C+°"/°Ö´1+°±+´ &+° ±+´+±#+±²999± ²999±°9°µ $9°°901'654&#"#"&547325'4632ޤ4Ž\M{y^l„¥2‡YJ…qYs�¾V3?¬YzÄP`}£vÔR2B§V„¹^\}¥Y?.%.ز+´"++²" +³@"$ +´$ +°&3´++° 2°´+° /°*3´7+°2°//°Ö´ +° ±+´+² +³@ +°±+°2±"é°-2°"±&+´ <+° ±#+´&+±0+± ² 999°°9±&"±99±"°9±° 9° ³ $901)5#5654&"&5463235462!!354&#"?ý)õLWtVI!m€WV�€’ÚŒþ]3OþÏYLN]º($\8LJ8R"<6zTvvTG"Of~}g�yßþÛ9OcbP9Wÿóê-:Dî²+°3²+°)3´7+°B2°´C+°/´7+°°# Ö´>++°/°3´/C+°32°E/°,Ö±@é´!+°@±;+´&<+°&±+´1+°± +°2´&+°62² +³@  +±F+±;@±#)99°&±/99±°19° ³39$9±µ &,;@$9°>°!9°°99±#²1699901%#"'532654+53254&#"'4&#"632#"&546326324&"26êhJ;6U-=oYWqU:GhP^>Zw^I[dLW^œ„xHB‘Y‡."Pý1R45L6“GYI2+YGP-0>8þ’m4B‚_F]IKe�i޶NNXK)A _,<;*(><Za ‚²+´++°2² +³@ +´  +±é°/°Ö´ +° ±+´&+² +³@ +°±+´1+±+± °9°±99°°9± ±9901)5!2654&#"&'463233aüùG0KD./D NsNLm8âPCH.-@A.Mlk˜*ÝZÿò-6Bö²+´++°.2²+±@é²+´+°/´)7+³;)+´ ++° /´47+°C/°&Ö´!+°!±+´,+², +³@ +°,±1+´+²1 +³@ +°±+´>+°>±7+´+±D+±!&°$9°±#)99°,°.9±1°/9±7>´  4 $9±@ $&,17=>$9°;°99± )° 901%#"&54632&#"!5!2654&#"&546323&546324'&#"326r]Pko]=lc…F $ýG0MD01FL sNKk6ž.²~´J!<7J@78KågŒUa}I…c‚9 2CH./BC0MlhOQ%Fz}­ÄŸ?>XvUUWÿòI-5>GN²+°3´M++°<2°I/´ ++°&/´F+°B/´ +°/°3´+7+°/2°O/°(Ö´D+° Ö´K+°D±?+´#+°#±+´1+°±+´2&+°2°2´6+°6/±P+±KD°&9°?´ %BF$9°#³+M$9°° 9°°-9°·/8:=H$9±26°49±IM´ 6:$9° ±4899°F±99°B³(2#$9° °9°°-901%#"&'#"&54;27654&#"#54#"632"&546326324#"264&"32#"32IR:0K MºfjøÛP6?@5sP“].7DbEya~7.|Va=?GEG*:(þ 0!89.£æ�À|:P3&Y4A…"E5Amuos$ ?01BI;YdLLkXQ0*C>>))$#;@3Yÿò/CMî²+²$333´4C+±=K22²4 +³@48 +°/°3´)7+±-B22°N/°&Ö´!&+°!±+´H&+°H±D+±é°± +´1&+°1±7+´:1+°:±?+´&+±O+±!±#$99°H°9°D´)+$9°±-99±71°9°:°9°?²AB999±4°#9°@ !&0?DFH$9°)±+A9901#"'#"&=4&#"#"&547&#"&54632632326533254'74'326xjW0M,_‹qM!-HnLQhz #Phj2„¢|;11^h“YD-4P3*�~3–üAbj73/3 x K -rXqLl '�EW–�^™` ‰Z�O2\¼~¦&&|awDZR8^þ¢4VÍ­G2[ôz[MˆBghWÿò>-;EP²+²+±+33´C++°N2°I/´%++° /±33´17+±5922°Q/°.Ö±Lé°L±F+´(1+°(±+±é°±+´@&+°@±<+´ <+° ±+´&+±R+±L.±"#99°F±%+99°(± 199±°39±@±599°<³ 7$9° ±999°±99±C°9°I· (.<@#$9°%°9° ³ 3>$9°1°7901'654&#"#"&547&#"#4&#"632#"&546326326324'326%4&#"326>‹.l€W"!/KkXZez(?XZf?Uv_HZ`KVdž‚‡FB�8@CVv¡þÀpt<84<ýn3*+45*)4 ½[.K˜Z‰ &ŽFcŠƒc›cA8þ�p5D‰ZF^HKe�f‹¹NN&&«¢rcRƒDeg,;:X<<YÿòM.!z²+´7+°/±é°/´7+°"/°Ö°2´1+°± +´1+°2±#+±°9° µ$9°°9±²999±²99901%#"'732654+"&54632&#";2M‰g«Y1B�B`ybXq‰hªY1DŽA_yhVlžTX]5J31IOLUW]5J31NLYÿóš.P²+±é° /´7+°/°Ö´+°± +´+±+± ²999± ³$901#"&4624&#"326š«wv©¨îaYX}~WX€‡ì¨¨ì§þãX}}XW}}Wÿð 40œ²+±33± é°)2°/´7+°1/°Ö´+°± +´<+°±#+±&é°&±,+´&+±2+± ²999±#°9°&°9°,²./999± °9°¶ ,$9°²$%.99901#"'#"&=4&#"&546323265332654'7 ˆow:9qhƒI>M\„*¡‚nfsNE9KTU9KY}(£y¤XX€dhDc„[›D8WÂ|©“rUFQN;^þ¢7RyW¥G;WYÿò4.7CÙ²+±33´)7+° 2°//´A7+°/°;3´7+°52°D/°Ö´+°± +´+°±#+´&1+°&±2+´>&+°>±8+±é±E+± ²999±#°9°&°9±>2°9°8²)/5999°±+,99±)°9°/±99°A² 999°²,2999°±$%9901#"'#"&54'&#"&54632326533267#"&546324&#"3264¡‘F?hgp bLS#¡zs‡)K=8LPoGYi J)EZbKZg`;()44'*;:‰¿RQzjŠ%a‚^–D:VÀƒ¢t:¬@WX:Qþ�;H‚b,dHKcŒ )<9+*?=Wÿò..2>ײ+° 3²#+°3´<7+°6/´++°/±33´(7+±,022°?/°%Ö±9é°9±3+´ &+° ±+±é°± +´ 1+° ±+´&+±@+±9%±99°3±#99° ±(99±°*9° °,9° °.9°²0999±<°9°6² %999°±99°±*.9901'654&#"#4&#"#4#"632#"546326326324&#"326.¢'|^RnPK>=HU¦TrY]Hµ£…xB;xo?3lo†ü61)*34()2ÍW=C¦[s‡þ¡_?IJ>þ¡_‡ŠYF`FKf÷‹ºMMKK ð,=:,+=:Wÿòº-(3©²+±33´1++°/°3´"7+°&2°4/°Ö´&+°±+´/&+°/±)+± é° ±+´&+±5+±±99°/±"99°)³ $$9° ±&99°±99±1±99°¶ ,$9°"°$901'654&#"#"&547&#"&546326324&'326ºŒ.m�X$0CrQZiy#(Yyp1‹µ…M36[w¡þ¿A.1Du4; »]/L–Z‰ %“MY‹�c¡a †]—L.[½¤**ª¬Cz !xD `W7. ^²+´++° 2² +³@ +°/´ 7+°/°Ö´1+°±+´1+°± +´1+±+± ° 901)33546324&#"7ý Q«ŽceŽPaBA_&þýc‹…bþüBabBÿYÿój-(“²+°3´ 7+°/´C+°/´!C+°)/°Ö´+°± +°2´&+°$2² +³@  +±*+±°9° ³!$9°°'9± ±99°²999°±'99°°$901%#"'532654+53254&#"&54632jhKN""0->qZYrV;l~9F;£Ž[…/M“GYI 2+XIO-0ˆph{�¬WL&G Yÿò .$Z²+°3±é°2°%/° Ö´1+°±+±é°±+´1+±&+±² 999°°9°²!"99901#"'#"&54673265332654'7 �sr25lo�_N&ƒfQ.?TI4Nd„(M_y¤ST£uf™%=?­VrQ3`þ 5OyTª==$–Yÿò .$v²+±33° /°3´"7+°2°%/°Ö´1+°±+´ <+° ±+´&+±&+±²999° ° 9°²"999± ´ $901'654&#"#4&#".54632632 ]O%‚dS1>RI5Nc‰-M`’rq33mp�h˜%;@®WtK5þšf4JxV­?8%•ex¥NN¡9ÿò .(4·²+²+°3´27+°,/´++° /°3´&7+°"2°5/°Ö±/é°/±)+´&+°±+´ <+° ±+´&+±6+±/±99°)±99°±"99± °$9°²&999±2°9°,²999°±99° °$901'654&#"#4&#"632#"546326324&#"326 ]O%‚dS1>RH3W�Y]HµŸ„r33mp�ý¦1)*34()2h˜%;@®WtK5þšf4J‰XF`FKf÷Œ¹NN¡ï,=:,+=:YÿüW –²+° 3´++²+´+² +³@ +´  +´C+°/°Ö´ +° ±+´&+°±+´&+² +³@ +±+± ² 999°°9±° 9°³ $901)'654&#"&54632!3WþIS98UH!o€WX€N/%U7LK5R!=8xTuqX92ßYÿüw-' ²+° 3´++°2°/´++°#/´7+°(/°Ö´ +° ±+´+² +³@ +°±+´'1+°'±+´+±)+± ² 999°°9±'°9±± 99°³ $901)5654&"&5463235463254&#"wüüLWtVK!o€W[{¶„haŒJ_DBZ*(W8OK9V#78xTuqXH#ühˆŠ`þþþDcdCþWÿó³--7ê²+° 3´*++²+´6C+²* +³@*, +´1, +´++°/°3´!7+°%2°8/°Ö±3é°3±.+´&+°± +´ <+° ±+´(&+²( +³@ +°(±++´1+±9+±3°9°.±99°±!99± °#9°°%9°(°*9±6°9±1*´.3$9°±(99°°#901)5>54&#"#4&#"632#"54632632334&"26³þW3FXJ5=SfE[k]GUaI¯£‰ADQz€GØPü¯0R31R2/$�ITuH8þšm9@€cF_JId듼II›…vVßþ},<;,+76Yÿí„/8·²+°"3´7+° /±6é°32°//°,3±é°2°/´'7+°9/°$Ö´+°±+±1é°1± +°2±é°)2±:+±$°"9°±!99°1°9° ·',6$9±±!99° ±99°6°9°/²$1999°°9°±)9901%#"/324#"#"&463232654&#"&54632#"&#"32632„je^=@qjJ H /BI-:]=t}0G3¨”îT8 2 ?? 8 5SgA3PZB\H'$�xRŠ„‰�¥•2A)(GWt.b²+´++°/±é°/°Ö´+°±+± é° ±+´&+±+±±99° ° 9±± 99°° 901)5! 54'4#"6týã L�>fEVGDHÓû3þÓ¾¾ÎdS›5)n€Y¹…Zÿðþ-*6¨²+°3´++°52°//°#3´ C+±22°7/° Ö´2&+°2±-+´&&+°&± +´1+°±+´&+±8+±-2° 9°&²5999° µ+$9±±99±°9°/µ ($9° °901"'#"&5463263232654'74&#">&54#"32þ³’Y (_™ÆaTc-7}Vv†d‚V=gþÑFDAG†8Tá~a.8—q.�­ ·”dŒNN‹[°`•i{N3c�QfbL›Ex¯eŸ§kXZBPZ¶‘L‚\FIþ}+! ,.!*–BT'!%DH@‹TSJH+ WI8U=?MmW€Š#Tš½(-J‚2T/<,Z=*(W8OL8T":9wTuuTE&‚hW?^¤}þ è"D‚W07"6EWÿð3.˜² +²+°3±'é° /°3± é°2°//°Ö´&+°± +± é° ±+±$é°$±*+´&+±0+± ²999° °9°° 9±*$²,-999±' °9° ¶#*$9° °,901#"&=4#"#4&#"&5463263232654'7utlw“yVP?LZ�-¡‡o€74jo„IBNM�+®†Ÿ�tZ“‰þ¢^?L|V§B;YÊx¤LL{jeJ^{b¢@7TYÿ÷{..Ʋ+°3° Ö´&++´+´+°/±!é°/´,7+°//°Ö´+°±+´$+²$ +³@ +°$±)+´ 1+² ) +³@  +° ±+´<+±0+±²!999°$°&9± )°'9°²,999±&±99°· $)$901'654&#"!5654&#"&546323&54632{´!‚kSWqB0þ]HR:9SF!m�T\y­A xsž ÉK>=™Y€wYJˆ1*_8MJ7U%<7SztYH"PƒyŸ«eÿ8W T²+°3´++² +³@ +² +³@ +° /°Ö´&+°±+´&+² +³@ +± +0133!!#5eN¤þ¶N þ!AÈÈUþÔä圲+±é° /±é° /±é° Ö°3±é°2°/±+°6º?;ö+ °°À± ù°À³ +³ +°³+³+³ ....· ........°@±±99±±9901&#"70#"'732757632äG32úmm`dNC3‰‚:DOnYjmƒ¢tf9WÛÎO<\všÿ“Ê-L²+²+±é°/° Ö´&+°±+´&+±+± ° 9°±99±± 99013#4'"#&54632ÊMN!0 PVFDW�Q1B!EXQCÿoÊ,o²+²+±é²+´  +´++°/° Ö´+°±+´+°±+´&+±+±° 9°±99±² 999013#4&##"&54632'4#"32ÊM0-#?(,AbI°É%&&%}/6()>B,?K©..+HþÖt.s² +´+²+°/´+° /°Ö´+°± +´+³ +´+±!+±±99° ³ $9°±99±±9901#"&54636544&"32tVCBQH1)T< Zs*1?99°$°@9±M@ *0EJ$9°²$499901'>54&#"#54#"&546326327#"&54632654'&534&"326ü    $ LJeJbQA:P/jxkL69 $ ¬9N7>"(6‹# # GG "($ #]mYGBTW:GjB�sEf€’E +%*A+21,";1YÿöÊ-'…²+°3´&7+° /´++°/´7+°(/°Ö±#é°#±+±é°±+´<+±)+±#± 99°±99°±99°±99±&°9° ´ $901%'654&#">32#"&546324&#"26ʧ*~€fb… O/JhkQai¯Œ‡¯þ¹9*+<=T9ý³T:@�fƒ‚a!*cHM`†mŒ¸«â+>=+*::Vÿð/#'/ž²+´7+°*/´!++°/´$7+°/´ C+°0/°Ö±é°±+°2´,&+°&2°,±(+°$2´+° 2±1+±,µ $9°(±!99±*².999±!±99±$² %99901%#"&54632#"&547'7&54632&4"4#"32kL}��{MjB42F!HUUH!E34BJXX,**,�BO�‚�ŸQD2>>0($€VW€$'1<=½VVð..-ÿÿYÿö|-'IJÄÿÿýÿó-&½ÄüÂÿÿýÌÿð/&½ÅývÿÿýÿóÔ.&ÌÄüÂÿŸ-Ûé4°/´ C+°/°Ö´ +° ±+´+± ±9901"&54732654'3Û\„\I2H2HÔDccD &88&:@ÖÜ 5²+´ +²+´ +° /°Ö´ +´ +± +01#"&4632Ö+" // !,� --@/-/ÿóÔ.&®²+´ C+²  +³@  +°/° 3±é°$2² +³@ +°'/°Ö´&+°±+±é³+´&+°/´&+°± +±é±(+±°9°²999°°9±°!9° ² $999± ²999°°!901#"&'33254#"54#"#&5432>32Ô�~ZtOk½‰)9XZ:*KÁQ(>?bn…¢[L^ÛÈ9*bYnHK'5×C'ŸWÿa.1=ITvu²e+°^3´p+°t2²n+²v+° /±Pé°X/±ak33´Y+´j+°L/±$é°/°)3´G7+°;2°A/°53±é°/2°w/°Ö±Dé´"+°D°N Ö´<+°/´N<+°D±m+´g+°g±> +´&+°±b+´a+°a±,+´8+°8±\+´U+°U±J+°22±é°° Ö´&+°&/´+±x+±mNµAG$9±g³ejkp$9±ab´$LP r$9±8,³XY^t$9±JUµ)/5;$9±eY¶JNUgm$9°p°r9±$L³$9±AGµ&,"$901#".5475.54632#"&'! 5#"&546324&#"326%4&#"3264! !2>'#'2654#"#54#"&54632632aWFŠBp|FGxm>‡LTdXDZVA*D 9= D,@SYETed1'%23$'1þi0&%43&%1”þàþé0\\8a;  &<@"9"YJ/'%-KTV† z5L)(M5z]_y^EC\1#¶¶%/^CF[}#&00$%84'&00$&76þlhhn --.  TT  (3#%%Yÿ½.=IT²+²+°/3´H++°S2²+°/´++°M/´)++°B/´+°#/°3±5é°92°U/°2Ö±Pé°P±K+±,é°,±+´&+°±+´E+°E±>+´+°± +´+±V+±P2±%&99°K±)/99°,±#599±°79±E°99°>µ$9°± ;99±°9°°9±MH@ ,2>E&$9±B)± @99±#±7;9901%#"'732654'#"&5463&#"#4&#">32#"&546326324'&#"32$4&#"32½¨…TD:?eƒ^[T_u^e>NOR@^| L0JhkQ`j¦Ž†*'€žIq�ö& GT62sý¼9*+<=*+y�Ë.>+£rÉ%8Hj‚p[c‡9H=þ¡_=Hƒ^")bIN_ˆk�¶WW� ¦)XAbJ9M;V>=+*:ýqþÌE.9?â² +´3++³ 3+´<+°/°!3´8+°/°3´'+°+2²' +³@ +°@/°$Ö´>+°>±:+´+°±+´+°±+´6+°6±/+´+±>$°9°:±!99°±'99±°)9±6±+99°/² 999±8°>9°<µ$/6$9°3°9±'°)901#"&547632&#"#54#"632#"&546326324'&#"32%4#"2LB5> &?KADf+@ %/?A3>>oY^dX=<@# +:Kþ_24f…JdJ:>,2,$ãæM>*A03DZJ[z;::9a!3!L3324'#"324#"3 lW52$* %0>A2>>nYS(A‚EU­ !1:þu253F_‡!5dD.M #�R57a2"äèO>-A13E\J\|> S q5%@$2v:<Mÿò¯!X²+´7+°/´C+°/°Ö´+°± +´+±+± ² 999°° 9±² 99901!"32654'3"&5463!¯þ€JUVIKVPa2yÒ{ƒrmØxUV{zWpBLfw¢¢w{›#ÿ6µ1i²+±é°2² +° /´++°/±é°/° Ö´+°±+´&+°±+´&+± +±³$9±° 901!";#"&546;546254&"µþX2&¨³>WO;@ƒÀ…KZ€X?!$EN<;OöcމbüøCbdCöMÿöü-t²+²+±é°/´C+°/°Ö´ +° ±+´+² +³@ +² +³@ +±+± ³ $9±± 99°³ $901)5654&#".546323üþ±spYXoRC/M\œwu‘Ká:FŒ\|~]Ry1"�b{¨¤z‡>Uÿò-)�²+²+° 3±(é°/°3´++°#2°*/°Ö´+°± +´ &+° ±+´&+²& +³@& +²& +³@ +±++± ²999° ° 9°°#9°&°(9±(±99°´ &$901)5654&#"#4&#".54632>323þ±sXE8JLF1LcU>4IZ‡m5Tb:e{DØ:E�S…P:þ¦Z6X€SQƒ4&–bv§4)(5©uoVUÿðš®!‚²+° 3±é°/´7+°2°±é°"/°Ö´ +° ±+°2´+°2°±+´&+±#+± ± 99±°9±° 9°² 999°°901%#"&5&5467534&'326šUIELZx_4o vImyKPK&#'+ÔZŠ~W’a~H3`ž~¹‚ˆ»‡fŒþî4YbPÿ(¦»:¶²#+°3°2/±é°/±é°/´(++°/´87+°;/°5Ö´ +° ±%+´ +° ±+°2´/&+°+2°/±+´+±<+± %°#9°@ "(-28$9±/±99±#³"/$9°±-599°µ %+$901'654&#"32654+532654&#"&54632#"&5432¦T:DÁš Ê?�dXwi@@1:U?_t2@7œ|^€ML¥y²ÁïÅ·ë�‚"p‡�Ìܧl©kaQtN?2=M�gkv†�€¯pYu #‚o‰ûÁÏñUÿ'½1;¬²+±)33°/± é°"/±33´/C+±4922°54&#"#4&#"#4&#".54632632>32½]­j49*/UŽLXX3CMH43KLE2K\M>4IZ‡m4V#z*P5v€ßqÉ~Fj¦\q˜R7þ¡k4IJ3þ•_5T}VT�4&–bwª4'[[(3ÂSÿ'¨-#-�²+´-7+°/± é°'/´++°/´!C+°./°Ö±*é°*±%+±é°± +´+±/+±*±99°%´ $9°±!99± °9°°9±'-´ $901%#"'732654&#">32#"&546324&#"2¨`¯k55),‚¯}hay I-GabO]b¤†…¦þÄ4():9RárÊ~B Ü�p–b!*cGO_ˆkŒ¸¿øT?>*);Uÿ'@-%š²+² +±"é°/±é°/´++°&/°Ö´+°±+´ +² +³@ +° ±#+° 2´&+±'+±¶"$9±°9°°9±" ± 99°³ $9°±$%9901!#"'73267!5654&#"&5463233@‡-8*-]Š þÅssWXq‘)§›vu‘OØKduEJC:FŒ\‚ƒ^¨65LÈ{¨¤zˆ=ÚTÿð­'1®² +²+°3±/é°/°3´C+°"2°°% Ö±+é°2/°Ö´&+°± +´ &+° ±+°"2´,+°$2°,±(+´+±3+± ²999° ° 9±(,°9±/ °9°+³ $9°° 9±%°!901%#"&5#4&#".5463267534&'326­"J2II6=KF1K]K=2IY‡md82gJmyJQK$%(+Ô9fE}XG:þ¡_4QzUT€5%—bv§]YÖÜ»‡e�þî>O\,ÿ'Å4+t²+°3±é°$2° /±é°,/°Ö´ <+°2° ±+±!é°!±'+´&+±-+± °9°!°9°'²)*999± °9°°9°° 901#"'#"'#"'7326733265332654'7ňow:9qZ?‡-8*-]‰ RNE9KTU9KY}(£y¤XX2%duEJC%þ¯FQN;^þ¢7RyW¥G;WUÿ'v1.‰²+° 3°/± é°/°3´&C+°,2°//°#Ö´&+°±+´&+°± +´+±0+±´ &$9°² )999° °,9± °9°°9°´ #)$901%#"'732>54&#"#4&#".54632>32v]­j49*/UŽLXX3CMD2K\M>4IZ‡m3VQ4v€ßqÉ~Fj¦\q˜R7þ¡_5T}VT�4&–bwª3'(2ÂYÿò*bKû²'+°23²+´++² +±Fé³*);8‹)Yx]”PKcL=þ¡_6U}WU€4$™cy¦YYŒk I-GaaO]b>°j ]²+±é° /´+°/´+°/°Ö´+°±+´ +±+±² 999±° 9°±9901"632#"&5433254#"jý‚d()?B,?K¨D$&&$ NZ">(,BcI®ì..,Wÿò„ Aï²(+°3´7+°2²6+´;C+´"(; +´++´.(; +±.é°B/°+ֱ鰱+´%&+°%±+´+°± +±é³> +´3&+°3/´>&+±C+±+± 99°±"(99±%².9999°°89°3¶ 16;$9° ±@99±¶  %+$9±"± 99°.±1@99°6³389>$901%4&#"26%4'267#"&547&#"632#"&54632654&#"'632e3(*23P4Ë\z;b9TjTScƒv§Á]EY^HSbãÑ0}$/ 96/2sGM/tž+?;V>&+°>/´I&+±N+±3±'(99°±*099°-±%699±!"°89°°D9°²:C999°>¶ CDI$901%4&#"26%4'267#"&547&#"#4#"632#"&54632632654&#"'632e3(*23P4[\z;b9TjTScƒ56GP¥Ts]EY^HSb¢†zA5mP3$/ 96/2sGM/tž+?;V><Yÿòâ6@à²+²+°3´>7+°/° 3± é°$2°+/´07+°A/°Ö´<+°±+´&+°±+´;&+°;±7+´<+³37+´(&+°(/´3&+±B+±² 999°°"9°°.9°;² $-999°(¶&+09>$9°7°59±>°9°µ"9$9° ±&599°+³(-.3$901%#"&547&#"#4&#".54632632654&#"'6324'326âiSTe„A0AOK5NbQA6Ma’sq33sL9$/<6.6pGL-sR^x9319Û^Љ`Šs R4þ¡_6PyVU€4&—cx¥NN!,!8:-UZL7:b®ŠPbvAcbYÿó¼'1º²+°3´/7+° /±é°/´!7+°2/°Ö´ +° ±+´,&+°,±(+´1+³$(+´1+°/´$1+±3+± ²999°,² 999°¶!*/$9°(°&9±/°9° ´ *$9°±&99°³$$901%#"&547&#"&54632654&#"'6324'326¼dSQb�0jƒd7w©ŒG9#.;3.3nFQ3nPZs6016Û`ˆŠ_‹r ‘nwK0_–�¶!,!89,U\J-Da¯ŠPawAcaWÿòZ<R[²+±"33´P7+°Y2°/° 3´'7+°+2°2/´77+°\/°$Ö´&+°±+´W&+°W±S+±é°±+´M&+°M±=+´<+³9=+´/<+°//´9<+±]+±±!"99°W±'99°S³)$9°°+9°± 599°M°49°/¶- 27BP$9°=°;9±P°!9°@ $;BSUW$9°'±)-99°2³/459$901%#"&54>7&#"#"&547&#"&54632632654&#"'6324.' 326%4'326ZiSTd/ &*_Q?/KrQZi|/Yzp0Œ´†O0Jp|T)&!:6/6p’5zR  9319þrsqu3<Û^Љ`(?> $!$’FXŒ�c–f‡\˜K.\¼‡œ)-+#7%6:-U«9Gm�*4- Acb;VP…Ÿ_Yÿóì3=̲+°3° /±!é°2°(/´-7+°>/°Ö´1+°±+´ 1+° ±+´9&+°9±4+´<+³04+´%&+°%/´0&+±?+±²999± °+9°9² !*999°%¶#(-7;$9°4±2<99± ¶7;$9°!²#2999°(³%*+0$901%#"&547&#"#"&54726=4632654&#"'6324&'26ìfUTc„-¤~_lr¦1‡H’@�dH=#-9<+6oGL-qR'3{:d7Û`‡ˆ`|yÛ:_~œ}ÑU1C§\|W\QdŠ!#/!8A4UYM=:e¥OT.fi@caYÿò½-:BJV² +±33´T7+±8G22°O/±0C33´C+±,;22°?/´C+°/´$7+°W/°Ö´Q+°Q±K+±N22´E+°A2°E±J+°;2´1<+°1±.+´+°°' Ö´1+°/´'1+±X+±KQ° 9°E° 9°J³!"$9°1²5999°¶$*,8$9°.°)9±OT³ $9±?±)99°°9°³!"'$901%#"'#"'#"&5434632>7654&#"'63224+326'54&"#32654&5#"326½RGc'yv'bFSéi\Dm ($(3"@C)9yKTB>" ÒG},$)1ðElFùù9Aþ¿&|/)#,£NcQQQQcN©dK7*"1&"7C6UZL;C=-)¨_4(&6?Õ8OP7I¸^ZZ D_-?5<Ð(\²+´+°)/°Ö´ 1+° ±+´ <+° ±+´1+±*+± °9°° 9° °9°²%99901#"&547332>54.5473vuc…PPH-?!0::0P 19?2!x�{b0310IZ%BG+4N.%#(C, %+!07Z<0Ð#�²+´!+°/´ +° /´+´+°$/°Ö´1+³+´1+°± +´1+´+°±+´1+±%+± ±!99°°9±!±99° °901%#"&54635#"&=3;4&#"3260”ke��n� P ÃKbPWHJk\KJc×hoqc_q¹N%ùnQGPJGJQM<Fä'3�²+´1+²+´+³+°4/°Ö´.1+° Ö´1+°.±+´+°±(+´1+±5+±µ+1$9°°"9°(°$9±1´"+$9°±9901%#"&54>7654.#"#>24&#"326F–miž/(6!-%1,Pd˜N'++P\KQreHPmæj|~g#;*$ &/',T>blfM@,I0Ka^OH^X<óä2>ª²,+°03´+°62°$/±%é²$% +³@$ +°%´"7+°/´<+°?/°)Ö´1+°±3+´1+³3+±é°/±é±@+±)±$%99°@ "&,069<$9±"$°9°%°9°°9±<´ ).$901#".'.#"#.#"53.546326324&#"326ópX/M3 86v�(V47LfWY7=jWlP>:=E@<@>Ys#;I)*  `@¡\á2"  P0‰LY‚NN~T=YZ>=UR<ä"}²+´ +²+´+°#/°Ö´&+°° Ö´1+°/´ 1+°±+´1+±$+±°9± °9°³ $9± ³$901%#"&547332654&#"#&54632Ùo„ P QLJEG;DEPy^Zyùù‚o ))!Nf]LJ:?M@]e^W<ä%›²+´+²+´+² +³@ +´ +´+°&/°Ö´ 1+° Ö´1+° ±+°2´1+°"2±'+±°9± ° 9°´$$9±²999°°$9°°"901%#"&54733254ᒐ&#"#4632tif„PPH�4D<ð‚+ °.°À± ù° À³ +³ +² Š Š#9° 9µ  ......´  .....°@±%³"'$9°°(9±*³-2$9±-2±99±"(±9901%#"&54>7#"&546326324&#"264&"326ã‚dg{ -@B]oLGg 0CbX{þr9)*=:Z5>P„TSADPâd~zg-<M'YAJ[YF#¥Fl)2:*-6>þÂAGRBAX`P-ä)€²+´(+²+°3´+°!2°*/°Ö´%1+°%±+´ 1+° ±+´1+±++±%±99° °9°±99°°9±(±99°± 9901%#654#"#"&=46326324&"26-1P1\43}hovxmnF,rWOþ�NŽNNŽNþ‹_xc5„H6þÊk‰„pün†ZZnZþÄ$I[\HþÜI[\<2ä>²+´ +° /°Ö´1+°±+´1+±!+±´$901#654.#"#.54>322VQW$G01F$1&P$3:dABd9¤³ÝÇÉ-TR11RT-[ÜYVäV>n]77]n<ä$}²+´+²+´+´ +´+°%/°Ö´ 1+° ±+°2´1+° 2±&+± °9°µ "$9±²999°°"9°° 901%#"&54733254.#53254'5vigƒPQG‘0# \ADMP0!ïn�peI88CHW©#32<qr< aFc,\<oäD˲:+±>B33´+±22°0/´4+°E/°6Ö´1+°±+´+°± +´ +° ±,+´+1+°+±+´1+±F+±6±2399°²04:999°°<9° ±$>99° °@9°,°9°+²*B999±°9±40°$9°µ 6$9°:±<@9901#654&#"#54#"#54#"#&'&!"53&54>32632632o/Q0/0,2AXW@BUór�sa^w>£AYeLm€rZþÃ>TZA@V\Pä(ˆ²+´&+²+´  +´+±  À/´C+° Ö´+°)/°Ö´&+°#2°±+´1+±*+±´ $9°±99± &±99±°901%#"&54632327#"&#"6324&#"326„cg€PgT;@ -va?e\PXA?VSD@WÔasyfCeIP[Î>z]AZS?EZVPÆä"h²+° 3´+°2°#/°Ö´1+°± +´ 1+° ±+´1+±$+±°9° ±99° °9°± 99°°901%#654#"#54&#"#&5432632Æ1P1\34P43\1P1°X3/d¨ô‚^yb5„I5ÑÑ5I„þËby^‚(ÈLLÈ<ûÐ.‡²+´+°/´+°//°Ö´ 1+° ± +´#<+°#±+°2´1+°*2² +³@ +±0+± °9° ° 9±#´&,$9±²999°°,901%#"&547332654.#52654.5473û{\eƒPSCAH//(`:8QQ8P(=F=(S+(¾Zdkb#BMMA(1<0*"'B, '3?/KTÐ.­²+´+°/´%+°*/´++°//°Ö´ 1+³# +´1+°/´#1+° ±(+´1+°±+´1+±0+±#°9±( ´ %*+$9°²999°°-9±±99±*%² 999°+±9901%#"&547332765#"&547332654'5673sij† P RK5--8b7;J(B_PV"6/¶+Qåi|†k0)!Lh#$b–9)8A? M! 0 < H<ãÐ9а/°3´2+°72°:/° Ö´1+°±+´ &+° ±(+´)1+°)±+´1+±;+± °9°²02999° ±-599°(°%9°)²7999±°9±2°0901%#654&#"#4654'&#"#&5467>7673632632ãASD480"%P.29+$ZE{zŽ PNŠi` -A*J=VWlÞk_Uo;U"#L  ' F!K47t*ml€§64#X(,#K2/+$OnPÐa²+´ +²  +³@  +°/°Ö´1+°±+´1+°± +´1+±+±± 99°°9± °901%#"5332654.'3ŠbáP”DUPÐ`péçþ­VD$8+);<Üä2>Jܲ+´+²++´6+´H+ +´+´!…â&.1'%15Â+75'%/+„ä<¾²+´+²4+°93´+°2´.$4 +´.+°=/°'Ö´,1+°,±+´ 1+° ±+´1+°±+´1+±>+±,±$.99° ² !1999°² 4999°°79°²9999±$³ $9°.°!9°°79°4³'),1$901%#"&547332654&#"#54#"#"&547332>32632„')†o„ P QLIC -"*P 34;P*%( +Z>LùZNQ‚o ))!Nf^K]15."‡™> A47 $>N><ä7Cß²+´+²1+°53´;+°$2´A,1 +´A+° Ö´7+°D/°/Ö´>1+°>± +´1+°±8+´)1+°)±+´1+² +³@ +°°! Ö´1+±E+± ´,1;A$9°8°9°)±'399°´$5$9±,³ $9±A°9±;¶)./38>$901#".547332654.+532654&#"#"&46326324&#"326A8o›pDvWT hSXi-$<9/>>0&> zU[„~ZeC?3N`IÒ<ðä5´²/+°33´+°2°&/´+°*2²& +³@&! +°6/°,Ö´1+°±+´ 1+° ±+´1+³ +´!1+°!/´ 1+±7+±,±()99°´&*/$9° °19°!±399°°9± °9±µ ),1$901#654&#"#4654'&#"#.#"5&54632632ð5I.79/! P%$'9=LCBz|R PLni4sAq€h\b6;dQh,c_aO54&53 æi€PTLJEA^Nd#P#I2')Pïïxh*01N`]Lõ:_MD@AH1:I4 6 =ä"-¨²+´,+²+°3´+°2² +³@ +´ & +´ +°./°Ö´)1+°)±+´1+°±#+° 2´1+±/+±)°9°°9°±+99°#´ &,$9±&,± 99± ±99°°901%#"&5463254#"#4&#"56326324&#"26=‚zgŽ’ibDX?!P1#A6IO&-]ROPbGJ^a�`üz‚ldfn=ÑpI^`G/"Z3<OXPoä"-¨²+´,+²+° 3´ +°2²  +³@  +´& +´+°./°Ö´)1+° 2°)±+´1+°±#+´1+±/+±)´&+$9°±,99°#° 9°°9±&,± 99± ±99°°"901.#"#4&#"632#"&546326324&#"26oB#.P!?XDbi’Žg{�OR]-(MI6~^JGb`�aW!0G``GpÑ=nfdl‚z2Tb<<3þHPOFGPN<wÐ#.§²+´+°/´-+°'/´+²' +³@ +°//°Ö´ 1+³ +´*1+° ±+±$22´1+±"22±0+±° 9±* ° 9°³$9±² 999°-±#99°'´"$9°°!901'#"&547332=#"&54632537'5&#"32wpÛn‚ P PMŽOM;YU;E[PpppÀBD%5/!I/�Áïxm+*)!Pd®³9@9:E=±±\GHhO4!"PÐf²+´+² +´  +´ +°/°Ö´1+°2°±+´1+±+±² 999°° 9±°9° ° 901%#"&537324&#"32†^h|PÏ^‘^~PQ?BVT@?Ð\t„häþ�®wvœ~XQA@Z<<äIê² +´+² +³@ +²,+´!+°6 Ö´57+´B  +´B+°J/°)Ö´$&+°$° Ö´1+°/´1+°$±+´ 1+° ±E+´1+°2 Ö°G3´9+²29 +³@25 +±K+±)°'9±$· !&,$9° °9°2´/=B$9±9°H9±5B@ $')/9H$901%#"/#"&'332654&#"57'&#"&546327654+53232654'7/eCW5aÀ 8‰t—$'À~ #L'²78DùMQ9MTVH+7>-.? 5{©G.!E$?>AM_¯a+Fl&(cô*) 4<Ð7² +´+°/´+°"/´#+°8/° Ö´1+³- +´.1+°±&+±22´4&+°2±9+°6ºú$ÀE+ °*°(À±0ù°2ÀºõÁÀÓ+ ±*(°*°(À±0ù°2ÀºùRÀY+ °*³)*(+°0³102+²102 Š Š#9²)*(9µ()*012......µ()*012......°@±&.´ "$9°4±699±² 999°²999°"±99°#°6901#"&547332654춮춮.'&53$!?)EJ(Y†PU>9S4]a66ad0;JX4PVVþèò¤/9y°/´7+°/´'+°:/°Ö´4+³$4+´+°4±+´*+°*±0+´+±;+±4$°"9±µ !'27$9±7µ!$*2$901#"&54>7>4646<54&#"#&546324'326ò„c]�+922&'&)C \BF<I2F�¸gBD[HaoiZ%B-&  $48')*AK^k%.98Gm5(‹AL[þû–¤0=¤°"/´#7+°#´ +°/´;+° /°43´*+°.2°>/°&Ö´+°±+´8+°8±1+´+±?+±&±"#99°³ $*$9°8±,99°1³.$9°°9±# °9± ;´&,$901%#"&547.#"#.#"53&54>326324&#"326–lZMg1 -&BR_XVS C^[-YYk‚#T?ÙZkcM7,-":6C[00%'7-C!FO¡:dGEEtXAY`=QRþ衤"l°/´+°/´+°#/°Ö´ +³ +´+° 2° ±+´+±$+± ±99±³$9±³$901#"&54733254&#"#&54632¡dbQl,F,H7‚4>-9FdFKeKcjaP>=5E7I¨/@A:-4!&.FTUJþ衤2”°/´ +°/´+°/´*+°3/°Ö´ +°' Ö´"+° ±+°2´-+°2²- +³@ +±4+± '±%99±"µ $*0$9± ²999°°09°²$'-99901#"&547332>54򂂮&#"#&54632¡ÂRoFF9*:> '.8.5@FiQFg5.>(0ècQ@8==9G&&@0&<(2C)-6;5PUND1J ]Vä$0º²+´.+²+´+´( +´+´#  +´#+°1/° Ö´ +° ±+´++°+±+´+°±%+´+±2+± ³ #$9±+°9°°9°%³(.$9±(.±99°°9±# °9°± 9901%#"&547#"&54632632$4&#"324&#"326Vg^QpJ,A>QeIG^:2QLPþÕ9/.13*/ 9@B?D>?9Ú`ziQf¸(T>HZUF=”.{ì^=D0*9þøD]lF?Q^À¤'ƒ²+´%+°/° 3´+°2°(/°Ö´"+°"±+´ +° ±+´+±)+±"²999° ± 99°³ $9±%±99°´ $901%#>54&#""&546326324&#"326ÀSF&-:7@(n¶rv_Q=8SQcþ®C=GCCDE>äs])t89P429\wu\_t==nS=RXIFYg£¤F°/´+°/°Ö´ +° ±+´+±+± ° 9°² 999°°901%#654&"#&54632£;F;@xA;F;mVWk×pSNv?[\>tPUnWvvþ蟤+€° /´+° /´!+°'/´(+°,/°Ö´+°±+°$2´+°2² +³@( +° 2±-+±°9°² 999± ²999°!°9°'°901#"&547332>54&+53254ȔŸ!*, $L:Us F D<, '((A&C*BC2CUF9NI%cT@55@Ù°+/´,+°%2²+, +³@+' +°/±33´3+±7<22²3 +³@ +° 2°?/°/Ö´+°±+´+°± +´ +° ±(+´'<+°'±+´+±@+±/±+,99°² -3999°°59° ±%799° °:9±'(³&<$9±°9±,+°&9°´/5:$901#654&#"#54&'"#54&#"3#&)53&54>32632632-.F.,(SF'+(-F"&a7M*CRþßÿTqN:L!%V#>%TATMUKX+Dbhg4-5)le)<¯1M1&¸”:Q¦8bIII) I`£Ð'�²+´&+° /´ +°/´+°(/°Ö´+°°# Ö´+°/´#+°± +´+°´+°/±)+±µ  &$9± &± 99± ±9901%#"&5463254#"#&546324'&#"32£\]Zrm\K5urFiSP]F(&-@>A@xÑ_ruZ\y?´…„ R_]PþµX!!`CB[£Ð*‚²+´(+²+´+° Ö°3´+´! +´+°+/°Ö´+°±+´+±,+±µ $$9°±99±!(±99±°901%#"'&54632327#"&#"6324&#"326£k^F:=&%-A@Ó^u01}OIZCnÃ:w[B^V@d##]Œ¤(_°/°3´"+°&2°)/°Ö´+°±+´ +° ±+´+±*+±³"$9° °$9°²&99901%#654&#"#4654.#"#&54632632ŒI2K2:&%.3) $>0[%+þè¤.–°/´+°/´#+°//°Ö´ +³ +´+°/´ +° ±&+´+°±+´+±0+±°9± ±99°&´ #()$9°³+$9°°-9±±9901#"&5473325#"&547332654'53273ÂWgSr,F,E9ƒCX4V=;QE($!&,aK<>jp_R@;5E9G”­) 4;>B9$)("/H@ŒÐ1ˆ°/°3´*+°/2°2/°Ö´+°± +´ +° ±+´+³"+´!+°!/°3´"+±3+± ´&(*$9° °-9°!²/999°°9±*°(901%#654&#"#54&#"#&54>53632632ŒI+°8/°3´2+°-/´"+°A/°Ö´ +° ±+°2´;+°/2°;±5+°*2´+°%2°±+´+±B+± ± 99±5;¶"'$9°°9±² 999°>°9°8³ $9°2±'99°-±%9901%#"&547332654&'"&547&546324&#"3264&#"326¨³•�²KGL�xu„JT%IzKLLK;9O7q…ñ-%(0.(&.*%)2-*(+B—ý‘t{~sy¡®y]w(5>XW>Q)%W;SR9B.–&53R=@Ï%97)+7:þèQ¤<¸°/´+°#/´.+°/°3´4+±(922°=/°&Ö´++°+±+´ +° ±+´+°±+´+±>+±+&°(9°²#).999° ± 199°² !4999°²7999°°99±#³ $9°.°!9°³&+17$901#".547332654#"#54&#"#"&547332>32632Qqm;mL@cEQWK$$<#:%1=&F&#*(!T89#n‡+[=:/)@CNiSJR4&‹‹--+4+;0-$,%$))#@J9þ蛤.:Ú²+².+°/´+°/´8+° Ö´+°2/°3´#+°'2°;/° Ö´5+°5±+´ +° ±/+´+°±+°2´+°*2² +³@ +±<+±5°9° ³#28$9°/± 99°°%9°³',$9±²999±8°,9±2µ %*/5$901#"&54733254#52654&#""&54632632%4&#"326›xfh�A VIœz9A//[k jmPf53aDMm76þµ>65C?=;5=5E8H¨0$5u:N=Šþü ¤6“°'/´(+°2°/°3´/+°42°7/°,Ö´+°±+´ +° ±+´+±8+±,±'(99°³%)/$9° °29°³ 4$9°±99±('±%99°´ ,2$901%#654&#"#4&'&#"#.#"53.54632632 4F446.$ <'<6jT‚%u#VGj]2{[9AfZ(C:dI[ï=QDF8O"3aq9 eAf„ 'b1C ;,‰H[{+$Okþ衤$q°/´+°/´+°%/°Ö´+° Ö´ +°±+°"2´+±&+± °9°°9°´ $9±±99°°901#"&5473326=#"&5473326753¡a`So,F,H7D>>BJ\3F39/%C=5E8HWGâ2ZJPHEO0F% Ÿä$/�²+´.+²+°!3´+°2´ ( +´ +³+°0/°Ö´++°+±+´+°± +´+±1+±+±99±°9° µ !%(.$9±(.± 99±±99°°901%#"&5463254&#"#54&#"56326324&#"32¸dX\mjZQ4$", 1 1?),C='P>9F;@??@A?×Z}v][v:ù"-5-<22:=F)??T@þ?†]^BC]šä*{²+´"+°/´+°/´&+°+/° Ö´ +±%22° ±+´+³+´+°/´+±,+± ³$9°°9±"&°901%#654&#"#4632#6324&#">šKFKA9-S |Gi6#E95/þèZ¤6{° /´+°/´+°7/° Ö´+°±,+°2´1+°1±+°"2´+°2±8+±,³ $9±1³'(4$9±±99°± 9901%#"&5467332654&+532654&'&'.5473Z9.05•lŸšE9FAAx~Qk=;?B;<(*!F'77'Ë-< P4jr£XµJ[®e�›SOC,y??@;9?B?u=7.2518,#ù:v[]v{\yAS??)þB^]†]\þèÐ%/–°/´+°/´.+°(/´+°0/°Ö´ +³ +´++° 2° ±+±&22´+± $22±1+± ° 9±+³$9±² 999°.°%9°(µ!$$9°°#901%'#"&54733265#"&5463237'&#"26wYmQl,F,D9H<3Z=TU@J?=5E9GSKKP=?NP|þ~�TonoY6#&78£ÐQ²+´+°/´ +°/°Ö´ +° ±+´+±+± ³ $9±± 9901%#"&537324&#"2£mZRl<’N_]kF>@{7‚ÏZunRþ•£dw¡†`šF`þè�¤M̰ /´+°/´F+°/°83´*+°:2°N/°'Ö´!+°!±+´ +° ±I+´+³>I+´6+°6/´>+²6> +³@69 +±O+±!'± %99°· $*$9±6 ¶-AFK$9°I°L9± °9±F² 999°@ %'->L$901#"/"'5326549'.#"&546327>54+53232654'7�H/@&c‘+8V„HM0*5.$«P )11J9M#T¨5}Š$=,¼] 33<[.:OÍqB*@F#=.+)#+Iƒª$6779LI¯‚< 5!�Ç':$H¼Ð;²+´+°/´+°/´+°+´+°±+´+°/ Ö´6+²/6 +³@/3 +± )22°°% Ö´:+±G+±° 9°>°9±/²#999°%°89°°<9± °9°!±#<99°)· %8:D$9°*°,9°@³/6>$9°°2901%#"'&'5767632327654'&'53254'&'532654/54#"6XUC_�NC12+V-ËöJ3@3 P4E7E6/XmT/;8Hþ¤)1�¡X+"l[ 6lSy-•WþÇ@; 6 :+ 6)7@E5D8#>?*z3^EKDÿûlŠv²+°3´+°2°/´ +°/° Ö´+²  +³@  +°±+´+² +³@ +±+±´ $9±°9°² 99901&'567&5462'4&"6lWPQV1?iX�Xi=3A6`6ff 56jHZZHj6º3993Z..þî…x!s°/´+°/´ +°/´+°"/°Ö´ +° ±+´+±#+± ±99°¶   $9°°9±³ $9° °901#"&5467327654#"'7#5!632… (rN_$ 'D5NY$!„Ð*‹ …4r/=YL'6)/4A1"W—Ü4èþîˆÇ:Ų+²:+°/´+°/´+°-/´#+°;/° Ö´0+° Ö´ +°0±+´+³&+´++°+/´&+°° Ö´6+²6 +³@ +±<+± °9°0° 9°+·#()38$9±²999±°89°-³ &(6$901#"&54732654&+532654.54632'654#"ˆhXL^*!A1>FT<--%X5LL5NF"#A1g+ W´Ê(3�°/´2+°+/°3´ +°2°/°3´(+°2°"/´+°4/°Ö°2´/+°$2°/±)+± 22´+±22²) +³@ +°2±5+±)/±99±+2°9±"(°901##"&5476;5#"5476323#3'54#"35#"32´OUFN^2/S\\´0/MHSOOO†dr$FNNE$=5dxGUXMO,(H™M(&MEn4H|kaf>þÛu@5;ÿÿþèò¤ ŒÀÿÿ<ÇD ³FÀÿÿNäs8ä05wÙ:²+±é²+±é°/°Ö±é°± +±é±+±±99013!2#'32654&+5‹žŸŠ¼¬lppl¬ÙÂþ¬ÃR�Š‹�5ÿö¸Ù'Ʋ+²+±é²+±'é´  +± é°(/°Ö±é° 2°±$+±é±)+°6ºÂð+ ° °À±ù°À° ³ +°³+² Š Š#9² 9µ ......µ ......°@±$°9±°9° °9° °9°'°901%#".+#!232673264&+�)(=X, 5)p]-luE<<7 þÂCKKCÂVG-:;:-þËÙogHeaF65DxDÿê&Ù:²+²+±é°2°/°Ö±é² +³@ +² +³@ +± +01##5!7]ð<‡ýy‡RRÿéÈÙ,4Õ² +±é²!+±0é²0! +³@0 +²,+´+++°2´4% , +±4é°5/°#Ö±.é°.±2+±é°±)+±é²) +³@ +²) +³@)+ +°° Ö±é°/±é°±+±é±6+±2.³! '%$9°°9±°9±° 9±40´"#$9°%°9°+²)99901##"&5332654.#""&4632675#5264&"è0Dk@!ZLNNTF$-/S5?O9X~XX? 6u4Ë&6&&6ÙA~=]l9c‹sX~]B-UJ-><9gZoo´n„Aþf>>f=ÿé­å &‰² +±é²$+±é´  $ +± é´ $ +±é°'/°"ֱ鰱+±é° 2°±+±é±(+±² $999°°9°±99±±!99° °9°³"$901"32654&3254&#"#5632+ &632|tŽ�ts�ŽåN1 {=GLÀþÄÂÂ�Œ¹“¥þò¥¤„Цà:Oš1N ÓÓVÓ¤5’Ù6²+²+´+°/°Ö°2±é°2±é± +±°901#7#5’]]]ýúÓii*ÿé?å2ˆ²-+±é²+±é´- +°%3´++°#2°3/°Ö±é² +³@ +°±+±(é±4+±°9°· #&-$9°(²$%999±²(2999±²99901732>54.'!53&54632&#"3##".'{)˜-A";5,ÿ„nuz¢;N%m�3=%Ödi5oQ(KJ=žc2,ADYaWo)Je)$!AI\&=<";)$ÿéöå$.i²+±é²+°3±*é°//°Ö±-é°-±'+±#é°#± +±é±0+±'-±99± #³ $9±*´ #%$9°° 901732>54'7#".532'654&#"¥=E:CH:%•*&A>#Ò’/VSE4¼-@Û~0'ã2G!1HqDÚBJ6T~L¯æ-KeŽU'D_6å 0’JS[zN5¼Ùu² +² +´ +´+°/° Ö± é°2° ±+´+°±+´+±+±± 99°°9± ± 99°° 9° ³$90125#"'#37&' pA@3/c^^?iiBI�þúÙþœ]ÿé{Ù=²+´ B+²+°3°/°Ö±é±+±±99± ²9990174>732?33#"& G&Lòq¹¸oþ­&U@Ud-#, �åþ…{ý_OGÿêfÙ ,²+°3²+´  +±é° /± +± ° 901%!#3# ³þçMcxhepxÛÛÙý')Lþ´ÿëÿé„Ù?² +±é² +³@ +²+°/° ֱ鰱+±é±+±° 90172653#"&=3·@0]o_^m_87TMýÝ_nhY@/@D5@Ù J²+±é²+±é´  +± é° /°Ö±é°2² +³@ +³@ +³@ +± +01!!!!!’®ýõùþd�LúRÙRéR æÙ"›²+²+´  +´ 7+´ +°3±é°2´ +´7+°#/° Ö´1+°±+°2±é°2² +³@ +±$+±² !999°°9± °9±± 99°±!99°° 9017###"&463233!$"32654©ÔiþÃ]) L42L )]=ýÏ8###{ûûþ†{2A]€\B2 þô-3"#32$#äås²+²+± é²  +³@  +´ +±é² +³@ +°/°Ö±é°2³+±é°/±é°± +±é±+± ± 99± °9017#32>54&#"#4632¾^^&C@&\C3MTv`o…3XcÍÍ~`%J5cdV>jwކFi9ÿãÿé¢ð.9(²+°3± é° 2°/´/7+°3/±)é°:/°Ö±é°±+± é° ± +°02±,é±;+°6º?°ù­+ °"°%À±ù°8À³8+º?¬ùˆ+ ³8+°"³#"%+³$"%+°³/8+º?¬ùˆ+ ³98+²#"% Š Š#9°$9²89°99·"#$%89........@ /"#$%89..........°@±°9°±99° °9° ³)3$9± °9°³$9±3/°,901"&473327!#"&547332>32!4&#"Ò;LO,fþÝ %=)7 327&54623267#53##"'7654."Ëbl$<   ?0+/wgªgw/*2@6Â/ ehRLMM_bI 6) H   ,.�»«ªª«½KIAAb„11Ÿc¥<_7$ $7_<¥�Ù u²+±33²+² 333° /±+°6º=Áï2+ °.°À±ù°ÀºÂaî¸+ °.±°À± ù° À² ...¶ .......°@01!# #333Ôf¨£f»h‰¢d¦†hWý©Ùý°Pý°P ÿé7å2{²++±é²+± é³++°3/°1ֱ鰱+±"é°"± +±(é³( +´<+±4+±"³+$9° ² %999±´%(1$9° ±"990132654.'&54>32#4&#"#".54&Á%1(BJ 2:"B+U[S,%Y(88(pq AL9&™%’*?"LI+.6Q*4 !2(]l5BR!D=CZ2`‡ !5]<½2ðL²+° /±é°/±é°/°Ö±é°±+± é² +³@ +±+±°9±° 9013#4632#52654&#"�]‰c)MH+p\58S8CK#\q.W32#.#"32654&'#53gKwG/0GyLî+_^Wj{€m^aHSFF~}At3Ni`12bjO4îNN¢Œ‰¡O:A=QìIo_(KA'5ãÙ F²+± 33²+°3° /°Ö±é°± +± é±+± ±99±² 99901!##33#¾bÏX�ØÔ�Xcý�Ùý…{ý'cñð`² +° /±é°/±é°/±é² +³@ +°/°Ö±é°± +°2± é± +±±99° ±99±°9014>32#5#"&+532;4&"+HL*c‰]�SU}%%YK†H;W,q\ýÝ–`R$GZD@ÿþÿéSÙBµ²#+´ 7+²4+´3++°62´:#4 +±:é´?#4 +±?é²? +³@B +°C/°&ֱ鰱 +´<+°±+´B1+±D+± ¶#).234$9°±799°´56:?$9± ¶&)+,$9°:².0999°°9°?°=90132654&%4&#"#"'#"&5467'63267#53#32>32"  439³++"6 X'>F9>)PW-*b67J² C 3Â6(!#4!M\k'2P) -CZ"d”*%,%R,.#‘6D\-hBHf7P>j_pAA=R&/&ZBÿé‰å|² +²+±é²+²+±é´  +±é°/°Ö±é°±+± é°2° ± +°2± é±+±±99° °9± °9°±99°°901463233###"&"326&¯ž�«x^^v±•Ž»Mt|~qr}}a³Ñ°—;ý'L¢ÁÚУ�‡¡¢¢5fÙ ?²+° 3²+°3´ +±é° /°Ö±é°2°± +°2± é± +01!#3!3# þ‰]]w]]Lþ´ÙþÅ;ý'ÿéÖÙ„² +±é² +³@ +²+´++°2°/° Ö± é° ±+±é² +³@ +² +³@ +°±+±é±+± ± 99°°9°² 999±°901##"&'332654&#"'675#5E0Yh}k^pTkENMDMH'V4ÙA€˜u•k`~j]bo<,G‚A ÿé§Ùa²+´B+² +°3´ +±é°2°/°Ö±é² +³@ +² +³@ +±+±° 9±° 9° ° 9013#32?33#"&=# ÔC&Lòq¹¸oþ­(S@U8T8 �åþ…{ý_OG4JÿéÝå e²+±é²+±é´ +´7+°/°Ö±é°2°±+° 2±é±+±³ $9±°9°°9°°901#"&632.#"!26ÝÀ žÂÂ� Á^‹pm�ýþ ‹ÔŒa¢ÖÓVÓÔ�}•–|Fu‹Œÿ~æÙ}²+±é² +³@ +² +² +°3´ 7+°2°/´7+°/°Ö° 2±é° 2² +³@ +² +³@ +°±+°2±é² +³@ +±+01!535.=#53533#353æþá¡‘@@]¼¼8HA]‚F<[söFÍÍFè09 �ÿé·å$›²+²+±é²+±"é²" +³@" +´  +± é°%/°Ö±é°± +´ <+² +³@ +° ° Ö±é°/±é° ´+°/±&+±²999° °9± °9° ±9901326=#5!#'#"&54>32#.#"{$9^ìôM+ °°À± ù°0À³0+²0 Š Š#9´0.....´0.....°@± ° 9±-³ !($901#".547326767672#.#"56 H,/B N>>-b   ¡[Ž "ŠþÍ;3)''*9g�)h $0=þ,Š M+2 Y5Ù9² +°3²+´  +±é°/° Ö± é°2° ±+±é±+0132#54+#’ f‡]©‡]Ùþí„VìÒ¢þŒÙ;Ù ,²+±é² +±é° /± +±°9°°901!!5!59þL¶ýÕ¶þfÙTýÍRR5R ð!l² +°/±é°/°3´++°/´++°2°/±é°"/°Ö°2´ +°2°± +°2± é±#+±³!$9° ±9901#53>32#5#".'#53#;4&#"ÞÂ2 OZ4c‰]�3YN 3Â.mŽKCpGAA>Pq\ýݲL32#"'#"&54>7327&546zDUKˆ‹LJ4_'CI)ClE./`DbDAUqx+$BI3)-Š=ED]‰Ã?E?jg;44z{'C2I8$GZ&6K'hÿéÀå*9±²!+±3é²+°3±'é°2²' +³@' +´ ! +´)+°:/°Ö±*é°*±#+±-é°-±8+±é°±+± é±;+±-#²!'999°8±%99°± 99°³ $9± 3³#-8$9°°9°'´ %+$9°°9014632632#"&'732654&#""&547&#"72>54`HC<"7> BQ/.WH¢Hb!4Ì@  Ô‰ˆ11mXZd.18#%51C}¹³¢¢³Áz`_`_—=^8# #8^=–ÿørå1�²+²+°3²+±+é´  +± é´/ +±é°2/°Ö´+°±)+´1+±3+±)³ !$9±°9° ° 9°/±!$99°¶%)-1$9°+°9°°901!##"&'732653332>32'7>54#"#"'>dÁ#[CZA5(#*d¶c0 3?„,  1 2?: EkNB#18hMý›eY23h!3E  32& ÿéð?§²&+°"3±6é° 2°/´=B+°/±é² +³@ +°@/°)Ö±3é°3±:+±é° ֱ鰱 +±é±A+±3³&./6$9±:°89°°$9° ´"=$9±6&°$9°µ)3:$9°=± /99°°.901.#"324&#"#4>32#"'#"&54>7327&54632GN#*e;ˆ‹LJ4_'CI)ClE./`D`H@Tqx+$BI1'H8(P3-"‡?jg;22z{'C2I8$GZ",=no9$ÿé>å6š²&+±é²4+±é´&4 +±é°° Ö±é´ &4 +±é°7/°,Ö± é°2 Ö±é° ±+± é±8+±@  &/4$9° °69±± 99±± ,99± °/9°²2699901&#";#"32654#"#5632#".5467.5432Êx™]A8LBa$O8]ID:2)>[*DE0Ag>(E=81ù¹/GPg,IRf0.3 ,+Q @3+=%"3D=?l85„2ÿébÙ I²+±é² +°3² +´7+°/°Ö±é° 2°±+°2±é±+±°9013#"&53!!3265]™€‚•]vþŠeUXdÙþn‚�oÍFíOOTJÿélð*2¦² +±!é²+±.é°2/±é²2 +³@ +°'/±é°3/°Ö±,é°,±0+± é° ±+±é°±$+±é±4+±0,²999° ²*999±° 9°$² '999±2.µ  $9°±$99°'±*9901>32#"&'"&463275332654&#"264&"è2¤K³°šŒew +W~XX?2N1_7'YoŠ{;}#Ó&6&&6l@DðÌ“¸sjZmo´nG>†t"0H-"���¼26þ­f>>f==Ù \²+²+´  +°3± é°2°/°Ö° 2±é°2² +³@ +² +³@ +±+±°9± ± 990133##!%5=]��]þÃ=Ô_zþ…Rþô Rûû5UÙ :²+± é²+´ +±é°/°Ö± é°2° ±+±é±+01%#!33232654&+U‚dþÆ]¥–ˆþ=Ô@RQAÔâcÙþêxf“R=@PÕÙ‘²+² +´ +±é² +³@ +´  +± é² +³@ +°/°Ö´+°±+°2±é° 2°±+´+±+±°9±° 9±°9°±99° ° 901"&533273632#4#"#�A:I0,^'A:I0*^'LLNnþÎLLNþ¨ÿè›â =G˲+±é²#+±Cé´43# +±4é´-:# +±-é°H/°Ö´1+°± +´F1+°2°F±+°@2´1+°&2°±7+´01+²70 +³@73 +±I+±F±99°¶#>C$9°± 99°7±-<99±3³$9±:4´ 0>$9°-´& )@F$90132654&7"&54>7.54632>32#52654&#"'654&#"|13($Uz.<S`Mši.*@78G9B@ 6M\XE ,++:KR(02@3'#<Ä&* ^6HftR0L6"-R3;UV>ZB;SQ"*1<@!*!%J5FÙl²+°3²+± é´ +´5+°/°Ö± é° ±+°2±é°2² +³@ +±+± °9±°9°°9° ±9901!4&'5254&+#!2å­f?8™KCÂ]-luOC•wÅ _€:cniÊcýddÙý—)@²²þÄþÓiý' ÿé4å5”²0+±é²+±é´')0 +´'++´0 +´++°2°6/°Ö±é°±+±(é°+2±7+±°9°· &)0$9°(²999±)³+5$9°'° 9°°$9°±9901732>54.546323!53&#"3##".'p)˜-A".JYYJ.uzPq7ÿm$W�3=%Ödi5oQ(KJ=žc$=-,-3H*aWXFAAPe)$!AI\&=<";)ÿéŒÙo² +±é²+±é² +³@ +´  +±é°/°Ö´&+°± +±é°±+±é² +³@ +±+±° 9±°90152#"&5##5!3264&À\p"²+°3² +° /°Ö±é°±+° 2±é± +±°9± °901##535Ì`þÚ``&Ùý'Iþ·¹%Jû ïÙ M²+°3²+±é° /°Ö± é° ±+° 2±é² +³@ +±+± °9±°9015!##535m‚`þÚ``&…Tý'Iþ·¹%J§ÿóZÙ!²+²+°3°/±+±°901!#33]dþúdÖÊcÙý—i ÿé4å+Z²&+±é²+±é°,/°Ö±é°±+±!é±-+±°9°µ &$9°!°9±µ!+$901732>54.54632&#"#".'p)˜-A".JYYJ.uz¢;N%m�>]m]>5oQ(KJ=žc$=-,-3H*aWo)Je =-:9X3&=<";)#ÿéCä,7–²+´27+²!+°&3±é°2´,! +±é°8/°Ö±/é°/±5+±é³ 5+± é°±+±)é±9+±5/³!$9± ± $99°²&,999±,2³/5$9±µ $)7-$901>54&#"'654&#"#".54>32632%32654&�./4*/_W K,X0Uv2pY;X+>nI@dEXW^VMýî<.+E`° A)-CŽD*?4T `�Ls­bšZP�|I21clLHv�Kgl ŠTYÿûÿè¼æ3<E©² +°-3±8é°B2°/±é°F/°Ö±6é°6±;+± é° Ö±é° ±0+±?é° Ö± é°?±D+±*é±G+±6² 48999±;±99±0 ³3$9±?±"299±D ²-=B999±8@   *034=$901"654#"&54>7&54632#"&547'32654%3254[232œDRJFY($B'MQQ>?QQM'B$(YFJRDi±S<)3.)<”>&0/'>þ¶RFaiFJ<8+77 J>DNND>J 77+8<JFiaFRO‹NH><6,66,6<>H2÷åN²+±é² +±é² +³@ +°/°Ö±é² +³@ +°±+±é±+±° 901"!!4632#54&ÿ@0hþ;o_^m_8—TMþ\R_nhY@/@D5úÙ,²+±é²+°/°Ö±é² +³@ +±+01!!’hþ;ÙýyRÙÿé“åc²+±é² +³@ +²+± é²  +³@ +°/°Ö±é°±+±é° Ö±é±+± ²999± °9014>32#.#"32673!".0GyLî+_^Wj{€mZ``!þõKwG/d2bjO4îNN¢Œ‰¡ejþß3Ni`ÿé«Ù&‹²+±#é²+´  +±33± é± 22´ +±é°'/° Ö´<+°±+°2±!é°2°!±&+°2±é°2²& +³@ +±(+±°9±&!±99±° 901#"&=&5463233%54#"#3265«ifžbËPC=P´]þš9"�´],+‚N~]piXŠ�MbW;eWþ©NZ5,?Wy„XIÿéå(7Ȳ+±1é²%+°3±é° 2´% +´B+´! % +´!++°2°8/°"Ö±é²" +³@ +²" +³@" +°±+±+é°+±6+±é°± +±é±9+±+±%99°6´'$9°± 99° ±99±1³+6$9±!´ )$9°%°'9012#'2654&#""&547&#"3#53>3262>54Jbl\@&'=2+/wgªgw/*2@6Â/ ehRLMM_åjSUg\7(84�»«ªª«½KIAAb„11Ÿc¥<_7$ $7_<¥5CÙ B²+²+±é´  +±é°/°Ö±é° 2°±+±é±+± °901+#!23264&+Cq[å]-luþOÂCKKCÂ]qþËÙoãDxDÿé‹å'x²"+±é²+±é² +° 3± é°(/°Ö±é°±+°2±é° 2² +³@ +² +³@ +±)+±³"$9°°9± ³$9014>323#53.#"32654'7#".-EvLq‚ÔVUOir€mC_6FŽsKwG/d2akO4jnTTDB Ž‰¡D,"O?NOq3Ni`ÉÙ S²+²+° 3±é°2² +³@ +° /°Ö´&+°±+± é² +³@  +±+±° 9013##5!#3¿kL˜„M`þ[…g»TþBý'5¿Ù ]²+°3²+´ +±é°!/°Ö±é°2°±+±é°±+± é±"+±²999±³ $9013#3%632'>54&#"#“^^V'%*/ 3-'$^þÿÙþ¬Æ :')1E  ( þ·”5xÙ 0²+° 3²+°3° /°Ö±é°2± +±± 9901#33 #’]]kxþ×,nþÿÿÿÙþ�qþ×þPvÿêíÙ B²+±é²+´ +±é°/°Ö±é°±+°2±é±+±°901%5#"32>+"&54>;�™@RS?+@ ]„bb„/Ta:jÖ›ZA>\ 30ýþd‰‰dA_4ÿèå&I²+±é² +±é°'/° Ö±é±(+±±&99°@  $%$9° ±9901%'#".4>3277'4&#"32657§R2AžIvD##DvIžA2RH/wRFnV_qq_VnFRw/™yS‹Kv�z€vK‹Syoºys@}¡‹Œ¡}@syºÿ¥‘å+ƒ²+±'é²+± é²' +³@' +²+±é² +³@ +°,/°Ö±"é°"±*+°2´<+±é±-+±*"²'999°° 9± °9±'°9°± 9901327#"&'#"&54>32#.#"326=£0?,82FVh+‡?“±2KP}¡_qStŒ3iJSˆL¸MTF \Q27Ó©0ajP5zoFQ£†2_b<‚^1ÿùÿéYå,8I¢²*+°&3±é°2² +°3±Bé°32°J/°Ö±é°±+±Hé°H±<+±é°±+±6é°6±-+±!é±K+±H±*99°<³ ($9±±&99±-6²3999±*°(9°B@ !-9$901'7327&5463232>7.54632#"'#"&4654&#">54.#"WO1!dHQUb<28>"BK9 sWFBcD8cwGcO><`{!!.þ”%-  Ú MYu󢩬O¥@!5sRui:eŠ�»i243ˆ,w^4/;Cþç4ˆ;<_7$ #8^=œÿéÝå ,§²+± é²+±é´$ +´$+´ +´+°-/°Ö±é°± +±é±.+°6ºÂöìÁ+ °(°'À± ù°À³'(....³'(....°@± ³#$9±$ °9±² 999±°901#"&632654&#"323%3267#"&/.#ÝÀ žÂÂ� Áj ŽvNw“2 -&þ• �tIr"�";# a¢ÖÓVÓÔþí23ЦNF%!€;Â*/‡¥F>2/o $ÿéüå-7ƒ²+±é²#+°3±3é° 2³ #+°'3°8/°!Ö±6é°6±0+±'é°'± +´ <+° ±+±é±9+±06±#)99± '±99± °9± µ!.06$901%2>54&#"#4>32#".532'654&#"’:];'/# R+1#Q])R�_/VSE4¼-@Ã=E:é~0';+E_b4`’8MBX-Å‹Q’~K-KeŽU'D_6åD2G!ù0’JS[zNÿæÿèEå"P²+±é² +±é°#/° Ö± é° ±+±é±$+± ±99°± 99±´ $90173267.54632#"&'%654&#"8"c7CetnuJId+PLU˜,í/"#8KÊFIfT"‘Wcƒ‘–S¤‰VdY >EecW>;b$ÿé"å "O²+±é²+±!é´ +±é³+°#/°Ö±é° Ö±é±$+±±99°° 901%2654&#"632#"&54632#4&#"'QP\B;b V^6�jƒ~~xŠ‹‡sjXBIž7TFEU@4^bH:}dm‚¡˜êÙwa:P ÿéðB™²++°'3±;é°2°/±é² +³@ +°C/°.Ö±8é°8±?+± é° Ö±é° ±+±"é±D+±8´+34;$9°?°9°³=AB$9° ±)99°´'$9±;+°)9°³".3$901'777'324&#"#4>32#"'#"&54>7327&547' A4434+_'UKˆ‹LJ4_'CI)ClE./`DbDAUqx+$BI3)MhQQQQœ266D]‰Ã?E?jg;44z{'C2I8$GZ&6K.:ÿñTå 5ž²+±#é²+±é²+±.é´)( +´)C+°6/° Ö±4é°4±%+±é°+ Ö±é²+ +³@+( +±7+±4 ±!99°+³#$9°%°9±#°9±(¶ !%4$9°)°9°.² 3999013527&'765462#"'73254+5254&#"'2*!hÖp!4@ŠrgT:k=Dªª<Ç>F)3X75#5à0Qt2ZLNNTF$-/S5%U@.UXE1*€J4ÙA€ g…Jc‹sX~]B-UJ-tŸ”'½ hŠï"ˆA2å^²+° 3²+±é´ +±é³+°/°Ö±é°2°± +± é° ° Ö±é°/±é±+±°9014&#"32#54+#4632žAER7 f‡]©‡]…b`„F>E\0„VìÒ¢þŒ\qkVÿéOå*—²+²"+±é²+± é´" +±é°+/°%ֱ鰱+´<+² +³@ +°´+°/±,+±´ "$9±± 99±° 9°±%99° ²999°²99901277'.#"326=#5!#'#"&54>lKnCRH/wRW`Qr}$9^54&+Uvaþ·(=Z-eF?}’´´/1>D?ãÐ^rÙ$;;p/T�èèþ³+49Eûÿÿ2”† %2{Ú"²+²+±é°/±+±°901 %!ÁýFIþ\†þâTý&ÿÿ2{}&ŠÑš2{Ú"²+±é²+°/±+±°901% !ìþêþëºü·¤TâþTÚÿÿ2{v'®lÏŠ2¤Ú'²+²+°/°Ö±é±+±±99017-†{þ…TrŒááý²Úþ“ÿÿ2¤'®[Œÿÿ2¤'®—['®Ç[Œÿÿ2¤Ú'Ñoÿ)Œÿÿ2¤Ú'®�Œ2¤Ú'²+²+°/°Ö±é±+±±9901 Pþ…{TýŽNááNý&mÿÿ2¤'®[‘ÿÿ2{Ú&®ˆÿÿ2{Ú'®Ôˆÿÿ2{Ú&®Šÿÿ2{Ú'®ÕŠÿÿ2{v&®‹ÿÿ2{v'®Õ‹ÿÿ2@Ú&®Œœÿÿ2@Ú&Œ®šÿÿ2@N'®ñ§'Œœ®ÿÿ2@N'®U§&Œ®šÿÿ2¤3'®‘å'®nŒŒÿÿ2@Ú'‘œ®ÿÿ2@Ú&‘®šÿÿ2@N&®'®F§‘œÿÿ2@N'®š'®ª§‘ÿÿ2¤/'®qè'®†ˆ‘2¬¼n°/°3´+°2² +³@ +± 22°/° Ö´ +° ±+´+°±+´+±+± °9°°9°°9±°901#"'#"&=326=326=3¼B.3""3.B6"0"6"0"6.B''B.ææ""ææ""æÿÿ23*@&®ѯþÃ2¬�Ú#²+°/´+°/±+±°901'!5VUþ¥­à––4.2¬Ú"²+´+°/°Ö´ +±+01#ª;­ÚþÒ.2¬Ú"²+´+°/°Ö´ +±+013#28­;ÚþÒ2*’Ú @²+°3°/´ 7+° /°Ö´+°± +´+± +± ±9901"&53265’g’gF>X>ÚIggI,>>,2*’Ú H²+´ 7+²  +³@ +°2° /°Ö´ +° ±+´+± +± ±9901462#4&"2g’gF>X>*IggI,>>,2¬â B°/´7+° /´7+° /° Ö´+²  +³@  +°2± +± ±99012#5264IggI,>>, g’gF>X>2¬‘ O°/´ 7+°/´7+°/°Ö´+°± +´+±+± ±99± ³$9012#"&46264&#"âGhhGIggI*??*,>> h�hg’gþæ>X>>X>ÿÿ2¬�Ú'¦†¦ÿÿ2®ïÚ'Ñ‚Ñ23¦§.°/´+´+°/°Ö´+´+± +01462"2"0""0U0""0"2¾^ù(°/´+´+°/±+´+±+015!2,¾;;2®^Ú R²+° /°3´ +°2² +³@  +° /°Ö°2´+°2² +³@ +² +³@ +± +0133##5#53ª;yy;xxÚy;xx;2®^ÚF²+´+°2² +³@ +°/°Ö´+² +³@ +² +³@ +± +01##5#5^y;xÚ;ññ;ÿÿ2_'§H(ˆÿÿ2{'§^(Šÿÿ2øÚ'§áŒÿÿ2Â'§«(‘2{Ú!²+²+°3°/±+±°901 3 {þ\þ[_FFÚý&ÚýÊ6ÿÿ2{}&¸Ñš2{Ú!²+°3²+°/±+±°9013 # 2¤¥_þºþºÚý&6ýÊÿÿ2{v'®jϸ2¤Ú²+²+°/±+01 5 2rýŽÏþ1Úþ“þ“Zÿÿ2¤'®[ºÿÿ2¤&º'®—[®Ç[ÿÿ2¤Ú&ºÑoÿ)ÿÿ2¤Ú'®­º2¤Ú²+²+°/±+01!  ¤ýŽrþ1ÏmmZþíþíÿÿ2¤'®[¿ÿÿ2{Ú&®¶ÿÿ2{Ú'®Õ¶ÿÿ2{Ú&®¸ÿÿ2{Ú'®Õ¸ÿÿ2{v'®kÏÃÿÿ2{v'®jÏÄÿÿ2¤Ú&®ºÿÿ2@Ú'®šºÿÿ2¤N&®&º®[§ÿÿ2@N&º'®š®[§ÿÿ2@Ú&®¿œÿÿ2¤Ú'®þ¿ÿÿ2@N&Ë®F§ÿÿ2¤N&̮ȧÿÿ2¤'®lk'®œk¿2¬T"°/°Ö´+±+±²99901-TþÞ"ÒÒ¬««5vw2®mÚ)²+´+°/°Ö´+´+±+013#2;;ÚþÔ2mÚT² +°/´ +² +³@ +°2°/°Ö´+° 2°±+´+±+±° 9± ° 9014&#"#3632#ä! &66 4&86#0(‘m€+0!Ç2´Ú9²+± é²+°3°/°Ö± é° ±+±é±+± ±9901"&53265´ÅøÅT•°•ÚþJv®®v¶þJS}}S¶ÿÿ2´}'Ñ6Õ2´Ú9²+°3²+± é°/°Ö±é°±+±é±+±±99013462#4&"2ÅøÅT•°•¶v®®vþJ¶S}}SþJÿÿ2´v'®ÏÕ2¶Ú/²+±é²+±é°/° Ö±é±+±±9901!2#!5!264&#!2A…¾¾…þ¿Ab‹‹bþ¿ÚÖþÒÖT¥è¥ÿÿ2¶v'®Ï×ÿÿ2¶v'®mÏ'®�Ï×ÿÿ2¶Ú'Ñdÿ)×ÿÿ2¶Ú'®Ö×2¶Ú/²+±é²+± é°/°Ö± é±+± ±9901)"&63!!"3!¶þ¿…¾¾…Aþ¿b‹‹bAÖ.ÖT¥è¥ÿÿ2¶v&Ü®9Ïÿÿ2`Ú&®Ó¬ÿÿ2^Ú'®¸Óÿÿ2^Ú'Õª®ÿÿ2^Ú&Õ®¸ÿÿ2^v'®±Ï'Õª®ÿÿ2^v'® Ïáÿÿ2¶Ú&®×ÿÿ2bÚ&×®¼ÿÿ2¶v'®Ïäÿÿ2bv'®Ïåÿÿ2bÚ'ܬ®ÿÿ2¶Ú&Ü®ÿÿ2bv&®'ܬ®³Ïÿÿ2¶v'®&Ü®Ïÿÿ2aÚ'Ü«&®¡®a2m«6² +´7+°/´7+°/°Ö´ +±+± ±9901#"&46;#"3ªÒEaaEÓÓ,55,³FuªvFOlNÿÿ2%Ú'ѸÓÿÿ2%Ú'ѸÕÿÿ2%Ú'Ѹ×ÿÿ2%Ú&ÜѸ2ÚO² +²+±é´  +±é°/°Ö´<+°± +´ <+±+± ±99±°901#"&54632#4&#";”€b€‘eb”R^FE_`DlARPx“Sþ à:nB45Jÿÿ2}&ôÑñ2ÚO² +²+±é´  +±é°/° Ö´ <+° ±+´<+±+± ±99±°901532654&#"#4632#¼lD`_EF^R”be‘€bARJ54Bn:þ ôS“xPRÿÿ2v'®¼Ïô2ÚO²+±é² +´ +±é°/°Ö´<+°± +´<+±+± ±99±°901#"32653#"&5463”lD`_EF^R”be‘€b™RJ54Bn:àþ S“xPRÿÿ20v'®ŠÏöÿÿ2—x'®ñÑ'®!Ñö2ÚO²+±é² +´ +±é°/° Ö´ <+° ±+´<+±+± ±99±°90132#"&5332654&+¼€b€‘eb”R^FE_`Dl™RPx“Sôþ :nB45Jÿÿ2)v'®Ïù ÿÿ2œÚ&®ò~ÿÿ2ÊÚ'®$òÿÿ2ÊÚ&®ô¬ÿÿ2œÚ&ô®öÿÿ2Êv'®hÏýÿÿ2œv'®¼Ïþÿÿ2œÚ&®ö~ÿÿ2ÉÚ'®#öÿÿ2­v'®Ïÿÿ2Év'®‰Ïÿÿ2ÊÚ&®ù¬ÿÿ2œÚ'®öùÿÿ2Êv'®œÏÿÿ2¬v'®Ïÿÿ2ÉÚ&®¡&®aù«2l7ÚZ² +²+´+°/´+°/° Ö´ +° ±+´+² +³@ +±+± °9±°90132#"&533264&+‚+ŠR83H8# #//#+Lp6:7(÷#42l7ÚZ² +²+´+°/´+°/°Ö´+² +³@ +°± +´ +±+± °9±°901#"326=3#"&543ç+#//# #8H38RŠL84#÷þñ(7:6pÿÿ2’Ú'Ñ%òÿÿ2’Ú'Ñ%ôÿÿ2’Ú'Ñ%öÿÿ2YÚ'Ñìù2ÚE²+²+± é²  +³@  +°/°Ö´<+°±+´<+±+±°9014632#4&#"#2‘eb”R^FE_RPx“Sþ à:nB42ÿÿ2}&Ñî2ÚE² +²+±é² +³@ +°/° Ö´ <+° ±+´<+±+± °901#54&#"#4632R_EF^R”be‘224Bn:þ ôS“xÿÿ2v'®¼Ï2ÚE²+±é² +³@ +² +°/°Ö´<+°± +´ <+±+± °90175332653#"&2R_EF^R”be‘È224Bn:àþ S“xÿÿ20v'®ŠÏÿÿ2—x'®ñÑ'®!Ñ2ÚE²+± é²  +³@  +²+°/°Ö´ <+° ±+´<+±+± °901%#"&53326=3‘eb”R^FE_RÈPx“Sôþ :nB42ÿÿ2.v'®Ïÿÿ2.Ú&®ÿÿ2ÉÚ'®#ÿÿ2ÉÚ&®«ÿÿ2.Ú'®ˆÿÿ2Év'®gÏ'«®ÿÿ2.v'®¼Ï&®ˆÿÿ2/Ú&®ÿÿ2ÉÚ'®#ÿÿ2Av'®›Ï&®ÿÿ2Év'®ŠÏ&®#ÿÿ2ÉÚ&®«ÿÿ2/Ú'®‰ÿÿ2Év'®›Ï'«®ÿÿ2?v'®Ï&®™ÿÿ2ÉÚ&®¡&®a«2l7ÚF²+°/´ +²  +³@ +°/°Ö´ +° ±+´+±+± °901#"&5332657R83H8# #/Ü6:7(÷#2l7ÚF²+° /´+² +³@ +°/°Ö´+°±+´ +±+±° 9013326=3#"&28/# #8H38RÜ#÷þñ(7:2Ú/²+²+±é°/°Ö´<+² +³@ +±+01#!5RþfÚý&ˆRÿÿ2}&,ÑÜ2Ú/²+²+±é°/°Ö´<+² +³@ +±+01!!#2ìþfRÚRýxÿÿ2v'®¼Ï,2Ú/²+±é²+°/°Ö´<+² +³@ +±+01)5!3þšRRˆÿÿ20v'®ŠÏ.ÿÿ2—x'®ñÑ'®!Ñ.2Ú/²+±é²+°/°Ö´<+² +³@ +±+0133!2RšÚýxRÿÿ2.v'®Ï1ÿÿ2Ú&®*ÿÿ2ÉÚ'®#*ÿÿ2ÉÚ&®,«ÿÿ2Ú'®x,ÿÿ2Év&®-«ÿÿ2v'®x&,®îÏÿÿ2Ú&®.ÿÿ2ÉÚ'®#.ÿÿ20v'®ŠÏ&®.ÿÿ2Év'®ŠÏ'®#.ÿÿ2ÉÚ&®1«ÿÿ2Ú'®x1ÿÿ2Év'®›Ï&®1«ÿÿ2.v'®Ï'®ˆ1ÿÿ2ÉÚ&®¡&®a1«2m(Ú0²+°/´+°/°Ö´+² +³@ +±+01332;»mmþÍ:2pâÐ B°/´ 7+°/´7+° /°Ö´ +²  +³@ +°2± +± ±9901"&463"3âIggI,>>,pg’gF>X>2m(Ú0²+°/´+°/°Ö´+² +³@ +±+01#533(ö»;m:32mÚi²+´+² +³@ +°/´+°/° Ö°2´ +´+° ±+´+°2±+±³$9±±99014>54#"#63232%56%B4r2@3>3¤m(A+&/7{:.&F).22ÚX²+±é²+± é²  +³@  +°/°Ö°2± é° ±+±é°2±+± ³$9± ±990134>54&#"#632!2)AOPA)P<… Xãe~3NYN3\;cE<89L,9I¦öt\4fKK8;P2–ìF²+±é° /± é°/°Ö´<+°±+´<+±+±°9± ±9901332654&#!5!2#"&5ýRJ54Bn:þ–~S“xPRblD`_EF^R”be‘€bÿÿ2–�&IÑûÿ2–ìF²+±é° /± é°/°Ö´<+°±+´<+±+±°9± ±9901#"&5463!!"326=ËRPx“S~þ–:nB45Jb€b€‘eb”R^FE_`Dlÿÿ2–ˆ&I®Óá2–ìF² +± é°/±é°/°Ö´<+°±+´<+±+±°9± ±9901754632#!5!2654&#"ýRPx“Sþ‚j:nB45JŠ€b€‘eb”R^FE_`Dlÿÿ2–ˆ&K®dáÿÿ2–ˆ&K'®Êá®úá2–ìF²+± é°/±é°/°Ö´<+°±+´<+±+±°9± ±9901%#54&#"3!!"&54632ËRJ54Bn:jþ‚S“xPRŠlD`_EF^R”be‘€bÿÿ2–ˆ'®ŒáNÿÿ22ý&®VGœÿÿ2 ý'®dVGÿÿ2 ì&®ENtÿÿ2–ì'®ðENÿÿ2 ˆ'®áRÿÿ2–ˆ'®ŒáSÿÿ2–ˆ'®öá'®&áN2l qS° /´ +°/´+² +³@ +°/°Ö´+°±+´+±+±°9± °901#54&";!"&5463284#÷þñ(7:6p¼+#//# #8H38RŠ2m’Ú@²+°3° /´+°/°Ö´+°±+´ +±+±± 990126=3"&=hHdH6g’gÚ½2HH2½½IggI½2l qS° /´ +°/´+² +³@ +°/°Ö´+°±+´+±+±°9± °9015432#!532654&"Àp6:7(þñ÷#4¼+ŠR83H8# #//#+2–ì9²+±é° /± é°/°Ö´<+² +³@ +±+± °901!#532654&#!5!2Î224Bn:þ–~S“xR_EF^R”be‘ÿÿ2–�&\Ñýÿ2–ì9²+±é° /±é°/°Ö´ <+²  +³@  +±+± °9013"&5463!!";úPx“S~þ–:nB42‘eb”R^FE_Rÿÿ2–ˆ&\®ðá2–ì9²+±é°/±é°/° Ö´<+²  +³@  +±+±°9012#!5!2654&+5ÎPx“Sþ‚j:nB42ì‘eb”R^FE_Rÿÿ2–ˆ'®2á^ÿÿ2–ˆ'®˜á'®Èá^2–ì9² +± é°/±é°/°Ö´<+² +³@ +±+± °9013#"3!!"&546ú224Bn:jþ‚S“xìR_EF^R”be‘ÿÿ2–ˆ'®ðáaÿÿ22ý'Zœ®Vÿÿ2 ý'®dVZÿÿ2 ý&\t®Vÿÿ22ý&\®ŒVÿÿ2 ˆ'®dáeÿÿ22ˆ'®ðáfÿÿ2–ý&®V^ÿÿ2 ý&^®dVÿÿ2–ˆ'®2áiÿÿ2 ˆ'®2ájÿÿ2 ý&at®Vÿÿ2–ý&a®ðVÿÿ2 ˆ&®V&at®2áÿÿ2–ˆ'®ðV&a®¾á2l q=° /´+°/´+°/° Ö´+² +³@ +±+±° 901";!"&546¢#÷þñ(7:q8/# #8H38RmÚ /²+° /°Ö°2´+°2± +±´ $901%7'%’’þúŸŸ’$L65bUW_442>Ú ²+²+° /± +01 ->þÐ0ýô\þ¤ þÐmžt[«°½Yq2ÆÚ3²+²+´  +±é°/°Ö± é° ±+±é±+01!".=3;rAo[5TƒUhE3rThUƒT5[oAÚþkXJ£�Eh<ÿÿ2Öv'®0Ïxÿÿ2>v'®˜Ï'®ÈÏx2ÆÚ3²+²+´  +± é°/° ֱ鰱+±é±+012#54&+†Ao[5TƒUhÚþ»43,J?A=à  +(.971"*%1:8;2mÚ 3²+°/´ +° /°Ö´+°± +´+±+013#"#5463Ò1;+:1\DÚÒ%%QGCA2m˜Ú %²+°/´ +° /°Ö´+± +01"&=3;;mœ6‚]Qm›ndX]‚62W Ús²+²+´+²+° /´+°/´+°/°Ö´+³+´+°±+´ +±+±± 99±°9°° 901&+532#"&5432ËDA7FZ44,|4%ï#È’9C5@)*@' 2W Ú}² +²+´ +² +°/´+°/´+°/°Ö´+°± +´+³ +´+°/´+±+±±99±°9°°901#"&546353#"32654.pu,44ZF7AD%%ï@*)@5C9’ÈO@ 2)Fw²+°/±é°/´+°/± é°/°Ö´+³ +± é°±+´+³+±é±+±³  $9±³$9±°901462"462"2#54&+5Ò$$º$$(D\1:+;$$$$¢ACGQ%%Òÿÿ2ÀF&’¿ÿÿ2ÊF&’Üÿÿ26F&’ùÿÿ26F&’2 Úc² +±é²+±é° /°Ö´<+°±+´<+°±+´ <+±!+±°9±° 9±µ$901%326=3#"&54&#"#54632ÈE42GR~MLE42GR~MLú;mT6‘¥NzŒP;mT6‘¥NzŒP2 Úa²+±é²+± é° /°Ö´<+°±+´<+°± +´<+±!+±°9± °9± ³$901%4632#54&#"#"&=3326vLM~RG24ELM~RG24EúPŒzN¥‘6Tm;þüPŒzN¥‘6Tmÿÿ2 v&˜®ÖÏ2$â+–²+°3±é° 2°!/°3±é°2°,/°Ö±$é²$ +³@$ +°$±+±é² +³@ +±-+°6ºÁlò—+ °°À± ù° À³ ....³ ....°@±$±99±!±9901%&5463232654&'52#"&/.#"ê„XEn >,-?@/WloSVa H%1P %*TT ×w‹TT~=+GNPTSur|K^|64PX- ÿÿ2$~'®Aך2$â+–²+°+3±é°2°/° 3±é°&2°,/°Ö±é² +³@ +°±+±)é²) +³@+ +±-+°6º>½óZ+ °"°#À±ù°À³"#....³"#....°@±±&99±±)9901%>54&#"#"&5463326?>32:*% P1%H aVSolW/@?-,> nEX„êT -XP46|^K|ruSTPNG+=~TT‹w× ÿÿ2$~&œ®A×ÿÿ2·Ú'—«®ÿÿ2¸Ú&—®ÿÿ2·Ú'˜«®ÿÿ2¸Ú&˜®ÿÿ2·v&®'˜«®�Ïÿÿ2¸v'®&˜®ÖÏÿÿ2´â&®š�ÿÿ2´â'®šÿÿ2´~&®›�ÿÿ2´~'®›ÿÿ2´â&®œ�ÿÿ2´â'®œÿÿ2´~&®��ÿÿ2´~'®�2k ¦* °/°*3´+°2°/° 3´+°%2°+/°Ö´+² +³@ +°±+´(+²( +³@* +±,+°6º>Ñó¾+ °!°"À±ù°À³!"....³!"....°@±±%99±±(99012>54&#"#"&546332?>32†  4 0 ?86JG9*)? I-:Vš¡ :4##R=0QJMS6743/DS77[OŠ2ÒÚ+²+²+´ +±é°/°Ö±é°2± +0133#!kgùùTþ´Úþ½þiCÿÿ2Ò}&¯Ñ22ÒÚ+²+²+´ +±é°/°Ö°2±é± +01!#3™9þ´TùùÚþiþ½—Cÿÿ2Òv&¯®Ï2ÒÚ+²+²+´ +±é°/°Ö±é°2± +01!!3#kþÇLTùù—Cþiþ½ÿÿ2âv'®<ϱÿÿ2Jw'®¤Ð'®Ôб2ÒÚ+²+²+´ +±é°/°Ö°2±é± +013##3!™gùùTLC—þ½ÿÿ2âv'®Ï´ÿÿ2mÚ'­›®ÿÿ2nÚ&­®Èÿÿ2mÚ'¯›®ÿÿ2nÚ&¯®Èÿÿ2mv&®'¯›®›Ïÿÿ2nv'®È&¯®Ïÿÿ2mÚ&®±›ÿÿ2nÚ'®È±ÿÿ2}v'®×ϼÿÿ2nv'®<Ͻÿÿ2mÚ&®´›ÿÿ2nÚ'®È´ÿÿ2mv'®‹ÏÀÿÿ2~v'®ÏÁÿÿ2mÚ&®¡&®a´›2mBÚ(²+°/´+°/°Ö°2´+± +01#7#533zH››;ÕmÈ¥j2mÇÚ D²+°3° /± +°6ºÂîN+ °.°À± ù°À² ...³ ....°@01'#7#'ýV@5l_ai4>mÃÃmêêþ“Ã2nžÚ R²+° /°3´ +°2² +³@  +° /°Ö°2´+°2² +³@ +² +³@ +± +0133##5#53Ê;™™;˜˜Ú•;œœ;2nšÖ ''7'7p*ŠŠ*ŠŠ*ŠŠ*ŠÖ*ŠŠ*ŠŠ*ŠŠ*Š2 ÈL²+±é° /±é°2°/°Ö´1+°±+´ <+²  +³@ +±+±± 990126=!!"&=ƒEhI“þ¿}¤xÈÒE_`DÒR”b€€bæ2 ÈJ²+±é° /± é°2°/°Ö´ <+² +³@ +° ±+´1+±+± °9013#"&=!5!265»QzPR}þ¿“IhEÈæb€€b”RÒD`_E2ÿþ ÆL²+°3± é°/±é°/° Ö´<+²  +³@  +°±+´1+±+±± 990154&"!5!5462»EhIþmA}¤xÒE_`DÒR”b€€bæÿÿ2ÿþ k'ѾþîÍ2ÿþ ÇJ² +°3± é°/±é°/°Ö´1+°± +´ <+² +³@ +±+± °901#54632!!54&#"ƒQzPR}AþmI44Eæb€€b”RÒD`_Eÿÿ2ÿþ d&Í®�½2úÚH² +²+±é´  +± é°/° Ö°2´ <+° ±+´<+±+± °901532+#3264æb€€b”RÒD`_E‰QzPR}þ¿“IhEÿÿ2úv'®—ÏÏ2úÚJ²+±é²+´  +± é°/°Ö°2´ <+° ±+´<+±+±± 990173264&+332+2ÒE_`DÒR”b€€bæQEhI“þ¿}¤x2úÚJ² +²+±é´   +± é°/°Ö´<+°± +´<+°2±+±± 9901#";##"&46;úÒE_`DÒR”b€€bæ‰EhIþmA}¤xÿÿ2úv'®ðÏÒ2ÿÿúÚJ²+±é² +´  +±é°/°Ö´<+°± +´ <+°2±+± ±9901%#"&546;3#"3úæb€€b”RÒD`_EQQzPR}AþmI44Eÿÿ2�v'®wÏ&®Ò‡ÿÿ2–v'®ðÏ'®ðÒ2m%ÚT²+´+²+´ +²  +³@ +°/°Ö´+°± +´+°2±+±± 9901#";#5#"&46;%F2A@3F:HWYFT¢(F"¥lFpK2m8Ú /²+° /°Ö±22´+°2± +±² 999017'5572’’ŸŸþú’#L65bUW_442>Ú ²+²+° /± +01-5 5%20þÐ þ¤\ýô0mžt[«°½Yq2ÿÚb²+²+°3±é´  +±é°/°Ö±é°±+± é±+±² 999° ± 99± ° 9±² 99901 &5462+264&"ÿþ\þõdŒddF‚Fýå3F33FÚý&Ï3.FddŒdâ6‡F33F3ÿÿ2ÿ}&ÜÑ 2ÿÚb² +°3±é²+´  +±é°/° ֱ鰱+±é±+±² 999°±99±² 999±°901!#32"&547264&"ÿ^þº‚FddŒd Õ3F33F6âdŒddF5,ÏýóF33F3ÿÿ2ÿv&Ü®ðÏ2Ú`²+² +±é´ +±é°/° Ö°2±é°±+±é±+±² 999±°9°±99°² 9990135'"&4632%"32654&20ÜdŒddF/1ÊýÖ$22$#34^LˆFddŒdþîÜ3#$22$"4ÿÿ2N&Þ®0§2Ú`²+²+±é´  +±é°/° ֱ鰱+±é°2±+±² 999± °9°± 99°² 99901! 632"&="32654&ý,Ê1/FddŒdÜ0ª"43#$22ªdŒddFˆþ´(4"$22$#3ÿÿ2N&à®0§ÿÿ2¢N'®š§'àœ®Cÿÿ2šN'®0§&à®ôC2yŸÚG²+´+° /´+°/°Ö´+°2±+± ²999°° 9°°901%7632#"&'6264&"œþ–è#22# /Z�µ<΄2F2*2K2´Út²+±é² +°3±é´ +±é° /°Ö±é°2°±+± é° ±+±é±!+±´ $9± ±99±°9°± 9901"&5462#"'265264&"´ÅøÅdŒddF-)•°•þ&3F33FÚþJv®®v FddŒdyS}}S¶‡F33F32´Út²+±é²+°3±é´  +±é° /°Ö±é°± +±é°±+°2±é±!+± ±99±´ $9± °9°± 9901326=#"&462"&5$4&"22T•°•)-FddŒdÅøÅ.3F33FÚþJS}}SydŒddFþôv®®véF33F32´Út²+°3±é²+±é´  +±é° /°Ö±é°2°±+± é° ±+±é±!+±´ $9± ±99±± 99° °901!#4&"632"&5462264&"´T•°•)-FddŒdÅøÅýÒ3F33F¶S}}SydŒddF v®®véF33F32´Út² +°3±é²+±é´  +±é° /°Ö±é°± +±é°±+°2±é±!+± ±99±´ $9±± 99°°9013462"&463254&"$4&"22ÅøÅdŒddF-)•°•Ú3F33F¶v®®vþôFddŒdyS}}SþJ‡F33F3ÿÿ2´v'®Ïçÿÿ2´v'®Ïè2´Úw²+±é²+±é°2´  +±é° /°Ö°2±é°±+± é° ±+±é±!+±± 99° °9± ±99°°9°³ $90135!264&+"&46;2#"2642^S}}S!dŒddF´y««y‘F33F3T°Ò°)-FddŒdÔþÎÔ†3F33Fÿÿ2´v&ë®Ï2´Úw²+±é²+±é°2´  +±é° /°Ö±é°±+±é°±+± é°2±!+±°9°± 99± ±99°°9°³ $901)"&6;2"&547#"3!"264´þ¢y««y´FddŒd!S}}S^‡F33F3Ô2ÔdŒddF-)°Ò°23F33Fÿÿ2´v&í®9Ïÿÿ2Pv'®£Ï'휮ÿÿ2v'®Ï&í®x2mhÚˆ²+´+°2°/´ +°/´+° /°Ö´ +° ±+´+°±+´+°2±!+±±99±°9± ± 99°± 99°°9°°901264&"#";#"&546;2"&54ôB)33)¤¤>-,?†. . n19,+:,4–?-,??,2mÜÚ'/7˲+°#3´7+°.2°/´+² +³@ +°/´+²*2222°8/°Ö´1+°1±5+´+°± +´)+°)±-+´&+°&±+´+°±+´ +±9+±51°9°°9±) °9°-°#9°&°9±°9±7³ &$901326=3#"5!"&546323&54632&264&"264&"ûW85)`þ€->>-,?J>-,?¢ . .þÞ . .819,+:,4–?-,??,,??,6. . . . 2TÚ'ƒ²'+²"+±é´ '" +±é´'" +±é² +³@ +°(/°Ö±é°±+±é°± +±é°±'+±&é±)+±± 99° ²"999± ²999014&#"3254&#"#432#"&54632#oNRk<5oTs2I+L1Vužsp¡TÌNoTKLKy&“S,$D=%ƒemƒŸoþ42TÚ'ƒ²+²+±%é´  +± é´ +±é² +³@ +°(/°Ö±é°±+±é°±+±é°±"+± é±)+±²%999°± 99±² "99901#4632#".54632#4&#"32654&#"†T¡psžuV1L+I2sTo532#"&53†oNRk<5oTs2I+L1Vužsp¡TNoTKLKy&“S,$D=%ƒemƒŸoÌ2–fd²+± é²+±é´ +±é°/°Ö´<+°± +´<+°2²  +³@  +°2±+± °9± ±9901!5!332654&#!5!2#"&5–ýœdþgRJ54Bn:þ–~S“xPRRþülD`_EF^R”be‘€b2–fd²+±é²+±é´ +±é°/° Ö°2´<+² +³@ +°2°±+´<+±+±°9±± 99015!#"&5463!!"326=2dËRPx“S~þ–:nB45JRR²€b€‘eb”R^FE_`Dl2–fd²+±é²+±é´ +±é°/°Ö´<+°±+´ <+°2² +³@ +°2±+±°9±± 99015!54632#!5!2654&#"2dþgRPx“Sþ‚j:nB45JRRþv€b€‘eb”R^FE_`Dl2–fd²+±é²+±é´  +±é°/°Ö°2´ <+²  +³@  +°2° ±+´<+±+± °9± ±99015!#54&#"3!!"&546322dËRJ54Bn:jþ‚S“xPRRRþvlD`_EF^R”be‘€b2m Úp²+´+°/´+° /´+²  +³@  +°/°Ö°2´ +²  +³@ +°2° ±+´+±+± °9± °901!5!#54&";!"&54632 þ’nŽ84#÷þñ(7:6p¢8þã+#//# #8H38RŠ2ÒÚB² +± é²+´  +±é°/°Ö´<+² +³@ +±+± °901'5!";#"&5463 |BþZ:nB422Px“SìztþÀ^FE_R‘eb”ÿÿ2ÒÚ& '®¸32ÒÚB²+² +± é´ +±é°/°Ö´<+² +³@ +±+± °9017!2654&+532#ø|þ¾¦:nB422Px“Sîzt@^FE_R‘eb”ÿÿ2Òì'® E )2ÒÚB²+²+± é´ +±é°/°Ö´ <+²  +³@  +±+± °901%#"&546;#"3!5 ôS“xP224Bn:¦þ¾î”be‘R_EF^þÀtÿÿ2Òë& +®(D2m Ú?²+´+°/´ +°/°Ö´ +²  +³@  +±+± °901#"&5463";5Œ)697:A÷¿ó>25B6A:¼L2LÚW² +²+´ +°3± é°2´ +±é°/° Ö° 2±é±22² +³@ +²  +³@ +±+01333##5#535!kgùùzzTxxþ´Úþ½ËTxxTw2LÚW²+²+´  +°3± é°2´  +±é°/°Ö± 22±é°2² +³@ +² +³@ +±+01 !3##5#53539þ´xxTzzùùÚþiwTxxTËCÿÿ2Lv& /®zÏ2LÚU²+²+²+° 3±é° 2´ +±é°/°Ö°2± é±22²  +³@ +² +³@ +±+01!!5#53533##kþÇLxxTzzùù—wTxxTËþ½ÿÿ2Lv'®<Ï 12LÚU²+²+²+° 3±é° 2´ +±é°/°Ö±22±é° 2² +³@ +² +³@ +±+01!##5#53533#!gùùzzTxxLCËTxxTwÿÿ2Lv'®jÏ 32mRÚQ²+°/´+°/° 3´+° 2°/°Ö°2´+° 2² +³@ +² +³@ +±+01#7#5#53533#3¸HpkCC6DD§m‘i6==632¶Ú _² +° 3±é²+´ +±é°/° Ö± é±22° ±+±é±+± ± 99± ° 9°±99°°9013632#"'#6264&"2T1=PrrP=1TT@\@@\Úþ‹#s¢s##ò\@@\@2ÑÚ?²+² +°3´+°/°Ö±é° 2² +³@ +±+± ± 9901#"'#3632ÑtMP:TT8NSrSn8þuÚ76v2ÑÚ=²+° /°3´+°/° Ö°2±é²  +³@ +±+± ± 9901746323#5#"&2tMP:TT7OSrÆSn8‹ý&76v2ÑÚ=²+°/°3´ +°/°Ö±é° 2² +³@ +±+± ± 9901%#"'#3632ÑrSN8TT:PMtÆOv67Úþu8n2ÑÚ?² +²+°3´ +°/° Ö°2±é²  +³@ +±+± ± 9901463253##"&2rSO7TT:PMtOv67ý&‹8n2Ú @² +²+±é´ +±é° /° Ö´<+°2² +³@ +°2± +01!!!!#2ìþfšþfRÚRóRþ½2Ú @²+±é²+´ +±é° /°Ö°2´<+² +³@ +°2± +01)5!5!5!3þšþfšRRóRC2Ú @²+±é²+´ +±é° /°Ö´<+°2² +³@ +°2± +0133!!!2RšþfšÚþ½RóR2Ú @²+² +±é´ +±é° /°Ö°2´<+² +³@ +°2± +01#!5!5!5RþfšþfÚý&CRóR2ìÚ^²+²+° 3±é´ +±é°/°Ö´<+°±+´<+°± +´ <+±+±°9± °9012>=3"&=##$ , RHŠHNRÚ½ ½½MccMkýxÚ2ìÚ^²+° 3±é²+´ +±é°/° Ö´ <+° ±+´<+°±+´<+±+± °9±°901354."#546233ú , RHŠHNR½ ½½MccMkˆý&2ìÚ^²+° 3±é²+´  +±é°/°Ö´<+°±+´<+°± +´ <+±+±°9± ° 901!#335462#54."$òRNHŠHR , ÚýxkMccM½½ 2ìÚ^²+²+° 3±é´  +±é°/° Ö´<+°±+´<+°±+´<+±+± ° 9±°9013##"&=32>5úòRNHŠHR , Úý&ˆkMccM½½ 2ÿÚ (²+²+°3° /°Ö±é± +±°901 ##37ÿÑ¡T‰ssÚþ“ý{ÚÉÉ2ÿÚ (²+°3²+° /°Ö±é± +±°901333#'2Ñ¡T‰ssmþè…ý&ÉÉ2ÿÚ (²+°3²+° /°Ö±é± +±°901!#'#33ÿ^ss‰T¡ÉÉÚý{2ÿÚ (²+²+°3° /°Ö±é± +±°901373##2^ss‰T¡ÚÉÉý&…þè2DÚa² +±é² +´ +±é² +³@ +°/°Ö±é°±+±é°±+± é±+±±99±±990146233#"&54&"2g’g1-TTU]6L6 IggIFo†ý&˜q&66&2DÚa² +± é² +´ +±é² +³@ +°/° Ö± é° ±+±é°±+±é±+±±99± ±9901#4&"+3265462DT6L6]UTT-1g’g &66&q˜ÚýzoFIgg2DÚa² +² +± é´ +±é² +³@ +°/°Ö±é°±+±é°± +± é±+±±99± ±9901326546;#""&2T6L6]UTT-1g’gÑ&66&q˜ý&†oFIgg2DÚa² +² +±é´ +±é² +³@ +°/° Ö± é° ±+±é°±+±é±+±±99±±9901"&54&##32265Dg’g1-TTU]6L6ÑIggIFoýzÚ˜q&66&2{Ú ,²+²+°3´ +±é° /± +±°901!3 373H¢^þ\þ[_ÒttÁý&Úþ“ÉÉ2{Ú ,²+°3²+´  +±é° /± +± °901!# #'zþ¸¢^¤¥_ÒttþçÚý&mÉÉ2¤Ú ²+° /°Ö±é± +01 57'72rýŽçç;”Úþ“þ“Z‰‰»°Xÿÿ2¤Ú'Ñÿ) Mÿÿ2¤Ú&® M2¤Ú ²+° /°Ö±é± +01! %5¤ýŽrççþÅ”mmZ‰þ쉻°X2{Ú ,²+²+°3´ +±é° /± +±° 9013 3!!^þ\þ[_90þFÝÚý&ÚcTþ�2{Ú ,²+°3²+´ +±é° /± +±° 9013# #'!7!�^¤¥_9ýæ0ºÝÚý&cT2¤Ú ²+° /°Ö±é± +015 57%2rýŽPT+€Zþ“þ“Z0Æ1þœ²ÿÿ2¤Ú& SÓîÿÿ2¤Ú'®Í S2¤Ú ²+° /°Ö±é± +01% '¤ýŽrPTþÕZZmmZ0þ:1d²2{Ú7²+²+±33° /°Ö´<+± +±°9±±9901 33{þ\þ[_RÚý&Úþïþï2{Ú7²+±33²+° /°Ö´<+± +±°9±±99013 ##2¤¥_þãRþãÚý&ïþïþ2¤Ú ²+°/±é° /± +±°901 5%!5!%2rýŽŠþvŠþvÚþ“þ“ZêRê2¤ÚL² +°/°3±é° 2² +³@ +² +³@ +°/°Ö°2´+° 2±+±°901!#5#5353!%5 5¼þù;HH;þvrýŽDmmRmmêZþ“þ“Z2¤Ú i²+°/°3±é°2³ +´ +°/°Ö±22±é² +³@ +°2°±+´ +±+±´ $9± °901#5462"7#64'3%5 5™ gz#.##.í‰ ‰þvrýŽ–.RB2++2).êZþ“þ“Z2¤Ú ²+°/±é° /± +±°901! !!¤ýŽrþvŠþvŠmmZêRê2{Ú N²+²+±33´ +° 3±é°2°/°Ö°2´ <+°2±+± °9±± 9901 3333#'#{þ\þ[_šƒRƒšÊSRSSÚý&Úþô þô þ¢‘‘‘2{Ú N²+±33²+´  +°3± é°2°/°Ö° 2´<+°2±+±°9± ± 99013 ####353'2¤¥_šƒRƒšÊSRSSÚý& þô þô^‘‘‘2¤Ú <²+°/°3±é° 2°/°Ö° 2´<+° 2±+±°9°° 9015 575#535372rýŽªªªRŽŽŽ€Zþ“þ“Ze…R…1TRTT2¤Új²+° /±33± é±22² +³@  +² +³@ +°/°Ö° 2´+°2°±+°2´<+°2±+± °9°°90137!#5#535335'5 575.ŽŽŽþß;..;AªrýŽªêTRTTmmRmm…eZþ“þ“Ze…2¤Ú  ”²+°/°3± é° 2³+´+°!/°Ö±22´+² +³@ +°2°±+´0+°± +°2´<+° 2±"+± °9±°9° ´$9°°9°± 990164'5'5 5777%462"&'#5ð ¾rý޾Rzzzþ¶.. -C,xqZþ“þ“ZqIRHH)**))B.R2¤Ú <²+° /°3±é°2°/° Ö°2´ <+°2±+± ° 9°°901% 3#'5#75¤ýŽrªªªRŽŽŽZZmmZe…R…1TRTT2 Ú:² +±é²+±é°/°Ö±é°±+± é±+±± 99012657 &5†¥è¥TÖþÒÖ†þ½b‹‹bCTþi…¾¾…—2 Ú:²+±é² +±é°/°Ö±é°±+±é±+±± 9901%4&"46 ¸¥è¥TÖ.ÖTCb‹‹bþ½T—…¾¾…þi2 Ú:²+±é²+±é°/°Ö±é°±+± é±+±± 99017!264&#!'!2#!†Cb‹‹bþ½T—…¾¾…þiT¥è¥TÖþÒÖÿÿ2 Ú'ÑÒÿ) eÿÿ2 Ú'® e2 Ú:² +±é²+±é°/° ֱ鰱+±é±+±± 9901!"3!!"&63!¸þ½b‹‹bCTþi…¾¾…—†¥è¥TÖ.Ö2 ÚE²+±é²+°3°/°Ö± é° ±+±é±+± ²999±± 9901% &5-2652mmÖþÒÖmþç¥è¥ÚÓÓþi…¾¾…c¢þûb‹‹b2 ÚE²+°3²+±é°/°Ö±é°± +±é±+± ²999±± 9901!%46  4&" þ“þ“Ö.Öþ“¥è¥ÓÓ—…¾¾…c¢b‹‹bþû2 Ú1²+± é²+±é°/°Ö±é±+± ²999013!2# !264&#!2ÓÓ—…¾¾…c¢b‹‹bþûmmÖþÒÖmþç¥è¥ÿÿ2 Ú'Ñšÿ) kÿÿ2 Ú'®ª k2 Ú1²+±é²+± é°/°Ö±é±+± ²99901!"&63!"3! ÓÓþi…¾¾…c¢þûb‹‹bÚþ“þ“Ö.Öþ“¥è¥2 ÚJ² +±é²+°3´  +±é°/°Ö±é°2°±+°2± é±+±± 990126= &53!5†¥è¥TÖþÒÖT2ÑŽb‹‹bŽ þi…¾¾…—µµ2 ÚJ²+°3² +±é´ +±é°/°Ö±é°2°±+°2±é±+±± 990154&"46 #5!¸¥è¥TÖ.ÖTýÎ Žb‹‹bŽþ÷—…¾¾…þiµµ2 Ú@²+±é°2²+±é°2°/°Ö±é°±+± é±+±± 9901%3264&+%!2#!53#;Žb‹‹bŽþ÷—…¾¾…þiµµT¥è¥TÖþÒÖT2ÿÿ2 Ú'Ñhÿ) qÿÿ2 Ú'®x q2 Ú@² +±é°2²+±é°2°/° ֱ鰱+±é±+±± 9901#";!"&63!#3Žb‹‹bŽ þi…¾¾…—µµ†¥è¥TÖ.ÖTýÎ2®^Ú>²+°/´+°2°/°Ö´+² +³@ +² +³@ +± +01535332y;x®;ññ;2 Ú^²+°3±é°2² +±33°/° Ö± é° ±+±é°±+±é± +± °9°°9°°9±°901%#"'#"&533265332653 hIO77OIhT7&%7T7%&7T²Jh>>hJ(ýØ&66&(ýØ&66&(2 Ú^²+± 33²+°3±é°2°/°Ö±é°±+±é°± +± é± +±°9°°9° °9±°9014632632#4&#"#4&#"#2hIO77OIhT7&%7T7%&7T(Jh>>hJýØ(&66&ýØ(&66&ýØ2 Ú R² +±é² +±é´ +±é°!/°Ö°2± é°2±"+± °9±° 9°°9°°9012#!5!2654&#!5!2654&#!5îGk##kGþD¼$88$þD¼$88$þDÚ€L*__*L€TO)(OTO()OT2 Ú(‚²+±é²+±é´#$ +°3±#é°2²#$ +³@#! +²$# +³@$& +°)/°!Ö°%2´ +°'2° ±+°2±é° 2±*+±°9±#°9°$°9°° 9012654&#!5!2#!5!2654&#!#5#5353î$88$þD¼Gk##kGþD¼$88$þù;zz;–P()OT€L*__*L€TO)(PmmRmm2 Ú 0¨²$+±%é²+±é´ $ +°3± é°,2° ³ +´+°1/° Ö±$22± é² +³@ +°2° ±+´+°±)+°2± é°2±2+±)°-9° °9±%± )99± ´$9±±9901462"'#5!2654&#!5!2#!5!2654&+64'¬#.##.6 g¼$88$þD¼Gk##kGþD¼$88$» T2++2)k.RP()OT€L*__*L€TO)(P.2 Ú R²+±é² +±é´ +±é°!/°Ö° 2±é°2±"+±°9±°9°°9°° 9013"&5467.5463!!"3!!"3!äGk##kG¼þD$88$¼þD$88$¼€L*__*L€TO)(OTO()OT2 Ú`²+°3±é° 2²+±é° 2°/°Ö±é°±+± é° ±+±é± +±°9° °9°°9±°9013265332657#"'#"&5†7&%7T7%&7ThIO77OIh†þ,&66&Ôþ,&66&ÔTýØJh>>hJ(2 Ú`²+±é°2²+°3± é°2°/°Ö±é°± +±é°±+±é± +± °9°°9°°9± °901%4&#"#4&#"4632632L7&%7T7%&7ThIO77OIhTÔ&66&þ,Ô&66&þ,T(Jh>>hJýØ2 Ú `² +±é²+±é´  +±é°!/° Ö±é° 2°±+° 2±é°2±"+±°9±°9° °9°°9017!2654&#!5!2654&#!'!2#!†h$88$þ˜h$88$þ˜T¼Gk##kGþDTO)(OTO()OT€L*__*L€2 Ú(�²+±é²+±$é´% +°3±é°2²% +³@ +²% +³@%' +°)/°Ö±é°$2°±+°&2´+°2°±+° 2± é°2±*+± °9±° 9°%°9°$°901!2#!7!2654&+#5#732654&#!3532¼Gk##kGþDTh$88$£;ŠÅ£$88$þ˜Š;Ú€L*__*L€TO)(OllTO()Oïl2 Ú!0 ²0+±é²"+±é´0" +°3±é°2°³+´+°1/°0Ö±é°2°±+´+°±+° 2±,é°&2±2+±°9±°9°,°)9±±,99±´)$9±± &9901462"72654&#!3#!2654&+64'!2#!ù#.##.Ò$88$þ˜` `h$88$n þ²¼Gk##kGþDT2++2)kP()Oð.ðO)(P.D€L*__*L€2 Ú `²+±é²+±é´  +± é°!/°Ö°2± é°2° ±+°2±é±"+± °9± °9°°9°°901!"3!!"3!!"&5467.5463!Lþ˜$88$hþ˜$88$hTþDGk##kG¼†O)(OTO()OT€L*__*L€2 Ú"o²+°3±é° 2²+±!33°#/°Ö±é°±+° 2± é°2° ±+±é±$+±°9° °9°°9±°9°³ $901'32653265%#"'#"&553?¹7&%7T7%&7¹ hIO77OIh TÄ„þj&66&þî&66&–%·ýØJh>>hJ(··2 Ú"o²+±!33²+°3± é°2°#/°Ö±é°±"+° 2±!é°2°!±+±é±$+±"°9°!°9°°9± ³ $9°°9014&#"4&#"74632632%#“¹7&%7T7%&7¹þóhIO77OIhþóT„–&66&þî&66&þj%·(Jh>>hJýØ··2 Ú$X² +±é²+±$é´  +°3±é°2°%/°Ö° 2± é°2±&+± °9±° 9°°9°$°9012#!#53!2654&#'32654&#!îGk##kGþD»»»»Š*$88$  $88$þÖÚ€L*__*L€CTCþiïO)(OTO()O2 Ú ,†²+±é²+±(é´ +± )33±é±22² +³@ +² +³@+ +°-/° Ö°*2´ +° 2° ±+°$2±é°2±.+±°9±°9°°9°(°901!2654&+#52#!#5332654&#!353NŠ*$88$<;wGk##kGþD»»»»€<$88$þÖŠ);CïO)(Oll—€L*__*L€CTCþ½O()Oïl2 Ú2´²-+±é²2+±é´/0-2 +°3±/é°2°/³/+´+°3/°/Ö±-222´+°±+´+°±+° 2±)é°#2±4+±/³.1$9°±99±°9°)°&9±±)99±0/¶&$9±± #9901462"732654&#!!2654&+642#!#53`#.##.d$88$þÖ‰ ‰*$88$ Gk##kGþD»»»»T2++2)kP()Oð.ðO)(P.V€L*__*L€CTC2 Ú$X²+±#é² +±é´ +°3±é°2°%/°Ö° 2± é°2±&+± °9±#°9°°9°° 9013"&5467.5463!3#7!"3#"3!äGk##kG¼»»»»þäŠþÖ$88$  $88$*€L*__*L€þ½Tþ½—ïO)(OTO()O2mØÚ²+°3°/±+013732EŽŽEÓÚ÷÷þ“ÿÿ2Úÿÿ2Úÿÿ2–ìZÿÿ2–ìGÿÿ2–ì'®øÿ~ ‹ÿÿ2–ìa2 Úc²+°3±é°2² +°/° Ö± é° ±+±é°±+±é± +± °9°°9°°9±°9° ²99901%#"'#"&53326=3326=3 hIO77OIhT7&%7T7%&7T²Jh>>hJ(ýØ&66&»»&66&»2 Úc² +²+°3±é°2°/°Ö±é°±+±é°± +± é± +±°9°°9° °9± ²999°°9014632632#4&#"#54&#"#2hIO77OIhT7&%7T7%&7T(Jh>>hJýØ(&66&»»&66&»2 Ú R² +±é² +±é´ +±é°!/°Ö°2± é°2±"+± °9±° 9°°9°°9012+532654&+532654&#!5îGk##kG……$88$……$88$þDÚ€L*__*L€TO)(OTO()OT2 Ú$ƒ²+±é² +± é´$ +±$é²$ +³@$ +²$ +³@ +°%/°Ö´+°2°± +°2±é°2±&+±±99± °9±$°9°°9° °901%#332654&#!5!2+532654&+j;;„$88$þD¼Gk##kG……$88$„×,lO()OT€L*__*L€TO)(Oÿÿ2 Ú& ‘®ž2 Ú R²+±é² +±é´ +±é°!/°Ö° 2±é°2±"+±°9±°9°°9°° 9013"&5467.546;#";#"3!äGk##kG……$88$……$88$¼€L*__*L€TO)(OTO()OT2 Ú,p²+±é²+°3±'é´, +±,é°-/°Ö±é°±+±)é²) +³@) +°)±$+± é±.+±)±99°$°9±',² $99901"&54632#".5332>54&#"3Ylq\i‹/N†[AypCT%:MH%=\=([Ey>3jYW^bžpM{}S4$N�`xþˆ>a;&2>\W32#4.#"3254&#.Ylq\i‹/N†[AypCT%:MH%=\=([Ey>3pYW^bžpM{}S4$N�`þˆx>a;&2>\W54.+532#"&54632¢T3)kkN5Y6'&;a>úú`�N$5KsCpžb^WYü3>yE[.CPA%HM:%TCpyA&\dR5‹i\ql2ŽÚ+{² +±é²+±é´&  +±&é²& +³@+ +²& +³@&( +°,/°#Ö°2±é°±++°'2´*+°*± +±é±-+±*+± 99±² #99901#"32>54.+532#"&546;53#1AikN5Y6'&;a>úú`�N$5KsCpža]A;;myE[.CPA%HM:%TCpyA&\dR5‹i\qkþÔ2ŽÚ-‹²'+± é²+±é´' +´+³-+±é°./°*Ö°2± é² * +³@ - +° ±+´+°±+±!é±/+±± '99± ± *99°±!99°-³$901462"'"32>54.+532#"&5463("0""0XkkN5Y6'&;a>úú`�N$5KsCpžb^z0""0"yE[.CPA%HM:%TCpyA&\dR5‹i\q2ŽÚ+p²+±é²#+± é´)# +±)é²) +³@ +°,/°Ö±é°±+±é°±+±&é°2±-+±² #)999±)±99° °&90133254&#";#".54>32#"&T3)kkN5Y6'&;a>úú`�N$5KsCpžb^WYÞ3>yE[.CPA%HM:%TCpyA&\dR5‹i\ql2UÚ&}²+± é²$+±#é´$ +±é² +³@ +°'/°Ö°#2±é°±+±é°± +±é°%2±(+±± 99° ±"99± ²999±#°&90132654&#"#4632#"&54?!5!ü"- uOGp1" TUA=f™ru£ òþn#±(!-7aZ0*6&2Q[cQRŒ�Z´\ŒTa2UÚ&}² +±é²+±é´  +±é² +³@ +°'/°Ö°2±é°±+±é°±!+±é°2±(+±±99°± 99±²!999±°901%5!!#"&54632#4&#"32654.‹þ§#þnò £ur™f=AUT "1pGOu -±ÈaTŒ\´Z�ŒRQc[Q2&6*0Za7-!(2UÚ&}²%+±"é²+± é´% +±é² +³@ +°'/°Ö°%2± é° ±+±é°±+±é°#2±(+± ±"99°± 99±"°&9± ²99901>54&#"32653#"&54632!!5‹"- uOGp1" TUA=f™ru£ ò’ýÝ)(!-7aZ0*6&2Q[cQRŒ�Z´\ŒTa2 #&w²+°3±é°/±é°!/±é°2°'/°Ö±é°±+±é² +³@ +°±+± é±(+±°9±²!999±±99°± 9901#37632#"&5463"32654&#"[ÈaTŒ\´Z�ŒRQc[Q2&6*0Za7-!(Yþ§#þnò £ur™f=AUT "1pGOu -2 #)”²+°3±é°/±é² +³@ +² +³@ +°$/±é°2°*/°Ö±é°±+±é°±+°2´+°±!+± é±++±°9±³$$9±±99°± !9901#37632#"&546753#532654&#"[ÈaTŒ\´Z�ŒRQcE?;;06*0Za7-!(Yþ§#þnò £ur™f=8Q LôS 41pGOu -2 #.²+°3±é°-/´( +° /±é°2°//°Ö±é°±"+±é²" +³+ +°±+±é±0+±"°9±² 999±-²"999°(³%$901%32654&#"#37632#"&5467>32#"ë6*0Za7-!(ÈaTŒ\´Z�ŒRQc84 '"00"*Û)1pGOu -"þ§#þnò £ur™f=2M0D02 #)ƒ²+°3±'é° /± é°/±é°2°*/°Ö±é°± +±é² +³@ +°±+±é±++± °9°°$9°²'999± '°$9° ±99°² 999014&#"3"&54632#".##2326¸O/)/&2Q[\PQ�yW>rTKHTAkI=54E(5IIn0" TUA>e˜sx \„ƒ\þA#3RbcR3r2 #&w²+°3±!é°/±é°/±é°2°'/° ֱ鰱+±é² +³@ +°±+±é±(+±²!999±°9±± 99°±9901%3##"&54632#52654&#"32>ãÈaTŒ\´Z�ŒRQc[Q2&6*0Za7-!(ÊYýÝ’ò £ur™f=AUT "1pGOu -2UÚ%†²+±é²$+°3´$ +±é² +³@ +°&/°Ö°#2±é°±+±é°± +±é°2±'+±°"9°²%999° °9±²999±$²"%9990132654&#"#4632#"&546?'5Uþ§G/pTKl1" TUA=f–u|œGY,ÌÚaþþ5E=2:?-*6&2Q[cQOqfXSnA ™aÇ2UÚ%ˆ²+°$3²+±é²+²+² +²+²+´ +±é°&/°Ö°2± é° ±+±é°±+±é°#2±'+± °9°²%999°°"9±²"%9990135>54&#"32653#"&54632%2YG/pTKl1" TUA=f–u|œGY,Ìþïa5E=2:?-*6&2Q[cQOqfXSnA ™aÇ2 #%j²+°3±é°/±é°!/±é°2°&/°Ö±é² +³@ +°±+± é±'+±²!999±°9°² 999°!°901337>32#"&5463"32654&#"2ÇÇa™ AnSXfqOQc[Q2&6*-?:2=E5þþÌ,YGœ|u–f=AUT "1lKTp/Gþ§2 #)‡²+°3±é°/±é² +³@ +² +³@ +°%/±é°2°*/°Ö±é°±+°2´+°±"+± é±++±³%$9±°9°² "999°%°901337>32#"&546753#532654&#"2ÇÇa™ AnSXfqOQcMF;;#6*-?:2=E5þþÌ,YGœ|u–f=;SJôV 1lKTp/Gþ§2 #+l²+°3±!é°/´ +°'/±é°2°,/°Ö±é² +³ +°±$+± é±-+±$²'999±!±99°µ $$901337>32#"&547632#"'32654&#"2ÇÇa™ AnSXfqOQcP."00"$6*-?:2=E5þþÌ,YGœ|u–f=l&'0D0(1lKTp/Gþ§2 #%j²+°3±!é°/±é°/±é°2°&/° ֱ鰱+±é² +³@ +±'+±²!999±!°9°² 999°°901#'#"&54632#52654&#"3267 ÇÇa™ AnSXfqOQc[Q2&6*-?:2=E5#þîþïÌ,YGœ|u–f=AUT "1lKTp/GY2 nX°/± é°/±é°2°/°Ö± é² +³@ +° ±+±é±+± °9°±99± °9°°90132=3#"&547!5!  J:¡TŠk`zþân*Lž||u}|N8T2ÿÿ m\²+°3±é° /±é°/°Ö±é°± +±é² +³@ +±+± ±99°°9±°9° ± 9901!>54&#"#54632!$!  J:¡TŠk`z+Kžzzv|{O7T2ŸÚT² +± é²+´  +±é°/°Ö° 2±é°±+±é±+±±99± ±99°°90173632+53254&#"2T8N||v{{žL*òèþâz`kŠT¡:J  !ÿÿ2ŸÚ& «Ó¤ÿrÿÿ2ŸÚ& «®\ÿl2ŸÚZ²+±é²+´  +±é°/°Ö± é° ±+±é°2±+± ± 99°°9± ±99°°901%.#";#"&546323Ÿ*Lž{{v||N8Tò!  J:¡TŠk`z2 Úx²+±é°/±é°2² +³@ +² +³@ +° /°Ö´+°2°±+±é°±+±é±!+±°9°±99±±99°°9017#3!32=3#"&547#m;;­!  J:¡TŠk`zã®,m*Lž{{v||N82ÿ“ mx²+°3±é² +³@ +² +³@ +°/±é° /°Ö±é°±+±é°±+°2´+±!+±±99°°9±°9°±9901%3#5!>54&#"#546323Ñ;;þS!  J:¡TŠk`zã¿þÔm*Lž{{v||N82 Úz² +± é²+´+°2´  +±é° /°Ö° 2±é² +³@ +² +³@ +°±+±é±!+±°9°±99± ±99°°901#632+53254&#"#5!^k8N||v{{žL*m,Ÿãz`kŠT¡:J  !­;ÿÿ2 Ú& ±Óÿrÿÿ2 Ú& ±®Êÿl2 Úz²+±é²+´+°2´ +±é° /°Ö±é°±+±é°2² +³@ +² +³@ +±!+±±99°°9±±99°°9015!#.#";#"&546325à,m*Lž{{v||N8Ÿ;;þS!  J:¡TŠk`zã2/#j² +±é°/°3±é°2°/° Ö°2±é² +³@ +°±+±é°2² +³@ +±+±³ $9±³ $90153#"&5467#532654&[Ô€:E•Ò•E:Ó7HeŠeH–�T!rDg‘‘gDq"T�X8D``D8W2/#j²+°3±é°2°/± é°/°Ö°2±é² +³@ +°±+± é°2² +³@ +±+±³ $9±³ $901%#53.54623#5>54&"Ô€:E•Ò•E:Ó7HeŠeH��T!rDg‘‘gDq"T�X8D``D8W2Uýj² +°3±é² +³@ +°/±é°2² +³@ +°/°Ö°2±é°2°±+± é±+±³ $9±³ $901#53>32#"&'#533264&#"¿�T!rDg‘‘gDq"T�X8D``D8W)Ô€:E•Ò•E:Ó7HeŠeHÿÿ2Uý& ·Ó8ÿ•ÿÿ2Uý'®ðÿ’ ·2Uýh°/°3±é² +³@ +°/± é°2² +³@ +°/° ֱ鰱+°2±é°2±+±³ $9±³ $901%3#5#"&463253#.#"326È�T!rDg‘‘gDq"T�X8D``D8WÔÔ€:E•Ò•E:Ó7HeŠeH2±Ž!޲+±é°/°3±é°2² +³@ +² +³@ +°"/°Ö°2±é² +³@ +°±+± é² +³@ +° ±+°2´+±#+±³ $9±³ $9015!53#5#"&5467#532654&[;;Ç:E•Ò•E:Ó7HeŠeH–�kþÔm!rDg‘‘gDq"T�X8D``D8W2ÿ–±$!Œ°/°3±é°2² +³@ +² +³@ +°/±é°"/°Ö´+°2°± +±é² +³@ +°±+±é°2² +³@ +±#+±³ $9±³ $901%!#33.54623#5>54&"ˆþå;;Ç:E•Ò•E:Ó7HeŠeHŽ�k,m!rDg‘‘gDq"T�X8D``D8W2À!в+°3±é² +³@ +°/± é² +³@ +°/°3´+°"/°Ö°2±é°2² +³@ +² +³@ +°±+±é±#+±³ $9±³ $901##5!#>32#"&'#533264&#"*�k,m!rDg‘‘gDq"T�X8D``D8W);;Ç:E•Ò•E:Ó7HeŠeHÿÿ2À& ½Ó«ÿ”ÿÿ2À'®^ÿ’ ½2À!в+° 3±é² +³@ +°/±é² +³@! +°/°3´+°"/°Ö±é°±+°2± é° 2²  +³@  +² +³@ +±#+±³ $9±³$901.#"32673#5#"&46325#5!#ÈW8D``D8X�T"qDg‘‘gDr!m,k)7HeŠeH7Ó:E•Ò•E:Ç;;þå2 �$‹²+°3±é°2°/±é° 2² +³@# +² +³@ +°%/° ֱ鰱+±é°±+±é°±#+°2´"+±&+±°9°°9°°9±°9°°901#"'#"&53326533265353#5€`IG77GI`T/&$0T0$&/¥;;ÏþãJh>>hJqþ�'55'þæ'55'qlþÔl2ÿ” #$‹²+° 3±$é²$ +³@! +²$ +³@$" +°/°3±é°2°%/°!Ö´ +°#2° ±+±é°±+±é°± +± é±&+±°9°°9° °9±$°9°°90174632632#4&#"#4&#"##3¾`IG77GI`T/&$0T0$&/¥;;TJh>>hJþ�q'55'þæ'55'þ�l,l2ÁÚ$�² +± é²!+´ +°#2´ ! +±é´ ! +±é°%/°Ö° 2±é² +³@# +² +³@ +°±+°2±é°2±&+±°9°°9± °9°°9°°901!2#!5!2654&#!5!2654&#!5#5!#òJh>>hJþ�q'55'þæ'55'þ�l,lN`IG77GI`T/&$0T0$&/¥;;2ÁÚ(®² +± é²%+´$+°'2´ % +±é² +³@ +² +³@ +´" % +±é°)/°#Ö° 2±é²# +³@' +²# +³@#$ +°± +´+°2°±+°2±é°2±*+±°9± °9°°9°"°901!2#!5!2654&+#332654&#!5#5!#òJh>>hJþ�q'55'à;;à'55'þ�l,lN`IG77GI`T/&$0m,k0$&/¥;;2ÁÚ,ʲ+±é²)+´(+°+2´) +±é°³+´+´&) +±é°-/°'Ö°2±é²' +³@+ +²' +³@'( +°'° Ö´+°±+°"2±é° 2±.+±±99°±99°°9°°9±±99±´$9±&± "9901462"!2#!5!2654&+532654&#!5#5!#Â"0""0Jh>>hJþ�q'55'¯¯'55'þ�l,l0""0"a`IG77GI`T/&$0T0$&/¥;;2ÁÚ$�²+±é²+´+°2´ +±é´$ +±$é°%/°Ö°!2±é° 2°±+±é°2² +³@ +² +³@ +±&+±°9°°9±°9°°9°°!9015#5!#!"3!!"3!!"&547&5463l,lþ�'55'þæ'55'qþ�Jh>>hJNQ;;¥/&$0T0$&/T`IG77GI`2 Úc² +±é²+°3±é°2°/°Ö±é² +³@ +°±+± é² +³@  +±+±± 99±³ $901463""&54426n\B+«ð«+B\zªz"C_T- þéxªªx -T_CþêUyy2 Úc²+°3±é°2² +±é°/°Ö±é² +³@ +°±+±é² +³@ +±+±± 99±³ $901#52654623"&54&"Ð\B+«ð«+B\zªz¸þêC_T- xªªxþé -T_CUyy2 Ú[²+²+´ +±é´ +±é°/°Ö°2±é°2°±+± é±+±³ $9±± 9901!"&533!2#!"#463!264&êþêC_T- xªªxþé -T_CUyy<\B+«ð«+B\zªzÿÿ2 Ú'Ñ–ÿ) Éÿÿ2 Ú'®î É2 Ú[²+²+´  +± é´ +±é°/° ֱ鰱+°2±é°2±+±³ $9±± 9901%!2#4&#!"&463!2653#!"TC_T- þéxªªx -T_CþêUyyž\B+«ð«+B\zªz2myÚ>²+´+°/´+°/°Ö°2´+°2± +±²99901!3!#2GÙÙþ¹ÒÒÚþÉ672'y i²+°3´+°2² +³@ +° /°3´+°2²  +³@ +°/° Ö² 222´ +²222±+±³ $901333##5#75#5357·6ŒŒŒŒ6…………M FÉn6FFÅr6þÉ!!""ÿÿ2 Ú& DZØÿÿ2 Ú& È uÖþRÿÿ2 Ú& ÉÔ2ÿÿ2 Ú'Ñ�ÿ) Ñÿÿ2 Ú'®® Ñÿÿ2 Ú& ÌÕà2 Ú*�²+°3±é°2² +³@ +²+°&3±é°'2°+/° Ö±é²  +³@  +°±+±é°±"+±é²" +³@& +±,+±°9°°9°"°9±°9°³ #$901%#"'#"&544326533265463"Â_HE77EH_+B\.%$.T.$%.\B+²Kg>>gK‡ -T_Cþz'55'qþ�'55'†C_T- 2 Ú*�²&+°3±'é°2²+°3±é°2² +³@ +°+/°*Ö±#é²*# +³@*& +°#±+±é°±+± é²  +³@  +±,+±#°9°°9°°9±'³ #$9°°90146326323"&54&#"#4&#"#5265|_HE77EH_+B\.%$.T.$%.\B+(Kg>>gKþy -T_C†'55'þ�q'55'þzC_T- 2œÚ*}²+²&+´ & +± é´& +±é´*#& +±*é°+/°Ö°&2±é°'2°±+°2±é°2±,+±´ #$9°°9±°9°°9°#°9012#!"#463!2654&#!5!2654&#!"&533êKg>>gKþé -T_C'55'þÿ'55'þêC_T- �_HE77EH_+B\.%$.T.$%.\B+2œÚ.®²+²*+´ * +± é´* +±é² +³@ +² +³@ +´.'* +±.é°//°Ö°*2±é°+2°±+´+°2°±+°#2±é°2±0+±³ '.$9°³ &$9°°9±°9°°9°'°9012#!"#463!2654&+#332654&#!"&533êKg>>gKþé -T_C'55'á;;á'55'þêC_T- �_HE77EH_+B\.%$.l,l.$%.\B+ÿÿ2œÚ& ×®2œÚ*}²'+²+´"' +±é´' +±é´ ' +± é°+/°Ö°2±é°2°±'+°2±&é°2±,+±°9°'´ #$9±"°9°°9°°9017"&547&5463!2653#!"3!!"3!2#4&#äKg>>gK -T_Cþê'55'þÿ'55'C_T- J_HE77EH_+B\.%$.T.$%.\B+2 Ú )2³²+°3±/é°&2²+°3±é°2´+ +°!3±é°2²+ +³@ +°3/° Ö±,é°2² , +³@  +°,±2+°2±#é°2°#±)+°2±é²) +³@ +±4+±2,°9°#°9°)°9±/°9°+± 99±± 9901%#"'#"&54435335463"#3265#3265Â_HE77EH_+B\¥T¥\B+T¥.$%.ù¥.%$.²Kg>>gK‡ -T_CccC_T- jþã'55'þã'55'2 Ú )2³²+°3±é°2²+°3±&é°/2´! +°*3±é°2²! +³@ +°3/° Ö±é°!2²  +³@  +°±+°"2±é°*2°±+°+2± é²  +³@  +±4+±°9°°9°°9±± 99±&!± 99°°90146326323"&=##5##5265734&#"34&#"|_HE77EH_+B\¥T¥\B+T¥.$%.ù¥.%$.(Kg>>gKþy -T_CccC_T- j'55'þã'55'2œÚ )2«²+²+´  +°+3± é´ +°"3±é°*2´  +°!3± é°3/°Ö°2±é°2°±+°2±+é°!2²+ +³@ +°+±/+°&2±é°2±4+±± 99±/+± 99°°9±°9°°9°°9012#!"#46;5#535#"&53332654&#32654&#êKg>>gKþé -T_CccC_T- j­'55'­­'55'�_HE77EH_+B\¥T¥\B+T¥.$%.ù¥.%$.2œÚ :Ù²)+²6+´%,)6 +°3±%é´/0)6 +±33±/é±22²/0 +³@/ +²0/ +³@0 +´:3)6 +° 3±:é°;/°)Ö°62±(é°72°(±-+°12±é° 2²- +³@-/ +°± +°2´ +°2° ±+°2±!é°2±<+±-(±%:99± ±$99°!°9±/,°!9°0°9°3°90132654&+#5'353326544#!"#46;5#535#"&533=­'55'1;AA;1'55'Kg>>gKþé -T_CccC_T- C¥.%$.llù¥ll.$%.T_HE77EH_+B\¥T¥\B+2œÚ Aä²0+²=+´,30= +°3±,é´670= +° 3±6é° 2°6³6+´+´A:0= +°3±Aé°B/°0Ö°=2±/é°>2°/±4+°82±é°2²4 +³@47 +°±+´+°±+°2±(é°$2±C+±4/±,A99°°9±²!+999°(°&9±3±(99°6°9°7µ&$9±:±$9901462"764'72654&+32654&#2#!"#46;5#535#"&533P#.##.d '55'­ ­'55'Kg>>gKþé -T_CccC_T- T2++2)..$%.¦¥.%$.M_HE77EH_+B\¥T¥\B+2œÚ )2«²+²+´) +°3±é´#2 +°3±#é°2´ , +°3± é°3/°Ö°2±&é°/2°&±!+°*2±é°2²! +³@ +°±+°2±é°2±4+±&°9°!± 99±± 99±#)°9°2°9°,°9017"&547&5463!2653+3#32#4&#'5#"375#"3äKg>>gK -T_CccC_T- j­'55'­­'55'J_HE77EH_+B\¥T¥\B+T¥.$%.ù¥.%$.2ÛÚ#*4²²+²+´#, +°3±#é´% +°3±é°2°5/°Ö±(é°(° Ö±é°/±é°(±+²$222´+²+222°±/+± é° ° Ö±é°/±é±6+±°9±#°9°,°9°%µ $+$9°°901!#5&'35.546753#&'5>54.";¯X'1:-$[M;OTXIVGcV;&+&f-5  U ¦)4¬:&BTVUSGF ¢%QFWN”)"ož,  2 Ú6IJ+°3±é°2²!+±)233± é²'+3222´%! +° 3±%é°-2°7/°Ö±é°$2² +³@! +°±+°&2± é°,2²  +³@ + +² +³@( +° ±+°.2±é² +³@2 +±8+±°9° °9°°9±°9°±99± %±69901#3265#32653#"'#"&54435#5!#35463"u¥.%$.ù¥.$%.T_HE77EH_+B\¥ZZ¥\B+Ïþã'55'þã'55'Kg>>gK‡ -T_CcTTcC_T- 2 Ú6IJ2+±!)33±3é² '+222²+°3±é°2´. 2 +°3±.é°%2°7/°6Ö±/é° 2²6/ +³@62 +°/±,+° 2±'é°2²', +³@') +²,' +³@,* +°'±$+°2±é²$ +³@! +±8+±,/°9°'°9°$°9±.3±699± ±99°°90134&#"34&#"#46326323"&=#3!535##5265É¥.%$.ù¥.$%.T_HE77EH_+B\¥ZþøZ¥\B+ '55'þã'55'Kg>>gKþy -T_CcTTcC_T- 2œÚ6¼²!+²2+´$!2 +°3±é´',!2 +° 3±'é°2²', +³@') +²,' +³@,* +´6/!2 +° 3±6é°7/°!Ö±)222± é²'+3222° ±%+°-2±é° 2°±+°2±é°2±8+±% ±699±±99°°9±'$°9°,°9°/°90132654&#'326544#!"#46;5##335#"&533=­'55'­­'55'Kg>>gKþé -T_CcTTcC_T- C¥.%$.ù¥.$%.T_HE77EH_+B\¥ZZ¥\B+2œÚ$1>à²+² +´! +°&3±é´$ +±3733±$é±%-22²$ +³@$ +³@$0 +²$ +³@ +³@5 +´ +°23±é°?/°Ö± 22±é² 222°±"+°2±&é°22°&±0+°42´/+°62°/±*+°;2±é°2±@+±"±99±*/±99°°9±$!°9°°9°°9017#335#"&533!2#!"#46;5#332654&+#5'35332654&#†TTcC_T- Kg>>gKþé -T_Cc·­'55'1;AA;1'55'éZ¥\B+_HE77EH_+B\¥¥.%$.llù¥ll.$%.2œÚ$,Eõ²+² +´" +°>3±é´ +°13±é°E2² +³@ +² +³@ +°³,+´(+´ +°73±é°F/°Ö± 22±é² 222°±#+°2±>é°82°>±&+´*+°*±B+°42±é°2±G+±#±99°>°;9±B*²-999°°9±,"±B99°°=9°µ%&)*9$9±(±49901#335#"&533!2#!"#46;56462"764'72654&+32654&#†TTcC_T- Kg>>gKþé -T_Cg#.##.d '55'­ ­'55'CZZ¥\B+_HE77EH_+B\¥2++2)..$%.¦¥.%$.2œÚ6¼²3+² +´3 +°.3±é´ 3 +°&3± é°,2²  +³@ + +² +³@( +´3 +°$3±é°7/°Ö°2±é°2°± +°2±.é°%2°.±3+² '+222±2é±!)22±8+±°9° ±99±3.±699± °9°°9°°9015#"35#"3"&547&5463!2653+353#5#32#4&#‘­'55'­­'55'Kg>>gK -T_CcTTcC_T- —¥.%$.ù¥.$%.T_HE77EH_+B\¥ZþøZ¥\B+2 Ú. ²+°3±%é°2²+± +33±é² )-222°//°Ö±"é²" +³@ +°"±(+±é²( +³@- +²( +³@(* +°±+±é² +³@ +±0+±("°9°°9°°9±%°9°³!$901%3265463"#"'#"&5443265#5!#É.$%.\B+_HE77EH_+B\.%$.ZZ²'55'†C_T- þyKg>>gK‡ -T_Cþz'55'ÔTT2 Ú. ² +±+33± é²)-222²+°3±é°%2°//°Ö±é² +³@ +°±.+±)é²). +³@)+ +².) +³@., +°)±!+±é²! +³@ +±0+±.°9°)°9°!°9± ³!$9°°9014&#"#526546326323"&54&#"3!53u.$%.\B+_HE77EH_+B\.%$.ZþøZ('55'þzC_T- ‡Kg>>gKþy -T_C†'55'þ,TT2œÚ.˜²$+²+´ '$ +± é´$ +±é² +³@ +² +³@ +´ $ +±é°//°$Ö±22±#é²222°#±++° 2±é°2±0+±+#³ '$9°°9±'°9°°9° °901#3!2654&#!"&533!2#!"#463!2654&#†TTd'55'þêC_T- Kg>>gKþé -T_C'55'CZZ.$%.\B+_HE77EH_+B\.%$.2œÚ6˲(+²+´$+( +±$é´( +° 3±é°22² +³@ +³@5 +² +³@ +³@ +´( +±é°7/°(Ö±22±'é²222°'±5+°2´4+°2°4±/+° 2± é°2±8+±5'³$+$9±/4³#,$9° °9±+° 9°°9°°901#335332654&#!"&533!2#!"#463!2654&+#5†TTz;¯'55'þêC_T- Kg>>gKþé -T_C'55'¯;CZZll.$%.\B+_HE77EH_+B\.%$.ll2œÚ4>á²*+²+´&-* +±&é´5:* +° 3±5é°2²5: +³@57 +²:5 +³@:8 +°5³5+´+´* +±é°?/°*Ö±722±)é²59222´=+°)±+´+°±1+°2±"é°2±@+±=µ&-;>$9±1´%.$9°"° 9±-±"199±:5´ $9±±9901462"764'32654&#!"&533!2#!"#463!2654&#!#33Ö#.##.d �'55'þêC_T- Kg>>gKþé -T_C'55'þœTT= T2++2)0.$%.\B+_HE77EH_+B\.%$.ZZ02œÚ.˜²+²#+´ # +±é´.# +±é². +³@ +². +³@. +´(# +±é°//°Ö°2± é°+2° ±+²#222±é±$22±0+± °9°³ '$9± °9°.°9°(°90153#5!"3!2#4&#!"&547&5463!2653#!"3HTTþœ'55'C_T- þéKg>>gK -T_Cþê'55'—ZþøZ.$%.\B+_HE77EH_+B\.%$.2 Ú&Œ²+°3±é° 2²#+±33±"é°%2°'/°Ö±é°±+° 2± é°2²  +³@ % +² +³@" +° ±+±é±(+±°9° °9°°9±°9°"³ $901'32653265%#"'#"&55#5!#?¹7&%7T7%&7¹ hIO77OIh ZZÄ„þj&66&þî&66&–%·ýØJh>>hJ(·cTT2 Ú&Œ²$+±33±%é°!2²+°3± é°2°'/°Ö±é°±&+° 2±!é°2²!& +³@!# +²&! +³@&$ +°!±+±é±(+±&°9°!°9°°9± %³ $9°°9014&#"4&#"74632632%3!53“¹7&%7T7%&7¹þóhIO77OIhþóZþøZ„–&66&þî&66&þj%·(Jh>>hJýØ·cTT2 Ú(Œ²+±é²+±(é´ +° 3±é°2² +³@ +² +³@ +°)/°Ö±22±é°2°±+°$2±é° 2±*+±³($9°°9±°9°°9°(° 901#33!2#!3!2654&#'32654&#!†TTg»¼Gk##kGþD»aŠ*$88$  $88$þÖCZZC€L*__*L€CïO)(OTO()O2 Ú #0²²"+±é²+±+é´ " +±$,33± é±22²  +³@  +³@  +² +³@. +³@ +°1/°Ö±"22±é°2°±+°-2´+°/2°± +°'2±é°2±2+±³#+$9± °9± °9°°9°+°901#5#!2654&#!#33!2#!%2654&#!353²;)Š*$88$þ˜TTg»¼Gk##kGþD»$88$þÖŠ);CllïO)(OZZC€L*__*L€CTO()Oïll2 Ú6Ʋ5+±é²'+±é´ %5' +° 3± é°2² % +³@ " +²% +³@%# +° ³ +´+°7/°"Ö±'522±!é°$2°!±+´+°±+°2±1é°+2±8+±!´&6$9±°9°1°.9±±199° °9°%µ.$9±±+9901462"764'32654&#!!2654&#!#33!2#!`#.##.d $88$þÖ‰ ‰*$88$þ˜TTg»¼Gk##kGþD»T2++2)0O()Oï0ïO)(OZZC€L*__*L€C2 Ú(Œ²+±'é²+±é´! +°3±!é°2²! +³@! +²! +³@ +°)/° Ö°2±$é°2°$±+°2±é±22±*+±$ °9°³($9±!'° 9°°9°°90153#5#!"&5467.5463!#7!"3#"3!LTTg»þDGk##kG¼»aŠþÖ$88$  $88$*—ZþøZþ½€L*__*L€þ½ïO)(OTO()O2Ú1²+°3±é²+°3±é°/±+±³ $901%"./#'.#523%+?¿ûn2Ä(,D¿ûnþÎÄ/TT! äþÕmêT" ä+þ“ê2@ B²+°3´ +°2° /°Ö° 2´+°2± +±±99± ± 9901''7'7 hh gg hh g gg hh gg hÿÿ29Ú'ò×ÿÿ2îÚ'Ð ÿÿ2òÚ'Ô ÿÿ2ðv'Ò ÿÿ2‘Ú's ÿÿ2£v's ÿÿ2ðÚ'Ò ÿÿ2v'Ò ÿÿ2jÚ& .®Äÿÿ2ØÚ& /®2ÿÿ2Øv& ÿ®zÏÿÿ2ˆÚ& 1®âÿÿ2ˆv'®â& 1®<Ïÿÿ2ØÚ& 3®2ÿÿ2Øv'®2& 3®jÏ2å^ž1°/´+°/´+°/±+°2´+°2± +015!5!2,þÔ,c;;~;;2‹^ør°/° 3´+° 2² +³@ +°/°3´+°2² +³@ +°/°Ö±22´ +±22²  +³@ +°2² +³@ +°2±+0153533#3##5#5352x3•$$$2¬ThUƒT5[oA„2$$$KþkXJ£�Eh<2ÆÚ  ²+²+°3´+´ +±é±  À/´ +°!/°Ö±é°±+´ +° ±+´+°±+±é±"+± ² 999± ²999014632"&264&"'2#54&+é$$$2”Ao[5TƒUh„2$$$Kþ»"0""0ˆ0""0"þ˜æb€€b”RÒD`_Ef0""0"2¤Úu² +²+±é´  +± é° ³ +´+°/°Ö´+°± +°2´ <+° ±+´<+±+± ³$9±±9901532+#3264&#462"Üæb€€b”RÒD`_Eþ„"0""0‰QzPR}þ¿“IhEþÌ0""0"2¤v"™²+² +±é´ +±é°³+´+°"/´+°#/°Ö´+°±+°2´<+³+´ +°±+´ <+±$+±³!"$9±³$9±± 9901462"532+#3264&#&462"2"0""0ˆæb€€b”RÒD`_Eã"0""0U0""0"VQzPR}þ¿“IhE›0""0"2|Úw² +²+±é´   +± é° ³ +´+°/°Ö´+°±+´<+°± +´<+°2±+± ³$9±² 99901#";##"&46;462"|ÒE_`DÒR”b€€bæý¶"0""0‰EhIþmA}¤xþ{0""0"2mÛݲ+°/±+01 #ž—–?ÕÔmþüpþ�2m’Ú:² +´+°/°Ö´+°±+´+±+±± 990154&"#5462\HdH6g’gm½2HH2½½IggI½2l7ÚU²+´+°/´+°/° Ö´ +° ±+´+² +³@ +±+± °9±°90153264&#"#4632#‚+#//# #8H38RŠú84#÷(7:6p2l7ÚC² +´+² +³@ +°/° Ö´+°±+´+±+±° 901#4&#"#463278/# #8H38Rj#÷(7:2m(Ú8²+´+² +³@ +°/°Ö´+² +³@ +±+013##2ö»;Ú:þÍ2l qS°/´+² +³@ +° /´ +°/°Ö´+°±+´+±+±°9± °901#"&5463!#"26=p6:7(÷#4!+ŠR83H8# #//#+2mÚ >²+° /´+²  +³@  +° /°Ö´+°±+´ +±+01#5326=3#h6B&46VFm»70K>VP2m´f( °/° 3´+°&2°/°3´+°2°)/°Ö´+² +³@ +°±+´+² +³@ +±*+°6ºÁ]òÞ+ ° ° À±"ù°#À³ "#....³ "#....°@±± 99±±99014'52#"&/&#"3&54632326‚80:<*,2 .%  ~E-%9 æL2B<;@)0>0')2p>G-+?#2m Ý ?²+°/´+° /´ +°/°Ö´ +±+± °9± °901/&462"dÕÔ]ww�"0""0mpþ�6ÎΉ0""0"2m Ý ?²+°/´+° /´ +°/°Ö´ +±+± °9± °901/$462"2ÕÔ]ww "0""0mpþ�6ÎΉ0""0"2_­Ú R²+´+°/´ +°/°Ö´ +° ±+´+±+± ²999± ²99901462#"&3264&"2$4#$ „2$$$K2f¦Ú5²+´+²+´+°/°Ö´+´+± +01462"2"0""0ˆ0""0"2¦Úr² +±é°/±é°2³+´+°/°Ö´<+² +³@ +°±+´ 1+° ±+´+±+±° 9±³$901462"'3#"&=!5!2652"0""0™QzPR}þ¿“IhEˆ0""0"bæb€€b”RÒD`_E!úvn²+±é²+´ +±é°/´+°/°Ö°2´<+³+´+°± +´<+±+±³$9±±9901462"3264&+332+!"0""0ÒE_`DÒR”b€€bæ$0""0"ýOEhI“þ¿}¤x2 vl² +±é²+´  +±é°/´+°/° Ö´<+°±+´<+°2³+´+±+±³$9±° 901462"#"&546;3#"3—"0""0Aæb€€b”RÒD`_E$0""0"ýOQzPR}AþmIhE2XÚ'š²+±é² +°3±é´'# +´'+´ +±é°(/°Ö±é°2°±+± é° ±+±é°±!+´%+±)+±´ $9± ±99±'±!$99°#°9±± 9901"&5462#"'265264&"462"´ÅøÅdŒddF-)•°•þ&3F33F+"0""0ÚþJv®®v FddŒdyS}}S¶‡F33F3þÏ0""0"2(Ú'�²+±é²+±é°2´'# +´'+´  +±é°(/°Ö±é°±+±é°±+± é°2° ±! +´%+±)+±°9°± 99±'±99° ±!$99±#°9°³ $901)"&6;2"&547#"3!"264462"´þ¢y««y´FddŒd!S}}S^‡F33F3T"0""0Ô2ÔdŒddF-)°Ò°23F33Fþ0""0"2XÚ|²+±é² +±33² +´ +´+°/° Ö± é° ±+´+°±+±é°±+´+±+± ±99±±99± °9013#"&53265462"V;;^ÅøÅT•°•„"0""0ÙþÔ-þJv®®v¶þJS}}S¶þ{0""0"2¶v i²+±é² +±é´  +´+°/´+°/°Ö´+°±+±é±+±± 99±±99± ±9901462"5!!2#!5!264&#!:"0""0þÖ,þÔA…¾¾…þ¿Ab‹‹bþ¿$0""0"þN::ŠÖþÒÖT¥è¥2¶vi²+±é² +± é´ +´+°/´+°/°Ö±é°±+´+±+±±99±±99± ±99015!!"&63!!"3!462"Š,þ¿…¾¾…Aþ¿b‹‹bAþ„"0""0P::þ°Ö.ÖT¥è¥Ð0""0"2ÄÚ „²+° 3² +±é´  +´+° Ö±é°!/°Ö°2´<+°±+´ <+° ±+´+±"+±³ $9± ±99°±99°±9901 #"&54632#4&#"3462"±þådáb‘eb”R^FE_`D("0""0“þmARPx“Sþ à:nB45J 0""0"2N }²+±é²+°3²+´+´  +± é°!/°Ö°2´ <+° ±+´+°±+´<+±"+± ° 9°²999°°9± °901462"#"32653#"&54633"0""0�‰D`_EF^R”be‘bádü0""0"þmJ54Bn:àþ S“xPRA2öÚ'/¥²'+²"+±é´ '" +±é´+/'" +´++´'" +±é² +³@ +°0/°Ö±é°±+±é°± +±é°±'+±&é°&±)+´-+±1+±± 99° ²"999±+/± 99°±99014&#"3254&#"#432#"&54632#462"oNRk<5oTs2I+L1Vužsp¡T‚"0""0ÌNoTKLKy&“S,$D=%ƒemƒŸoþ4ˆ0""0"2ev'/§²+±%é²+´ +±é² +³@ +´  +± é°//´++°0/° Ö±"é°"±+±é°±+±é°±+±é³)+´-+±1+±± 99°²%999±³*+./$9±² "999013#"&54632#"5332654#"326462"T¡psžuV1L+I2sTo5>hJ(ýØ&66&(ýØ&66&(þ{0""0"2 v (j² +±é² +±é´ +±é°(/´$+°)/°"Ö´&+°&±+°2± é°2±*+± °9±° 9°°9°°9012#!5!2654&#!5!2654&#!5$462"îGk##kGþD¼$88$þD¼$88$þD"0""0Ú€L*__*L€TO)(OTO()OTJ0""0"2 v (j²+±é² +±é´ +±é°(/´$+°)/°Ö° 2±é°2°±"+´&+±*+±°9±°9°°9°° 9013"&5467.5463!!"3!!"3!462"äGk##kG¼þD$88$¼þD$88$¼þš"0""0€L*__*L€TO)(OTO()OT$0""0"2XÚ (‰²+±é² +±é´ +±é°³(+´$+°)/°Ö° 2±é°2°±"+´&+±*+±°9°"³  $9±(±99±´!"%&$9±$± 99013"&5467.5463!!"3!!"3!462"äGk##kG¼þD$88$¼þD$88$¼D"0""0€L*__*L€TO)(OTO()OTU0""0"2Uv.¤²$+±é²,+±+é´$, +±é² +³@ +°/´+°//°'Ö°+2±é°±+´+³+±é°/±é°±+±!é°-2±0+±µ$$9±²*999±²!'999±+°.901462"32654&#"#4632#"&54?!5! "0""0/"- uOGp1" TUA=f™ru£ òþn#$0""0"þ¯(!-7aZ0*6&2Q[cQRŒ�Z´\ŒTa2¦#&.˜²+°3±!é°/±é°/±é°2³*+´.+°//° ֱ鰱+±é² +³@ +°±+±é°±(+´,+±0+±²!999±°9±± 99±.´(+$901%3##"&54632#52654&#"32>$462"ãÈaTŒ\´Z�ŒRQc[Q2&6*0Za7-!(c"0""0ÊYýÝ’ò £ur™f=AUT "1pGOu -à0""0"2mæÚ J²+´+°/´+°2° /°Ö´+² +³@ +°´#+°/°3± +013#53#53¥A´AAsŸ22 22l v0°/´ +°2°/°Ö´+° 2±+± ± 9901&#"#3632ç# #88'8(/#“ 2m1t|°/´+°/´ +°/´+°/°Ö´ +²  +³@  +° ±+´+² +³@ +±+± ± 99±°9± ±99±°90146;#";2+532654&+"2,¨¨  m**®® mB+2/B-2 ÿÿã Øÿÿ µ òÿÿ&ÿëQ¨oÀÿÿ!ÿéðÚÿÿ6Ü Ûÿÿ â öÿÿ6® ÜÿÿÿéÇÿÿÿHÿ3œ LÞ ÀÿÿÿéG áÿÿ6æ âÿÿ’ ÷ÿÿ60 äÿÿ!ÿé(æÿÿ6¶ çÿÿÿÿÚ $ ÀÿÿÂ éø Àÿÿ° ëÿÿ6ÿéÉ ìÿÿÓ íÿÿŸ îÿÿ® ñÿÿzdóõÿø„*áÿÿi:ðøÿþ†*áÿÿuMw²ÿû…*áÿÿ u&ïÿÿõ…*áÿÿ ‡¬p ‡*áÿÿ-wŸç ‡*áÿÿ,†bæà†*áÿÿ"†ýæãÿþ†*áÿÿ&óöðÿþ†*áÿÿ ðçÿø‡*áÿÿóbð†*áÿÿ)ó}ð†*áÿÿ&†Eæÿþ†*áÿÿuMïÿû…*áÿÿ»rÿþ”*áÿÿvó-ÿû†*áÿÿ'w6ç `‡*áÿÿ(vIæ.†*áÿÿ ôcå3ÿö†*áÿÿ E7æ4ÿö†*áÿÿ &Kæ5†*áÿÿ}:pKÿû†*áÿÿÿ‹Ù#}¨üÒ$ÿÿÿ #}lüÒDÿÿPps#|«§%ÿÿ<ÿéÙ#|� EÿÿPÿ\pÙ#|Žüø%ÿÿ<ÿEÙ#|€üáEÿÿPÿ~pÙ#q…ý%ÿÿ<ÿgÙ#q‚üðEÿÿ(ÿ*�„'YJ‰ÿÿÿ*Üë#vŽ©ÿÿP’s#|¿§'ÿÿÿéóÙ"|^ GÿÿPÿ\’Ù#|‹üø'ÿÿÿEóÙ#|WüáGÿÿPÿ~’Ù#q™ý'ÿÿÿgóÙ#qYüðGYÿ1›Ù"+в+°3±#é²+±+é° /´+° /´+°,/°Ö±#é°#±+´&+°±'+±é±-+±#±"99°¶  $9± °"9° ³ $9±+#±990132654#"'7#!2+632#"'32654&+© ! . '¶‹žŸŠ= &)B9/N"¬lppl¬…%UÙÂþ¬Ã1# +2"ÿ�Š‹�ÿïÙ)5£²+²+² +²)+²&+±*é°/´+°/´ +°6/°#Ö±-é°-±+´ &+° ±3+°(2´<+°´+°/±7+±-@   &*0$9±°9°³ $9±*²(099901#5632#"'732654#"'7.54632"32654&ïJA+ &)B9/N ! . 'gt{fl5“DTTEBPPÙý'E,*1# +2"(%V˜~}—Qþôp[\on[^oÿÿPÿ.’Ù#iŒüß'ÿÿÿóÙ#iZüÈGÿÿP[Ô'X¾P#q¼ƒ(ÿÿÿé÷\"qrâ"HC^xÿÿP[Ô'YP#q¼ƒ(ÿÿÿé÷X"qrâ"Hv…tÿÿPÿ.[Ù#i¼üß(ÿÿÿ÷#irüÈHÿÿPÿ\[Ù#¾ü÷(ÿÿÿE÷#tüàHÿÿPÿ1[¨#{±Ìäÿÿÿ÷Þ"{råÿÿP9s#|¨§)ÿÿs#|§Iÿÿ(ÿéÁg#qåª*ÿÿÿ&ê�"qràJÿÿP�q#|Ä¥+ÿÿ<ÜÙ#|‹ KÿÿPÿ\�Ù#|Äüø+ÿÿ<ÿ\ÜÙ#|oüøKÿÿP�o#jÈ£+ÿÿ<Ü^#j†’Kÿñÿ1„Ù&…²+±33²+°3°$/´+° /´+´ +±é°'/°Ö±é°2³+´!&+°±+°2±é±(+±¶ $$9±$°&9° ³ !$90132654#"'7#3!3#!#632#"' ! . ']w]]þ‰ &)B9/N…%UÙþÅ;ý'Lþ´1# +2"ÿßÿ1æÙ.˜²#+±-33²$+²)+´C+°/´+°/´ +°//°#Ö´<+°%2³#+´&+°±.+´-<+±0+±#¶  "$9±.±)99±°9°³ !$9±#°&9014&#"#632#"'732654#"'7#3>32#“C)@N &)B9/N ! . 'S%K8LYSk70aPþß1# +2"(%UÙþë0'MBþtÿÿPÿ=�Ù#{Æüè+ÿÿ<ÿ=ÜÙ#{püèKÿÿÿöÿ\0Ù#ÿñü÷,ÿÿÿãÿ\Ù#ÿÞü÷LÿÿHè&YZd#jÿìŒ,ÿÿÿô „&Y2&ójÛøÿÿP“„'Y.ÿÿ<ø„'Y´NÿÿPÿ\“Ù#|Êüø.ÿÿ<ÿ\øÙ#|qüøNÿÿPÿ~“Ù#qÂý.ÿÿ<ÿ~øÙ#qsýNÿÿPÿ\Ù#|Œüø/ÿÿ:ÿ\¢Ù#|ÿÇüøOÿÿPÿ\g#q’ª °ÿÿÿåÿ\÷[#qÿÉž ±ÿÿPÿ~Ù#qŽý/ÿÿÿåÿ~÷Ù#qÿÉýOÿÿPÿ.Ù#i�üß/ÿÿÿÞÿ.ýÙ#iÿÊüßOÿÿPþ„'Y^0ÿÿ<ðë#vPÿÿPþs#|§0ÿÿ<ðÙ#| PÿÿPÿ\þÙ#|ûüø0ÿÿ<ÿ\ð#|ùüøPÿÿPŠp#|¤1ÿÿ<ÝÙ"|{ QÿÿPÿ\ŠÙ#|Âüø1ÿÿ<ÿ\Ý#|püøQÿÿPÿ~ŠÙ#qÄý1ÿÿ<ÿ~Ý#qrýQÿÿPÿ.ŠÙ#iÆüß1ÿÿ<ÿ.Ý#isüßQÿÿ(ÿéèÞ'YrZ#ë•2ÿÿÿéøp#v™Œ"nèRÿÿ(ÿéèè#ëœ"2jéÿÿÿéøN"ní"Rjt‚ÿÿ(ÿéèÔ'XÜP#qàƒ2ÿÿÿéø\"qhâ"CTxRÿÿ(ÿéèÔ'Y,P#qèƒ2ÿÿÿéøX"qhâ#v…tRÿÿP^„'Yæ3ÿÿ<ÿ&ë#vœSÿÿP^s#| §3ÿÿ<ÿ&Ù#|ƒ SÿÿPšs#|¹§5ÿÿ<8Ù"| UÿÿPÿ\šÙ#|Çüø5ÿÿ;ÿ\8#|ÿÈüøUÿÿPÿ\šg#qºª Ôÿÿ;ÿ\M�"qà ÕÿÿPÿ~šÙ#qÉý5ÿÿÿæÿ~8#qÿÊýUÿÿ0ÿém�#|¢µ6ÿÿ"ÿéËÙ"|Q Vÿÿ0ÿEmå#|©üá6ÿÿ"ÿEË#|LüáVÿÿ0ÿémè'Y"ÿö"6|´ÿÿ"ÿéË^#|M’ÿÿ0ÿémè'[¨"6|¦ÿÿ"ÿéËT#|Pˆ#ÿÿ0ÿEms#|¢§ Üÿÿ"ÿEËÙ"|Q  ÝÿÿZs#|Œ§7ÿÿÿé@"|×tWÿÿÿ\ZÙ#|Œüø7ÿÿÿEœ#|üáWÿÿÿ~ZÙ#qŽý7ÿÿÿgCœ#qüðWÿÿÿ.ZÙ#i�üß7ÿÿÿIœ#iüÈWÿÿPÿF€Ù#jÉüâ8ÿÿ<ÿFÝ #jnüâXÿÿPÿE€Ù#Êüà8ÿÿ<ÿEÝ #hüàXÿÿPÿ€Ù#iÈüÈ8ÿÿ<ÿÝ #icüÈXÿÿPÿé€Ô'Y^P#Ї8ÿÿ<ÿéÝl#v�ˆ"nèXÿÿPÿé€Ì#qÆ|"8jÊÿÿ<ÿéÝ?"qlâ"Xjosÿÿvn#°¡9ÿÿ æ¿"VòYÿÿÿ\vÙ#|¯üø9ÿÿ ÿ\æ #|HüøYÿÿš„'X@:ÿÿ Èë#CœZÿÿš„'Y†:ÿÿ Èë#vëZÿÿšo#j8£:ÿÿ ÈÚ#jÂZÿÿšs#|4§:ÿÿ ÈÙ#|¾ Zÿÿÿ\šÙ#|6üø:ÿÿ ÿ\È #|½üøZÿÿ‚s#|ª§;ÿÿ ÒÙ"|P [ÿÿ‚p#j®¤;ÿÿ ÒÚ"jT[ÿÿ—s#|ª§<ÿÿ ÿ&ÔÙ"|R \ÿÿI„'Z =ÿÿÈÙ"iTô]ÿÿÿ\IÙ#|Šüø=ÿÿÿ\È #|Müø]ÿÿÿ~IÙ#qŒý=ÿÿÿ~È #qOý]ÿÿ<ÿ~ÜÙ#qqýKÿÿÿéB"jçvWÿÿ È#}¾Zÿÿ ÿ&Ô"}Rÿ\ÿÿÿé ò#aZDÿÿ€#|´AÜf²+² +´C+²+´++°/°Ö± 22´<+°2² +³@ +°´+°/°3±+±±99°°9013#575#5354632&#"7«SFFFFA: :;;70@0QDY8?E5®(@(Ük²+² +´C+²+°3´++°2´ +´++°/°Ö± 22´<+°2² +³@ +°2² +³@ +°2±+013##535#5354632&#"3#«SFFFFA: :WW‚DHD8?E5 D]ÿéså$‡² +²+±é²+±é´$ +±é°%/° Ö± é° ±!+±é°° Ö±é°/±é² +³@$ +±&+± ³$9°!°9±$±99°°9°°901264&#"#4632#"'53254&#^S>KIRO]�om†+,B~jM.5=–^\±8f=KCþXynS:K j/€�]–O:ÿÿÿð ÙGÿÿÿ\‹Ù#|¨üø$ÿÿÿE #|müáDÿÿ‹É#¬#Ô$ÿÿÿé #¬ðDÿÿ‹è'Zª'Y™d$ÿÿÿél#vòˆ¤ÿÿ‹è'Z»&Xd$ÿÿÿé l#Cÿÿÿ‹è'Zª"$¬ðóÿÿÿé t#¬Œ¤ÿÿ‹Þ'ZªÿÞ"$®ÿÿÿé c#r–¤ÿÿÿ\‹„'Zª ÿÿÿE í"ip ÿÿ‹è'Yd#{»�$ÿÿÿé |#vŽ˜Åÿÿ‹è'Xªd#{±”$ÿÿÿé z#Ce–Åÿÿ‹#{»ž"$¬@%ÿÿÿé ”#¬ŸÅÿÿ‹#{»¢"$Ã:ÿÿÿé q#r¤Åÿÿÿ\‹|#{¬  ÿÿÿE Þ"{n ÿÿPÿ\[Ù#|¸üø(ÿÿÿE÷#|oüáHÿÿP[Ð#¬+Û(ÿÿÿé÷#¬îHÿÿP[…#´¸(ÿÿÿé÷¿"vòHÿÿPvè'Z 'Yˆd(ÿÿÿél#vñˆ¬ÿÿ*[è'Z´&Xd(ÿÿÿé÷l#CÿÿÿP_è'Z "(¬âóÿÿÿé`#¬—k¬ÿÿP[è'Zªÿì"(±ÿÿÿé÷a#|”¬ÿÿPÿ\[„'Z´ 2ÿÿÿE÷Û"itö 3ÿÿSìÐ#¬oÛ,ÿÿ:Ó#¬Vóÿÿ_ÿ\ÇÙ#|ÿìüø,ÿÿ9ÿ\¡Ù#|ÿÆüøLÿÿ(ÿEèå#|ßüá2ÿÿÿEø#|jüáRÿÿ(ÿéèÑ#¬cÜ2ÿÿÿéø#¬êRÿÿ(ÿéèè'Zæ'YÊd2ÿÿÿék#v釶ÿÿ(ÿéèè'Zæ&XMd2ÿÿÿéøl#Cÿꈶÿÿ(ÿéè„'Zã"2¬G�ÿÿÿé/#¬²¶ÿÿ(ÿéèè'ZÜÿì"2äÿÿÿéø`#p“¶ÿÿ(ÿEè„'ZÜ FÿÿÿEøí"il Gÿÿ(ÿé„'Y6bÿÿÿé/ä#v�cÿÿ(ÿé„'Xðbÿÿÿé/ä"Cdcÿÿ(ÿéÐ#¬gÛbÿÿÿé/#¬òcÿÿ(ÿét#ë§bÿÿÿé/Á"~ôcÿÿ(ÿE#|ßüábÿÿÿE/w#|jüácÿÿPÿE€Ù#|Åüá8ÿÿ<ÿEÝ #|AüáXÿÿPÿé€Ã#¬8Î8ÿÿ<ÿéÝï#¬õÿúXÿÿPÿé„'Yqÿÿ<ÿéjä#vŠrÿÿPÿé„'XÒqÿÿ<ÿéjä"CnrÿÿPÿé­#¬E¸qÿÿ<ÿéjþ#¬Ø rÿÿPÿéq#̤qÿÿ<ÿéj²"nårÿÿPÿEX#|Åüáqÿÿ<ÿEj‹#|Aüárÿÿ—„'X´<ÿÿ ÿ&Ôä"CF\ÿÿÿ\—Ù#|®üø<ÿÿ ÿ&Ô #|Æý\ÿÿ—µ#¬2À<ÿÿ ÿ&Ôí#¬×ÿø\ÿÿ—u#¯¨<ÿÿ ÿ&Ô°"Wã\ÿÿÿó5æ" $wDÿÿÿó5ä" \sDÿÿÿó5ô" 1>Dÿÿÿó5ô" >FDÿÿÿó5ô" 2KDÿÿÿó5ô" ?>Dÿÿÿó5k" 3qDÿÿÿó5k" @qÿDÿÿ‹å" $Ù%ÿÿ ˆå" \Ò%ýÿÿÿòÖä& 1 %Kÿÿÿóáë" >¯%Vÿÿÿï¡å" 2­%ÿÿÿí¨å" ?œ%ÿÿÿñŽT" 3äê%ÿÿÿåˆW" @Øë%ýÿÿÿöÓâ" $VþHÿÿÿöÓã" \`ÿHÿÿÿöÓô" 1,HÿÿÿöÓô" >4HÿÿÿöÓô" 28HÿÿÿöÓô" ?,Hÿÿÿóšå# $ÿ)?ÿÿÿî‰å# \ÿx).ÿÿÿðDå" 1ž)éÿÿÿñ2å" >­)×ÿÿÿï#å" 2­)Èÿÿÿñ/å" ? )ÔÿÿÿJéñ" $r JÿÿÿJéô" \tJÿÿÿJéô" 1=JÿÿÿJéô" >OJÿÿÿJéô" 2|JÿÿÿJéô" ?[JÿÿÿJék" 3fJÿÿÿJék" @xÿJÿÿÿñ³å# $ÿ}+2ÿÿÿ÷¹å" \�+8ÿÿÿò`å" 1 +ßÿÿÿøbå" >´+áÿÿÿô^å" 2²+Ýÿÿÿôaå" ?£+àÿÿÿÝT" 3Ðê+ƒÿÿÿÝU" @Ðé+ƒÿÿ,ÿøô" $¸Lÿÿ8ÿøô" \ÂLÿÿÿôÿø&ô" 1¢Lÿÿÿ÷ÿø&ô" >³Lÿÿÿûÿø!ô" 2¹Lÿÿÿùÿø(ô" ?¨LÿÿÿËÿøk" 3¾LÿÿÿËÿøk" @¾ÿLÿÿÿñîå# $ÿ}-,ÿÿÿõíå# \ÿ-+ÿÿÿòŽå" 1 -Ìÿÿÿñ‘å" >­-Ïÿÿÿñ‰å" 2¯-Çÿÿÿó�å" ?¢-Îÿÿÿà6V" 3Óì-tÿÿÿÞ2Z" @Ñî-pÿÿÿöå" $gRÿÿÿöå" \rRÿÿÿöô" 1:Rÿÿÿöô" >BRÿÿÿöô" 2GRÿÿÿöô" ?:Rÿÿÿïÿéåè# $ÿ{3ýÿÿÿôÿéîë# \ÿ~3ÿÿÿòÿé¼å" 1 þ3Ôÿÿÿóÿé¹å" >¯û3ÑÿÿÿñÿéUå" 2¯þ3mÿÿÿóÿé_å" ?¢3wÿÿ<ÿòòæ" $`Xÿÿ<ÿòòã" \hÿXÿÿ<ÿòòô" 11Xÿÿ<ÿòòô" >:Xÿÿ<ÿòòô" 2@Xÿÿ<ÿòòô" ?4Xÿÿ<ÿòòj" 3bXÿÿ<ÿòòk" @bÿXÿÿÿîçå# \ÿx8Pÿÿÿï�å" >«8øÿÿÿôÇå" ?£80ÿÿÿï[W" @âë8Äÿÿÿ÷ºã# $Æÿÿ\ÿÿÿ÷ºâ# \Ðÿþ\ÿÿÿ÷ºô# 1œ\ÿÿÿ÷ºô# >¤\ÿÿÿ÷ºô# 2©\ÿÿÿ÷ºô# ?œ\ÿÿÿ÷ºj# 3Ì\ÿÿÿ÷ºj# @Ìÿþ\ÿÿÿóÄâ# $ÿÿþ<÷ÿÿÿñÉå# \ÿ{<üÿÿÿñ�è" 1Ÿ<Âÿÿÿï�è" >«<Àÿÿÿó2â" 2±þ73#"=3} !1JL %*Oc2( ÿÿtAÌä¶Bÿÿ lGÔÿÿ yG„# %°jÿÿÿ8éë"Í Üÿÿÿ:é"ÏJÿÿÿ9éë" ÝËÿÿÿJéà"mJÿÿÿ8éà"Ì *ÿÿÿ÷å" P×)ªÿÿÿãÈå" [‘)mÿÿ?å" Pð+¾ÿÿ,å" [´+«ÿÿP\Ù# #©+ÿÿRA„ä# P“ $ÞÿÿBAhä" [E $Îÿÿ 9Gj' %– $ øÿÿÿÍÿøÞ"{¾LÿÿÿÛÿø�"q¿àLÿÿÿãÿø*ý" NÁóLÿÿÿïÿø6ø" OÍîLÿÿÿÇÿø¿"ÂòLÿÿÿðÿø*l& &ãèLÿÿÿý*„#{ÿî¨-ÿÿf#qÿæ©-ÿÿÿå-å" PÅ-kÿÿÿâ$å" [�-bÿÿDAsä# P‚ \ÎÿÿQA€ä" [] \Ûÿÿ 9Gl' %˜ \øÿÿ<ÿòòÞ"{^Xÿÿ<ÿòò�"q^àXÿÿ<ÿòòý" N>óXÿÿ<ÿòòû" O>ñXÿÿ<ÿ8 å" $~Tÿÿ<ÿ8 å# \ˆTÿÿ<ÿòò¿"aòXÿÿ<ÿòòk"X &\çÿÿ—„#{°¨8ÿÿ—g#q±ª8ÿÿÿÚ-å" Pº8–ÿÿÿÉ7å# [ÿw8 ÿÿÿó§å# \ÿ}5I"li  G²+°3±é± 22° /°Ö´<+°± +´ <+± +±°9° ²99901#'#5!#5¾A:aSES žžISSSSÿÿ"li ÿÿ PñäC ÿÿÿ9ºë#À äÿÿÿ9º#À\ÿÿÿ9ºë#À åÿÿÿ÷º¿#Ðÿò\ÿÿÿ9º¿#À Tÿÿÿ¿ÿé$å" PŸþ3<ÿÿÿêÿé$å" [˜ø3<ÿÿÿÇÝ" P§õ2²+° Ö´ +´%  +°/3´%+°:2´  +´+°D/° Ö´+°±+´+°±#+´(+°(±,+´+°±8+´=+°=±A+´2+±E+±³$9±,(³ $9±A=±5/99±%*µ"#278$9± ² 999012#"&46"2654&%3#2#"&46"2654&%2#"&46"2654&ž?WX=>XX=%56J55(BþuB‚?WX=>XX=%55J65B?WX=>XX=%55J65ØX@=XY|X<5%&55%&5Fý +X@=XY|X<5J65%&5XX=%55J65B?WX=>XX=%55J65ûÅ?WX=>XX=%56J55(BþuB‚?WX=>XX=%55J65X@=XY|X<5J65%&5Xé °/±é° /±+01"05>32&K·Y9€UV€9Y—Y@9229@Y#ÿ7“3#'#D>‰š>{y>âûÈÈÿÿ 6Ù' ßþI' ÿâþJ ß2¡^A(°/´ +´ +°/±+´+±+01!5^þÔA  ÿNÿìZÙ²+²+°/±+013#>þ2>Ùýyÿ,Ù!J²+´++°/´++°"/° Ö°2´&+°2² +³@ +±22±#+±° 9017;#"&=47.=46;#"Æ%.49R.$94.%",,"V¦'AE>¶x&FE¶>EA'¦F; E <ÿ,ºÙ!J² +´ ++°/´++°"/°!Ö°2´&+°2²! +³@! +± 22±#+± °90174&'5>=4&+532+53265m",,"%.49$.R94.%VE< E ;F¦'AE>¶EF&x¶>EA'ÿÿM)å#","ÿÿMüå',"ÿÿ|å&".ÿôœ 2²+° /± é° /°Ö±é² +³@ +± +± °901#>7!5QJbFaþ�œJg”cT{‚W0ÿO ÙS² +´ +°2² +³@ +°2°/° Ö´+²  +³@ +°±+´+´+±+01####532 mb@R@9ú^‚é^ƒþLJü¶J@‹Jú L°/´+° 2°/° 3´+°/°Ö´+°±+´ +²  +³@ +° 2±+017".54>3!#33îB`--`B 99ËRJDi>=hF@þª@–þªV Jú T°/´+°2°/°3´+°/°Ö´+² +³@ +°2°±+´ +±+±° 901%!53#5!2#3+þõ99 B`--`‚RRJ@V@Ci?>iD–þªÿÿ(W" þI?ÿm¨ O²+´ +² +´+°/´+°/° Ö° 2´0+° 2´0+°2´+±+017#"=3#¨7"ihhhh5%&ƒx¤h;XÎ +°/±é° /±é°/±+± · $901%270#"&'5"5>32&K´Y9€VU€9Y··Y9€UV€9YgY@9229@YY@9229@Yÿÿ(Wå&  þIÿÿ<Hî' ¡î'yÿå�yÿ%ñ�€°/± 33´+³ +´+°/±+°6ºí ÂÙ+ °.°À± ù°À°³+³+² Š Š#9°9´.....µ......°@013#"&/&#"#>32326Å+H>/-##5+O854$0 #�91  .14 ;ÿ4Xÿß °/±é° /±+01"05>32&K·Y9€UV€9YsY@9229@Y$ÿòï½ay²6+²+´LQ6 +°3´L+° 2°b/°9Ö°2´3$+°2±c+±39@  .0<>`$9±L6µ(.+>AD$9°Q@ #%GITV$9°´ Y`$901'&546276327632#"/#"/#"&54?&'#"&54?&'#"&463267'&546326q "." m! *™» $$ º›* "m "# m  *™» $$º›* m¨º $$¹š* !m "." m"*™º $$¹š* "m "." n  ™ÿÿ<ÇD'yÿ'yùyå ÿÿ1¶GÌ& �' �Ì' �™ �eÿÿ<–²&yåO'y×O'yÝÿyÝgÿÿ<™Å'yÿåÿ'yÚÿ'yÿåw'yÚzyßTÿÿ<¤'yÿåÿ yÿåÇÿÿ<ÿ9– 'yÝþV'yÝÕ&yåy×ÿÿ<)  'yÿåÀ& 3'yÿåÿH'yaÿHyaÂÿÿ<ÿÿ¤ 'yÿåˆ'yÿåÕyÿåÿÿÿ<¤&yå'yÿåÒ'yÿåÿyÿåýyD/J°/´ +° /´+°/°Ö´ +° ±+´+±+± °9± ±99014 #""3265*LI•ð¶Z/-SÜßin‡­®U[ÿÿ*†b`L†)™†Q/ `°/°3´ +°2² +³@ +²  +³@  +°/° Ö° 2´ +°2² +³@  +² +³@  +±+± °901#533##=мÌ.CC>�ê; þð5d™ªªxF/“° /´+² +³@ +°/´+² +³@ +°2°/´+°/°Ö´+± +°6º?Hön+ °.°.°±ù°±ù°.³....°@±±99±°901#632#".'332654&#"#7.¾&.BRXE%98I/56.1#4"/4wO?CU, G4./7(èxG/$o°/´+°/´+° /° /´+°%/°Ö´+°2°±"+´+° Ö´ +±&+± µ $9±²999014>32#&#"632#"7"32654&!.)5D8?14&C=OTAšœ*45'(30G8W1 ;4@SN/L;>Qç1()64(+1†G/ 3°/´ +° /°Ö´+² +³@ +± +± °901#>7#5G•$=QR÷/,¹Äh m4xH/*„°/´&+°!/´+°/´+°+/°Ö´#+° Ö´+°#±)+´+° Ö´+±,+±¶  !&$9±!&±99°± 99°± 9901#"&547.54632&"2654"32654úNVCDUN#M<=LJH++H+$V44*,4e"H:IJ:G"'1@?2&‡$%%�.%&..&%xF/$ƒ²+´+°/´ +°/´+°%/°Ö´+°° Ö´ +° /´ +°±"+°2´+±&+±" µ $9± ° 9±²99901#"&'33265#"&54632"32654&F!.)5E9?14)?>NTAš›'30(*55_8V1 ;4@SN/K<>Q.5(+23')7ªMæ X°/°3´+°2² +³@ +² +³@ +° /°Ö°2´+° 2² +³@ +² +³@ +± +01##5#5353L†.††._.††.†† 0S^(°/´+´+°/±+´+±+01!5Sþ¸^..ÿÿ S¤& ËÖ ËFo!ý„ ° /°Ö´+± +013#.46Ù$YY$199„�þ¾‘@¥š¤ÿÿN!Ü„ ÍK¥Àÿÿ'†7åQ†)™ÿÿÿ+Dá Âý²ÿÿEÿ8æá{ý²ÿÿÿ8Fátý²ÿÿÿ*Báuý°ÿÿÿ8Qá Äý²ÿÿÿ*Fá Åý²ÿÿÿ*Gá Æý²ÿÿÿ8Gá Çý²ÿÿÿ*Há Èý²ÿÿÿ*Fá Éý²ÿÿÿeM¡ Êý»ÿÿ ÿéT Ëý¹ÿÿ ÿ±TO Ìý«ÿÿoþÔý7 Íý³ÿÿLþÖÚ9 ÍIZÀÿÿÿ1UŸDÿ@)™ÿÿÿ-I›Hÿ<)™ÿÿÿ-H›Rÿ<)™ÿÿÿ8/�[ÿ8)™ÿÿÿ.Gœüÿ=)™&QÛ#§²+´+²+´7+² +³@ +´! +´+°° Ö´7+´  +´+°$/° Ö´&+°±+°2´+° 2² +³@ +³@# +³@ +±%+±°9°°9±± 9901%!!5".54>32#.#"5!!3E þ®±ó!+ °°À±ù°Àº>±ó!+ °°À±ù°À³+°³+º>±ó!+ °³+°³+³+°³+º>±ó!+ °³+°³+³+³+°³%+º>±ó!+ ³&+°³(+º>±ó!+ ³)+°³++³,+² Š Š#9°+9²9°)9²&9°9²9°9@&)+................@%&()+,........................°@±(²"#99901#7&'#7.54>?373#&'>73'&''O 7+#7<8&9];7,# 7BTk=C Uüv .t"OiKU@C[|6°Y/_fO8((<\;~- ýù e_þçL;ýÊI�~‰ ÿé9å)¨²$+±é²$ +³@ +²+± é²  +³@ +´$ +±é°*/°Ö´1+°±+±é´&+°± +´!<+° Ö´<+±++±° 9°°$9° ±99° ±99±³ !$9°±99014>32#&#"3>32673#". (>fAÏ!R�Zi?8M$C( TT”S ‚q@f<(d2bjO4ÜŠ¢Œf‘O_;3UJgg³€†3Ni`,Ùx²+²+±é´  +°3´+°2´  +°3´ +°2°/°Ö± 22´<+±22² +³@ +°2³@ +² +³@ +° 2±+013###535#53!!3ÎþþSOOOO£þ°þ‹B7þî7B7RÅ7ÿéÙ9î²+²+´B+².+±7é²7. +³@74 +± À/±é°2´!". +° 3´!+° 2´&'. +°3´&+°2°:/°+Ö±é²+ +³@+& +°!2³%++±é°± +´ 1+² +³@  +° 2° ±5+±4é±;+±%+²(999± ²999±5 µ.7$9°4°9±²999±7'°+9013#3#632327#"&#"'67#53&'#53.54632#&#"“& ˆ}†Y;?!h(+*9J+†#580e|�nQ"‰e5>,X„@M ,> 7(62Z'B8.%BW>6!!791![{ 1W9šFFÿ§úr&*Œ²&+±33²+²+° 3´!C+°2² +°+/°&Ö±%é´&+°%±+°2±é°'2°±+±é±,+±%±99°°9°³ ($9°° 9±!&µ'($9013>32>?3#4&'#5#54&#"#7FM"K4a,#D0<7>58T'#’T•7Ì3.3HT„Y'1 J/*P*$W[ I;þwi+5Õû€Ù*˜27P9þ·K‚ GG“Ù#&)»²+°3²+°3´  +² 333´ 7+²$222´ +²"333´7+²'222°*/°Ö± 22´&+± '22² +³@ +°2°±&+±22´&+±22²& +³@ +°2±++±&µ!%($9± °&9±°)901##'##5#535#533333##5##3'##3'“3]ƒ¾N----ZйO33O“3ï˜2fO::þ±@@7FññññF]FÿÿÿÿF]]]]£lUu[ÿéÙÙN:²E+²:+°53´C+°2²F+±é²J+°3´?++° 2²#+±)é²)# +³@)% +²J? +³@JM +´C:M +±é°O/°EÖ±Dé°2°D±+±Jé°J±=+°K2´ <+°M2² = +³@ +° ± +±,é³, +±é°/±é°,±+±2é°2°% Ö±&é°&/±%é±P+±J°?9± ±:99° ²78999±,°9°&µ#/5$9±%°09±E°79°C³.2$9°± ,99±)?°9±#°9013264&+#327&'332654&/.54632#.#"#"'#"&5#+#!2353¸ÂCKKC–VX5E7C$-4Y?YY«X&0'1S6PDucz2> 14CiKå]-jt8LZ>3 +(ŒDOþËÙjc��ÿÿPÿéxÙ'V­525Ù#'+.141²+°3²+´$3´ +·  #$'()$3´7+·,-/0$2´  +· !"%&*+$3´ 7+· 23$2°5/±6+°6ºÁxò^+ °.°.°±ù°.±ùº>Vñ€+ °.±.°.À±4ù°ÀºÁ¾ñ)+ °.±4°4À±1ù°Àº>Ùóé+ °/.°.°/±ù°±ù°4³4+°³+³ +³ +³ +°³.+°.³.+°³1+°/³/+°³+³+³+°/³ /+³!/+°³"1+³#1+°.³$.+³%.+°³&.+³'.+°³(4+°4³)4+³*4+°³+4+°.³,.+°³-.+°³01+°³24+°4³34+².14...@+  !"#$%&'()*+,-./01234...........................................°@01!#'##'#53'#53333333#3#'7#!7#;'##%#3'˜W9©7W5iZF78X3�KL>;HGÈ6CF1_nn\_2NNKþW.eRSdcRUdÈ?ýØ>,'ŠwqˆIŒ?))ýJ??$ÿékÅ0s²+±+é²+±é´ +°%3´+°'2´ +°!3´+°2°1/° Ö±$é±2+±$ ±99±+°/9°°.9±°9°°901".'#73&547#73>32.#"!!!#3267¤>g@/S7O?/@l@c^3K,DsEþÉÿxD)E9G-AQ=;;9QA/CI&d_;;\k"Y+’ÙL²+°3²+° 3´ +±33´7+± 22°/°Ö°2±é°2² +³@ +±+01##533333###¬]77]F%xþ×ì¹ùn÷ÿÿgH*þÖ*þÖHþ™gQÙD²+²+±é°2°/°Ö± 22±é±22² +³@ +² +³@ +±+01#5575575#5!#7ò�]““““ð<ï��™F]ö¹_F_f_F_ÜRRŸ]F]fÿÿÿ8ÜÙ'T¼("ÿ8'× 3�²+°3°3/± é°/±(é°4/°%ֱ鰱+±0é²0 +³@3 +°° Ö±+é±5+±%³$9°²(999°°-9± ±099°·%+-$901654&#"2654''#>7.54632#b5( (Ghq;'j…C%ZK:P[DG}R§\F(%3ýÙ."t”êssPu@. (! K[J8e¤c¦aM]'šÙ!&-¤²+²+±&é´ +±é´ +± 33´+± (22´ +±'33´+±"22°./°Ö±22±é²"'222² +³@ +°2°±++°)2± é² + +³@ +°2±/+±+±#99° ±!9901327!%#3#+##535#535!2)&+!654'¸ÂQ%þÈâ42<fFå]4444-Qlþ]3%LÂM‡1¤0 0=Fþ˸0D0}@=+[DZÿ£“ "+˲+²+± é°+2² +³@ +²+²+°"3± é°#2² +³@ +´ +±é°,/°Ö´&<+°&±+±#22´+± 22°± +´+²  +³@  +°° Ö±é°/±é°´+°/±-+± °9± °9°±&99° °9013#.'>=#53#'#5.54>7_Blu¿2:xGPOxkÜ 52JÎþ¨4 @;V@7T2 +<753#.'>73'b;þú(6N0;lh_8CL=`oy;YP~hd"=H;;*64`sG9ýÀDaˆnT> ˆ…þñ äÙ K² +²+±é´  +°3±é° /° Ö±é² +³@ +°2²  +³@ +°2± +015!!### Äþ<ij]´‡RRRRþã ÿùçÙ'޲ +² +´C+°"2´ +´C+´ +°&3´C+°$2°(/°Ö°2´+°#2² +³@& +°!2² +³@ +°2±)+±° 9± ±99°°9°±9901#"'.'732=!5!5!5!#3#„K6 :y3 #'1@;J>þÑ/þÑÛccc’3BT“ 6")4E])-).XI[II[Iýø.ÿîì°/´+°/01!67þ Z^O S$Mpb ýø.ÿîì°/´+°/01!&'7!ýø– O_Yþ S bpMÿ6ÿòÿm¤²+°/°Ö´+´+013Ê7²ýNÿÿÿÿY#²+²+°/°Ö´+´+013ã<ýèý�÷ °/´+°/01.#"&'67>326•D=–0'zc€$ 4›GM¥i27<* / $zl …#+=;ý�÷ °/´+°/01>32&'7'67.#"ý�3¥MG›4 $€cz'0–=D•6i3;=+#… lz$ / *<72ý§"ÿ÷y ² +´+° /± °901!&'67 ýû OAbbAO à$ bM^^Mb ÿÿý§"ÿ÷y ýžœÀþwmÿ�’ J° /´7+°/´7+°/°Ö´+°±+´ +±² 999±± 9901$2654&"7#"&5462þí:-*@+ÞX;7!.'>7ýÁô*$!#=##=#!$*þ *$!#>##>#!$ç,+.*#??#*-,,,,-*#??#*.+ûrÿnÿÿT°/´7+°/01 !…þ>þ< ûsGJÿýHæýCÿÃÿóí #ý�dLýœíüÖ*ÿÿþÁÿòÿu¤ Ýþ{þPZH~2°/´7+² +³@ +°/°Ö´+² +³@ +01#!5HHþP~ýÜÜHÿÿþ)ÿ_ÿÇ'yýÒþ|'yþ‰þ|yÿBþ|þ0÷¯>°/°3´ +°´7+´ +°/°Ö´+°±+´+01!#5!#Gþ¿HÐGgp¸¸üBÿÐ" °/´ +° /± °901!&'670üå2y#d——d#y2781—#w��w#—1ý®ÿ�JO###Jþ>GÅOþ>GÅOýN²ýN²ÿÿýûÿ ÿñÿÉ ýýé÷ÀÿÿýøÿÿîÿÌ üýæúÀÿÿý¶þâÿäG ýI@0ÿÿý§þàÿ÷ÿâG ýž{ÀÐþÓ6ÿ˜ò6² +°3° /°3´ +°/°Ö´+± µ $90137''7'7ß)E F-!()!-F EòI':==:')ÿì3å4AfT²_+°3´V+²V_ +³@VY +²+² +´+² +³@ +´&>_ +±B33´&+°2°g/°)Ö´;+³;)+´+°;±2+°/2´ +°2° ±d+´S+°S±J+´E+±h+°6º>šò±+ °.°À±0ù°AÀ°A³/A0+º>¥òä+ ³5A0+²5A0 Š Š#9µ/05A......³05A....°@±;±&99°2· ,7>$9° ±99±JSµBMVX_$9°E±Y99±&V²EMd999°>°9°µ )2;$9013#"#>32327#"5#"&5467>?654&32672#654&#"3273#".546ë:ýŽ:ŽN< ZK8E.  7    07N]I.,@43"0Q…8E='"#7,%P!= #A)&8 yÙýÁC<>-$Ù/8   1,0L  “ #2!R>,  $#1<+*1[2-,s—)ÿì>å0=Ay¼²\+°@3´g+²>+²+´+² +³@ +´":\ +±E33´"+°2°z/°%Ö´7+³7%+´+°7±.+°+2´ +° 2° ±_+´d+³Bd_+´S+°d±l+´Y+°M Ö´H+±{+°6º>šò±+ ° .° À±,ù°=ÀºðzÁé+ °w°sÀ±Uù°VÀ°=³+=,+º>¥òä+ ³1=,+ºïÊÂ+ °w³tws+³uws+³vws+²1=,9²vws Š Š#9°t9°u9@ +,1=UVvwstu.............@ ,1=UVvwstu...........°@±7±"A99°.·(3:@$9° ±99±lS´EP\gq$9±"gµBHPY_a$9°:°9°µ %.7$901"#>32327#"5#"&5467>?654&32673#4632#454&#"#"&547332>54.1'.N< ZK8E.  7    07N]I.,@43"0QÓ:ýŽ:]J5A<" )3=7/(aP?G@(&,    58+­C<>-$Ù/8   1,0L  “ #2!ý ;Q/&  ( &!AM1, %0ÿé¥å!u²+±é² +³@ +²+± é²  +³@ +°"/°Ö± é° ±+´+°±+±é° Ö±é±#+± ²999± ²999014>32#.#"32673!".00GyLî+_^W6+/:Z``!þõKwG/ªMd2bjO4îNNýÖejþß3Ni`¶×Qž—ÿÿÿéÉå"r‡&,3­%,—²'+°3´++²' +³@ +° /´++°!/´&++°2°-/°Ö´*+°*±!+±&22´+±22²! +³@ +°±+´&+° Ö´ &+±.+±&!°9°'³ *$9014>753#.'>733!5.4%G1JC> K K CIØþÞ1G%­/45n$GI3PP QCþµ& Ob ACƒ3GG‚O XFCW0ÿìýå(:L¼²2+°3´;+²+²+´+´! +°D3´+°)2²! +³@ +°M/°&Ö´+°± +´+°±5+´J+°J±A+´,+±N+±&°9° µ!$9°°9±AJ±)99±!;±,599±´  &$9013#2#654&#"3273#".5462#"&54>2>54&#"¬:ýŽ:Ò8E='"#7,%P!= #A)&8 yÈ?L /Q2=K /P#8,(#7,Ùýø>,  $#1<+*1[2-,s—þ K<AL=)K<@L=)þ£"0<+,1#0<*+20ÿì(å(?A²*+°)3²-+°3´:+²:- +³@:3 +²4>?222²+²+´+´!- +´+²! +³@ +°@/°&Ö´+°± +´+°±0+°22´7+°52±A+°6º>™ò­+ °2.°3À±5ù°4Àº>¡òÑ+ °*.°?.°*±)ù°?±>ùº>Ìó¨+ °*³+*>+³=*>+²+*> Š Š#9°=9³+25=....·)*+34=>?........°@±&°9° µ!$9°°9±!:±0799±´  &$9013#2#654&#"3273#".546#7#"&5473326?3ª:ýŽ:Ô8E='"#7,%P!= #A)&8 y.7 ,  $#1<+*1[2-,s—ý):*% #þõ F:Öÿÿ(ÿéeåR+ÿé å$£²+± é²  +³@  +²+±é² +³@ +´$ +±é²$ +³@$ +²$ +³@ +°%/°Ö±é°° Ö± é° /± é°±+´<+°2°±#+°2±é±&+±#³ $9±$°901#533.#"#632# 33267#KRRõ x^W^_+îLyG0/GwKþõ!``Zg÷Î>s‚NNî4Ojb21`iN3!je“~ÿÿ(oÙ"r‘)6ÿêºÍt}k²;+´M+².+´"+²+´u+²+´FA; +´FC+´5; +°3´+°x2´_; +´+±r À/´g+²gr +³@gl +°~/°>Ö´J+²J> +³JC +°J±e+´+³e+´b+°b/´+°±1+´ +² 1 +³ * +° ±|+´+±+±bJµ;OSXjo$9°e²Pgr999±²Q_999°1°\9° ²7]999°|¶4x$9±F"² >J999°A´'%*1H$9°5³OQUX$9°±\99°_°y9±g´]bo$9±ur±|9901326?623>3232676;2#"&54?#"#"&54632#"'32767#.5476?#"&54654#"+"54632%"67654!'\&™ä€jÃaG14®tIc9#U( <^$:9L@<.yAÃP9K0#!$ ?4d–+HŸ\  VÒJ3.)%4$ i'!&j3–bÜP0@73%•þÕ�©@6FI?f�E3K8 FD60TkY¨[ˆ)& @"×>YkyW963 kU™…pD+-ÿ‘OÎiʰ3/´.+°S/´Z+²ZS +³@ZW +°G/±é°/±é°j/°`Ö´ +° ±]+´M+³6M]+´++°M±D+´&+±k+± `°Z9±6]°9°+°J9±DM@ !(.13BU999°GµD32&'654&#"327#"&54>73254&#"#"'63232654&54>7>58A � *-0Me4(,6 # +#$! &8   Q`K N (2$ %D0R  +'³ W,!  -"’p)EG,,6 0#"0(4 $  Á[n?A1M+ S+$!�7)!8.YÙ u² +°3´+°2² +°3´ +°2´ +±é°/° Ö´+°±+´+°2°±+°2´+°±+´+±+0133###3#33ä¿¶¶¿¶¶7HH-Hž;ý'Lþ´Ù6ý“mý“mÙIJ+² 333²+°3²+´7+°/°Ö° 2±é° 2±+°6º>ŸòÈ+ °.°.°±ù°±ùº>™ò®+ ° .° À± ù° Àº>šò±+ °³+³+² Š Š#9°9³ ....· ........°@±°9013>32#654&#"#·T9/T8?HPTI/&Dd=TÙþò,$C;þˆW &/`RþßVNÙ²+² 333²+°3²+²+´7+° /°Ö°2± é° 2±!+°6º>ŸòÈ+ °.°.°±ù°±ùº>™ò®+ °.° À± ù° Àº>šò±+ °³+³+³+°³+°³+² Š Š#9²9°9°9°9¶ .......@  ...........°@±° 9±±9901>32#654&#"#?3�U/T8?HPTI/&Dd=TzVWT ÃH“,$C;þˆW &/`Rþß?HR3ÿï†ÍMé²K+´+°/´C+°"/°G3´+°:2°N/°Ö´+² +³ +°±$+´+°±=+´D+±O+°6º,Âð+ °(°*À± ù°À³ +°(³)(*+²)(* Š Š#9² 9µ ()*......µ ()*......°@±$±K99±=´"9:G$9±±99°°901>74632"'326?&547>7632>54'4;2#"&�>K(DO4_'M*3<þy/#!$( v?ž=^5&xm£5LtG)(Hq �Q;Ý\:NU;!y:UE# ,Tþ«?":{VWAL6G,0ieK[xG *W| \‚(ÿ©O»8½°/±é³+±é² +³@ +°./±(é².( +³@. +²(. +³@(* +°3/±"é°9/°Ö±8é³8+±é°8± +±é° ֱ鰱*+±+é±:+± µ"13$9±±&99°±(.99°*°9±.²999°(°19±"3°&90146323254&54673#"&#"46323273#".#"BT569"Z 'YD1Ž``1J(!0TO>&B';"#W?Z4dAJ#+?GaZ€4% Ž{ !?.l#)# !J8)ÿï_âDMW8²7+°23´JC+²7+±)é²+° 3´N6+´E<7 +±Eé´B7 +°3´B7+°@2°X/°9Ö´H/+°H±+±é°±U+±é±Y+°6º<íìg+ °@.°À±#ù°RÀ°@³@+º=”î�+ °#³!#R+³"#R+²"#R Š Š#9°!9³R!"#....µ@R!"#......°@±³7BL$9°°,9±J7°49±E)³'9HL$9°<²,+>999±B° 9°N²999°° 9014>767327>32327#"'#"5463267#"&"327&">54&Ö7B 46:EID]IAN>{W 61@6K'*@#VCw0¯gX@d) [{'D,D>Æ%5V`á">,- E.4!*3Ћ740XZB 91&q$3%2b,P;%†cþÜ #  &qXz1ÿõÆÖ$-"² +±é°(/±"é°./°Ö°2±é°2°±%+´1+±/+°6º=£îÆ+ °.°À± ù°*À³*+³*+°³+³+³+³+³+³+³+°³+*+² Š Š#9°9°9°9°9°9°9²*9°9°+9@*+..............@ *+............°@±°9°%³ "$9±(´ $901327#"&54>7'7>324&#">Æî  /)=@k/5 4"o #63P !#!E?Xt )a) BN;02'B )9LS.A#- K9vl?QÿéÊÙ)§²+°3² +±$é²+°3²+±é´ +±33´+±22°*/°Ö°2±é°2² +³@ +°±+°2´<+±!22´&+² +³@ +°±'+±é±++±'± 99±$² 99901!632#"'####5353353"32654&]þë9ihx|hk;KXTDDTXS’BPPBDUS 2©V”‚�ZCný’n29999Óo¸ooY^pL†Ù P² +°3² +°3´+°/° Ö± é° ±+°2±é±+± ² 999± ² 99901#53##`w÷÷Xiþ‡X¤ý¹˜äþƒ}ý'Oý±Ùÿÿ@ƒÙ/R˜.f133@8ÿÿÿ'ÿòùÄ/çï¤.t4ÿjÆ-6«²+´ +²  +³@  +°/´4+°/´++°7/°"Ö°&2´2+°'2°2±.+´+°±+´+°±+´+±8+±2"°$9°.²)999±²+999±4³".2$9± µ$&)0$901%#"'332>54&#"#"&547&536324'326*L2m2!'8 1B ?,0(,0/+(((2s–JUþ–9!þ.ZR3š.<'BD%IX$-M/$7\30CG.iWDjT*÷zþ’>X8YG![iÙ ]²+´+²+±é° 2´  +±é°/°Ö´+°±+´+° 2°±+±é±+± °901+#!2%3264&+3iq[Џ-luþªgCKKCžJJ]qþËÙoÿDxDý­&ÿÅæå!(‰²+±é²+² +±é°)/°Ö± é° ±+´+°±+°2´#+°#±&+± é±*+±² 999±&#±99° ±99±°9°· "$$901'#"&632/7&#"327%654&Ý/iVižÂž�Ãg�?.1;@54@85þèW¦O2:W3ÓVÓÒª¬q58½ýÝ*ÕS——‰þ9Y‹N|ÿïyÍ ‡‘h²3+°%3´E+°2²x+°u Ö´P+´>93x +´>7+´mX3x +´m+²Xm +³Xd +´ Ž3x +´ +°’/°6Ö´B+²B6 +³B; +°B±p+´U+°U±(+´+²( +³" +³f(+´_+°_/´f+°±-+´+°±+´ +±“+±Up±E399°_°m9±f(±Id99°±*L99°-· +/Puˆ�$9°²999°²Nw999° ±x}99±>E³(6B$9°9µ"*@$9°m±+99±ŽXµ/I-�$9° ²Lp999°Pµ Nwz$9012>54'%32676;2#"&54?65##"&54632#"'326?46367&#"3267>=4>32#"&547>3272"#"&#"6fDnnp*"0>+ "K]/ ¦" OQ4""J>ÌU;P/#!# >3;Ž=[�Ž<{jç@7BF%?&  m1&:8=ûv…J2 $þì m y@'U¶À%E/(+0i(GD…2#qHnX€'$<" wU€ ¾f,wZO4 615 K:D()*H)/?NVˆ/  ßÿø­å!H²1+°3±8é°2²81 +³@8 +³@84 +²)+°3±Bé°!2°I/°&Ö±$%22±Eé°F2°E±?+±,é°,±+±é² +³@! +°±+´$+±J+°6ºÀ9úª+ °%.°"À±Fù°HÀ°%³$%"+ºÀ­ö¶+ °F³GFH+²GFH Š Š#9µ"H$%FG......²"HG...°@±E&°49°?²15)999°,°.9±°9°° 9°²999±B8³&,$90123273#".5>54&#.54632#"&5332>54&#"[Ž‹),#  P42(9#!&%O[þÀaMLW*L9-YU$&&/ åNF)M+.EP70 16'Ev…`4' š)?PuY‡¼“GD, ?FrbK.J!> ]§Ù&*š²+°3´*+² +±)é°2´ +±é°+/°Ö´*+°*±'+´+°2°±+±é° Ö±$é²$ +³@$ +±,+±° 9±°9±*°9°²999°° 9°)°$9014&+326#&=4&+#!2#*LCˆˆJE +q:>—¶Pks6þ‡H H6û<`&0* ")8.IAC?þÆÙe^>Rþ®Sý­]ÿÉ0Ù%.{²+²+±*é°!/°3´ +´ + +± é°//°Ö± é°*2° ±&+±é±0+±& ³$9°²%999± ³%$9°+²999°*°901#7.+#!273#.'4&+326_� ð]Pks6=!%\^‘" Hq:R8:‡ÕGQJ#ÄH6û<]ÿ˜§~$(03œ²!+°3²"+°3±'é°02´3(!" +°)3±3é°2°4/°!Ö±1é°'2°1±+±é°- Ö±é²- +³@ +±5+±1!°9°@  #$&)02$9±-°9±3!±199°(° 9°'°9°"°9017#&=4&+'7#!77#;2654&'7#Úô_d6= +q:>y˜8",ˆ\±•LJED<ð88E8YLdX>R&0* ")8.IAC?þ^SÙ'þŒûû Ö°C3´0+°Q/´b+°k/° Ö´+°32°´:+°:/°T3´S+°±-+°Y2±Dé°D±K+± é° ° Ö´e+°e/´+±l+±:° 9°S±^99°-µ+067>`$9°Dµ(AQb$9°K±&99±)F°+9°0³-3:K$9±Q>² ST999°b±Y99°´ ^`$901"#".54>32#"&'"654&#"3"&54>3232732>54.#"#4>7.'6732654.ú9D0  1Z9FQ7S[06%*3& !8 .'++' 6!!  +J.S="1)! ;QJg %@j!E-! (2D8(.\=Bl 4Q-*A%!* .!<&%/ S7 / 4D7'n6  2[G %-%ÿÿ ÿÿâL ÀÿÿP“Ù.ÿÿ‹Æ‡ÿò‚Ämxƒ€²k+°I3´+°]2²9+²4+´+´k4 +´C+´TOk4 +´T+´,k4 +´,+´e€k4 +´e+´wyk4 +´w+°„/°Ö´ +² +³  +° ±/+´+°±"+´)+³Z)"+´L+°L/´Z+²ZL +³ZQ +°)±a+´F+°F±q+´A+±…+±/±k99°L²,999±)Z±%99°a@ 4DI]gnu~‚$9°F°9°q²6?s999°A²;>9999±³ LZ$9°° 9±OT°9°,°F9°°a9±€e°9°y±Dc99°w²/n999°@ "%)6>Aqs$90174632"'3267>7&#"32>=472#"&547>327632#"&54632#"32>54'#"'#"&>54'632"327&/"!$( B6;�=IR™L?yoã96K:uA ­`5,7<öv†I4  5T78ÀZ /rX'A% !,oL%D5F?ÍU;NÏ(SM€'+   $/><" yVgm¤8'xQL5Any m�5#7.54632677'"&464'327632"#".##"&">54&5467&)!!/2 LTs^V*!es!  &L'D1>A   V %P?$85BQJH CT!$N% 5 1²a�·E 60!v$'* -$+�-?#+A  Y   Aq…k^¨1  +¡.?Q0ÿÿÿé÷Hÿõ»ë V²+´+°/´ C+°!/°Ö±é°±+± é±"+±´ $9° °9±´ $901%#"&5463232'>54&#"D._p;IÆqe¬s 0ZlCV# %SŒ+lL=“Úv=j(HÁ$&R9ÿø³ÄZcI²X+´>+² +´%+´EPX +´E+²EP +³@EK +´a4X +´a+´.]X +´.+´ X +´ +±  À/´+°d/°Ö´;+°;±M+´H+°H±+´*+°*±[+´1+°1±C+´S+°2°S´+°/²S +³@S +°S±#+´ +±e+±HM±>X99±*±699°[´.4EP_$9±S° 9°#³ %$9±E>²;S999±]a±1699°.°9°°*9° °9°±#99°° 90174>7&54>2#"&54632#"32654#"632#"'32>54#"#"5>32#"&4#"3269WGaŠzRe3&Y* !D-#S|+X<%3$?%3R.N=1Y6 a'N _1##>zJ216o+X P ]+J>TP JND3/.@:9^6 =n+/ "2OF<  ÿêÀØS}„V²Q+´+°/´C+°F/´H+°N/°3´3+°2°{/´l+°ƒ/´8+°b/´[+°e/´X+°…/°Ö´ +² +³  +° ±T+´j+°j±o+´x+°32²ox +³@or +°x±J+´A+°A±�+´:+±†+±T ±Q99±oj³{$9°x± N99°J±2e99°A²5LX999°�µ*,8<(~$9±± 99°° 9°F²999°N±>J99°3²7+"5467>763267>32#"'"547#"&4>3232#"&#"32654&5463#"&>5&#" 0#!$ ”+bV:@z ¦R *&,3?&  $'#C!t 7(/ûgF`Ù~¼TBÄ? CÃ@G…W5A\{ �p#4é-;@"@;_K&%!=J;!.&A5,2 537!.n¶(˜>�aM'M4MU!5{>"Gz#E !ÿÿ)Ù)bÙÀ ÿÜ«Ïn®²_+´+²+´L+²3+´?+²3? +³@38 +´glL8 +±gé°o/°bÖ´+°±N+´+°±B+´1+±p+±b°e9°N³[_gi$9°±L99°B±S99°1³DJU$9±±199±gl±bB99017;>7676332>7>?6332676;2#"&547>7#"=>7#"&5463632#"'.: *Y:s IV<kþŒ "*1© v-“/G-o  Gl'+-?IvFþô-47…B@Ca"Z—ò¥+ °.°.°±ù°±ùº>•ò™+ °.° .°± ù° ±ù· ........°@± °901)!2 32654&+3þ¾›-fm?dz[è¤4#"+ÿÿÿôgÐ ›¹À$ÿì‘Ù E&²++°3´6+²+° 3²+´+´ +°3´+° 2² +³@ +± 22°F/°.Ö´3+³@3.+´+°3±+´+°°% Ö´9+°9/´%+±G+°6ºÀ{ø++ ° .° .° ± ù° ± ùºîwÂs+ °=°<À±! ù°"À° ³ +³ +´ !"<=.....@  !"<=..........°@±9´6$9±6³%.0@$9°³$9013###3#/%2#654#"#"&547332654&/.54>µ:ýŽ:NÍXH+VII‰ /C"?n:=KY'+{$,-VÙý~ž ýóÖððt'( N8. # < '8-!JA 2.?-" # 5" #7,!ÿÿ#„ )½ Ñëÿÿ1ÿì<Ù#uúþ|# ¡1{ìªÿÿÿì[Ú#uþz"t« ¡mÿÿEÿì_Ú# Åþ€ lÿÿÿì_ß# Åþ�"t ° ¡mÿÿ$ÿìUÚ# Åþ"u© ¡cÿÿÿì_Ù# Åþ" Ä © ¡mÿÿEÿìVÚ# Æþ| lÿÿÿì`Ù# Æþ}" Å § ¡mÿÿEÿìWÚ# Èþy lÿÿÿìaÚ# Èþ{"u © ¡mÿÿ&ÿìWÙ# Èþ}" ŧ ¡mÿÿ4ÿìMÙ" ǧ# Èþy ¡EÿÿEÿìŸÚ"{« ¡EÿÿdÂÙ,ÿÿdØÙ#,,ÿÿdîÙ#,,#,,ÿÿdŒÙ#9,ÿÿvÙ9ÿÿ]Ù#,›9ÿÿsÙ#,±#,›9ÿÿ‰Ù#,Ç#,±#,›9ÿÿd˜Ù#;,ÿÿ‚Ù;ÿÿ]Ù#,›;ÿÿsÙ#,±#,›;ÿÿPÙ/ÿÿ(ÿé�å&ÿÿP’Ù'ÿÿPþÙ0ÿÿB–ÙLÿÿBtÙ#LÞLÿÿBRÙ#L¼#LÞLÿÿBÄÙ#YÞLÿÿ æ Yÿÿ ŠÙ#LôYÿÿ hÙ#LÒ#LôYÿÿ FÙ#L°#LÒ#LôYÿÿB°Ù#[ÞLÿÿ Ò [ÿÿ ŠÙ#Lô[ÿÿ hÙ#LÒ#Lô[ÿÿ<�ÙOÿÿÿéÜFÿÿÿéóÙGÿÿ<ðP ÿñ®ÿ #²+°/´ +° /±+± °901!&'67®üå2y#d——d#y281—#w��w#—1-;Ž #²+° /°Ö´+±+±°901!#'67&'P81—#w��w#—12y#d——d#y21ÿñ¿ÿ #² +°/´+° /±+±°90175!&'7'6712y#d——d#y2Ü81—#w��w#—1-ÿê;x #²+° /° Ö´+±+± °901367&'781—#w��w#—1xüå2y#d——d#y2ÿñÿ!(²+° 3°/´+°"/±#+±± 9901!.'7'>7!.'>7‹A82%6/^66^/6%28AüþA82%6/^66^/6%28DCF @6a00a6@ FCDDCF @6a00a6@ FCÿêŽ!%²+°"/°Ö´+±#+±± 9901%'>7.'>7.'7òDCF @6a00a6@ FCDDCF @6a00a6@ FC]¾A82%6/^66^/6%28AýBA82%6/^66^/6%286°/°3´ +°/° Ö´+°2±+± °9± °901%0#654'327#0#(ýt1 X"q�¯S@(ŽS¯�q"X 1ÿÿ‡ “ÿü&À@ÿÿ “"+Àÿÿ‡ “&@Àÿî«@²+±33°/´+² +³@ +°/°Ö°2´+±+±° 9010#5!&'67!53«8ý2y#d——d#y2ä8î1—#w��w#—1îIÿ0^ÀW² +°/´+°2°/°Ö´+² +³@ +² +³@ +°2±+±° 9± ´ $901053'67&'3Jî1—$w‘�v"˜0îÐ8ä1y"e——e"y1ý8ÿÿ0ÿî¿ —ÛðÀÿÿIÿ0^À ˜§ðÀÿñ®ÿN² +°/´+°/´+°/°Ö´+² +³@ +±+±° 9°°9°°9012#!&'67!254&# NTVIý€2y#d——d#y2}i36æG;DD1—#w��w#—1Q#+-ÿñ¿ÿN²+°/´+°/´+°/°Ö´+² +³@ +±+±° 9°°9°° 901"3!&'7'67!"&546Ï63i}2y#d——d#y2ý€IVTæ3+#Q1—#w��w#—1DD;G ™X3°/´+° /°Ö´+² +³@ +± +±°9015!3'31TpoT!7þ[¦¦nÿðZu8²+°/´+² +³@ +° /°Ö´+± +±°9013!'7!#7þ[¦¦nuýÏTpoT Ü®ÿ°/´+°/± +01!67®ür‰’#y28v­#—1 ÿ쮲+°/´+°/± +01%!&'!®ý2y#’‰Ž×1—#­vÿÿ8ÿb\ñ‡ Ÿÿ\À@ÿÿ#ÿ_Gî‡  8À@ÿÿ ß®  ÎîÀÿÿ-ÿô» ŸÛóÀÿÿ8ÿ‘\ ‡  Hÿr@Àÿÿ ÿ’D!‡ Ÿ ÿr@Àÿÿ ÿG¿©' �ª �ÿVÿÿÿ%vć §ÍäÀ@ÿÿ ÿG¿ª' �ÿV �« ÿK® 4° /´ +°/´+°/±+± °9°°9°°901!!!&'67&'67®üå+€ /) üå2y#d—‡VV‡—d#y258*� :$1# 81—#w��cb��w#—1ÿnäü8°/°Ö´+°±+´+±+±°9°°9°°901#&'#'6767&'ø82•¡&85“$�‡vmmv‡�$“5’3x„'üä6v$m�|``|�m$v6ÿÿ*ÿK¸  ªØkÀÿÿÿnäü «òjÀÿÿ ÿ�»e& Ÿf ¤œÿÿ ÿ•®X& £V  ©ÿñ«-² +°/´+°/´+°/±+±° 901!!!.'>7«ýQQèýHM)B\[[\B)M~5PP5b!QaVVaQ!b'7�,°/°Ö´+°± +´ +±+± °901'>7'#'#H!QaVVaQ!b5PP5m)B\[[\B)MýHèQQý¸-ÿìºü-²+°/´+°/´ +°/±+±°901'7!5!7'!5!'7Á)MýHèQQý¸M)B\[[\!b5PP5b!QaVVa,ÿí<z1²+°/° Ö´ +° ±+´+±+± °901.'7373!QaVVaQ!b5PP5)B\[[\B)M¸ýQQèýHÿìÿþ2²+° 3° /´+°/´+°/±+±±9901!'7'7!.'>7!7'!ñ8L(PXRRXP(LýÈL(PXRRXP(x‘TTýoT}_"`^KK^`"__"`^KK^`"þÃVVV'ÿŸ7!.°/°Ö´+°±+´ +±+±±9901'>7'7.'77'7H!QaVVaQ!bb!QaVVaQ!bÕPPPPÿ)B\[[\B)Mþ(M)B\[[\B)MØ0QQýÈQQÿÿ ÿø/ ·OþÀ ÿø/6d²4+°/° 3´'++°/°3´,+°2°/´++°#2°7/±8+±4°59±'² 999°,³*2$9°²!99901%#"#".'#".#"#52>32>3232>;&'7'6¼`w:<=92), (#7A>9;<9D= (#4g2y#d——d#yãgNc bP>I>"854Oc bPcc#1—#w��w#—�Ù ,²+²+°3´  +±é° /± +± ° 90173#3#ÚKhÿxþücMÿèxþÛý'ÙÛNþ´XÿuL]X°/±é² +³@ +°/± é² +³@ +°/°Ö´<+°±+°2´<+° 2±+±± 9901%#"&54632#4&#"3265LŠph’’hq‰RWQJ]^IPXom�“gôh’ŽlM[^Jþ I^[L+ÿéÅ%j²+± é²+±é´ +±é³+°&/° ֱ鰱#+°2±é±'+± °9°#´$9°°9± ² 999012#"&54632.#"#>"32654&#@G3!îeƒz_i:QL.> X k]@JP=>RRÅ3R�^þ¦‡hc~O‚‹83Wbþ¦SGCW[DBSPJÙ C² +± é²+±é´  +±é° /° Ö°2±é²  +³@ +±22± +01!5!5!5!!5!íþc�þdùþ�LRéRý'RPÿœJ u² +°3± é°2² +³@  +²+°3±é°2² +³@ +´  +°3±é°2°/°Ö°2±é² +³@ +± 22±+±±990133!#7#537#537!5!!5#35Õ7[þ|)7)?`fÆè_þºgÑ �_~ Gý'ddRúRéRýyú;éé(ÿòúÆ#²+° 3±é²+°3´7+°$/°Ö° 2´&+°±"+´&+°2±%+±° 9°"· $9°°9±° 9°·  $9°°901#"''7&54632'"&32654È2SSÔ•‚bO6RRÖ™}aßq²?�O€þsN^v¨Æ2Sg•ÔQP2Re‚•ÑQ °p^Q�@sþp?¬s` ½Ù"²+±é²+°/±+±°90133 ! &d)þ¦Ô§Ùý'hýê ½Ù"²+²+±é°/±+±°901!#7! ³þ×d3ÓþYÙý'q7hU²+´7+°/´ 7+° /´7+°/°Ö´+° 2² +³@ +° 2³@ +±+± °901!".546;#!!;~Es\3³˜�”ï”þm-IP4Œ!FyR˜žFÊF;Q)F7ÿ¯!E²+´ 7+°/± 33´!7+±22°/´7+² +³@ +°2°"/°Ö´+°!2² +³@ +°2³@ +±#+°6º=ì±+ °.°À±ù°À°³+³+³+³ +º=ì±+ ³ +³+°³+³+³+³+³+º=ì±+ ³+² Š Š#9°9°9°9²9° 9· ........@ ................°@±°90133#3#;#"'#7&54677#?t7}”BÖì76YŒŒ^E7%užˆœ.p }Aº¯GFÑF®F[tM¯Ž� þ’b¨Ì²-ùÕ2°/´++°/´ ++°/´++°/±+± °901746;#"!!;#"&-�^íí!/% |þ„ &/ íía~ërxD9+D+:E~ÿÿ7ÿÿg ÀIgÀ7ÿı&<² +± 33´7+±!22²  +³@ +° 2°/± 33´7+±22°/´7+°'/°&Ö°2´+²& +³@& +°2³@& +±(+°6º=ì±+ ° .°À± ù°À³ +³ +° ³ +³ +³ +³ +º=ì±+ ³ +³ +° ³ +³ +³ +³! +² Š Š#9°9² 9°9µ......@  !................°@±°9013#7#537#537&'#5323&>7t7%Œ2ZqD7[q>·Î<2D”�P?4� �>/H@'±tN½QxF"<32&#"327#"'#"&546\*$@PU?#'KTj  !+#@UPA(ccd`9NK,LH.ra  $HL "aaY59Q|±”$.`°/°3´+°%2°"/°+3´++° 2°//°Ö´+°±(+´+±0+±(µ  -$9±"³$9012>32#"'#"&546327&#"2654&#"§Tj  !BLN9ccd`9NK*$@PU?#'Ä&(("@UP”a Z05YaaY59Q�,LH.f+.HL>K 2²+´7+²+°/°Ö´+² +³@ +±+01)3!KýóFÇ þ9âȲ+´7+°/±+01!!âýëý8ÈdýâFÿœâ2:²+°3´7+°2°/° Ö°2´+°2±+± ² 999013#'67!&'7!4&LP?H^c 6 ýØ,!1,þùz>2fR= WF400 5WþõM‹2ÿè/C+² +°3°/°Ö´+± +±³ $901%654' ''>7%5%.'77­þã\Bb =þ¤^9`A$}IQPH˜¼$O3&·E¸&2O#YabFÿò‚¤"²+°/°Ö´+´+±+013F<²ýNÿò¤ !² +° /° Ö°2´ +°2± +0175737#P! ^dHB0Ee3V„SZsRBLÿÿ<ÿ �ÿ" ã ãðÿÿ<ÿ Wÿ" ã# ãÜ ã¸7ÿ žÿ 6z°/±é°0/±+é°7/°$Ö´ +° ±+±'22±é±322°±+´+±8+± $²999±±+099±°9°0· '.$9°+°-901%654&/7#"'732=.546754632&#"P+%U$- 'ÛN8%<>! ^(: BEdH!0>H¦ W&<  >/&/ zJYpEe3V„Ž ,6+2°_/°#Ö±]é°]±+±&Z22±é±2U22°± +±7P22±é±CK22°±M+±Gé±`+±]#²999± ³*,$9±GM²;@=999±X² J999°SµG#OKZ[$9°5±&D9901#"'732=#"'#"'732=.546754632&#"63254632&#"5654'5&#"32'5!%<>! ^$&+('51 ^M[[MdH!0(+&$dH!0P``PPPU#'+((+'ÏHEe3V„fN8X5" V„€V43V�[rSBLk‚ZsSBL�X45WJ!98!ÉßÛ!¨"21ÿÿ� �Ð'yÑÿ)'y9ÿ)y…ÿÿ� �Ð è ÜÀÿÿI± 'yÿòÿyÿòÁÿÿI# ' êr êÿÿ2Åî& Êy�£ÿÿ2âî& Ê'y#£y"ÿÿÿ/ÿê î& Ê'ya£'y`ÿ'yÿØÿyÿØ£ÿÿ!(Ò & ð'y|Ây{ÿEÿÿ!ÎÒxaÂ#ÎÔxt°/´++² +³@ +°/´++² +³@ +°/°Ö´+°± +´ +±+±°9° ±99±°9°±99°°9012?632#54&#"#"&'3�b*'095u175?E:%!EKFNKzòŠ%±°/´ +° Ö´+° /´+° Ö´+°&/°Ö´+² +³@ +°±#+´+²# +³@# +±'+°6ºÂ\îÇ+ ° ° À±ù°À³ ....³ ....°@±#² 999± ³#$9015#"&/.#""&5463232654&k†C9,4  >9?A7.2")Q8‚?J,23 ' A8?::F/;1+#,!ÿÿ%ÿ÷Ϩ‡ ð�ÿÖ@À3Zä†t°/´++² +³@ +°/´ ++² +³@ +°/°Ö´+°±+´+±+±°9°± 99±°9°±99° ° 901?'&#"#>32733253#"/‘O/571*;AJ3563'*3273326=3#"'!!¦E;t›T7/571J9@H590#(AþÀiF•$NFK,e‚ !%:EvFÿÿ2$& µ ð( 2ÿí,¾²+²+´++² +³@ +´ +°3´7+°2´ +° 3´7+°2² +³@ +´( +´++²( +³@$ +°-/°Ö´+°±"+´%+±.+±°9°"@  ($9±(°*9°±+99°°901#7#537#5!733#3!"#>32326=3#"/&ÛE!…®=ëCŒµ<ñþåF/571u590'*b7FfF11FfF±NFKE!%:E?2 .·²+´ ++²  +³@  +² +³@ +°/°-3´7+°+2² +³@ +°/°)3´7+°'2°$/´++²$ +³@ +°//°Ö´+°±+´!+±0+±²999°@   $'*+.$9±$± &99° ±99017#7#537#537'&#"#>3273326=3#"'3!!!¦E?c5˜¼@N/571`)@6 5902æþ÷4=þ  FfF2NFK8Pk!%:E bFfFÿÿpÒæ& ð¢ ðþn!,Ô:β+°7/´.++².7 +³@.3 +°/´ ++² +³@ +°(/´++²( +³@$ +°/´++² +³@ +°;/°Ö°2´+°2°±1+°"2´4+°$2±<+±±99°1@  (+7$9±.7°:9°°9° ± +99±(±*99°±99017#7&#"#>327'&#"#>3273326=3#"'326=3#"/”E\ /5715I/571]>@L 5905>590'*=,£NFK_/NFK7oŠ!%:E `$!%:E'ÿÿ29& û2S Êÿ;ÿÿ!4Ò1& ð' ðÿf ð¹ÿÿ20& Á ñ(¢3Ò5m°/´++² +³@ +°2°*/´++²* +³@# +°02°6/°Ö°02´+°12°±+°"2´+°#2±7+±³)*$901$"#>7>2#.'.267>73"&'.'3C[Z# Z[Z "µZ[" [ZZ #“ +5  5+ ñ +5  5+ ÿÿ2o & W�uÿÿ2ÿ» & 'y�Ây�þØÿÿ2ÿ¸& 'yÿÛÃyWþÕÿÿ2ÿ¾ & 'yWÁyÿÛþÛÿÿ/ÿÄ­ ' —'yÿØÁyÿØþáÿÿ2ÿÂÁ & 'yÁyþßÿÿ2rŸ& }}›ÿÿ2rn& Gu%8T@ÿÿ2r¥&  ߜŠÿÿ2r§&  àŒÇ ÿÿ2ræ& X84ÿÿ2r'^ÿØò ÿÿ2rç& /G(¿™/HìÀ™I¯Á™ÿÿ2rÆ& Pdøÿÿ2rë& "¡‡¸2ÿìØ<²+°/°3´7+°2° /°3´ 7+°2² +³@ +°/±+01%!#7#537#53733#þþ6K6—´*Þû3K3ž»*µFƒƒFfFwwFfÿÿ2YÁ& Ê”& Ê% ʶ(ÿì  L²+°/°3´7+°2° /°3´ 7+°2°/°3´7+°2² +³@ +°/±+01%!#7#537#537#5!733#3# þÓ.K.€� ½Ú ú(K(–³ Óð ŸFmmFKFKF__FKFKÿÿ<ÿÈ  ' Ê & Ê W& Ê ­ Ê ÿÿÿ2ÿõ' Êÿ0¥ÿÿ2ÿõ' Êÿ0!¥ÿÿ2ÿ†˜'¾ ÿÿÿ2ÿ„Ÿ' ÿ!Åÿÿ-ÿ÷�Ú'yÿÿ-ÿ÷�Ú¼ÑÀÿì ?h²!+°0/´=++²=0 +³@=6 +°2°@/°)Ö°62´(+°72°(±+°2´+° 2±A+±(³/0$9±0!°9°=°901367>73#.'.#"##7#>76?&'.'3323lKE+" %?&U5 "Z-FKC1# (D&Z8 #Z- ¥ +5\5+ §Ÿ +5Z5+ -ÿì ²+° 3°/±+0175%737'#?-&@K0h�JÙõ0K;/ ÆE|™r,O;°ZOhsŽApA-ÿ¼ð² +°/±+013#75?'57YK@²þݪ]OjÎCCCCéBj>-ÿ²²)² +°3´ ++°2² +³@  +°/±+01!!#7#5375?'5737ÿTSþ�K.KD�·>õGKR$y°ElÇCCCC¡=OK”fOt§ÂAT1ÿÿ2ÿÔ' ðÿ¥ÿÿ2ÿÔ'!¥ ðÿÿÿ2ÿ:�'!ÿC§ÿÿ2ÿ9�'ÿB!§-ÿ÷Ú)² +°/´++°/±+± ° 9°°901752$7&$-|mTqgkxIfþøÆEs\OL@DJOZuÿÿ-ÿ÷Ú#CÑÀÿÿ1ÿÿ[' Êÿ:#�ÿÿ2ÿÿ\' Êÿ:$‚ÿÿ-ÿµ+&#Q ðþçÿÿ-ÿµ&&$L ð8þç-ÿÚ@²+²+´ +´++°/±+±²999°² 999°° 901752?367&'#7&?-Š—MK651\;!3R3`vGKRo‹ "ÆEK¸€#)OTP<4OU7©Ã)-ÿÚB² +²+´ +´++°/±+± ² 999°²999°±990133"#756?.'567&PK[qeŒ™CK+3.Z8#2Q2^u$ $Ù*EMŸe!'OQS<3OS7]7X6²+´7+² +´7+°/°Ö´ +±+± °901!".546;#;~Fr\3±–””þÿ'IX9ŒDwR—•FßB\2Fÿÿ7X +IXÀ7ÿŲñ² +´7+²+°3´7+°2² +³@ +°2°/°Ö´+±+°6º=ì±+ °.°À±ù°À°³+³+º=ì±+ ³+³ +°³+³+º=ì±+ ³+³+² Š Š#9°9² 9°9µ ......@  ............°@0133#;#"'#7&546;Ÿ7XoŽ-<ŒŒE97˜±–Ÿˆï²ZFþ? FJ\DÇ—•þ ­ Ø”7ÿ¾«ó² +± 33´ 7+± 22² +³@  +° 2²+´7+°/°Ö´+±+°6º=ì±+ ° .°À±ù°À³+³+° ³ +³ +º=ì±+ ³ +³ +°³+³+² Š Š#9°9²9°9µ......@  ............°@± °9013##7#53&+532654n7%’°•7_u�.@ŒŒI:‡é«vFÖ–BBF¿ FUþUÕ�ÿÿ$ÿêº' Êÿòÿ%+bÿÿ2ÿë·&,_ Êÿ&2ÿ±î$²+°3´7+°2² +³@ +°/´7+°!/°3´7+°2²! +³@ +°%/° Ö´#+² # +³@  +±&+±# ±99±± 99°!± 9901%!#7#537&546;733#;#"''#þŸK8W,z±–+K>È0BŒŒP?» þÿ0F99FbJ²—•44FþBFF£¡ß„2ÿ±î"v²+° 3´7+°2² +³@ +°/°3´7+°/´7+°#/°!Ö´+²! +³@ +±$+±!°9±°9°³$9°°9013!!#7#537#53&+532654¼K@G¢‹Jþ—K0Oc‚½=nŒŒyO£Åî�Kˆ�•/F::F.F¤(F-tþ”ÄV(ÿïÜì O²+´7+°/´ +°/°Ö´+°±+´+±+±³$9±°901!&'67%3 &=33265/þõ!RCffCR!pHÌþäÌH¬fd®K&!fQaaQf!¡´ƒÆÆƒ´¾b—˜aÿÿ(ÿïÜì& â Ñ\ÿÿ(ÿïÜí& âyâG4,ú8°/´7+°/´7+°/°Ö´+² +³@ +°2± +01%!!!!,þøþM³òGþ�ÿÿPHó6|ûÀÿÿB:ˆ' Êÿ=6ŽÿÿB:”' Êÿ;7ÿò¡ÿÿE7ù‡6=-À@ÿÿE7ù:|úÀÿÿ+ÿñÝ£&Vdiÿÿ+ÿñÝ£& Ê]dV+ÿñÝ£ b²+´+°/´+° /°Ö´ +° ±+´+±!+± @  $9±@  $90166  7'7&#"654'32+ÊÊÊþâSBD¹”»¼RjjL»¹Dk¹¹Qhi»ÊÊþâÊQhjQ¹â¼¼Dk»¹Qjhþ·¹ºB+ÿñÝ£ ^²+´+²+° /´+°/° Ö´+°± +´+±+± µ$9±¶ $901 '264&"6  Hþ &`þ>«ò««òàÊÊÊþâçþ &`Jò««ò«þMÊÊþâÊÿÿ+ÿñÝ£'WæÿçVÿÿ+ÿñÝ£/ Сj9™Vÿÿ+ÿñÝ£&V Àÿÿÿ+ÿñÝ£&V Á³*=ÿÿ+ÿñÝ£'á<VLÿÿq">²+°/´7+² +³@ +°/°Ö´+°2² +³@ +± +01!!#’Þþ"F"äFø"ÿÿÿÿD"E�!ÀÿÊŒlD°/°3´7+² +³@ +°/°Ö´+² +³@ +² +³@ +± +01!#!5!ŒþäFþå}&ý¤\FŒ¢F²+´7+°2² +³@ +°/°Ö´+² +³@ +² +³@ +± +01%!5!3ŒýƒFFFF\ý¤LÀ">²+°/´7+² +³@ +°/°Ö´+°2² +³@ +± +01!!#’.þÒF"äFø"LÿìÔ$ M² +°/´7+°/´7+² +³@ +° /° Ö´ +±22² +³@  +°2± +01!!!!#’Bþ¾Bþ¾F$ FpFœ8Lÿì°$ M² +°/´7+°/´7+² +³@ +° /° Ö´ +±22² +³@  +°2± +01!!!!#’ýâýâF$ FpFœ8>>ü°/°Ö´+±+01-5%>þHþÕññþ}Š>>ü°/°Ö´+±+017->þH+þÕöñ~ˆŠÿÿ>!>Ž' Êÿ\L’ÿÿ>%>“' Êÿ`M—ÿÿ-8_' Êÿh àÿöŸÿÿBT' Ê I ßÿÿ6d' ÊY àôÊœ²+°3°/±+01!##3ÊXüÿXMþ›ÿÿÊœSèœÀÿÿ=ÿÝ¿VüÊÀ=ÿ®¿íA°/±é² +³@ +° 2°/°Ö´ <+° ±+´<+±+± °901%#".5332653¿M–\^˜MR—Ya�RèLŽ``ŽLý÷X‹�S W.Ó« .°/´+´+° /°Ö´+´+± +012#"&546”&$$&«%4$%(@m–² !°/°3´+° /± +±°901373'7@‚))‚j(ii(6||L}MM}>ˆü 1° /°Ö´+°± +´+± +± ³ $901?'%%5†ššH%%þÛÝš’okþšöÎÎþ ÎBÚkÿÿ2œÛ& Ê× ñ0cÿÿ2÷‡# ÿá@Àÿÿ3ý‡#<*À@ÿÿ-ø&WGÿšÿÿù]4Àÿÿ0”ä& 'B ~ ÿÿ!…ä_µåÀ(ÿÈ ˆ#G²+°3´7+°2² +³@ +°/´++°$/±%+±± 99°² 99901367&'!!#7#537ȏ7£K53.\:$4S3axV5þ¬KYxbnc‹˜5 !ˆu!'OSP=4OV7ÀF77FÚ(ELx(ÿÈ ˆ$E²+° 3´7+°2² +³@ +°/´++°%/±&+±°9°² !9990133"!!#7#5375>?.'567&mK`h]ƒ�UkþvK#B=<75I)9V6f~#ˆ×$ED¿F77Fˆ&.O06C>7OZ8YBÿ¸:îy°/° 3´7+° 2² +³@ +°/°3´7+°2°/°3´7+°2² +³@ +°/°Ö°2´+² +³@ +± 22±+±±990133#!!!!#7#537#!!èK3:^´þÊ']þ%K%,P'wsØ´þöîfGþ�HNFJJFNòþVcþ�Bÿ¸:î{²+°3´7+°2² +³@ +° /°3´ 7+°2°/°3´7+°2² +³@ +°/°Ö´+°2² +³@ +± 22±+±±9901%!#7#537#53!5!733!3:þ~$K$+O.}¡³þ¬y-K-4þÐ.³ÇFFHHF\GcHZZþ\þ�cÿÿ2ÿBT' ôþèzÿÿ2ÿB-&!S ô þèÿÿ-ÿB*' ôþè#Pÿÿ-ÿB&' ôþè$LÿÿR,º/'yÿû—'yÿûÿIyÿûäÿÿ�ÿƒg&y*'yÄyuÿÿ�-‚/'y*ÿJ'yv—yÃäÿÿ€,‚/'yv—'yÃÿIy)ä'ÿè Ï#²+²+´+° /´!+°2°$/°Ö´+°±+´+°2±%+±°9°· !#$9°°9±°9° ·#$9°!°901 32654 &#"#"''7&54632ŠþJVt�·ýÙ·Wq�·‚$[\ט‹fa%aYטˆh*þFJ·�uþ÷I·�qâ#[gŒ˜×[b%bf‰˜×Yb~Ù2²+²+´7+°/°Ö´+² +³@ +±+01!##bÖFÙFýmHeÙ2²+²+´7+°/°Ö´+² +³@ +±+01##5eF×Ùý'“FÿÿJfÙnÈÙÀÿÿbÙoÇÙÀ(V w6°/´7+² +³@ +°/°Ö´+² +³@ +±+01!# þNFwFÛ!–ÿ8v„ "° /±é°/°Ö± é±+± °9014632&#"–dH"!1ÈZsSBLü“ÿÿ ÿ8ê„s€¼À;žXI °/±é° /±+01%"05>32&K·Y9€UV€9Y÷Y@9229@Yÿÿ;›XFu“äÀÿ::ê°/°Ö´+±+01#:ââ;ææêþ(þ(ØØÿ:0ê!°/°Ö°2´+±+±°9013#;ææ;âêþ(þ(Ø(ÿ8T ° /°Ö´<+± +01#57>7T_{RJ(R:…þ�Üöó¾b†7(ÿ8z °/°Ö´<+´<+±+013#(RR ü(ÿJT ° /°Ö´ <+± +01#.'&53T.:R(JR{¶7†b¾óöÜþ�ÿÿ,ÿ8X{€XÀÿÿÿ8X zÞÿÿ,ÿKX!y€YÀXÿ8MN3°/±é² +³@ +°/°Ö´&+² +³@ +±+01#3#¤Lõ©ÈLXÿ8¤ °/°Ö´&+´&+±+01#0¤L üèXÿ M 6°/±é² +³@ +°/°Ö´&+°2² +³@ +±+0103#¤©õ ü5Lÿÿ7ÿ8,O�„XÀÿÿàÿ8, €ˆÿÿ7ÿ , „XÀyÿ8ã 8² +´++² +³@ +° /°Ö´&+² +³@ +± +01#"#463%M94ãA'üÙ(>E2ÿ8Í °/°Ö°2´&+°2±+01#4&'5>=Í$.RM",," ¶EF&xþ èE< E ;F§€ 6°/´ ++²  +³@  +° /°Ö´&+² +³@ +± +01%#"&53;.49M%E>œýe'€ÿ8Í °/°Ö´&+´&+±+01#3ÍMMÈè2ÿ8Íã 8²+´ ++² +³@  +° /°Ö´&+² +³@ +± +0132#4&+2.49M%ãE>üØ''€ÿ8 °/° Ö°2´ &+°2±+013#47.5€M",,"MR.$ §F; E E–ÿ8ê °/°Ö±é±é±+01#3êTTÈè8ÿ8íÚ ²+´*+°/±+±°901!!#8µýÕP‚þ¨Ú`ü¾J8ÿ~í °/´*+°/±+±°90153!8X‚þ°+‚XJü¾`ÿÿ@ÿÿß®/1%¶Â/8)ÖÂ/)Âÿÿ3Þ±/6#´Â/2÷ÚÂ+Âÿÿ3Þ±/7,×Â/;Â6#´ÂÿÿDÞ¯/()¶Â/7,×Â;ÂÿÿDÿÿ߯/()¶Â/2ÚÂ7ÿÿÂÿÿ:ÿîê¯/4íÂ/1ÖÂ(¶Âÿÿ4Ò®/$0µÂ/&ÚÂ.òÂÿÿ=ÿÿÕ®/%"µÂ/(ØÂ/ÂÿÿÓ`np/6šhÂ%¸wÂÿÿºe‰o/+ŸvÂ7¼eÂÿÿÝdhq//ÂyÂ)¦dÂÿÿ¾d‰p/7¼dÂ9¹xÂÿÿæd^p/)œdÂ)ËwÂÿÿ»f~o/&®rÂ5›fÂÿÿØbxq/6ÈtÂ6¤jÂÿÿÝdo/6ÍrÂ,ÀdÂÿÿLÒ­/(Â//,ÞÂ'1´ÂÿÿV�­/';´Â/&&ÚÂÂÿÿVÇ­/';´Â/&&ÚÂÂÿÿVÿü·­/';´Â/&&Ú ÂÿÿVÉ­/';´Â/&&ÚÂÂÿÿ@Ò®/$úÝÂ/.òÂ1%¶ÂÿÿGÿÿʱ/1ìÂ/67´Â<ÚÂÿÿNͯ/(3¶Â/7,×Â%øÂÿÿ=ÿÿÙ°/&0³Â/$ ÜÂ1ûÂÿÿÅlyh/(ªoÂ0tlÂÿÿDÿÿ×±/64´Â/8 ÖÂ%ÿÿÂÿÿXÿùå®/(=µÂ/61ØÂ&ÂÿÿÜa}p/)ÁwÂ6©iÂÿÿ¼`}m/6©hÂ*¯pÂÿÿä_}p/5ÉwÂ6©gÂÿÿÌb}s/6©jÂ8±{ÂÿÿÛbkn/6ËqÂ3œbÂÿÿVÿÿÊ­/';´Â/(%ßÂ/ ÿéÙ !’²+²+±é²+² +²+±é°"/°Ö°2´ <+±22² +³@ +°´&+² +³@! +° ±+±é±#+± ±99±² 999°°9° ´ $901"32654&'632#"'#57537.BPPBDUSØ9ihx|hk;K??SBÍo¸ooY^p~†V”‚�ZC2@2zN3@â¸N²+´ +°2²+´7+²+´ +°2°/°Ö´+°±+´+± +01%53!53›Gþ0HHp¸¸pÿÿm±º/1FM /¦    ² +°3° /± +017'¾GýºÚGýºüüHý·ØHý·¤üù±aåm²+´+²+± é²  +³@  +° /°Ö± é° ±+°2±é°2°±+±é±!+± °9±² 999± ±99014632#4&#"#54.3#±taloU8I:F%45%Z%54%³ZZ%XhwsJR?3#=00B%7/ 9-1Jþqh#ÿóòÂ! ²+´+² +´+´ +´+² +³@ +² +³@ +°"/°Ö´+°±+´+² +³@ +°´+°/°±+´ +±#+±³ $9±³ $9013##52672#"&546"32654&ˆ%54&#"#546322#"&546"32654'.þßsG/3)(0=T@BW=Z) W‘ÑÒ•–ÒÕ˜–bT¿ˆ‡¿l+r©4 QK.=.-97- ?ST@9P<Õ’•ÓÓ—”Ñ!l\|‰À¿ˆ�c'-#ÿóòÂ2>Mâ²9+´F+²3+´?+´93 +´+´"!93 +´"+°'2´.93 +´+². +³@. +°N/°<Ö´C+°C±+°2´+°2°±++´ +° ° Ö´+°/´ +° ±I+´6+±O+±+@  !39?F$9±!² 999°"´ 632#"&54?32654&+532327654&#"72#"&546"32654'.66@&=PDQTC32"32654&2#"&546"32654'.3)19 L;LS>%C!M+en)67*&//‘ÑÒ•–ÒÕ˜–bT¿ˆ‡¿l+rè ^Q DSAE\'9nb<(1Ö=.3C<15?EÕ’•ÓÓ—”Ñ!l\|‰À¿ˆ�c'-#ÿóò %�²+´+² +´+² +´+°&/°Ö´+°±+´+² +³@ +°±!+´+±'+±± 99±!´ $9± ´!$9°°901!#>7#72#"&546"32654'.î8SYDmMþ¢‘ÑÒ•–ÒÕ˜–bT¿ˆ‡¿l+rH*yÇibã\¬Õ’•ÓÓ—”Ñ!l\|‰À¿ˆ�c'-#ÿóòÂ"-9HÚ²4+´A+².+´:+´)4. +´+´#4. +´+´4. +´+°I/°7Ö´>+°>±+´&+°&° Ö´ +° /´+°&±++° 2´+´+°±D+´1+±J+±+@  #().4:A$9±#)±99°µ 17>D$9°± 9901"&54767&54632'"32654&"2654&2#"&546"32654'.ÊUU‚S/HN<;I)Q&..%&1.+)46P41&‘ÑÒ•–ÒÕ˜–bT¿ˆ‡¿l+rnX+´++±D+±@ "%(.4;$9± ±99±"¶ +18>$901%732767#"&54632#"&'&"32654&'2#"&546"32654'.194!O:JS@T(D'95 s(..*)46‘ÑÒ•–ÒÕ˜–bT¿ˆ‡¿l+rÕ D8)hDSAD[M8i–=${<38==/4D–Õ’•ÓÓ—”Ñ!l\|‰À¿ˆ�c'-#ÿóò +:Þ²&+´3+² +´,+´& +´+´& +´+² +³@ +² +³@ +´& +´+°;/°)Ö´0+°0±+´+² +³@ +°´+°/°± +´+°±+´+°±6+´#+±<+±µ &,3$9±· #)06$9012#"'&5476"3254%3##5>72#"&546"32654'.àŽ-'=9"4*'>T.*RþÊ)fŽ$2°·± +³(Px$2´£+³*Rz$2±É+0153#53#53#53#5353#53#53#53#5353#53#53#53#5353#53#53#53#5353#53#53#53#5353#53#53#53#5353#53#53#53#5353#53#53#53#5353#53#53#53#5353#53#53#53#53„2ú2ú2ú2ú2Š2ú2ú2ú2ú2R2ú2ú2ú2ú2Š2ú2ú2ú2ú2R2ú2ú2ú2ú2Š2ú2ú2ú2ú2R2ú2ú2ú2ú2Š2ú2ú2ú2ú2R2ú2ú2ú2ú2Š2ú2ú2ú2ú2¼2222222222d2222222222d2222222222d2222222222d2222222222d2222222222d2222222222d2222222222d2222222222d2222222222dÿ8èî #'+/37;?CGKOSW[_cgkosw{ƒ‡‹�“—›Ÿ£§«¯³·»¿ÃÇËÏÓ×Ûßãçëïó÷ûÿ #'+/37;?CGKOSW[_cgkosw{ƒ‡‹��º<+A  $(,048$3¼=+A !%)-159$2²$+@   $3´%+@  !$2¸Œ/A hlptx|€„ˆ$3¼�+A imquy}�…‰$2¸d/A @DHLPTX\`$3¼e+A AEIMQUY]a$2¹< À/A ðôøü $3¼+A ñõùý  $2¼ìí<% +@ ÉÍÑÕÙÝáåé$3´ì+@ ÈÌÐÔØÜàäè$2¼ÄÅ<% +@ ¡¥©­±µ¹½Á$3´Ä+@  ¤¨¬°´¸¼À$2¼�œ<% +@ x|€„ˆŒ�”˜$3´�+@ y}�…‰�‘•™$2¼ut<% +@ PTX\`dhlp$3´u+@ QUY]aeimq$2±M% À/@ )-159=AEI$3´L+@ (,048<@DH$2¸�/¸dÖ»$tÄ$2¼g+»&vÆ$2¸g¹Œ +»Lœì<$2¼�+»Nžî>$2¸�¹` +» pÀ$2¼c+»"rÂ$2¸c¹ˆ +»H˜è8$2¼‹+»Jšê:$2¸‹¹\ +»l¼ $2¼_+»n¾$2¸_¹„ +»D”ä4$2¼‡+»F–æ6$2¸‡¹X +»h¸$2¼[+»jº $2¸[¹€ +»@�à0$2¼ƒ+»B’â2$2¸ƒ¹T +»d´$2¼W+»f¶$2¸W¹| +»<ŒÜ,$2¼+»>ŽÞ.$2¸¹P +»`°$2¼S+»b²$2¸S¹x +»8ˆØ($2¼{+»:ŠÚ*$2¸{¹L +³ \¬ü$2¼O+³^®þ$2¸O¹t +»4„Ô$$2¼w+»6†Ö&$2¸w¹H +³X¨ø$2¼K+³ Zªú$2¸K¹p +»0€Ð $2¼s+»2‚Ò"$2¸s¹D +³T¤ô$2¼G+³V¦ö$2¸G¹l +»,|Ì$2¼o+».~Î$2¸o¹@ +³P ð$2¼C+³R¢ò$2¸C¹h +»(xÈ$2¼k+»*zÊ$2¹‘+0153#53#53#53#53#53#53#53#53#5353#53#53#53#53#53#53#53#53#5353#53#53#53#53#53#53#53#53#5353#53#53#53#53#53#53#53#53#5353#53#53#53#53#53#53#53#53#5353#53#53#53#53#53#53#53#53#5353#53#53#53#53#53#53#53#53#5353#53#53#53#53#53#53#53#53#5353#53#53#53#53#53#53#53#53#5353#53#53#53#53#53#53#53#53#53„2–2–2–2–2–2–2–2–2–2„2–2–2–2–2–2–2–2–2–2 2–2–2–2–2–2–2–2–2–2„2–2–2–2–2–2–2–2–2–2 2–2–2–2–2–2–2–2–2–2„2–2–2–2–2–2–2–2–2–2 2–2–2–2–2–2–2–2–2–2„2–2–2–2–2–2–2–2–2–2 2–2–2–2–2–2–2–2–2–2„2–2–2–2–2–2–2–2–2–2¼22222222222222222222d22222222222222222222d22222222222222222222d22222222222222222222d22222222222222222222d22222222222222222222d22222222222222222222d22222222222222222222d22222222222222222222d22222222222222222222*ÿ8è %)-159=AEIMQUY]aeimquy}�…‰�‘•™�¡¥©­±µ¹½ÁÅÉg²+³:>BF$3´+³ $2°° Ö³ $3´&+³*.26$2³)+³,048$3´J+³NRVZ$2³J)+³<@DH$3´+³^bfj$2³M+³PTX\$3´n+³rvz~$2³nM+³`dhl$3´+³‚†ŠŽ$2³q+³tx|€$3´’+³–šž¢$2³!’q+³„ˆŒ�$3´"+³¦ª®²$2²¶+³º¾ÂÆ$3´•+³˜œ ¤$2°¹/³¼ÀÄÈ$3´+°´%+³¨¬°´$2°Ê/°Ö³!$2±&é³Jn’¶$2°&±+³#$2´+³:^‚¦$2°±'+³Ko“·$2´*+³Nr–º$2°*±+³;_ƒ§$2´+³>b†ª$2°±++³Os—»$2´.+³Rvš¾$2°.± +³?c‡«$2´ +³BfŠ®$2° ±/+³Sw›¿$2´2+³VzžÂ$2°2±+³Cg‹¯$2´+³Fj޲$2°±3+³W{ŸÃ$2´6+³Z~¢Æ$2°6±7+³[£Ç$2´+°´+°/³Gk�³$3±Ë+01!#5##5##5##5##5#535#535#535#535#35#35#35#35#35#%35#35#35#35#%35#35#35#35#35#%35#35#35#35#%35#35#35#35#35#%35#35#35#35#%35#35#35#35#35#%35#35#35#35#%35#35#35#35#35#è–2–2–2–2–222222222d22È22È22È22È22ýD22È22È22È22ýD22È22È22È22È22ýD22È22È22È22ýD22È22È22È22È22ýD22È22È22È22ýD22È22È22È22È22ýD22È22È22È22ýD22È22È22È22È22 ü222222222–2–2–2–2ý222222222222222222222222222222222222222222222222222222222222222222222222222222222ÿÿ£è *kÿÿkÿ8è 8kÿ8ô,.°/´+´+°/°Ö´+´+±+01!!ôþ ,þ ÿÿôÿ8è,?ôÿÿô,è ?ôôÿ8è 6°/´+² +³@ +°/°Ö´+² +³@ +±+01!!èüô,þ èþ ÿ8è 8°/´+°/´+°/°Ö´+°±+´+± +01!!òþèþ þòþ þòÿÿÿ8è ƒBÈ À@ÿÿÿ8è  BèXÀÿÿ,ô ?ôÿÿÿ8è ƒC ÿ8@Àÿÿÿ8è ƒB ÿ8@À2î¼'²+²+°/°Ö´+´+±+01!!2¼ýD¼ýD2î¼<²+´+²+´+°/°Ö´+°±+´+± +01!%!!dXýv¼ýDŠý¨X2ýD2î¼:²+´+°/´+° /°Ö´+°± +´+±!+01"3!2654&#463!2#!"&5®,-Ã,-ýÁH4Ã4IH4þ=4IŠ-þ>,-Â,K4IH4þ>4IH4ÿÿ2î¼&§J2î¼ e²+±é²+±é´ +±é´ +±é´  +±é°/°Ö´1+²222°±+² 222´1+±+01!!!5%!5!%5!!52¼ýDPýäýäýä¼ýD6PPPPPFFþpFFÿÿ2MîÿÎ@À2î¼ #'+/37;?Cñ²A+±é²!1222²B+±é²&6222´AB +² -=333±é² 0222´AB +² )9333±é² ,<222´AB +²(8333±é²$4222°D/°AÖ´1+²222°±+²222´!1+²$(,222°!±"+²%*.222´11+²48<222°1±2+²5:>222´1+² 222°±+² 222´@1+±E+01%3535#3535%5##3#3#373535#35353535#3535!!XFFFFFFFþ*FFFFFFFFPPPPPPPPPPPPPPPPæýD¼–FF�F–PP PPðFFPPPPPFFFF�F–PP PP FF�F–PP PPþʼ2î¼ n²+´+±22²+´+±22°/°Ö´+± 22°±+±22´+±+±µ $9±µ $901% 5#'5'35!!›ýɶþn4þX¿þ‘åFŸ÷aáGš2ýD¼25~þIXýÌŒ¨ý¨qŠç¡¡XþŸ€áššýv¼ÿÿ2P2îÀ@2î¼  $(+.26:>ADHLPTW¸²+´+±B22²+´-+± 22°X/°Ö´+±)U22°±A+±22´+±Y+±A@* "$%'*,-024679;=@BCFHJLMOQSV$9±-@*  !#&()+./1358:<>?ADEGIKNPRTUW$901!#7'#77'73'7'3'7''7'7'7#777'/3'7''7''7'7/7'îýDgw<^;;çz=c@?@jF@FX55ýÌ{=b??÷xiFEF#F@FÍ@F@FFFÂ;;šy=c@@@$@F@ËE@E(@@@Ê>>¼ýD¼2<;;š=@?@iF@F55÷>@@¡#FEF#F@FÍ@F@ªFFFL;;$<@@@#@F@ÌE?E¨@@@M>>ÿÿà�µIÔà�µ8°/´+°/´+°/°Ö´+°±+´+± +0135'3#P€°°†SS/¯dá¼ $²+´+²+´+°/±+01!!dXý¨ þÔdá¼ :²+´+°/´+°/°Ö´+°±+´+± +01!5%!!–ôýÚXý¨ÞÎÎ/þÔÿÿúA&™‡UýÀ@ÿÿúC&›‡VÿÀ@lè`°/´+´+°/±+01!!½+½üÕ`þ lè` °/´+°/´+°/± +01!%!!嘷—ý"+½üÕ0þk•0þ #Z²+²+°/±+01)ZüÉœÂ#ZÂ%²+´+²+°/±+±°901% !ýþÂþÀÛüÉœ3ýá3Âÿÿ€°[o° €°²+°/´+°/±+01%'!ÂsxEþeÎßÐÐ/bÿÿ^ÿÆ ý‡[^ À@ÿÿ^ÿÆ ý‡\^ À@ÿÿ´†"‡[´3à ÿÿž“0‡^ÿî°À@ÿÿ^“ /‡[^@à@]“ /q°/°Ö°2´+°2±+°6ºîDÂ�+ °.°À± ù°ÀºŸÂy+ °.±°À±ù±°Àµ......±..°@017-‘èþ3ÂÕŒŒþ¦›Îÿÿ#ZÂ[}ÂÀÿÿ#ZÂ\}ÂÀÿÿ�­[.àÿÿ€°^�ÂÀ^ÿÆ ü ý>üüÊœ^ÿÆ ü°/°Ö´+±+01 ìýâ4ý>ŸþÂþÁÚüÊœÿÿˆ„é ‡[és àÿÿž’/‡^°@Àÿÿ^„  ‡[ s Àÿÿ]“ /d}ÂÀ$ÿóòÁ²+²+°/±+01 ‹þ™gg ggþ™$ÿóòÁ ²+²+°/± +±±9901% ‹þåþäþ™gg?þâþ™ggþ™$ÿóòÁ #²+² +° /± +± ³$901%'7 ‹ŽŽ��þåþäþ™ggÍŽ��þäþâþ™ggþ™'ÿòùÄ v²+´+²+´ +´ +´+° /°Ö´+°± +´+°±+´+±!+± µ $9±µ $9012#"&4>"3264%2#"&546”_Ž�d`‘–×x|±þÙ‘ÒÔ•–ÓÖP”a`‘•¾“=¹ì»µòðÕ”•ÔÕ—•ÑÔè ²+° /± +01# ÀÀ>ÀÀ   ¡èþŒþŒttýT88þÈ'ÿòùÄP²+´+² +´+°/°Ö´+°±+´ +±+±± 99±± 9901"3264%2#"&546 x|±þÙ‘ÒÔ•–ÓÖ�¹ì»µòðÕ”•ÔÕ—•Ñ'ÿòùÄ %-39?IOU[agmÿ²)+´-+²#+´+´EA)# +°3´E+°2³d)#+°3°n/°CÖ´H+°H±*+° 2´'+°2°'±+´+±o+±HC³MOkm$9°*@ JLRUX[\_behj$9°'´#-(),$9°@ .147:<$9°³ =?$9±-)³13Y[$9°A@ .069"3264%2#"&546“IqnILklG_Ž�d`‘–×x|±þÙ‘ÒÔ•–ÓÖp�rnJJp:”a`‘•¾“=¹ì»µòðÕ”•ÔÕ—•Ñ'ÿòùÄ '²+²+° /° Ö´+´+± +012#"&546–‘ÒÔ•–ÓÖÄÕ”•ÔÕ—•Ñ'ÿòùÄT²+´+² +´+°/°Ö´+°±+´ +±+±°9°° 9±± 9901%2654&#4632#"&�v¹¶yþ˜Õ”•ÔÕ—•Ñ.µx|±þÙ‘ÒÔ•–ÓÖÿÿ'ÿòùÄy ¶Àÿÿ'ÿòùćyëÿË@Àÿÿ'ÿòùćy5ëÀ@'ÿòùÄ P²+´+² +´ +°/°Ö´+°±+´+±+±± 99± ±9901#"&54632%"3265!ùÕ”•ÔÕ—•Ñþ˜uº·v|±þÕU‘ÒÔ•–ÓÖš´z{²´y'ÿòùÄT²+´+²+´+°/° Ö´+°±+´+±+±°9°°9±± 9901"!#"&54632‘v¹/hÕ”•ÔÕ—•шµx‘ÒÔ•–ÓÖ'ÿò–Ä'²+²+°/°Ö´+´+±+01"&546–—ØÖÄý.Õ—•ÑÿÿŠÿòùÄ ¶À�Ù <²+´  +²+´+°/°Ö´&+°± +´&+±+01!"32654�þpühII43JÙý'ÙþýIhII252î¼"l²"+´+² +´+´" +´+°#/°Ö´+°± +´+°±+´!+±$+± ±99±±99012#".5467"32>54.%!!J–ƒNL†OL†OSÔa¢^] ^^ ]]�þA¼ýDƒRˆLL…QT‡JJ‡‡\ž^` ^] ^] ^ýD2[î¼ I²+´+°/± 33´ +°/° Ö´ +° ±+´+±+± ±9901!#4&#"#2!462¼Ê‹”Ícrªý¾µ¼þŸŽÏË’(²vt´ÿÿ2îaƒ ¼À']–Ä-²+´+² +³@ +°/°Ö´+± +01#463"c<Ö™x»]–Ñ7¹ÿÿ’Uùć…5ëÀ@ÿÿŠùg… ÄÀÿÿ'Žo‡…ëÿÙ@À']ùÄ F²+´+² +³@ +° 2°/°Ö´+°± +´ +±+± °901"#4632#.•w»<Ö™�Ò<±�¹w–ÑÔ“y·ÿÿ'ùg‰ ÄÀ–R¼²+²+°/±+01!RýD¼ýDÿÿ–R¼‡‹–RÀ@ÿÿ–R¼‹è¼Àÿÿ–R¼‡‹Rÿj@ÀKÜEÖ P°/´+°/´ +°/°Ö´+°± +´+±+± ² 999±²99901"32654&2#"&4æ<,,+~hIJ34I¤- +* !]J52IIh2î¼<²+´+²+´+°/°Ö´+°±+´+± +01!%!!�,ýv¼ýDŠý¨X2ýDÿÿ2î¼� ¼À2î¼:²+´+²+°/°Ö´+² +³@ +±+±°9017!%!!a[ýv¼ýD.\2ýDÿÿ2î¼’ ¼À2î¼ P² +´+°2²+´+°2° /° Ö´+°±+´+°±+´ +± +01!3!%!!c/ýv¼ýDŠý¨Xý¨X2ýD#Z G²+´+² +´ +´+° /°Ö´:+± +±± 99± °901#5 !îhwþÂþÀÛüÉœ"hhïýá3Â#ZÂ%²+´+²+°/±+±°901%!ýþ›üÉœ3ýá3Â#ZÂ%²+´+²+°/±+±°9017! €>þe›œ3ý®Âý> ÿ7ò R°/´+°/´+°/° Ö´+°± +´+±+± ³$9±³ $901  .64."26x憇çþò憇-uÍúÎvuÎúΆçþò熆ççþúÎuuÎúÎuu2î¼ ^²+´+²+´ +°2´  +´+°/°Ö´+° 2°± +´ +° ±+´+±+01!!!!!!2¼ýD2Xþí2þí¼ýDEþé\þ»Eþéÿÿ2™îÿÏ@Àÿÿ2î¼™ ¼Àÿÿ2™2ïÀ@'ÿòùÄ |²+´+²+´ +°2´ +´+°/° Ö´+°2°±+´+°±+´+±+±°9°²999±² 999012#"&546!32654&'–‘ÒÔ•–ÓÖ~j¤ þé °q|±¡oÄÕ”•ÔÕ—•Ñ8 ¤j.p¨µys´ þ¹ÿÿ'ÿòùć�ëÿË@Àÿÿ'ÿòùÄ� ¶Àÿÿ'ÿòùć�5ëÀ@�j„O °/´+°/°Ö´+±+01%!Ï5þ™çþþÉ72þÿÿœh�O‡¡2ìÀ@ÿÿœ�ꇡëÿf@ÀžjƒO8°/´+°/´+°/°Ö´+°±+´+± +01!%!!Ð�þMåþþ�2þ�j‚O.°/´+´+°/°Ö´+´+±+01!!�åþOþÈ|X :²+´+°/´+°/°Ö´+°±+´+± +01!%!!ö4þž�þpèþ¸H$þpÈ|X 5²+´+²+´+°/°Ö´+´+±+01!!È�þp þpÿÿœjƒO¡ ¹ÀBÿ?_ Œ–'°o/° 3´+°�2°—/°ZÖ´b+°b±r+´+°±O+´J+°J±+°Q2´•+°.2³C+´=1+³;•+´E+°E/°j3´;+°2°•±6+´1+°1±�+´Š+°Š±+´%+±˜+±bZ°X9°r±W_99°°V9°O°T9°J²HSm999°C´oux$9±E°h9°;²@|}999±6=· ‚…‡�“$9°1², 8999°�±*+99°Š±)"99°°(9±o°X901654> 54.''#"547&'#"&5475#"&547&'&/.54>75&'67.5467.'>7'>54&'ˆGSRL#q 08"5"( ;N$V&[&-2F >3'  x))[&V# ;,.'6:s(2". U_^T%  T`acMUTH)xnABp`L_þÖ P #-(86C# =**rY-{/r2)T"5 ] ]#  04 T*1r0{,4G=:J-?xIWP!‚LJ� "   LM�pB@n~YT#ÿþø¼C^²+²9+´8+´*9 +´B+°D/°5Ö±<é±E+±<5°>9±±A99°*µ $9°8µ '<>$901"/#"&'#"'#"&54>?&5463273327''7654&'7Ê jAUHmF'    1#6e&:ïI]›ŸYö0zO€¦Fi  i)>4 p     0YðH]™Zõ*ZY²- ´ƒ}Aj #ß¼ !,6µ²+´+² +´+´ +´+´(" +°-3±(é°32°7/°Ö´+°±%+±+é°+±0+±6é°6±+´ +±8+±+%±99°0µ $9°6±!99±³!$9°±99°"± 99°(±9901$&#"322#"&546&#"'>32'"&546322"&54632´·|�³³�}}ŽÐÐŽ�ÏËý-=7#"I(,C$þU,T 4R5K,FJHGKF-K5Rî4P* 8vPJ5-J=BkCBjB>J.5J#ÿò“À:`²+² +°3´+°/2² +³@5 +°;/°Ö´+°±,+´+±<+±,³ $9±³ &$901.'.5463267632">54&#"#".'&\Qm<+U>U22F=W6EžÄ1='5?&DJF.84?/ 9K‰ŽOY/?VK,6"8T;8pWÃ/F4%KFR 7(/hX[c/398 /!*J"ÿò0Á  ²+²+°/±+±± 9901&'67>7.(¸8F¡!J¼ÁE;——;�8-“Á0ù>PÜ<„äé6jµ¶j1°?0É#åÁ8ž² +´ +°2²'+´ ' +°13´+°72°9/°$Ö´)+³)$+´+°/´+² +³@ +³@4 +² +³@ +±:+±$²"&999±)²'+999±³"+$9°'±$)9901!5>7#"&54632&5462>32#"’ ".F-þ-F/! O&@\S;""']‚]'  ;S\@n%%9%./$:#,"(_CA\ 82?ZZ?28 \AC_"OÁCв)+´+²)+´*+°'2²9+´0)9 +° 3´0+±B22°D/°3Ö´+°± +´?+±E+±3±)*99° ·.067#"=!2ß8"L2.@,740 ??;%@.K((,C$þU,T 4R5K,FJHGKF-K5Rœ?('Ðt?.!7&//O09Z40='.?J4P* 8vPJ5-J=BkCBjB>J.5J#ÿò“À!² +²+°3°/±+± °901>32.'.54632\Y6=W5QTMQm<+U>w0JFT;6phi†BK‰ŽOY/?V"ÿò0Á ²+²+° /± +01&'6(¸8F¡!J¼ÁÁ0ù>PÜ<„äé#åÁ/h-²:+´+²:+´;+°82²W+´+´H(:W +° 3´H+±g22´a:W +´a+°N2°a´"+°i/°KÖ´%+°%±T+´+°±C+´0+²0C +³@09 +²C0 +³@C: +°0±+´Y+°Y± +´d+±j+±T%³("HN$9°°R9°C´AV$9°0²999°³2W$9°Y°[9° ´ ^ag$9±(@  %0CKd$9±a"²R[^999°³TY$901%3.32654&#"654&#".#"32>!5>7#"&54632&5462>32#"„!2ß8"c`%G<$vLB44A2.+8!?D(.%  ".F-þ-F/! O&@\S;""']‚]'  ;S\@nœ?('¨H538 l6&DF$e#A37G )(H%9%./$:#,"(_CA\ 82?ZZ?28 \AC_7¶ L²+´ +° /°Ö´ +°´ +° /°´ +°/±+± °9±° 901%#"&46323B,-BB-3"S%..J.-7ò¶X²+´ +°/° Ö´+° 2°´ +°/°±+´+±+± °9±°9±° 901"&46323#54'&BZBB-6 ‰T‰&÷þ\%..J.-7mC”88m7™¿в+´ +³+´  +² +°/° Ö´+°´ +°/°±+´+°´ +°/±+± °9±°9±±99± ± 99° ² 99901#"&4632#"&4632"F0/FF/:#�F/0EE0:"kþs&--L-¬“þ'&--L-b7™¿’²+´  +³ +´ +²+°/°Ö´+°2°´ +°/°±+°2´+°´  +° /±+±°9± °9±± 99± ±99°´$9015%#"&46325%#"&4632€þ¢wF/0EE0:"þ¢F0/FF/:#­=�=þ'&--L-Ú�þû&--L-¬BÿëpÚ i²+´+² +´ +´+°!/°Ö´+° 2°±+±é±"+±°9°°9±² 999°°9° °901#"577>324&#"326p;W_&(  FNW%'30;b,C|R0Ç þÊ VOcd‚‡’• ¢$9°¶¿ˆ³Û9—™�$9¸6»?^îL$9°A±C†99¹ìHºFÝR999°9µM0H`Íè$9°fº>aO999±ÒcA265jmxy‚×áåçD$9°q±o499¹^”±‚’99°šA!�&�†–�DOPYjlo$9°¸p9¸fA 23œ�RW$9¸9º|hr999¸-¹4>99¸¢A )06ILdsu ¤$9¸H¼5G0�ª$9°Í¹üœ99¸�ºþ&§999°êAxy 6î#…‡�›¬±$9¸‹°ð9°Þ»è!xµ$9¹å€A¢³Ûá¿çòó }~‚$9°ã²qÒø999°Õ²C±Â999°ö²FÄ®999±¥Ù±H99°7°I9° @ SÉÊ$9°a±`Ë9901&547.+>7&'32.'>?/&54654'2>2%2367>7632327#"&'&/.'&547#"&'>7&'>;&5477654'4?&54?&472>54'#"&'#"32?632#"'%>7.#"327'&547.'&'6324654.'.#"3263232654&"#"'.'&'&'&'32?6=#"'>7>7&54672>7327"&+"327>32&#"54#"#654.'6767›94OgB/4PB6Ê*'#C  / ˜Fs3IJIž  ý¦  +b] ‚i ),/KImL� W!+a>E,'ƒ Y3q2VU U (%# †  (Ø[]DZ ¯A'$04[,  ).P() -2þ >…c`* f…8''j)6 -M01$"" 8 9+ "# vpn #AYI[ o#,ü&g!!jV0D9'0*A   H ! E"   !   Å:## H% þG " # O0•:/B4G/93NF W  >FH ¦   ˆ*{/ ) N !!" %5T ¡Em*a &x18_ Mx'+26LL !!%!.x憇çþò憇,þf©æþ+þb èóž©èך å†çþò熆ççþrþa èõŸ«éÚ™ åñþg¨å ÿ9ó!!'b° /´+°&/´+°(/° Ö´ +° ±+´+±)+± @  "$$9±&@ #$9012".4> 654 32%  &#"œÆ¹‡QQ†¹Æ¹†QP‡nþÞ&mŸþÛþÛ�¥¤þ$þßp¢!"€¢¢!Q‡¸Ç¹‡QQ‡¸Ç¸ˆ~þÞþÛ€¢¥þ%þÛq£$"�¤¢øþß"mÿÿ=ÿ®¿í'WèÿŽV=ÿ®¿í“°/±é² +³@ +° 2°/°3´+°2² +³@ +² +³@ +° /°Ö´ <+° ±+°2´+°2² +³@ +² +³@ +°±+´<+±!+±±9901%#".5332653##5#5353¿M–\^˜MR—Ya�R�¦8¦¦8èLŽ``ŽLý÷X‹�S þ"8¦¦8¦¦(ÿìã ²+°3° /± +01''7'7ë1ÇÇ2ÇÈ2ÉÊ1Êá2ÈÇ2ÇÉ1ÊË1Ê(ÿø8N²+±é°/± é°/° Ö´&+°±+´ &+±+±³ $9±³ $9016264&"462"w"."".qPpPPp—.""."qpPPpP8ÿð0è b²+±é°/±é° /±é°/°Ö´<+°2°±+° 2´<+±+±³$9±±99± ±990166  !."!268Þ<ÞÞþÄ‹RªâªDý®ªâªÎ<ÞÞþÄÞ¤o••¿o••8ÿð0è ‰²+±é°2°/°3± é°2°/° 3±é°/°Ö´<+° 2°±+°2´1+° 2°±+°2´<+±+±±99±±99±±99± ±990166  .'))>8Þ<ÞÞþÄÇ �dþ®e� �ePÿd�Î<ÞÞþÄÞ¤d�þÿ�´d�þÿ�HˆØ (²+°3° /±é° /± +± ³ $901!# #7H@ðð_ÁÁ_ð[‹‹Øþ”þ”$þÜlÓÓHˆØ ²+± é° /± +01)33'ˆýÀðð_ÁÁ_ð[‹‹llþÜ$þ”þäÓÓHˆØ )²+± é°/±é° /± +± ³ $901)! 7'ˆýÀðð@𼌌‹‹llþ”ÔÔýÈÓÓ0ðâS²+² +°3´+°2°/° Ö´ +° ±+´1+°±+´+±+± ±9901462"$462"#3\+>++>þ©+>++>ÝPPy>++>++>++>+ý²Ø0•ز+°3°/±+01!# #3•UÞÝUUcý�Ø0•ز+°/±+0133#0UÝÞUþøUØý�cý(HˆØ @² +±é°/±é°/± é° /° Ö´1+°2² +³@ +±22± +01!!!!!ˆþðþðýÀØPôPôPØHˆØ @²+±é°/±é°/± é° /°Ö°2´ 1+² +³@ +±22± +0135!5!5!5!5!Hðþðþ@PôPôPý(6ÿøÞ#޲+±é² +±é´ +±é´"! +±"é´ +±é°$/°Ö°2´&+°2°±+°2´&+° 2±%+±· $9±³$9±³ $901264&"462"264&"462"!5!ñ"."".qPpPPp"."".qPpPPp,þèm.""."qpPPpPþÉ.""."qpPPpPLPHrØg² +°3± é°2° /±é°/°3±é°2°/° Ö´ 1+°2° ´  +° /°3° ±+°2´1+´ +°2±+013#3###53#533Šè˜˜èZ蘘èZØPýÈPDþ¼P8Pþ¼HžØ 1²+°3°/±é° /°Ö´ 1+± +±² 99901! ! !iþïþðVþî§þ¡KþµØþ²þ´JþWHÿöâP²+´ +²+´+´ +´+°/° Ö°2´ +°2° ±+´+±+01462"462"462"t+>++>þ©+>++>++>++>M>++>+þÿ>++>+ƒ>++>+HžØ ²+± é° /°Ö´ 1+± +01 ! žþîýªrþ¡šþ´þ²ØþµKýx©þW8ÿð0è i²+± é°2°/°3±é°/°Ö´ 1+° ± +´1+°±+´1+±+± ±99±±99± ³$90166  >4&8Þ<ÞÞþÄwo––oPo””Î<ÞÞþÄÞ¦©ä©Sý®©â©8ÿð0è#p² +±é²+³+±é°$/°Ö´1+°±"+´ 1+±%+±°9°"· $9° °9± °9°· $90146327#"''7&&#" 326548Þž†j080TÞž†i/8/U3Qf|°>Ýþ[Rd|°lžÞU080i†žÞT/8/jt>°|fQmþ[=°|dHÿöÜâ]²+´+²+´+²+´+´  +´+° /°Ö²222´+² 222´+±!+01462"462"462"462"H+>++>++>++>++>++>++>++>±>++>+�>++>+�>++>+ƒ>++>+0pز+°3°/± +013# #`ðð_ÁÁ_Øþ”þ”$þÜ<|Ø O²+°3° /±é°2² +³@ +° /°Ö´1+°±+´1+°± +´1+± +013#333#!ŒPøPøPþ`”Dþ¼þlDHˆØ&²+° 3°/°Ö´1+±+±°9013#35373#¨`ðð_™P™_ðð`Àllèèèèþ”þ”#4@ìP°/°3´+° 2°/°3´+°2° /°Ö°2´+°2°± +°2´ +°2±!+01462"462"462"462"X+>++>++>++>þ±+>++>++>++>—>++>+þÿ>++>+W>++>+þÿ>++>+HžØ >²+±é°/±é° /°Ö´1+°2² +³@ +± +±±9901!!!÷þ¡PVýúˆþWߨý‰P6"¾¶M°/±33´+± 22´+°/°Ö´+°± +´ +° ±+´+±+01462"$462"$462"*+>++>þÛ+>++>þÛ+>++>M>++>++>++>++>++>+:Ø ²+° /±+01 %5-5%íþÄmþ8=þÃÈþ“–Ur„K¤VrrV¤K„0pØC²+±é°2² +³@ +°/°Ö´1+² +³@ +² +³@ +± +01)5333pýÀøPøPˆýx<ÿð<è i²+°3± é°2°/°3±é° 2°/°Ö´1+² +³@ +°2°± +´1+² +³@ +°2±+± ³ $901"3"&632644#<|°°|žÞÞžý|°°|žÞÞž˜°ø°PÞ<ÞýX°ø°PÞþÄÞ6ØŒ²+°3°/±33±é±22° /±33± é±22² +³@  +°2° /°Ö± 22´1+±22² +³@ +° 2°±+±22´1+±22² +³@ +°2±!+01!#5##5#535#53533533#3#'#3PZPïïïïPZPïïïïPZZïïïPZPïïïïPZPªZHÄØ 2²+°3° /°Ö´1+°2°± +°2´1+± +013#3753#˜PPÜPPÜØþ_ÜÅý(¡ÜHˆØ4²+±é°/±é°/°Ö´1+² +³@ +°2± +01%!!!ˆýÀ@þPPØPýÈZªØ"²+°/°Ö´1+´1+±+013#3ªPPØ6Øf²+°/°3±é°2° /°3± é°2² +³@ +°/°Ö± 22´1+±22² +³@ +°2² +³@ +° 2±+01!#5!5!5!5!53!!þ¼Pþ¼Dþ¼DPDþ¼?PïïPZPïïPZ&ÿ ºØ P² +°/´+° /°Ö´+´+³+´ 1+° /´1+± +± ³$901462"7#3&+>++>GPPµ>++>+àØ?ÿðgØp²+±é°/´++° /±é° /°Ö´1+°±+´1+±!+±± 99°´ $9°±99±²999± °901 &5467%!5!32654.'†X‰”ÿ”O<þmþÂKIf^]g&?4¼‚_`v{aI~,ÉPPç6]B@L=I,D'6ÿøFàƒ²+±é² +±é´ +±é´ +±é° /°Ö°2´&+°2°±+°2´&+° 2±!+±· $9±³$9±³ $901264&"462"264&"462"…"."".qPpPPp"."".qPpPPpo.""."qpPPpPþÇ.""."qpPPpP8ÿð0èN²+±é°/± é°/° Ö´1+°±+´ 1+±+±³ $9±³ $901264&"6  ˆ°ø°°øÿÞ<ÞÞþÄèø°°ø°þ6<ÞÞþÄÞ7ÿî0ça² +² +±é°/±é° /°Ö´1+°±+´1+±!+±³ $9°± 99± ° 9°³ $9014632'#"&"327'7654&7⛟ÝUL8Lh‡ Ý}z³®cSÓ9Ò>®j Ý⛇hL8LUáÈ®y³>Ò9ÓOgz³HˆØ O²+°/°3± é²  +³@  +°2° /°Ö´ 1+° ±+´1+°± +´1+± +013###3!8PøPøP Øþlþ¼D”þ¼<ÿöÐâM²+´ +²+´+´ +´+°/° Ö±22´ +±22´ +±+01462"462"462"<+>++>++>++>++>++>M>++>+þÿ>++>+ƒ>++>+8ÿöHâ'p²+°3´+°2²#+° 3´'+°2´# +´+°(/°Ö° 2´+°$2°±+´+°±+°2´+° 2±)+01$462"462"462"462"462"´+>++>++>++>é+>++>é+>++>++>++>!>++>+ƒ>++>+þÿ>++>+þÿ>++>+ƒ>++>+8ÿð0耲+± é°/´+°/±é°/°Ö´ 1+° ±+´+°± +´1+±+± ³ $9± ³ $9± ³ $9±³ $901462"$264&"6  j+>++>þó°ø°°øÿÞ<ÞÞþÄM>++>+Æø°°ø°þ6<ÞÞþÄÞ7ÿî0çd² +±é²+³+±é° /°Ö´1+°±+´ 1+±!+±³ $9° ±99±³ $9°°90146327#"&2654''7&#"7Ý ‡hL8LUÝŸ›â}~®>Ò9ÓSc®³k›áUL8Lh‡›âÝ�³zgOÓ9Ò>³y®8ÿð¾è'/7˜² +±$é°//±é°/±3é°/±é°8/° Ö´!1+°!±+°2´)&+°02°)±-+°42´&+°2±9+±)µ $&$9°-³$9±/$²*999±± !99±3²699901%462#"&54632"&547&#"327&6264&"264&"®PpP6SX) Üá›%UW9PpP$ y³®~ $O"."".""."".ž8PP8,F'á› Ü%H.8PP84)®~y³)K.""."z.""."6rØ O²+°/° 3±é°2² +³@ +° /°Ö°2´1+°2² +³@ +² +³@ +± +013##5333#üPvvPvvDPDþ¼PHˆØ ²+°3° /± +013# #3(`ðð_ÁÁ_ðð`ÀØþ”þ”$þÜllþÝ8ÿð¾èBÛ²+±?é°/±é°53#4&'#5#46wŒµP‡jPi†P´‹‹´P†iPj‡Pµ À  a@r ¼¼ q@`  À  `@q ¼¼ r@a H˜Ø²+°/°Ö´1+±+013#3#'˜P_ñ` Øþ”ó6Ø+Á²$+±33²+° 3±é°2² +³@ +± 22´ '$ +°3± é°2´)*$ +°3±)é°2°,/°$Ö°2´#1+°2°#±+²'222´1+² 222² +³@ +² +³@) +°±+° 2´1+°2±-+±' ±&99±±9901.5353>53!!#4&'#5#4675!5!wŒµP‡jPi†P´‹$þÜ‹´P†iPj‡PµŒþÚ&Ì  a@r ¼¼ q@`  8P8  `@q ¼¼ r@a  8P1ÿóž�²+°/±+01 5žýðý“ŒWõöW!W.ð<8#°/°3´7+°2´7+°/± +01#5!#5ññ8HHHHH¼rØ;²+±é² +³@ +°2°/°Ö´1+°±+´1+± +01353!3˜ŠPþÖP Ìþäÿÿ2ÿñp&!J'y¹ÿy¹%.kʰ/±+°2´ +°2± +0155îîî\T\\T\ÿÿ?ÿèïÍ š<ÍÀÿÿð4Ì&jÿÿ! Ò¤&}P aÿÿ! Ò'y„Ñaÿÿ!’Ò¶&yz¯aÿÿ5ÿ,¦Ù& ì ƒÿÿ&ÿ,—Ù&  —ÿÿsQ'yÿ¿ÿ,'y´ÿ,'yÿ¿y´ÿÿRYÞ‡ ³Z@Àÿÿ&Y²‡ ³îÀ@ÿÿ_r¢&yÁl'y³l'y¹ÿ|'y¹Wy¹l9éåm²+´+²+± é²  +³@  +° /°Ö± é° ±+°2±é°2°±+±é±!+± °9±² 999± ±99014632#4&#"#54.3#9taloU8I:F%45%Z%54%³ZZ%XhwsJR?3#=00B%7/ 9-1JþqhÿÿKÜEÖ�FtÙ%1å²/+´0+°,2²(+´'+°*2´/( +° 3´+° 2´/( +°3´+°2°2/°Ö´+°±+´+°±1+´,+²,1 +³@,. +°)2²1, +³@1/ +°'2°,±#+´ +° ± +´+±3+±°9°°9°°9± #°!9° °9°° 9±³#$901264&"264&"%2"&546!2"&546'#5!#3!53‚mþ�%34H44¢%34H44¹›r››þŽ›p<3%$34$#43%$34$#4à<<ýŸ<<FtÙ&19A²+´+°2²+´+°2´ +° 3´+° 2´-= +°43´-+°!2´'A +°83´'+°2´ +°3´+°2°B/°/Ö´;+°;±?+´*+°*±+±22´+± 22² +³@ +² 222² +³@ +²222°±$+´3+°3±7+´+±C+±;/°-9°?°'9°*°,9±3$°"9°7°9°°!9±A=³$*/$901#5!#3#3#3!535#53#532"&546!2"&546264&"264&"?›r››››››þŽ›››››Ý%34H44þ¦%34H44†þq�<<<<þ�<<<<<<q<¤3%$34$#43%$34$#4MFÿÃ^Ù2å²+´0+²+± 33´ +´+°2°3/°Ö´+°± +± 22´)+±(22±4+°6º=šî¥+ ° .° À±(ù°&À° ³ +°(³'(&+² Š Š#9²'(&9µ &'(......³ &'....°@± °9°)±99±0±99°² 2999°°9°°901%#"'#7&54>7&'#"5325332?373327^5R.($E8A":!Dƒ<Ža?VC4B!;7>謬¬§÷DA,=3,`… .FÚÙ!µ²+´+°2² +´ +°2´! +´+´  +´+°"/° Ö´+² +³@ +²  +³@ +°±+´!+°!±+°2´+² +³@ +² +³@ +±#+±!±99± ± 99° °9013!535#5&5#5!#32>5+X‚þÀ‚åo‚@‚C6*# :LS ôþH<<´Ž2í<73#3!535#535#5&'LS þÓ„‚@‚v9&*# ‚‚‚þÀ‚‚‚åO,bDù<&<<<;> þÀ<<<<<<<Ž$ƒFÿô å%-5=ÿ²+´9+²+° 3´-+°42´)$ +°3´)+°02´! +°3´+°>/°Ö´'+°'±+´7+°7±+´+°±;+´+°±3+´ +±?+±'³$),$9°7±*+99°´!8=$9±;´9<$9°±./99°3³ 05$9±$9´<$9±!)µ '*/2$9±-µ &+.3$90146323>32#"&'#"&5467##"&264&"264&"264&"FR:2L œ L2:RR:2L 00>RtR>00 L2:/B//B/B//Bþú/B//BtR>00>RtR>0þÎ L2:RR:2L 20>­B//B//B//B/ýøB//B/Fÿô\å5=EMK²+°3´E+°<2²*+´I+´"* +°03´+´A* +°43´A+°82´* +° 3´*+°2°N/°Ö´C+°C±'+´K+°K° Ö±é°/±é°K±#+´0+°0±G+´,+° Ö± é°,±7+´+±O+±C³@E$9°'³>?$9°³"$9±#K²)IL999±G0²*HM999±, ³ 1$9° ³ :;$9°7³49<$9±Eµ6;>C$9±A"µ7:?B$9±I´$',/L$901462"$462"#"&'##"&46323.54623>324&"2$4&"24&"2((((R:2L ì L2:RR:2L X0>RtR>0X L2:/B//Bþ1/B//B./B//BR&&&&{tR>00>RtR>02 L2:RR:2L þÎ0>­B//B//B//B/B//B/FŠÙ²+´+° 2²+° 3´ +´+°/°Ö´+² +³@ +°±+°2´ +²  +³@ +² +³@ +±+±°9±±9901326=33!53#"&5467šI4DŽ<}þÊ})u4Mlw_�?`):�e<ýc<<¦>謬FÆÙ¤²+´ +²+±33´  +´ +´ +±33´+±22°/°Ö´+°±+´+°±+°2´ +±22´ +± 22±+±°9°°9°°9±°9°°9012533#3#3##"'#"5325LŽ<°°°°°ì,E Eƒ<ŽÙ¬¬©<¾<¾< >>謬FÿôôÙ:D!²+´A+²+±!%33´9 +±.33´+² ;222²9 +³@9* +°32°´'+´  +°3´ +°#2°E/°Ö´+°±!+´"+³>"!+´+°/´>+°"±D+±%22´ +°&2° ±)+´,+°,±2+´6+±F+±°9±">°9°D²A999±,)° 9°2°9°6°9±A°9°9±99°'°9°± 99° °9°°901#"'#"'#"54675#"'#"532532536532>53323265Ë)9= =H%DOOŽ‹e,E Eƒ<Ž<Ž>H9 C^t®?[È>>謬¬¬þo‹#2992##29=A,-6eMFÿôôÙJTa²+´Q+²-+±1533²+´ *+³0 +°33´++°'2´ +´*+´I +²K333´I+±$>22²I +³@I: +°C2°´7+°U/°-Ö´.+°.±1+´2+³N21+´!+°!/´N+°2±T+±$522´+°62°±9+´<+°<±+°2±é° 2°±B+´F+±V+±!.°+9±2N°)9°T²'Q999±<9°9±²>?999±FB°9±±!N99°°L9°I±#99°7°9°+±99°°%9± 0² )99901$462"462"#"'#"'#"54675#"'#"532532536532>53323265´((((û)9= =H%DOOŽ‹e,E Eƒ<Ž<Ž>H9 C^t®?[È>>謬¬¬þo‹#2992##29=A,-6eMFÆÙ²²+² +± 33´ +´+² +³@ +² +³@ +´  +°3´ +°2°/° Ö´ +° ± +´+°±+°2´+°2°±+°2´+±+± °9°°9°°9± °9° °901!#"'#"53253253353#5#Ú,E Eƒ<Ž<Ž>謬¬¬þ]CÄEúFÿRÆÙ1ð²+´++² +³@ +²+²+±#'33°/´ ++²  +³@  +´0) +´0+²0) +³@0. +²)0 +³@)+ +´" +°3´"+°%2°2/°Ö°2´+° 2°±#+´$+°$±+±'22´+±(022°±.+°*2´-+±3+±#²999°$°9°² 999±"°9°°901"#43232>53#"&%#"'#"53253253353#5#®>謬¬¬þ]CÄEúFŠÙ W² +°3² +°3³ +°3°/° Ö´ +° ±+´+±+± ° 9°±99± ±9901573#573#NÚÚ<<þÒÚÚ<<”€Fý'”€Fý'FÿôÀÙ~²+² +´+²+´+´  +°3´+°2°/° Ö°2´+°±+°2´+°2°±+´+± +±± 99±° 9013##"&546;!5#"3265Öê<®r¬rrVŒþ¬TŒ5‘Q>œ>>N=Q< (!6-E9j9E-l-E9j9E-6#óJ_3333`J+1"]”k{{k”]""]”k{{k”]"( FJ‘09Bí° /±33´+±+22² +³@ +°2°?/°53´+°$2°C/° Ö´+°±+´A+°A±<+´+°±"+´8+°8±3+´'+°'±0+´+±D+±± 99°A°9°<²999°²999±8"²$999°3²) 999°'°%9°0±+99± ±99°?µ"'1:$901%#"'"'#"&53327&546227&546232>5654&"654&"‘Q>œ>>N=Q< (!6-E9j9E-l-E9j9E-6#Ý2(æ2(óJ_3333`J+1"]”k{{k”]""]”k{{k”]"( JzIaaIzJJzIaaIzF>§‚#“°/´*+°#/´ +²# +³@# +³ #+´*+°/´+² +³@ +°/´ *+°$/°Ö´+±22°±+°2±é² !222°±+±é±%+± ³$901$462"462"462"#3!!!!©&&&&�&&þ<<‡þy‡þy�((”(( ((òDÈ<<<F>§‚в +´*+°/´*+°/´+² +³@ +² +³@ +°³+´*+° /°Ö´+°2°±+°2±é± 22°±+±é±!+±³$901$462"462"462"#3!!©&&&&�&&þ<<‡þyÌ((((d((òDþü<FòÙ [#²+²LP333²+² FJ333´ +³"3DH$3´+³NRVZ$2´, +°3´,+°;2°\/°Ö´+°2°±+°2´+°!2°±)+´+°±+´.+°.±9+´+°±+´>+°>±Q+°E2´P+°G2°P±M+°I2´L+±]+±)°+9°²%2X999°.²,3W999±9²4;V999°²5BU999°>°<9±±UX99°µ ).9>$901>54&">54&"#5##333327.546227.5462;333#5##5#"'"'+�*4*þn<<<<<< 6-7n7-l-7n7-6 <<<<<< N>>œ>>N )6)FAAF)6))6)FAAF)6þÇ……Ùýèýè"#(A)f]]f)A(#""#(A)f]]f)A(#"ýèý'………3333F4Ù=®²4+°3²5+°3²/+°3´:+°2´%4: +´%+°>/°4Ö´3+°62°3±'+´+°± +´"+°"±+°2´+±?+±'3±/:99± ´$%-<$9±"±99±/¶"'27$9°:°<9012654.7253#.#""&54>7&#"#3>326½! *.* !†)k<<n.6-' DrD '-6.n<<k)N>>É ,(DCCD(,”9+éý'Š;S"2)(d__d()2"S;þvÙé+933FÙn²+° 3²+°3´ +± 33´+±22°/°Ö°2´+°2² +³@ +°± +°2´ +°2² +³@ +±+013333#####5 <×<ÅÅ<×<Å‹Nþ²Nþ²<þ±Oþ±O<FŠÙ +«²+´+°2²$+°3´+´$ +´+´*$ +´+°,/°!Ö´ +° ±+´'+°'±+°2´+² +³@ +² +³@ +±-+± ´$*$9±*² !999°° 9°°'90132654&#"326=33!53#"&54632#"¥!4"8FI4DŽ<}þÊ})u4MlyK+9H1>c' t):�e<ýc<<¦1•`²`•'L~:CG6ô&&&&­n*™[D?`˜*o>;‹ZzzZ‹Â/\§yMKIO€F‘Ù@IR²+±33´"+±.;22²" +³@" +°2² +°3´*+°2´)O +°E3´)+°42°S/°Ö´+°±&+´Q+°Q± +± é° ±L +´++°+±2+´H+°H± +±é°±C +´7+°7±@+´+±T+±&±"99°Q°(9° ´$-JN$9°+²).999±H2²/4999°´09AE$9°7°59°@±;99±"±99°Oµ&+27AJ$901462"$462"#"'"'#"&53327&546227&546232>5654&"654&"H((þÌ((EQ>œ>>N=Q< (!6-E9j9E-l-E9j9E-6#Ý2(æ2(–&&&&þ0J_3333`J+1"]”k{{k”]""]”k{{k”]"( JzIaaIzJJzIaaIzFÆÙÒ²+´+°2²+± 33´ +´+² +³@ +² +³@ +´  +°3´ +°2° /°Ö´ +° ± +´ +° ±+°2´+°2² +³@ +² +³@ +°±+°2´+±!+± °9° °9°°9± °9°°901#"'#"53253253353#5#3!53Ú,E Eƒ<Ž<Ž>謬¬¬þ]CÄE¾<<FÙ/ ²-+´.+°*2²+± 33´- +´*+´)"- +´)+²)" +³@)' +²") +³@"$ +´ - +´ *+´- +°3´+°2°0/°Ö´+°±+´+°±/+° 2´*+°!2²*/ +³@*, +²/* +³@/- +°*±+°2±é° 2°±'+°#2´&+±1+±°9°°9°/°9±± 99± °9°°901$462"462"'#"'#"53253253353#5#3!53?&&&&‚,E Eƒ<Ž<Ž<°<<°}þÊ}Â&&&&d>>謬¬¬þ™CÄEú<<FÆÙ'ê²+´+°2²+± 33´!& +°3´!+°2³ &$+°3´# +°2´  +°3´ +°2°(/°Ö´ +° ± +´ +°# Ö´"+°%2° ±+±22´+°2² +³@ +² +³@ +°±+°2´+±)+± °9± #°9±"°9± °9°°901#"'#"53253253353#5#3!535##533Ú,E Eƒ<Ž<Ž>謬¬¬þ]CÄE¾<<¾EÄCFÿñbè19»² +´+² +³@ +°0/´5+°9/´+°/´%+²% +³@" +°:/°Ö±"22´+±!222°±+±622´(+± -22±;+±°9°³ %0$9°(°+9±0±99°5±99°9±-99°±+99°±(990172653#"&54?&546327654&"#4632#"&264&"±& .D29T:;P&3R:% .D/>QtAHHAAHHAé¼,G+/8SG[5*”+6gD+*>>QtAHHAAHHAþã= Fÿ«�Ù Y/²+±33²+° 3´+°2°4/´.+².4 +³@.2 +°J/°F3´Q+°V2²QJ +³@QM +°S2³&QJ+´+°Z/°MÖ°2´N+°2°N±S+°2´T+°2°T±C+± 22´"+°"±+´)+°)±1+´2+±[+±SN²=J999°T²>H999°Cµ :;>QtAHHAAHHAé¼,G+(4J59ªˆ>G[5*”+6gD+*>>QtAHHAAHHAFˆÙ+²+²+°/°Ö´+°2±+±°901% ˆþ¾Bþú··Ù·µFrÙ GQ˲6+° 3² +±F33´+°P2´@6 +°3´+°J2°R/°CÖ´+°±<+´/+°/±'+´+°±M+´+±S+±C°69°<³5@F$9°/± -99°'± +99°±)99°M´ !H$9±@6³'/<$9°³)->$9°´ +C$901&#"32767632#"'#.547&'#>54'#"&5463232654&#""7 "d\CC\3`);H1)0 !00H4( ;QQ;,,H8+# 0)1H;)`§." 7=^+ 3:EE:~J1+G8D-paU ]Yv0SF$HH$FS0t`R !`Zs-D8G+1J› +F™Ù"*½²+´&+² +´+²+²+² +´* +°3´+°2²* +³@* +°+/°Ö°2´$+°2°$±(+°2´+° 2°±+°2´+±,+±($´  $9°±99±*&±99°° 9°±99°±9901264&"462353#5#"&5467.264&"‚EfEEf�i–i2á<<â3i–i.&'-/°Ö´+°!2°± +°*2´ +°+2° ±+°42´+°52±?+± ±<99° ±:99°±899±<°9± &±:99012>532>53#"'#"&532>532>53#"'#"‚ -:- < -:- 53#"'#"'2>532>53#"'#526=#"&5332>5463" 7%- 7&'#"5325332?3327#"&ø((x((©":!Dƒ<Žè¬¬¬§÷DA,=9X.+?|Fÿì´ÙBi²@+´;+²%+±)/33´@% +´*+´ @% +´ *+´(#@% +°3´(+°,2´*+°C/°%Ö´&+°&±+±)22´8+±*722°8±+±é°±+±é³ +± é° /± é±D+°6º=šî¥+ °.°À±7ù°5À°³+°7³675+² Š Š#9²6759µ567......³56....°@±&°#9°8°!9°±,99° ´.;@$9±¶ /0=$9± ²>999±;±=>99°±899±(#²999°³!.$901462"462"462"'4>7&'#"5325332?3327#"&T((x((x((©":!Dƒ<Žè¬¬¬§÷DA,=9X.+?|F\Ùy²+²+´  +´+´ +´+°/°Ö´+°2°± +´+°±+´+± +±± 99± ±99±±99013632#"&=#"32654&F<þp2::52:x‡<«Ùþnè<42:<5IŠöóF\Ù".±²"+²+²+´ *+³ +´#+´" +´*+´)" +´)+°//°"Ö´!+°2°!±+°2±é° 2°±+´&+°&±,+´+±0+±,&±99±° 9°°9±#)±99± ± 99016462"462"'3632#"&=#"32654&ú((((Ð<þp2::52:x‡<«ü((R((Ãþnè<42:<5IŠöóF¿¢5²+´+²+´+°/°Ö´+´+± +01462"Ff�ff�%�ff�fFÿR‚²+´++² +³@ +²+´+°/´ ++²  +³@  +°/°Ö´+° Ö´+°° Ö´+°/´+±+±µ$901"#43232>53#"&462"®2³ +°43´+²:A222°±+´+°± +´ +±D+±/*°&9°0°$9± ±"299±±99±°9° ° 9±&² 999°-±"99°;³$27$901>532653#"'3"&54654'&'#"&532653654&5463"64=8r8ÿ²+´*+²+´ +²2+±33´6*+² +²+´>:2 +´>*+±22´.2 +°3´+°2°?/°!Ö° 2´(+°2°(±,+°2´+°2°±8+°/2±<é°32°<±+°2´+°±+´+±@+±,(´$$9°±99±>*±(+99°:³!',$9±.°$9±26±99° ± 99013#264&"462353#5#"&5467.264&"$462"462"Ñ<<ý±EfEEf�i–i2á<<â3i–i.&'-32#"&54>73264&#"‚=H<( h9dtƒU|„=VR–/iFVOK5`¶8Gd6Q9KUuKYw¾¾C„Y:ý¯NafQsFÛ#+ ²+´+²+´+' +´+*+´ ! +´ +°,/°Ö´+°±%+±)é°)±+´+±-+±%²#999°)´! $9°°9±+°9°'²999°!°9° ±99°°901>32#"&54>73264&#"462"‚=H<( h9dtƒU|„=VR–/iFVOK5`c((¶8Gd6Q9KUuKYw¾¾C„Y:ý¯NafQs/((FÿôÙ"*2<² +´9+²+± 33´2.  +´2*+°2´3  +°3´3+°2´&*  +´&*+°2´  +°3´+°2°=/°Ö´+°±+´+³6+´ +° /´6+°±<+± 22´+°!2°±,+°#2±0é°'2°0±+°2´+±>+± °9±6°9°<² 9999±.2± 699±°9°°90153#5##"54635#"'#"532532536462"462"'"3265Æ<<°OOŽ‹e,E Eƒ<Ž<Ž<*((((‚Jh((,6HŽþ¦�F^t®AeÁ>>謬¬¬þoJ((Þ((�K.-6eMFÁÙ q² +°3´ +°2²+°3´+°2°/°Ö´+² +³@ +°2°±+´ +²  +³@  +°2±+± ³$901%"&63"#"&63"Á•ÓÓ•~®®••ÓÓ•~®®<<Ö.Õ<²ü³<Ö.Õ<²ü³FÚÙ+ò#+´+² +´+´(# +´+´# +´+°,/°Ö° 2´+°& Ö´+°±*+´+° 2° Ö´+±-+±*· #($9±#°!9°³ %&$9°(±*99°±+99°±99°³ $9° ° 90173264&#"5632#"'%&#"327#"&46325O;SUllUS;BLi””i+'F;SUllUS;BLi””i+'ý& )H) ?MxM z…þÛ )H) ?MxM zFÿôÀÙt²+² +´+²+´ +°3´+°2°/° Ö´+°±+°2´+°2°±+´+±+±± 99±° 90133##"&546;#"3265š<ê<®r¬rrVŒŒ53#"'#"&53327&5462'654&"ì!( >N=Q< (!6-E9j9E-V2(†1+J`33`J+1"]”k{{k”]"OJzIaaIzFÿÐ�09â°/´*+°/°3´$+°2²$ +³@$ +°2°/´ *+°6/´++°:/°Ö´ +° ±(+´8+°8±3+´-+°-±+°2±é° 2³+´+±;+±( ±$99°8°*9°3²/&999°-°+9°±99±· $9±$°9°²&/1999° ³(-38$901462"462"2>53#"'#"&53327&5462'654&"-&&&&^!( >N=Q< (!6-E9j9E-V2(((Œ((º1+J`33`J+1"]”k{{k”]"OJzIaaIzF1Ù$•²+°3²+² 333´" +±33´"+±22°%/°Ö´ +° ±+°$2´+°2°±+°2´+°2°± +´ +±&+± °9± °9±"³$901326533253#"'##"'##"&53325hT"27&'#"5325332?3327#"&":!Dƒ<Žè¬¬¬§÷DA,=9X.+?|FëÙ,ײ+°3²+±33´) +´+´# +´#+²# +³@# +´ +° 3´+°2°-/°Ö´+°±+´+°±+°2´+±&22°±+° 2´,+°2±.+±°9°° 9°° 9±±)99±)°'9±#°9±°9°° 901!4&#"##"'#"53253253632#4&#"632­,4<,E Eƒ<Ž<Ž<#+4S>,4",4S 66  >>謬¬¬þhT> 66 WT>F´Ù#©²+²+±"33´ +° 3´*+°2´ +°3´+° 2°$/°Ö´+°±+´+³+±é°±+°"2´+°± +± é±%+±°9°°9±²999±°9°°901$462"$462"##"'#"532532536((((Z<,E Eƒ<Ž<Ž<Ú((((¾ >>謬¬¬F1Ù,5>À²(+°3´)+°02²+°3´9+°2´>( +±"-33´>+± 22°?/°Ö°(2´;+°;±6+´ +°#2° ´,+°,/° ±"+° 2´-+´+°-±2+´+°2±@+±,;±999±2±099±)°9±9>°901"&546323>3"32#".5##526733254&#'4&#"3dt\Q(:38 Vkf#,thAdt\Q(:38 Wkf#Fº²3@qOKõ3@qOKOqK]qE‰eL…P-3212bej)u+=HODCQQCDOH=+u)jebǵDEJ?T0-u'&'&-&'&'u-0T?JEDFpÙ-Ʋ+´ +²(+´"+´( +´+² +³@ +´( +´+´( +´+² +³@ +°./°Ö´+°2°±+°2´+°±+°2´+°+2±/+±³ $%$9°³ "($9± ²  999±"²$%+999012#"&'732654!#3!52654&#"'>32Ü2bej)u+=HODCQþâ<<QCDOH=+u)jebǵDEJ?T0-u'&'&xþð[þñy&'&'u-0T?JEDF¾Ù!u²+²!+± 33´! +°3´+°2°"/°!Ö´+°±+° 2´+° 2°±+´+±#+±°9±°9±!±99012>532>53#"'##"&5‚ -:- < -:- 53#"'3!53d+FTY< -/8˜›<›˜8/- 532>=3##"'#"&5$462"462"‚ -:- < -:- <<-D]22]TY &&&&.RD))DR..RD))DR.¼ý'/;yy¦ƒY((þ2&&F6Ù%-5Ö²+°3²+°3´51 +´5*+´"  +°3´"+°2² " +³@ % +° 2±) À/´-*+°6/°%Ö´+°±/+°&2±3é°*2³ 3/+´+°3±+°2´+°±+´+±7+±/± "99± @ (),-0145$9±3±99± "°9°-° 9013#2>532>=3##"'#"&5$462"462"ú<<ýˆ -:- < -:- <<-D]22]TY &&&&Ùý'.RD))DR..RD))DR.¼ý'/;yy¦ƒY((þ2&&F�Ùc²+°3²+°3´  +´+´  +´+°/°Ö´+°±+´+± 22² +³@ +° 2±+013#3#3!!!!F<<´<<‡þy‡þyÙý'Ùß<¢<Fÿ@�Ù%Ʋ+´++² +³@ +²+°3²+°3°/´ ++²  +³@  +´%" +´%+´! +´+°&/°Ö´+°±+´+±!22² +³@$ +°2³+´+°/´+°±+´+±'+±±99°± 9901"#43232>53#"&3#3#3!!!!øþ(!//!:RR:0þ磣<¡ý/B/32"&6264&"6264&"‚\€\\€"Y}Y:cc:Y}Y²<\€\\€^\€\\€N‚[[‚[þ!92~²:00:²~29Y™€\\€\è‚[[‚[Fÿòjå08@1²/+´4+²+°%3´+°?2´ / +°3´*+°2´/ +°;3´+°*2°A/°Ö°2´+± é°±+´2+°2±+´:+°:±6+´,+°,±>+´(+°2°(±é°/±B+±± 99° ± 99°±99°2±99°´/38$9°:°"9°6´4.7;@$9°,±%*99°±±99°(±99± ³,25$9°±1699°±7899°´"'($901$462"$462"264&"47.4632>32"&6264&"6264&" ((ý (( \€\\€"Y}Y:cc:Y}Y²<\€\\€^\€\\€†((((ä‚[[‚[þ!92~²:00:²~29Y™€\\€\è‚[[‚[FúÙ 1<G¸²+°3´+°:2²'+°+3´E+°2´B' +°3´+°72°H/° Ö°$2´+°=2°±+°B2´7+°2°7±2+° 2´+°.2±I+±²"'999°7±)99°2²+0999±² 999°B±"099°E²$).9990173265"4&#"2>#"'#"&547&546326324.#32634&#"‚"UoKj5<"UoKj5#"'#"&547&546326324.#32634&#"ú((ý0((>((((þö"UoKj5<"UoKj532%3&"3&#"•ò´@�<Š@´ò)R1<;1%:ýöºŒôºFEîþ…þ{}þƒîk/Q<==<#/E/9sssFÿìÈÙ7ß²,+´'+²+±33´5, +°3´5+²5 +³@7 +°2´, +´+°2°8/°7Ö´+°±+´+°±+´+°±/+°2´$+°2±9+±°9°°59°°9°±399°/°9°$² 1999±5'³$)*/$9°°19°± 399°° 9°° 901273>7&'#"5325332?3327#"&547&'#"'‚†<A :!Dƒ<Žè¬¬¬§÷DA,=9X.+?|Q"%5>ÖF Ù^²+² +´ +´+² +³@ +°/°Ö´ +° ±+´+±+± ³ $9± ±9901!#"&54733273Ñ%u8Ml\PpI4ŒF<�]Bpknm):GþFÿö4ã/ײ-+´+²+´+² +³@ +´ $- +´ +´(- +´(+°0/°Ö´+°±+´+² +³@ +°° Ö´+°/°%3´+°±+´++±1+±³ #$$9±±(-99± ²+999±$´ #*$9°(° 9°±9901264&"!5>54&#"#46323>32#"&¸^„^^„˜þÔ*i66J.75<\LKi;,Tä |Q[��[T|„^^„^ºS!K'46$;@!*;LY^%A.6 <Ok�¶�pFbÙ /5²²$+´+±22²+´0+± 22´5$ +° 3´+°2°6/°'Ö°-2´+°22°±+°02´+°±+´+° 2°±+° 2´ +°2±7+±°*9±°9±± '99°5±*99°0±-9901%#264&264&"32+"&5467.546"3r+°2°>±8+°2´+°2°±+° 2´+° 2±D+±,(±$/99°>°!9°8±99°°9°±99±/*±!99°5³-9=$901326533253#"'3253#"&'"&'#"&53325#"&53325#"'326hT"2/°2Ö´+°±/+°2´$+°2°$±+° 2´+°62°±8+´+±?+±2°)9°/±(499±$° 9±8²999± !±099°³26$901&#"327632#.=#"'#>=&5432654.#" I ½<+-ƒdÀB!!H) 1%$1<H."Àdƒÿ� I㸠+!E#þ£o!!GÂ=> ]Yv0MÂ;: !`Zs-!!o£õD!+ F¸Ù P² +´ +°2²+´+°2° /° Ö´+² +³@ +°2²  +³@ +°2± +01#5!#3!53á›r››þŽ›�<<ýŸ<<F Ù ²+´+²+±33´ +´+´ +° 3´+°2°/°Ö´+°±+´+°±+°2´+°2°±+´+±+±°9°° 9°° 9±° 9°° 9012533!#"'#"53255#LŽ<ôþÐ,E Eƒ<޾¸Ù¬¬þ”þ“ >>謬ýcõõFvÚ�² +´ +° 2²+´  +´+² +³@ +² +³@ +³ +± À/´+°/°Ö´+°2°±+´ +°2²  +³@ +² +³@ +° ±+°2´+±+01353#5#3!53##53§“<<“}þÊ}é<<”þÙCÄEõ<<BÄFFvÚ%Á²+´+°2²#+´# +´*+´# +´+² +³@ +² +³@ +´ # +´ *+³"#+±%# À/´ +°&/°"Ö´!+°$2°!±+´+°2² +³@ +°±+°2±é± 22°±+°2´+±'+01$462"462"'353#5#3!53##53Ä((((9“<<“}þÊ}é<<Â&&&&ïþÙCÄEõ<<BÄFFvÚ·²+´+°2²+´ +°3´+°2°³ +° 3´ +° 2³+± À/´+°/°Ö´+°2°±+´+°2°±+°2´+°2² +³@ +² +³@ +°± +° 2´ +±+01##53!353#5#3!535##533ké<<%“<<“}þÊ}“<<“XBÄFþÙCÄEõ<<óCÄEFŽ… ² +´ +°2°/°3´+² +³@ +² +³@ +°/°3´+°/°Ö´+² +³@ +² +³@ +°± +´+² +³@ +²  +³@ +°±+°2´+±+01!53#5#3#535##53#Ç‹<< EÄCëEÄC`EÄCè<<è%<<FŽ…%Ų+´+°2°/´*+°/°3´+² +³@ +² +³@ +°/´ *+°!/°$3´"+°&/°Ö´+² +³@$ +² +³@! +°±+´+² +³@ +² +³@ +°±+°2±é° 2°±+°2´+±'+01$462"462"!53#5#3#535##53#Ò((((þÙ‹<< EÄCëEÄC²&&&&5EÄCè<<è%<<F3Ù3²,+°03´+², +³@2 +²+°3´+² +³@ +°4/°1Ö°2´0+±!22°0± +±22´)+°2±5+°6ºíOÂÊ+ ° ° À±#ù°&ÀºòÁˆ+ °° À±$ù±#&°&À° ³ +°³  +°#³$#&+ºïÝÂ+ ³%#&+±#&°$³%$&+· #$%&........· #$%&........°@± 0±,99±,°/9°±)99°°901732654.5463253#5&#"#"&'#3‚@.Us0L\]L0„c9s<<_gKd0L\]L0’p=F,<<’TA,8$I6Sl2ÿmWK9)4&L8[s2F3ÙCU²<+°@3´+²$+°(3´.+´ <$ +´*+´<$ +´*+°D/°AÖ°!2´@+±122°@± +°2± é°2° ±+±'+22´9+°)2±E+°6ºíOÂÊ+ °°À±3ù°6ÀºòÁˆ+ °°À±4ù±36°6À°³+°³+°3³436+ºïÝÂ+ ³536+±36°4³546+·3456........·3456........°@± ³$.<$9±<°?9°°9° ±999°³*+BC$9°±!199°.°,9°$°'901462"462"32654.5463253#5&#"#"&'#3(((( @.Us0L\]L0„c9s<<_gKd0L\]L0’p=F,<<ú&&þÝ&& TA,8$I6Sl2ÿmWK9)4&L8[s2Fÿÿçâ/7§²+° 3²+´,+´  +´+´37  +´3*+°8/°Ö´+°±1+±5é°5±+°)2´+°"2±9+±°9°1°9±5·  %&,$9±² 999±37³&/%$9°,²)"999017>32'>54&">32'>54&#"462"‚1?oxATyQ*+"HVv|qMY K3ZOk5TyQ*+"HV;eÈkÛ&&{+0F"eN8H *6)4C)J;Oé C+?%eN8H *6)4Cp]1((FñüéD°/°3´ +° 2´ +³+´+°/±+±± 99±± 990146323>32#"&'##"FI3+C Î C+3II3+C Î C+3:fI5))5IfI5))5F+Ù ²+²+° /± +±±9901 3#篮¯ çæçkþíþê�þ“þ”mF1Ùb²+²+´  +°3´ *+°2°/° Ö± é° ±+±é±+± ³$9±°9° ³$9°°901462"$462"% 3#Ñ&&ýX((¯®¯ çæçZ&&&&.þíþê�þ“þ”mF Ù M²+²+² +´+´  +´+° /°Ö´ +° ±+±22´+± +01!5!!53'!Îþxˆ<<þ´}Ú‚ý'¹bþžF¾Ù)£²+²)+± 33´!") +°3´!+°2´&) +°3´+°2°*/°)Ö´+°±+± #22´+± 22² +³@ +² +³@! +°±+´+±++±°&9±°9±)±$99012>532>53#"'3##5#535#"&5‚ -:- < -:- 532>53#"'3#3##5#535#535#"&5‚ -:- < -:- 75#"'#"532532537#53265OOŽ%N.1,E Eƒ<Ž<Ž>謬¬¬þ¸;ö—";&"-6eMFÿR‡Ù9Dü²+´A+²+´++² +³@ +²*+±.233°/´ ++²  +³@  +´-(* +°$3´-+°02°E/°Ö°*2´+°+2°±.+´/+³>/.+´+°/´>+°/±+²!2:222´+±322°±7+´6+±F+±²(999±/>°&9°´ $A$9±(A·!45689:$9°-°"9°*°&901"#43232>53#"&#"54>75#"'#"532532537#53265®>謬¬¬þ¸;ö—";&"-6eMFÌÙ¨²+´+°2²+´+° 2´ +° 3´+°2² +³@ +°2² +³@ +° 2°/°Ö´+°2°±+°2´+° 2² +³@ +°2² +³@ +°2°±+° 2´+±+01733#5!#353#5#3!53#F<é}6}é<<é}þÊ}éÒ5}<<þí}þË}þí<<}Fÿô5Ù <þ²+´+²'+±+/33´8' +´8+´' +°13´+± 22´*%' +°!3´*+°-2°=/°'Ö´(+°(±++´,+³,++´+°/´+°,± +±/22´+°02°±;+´ +° ±+´5+±>+±(°%9±,°#9° ²!999± ;°9°°89±³5;$9±*%°9°'°#901"3265$"2654'##"54635#"'#"5325325332#"&54ÚJh((,6..ŽUOOŽ‹e,E Eƒ<Ž<Ž<³0<<30< K.-6eM*(*)*F^t®AeÁ>>謬¬¬þoI64GI7!FÆÙu²+´+°2² +±33´  +´ +°2°/° Ö´ +° ±+´+°±+°2´+² +³@ +² +³@ +±+0133!53!333&2°!±%+°B2´3+°-2°3±+°2±é° 2±G+±%!µ*+056;$9±#±!$99°±3899°'± %99°A±0;99°±?B99°±(-99°E±>C9901$462"462"462"462"264&"'462"&5467.6264&"r((((ý¸((((²EfEEf�i–i-'&.i–i.&'-=&5432&#"!&=#"',� Iù<+-ƒdÀB!!ýÕ."Àdƒ* I f_Z1%$1ãD!+ Áþ£o!!GÂ=> !`Zs-!!o£õ¸ +!Eþ?¾ŠŠF Ø,7Ô²+°/´-+°2²- +³@- +°3/´"+°/°3´+°&2°8/°Ö´+°±+°2´6+° 2°6±0+°$2´++°2°+±+°2´+³(+´ +° /´(+±9+±²-999±06°"9°+°.9° ±&99±"3±*99°³($901&#"654.#"353#5!6=&5432327632!&=#"' I ª� I6b<<ýÖ`Àdƒ<+-ƒdÀþÝ#<1%$1㸠+!ED!+ ýæCÄEÀ!!o£þþ£o!!ež–mmFeÙk² +²+´+´  +°3´+° 2² +³@ +°/°Ö°2´+° 2² +³@ +³@ +°± +´ +±+01%##535!5!3##Ï<ÕÕþ³‰–32#"&'##"q&&&&þ¸I3+C Î C+3II3+C Î C+3Ê((:((’fI5))5IfI5))5Fÿô<Ù(08B ²+´?+²+±"&33± À/´+´84 +´8*+´9 +°3´9+° 2´,0 +´,*+´! +°3´!+°$2°C/°Ö´+°±"+´#+³<#"+´+°/´<+°#±B+±&22´ +°'2° ±2+°)2±6é°-2°6± +´+²  +³@  +±D+±°9±#<°9°B²?999±48³<$9°9± 99±!°9°°9012#5264&+#"54635#"'#"532532536462"462"'"3265°:RR:!//!šOOŽ‹e,E Eƒ<Ž<Ž<*((((‚Jh((,6HRtR>謬¬¬þoJ((Þ((�K.-6eMFÄÙ+˜²)+´*+°&2²"+´!+°$2´)" +°3´*+°2´)" +°3´*+° 2°,/°Ö°2±é°2°±++´&+°&±+°2±é° 2±-+±³!")*$9±³#$'($901$462"462"462"462"7#5!#3!53d((((þÆ((((…›r››þŽ›Ð((.((ö((.((×<<ýŸ<<FîÙ5ë²+²+±",33´  +°3´*+°2³ +´3+´ +°03´+°'2°6/°Ö´+°± +± é° ±+°"2´3+°#2°3±+´5+°5±,+´-+° Ö±é±7+± °9° ±99±3±'099°5°(9±-±99°±99±3· $9±±29901$462"$462"5##"&532>532>53#"'3Ž((þ,((2À+FTY< -:- < -:- ?$9±±/9901%3#3!535#535##"&532>532>53#"'3462"$462"`‚‚‚þÀ‚‚‚À+FTY< -:- < -:- 532>53#"'3`‚þÀ‚À+FTY< -:- < -:- +°*/´+°B/°Ö´+°± +´,+°,±3+´+°±+´8+°8±'+´+°± +´ +±C+±,°9°3±.99°²*999°µ!156<@$9°8²)999°'± $99°°9±>± 99°@ #',.38:$901462653"'.53&654&";>54&"327&5462327&ƒ¯ú¯&)532>53#"'3$À+FTY< -:- < -:- 532>53#"'3`‚‚‚þÀ‚‚‚À+FTY< -:- < -:- Ù'/²+´+²++°3´'+°2´ + +´+´#/+ +°3´#+°2°0/°)Ö´!+°!±%+´-+³-%+´ +° /´+°-±+´ +³ +´+°/´+° ±+´+±1+± !³#&*/$9°%±+.99±-± 99°³$9°± 99± ±99°³$9±³ $9±'#·(),-$901$264&"462"264&"462"$264&"462"^;R;;Rw^„^^„º;R;;Rw^„^^„þ&;R;;Rw^„^^„ÉR;;R;¦„^^„^bR;;R;¦„^^„^ÉR;;R;¦„^^„^FÙ(0¿² +´,+²+´+´"#  +´"+´0  +°3´0+°2°1/°Ö°2´*+°2°*±.+°2´ +°2° ±&+´ +²& +³@&" +±2+±.*´ $9° ±99±#"±*-99°0¶ &).$9°°9°±9901264&""&5467.546232#5264&#264&"‚EfEEf´3i–i.&'-i–i2þ:RR:!//!þEfEEfS~JJ~Jþ²:PSrrS5XX5SrrSQ8RtR+°2´+°*2°±+°2±é° 2°±6+´0+²60 +³@62 +±B+±>:´"'($9°±,99±32±:=99°·059>$9°@±/699°°"9± ³%*$9°±9901$462"462"$264&""&5467.546232#5264&#264&"ë&&&&þzEfEEf´3i–i.&'-i–i2þ:RR:!//!þEfEEfÊ((:((‡~JJ~Jþ²:PSrrS5XX5SrrSQ8RtR#2::42:p0Fæ×)3;C²+´+°2°;/°B3´7*+°>2°/° 3´+°2² +³@ +° 2°(/´-+°2/´"+°D/°Ö´*+°*±/+´%+³/5+±9é°%±+°2´+°2² +³@ +² +³@ +°±=+±Aé°A± +´ +±E+±5*´"(-2$9±%/µ67:;$9±A=° 9±±99±-(°9°2±%99013253253#"'3!53#".54632#"'3254&#"462"$462"ˆ 37{<ö<·T'}þÊ}'T%<%<428;544U&&&&08³³³ï*þ®<<R*0(>#2::42:p0þ?((((Fæ×;EOû²+´+°2°!/°3´7+°2²7! +³@79 +°2/°3´I+°C2°N/°>3´,+° 2°P/°)Ö´F+°F±K+´/+°/±+°92´+°:2² +³@ +² +³@ +°±+´A+°A±<+´+±Q+±KF²2,4999°/±!799±A±99°<² 999±7!±99±I2±499°N³)/$901267#"&54632#"'3!53#".54632#"'325374#"326%3254&#"/73 5;824<&:%T'}þÊ}'T%:&<428;5 37{<ö44ýØ44 80 :24::2&;*0*þ®<<R*0*;&2::42: 08³³Í.00F\Ù;ز6+´7+² +´!+´ 6 +°3´+°.2´6 +°13´+°%2´6 +°3´+°)2°32#"&'##526=€/B//BýÓ/B//Bª L2:RR:2L UR:!/[ L2:RR:2L [R:!/ŽB//B//B//B/n0>RtR>0Â:RRtR>0Ã:R32#"&'##526=##526=¼/B//Bý—/B//Bª L2:RR:2L ½R:!// L2:RR:2L /R:!/^R:!/ŽB//B//B//B/n0>RtR>0Â:RRtR>0Ã:RIa53#"&3!2#5264&#!#×B9901%3#3!535#535#"'#"&5332653326=#"'#"&5332653326=#"'#"&533265332653–›››þŽ›››&AhhPS32#"&'##526=##526=##"&4632¼/B//Bý—/B//BÒ L2:RR:2L /R:!/^R:!/# L2:RR:2L ŽB//B//B//B/20>RtR>0Ã:RRtR>0F§Ù?GO².+°$3´/+°%2²+°3´+°2´7K. +°B3´7+°2´?4. +±)33´?+± 22´32#"&'##526=##526=##"&4632$264&"264&"ŠR:!/aR:!// L2:RR:2L /R:!/aR:!// L2:RR:2L p/B//Býˆ/B//B‹Â:RRtR>0Ã:RRtR>0B//B//B//B/FÙÙ;²+² +´+°/°Ö´+±+±°9±² 999014&#" 632'6�/!"¢áþþþõ¤(;23#"&5467&'!#26'3."´EfEEf³4 e†e 44 G&.i–i.&G (ìBZBäêAXA~JJ~Jª23#3#"&'#5367&'!#26'3."#26'3."F4 e†e 44 GF 44 e†e 44 FG (ìBZBäêAXAâêAXAãìBXBø75#"'#"5325325373265 ŠOOŽ%N.1,E Eƒ<Ž<Ž>謬¬¬þ¸;Ÿ;&"-6eMFøÙ|²+´+²+´+´ +´*+´ +´+´  +´ *+°/°Ö´+°2² +³@ +±22°±+°2±é° 2±+01$462"462"7!!!!!!((((ÜþŠvþŠvþN²²((j((¹þî=þî<ÙFÿô Ù1<ó²+´9+²&+±*.33´ & +°3´*+°2´)$& +° 3´)+°,2°=/°&Ö´'+°'± +± é° ±*+´++³6+*+´+°/´6+°+±<+±.22´+°/2°±+±é°2±>+± °$9±+6°"9°<² 9999±°19±9±699° ±299°$³01$9°)°9°&°"901462"$462"%#"54>75#"'#"5325325373265>((þ0((úŠOOŽ%N.1,E Eƒ<Ž<Ž>謬¬¬þ¸;Ÿ;&"-6eMF®Ù!ƒ²+´+²+´ +´ +´+°"/°Ö°2´+° 2°±+´+±#+±µ$9°°!9±±99°°9° ±99°°!901264&"&"32"&5467.54632‚EfEEf† fEE3Jji–i.&'-iKI3~JJ~J,#J~JtRSrrS5XX5Sr6FÿRÙ7ß²+´++² +³@ +²*+´+²5+´ +°/´ ++²  +³@  +´$5 +´$+°8/°,Ö°22´+°!2³,+´+°/´+°±+´'+³'+´+±9+±±99°µ$)*/5$9°² 7999±±',99°$°/9° ±299°5°7901"#43232>53#"&264&"&"32"&5467.54632®2² +³@ / +°±;é°;/°±1+´,+°,±+°22´(+²( +³@(. +°±7é°(± +´+±C+± ;±32"&547&#"632"&547&#"3!53ð<‘15"0"&JŠKA5"0"&AKªþpª† . *!//!>³1 *!//!<þ×<<FîÙ?²=+´>+°:2²+´#+´ = +°3´ *+±&22´(7= +´(+²7( +³71 +³=+°@/° Ö± é° ±?+´:+°%2²:? +³@:< +²?: +³@?= +°:±+´+³.+´3+°3/´.+³+±é±A+±3:±(799°³#15$9°.²!0999°°9±±99±7´ 9$9±#²%99901462"$462">32"&547&#"632"&547&#"3!53Ž((ýº((p<‘15"0"&JŠKA5"0"&AKªþpªf&&&&= . *!//!>³1 *!//!<þ×<<F•Ù7ã²1+´2+°.2²+´+´561 +°*3´5+°,2´'1 +´+³ 1+°8/°3Ö°2´.+±)22².3 +³@.0 +°+2²3. +³@31 +°52°.±+´ +³ +´#+°#/´+±9+±#.±'99°³!%$9°²  999° ° 9±'6± 99°°9± ² 99901>32"&547&#"632"&547&#"3#3!535#53á<‘15"0"&JŠKA5"0"&AK›››þŽ›››† . *!//!>³1 *!//!<±<<<<<<FßÙ7?G!²+´+°2²+´!+´  +°3´ +°2´CG +°>3´C*+±$:22´&5 +´&+²5& +³5/ +³+°H/°AÖ±Eé°E± +° 2´+±#22² +³@ +°2²  +³@  +° 2°±+´+³,+´1+°1/´,+³9+±=é±I+±1±&599°³!/3$9°,².999°9°9±=±:?99±5G´7932"&547&#"632"&547&#"$462"$462"›››þŽ›››<‘15"0"&JŠKA5"0"&AKb&&ý¹&&´<<<<<<Ò . *!//!>³1 *!//!<&&&&FÙ#,5½²+´+°2²+´$+´  +°3´*+°2´. +´+´%- +´%+°6/° Ö± é° ±+´+±$-22² +³@ +² +³@ +°±+±é°2°±1+°(2´!+°2±7+±-.°!9°%°9°$°901$462"$462"73!53322654.2654.k&&þÅ&&ªþpª<€l$*+#m`P381`P38ˆ((((½í<<�4F*) '*G5t~( º~( F�Ù%)«²$+´%+±!&22²+´(+° 2´ $ +´ +´ $ +´ +°*/°Ö´)+²) +³@$ +°)±&+´!+± 22²!& +³@!# +°!±+° 2´+°2±++±!°9±°9° °9°(°9012654.'2654.32#3!5!#¤`P381`P38å´€l$*+#mªýø"<ã~( º~( ýŸ�4F*) '*G5í<<aýŸF�Ù!59в4+´5+±1622²#+´8+°2´4# +°3´*+° 2´0 4# +´0+´4# +´+°:/°Ö±é°±"+´9+²"9 +³@"4 +°9±6+´1+±22²16 +³@13 +°1±+±é°*2°± +°2´-+°'2±;+± °-9°°*9°8°'9016462"2654.'2654.462"32#3!5!#Q&&6`P381`P38&&þð´€l$*+#mªýø"<ˆ((w~( º~( ýë((0�4F*) '*G5í<<aýŸF®Ù-5ݲ&+´+²+´5+´& +´*+´1& +´+´ & +´ *+°6/°(Ö°2´+°.2°±+°2±é° 2°±+°22´#+°2±7+±¶&+05$9±¶ %14$9±±99°±#(99°±99°1± +99°±/299° ±99°5±.399016462"462"264&"'462"&5467.6264&"Ê((((dEfEEf�i–i-'&.i–i.&'-54.#">32'>54.#"6!2'>54.#"‚<š:Í00+&D, }ÃXEË5Í00+&D, <×2™ÿÍ00+&D, }ÃW�ƒ';*((-=»%4ƒ';*((>/ØWƒ';*((-Fe:7?G²?+²)F333´;*+°B2°5/±-133´+±$22²5 +³@ +°'2°/°3´*+° 2°H/°Ö´+°2°±9+°2±=é°2³=9+´+°/´+°=±A+°2±Eé° 2³!EA+´ +° /´!+°E±*+°&2´)+±I+±9±599±@ 3:;>?$9±A=±199±! @  /BCFG$9±*E±$-99±5±+799°µ &/3$901462"$462"#3326533265332753#5#"'#"'#"'462"$462" ((((þ<<<98=8898=89&<<"]1-dc-1]Š((((ö((((þ&Û÷ eLLeeLLeêþ%ª ____‡((((F3<Ñ'°°'/°3´#*+°2³#'+´+°/´ +°/´*+°(/°!Ö±%é°%± +´+°±+±é°±+´ +° ±+±é±)+±³ $9±³ $9±· !$%$9±#µ $901264&"462"462"462"$462"&\~\\~˜{¸{{¸,&&.((ýN((_~\\~\÷¸{{¸{E&&ýß&&&&FNÙ|²+´+²+´+´  +´+´ +´+°/°Ö±22´ +° ± +´+±22±+± ³$9± ³$9015!5!264&"462"Fýøþ*{®{{®­˜Ø˜˜Ø�<<ýc<<Ä®{{®{þÂØ˜˜Ø˜F3Ù?L²=+°3´+²= +³@ +²+° 3´0+°@/°Ö°2´+±222°±+° 2´+° 2°±-+°2´,+°!2°,±+±$(22´:+°&2±A+°6ºíOÂÊ+ °°À±4ù°7ÀºòÁˆ+ °°À±5ù±47°7À°³+°³+°4³547+ºïÝÂ+ ³647+±47°5³657+·4567........·4567........°@±-³0=$9±=³?$9°0¶ $':$9°³"%&$9013#5&'#35332654.546325353#5&'#5&#"#"'Þ< << <.MQM0L\]L0b_FJ< <<<@L‰0L\]L0llO..2o!t¨PE,8$I6Wh7 2ÿmt¡&„)4&L8_oFLÙo²+²%hn333´++°[2³"+°k3´ ++°U2²8+°J3´1+°C2²18 +³@15 +°F2´=8 +´=+°p/°5Ö°'2´4+°4±.+´;+°;±G+°2´F+°F±@+´M+±q+±45°%9°.¶"+ 8$9°;²=999°G²999°F°n9°@@ >JRS[hk$9°M°e9±"³'c$9± ³ RS$9°¶+ab$9±1=².;M99901%4>7!63232>7#"&#"#"547>54&#"#4632!654&#"#463263232>7#"&#"#"ÝGv%þ§3$<"    &3f qE=C4*=NeZC4*=NeA(W"    &3f f¢@!Q2T   N 88 ›e�,;VJ!:myT):<';VJ!:myT"Ul>x   N 88FkÙ&.7@®²+°3´++°32²+°"3´<+°A/°Ö´)+°)±.+°!2´+°#2°±+°2´1+°?2°1±6+°:2´+°2±B+±.)°9±1°%9°6·8<$9°° 9±<+@ !$'/8$90143267#"&547'#"&54737&3265732654'654#"hu7Br%J" (u7Br&"Yu7B²<\(pv=ýV=QV=3¦\MXE0 < DK¦\MWG0! ¦\MnQqþ¨$B¼+±:6²3999°°09° °.9°°,9°°*9°°(9°#°&9±.8°9°µ$(,069$9°<´5:$90164623265332>533273#5#"'#"'#"'#"264&"F’Ð’/= = &<<"KNMK!"„ShVožoož’Ð’’hIh"*484**48þ ª 6666MbIžoožoFÊÙx² +°3´ +°2²+°3´+°2°/° Ö´+°2² +³@ +°2²  +³@ +°2±+± °9°@ $9°°9017'7%3!53#5!#%'7'9>4›4?þÅ}þÊ}}6};?4›4>l®lþôl°þ<<a<<þ°lþôlF€Ù7@IR[Ò²+°23´<+°N2²+°#3´E+°W2°\/° Ö°2´:+°H2°:±?+°C2´+°2°±5+°!2´L+°Z2°L±Q+°U2´0+°&2±]+±: °9°?·  AE$9°±99±L5±99°Q·#)2(7SW$9°0°.9±E<@ !&058AJS$901#"&547'567&5432>7&543267#"&54732654'654#"32654'654#"Ä'h(u7Br&H'(u7Br%%i(u7Br%J" (u7BrýV=QV=nV=QV=w' DK¦\MWG0 < BL¦\MXE0& BL¦\MXE0 < DK¦\MWG.5;m)A;ß5;m)A;ß5;m)A;ß5;m)A;F�ÙGPYbk(²+°B3´L+°^2²&+°33´U+°g2´ & +°3´ *+°2°l/° Ö± é° ±+°$2´J+°X2°J±O+°S2´+°)2°±E+°12´\+°j2°\±a+°e2´@+°62°@±+±é±m+± ± 99°J°"9°O·&+,QU$9°±99±\E±./99°a·39B8Gcg$9°@°>9°±;<99±L·>@EHZ$9° @  +,.87&543267#"&54732654'654#"32654'654#"0((üú((ê'h(u7Br&H'(u7Br%%i(u7Br%J" (u7BrýV=QV=nV=QV=X((&&:' DK¦\MWG0 < BL¦\MXE0& BL¦\MXE0 < DK¦\MWG.5;m)A;ß5;m)A;ß5;m)A;ß5;m)A;FzÙ9Ú² +´5+²5 +³@59 +²+°"3´+°*2² +³@ +°%2°:/°Ö´+°±+´+°±+´2+°2±+´.+°.±7+´ +° ±& +´%+±;+±±99°°9°2³ $9°² ,4999°.²"*5999°7° 9±5²999°° 9012654'"&=.547&#"#4632632#4.#"26=3=:=X\6EpE4D^'-!( 32#"&'$264&"264&"[ L2:RR:2L ì L2:RR:2L þ;/B//BÏ/B//BO0>RtR>00>RtR>0?B//B//B//B/F�\ù'/7º°/°3´*+° 2°/°$3´++°22°/´+°//°63´+°2°8/°Ö´)+°)±+±é°± +± é° ±5+´"+±9+±)²,999°±99± ±'99°5²$0999±+µ"),14$9±/µ!(-05$901$462"6462"'#"&46323>32#"&'$264&"264&"5&&»&&Ï L2:RR:2L ì L2:RR:2L þ;/B//BÏ/B//Bž&&&&Î0>RtR>00>RtR>0?B//B//B//B/F®\,'/7ذ/°$3´++°22°+° Ö´*+°/´+°//°63´+°2° Ö´*+°8/°Ö´)+°)± +°2± é°2° ±5+´"+±9+± )´,$9±5 ´$'0$9±± 99° ± 99±+µ"),14$9±/µ!(-05$9±±99°±9901462"462"'#"&46323>32#"&'$264&"264&"¡&&&&c L2:RR:2L ì L2:RR:2L þ;/B//BÏ/B//Bè((þþ((¡0>RtR>00>RtR>0?B//B//B//B/FËÙ H²+²+° /°Ö´+°± +´+± +± ³ $9±³ $901'%%XÖ þ¸=Hþí×f{þ¯¸þ¸G¶Hý¸á{RFËÙ�²+²+´ +´*+°2´  +´ *+°2°/°Ö´+°±+±22±é± 22°±+´+±+±³ $9±°9±µ$9° °901$462"462"'%%Y&&((Ö þ¸=Hþí׬((v((„{þ¯¸þ¸G¶Hý¸á{RFÿÿçâ/}²+° 3²+´,+´  +´+°0/°Ö´+°±+°)2´+°"2±1+±°9°· %&$9±² 999±,´"%/$9017>32'>54&">32'>54&#"‚1?oxATyQ*+"HVv|qMY K3ZOk5TyQ*+"HV;eÈk{+0F"eN8H *6)4C)J;Oé C+?%eN8H *6)4Cp]Fÿÿçâ/–²+° 3²!+´.+´ ! +´+°0/°Ö´+°±+´+°±+°+2´ +°$2±1+±°9°°9±¶ !'($9±´ $9±.¶$'$9017632'>54&">32'>54&#"¾<<<�‘TyQ*+"HVv|qMY K3ZOk5TyQ*+"HV;… 2þ¢3Šþ£ceN8H *6)4C)J;Oé C+?%eN8H *6)4CF…Ù +5ز +´1+²+´+²+°"3²+²+´  +±&,33´+± 22² +³@ +°$2°6/°Ö´+°2°± +°2´/+°2°/±4+°2´)+°2°)±%+°!2´$+±7+±/ ±99°4± 99°)± '99±1± )99±±99°±9901"3264&"&547##33&54632353#5#"3264&å3EE34EE4Ki3â<<á2iKLi2á<<â3iL3EE34EE�J~JJ~JýcrSP:�ZŽ8QSrrSQ8Žþ¦�:PSrNJ~JJ~JF…Ù)KU²*+´Q+²;+´ +²+²3B333´*+°2²8+²>+´ * +°3´*+²1D222´50* +±FL33´5+±%@22°V/°2Ö´1+°42°1± +°2± é°2° ±-+°82´O+°"2°O±T+°'2´I+°>2°I±+°2±é°2°±E+°A2´D+±W+±O-±/699°T±*;99°I±@G99±Q±OS99° ³-INT$9±±#'99° ±"(9901462"462"462"462""3264&"&547##33&54632353#5#"3264&¨((((ÿ&&&&û3EE34EE4Ki3â<<á2iKLi2á<<â3iL3EE34EEÖ&&Ý&&&&Ý&&ÞJ~JJ~JýcrSP:�ZŽ8QSrrSQ8Žþ¦�:PSrNJ~JJ~JF‹Ù-39?E²&+´>+²+´8+´)& +±@33´)+±":22²) +³@)+ +° 2²) +³@, +°2´D2& +´D+´ & +±.33´ +±422² +³@ +°2²  +³@ +°2°F/°+Ö°2´*+² 222°*±(+² 222´;+²/4@222°;±:+².5A222´#+²222°#±!+²222´ +°2±G+±:;@ %&12CD$9±2D±99017367&'##33>2353#5#353#5#"&'##3%#26'3."#26'3."ƒ4 FG 5<<5 e†e 4<<4 GF 4<<4 e†e 4<<\ìBZBäêAXAâêAXAãìBXBâ[/2ZddH]]HdþüdZ2/[dþüdH^^Hd²3::o188þA199m2::FÛÙ=CIOUh²6+´N+²+´H+´96 +±,P33´9+±2J22²9 +³@9; +°02²9 +³@< +°.2´6 +°3´*+° 2³T+´B+´6 +±'>33´+±!D22² +³@ +°%2² +³@ +°#2°V/°;Ö°2´:+²222°:±8+²222´K+²?DP222³K8+±é°/±é°K±J+²>EQ222´3+²!(,222³ 3J+± é°3±1+²"&-222´0+°$2±W+±8±99±JK@ *56ABST$9± 3± 99±BT@  *$901462"$462"367&'##533>2353#5#353#5#"&'##53%#26'3."#26'3."Ž((Š((þ3\ FG ]<<] e†e \<<\ GF \<<\ e†e \<<„ìBZBäêAXAâêAXAãìBXBZ&&&&[[/2ZPðdH]]HdðPZ2/[PðdH^^HdðÆ3::o188þA199m2::FÙ K²+²+°3° /° Ö´ +° ±+´+°±+´+± +±² 99901#3#3#A<¿<<þ‚<<Yþ§Y€þ¨Xþ¨FÿRÙ!£²+´++² +³@ +²+²+°3°/´ ++²  +³@  +°"/°!Ö´ +° Ö´+° ±+´+°±+´+° Ö´+±#+± ±99±± 99±² 99901"#43232>53#"&#3#3#®5332653#"'#&'#"&5332653ô<-&<2?<55332653#"'#&'#"&5332653((ý§&&<-&<2?<5 +²%,E222´ 6 +°3´ *+°2°J/°>Ö´?+°?±+°2±é° 2°±E+´F+°F±6+° 2´5+°!2°5±%+´&+°&±+°2±é°2°±,+´-+±K+±±;B99±FE°99±&%°29±±)099±B;°89°±299901462"$462"462"$462"3>5332653#"'#&'#"&5332653((ý§&& ((ý§&&<-&<2?<52°O±+´+°±+°2´+°2² +³@ +°2² +³@ +°2°±"+´#+°#±C+°22±Gé°62°G±)+´*+±S+±OK± 99±°9±#"°/9±GC±-&99± °9°A±/9901%3!535&'#"&5332653#5!#>5332653#"'6462"$462"462"$462"0›þŽ›]wSZ<532#!12bej)u+=HODCQQCDOH=+u)jeb2YO=DEJ?T0-u'&'&-&'&'u-0T?JED<<FÏÙA ²+´%+²8+´2+² +´*+³> +´,+´ +´*+³+´++´? +´?+°?³?+´*+°B/°+Ö´+°>2°±(+°/2´+°;2²( +³@A +°±+°2±é° 2°±+±é±C+±+³%28$9±%³"#($9±+³$9±?³$9±,>³ $9±2 ³/45;$901$462"462"462"%2#"&'732654&#2654&#"'>32#!Ý&&&&u&&þ¥2bej)u+=HODCQQCDOH=+u)jeb2Ø((((d((=DEJ?T0-u'&'&-&'&'u-0T?JED<<F�Ù=ð²+´+²0+´*+²+°93´*+³6+´$+´  +´*+°;2³ +´#+´7 +´7+°>/°#Ö´+°62°± +°'2´+°32°± +°2± é°2° ±<+°82´;+±?+±#³*0$9±³ $9±#³ $9±$6³$9±*³',-3$901462"462"'2#"&'732654&#2654&#"'>32#!53#5Ë&&&&·2bej)u+=HODCQQCDOH=+u)jeb2 <<Ö&&Ý&&�=DEJ?T0-u'&'&-&'&'u-0T?JED<Žþ¦�F‹Ù-»²+´ +² +´+´ +´+´' +´'+²' +³@, +²' +³@') +´& +´+°./°Ö´+°&2°±+°2´+°#2°±,+°(2´++±/+±³  $9± ²  999±²#999012#"&'732654&#2654&#"'>32#!3#12bej)u+=HODCQQCDOH=+u)jeb2<<O=DEJ?T0-u'&'&-&'&'u-0T?JED<ý¥F¾Ù%•²+´+°2² +±33´ +°#3´+°2°&/° Ö´ +° ±+°2´+°2² +³@ +² +³@ +°±+´ +±'+± °9±°#9± ±%9901%3!53#"&532>532>53#"' ›þŽ›+FTY< -:- < -:- 532>53#"'á&&þÅ&&À›þŽ›+FTY< -:- < -:- 532>53#"'YþR6&&þÅ&&À¹þR¹+FTY< -:- < -:- 532>53#"'3# ›þŽ›œœ+FTY< -:- < -:- 532>53#"'353#5È<<œ+FTY< -:- < -:- 532>53#"'!!#"&535#35#'35335‚ -:- < -:- 32#".543264&#"J9:!Dƒ<Žè¬¬¬§÷‹:&IWuKYw7[8W´%)afQtF¹X! °/´+°/´+°/± +0175!5!Fýî¹<<,<<FÃ|²+°3°/±+013# #ßI›EzyE|þ„,þÔFº`,²+° 3°/° 3´+°2°/±+±°901753'773#''7F†C4CC4C††C4CC4C’?B$9°9³<=@A$901%254&#""&54632#"'#5'#5&#"327&5462#"&546325353j‚-(,/B/_A@Q]aml<<>d(Œ´L€"(*!//!5QO7Qk>>d(Œ´LFæÙ_².+°3´+±!22²J+´+´5D.J +±OQ33´5+°^2°`/°;Ö´@+°@±2+°F2´+°±#+´(+°(±+´+°L2°±+´ +³X +´S+°S/´X+±a+±@;°B9°2±5D99±#³.I$9°(²!J999±S±O^99°³QV$9°X°9° ° 9±.°,9°5· %(2$9°D²3\999°µ;=FMUX$901327&5462#"&/4&"327&5462#"&/5#".54623275462327&5462#"d�N&"0"51ˆ+,{®{�N&"0"51ˆ+,?35"0"&2@˜Ø˜@2&"0"53 B!//!* *‚W{{Wþ©B!//!* *Ë" *!//!)tl˜˜lt)!//!* F¾Ù&3¸²+°3²&+± 33²$+²/3333´+° 2°4/°Ö°&2´ +°2° ±#+´'+°'±*+°2´++°2°+±.+´+°±+° 2´+°2±5+±'#±99±+*±199±.± 99±$±'99±&°19013265332653>53#"'#"&53&5>53&'‚553#"'>謬¬¬þU, �$FÂÙ0ʲ+°3² +° 3± À/±33´"+± /22²" +³@" +´) +´)+°1/°Ö´+°±&+´+°±+´++°+±+° 2´+° 2°±+° 2´+±2+±&±"99°°(9°²$-999°+°)9±"°9°²&+99901%654&"333#5##5#"'#"&53327&5462;`2(à<<<<<<"N>>N=Q< (!6-E9j9E-6"ÕJzIaaIzºý­Sý'JJJ33`J+1"]”k{{k”]"F Ù{²+´+²+´+´ +´*+´ +´*+´  +´ *+° /°Ö´+°±+±22±é± 22°±+´+±!+01$462"462"462"!!!&&&&&&þ&Úþbb¦&&…&&—&&þÃÙ<ýŸaFŠÙ Z² +°3²+°3³ +°/°Ö´ +° ±+´+±+± ° 9°±99± ± 99°°901573#%3#'5NÚÚ<<þÒ<<Ú”€Fý'E”ý'FF@é2²0+´1+°-2²+´+°2´*0 +´+³0+³0+°3/°Ö±2+°2´-+±22²-2 +³@-/ +²2- +³@20 +°-±+´ +³! +´&+°&/´!+±4+°6°&±.ɱ.ɰ6º½Â:+ °°À°.°@±&-±*99°³$($9°!²#999° °9±*1±!#99°°9±² 999°°901'%632"&547&#"632"&547&#"3!53ŒþÊ‚ƒQ5"0"&JŠKA5"0"&AKªþpª›T:hG7 *!//!>oD1 *!//!<þ×<<F·Ù’²+´+°2²+´+°2´  +´ +´ +´+°/°Ö´+°2² +³@ +°2² +³@ +°2°±+´ +² +³@ +±+± ± 9901#5!#!2#5264&#!3!53á›r›:RR:!//!þò›þŽ›�<<ôRtR/±"33´=+±!22°T/°;Ö´A+°A±+´%+±8=22³I%+±Eé°E/°L3±Ié°P2°%±+´ +±!22²  +³@ +°2³- +±)é°)/°03±-é°42° ± +°2±é°2±U+±E³GJOR$9±)³+.36$9±>Cµ:;$901%"&463"3462"462""&463"3462"462""&463"3462"462"R|°°|c��c†((((†|°°|c��c†((((†|°°|c��c†((((A¯ú¯<�Æ�§&&#((ý�¯ú¯<�Æ�§&&#((ý�¯ú¯<�Æ�§&&#((FÿôºÙª² +´+²+±33´  +´+´  +°3´+°2° /°Ö´+°±+´+°± +°2´+°2°±+´+±!+±°9°°9° °9±± 99±° 9°°901!267"&=#"'#"53253253!~þ˜h˜h<‰Î‰,E Eƒ<Ž<Ž<¤h€€h†žž†ñ>>謬¬¬þ{F™Ù <²+²+´+°2° /° Ö´+± +± °9±± 9901!!##PþöSþö´´<··Ùý'�þðþF Ù%Ÿ²+´+°2² +´+°2´  +°3´ +°2°&/°Ö´+°2² +³@ +² +³@ +°±$+´+°±+´ +±'+±$°9°°9°°9± °9°°901#32>%!#"&'#"'3!5332>5d~( þŒ°4F*) '*'ªþpª<( �`P38m<€l$*+#þ{<<a`P381FêÙ'ò+²+±!33´ +´*+´&# +´&+´  +´ *+´ +°3´+°2°(/°Ö´+°±+´+°±+°!2´'+°"2²' +³@'% +°'±+°2±é° 2±)+±°9°°9°°9±°9°°901$462"462"#"'#"532532533#n((((°,E Eƒ<Ž<Ž<ÔÔ„((((þ˜ >>謬¬¬þ]<úF…å7̲$+´#+²2+´+´$2 +´+´ $2 +´+°8/°/Ö´+°±'+°+2´+°2°±+´4+°#2°4± +´+±9+±'²1999°°)9°µ2$9± 4³ $9±±'99° ³)$9±´,/47$9014&"2264&#"'632#"'3"&547&=.5462"/B//Bò7//7‹@AkV�IWa?“T1+J`##0>RtR>08B//B/þ·=:=X\æ**^TCDQ^'-!( 3232>7#"&#"#"5.5462Q&&&&þöRtRRtXH"    &3f Iav¤vaIÚ((((™tRRtRý­    N 88H qJSuuSJq F¼æ$µ²+°/´+³+´+°/´+°/´"+°%/° Ö´+°±+´+°2°± +°2´+°±+°2´+° 2±&+±±"99±° 9±°9°° 9±³ $9±² 99901264&"%2#524#524##"&4632ÔtRRtRRè>>¬<¬¬¬¬ qJRvvRJq’RtRRtXƒE Eqn¨Ž<ŽIav¤vaF:Ù‚² +°3²+°3´   +°3´ +°2² +³@ +³ +°/° Ö´+°± +°2´ +±22° ±+°2´+±+± °9±°901333####3'3"< << <Ü<ÜÜ àslý'1þÏ1¨€F�þÙF Ùu²+°3²+´ +´+³+°/°Ö´+°2°±+´ +² +³@ +±+±°9°±99±± 99±°9013'>325654&#"#F<ÜÜ)u4Mlw_šI4DŽ<Ù€F�þc3232632"&5467#RtRRtXH"&   &3f Iau¦uaIŽtRRtRT  N 88þ¸ qJRvvRJq F®œ/»²!+´+²)+°3´-!) +´-+°/°3´ *+°2°0/°)Ö±#22´*+°2± é°*±/+°2´+±22°±é°/±1+±*)± 99° ² &999°· !,-$9°/²999°±99±±#99°-±&9901462"$462"264&"7"&5467.53265N((þÜ(( EfEEfç-'&.i–i.&'-54'#"&546326©/B//BòŠA@‹7//,0>RtR>0##`J+1T“?aWI�VzB//B/þ\X=:=æ* L2:RR:2L *IC@L=Q< (!-'^QDCT^*F1Ø5=µ²*+°3°"/´ +°8/°3´4+°2°>/°2Ö´<+°<±/+°62´%+°2°%±+° 2´+°2°±+´+±?+±<2°*9°/²)-4999±%° 9±³$9±"*³,-$9° ±099°8³26$901654.#"3276327#.=#"'#'76=&5432&#"Ð� Iù<+-ƒdÀhÞàH) 1%$1<HàÞhÀdƒ* I ãD!+ Áþ£o!!}Ó€3� ]Yv0MÂ;:�3€Ó}!!o£õ¸ +!EFÿþêå!œ² +´+² +³@ +²+´!+´  +°3´+°"/°Ö´+°± +´+°±+´+° Ö´+±#+± ²!999±´  $9°° 9±!±9901%26=3"&=.5462264&",!@!75#".=3;.54>;#"{10_XPWOAQVT) !!ARX$*,: w9B-=é°>±+´(<+°(±F+°02±/é°/±$+±é° 2°±+±é°´&+°/±H+±>±8A99°(°9°F°E9°/°+9±°9±A0°19°²999±&<²+999014.54>3!!!32=3#5#".5#"#5#"&'332>7u+3+-,Qþ¯/=ŠWO:k$9% µ6**T) !!AQX$*,: ´6&@&$þûBÕDG«aþ³JU'!1Ü%&+9þO8G6™þ�-+2*Aÿ8Ñè@º²*+±/33²2+±;é²+°63±é² +³@ +° /´ ++°A/°5Ö±8é°8±+´"<+°"±@+°*2±)é°)±+±é° 2°±+±é±B+±8±2;99°"°9°@°?9°)°%9±°9±;*°+9±° 9° ²%999014.54>3!632#4&'"##"#5#"&'332>7u+3+-,>]dOX49*-X¶6**T) !!AQX$*,: ´6&@&$þãGhaþ·I?>"H3þl%&+9þO8G6™þ�-+2*Aÿ8ÌÌ4<À²+° 3±#é² +´C+²8+±33±*é°2°/´+°;/±2é°=/°Ö°-2±!é´5+°!±+±(922±é°32² +³@ +°±+±é°±+± é° ´ 1+° /±>+±!°9±° 9±#°9°*± 99±;8°-9013273#5#"&5#3#".=332>=#"&54>;%;5#"œ10_XPWOAQ\V®=_6I%Xn*-’eX%O;êþ–C=’’€ þˆ0%‡FýôS]F4Dý¼8 E;C.¸¸~"H3ÂO;,-À2hAÿ8§èFز0+°3²+°83±é°A2² +³@$ +² +±<33±"é°&/´ ++°G/°;Ö±>é°>±+´(<+°(±F+°02±/é°/±$+±#é° 2°#± +±é°±+±é°´&+°/±H+±>±8A99°(°9°F°E9°/°+9±°9±0°19°"°9±& ²+999014.54>;3253#5#".5'###"#5#"&'332>7u+3+-,ïï+@ŠXO9l1D$–Xž6**T) !!AQX$*,: ´6&@&$Üþ¾BF«"ýóJV%D7-àý}l%&+9þO8G6™þ�-+2*ÿÿ:“‘X&øÛÿ5”2- F²+´7+² +³@ +°2° /° Ö´ +° ±+´+±+± °901273#"&'3–J GRC@OG*ÛRIPPI%-ÿÿ8•WX'Þÿ� %X^² +±é±22² +³@ +±22°/°Ö±é±+°6ºÂ$ï—+ °.°.°± ù°± ù³....°@01%>53+533"4fW,?L:ꥋZNT<vþŠ3R0! L :@X3² +°3°/° Ö± é° ±+±é±+± ³$901##=47'3>7538¹Á}þrAZW¸Àz�FVW¿“{±p"zG��žx±þ�)qA––&X:²+²+°3±é°/°Ö±é² +³@ +² +³@ +± +01#!5!ÆWý·ó ýô LL?4X :² +°3² +± é°/° Ö° 2±é°±+±é±+± ° 901#.'!53:{lWAZþ WXamþ†tQ: Lý¨wþ‰9ÿÿþX%²+±é²+±é°/°Ö± é±+014&#!5!2#!5!265§|Tþb¤x©¨yþ\žWysBWL…Yœ[ƒLVC%íT²+² +±é² +³@ +°/° ֱ鰱+±é°± +±é±+± ±99± °901!#467>=!53!öW$C;6 ýaWŸ>MWS`12!/ Há•™1P+7.H?5X 0²+± é² +±é°/°Ö± é° ±+±é±+012!4&#!‹˜ý Ÿo]þ„Xƒ[þ†Xýô+7^þ@%éX ,²+² +± é° /°Ö±é² +³@ +± +01#.'!5î{mWAZþ>Xamþ†tQ: L#uXA²+°3± é² +°3±é°/° Ö±é²  +³@  +°±+±é±+014&#!#525#5!2#[Pþ�ux–<ýoŒWtESþ¿gdLzFL}aþ†2ÅÚD°/´7+°2² +³@ +°/°Ö´+² +³@ +² +³@ +± +01!5353þÏF FFÏÏÿÿ<ÐÇ&èÿÿ<ÐÇ&éÿÿ<ÐÇ'ãÔÿ�&èÿÿ<ÐÇ&é&ãÔÿ�ÿÿ:ÿ}FX&Þïÿÿ:ÿFX&ßïÿÿ:FX'ãÿôÿmïÿÿ:6X&ðãõÿÿ±X&ñãµÿÿ&X&òãÿÿ?:X&óã1ÿÿ!åX&ôPãÿAÿÿ<X&õãÿ=ÿÿ=:X&÷ã5ÿÿ×X&øFãÿ'@ÿÿ&ÿ8ÚX&ùãùÿÿ9X&úãùÿÿ%!í&ûãýHÿÿ0:X&ýãCÿÿ3FX&ÿãÿuÿÿ=9X&ã/ÿÿ9ÿ8 X&ãMEÿÿ?X&ãZFÿÿ3X&ãžÀÿÿ>ÿ8&X&ã)ÿÿ%ïX&ãÿÿ<ÐX'ãÔÿžÿÿ#{X& ã‘ÿÿ>•Û'àÿBôÿÿ:6Û&æ0ðÿÿ9Û&úæÿÿ?Û&æ8HFí-²+°/°Ö± é° ± +±é±+± ±9901#53>=3>Q;”fþhWå):W¿D‚'ÒD©•þ»Z9–ÿÿ.ÿþË®/2!²Â/%:ÏÂ-7TÿÁq #0°/±é°$/°Ö´  +±%+± @   "$9014&#"34632354>#3 r]NVYD-:/8**H**�HH!þP°¯íGS_\;A2)1''4,&-$'<þÀSu°¯þQ o¨°8°/° 3´+° 2² +³@ +°2² +³@ +°2°/±+017#3353!!#5#3&$uâ$ tmþ“&âoA}…}/�� ÿf€  •²+°/°3´+² 222² +³@ +°2² +³@ +°2°!/° Ö´+²  +³@  +³@  +°±+´+² +³@ +³@ +±"+± °9°²999±°901!#5##3&'5!3#'353€þëi Lkg%QpÀæpB-'d#www m~%E!fþ�lC)þ�pkÿþ 1²+° /°Ö´+² +³@ +² +³@ +± +015!# F(ê ? þ�ÿþæHE²+°/°Ö±22´+± 22² +³@ +± 22² +³@ +±22±+015&'535&'5333#5'5e#Be Eæ]`;`]!e¤#8¢!;W¢7¤X¡¡\ÿf\ '2°° /±33´-+´"($2² - +³@ +±22²- +³@- +±$/22³@- +°3/°Ö´-+²- +³@ +³@ +°-±(+´"+°"±+´+² +³@ +³@ +±4+±-° 9°(² 999±"²99901!#5##5##3&'5%3#&'353'353\þòlaV!K1: g&P d—¾P'j f¼pB,& b#ww[w3D m~'C\þ‚~O aþ�pllC)þ�pjÿe ƒB² +´ +² +³@  +°/´+² +³@ +°/´+°/±+01#3!!!!!‹OA~þ‚"L`~þ‚#Il~#YC("T b&'Ip%{|*d²+°/´)+° /°3´+°2²  +³@ +°2² +³@ +°2°&/´#+²#& +³@# +°+/±,+± °'901##5##33533!#3!!{Ñ   !yJ  dyZÑý‰þ£e%%h]þ£�|]1  uH  kq fÊp|t-…�'=²+°/°Ö°2´+° 2² +³@ +° 2² +³@ +°2±+01.'5!3#&'53w   fq g(S!tœ  !]¼[þ©WQ!ÿeSž"j°/°3´+°2² +³@ +°2² +³@ +°2³@ +°#/°Ö°2´ +°!2²  +³@ +°2² +³@ +°2±$+01673#&'!!567!#3!5'5!È&F aþð&Nþôbþú&E[u b/'Nþôiþç&EV&N eækXæ´ x²+²+´  +°3´+°2² +³@ +°2²  +³@  +°2°!/°Ö° 2´ +°2² +³@  +³@  +² +³@ +³@ +±"+0135##335&'5!3673#&'#Ë=k 6=X ;8)B\8øu 8nN6p)Lþóaúÿdò­:|°;/°Ö±22´+± 22°³ +´ +°/±33´ +± 22°±7+±#22´6+±+022²67 +³@63 +±(-22²76 +³@79 +±!&22±<+0175&'535&'5333#5&'5!5&'535&'5333#5'5e#Be Eæ]`]`]! Eq'>e!Dæ]`[`]!e{¤#8¢!;V¢ R¤X   <¤&5¢":W¢ R¤X  \Ý d²+²+´  +´+´ +´+² +³@ +² +³@ +´ +´+°/±+± ° 9°° 901%!#3!!!#3!!Ýþ¬#H\TüFWhþ˜[ ahþ˜õ#S cU &`g&ÿí?÷1²+°/°Ö´+² +³@ +² +³@ +±+015!#'7"%7"''4™ i'þ¾þð/å¾;`þñÙ aþ€€d¾<_þð¿¿þð- R²+± 33°/°Ö´+² +³@ +°± +´ +° ±+´+² +³@ +±+01#&'#'#&'5o(O&i%pp%#T eþ�Q bþ�llþ�"GÿþÔ f²+² +° 3´ +´+² +³@ +°/°Ö´+² +³@ +² +³@ +±+±²999° ±9901#'5!#3!!Ô 8&u ýM K€þ€ê 1þ�kþö R&Ô>+²+°/´+°/±+±±99°°9017%37"''4¬9þþ)-—¼¾6eþïê@ªòXŒ$>¾þñ/ Jñ>° /±33´  +±22´  +³ +±33´+±22°/±+01%##5##533533533##4¤ ;£0*X£X¤Z¡¡ ;p Dd22å^`_`^!!C O…J° /´+²  +³@  +°/´+°/´+² +³@ +°/±+±±9901&'3!#3!!¸UX©'.—Ýþ54#%%hÌþ4�‚Ë7éN¤ÿP“%¡4)|r-…†€0°/´ +°/°3´ +°2° /±!+±± 99017&'5!.'5!.'5!–g/Wˆ•$"!W†þì4W‰Ïd%(% �% (& Ë3 ((‚ Cý0°/´+°/°Ö´+± +±°9±°9017%3¬Vþþ)-—õéòÿXŒ$t|0²+° /´+°/´+² +³@ +°/±+013!!!#$hËþ5�ƒÊþ6% &|t-…†.%!B² +°3°/° Ö´ +² +³@ +° ±+´+² +³@ +±+01#'#&'5o%oq(S!hþƒ}kkþƒ}S  ¨2°/´+² +³@ +°2² +³@ +°2°/±+01%73#&'!#3k _þn&E `§tþôj&N hÿepK'0°(/°Ö°2´ +°2°±+°#2´ +° 2±)+01#3%#3#3#3#3µl(& €»j '& �Ù9P(& ~â[/(& âf#(&|p'W‡™l*Wˆþ;\W‡\W@X †2j-X …ÿd—Å%.:^²+³ +´ +²+²+²:+´7 +°;/±<+±³+.$9°7@  !%&)*$9°:²#99901%'.'5!>7'67'67&'7"&#!567i�>Ü þ)2#W …þD.ƒô‘ 0ÇtRü”ó‰,¶-"þ© ¶Ð1  (&}Ãó›,› é þwTñÂ.'%v› ²+°/±+01''7237'"#'677›{z|W£UWX \— X|„}z|W^!¢TX— ^V}   ,°/´+² +³@ +² +³@ +° /± +017#3!!! `€þ€&  h'&ÿd !f²+°/´+°/´+° /´+² +³@ +°"/°Ö´+² +³@ +² +³@ +±#+±² 999017#3!!!!!#5&'53‹N^~þ‚X d~þ‚#Il~OW"$@åaUg'Xj'&Iq%5Mmm$6ÿff8"{°/´+± 22² +³@ +² +³@ +°#/° Ö´"+² " +³@  +³@  +°"±+´+°±+´+² +³@ +±$+±" °901!#3.'5%&''foý£X!k %   RŸer)x&P iþ?X%r— %   ýÕ—b iþi˜s'Lþhÿdò{:A”°B/°!Ö±&+22´ +±3822° ³ +´$ +°$/±).33´ +±0522° ±+± 22´+±22² +³@ +±22² +³@ +± 22±C+±!$±<=99± °;9°°A901%#5'535&'535&'5333#5&'535&'535&'5333'5!ò]!ee'>e!Dæ]`[`þô]! Ee#Be Eæ]`]`—X‡cX  \¤&5¢":W¢ R¤X   <¤#8¢!;W¢ R¤O‰(&|,ÿþ9 1²+° /°Ö´+² +³@ +² +³@ +± +01#&'5!9S'Y êDþtŒC#†²+± 33°/°/´+² +³@ +° /°Ö´+² +³@ +°2°± +´ +° ±+´+² +³@ +°2±!+±±99±²99901#&'#'#&'57#3%!o(O&i%pp%#T! Z‘ýo eþ�Q bþ�llþ�"G  a(c,,™² +°3°/°3´&+°+2²& +³@" +°2²& +³@&# +°(2°-/° Ö´ +² +³@ +°"2° ±+´+² +³@ +±.+± ±&99°´')$9°±+99± ±9901#'#&'5%##5##33533o%oq(S!`Ñ !y ! ! byZÑhþƒ}kkþƒ}S Žu    iq f`, •²+°3°/´+°/´+² +³@ +² +³@ +°!/°Ö´ +² +³@ +°2° ± +´+² +³@ +±"+± ±99±°9°°9°¶ $901&'5%#'##3!!%3ÂS!Y%or'U bþ�þòVþþ(.—}S Sþƒ}kkþƒ i'þßêòÿUŽ$ÿþ—|e²+°3°/´+°/´ +²  +³@ +°/°Ö´+² +³@ +² +³@ +±+±±99° ±99015!#73!!!# ^(¯$mËþ5�ƒÊþ6L#&êSþ�ýx-…†.N&ÿþ< I²+°/´+°/°Ö´+² +³@ +² +³@ +±+±°9°°9017%3'5!#¬Vþþ)-—^'õéòÿXŒ$õQþ�  �² +°3°/´+² +³@ +² +³@ +°° Ö´+°!/° Ö´ +² +³@ +° ±+´+² +³@ +±"+± °9±°901#'#&'5%3#33'co%pq'VœUþþ),–[dûû)iþƒ}kkþƒ}T þíéòÿX‹%„l)) Ø,&.‚°/´+² +³@ +°/´+°' Ö´,+°/°3´ +°%2² +³@ +²  +³@ " +°2°//±0+±°(9°'²999±,°)9±°*901##5#!!!!#333533%3ØÒR!z& W€þ€lZ€þ€&E`z\ÒüÝVþþ'/—”R#u%  _&uc'&N iq hþËêóÿQ“$„b²+°3°/°3´+° 2°/°Ö´+² +³@ +°±+´+² +³@ +±+±±99°°901%'#%3737&'5%#'#ÙUë—Vþþ)-—ë),–xT!n%or'óéëéòÿXŒâX‹%ŠT fþƒ}kkþƒ˜,"ž² +°3°!/´+²! +³@! +²! +³@ +°/´+² +³@ +² +³@ +°#/° Ö´ +² +³@ +°2° ±+´+² +³@ +±$+± ±99±µ $901#'#&'57#3!!#33'o%oq(S! `€þ€!ÆZúú&hþƒ}kkþƒ}S  h' ýûa)%^!–²+²+´ +´+°° Ö°3´+°2² +³@ +² +³@ +°"/°Ö°2´+°2² +³@ +³@ +² +³@ +³@ +±#+±°9±³$901'#5##335&'5!373ÈUó8'=k 6=X ;8ó),–éäúøu 8nN6péX‹% C,'†²+°/´ +² +³@ +°/´+°° Ö´&+²& +³@& +°°# Ö´ +°/´+² +³@ +°(/±)+± °$9°&° 9±±9901!!!!!#3!#3373#/Bþ‚;.W€þ€l'C€þ€&E d~ûàZPï*,––VíR&”:9_&u'J'&N kþM aë[‰$êß&õ|",º²+²'333° /´+°/´+² +³@ +°-/°(Ö´'+²'( +³@'$ +²(' +³@(+ +°'±+´+² +³@ +² +³@! +°±+´+² +³@ +² +³@ +±.+±¶ &)$9°³$+$90133#7##5!#&#5'5'#&'5$láá�ƒßßP!&ç ;4(V9l'p$L$'Q|w.…†.S%í=/þ�VUføøk‡%Hþ‚~%DÁ r²+± 33°/´+² +³@ +² +³@ +° /°Ö´+² +³@ +°± +´ +° ±+´+² +³@ +±!+01#&'#'#&'5#33' O(O&i%pp%#TZdúú! %Gþ�Q bþ�llþ�"Gþfl( .{² +°3²+´+² +³@ +² +³@ +°/° Ö´ +² +³@ +°2° ±+´+² +³@ +±+± ±99± ±9901#'#&'57#3!!o%oq(S! `€þ€"hþƒ}kkþƒ}S  h'!ÿgÆ…'–² +°3° Ö´%+²% +³@ +²+´+² +³@ +´" +´"+°(/° Ö´ +² +³@ +° ±+´+² +³@ +±)+±¶ $9°±9901#'#&'5#33#3#3Æo&oq'VþÛN_úúZ_úú#Ilúiþƒ}kkþƒ}T ýØN)h'\h&&Iq%ÿBò†#+Ʋ+²+´+² +³@ +² +³@ +°/´!+²! +³@ +²! +³@! +´  +´+²  +³@ +° °) Ö´$+°,/°Ö´+² +³@ +² +³@ +±-+±²%999± $°&9±)³$9°²'999015!#3#'#'33##33%3å c'þH c  l<^úúRkúýáVþþ(.—êWþ�j&o(ég'ýÉT#}%:éòÿUŽ%#ÿþ™ z²+°3° /´+°/°Ö´+² +³@ +² +³@ +°±+´+² +³@ +² +³@ +±+±± 99± ° 9°° 9015!#%3%5!#Œ ^'þëVþý%1–ý¡^'êSþ�ŒéòÿL—%÷Qþ�.!.ز +°3²&+´)+²)& +³@)" +²&) +³@&# +´ # +´+² +³@ +² +³@ +³ #+´ # +´+°//° Ö´ +² +³@ +±"22° ±+´+² +³@ +±0+± µ&)$9°´ $9± ±99± °9±)±9901#/#'&'57!!#7#'73#'53!!p%oq(R"l~þ‚V ¦ bôô%ï a~þ‚!, xjííllííSÑL<� GH¶F" ¶€ p²+°/´+² +³@ +°2°/´ +²  +³@ +°/°Ö´+² +³@ +² +³@ +±+±±99° ±99015!#&%3!!!#¨_'&ý $hËþ5�ƒÊþ6L!&ðTþ�%×r-„†/N#ÿþì Q²+°/°3´+° 2°/°Ö´+² +³@ +² +³@ +±+±±99°°901%'#-373%5!#UVè9Vþþ(.9è%1—ý ^(ñéééóþUŽãL—%ùSþ�¯|L²+°/´+°/´+°/´ +²  +³@  +°/±+±°9±±9901%33#7##Vþþ%1–ýT$iáá�ƒßß50&4êóÿN–$Hs.…†.73€!P°/´+² +³@! +°/°3´+° 2°/´+² +³@ +°"/±#+±±9901'#%373337##zVè9Vþþ'/9è++–,%jàà�ƒÞÞ . &1êêêòÿQ“äZŠ#Or/„†0 . Y %¬°/´+² +³@ +³@ +±!22² +³@ +°&/°Ö°2´+² +³@ +² +³@ +°±"+´!+²!" +³@! +²"! +³@"$ +°!±+´+² +³@ +² +³@ +±'+±± #990175337&'5!#5#%5!#&#5'5# ^ö#T $L%ö¾ o(O@l&p¡ê ef"G%Hþ‚ðúeþ�QPføøkÿ϶L(ƒ²'+° /´ +² +³@  +°/´+°/´+² +³@ +°)/°$Ö´#+²#$ +³@# +²$# +³@$& +±*+±±99°±"%99±'² &999013'7##%3%#'5!0$háá� yßß !  &ºVþþ(.ºþá]'u Lr/… |/ !  $éòÿUŽÖOþ�kÿCé‡#,¢²)+´,+²,) +³@,% +²), +³@)& +° /´+²  +³@ # +² +³@ +°/°3´+°2² +³@ +² +³@ +°° Ö´+²  +³@ +°-/±.+±² 999±),°901%#5#/'73533'33###'33#„”VöJ#I cJö(.”]úú)ý>jùùQ ^ùùvvéß&IkìUŽs e()f}%R%[ég(³ i²+°/°3´+° 2² +³@ +² +³@ +°/°Ö´+² +³@ +² +³@ +±+±°9°²99901%#5#%3533'#'5!N¹Vþþ(.¹]úú&þ~]'u }véòÿUŽr e(&#Oþ�kÿAÏ…$-¼²+²!+´$+²$! +³@$ +²!$ +³@! +°*/´'+²*' +³@*- +²'* +³@'% +°/°3´+° 2² +³@ +³@ +°2² +³@ +°2°./°Ö°2´+² +³@ +² +³@ +±/+±'°9±$²99901#5'#375'5!3#'#'33#33##]'ö!J Zöt ‰f  l:_úú‰iúúQîOþá Uawk”l&p(éh'þk}%T#0&Ų+°3²+´ +°3´+°2² +³@ +² +³@" +°'/°Ö´ +² +³@ +° ±+°2´&+°2²& +³@&# +²& +³@ +°&± +´+² +³@ +³@ +±(+± ±99±&° 9±° 9±±%9901#7#5'#5&'57'##335&'5! äíp%oq(R"þtM]tX bM(®jííllííS®W fZNXZÿgÀ…!‚² +° Ö´+² +³@ +²+´ +² +³@ +´ +´+°"/° Ö´+² +³@ +²  +³@  +±#+± ³!$9°±9901#33#3#35!#�N_úúZ_úú#Ilú* c'"N)h'\h&&Iq% Wþ�G8>°/°3´ +± 22° ´+² +³@ +²  +³@  +°/±+017#37373#'#/# `’ð*,9è'/––Vè9Vð’!µ hé[‰äQ“#êêêá ÿŠ  "…²+°/´+² +³@ +°/´+² +³@ +² +³@ +°"/´ +² " +³@  +°#/°Ö± 22´+² +³@ +±$+±°9± "°9017#333'5!#5#'%3'# `÷%nÞu ^'ÜO!&÷8 yÜÞC h(vkSþQ$,0 | ÿAÄ…#¢²+²+´+² +³@ +² +³@ +°/´!+²! +³@ +²! +³@! +°/´ +²  +³@ +°$/°Ö´+² +³@ +² +³@ +±%+±!³$9± ³$901#'5!7#'#'33##33]'u ‰f  l;_úúNjúîOþ�k”l'p(éh'ýÉN)}%ÿþû &/�².+°3°/°3´+°$2² +³@ +°2² +³@ +°!2°0/°.Ö´-+²-. +³@-* +².- +³@.' +°-±+°%2´+² +³@ +² +³@ +±1+±-°9015!#5##5##335335%5!#î ^'Ñ% !z  !\z ^Ñü  ^(êSþÍ$   t   frj�kSþ�àF²+°/°3´+° 2°/´+² +³@ +°/±+±°9°± 9901%'#-373%#3!!wVè9Vþþ(.9è%1—þ `€þ€!ñéééóþUŽãL—%â h' û †² +°3°/´+² +³@ +°/´+² +³@ +°!/° Ö´ +² +³@ +° ±+´+² +³@ +°2±"+± ³$9± ±9901#5'#5&'53!!!!#p%oq(R"_þ� 7l~þ‚V xjííllííS…G (L<ÿǪB R° /´ +² +³@  +°/°3´+°2°/´+² +³@ +°!/±"+±²999013#7##%3%3>$láá� yßßO!&’Vþþ)-’ÖUþþ),–Bu.… |/Q$.éòÿXŒ&éòÿX‹%ÿþ»}#,4‘²+±*33°/° 3´ +° 2°-/´2+°#/°3´+°2²# +³@ +°2°5/°+Ö´*+²*+ +³@*' +²+* +³@+$ +±6+±°.9±2-°/9°#³ ),$9°±$'9901333##'##333#%5!#%3ô$AÙÙ‚ƒÙÚc&J% &$hL̓JLõ ^'Vþý%1–}C-…‡.e(�%!|t´† #Sþ�ŒéòÿL—%ÿù&Ò,1:@KT]cز+± 33² +´1+± À/°3´_+°<2²_ +³@ +´. +´+´Nb +°>3´N+°42±V  À/°B3´Q+°62°Y/°F3´%+°*2²%Y +³@%" +°'2³@% +°d/°Ö²5=C222´+² +³@ +±e+±_²;^999±QN°-9±Y ³ADU$9015!#5##5##7##33533533&7#35#35#35&'#35#'35#35# ^'§TLV!Ú %   &%nÝ]I]_üøƒÚÝÏ^¥¦Jl§¥76l¦{!- Þ^JKJlKI!- lLJ7°Rý¸M<Q=º &   |w¸DKDþÍ… †F�5¶L�(DLu# ¹F�5·Lœ# þ‘L�( ÿùÒ',5;FMS[cû²+± 33²+´,+± À/°3´U+°72²U +³@ +´) +´+´IX +°93´I+°/2´a\ +´a+±O À/°=3´L+°12°R/°A3´ +°%2² R +³@  +°"2³@  +°d/°9Ö²0>222´+²9 +³@ +±e+±°9±U²6T]999°)°Z9±a\´(4G-^$9±R´¶¶ k�uy€*Hty€,Fÿþ«ô_²+°/´+² +³@ +° 2² +³@ +° 2°/°Ö´+² +³@ +² +³@ +±+±°9015!#673#&'!#3Ñ _'Û&EYþnO[êTþ�&Nþó gY bKÿêøj =²+±é° /°Ö±é°±+±é±!+±´ $9°±9901732654'7#".547&'767¥Q/0I]SIâ89{R;Z2Ä!D;J(¿:AF7y€CvîH‘]Zu)AI%—Ÿ!4>/B9ÿìIX>Hë²"+±Fé°/°?3±é°(2°2/°.3´++°2°I/°5Ö°62±é³%5+±Cé°±+°2±é°2±J+°6º>ðn+ °6.°9À±= ù°;Àº>—ò¥+ °.° À±ù°Àº=xî,+ ° ° À±ù° Àº?]öý+ °.°À±+ ù°À± °³  +° ³ +±°³ +± °³+º?\öù+ °+³++°³+°+³,++º>ð=+ °6³769+³869+°=³<=;+²769 Š Š#9°89²<=;9²,+ Š Š#9°9²9@ +,9 678;<=.....................@ +,9 78;<=...................°@±C²2:999±³"0F$9±F±%99°°9±2°09013267&54>73326?3&'#"&5463237#"'#"&54>73#"326”8  _= ^) ?*$`n>O‚� %$1"*<6J _fH*96®P0D 81V ÚþòRNkPE@>KF",,SP/=?4þç#%7IÿìºX 2Ú²+±é°$/´7+°/´)7+³+)+´+°3/°&ֱ鰱+´!&+°!±+± é±4+°6º?Tö¾+ °°/À±1 ù°0À°³./+²./ Š Š#9´./01.....´./01.....°@±&°$9°°)9°!±#+99± °9±$± 99±µ!&$9013254&#"3267#"&54?#"&54632>?3Ÿ)-&,$R&>)OQ/>rIM+>(.! Z4< ))!±%5`�?OX0 hZ$x 6FG6=@2 ·þÊZ7íXJ²+°3°/°Ö´ +±+°6º?Sö¶+ °°À± ù°À±..±..°@013#’[X^Xý¨7ÿì²Xβ +° 3²+±é°/°Ö±é°±+´1+±+°6º?Rö±+ ° .° À± ù° Àº?EöX+ °°À±ù°À°³+° ³ +³ +² Š Š#9° 9²9@  .........@  ...........°@±°901"&54?'#3673327ñ@_i?BZXZ .kZ5MPQUU(xxFYþ?X7?6XþÊhZæ þÊ6ÿö�b,ײ+°3² +±é°/±'é°!/±é°-/°Ö±*é° Ö±é°*±+´ &+±.+°6º??ö7+ °.°À±ù°$À³$+³%$+²$ Š Š#9°%9³$%....µ$%......°@±°9°°!9±*³ $9±² *999°'°9°!°9°°901%32>7#"&54654#"#>32&#"632�-$ L�@d <)`AVU6S(-6H.- & ,W ¤%/GH>þÏRP-C'þ÷ nT$,KA:<F6FOÿèOp D²+±é²+±é°/° ֱ鰱 +±é±+± ±99±± 9901"32654&4632#"&cFsT=FsTþ¯«qaƒ«qaƒ¢`R€¢`R€þò“Õ¦z“Õ¦0b=²+²+±é° Ö±é°/±+±° 9°°9°° 9°°901##"&#"'>32327Ì]¬$2XB .P 2v5Xý¨õ F#0ÿìöl'a²+±"é²+±é°(/° ֱ鰱+±é°±%+±é±)+±³ $9°²"999±"µ $901#"&547>54&#"'63232654&COdiSejJ;#"*;2KZI^~9:.69RrdSOqtWK\7),)/€J<;~>E'=E'=32326?26“-¸KQbGY"(%1  > % =%&#-¾CMTPQX[N2t¹Z  þz#/<?ÿìX)3F²+±1é°/°*3± é°2°/´++°4/° Ö°!2±é°)2³. +±é°/±.é±5+°6º>—ò¥+ °!.°#À±)ù°'Àº=xî,+ °"°$À±(ù°&Àº?Zöè+ ° .°À± ù°À³+° ³ +°³+±"$°!³"!#+°"³#"$+±)'°(³'(&+±(&°)³()'+² Š Š#9°9² 9@$!"#&'()..............@  $"#&'(.............°@±1± 99° ° 90132?3&'#"&5463237#"&54>73#"326É+&>%^) ?*$`n>O‚� 0L1Y _’fH*96´"4)ÑþòRNkPE@>KL(WL0D 81þã#%7:ÿì’l*4´²"+°!3²+±é°0/±*é°5/°'Ö±3é°3±+± é°. ֱ鰰 Ö±é° ±+±é±6+°6º?Qö«+ °".°#À±! ù° À± #..³ !"#....°@±3'°%9°.°9°°9±±99±0¶'+$90123267#"&54654&'#767&5463>54#"ÇEQ „$)-XYWKT,/# _!1I:71lH7.HQA &d‚ ’¤TI-+2W¾Èm>7N-G¿ 1)9ÿìTX).² +±é°/´"++°*/°Ö°2± é°2° ±+±é±++°6º>—ò¥+ °.°À±ù°Àº=xî,+ °°À±ù°Àº?Oö¡+ °°&À±( ù°'À±°³+°³+±°³+±°³+º? ôõ+ °³%&+²%& Š Š#9@ %&'(.............@ %&'(...........°@± °9°²"999±°9°"±9901%3267#"&547"&54>73326?3L-&,$R&>)OQ$dD _= Z4 %5`�?OX0 hZ*n)TO0D 81V,µþÊZ=ÿì!l=GOa²/+°%3±Dé°2°;/°M3±é° 2°P/°1Ö´A1+°A±8+±é°±(+±é°±K+±é±Q+°6º>dñ»+ °G°6À±. ù°Àº=Ûï’+ °*° À±ù°OÀ°.³ .+°*³+* +°.³-.+°G³5G6+³>G6+°³HO+²>G6 Š Š#9°59²-.9° 9²+* 9²HO9@  *+-56>GHO.............@  *+-56>GHO.............°@±A1°9°8²/999°°,9±(° 9°K³ %$9°°9±;D@ (1K$901'632?6323267#"&54?#"546?654&#"3267>54#"—FO40X9N==x‚l4[¢*(þÁ/ )!2P2íX"Ù²+±33°/±é° /±é² +³@ +±22°#/°Ö±é³"+±é°/±"é±$+°6º?6õù+ °.°.°±ù°±ùº??ö2+ °³+³ +³+³+² Š Š#9°9° 9°9³ ....· ........°@±"°9°²999013>327#"&5473326?3#7&#"2 #5#X-092D_5$ZX_)1*"5NG-4‘ Q:9FA.I!ý¨�CPt5ÿñ°g's²+°3²+±é²+±%é°(/°Ö±é° Ö±é±)+°6º?õj+ °.° À±ù°À± ..³ ....°@±³ $9013267#"&54654.#"#>32Ø+$$)2R %A*A^(!<?_F+D+OTÂ@£9$7i‚2B]7)[Z3¨#"›þŽ�&FC(^9ÿì©Xš²+±é°/±é² +³@ +° 2°/°Ö±é°±+±é±+°6º?XöÝ+ ° .° À± ù°À³ +²  Š Š#9² ...´ .....°@±±99±²99901732654&#"#3632#"&5�P,D+2)_,Z0-E%dYBqžX>K8V1·-GH!c…ZAFÿìl,Õ²#+±é²+± é² +°-/°%ֱ鰱+± é° °! Ö± é° /±!é±.+°6ºHÁ�+ °(°*À± ù°À³+³+°(³)(*+²)(* Š Š#9²9°9¶*().......¶*().......°@±%°9° ³ #$9±µ !%$9014#"'>3232>7# 54>7>¾u_ ]%H2ul\S > 1Q=$\ ¤þÿ+FB$SN¾UG(+R_BX +6 # Â*@$ =9ÿöX1²!+° 3²+± é°/±é°°. Ö´$++².$ +³@. +±)22°2/°'Ö±,é°,±+±é° Ö± é°±+´&+±3+°6º?Pö¤+ °!.°.°!± ù°± ùº?Sö¶+ ° ³ +³ +°!³"!+³1!+²"! Š Š#9°19² 9°9³"1....· !"1........°@±,'°)9°³$*$9±± 99± ²999°$°901363232>7#"&54654#"##"&54733267&["%,W -$ L�@d <)^<#52D ^=XæF6F%/GH>þÏRP-Cþê‰*TO$29)V*OÿìçX0y²+±é°-/±é²- +³@( +°2°1/°Ö±é° ֱ鰱+±+é±2+±°9±³'/$9°+² (-999±-³ $9°±/9901732>767#"&5467&5733254./3#"'©J7" N&QM_u"*BZS: _ZD3C¶0@',THvX3M'M�Zs6%"!)Œ-c7Iÿì b$/t² +±é°,/±é°0/° Ö±é° Ö±.é°±)+±é°±+±é±1+±.°9°)±!99°³ $9°±99±,µ %$90173267#"&54>7&54632&'7>54&#"¢C9@UT…WZ! #H;6�/,B:9F)²/=„l�žpP(D!2V:HŒ,.. 8Ç "+.+ÿìÎl%_²+±é² +±é²+°&/°#Ö± é° ±+±é±'+± #°9°´  $9°±99± ´#$9012.#"#"'73254.546# 8"83#.CB.}P‚TB2K‰.AB.Il 2'#?25L.K[_9>U847K(9fNÿì¯XN² +±é°/°Ö±é±+°6º?Tö¾+ °°À± ù°À³....³....°@0173267#"&5473§-&,$R&>)OQ/Z4 %5`�?OX0 hZ$xþÊZ8ÿñÊl [²+±é²+±é´  +±é°/°Ö±é°±+±é± +±´$9± °9°² 999014.#"32$4632!'267#"l,"/D6.SþïlTBT,þþRK +>[a'49;87A¼u&ShOþµUPO0ÿö&l0¼²'+°&3²+±é²-+±é´ " +± é°1/°*ֱ鰱 +± é° Ö±é° ±+´&+±2+°6º? ôë+ °'.°(À±&ù°%À±%(..³%&'(....°@±± "99± ±99±"² 999° ±99°-²09990163263232>7#"&54654#"#654&#"0+mOQ)",W -$ L�@d <# -Z4-& úrhZF6F%/GH>þÏRP-Cÿ6Z(%5#3Âl ´²+± 33²+±é´  +± é°!/°Ö±é°±+±é±"+°6º?Tö¾+ ° .°À± ù°À° ³ +³ +²  Š Š#9°9³ ....µ ......°@±±99°² 999±² 99901632#7&"#>327654&#"Š+mOQ/Z$T"_ #5#O* -& úrhZ$xþò“1Pt5NG-(MZ(%5#D´lµ²+° 3²+±é´ +±é² +³@ +° 2°/°Ö±é°±+´&+±+°6º?XöÝ+ °.° .°± ù° ± ùº?|÷â+ °³ +² Š Š#9°.´ .....°@±±99±²99901&#"32673#7#".54632hK,D+2)_,Z0-E%dYBqºX>K8VþÏ·-GH!c…ZANÿì©X'›²+° 3±é°2°(/°Ö±é°±!+±é±)+°6º?Tö¾+ °°À± ù°Àº?Nöš+ °#°$À±& ù°%À·#$%&........·#$%&........°@±!°9°°9±°901%3267#"'#"&54733267473¡-&,$R&>)U)+QOQ/Z4-&# /Z4 %5`�?OX0 <3232>7#"&54654#"#7>54&#"#654&#"0+mOQ)"9# L,W -$ L�@d <#Z!# -Z4-& úrhZ-F6F%/GH>þÏRP-C $Ȫ "!ÿ6Z(%5#ÿÿrÿèrpÒ#ÿÿ7ÿìÚlâ Jÿì l'ƒ²+±é²+±$é´ $ +´ +°(/°Ö± é°! Ö±é° ±+´1+±)+± !°9±µ $$9°°'9± ²999° °9°²!'99901.#"3"3267#"&5467&54632” +4+343@OE=9WQ6`;T€6"2wO?mÜ%'27].5?–U+c`@g_@a-GAJG41ÿöËX%β+°3² +±é°/± é°/±33±é°&/°Ö±#é° Ö±é°#±+´ &+±'+°6º?6õû+ °.°.°±ù°±ùº?6õþ+ °³+³+² Š Š#9°9±..µ......°@±#³ $9±² #999° °901%32>7#"&54654#"##7!!632Í-$ L�@d <*`R•üþù&,W ¤%/GH>þÏRP-C'þ÷RR‹F6FÿÿnÿêjÌ#Aÿñøl!,„²+±é²(+± é°-/°Ö±é³ +±+é°±%+±é°±+±é±.+± °9±+°9°%´ $9±°9°° 9±(µ "$9° ° 901"&54>54&4632#"'3267>54&#"Yz$A-DSF&S>39[Tz‡,fV%—ò¥+ °.°À±"ù° Àº=xî,+ °.°À±ù°!Àº?^÷+ °.°À± ù° À°³+° ³ +³ +°³+±°³+°³+±" °!³ !+±!°"³!" +² Š Š#9°9² 9°9@   !".............@  !..............°@±±990132?3#726?#"&54>73“5&2^)  '?S:[O +<9[ _´!5&ÔþòK[X.% P`^F#VM0D 81.ÿè p7²+±é²+±é²+°/°Ö±é±+±³  $901632#"&'732654&#"qRdaƒ«q=eS,JFsT=<4X¦z“ÕF=1Z¢`R€<Oÿè,p8²+±é²+±é°/°Ö±é±+±°9°³  $901%#"&54632&#"327éRdaƒ«q=eS,JFsT=<4@X¦z“ÕF=1Z¢`R€<NÿìéXµ²+± é²  +³@  +²222°/°Ö± é±+°6º?Tö¾+ °.°À± ù°Àº>óôt+ °.°À± ù°À°³+³+² Š Š#9°9µ......@ ..........°@± °901"&547332>73=žQ/Z4-& 7&'7'6_ I0BcJ W['N6("7fˆ A/3,=ˆp$dL¥E�†y[7,AXN@,  0Lo‡zw~`�Hd97šP§° /´+° Ö´+² +³@ +°2°/°Ö´+±+°6ºÂïÿ+ ° .°À±ù°ÀºÂuîo+ °³+°³ +² Š Š#9²...µ ......°@± ° 9°°901%'>54'#"54632'&'32š©J >‹BcqÃ%=Jg!Tæ<�5|N0$¿µ[DV<d'7ÿµ�R3²+°/°Ö´+°± +´ +±+± ±9901'6?&CD�5ª5-TÃ6¢ˆþ»S Y�^fþT‚ yj7йP *° /´+°/°Ö´+±+± ± 99014632&'#"%&'327”$¡5 (TG~.&E,*6pÃþÖJ 4PKW4IQ7 mP>32&''67''67&'7>Ž #‘~4G8' %=”;wX%'°*IvgT•àþÿIC�C-(:°k„R)#ºD4œ7³RI° /´+° /°Ö´+°±+´+±!+±³ $9°° 9± ° 901.547#"&54732>?M-9/=1CC':L#9 (H-"1,RTzW_‡\2*(/#2=*+ ,+PU7U“P<² +´+°/´+°/±+±±99° ± 99°±9901267#"."'>32Â*Z1cn!A'%1N .(Š'3%0‹o<É‘>I>7ÿþP#+²+°3°,/±-+01#"&/7632.'&'67'>\ T‹$�233 BÀ< Š4  p%?¦'^è3¢Z'©(_yü~Œ öüþò5!"( 1Ë?$Öek_ªh'" ¬7ÿ=ao/b°#/´+°/´+°0/°&Ö´-+°-±+´+±1+±-µ#)*$9°°9±³&-$9°±9901%&''7#52672>54'7#"&547¶ ,'82/&6 !.+Î4kSB$0 4KVi4GTΉ|Ä5î6tb7<+$,þ‚]�£•08#2D1†‘�qEZM«ƒ]-Uþ— 5;7 Ke s²+´ +²+°!/°Ö´+°±+´+°±+´+±"+±°9°± 99°°9°² 999°°9± ±9901"&54632654'7'67&''7&0Qr6“ftb 3S7,.Eq2nlN  fŠh$#-(¨><\=ýö7ÿ8½©0°/´ +°/°Ö´+±+±°9± °901"&54732>767'67¬2CF%5?,G; 3HÛ+1»7IÔ.)>@(/' -!!Øý×V;Ô™%7ÿ»¡ f°/´+°° Ö´+°!/°Ö´ +° ±+´+³+´ +±"+± ´$9±°9°°9017"&54>732632'>54#"Ÿ-;Xmf 5›‰d?F%%#3lB4)¢ºÕ= bþÑá 0#^"( F 7ÿ8ð¦°/°Ö´+±+±°901.547376?'>'´3JN'?CJ3?:B74é‰.3_‡<=&3©0&NP&@8´š #“ý…àSÕL^7ÿ8JÅS²+° /° 3´+°2°/°Ö´+°±+´+±+±² 999°°9± °9012'54#"#"54326æ,8é*Ü-&BŒ1$A&ˆ7-ÊþÞ"¸.7$EŠM7ÿä dB~²+²0+°C/±D+°6º=pî+ °0.°.À±9ù°;Àº7.'#"54>7#"5467'632>’S.‘”@_– 9#5%"84 ~0" %" $4=>({>3 (")»$˜�'/:¥_W_(aW\…$$1C)# *"� 'G$‹%ƒ ,# 7R?P Z²+´+² +²+°/´+°/° Ö´ +° ±+´+±+± ²999±± 99012#"&543254&#"€pOJ<5M6-O."-PD57#".'&'76--%5 ^ (/<"l/Ï'5 0LPKK19WDQ [JþÓ/g 0bd7ÿ8 ¥#-6i°/´3+°&/´+°. Ö´+°7/°Ö´1+°1±$+´+±8+±$1¶*5$9±3°9°.µ$(*$9012.'#"&54>32>4#"%"327&Ì$³V\P+*1>ViE#+(@=RX/M07& &þæ !bíýèA7]C¥/!=þÝtÀg";V3�7º'-$ !_Jš -% P� >ÔKYu 'x7ÿåP6²+´+°/´+°/°Ö´+±+±± 99014632&#"7"327&7–)06Z3/Ap:P{¯ i>A38~"°53#"&54747.0;6$0@,Ly6W37©X>:X.kH" /KnNB7ÿ8]0°/´+°/°Ö´+±+±°9±°901'654#"'7632]1-(_DÇ3 ,Q•r.C54=GþR<® 2Ç7#ê¬ �°/° /°Ö´ +± +°6°&±.ɱ.ɰ6º?õ+ °°À°°À°³+³+°³+³+² Š Š#9°9²9°9µ......µ......°@017>77%)!5!+&7WËM HþýØ[7�ŽPF²+°3´+°2° Ö´+°/°Ö´+±+±°9±±99012'67654'"#"'732<.$  v YXP+ 0 8 6 7©…P8²²$+°)3´/+°*2²'+´,+²2+°9/±:+°6º RÀÖ+ °°À±ù°À°³+³+°³+³+² Š Š#9°9²9°9·........·........°@±,$°1901>32'>7#"54>7&#"#"'732632” LL6fŒ* +9O8, $  Y ! Y V#,™ $ go 5$4  $  5 07öÜZ%²+´+²+°/±+±°901>3267.#"7{$,)i4WN,?‡9�8!!$"-•K*�g(P+7#‹¬ 7>7'>7Ø%)!5!+%Ô%)!5!+&7XËM GþýØ\WËM HþýØ[7#,¬ %>7'>7'>7y%)!5$($Ô%)!5!+%Ô%)!5!+&7TÌ K QþòÆYXËM GþýØ\WËM HþýØ[7Í­ .°/´ +´ +° /° Ö´+´+± +012#"&546}!/)#-)­,".,! .&/10²+´+°2°/°Ö´+² +³@ +±+0173:>2>7#"&5467Y6   CL_˜bN\ÙLD  :‹hjÃ3!ebÿ²)y²"+´+°/´+°*/° Ö´+°±'+´+°±+´+±++± ° 9°'° 9°°9°²"999°°9±³ '$9014&#".547323267#".546¾&<(*2,2MS1 O_?/ C/G#^"5  !$ " +=;/“QBx  :8QFY¯ÿ5QM°/´+°/°Ö´+01'%Ë  5&ò&þ†ÿì_. $a²+°/´++°!/´"+°%/°Ö°2´+°±+´ +±&+±³ !"$9±´ $9°°901'2'32654&##5.+'676753”VG E`\)H.2'[A!M)ž©?E)#ãRDP(#$*þ¿GN70C¥33Sÿé—{e²+²+´+° /´+² +³@ +°/°Ö´+°±+°2´+± +±²999± ²999017253#5.#"327#".54>Ü1G33 c$7B &"1(þH$éþ…C%c.5L0 5$,@ þ'(f#g°/´+°/´+°$/° Ö´+°±!+´+°±+´+±!°9°³$9±²!999°° 9012#".'732654&#"&546{ #-Uc‘#k�3='I] „<ÿÿˆr4ª°(/´%+°/´0+°/°3´+° 2² +³@ +² +³@ +°5/°+Ö´#+°#±+´+°±+± 22´+° 2² +³@ +² +³@ +±6+±#+°9°´'(0$9±%²+99901#53533##5./>54#"327"&54>32=>?&&3>>3?[C"/># .!-% !/ -;P¼3DD3ýÐ,HB , :(&,*!þäÿÖ§.#'K°/´+°(/°Ö±$22´+°2°±"+´+°2±)+±"±99°±99013##5.'&/753632&=654©©G4;E  µ491,$€r^.3ðþê1*1vZKW(=>E_/**"$*GDýìÿ(ÿ#<U°/´+° /´+°/°Ö´ +° ±+°2´+± ²999± ±99°±9901%253#5&#".546þV.H$33=_%&+><21_þðP‘ *1(#CþAÿBÿ%m)° /´ +°/° Ö°2´ +± ±9901%'673#5.#þò ) J±Ig43Q+0   54'#"&543367B5oXO˜34P- (0" 0!'!C   LE;H_«b@L3 4"668& #ý‰ÿ9ÿ0”j°/´+² +³@ +°° Ö´+² +³@ +°/° Ö´+°±+°2´+± ° 9°± 99±°901.#"#"&5473263253#þýC PYM.9S 6 2833’( W6-( -32 *ãþ¥þiÿðÿÄa%{²+°/´$+²$ +³@$ +°° Ö´+²  +³@  +°&/°!Ö´+°±+°2´+±²$999± ²!999°°9°°901'63253#54&#".#"#"&54632Ì 33**!" .9E%0‡ Ñþ±(  $*(-7,*@ÿíÚé."*°°/´+° /´#+² # +³@  +°/°(3´+°/°3´+°+/°Ö±'22´+°2² +³@ +°±+´ +° ±+´+² +³@ +±,+± °9±°'9°#³ $9°° 9°°9012654&##5.#'>75#5!#2#"'7%25"h <"3$4M(/RLýüÌJB5'$þù1@ wB'*Õ&/5('33T.*'; -q7 sl)¨²+³+´ +²  +³@ +² +³@ +°/´$+°*/°Ö´!+°!±+´+°± +°2´ +°2´ $+±++±!±99°´'$9±$±99° ³!$9°°9°°'90133##5./>4'#"&5473267Þ>;C3<<3 w/4D 5#'+!-Í$4CU>3þ¥+]2-.6-  &- 6 Ê”.,s°$/´+° /´+°2² +³@ +°-/°*Ö´+°±!+´+°± +°2´+±.+±!µ '$9±$³*$901253#5&#">32'7>54&#"#"&546¡(G.33Iq%E!-8)A&2 J&U-.'…þù$²8, $&%8K!9 1!'2[ÿî >.)…°'/´+°/±33´+² +³@ +°*/°Ö´+² +³@ +°±+°2´+² +³@ +±++±²#$999°±%'99±'°9°±9901275#'47#5!##5./7#"&„ 3    ”V 9P3[6 6 4¿( 2     Þ 33þ¥./@:&ÿèp€.,5£°/´$+°*/´+° /´-+°/´+°´2+°6/°Ö´ +° ±+´+°±&+°02´+°2±7+±&¶ $*4$9±*$±&99± ³($9°-°9°´ 04$90147#5!2#"'3267#".573254'#"&72654#y6Ç:1, +":#_�5_>%34b6U)2*4š'(+"ZMT3,#2940_yHjv1 :ŒjI,=8”%ÿî¢E.r°/´+° /°3´+°/° Ö´+°2² +³@ +°±+´+² +³@ +±+± °9°°9±° 9° ±990172654'&'"&'#5!#he97GWÝ2JƒÕb+ ú @33"55Œÿç8h.l°/´+° /°3´+°/° Ö´+°2² +³@ +² +³@ +°±+´+±+±°9°°9± ±990173265&'.5#5!#3}1rrF #c2œ!ƒ?‹�$~<]þ¤'m33 9OP¥ÿô`§.1C¶°/´+°/´>+°2/´++°/2°+´+°#/°&3´$+°D/°!Ö´<+²!< +³@!# +°<±+´+² +³@& +±E+±´54.##"&=#5!!3232'".'32654'CB * $�W3:J C$6>³þ¿ !5³  m0;  3+R3< +7’33 -B ÿæ—�./±°/´&+°-/´+° /´ +°/°3´+°0/°"Ö´#+°#±+´+² +³@ +°±)+´+²) +³@ +±1+±#°$9±)¶&-$9±-&±)99°°+9± ²999°²"#99901467#5!#3"'327#".'732654'#"&l'¼Šf‚ 3 $7=G:'>) 3PE($"("3�J 33G* _57T<-ƒ•0+!,ÿî ¸m!°/´+² +³@ +°/°3´+° 2² +³@ +² +³@ +°"/°Ö±22´+°2² +³@ +°±+° 2´+° 2´$+±#+01675#5!33##5.'#5.#7Psé(3>>3 3l4°] ] ‡D 3Ú /T?3þÍu?"Sc, >£%:<O°/´+° Ö´B+²B +³@ +°F/°13´K+°,2°)/´6+³6)+´=+°P/°Ö´+°±3+´,+°,± +°%2´ +±9?22° ±D+°N2´+°2±Q+±°9°3²999°,°19° ²/6999±D ²H999°°9±B°%9°° 9°F²DH999°Kµ/?@$9°=¶+.39$9°)°9012#"&'#4.#&5473263254&#"27#"546327>"3254#"532654Ø,!I"?3 4?54'#53&5472654'lF~c :'7G}v4'* 9*13­.Q32*9*2=*S-8' 3?6+2%ýÿM7<=2Q#Qÿ⣡.$…°/´+² +³@ +°/´ +°/°3´+°%/°Ö´ +²  +³@  +² +³@ +° ± +´+±&+± ³$9± ± 99°±"9901"&=#5!#267#"332654'ß$À¿Ì8!$^Cª*3 !:"-?6:!�33}6K&4d82R<-G'!ÿá“3.w°/´ +°/´+°/°3´+°/°Ö´ +²  +³@  +² +³@ +° ±+´+±+± ²999± ±99°°9017"&5#5!#32654#"'632r2ERÚ (I  & n“5#33þò |& (0 C� %;6°/´ +°/´+°/°Ö´ +±+± ²999012.#"37#".54>–#> f$8C .- ;;-*Qk.5M/>.,6&  mm-®°/´+°$/´!+°/° 3´++° 2²+ +³@ +²+ +³@+ +°./°(Ö´+°±+´+°±+°2´ +°2´ %+±/+±(±99°³#$+$9±°9±°9±!$±99°°(90133##5./654&#"327#"&54632Ü:+33::3 $ 3 ‹!=-,;Î*8R?3þ¥4# 7F 5!$05  W3$[°/° 3´+°2°%/°Ö´+°± +±22´ +´ %+±&+±°9° ³!$9±°901"753##5./7.54632&u  Vm:32L8B*"  d(6&4/! 053þ¥=252-"( ? #!ÿèçz.[°/° 3´ +°/°Ö´ +²  +³@ +² +³@ +° ±+´+±+± °9±²99901'5#5!#6?#&54C+G1*k`ÁCV? 3 ‹*¾33‹9 (&+/).ÿÓ±1.a°/´ +² +³@ +°/´+°/° Ö´+°±+°2´+² +³@ +±+± °9°± 9901&#"&546325!5!#þ<6!(E5<þÕ^3 v)2+M’3þƒK.K9#e²"+´+°° Ö´ +²  +³@ +´ " +´+°$/°Ö° 2´ +²  +³@  +±%+±³ $901>3253##5&''654&#"72767&#"KK;\PÆ“2 �(+8"?Î!J_T3¤:�  ( 5 & /ÿî‘».*…°/´+° /´'+² ' +³@  +°/°3´+°+/°Ö°%2´+² +³@ +°± +´+±,+± ±99±±99° µ "$9°'°901#"'73254&##5./67&'#5!!532�')3l*<&I8Íþ¸/. ,2$%=0g21%þâ11@ /!%033(* #à<ÿî‘7.S°/´+² +³@ +°/°3´+°/° Ö±22´ +² +³@  +² +³@  +±+01675#5!##5.#"75WmçI/3 q(0!Q $KxD!33þ–?c :Š "ÿï´œ..2ް/´%+°,/´ +°/´+°//´0+°3/°!Ö´"+°"±+´ +° ±(+´+±4+± °9°(´%,$9± ,±(99°²*999°´!"$9014632&#"32>7#".'32654'#"&'5!u '    %4O:-K0* 3h=(1%<)4†­� 1  (>?P#3SC1 jv:-@:‡33ÿéÕ. *‰°/´ +° ° Ö´#+° /±33´ +°+/°&Ö´+²& +³@& +°±+´+² +³@ +±,+±&° 9°´ #)$9°°9± ³&$9014'#32%#5!##".#"327#"&54674\#µ U:þòeìa,)#G7 $*›4,75¢3309)5))30#(ÿê‘L.I°/±33´+² +³@ +°/°Ö°2´+² +³@ +² +³@ +±+01!##5./67.+35b-3h)!=,V=”.#DZ4.3þ–6/;)8 <*>Aôÿ5QM°/´+°/°Ö´+01'%Ë  5&ò&ÿÕò×.%°/° 3´"+°2²" +³@ +°/°3´+°&/°Ö´+°± +°2´ +² +³@  +² +³@  +±'+±°9° ±"99±"±$990125!5!##5&#".#"&54>326 þ€O3&)+#$$$3 4"*-Æ%Z33©>?$7( "E$)/)ãÈ.0š°$/°3´)+°2° /´+²  +³@ +° °/ Ö´0+°1/°,Ö´+°± +°2´ +² +³@ +±2+±,±!99° ²999±)$±&99°/¶!'$9±0 °901263253##5.'27#".'#"'72654&#''/ #!7�j3# % 8- #/IK[3þè‹34 0 +#,1!&30ÿÎ"¬.!{°/´+°/°3´+°´++°"/°Ö´+² +³@ +°± +´+² +³@ +±#+± ³$9°°9±³$901327'654.'"47#5!##".x/b�1a4«Þrk7 $Ž%Y( MK$33-;X ,ÿ×J.%‚°/´!+° Ö´+°/±33´+°&/°Ö´&+² +³@ +°±#+´+²# +³@ +±'+±° 9°#°9°°9±!µ #$901#".'#"&'6732654'#5!!3254'·:(4 "<6 " $Ø7þò8$=û",6(‚3!'@* 33$H8 (ÿî[\.%)L°/´!+°&/´'+°*/°Ö´+°±+´+±++±°9°´!$901&/32>54&#"&54632%5!) (zš/,"2 5%"H!'.þÏW†([6'†37 ("1 ,X33ÿî2}.(2©°2/±,é°/´"+°/°3´+² +³@ +°3/°Ö´+°±+´ +²  +³@  +² +³@ +°°* Ö´/1+° ±%+´+±4+± *°29°/µ ",1$9°%±'99±"²'99901"&=#5!#>7#".'32654'4632"É"¡�» 3 !/!-*0L) 3e7,=$Z$+7~33{CC#$9" 8NbC u’@#!Kã$ÿá:.'’°%/±é°/´ +°/´+°/°3´+°(/°Ö´ +²  +³@  +² +³@ +³ +±"é° ±+´+±)+±" ´ %$9°±99± ±99°°9017"&5#5!#32654#"'6324632#"&n -@Yæ0A+a_ ƒ7 !33þÝ"g+ '$*@„Eÿñ‘M. #}° /±é°/±33´+² +³@ +°$/°Ö±é°±+°"2´+² +³@ +² +³@ +±%+±² 999°°9± °9°±"990174632#"&&+5!##5&/675O /CA \532{ +/0P>((Ç B33þ–6Q )-m(E(ñÿ5QM°/´+°/°Ö´+01'%Ë  5&ò&ÿî‘7.S°/´ +² +³@ +° /°3´ +° /°Ö± 22´+² +³@ +² +³@ +±!+017.'7'675#5!##5.#"75–D++D�WmçI/3 q(/!R $Lž9 0 6"±D!33þ–?c ;‹ "þÞÿçÇ,š°/´!+°/´+² +³@ +² +³@ +°-/°Ö´+°±+´++°+± +°2´ +°2² +³@  +±.+±°9°¶&($9±!²+999°³($901'233##5./32654'#"&4732>54'r=Y3ll33P]+ 4]?? 9/( 0G�C=W3ýê&-!?2 JJ3Z0Hÿÿù..'|² +° /´%+° /´+°/´+°(/° Ö°2´ +° ±+´+±)+± ² "999± ²999°%±"99° ´#$9°°9015!4.##5&/7'7632#"'7326Bpk/&3>’(y&)djF4Lf< û33À#þnAW6P!4#>#=>G83, ;ÿ°X.M²+° /° 3´ +°/°Ö±22´+² +³@ +² +³@ +±+± ±99017.#'675#5!##5½ /AT&‚‹Þyg4Ç,~›X:<*6g&+33þ: N6òNÿFÿo�.° /´+°/´+² +³@ +°/°3´+°/° Ö´+°±+°2´+² +³@ +² +³@ +±+±² 999±± 99014&#"3"&54632#53## R! *5'72B¸C3[? (&/7ý33ýtÿY©.Œ²+°/´+°/´+° /°3´+° /°Ö´+°±+° 2´+² +³@ +² +³@ +±!+±°9°³$9±± 99°°9° °901'463&'7#53##54&#""&§5& 3>wíC3]+ ' )È(3 .>3 333þoZ((ÿáÿåý.j°/´+°/°3´+°/°Ö´ +²  +³@  +³ +´+°/´ +² +³@ +±+± °9±° 90147#5!#'>54&N2Ÿ;ACZ+3xK833G@­EE0 )! ®ÿÕÿÿ¾.>Bß²+°/´$+°3/´.+° /´+°)/´:+°?/´@+°C/°Ö´+°±6+´,+°,±+°&2´+°<2°±+´+±D+±°9°6±!99±,´$03:$9±±99°°9±$±&99°3°9°.²1999° ´,6$9°±=99°)°9012'65.#"#4&#".547326324#"327#"&54>326%5!M*9!#)/3=TFRD )7=&Q7-%y# +SaU7ý¹éuG' &(0þí9+'+°)2²?> +³@?% +°>±:+´/+²/: +³@/( +±H+± °9°?³!C$9±:>±2499±°9±2´ F$9°7²4999°@µ !/5C$901.##".547326325.#"'675!5!##"'732654&##q"<.!2 .)#ƒ �>{™þ�£ñ9F0/#)( Z63›,ƒ/"2)/# L3D0†6`*.33.(L1#B%''5NþþJ Q4ÿ™ÿ„A²+´+² +³@A +°° Ö´+°/´+°#/´.+°?/´<+² +±C+±& ° 9±+± (99°@ #)17$9±°9±´  9$9°°79°#°9°.±499°?²&) 999°<±1(9901.#"#"&547326325./>54'"&547326733##wCQLZ/EF<46³86q4)$1( ,(74#"#"&54632533##yCM /E#.DG 6 28V^!F O",&"'*& N  WC9M.3CC3' --$1 *;) *<›7#)"5"% $%1^5HÇM3ý³ÿôÿ—ß.+=Ò²+´+² +³@+ +°° Ö´+°/´,+°%/±(933´&+°>/° Ö´+°±"+´<+²"< +³@"% +°<±++±822´*+²*+ +³@*( +±?+± ° 9±<"² $999°+´$9±°9±¶  08$9°,°/9°%±".9901.##"&547326325./7#"&547#5!##27#p#l1D.*"† ƒKN &Hcë<3�& €  Þ34O:0% L3 2>] (R8,33ýœü $ a0 ÿóÿ+.-5Ù°/´+² +³@, +°° Ö´+°/´.+°/°!3´+°6/° Ö´+°±+´.+°"2². +³@ +°.±-+°2´,+³1,-+´)+²)1 +³@)! +±7+± ° 9°² 999°.°9°-±499°1°&9±°9°.² 999°³ +5$901&#"#".547326325#&'#5!!#2654.'o+( t "+.*"� ^K§þÊL=7(3¢(¡Lg 9 ;(.' P1ÄeÔ33=() "%+?þƒ £8 ÿôÿ7<.KW °/´+°° Ö´+°/´+°)/´L+°R/´9+°./°13´/+°X/° Ö´+°±,+´U+°22²,U +³@,. +°U±O+´&+°&±+± 22´I+°>2²I +³@I1 +±Y+± ° 9±U,²999°O²)999°&²A999°°99±±G99°°F9°´ EI$9°² A999±RL² >&999±.9°T901.#"#".547326325򂂮./#"&=#5!!32&'#2654'#"'}C J0E#./´!+°/´L+°E/°H3´F+°U/°0Ö´1+°1± +´ +° ±B +´+²B +³@BE +°±:+´'+°'±+´R+²R +³@RH +±V+±:@ $*7>DI$9°'°9°±L99°R²999±±T99°°9±>7³':R$9°!°<9°²$B999°L°O9°E±N9901.#"#"&5332632&547".'32?#".5332654'#".547#5!!327ïA t"DH2 *"!y '$#XX&$*%*`49?1 3*7!"@(1'2KåzþÀK9<!--4bW6:4 k6]X)1 B!-"$,!@R7Q‡TV€@&6'$&1/a1337'!eL'A…ÿîÿcó'O9²+´+² +³@O +°° Ö´+°/´?+°D/´I+° /°;3´!+°92°(/´2+°2°5 Ö´%+°P/° Ö´+³+ +´0+°±+´=+²= +³@ +°=±O+°2´N+°B Ö´K+°" Ö´9+²9" +³@9; +±Q+±+ ° 9±0± -99°².999°=²(2999°O@ %5?DGH$9±"B°I9±°9±± 99±D?µ  FKM$9°I°G901.##"&547326325#"&5#5!4&#"#"&547326323!32654#"'62#m#<'2D.*"Š?I,'¤œ!5l3G!*`"f1)0þÓ:d$D-3h'P9.' ('3 ¶K@&O3,# ?/). >13þ´6‹E$"1'-4þÿóÿíTEQ!° /´+°° Ö´ +²  +³@ E +°/´F+°,/°<3´-+°:2°R/°Ö´+°±0+´7+³P70+´!+°!/´P+²!P +³@!, +°7±)+´K+°K±I+´A+²AI +³@A< +°I°E Ö°3´D+±S+±°9°!°9°0² $999±)7µ+.23F$9°K´ :=$9°E°9± °9°°9±±99°F°9°,µ!CK$901.##"&547326325#"&54>7>54'!53&5473##2654'r   g 2C.)#ƒ 33=EV2 þòñQ6& 00ƯE 3r7F<"G/­P90% L3)§:ZD N= 3\H8J",O63o.BA!"þ†x@TV>NAqÿÙÿY.>²+´+²+´+² +³@= +°/´ +²  +³@  +°(/´4+°-/°03´.+°?/° Ö´+° Ö´+°±++´2+²2+ +³@20 +²+2 +³@+- +°2±>+°2´=+°=±# +´9+±@+± ° 9±° 9°+±99±>2µ (4$9°=±%799±°9± ² 999°(² <999°4±#999°-±%79901.#"#"&547326325#"&'332654'#"&=#5!!3267#�DPLZ.9S 4 56*3m†3b[;RR%(úFþç^K3r' M@'. *32 +ÔÁ°²[3'&?.É33ÄS2lFþáÿñÿ&ú.:Ö°/´+° Ö´+°./´3+°!/°$3´"+²!" +³@! +°;/° Ö´+°±+´&+²& +³@&$ +²& +³@! +°&±:+°2´9+³,9:+´6+±<+± ° 9°²999±:&µ).1$9°,°39±°9±.·  )068$9°3°1901.#"#".547326325#"&5#5!!>54#"'632#p#y "+.)#ƒ ?D 3© þÔ .q,.3¥' :&.' (&3 ²M/7’33þq �\&"!<5>þƒÿåÿõ./’² +°/´+° Ö´+°./´)+°$/´+°/´+°0/°Ö´+°± +°!2´ +±1+±°9° ³$9±°!9±).±,99°$µ "+$901!!4632#4&#"#"&54732632&#"327"&5ýË͘6 3.*ˆ>L, Vx'&w  >%.3Ù9‹!-þ]B4]I/A*3$"m&$ -ÿßÿVU.GK8²+´+²+´+² +³@F +°/´.+². +³@.% +°&2°4/´A+°H/´I+°L/° Ö´+°±<+´7+°7±G+°2´F+°F±1 +´D+±M+°6ºÀÛõ‘+ °%.°#À±&ù°(À°%³$%#+°&³'&(+²'&( Š Š#9²$%#9³#$'(....µ%&#$'(......°@± ° 9°<±99°7±:99°G¶.49A$9±°9±.² 999°4µ :32#5!’B Q/D#.DG 7 83%.":,'3  $2BLF57 + 8&Kc33þMvu' ,.), '<) *l0'F+R'*7;X/:\IFa!#'" '}º>þó¥33ÿ�ý†Bð²+´+²+´+² +³@B +°/´+°-/´(+°#/°?3´3+°=2²3# +³@3; +°C/° Ö´+³0 +´&+°± +´5+°5±B+±:22´A+°<2²AB +³@A? +±D+±0 ° 9±&± 99° @ *-238$9±°9±´  :$9°°89±#(² 0599901.#"#"&547326325&'&/67654&#"327#"&546233##xCL LZ.EG<46PB`,p'@7) ? (V~Q]$iJ4QQ4<( M@*+ .;) +BW68;"*$3- 2DJ=7Q(ZïX3ý”ÿïÿþ.+¶²+°'3´ +³) +´+°/°3´+°,/°Ö´ +° ±+´+² +³@ +² +³@ +°±+´$+±-+± °9°° 9°² 999°°9°$²'999±)°&9± °9°µ $$9013".5472632&547'#5!!67&'"Ž '0!1-Hh'#* ‚d.žþ¸e•,-.(5*f@*/:!3:gV³2"33ê†!S|^P "ÿ™þ55:Ʋ+´+² +³@5 +°° Ö´+°3/´0+°& Ö´!+°;/° Ö´+°±+´)+°)±5+²/6222´4+²45 +³@42 +±<+± ° 9°± 99°)°9°5µ!#8$9±°9±3@  $)./6:$9°&°#901.#"#"&547326325./7&54632&#"753##yENYM.EF 6 46FkMq_<+( $y…R3yUwW2) W6), .<) +EFL)[E/(8 DJ3ýž325!5!##{B OYM.DG 7 65"5- "!4>)b3þ|P3m' W6), *<) *ë/:'' , '&D2;(fÌ33ýcÿáÿæ.Hè°?/´+²? +³@?4 +°?°= Ö´+°/´+°)/°,3´*+°I/°DÖ´+°±+´+°±4+° 2´3+°3±& +´/+²/& +³@/, +²&/ +³@&) +±J+±D°F9°°G9°²?999°4³=$9°3±#(99°/°-9±=± 99±·#2DF$9°±&/99017326325.#"&54>323>54'!5!##5."#".5472*"…  9; ))&)H2 $þk>j3 k "*.È'3 æ-" !2% ,,>33-&5þ™4  ;'0%  ÿ™ s1<Ʋ+´+² +³@1 +°° Ö´+°!/´2+°:/´'+°/ Ö´,+²,/ +³@,* +°=/° Ö´+°±1+±)22´0+°+2²01 +³@0. +±>+± ± #99°1µ !'28$9±°9±!µ  #6$9°2²$)999°:°8901.#"#"&547326324&''654&#"'>32533##267&#"‚CPLZ.EG 6 462»$%.# n6…F3VV3þÏ # S34 ?2( M@!4 -<) +) WÁ"&!$ $1P‚ÑE3ýž ,+R)!ÿùÿ„�.>ò+´+²+´+² +³@> +²+°2/´7+°+±+22´=+°=±9+´/+±@+± ° 9°>¶ $)$9±9=±2499±2´  +$9°7±499°<µ&)/5$901.#"#"&547326325./67&'#5!!2#"'73254&##xCL LZ.EG<19�9b($fp”þ3@&69tMƒh," K94F' M@$1 *;) *IA] %M#6@33)9&1,&bNIg2 1 #3=ýÞÿðÿ™á.,3¨² +´+² +³@  +°° Ö´+°-/´+°/°3´+°4/°%Ö´*+°*±+²-222´+² +³@ +² +³@ +±5+±*%°'9°³ (0$9±°9±-µ %'*3$901726325.#"'675!5!##5.##".547„ƒ  Ÿ8"z˜þƒñ@4#:/ #*.) “2�" H,Š6`-+33ýž5 ;'+* (&3{I`!ÿç!.8<¿²+°/´&+´)+°./´+°/´4+°9/´:+°=/°Ö´#+°#±1+´+°±++°2´+±>+±#° 9°1°!9°±&99°+µ ).46$9°° 9±&°+9±.)°#9°°9°µ !,17$9°4² 699901"32>7#.##".547326325#"&54632&%5!ï 9 !1- -!49;$1C1g7aD0;3%þí:œ 3 !þ]#"J5214B "èU>0!+$+_33ÿéÿhA.FJ²+´+² +³@E +°° Ö´+°/´#+°*/´9+°5/´0+°2°G/´H+°K/° Ö´+°° Ö´+°/´ +°±-+´7+°7±F+°2´E+°E±& +´B+±L+± ° 9±-° 9°7°9°F·#*02<$9°E°(9±°9±#² 999°*³ BD$9°9°&9°5²-3(999°0² 2<99901.#"#"&547326325#".'32654'#"&54632&#"3267#5!œA MLZ-EG 8 38 %9bC:"9%”T,P"5R3O)4! K%3!%33þMXc' M@*+ .;) +w1Jm_:“¥Q?3Z7?#00):2G #!9 D8þê“33ÿöÿ=è.18а/´+² +³@1 +°° Ö´+°!/´ +° 2°+/±.233´,+°9/° Ö´+°±$+´+²$ +³@$+ +°±1+±722´0+²01 +³@0. +±:+± ° 9°$² )*999±1µ !&2$9±°9±!± 99° ° 9°+²$799901.#"#"&5473263254&#""&547.'5#5!##5|C H YM.EF :56`#/*U.C‹ AMLò93ì?59.Ž( W6+* *;) +ø‚5+P,`)‰%""33ýB¾73Nàÿøÿ™ì.'5“²+´+² +³@' +°° Ö´+°!/±$(33´"+°6/° Ö´+°±'+±422´&+²&' +³@&$ +±7+± ° 9°'´ 0$9±°9±!´  4$901.#"#"&547326325./67.+5!##zENLZ.EG 8 46)“9-9Ye nô>4¶a/:R#-2) M@!4 .<) +;CR 89CG33ýžbN/- /jÿíÿ™…K²+´+² +³@K +°° Ö´+°%/´ +° °/ Ö´*+°6/°H3´7+°F2²76 +³@7D +°6° Ö´<+°L/° Ö´+°±2+´&+°±K+±C22´J+°E2²JK +³@JH +±M+± ² ,-999°2² */999°³':$9°K³#%$9±°9±*²  999±/%±#,99± µ"'-2:C$901.#"#"&547326324&#"327#"'#"'732654&+53263533##�ENYM.EF 2 56P%!, <" 4#I5)*�N3QQ32) W6), .<) +Ms/6 +:')01=3k_  $ÀW3ýžÿëÿ™è.*.5š²+´+² +³@* +°° Ö´+°$/±'+33´%+°6/° Ö´+°±*+²-/222´)+²)* +³@)' +±7+± ±#99°*µ!+3$9±°9±$¶ -15$901.##".547326325./67&'#5!##5&'o#g #*.)"† BdE*g-~IýF3ÖLŠI;0{V2 ;'+* (&3 /]G:%R#A33ýžb{šé(?+7qÿìÿ\ü.6?Ų+´+²+´+² +³@6 +°/´(+°/´<+°0/±3733´1+°@/° Ö°!2´+°±6+±>22´5+²56 +³@53 +±A+± ³ "./$9°6µ $+7$9±°9±²  999±(´!">$9°<°:9°0°.901.#"#"&54732632.#"#"'73267.'5#5!##6325”CPLZ.EF 7 29 :(20A,- B_853þß@5"'2n' M@*+ ';) * N4?4j" EK7"33ýaŸ84E®ÿ×ÿü.FN²,+°7/´+°: Ö´+° /´J+° Ö´+°"/±%G33´#+°O/°?Ö´D+°D±+´G&+²G +³@# +°G±,+° 2´++°+±L +´(+²(L +³@($ +±P+±D?±A99°´:B$9°G°9°,²7J999°+°N9°(°&9±:,°-9±7± 99°° 9°²?AD999± °*9±"Jµ(L$901726325.'#"&'6732654'#5!##5."#"#".5473254'}†   2 "<8 " $Ø7W33   k "*.*¥8$=„ è'‚3!'@* 33"<þ•4 ;'0% &'3w$H8%ÿóÿPó.:>½²+´+°° Ö´+²6+²8+°$/´/+°;/´<+°?/° Ö´+°±,+´'+°'±!+´2+³:2!+°3´9+±@+± ± 99°,± 99°'°*9°!·)/4$9±±799±$·  *,24$901.#"#"&547326325&/32>54&#"&54632'#5!zDNYM.EG<64‰¦_:&9 VB0d/7k•¥Y&4þyà{' W6'. .<) *Uy79!(# )7#$*9,JZ9o2Zq!!œ«33ÿíÿ¾ò.)-4°°/´+² +³@) +°° Ö´+°*/´!+°#/°&3´$+°5/° Ö´+°±)+³!*.$2´(+²() +³@(& +²)( +³@)# +±6+± ° 9°)´,1$9±°9°°9°*@  -/4$901.#"#".547326325.#"'675!5!##'~CP/D#-DG<19š:!~”þoA39Vˆ0 %ˆ& ,-&- /;( *%-‰6b++33ýÃß@>e X,ÿóÿqà.)18Ÿ²+´+² +³@) +°° Ö´+²+°#/°&3´$+°9/° Ö´+°±)+²!2222´(+²() +³@(& +²)( +³@)# +±:+± ° 9°)µ -15$9±#·  *.28$901.##"&547326325.#"'675!5!##'.'7l$;.2D.)#‰š: !~”þ‡íA3X_:,n6”(†Z%O:1$ (&3 o-‰6b++33ývµ&Q . I7QHY*ÿÕÿ™¼.M`eI²+´+² +³@M +°° Ö´+°?/´D+°V/±+I33´e+°62³'eV+´.+°N2°1/²4^a333´2+°f/° Ö´+°, Ö´)+²,) +³@,1 +°±"+°^2´Q+´b+°Q±M+²Ua222´L+°52°L±F+´<+²" 5$,3#3þÇY%( )0" ÿéÿÿÍþV6²6+´'+°,/´1+°/´+° /°3´+°C/° 3´D+° 2°K/´T+°H Ö´+°W/°MÖ´R+°R±9+´$+²9$ +³@9C +°$±A+°2´+° 2°±*+°E2´3+° 2³3*+´+² +³@ +±X+±RM²>?O999°9°P9°$±T99°Aµ"'6;K$9°²/H999°*³.1$9°°9±,'´$./39$9°1±";99±±99° ´>?$9°°A90167723##"'73>54'32654#"'632#"&547./675#5!4&#"#"547326c' 'Fy52\Â,0!K  Y8H%%P #'Ks93@<(2 DoïW1 A™/DRkAYø)<3!7!H, F^iH8#Q*&%4[54'32654#"'632#67AC K55 .

E$9±³<>$9°³?@$9°Eµ"(+9B$9°5²-3999±0%²99901#".'32654'#72654&#"&54632632#"'7654&#"%5!È4'911('   ýóÊH&;$6 .*>,C"<þ®6) 1&,)#.$&<4G:)1050*0! Ÿ33ÿíÿìç.LT.² +´+°/´+°=/´B+°)/´M+°J/°R3´5+°0/°33´1+°U/°Ö´+°±&+±.Q22´K+°42³K&+´#+°#/´+²# +³@#0 +°K±?+´@+°@±+°E2´+°:2² +³@3 +±V+±°*9°#²),M999°&°!9±K²  999±@?±99°°=9±²!#999°²%&999°=°9°B°Q9°M³:?@G$9°J±,*99°5°.9012#".'732654&#"&5475.#'>75#5!#2#"'73>5654&#6'25"7!0 "D-7a:#32M*.;!"+ 4Q( PTýúÌ'; 6&$ 5$Ð1@ u!0'*2"B_OGP85)9+/5*33.'*';)#²oq7ÿÙÿO£.SWݰ"/´#+°I/´9+°)/´4+°T/´U+°X/°1Ö´,+°,±S+°2´R+°M2°R± +´O+°& Ö´K+°O±F+´=+±Y+±,1° 9°S@  "#)./4$9°&° 9±KR°79±FO³@9BI$9±#"³ CDM$9°Iµ&,/=FK$9°9±1799±4)²99901%.#'67.'32654'#72654&#"&54632632#"'7654&#"#5!w#) JR, 1.(!   *433þbÊ= >!)0%,*@,G"Aþ®4) 1&,)#.$&<4G:)1050*0!&;:#þð¬33ÿíÿç.Ya:°*/´+°L/´Q+°8/´Z+°W/°_3´D+°?/°B3´@+°b/°Ö´+°±5+±=^22´X+°C2³-X5+´2+°2/´-+²2- +³@2? +°X±+°2´+³O+´N+°N/´O+°±' +°T2´ +°I2² ' +³@ B +±c+±°99°2´8;Z$9°5²0999±X-²$/999±N±*99±O°L9±*²45999°L°9°Q°^9°Z³INOT$9°W±;999°D°=9012#5.#'67.'732654&#"&5475./>75#5!#2#"'732654&#6'25"A K !0 3S+!"+.Q132M*.;!"+!/U( PTýúÌ'; 6&$ 5$Ð1@ u �!0';þí2,0#! FVGGP85)9,05*33.'*';)#²oq8ÿÙÿF£._cA²+´+°° Ö´+² +³@_ +²+°/´'+°./´/+°U/´E+°5/´@+°`/´a+°d/° Ö´+°±=+´8+°8±_+±*22´^+°[2°2 Ö´W+°^±R+´I+±e+± ± %99°=° 9±28@ ',.:;@$9±W_±CY99±R^³LENU$9±°9±° 9°'±99°.¶ *LN[]$9°/³,OPY$9°Uµ28;IRW$9°E²"=C999±@5²#%$99901.#"#"&547326325#".'32654'#72654&#"&54632632#"'7654&#"#5!¤EOLZ.EG 8 46371('   *44þ5Ê…) M@!4 .<) +� .*>,C"<þ®6) 1&,)#.$&<4G:)1050*0!&;þ¬µ33ÿíÿ�ç.NVR²D+´9+°G Ö´6+²I+°L/´.+° /´%+° /´O+°+/°T3´+°/°3´+°W/°<Ö° 2´A+°A±+´+² +³@ +°± +±S22´,+°2°,±3+°I2´2+³#23+´"+°"/´#+°2±( +´+²( +³@ +±X+±A<² >999°³9?DO$9°°9° ±699°,°G9°"±.L99±2#° 9±LG´<>A$9°.°9° ° 9°%°S9°O³"#($9°+± 99°°9017&54675./>75#5!#2#"'732654&#632#5&#"#"&5473263254#"'25"Ô&+$*W( PTýúÌ'; 6&$ 5$33)1@)L--" 6 '-7z1@ uw ?25*33.'*'; )#²6&þî*#F2$6 / *"µ(<àq8ÿóÿí.ah�²+´$+² +°/´+° Ö´+°*/´Z+°L/´Q+°8/´b+°W/°f3´D+°?/°B3´@+°i/° Ö´+°° Ö´ +° /´ +°2° ´+°/°±e+±4=22´X+°C2°X°- Ö´2+°2/´-+²2- +³@2? +°X±N+´O+°O±a+²'T222´`+°I2²`a +³@`B +±j+± °;9±2 ´8:b$9°e°09°-°9°X³$/$9±ON±*Z99°a°L9±°9±$±99°*³ 02$9°Z±499°L±599°Q°e9°b³INOT$9°W°;9°D°=901.#"#"&547326325#".'732654&#"&5475.'"#'675#5!#2#"'73>54&#632#25"zCOLZ.EG<643;5^=%32M*-<%+1I(B‹ýúÌ'< 6&$ 5$ &34þæ=<vÄ' M@$1 *;) *“&>[SGP86(4+-54633.'*';)#²&>&þ¤iq7ÿÝÿzT.7>á²+´ +°/´+² +³@7 +°)/´.+°8/°43´+°!2°/°3´+°?/° Ö´+°±+²8222´6+° 2²6 +³@ +°6±1+´&+²&1 +³@& +±@+± ±99°´ ;$9±16±)+99±² 999±)°>9°.°+9°8µ&,;$901&#".546325.#"'675!5!##"'72>54&+#0?^&+>,RH›@z™þ®wò9F0/")( \22œ)‰7‘! *3&#Cc-/‡6`*.33.(L1#B%'7Lýà JX/ÿÝÿñM.8@².+°6/´5+°1/´+°/´+° /´9+°/°>3´+°(/± +33´)+°A/°Ö´3+²3 +³@( +°3±+±&=22´+° 2°±+´+°±+´+°±.+° 2´-+²-. +³@-+ +±B+±²156999±°9±56° 9°1°9±±99± ±=99°9³$9°±!#99°°&90165654&##2#"'74635.#'>75!5!##4&#""&'25"^*/5Y©1[%'&$¨-/W(PEþópV3‚B#''P1@ u3 "8Ï@2“T=8;š$!"15&33ýö@ )&õq8ÿÝÿ¨T.ELâ°7/´+°. Ö´+². +³@.+ +°/´#+°F/°)3´+°2°/°3´+°M/°CÖ´:+°:±+²+F222´*+°2²* +³@ +°*±&+´+²& +³@ +±N+±:C± 99°µ .>@I$9±&*± 99±7²999±°L9°#° 9°Fµ ! I$901726325.#"'675!5!##"'72>54&##4&#.#"#"&546x4& (›@z™þ®wò9F0/")( Z72,'(#-+´H+°>±$+±@G22´#+°2°#± +´+² +³@ +±M+±7° 9°0´(.9E$9± #±99±$²%+@999°³(-.$9°A³0>$9°5±7B99±9K°9010#4>74'#5!##"'73254##5.#.'474.#"725.'#7#3c6 'jçþ1"#4"  ‡3Q*  R+&3)?!? FD�úS3 n 33Y)1&/ &EþŽ|5F 1#2 V$878¦L=0)ÿÕÿx¼.HUZ*°/´ +² +³@H +°:/´?+°O/±#F33´Z+°02³ZO+´I+°+/².SV333´,+°[/°$Ö´!+²$! +³@$+ +°!± +´+°±+°S2´L+´W+°L±H+²NV222´G+°/2°G±A+´7+²7A +³@7. +±\+±!$°*9° °(9°²IT999°µ $9±AG±:<99± °9°:±N99°?³<$9°O³7=L$9°°!9±IZ°(901&#"&546325.#.'474&#"#4>74'#5!##"'73254.##25'.5#7#3‹Gg6)KE#3O-Q*  RJ'6'jçþ1"#4"  ,(3÷BV? +">�úS3 ?�7/G'6:9[5F 15? !33Y)1&/ & þ Um@8¦U)0)ÿÕÿà§. )-dQ°G/´B+°=/´+²= +³@=9 +°R/´X+³XR+´%+°/°3´+°-2°3/³ *6$3´4+²34 +³@3` +°e/°cÖ´]+²c] +³@c3 +°]±J+´@+°@±+±*L22´+°2°±+´!+°!±9+°2´8+²89 +³@86 +±f+±]c´ 2U.$9°Jµ +ORX$9±³=BDG$9°²%(999±BG±E99°=±DJ99°°L9±%R°9°²'OU999°X±(99°³!]c$9°± [99°3±.990125.'#2654&#"2#632#"/'#3'.'#5!##5.#"327#"&547.'#"&5463.'#"&54� '/"/<3M >) OS¢#C  fR<ùkÒI3m+  "4!&&+'Û!A)'‡*? ¹ Âi™=9)!* 5 Ä< 33ýå8'^ /)0 -)#!&ÿéÿ»….!;Aʰ/´+² +³@ +°/´"+°./´3+°/±&33´+°B/°AÖ±22´:+°'2²A: +³@A +°:±7+´++°+± +°%2´ +² +³@  +±C+±7:³".0$9±± 99±"µ%:$9°.°A9°3°09°µ!+19<>$901675!5!##5.#"#"&'732>7&'2##"'732>54'6!„†þ¾œS395%,#5*!/ N˜S> ¢BG # V._a]9idR'33ýÀl0#)3@ ˆ,„„R.A/<'þì  <Z'ÿò߇ Ká²+°03°9/´%+²9% +³@9< +°F/´+²F +³@FI +°/°3´+´+² +³@ +°L/°7Ö´(+³ (7+´D+°D/´ +²D +³@D? +°(±+±22´+°2² +³@ +±M+±7D±!999±9²(.1999°%±#?99°F³ !B$9°±99°°9014&#"632%4>32533##54&#"632'>54#"#"&5467654#"#"&Zx=UBSB,þ´>*y>3RR3S>`D . %' O$U:)E!?;|eL 5—+1!rÓY3þgPlh"% $)+&9G   .A¼²+°:/´$+° /°3´+°2°B/°>Ö´ +° ±7+´'+°'±+°2´ +²  +³@  +° ±+´+° Ö´+±C+±7 µ$-/<$9°'°9± °9±± 99±:· '.<$9°$³ >$90125!!67&547'5&#">32'>54&"#"54>yPG.¶þ}e•,7ƒd-Iq09"*+ #& ! J8-.'…3çƒ!wCq8Nmx7³2r²<6& $'! $   -D+1ÿÁ8{GQ°"/´H+²"H +³@" +°/´+°D/´3+°,/° 3´+°2², +³@ +°R/°Ö´/+°/±A+´6+°6±+²%K222´+± 22² +³@ +°±+´+±S+±/°F9°A@ ",#3=?EH$9°6±:P99±°9°±99±H"°9°·#=>?L$9°´ %&9:$9°D²6AF999°3±/99°,°9014632533#632&5474&#"#5&#'675.#">32'654&"&25\GaJ1´²@23Cw2K¡"0!?)+ (  '$fJ 9¤,g-* ¥6Pn¾M3½UQUbCdE) þ¸Am@H< -03-1 (!  #"U' ) Ä:­ÿ%8{MW]°/´[+°I/´<+°*/´+°/°83´1+°62²1 +³@M +²1 +³@14 +°^/°.Ö´+°±'+´+°±M+³ 3NX$2´L+±5922²LM +³@L8 +°L±D+´?+±_+±.°,9°'@  #%+1[$9°± 99°M±U99±DL°I9°?±32'654&"&54632533#632&5474&#"#5'=2SU*!9M7X2K¡"0!?)+ (  '$fJ 9\GaJ1´²@23  Jx2,f¨-0:.5@H< -03-1 (!  #"U' ) =6Pn¾M3½OWqFCdE) þÝ   º¬-+9+ÿÊï{L² +²+²#+°/´'+° Ö´++°D/´8+³58D+´G+°0/°3´+°2²0 +³@ +°M/°$Ö´+³3$+´J+°J/´3+°±B+´;+°;±-+± 22´ +°2´+±N+±3²5?G999°B@ !'08>D$9°;°9°-±)99± ²$999±+±)-99±G'±>?99°D±;.99±85±3J99°0°9012533##54#.#"#"&546326325&#"32632'7674#"#"&546Å9M.3CC2#- .%$ -0ù›7#)"!E( 6)%1^+ÿ–ï{=ï²+´+°/´+² +³@ +°5/´)+³&)5+´8+°!/°3´+°2²! +³@ +°>/°;Ö´$+°$±+´+°±3+´,+°,± +±22´ +°2´+±?+±$±&899°±/099°3·!)5$9±±99±8±/099°5±,99±)&±$;99°!°9012533##5&#""&54632&#"32632'7674#"#"&546Å9M.3CC3=_%"/>,.H$V^!F O",E**8+ N  W15HÇM3ý›<‘ *2(#C210›7#)"!E( 6)%1^+ÿoŽ{:@ ° /´ +°/´;+²; +³@: +°&/´+³&+´)+°/±7?33´/+°52²/ +³@/4 +°A/°,Ö´+°±$+´+°±+°22´;+± 422³;+´ +° /´+°;±:+°>2´9+²9: +³@97 +±B+±$µ !)/$9±;± 99± ± >99°;°9°)±! 99°&±99±±,99°°29014&#"3"&547&#"32632'7674#"#"&54632533##'32#R!  *&V^!F O",E**8+ N  WC9M.3âC3l72l[? (&"=›7#)"!E( 6)%1^5HÇM3ýtÆ7ýÿçÿl¿.9ײ#+´$+²&+°/´*+²* +³@ +°7/´+°/± 33´+°:/°Ö´+² +³@ +³'+´ +°±+± -22´+² +³@ +±;+±'°9°°29° ± 199°·#$*37$9±#²'-.999±7*³ 12$9°°9°±990127#'47#5!##5&#".546325./7##"&²& !�&')Þ3fOØ=3=_%&+>,.H$„JN&H“ $ #a0 133ýqP‘ *2'#C21$AZ (R8ÿÕ.>DR²+°/°?3´ +° °/ Ö´0+°/´E+°9/²747474+Ñ' ;Wiªœ$:/3  ~#k%3'4 *nHU ³cK:d c 2Õ'i ~x50%"*þì2  3FU&$!33Õ4F“±&ÿóÿ™Y.YbkD²+´+° Ö´+°W/°]3´L+°'2°L°. Ö´/+°E/´c+°74#"".54>7&'#5!##"'#'654&##5"72654+];9QH* ?A *)5  [D k&3"  " -‹fU(:Xi«œ$173†K;)á c 22( W6%0 ,<) +!  34 U&   33%i ~x60$0þ…AH“ æ %ÿòÿýÛ._hty‹²+°M/´W+°]/°"3´F+³F]+´+°/°83´ +°y2³@ +´`+°`°i Ö´3+°/²ru333´+°2°´e+°z/°RÖ´S+°S±+´D+²D +³@ +°D±Y+°c2´K+°; Ö´6+°K±0+°r2´l+´v+°l±+±nu22´+°2°±+´+² +³@ +±{+±;D@ @IMW[]`eg$9±0K´"'3is$9±±99±WM°9°±%n99°]³'KY$9±F´-0l$9°´D[o$9°@°I9°3°>9±` °B9°i°R9°²Scg9990147#50!##"'73254&##5.#&'4>?4&#""&=47#"'3267#".573254'#"&72654#725.5#7#3�6Ñéþ$+73#  =J3Q* & C<$ %7#_�5_>%34b6U)2)5š'(- ¬=[@?4&#"725.5#7#3ªA =?W 5_>%35b5*2)45Úñþ*:93#  ‡3þ~())$y$ ":$_,C?: 38Q* & C<4=[@54'"'#"'3267#".573254'#"&72654#Œ6Ç3f *(<44Ld3TT3±87p4(0 %7#_�5_>%34b6U)2)5š'(- ZMT3A4?JJ>`ÝV3þR-…1C*5)!#2940_yHjv1 ;ŒiI*=9“%ÿçÿúé1_g²9+°T/´+°/´ +°%/°3´b+°/²'`333´+°h/°Ö´ +² +³@ +° ±D+´6+°2°6°" Ö´e+°e/´"+²"e +³@" +±i+± °W9°D@ '*1RTX`b$9°e²?%g999°6³9>HM$9±T9±8@99°³6ADR$9°³HIWX$9° ´1LM$9°%³4O$9°b±-399°²"*999017>54&#"327#"&5467&'#5!##"'#67.4&54>7#"&'732654'†)58"%(2 k#@64 ( =MHk-4    $O3="-}$ÒB">' 3!+22 %N!@%2kyHY+    R=.'; -+ ÿíû.5>K² +°#/´-+°3/´+°/´6+³@6+´+°/±G33´+°2°´;+°L/°(Ö´)+°)±+´+² +³@ +°±/+°92´!+°J2°!± +°F2´ +² +³@  +±M+±/¶#-3=$9°!±99° ²999±# ° 9°-°F9°3²!/999°±C99°±199°²B999±6@²A999°´()9=J$90147#50!##5./7#"'#"'3267#".573254'#"&72654#27#�6Ö<4„MN G%7#_�5_>%34b6U)2)5š'(- ¿P!�M82ÞZMT33þA>] (R@#2940_yHjv1 ;ŒiI,=9“%/ $%4aÿòÿ™û.-6CdF²+´V+²V +³@- +°° Ö´Y+° /´+°!/´L+°F/´.+³8.F+´c+°'/±*?33´(+°(´3+°e/°Ö´+°±$+´J+²$J +³@$( +°J±+°12´Q+°B2°Q±-+±>[22´,+²,- +³@,) +±f+±J@  !&5FOS$9°Q±D`99°-´V_ac$9±V°[9± Y°\9°±>S99°!²Q_999°L±;`99°c±$99°F²:JO999±.8²9DH999°'´15B$901.#"#"&'#".57;67654'#"&547#5!##2654#27##"'3267326325./7#"‹DN EW5_>%34b6  .)2)56Ñ <4þœ'(- ¿P!�M82Þ*%7#_HD? 2 46„MN G2' ?6Hjv1 ;Œi& !,=9+MT33ýž)%/ $%4a#2940_U, +0>] (Rÿóø."Nÿ²,+°":#Œ6Ñ84`#$%T7%#O5_>%34b6U)2)5Â%963Màƒ$3 !#0 9MT33þ­‚ .!O,B%Hjv1 ;ŒiI,=9ÿèÿnP.1:S:°/´+° /´+²  +³@ +°/´)+°//´G+°A/´2+°/±;33´+°´7+°T/°$Ö´%+°%±+´E+²E +³@ +°E±+´+°±++°52´L+°=2°L± +°R2´+² +³@ +±U+±E¶)/9CG$9°´-27AJ$9°+±99°L´ ;N$9° °P9± ±R99°°P9±)±N99°/±+L99±AG³-EJ$9°2°C9°´$%59=$90147#5!##54&#""&54>3&'#".573254'#"&72654#7#"'3267y6ÇhC3]+ '+(+5_>%34b6U)2)5š'(+"ˆ,*":#_,ZMT33ýs;Z(* / Hjv1 ;ŒiI,=9“%9 * #2940_7#,.ùÿëª.#17¿°/´$+°/´+°/´7+° /±233´+°8/° Ö´+°32²  +³@ +°± +°22´$+°2°$´+°/°$±'+´+²' +³@ +±9+±°9±$ °9°'°9±²!'999°7±,.99° ²1999017265&'"&5#5!!#"&=2654.'&/#–2qoJ0b¿þÊ:O#ºG"`¶&£  \4À i7k}=]þû$35!m33=H  JÆ ‡3C£8 $… 3H ÿçÿµ+.2=EK° /´+³@ +´ +°/´3+°C/´F+°/´-+°-´8+°%/±(G33´&+°L/°#Ö´>+°H2²#> +³@#% +°>±C+°F2´<+°)2°<±6+´+°±+´+² +³@( +±M+±C>° 9°<² 999°6°9°°9°°09±@°9±3°9°C±<99°F°9°°69±-8°E9°%²*;I99901.#532654.'#"'#"&5#5!!:322654#"&'3265&'5#Ÿ_A-[/7"Da{=GVx _1u?0bDþ=WFNþæC+.ù1rrF¸¸e2]:(0$7<'4[2 @]Eg6 m33$@ZK†z$~<]<£ /Hÿçÿ +.@KSY°/´+³N+´$+°/´A+°Q/´T+°)/±,U33´*+°Z/°'Ö´L+°V2²'L +³@') +°L±Q+°T2´J+°-2°J±D+´+°±@+°2´?+³?@+´4+²4 +³@4, +±[+±QL°$9°J²!999°D³  $9°±799°@²1999±N°79±A°!9°Q±4J99°T°9°)´1DIS$901.#'67򂂮.'#"'#"&5#5!!32&'#2654'.'3265&'5#G  JP, AYlnGVx  _1u?0bDþ=gGN_A-Z25"!/4ÂC./ù1rrF¸¸e   > *0C0<4[2 @]Eg6 m33)@D2]9*/$$$ðüK†z$~<]<£ /Hÿçÿ7+.JT\bW°/´+°° Ö´+°/´+³W+´.+°)/´K+°Z/´]+°3/±6^33´4+°c/°1Ö´U+°_2²1U +³@13 +°U±Z+°]2´S+°72³SZ+´ +° /´+°S±N+´&+°&± +´>+°J Ö°3´I+²IJ +³@I6 +±d+± U±.W99°° 9°S³+$9°N²)999°&²A999° °;9±±F99°±EH99°.² 999±W² A999±K)°+9°Z±>S99°]° 9°3´&;NR\$901.#"#".547326325򂂮.'#"'#"&5#5!!32&'#2654'&'3265&'5#xC L55 .32>32#"&'#4&'#&'%4&#"32654&#"5326if0C G™QN5+'W@5o "#!)=b*7%B3"- ,0g*^3=c}o Hà$5a/W2% $-Õb+ ú@33@?%  S x$ )!`QE]A' 4&7-gBÈO-yQÞ xE67"+3%ÿåþ³±.,5:°/´+°/´-+°/°3´+°6/°Ö´-+°2²- +³@ +³-+´ +° /´+°-±,+°2´++°+°( Ö´1+°1/°23´(+²(1 +³@( +±7+°6ºîtÂt+ °2.°4À±%#ù°"ÀºñàÁ”+ °"³#"%+³$"%+ºí4ÂÓ+ °4³342+²#"% Š Š#9°$9²342 Š Š#9¶"#$%234.......µ"#$%34......°@±-± 99°,² 999±-²*599901.#"&54632#"&5#5!!#2>54.': +="6(K=+4K/+n+cÌþÊ=2-* 4¿#bDLgþü*9#7 /G =7<09N Ô33=&(ýÏ‚Yi ÿæÿù$.#uS²:+°]/´m++³m]+´X+°/´Q+°B/°q3´2+°2° Ö´s++°/´.+°(/°+3´)+°v/°$Ö´+²$ +³@$( +°±o+´!+°!±+´O+°O±+´U+°U±>+´7+²7> +³@7+ +±w+±o¶',]ms$9°!°Z9±O±.99°µ0GSX$9°U°F9±7>³2:@B$9±X°<9°m´7>UZ$9±Q±!99°s°o9°B±OS99°³5@H$9°2°I9±.´$4M$9°(³0ef$901%2654'"#".57"'327467#5!!327327.547#".'327#"'#".'&'73254'#"&ã( #~4 $7/%:þ®)¼>ýæ‚! @l7J 22 7$:@C1cF 8!;& 3/L$&B‰!  1#4`M8>.K 33GQ =Gf�%=#`O (!+(Z2Bm#-!@z)2K..M"6ÿæÿ7$.)‚q°j/´z++³zj+´e+°/´^+°O/°~3´8+°8°" Ö´€++°/´4+°./°13´/+°ƒ/°*Ö´ +²* +³@*. +° ±|+´'+°'±+´\+°\± +´b+°b±K+´>+°>°A Ö´B+°B/°3´A+²AB +³@A1 +±„+±| ¶$-2jz€$9°'°g9±\±499° @ 6FGT`e$9°b°S9±BK°O9°>±8M99±e°I9°z´ >Kbg$9±^± '99°€°|9°O±\`99°"³;MU$9°8°V9±4´ $*:Z$9°.³6rs$901%'2654'"#".57"'327467#5!!327327#5.#'67&547#".'327#"'#".'&'73254'#"&„,J¤( #~4 $7/%:þ®)¼>ýæ‚! @l7. 3Q,!K\2 7$:@C1cF 8!;& 3/L$&B# á!  1#4`M8>.K 33GQ =,J7�È3 *0K.`O (!+(Z2Bm#-!@z)2K..M"6ÿéÿG{.QVܰ@/´ +°/´O+°H/°K3´I+°W/°.Ö´/+°/±D+´ +²D +³@DH +° ±!+°R2´ +°2°4 Ö´+° ±+°2´+² +³@K +±X+±/.°,9± D°&9°!@  %(16@GLT$9±²O999± @°69°± D99°O± 99°H²./99901%47#"'327#5&##54&/67.5332654'#".5467#5!!327³6 �@.2J , ‰!20^?1#<9S(1°$;  ,#2æ’þ¯S;?·C.N!–ˆUp+' 07S)’ r"W2þºL7© BS8+CMg9þÝ%*)  ,,*7*33!3þ»# +ÿÍT·.+?HÔ°/° 3´+°/2°/´F+°62°F´3+°>/´+°2°#/°&3´$+°I/°Ö´+°±+´D+²D +³@# +°D±1+°;2´+°2±J+±1D@ "',68>@$9°°9±² 1999°3°9°F±99°>µ,*@D$9°°9°#°B9012#"&'#"&'732654'#"5467!5!!63254#"'32654&#"&'32696)'€P S,]y0dO(7 =/e5þ÷êþz.M<^06@ %1'Bš/D61ÀK65k@$2É– ‰­D#/~&U332V`šCY5:2B99°±2C99°±4T99°¶%(0HQ$901%#"'#5./7&#""&54>32537632%32654'#"'732654&#"iF$cF. & $*(æ"P*;# )/+7654&#"&54632>32#"'24&#"3254'#"'7326&'32�qzƒ/34+44(#ve A1,?%c- @!<^H&4.1.&0"((.l2&?M5E/Q*  )Ø|- *‘O!@r''' E4 *A!% ,B)2+5;HB=!7)-"?9–LK6m†( (7ëC)$ ÿÇ!0UkE°/´+°/´+°T/´Y+°_/´d+°i/´;+°& Ö´1+°l/°Ö´+³.+´)+°±!+´+°±+´ +° ±O+´H+°H±[+°g2´B+°>2±m+±.°9±)±,99°!°+9°±&199°@ #56V$9±O ±ab99°H·;KRTY_di$9°[°]9°B³@DFJ$9±³ HO$9°±99°T°F9°Y²!D999°_³B[$9°dµ+,@]a$9°i¶).5#>V6$901327#".'32>4'#"547.#"&54632>32&'&5467#"'3254'#"'732654#"> +!- & 5T22 h; !# ,Ia $8&P;+*8#>"#! H$%"W-#<-* .*)[yV/) N*0sŽ *B_1‚!%9 '.1X'(+%%. /^6?(W#)++¦C.  - #8!ÿ1ó- $i?°?/´P+³ P?+´/+²/ +³@/2 +°P°M Ö´B+°/´+°/´%+°W/´b+°j/°EÖ´J+°J±_+´Z+°Z±S+±722´+³!#5d$2°± +°32´2+°2±+°2´,+°(2², +³@ +±k+±JE°G9°_±BH99°Z²M;]999°S¶:=?P\b$9±2µ %/$9°,°*9±B/±1=99±M ±S99±P²,999°@ !#*EJZ]$9°µ(GH_e$9°%°d901%7'72654'#"&5432654&#"2#"'#4'#5&/67&#"#"&547326324&#"&54632>°L7U.h,}1 )9d_80:)/4%!*439?[0<€?> MDT$,A?IP  .m &—;.))&E! Kà*x# º#< $ˆ t\A-7/>+5þßU.£F\9,/oS&C8M; Bw. '6:Œ>f$ ÿàÂ'E°/´ +°/´6+°;/´@+°/°23´+°02°F/°#Ö´)+°)±+´4+²4 +³@ +°4±9+´C+° Ö´+°9° Ö´0+²0 +³@02 +±G+°6º4À#+ °+°,À± ù°À³ +,....³ +,....°@±)#± %99°± &99±4¶ 6;>@$9±9°9± ±99°6°9°;´ =C$9°@°>901%#"'732654'#".=#5!54#"&5473723!32654#"'632P#?*Œ\.Lq!?6.)‚~[˜5G!* aš3D.þÓ#;T *")ð)/&-ݾ( (*! õ35 <1) $ / E3 3ò7q9-$!B2Hÿôÿ;ê'`U°/´+° Ö´+°/´+°%/´J+°O/´T+°,/°F3´-+°D2°a/° Ö°72´+´=+°±*+´H+²*H +³@*, +°H±`+±!22´_+°M Ö´W+°1 Ö°.3´D+²D1 +³@DF +±b+°6º4À#+ °?°@À±4ù°3À³34?@....³34?@....°@± ² 9999±*=² :999°H°9°`@ %JORT$9±1M°Z9±°9±² 999°%² !999°J°#9°O´QWZ$9°T°R901.#"#"&547326325#"'732654'#".=#5!>74#"&5473723!32654#"'632#g>8RF* 7I , .3(:�\/KrD6.(–�\˜5G"* `›4B0þÓ#;T (!")3‘( V6)+ '30 *…ݾ#%* *" õ3 5 <1+ $ / G1 3ò7q9-$!B2L'þ®ÿÇÿo 'I<° /´ +°/´+² +³@I +°)/´+°/´"+°./±F33´/+°D2°J/°8Ö´=+°=±,+´+², +³@,. +°±+´+°±+´%+°2 Ö´C+°%±I+°2´H+²HI +³@HF +±K+°6ºùÀ2+ °?°@À±5ù°4À³45?@....³45?@....°@±=8°:9°,°;9±² )999°²"999±2± 099°%² 999± ±99±±%99°"° 9014&#"3".54632!32654#"'632#"&5#5!654'"&5473723##«Q"    5'73þÂ;d&!"-:c4,'d[[š3G!*a™6AµB3[@ (!/7ýþ´6ŒD$"1'6vS?'O3 2 ?/) . F63ýtÿâ5n{DO6°4/´=+²=4 +³@=7 +°/´M+°+/´+³(++´+°/²I333´+° 2² +³@ +² +³@ +°P/°7Ö´8+°8±+´K+°K±@+´/+³/@+´G+°G/´+°-2°/±&+´+°±+° 2´+° 2´+±Q+±GK³4=M$9°@°B9°°I9°/±+99°&´"#($9±=°"9°M²#/@999°+°B9°(±99°°E9°±G99°° 901%"&=!5!2533##&#"2632'7674#"#"'#"&'332654'7&547#326!#þýb9N-4BB4T`"DL #,F))6+ T 0E:qu30M054''#"=#5!#3267#"&'#".'732>54mþ¿7730)%&7 #Rú^1à~ú S-6aEH_1W/2MI</5· 0 $ȇ 7975e;"2)%:(7€#63¡33¬T]4BzH^0IJ�j þÎ!0)"ÿÙÿo¬.;ò° /´ +°/´+² +³@; +°!/´(+²(! +³@($ +°0/´+°5/±833´6+°/´.+°/´J+°4/´9+°*/´+°'2°E Ö´ +°M/°Ö´G+°G±+´ +° ±A+°2´++°+±1+´;+° Ö°3´&+²& +³@&) +±N+°6º;À$+ °#°%À±ù°À°#³$#%+²$#% Š Š#9³#$....³#$....°@±G³ E$9° °9°A°9±1+²79>999±.°A9°J°;9°4±1699°9³7BG$9°*°901#".54>3253>74#"&5473723!32654&#"'632#"&=4&#"327� % :&#? ÷[—8E!*4�”/þÔ@b  "'KˆC/(h[! , 5#,6&.,c 5 ;1)# w 3þ™ŸI %"nO±=(Ös_(& ÿh'gœ²+´+² +³@f +°° Ö´+°/´V+°*/´&+°\/´a+°R/´9+°O2°" Ö´4+°h/°/Ö´$+°$± +´+°±C+´H+°H±+°82´S+°S±g+°2´f+³Yfg+´c+°f±= +°:2´N+²N= +³@NQ +±i+°6º;À$+ °K°MÀ±@ù°?À°K³LKM+²LKM Š Š#9³?@KL....³?@KL....°@± µ "'(*4$9±HC±E99°±F99°S°9°gµV^_$9°Y±\a99±°9±V± 99°*´ e$9°&±Yc99°\°^9°a³$/_$9°R°8901.#"#".547326325#"&=4&#"37#".54>3253>74#"&5473723!32654&#"'632#æD>/E#.EF <56;5/(h[B  % :&#? ÷[—8E!*4�”/þÔ@b  "'K(3c' ,.*+ *;) +›>=(Ös_M- 5#,6&.,c 5 ;1)# w 3þ™ŸI %"n8Fþ© $U1?Õ°"/´9+°/´1+°/´+°° Ö´,+°@/°Ö´/+°/±%+´5+°5±+´+°±)+´2+°2±<+´+²< +³@ +±A+±5%´',1$9±)³ "9$9°2² 999°<°9°°9±9´%'5<$9±1¶ )/2>$901".546324.5473##"&547654&#"3732654'&y &E3lB99<8Í«3wW6c«a*#)ZÅ[c2$ET" * 8%327¯ %N?¿i4/7Q,/ %&)*- $  "/(" ='(5h49K­ "KmR;& # XKC<$ .E% 1 )FDZ,!®.;¸°/´$+²$ +³@$ +°./´ +°4/´+° /´+°54'#"&=&#"&ž7*.5Lþç`K .U6RƒL33 >GV80I$S%#40!(Ÿ%7;n3ÄT2l->2$Gd_&a“M/ *<2#*@3;[ÿöÿh¯2]²+´+°° Ö´+°/´#+²# +³@# +°*/´0+°E/´A+°:/´M+°Q2°^/° Ö´+° Ö´+°±H+´=+°=±]+±&22´\+°T2²]\ +³@]- +°\´4+°4/±_+± ° 9±H° 9±]=@ #26BEMQ$9±\4°W9±°9±#² 999°*³ &Y$9°0²(2W999°A²4CT999°:µ67BHP$901.#"#"&547326325#"32654'#"&54632654'.#"27#"&54>327#vCI L[.DG 2 46%3¿i4#6K&/ %&)*- $  "/(" ='(5 %3c' LA(- .;) +­ #`v\ & # XKC<$ /E% 1 )FDZ*4þ·1ÿ7².FU°+/´P+²+P +³@+$ +°P°S Ö´(+°I/´=+°/´+°/´+°/´+°V/°6Ö´7+°7±0+°2´M+° 2°M±+°2´+² +³@ +°±$+°G2´#+°#±B +´+±W+±M0± 299°´ +KP$9°±=I99°$³(S$9°#±D99±P(°U9±=I²0GM999°²"2K999°±B99°µ D$9°±679901%"&=&#"&546325!!3267#5.#"#".547.'332>54'#"'32632¢(4/!(8)02LþèdK3C K55 ->3 :FT?/I$SM4FmQ 325!!32654#"'632i 3cZ. &"2(2F`þÔ (w ,.ƒ/7Ökc)%- 5",@ H$Ÿ3þq„^&"!<Yº?ÿrö‘:»²%+´)+²++°!/´1+²!1 +³@! +°/´+°8/°3´+°2²8 +³@ +°;/°,Ö´#+° Ö´+°#±+±422´+°2² +³@ +±<+±#·')18$9±!%±,499±°9°8² 99901327#"&54>32533##5.#"37#"&54>3254&#"r,  )F>)3& 3__3f[B L!1)1GY$-H‰>3^+1:('Êc3ýwª!icM/=B+@ H$ê+w4?ÿo{‘<ô°/´+°/´+² +³@ +°)/´$+°+±!³&)1$9±±99±±99°°9±$)°'9°<²&,699901%2#53##54&#"3"&5474&#"327#"&54>32533#—;3…C3Q" *$Y$-H,  )F>)3& 3,,46ý33ýt6@ (&"3+w4<>3^+1:('Êc3ÿÝJ.*.¤°/´+°/´+°/´(+°+/´,+°//° Ö´ +° ±#+´+°±+´+° Ö´+±0+±¶ !($9±°9±±99°²!999°² #999°(± 9901#".'732654''254&"&54>32%5!ö cM=vX 1f¬(=" e2NN*I-A97Býçmg? 6A_{»uþxV+ 2^!0 .!@#6 F^33ÿÝÿ*J.AE*°-/´.+°3/´?+°B/´C+°F/°Ö´+°2°±:+´5+°5±+°2´ +° ±) +´ +°0 Ö´+±G+°6ºÂ™íô+ °.°À±ù°À°³+°³+³+² Š Š#9°9²9¶.......´.....°@±:°!9°5°9°@ &-.378?$9° ±+299± 0°9±.-³ +8$9°3²7:999°?°901%#5.#'67.'732654''254&"&54>32%5!‰XMm 33R,!(:Y>'1''3(=" e2NN*I-A97Býçm4 Í? 6B0þê2,/!PyzTIK!C!0V+ 2^!0 .!@#6 F^33ÿñm8²² +°)/´(+°#/´.+°32° Ö´+² +³@ +°9/°,Ö´&+²&, +³@&) +°&±+´+°±+° 2´ +°2²  +³@ +±:+±&,°9°´.3$9±) ³$9°(°9°#²,09990133##5./32654''.#""&5432>7b\;tY2HH0VuY<43p1!-  B>6u)+ &‰.X*Yÿ?3ýö1]AZD.++$ 5 %% 09&h; 2 #1ÿßþçU.<@ò+´+² +³@< +°/´!+²! +³@! +°'/´4+°=/´>+°A/°Ö´+³ +´+°±/+´*+°*±<+°2´;+°;±$+´7+±B+±/³ $9°*°-9°<´!',4$9±!±:99°'²-/799901.#"&546325#".'332654&#"&54>32#5!p +="6(KE#3M.Ca<" 3 ")=(BLF57 + 8&Kc-(3þovÐ*9#7 /I'69:Ÿ=v†]K^b6"\IFa!#'" '}];cþ£33ÿéÿßE.Jí°./´-+°"/´6+²"6 +³@" +°:/´E+°/´ +°/°3´+°K/°Ö´+°±3 +´%+°%±H+´+°±+°2´+² +³@ +² +³@ +±L+±°9°%´ :E$9°Hµ"-.68$9°°9±"-±399°6°9±E:±899°³?$9° ±<=9901"&54632!5!##54&#"3".5463&'#"732654& +0& )1"@B þ\H2} #(/  ‚].  ,!.,»  !1 7%f*�33ýä6!U )+ #<*D%8ÿßÿo¬.@N° /´ +°+/´8+²8+ +³@81 +°22³8++´+² +³@ +°>/´%+°/°3´+°A/° Ö´+°± +´+°±;+´(+°(±+°2´+² +³@ +² +³@ +±B+°6ºÀ’÷}+ °1.°/À±2ù°4À°1³01/+ºÁTó+ °2³324+²324 Š Š#9²01/9³/034....µ12/034......°@± °9° ´%+8>$9±;± 99°(± 99± ± 99±>8² (999014&#"3"&54632!5!##&54>32#".'332654&#"6Q"  *5&82ý©ÍC3þÆ + 8&KceT9X8(3 ")=(BLF57[@ (&07ý33ýtò'" '}]\|0JrgCK^b6"\IFa!ÿßÿGU.MQó²+´2+²2 +³@2/ +°2°; Ö´J+°/´+² +³@ +°/´(+°N/´O+°R/°GÖ´>+°>±#+´+°±7+´6+°6±+°/2´-+°-±+´++±S+±>G°9°#°D9°´!;ABJ$9°7° 9°6µ(4L$9°±299±;±L99±±-99°²!#+99901!25#".'332654&#"&54>32#4&#.#"#"&5463265!["#"<,( 3 1D.BLF57 + 8&KcA2,'(#-ë9+ &*/6-$F1û33ÿÑ{>ú°#/´+°5/²8333´6+±22²56 +³@5 +²65 +³@6 +°?/°3Ö´:+²:3 +³@:8 +²3: +³@35 +°:±.+´)+°)°+ Ö´,+°,/°03´++°'2°+° Ö´<+°7&&547'#5!##5./7#"'Ð& � ß3fä2t2ƒd-n <3ƒKN “ $ a0 1èDEþPLcdY³233þA>] (RMrWGÿÓÿõ-.,‘² +°$/°'3´%+°-/°"Ö´)+²)" +³@)' +²") +³@"$ +°)±+´+°±+´ +° Ö´ +±.+±)"°!9±±99°³,$9± °9° °90167'&547'&547'#5!!>7)'4z")3 2)< 2TZþ,k(—N!* `*oZ8`Pc,H! ) (37>7#5&'“R,!EZ  2F?2TZþ,k(   (")3 % J–+0G//1,H   + (3Dz3+°6/´+³6+´9+°/° 3´+°?/°;Ö´<+°<±+´"+²" +³@" +²" +³@ +°"±+´(+°(±+´1+±@+±"°9°°9°(±99°´%&6$9°1² 4999±93°49±°9°´1;<$90172632&547'&547'#5!!>7>7'&#"#&'7Ž   8!#2  2hnþ,k( ')-X")3#F"¦W!- *Q 02,H !6- (332632'ç." ;3 FGµ! 4F0þIf.@;°s3@Š222´<+°&2°<±4+´/+°,2±E+±= ³#@$9±4<°99°/±)299±2@  ')9;?B$901%.#'67/75&#"##5!!>32632&54654'#567  JQ,!!2µ! 4F0þIf.@;.#*3s%†   >!)0+wD}*33©'I5+ '0H54'#"&5463367&547'5#5!!>76ª5qVN™43O- (0" 0!&"%   FB>)¡JþŠG0B?H8G`«b?M2 4"75& 0#)#4¾33‹" D,ÿËÿÊ.C °3/´+²3 +³@3/ +°/´+°/´ +° /°#3´!+°D/°9Ö´>+³>9+´%+²% +³@%# +²% +³@ +°>± +´+°±0+°2´/+³+/0+´+°/´++±E+±9°;9±%>±<99±· 36A$9°0±(99±/+°)9±3°9±±9>99°³ ;<$9° ³-.$9° ²+99901%25#"&54632"327&547'5#5!!>7#5&#"#"&5473265!'$2&'4# @ FB>)¡JþŠ/SV*38 'SP25:'Kª -1&%#@)#4¾33‹) D, þ²5KL;,=)ÿåÿ7/.[e°/´+² +³@[ +°° Ö´+°/´%+°//´:+°5/´4+°2°F/°I3´G+°\/° Ö´+³ +´+°±D+´K+²KD +³@KI +²DK +³@DF +°K±2+´7+°7±[+°2´Z+°> Ö´Q+°Z±*+´W+±]+± ° 9±°9±KD±C99°2°9°7²999°>³%4/5$9°[±<@99°Q°N9°Z±OS99°*±,U99±°9±%³ Y$9°/± 99°:±*W99°5²2,<999°4°S9°F³>CQU$901.#"#".547326325#"&'332>54'#"&543367&547'5#5!!>767#„B K55 .7!"&547&547##5!##5&#"27d'h2- *þóy%"V<7./MQ3U0  83Y #z0 $sþH5= MK0BG33þAp  ' -ÿYÍ505¯°/´+°/´+² +³@ +° /´ +° Ö´,+°6/°Ö°)2´+°2°±+² !1222´+² +³@ +±7+±°%9°@ ',.3$9±±!99°°"9° · %)/15$9°°.901"753##5&#""&546325./7&54632&�#y…R3=`#.>-TFGkMp^),*' ŸyUxV DJ3ý^P‘% )3'#CcLGK)[F=8Y°?À±4ù°3À³34>?....³34>?....°@±" °%9°± $99±<7³) 9$9°±:99°G°9°ZµIPQ$9°L±NS99°Y°/9±°9±I± 99°N@ " &+%PVX$9°±'Q9901.#"#"&547326325#"&=&#"&46325!5!654'"&5473723!32654#"'632#ÂC I LZ.EG 9466;,'<6!(9(5<þÕ"[š3G!*a™5B/þÓ+°>±B+´+²B +³@ +±O+±K/±1699° ²-24999°³'(;I$9°*° 9°>²999°BµE$9±4@´(#BI$9°3±199°-²*9>999°;±E9901654'!53.5473##"&54>7654&#"27#"&5432654&'è*þñü%  F 4HΰT$4>./U<(- a <-§ .:8&.MC%!%34-*D<)%4‚#3sv5S. G4/*%. $/^.$1ùµkFsM20 /7T3;OA8   '+Ã3k33ÀH^HtBq}I 5Pb?,\F!a".:0%"(ÿçÿEe.WK²+´+°° Ö´+² +³@W +°/´'+°./´O+°>/´9+°5/´D+°!2°H/°K3´I+°X/° Ö´!+°!± +´+³A +´7+°±F+´M+²FM +³@FH +°M±W+°2´V+³*VW+´S+²S* +³@SK +±Y+±A ° 9±7°9°Fµ1;>D$9±WMµ'.O$9°*±,Q99±°9±° 9°'±99°.² U999°O±*S99±9>²1,<999°5±AF99°D± Q9901.#"#".547326325#".'732654'#".'&#"327#"&546325!5!!327#ÓC I/E#.EF :2965FsM20 /7T3;OA8    '+!:þÉ~þìQL3…' ,.%0 &;) *©+Bq}I 5Pb?,\F!a".:0%"(3k33ÀH^-,þ¦ÿÓ^.,«°#/´(+°/´+² +³@ +°/°3´+°-/°Ö´ +° ±+°2´+² +³@ +² +³@ +°±!+´*+±.+± ° 9°± 99±!²&'999°*°(9±(#² &999°°901%"&=&#"&46325!5!!>54#"'62Q,'<6!(9(5<þÕ‹þÓ 35%*>.ƒ@&£vR3L’33þq 6Y1&"!=Yºÿñ/.Fð°/´+°$/±Dé°4/´@+°/°3´+°G/°Ö´+°±=+´7+°7±,+´'+°'±!+´+²! +³@ +³ !+´+°/´ +² +³@ +±H+±7=°;9°,²4:@999°'±*199°¶$)/B$9°!± 99±$²*,999°Dµ /7;$9°4²1=B999°@± 99014'!5!##".'732654&#"&5467.#"&546323> $þu>t,+$N71[@43˜@5I4$)/% )* )-06F& ¨>33-&3_"142JYG x˜@1(7% "&!5  !259ÿðÿ3..Vç°/±?é°./´;+°E/°H3´F+°W/°Ö´+°±7+´1+°1±&+´!+°!±V+°2´U+°B Ö´K+²BK +³@BE +°U±+´R+²R +³@RH +±X+±17°59°&´ .4;$9°!³$+$9°V¶#)?D$9±UB±IN99±?µ)15N$9°.±+799°;±BK9901%.#'67.'732654&#"&5467.#"&54>323>54'!5!##„  JP*!"*6a?(4™G7G4$)/% () ))&)H2 $þz>y*>3!  >"(0# MdZ! Y¶A0(7% "&"4  !2% ,,>33-&2 >5S,þóÿáÿÆ.L °6/´H+°H°D Ö´9+°/´ +°/´+°&/°)3´'+°M/°<Ö´A+°A±+´+°±+´+°±3+°J2´2+°# Ö´,+²,# +³@,) +²#, +³@#& +±N+±A<°>9±±?99°³9$9°±F99°3µ %6H$9±2#±*/99±D6°J9±Hµ<>A$9° ³ /$9°°9°±#,9901"&5467.#"&54>323>54'!5!##5&#"#"&5473>3254`C$=(+ ))&)H2 $þk>j32: O 9J,8'#<(AH %"$P !2% ,,>33-&0'þ·3*V02: >(1Ø1ÿðÿI).cR²+´ +° ° Ö´+² +³@ +²+°"/´.+°4/±Ué°D/´Q+°[/°^3´\+°d/°Ö´+°' Ö´(+°2°±M+´G+°G±<+´7+°7±+°2´+°X Ö´a+²Xa +³@X[ +°±1+´+²1 +³@^ +±e+±'°9±GM°K9°<´DJQ$9°7³ :A$9°¶".49?UZ$9±X±_99± °9±."³ $9°4´:<$9°Uµ'(?GK$9°D±AM99°Q±Xa9901#5.#"#"&547326325#".'732654&#"&5467.#"&54>323>54'!5!#ž"* >3C I LZ.EG :55)33-&2ÿáÿa).FÞ°/° 3´+°/´+°$/´1+°;/°>3´<+°G/°-Ö´'+³'-+´+°'±8+´A+²A8 +³@A> +²8A +³@8; +°8° Ö´+±H+±-± 99°'°+9°± *99°¶$15:$9°8°D9°°?9±²999°²*+D999°$²'-5999°1±8A9901%#&/532654#"'63. #"&54>323>54'!5!#º %@(}¡"wÜ66 `SaG1 ‰   ))&)H2 $þk>j(å +#AŽ#m€3<)H] „    !2% ,,>33-&= 9ÿÓÿþy.$º²+° /´+°/°3´+°%/°Ö´ +° ±+°2´+² +³@ +² +³@ +°±+´"+°"°$ Ö´+°/´$+±&+± °9°±99°°9±"°9°$°9± ´"$9°± 9901&547'5&#"&46325!5!!67ƒd.<6!(9(5<þÕ¦þ¸e–,.Lcb[³23vR3L’33ê†!PUYÿÓy./5ª°/´+° Ö´+² +³@ +°/°3´+°6/°Ö´ +° ±+°2´+² +³@ +² +³@ +°±"+±,322´!+±7+± ° 9°± 99°°9°"´(*0$9±± 9901"#5&#"&46325!5!!632#7./6754&5Ð'g3<6!(9(5<þÕ¦þ¸MN12!%4 cRTM>˜}*vR3L’33Ÿoþ( +R#E ä: &ÿðÿþ‡.<ì²+°73´ +³: +´+°/´&+°*/°-3´++°=/°$Ö´+°±+´ +° ±(+°2´/+²/( +³@/- +²(/ +³@(* +°/±+´4+±>+±$°"9°°!9° ±&99°(°9°/± 99°±:99°4²7999±:°69± °9°@  "$(/4$9°&±1299013".54732632&547'5&#"&46325!5!!67.#"þ &/!24#o" , ƒd.<6!(9(5<þò—þªe–,./6%m@*81!3:b[³23vR3L’33ê†!PUY "ÿëÿñ.17´²+°/´+°/´+°/°!3´+°8/°Ö´+°±+±522´+°"2² +³@! +² +³@ +°±0+´++±9+±³2$9±+0²%.999±µ+.056$9°² 999°´#%)$901#5&/67.#""&546325!5!#632&545¯5(3=e&=q9"4D$7?".WþÌ4Í6# 2þýD&2Nþ½;b!35:%&4)0")55*z33� f;8lWq>;&!±ÿëÿK.7=G³°/´+°/´+°/°"3´ +°H/°Ö´+°±7+²;>222´6+°#2²67 +³@6" +²76 +³@7 +°6±1+´,+°/ Ö°33´.+°*2±I+±7´8E$9±/1°&9±² 35999°´$&*$901.#'67&/67.#""&546325!5!#632&547#5'O+!?J3G&=q9"4D$7?".WþÌ4Í6# 2 5(3~D&22  J‚#'0?*635:%&4)0")55*z33� f;8lWq>7þ‘&!±æ   ÿôÿ™Y.GM²+´+² +³@G +°° Ö´+°$/´#+°/´*+°//°23´0+°N/°Ö´ +° ±'+´!+°!±G+²-H222´F+°32²FG +³@F2 +²GF +³@G/ +°F±A+´<+°? Ö°C3´>+°:2±O+± ° 9°'° 9±G!µ#$*K$9±?A°69±³>?$9±$@  7þeÞ±6&ÿØÿpÚ.1˜°/´+² +³@1 +°/´'+°+/°.3´,+°2/°"Ö´+° Ö´+°±1+±)22´0+²01 +³@0. +²10 +³@1+ +±3+±° 9°1µ '$9±² ")99901.#"&546325.#"&54>325!5!##W +>"5(LD$.J7"5- "!4#4,d1þ�P3G*8#6/J'60CÎ.9'& , '$E/F"e©33ýuÿØÿov..5Ú° /´ +°/´3+²3 +³@. +°/´$+°(/±+/33´)+°6/°Ö´+°±+°&2´1+²1 +³@( +³1+´ +° /´+°1±.+°/2´-+²-. +³@-+ +±7+± ³$$9±1° 9°.± 99± ° 9°°59°3± 99°²&999014&#"3"&475.#"&54>325!5!###632R!  *"4'"!4#4,b3þ�žC3v 72[? (&8£.:& , '&D/F"fÌ33ýtŒþ97ÿñ†.6A²*+°4/´3+°./´+° /´+° /´+°$/±'733´%+°B/°Ö´+°±!+´:+²!: +³@!$ +³1:!+´+°/´1+°:±*+°72´)+²)* +³@)' +±C+±°9°³ $9°!³#$9±:1µ.348<$9°*°>9±.3±A99°°>9° °9°´ <$9° ±99°±!:9901%4>3&'".#"&5463232654'!5!##54&#""&#6'$;E )-02' $þ¯•C3_) '*Ú�.1 È' ,, !25%>33þoQ((U0#,;+ÿð.-6»²*+°/´ +°/´+° /´+°32°´+°$/±'.33´%+°7/°Ö´+°±*+°52´)+²)* +³@)' +±8+±°9°*@  "#.$9± ´ +$9°°9°²5999° °9°°19°$°"901"#"'727&#"#"&5463267.'5#5!##.'6325J $": <+,6"K (&0&T1IX`$J01¬O#,€ESEU3:x "&'o)*&"33þ)<{0!B„3'AL°/´6+°;/´@+° Ö´I+°3/´+°02³3+´F+°M/°$Ö´)+°)±+°2´3+°3±9+´+° Ö°3´/+²/ +³@/2 +±N+°6º&À"+ °,°.À±!ù° À°,³-,.+²-,. Š Š#9³ !,-....³ !,-....°@±)$±&D99°± '99±93²>?999°°@9±6· 9=B$9±I;³ >$9°@°D901#"&=4&''65&#"'>3253>74#"&5473723!32654#"'6267&#"2¹9d4+&3 »$% .# o5ŠF÷[š5E!*3�”9þË4k+<-þ/@)9 D $E9Z3BbYÁ"&!? $1P‹½ 5 <0)# w 3þ 6˜J&"!<4+E/" ,K~9Fµ²E+´1+²1E +³@14 +°1°6 Ö´9+°/´+°+/´:+°G/°Ö´+°±3+°!2´9+°52°9±+´+² +³@8 +±H+±±C99°3³$$9°9°9±+· "%-?$9°:´$.3AC$901#"&'732654&#"&5475&''654&#"'>32533#2>7&#"¸!0yA_¯73 E:=)5I1,3e �#K;\P0–“þÓ( #8"?=>;J^ÛžV�F* A0!C&%NR�  ( $!J_¤P3  /y 3=�².+°/´+°/´4+°:/°+3´$+°)2²$: +³@$( +°>/°.Ö± &22´-+°(2²-. +³@-+ +±?+±.´/2$9°°19°· !7$9°4² "&999°:°8901727&#"6%&'4&#"'67654&#"'632533##5&''27&#"6’)'kA+E! &+:3Wß!) L&)PwZW5OQ1Ÿ-&m9)4;ÊBt2HŠ% &2E •'4€ •~ÏK3þ…°˜.'`9G ÿo•s*5:Õ° /´ +°/´6+²6 +³@* +°/´++°:/°'3´%+²%: +³@%$ +°:°3 Ö´ +°;/°Ö°"2´6+± $22³6+´ +° /´+°6±*+°82´)+²)* +³@)' +±<+±6± 99± ± 899°6°9°²/999°+²"999°3°19014&#"3"&5474&''654&#"'>32533##267&#"2#R!  *(2»$%.# n6…F3àB4þ2 # S34 ?R82j[? (&# WÁ"&!$ $1P‚ÑE3ýtI ,+R)!þe7ý ÿ“ s,7À°/´+°/´+² +³@ +°*/´-+°5/´+° Ö´+² +³@ +°8/°Ö´+°± +±22´ +°2² +³@ +±9+±±$'99° ·#135$9±±99±*²$,1999°-²#999°5°3901>32533##5&#".5463254&''654&#"7267&#" n6…F3VV3=_%%,>,OK,»$%.% # S34 ?£1P‚ÑE3ý˜O‘ *0($Cd÷HÁ"&!$ 9 ,+R)! ÿ¾ s<Gݲ-+²7+²<+°1/´+°( Ö´+²( +³@(% +°/´=+°E/´+°# Ö´ +² # +³@  +°H/°Ö´4+°4±%+± 22´$+°2²$% +³@$" +±I+±4²999°%·8:ACE$9±(-±499±1± 99±²A999°=²999°E°C9017463263254&''654&#"'>32533##54#.#"#"&267&#"YC/5% ( ,»$%.# n6…F3VV3!,'(#-< # S34 ?!$F1 ÜHÁ"&!$ $1P‚ÑE3ýå'= &*/6Ä ,+R)!ÿÜ‚.2;E£²+°/´$+°0/´3+°;/´+°°@ Ö´+° /±<33´ +°F/°Ö°D2´+² +³@ +±G+±$±*99°0¶ '+27$9°3²)999°±9D99°;°9°@°>9± ° 901>3267.'5#5!##.#"#"&'7267&''654&#"7267&"76325Z.jZLUâ¦J05 (2%$(   '”,%#' 9)V¢[ !X(E{)+&"33þ EIe ' $* &Œ& 57+`E„ÿîÿ×üàR3²L+°4/´$+°)/´.+°/´+°!/´+°A/°3´B+°2°H/´Q+°S/°JÖ´O+°O±+°72´!+²! +³@A +°!±+´+°±'+´1+°2°1´E+°E/²1E +³@1 +±T+±OJ² L999°°M9°!±HQ99°µ$,4G$9°³)+.$9±E'°C9±)$±+199°.±,899°°9°±;99°!µ  <>$9°° 9±HB°E9°Q°G9°L±J990123!532#"'73254&#32654#"'632#"&=./67&'#5!654'"54732{"="þw/. ,2$22´+°±+´C+±J+±!±.299°¶#-07<$9°³%9:$9°)± '99±±FH99± °!9°'²%)*999±F#°>9°±-H99°µ.09(69vKZr8 #1?þ 8- -407X>0A_ %M#6@33*8&1,'aNaO'% ÿçÿÿ‰.L²+°1/´<+²<1 +³@<4 +°C/´++°/´+° /° 3´ +°M/°4Ö´5+°5±+°2´)+²) +³@ +°)±?+´/+°/±+´+² +³@ +³+´+±N+±5²L999°)²1J\[� ,A,9Bu=7I9&Z082;33ê†!4aQNI -[<¥%ÿéÿÅ=.*1r°./´+². +³@. +°/°!3´+°2/°Ö²-222´+°"2² +³@! +² +³@ +°± +´(+±3+±( ² %99901%&546?#5&/67./675!5!#636750_I-);¥"Y1Ky0%*"(�˜þ¹TÛ` $ þº-E^w7ý2+[uo)þ¾;T&? *e#+33º+xT`l L ÿçÿdž.)¥°!/´ +°/´'+²' +³@ +°/´+°/°3´+°*/°$Ö´+°±+²222´+² +³@ +² +³@ +±++±$° 9°³ !&$9± ±$)99°'°9°³ $901.#&'675!5!##5&#".5462*,|%ˆš9 !~”þ½·A3=_%&+=ZH%� ?X,X.ˆ6b++33ýiP‘*1($B21ÿõÿ¿.6<˲+´+² +³@ +´2 +´2+°'/°*3´(+°=/°Ö´ +° ±+´/+°/±:+±%22´,+²,: +³@,* +²:, +³@:' +°,±+´+±>+± ² #7999°/°9±,:²-999°²4999±2±99°'´:;$901%#"&'332>54'#"&547.#"'675!5!##36?6'5ª5oXN™44O- (0" 0!&"9p(\gþÑ%Â, ð S]æD0,.ˆ6b++33ý´<)  +60 >X,ÿéÿhA.RV²8+´+²8 +³@85 +°8°A Ö´Q+²O+°/´+°/´'+°#/´+° 2°S/´T+°W/° Ö´+°±N+´D+°D±+´%+°%±+°52´3+°3±+´0+±X+±%³AGKQ$9°@  '8=H$9°3±*99±A±99±±399°°09°'°9°#²!999°² *99901%6325#".'32654'#"&54632&#"3267#4&#.#"#"&546325!' (9bC:"9%”T,P"5R3O)4! K%3!%(#2,'(".;B05þçXE1Jm_:“¥Q?3Z7?#00):2G #!9 &RÞ:* &*/7,$FÆ33ÿê. Jë°/´%+°+/°A3´+´>+° /±33´ +°K/°Ö´ +° ±F+´<+²F< +³@F +°<±3+´.+°.±+´+³(+´+²( +³@ +±L+±±699°°9° µ 8:!&. #3+'(ÿé8†FU² +°6/°3´1+±322³16+´+°1°T Ö´)+°&/´!+°?/² I333´@+±D22²@? +³@@ +°V/°9Ö´/+²9/ +³@9? +°/±G+´+°A2²G +³@# +°±+´+°± +°2´ +°2² +³@ +±W+±/9°>9°G´)36NBè93=_%#.E-=79.!21ï�C+P,[.‰&!"33ýP‘ *3(+;Ú82Nàÿébs Nç²)+°:/´+°2°°B Ö´G+°5/´+°/± &33´+°$2² +³@" +°° Ö´+°O/°JÖ´@+²J@ +³@J +°@±)+°!2´(+°#2²() +³@(& +±P+±@J°9°)· DGM$9±G)±./99±B:°19±5³7>@J$9°´ !-M$9°±99°°901267&#"4'#32%#5!>32533##4&''654.#"#".#"327#"&54674¨0)S43>`#µ '*:þòe‹ N$…F3VV3+»$%!/,#G7 *& ¸(8R)84,#)¢33 '‚ÑE3þ:HÁ"%" "9))3+'(ÿéÿ™bsOYe:²+´+² +³@O +°° Ö´+°'/´d+°S2°d°/ Ö´4+°"/´P+°=/±L\33´>+°J2²>= +³@>H +°=°W Ö´E+°f/°7Ö´-+²7- +³@7= +°-± +´+°±O+±G22´N+°I2²NO +³@NL +±g+±-7°<9° µ'14:Z]$9°³ $?B$9°Oµ "EPU$9±°9±4´  $9±/'°9±"d³$+-7$9°P´:GZ`$9°W±BU99°=°@901.#"#"&547326324&''654.#"#".#"327#"&54674'#5!>32533##267&#"4'#32ÙC KLZ.EF ;46+»$%!/,#G7  *& e‹ N$…F3VV3þÏ0)S43>`#µ '*:2( M@%0 .<) +)GÁ"%" "9))3+'(-33 '‚ÑE3ýž(8R)84,#)ÿéÿ¾`sZeqQ²I+²R+²W+°L/´+°D Ö´+²D +³@D> +°/´p+°_2°p° Ö´$+°/´[+°-/±;h33´.+°92².- +³@.7 +°-°c Ö´4+°r/°'Ö´+²' +³@'- +°±X+´O+°O±@+±622´=+°82²=@ +³@=; +±s+±'°,9°X@ !$*/1[fi$9°O²  999°@·4SU_ac$9±DI±OX99±L±99±$± 99±°9±p³'$9°[´ *6fl$9°c±1a99°-°0901%263254&''654.#"#".#"327#"&54674'#5!>32533##4'5.#.#"#"&546267&#"4'#32 2) (,»$%!/,#G7  *& e‹ L#†F3UU2- .$#.;DM % S24!?\#µ '*:‹1ÜGÁ"' "9))3+'(-33&‚ÑE3ýå % -3/7,%E--+R)!54,#)ÿÙ . Gݲ5+°)/´.+°3/´#+°/±33´+°H/° Ö´@+² @ +³@  +°@±+´+² +³@ +°±5+° 2´4+°4±0+´&+±I+±@·9;CE$9°°9±45°#9°0±)+99±)5± 999°.²+:999°3· & ,;@E$9°#²>999°±99014'#32%467&'#5!!632#"'73254&##5./7.#"3"&5¶/ ;þË*dÇþÄ Zˆ<^r#%/"(M83'–5!ll*Ú" #33 O6GM^O7-&-=þZC;V -VK ,ÿÙÿ™ .S_-²+´+² +³@S +°° Ö´+°G/´L+°Q/´A+°//±2V33´0+°`/° Ö´+°) Ö´!+²)! +³@)/ +°±T+´5+²5T +³@52 +°5±S+±>22´R+°R±N+´D+±a+±! ° 9°³%&,.$9°T@  $$9°L²<I999°Q¶!)D&J^$9°A³5T[$9°/±,X9901.#"#"&547326325./7.#"3"&5467&'#5!!632#"'73254&##4'#32‹F=LZ-EG.38'–5!ln**dÇþÄ Zˆ<^r#%/"(M83V¶';2( M@%0 .<) +2;V -VK , #33 O6GM^O7-&-=ýóAÿé'Õ.HTþ°/´+² +³@ +°/´E+°=/´S+°S°% Ö°3´*+°3/±6K33´4+°U/°-Ö´#+²-# +³@-3 +°#±+´B+°B±I+´9+²9I +³@96 +³9I+´+±V+±#-°29°µ'*0LO$9°B±99°I´=KS$9°²7999±E±99°*²@999±%=±?99±3S´#-!9$901#"&'332>54'#"&547.#"327#"&54674'#5!##"'367674'#32‚5pWN™43O-'9 0!4*0" *& eìa1$ #µ '*:NF9Fb¬bAL2,$ 7$'/ #3+'(-3309-/ "Š4,#)ÿéÿØÕ.MY!°>/´+²> +³@>: +°/´+°/´X+³ X+´+°°& Ö´!+°//±2P33´0+°Z/°CÖ°)2´H+´+²C +³@C/ +°H± +´+°±;+±N22´:+°52²:; +³@:2 +±[+±C±.E99± H¶!#&,FQ$9°°T9°;@  AKPX$9°:±3899±>°9±±CH99°³ EF$9±&°99° ±899±/X³)5$901%25#"&54632"32?#".#"327#"&54674'#5!##5&#"#"5473264'#32!'#7")2#  F#G7  *& eìa/3: "¨2 0D!S#µ '*:Yª -2%&# A))3+'(-33098þ²5—;442B4,#)ÿèÿZÕ.gsf²+´+²+´+² +³@g +°/´!+²! +³@! +°0/´]+°U/´r+°r°= Ö°a3´B+°K/±Nj33´L+°t/°Ö°K2´ +° ±E+´;+°;±3+´Z+°Z±g+±h22´f+°Q2²fg +³@fN +³&fg+´c+±u+± ± 99°E°9°;± J99°3·7?BHkn$9°Z³5$9°gµ!+0Ujr$9°&³(O`a$9±°9±!² 999°0² e999°]²+&c999°B²3(X999±=U²5W`999±Kr´7;E9Q$901&#"#"&547326325#"&'332>54'#"&547.#"327#"&54674'#5!##"'3>7#4'#32\7<QLZ.FG 929/=N™43O-'9    4*0"  *& eìa1$ !.5(3#µ '*:q: M@+* +9, +n¬bAL2,$   $'/ #3+'(-3309-/ 5F9;-þóA4,#)ÿé‘./;Fþ²#+°-/´,+°'/´+°/´:+°:° Ö´+°/² 2<333´+°G/°Ö´ +² +³@ +° ±0+´?+³*?0+´+°/´*+°=2°?±#+°<2´"+²"# +³@" +±H+± °9°¶23:$9±*0°9°?±-A99°#³',C$9±',±F99°°C9±°9±:³  A$901%463&'#".#"327#"&54674'#5!##54&#""&74'#327#A5&,#G7 *& e¨C3Y/ '*#µ '*:¿§2DÈ(&#))3+'(-33þo] ()ô4,#)¢09 .>8ÿèÿop.4;ð°/´+°/´+² +³@ +°%/´$+°0/³35$3´1+°2°NBÏ þá=79.55ý33ýt6@ (&/{�C+P,],‰&!"3382NàÿéÿèÕ.DPô²;+°1/´A+°) Ö´+²) +³@)$ +°/´O+°O° Ö´+°/±G33´+°Q/°>Ö´4+° Ö´ +² +³@ +°4±%+°2´$+³E$%+´!+²!E +³@! +±R+± 4°9°%@ 178;AGHO$9±!$°9±);².4>999°1°C9°°9± °#9±O³  !$901%25#".#"327#"&54674'#5!##54&#".#"#"&54632674'#32 #G7  *& eìa 3 *-#+&.9A).3l#µ '*:ŸŸ))3+'(-3309*$þÆ(  @-7,$G7 ü4,#)ÿèÿ\Ð.8?¯²'+´5+° Ö´+² +³@ +²+²3+²7+° /´ +°/±933´+°@/°2Ö°2´*+° 2²2* +³@2 +°*±+±>22´+² +³@ +±A+±*@  -/59$9± ²>99901%254&#""&547.'5#5!##4&#.#"#"&5463265;`#B2U.C‹>NBè92- .#%.;K'2( ™=79.°�C+P,P9‰&!"33ý„7- ,4",07-,=0æ82Nàÿé(.9ENì²+°/´+°%/´B+°B°- Ö°M3´2+° /´K+°/²:F333´+°O/°5Ö´++²5+ +³@5 +°+±D+´!+°!±+°M2´+² +³@ +±P+±+5°9°Dµ%/28;$9°!²999°³F$9±2²999°%°9°-°9±K ´!)+5I$9°³8>D$901#5!##5.#"#"'73267.'#".#"327#"&546747#325476325Ne?53 : ,.10A,. 0;1$#G7  *& ˵ '*:D@5"'2û33þõN5Tj# F?9!-/))3+'(-#)B4,74E®ÿéÿh(.P\e@²+´+² +³@P +°° Ö´+°/´(+°4/´Y+°Y°< Ö°d3´A+°/´b+°J/²MQ]333´K+°f/°DÖ´:+²D: +³@DJ +°:± +°!2´+°[ Ö´0+° 2°±P+±d22´O+²OP +³@OM +±g+±:D°I9° ¶4>AGQRY$9±[± "99°0±$.99°Pµ(+]$9±°9±²  999±A(²$999°4°!9°<°"9±b´08:D`$9°J³.GU[$901.#"#"&54732632.#"#"'73267.'#".#"327#"&54674'#5!###325476325ÀA =K\-EG< 38 : ,.10A,. 0;1$#G7  *& e?53þyµ '*:D@5"'2c' LA(- ,;) +N5Tj# F?9!-/))3+'(-33ým“#)B4,74E®ÿÓÿì[.:AÚ²(+°&/°;3´+³&+´+°8/´ +° ° Ö´2+°/°3´+°B/°Ö´+°±A+±(22´'+°2²A' +³@A +°'±"+´+²" +³@ +±C+±Aµ ,/>$9±"'± 99±(µ"->A$9±±5699°2³/4$9°8± 99013&54632635!5!#'654.'#5.#'67.#"&#"I!SK'; !þuˆÏ7J 4 :1-(ZE!C " +@%"h@5*i,L,=!  a33¨ (3"6!)& ) þÊ)N70O;"_` ; ".ÿÝÿÀÿ.F°'/´+²' +³@'* +°/´0+²0 +³@ +³D0+´B+°=/´+°° Ö´6+° /°3´ +°G/°Ö´@+°- Ö´+°@±$+´+°; Ö´:+°±2+± 22´+²2 +³@ +²2 +³@2 +±H+±$@ !"*0=BD$9±;°9°:°89°2±699±'±-99°°29±6B²;@999°=°9°° 90146326325!5!##54&#"632'654&#"#"&5463254&#&#"3"&=29- !þ‚"s3ZB!AH"+ %J N'bEAH"1@#!= %,a1G5&L33ýÅ“+\;+$' 0$8 +!=QL©  ^1-,1ÿÒ7Ê,UR°/´+°3/´2+°-/´8+³8-+´+°-°% Ö´<+°@/° 3´A+°2°V/°5Ö´0+°0±M+´+°±!+°>2´ +²! +³@!@ +° ±+´+°G Ö°B3´+²G +³@ +±W+°6ºþÀ + °°À±Jù°IÀ°³+² Š Š#9³IJ....³IJ....°@±M0´+238:$9°²(*O999°!²%99±-°:9013723!32654#"'632#"&=4&#"&#"&546326325!5!>54#"&5473�”Cþ =f*2ƒN$,(,<!8QI(8#%"þy{[š5E!* Ù z 3þ¥ šH&"!8#Yº:,šH ^ ++N,=1&3h3 8 <0 (  ÿÒÿUÊ,oʲ+´+²+´+² +³@o +°/´^+°//´.+°)/´4+³h4)+´c+°)°! Ö´8+°3´V+²VC +³@VY +±q+°6º&À"+ °S°UÀ±Fù°EÀ°S³TSU+²TSU Š Š#9³EFST....³EFST....°@± ,³)./4$9°° 9°I² '6999°P²&$K999°³!8L$9°[°9°oµ^ef$9°n±ch99±°9±^² 999°/³  m$9±c.·$,'1aek$9°!±:f99±h)°6901.#"#".547326325#"&=4&#"&#"&546326325!5!>54#"&5473723!32654#"'632#@!L'F:.EG< 8356$,(,<!8QI(8#%"þy{[š5E!*3�”Cþ =f*233v& D4%0 ,<) *œ2:,šH ^ ++N,=1&3h3 8 <0 (  z 3þ¥ šH&"!8#LTþ«ÿÕ6‡.Bа!/´*+²*! +³@*$ +°4/´+°@/°83´ +°2°/°3´+°C/°Ö´+°±6+°2´+²6 +³@ +²6 +³@6 +°±/+´+±D+±°9°6³ $%$9±/³!*4$9±4*°9°²/999°@µ16=$9° ² 99901&54>326325!5!#3>7#"&'332>54'#"5&#".#">$$3 4"(/& þ€²ÿ+"OzCRs9>-<)&:M8&)+#$G( " C #*/)$Y33Ñ  :<[ rSk$&-#3,$*@i>?$7ÿÕÿY‡.^:²+´+²+´+² +³@^ +°/´"+²" +³@" +°8/°03´E+°I2²8E +³@8, +°M/°P3´N+°_/°@Ö´;+°;± +´+°±.+°K2´R+²R. +³@RP +².R +³@.M +°R±^+°2´]+°]±' +´Z+±`+±;@°>9° °=9°³ 8E$9°.µ 5G$9°R±99°^³",T$9°]±)X99±°9±"² 999°8@ )5>@TZ\$9°E²GKX99901.#"#"&547326325#"&'332>54'#"5&#".#"&54>326325!5!#>7#í@!1K\.9S: 29+,Rs9>-<)&:M8&)+#$$$3 4"(/& þ€²ÿ+"O33r& LA%0 *32 +Sk$&-#3,$*@i>?$7( " C #*/)%Z33Ñ :<[PF8þßÿñÿÖÿ.P °K/´+° /´+³1 +´'+°"/°3´7+°<2°@/°C3´A+°Q/°4Ö´%+°P Ö´+°%±)+´.+°.±+´ +° ±+°>2´E+²E +³@@ +°E± +´H+²H +³@HC +±R+±)%³"+17$9°.°,9± ³:$9°· 90132654&#"&5463254&#".#"3254'7#"&546326325!5!##".'N›M8F40)H5 /+3''=. 1-=C0; .þd?gQ326325!5!!67g‚e.&)+#$$$3 4"(/& þ€ûþ¸e–,.R]b[³2|>?$7( " C #*/)%Z33ê†!P`Nÿòÿï‚.AF¹²+°3°2/°)3´>+°2°/°3´+°G/°:Ö´5+°5±+²%B222´+°2² +³@ +² +³@ +°±+´+°2±H+±5:°89°³$7>C$9±°9°± 99±2@  .8:BF$9°>±@990125!5!#632&54654'#5./75.#"'.#"&54>326: þ€�Ý: ."A32>7&#"Û3d/+3''=. 1-=C0; .þd?3�# Z#' # 3'Cü@"Î(D!/&9-%C 1 F33ýõa� ' $)E]  ,.Pè²H+°99±L99°A°9°´19?CM$9°´/$9° ±.99°±"99°°#9°(°$901.#".#"#"&54632632.'#5!!2#"'73254&##5./676d, -*"(:-(69vKB_15 K:/,�: %k B-/6-,=0#   33*8&1,'aN 7:"&$ 1 #2>þZFFX %ÿ™.a6²+´+² +³@a +°° Ö´+°U/´Z+³/ZU+´,+°'/°_3´5+°P2°5°9 Ö´ +°D/°G3´E+°b/°2Ö´*+°*± +´+°±a+±O22´`+°`±\+´R+±c+± *³',/5$9°± -99°a@  $7;DEHM$9±\`±UW99±°9±U´  O$9°/±W99°Z°-9°,´MRX\$9° ´$*2K$9°'±;J99°9±7>99°5°?9°D°@901.#"#"&547326325./67.#".#"#"&54632632.'#5!!2#"'73254&##EI LZ.EF.46,�:W, -*"(:-(69xMè5 L:32( M@%0 ,<) +5FX %EB-/6-,=0#   33*8&1,'aN³&$ 1 #2>ýóÿßÿo .D°/´+°/´+² +³@ +°0/´-+°%/°3´6+°:2°@/²C333´A+°2°E/°3Ö´*+°*±"+´!+°!±+°>2´+°2² +³@C +² +³@@ +³+´+°/´+°± +°2´ +² +³@  +² +³@  +±F+±"*²/06999°!°89°±:99±±99±±99°°9±%-²"3>999°6°8901%2#53##54&#"3".54754&#"4&#327"&546326325!5!#¿84“B3Q#    '@%'." 0& 326325!5!##54&#".#"#"&546326*&)+#$$$3 4"(/& þ€O3*/",%/8C(.3¹³>?$7( " C #*/)%Z33ýýW" B.9+$F7!—.=JE°/´>+°/°3´+° 2°//´,+°# Ö´$+°)2°$´+°K/° Ö´+°±+°+2´>+°/2°>±A+´:+²:A +³@:. +±L+°6ºð›Áá+ °G°DÀ±2ù°5ÀºóïÁ&+ ³325+ºï¶Â+ °G³EGD+³FGD+²325 Š Š#9²EGD Š Š#9°F9¶5G23DEF.......¶5G23DEF.......°@± ±'99°²)999°>°9±>°9°°:9°±99°@   '+0J$901%"'&#"27#".'#"'732654&#'26325!!'2654.'.'\ %3 # % 8- >1%#!7lþÇ/"C  Y{+5— 4. %G}, +#,1 &306IK[3=#$ 0ƒ]3±*  ÿôÿµG.Q\°J/´M+° /´R+°/°3´+°"2°°> Ö´+°: Ö°3´X+°7/°&3´4+°)2°]/°$Ö´+°± +°32´[+°72°[±U+´+°±+´A+±^+±$±+99° ³.1$9°[³24JK$9°U² :M999°±9±MJ°D9° °K9±R±A99°±U99°X°9°°9°>± 99°:°Z9°7µ$1+3$9°4°.9014.'#"=&'327#"&'#"'7254#'632>325!!32632.#732>'2654&#"'` _0N)&%  - )nW&2 þ'M.?b>ƒk":ÊqCP6çD3*AYwKG% +11 &G,A*%N3< M81^,v$Bv2<J (ˆÿíÿä!…-[°4/´+° /´+°'/´"+°"°? Ö´,+°E/°Z3´J+°X2²JE +³@JV +°E° Ö´N+°\/°BÖ´&+°±+´+°±+°U2´.+°W2°.± +´1+²1 +³@1Z +±]+±B±)L99±³"'$9°¶ $%4$9± ²1999°,°.9°°99±?'²%:<999±"µ$)=BLU$9°E°G9±JN°H90132654&#"&5463254&#"327#"'#"#".'7&'732654&#"563263533#Q&54&#"563263533##5&#".546324&#"327#"¿ 4#I5�N3QQ3=_%&+>,.H$P%!, <X')-1=8k_  $ÀW3ý™P‘ *3&$B21s/6 +ÿíÿo …Q.°K/´J+°D/´6+²D6 +³@D@ +°/´ +° ° Ö´+°/²49=333´$+±2;22²$ +³@$0 +°° Ö´(+°R/°Ö´&+°±+°/2´6+±1J22³G6+´O+°O/´G+°±4é°6±@+°82´?+²?@ +³@?= +²@? +³@@: +±S+±±&99°O² 999±6G±DK99±DJ±8O99°6°9±± 99± µ &/$9°°!9±$(°"901%4&#"327#"'#"'73>54&#"563263533#2#53##54&#"3".546�P%!, <" 4#I5�N3&&54�B3Q#    )5r/6 +:')-1=8k_  $ÀW3þ:7ý33ýt6? (!"ÿíÿ¾…V²E+²N+²S+°H/´+°@ Ö´+²@ +³@@= +°/´+°° Ö´+°%/°:3´*+°82²*% +³@*6 +°%° Ö´.+°W/°"Ö´ &+³K "+´T+°T/´K+° ±+±5=22´<+°72²< +³@<: +±X+± Kµ,HNQ$9°µ@EO$9±@E±KT99±H±99±±99± µ",5$9°%°'9±*.°(901726324&#"327#"'#"'732654&#"563263533##54#.#"#"&546Ø1) (P%!, <" 4#I5�N3QQ2#- .$#.;C‹1s/6 +:')11=8k_  $ÀW3ýå&> ,4/7,$FÿÎÿì.2:Ȳ*+°!/´"+°/°3´+°´++°;/°Ö´+² +³@ +°±:+°*2´(+° Ö´+°(±%+´+²% +³@ +±<+±±.699°:µ1$9±( ±99±%±!"99±!*°+9°"°:9°@ (.36$901327'654.#"47#5!#'2654&##5.#'67&x1b�%a4«JÞPc]-B42'\C!M 7Ç\$ EŽ%Y( MK$33+## P:Q(" 0þ½GO60A0#)#ÿÎÿÞg.JT]>°2/´F+°5 Ö´C+°+/´!+° Ö´N+°/°3´+°´[++°^/°:Ö´>+°>±+´K+²K +³@ +°K±+´+°±W+´+°±/+°H2´.+°2²./ +³@. +°.±)+´$+±_+±>:°;9±K°<9°³5CS$9°³ N]$9°W´2FRU$9°²999±).±!'99°$°&9±C2°H9±+F@ $&-9:<>$9° °9°!°;9±[NµSU$901"&547#".547#5!!>32'654#"#5&#"#".473263254'326?'654.'"1G$ $4«™þÓ '' !0#"1230< S'-()T 0,Þ ! a�'WI # ,K$33+9) 8-##Bõ2* ACMO$901.#"#"&547326325.#'>7&547#5!#'2654&##327'654.#"5I9? ND( <@2.0"SP %75ÉhßNd\-F13“0a�$eON E=' U8(- *9, *1@A0! @K$33*## O;Q(!((þ_ Y( þ¶°G)ÿÝIÕ$;CLа/´+°(/±?33´)+°2°//°,3´9+°2°M/°2Ö´7+°7±+°%2´+°G2² +³@) +°±<+°*2´+°2²< +³@ +°<° Ö´+±N+±72°49°°59±<@  ',/9AL$9°°9°°9±(·218#9+01S1':K -A*3F31B 6 5ð +o< .'ÿõFm'7;í°1/´ +°%/´*+°/±833´+°2° +°U°L Ö´Q+±h+±. ° 9°°09°5° 9°°19°G°9°U@#(+7:EIN[f$9°L°O9°T°@9±°9±I² 999°$@  OSV[\^d$901.#"#"&547326325#"&547"&547#5!4#"#"&547326323#32654'7#4&#"6'327‰CPLZ.DG<46JN*3^B<å¤:NWJ0 zSE5g~M[M8,u#=3!N!” !0"c' M@*+ ,;) +“+3&:K37@+3F31<  4=:35'N6H"#9+/þÎM +o< .'ÿõÿjm'RVj²+´+² +³@R +°° Ö´+°/´@+°E/´J+°%/±7.5467'#5!&5473##"&7&'62654' … , ,;\P6&+AÚÃ>0cGEW™O9)<&7F<&:3|1þ¦  N?3]G#ìx@TV6\8!qÿéÃ.$:AEÁ²+°/´9+°*/´++°2/´+°/±B33´+°F/°Ö±;D22´+±622² +³@ +² +³@ +°±%+°/2´#+°2±G+±%´+29$9°#°!9±°9±*9µ #%A$9°+µ! (6;?$9°2µ =D$901%"&'#5./67&'#5!!>32'4&#"'67654&#"32%&'5(.g3AcG*g-~"Úþ¶# ,<+.1'-P$ D20f".þçH;0{UÕT‚]O$Ð@\H:%R#A33ƒ%  >-5%13gh3. ( FDKGƒ(>+7qc#wšÿÎs BGϲ.+°>/´+°2°9/´+°/±+E33´ +°)2²  +³@ ' +°° Ö´$+°H/°Ö´ +² +³@ +° ±.+°&2´-+°(2²-. +³@-+ +±I+±. @ !>EF$9±>.±3499°°69°9²;999°´ &2$9°µC$901267&#"327'654.'"47#5!632533##4&''654&#"#".%67#c # S34 ?ý(b�%a4«Þ…F3VV3- »$%-V) $ÿ"¸ ,+R)!B%Y( MK$3 ‚ÑE3þ:M Á"&!$ (5 ,y ÿÎÿ™#s>GOX](²+´+² +³@> +°° Ö´+°'/´K+°B2°"/´?+°//±;[33´0+°92²0/ +³@07 +°0°4 Ö´F+°V2°^/°,Ö´H+²,H +³@,0 +°H± +´+°±>+±622´=+°82²=> +³@=; +±_+± H´'.MRX$9°³ $Y\$9°>¶ "1?D[$9±°9±'´  $9°K°9°"²$MP999°?´,6HR$9°F³DNXY$9±4/°2901.#"#"&547326324&''654.#"#".547#5!632533##267&#"327'654.#"767#›F>LZ.EG.38,»$%X* $4«Þ†F3UU3þÎ0)S1%Yþæ'b�(  '2( M@!4 .<) +)GÁ"' )7 ,K$3‚ÑE3ýž(8R(b%Y(  ÿéÿù�.D²<+°0/´5+°/´+°:/´)+°/± 33´+°E/°Ö´+² +³@ +°±+´+² +³@ +°±<+°&2´;+°;±8+´,+±F+±·$?@C$9°²!B999°<±"#99±8;²)02999±0<²$&?999°5±2@99°±#399°´",8BC$9°:±!99°)³'$9°³$90127'74&#"26"&547#5!!632#"'732654##5&/67'x*\'‡ )> ‡:Ah´þq)diG4Ke$!  †3>’(a8^Nl>.–=&7533#&(4#>">>E:%0 ;PþnAW6=&ÿéÿ™�.HP[V²+´+² +³@H +°° Ö´+°999±°9°°9°<µ  02$9°A±>99°±/?99°I´.8D$9°F±-K99°5³"3NY$9°%³+LQW$901.#"#"&547326325&/67'#"&547#5!!632#"'732654##27'74&#"26wCNLZ.EG 8 46=’(a8?:Ah´þq)dgH6Ke$!  †4ÿ*\'‡ )= 2( M@!4 .<) +*V6=&=&7533#&(4#> @>E:%0 ;PþÅNl=.ÿÎ:.2=ð²+°$/´#+°/´*+°./´+°/±933´+°´++°>/°Ö´+² +³@ +°± +´<+³!< +´'+°'/°3´!+°<±+°82´+² +³@ +±?+±'´.$9° ±,99±32'654&#"#5&#"#".5473263254#"'3254'"'$1#."<8  ØÁá))!0#"231;V%7 (+2R 1,%C8$=ð # !H?‚3!3.33"5/ 8-#Bõ2* #3*)A"8; Ø/Ií$H8$ÿ×ÿv}.EKS0°/´+² +³@D +°° Ö´+°>2,2'[C!jQ?"<8' ئÆ)IY])E13VG?8&h8$=T' ;(*+ *;) +EN70]Q‚3!,M133"5 N7P(#''þIÉE",l$H8$ÿçÿåS… Lã°/´+² +³@ +°&/´3+°=/´B+°B° Ö´7+°E/±33´F+°2²FE +³@F +°M/°"Ö´ +° °J Ö´+°/´J+° ±+°2´+°2² +³@ +±N+±"±$K99±°9±3&±" 99°=²)+$999±B7±JK99°°?9°E²:@I99901254'#233##5./2654'#"&5473274'"&'#"'7327#5!2'!]  z*?>X3ll1:@g,Hd=A-*-  K10 <"1% $ ™?2)>™'   §,$C=W3ýê&/?')I0&J 3/6::!)n3EdIÿß'IQ°/´+°/´"+°/°3´ +°J2°*/±FM33´++°D2°R/°5Ö´=+°=±+°L2´H+°H±+´ +°. Ö´D+²D. +³@DF +².D +³@.* +±S+°6º;À$+ °@°AÀ±2ù°1À³12@A....³12@A....°@±=5²7J999°°89±H² 999°.°,9±±H99±"@   %L$9° ±P99°*°(901%2654#"'632#"&'5.#"#"'73267.'5#5!654&#"&5473723!25!6Þ?a*/6a6 +4-!21@,%. B_2¥$4—8E!* -4™6ACþ² —'1þã`$R–K&"!<9Z!™-?4?4jOCK7%3 & <1) F<3þn=E±oÿãIC$Y°&/´+°6/´>+°D/±33´E+° 2°K/°H3´W+° 2°Z/°NÖ´U+°U±)+´+°A Ö´&+²A +³@AD +°±+°F2´+° 2² +³@ +°°" Ö´+°/´"+±[+±UN±;P99°)²6>Q999±²4KW999°· &.1H$9°° 9°°9±6´ ")/$9°>°19°D´49;$9014&+3223#32654'7#"&54>7.'#"&'6732654'#5!4#"#"&547326¥%V9#=CE5g~3HH38+v#7.'#"&'6732654'#5!4#"#"&547326323#32654'7#4&+32‰EM/E#-EG 8 38@<*3 )/';"<8  #ØÈ:NVK0 zSE5g~3HH38+v#=33 $V9#>c' ,.(- ,;) +…3&!#=*‚3!A) 3F31B  4=:3#B419#9+/&%þæM+$Hÿó9*.:C¿° /´+°/±>é³*>+´3+°7/±;33´8+°D/°#Ö´+°;2°´61+°6/²6 +³@67 +°±+°@2´+°2² +³@: +±E+±#±!(99°´  &$9°°9±²!#999±3*³&$9±7>³(-0$901#".'732654&#"&5467&'#"&'>73265#5!!3254&#Ó&#"dT7&'#"&'673265#5!##3254&#† " JO+!%6b?(3-5N*5I41* +"2"<8  Ø7W&$"43f9#=B   >!)0NdZ ;PA.@1(7!& #,F‚3!N033"#2 UK+þò§$H8 )ÿ×ÿÊ.CM°+/´?+°?°; Ö´.+².; +³@.( +°/°3±Gé´+°/±D33´+°N/°3Ö´8+°8±+´+°D2°´1+°/² +³@ +°±(+°A2´'+°I Ö´!+²!I +³@! +±O+±83±599°²6999°°.9°² =999°(µ +?GK$9°I°$9°'°9±;+°A9±?´358$9°± $99±G³ !$901"&5467&'#"&'673265#5!##5&#"#".5473>3254'3254'"'`C$;'6"<8 % Ø7W$30< O $7 ,5*#<(„8$=EH%"#OH‚3 *M133"1 5þ·3*!/) 2:;&3Ø1¶$H8$ÿñÿh(.V_L²+´+² +³@V +°° Ö´+°/´&+°,/±Zé³;Z,+´B+°"2°F/±IW33´G+°`/° Ö´+°! Ö´"+°2°±4+´/+°W2°/´E1+°E/²E/ +³@EF +°/±V+°2´U+°U±)+°\2´R+°L2²R) +³@RI +±a+±!° 9±E"³;>$9±/4³29$9°V´&,17$9°U±OZ99±R)°J9±°9±&³ T$9°,´ 24R$9±B;²!7O999±FZ³>@9L$901.#"#".547326325#".'732654&#"&5467&'#"&'673265#5!##3254&#uD=/E#-EG/38)1[?43=k@5I3$)2(5"<8 !Ø7W% #">3[9#=c' ,.(- ,;) +b 2HZG AvX@1(7%! E‚3:M133"!4 UO.ó“$H8 *ÿ×ÿq&.7?ܰ/° 3´+°/±;é³;+´'+°-/±0833´.+°@/°*Ö´8&+²*8 +³@*- +³8*+´+°/´+°8±+´+°= Ö´3+²3= +³@30 +±A+±*± ,99±8±99°µ6;?$9±=°19±²999±'²6999±-;´!#*3$901%#&/532>54#"'67&'#"&'6732654'#5!#'3254'·#J1|¢"vÝ54!$0>!`G1z/"<8 #Ø7W.&?·8$=ô+3#B�#m3,"I] |?‚3!E# 33"%7#Á$H8$ÿÓ. >Á²+°&/´%+°!/´++°$9012654'#%3267#5!##5.#"&546325.'&'#"'P ’ 'þÛ 4ÌA¥-5&Cÿìÿƒü.;±²+´+°/´$+²$ +³@ +°0/´9+°+/´+°/±33´+°,-H% :(20A,-û84E®¸K7"33ýˆO‘ *1)#C21ÂN4?4j" Eÿ× s Jç²%+°5/´ +°< Ö´D+³1 5+´+°A2°H/² "333´I+° 2²IH +³@I +°H° Ö´+°K/°GÖ´ 1+²G +³@GI +° ±%+°2´$+°2²$% +³@$" +±L+± G°:9°%·5J$9±<%±*-99°5°9±1D°39± ²)?999°³:$9±H°901267&#"'3254'"'3#67632533##4&''654.#"#".'#"&'673265#5!æ0)S43>ú8$=`' B!…F3VV3+»$%$34 "<8' Ø7¸(8R)($H8$)‚ÑE3þ:GÁ"' '(‚3!+M13ÿ×ÿ™ sHR\a6²+´+² +³@H +°° Ö´+°&/´V+°- Ö´5+³"V&+´I+°22°9/²ES]333´:+°C2²:9 +³@:A +°9°P Ö´>+°b/°8Ö´S1+²8S +³@8: +°S± +´+°±H+±@22´G+°B2²GH +³@GE +±c+±S8°+9° ±&X99°³ $^`$9°H¶ ";IN]$9±°9±-´  $9°&°L9±"5°$9±IV²0@999°P³+NX`$9±>9°<901.#"#"&547326324&''654.#"#".'#"&'673265#5!632533##267&#"'3254'"'3#6EI LZ.EF.46+»$% ",4 "<8 $ Ø7!…F3VV3þÏ0)S43>ú8$=`' 2( M@%0 .<) +)GÁ"' %(‚3!*M13‚ÑE3ýž(8R)($H8$ÿ×ÿ¾™sP[ejQ²=+²F+²K+°@/´O+°8 Ö´+²8 +³@85 +°/´_+° Ö´"+³_+´Q+°2°&/²2\f333´'+°02²'& +³@'. +°&°Y Ö´++°k/°%Ö´\1+²%\ +³@%' +°\±L+´C+°C±+±-522´4+°/2²4 +³@42 +±l+±\%°9°LµQafg$9°C³() $9°@ +8GIOUWY$9±8=±CL99±@±99±O± 99°°U9±"°9±Q_²-999°Y³Wai$9±+&°)901%63254&''654&#"#".'#"&'673265#5!632533##54#.#""&54632267&#"'3254'"'3#6´ (/ »%&24 "<8 # Ø7ƒH3UU2#-1$#-7#5!!#2#"'73254.##4'#326îDO LZ.DG.46#—7"^"(     #ÂôþÕ"!' ’2é) /"( 9&3U’!1*2' M@%0 .<) +.7I-Z*8 -  !B933)*7# *?%¬2.& &þ'%T2$ÿ׬. Bé²+°$/´#+°/´++°//´+°6 Ö´>+°B/² 333´+°C/°AÖ´ 1+²A +³@AB +° ±'+´!+°!±+´+°±+° 2´+² +³@ +±D+± A°49±!'´-/$9±µ#$+$9°°9±#± '99°+°9±>/°9±B³49;$901!3254'"'%!##54&#""&54>3&'#".'#"&'673265#·". 9þË8$=þYÕC4\+ ' )(% / 4 "<8 % Øû".0</ 3$H8$33þoZ (+" /!(‚3!+M1ÿìÿo .CÔ°/´+°./´7+°)/´+°?/³ B$3´@+°2²?@ +³@? +°D/°%Ö°2´ +² % +³@ B +³ %+´"+°"/´+° ±+° 2´+² +³@ +² +³@ +±E+± ²999±.´ "%$9±)7´&,01$9°°9°?°=9016325#53##54&#"3".54675.#"#"'73267.'5#5!#s@5"'2313/¤B3Q#     :(20A,- B_8ü!û84E®þ:4ý33ýt6? (!, ÁN4?4j" EK7"33ÿ× .?Iõ°1/´+°( Ö´+²( +³@($ +°/´C+° Ö´+°/±@33´+°J/°=Ö´4+°4±+´@1+²@ +³@ +°@±$+°2´#+°#±E +´ +² E +³@  +±K+±4=°9°µ17:$9°@± 899°$²-C999°#°I9° °9±1(°9°°9±°"9±C³ $901726325.'#"&'673265#5!##54&#".#"#"&5463254'"'¨10!2 "<8 " !Ø7W33** $ .9B€8$=ë6 ž'‚3!(F833"<þÙ(  %*(-5,$F$H8$ÿìÿ²ü.Oϲ+²#+²++°/´/+° Ö´3+²3 +³@ +°>/´M+°9/´+°/±33´+°P/°,Ö´"+°"±5+±22´+²5 +³@ +±Q+±",²>M999°5¶ &)/<$9±±",99±3±1599±9M´6¥° /´ +°/´+°/´+°#/´.+°;/´<+°?/°Ö°+2´+°&2°±:+± 22´9+°12±@+±°)9°:¶ (.3$9± ´568$9°°9°°39°°9°#³ )+1$901.#""&546325&/32>54&#"&54632&'#5!K '7!&"/>,-H%z’_:&: M$B0d/6l•¥Y&&3þœà|"8 *2)#C21Tc09!(# $<#$*9+KZ9o2[p!*ÚÆ33ÿÓÿÈI..2†°/´+° /´+°/´*+°//´0+°3/°'Ö´"+°"± +´+±4+±"'°%9° @ $*$9±²999° ¶ "%'$9°°-9012'654&#"&/32654&#"&546326%5!Û0:.;&A|¤Z&¥Ý[,CXK&1++ Q?0a 5þ'v¥;1$:*.#a!Yr!»G9!@3$=4 %4EF*-V33ÿéÿú§..<Aú²+°/´%+°(/´/+³A/(+°3´5+°+2°/²:=333´+°B/°,Ö´++²,+ +³@, +°+±%+°:2´2+´>+°2±4+±=22´+°2²4 +³@ +°±+´+±C+±+,°9°%´"/;$9±³ $9±´ "4$9°%°29°5²999°(²,999±/A² 999014'#5!#2>7&547#5.#&'>34&#"'46725.5#7#3f%X¾ê# 0D3O+$1C<-)CBVG)-�øR1!Å#33] */‹O…n=þŽ|6E!6A%+ l@;¦7&2*ÿçÿË=.Gæ²9+² +°/´+°C/°=3´)+°-2°/´$+°3/°63´4+°H/°!Ö´+°±+´+°±@+´?+°?±9+°12´8+²89 +³@86 +²98 +³@93 +±I+±!°9°³ $$9°±'99°@´ )$9°?°+9°9°-9±° 9°C·!1@$9°)±'+99013"&'&/32>54&#"&546326326325!5!##4&#"4&#|4/.A %C¥Y&©Ù_:&: M$B0d/'V":0/+&ý+VN3@%'." %.301+"[p!ºH9!(# $<#$*9+K4''0+ ‡33þYL&3)ÿçÿJç.DHư2/´A+°* Ö´+°/´+°/´+°E/´F+°I/°Ö´+³5+´>+°>/´5+°±+± '22´%+°2±J+±>±99±5°9°@  *289;A$9±2²"C999°A°%9°± 99°°9°³ $901%25&/32>54&#"&54632&'#4&#.#"#"&5463265!"z’_:&: M$B0d/6l•¥Y&&2-+"#!.;J(2( þíàOc09!(# $<#$*9+KZ9o2[p!*¢7-  B"07,+?0ø33ÿçÿ“W~HS]j°R/´L+°/´++°5/´A+°X/´+°2²X +³@X +³X+´\+°:/²=333´;+±22²;: +³@; +°^/°%Ö´&+°&±8+´?+²?8 +³@?< +²8? +³@8; +³J?8+´O$+°?±.+´+°T2³.+´D+°D/´+°\2°±V+´+°± +°2´ +°2´#+±_+±8&°'9±O?µ5+ALR$9°D°=9°.°19±°9°V´X$9±5+°9°A².T999°\°19°X² V999±±D99°:±%&99012533##&#"32632'#".'32654&'#"&=#5!#32674>4632#"654#"+1;K-2AB3S^*= 8,&n!p[=b7'/Z4(-CP4 %á« Œ`&8+þÉ "åb G!/0HÇP3þ `›: 7!kWjIe�[&†©$[H4 7!5+­33©/i(: ýƒ2i^"7ÿÝÿhT.)05”°/´ +°*/°&3´ +°2²* +³@*) +°/°3´+°6/°)Ö² *1222´(+°2²)( +³@) +°(±#+´+²# +³@ +±7+±#(±99± °9°*´  -$901.#'67.#'675!5!##"'72>54&+#/P+!AU,w;z™þ®wò9F0/")( \23œ)‰MKf!*0D,8P6`*.33.(L1#B%'7LýÎ2JX/W* +ÿÉï{6²°"/´+³"+´%+°/°33´++°12²+ +³@6 +²+ +³@+/ +°7/°(Ö´+°± +´+°±6+² .222´5+°02´3+±8+± ¶ %+$9°±99±"%± 99±±(99°°.901%.#'675&#"32632'7674#"#"&54632533##yMKQ,!LeV^!F O",E**8+ N  WC9M.3CC3º* A *0L2o›7#)"!E( 6)%1^5HÇM3ýÎÿçÿN¿.*3ˆ° /´+°/±&33´+² +³@ +°4/°Ö´)+²) +³@ +°)±+±%+22´+² +³@ +±5+±)± 99°³ 1$9± °9°±9901.#'67./7#"&547#5!##27#OQ,!ES"q=N &HOØ=3�& !�&')Þ3Å  J *0E-0B (R8,33ýSE $ #a0 þ©   ÿåÿU±.(1�° /´))+°/°3´+°2/°Ö´)+°2²) +³@ +°)±(+°2´'+°'±- +´$+²$- +³@$ +±3+±)± 99°(³ /$9±) ²999°²&199901%.#'7&'#5!!3#'2>54.'$  JP,! cÌþÊ  #433–#bDLgC   >!)0Ô33= (&4Gþ¾àYi ÿñþò.BMǰ/´ +°-/´C+°*/´>+°2/°53´3+°N/°0Ö´L+°62²0L +³@02 +°L±F+´*+°*±+±$22´+°2² +³@5 +±O+±L0± 99°F²-999°*± 99°²>999± ° 9±*C³$FL$9°>±HI99°2°K901&'#5.#'67򂂮.'#"&=#5!!322654'#"'\# J3%80/X25"3O+!B]€ƒGVx  _104*þ= "12!)þæC1     ¼ <(8)0$î3#'0F/U4[2 @].á33  7;K&†ÿçÿ7a.H °"/´)+²)" +³@)% +°0/´+°/´>+°7/°:3´8+°I/°%Ö´&+°&±4+´+²4 +³@47 +°±,+´+°±H+±22´G+°B2²GH +³@G: +³DGH+´ +° /´D+±J+±,@  ")06;$9°°9° °>9°H° 9±GD°@9±)"° 9°0³ ,D$9°°.9°²4999°>°A9°7±@9901%.#'67&547".'32?#"&5332654'#".547#5!!327#ÜKKQ,!DY #T[)$*%*`4jz3aO"@(1'2KåzþÀK923%( >!)0F../]X*. B!-"$,!@RÒ¥ˆ¼6'$&1/a1337'!>_;HTÕÿÇÿZš'Aê°/´+°0/° 3´1+°2°B/°:Ö´?+°?±.+´ +². +³@.0 +° ±+°2´+°± +´+°4 Ö´+²4 +³@ +±C+°6º—À*+ °A°À±7ù°6À³67A....³67A....°@±?:°<9°.°=9° ±')99°µ&+$9°±99°4°29±°9017523!32654#"'632#5./67.5#5!654'"&5473�G$B>.I/þÓ;d&!"-33  !d[[š3G!*a!#/š%l32533##dMKQ,!MdY$-H, )F>)3& 3__3»* B *0L2c+w4<>3^+1:('Êc3ýÎÿßÿ.U.:>m°%/´2+°;/´<+°?/°-Ö´(+°2°(±:+°2´9+°9±"+´5+±@+±(-± +99°:µ %*2$9±2%±9901%.#'67. '332654&#"&54>32#5!`+JQ,!-3/#  3 ")=(BLF57 + 8&Kc503þv  >!)0.".#=#DBK^b6"\IFa!#'" '}]AiþôÍ33ÿ[ë†-2´°/´+°'/´$+°/° 3´,+°2², +³@ +², +³@, +°3/°)Ö´"+°"±+´+°± +±.22´ +°2² +³@ +±4+±")°9°@ &'+,0$9± °9±°9±$²)9990133##5.#'67./67654&#"327"54624\%jI4QQ4P, XV~Q2JL§8P)YïX3ý`3 *0@*=@ 8<"*$4M2DJþe&ÿè«. &p°/´ +² +³@ +°/° 3´+°'/°Ö´ +²  +³@ +² +³@ +° ±+±$22´+±(+± µ !$901"##5!!632#7./6754&5'g3HÃþ·LP12 &5 cRUK>˜}* 33 pþ( +R#E ä9 &-ó5+05¡²+°3°5/°3´+° Ö´'+°6/°$Ö´ +° ±+±,22´+°12°±+±322´+² +³@ +±7+± $° 9°³"').$9±°9±5@  $*,01$9°°)9015%"75!##5.'#5./7&54632&7675#’0{.€þä#y«g3†C3GkMp^),*' ŸyUxV3gwÞ: O4ò >¯ DJ3þX/{ þõVGK)[F=8Y323>üD'@s$þk>j3  !$z 94 ))&)H2 Ò#/š"°>33-&5þ¾"*!L, !2% ,,ÿØÿ˜Ú.$,q°/´+°/°3´+² +³@ +°-/°Ö´ +° ± +²%222´+² +³@ +²  +³@  +±.+± ´*$901767.#"&54>325!5!##5.#7¦JfA&'"!4#4,b3þ�P3Q,�# KEN0?C , '&D/F"fÌ33ý�3 *q   ÿÉ s&1s°/´'+°//´+°$ Ö´!+²$! +³@$& +²!$ +³@! +°2/°&Ö² 222´%+° 2²%& +³@%# +±3+±'²999°/°-901%.#'6754&''654&#"'>32533##267&#"‚MKP*!Md,»$%.# n6…F3VV3þÏ # S34 ?»* B"(0N0FHÁ"&!$ $1P‚ÑE3ýÎï ,+R)!ÿçÔ.#(ˆ²+°3°/°3´+°/±$33´+°)/°Ö±22´+°$2² +³@ +°±+±'22´+² +³@ +±*+±°9±µ #%$9°°'9015.#'675!5!##5.'#675s.{.€bRp'!~”þ½íf4…D3-z%ˆ3on: M6ò >úUH6b++33þX/z þõ� >X,J”L+ÿéÿYA.=AŸ°;/´+°/´ +°02°>/´?+°B/°0Ö´1+°1± +´+°±$+°2´#+°#±7+´+±C+± °)9°$· (+4;$9°#±999±;°79°² 9999° ²199901%4632&#"3267#5.#'67.'32654'#"&'5!…  Já)4! K%3!%(#2M,!'*:_B*9%”T,P"5R3O»XG   ®#00:2G #!9 &Rþñ3!)0) LukD“¥Q?3Z7Â33ÿéÿðÕ.<«²+°5/´0+°/±33´+°=/°8Ö´.+²8. +³@8 +°.±+°2´+°± +´+² +³@ +±>+±.8°9°µ25;$9°°9°°9±5²'999°0²)3999°³,8$9017574'#32%#5!##5./67.#"327#"&54674¾G$Ex#µ '*:þòeìa3  !'l$c +& ·#/š&Â4,#)¢3309;þ¼"*#CG3*'(ÿèÿc .@EPô²+´+² +³@@ +°° Ö´+°-/´(+°6/±9H33´7+°Q/°Ö´ +° ±0+´&+²0& +³@06 +°&±@+±C22´?+°?±F +´<+²99°6³$0NBè93hO/û82NàýŸ +0L1�C+P,L/‰&!"33ým¬+}ÿôþ÷à. F¾°0/´=+²0= +³@0) +°0°- Ö´@+°#/±&33´$+°G/°5Ö´:+°:±+´+² +³@# +°±)+³ B$2´(+²() +³@(& +±H+±:5°79°²!"8999±)· 0=$9±=-°B9±#@¶ 57:C$901%55>754&#".547.'5#5!##5.#"#".547326325.#O/½=79.±0O2`#B2TB.Š ALGì83B!=/E#-DH 1 47R,+}·73Nàþ27 €C+O,G1ˆ$$"33üü5' ,.%0 .<) *+,ÿßÿ˜ .4¶°/´+°/°3´$+°(2°./°13´/+²./ +³@.4 +°5/°!Ö´+°±+´+°±4+² ,222´3+²34 +³@31 +²43 +³@4. +±6+±³ $$9°±&99°4±(99±° 9°²!,999°$°&901%.#'6754&#"4&#3"&546326325!5!##ŒMKQ+!Md@%'." 5.54&#"&54632675•.{,„þ;f4�H"^¥Y&©Ù_:&: M$B0d/3gnq: M6ò @ª33þX66 [p!ºH9!(# $<#$*9+KQ5L+ÿçÿ'ç.26V°/´&+°3/´4+°7/°#Ö´+°±2+±22´1+°)2±8+±#°!9°2¶  &+$901%.#'67&/32>54&#"&54632&'#5!K # JR+!EZu…_:&: M$B0d/6l•¥Y&&3þœà   >!)0F/X,9!(# $<#$*9+KZ9o2[p!*èÔ33ÿ™›„_�²+´+² +³@ +°° Ö´+°/´N+°$/´%+°%°W Ö´X+°-/´8+°R Ö´]+°I/´F+²FI +³@FD +°`/°Ö´+³0+´5+°±(+´>+°>± +± C22´+±EI22² +³@H +°±Z+´U+°U±P+´+±a+±0°9±5±299°(@ $%-3;A$9±Z°L9°U±N99°P²WX]999± ° 9±³!C$9°N±99°$°9°X°L9°%±A99°W°&9°R°Z9°-°J9±8]±(>99°I²03*999°F±;29901#".'#5.#"#"&547326325./>54'"&547326733#3274#"3"54632ƒK+( 4CQLZ.EG 7 46³86q4)$1( ,(54'"&547326733#67O/_4CQLZ.EG 7 46³86q4)$1( ,($9°Cµ(-1;?$9°8²6G999°4²0999°°90127#".'73254'#"'732654&'.#"632'654#"&546Î#0%s/O;8RGE/ -/C%M 6$,E-/()"9$J[OY…Y6#80B9]ªp R.T5B%O *"%Q[%`;+1>#J .Fÿ®�{\€°/´+² +³@ +°° Ö´+°/´L+°U/´T+°5/´)+³&)5+´8+°)°Z Ö´P+°!/°F3´>+°D2²>! +³@>B +°]/°Ö´+³;+´$+°±3+´,+°,±+±A22´+±CG22² +³@F +°±W+´R+°R±N+´+±^+±;°9±$°9°3·!)/08>$9°,± 99±W°J9°R±L99°N³TUZ$9± °9±±99°L±/99°U³0J$9°T°9°8±RW99°P±,99°5°H9±Z&°;9°)°$9°!°A901"&'#5.#"#"&54732632&#"32632'7674#"#"&54632533#3274#"3"54632„KT)3C@YM.DG 3 28V^!F O",E**8+ N  WC9M.3ññ  6 *>0#$,96G##þ¬6' W6), *;) *<›7#)"!E( 6)%1^5HÇM3‰G,X'$;(<ÿ®{{PO²+°/´+² +³@ +°° Ö´+°6/´*+³'*6+´9+°"/°G3´?+°E2²?" +³@?C +°Q/°Ö´+³<+´%+°±4+´-+°-±+±B22´+±DH22² +³@G +°±+´O+²O +³@OL +°O° Ö´+°/´+±R+±<°9±%°9°4·"*019?$9°-± 99±O°K9±°9± °9±9@ 01ILO$9°6²- K999±*'±%<99°"°B901%&547#5.#"#"&54732632&#"32632'7674#"#"&54632533#67O/^3C@YM.DG 3 28V^!F O",E**8+ N  WC9M.3ÏÏ@7 g�"þ†6' W6), *;) *<›7#)"!E( 6)%1^5HÇM3�$Z$C+ÿ¾�{e™²+²+²+°/´!+° Ö´%+² % +³@  +°/´U+°^/´]+°>/´2+³/2>+´A+°2°c Ö´Y+°*/°O3´G+°M2²G* +³@GK +°f/°Ö´+³-+´D+°D/´-+°±<+´5+°5±+±'J22´+±LP22² +³@O +°±`+´[+°[±W+´+±g+±-²/9A999°<@ !*28>G$9°5°9°°#9±`°S9°[±U99°W³]^c$9± ±99±%±#'99±U°89°^²9S999°]°9°A±[`99°Y±5(99°>°Q9±c/°D9°2°-9°*°J901"&'#54#.#"#"&54632632&#"32632'7674#"#"&54632533#3274#"3"54632„KT)3"- .$#.;C/1) (V^!F O",E**8+ N  WC9M.3ññ  6 *>0#$,96G##þÞ(< ,4/7,$F1›7#)"!E( 6)%1^5HÇM3‰G,X'$;(<+ÿ¾{{Yh²+°3²+²+°/´"+° Ö´&+² & +³@  +°?/´3+³03?+´B+°+/°P3´H+°N2²H+ +³@HL +°Z/°Ö´+³.+´E+°E/´.+°±=+´6+°6±+±(K22´+±MQ22² +³@P +°±+´X+²X +³@XU +°X° Ö´+°/´+±[+±.²0:B999°=@ "+39?H$9°6°9°°$9±X°T9± ³$9±&±$(99±B"·9:RUX$9°?²6)T999±30±.E99°+°K901%&547#54#.#"#"&54632632&#"32632'7674#"#"&54632533#67O/^3"- .$#.;C/1) (V^!F O",E**8+ N  WC9M.3ÏÏ@7 g�"þ¸(< ,4/7,$F1›7#)"!E( 6)%1^5HÇM3�#`%gÿçÿº.kˆ² +´+²+´+² +³@ +°)/´0+²0) +³@0, +°a/´M+°7/´ +³V 7+°53´U+°Q/°3´[+°E2°>/°A3´?+°l/°,Ö´-+°-± +´ +° ±; +´+²; +³@;> +°±3+´&+°&±+´i+°i±X+´S+°S±O+´^+±m+±3@ #)07=B$9°&°9°±E99°i²999°X³GKfk$9°S±Ma99°O²UV[999± ±k99°°9±a0±i99°M±&399±V7°f9° ±Kg99°U°^9°Q´"#;X$9°[±GI99°>°901.#"#"&5332632.547".'32?#"&5332654'#".547#5!!3273274#"3"54632#".'ïA t"IE3X!y '$ #T[)$*%*`4_…3iG"@(1'2Kå(þK94 )7 *>0#$,A4   --4dU†4 r]X*. B!-"$,!@RØŸƒÁ6'$&1/a1337'! B3X'$;(<-,Q ,M6A…ÿçÿºÕ.[q² +´+²R+²+´+² +³@ +°)/´0+²0) +³@0, +°7/´ +°/´E+°>/°A3´?+°\/°,Ö´-+°-± +´ +° ±; +´+²; +³@;> +°±3+´&+°&±+´Y+°Y±T+´O+²OT +³@OL +°O°Q Ö´R+°R/´Q+±]+±3@ #)07=B$9°&°9°±E99°Y²999°T´GIHW[$9±OR°K9± ±[99±R±Q99±70´&3OY$9° ²5TW999°µ#;ILV$9°E±HK99°>±G9901.#"#"&5332632.547".'32?#"&5332654'#".547#5!!32767&547ïA t"IE3X!y '$ #T[)$*%*`4_…3gI"@(1'2KåîþLK94 ,8/]--4eT†4 s]X*. B!-"$,!@RØŸ„À6'$&1/a1337'! #`%WU a£"K5A…ÿåÿõÂ.JN ²+° /´+° Ö´+°/´9+°9°$ Ö´)+°C/´B+°=/´H+°/´/+°L/´M+°O/°Ö´+°±+°2´+°22°±E+´@+°@±;+´+±P+±°9°´ ,/$9±E°69°@±999°;²BCH999± °9±$9²'999°C³"&6$9°B²,5999°=³3E$9°H±29901#"&'#4#"#"&54732632&#"327#"&546323274#"3"546327!5!©L*)'.\Š =K, Vv'&w !)•7. 5* >0#$,ý#Ý97F!#þõr]I4<*3$#m'$#*8Œ. ) &4X'$;(9’3ÿåÿõ¡.9=¿² +°3° /´+° Ö´+°+/´&+°!/´1+°;/´<+°>/°Ö´+°±+° 2´ +°42° ±+´+±?+±°9°´ .1$9±±799± °9± °9±&+²)999°!@ (.48$901%&547#4#"#"&54732632&#"327#"&5463267!5!b/^.\Š =K, V"s'&w !)•7. @7?ýD¼ˆ>G a£"þÍr]I4<*3$#m'$#*8Œ. :›?3ÿ�œ†]h²+´+² +´+² +³@ +°/´L+°"/´#+°#°U Ö´V+°4/°P3´/+°[2°*/°F3´:+°D2²:* +³@:B +°^/°Ö´+³7+´-+°±'+´<+°<±+±A22´+±CG22² +³@F +°±X+´S+°S±N+´+±_+±7°9±-±#99°'@ "149:?$9±X°J9°S±L99°N²UV[999± °9±³ A$9°L±99±V"±?99±U#±J99°4±SX99°/°H9°*²'7<99901#"&'#5.#"#"&547326325&/67654&#"327#"&546233#3274#"3"54632„K+*'4C>LZ.EG 1 46vš,p'@7) ? (V~Q]$iJ4ðð-6 *  >0#%,94I"$þ�5( M@*+ .;) +B›8;"*$3-!2DJ=7Q(ZïX3Š (PX'$;(<ÿ�{†R"²+´+²+°3´+² +³@ +°(/´)+°:/´5+°0/°L3´@+°J2²@0 +³@@H +°S/°Ö´+³=+´3+°±-+´B+°B± +±!G22´ +±IM22² +³@ L +° ±+´+±T+±=°9±3±)99°-@ (7:?@E$9±±P99±±!99±(µ"G$9°)²E999°:²NQ999°5°P9°0²-=B99901%&547#5.#"#"&547326325./67654&#"327#"&546233#67=/^4C>LZ.EG 1 46 ;/C$,p'@7) ? (V~Q]$iJ4ÏÏ@7ˆCB g�"þg5( M@*+ .;) +B!!58;"*$3-!2DJ=7Q(ZïX3�eÿûÿ·.<¯°/´+°/´+°&/´8+° /´ +°./°13´/+°=/°*Ö´5+²5* +³@51 +²*5 +³@*. +°5±+´ +±>+±5@  &-2$9±³$9°°9±8&°9° ± #99° ²*5;99901%&#"3262&'#"&4632654#"#".5467#5!!32>F$ $%3@CW6(0M9<("/24:3;-,9 †!þ +0&0\LD4_[DNBA9908?JV'?-:#&K22O&7(/(ÿîÿþÓ.K8²+° 3´+³+´"+°/´;+°D/´C+°?/°(3´I+°42°-/°03´.+°L/°Ö´+°±++´2+²2+ +³@20 +²+2 +³@+- +°2±&+´ +° ±F+´A+°A±=+´+±M+±°9±2+²*999°&°"9° ² $(999°F³ 49$9°A±;99°=²CDI999±° 9±"°$9°´ &*$9°;²+999°D²92999°C±99°?±7F99°I°5901#".'&'"#".54732632&547'#5!!673274#"3"54632°A4!, .(5'm '0!1-$#p #* ƒd.žåýìe•,  6 *>0#%+9,Q0 1C^P "@*/:!3:jS³2"33ê†!F+X'$;(<ÿïÿù›.<ÿ²+²+° 3´ +°/´#+°-/°03´.+°=/°Ö´+°±++´2+²2+ +³@20 +²+2 +³@+- +°2±&+´ +° ±+´+°° Ö´+°/´+±>+±°9±2+² *999°&²"#999° ² $(999°´ 457$9±°99°°:9±± 99±# °$9°-@  &*$901%&547.#"#".5473262&547'#5!!6767S/[ .8$n" '0!1-$!oF* ‚d.ž¬þ%e•, +8ˆCB fž"1C^P "@*/:!3:gV³2"33ê†! #€ÿ™�5WP²+´+² +³@Q +°°U Ö´+°M/´9+°B/´A+°=/´G+°/2°4/´1+°' Ö´"+°X/° Ö´+°±+´*+°*±Q+²0222´P+°42²PQ +³@P3 +°P±D+´?+°?±;+´J+±Y+± ° 9°± 99°*°9°Qµ"$$9±DP°79°?±9M99°;³ABGL$9±U°9±M³ $9°9± 99°B²7O999°A²J999°=°D9°G±599°4µ*.0%$9°'°$901%"&547326325./7&54632&#"75!#3274#"3"54632"&'#5.#"yyUDU™F`.EF 3 :FkMq_<+( $y$ñ  6 *>0#$,KT)3D =œ +°/°3´+°E/°;Ö´5+°5±'+´+°± +´+² +³@ +²  +³@  +³ +´-+°-/´+±F+±5;°99±'²28>999°-´"$)/$9° ³ B$9°°9°± 99±$±"&99°±99°)±'+99°2µ-9;B$9°>± 99017327&#"74'!5!#&'#"&4632654'.#"&546323>×#&Ã$þk>j D.-)=52$.6&6 o& )6')H2 § ý>33,'2*(!EbQE'+H,'"+Q !2!+,,ÿáÿä.=˰;/´4+°./´+° /´+°!/°$3´"+°>/°Ö´ +° ±+´1+°1±+´'+²' +³@'$ +²' +³@! +±?+± °9°² 999±1@  *+69;$9°'°%9±4;°99°.²,6999°°+9° ´*$9°±'990174632'.#"&54>323>54'!5!#&#"327'#"&Þ;,  :1 ))&)H2 $þk>j(#%" …'o"*E¼(39- !2% ,,>33-&> SªŠ'ÿá(.+•°/´)+°/´%+°/°3´+°,/°!Ö´+°±+´ +² +³@  +² +³@ +±-+±!°9°µ%$9° ² 999±)³ $9°°!9°%± 99014'!5!#'7".#"&54>323>š$þk>jd†ý�:D  ))&)H2 ¨>33-&1,Ge8²g,, !2% ,,ÿáÿü.G²-+´3+°9/´:+°@/° 3´+°/´+°/°3´+°H/°/Ö´0+°0±+´+°±+´C+°C±+´"+°(2²" +³@ +°"±5 +´*+²*5 +³@* +°5°= Ö´&+±I+±° 9°° 9°C±99°@ -39:@EF$9°=² $7999±93±*599°:²(7F999°@²&E999°´$/0$9°°9°±"99017467&#"&54>323>54'!5!##"73254'#5>54&#"3&Å80?' ))&)H2 $þk>j!D"4ZIÝj0(˜Wp2 89,O*51]ý$? . !2% ,,>33-&($0426BG‹—C) 1(%'4 ÿëÿþQ.Z|²+° 3´ +³ +´#+°/´K+°T/´S+°O/°)3´Y+°D2°/ Ö´9+°=/°@3´>+°[/°7Ö´2+°2±+´+°±;+°,2´B+²B; +³@B@ +²;B +³@;= +°B±'+´ +° ±V+´Q+°Q±M+´+±\+±27°59°°49°±/999°;°9°B± +99°'±#99° ² %)999°V³ DI$9°Q²KX999°M±ST99°°Y9±° 9±# °%9°´ '+$9°K²,999°T³-5B$9°S´46I$9°O²2;V999°/±7G99°Y°E901#".'.#"#".54732632&547'5&#"&46325!5!!673274#"3"5462$K*!, /7%n# &/!24$o! , ƒd.<6!(9(5<þífýàe–, -7 *>0F-96G1 5AUY "@*81!3:b[³23vR3L’33ê†! 93X'$;(:ÿëÿù .N0²+²+°3´#+°/´&+°2/´<+°@/°C3´A+°O/°:Ö´5+°5±+´ +° ±>+°/2´E+²E> +³@EC +²>E +³@>@ +°E±*+´ +° ±+´+°° Ö´+°/´+±P+±5:°89°°79° ±2<99°>°9°E±#.99°*±&99° ²(,999°´ GHJ$9±°L9±± 99±&#°(9°2@  *.8:>EJLM$9°<±GH9901%&547.#"#".54732632&547'5&#"&46325!5!!6767Ä/\ 9%m#(. 24"q $) ƒd.<6!(9(5<þí!þ%e–, +8ˆK: d ,4@UY"@*81!3:b[³23vR3L’33ê†! Œ ÿ™¦sMXP²+´+² +³@ +°° Ö´+°/´=+°F/´E+°A/´K+°22°K°N Ö´*+°8/´5+²58 +³@53 +°8°V Ö´0+°Y/°Ö´+°±+±222´+±4822² +³@7 +°±H+´C+°C±?+´+±Z+±±,99°µ*0NT$9±H°;9°C±=99°?²EFK999± °9±±99°=²$999°F±%99°E±;99°A²'HR999°*±,999°K°#9°N°-9°V°T901#"&'#5.#"#"&547326324&''654&#"'>32533#3274#"3"54632%267&#"�A4*)3CI LZ.EG-46,»$%.# n6…F3ññ)7 * >0#$,ýÄ # S34 ?9,Q##þ—5( M@!4 -<) +)HÁ"&!$ $1P‚ÑE3‰<3X'$;);Q ,+R)! ÿ™}s@K²+°3´+² +³@ +°° Ö´+°,/´A+°:/´7+²7: +³@75 +°:°I Ö´2+°L/°Ö´+°± +±!422´ +±6:22² +³@ 9 +° ±+´+°° Ö´+°/´+±M+±±.99° µ,2AG$9±°=9°°>9±°9°°!9±,@ &.;=E$9°A²%/4999°I°G901%&547#5.#"#"&547326324&''654&#"'>32533#67267&#"?/W3C:LZ.EG,46,»$%.# n6…F3ÈÈC-þ # J%52 ?ˆCB g�"þo5( M@!4 -<) +)IÁ"&!$ $1P‚ÑE3œ%€ ,+H()! ÿ¾¦sWb^²+²+²+°/´#+° Ö´'+² ' +³@  +°/´G+°P/´O+°K/´U+°<2°U°X Ö´4+°B/´?+²?B +³@?= +°B°` Ö´:+°c/° Ö´+°±+±)<22´+±>B22² +³@A +°±R+´M+°M±I+´+±d+± ²./4999°·#1:\^`$9±R°E9°M±G99°I²OPU999± ± 99±'±%)99±G°.9°P±/99°O±E99°K²1R\999°4±6C99°U°-9°X°79°`°^901#"&'#54#.#"#"&5463263254&''654&#"'>32533#3274#"3"54632%267&#"�A4*)3!,'(#-0#$,ýÄ # S34 ?9,Q##þÞ'= &*/6-$F1ÜHÁ"&!$ $1P‚ÑE3‰<3X'$;);Q ,+R)! ÿ¾‚sIT"²+°3²+²!+°/´%+° Ö´)+² ) +³@ +°6/´J+°D/´A+²AD +³@A? +°D°R Ö´<+°U/°"Ö´+°± +±+>22´ +±@D22² +³@ C +° ±+´+°° Ö´+°/´+±V+±"²016999° ·%3999°R°P901%&547#54#.#"#"&5463263254&''654&#"'>32533#67267&#"D/\3!,'(#-0#$,A4))4#:/ #*.) -z2�" H1ƒ6`-+33Š<3X'$;(;.,Q"!þš5 ;'+* (&3{ >`!ÿúÿ™k.9@ò²+²-+´+²- +³@-$ +°°) Ö´+°:/´ +°/°3´+°A/°2Ö´7+°7±$+² :222´#+°2²#$ +³@# +²$# +³@$ +°#±+´+°° Ö´+°/´+±B+±72°49°$³ -5=$9±°9°°9±)°9°°9±:@ !"247@$901726325.#'675!5!#67&547#5.##".547„ƒ  £@"z˜þ�qÊA1/Y4#:/ #*.) -{2�" H2„4`-+33œ %€*1T d ,þp5 ;'+* (&3{ ?`!ÿçÿ�N.Q"°/´(+° Ö´,+², +³@ +° /´A+°J/´I+°E/´O+°8/°;3´9+°R/°&Ö´+°±.+²6222´ +°<2² . +³@ ; +². +³@.8 +° ±L+´G+°G±C+´+±S+±&°49°.µ #(3$9±L °?9°G± A99°C²IJO999±°&9°,±*.99°(°/9° °9±JA³2 ?3$9°I²4999°E°L9°O±=99°8°69015#"&'#4&#.#"#"&46326325.#'675!5!#3274#"3"54632g~E0oªA4*)2- 1%$ .;J(3' *š9!~”þ½gñ  !6 *>0#$,:$eì8,Q##þ­<)  +607X>0,.ˆ6b++33‰G-X'$;(<ÿçÿ�+.<C²+²+²+°/´#+° Ö´'+² ' +³@ +°=/´0+°2/°53´3+°D/°!Ö´+°±)+² 0=222´ +°62² ) +³@ 5 +²) +³@)2 +° ±+´+°° Ö´+°/´+±E+±!°.9°)µ #-@$9±°99°°:9± °9°°!9°'±%)99°#°*9°=@ -.79C$901%&547#4&#.#"#"&46326325.#'675!5!#67'í/]2- 1%$.;J(3' *�B!~”þ½DÎ"TÃ,}%ˆˆ1T d ,þ‡<)  +607X>0,4‚4b++33� %~é @X,ÿçÉ.QU-²+°/´+´ +°/´@+°%/´5+°I2°5´J+°D/´O+³0OD+´++°R/´S+°V/°Ö´+°±(+´3+°3±"+°2´+°;2°±L+´G+°G±B+´+±W+±°9°(°9°3±99°"µ %+-9$9±L°>9°G±@99°B²IJO999±°"9±%@±99°J°9°5±>99°Dµ#73274#"3"54632%5!°A4'(- -! P9;$1C1b7aD0;3% 95;1-6 *  >0#%+ý7â9,Qù#"J5214B "èU>0!+$+ 3>8$PX'$;(:“33ÿçÿù¬.EIð² +°3°/´+´"+°'/´7+°2/´-+°F/´G+°J/°Ö´+°±*+´5+°5±$+° 2´ +°>2° ±+´+±K+±°9°*°9°5±99°$µ"'-/<$9° °=9±±A99± °9°±$99±'"²D999°7²999°2·*0%?AB$9°-³/<=>$901%&547#.#"#".547326325#"&54632&#"32>7675!n/^- -! P9;$1C1b7aD0;3% 9&%%1A6ýyň1T d ,þØ#"J5214B "èU>0!+$+ 3(E*L4N33ÿöÿ= .MTO°/´+² +³@ +°° Ö´ +°*/´)+°2°/´=+°F/´E+°A/´K+°4/±7N33´5+°U/°Ö´+°±-+´'+²-' +³@-4 +°'±+±S22´+°82² +³@7 +°±H+´C+°C±?+´+±V+±°9°-²23999±'µ)*/N$9±H°;9°C±=99°?²EFK999± °9±*±99°)°9±=±'-99°F²;S999°E°9°A±#H99°K²9/Q999°4°2901#"&'#5.#"#"&5473263254&#""&547.'5#5!#3274#"3"54632%5‡L)(*3C DYM.EF :56`#/*U+F‹ AMLªñ  !6 *>0#$,þ ?59.97F##þ;5( W6+* *;) +ø‚5+P,\-‰%""33‰G-X'$;(<•73Nàÿöÿ={.@G²+²+²+°/´+² +³@ +°° Ö´+°,/´++°2°6/±9A33´7+°H/°Ö´+°±/+´)+²/) +³@/6 +°)± +±!F22´ +°:2² +³@ 9 +° ±+´+°° Ö´+°/´+±I+±°9°/²45999± )µ+,1A$9±°=9°°>9±°!9±,²999°+°9°6¶%/F$901%&547#5.#"#"&5473263254&#""&547.'5#5!#675=/[3C DYM.EF :56`#/*U,E‹ AML…Ì?5þS?59.ˆCB g�"þ5( W6+* *;) +ø‚5+P,[.‰%""33�$}E73Nàÿéÿ™úsjv‚ɲ+´+² +³@ +°° Ö´+°/´Z+°./°c3´�+°p2°�°6 Ö´;+°.´b+°^/´h+°N2°h°k Ö´)+°D/±Sy33´E+°Q2²ED +³@EO +°D°t Ö´L+°ƒ/°>Ö´4+²>4 +³@>D +°4±+´+°±+±N22´+±PT22² +³@S +°±e+´`+°`±\+´+±„+±4>°C9°µ.89Awz$9°³+FI$9°µ)Lkr$9±e°X9°`±Z99°\³bch$9± °9±±99°Z²#999°;²$X999°.°99°b±W99°6°&9°�°`9°^²4>e999°)²+2U999°h±"w99°k±A}99°t±Ir99°D°G901"&'#5.#"#"&547326324&''654&#"#".#"327#"&54674'#5!>32533#3274#"3"54632%267&#"4'#32áKT)3E?LZ.EF.46+»$%!/,#G7 *& e‹M#…F3ññ  7 *>0#$,ýÄS34 ?[#µ '*:96G##þ—5( M@%0 ,<) +)GÁ"' $":))3+'(-33 %‚ÑE3‰$')X'$;(9O)!R) 64,#)ÿéÿ™Ñs^jv�²+°3´+² +³@ +°° Ö´+°3/´u+°d2°u°; Ö´@+°,/´_+°I/±Xm33´J+°V2²JI +³@JT +°I°h Ö´Q+°w/°CÖ´9+²C9 +³@CI +°9±+´+°± +±!S22´ +±UY22² +³@ X +° ±+´+°° Ö´+°/´+±x+±9C°H9°µ3=@Fkn$9°´/0KN$9° µ,Q_f$9±°\9±°9°°!9±@¶&'$9±;3²)999°u°]9°,µ079CZ\$9°_´%FSkq$9°h±Nf99°I°L901%&547#5.#"#"&547326324&''654&#"#".#"327#"&54674'#5!>32533#67%267&#"4'#32“/W3F>YM-DH :38. »$% /,#G7 *& e‹K#†F3ÈÈE+þI&24!?Z#µ '*:ˆ1T d ,þo5) W6%0 ,<) +)L Á"' $":))3+'(-33 %‚ÑE3œ`Á)!H()!54,#)ÿçO. 5;î²+°/´+°/´%+°./´-+°)/´3+³:3)+´+°/°3´+°0#$,þ09twY2"ö,Q##þþY6~4^6&33‰<3X'$;(<- \'ð"ÿçÿù'.#/¤² +°3°-/´'+°"/´+°/°3´+°0/°$Ö´*:+°*± +±!22´ +°2² +³@  +² +³@  +° ±+´+±1+±±99±- °9°'± 99°"@ !$901%&547#5.#'675!5!#67%54632#"&é/X3œF$€™þ¼@ÉB/þ}9twF&ˆCB g�"þ×Y4€4^6&33œ%~… \'ð"þâÿñÿyÿ.в+´"+²+° /´+°@/´1+²@1 +³@@D +°-/´J+³jJ-+´`+°[/°S3´p+°u2°y/°|3´z+°€/°mÖ´^+° Ö´+°^±b+´g+°g±>+´4+°4±O+°w2´~+°2²O~ +³@Oy +³&~O+´+²& +³@| +°&° Ö´ +±�+±^°9°b´[Gdjp$9°g´;BD/e$9°>¶-1:@JXs$9°4±VW99°O@ "*NSu$9°±)99±° 9°"³:$9°@µ &*4;$9°1±/G99°-³)N~$9°j°9±`J°O9°[´Xegms$9°p°w901%#".'732654'#"'732>54&'.#"632'>54##"&54632754&#".#"3254'7#"&546326325!5!#ñ P+@uL.3Sz7%  #;%!, 4B  H"%!/+3''=. 1-=C0; .þd?1d'  ):X}r% E—f$ - @I'D/   "C  "IDF(D!/&9-%C 1 F33þëDÿñaäJXÛ²+´+°&/´/+°6/´<+°/°V3´+°N2°Y/°)Ö´*+°*± +´L<+°L±?+´+°2 Ö´#+±Z+± *³$9°L±99°2@ /&8<@TV$9±#?°!9±6/±#299°<²!48999°±:>99°´AT$9°@ )*?@JS$9°°901#"'732654ᘀ>32>7#"&'732654'#"'673264'.'32>7#"&É(  66 M%&1 )E$M9t¾&2 1Hh8?"  '1"     1 &!,A&A (~"Y/Tݵ7xnG/ *,d%P   ( + ÿíÿ™³…i‘²+´+² +³@ +°° Ö´+°/´Y+°./°b3´)+°)°8 Ö´3+°.´a+°]/´g+°>/°S3´C+°Q2²C> +³@CO +°>°# Ö´G+°j/°Ö´+°±;+´&&+°&±+±N22´+±PT22² +³@S +°±d+´_+°_±[+´+±k+±²56999°;²38999°&³0E$9°³ ,.$9±d°W9°_±Y99°[²abg999± °9±±99°Y±99°3°9°.°W9°a²,5999±])´+06_d$9°g²;U&999°#±EN99°>°@9±CG°A901#"&'#5.#"#"&547326324&#"327#"'#"'732654&#"563263533#3274#"3"54632šA4*)3E JYM.EF 2 56P%!, <" 4#I5�N3ññ  !6 *>0#$,9,Q##þ—5) W6), .<) +Ms/6 +:')11=8k_  $ÀW3‰G-X'$;(<ÿíÿ™‰…[W²+°3´+² +³@ +°° Ö´+°0/´++°+°: Ö´5+°@/°U3´E+°S2²E@ +³@EQ +°@°% Ö´I+°\/°Ö´+°±=+´(&+°(± +±!P22´ +±RV22² +³@ U +° ±+´+°° Ö´+°/´+±]+±²78999°=²5:999°(³2G$9° ³.0$9±°Y9±°9°°!9±5³$9±:0³.7$9±%+@ -28=GPWYZ$9°@°B9±EI°C901%&547#5.#"#"&547326324&#"327#"'#"'732654&#"563263533#67J/V3E LYM.EF 2 56P%!, <" 4#I5 �N3ÇÇC,ˆ>G fž"þo5) W6), .<) +Ms/6 +:')11=8k_  $ÀW3œ›ÿíÿ¾³…r�²+²+²+°/´"+° Ö´&+² & +³@  +°/´b+°7/°k3´2+°2°A Ö´<+°7´j+°f/´p+°G/°\3´L+°Z2²LG +³@LX +°G°, Ö´P+°s/°DÖ´/&+³/D+´+°/´+°/±+±(W22´+±Y]22² +³@\ +°±m+´h+°h±d+´+±t+±/µ"9N$9°´$57$9±m°`9°h±b99°d²jkp999± ±99±&±$(99±999±f2´49?hm$9°p²D^/999°,±NW99°G°I9±LP°J901#"&'#54#.#"#"&546326324&#"327#"'#"'732654&#"563263533#3274#"3"54632šA4*)3"- .$# .;C/1) (P%!, <" 4#I5�N3ññ  !6 *>0#$,9,Q##þÞ&> ,4/7,$F1s/6 +:')11=8k_  $ÀW3‰G-X'$;(<ÿíÿ¾�…eg²+°3²+² +°/´$+° Ö´(+² ( +³@ +°9/´4+°4°C Ö´>+°I/°^3´N+°\2²NI +³@NZ +°I°. Ö´R+°f/°FÖ´1&+³1F+´!+°!/´+°1± +±*Y22´ +±[_22² +³@ ^ +° ±+´+°° Ö´+°/´+±g+±1µ$;P$9° ´&79$9±°b9°°c9± ³!$9±(±&*99°$°9°>°9±C9³7@$9±.4@ 6;AFPY`bc$9°I°K9±NR°L901%&547#54#.#"#"&546326324&#"327#"'#"'732654&#"563263533#67R/]3"- .$#.;C/1) (P%!, <" 4#I5 �N3ÎÎA5ˆCB g�"þ¸&> ,4/7,$F1s/6 +:')11=8k_  $ÀW3�%~ÿÎÿ™Ás\fnw|©²+´+² +³@ +°° Ö´+°/´L+°1/°U3´j+°`2´T+°P/´Z+°@2°Z°] Ö´,+°9/±Ez33´:+°C2²:9 +³@:A +°9°d Ö´>+°}/°6Ö´g+²6g +³@6: +°g±+´+°± +± @22´+±BF22² +³@E +°±W+´R+°R±N+´+±~+±g´18lqw$9°³.x{$9° ¶,;]bz$9±W°J9°R±L99°N²TUZ999± ° 9±±99°L²%999°1²&J999°T°9°j°(9°P²RWl999°,².Go999°Z²$6g999°]°q9°dµbmtuwx$9±>9°<901#".'#5.#"#"&547326324&''654.#"#".547#5!632533#3274#"3"54632%267&#"327'654.'"767#¨K*) 3F>LZ.EG.38,»$%V+ $4«Þ†F3óó  6 *>0#$,ýÁ0)S24?þû1b�1  '96Gþ“5( M@!4 .<) +)GÁ"'  (4 ,K$3‚ÑE3‡ 1'X'$;(LZ.EG.38,»$%X* $4«Þ†F3ÒÒ<>þ0)J%24?þû1b�1  'ˆCB b¢,þr5( M@!4 .<) +)HÁ"' )7 ,K$3‚ÑE3ž%~(8H()E%Y(  ÿ×ÿÿ. CK²+°!/´+°/´'+°2/´:+°. Ö´G+°@/± D33´A+°L/°=Ö´D&+²=D +³@=@ +°=°$ Ö´+°D±++°.2´+°±I +´ +² I +³@ C +±M+±D´!'0$9°+³)G$9°²K999° ± 99±!°9°°9°²$999°'°)9°2²+,999±:.±/99±@G´ 057=$90173267&#"&'#"&5463265'&5&'#"&'6732654'#5!!3254'Ï(#è -$A71%-7'9X)"<6 " $Ø7þò8$=¼  ""1 7)'HM'-"$-'/ j‚3!(@* 33$H8$ÿ×ÿû1.7AÞ²2+°5/´.+°(/´+° /´+°/±833´+°B/°Ö´++°+°8 Ö´&+°/´8&+²8 +³@ +°+±=+´!+²!= +³@! +±C+±8° 9±=+@ $%(.035;A$9°!°9±52°19°.°39°(³+&0$9°°%9± ±$99°´ !;$90174632'.'#"&'6732654'#5!#&#"327'#"&3254'"'Ý:. #7"<8 #ØZz%##" …'o:3#8$=Ô&42.'‚3!E# 33" 4 XªŠ6G$H8$ÿ×6. (›°/´+° Ö´$+°/±!33´+°)/°Ö´!&+²! +³@ +°!±&+´+²& +³@ +±*+±!±99°&´$9°± 99±°9°±99±$´ $901?&'#"&'6732654'#5!#3254'Í‘Y)"<8 % $Ø7W)!d§Ê8$=èj k‚3!*@* 33D6,G~8Å$H8$ÿ×.HP*²+´+°/´ +°. Ö´-+°&/±Lé³7L&+´?+°E/±I33´F+°Q/°Ö´+°±0+´++³0B+´I&+²BI +³@BE +°+±N+´+³N+´ +²  +³@ H +°°# Ö´+±R+±°:9°B±7<99±+0°59±NI@  &.-3$9±#± 99±± 99± .± 99±&-²#0999°7°9°?²3999±EL´5:54&#"3&5467&'#"&'6732654'#5!!3254'·#."4ZI.PDM0)—Wp278-F )2]17/"<8 " $Ø7þò8$=û"/ ,527B%A‚YŒ—D) 1%'4NG >‚3!(@* 33$H8$ÿìÿ\¸.Yb5²+´+²+´ +² +³@ +°(/°3´8+°I2°R/´Q+°#/´_+°M Ö´W+°@/±CZ33´A+°c/°Ö°12´+°±+±a22´+°D2² +³@C +°±T+´O+°O±K+´+±d+±³2>?$9°µ(4;Z$9±T°G9°O±I99°K²QRW999± °9±(²999±R8´ &04$9°Q³1G2$9°#²OTa999±_M±E]99±@W°>901#"&'#5.#"#"&54732632.#"#".'73267.'5#5!#3274#"3"54632%6325ŸA4*)3C ILZ.EF ?29 :(2  ,- B_8Ìñ)7 *>0#$,ýÔ@5"'29,Q##þZ6' M@*+ ';) * N4?4  " EK7"33‰<3X'$;(<•84E®ÿìÿ\“.EN9²+´+²+´+² +³@ +²+°*/´3+°%/´K+°;/±>F33´<+°O/°Ö°,2´+°± +±!M22´ +±@22² +³@ > +° ±+°2´+°° Ö´+°/´+±P+°6º ½Á~+ °@.°.°@±ù°±Bù³@B....°B.°@±³-9:$9° µ*/6F$9±°C9±°!9±*´$9±%3¶"(,-CM$9°K°I9°;°9901%&547#5.#"#"&54732632.#"#"'73267.'5#5!#676325U/[3C ILZ.EF ?29 :(20A,- B_8§Ìcþ@5"'2ˆ1T g�"þ36' M@*+ ';) * N4?4j" EK7"33�#zA84E®ÿ×ÿ™;seoy~¾²+´+² +³@ +°° Ö´+°/´U+°^/´]+°./´s+°5 Ö´=+°.°Y Ö´c+°J2°c°f Ö°:3´*+°C/²Opz333´D+°M2²DC +³@DK +°C°m Ö´H+°/°@Ö´p&+²@p +³@@D +°p±+´+°±+±J22´+±LP22² +³@O +°±`+´[+°[±W+´+±€+±p@°39°±.u99°³,{}$9°¶*Efkz$9±`°S9°[±U99°W³]^c$9± °9±±99°U²#999°^²$S999°]°9°5°&9°.²[`i999±=Y°Q9°*°,9±cs±8"99±mf´@3ku}$9±HC°F901"&'#5.#"#"&547326324&''654.#"#".'#"&'6732654'#5!632533#3274#"3"54632%267&#"'3254'"'3#6"KT)3EI LZ.EF.46- »$%'54 "<8& $Ø7!…F3ññ  6 *>0#$,ýÄ0)S43>ú8$=`' 96G##þ—5( M@%0 .<) +)K Á"' $(‚3!,@* 3‚ÑE3‰G,X'$;(ú8$=`' ˆ>G fž"þp5( M@%0 .<) +)GÁ"' $(‚3 (@* 3‚ÑE3�›ü(8H()($H8$ÿ×ÿ¾6sq|„‰Ͳ+²+²+°/´"+° Ö´&+² & +³@  +°/´^+°j/´i+°7/´€+°> Ö´F+°7°d Ö´o+°S2°o°r Ö°C3´3+°L/²X}…333´M+°V2²ML +³@MT +°L°z Ö´Q+°Š/°IÖ´}&+²I} +³@IM +°}±+´+°±+±(S22´+±UY22² +³@X +°±l+´g+°g±b+´+±‹+±}I°<9°µ57r‚…†$9°³.3NO$9°·"-0Qvxz$9±l°\9°g±^99°b²ijo999± ±99±&±$(99±^°-9°j².\999°i°9°>°09°7²glv999±Fd°Z9°3°59±o€±A,99±zr´I74#"3"54632%267&#"'3254'3#6K*83"-1$# -0#$,ý # S33!?ñ8$=V! 96G$$þÜ$@ +5/6-$F1ÜL Á"),%(‚3!,@* 3 ‚ÑE3‰F,'#'$;(9O ,+R)!+$H8$ ÿ×ÿ¾ saltyɲ+°3²+² +°/´$+° Ö´(+² ( +³@ +°9/´p+°@ Ö´H+³5p9+´b+°E2°N/²Zmu333´O+°X2²ON +³@OV +°N°j Ö´S+°z/°KÖ´m&+²Km +³@KO +°m±!+´+°± +±*U22´ +²W\222² +³@ Z +° ±+°2´+°° Ö´+°/´+±{+°6º ¨Áy+ °\.°.°\±ù°±^ù³\^....°^.°@±mK°>9°!µ79bruv$9°³05PQ$9° @ $/2Sfhj$9±°_9± ³!$9±(±&*99°$°9°@²/2999°9±_f99±5H°79±bp²C.U999°j´K>hrx$9±SN°Q901%&547#54#.#"#"&5463263254&''654&#"#".'#"&'6732654'#5!632533#67267&#"'3254'3#6Î/W3"-1$# -²+²+²+°/´"+° Ö´&+² & +³@  +°1/°3´:+°K2°T/´S+°,/´a+°O Ö´Y+°B/±E\33´C+°e/°Ö´+°±(+±c22´+°F2²( +³@E +°±V+´Q+°Q±M+´+±f+±²1:\999°(¶ "/=_$9±V°I9°Q±K99°M²STY999± ±99±&±$(99±T:³)/6$9°S³3I4$9°,²QVc999±aO±G_99±BY°@901#"&'#4&#.#"#"&546326325.#"#"'73267.'5#5!#3274#"3"54632%6325ŸA4*)2- 1#! -0#$,ýÔ@5"'29,Q##þÓ:*  +6"06-+?0¢N4?4j" EK7"33‰<3X'$;(<•84E®ÿìÿ²–.NWÿ²+°3²+² +°/´$+° Ö´(+² ( +³@ +°3/´<+°./´T+°D/±GO33´E+°X/°!Ö´+°±*+± V22´ +°H2² * +³@ G +° ±+´+±Y+±!²354''4&#"3&546327%5!žw=—‚"h¹~G29S&+H$+#!&A[G6H&B22þ5üGDiY‡$j|"F"!0&8%`'2-$02T5FKV!_’33ÿÓÿÈ!.26§° /´ +°/°3´)+°/´$+°3/´4+°7/°Ö´+°±+´'+°'±+´.+±8+±°9°³$$9°'°9±.´ )+1$9± ±.99°°9°)³',$9°±9901%47./32>54&#"&54>32632'&5!¨ *o¢\&Dý?[>&: L%/,#<(6k :þ+NÀ@/L$Xs!U¢?!(# $=4!3 "*W6 39OW ,�33ÿçN.*.5Û²+°/´+°#/´"+°+/´+³(++´+°/°3´+°6/°Ö²+/222´+°2² +³@ +² +³@ +°±%+´ +° ±+´+±7+±%°9° ±99°²"#(999±± 599±#³ /$9°"³ .2$9°±%099°+±-9901#"&'#5.#'675!5!#3274#"3"54632%'5A4*)3žA!~”þ½gñ  !6 *>0#$,þõ9Vˆ0 %ˆ9,Q##þþY4‚4b++33‰G-X'$;(<7@>e X,ÿçÿù&.!(€² +°3°/´+°/°3´+°)/° Ö²"222´ +°2² +³@  +² +³@  +° ±+´+±*+±±99± @ !#($901%&547#5.#'675!5!#67''ç/X3žA!~”þ½?ÉB/½9Vˆ0 %ˆˆ3R g�"þ×Y4‚4b++33œ%}è@>e X,ÿçN.*29Û²+°/´+°#/´"+°3/´+³(3+´+°/°3´+°:/°Ö±322´+°2² +³@ +² +³@ +°±%+´ +° ±+´+±;+±%°9° ±99°²"#(999±´ +.29$9°°/9°#² 999°"² 6999°°%9°3°901#"&'#5.#'675!5!#3274#"3"54632.'75A4*)3žA!~”þ½gñ  !6 *>0#$,þ�`:,n6-z%ˆ9,Q##þþY4‚4b++33‰G-X'$;(<þÀ&Q . I7Q >X,ÿçÿù).%,~² +°3°&/´+°/°3´+°-/° Ö±&22´ +°2² +³@  +² +³@  +° ±+´+±.+±±99±& @ ",$901%&547#5.#'675!5!#67.'7ë/[3žA!~”þ½BÌ?5þç`:,n6,}%ˆˆCB g�"þ×Y4‚4b++33�$}�&Q . I7Q @X,ÿíÿ¾¢.KO.°/´#+²# +³@ +°° Ö´&+° /´;+°D/´C+°L/´/+³I/L+´?+°1/°43´2+°P/°Ö´ +° ±+³(/L$2´+°52² +³@4 +² +³@1 +°±F+´A+°A±=+´+±Q+± °9°´-N$9±F°99°A± ;99°=²CDI999±#°(9°&°)9° ² 999±D;µ,9 $9°C´-8O$9°?±F99°L±6N9901%'%#"&'#5.#"#".547326325.#'675!5!#3274#"3"54632%~ˆ0 %ˆ A4*)3CI /D#-DG =19žB!~”þoµñ 6 *>0#$,þõ9Vüe X,ˆ,Q##þ¼4& ,-&- /;( *%3ƒ4b++33‰<X'$;(<7@ÿíÿ¾.6:Aÿ²+² +°/´+² +³@ +°° Ö´!+°7/´*+°,/°/3´-+°B/°Ö´+°± +³#*7;$2´ +°02² +³@ / +² +³@ , +° ±+´+°° Ö´+°/´+±C+±°9° ´(9>$9±°39°°49±°9±°#9°!°$9°7@'(13:19�C!~”þo’Î6@Ã9Vˆ0 %ˆˆ1T d ,þ–4& ,-&- /;( *%3ƒ4b++33� %~é@>e X,ÿÝÿ,T.*1ž²#+°/´+°+/° 3´+° 2°/° 3´ +°2/°#Ö±+22´"+° 2²#" +³@# +°"±+´+² +³@ +±3+±"³$9°°9±#±$199°°9°+µ'*.$901'7675!5!##"'72>54&+#5.+"7¦¦ýïz™þ®wò9F0/")( \23›@ùœ)‰Ô{({ï`*.33.(L1#B%'7LþfX/‡�JX/ÿ,w„/±²+°/´+°/´*+°/´ +²  +³@ +°0/°"Ö´'+°'±+´+°±+° 2´+° 2² +³@ +±1+±'"°$9°µ%-$9±° 9°°9±*±99°³"%$9° ±$-9901'733##5./>4'"&5473267Z¦¦þÀW$Ld3TT3¯:3:*4(%1( &'=Ô{({R5FaÝV3þR,‡1-45)*%/DJ+ÿ,t{.¯°&/´+³&+´)+°/° 3´+° 2² +³@ +² +³@ +°//°,Ö´+°±$+´+°±+°2´+° 2´ +±0+±$µ !)$9± ±99±&)±99±±,99°°901'72533##&#"32632'7674#"#"&546W¦¦þQ9M.3CC3V^!F O",E**8+ N  WÔ{({Ý5HÇM3þ`›7#)"!E( 6)%1^ÿçÿ,Q.*‰²+°(/´+°/±33´+°+/°Ö´+² +³@ +°±+°2´+² +³@ +±,+±±#99°²"$(999±(²#999°°9°±9901'727#'47#5!##5./7##"&3¦¦þa& !�&')Þ3fOØ=3„JN&HÔ{({? $ #a0 133þAAZ (R8 ÿ,2 <FÔ²;+°3´?+°!/´,+°4/´+°/´D+°G/°&Ö´'+°'±6+´+°±/+´+³ /+´F+°F/´ +±H+±'&°:9°6°;9°°9°F¶!,4B$9° ³1$9±4,°/9°°9°²16999°D±899°?³ &'$9°;°:901'7>32#"'326?#".'732654'#"547&'7&#"325¦¦þk I4M.',59(#)\H>g@&3"5R0<3% =!o#>(ä5<$UÔ{({TE)+) W<P-JcM|ƒB @ykAE.0,"4”!W>&1 5ÿåÿ,ê. "ô°"/´+°/°3´+°#/°Ö´+°2² +³@ +°±+° 2´+² +³@ +±$+°6ºíWÂÈ+ ° .° À±ù°À° ³ +ºñàÁ”+ °³+³+² Š Š#9°9² Š Š#9¶ .......µ ......°@±° 9°±99±"°9°± 9901'7%2>54.'&'#5!!#̦¦þ‘#bDLgcÌþÊ=2-* W{/Ô{({áYi þŒÔ33=&(0‚^ÿñÿ,.9D¨°/´+°"/´:+°'/°*3´(+°E/°%Ö´C+°+2²C% +³@C* +²%C +³@%' +°C±=+°2´+°±+´+±F+±C%±99°=°"9°± 99°°79°°9±° 9±':³B$901'7.+532654./#"&=#5!!;26722654'#"'|¦¦ %80?R/."C`z;GVx _104*þ= "12 NþæC1 Ô{({Ë <(3/)$7='4[2@].á33 @ZK&†ÿçÿ,˜.I²+°6/´C+²C6 +³@C; +°/´-+°!/´+° /°3´ +°J/°;Ö´=+°=±+´*+²* +³@ +°*±F+´3+°3±+´+³+´+±K+±=°A9±F*¶ '06C$9±3°9°°9°± 99°°9±6°9±C³3F$9°-±AH99°!²*0999°²?@999° ±'9901'7".547#5!!32?&547#".'32?#"&'&5332654'z¦¦þQ'2KåzþÀK9# 0 #0C( $*%*`4Hƒ3m9"@(Ô{({¤1/a1337'!>_;HTjN]X ! B!-"$,!@RŽx+F! c…6'$&ÿçÿ,�†"+ˆ°#/´+°/°3´ +°2² +³@ +³@ +²  +³@  +°,/°Ö±#22´+° 2² +³@ +°±+° 2´+°2² +³@ +±-+±±9901'7675!5!33##5'&'#5.+"7q¦¦ý�p¡þºz63VV364–?÷#q#)ˆÔ{({ïa,+3þÎ@ÜX3þ=$£W2„�;V1ÿ,ë:H^² +°/´+° Ö´R+°W/´[+°6 Ö´1+°L/´D+°)/´=+°_/°Ö´+°±:+´.+°.± +°%2´ +±@N22° ±T+°I2´+°G2±`+±°9°:²999°.±99° ²46=999±T µDY$9°±99±R°%9±Wµ OTY$9°6°9°[±499°1°N9°L·.3:@GI$901'7#"&'#4&#&+&547;636;24&#""327#".546327>32'4&#"2654&#"5326¡¦¦0g*\3B^#H}/69 ":, %n  "#! Ÿ*5'2*,=35a.W83%'/Ô{({Þ40gBÈL3šE9 C<9*#S x $ $>�Ba1>-44'xE67!,3%ÿÇÿ,š'5ܰ/´+°/´+°$/° 3´%+°2°6/°.Ö´3+°3±"+´ +²" +³@"$ +° ±+´+°( Ö´+²( +³@ +±7+°6º—À*+ °5°À±+ù°*À³*+5....³*+5....°@±3.°09°"°19± ´$9°(°&9±±99°°901'723!32654#"'632#"&5#5!654'"&5473|¦¦¦6A/þÓ;d&!"-:c4,'d[[š3G!*aÔ{({\F63þ´6ŒD$"1'6vS?'O3 2 ?/) .ÿôÿ,ªT(4©°/´)+°/° 3´+°2°5/°"Ö´+³3"+´+°/´3+²3 +³@ +°±+´.+° 2°.±,+´ +² , +³@ +±6+±"°9±µ $%)$9°.²999±)² .99901'73##"&54>7>54'#53&5472654'|¦¦þé/2Ư2@fHFV2 ʬP6&(:4I<"G0Ô{({‹,N73Pr^H�ZD N=%3]G54#"'62|¦¦ú,'xØþÓ 35% *>.9dÔ{({¯?'’33þq 6Y1&"!=8€[?ÿ,]‘(u²"+° /´+°&/°3´+°2²& +³@ +°)/°Ö´+°±"+°2´!+°2²!" +³@! +±*+±"² 999±&±9901'7327+"&54>32533##4&#"@¦¦þ, )F>)3& 3__3Y$-HÔ{({5>3^+1:('Êc3þW+w4ÿßÿ,U.'+â°/´+² +³@ +°2°%/´+°(/´)+°,/° Ö´+°±"+´+±-+°6ºÁ4ó¨+ °.°À±ù°À°³+³+³+°³+² Š Š#9²9°9°9³....µ......°@± °9°"µ$9±%² 99901'7&54>32#"&5/332654&#"%5!¦¦þÏ + 8&KceTÀ83XYBLF57þãvÔ{({ '" '}]\|V­š\IFa!w33ÿ,]†4®²+°/´+°-/´%+° /°3´3+° 2²3 +³@3 +°5/°0Ö´#+°#±+´+°±+° 2´+° 2² +³@ +±6+±#0°9°µ)*23$9±°9±° 9°°9± %²099901'733##5./67654&#"32727+"&5462@¦¦þ×\%jI4QQ4";,C&,n'B7)!> (V~QÔ{({S8P)YïX3þI% 58<"*$3- 2DJÿéÿ,-.}²+° /°3´+°/° Ö´+² +³@ +²  +³@ +°±+´+°° Ö´+°/´+±+± ° 9±°9°±9901'7'&547'#5!!67¦¦ãƒd.OÊþ¸e–,.Ô{({ªLcb[³2"33ê†!Q~UY-ÿ,:5")~²+°/´+° Ö´+°*/°Ö´+°±+± #22´+² +³@ +±++±°9°³ %$9°°9±¶ !#)$9°° 901'7"753##5./7&54632&¦¦þU#y…R3GkMp^),*' ŸyU-J1&Ô{({® DJ3þVGK)[F=8Y325!5!##5.#"0¦¦þ4#4,b3þ�P3"4'"Ô{({0&D/F"fÌ33þÃ.:& ,  ÿ,{s"0u²+° /´#+°./´+° Ö´ +²  +³@ +°1/°Ö° 2´+° 2² +³@ +±2+± ³"'$9°#³ $9°.°*901'7>32533##4/.''654&#"72767&#&#"]¦¦ýŽ n6…F3VV3 »$%.% # 3#2$ ?Ô{({O1P‚ÑE3þ:. Á"&!$ 9 ,+2&(!ÿçÿ,Y..�² +°,/´+° /´&+°/°3´+°//° Ö°"2´ +² +³@  +° ±+´)+±0+± ³,.$9°)°9±, ±"99°±.99° µ )$9°&°#901'73254&##5./67&'#5!!6;2#"'¦¦q I<3�8b($fNrþ3>(69vK Zr8Ô{({È #1?þZFA_ %M#6@33*8&1,'aNaP'% ÿçÿ, ._²+°/´ +°/°3´+°/°Ö± 22´+² +³@ +² +³@ +±+±°9±± 9901'7.+'675!5!##¦¦öš9!~”þ½·A3H''%ˆÔ{({.ˆ6b++33þ�$X,ÿéÿ,A./3�°/´&+°-/´+° /´+°"2°0/´1+°4/°"Ö´#+°#±+´+°±)+´+±5+±)· &-$9±-&°9°°)9° ² +999°² #99901'74632&#"3267#".'32654'#"&'5!¦¦þ„)4! K%3!%`K9bC:"9%”T,P"5R3O»XÔ{({$#00):2G #!9 @s1Jm_:“¥Q?3Z7Â33ÿèÿ].%t²+°/´+° /± 33´ +°&/°Ö´+² +³@ +°±+°$2´+² +³@ +±'+±³$9± ²$99901'7.'5#5!##54&#"#"&5475@¦¦þh>NBè93`#B2U)D>=79.á{({:&!"33þ­�C+P,],‰–82Nàÿáÿ,J.%K²+° /±33´+°&/°Ö°$2´+² +³@ +² +³@ +±'+± °$901'7670/.+5!##5.'-¦¦ýß9Y KUÜ?3)“9?Y7;G&4Ô{({Ï9C 233þLCR F7""5jÿçÿ, .)€²+°'/´!+°/´+°/° 3´ +°*/°Ö´$:+°$±+±22´ +²  +³@ +² +³@ +±++± °9±!'°9°³$901'7675!5!##5.+".54632#"&¦¦ýò€™þ¼¾G3™>Q9twF&Ô{({í^6&33þY/†* \'ð"þâÿßÿ,�.3¨²!+° /´+°//°%3´+°2°/°3´+°4/°Ö´+°±,+´)+°)±!+°2´ +² ! +³@  +²! +³@! +±5+±,² 999°)°9°!°9° °9±/³,$9°°901'7;27#"&46326325!5!##4&#"4&#c¦¦ýË0&;GG;1.+&þS.N3@'." Ô{({Ñ)90Q€R0+ ‡33þY&&3)ÿíÿ,Ž…<¶²,+°;/´6+°6° Ö´+°/°)3´+°'2² +³@% +°°0 Ö´+°=/°Ö´3&+°3±,+°$2´++°&2²+, +³@+) +±>+±3±99°,±9;99± ;± 999±06µ $8$9°°9±°901'7#"'7;>54&#"56;263533##4&#"327#"q§¦þ1 4#I5�N3QQ3P%!, <Ô{({')-1=8k_  $ÀW3þ^s/6 +ÿéÿ,D.Q² +°/± 33´+°/° Ö±22´ +² +³@ +² +³@  +± +± ²99901'7&'#5!##5./6&'5&¦¦þr-~"ÖF3BdE*÷I;0|UÖLŠÔ{({C#A33þ@]G:%3(?+7qc{šÿìÿ,Ž. ,f²+°!/´*+°/´ +°/±33´+°-/°Ö° 2´+² +³@ +±.+±*´ #$$9° °9°°901'76325.'5#5!##5.#"#"'7326q§¦ýå@5"'2Ä B_853 :(20A,-Ô{({§84E®¸K7"33þõN4?4j" Eÿçÿ,ç.#'S°/´+°$/´%+°(/°!Ö´+°±+´+±)+±!°9°µ $9°°901'72&/32>54&#"&546'5!|¦¦¾6l•¥Y&©Ù_:&: M$B0dÆàÔ{({—Z9o2[p!ºH9!(# $<#$*9+K33ÿçÿ,J.3>³²7+´<+°/´&+° /° 3´ +² +³@  +°?/° Ö´!+°!±+´+² +³@ +² +³@ +³4+´:$+°±++´+±@+±:µ&7<$9°+³/$9±7<±99± &² -99901'7"&=#5!!>7#".'32>54'4632#"&-¦¦þÂ%á.þæ R(4wY=a9'3.EN#)=#(0 Ô{({™6(°33¬X(p"YoIg€]$T�Y2$6-2(+þÛ4 ÿéÿ,Ú. ,§²+´+°/´+°#/´(+°/°3´+°-/°Ö´+² +³@ +² +³@ +³+´$+°±!+´*+±.+±´&$9°!³ %($9±± 99±#±%*99°(°&9014632#"&'7%"&5#5!!>54#"'632u"G¦¦þÀ#4ZºþÕ.M#"(L�Y2"e{({¬/7•33þh]d# "mL³ÿëÿ,9. ,²+°/´+°/±33´+°-/°Ö´$+°±+°+2´+² +³@ +² +³@ +±.+±±99°± *99±°9°²+9990174632#"&'7&+5!##5&/67u"¦¦¦þxeU ÒI3C°,=,E$Q(/(" !O2"þó{({K]23þLp/8B–*5G# "fÿçÿ,#. \² +°/´+°/°3´+°!/° Ö²222´+² +³@ +²  +³@  +±"+± ³ $901'7'.+'675!5!##¦¦ù9Vˆ$ %ˆš9!~”þ½·A3Ô{({I@>e X,X.ˆ6b++33þÿçÿ, . %b²+°/´+°/°3´+°&/°Ö±22´+² +³@ +² +³@ +±'+±°9±³%$901'7%.'77.+'675!5!##¦¦þ²`:,n6š9!~”þ½·A3H''%ˆÔ{({Ò&Q . I7 .ˆ6b++33þ�$X,þWÿÞ�.=AÞ°!/´6+°$ Ö´3+²$3 +³@$ +°/´+°;/´+°>/´?+°B/°)Ö´.+°.±+´+°±+°82´+° 2°±+´+±C+±.)°+9°²$,3999°°9°³!6$9±³>?$9°°9±3!°89±6@ ),.$9°± +9901'&54632>32'654&#"#5&#"#".5473263254#"753Û$i.$. +"0$"531;V$6 ()R 3)%CÍ«ð #3g;- 9+#Bõ2* "2+)A(2  Ø/Hì33þÿóg/¤² +´+°/´+°) Ö´(+°!/´+°0/°Ö´+°±++´&+°&±+´+° Ö´+±&¶ ()$9°°9±±99±)±99±!(²+999°±99012#".'73254'#5>54&#"3&54>¦5e"4YJ.PDM0(˜Wp2 88-F )2]$5)g9)327B%A‚Y‹—C) 1%'4N!1 þaÿþ,"j°/´+°/´+° 2°#/° Ö´ +° ± +´+°±+´+± °9°³$9±² 999°° 9012#".'732654&#"&546s0A\G+N8,3 2L*+>*+3,M9AM*?L?DN64*!.Bþaÿäÿ¹R*™° /´ +° Ö´+² +³@ +°%/´+°+/°Ö´+°±+´(+°(± +°"2´ +±°9°²999°(²999° ³ *$9± °"9±% ´$901%&54632#5&#"#"&5473263254#"þ÷]*34'2  )M.,#1',7š)^6&þî)# C4$6 3+"µ(= þÿÞÿ Œ*²° /±33´ +°2°%/´+°+/°Ö´+°±+´(+°(± +°"2´ +°6º ½Àè+ °.°.°±ù°±ù°.³....°@±°9°±99°(°9° ±*99± °"9°%´$901%&54632#5&#"#"&5473763254#"þÍf1<31; :I,8'/='$C¹ 2f14þ·2*W.2: ;(1Ù0I ÿá<.#ް /´!+°/´+°/°3´+°$/°Ö´+°±+´ +² +³@  +² +³@ +±%+±°9°³ $9° °9±! ²999°°9°± 99014'!5!##".#"&54>323>š$þk>j6:D  ))&)H2 ¨>33-&"E,, !2% ,,þ‘ÿRÿÚ„O°/´ +² +³@ +²  +³@  +°/° Ö´+°±+°2´+±² 99901&#"&546323#YId6(KE#3M.33e�7 /J'69:ŒýÎþíÿ~ÿÑ̰/°Ö°2´ +± ° 901'.#'673#bF(B,D<Md33” ) 2L/0/N0þ²þÔ!ÿ²Š°/° Ö±22´ +01'56753#5.'ìI"5v0{33  !è&,š )L!þ—!þnÿßÿÏ?.œ°/´+² +³@ +°/´+°/´+°//°$Ö´)+°)± +´+°±+°2´+±)$°&9° °'9±µ",$9±°9±±$)99°³ &'$9°±9901'25#"&54632"2?#5&#""547326¬!'# '4##>U$-- ]_sX'. 0',/#šþFÿkÿáî'Ô²+´+² +³@' +°° Ö´+² +³@$ +²+²+°(/°Ö´+°±'+°#2´&+°6º 6Àý+ °.° .°± ù° ±ùº �Á>+ ° ³ +² Š Š#9± ..´ .....°@±°9°'±99± °9°°#901.##"&54732?6323#R    %,1D.*"$ B 33`   O90% %(1  þ}ýÎÿ‡ÿ*Œ"o°/´+² +³@ +°° Ö´+² +³@ +°#/°Ö´+°± +° 2´ +± ³!$9±°9°± 9901463263253#4&#."##"ýÎK'3' (32-+F% .BX=0eã7- C",/ÿÉ�ÊPÀ° /´+°!/°3´&+°A/´4+²A4 +³@AF +°0/´L+°Q/°?Ö´7+°7±)+´+° Ö´+±R+±7?±0999°· #&,-P$9±)°9±!±99°&²#;999°Aµ)-79<$9°4±2I99°0²,P999°L°901#".'732654'""""'732654&'.#"632'>54##"&54632&25F43aF83 ©T$   #7$%%*+3 < G#&Ê5Y2 !#@:WfXqÐ# -(>IL. ".B  !Jÿíÿ™Ð)]k[²+´ +² +³@ +° 2°° Ö´#+°4/´/+°/°> Ö´9+°D/± 33´I+±^22°) Ö´M+°X/´g+°b/´+°l/°Ö´+°±A+´,&+°[ Ö´e+°,±+±%T22´ +°^2° ± +°_2´ +°2² +³@  +±m+±²;<999°[²9>999±eA°K9°,² 6999°·#24Xbg$9± °%9±9#²999±>4±2;99±)/µ163247#5!##"'6732>54#"#".MŸþ»,/'04?šü;mwXbpYB2 &@28K %'3Ž:P%7(/(D4«=?S633þÆ]dP$CJV?@ ;ÿÓ.$/™²+´++°/´+°/±%33´+°0/°Ö´ +° ±+°2´&+²& +³@ +°&±.+´+². +³@ +±1+± ° 9°³  )$9°&±+99±+´  )$901726=&#"&46325!5!##"'>73265¿(<6!(8)5<þÕ;X65YB %…0"B3\(evR3L™33þÆ:Q'PŸþ¤*2 GG:ÿßÿÍœ.7BÓ²>+´0+°/´+° /°3´+° 2°&/±)833´'+°C/°Ö´+°± +´ +° ±+°$2´9+²9 +³@& +°9±A+´++²+A +³@+) +±D+± ²999° ±299°² 5<999°9±0>99±>³25<$9± ² $999°°901%26=4&#"4&#3"&546326325!5!##"'>73265M%@&&." 5.73254'33265Z%4 "<8 " $ØÒW 65YBG8$=50"C2\+È (‚3!(@* 33þÆ:Q'P Ÿ$H8$þÖ*4DJ:ÿìÿͤ.3<G”²C+´.+° /´+°/´9+°$/²'4=333´%+°H/°Ö°;2´>+°>±F+´)+²)F +³@)' +±I+±>±.C99± C³02A$9±´ ;$9°9°79°$°"901%26=.#"#".'73267.'5#5!##"'67632533265U% :(2  ,- B_8¸X 64YA Ï@5"'230"C3*,ˆN4?4  " EK7"33þ”;Q'PÑ84E®þq*2 GHlÿçÿË^.4¬°/´++°2°/´$+°0/°33´1+°5/°!Ö´+°±+´'+°'±.+´+². +³@3 +². +³@.0 +±6+±!°9°µ $)$9°'±+99°.° 9°° 9±+² 999°³!'$901#"'&/32>54&#"&54632326=!5!# 65.#¥Y&©Ù_:&: M$B0d/6l8 C3þwWt;Q' [p!ºH9!(# $<#$*9+KZ9D-GH‡33K.+„° /´+°/´ +°/°3´+°,/°Ö´+² +³@ +² +³@ +°±+´#+±-+±µ  ($9± °9°±#99° ²99901%>54#"#".547#5!!32>327028K %';mþ -/'04?  KAhV?@ ;)T622S%7(/(D4+'#ÿÝIÕ$9̰/´+°&/°3´'+°2°-/°*3´7+°2°:/°0Ö´5+°5±+´+² +³@& +°±#+´+°2°´(+°(/²( +³@ +°(° Ö´+±;+±50°29°°39±#@ !*-7$9±(°9°°9±&²9990123#32654'7#"&54>54#!5!4#"#"&547326ôE5g~2HH28,u#<—J(5L\LBþóV:NWJ0zS¥=:31 >218#9+01S1'$T>CL3F31B 6 5þcÿÿÇ"M²+´!+²+°/´+°#/°Ö´+±² 999±!² 999°±9901274'7&'#"&5463267&#"þÄ5 2  "(0M9<("/"& " $-"BA99:Qÿ•¼¹. $‡°/´+°/´+°/´+°!/´"+°%/°Ö´+°±+´+±&+±²999°±99°°9±°9°³ $9°± 99°° 901#"./&'73274#"3"5462%5! K*) "  -6 *>0F-þõ$96G 4 3X'$;(:“33ÿ³ÿù‘.Y²+°/´+°/°Ö´+² +³@ +°° Ö´+°/´+±+±° 9±° 9017&=47'6753S/c F@m¬ˆ1T d ! 3¡f33ÿï¾°.'r°/´%+²% +³@ +°/´+°/±33´+°(/°Ö°2´+² +³@ +±)+±%°9°´  $9°°9°° 9016325#.'5#5!##5.#"#"'7326Û!)ç*03U/Á+4/"*)6% &“9‰i;(33þÃbA,4,Z 9ÿÿÿöÿÆBe'˜x1{ÿÿÿëÿËe&|˜k6ÿÿÿöÿié„'^ ÿâdÿÿþ|eZ„&£pÿÿÿ`Cƒ'pé§ÿÿÿ@a„'p¨ÿÿþ`eã„&èZ¤ÿÿÿ&f‰„&p/ÏUÿÿÿåÿ Že'˜e '©�ÿïwÿ(eR4°5/´,7+°'/±é°/´?+°D/´7+° /´7+°/° 3´7+°S/°QÖ°2´G+°2²QG +³@Q +°G±9+´)+³)9+´=+°=/´+°)±+´ +²  +³@ +°°A Ö´+±T+±GQ±M99°=±K99°9°J9°²;D999±)±?99°A± '99° ±,599°°$9±,5°39°'²2JK999°²%;M999°±$=99°?±GQ99±D±99° °9°°901&543!5!5!#!"632":>7#"32>7#".'47&543254&#".54oF:þˆ KþÀ?18Ä4H&#2  #3;=8( &)D(P@:•/\"8p(?43F>7^HH¥7v#  L2' <*@.* >h=.O`;"R"0'>ke;C²+°+3² +°3´ C+²>+´7+²+´0 +´07+´ +´7+°D/°5Ö´+³95+´@+°±<+´+°³&+´ +° /´&+°±+° 2´+² +³@ +² +³@ +±E+±@°79° µ0>B$9°<°.9°³#(+$9°&±99°°*9±0°*9°°(9°³#&5$9°²7999°>² B9990123275#53###"'3274'4632.'#".547&5464#"6¯=D3)SFeüPGKNF>&)b  *&2@,61/eAHo:587ZC/5,%xIIýäV /O"* )-.4!@*HC1C3;n'1&"ÿöÿée7­²+° 3´C+°2/´+²2 +³@25 +²2 +³@ +°/´7+² +³@ +°8/°Ö°%2´<+² +³@ +°±0+´+°± +°2´ +² +³@ +±9+±°(9°0µ!",5$9°° 901463!5!5!##!"32?2'#"54632327654#""&+/žýë³UIþ{@D!'5$a5{w&#*; 0!7k‡\IIýåw63, $X,tB .# rÿöÿÿ«e‡²+±33² +°3´ C+° 2´ +°3±é°/°Ö´+² +³@ +³@ +°±+°2´+² +³@ +±+±°9°±99±±9901.547#5!5!50!#0##"=ZQ…âýëµWIÑ)6V6M—:4KhIIýäj5(%ƒ-ÿöbeZ²+°3´C+°2² +³@ +´  +´7+°/°Ö°2´+² +³@ +² +³@ +±+0150!##5'%&'"'>325 lVIþï+b"’+Æ,ˆIIýåÕœ9•lM7 S�êÿþ¾e2;·²+±533´C+°2°/°3´7+°3275#53##5'7''67&74#"6w*27GE‡32&#"4#"6v AMäNI   .9'M= B -‰=*27GEd'-#*,1*9- 1Z"ŽIIýåC  >*Z.+  9F;7&29/E3EF1"%2˜++ * ÿöÿìôe*.в+²+°3´C+² +³@ +´% +´%7+´ +´7+°//°*Ö´+°±+´!+²! +³@ +³@ +°!±+±22´+² +³@ +±0+±±%99°!±99°±,.99±%°9°°9°´ !+-$9°± *99°°90132654.'5!5!5!##5'%5##".5'c „=  Ný�þFGõ-"Ô#C4:i<#ëJJJÉY´"   pIIý匡8º†(6"=3XrX GJJJÿöe&. ²$+±+33´%C+²$% +³@$ +´ $ +´ 7+´' $ +´'++°//°"Ö´-+²"- +³@"$ +°-±+°*2´+² +³@ +±0+±-"± 99°³ $9± ±*99±' ²-99901##'7&#"#"'.'732=!5!25!6PGÁ2·ZI% A2 4_%11 @_9 G<þâþƒCl7þäýå¡5’M $/Ju&58%X!ˆ',(.‰I¦24Ãdÿöÿõye,¥²+²*+°3´+C+´&+ +´&7+´+ +´7+°-/°(Ö´+²( +³@ +²( +³@(* +°± +´+±.+±(±99° ´ $9±³  $9°&² 999°°!9°±"#9901!632'654&#"#"'.'732=!5!yþã#)<\8/7X1 ,+ ?- Š41%,8M9 G<þâƒpS84X/1K=&',¿+5(6!N$p',(.”Iÿöäe=¾²+°3´C+°1/´!7+³!1+´7+°1° Ö´7+°>/°Ö´+² +³@ +² +³@ +°±;+´4+°4±.+´$+±?+±± 99°;° 9°4±=99°.³!'78$9°$°&9±±4;99±!°9°°901#"'.'732=!5!!3632'>74&#".547B; /[,11 @_9 G<þâîþxz$:\B=.!)2IBq158%X!ˆ',(.‰IIŒmUbk' !,'N$0>Z*ÿöÿìÎe:Ö²+°!3²$+´ +²+°3´C+´05$ +°3´07+° 2°;/°-Ö´8+°' Ö´! +°8±+°2´+° 2² +³@ +² +³@ +°±+´+±<+±!8´$*05$9°±2399±² 999±´'*$9°5· -38$9°0°29017267!5!!632'>54&#"#5#"&54?.54632&#"Ó"Hþ£ØþÌ8H6Zw;+?/4FG£% q@/.XE')9&,06¼*II¬NX<]|-*b ,tþþ�M? A )M+Ad N4$'<ÿöÿ� e"Lü²+±#33´C+² +³@ +°/´0 +´6H +´67+´) +´7+´>C +´>7+°M/°Ö°2´$+²$ +³@$ +²$ +³@ +°$±9+´E+°E±+±3K22´+² +³@ +±N+±9$³$9°E²0999°²6>A999±0±99°6±399°H°49°±9K99°C°A9°>² @99901"&54?&'&5732=#5!##5#"'32675#"&54>32&'"32675^pRœ\; .-áUGþß  O% 5W4%�+7C;L"2*6K( Aq?*$!ú< ","-‰IIýåx‡ �—+ 4='A#31D8&8 E4 "Àÿöÿ½Ie3в+²'+²+± 33´C+´- +´-7+´ +´C+°4/°Ö´ &+² +³@ +° ° Ö´2+°2/´+° ±+°2´+² +³@ +±5+±2°9± °9°µ (+-$9±-² (999°°+9°±299°°9°°901"327!;'.547#5!##5#"&54?#".54ê8-(Sxþì(EK)Ë<NSPG£%q¦1)0G B'#N (!.I!A5%IIýämM? >)O 0%:ÿöÿÉge)-IJ+²+²+°3´C+´'  +´'C+°2´ +°3´7+°./°Ö´ +² +³@  +² +³@ +° ±+±+22´+² +³@ +² +³@ +±/+± ²!"999°µ%'*$9±'°9° ±%*99°³+,$901747#5!#32675!5!##5#"&'4?#"&75ŒC¦aW%;(3f#þ&qPG¡ py3N5úC;GGQVAÂIIýäzM2 >*:A ÿö3e)±²+²+°3´C+´ +´7+´  +°$3´ 7+°2° °! Ö°3±"é°2°*/°Ö´'+°'±+°2´+° 2² +³@ +°2² +³@ +±++±'³"$$9±°9°"³'$9°° 9017267!5!#632&#"#5#"&54632&#"Ó"Hþ£=™7D  4FGI*>jZC)'9&-1?¼*II¬MN tþþ©#d+±±999±9±<99°°9±'4²999°° 9° ² #$99901#"&54>32&'"3267#".'&57326=#5!!#3267m7?;L"2*6K2 =“?7^@7#; .áwþ±J65W4%™+1D8&8 E3#!Ú<#4QJ0; ","‰II—224='@$ÿöÝ&e[² +°3´C+²  +³@  +°/° Ö´+² +³@ +°´ +°/² +³@ +±+± °901##"'&54735#5!&U!45'9“0þõ456™Iÿöy³e$Œ²+°3´C+° /´7+°/´"C+°%/°Ö´&+² +³@ +°° Ö´&+°/°3´&+² +³@ +° 2±&+± ° 9°² 999°"°9°°901"3267#".547.547#5!!;ê 8+'%ˆ"yJ0H":,0N½þë,>(K)B'%:TF /' 61 O&II,-IÿözÒei²+´C+°/´7+°/° 3´7+°/°Ö´+² +³@ +± 22² +³@ +±+±°9±³$901!5!47#5!#3267#"&Òþ$ÜþºC¦©Ÿ%;&9f z>6KIþ•C;GGQa=qWGÿöÿ²¸e,À²+°3² +°3´C+´) +´)7+´ " +´ 7+°-/°,Ö´+°±+´$+²$ +³@ +³@ +°$±+± 22´+² +³@ +±.+±±)99°$²999±)±99°° 9°"±$99° ± ,99° °90132654'5!5!5!##5#"&547%5##"&'c @Z' TýÕÂPG¢&qŽ# 9(L›É5z^!7n pIIýäcN?=( €³(6//´xÿöt"e}²+´C+°/´7+°/´7+° /°Ö´+°± +´+² +³@ +°2²  +³@  +±!+± °9±± 99°±99°°901!5!32654.'5!##"&'"ýÔ,þA;W'   �#C4Pˆ*Iœ:ra!$%# H(6"=3«�ÿöÿze@ò²+°3´C+°3/´8+°)/°%3´"+° Ö´++°$2° Ö´C+°/´7+°A/° Ö´1+²  +³@  +°±+´+³+´++°02²+ +³@+ +°$2²+ +³@5 +±B+± °89°µ-3<=$9°±99±+± 199±83²-<999°)°9±"° 9±°9°° 90172654#"#"&546;5!5!##"263227"#"'&'"'4632å)M#K,p#½þÐ#¬å@(W%2 +&‡`+Mh—!  S6+3Š.]II¤J'Qz+N?-oXÿöPe+S²+´C+°/´"7+°/´ +°(/´7+°,/±-+± ³%$9°(²+999°°901!5!632327#".'#"&'732654&#"ýèþ`G+…+ "#  bH6Y5/U(499/3IÊ$’ QEW+)9/=,/H ÿöÿÿ1e'w² +²+° 3´C+´  +´7+°(/°Ö´+² +³@ +°± +±22´ +² +³@ +±)+± ²$%999± ±%9901463!5!5!###"&'4?5#".).8 þ\;PG]& rÇë!%841Jq>1HeIIýã ,@ ?)_ NC34@¢)ÿËŽe@Ô² +²+²+± ,33´C+°:2´  +´ 7+´02  +´0+°A/°7Ö´.+°.±)+´=+°=± +°2´ +² +³@ +² +³@  +±B+±).¶'12:?$9°=´ $9° ´$9± ±99°±99°2µ%'?$9°0±)=9901%2>75#53##57#"&'4?#".'3254&#"37".54632)+8=eüPG32£#ry3bA(*-Ÿ7)B:-= U9HZÂ-Å 8(ÒIIýäÝ*OM= ?) :.CG x*5-/C&#0=`D�Aÿöÿ€òe/ʲ+²+° 3´C+´* +´*7+²* +³@ +´  +´7+°0/°Ö´+² +³@ +°±+´ +²  +³@ +° ³ +´+°/´+±1+±±&'99°²"$999°°*9° ³$9±*°9°°9° ±990146;5!5!##"34'432#'#"&'4?".)B4»þœüQê)ÈB+ N_ƒ rÓFl>& -=U]II¤+ �B001c9>6?) e(92(ÿ¹Lg?Cí²0+±333´1C+°2²01 +³@0 +³@06 +´,60 +´C+´%'60 +´%++°D/°Ö´ +³ +´)+° ±+´+°82°±6+±.@22´5+²56 +³@53 +²65 +³@60 +±E+±) ±99°²#999°±,99°6µ&'>C$9±,²@C999°'² .A999°%±#99°0± 9901"&'4?#".547.54632#4.#"6;"3275#53##55pœ)0,@ 2+1K),FH,?,("Â9.Cs`öOG§ ~)#G=)J.% 2/V*1GI&,Q DRoóIIýåiN&ÿöÍse ]² +±33´ C+°/´ 7+°/°Ö´+² +³@ +°±+´+² +³@ +±+±°901##"&=#5!26=#s,P3(FKf3RØ;9X(U@³II°"/ÿö"e •²+±33´C+°/´7+² +³@ +°/´ 7+°!/°Ö´+² +³@ +°±+°2´+° 2² +³@ +°2±"+±°9±°9°²999° ± 99017"&=#5!#632&#"#5'3275#ÚKf3,•D/ 43G.¨;,78ÖÔU@³II‘>L &/þÙð"˜"//ÒÿöuTeP²+´C+°/´7+°/´ 7+° /° Ö´+±!+±°9°´$9° °901!5!#"&54632&#"67'27'Tþ¢^7,EgYC*&9! ­ ä8+&¡Iþ@ZGEc N} #,4s)ŸÌe#“²+°3´ 7+°2°/´7+°2² +³@ +°$/°Ö´!+°!±+´+°2² +³@ +°±+´#+°2±%+±!°9°± #99°°9±°9°±9901#53&546323##"&546;54#"Ìssþi J2#$··_ (+3I£38 *¬Ga o !—2.ÿö�oeg²+° 3´C+°/´ 7+°2² +³@ +°/°Ö´ +°2²  +³@ +°2² +³@ +³@ +±+± °90146;5#5!#3##"'& (fyÌÌÌ/0% ÉIIÉGO7:ÿö¨“ef²+°3´C+° /´7+°/°Ö´+² +³@ +°2² +³@ +±+±±99± ° 9°´$901327#"&'22654'#5!#þ=6 <'RGBK^~)57Š�¼ð^W!)S_:v`,"5$IIÿöÿÙÜe ~² +±33´C+²  +³@  +´ +´7+°!/° Ö°2´+²  +³@ +°±+°2´+² +³@ +±"+± °9°´$9017275#"&=#5!##5#"&'4?×;4Ö;/Kf3æOG£%r¾ø7íÓ"/GV?ÖIIýê…N?@)[ÿöÿËÅe3ʲ$+² +±33´C+´$ +´7+´ $ +´C+°4/° Ö°.2´+² +³@ +°±$+±122´#+°2²#$ +³@# +°#±+´+±5+± °-9°$³&)+$9±#²999±$³%&$9°±1299° ³"$9°°9013275#"&=#5!!632'>54&"#5#"&'47%5p;,78ÖjKf3ÏþÈE@8Sv@$K7.GG£ r .I"//õþ•V?ÖIIµAZ@U.f%)$>þö|M6?) �"ÿöõe z²+´C+°/´+°/°3´7+°2°!/° Ö´+°±+´+² +³@ +°2±"+±±99°±99±± 99°°901!5!".54632>7"'67&'"õþÿþ{�4$JN9aJX@&8+)d A 1*+HIþœ:�=(Ad2E]F&Gj4!+.+ÿöFfe.:i²+´C+°/°3´67+°2°&/°23±é°2°;/°Ö´4+°4±#+´ +±<+±#4µ/$9±&6³ $901!5!>32#"'#"&5463232>54&#"#.#"32>fý�pþâN'ER ?,\&'^ESXEVO:* #0  G3(SS( Iÿ"/aR;:$W\gSJi²'L% <:  )@js+ÿöÿ™fe2>k²+´C+°/°3´:7+°"2°*/°63± é°2°?/°Ö´8+°8±'+´+±@+±'8· 3$9±*:³$9017'!5!>32#"'#"&5463232>54&#"#.#"32>óJJJ½ý�pþâN'ER?,\&'^ESXEVO:* "1  G3(SS( -JJJ9Iÿ"/aR;:$W\gSKh²'L% =9  )@js+ÿöuTeN²+´C+° /´7+°/´7+°/° Ö´+±+± °9°²999°°901!5!267#"&54632&#"Tþ¢^�(M E:EgYC)'9&-1?IþW-U0ZGEc N8$&9ÿöÿÿ§e)¨²+²+±33´C+´  +´+´$ +´$7+°*/°Ö´!+²! +³@ +°!±+´&+² +³@ +±++±!² 999°²999°²999± °9°° 9°$±99°°901#%72>7#".547#5!&#"32>V+wN°0þë,.'N>27+)i±wC&' 6CT†˜2ñ4'B,) /.IIKK&  ÿö¥He X²+°3´C+°/´7+°/°Ö´ +²  +³@  +° 2² +³@ +±+±° 9°± 99017"&=#5!#'327'ÚKf3RÅÅ*®;,<$Ç¥U@âIIÐ}*˜"/)Ñÿöe r²+°3´C+° /´7+° Ö´7+°!/°Ö´+² +³@ +°2² +³@ +±"+±² 999± °9±±9901"'&/732=!5!#3#B#D"D1V[‚9 F<þâ ¦¬¤J*0S& 5Uƒ¹',(.‰IIŒGÿöÿ–Ne$�²+° 3´C+°/´C+°#/´7+°%/°Ö°2´ +² +³@ +°´&+° ±+´"+²" +³@" +°2±&+± °9±± 99±°9±#°9013!!".547.543!5!5!#!"w+¤þ}FsI#/D1#D'Q<þ@XPþ�pJI3"=V= )0K*?0WA]II¤ÿöÌe&*²+´C+°/´7+°'/±(+±°901!5!4>32"&'46?&'&#"#"'&Ìþ*Öþ\]\#;--3Ë p%×?$#*(BIé 8@>k8 /oI D!c ÿöÿ»êe-¦² +²++°3´,C+´ , +´7+´$ , +´7+°./°Ö´+°± +°)2´ +² +³@  +² +³@ + +±/+±°9° · &$9± ± 99°°9°$´"&')$9°°!901%'32##5#"&'4?#"&54632&#"?!5!¡7+"öPG„&r•EcZB 09! ­ þ£ôÚs*7TýäcE?>) Kf=Ec M} Iÿè<e:β+±!33²6+± 33´7+° 2´ )! +´ 7+°22²) +³@), +°;/°Ö´8+°8±3+´ +°)2²3 +³@3/ +° ±+± '22´+² +³@ +² +³@ +±<+±8°9°3³#$:$9° °,9°±!99±)±'99° °/9°6±9901&5463235#53##5#"&'47%5##"&546;54#" J20@µeüPG”  pÿµ_ (,1Â%397.¬ÉIIýä”I   >( ~(a o —2.ÿöÿÍe$£²+²+² +± 33´ C+´ +°3´7+² +³@" +°%/°Ö´+°2² +³@ +³@ +°±+±22´+² +³@ +±&+±°"9°²999±²999°°9015#46;5#5!##5#"&'47%5##"&lÉ• (f OH¤&rÉ_SÉÉ. ÉIIýä�P?@)ƒ=Onÿöÿ»êe*¤²(+°3´)C+²() +³@( +´$( +´C+´( +´7+°+/°Ö´!+°!±+°&2´+² +³@ +² +³@( +±,+±!± 99°@  $$9±$°9°±!&99°°901##5#"&'4?#"&54632&#"327!5!êPG…&r•EcYC%+9&& :,C;þ£ôýåbE??) Jf=Fb M +6;Iÿølh 5¢²/+°3²)+±,33´*C+° 2°6/°Ö´+°±+´#+°#±/+±'22´.+²./ +³@., +²/. +³@/) +±7+±°9°³ $9°#²%1999°/±2499±)/@  #'04$9014#">"&'47%.''7&546325#53##59.5 8q Â)ˆ.œCB<-K:d\MäPG£&ø(#'    þ?*�QT9c4B25;*7>.ÜIIýä©M@ ÿöÿ´äe7DR²#+´E++²#E +³@# +²+²+°3´C+´K  +´K++°K° Ö°M3´C++´ >  +°23´ ++°-2°S/°&Ö°*2´P+°52°P± +±H22´+± @22² +³@ +²  +³@  +°±+°:2´+°2±T+±P&°(9° ±-099±´ 8>$9°°9±E#°!9°K´HP$9°°A9°²(I999°C°89°>¶ 5:0@$9° °/9012675!5!!632'>54&#"#5#"&547&54632&#"%654.#"6322675"'Ó#Gþ£îþ¶9G9W54vC"P-!5EG1MFg87XD".+6&37�0"! 5E7Cþ¯#G-N2$ÎIInGP58C):Xm+[,&h¹i0W9:>*A;\ F.$'/8' h}Gç$�- ,"0ÿöÿ9¥eZ{²5+´(+°(°B Ö´G+²*+²I+²+°3´C+°]M² +° 3´ C+°/°3´L7+°Y/´T+°D/´57+°=*] T,#7)  ©JJJ*'RII™$6%þeP!/AYW$3X 4F# ]þ‘&�c6:''-9 ÿöÿn›e9 ²)+°,3´*C+°/´7+² +³@ +³@9 +° /´17+°1°4 Ö´7+°//´&7+°:/°Ö°#2´+°/2°´ +°/°±9+°2´8+°8°. Ö´'+°'/´.+².' +³@., +²'. +³@') +±;+±°9°° 9°'´ 1$9°9°49±8.°9±±99° °9±1±99±/4±99°&±#9901'#"'#"&54735&'732674&#"#"&546;5!5!#!32632#QJJJ0G@+'j&:f(0i­16 J-`1»þ=sþþ5J =HŸJJJä ¯6lU.;6{ g0+YII JE.þšÿöÿmše5I9² +° 3´ C+°/´;C+²; +³@ +°6/´G+°@/´,7+°3/´7+°0 Ö´7+°/´7+°J/°%Ö´D+° Ö´9&+°D±+±.=22´+°° Ö´+°/´+² +³@ +² +³@ +³@ +±K+±D ±"'99°9°B9°·,3;@HI$9°°9±°9±;°9±G6±"=99°@±%D99°,²'>B999°3°.9°0°)9°±*99±±99°±9901'%46;5!5!#!2632#5#"&'47.547&'73254'"#"&"3275#"';PJJJþ¯1»þ=sþþ6 U ?HeU.g$%/40i­h!J-`o7H~ÿöÿ‰¬e:ý²++°/3²%+°(3´&C+°2/´97+´ +& +´ 7+´!+& +´7+´+& +´7+°;/°Ö´/+°/±++²#,222´*+²*+ +³@*( +²+* +³@+% +±<+°6ºœÂ1+ °.°À±,ù°-À³,-....±-..°@±/°9°+± 99± +²45999±±99°!² 999°²#999°°901%4'5%5#"'#"'732654#"'6323275!5!##5#"'732FP("^B_e/`036e-0U%3 O[JPQ5+7-u7"GH ³IIýäo+*4D°8188ÿöÿ9ƒe1F²,+°/3´-C+°/´>++°/´47+°B/´7+²B +³@ +°/´)7+°G/° Ö´2+² 2 +³@ , +°2±&+´+° Ö´<+°±*+´1+²1* +³@1/ +°1³1 +´+°/´ +±H+±2°9°&°49°<±D99±³78>$9°*°B9°1´ A$9±>³;$9°4°9°B´2 78A$9°°9°³ $&D$901"34'432#'#"&547#"&546?&546;5!5!#32?3267'"'A(ÇC#+J`%wDG< ,L6'5B4ºþ‡Qþ>E-BGS" 7\-ÅB Ex*!�B)0o%JhJ0!G1,T=U]II¤þì< %*1 +.dS0f&ÿöÿµ·e0Ö² +° 3´ C+°//´!7+°/´7+°/´7+°1/°Ö´+³+´+°/´+² +³@ +°±+´+² +³@ +°³#+´(+±2+±°9±#³/$9°±-99°³%*,$9±!/±*-99°±%(99°±99°°901747&54;5!5!##"632&#"327432'#"M"FdŽþÛÁT½( # ##+?K A %;?F¥º('(<\SIIš ' J)IJ31g#yÿöÿ)~eQ6²L+°O3´MC+°/´=7+°/´1+°A/°(3´7+²A +³@ +³+A+´#++°/´I7+°R/° Ö´.+°.±F+´+²F +³@FL +°F° Ö´;+°±J+°@2´Q+²QJ +³@QO +°Q³Q +´+°/´ +±S+±.±#(99°F°9°;±1'99±²9=999°J±A99°Q³ $9±=³;$9°1°9°A²89@999°+²'.999±#± 99°±F9901"3&5432#'#".547".54632'&#"3>33267'".546;5!5!#O(ÇE+ ')Ta†&' %P:A-< > l ;†.;^. Xz:O?£þˆEx*!�B/0"TY7¼ 0!%H*.@#&;  +L@,eo &A>#327'".546;5!5!# (ÇB+ 13Z&¢.:r";",A  /'8F§Xz;A6ºþ3_Kx*!�B00"TXQ_N +# a' "3 1ua%&@>$f7* !>]IIýäoç e¤ÿö…e/Ú²+² +±33´C+± À/´-++´(# +´(7+´  +´ 7+°0/°Ö´*+³*+´+°/´+² +³@ +°*± +´+°±+°2´+² +³@ +±1+±*°9° ´!#(-$9°±%&99±(-²999°#±!99°±99017"&547&546;5!5!##57##"632&#"327úFZLMLVþÞ�GGMe²—Ì -"<& d/)G\#F95O6(]IIýä’=2Å4¤#HE$;ÿöÿ‰ôe'3Ò²"+°%3´#C+°/´1+°+/´6+°/´7+°4/°Ö´+² +³@" +°±+´.+°.± +´'+²' +³@'% +°'³' +´+°/´ +±5+±.°9°²+1999±' µ ()$9±1±99°+°9°±99°² 99901"34'432#'#"&547&546;5!5!#'&#"326·)ÈB+ 11S H<;F/™B4»þœüQ"$'$&/%<x+ �B00[\3T.A(,�=U]II¤þ{N#%.ÿöÿ84e-¤²++°3´,C+°/´7+°/´7+°"/´7+°/´(7+°./°Ö°%2´&+°2² +³@+ +°± +°)2´+°2² +³@ +±/+± ³"$9±±99±"° 9°± 9901##"327#"327#"&546;5"&546;5!5!4€Ï'0®h16).Ï*-®e19Vul”`9“,q�a8“þŠ>¤"Y:3'”!Z;3N[H3Q:VL3R]Iÿöÿ94eAز+°3´C+°?/´*7+°%/´7+° /´7+°/´7+°B/° Ö´+° Ö´'+²' +³@ +°±+´+² +³@ +°° Ö´$+³-+´;+±C+±³ *?$9°°59°-±3699±;° 9±%*²6;999± °#9°± !99014>;5#".546;5!5!##"327#"32674.'7#"&)'91Š ;oFa8“þŠ>€Ï(5´]1A MÙUUPJ;9 EV2Y“%#5 A+L+5P]II¤#Y:3š9*. + +8Yÿöÿ9eBѲ+° 3´ C+°2/´$7+° /´:7+²: +³@: +°>/´7+°/´7+°C/°5Ö°2´"+°2²5" +³@5 +°"±;+°2´+° 2²; +³@ +³';+°3´/+°2±D+±;"³$2>$9°'³)*$9± $²*/5999±>±<99°±99014>;5!5!##"32654'7#"32654'7#"&54>;5#".)#71Šþ qÙ 5¥P6;9$%DÙU¥J<;9 }PZ’'91Š#DU:B%5 ]II¤X,%%;!ª9X + <:YI#5 M Fÿöÿnte4÷²$+°'3´%C+°/´7+² +³@ +³@4 +°/´,7+°,°/ Ö´7+°*/´!7+°5/° Ö°2´+°*2°´  +° /°±4+°2´3+°3°) Ö´"+°"/´)+²)" +³@)' +²") +³@"$ +±6+± °9°°9°"³$9°4°/9±±99°±99±,°9±!*°901%#"'#"&54735&'73254&#"#"&546;5!5!#!2632#×G@+'j&:f(0i­h J-`1»þ=~rþþ6T ";Hq ¯6lU.;6{.#g0+YII I=6þšÿöÿ9_eN5²@+´,+°D Ö´(+².+²7+²+°3´C+°5/´;+´!@ +´!+´@ +´+° Ö°L3´+´ @ +´ +°O/°GÖ° 2´%+°%±>+°2´/+°2³/>+´+°/´+² +³@ +² +³@ +±P+±%G°I9°@ !*5;BD$9°>±@99°±,99±D;°>9°@°/9±,(°89±!³#%GI$9°°9°°9°°K9± ° 901%254#"#"&546;5!5!##32632#"'327632#"'732654#"#"&547&'7xoC4v%¼þ?i`ö'<U%iO7:I!#"& 'C)£¬16§A/@'+ 4vaC1.ªžSd+ ]II™K6>]A 5'1(Æ;n4, f-8Y 9pÿöÿ9_eIR,²+° 3´C+°O/´%+°/´1++°5/´<+°G/´+°° Ö´A+° /´+°S/°.Ö´+°±"+´Q+°Q±+°22´ +°2²  +³@ +² +³@ +³@ +³M +´(+°(° Ö´?+°?/´+±T+±"° 9°Q¶+57632#"&54632#"&546;5#"&'732654#"#"&>54#"º.¼þ?i`ö = .&1ÒYb@G(1JfL\«SB•#\¡R1LŠH:5 5u*1-ŒWII“65:'‰A2? $*.<'/BqR6D'j\ PY#Nþ)#!ÿöÿÇe 4² +´!+² +°33².+±133´/C+´ !/ +°3´ 7+²  +³@  +´!/ +´C+´+ !/ +´+7+°5/°$Ö°)2´+²$ +³@$. +°$´&+°±+´+° 2² +³@ +°±,+´ +° ±4+°2´3+²34 +³@31 +±6+±$°(9±² !999°°9± ±$99±°(9° °)901!3#!"##"&'46;5#.54>7&43!5!5!##w( »iþ�ð» \#™B=DVSDQ<þ@VHp=og¤þõ7l &/"-=9oC5 B‚]IIýäÿöÿ¼âe(:÷²+²+²+±,33´C+± À/´)++´'4 +´'7+´/ +´7+°;/° Ö°2´+°12² +³@  +°±+´.+°.°8 Ö´$+°$/´8+°.±+°+2´+² +³@ +±<+± ° 9°´ "4$9±.$°99°8°9°°)9±')¶ "+8$9°4± 799±/°9017.5467&54;5!5!##5#"'2254+"27#!"32pW\ ,DU;#<:çþ¬ìPG^5qCQ/Xb6VO¹þí "Š98# ” M0 0"7O)*1 6@:]IIýäƒ#+^<ss2¤ +9O' ÿöÿ¬*e4Q²2+°3´3C+°#/´"+°9 Ö´8+°/°O3´ 7+´A+°F2°/´/7+°R/°>Ö´5+°5±K+´J+°J±(+´+°2°´,&+°,/², +³@,2 +°±0+´+²0 +³@ +³0+´+±S+±K5²9AO999°J²C8M999±(²*FG999°0² 999°°#9°±"99±"@ (5>GJM$9°A²*C999± °9°/°,901#!"632'654.#"3".547&546;5!5!".54632>7'67&#"*Wþì,6!5J#9,4)8U=XK 0f`=AJçýk4ý$p(=B0S:H03-&B A&*+¤ > )((- ?#5?-O25:J;)]Iþ)4s8$:Y-@P9D Q.%"*1ÿµÿiåe7Aù²5+°3´6C+°#/´@++°/´7+°/´ 7+°/´27+°B/°&Ö´=+°=±/+´&+°2²/ +³@/5 +°´++°+/°±3+´+²3 +³@ +³3+´ +±C+±/=°?9±+³#-:@$9°3µ  8$9°°9°±99±´ &8=$9°³ +:$9° ±-99°°9°2°/901#!"632'654&#"&'#"&54>747&546;5!5!&'26åSþí,6!¯::-0:8U �:'- #> 1F $.8QG 3<:I;)]Iý— + ""//ÿöe09¾²+°#3².+±233´/C+´ / +´ ++´*/ +´*7+´6/ +´6++°:/°,Ö´4+²,4 +³@,. +°4±+°12´+² +³@ +±;+±4,³#$9°³ "$9± ± 99°² 19999±*°9°6²&'499901##5'7&'"'632&#"#"'&/732=!5!!632PG£5¥DZZ3 [" A2 " ! 1V[‚9 G<þâ—þãDlýä·‰)‰ JN $/1-& 5Uƒ¹',(.‰IþŸdVTÿöþõ+e=ì²+´97+²7+²!+°$3´"C+° /´C+´,9" +´7+², +³@,0 +´'9" +´7+°>/°Ö´*+²* +³@! +°*± +´;+°;±+´&+²& +³@&$ +°&³&3+´.+°./´3+±?+±;°9°&³05$9°3°9± °9°9± 99±,°59°'±399012>7#".5467&'&'&'".546;5!5!##"34'432#"« '*E*Q=D7 Xz:B4»þœüQê)ÈB+GTD6 <*?+:E $ &A>#=U]II¤+ �B008U;6$ÿö -eJ²+´C+° /´7+°/°Ö´+±+±±99± ² 999°±9901#5327#"&'5ëõõ$15'zwIþîH 'E5ÿöyîe+g²+´C+°/°3´'C+°2°/± 33´7+°,/°Ö´$+²$ +³@ +±-+±$°9±'°9°³$$901!5!47#5!#3267#"&'#"&%#327>¤ýR®ýèC¦zW&:&6j |>+B ZK1O\µ%;&03()Iþ•C;GG R`@{R*E@¾Q*"Qÿö•e- ²++±33´,C+²+, +³@+ +´ + +´7+° Ö´'7+°./°)Ö´+²) +³@)+ +°± +±22´+² +³@ +±/+±)³ $9° ´ $9±'°9±+±#$99015#%##5#"&54?#''&/732=!5!þ¢?PGB%t¬ #D4_%1U\‚9 G<þâŸl°Œ°ýêÑ @ ?) S%*Iu'5Uƒ¹',(.‰Iÿ<ìY ˆ²+²+°3´C+° 2°/´+°!/°Ö´+°±+´+² +³@ +² +³@ +±"+±°9°²999°³ $9±±99°°901#&54>323###53654'.#"UH' / O‹WWHWYI$ %e#B,0›IIýäI %/D6!<þcìE†²+²+°3´C+°2°/´+°/° Ö´+°±+´+°2² +³@ +² +³@ +±+± ° 9°²999°°9±± 99°° 901.#"#&54>323###5O8»K=6!H#E/A•mIWWHWeDiC%-#42:MIIýäIÿ< ƒ,®²+² +°3´ C+°2°*/´%+³%*+´+°-/°Ö´+°±+° 2´+² +³@ +² +³@ +±.+±±99°³"$9°³ $9± ±99°³ "$9°*°(9±%°'9013###53654'.#"#&5462&54632&#"pWWHWZJ# %3J&6dj Q6"0 6-ÉA IýäI (.E3$9(#L5PF 67 ;Pþc �.´²+²+°3´C+°2°"/´+°/´ +°//°*Ö´%+°%±+´+² +³@ +² +³@ +°° Ö´+±0+±%*°(9° ²"'999±±99±±'(99°"´ %*$9°°9± °9012.54632&#"3###53.#"#&54>ö8g?N!#\9!) $QWHWZ ÂU7E"I 46C;!2-58 ; # G[IýäI5{>,+-+? ÿÿÿ<Gq'píAÿÿþcq'p¾Bÿö@^�² +²+° 3´C+°2°/´+² +³@ +°/° Ö´ +² +³@ +° ° Ö´+² +³@ +±+± °9± °9±±9901&#"3###53&54>2ó�v=5]WHWU%If^X4) e¾M0,IýäI/ :;#'P;4 ÿö¼h² +²+° 3´C+°2°/´+² +³@ +°/° Ö´ +² +³@ +° ° Ö´+² +³@ +±+± °9± °9±°901#&#3###53&54632¼OÆŸFF]WHWUw]6s^Y:eÆO3(IýäI#(Oh(:J<ÿö›f~²+²+° 3´C+° 2°/´+°/°Ö´+² +³@ +°° Ö´+² +³@ +±+±°9±° 9±±99°±9901#&$#"3###53&54632›`jþëp4]>]WHWUœr’DeP{A+'IýäI)Sf�)ðe1;Ô²+²5+´,C+´" , +´"7+´, +´7+°bc  &2A- 9@UeBE86M/97…'O>+O"',. /UEIC1C0KH77N#" ÿöÿà e4™²+´C+°/´"+°1/´7+°° Ö´++° /´7+°5/°Ö°2´ <+²  +³@ +°2° ±)+´+±6+± °"9°)µ%1$9°°9±"±%99°1°)901!5!463!!"3272632'#"546322>54#"#". ýìþ!&�þ|>)!'ˆa5{w&B 420O$IÝG54+j!X+tC )# FLÿö eP²+´C+° /° 3´ 7+°/°Ö´+² +³@ +° 2² +³@ +±+±° 901!5!.547#5!#"ýèÑ[P…åÔ)6T8Iý¦M�84HH4(#x.ÿö:Åe"²+´C+° /´7+°/±+01!5!'%&#"'>32Åþ1Ïþí+e"’+ÆQKIþqœ9•pM7 S@N#ÿÿ.e&0‡²+´7+²*+´C+°1/°Ö´,+°,±+´+°° Ö´'+°'/°3´+±2+±,±%99°³ */$9±'±99±*¶/$901463273267#"&547'7''67&74&#"6‰K,8FF\S*‚!:"J%B+4Dª(êO’.ˆ<®+!1ù84<0C4J'@96<-@/j(%B4&%VAy6G9G:,. +ÿÿK×e#K²+´C+°$/°Ö´+°±+´+±%+±³ $9°±99°°90146327'7''>7.74#"6eA57HF‡<þÓ(Ù€™. /#<­8. 1ý0880D4j QŸ7]II¤ 0 vI, ?& / h>-þ=ÿ²ÿ„½°/´+°/°Ö´+01''%|þæ-Gm»8Óÿÿÿ&f/„&U^PØÿöÿ“e7·²*+²+°3´C+´4#* +´47+´* +´7+°8/° Ö°2´+°2² +³@  +°±-+´(+° Ö´+² +³@ +±9+± °9°µ#+02$9°-±*/99±4*² (999°#°9°°9°°9017.547.543!5!5!#!"632'674''7&#"p(+B1*!.@,:þ€ FþÂ9*@!>?&R9A�<‰:-4€(C"*0,0H);7M <]II¤ 9!B-WO+::(‹,€"ÿ&fÿî„$° /´+°/°Ö´&+± ° 901&54>32&#"�Y 1#**-%fsG, : Z/þ!ÿ.ÿå°/°3´ +°/±°901#'#73^{ŠaËCÒ””ØxfQ\'™²+´+² +³@ +°° Ö´+² +³@ +°2°(/° Ö´ +° ±+´+°°! Ö´+°/´!+°±+´+±)+± ²999±!°9°°$901#4&#"#"&=32632#54&#"&=332ê?" p!?B.U5Eg?1B (f#N,/'-9%R2  4$ÿ  {+«²+²+°3´C+°2°"/´7+³ "+´+°,/°Ö´'+°'±+±22´+°2² +³@ +² +³@ +±-+±'°*9°³")$9°°9±±)*99°"±99° ± 99±° 9014632>32&'"3###53654&#"#&óeOJ= I/&5AWWHWYR= / /N)Ð0W,(( ; I>%IýäI >N+;4ÿÿþ|e„&^(£ÿÿþ|e*„&U<£ÿÿþ|eu„'^–ÿØZÿÿþ`e%„&¤^F ÿÿþYe>„&UP¤ùÿÿþYe„'^ ÿØ]ÿöÿ7ðe:E¿²8+±;33´9C+°"/´47+°/´CC+³>C+´7+°F/°6Ö´<+²6< +³@68 +°<±+´+°±D+´+²D +³@ +±G+±<6²) >999°±(99°³?@$9°D´ $9±4± @99±C>±/099°8°1901##"327#'#7.547#'"'.'732=!5!3>;5ð‚Ï)4+?8^/BGb³^{‹`È4=.¢#D/[,13"BZ9 G<þâúýl­N2”µJ'-E#S)bÓ““Õ&2P1%*Bq15;)Y#‚',(.‰IIŒ=5Llÿöee,d²+² +° 3´ C+´" +´7+²" +³"' +°-/°Ö°2´+² +³@ +² +³@ +±.+±"°9014>325!5!##5"&'46?&'&#"#".'&(]\#9,01þ,oTGÉ p%×?$ *5| 9:ïIIýäéi8/oI D!3$ ÿÿÿöÿ ²e'©‘uÿÿÿöÿ Be&{©:ÿÿÿöÿ e&|©ÿÿÿöÿ me&}©‚ÿÿÿöÿ $e&~©cÿÿÿöÿ þe&‚©­ÿöÿ4¯e<³²-+°03´.C+° /´:7+°:°6 Ö´$7+°3/´*7+°=/°Ö´+³2+´++°+/´2+²2+ +³@20 +²+2 +³@+' +³@+- +±>+±+° 9°2± :99°°9±6 °9°:±899°3²999°*±'9901'#'#7.'73254#""&546;5!5!##327632[JJJ/1 µ^{‹_É-]E91 ;,W@o($6t%¼þ?¹°ö 6'-*ŸJJJ™0E&Ö““Ø :GG0."D(Lm" ƒ8']II¤%H Hÿöÿ7}e(GÛ²/+±233´0C+°/´+°H/°FÖ´+³F+´,+°,/´+², +³@,/ +°±+´'+°'±+´4+°4±"+´9+²9" +³@92 +±I+±F,±.B99±±)A99°´=@$9°'± ?99°° 9°4² %>999±µ"')9$9°/´%,4$901"327.54>75!"327654&#"%.547#5!##'#7.54-(1"xW6þø"C !Ï,6þç)8"W‡… fK`³^{‰aÃ@Y* .o3+('* oN7¬a9A@]48IIl (|ZAÔ““Ð`LJÿöÿzÅe3F²+°3²+±733´C+´&+ +´&+´? +´++°° Ö´EC+´: +´7+°G/° Ö´<1+² < +³@  +°<±+´9+³9+´+°#2°9±+±622´+² +³@ +±H+±< °+9°µ &/0B$9°±E99±9³$4$9±+&´ /$9°±99±?°9±:E±6<99°° 90172674#"#"&546;5!5!##5'7&'"'46327675##"32>7632å)L#K,p#½þÐÏPG�-½] ‡_+Li—!  ¬`>ÁåE '%S6+3Š.]IIý䔦9Î !z+H ?,pXµ 0Ú¤K ÿöÿ74e$g²"+°3´#C+°/´C+°%/°Ö´+² +³@" +°± +´+² +³@ +±&+±°9° ´ $901##"327#'#7.546;5!5!4€Ï"-,@6^0AFb²^{Š`Æ)K?&^<“þŠ>µ1/.G!S)aÓ““Ô#9X4?xlIÿöÿ9e(›²#+°&3´$C+°/´C+°/´ 7+°)/°Ö°2´ +² +³@# +° ±+´+³(+´!+°!/´(+²(! +³@(& +±*+±! ´$9°²999±²99901#'#73"3254'7#".546;5!5!#ì^{Š`ÉEr%0':2†75ItQ?oHcBŠþ qÇ““ØK?",C!f6'0(hO]8nG@dxIIÀÿöÿ-_e9­²(+°+3´)C+° /´7+°/´47+°4°7 Ö´7+°./´%7+°:/°Ö´+³-+´&+°&/´-+²-& +³@-+ +²&- +³@&" +³@&( +±;+±-±799±±99±74°9°.°9°%°"901#'#737#".'73254'"#"&546;5!5!##32632K^{Š`ÊCš'3.2hOA#1U‡2oB6t%¼þ?i`öN&,Ó””ر(?& 5JO6.immƒ8%]II¤%Dÿöÿ-e)2²²+°3´C+°//´!7+°/´ 7+°3/°Ö´+² +³@ +°±+´1+°1± +´+² +³@ +°±- +´$+±4+±°9°°9°1³'$9° °9°²!*/999°$°9±!/±9901#'#734>;5!5!##".54632#"&>74#" ]{ŠaÊDþÚ?*•þ› tÑ(2UM<-1ObPg¡6(1-Ó””Øÿ5@-eII¬=,=g 1*AE5CN—O#:31ÿçÿþ±eo² +° 3²+°3´C+´  +´7+°/°Ö´+² +³@ +² +³@ +±+±° 9± ² 999±±9901#"'&''7&'732=!5!#\I6 %†18<Ç,Ë–9 G<þâ»U�1A8¢58Mˆ8„Õ',(.‰IIÿöŠe'‘²+°3´+²+°3´C+´ % +°3´ 7+°2°(/° Ö´+°±+±22´+² +³@ +² +³@ +±)+±³ $9±%³  $9° °901".54632675!5!##5'75'67&#"p�4$JN9`KX@CDþ”PG”-Á/^ A9"+H:�=(Ac3E]FAwIIýä»c9{Rp)!$$5+ÿþ’eG¢°;/°3´++°/´!7+°H/°Ö´+°±+´E+³E+´$+°E±8+´0+±I+±±99°³!$9±E±&99±8$· '+34?A$9±+;µ')BC$9°µ$&$9014#"6.5467''>7.54632632'>54&#"'67&'"8.$1m >B=™- /#<A58GF] 57#4 ?+6),+0 A4(+ò++(þ}*o)4+I9 *089/D4G )% /K#+'+ ' ;&=ÿö .e!(š² +±"33´ C+°/´7+°/´7+°/´&7+°)/° Ö´+² +³@ +°±'+´+²' +³@ +±*+±'µ"$9±°9°± 99°²#999± &°901327'"&=#5!##"327#"&'>;5p<+>"ÇjKf38�Ð*1lF^1ARzX�'•ÇG,”>#-)Ðþ¿V?áII°A/DdT)rlN!vÐ-;hÿöe)/·² +±*33´ C+°%/´7+°/´7+°/´-7+°0/° Ö´+² +³@ +°±+´"+³"+´.+°./´+². +³@ +±1+±.µ(*$9°± 99±²"(999°´ +$9± -°901327'"&=#5!##"32654'7#"&'6;5p;,<$ÇjKf3#rÙ%0';2DA75JuQV{'‘Á1`Š="/)Ñþ¿V?âII½@",C!258$1)hP[[QwÌVvÿöÿ78e 2¡²+±33´C+°(/´!++°/´ 7+°/´7+°3/°Ö´+² +³@ +°±+´+² +³@ +±4+±¶ !(+$9±!(°.9°°$9° ±#199°² 999±° 901>;5327'"&=#5!##"327##'#7.'ƒÇG,”þ ;,<$ÇjKf3B‹Ð(4,@4]2A!S) µ^{Š`ÉPv(Ò-;5!ù^{‹_É”0':Kf3#rÙ%0';2DA75J`Hþ,;,6#ÂÔL/Šþ$½““Ö“V?âII½@",C!168$1)hHY%"/"Ì–&0vÿô$Ée .P°/´!7+°//°Ö´+°±+´$+°+2±0+±±99°³ !$9°$² &*999014&#"6"&'4?''>7&5463275+r•€ ;b.2C( b@^O4^s`1H–-? ÿöÿ‰Oe/5é²+´5++²5 +³@ +² +° 3´ C+´2 +±"33´7+´ +´7+°6/°Ö°2´%+²% +³@ +°´&+°%±!+´3+°3±0+´+°±+´+² +³@ +³+´+°/´+±7+±%°9±3!±*+99±25±%99°°9°°90174>7&43!5!5!#!"!###"&=.5#2)DQ<þ@YQþ�( xGH=)+7B%4/53H #::Œ5 B‚]II¤=þrG�*04)‹0"-P11FT?‡…"ÿöÿhCe@ÿ²+° 3´ C+°!/°3´,7+´0++²!0 +³@! +°3/´7+°/´7+°A/°?Ö°2´8+°2²?8 +³@? +°8±)+´#+°#±+´+°±+°02´+° Ö´ +²  +³@ +±B+±8?°9°)°9°#±;<99°´!',3$9°²&.999°°9±0!±.?99±3,°19°±99°°901&5463!5!5!#!"632#5'47&#"&54632635&#".54mE HþJMPþ� -AA]†G;@4K3{@50.""BZ&@9 G5.>VE;!]II¤/!þvîX#.D+OS.<' 1!7�.08šW=ÿöÿ‰Oe6å² +° 3´ C+°/´*7+²* +³@ +°%/´ +°//´C+°/´7+°7/°Ö°2´2+²2 +³@ +°´&+°2±+´'+°'±+±-22´+°2² +³@ +±8+±2°9±±/599°'°49°² #999±%*²'-999° ²"2999±/°9°°90174>7&43!5!5!#!"!#5#"&5432&#"32675#&)DQ<þ@YQþ�( UH"93m=1”/"“37Gÿö.¿ek²+°3´C+°/±é°/°Ö±é² +³@ +°2°° Ö± é° /±é²  +³@  +±+±°9°°9±°901!'".547&=#5!!¿þã D3:FM; :ÉþÆVL Q"5:f,D‘II‘ "ÿöÿ‰Oe1˲+²+° 3´C+´( +´C+²( +³@+ +´# +´7+°2/°Ö°2´ +² +³@ +°´%&+° ±++°2´*+²*+ +³@* +³"*++´+°/´"+±3+± °9±%µ -/$9±² ,999°(°9°#°901"&'4?!3.54>7&43!5!5!#!"!#5\rõþñBr%53H DQ<þ@YQþ�( xGŒ& ?( u/"Uw1FT?5 B‚]II¤=þr÷B? ÿöÿ�be5Ó².+°13´/C+°/´7+² +³@ +°/´C+°4/´+7+°6/°$Ö°)2´+²$ +³@$. +°$´&+°±+´+°2² +³@ +°±,+´3+²3, +³@3 +°02±7+±$°(9±²999°° 9±³$$9±°(9°4°)901!3##"&'4>?5#3.54>7&43!5!5!#!"w( ¶¶ \  $™Bl+52H!DQ<þ@ldþ�p=oH7l &/"Pu1CP>5 B‚]II¤ÿöHe[² +°3´C+°/´7+°/° Ö°2´+² +³@ +°2²  +³@ +±+± °9± °90127'7#"&=#5!#×>3ö*Ë Kf3RØ;9¥�DrU@³II°"/ÿÿÿöÿ³²e'˜¸uÿÿÿöÿtðe'˜€ÿß•ÿÿÿöÿÎþe'˜Ì9‚ÿÿÿöÿ#Be'©` áÿÿÿëÿ#e&â©8 ÿÿÿöÿ#me'©© '˜±2}ÿÿÿöÿ#$e'©‰ '˜‘~ÿÿÿöÿ%þe'©© ‚ÿÿÿöþÙðe'©cÿ¿�ÿÿÿöÿ#²e'©› '˜£2uÿöþèOe39²$+´9++²$9 +³@$ +²+°3´C+´6 +±(33´7+´  +´ 7+°:/°Ö° 2´++²+ +³@ +°´&+°+±'+´7+°7±4+´!+°!±+´+² +³@ +³+´+°/´+±;+±+°9±7'±./99°4°9°!°9±°9°°9±69±+99°°9± ° 901'3%4>7&5463!5!5!#!"!###"&=3.5#2÷ »Wþ¶D'*<þ@YQþ�( xGH=)+7Br%53H #::ø Í×5 BA"]II¤=þrG�*04)‹/"Vv1FT?‡…"ÿöþèOe7Û²+²#+°&3´$C+´ .$ +´ C+² . +³@ 1 +´ )$ +´ 7+°8/°Ö°2´+² +³@# +°´+&+°±1+° 2´0+²01 +³@0& +³(01+´!+°!/´(+±9+±°9±!+· 35$9°1°9°(°9± ²2999°.°9± )°901'3'"&'4?!3.54>7&5463!5!5!#!"!#5÷ »WrõþñBr%53H D'*<þ@YQþ�( xGŒ& ø Í3?( u/"Uw1FT?5 BA#]II¤=þr÷B? ÿöþèCeD² +°3´ C+°%/°3´07+´4++²%4 +³@% +°7/´7+°/´ 7+°E/°CÖ°2´<+°2²C< +³@C +°<±-+´'+°'±!+´ +° ±+°42´+° Ö´+² +³@ +±F+±„$0)¡_=ÿöþèOe>ï²+°3´C+°/´/7+²/ +³@ +°*/´$+°4/´C+°/´ 7+°?/°Ö° 2´7+²7 +³@ +°´&+°7±"+´,+°,±+± 222´+°2² +³@ +±@+±7°9±"±4<99°,°;9°´$'$9°±99±*/²",2999°$²&7999±4°9°° 901'3%4>7&43!5!5!#!"!#5#"&5432"&#"32675#.÷ »Wþ¶DQ<þ@YQþ�( UH"93m=1”/"yP1'�ÿö1e$®²+² +± #33´ C+´ +´)+´  +´7+´ +´7+°%/°Ö´+² +³@ +³+±é°±+°"2´+° 2² +³@ +±&+±± 99± °9°²"999°±99017#537"&=#5!#632&#"#5'3275#ÓeeKf3.—D/43G.¨;,78Ö.cCU@³II‘>L &/þÓö"˜"//Òÿö&e$Œ²+´C+°/´)+³!+´ 7+°/´7+°%/°Ö±é°±+´+² +³@ +² +³@ +±&+±°9°± !99± ±99°±$99°°9017#53!5!32654.'5!##"&'»ee_ýÜ$þO9S'   “# :(I‡2c›Iœ?s[!$%# H(6./¢’þ¿þâÿùÿö8²+° /´+°/°Ö´+±± 99± ³ $901#"&##"&5463267 +W t5#//  E<Y]=&%( fþ`þÔÿw%'x²+´ +° ´*+° /´+°/´%+°(/°Ö´"+°"±+´+±"³ $9°³&'$9±±99°%°9° °90127#".'./&54676;53#";þñ(  ()  % œ,³5#¯¶   "! *( 4`' ,þTþÔÿ‚ÿûT²+° /´+°/´+°/°Ö´+² +³ +°±+´ +±° 9±°901326=3#"&5432#þ…V-!;-6BkR$<�$K4)š™5Di/EÿöZ�q²+°/´+°/´+°/°3´++°/°Ö´+² +³@ +°±+°2´+² +³@ +±+±° 9°° 901#".'6532=35!5!## D*#.)ÌþgdŠA›V  B %M¥ãAAýÀþ1þÔÿ|%а/´+°/°3´+² +³@ +° /°Ö°2´+°6ºÁ*ó×+ °.°À± ù°À°³+² Š Š#9²...´.....°@±° 901".'#"54632353'32=û!/  <¯1Bœ (GþÔ2*)3xã.@ª*H4þ@þÔÿx"H°/´+°/± é°/° Ö´+°2±+± ²999±²999° ° 901#"&'>753"&#"32>72ˆF.&�4qN-(ZA;%\+Ù?J)&9-8\T!1þ>þÔÿu%$c° /´+² +³ +°/´"+³+´+°%/°Ö°$2´+°2² +³ +±±99±"±9901'#".54232>54&#"#"5432327‹ LL?.S(d$).H3+)0C@%,-=,<$% 2!: $ kþ[þÔÿ“6d° /´+°2² +³@ +°/°Ö´+² +³@ +°±+´+°± +´+²  +³@  +±° 9015654&#"&54>353ò&8 i<=20=32Ñ=O >"$  5þÔnY)!RR$6Oþ³þêÿ¹ÿÙ '°/´*+² +³@ +° /°Ö´+01#".'3s,VjHµ.2tIvþ¿þÔÿû@`²+´ +°/´+°/°Ö´+² +³@ +°2² +³@ +°2±± 99± ±99°± 9901'#"&##"&54632675! f r5"0- ƒ8?4/H N9$ ( Gþ”;;þBþÔÿ°X #p°/´+³+°3´+° 2°/´ +° /´+°$/°Ö´ +²  +³  +° ±+´+± ²999± °901&'5327%326=3#"&5432#PcSVbfRZ\þÕW,#;O2CjR&þû%$2)(·(B4)‚†LAi/D  þgþÔÿÕX V°/´+° /´+² +³ +°/° Ö´+² +³ +± °9±±99° ± 9901#"'5327'"&547332>2+iYN^fQZ]«3P 3#! þû''8)(Wf+)MP/0(&þ˜þÔÿä=<°/´+°/´+² +³@ +°/±+´+±±9901#"&'35!q?’#9-.òLO-˜X&9Ý66þ¿þÔÿû•$]°/´+°/´+°/´ +°%/°$Ö´+²$ +³@$ +±22±$± 99±°9° ³ "$9015!5!0#"&##"&5463267þÃ8þÄ8v  q5"0- À11l00Á13 N9$ ( GþRþÔÿ»ž!o°/´+°/´+°/´ +°/´+°"/°Ö°2´+² +³@ +°2³ +°±+´+±°9± °9015!5!326=3#"&5432#þVeþ—eþÎM6!;P1HeR&¼11p11nJ2+dhLBo$E  1ϺX .°/´+´+° /°Ö´+´+± +014632#"&10% !$%% 1(00ÿôþ晣 *3Y8²4+°L3°2/´-+³0-2+°33´/+°+2°/´+³ +°3´+°2°S/´;++°B2°=/°@3´>++°!/°3°/´(+°Z/°8Ö´V+²8V +³@8= +°V±%+´+²% +³ +°±;+´B+°B±+°L2´ +² +³ +° ±P+´E+²EP +³@E@ +±[+±%V³ +3$9°±4Y99°;°29°Bµ(-S$9°°19±P ³/0$9±S4±8E99±!± %9901327#"'#"54?654'&#"#".54632327"'7&'&54675!5!!5>54&#"ˆcOT]cQP_>  (_ @JKAþÂXZT]^«ZM>>|^þÙ¥þÂ_|2%,(zBMl**=! 9""£3 # L.3,KJûê" 8##ö1aN’’AA’‘O0G) @45Jfq?45ÿóú5X x°/°3´++² +³@ +° /´+°/° Ö´ +² +³@  +² +³@  +° ³ +´+°/´+±+± ° 9° ±99014632"&#+5;+,00!H k@``‰YYE$!&00ýûFAAÿùÿ@ý™ =G[)²5+´+°/´++°/± 33´+°22°H/´Q+°A/´#+°\/°;Ö°2´+°G2²; +³@;< +°;´+°E2°± +´0+³>0 +°3´(+²(> +³@(* +°0±K+´N+°N±V+´Y+±]+±;°79± ·#.5A$9°>² ?999±K(°+9±VN°H9±±99°5± 99±± 099°°.9±#A´KMNVY$901#"'5327'4&##3263>7%4>32!!#"&/47#5!.#"%"&547332>53@kL[]cVX^8Z,kaA±6Fþ€zajJ"þ &=kFTv8Bþ¿LEt'L4ަOG^v7R/ ÞBUI-$3 V˜((A('ú7[î5ËÒ!WYA%EO9&5ZW2AZn"Dk65 в†$Ajn+=5KX=I<.' BWÿùþ«ý™ &GQeI²?+´+°/´+° /´++°/±33´!+°F/± 433´G++±2H22°R/´]+°K/´-+°f/°EÖ°'2´ +°Q2²E +³@EF +°E´!+°O2° ±+´:+³H:+°&3´2+²2H +³@24 +°:±U+´X+°X±`+´c+±g+± E°A9±!@  -8?K$9°H´ I$9±U2°59±`X°R9±±99° ± 99°± 99°?±99±±:99°!°89±-K´UWX`c$901#"'53275#"'5327'4&##3263>7%4>32!!#"&/47#5!.#"%"&5473326534iYP\cUX^lLY]cUX^,Z,kaA±6Fþ€zajJ"þ &=kFTv8Bþ¿LEt'L4ަOG^v7R/ ÞBU&%)MVþÒ''A('V((A('ú7[î5ËÒ!WYA%EO9&5ZW2AZn"Dk65 в†$Ajn+=5KX=&8 ?F BWÿùµ ALï²<+´+°/°3´I+°@/±1B33´A++°/2°/´ +°)/´#++°M/°?Ö°!2´B+°/2²?B +³@?@ +°B±+´7+²7 +³@7% +³@71 +°7±+´+°± +´+±N+±Bµ#)5=&'#"&54>54'4&+532676·&6+;‚ž@cAN/7 '$+$BJ;&  &8\>]p%ú "3[9'ÔAþºFýÀi JE>&:*C$ ‹&WI]7/$;" 2#"&'67&'###535463235#&œ98F5̈^(8U?C¤K$>! c/nÖ“wu@}}kc52 |-{© %òL:c„Aó8'!f# 'bpLT[gnýÀ@A:ƒg*P5¢œ³ÿöÿÁ«¥ B²@+°,3´7+²7@ +³@7< +°7° Ö´+²+² +°1/´+°/² *.333´++°(2°/°/´$+°C/° Ö´0+°° Ö´+°/´ +² +³@ +°±+´+°±+´0+°=2°0±-+°2´,+°'2²,- +³@,* +±D+± ²999°±499± ±799°°@9±0±:;99°-±$99±17°9°°90162#"&543567&'#5!4&#"#4>323####"32>2#"&8&}-{©þM“wZÆ2JC*@"C.am¯¯@�_|˜:¤K$>! X:pÔ+%/œ³þ|T[gnA�f>H$?<$gƒ:AýÀ@ó8V!f# *_pÿÿÿùÿfã�'iÉ&ƒe¾zÿÿÿùþíã�'j¶&ƒe¾zÿÿÿöÿÁ§¡'kŠ&‚eµ]ÿÿÿùÿúhÕ'lM&:e,–ÿÿÿùÿÞßµ'e¾zBÿÿÿùÿähÕ'n&:e,€ÿùSX Qɲ+°F/±33´G++°2²FG +³@F +° /´+°R/°@Ö´N+°N±)+±+°2´+°±+´+² +³@ +°³+´+°/´+±S+±N@°69°)°P9°² .1999±° 9°°9°°9±F³NP$9°G° 9014632"&26?5!#####"&54>=&'#"&54>54'4&+532676O00!H þD6+;²ž@“AN/7 '$+$BJ;&  &8\>]$!&00¯ "3[9'ÔAþºFýÀi JE>&:*C$ ‹&WI]7/$;" %1 %œ,³5% ¯È''Z''W  ", %(E#(þ¿þÔÿ÷€5° /´+°/°Ö´+±² 999± ³ $901'#"&##"&5463267'7 D< r53/!¬4£5@./1P4& Vþk‚þ_þÔÿþ�E° /´+°/°Ö´+² +³ +°±+´+±± 99°°901%32=3#"&5432'7þŒN3?:O3>gJ'Dr4¯5"?M|{D9X-= þµ‹þaþÔ0š(v°/´+°/´&+°!/´+±é°)/°Ö´#+°#±+´+±#°9°³$9°³'($9±±99°&°9°!°901'7'3270#".'.546;53#";03‘5°?  *  1#,"œ,³5"¯þêu�W    +"J#)þÝ ÿ@Y$°/´+´+°/°Ö±é±é01462þÝ0 þüÿÿTÿ¶ 4°/´+° /±é° /°Ö°2±é±é°´ +° /013#5265#þüX/)-JI+/*ýèRCÚ~²+´ +²+´+² 222²+´ +²+´+°2°/°Ö´ +² +³@ +° ± +´ +° ±+´+² +³@ +015!##5##5##5ýè[!HŸH¡H£77CCQQCC{} P°/´ +°/´+°/°Ö´ +° ±+´+±+± ²999± ²99901462#"&73264&"$4#$$ @$#4$$2O^‹(°/´+´+°/±+´+±+015!2,P::;Ø'°/´ +°/°Ö´+´+±+013#;;ØÔØ,D°/´+² +³@ +² +³@ +°/°Ö´+°2² +³@ +± +0133##;ññ;y;xØ,D°/´+² +³@ +² +³@ +°/°Ö°2´+² +³@ +± +01%#5#5353,;ññ;Øy;xÿÿ Ä&ó #ó""|�ø#|2ÿø"|ø|¨ÿøLÿ&†ÙQ²+²+°3°/± é°/°Ö±é°±+°2±é±+±²999± °9°±9901%3#"'53232=#3.XMG @þvXe…Tüº58Q;1jý±Ùã  /²+°3²+´  +´+° /± +± ° 901%##3#/O¸7[»k¸^HHMžž ýóÖåå6Ä o²+´7+²+´7+´ +´7+°/°Ö´&+°2°±+±é° Ö± é±+± ° 9±°9°° 9°° 901%+32'4+32254&+Ä[FíÕTNOfn`rr`>U,)”–CS S2O$(‘I—êO(-¤!ÿéðe²+±é² +³@ +²+± é²  +³@ +°/°Ö´<+°±+±é±+±² 999°°9± ±990164>32#.#"32673#".!4eDVjT <;HRXH>:T q`Cd3ÓZ\Z9[W5-k`\m32#.#"t%J2BX•à: 7wjŒ&8\:ZxSB;N`#CB)NDFþã`lr[Yu$3+<ÆžöŸžzpS83>+6á  x²+°3²+´7+´ +´7+°!/°Ö´&+°2°± +°2´&+´1+° Ö±é±"+± °9±°9°°9°°901#&=4+#32'4&+326‰9 \P¢NòMXQ01——01^:%1.XÜ LD[R3 ¥&!ÿéÉ)²²!+´++²! +³@& +² +´+² +³@ +°*/° Ö´&+°& Ö´'+°±+´&+° Ö´+±++°6ºï{Â++ °°À±ù°À³....³....°@±² !999±± 990172654&/&54632#&#"#".'3úE<,2ƒjkV[jJ|5<&/„6<-W:%FA(JA*<$$ #cGY[Mj0(! #J156!)N53J° @²+²+´7+°2°/°Ö´&+² +³@ +² +³@ +± +01##5! N¨œÇþ9ÇFF6ÿéÉ @²+´++² +°3°/°Ö´ &+° ±+´&+±+± °9013#"&533265{No[]lNA:=? þ�OdbQqþ�59;3Ó !²+²+°3°/±+±°901!#33\¼[‘ˆZ þN²Ÿ u²+±33²+² 333° /±+°6º=ÙïŒ+ °.°À±ù°ÀºÂDï+ °.±°À± ù° À² ...¶ .......°@01!# #333ZolZ†ZYmZpWY–þj þo‘þo‘Ý &²+°3²+° 3° /± +±± 9901#'#373$¹f†‡Z°¯e}c þóÐÐ ÃÃå 3²+²+°3° /°Ö´<+± +±°9±°901%#5373"SÊb’Ž^ÎÎÎ?ðð® 2²+´7+² +´7+° /± +±°9°°901!!5!5¬þÑ1þp1þã Hþ�FF�F µ m²+°3´ 7+²+´7+°2´ +´7+´  +´7+°/°Ö°2´ &+°2²  +³@  +³@ +³@  +±+01%##!!3#!!=#Z½=V×Çÿòò þ¥F`”” F˜F£FÛìì!ÿè) #…²+²+´7+²+´7+°$/°Ö°2´&+°±"+´ &+° 2±%+±±99°"µ$9° ± 99±±99°µ  $9°± 9901?&546327#"'7&#"%32654#79”qaE= ==’qfI4J1ETbIþï9ETa=OgzŸ<@BMrz C9’'*qaNÕþ×2raS6ÿéÂ&�² +²+´!++² +±é´& +´+°'/° Ö´&+°±#+´&+°° Ö´1+°/´1+±(+±µ !&$9°#°9±&!±99°°9°°9012654#"#4632#"'53254&#õ;(eoNnPOf  0^O*.  gA@:&%Kaþ‘?^U<*6 M"_`N m5+6À T²+²+´  +´7+´ +´7+°/°Ö´&+± 22°±+± é±+± ° 9017#332#'3264&+„NN”K]XA£…)64+…‚‚ QWGBZF-T- â €² +´ 7+²+´7+´  +° 3´+°2°/° Ö°2´ &+°2² +³@  +² +³@  +° ±+´&+±+± °9°°9°°9017#53532+732654+37--ÐdwwdÐNwHP˜wuò4ç�òŽò¬`aÀ¡4’ M²+´7+²+°/°Ö°2´&+° 2² +³@ +² +³@ +±+±±99017!!55737�þ­::NppFFÂ(>( ØM;N6ÿé7jc²+´7+²+° 3´+°/° Ö´&+°±+´&+°±+´+±+±°9±°9°°901#"&5332653254'bt\^qNF;>DN! j!(IþËOdcPqþ�49;2q!ÿéL=%�²+´ 7+²+´C+²+°&/°Ö´1+°±#+´ 1+³ #+´ +±'+±#²999°² 999± °9± ³  $9°± 99012>54'7#"&4632"32654&Ý 2P,�sq“’q+>#¦NecQS`eâ '(D Hat¡žöŸu\[vq^]vYÿò®.19@Lþ²+±33´H7+°?2²+´+° /´+°C/±;33´"C+±+222°6/±'é°M/°Ö´E+°E±A+°#2´=&+°82°=±:+°22´1+°*2°±+´.&+°2². +³@ +°.´ +° /±N+±AE±H99°=°9°:±'99±²999±. °09±°9± H³ $9°³0EK$9°C°.901%#"'73254+732654+#"'#"&546;5463232%54&"5#32%5#"3265&®I57!G,85  wÄv%dHPgL6rYRmR�$$þÍChBííxuþÇ'{/)!-Y079* @#øNNcNHaXrtVe/À6LN7]³²_.<1"9Yÿ&w/<DKV²+´++²+° /´7+°&/°"3´T++°J2³T&+°$3´++°P/±F33´,++±5=22°A/´1++°W/°)Ö´R+° Ö´1+°R±N+°-2´H&+°C2°H±E+°=2´ 1+°42² E +³@ +° ±+°2´&+°92² +³@ +±X+±N³&T$9°H°$9°E±1"99± ±99°°;9±°9±&±99±T°;9°P³)9LR$901%#!"3!!"&5463!254+53254#&##"'#"&546;5463232%54&"5#32%&=#"326wmþ %66%Rý¡FY[Dí5.>:29)7±f&R@M`D*kOJed4M%'þÉÓ +?@+ Q ŽG9 FS)Yÿº.&.4@Jå²+´37+²+±>é°/´I++°D/´ 7+°9/±/33´C+±$'22°+/±!é°K/°Ö´;+°;±5+²8222´1+°-2´F&+°1±/+°'2´1+°$2°±+´+±L+±5;°9°1°9±/F· !+3DI$9°°A9°° 9±DI± 99±93µ5;$9°°%901%#"&54632>54&##"'#"&5434632%54&"#32%4&5#"3264&#"32ºð©V…fFLŒE[bBÄv& D*GQéib[dj„þÁDfCííxuþË'{.)#,>`+d_&jgœÉA=22>3#€T?ZþúM$4cN©hz~dz5MO6IªQD_-;3þû  Yÿ½.'/5FR²+´4++²+±Pé°/´E+°A/°83´++° 2²A +³@A< +°K/±033´C+±%(22°,/±"é°S/°Ö´M+°M±G+²J222´2+±.C22°2±=+´<+°<±0+°(2´1+°%2°±+´1+±T+±GM°9°2°9°=´",4$9°<³+ E$9±0± 899°±699±AE±99°° 9±K4µGM$9°°&901%#"54632632654&##"'#"&5434632%54&"#32&#"#5.#"324&5#"326½Ý¢øT6\!LQ$GULÄu'C*GQéhc[dm„þ¾DfCííxuu8%D3H sþŸ'{/(#,aœÅ.989JJzMUþúJ#2dM©hz}e{€5MO6I¬Ó6"'=T=#_,<3Yþ†º.'S]dn{…�²0+°43´M+°D2°+/°93´+°e2°j/°ƒ3´?++°R2°/±33´c++± o22°w/±_33´7+±X22°T/´#7+°†/°Ö´y+°y±-+´|+°P2°|±u+±r22´a&+°W2³�au+´)+°a±I+´H+°H±^+°Y2´1+°&2³m^+´<+°§Pa]+QQJ<,_+1J¨N7>G÷·7&J _-@YÿóÄ.@NW^l0²9+²05333´_++±]22²9+´AC+°h/±HY33´>C+±(S22°>° Ö±é°O/°$3±é°2°m/°<Ö´j+°j±b+²>eg222´[+°R2°[±X+°T2´J<+±(é°J±D+´-&+°-±+° 2± é°2² +³@ +±n+±bj°99°[°79°X±599°J±299°(°H9°D±0A99°-±$99°±99° ° 9±A@ -27² 999012632#"'532654&+527654'&#"3232#"'#"'#"&543462654'&'"354&5#32%2654&547#"Aj<°dO_IK]C7&%4,'9G1D3EU7E7³]OQ)Y5u'aFRéfˆ%.8 N$þö5GúAAú{þp#+'{1.<.j*2ºq@MJ-$)2L 4<#)N§P`\'5PPeK©`‚þ=+@ *:9¨N7>G÷·7&J _-@Yÿ%S-HR\cqU² +´++²+°/´7+°=/±5933´d++±Ia22°m/±N]33´B++±/[22³$Bm+´#7+°V/°*3´E++°2°r/°@Ö´o+° Ö´1+² +³@ +°o±g+²Bjl222´_+°Z2°_±c+°S2´Q&+±.é°Q±L+´2&+°2±+°'2´<+°2±s+±g³ =d$9°_°;9°c±E999°Q±G799±L.±5I99°2³ *$9°°#9°°9± °9±d=°;9°#·27@Lgo$9°m²Qj999±VB²'G999012#!"3!!"&5463!27654&+53254&#"32#"'#"'#"&543>3262654+'4&#"3#3252654&547#"Ui‘59F+mýŸ%6[/üÄGX[DYS3# 3*Hi?B8:.¨\AD)*dc)R?NÐ`Rw-B .{O:1.ÔÔlhþ¡%i(-OPT^o$-#CHJA@S K%3G?,3!5Œ?UHH<G÷·Ì  ñ7&J _-@Zÿ"P2FR[bo ²B+±8>33´c++±Ga22°/´#7+°k/±L]33´C+±1W22°S/°,3´C+° 2°p/°Ö´+°±E+´m+°m±i+±f22´_&+°V2°_±\+°X2±Pé±0M22°P±J+´4+°4±(+´ +±q+±E°9°m°9°i±Bc99°_°@9°\³#>$9°P±;99°J± 899°4°,9±kcµ (4@E;$9°±99°S°9°°9014632632#".54767!2>54'&#"32#"&'#"'#"&542654+"354&5#32%2654&=#"ãj]848BzŒSN>n ¼p�å¬]=4d–‘|ÇšU;:fG5.6µ+0P'EY4t)aFTÐ*1x-'ù6EøBBø}{þp$*&z/Ld}2gYR�f¢nH!9uÃUC>F5ruÕlk-^ŸlbA@2+2 §L146#&3QQeL©þð;-_ =0K¨N7=H÷·6' Q _.?Zþ|P2P\eqx…j²L+±BH33´y++±Qw22°/´f++°/´-7+°�/±Vs33´C+±;a22°]/°63´C+° 2°†/°"Ö´)+°)±O+´ƒ+°ƒ±+±|22´u&+°`2°u±r+°b2±Zé±:W22°Z±T+´>+³o>T+´+°/´o+°>±2+´ +°i Ö´+±‡+±O)°&9°ƒ°'9°±Ly99°u°J9°r³-H$9°Z±E99°±BQ99°T± 99°o°69±i>³fl$9±f³io$9°-°9°L±l99±�yµ 2>JOE$9°±")99°]°9°°'9014632632#"&547#".54767!2>54'&#"32#"&'#"'#"&542654+"354&2654&#"5#32%2654&=#"ãj]848BzŒSN4 !aCB_°�å¬]=4d–‘|ÇšU;:fG5.6µ+0P'EY4t)aFTÐ*1x-'ù6EøBº(87)'88þ¯ø}{þp$*&z/Ld}2gYR�Îy*+7C``C(9uÃUC>F5ruÕlk-^ŸlbA@2+2 §L146#&3QQeL©þð;-_ =0K¨N7=HüÚ9()78(':/·6' Q _.?ZþRP2NZco†“™²J+±@F33´‡++±O…22°/´p++°x/´d+°/´+7+°�/±T�33´C+±9_22°[/°43´C+° 2°”/° Ö´'+°'±M+´‘+°‘±�+±Š22´ƒ&+°^2°ƒ±€+°`2±Xé±8U22°X±+´}+°}±R+´<+³{54'&#"32#"&'#"'#"&542654+"354&2654&#"2654'#"&'5#32%2654&=#"ãj]848BzŒSNˆ6Hk”j w˜�å¬]=4d–‘|ÇšU;:fG5.6µ+0P'EY4t)aFTÐ*1x-'ù6EøB¨!#" /D9*)8 CþÇø}{þp$*&z/Ld}2gYR�Öz]>JjjJ 9uÃUC>F5ruÕlk-^ŸlbA@2+2 §L146#&3QQeL©þð;-_ =0K¨N7=Hý!""! qD. *>8(.DY·6' Q _.?Yþˆº.'FPWd.²++´0+°:/´?+°D/´4+°/±33´V++± X22°`/±R33´7+±K22°G/´#7+°e/°Ö´b+°b±^+±[22´T&+°J2°T±(+°<2´2+°2±Q+°L2´1+°&2°±A+´7+°-2°7±+´1+±f+±^b±X99°T°9±2(´#=GV$9±Q·+045:?CD$9°A± 99°7² .999±D?²<7=999±04²-(.999±V° 9°`³ $9012#"'53254+#"'#"&546;546324632&#";2#"'73254+"&"354'&5#32%26545'5#"Ph+)R"as+Äw%`FRfK8n]QnÏZFo>)/U]DC€YFn@*-W^E>;K3Cí! Aíxuþ| /'{0WSJM1/ FjWíMM^KHYRnoQþ5::A.27*g:9A-16(6�J52&$ë®/!SY,;Yý»º.'OY`mxx²++´0+°?/´n+°t/´H++°M/´4+°/±33´_++± a22°i/±[33´7+±T22°P/´#7+°y/°Ö´k+°k±g+±d22´]&+°S2°]±A+´v+³2vA+´(+°(/°E3´2+°v±Z+°U2´1+°&2°±q+°J2´;+´7+°-2°;±+´1+±z+±gk±a99°]°9±A(´#FP_$9±v2°C9±Z@ +045?HLMnt$9°q³ >s$9°;³ .9$9±tn±A;99°H±C999°M²E7F999±04²-(.999±_° 9°i³ $9012#"'53254+#"'#"&546;546324632&#";2"&547&'73254+"&"354'&5#32%26545'5#"2654&"Ph+)R"as+Äw%`FRfK8n]QnÏZFo>)/U]DC€@.$#jH"9+*-W^E>;K3Cí! Aíxuþ| /'{0é+*>*+WSJM1/ FjWíMM^KHYRnoQþ5::A.27*gC%>3%$H45# --16(6�J52&$ë®/!SY,;ýŸ*++*Yý¦º.'OY`mu„¯²++´0+°>/´w+°~/´t+°p/´H+°M/´4+°/±33´_++± a22°i/±[33´7+±T22°P/´#7+°…/°Ö´k+°k±g+±d22´]&+°S2°]±A+´ƒ+³2ƒA+´(+°(/°E3´2+°ƒ±Z+°U2´1+°&2°±n+´{+°{±y+´;+°;°7 Ö´J+°J/´7+°-2°;±+´1+±†+±gk±a99°]°9±2(´#FP_$9°ƒ°C9°Z°�9°@ +045>HLMprtv~$9°n² w999±{J± 99°y±.999±ptµA;y{�ƒ$9°H±C999°M²E7F999±04²-(.999±_° 9°i³ $9012#"'53254+#"'#"&546;546324632&#";2#"&547&'73254+"&"354'&5#32%26545'5#"4#"322654'#"&'Ph+)R"as+Äw%`FRfK8n]QnÏZFo>)/U]DC€/;K3Cí! Aíxuþ| /'{0$+..+OJ2 *!- WSJM1/ FjWíMM^KHYRnoQþ5::A.27*g:*I8RR83* /-16(6�J52&$ë®/!SY,;þ ,,-V2%!/,%Yþ†º.'PZanE²++°A3´0+°!gafO$:XI&!(°J52&$ë®/!SY,;Yý»º.'Zdkxƒ�²++°K3´0+°@/´y+°/´R+°X/´4+°/±33´j++± l22°t/±f33´7+±_22°[/´#7+°„/°Ö´v+°v±r+±o22´h&+°^2°h±I+´N+°N±)+´2+°2±e+°`2´1+°&2³�e+´D+°D/´�+°±|+°U2´<+´8+°-2°<±+´1+±…+±rv±l99°h°9±)Nµ#KL[j$9±eD°F9±�µ+04RX$9°|· 5@Wy~$9°<±.:99±y±D<99°R±F:99°X°89°4²(IN999°0±-.99°+±)L99±j° 9°t³ $9012#"'53254+#"'#"&546;546324632&#";2#"'&547.54732654+"'"354'&5#32%26545'5#"2654&"Ph+)R"as+Äw%`FRfK8n]Qn»]Ep@+/U`FC6PD4%#54$%b}<-1N?V%FF?7$:3Cí! Aíxuþ| /'{0+*>*+WSJM1/ FjWíMM^KHYRnoQýýp?D$9±}+°?9°z±-(99°W²;;::85M‡<3+g5EMææNNææM=+BºJ52&$ë®/!SY,;þ«0v33WO$WN%PT;:K>3;"!= JW=1 !)Ab*< $.:©3Cí! AíxuÐ)7H ý¤ /'{0M02WSJM1/ FjWíMM^KHYRnoQý¨2E¤X>><<>=99VHfK9<0.Läá 0."áäM=+@ºJ52&$ë®è2!Ldé/!SY,;þsttYýü .'v€‡’Ÿ¤ã°5/´:+°E/°k3´‹+° 2°¢/´e+°`/±OX33´q+±+u22°/±33´†++± “22°›/±‚33´7+±{22°w/´#7+°¥/°mÖ´£+°£°� Ö´+°/´�+°£±¡+´h+°h±]+´\+³„\]+´™&+°™/±–33´„&+°z2°\±�+°|2´1+°&2°T Ö´S+°±I+´ˆ+°ˆ±�+´C+³�+´1+°C±=+´1+±¦+±£�°c9°¡³e“k$9°™±`q99±]h°9±\„°s9°T´#uw†$9±S�°(9±ˆI´ + 7O$9°·58:EM‹�$9±C�±-A99±:5°79°E°89°‹³ST\]$9°¢@ =C1Imˆh�£$9°e±Ac99°`µ-M(s��$9±†° 9°›³ $9012#"'53254+#"'#"&546;54632>32#"'732654'&'#"'&54767&#"#54&#"#54#"632#"547632632"354'&5#323254'#"26545'5#"4"Ph+)R"as+Äw%`FRfK8n]QnKD%}G*&25X40%(?>>çJ52&$ë®þÀ3X2(?/!SY,;þnv:<YÿòŒ.NYcjw0²1+²=+² "9333´k++±Oi22°s/±5e33´CC+±L^22°/³+Z$3´7+±H22°x/°@Ö´u+°u±q+±Dn22´g&+°]2°g±d+°_2´71+°K2°7±1+°2´0&+°0±&+´W&+°W±R+´<+°±+´ &+±y+±qu±=k99°g°;9°d±H999±W&°+9°Rµ")$9°²999°± 99±k1°9°s¶&;@RW$9°C± 99°²)T999°°9014632632'654'&#"&#"#"'&5467&#"#54&+#"'#"&546;54632322654'"354'&5#32%26545'5#"D­~M!y�OG‹-l8+°2´=&+°=±5+´U&+°U±[+´/<+°/±'+´&+±{+±s³$Jo$9°k°H9°h±F99±U5°99°[¶ % 2,7$9°/±*99±°!9±oJ²=>H999°u¶'/5MU[$9°P°9°_²,7]999°° 901232>32632)"3!!"&5463!254&#"#"&547&#"#54&+#"'#"&546;54632654'%"354&5#32%265'5#"äJe(MxI9(+`oˆþÛüN#:6'Ëû(EYYE­ëeT+?kHKfp#M_K( ³f'R@L^E-jp5/.3adýÙ-;Ï;;Ïjeþ¨$l*-]G>\, wþê)!$DG@BLÓ\x#l7KvrOpTTIæŒ)Ì==QA?LJZþð7MM7PTHo8, *8¿ ’(GI$0Yÿ1å-]gov�‰²+´*++²'+°"/´++°V/°R3´w+°u2°@ Ö°J3´aC+°0/´1++°}/±Oq33´\++±l22°i/±9G33´++± 22°‚/°YÖ´+°& Ö´1+°±{+°2´s+°k2°s±p+°m2´P&+°2°P±K+° 2´J&+°J±C+´^&+°^±c+±=é°=±,+°42´1+°2², +³@,0 +±ƒ+±{³)Vw$9°s°T9°p±R99±^C± G99°c³@;E$9°=±999°,²*999°± !99±°&9±w@²,T999±10¶=CY^c$9±\}± 499°i´5;Ee$9°°9014632254632632#!"3!!"'&5463254&+53264.#"#"&547&#"#54&##"'#"&546;2654'$"3545#32%265'5#")kMIe¤aY&9nùQQàü Y6#Èû-B0-[Dõ›3!74$3=A0'\hQN_s&ÁL²g%Q@L]E.«2\6S/Bþ2X;ÎÎieþ©&l*‰H\^F Og©Z]—A*E(&@=GV!2D,D-TcRmlSrOŽù¡Ì==PB?LT4BB4QPX’;+ +ˆ ‘(!GJ$1YÿŒ-OYcls~b²7+°33´t++°r2²+°*3´P++°/´b++°]/´ 7+°z/±/n33´=C+±Fh22°d/±&33´BC+±L22°/°:Ö´|+°|±x+°>2´p&+°g2°p±m+°i2´11+°E2°1±++°I2´*&+°*±!+´W&+°W°_ Ö´ <+° /´_<+°W±S+°Z2´<+°±+´&+±€+±x|±7t99°p°59°m±B399±_!°&9±SW@ LN$]b$9°²999±]b± 99±zP@ !5:SW|$9°=°I9°d²$U999°B°N9012#"&54632>54&#"#"&5467&#"#54&+#"'#"&546;5463232463262654'4&#"32"354&5#32%265'5#"uƒ”gÁwV‰iFE‹ F`lh"-JtOSpK6,XnL/!(Äv&`HPfK8rYSl1$#­~<2772>ov>§_-a\&kü¶4AíDDíxuþ|#,'{/-·‘܈A=22:+0Ëps‹ '‘DV‹ˆYK…) uYþê¨#8øQQcNJ_XquTq†&&þb>rcU€B^Ö  žN76Lõ·7&X_-@YÿŽ-Xct}ƒ‘™²Q+°M3´„++°‚2²8+°E3´\++°/´k+°g/°o3´"++°&2²g" +³@gs +°�/±J~33´WC+±y22°u/±/A33´C+±22°’/°TÖ´�+°�±Œ+±‡22´&+°x2°±~+°z2´K1+°2°K±F+° 2´E&+°E±<+´Y&+³iY<+´&+°/´i&+°Y±t+´s+°s±`+´4<+°4±,+´1+±“+±Œ�±Q„99°°O9°~±M99±Yi°A9°t³"?g$9°s¶8\bk$$9°`°19°4´&/mo$9°,°(9±gk±(99°"°$9±�\@ ,<4OTY`‡�$9°W° 9°u²1?b999°°9014632247632632#"54763263267654&#"#"'&5467&#"#54&+#"'#"&546;327654'.#"327&#"#"354&#32%2654&547#"BrYS664 !]R|=17a’H?sxÄü.(3[#LR#8# ki$.I678ovd4H sI8&Bý74AíDDíxuþ|!.'{0dXq:;TvD=&&dW‘ÄŠ“289J:f^Vs„ '‘DTEHGCWK…) vXþê¨)2þïQQcNJ_lB^7-n33´LC+±Vh22°d/±#533´Q7+±22°€/°Ö´+°±J+´}+°}±y+°M2´p&+°g2°p±m+°i2´@1+°U2°@±:+°2´9&+°9±1+´Y&+°Y±`+´)<+°)±+´ +±�+±J±99±y}±Ft99°p°D9°m±QB99±:@± 99±Y1°59°`´-%3$9°)°#9°°9±{t@ 1)DIJY`$9°L²999°d²%3b999°Q±9901463262! '&4767! 7654'&#"#"'&547&#"#54&+#"'#"'&46;5463232327654'%"354&5#32%26='5#"æ¡~J%"êPKü¦þ[Ë÷43Ié¸{ È¬?@R!!7$5:TQ:7ƒ-VdL/"'Ät)bK*$gL6sYS662&8<87ový§3CîFFîyuþ}!-&z/6tƒ%%_\þ0`uU?8P2vtøePs`©hNO 0ME;XGNIE_—c tZþê¨$7øQQ62’`Wr:;TlEd92>tcU„P75O÷·5#X_.?Zþ|2ep{„‹—³²G+²S+±:O33´Œ++±iŠ22²+°/´q++°/´(7+°“/±K†33´YC+±c€22°|/±0B33´^7+±22°˜/°Ö´$+°$±W+´•+°•±‘+°Z2´ˆ&+°2°ˆ±…+°�2´M1+°b2°M±G+°2´F&+°F±>+´f&+°f±+´y+°y±m+´6<+°6±,+´ +³ ,+´t+°t/´+±™+±W$±!"99±‘•±SŒ99°ˆ°Q9°…±^O99±GM±(99±f>°B9°µ:@io$9°y±299±6m±099°t´ qv$9±q³sy$9°(±t99°S± v99±“Œ@ ,>6QVWfm$9°Y²$999°|²2@o999°^±"9901463262"'&547! '&4767! 7654'&#"#"'&547&#"#54&+#"'#"'&46;5463232327654'264&#""354&5#32%26='5#"æ¡~J%"êPK£,>_†0/ ÃþÜþ[Ë÷43Ié¸{ È¬?@R!!7$5:TQ:7ƒ-VdL/"'Ät)bK*$gL6sYS662&8<87ovB(77('99üŒ3CîFFîyuþ}!-&z/6tƒ%%_\ÈsS5C`0/D"8`uU?8P2vtøePs`©hNO 0ME;XGNIE_—c tZþê¨$7øQQ62’`Wr:;TlEd92>tcUý\9P88(':(P75O÷·5#X_.?Zþl2eoz‰’™¤ɲH+²T+±9'/õP75O÷·7&X_.?Yþ„º.'LV]j²(+°-3´A+°82²A( +³@A= +°/±33´\++± ^22°f/±X33´7+±Q22°M/´#7+°k/°Ö´h+°h±d+²Ia222´Z&+°P2´D+°Z±=+´<+°<±W +°R2´1+°&2°±5+´0+°0± +´1+±l+±dh±^99°D°9±=Z·#(AFGM\$9°<°+9°±-899°5´ 23$9±\° 9°f³ $9012#"'53254+#"'#"&546;546322632'654&#"#54&#"&5476"354'&5#32%26545'5#"Ph+)R"as+Äw%`FRfK8n]QnÜ%<SP\y X=2%C+0:\'w/.e3Cí! Aíxuþ| /'{0WSJM1/ FjWíMM^KHYRnoQþ©'DnLŠ93)l4C0ææ.H4j'29ˆL87èJ52&$ë®/!SY,;Yþ„º.'PZan{d²++°/3´H+°@2²H+ +³@HD +°6/°O3´e+´=kD+ +´=+°/±33´`++± o22°w/±\33´7+±U22°Q/´#7+°|/°Ö´y+°y±u+±r22´^&+°T2°( Ö´L+°^±D+´C+°C±[+°V2´1+°&2°°b Ö´:+°:/´b+°±+°g2´1+´3+±}+±(y±o99±Lu°9±D^·#+HNOQ`$9°C°-9±b³ /@$9°³ 6>$9±e6°N9°k³(3L:$9±+H°-9±`° 9°w³ $9012#"'53254+#"'#"&546;546324632632#"'&546;&#"#54&#"&"354'&5#323254'&#"26545'5#"Ph+)R"as+Äw%`FRfK8n]QnþlbML!'XW?=NB<G: !;a=- 1SuÌ3Cí! Aíxub N /þ /'{0WSJM1/ FjWíMM^KHYRnoQýîOl:::9VJg.&5?T!Oäç ,%'0k#56.J52&$ë®þÅ/f /!SY,;YýöÔ.'akr~‹–²3+°73´(+°Z2²(3 +³@(^ +°@/´E+°Q/°.3´v+°/±33´q++± 22°‡/±m33´7+±f22°b/´#7+°Œ/°Ö´‰+°‰±0+´++°+±…+±‚22´o&+±-e22°o±^+´]+°]±l+°g2´1+°&2°T Ö´s+°±x+´N+°N±I+´=+°=° Ö´1+°/´1+±�+±0‰±99±o…±.99°^±(399°]´#5bq$9±sl²7ZB999°°C9°x@  @EQXv|$9°N±9L99±E@°B9°Q°C9°v°-9°(@ +09=ILNT|$9°3°59±q° 9°‡³ $9012#"'53254+#"'#"&546;54632"&54632632#"'7327654&'#"&54767&#"#54&"354'&5#323254'&#"26545'5#"Ph+)R"as+Äw%`FRfK8n]Qnþá0>Os`PJ!'O�$P')rX;2&,?))+! <<3?""5BZ=,63Cí! Aíxu/?%2þM /'{0WSJM1/ FjWíMM^KHYRnoQþlJ3k'46ŒNp22R 7:T_‰#434D/O !H\T8;/0Méé!,%J52&$ë®þ¾3\2&>/!SY,;Yþ�º.'.8?GT\²-+´U++°*/´F+°/±33´>++± H22°P/±:33´7+±322°//´#7+°]/°Ö´R+°R±N+±K22´<&+°22°<±*+´Y+°Y±9+°42´1+°&2°[ Ö´D+°±G+´)+°)±+´1+±^+±NR±H99°<°9±[Yµ-/>#F$9±D9°B9±)G± 99°°9±UF±DY99°-°B9±>° 9°P³ $9012#"'53254+#"'#"&546;54632!5432"354'&5#324'326545'5#""654Ph+)R"as+Äw%`FRfK8n]QnDþ“¹´þô3Cí! AíxuXNdšþ$ /'{0f+,WSJM1/ FjWíMM^KHYRnoQý㪧ÉèJ52&$ë®þël!']Wˆ/!SY,;‘M8kU[@YýÀº.'9CJR_gqr²1+´`++°(/´h+°m/´R+°/±33´I++± S22°[/±E33´7+±>22°:/´#7+°r/°Ö´]+°]±Y+±V22´G&+°=2°G±.+´d+°d±++´o+°o±D+°?2´1+°&2°f Ö´O+°±R+´4+°72°4´k+°k/° 3°4±+´1+±s+±Y]±S99°G°9±+d³#:I$9°o²-Q`999°f°19°D°m9°O²(Mh999°°l9±4k± 599°°9±mh±7+99°R³.45-$9°`±Od99°1°M9±I° 9°[³ $9012#"'53254+#"'#"&546;54632"&547#5432#"354'&5#324'326545'5#""654264&"Ph+)R"as+Äw%`FRfK8n]Qn<2K �¹´"J¿3Cí! AíxuXNdšþ$ /'{0f+,2,,<++WSJM1/ FjWíMM^KHYRnoQüiK20#§Éƪ$/3J(J52&$ë®þël!']Wˆ/!SY,;‘M8kU[@þ6*<-,* Yý¦º.'9CJR_go†²1+´`++°(/´p+°x/´n+°j/´Q+°/±33´I++± S22°[/±E33´7+±>22°:/´#7+°€/°Ö´]+°]±Y+±V22´G&+°=2°G±.+´d+°d±++´}+°}±D+°?2´1+±&u22°f Ö´O+°´h+°h/°±R+´4+°72°4´s+°s/° 3°4±+´1+±�+±Y]±S99°G°9±}+´#-:I$9°f´1`Qlz$9±ODµ(Mjnpx$9±4s± 599°°9±jnµ7+su{}$9°Q³.45-$9°`±Od99°1°M9±I° 9°[³ $9012#"'53254+#"'#"&546;54632"&547#5432#"354'&5#324'326545'5#""6544#"322654'#"&'Ph+)R"as+Äw%`FRfK8n]QnH9R%{¹´'%R¸3Cí! AíxuXNdšþ$ /'{0f+,Q,--,+%2 +!, 4WSJM1/ FjWíMM^KHYRnoQüOQ98(§Éƪ(89QBJ52&$ë®þël!']Wˆ/!SY,;‘M8kU[@þ�,,-V2%".+$3Yÿ#Y2<DM^в&+°"3´N++°E2°/´C+°Y/±I33´0C+±A22°>/´67+°_/° Ö´+°±*+´\+°\±W+²1QT222´K&+°@2°K±H+°B2´1+°;2°±+´1+±`+±\*°9°W±&N99°K°$9°H²"999±YN¶ $*-$9±6>°9012# '&54732>54&+#"'#"'&5<546;5476;&"35426=#'26=&5<=#"¡KmN‡­cþúއj:_syáR‘vDB1+iZc:([=*)jH799OW78•fBív:<í=Ú"2&3H/LvMY‹V,„}Ó¶…$p£µjp"BnG0Nh�QQ32? FcT:;8:UšQ65þŸnKKl4"! 8.'?YþPY2GOXbs%²1+°-3´c++°P2²+° /´Y++°/´ C+°n/±(T33´;C+±L22°I/´A7+°t/°Ö´+°±5+´q+°q±l+²54&+#"'#"'&5<546;5476;&"35426=#264&#"26=&5<=#"¡Kmx-<0.EB_ NOþúއj:_syáR‘vDB1+iZc:([=*)kG799OW78•fBív:<í==(88('99þ"2&3H/LvMŸ^S6A20aB$„}Ó¶…$p£µjp"BnG0Nh�QQ32? EdT:;8:UšQ65þŸnKKlþ]8P89N9¤4"! 8.'?Yþ,Y2=ENYivb².+°*3´j++°F2° /´Z++°b/´O+°/´C+°q/±%J33´4C+±B22°?/´97+°w/°Ö´+°±1+´t+°t±o+°52´L&+°A2°L±I+°C2´'1+°<2³g'I+´+°/´g+³W'I+´e+°e/´W+°'±R+´_+°_±"+°]2´1+´+±x+±t1°9°o±.j99°L°,9°´*>F$9°I°9±R'´ OTZb$9°_°9±O·QW]_eg$9°²RT999°.°9±qjµ",1$9±9?°9012#"&547#"$54732>54&+#"'#"&546;5463&"35426=#264&#"2654'#"&'265&=#"¡Km}/?kJIk=BõþÚj:_ûÒR‘vDD/+iZc:([+°>±W+±7R22´1+°&2´K+°±++´0+° Ö´1+±v+±Dh±^99±rd°9±nZ³Aµ#:GM\$9±+¶ (-.4$9±:k¶+07>DJp$9°G°-9±\° 9°f³ $9012#"'53254+#"'#"&546;546322654'7#"&=4#"#"&54632"354'&5#32%26545'5#"2654'Ph+)R"as+Äw%`FRfK8n]Qn=%0Z%r!%I>Np OH;:t(J52&$ë®/!SY,;þpC&`3T&9Yý¸º.'S]dq{…‡²N+°.3´A+°7/´r+°H/°w3´|+°(2°/±33´c++± e22°m/±_33´7+±X22°T/´#7+°†/°Ö´o+°o±k+±h22´a&+°W2°K Ö´ƒ+°a±+´E+°E±^+±>Y22´1+°&2´R+°°z Ö´:+°:/´z+°±++´0+°42° Ö´1+°0´u+°u/±‡+±Ko±e99±ƒk°9±a³HC|�$9°Eµ#ANTc$9±z² <999°+· (-.7rw$9°°29±Hr±:499°|±2<99°A¶+0>EKQ�$9°N°-9±c° 9°m³ $9012#"'53254+#"'#"&546;546322654'7#"&547&=4#"#"&54632"354'&5#32%26545'5#"264&#"%2654'Ph+)R"as+Äw%`FRfK8n]Qn=%0Z%r;?K32K)Mp OH;:t(J52&$ë®/!SY,;ýœ+<+*>*ÔC&`3T&9Yý™º.&R[bmu…�§²M+°-3´@+°6/´v+°~/´t+°G/´†+°'2°†´p7+°/±33´a++± c22°i/±]33´7+±W22°S/´"7+°�/°Ö´k+°k±g+°2´_&+°V2°J Ö´�+°_±‰+´D+°D±\+°X2´1+°%2³=\+°93´Q+´ƒ+°±n+´{+°12°{±*+´/+°32°/´y+°y/°*° Ö´1+±‘+±Jk±c99±�g°9±‰_³GB†‹$9°Dµ"@MSa$9±Qƒ°�9°±;€99°n@  ',-6rv~$9±ptµ93y{�ƒ$9±†G±1;99°@¶*/=DJP‹$9°M°,9±a°9°i³ $9012#"'53254+#"'#"&546;546322654'7#"&547&=4#"#"&54632"354&5#32%265'5#"4#"322654'#"&'%2654'PhWO"as+Äw%`FRfK8sXQn=%0Z%rFCR89R>Ap OH;:t(J54Hë®4$SY,;ýÿ++.U3$".,$3ôC&`3T&9Yÿò¸/3:DMSaR² +´/++°42²+°3´T++°R2² +´ +°]/±N33´C+±(E22³A]+°3±1é°92²A1 +³@A +°;/°H3´7+°#2°b/°Ö´_+°_±\+±W22´O&+°L2°O±N+°E2´1+°'2°±+´-1+²- +³@ +³-+´>+°-±0+°A2±:é°2°:±4+´ +° ´+°/±c+±\_±T99°O°9°N±#99±-°/9±0>°9±/T°9°1´-W_$9°]°Z9±A±599°;±>9901463263!5654+#"'#"&546;546323235.5#"54&54&"#32%2654&547#"s\>š¼'.ý@LqÄu'aGQfM6sXT56K58 Þaû;@7¡+Y>2þZBj !ííxuþ}!-'{0�?^¤}ýß*b_øQQcNK^Xs;EOYbhvº²#+°3´i++°g2²U+±?é°:2²+° 3´:++²+´+°/´P++°r/±c33´)C+±3Z22³L)r+°3±<é°D2²L< +³@L +°F/°]3´7+°.2°w/°&Ö´t+°t±q+±*l22´d&+°a2°d±c+°Z2´1+°22°±+´81+²8 +³@ +³8+´I+°8±;+°L2±Eé°2°E°X Ö´+°/´X+°E±?+´ +° 2° ´S+°S/° ´+°/±x+±qt±#i99°d°!9°c±.99±8°:9±;I°9±E°9±?X²PU999± ° 9±#P³ SW$9±?i°!9°<´&8lt$9°r°o9±)L±@99°F±I9901463263##"&547!5654+#"'#"&546;546323235.5#"54&264&#"54&"#32%2654&547#"s\>š¼'.!$`CB_$þ]LqÄu'aGQfM6sXT56K58 Þaû;@7¡+Y>2÷'98('9:ý‰Bj !ííxuþ}!-'{0�?^¤}ýß-:C``C:-*b_øQQcNK^Xs;2²#+°3´w++°u2²+´+°/´X++°`/´O+°/±q33´)C+±2h22³J)+°3±;é°B2²J; +³@J +°D/°l3´7+°.2°„/°&Ö´�+°�±~+°*2´r&+°o2°r±q+°h2´1+°12°±+´71+²7 +³@ +³7+´G+°7±:+±J22±Cé°2´e+³cC:+´V+°C±Q+´]+°]±>+´ +° 2° ´[+°[/° ´+°/±…+±~�±#w99°r°!9°q±.99±7°99±:G±D99°e°9±QV²X`999± ° 9±#O· QV[]ce$9°±ST99±9w°!9°;´&7z�$9°°|9±)J±?99°D±G9901463263##"&547!5654+#"'#"&546;546323235.5#"54&2654&"2654'#"&'54&#"#32%265&547#"s\>š¼'.++jJHm.þ{LqÄu'aGQfM6sXRmK58 Þaû�2¡+Y>/Æ0""0"326=!5654+#"'#"&546;546323235.5#"54&2654'&#"254&"#32%2654&547#"s\>š¼'.RHniE=3H,Ÿ#ýˆLqÄu'aGQfM6sXT56K58 Þaû;@7¡+Y>2�$?.JVwýàBj !ííxuþ}!-'{0�?^¤}ýü#zE<%!6!, A4:*b_øQQcNK^Xs;9°O°?9°b³FALG$9±†5°G9°ƒ±7299°_²DI]999±:Z±š½),ý>LpÄu'aFRfM6sXRmNj ÞÜB3{oXV"ªLK\r$U:0@EONGe,= '/?ù„1T0+Y>þ(D32Dííxu¹3223ýÄ .'{/Ñ eS=[Ÿwþýô)^]êMM_HGYUjnQZK3"þ¢3D¤Z{;;::jP‡<3,f4FMææNNææM=+B/Ö BtB.4!6A?4NO5F­þ«&+°|±1+°82±7é°2°t Ö´s+°7±i+´œ+°œ±2+´ +°c2° ´ +° /° ´ +° /±«+±Z]±Q99°L°9°Ž³&FO$9±¨K°ƒ9°²…‹¦999±ˆ¤³€‘$9±.±0“99±t>³;x•$9±s1°—9±œi±`p99°2´flnž¢$9±žf°¨9°¦µciŽœˆ $9°™±ƒ¢99±pl°—9°`°“9±0O°9°´.T]$9°[°W9±!A± 399°F±>9901%.54632673!5654+#"'#"&546;54632323!5#4&#"%54&#"#32%2654&5465#"2#"&54632&#"#74&#"#54#"632#"&546326326"3254'&4#"2S_ƒ^>š½),ý>LpÄu'aFRfM6sXRmNj Þ„1T0+Y>þ(D32Dííxuþ} .'{/XyLB6=I<K\A3#!,Df,> %0>A3>>oYQ&]Q(« +:Ký“24fÑ eS=[Ÿwþýô)^]êMM_HGYUjnQZK3"Ö BtB.4!6A?4NO5F­1!H  X,;RsVJdJ:BZMæã!0/"ãæM=+A03DZJ[z;:==™2!Ld!l32#"'732654&'#"&5467&#"#54&#"#54#"632#"&5463263254'#"4#"3S_ƒ^>š½),ý>LpÄu'aFRfM6sXRmK76 Þ„1T0+Y>þ(D32Dííxuþ} .'{/ßO E%�EUlW52$*E.<$0A2"!-Fd-> %0>A2>>nYS(T: !1ýü253Ñ eS=[Ÿwþýô)^]êMM_HGYUjnQ,+N3"Ö BtB.4!6A?4NO5F­1!I  X,;Q>%V qP_‡!5dD.M #�R58`,$èä!21"äèO>-A13E[K\|>>ò2X5%@uv:< Yþ�¹-28BKQ`gow²f+´p++°c/´n+°/´17+°32° Ö°3´P+°R2°´+°\/±L33´!7+±*C22³B!\+° 3´7+°72²B +³@B +°G/°<3´&+°2°x/°Ö´^+°^±[+±"U22´M&+°J2°M±L+°C2´1+°)2°±+´/<+²/ +³@ +³/+´?&+°/±c+´t+°t±2+°92±8é±n22°8±v+´l+°l±3+´ +³b 3+´o+°o/´b+° ´ +° /±y+±[^±R99°M°9°L±&99±/°19±c?±<99±82°p9°v°f9°l°j9±pn±lt99°f°j9±1P°9°´/U^$9°\°X9±!B± 499°G±?9901%.54632673!5654+#"'#"&546;54632323!5#4&#"%54&#"#32%2654&5465#"!54324'3'"654S_ƒ^>š½),ý>LpÄu'aFRfM6sXRmK76 Þ„1T0+Y>þ(D32Dííxuþ} .'{/²þ“¹´=Mdš�,,�Ñ eS=[Ÿwþýô)^]êMM_HGYUjnQ,+N3"Ö BtB.4!6A?4NO5F­1!I  X,;þèª§ÉÆl (]W÷M8kU[@ YýÀ¹-28BKQ`rz‚�²j+´{++°a/´ƒ+°‰/´z+°/´17+°32° Ö°3´P+°R2°´+°\/±L33´!7+±*C22³B!\+° 3´7+°72²B +³@B +°G/°<3´&+°2°Ž/°Ö´^+°^±[+±"U22´M&+°J2°M±L+°C2´1+°)2°±+´/<+²/ +³@ +³/+´?&+°/±g+´+°±2+°92±8é±y22°8°Œ Ö´d+°d/´Œ+°8±�+´w+°w±3+´ +³m 3+´z+°z/´m+°p2°m´†+°†/° ´ +° /±�+±[^±R99°M°9°L±&99±/°19±g?±<99±8d±f{99±�Œ°j9°w³auƒ‰$9±3†°n9±‰ƒ±pd99°z³gmnf$9°{±w99°j°u9±1P°9°´/U^$9°\°X9±!B± 499°G±?9901%.54632673!5654+#"'#"&546;54632323!5#4&#"%54&#"#32%2654&5465#""&547#5432#4'3'"6542654&#"S_ƒ^>š½),ý>LpÄu'aFRfM6sXRmK76 Þ„1T0+Y>þ(D32Dííxuþ} .'{/32K ‘¹´ IMdš�,,�2-,**Ñ eS=[Ÿwþýô)^]êMM_HGYUjnQ,+N3"Ö BtB.4!6A?4NO5F­1!I  X,;ýnL10#§Éƪ"13Jzl (]W÷M8kU[@þ6*,-<* Yý¤¹-28BKQ`ow…•J²i+´x++°b/´†+°Ž/´…+°‚/´w++°/´ 7+°32°$ Ö°(3´L+°R2°´+°\/± N33´.7+±G22³?.\+°3´ 7+°72²? +³@? +°C/°93´+°2°–/°+Ö´^+°^±[+±/U22´O&+°F2°O±N+°H2´"1+°2°"±+´ <+² +³@ +³ +´<&+° ±f+´|+°|± +°?2±8é²v“222°8´d+°d/°8±~+´t+°t±�+´‹+°‹±3+´+³l3+´w+°w/´l+°l°o Ö´‰+°‰/´o+°´+°/±—+±[^±(R99°O°&9°N±$99± ° 9±f<±999±8d±ex99°~²bi�999°t´r‚…†Ž$9±w�°a9±3‰°m9±Ž†±oc99±‚…µnd‰‹‘“$9°w³flme$9°x±t|99°i°r9± L°&9° ´ +U^$9°\°X9±.?±499°C±<990123235.54632673!5654+#"'#"&546;5465#"54&%"354&25#'2654&5465#""&47#5432#4'3'"6544#"32654'#"&' RmK76 Þ_ƒ^>š½),ý>LpÄu'aFRfM6s»„1¡+Y>0ýá2DíD1uí– .'{/irR'‡¹´'FMdš�,,�Z,--$4 +! + 4-nQ,+N3"t eS=[Ÿwþýô)^]êMM_HGYUjþ0Ö Bt�4!6A‡.O54NþbÁ­1!I  X,;ýRRr(§Éƪ(rDl (]W÷M8kU[@þoXXV3$!.*$3 Yýí¹-28BKQ`t|„Žò²i+´++°o/´ˆ+°�/´a+°f/´{+°/´ 7+°32°$ Ö°(3´L+°R2°´+°\/± N33´.7+±G22³?.\+°3´ 7+°72²? +³@? +°C/°93´+°2°�/°+Ö´^+°^±[+±/U22´O&+°F2°O±N+°H2´"1+°2°"±+´ <+² +³@ +³ +´<&+° ±f+´ƒ+°ƒ± +°?2±8é°2°r Ö´…+°8±}+´y+°y±e+°u2´l+³3le+´+°l±+´+±�+±[^±(R99°O°&9°N±$99± ° 9±f<±999±}8¶aio{ˆ�$9°y±wŠ99°e°c9±�ˆ°r9°a°c9±{±yƒ99°i°w9± L°&9° ´ +U^$9°\°X9±.?±499°C±<990123235.54632673!5654+#"'#"&546;5465#"54&%"354&25#'2654&5465#"267!5432#"&54674'3'4#"63254&#" RmK76 Þ_ƒ^>š½),ý>LpÄu'aFRfM6s»„1¡+Y>0ýá2DíD1uí– .'{/ã\#þй±fU3QCÀMdšt)+,€U/#4*":-nQ,+N3"t eS=[Ÿwþýô)^]êMM_HGYUjþ0Ö Bt�4!6A‡.O54NþbÁ­1!I  X,;þ$)2£ÊÈ¥NX'%Âm )`U·BN9lWíYþƒº.&/6BmT°R/´I+°_/°X3´j+°C2²_j +³@_\ +°/±33´5++± 722°>/±133´7+±+22°'/´"7+°n/°gÖ´b+³@bg+´+°/´@+°b±\+´[+³3[\+´<&+°³ $9012#"'53254+#"'#"&546;54632'"354&5#32%26='5#"23254'7#"&=4#"#54#"&546326PhWO"as+Äw%`FRfK8sXQnÈ3CíCCíxuþ| /'{0DJ\R]`%zžIQWGHT.5V&q[J[WSJP] FjWíMM^KGZUkoQ‘J54Hë®/!SY,;ORFBa„b*0;‚Á^N9VOååOI4f*3=†Nm::Yý½º.&/6Bv§°W/´w+°|/°n3´I++°h/°a3´s+°C2²hs +³@he +°/±33´5++± 722°>/±133´7+±+22°'/´"7+°€/°pÖ´k+³@kp+´+°/´@+°k±e+´d+³3de+´<&+°³ $9012#"'53254+#"'#"&546;54632'"354&5#32%26='5#"23254'7#"&547&=4#"#54#"&546326264&"PhWO"as+Äw%`FRfK8sXQnÈ3CíCCíxuþ| /'{0DJ\R]`%z=;J32K#_WGHT.5V&q[J[`,,<++WSJP] FjWíMM^KGZUkoQ‘J54Hë®/!SY,;ORFBa„b*0;‚r1'E3JK23%#9VOååOI4f*3=†Nm::ýñ*<,,<*Yý�º.&XahtzŠȰ;/´{+°ƒ/´z+°w/´-7+°K/°D3´V+°'2²KV +³@KH +°/±33´g++± i22°p/±c33´7+±]22°Y/´"7+°‹/°SÖ´N+³rNS+´+°/´r+°N±H+´G+³eGH+´n&+°n/°3´e&+°\2°G±A+´++°b Ö°^3´1+±%ˆ22°´=+°=/°+±/+° 2´4+°82³€4/+´u+°u/´€+°/´1+°4´~+°~/±Œ+±nNµKPQVi$9°H°9±Ge±'X99°A´("Yg$9±+°?9°u@  -12;x{ƒ†$9°€±6:99±wzµ=8~€†ˆ$9°-³6?PQ$9°Kµ*/4ANS$9°V±1X99°°29°g°9°p³ $9012#"'53254+#"'#"&546;5463223254'7"&547&=4#"#54#"&54632"354&5#32%26='5#"4"22654'#"&'PhWO"as+Äw%`FRfK8sXQnþý–[R]`%zDGRpS3YWGHT.5V&q[J[V3CíCCíxuþ| /'{0{XX*%2 +!+ 4WSJP] FjWíMM^KGZUkoQþªRFBa„b*0;‚x0)Q8RR8C)&{9VOååOI4f*3=†Nm:!J54Hë®/!SY,;þ++-U2$".+$2Yýêº.&/6B|„ ²y+°C3´n+°g2°U/´ƒ+°/´Z+°`/°j3´K+°/±33´5++± 722°>/±133´7+±+22°'/´"7+°…/°vÖ´q+³@qv+´+°/´@+°q±k+´j+³3jk+´<&+°³ $9012#"'53254+#"'#"&546;54632'"354&5#32%26='5#"23254'7#"&543267#"&=4&#"#54#"&5463264#"32PhWO"as+Äw%`FRfK8sXQnÈ3CíCCíxuþ| /'{0FKYR]`%}—ˆ6Num/IQ%2GHV-4V&qZKO($þW.R3WSJP] FjWíMM^KGZUkoQ‘J54Hë®/!SY,;PQH3j�c,0>˜’´+(D5!' ]M!;3QææQJ3g,4;ŠPm++þ0 Yþ†º.&/6BWm'²X+°C3´c+°M2°/±33´5++± 722°>/±133´7+±+22°'/´"7+°n/°kÖ´f+³@fk+´+°/´@+°f±<+°2´3&+°*2°3±`+´[+°[±U+´P+°P±0+°,2´1+°%2°±K+´F+° Ö´1+±o+±³ $9012#"'53254+#"'#"&546;54632'"354&5#32%26='5#"2'654&"&546!2'654&#"&546PhWO"as+Äw%`FRfK8sXQnÈ3CíCCíxuþ| /'{0SmƒcNpKcƒqþ¾Sl„aM98Ic�qWSJP] FjWíMM^KGZUkoQ‘J54Hë®/!SY,;PpTƒ33$]9PP9`!35�RrpT‚43"_:OO:`!34‚RrYý¶º.&/6Bbx‚~²c+°C3´n+°X2°M/´y+°/±33´5++± 722°>/±133´7+±+22°'/´"7+°ƒ/°vÖ´q+³@qv+´+°/´@+°q±<+°2´3&+°*2°3±k+´f+°f±`+´[+°[±0+°,2´1+°%2°°� Ö´P+°P/´�+°±V+´F+°J2° Ö´1+°F´|+°|/±„+±³ $9012#"'53254+#"'#"&546;54632'"354&5#32%26='5#"2#"&5467'654&"&546!2'654&#"&546264&#"PhWO"as+Äw%`FRfK8sXQnÈ3CíCCíxuþ| /'{0SmIIK32K9(cNpKcƒqþ¾Sl„aM98Ic�q(,,**WSJP] FjWíMM^KGZUkoQ‘J54Hë®/!SY,;PpT_7"Q3JK2-C $]9PP9`!35�RrpT‚43"_:OO:`!34‚Rrýê+<,,<+Yýœ¼.&/6Bcy�‘œ²d+°_3´o+°T2°I/´‚+°Š/´€+°/±33´5++± 722°>/±133´7+±+22°'/´"7+°’/°wÖ´r+³@rw+´+°/´@+°r±<+°2´3&+°*2°3±l+´g+°g±\+´W+°W±0+°,2´1+°%2°°� Ö´L+°L/´�+°±R+´b+°z Ö´‡+°R° Ö´1+°F2°´…+°…/±“+±³ $9012#"'53254+#"'#"&546;54632'"354&5#32%26='5#"#"&5467'654&"&546322'654&#"&5464#"322654'#"&'PhWO"as+Äw%`FRfK8sXQnÈ3CíCCíxuþ| /'{0‹*7R9:R9)cNpKcƒqRSmý¬Sl„aM98Ic�qa+..+*$4+ - 6WSJP] FjWíMM^KGZUkoQ‘J54Hë®/!SY,;þZ G09QQ90G $]9PP9`!35�RrpTZpT‚43"_:OO:`!34‚RrþR++.V4$!0-#5WþýŽ-,6@²0+±*33´'++²+´?++²'0 +³@') +°/´5++´:) +´7+°/´!7+°A/°Ö±<é´&+°<±8+´+°± +±$é° Ö´2+²2 +³@ +°$±'+´*1+°2°*´-+°-/±B+±8<±99°±!99±2 ±&99°$°9°'´/045$9±*-°+9±5³-2$9±'?° 9°:¶ $7<$9°°901"&547#5654&#"632#"&5463233#4&"26$4&"32Ž_†_dYt`[‹UGWWF]c«‰�¥>ËPC7P89N8þ!3P23')`C``C6*:9‡f‡�YGcJIa„i�¾²„v>Ýýà*6(88('99ùV;=+)<WþÔŽ--8HRQ²+´I++²4+´C+²+²+°/´9++°A/´.+°N/´+7+°$/´ 7+°S/°Ö±Pé´'&+°P±L+´+°±!+± é³F !+´+°/´F+²F +³@ +³6 !+´D+°D/´6+° ±1+´>+°>±+´1+°2°´<+°DF$9±I°9°N¶ !)KP$9°+°'9± $±9901%#"&5463233##"&547#5654&#"6322654&"2654'#"&'264&"´WF]c«‰�¥>ËP-,jKIk.NYt`[‹UGW#""0"!/D:)(: Dþf)23P23�Ia„i�¾²„v>Ýýà4CJklIC4:9‡f‡€YGcþ " "pC/!*=8(.D326=!5654&#"6322654'&'&#"%264&"´WFc3*RW‹„¢>ËPMEg\B75J'LjþÀYt`gE:UGW×!;#- 9#þÀ)23P23�IaK@b�^b´‚v>ÝýÜzD=)"0-+"(G:9‡f‡K@NGcþ^ ñ)53]_yTD'pO=r|S^QIn|M]' %DH€KäQpGPAO32ƒcV4-‡Ff�Yÿ1F2Bê² +´++²+°/´++°,/´97+°/´7+°$/´@++°C/°0Ö´5&+°5° Ö´&+°/´ &+°5±;+´(<+°(±+°"2´<+°2² +³@ +±D+±; µ ,239$9±(²@999°²999± °9±9,±99±²(;999°$´'05<$9°@°3901#!"3!!"&5463!254+53254#"#"'&54732=47632F-"ObGþv&77&%ýÎEY\BŠcpEEp�=037Ye>7˜#l"'Cp37\^~�)B iCR%! %CGA=MTZGQ_KLAM34EA`ªF84|A/6ŠNH36SYÿ•21<²² +´,7+°/´;++°5/´7+°/±é°=/°#Ö´(1+°(± +´7<+°7±.+´<+°±+´&+±>+± (°%9°7² &,999°.±599°±;99°²2999±5;± 99±,µ#(/$9°°&9012#"'&5463267654&#"#"&54732=464&#"32šv…lyÂO54&#"#"&54732=46.#"327&#"#"#šv…w~ÇùT6\!LR#;LYWF1vamƒ¥(}(-N�rv4G uG5&B.´‡Ì�˜.989J<½gf�caP_tšuÒT=BœP=F²^Z€ýB'=.6"Yþ†Ž2)L²-+´9+°?/°33´J+°/° 3´'7+°/´++°M/°Ö´#1+°#±B+´G+°G±)+´&+°±L+´<+°<± +´+³1 +´6+°6/´1+±N+±B#± !99°G±'99°)°D9°²?EJ999±6<¶ -34 $9±J?°49°9µ*16+°K/´W+°/° 3´'7+°/´++°]/°Ö´#1+°#±O+´T+°; Ö´3+²3; +³@36 +°T±)+´&+°±Y+´H+°H±A+´-+°-± +´+±^+±O#³ !'$9±)3±>Q99°³1KRW$9±AH¶ *0? $9±15°;9±DWµ-AHOTZ$9°*°R9°°Q9°'° 9°µ #$9°°!9014632'654'&#"#"'&547673252+"3!!"&546;254&#"#"'&54732=46ÐqYzA9\H*„)-S{:9dqB=',R2‡(.M…ÙGSiZ«33gþ‘/=?-¨Ž2*"L9E''l#N0#BB_ZtWLvZˆ$0;§Q8?»MY=>-ý#CCX>K:?Sk J0"AM_ZtWLvZˆ$0;§Q8?»MY=/)*3%96+6X'5>Q?p2/$J%8L06DYýéŽ2)Yb)°5/´\+°a/´;+°K/´W+°E/´-+°Q2°/° 3´'7+°/´++°c/°Ö´#1+°#±O+´T+°T±)+´&+°8 Ö´Z+°±Y+´H+°H±C+´1+° Ö´+±d+±O#± !99°T±'99±)8°Q9°Z²KRW999±Y±;a99°H±5\99°C¶ -? ^$9±a\³8Z?^$9±EWµ*1CHOT$9°-°R9±'° 9°µ #$9°°!9014632'654'&#"#"'&547673254632#"&5463267654#"#"'&5473253254&#"ÐqYzA9\H*„)-S{:9dqB=',R2‡(.M…bN=S,*HO€8_L-&,4 .iDRAL-)v"S3,K6Q<:',_ZtWLvZˆ$0;§Q8?»MY=Gý² +´++² +±-é² +³@ +´:  +°C3´++°2°´+°?/°3´7+°42°H/°$Ö´)1+°)±1+´&+°±+´8+²8 +³@ +°8± +°;2±é°B2°±D+´1+°±+´ 1+±I+±1)²& '999±°49°8°:9° °9±D°9±°9±?:µ$)18$9°°'9012!!3!5#"'#5654&#"#"'&5473276546323546"!54&ÓlŒþ]3Pý)6,`LV9J& 5:]m@9¥2‡#*L_ }aZ=>€’nN\PY.}g�wÝýàº($\7H>5NP_>@XOrÔR2B§N@Lg$Œ_x66[G"Of~HbP99PbYþó«2JS]T²+° 3´++²,+°Y3±9é² +³@ +°/´T++´F, +°O3´++°2°´+°K/°#3´7+°@2°^/°0Ö´51+°5±=+´(&+°(± +´D+² D +³@  +°D±+°G2±é°N2°±P+´1+° Ö´\+°±+´ 1+° 2° ´W+°W/±_+±=5²2,3999± (°@9°D°F9°°9±±K99±\P°9±²TY999± W° 9±,T³ W[$9±°(9±KFµ '05=D$9°°39012!!3##"&547!5#"'#5654&#"#"'&5473276546323546"!54&264&#"ÓlŒþ]3P''/.FB_'þF6,`LV9J& 5:]m@9¥2‡#*L_ }aZ=>€’nN\PYç(88('99.}g�wÝýà-=B10aB=-º($\7H>5NP_>@XOrÔR2B§N@Lg$Œ_x66[G"Of~HbP99PbýP8P89N9YþÔ«2@ISc‘²+° 3´++²%+±0é² +³@ +°/´T++°\/´K+´<% +°E3´++°2°´+°A/°3´7+°72°d/°(Ö´-1+°-±4+´"&+°"±+´:+²: +³@ +°:±+°=2±é°D2°±F+´1+³aF+´+°/´a+³RF+´_+°_/´R+°±M+´Y+°Y±+´ 1+° 2° ´W+°W/±e+±4-²*%+999±"°79°:°<9±±A99°F°9±M´JPT\$9± W° 9±%K· MRWY_a$9°±OP99±°"9±A<µ!(-4:$9°°+9012!!3##"&547!5#5654&#"#"&5473276546323546"!54&2654&"2654'#"&'ÓlŒþ]3P++jKIk.þdöLV9FJp\i}¥2‡SF_ }a[z€’nN\PY¼0""0";/E9*(: B.}g�yßýà2EJklIC4º($\6InSPa|£vÔR2B§V„g$Œ_xoXG"Of~HbP99Pbý¡" ’C/*=8(.DYÿ«2R[kF²+° 3´++²4+±Aé² +³@ +°/´\++°e/´++´$N4 +°W3´$++°2°$´&+°S/°+3´7+°H2°l/°8Ö´=1+°=±E+´0&+°0±(+´L+²(L +³@(% +°L±+°O2±é°V2°±+±hé°h±X+´1+°±+°2´ 1+±m+±E=²:4;999±(0°H9°L°N9°°"9±h±S99°X±e99°±\99°±_99±e\±99±&$°09±SNµ(/8=EL$9°°;9012!!3##"'&54>326=!5#"'#5654&#"#"'&5473276546323546"!54&2654'&'&#"ÓlŒþ]3PQIobF:6K*G~ ýt6,`LV9J& 5:]m@9¥2‡#*L_ }aZ=>€’nN\PYu#?"4 9 '.}g�yßýàzD=(!2!.*'2=º($\7H>5NP_>@XOrÔR2B§N@Lg$Œ_x66[G"Of~HbP99Pbý_Yÿó‹22®²+°3´C+°%2°/´7+°/´+7+°3/°Ö´"1+°"±'+´&+°± +°2´1+°.2² +³@  +±4+±'"² 999± ³+1$9±°9°²999°´"'1$9°±(.99°+° 901%#"'532654+53254#"#"&547325'4632‹mM;:.B.@v##vœ~y^mƒ¥)~ZI…|a^€0#S“HXI1*YHO_ÆP_| wÒT8?¤V…º^axTO)@ Yþï‹2;Eõ²?+°#3±é°.2² +±é°/´D++°/´7+°/´47+°F/°&Ö´+1+°+±0+´ &+° ± +´A+°A±+±<22´1+°72² +³@ +°´+±G+±0+²(#)999±A ² 999°´4:$9°°9±?D± 99± °9±² 999°´&+0:$9°±1799°4°)901%#"&547&'532654+53254#"#"&547325'46324&"26‹L=_CB_( 3I.@v##vœ~y^mƒ¥)~ZI…|a^€0#SQ8P89N9“U.0OB``B>.I1*YGP_ÆP_| wÒT8?¤V…º^axTO)@ þ•(99('99YþÊ‹2;GV-²#+°?3´.7+°2² +°/´T++°M/´E+°/´7+°/´47+°W/°&Ö´+1+°+±0+´ &+³ 0+´Q+° ±O+´B+°B±<+´J+°J±+±H22´1+°72² +³@ +°´+±X+±0+²(#)999±Q ²  999±BO°9°<µ4LMT$9°J°9°±:99±#Eµ HJOQ$9°.± 99°² 999°´&+0:$9°±1799°4°)901%"&547&'532654+53254#"#"&547325'46324&#"3264'"&'326‹QEk”j5 ::.@v##vœ~y^mƒ¥)~ZI…|a^€0#S‰#"!";:R9 C./D“Y-6XJkkJL4Q 1*YGP_ÆP_| wÒT8?¤V…º^axTO)@ þ¼"!"#!*=8(.DDYÿ§2@JÞ²*+´I7+²+±é°"/´D7+°5/±6é°>/´C+° 2°K/°Ö´ 1+° ±+´<+³A+´&&+°&/´A&+°±0+±é°2°±:é°:/±L+±& ³  $9±:·"*.5DFI$9±0°9±ID±&.99±±099±65²999°>´ @$9°° 901%#"'&547325'4632#"'&547632654'&+532654'&#"3254&#"#ycqB;¥)~(-N…€c^DLMSRS‚HAP?-=B8C 7833/9..8“.\0UR-bÐcxUNtÔR;E›R>G¬h]~19X{)3‰€EE#B9,.Q7*(VF25$$Æþ_"Yÿéã3V&² +°*3´7+°72²+´N++² +³@R +´JR +´J+´R +´++°#/´=7+°W/°.Ö´31+°3±9+´&&+°&±+´L<+°L±+°!2±Fé°A2²F +³@ +°F±P+±Sé°S±+´&+±X+±93²0*1999±L²#=999°±I99°F²CN999±SP°9°² 999±J²L999±²&9F999°¶%.3:C$9°#°A9°=±19901%2654'7#"'#"546372654+532654#"#"'&547325'4632#'"3253ÞRg‰,©CGrp0H®Ð,C"R//"0Œ—9;cqB=¥)~(-N……m6`BJ,<)>#vÒX :wX²?9UÑsRVT]i-8B/"NÕA\>AUOsÔR9E�R>G¶Pj}B-_6"(HŸXþ¨2-3Yþñã3_i`²+´W++²3+°e3±@é°2² +²+°/´a++°S/´+°%/´&++°,/´F7+°j/°7Ö´<1+°<±B+´/&+°/±+´U<+°U±"+°*2±Oé°J2²"O +³@"& +°O±Y+±\é°\±+´h+°h±+´&+°c Ö´ +±k+±B<²93:999±U²,F999°"±R99°O²LW999±\Y°9±h°9°c´ $9±a³ ch$9±W3° 9±S@²U999±%²/BO999°&¶.7#vÒX WN98P8:wX²?9UјQ/aB10aB:+;]i-8B/"NÕA\>AUOsÔR9E�R>G¶Pj}B-_6"(HŸXþ¨2-3þú9'(99('YþÍã3Xds˜²+´Q++²0+°_3±;é°2² +²+°/´f++°m/´Y+°M/´+°#/´$++°*/´A7+°t/°3Ö´81+°8±=+´-1+°-±+´O<+°O± +°(2±Ié°D2² I +³@ $ +°I±S+±Vé³VS+´r+°V±p+´b+°b±\+´j+°j±+´&+°h Ö´ +±u+±=8²506999±O²*A999° ±L99°I²FQ999±S°9±rV°9±bp°9°\µefm$9°j° 9±Y· \bhjpr$9±Q0° 9±M;²O999±#²-=I999°$¶,38>F$9°*°D9°A³6TU$901%2654'7#"&547&'#"546;254+532654#"#"&54732=4632+"32532654&#"2654'#"&'ÞRg‰,©o]hLJk3:H®Ð+C7R''#/Œ—x_mƒ¥)~YJ„†lV‚J,=(>#vÒX>i!#!"^D8+)8 :wX²?9UÑœQ4jLikJH50]i-08B.#NÕA`{¡vÔR9E�W€¶Pj}JC_5"*FŸXþ¨5]º!" "pC/ ,;7).Yÿã3bly²3+±>é°U2²+°3´U++´]7+²] +³@]Y +°/´f++°k/´7+´Q3Y +´Q+´&%3Y +´&+°,/´E7+°m/°6Ö´;1+°;±A+´01+°0±+´S<+°S±"+°*2±Mé°H2²"M +³@"& +°M°c Ö´ 1+° /´c1+°M±W+±Zé°Z±`+´&+±n+±A;²839999±S²,E999°"²PU999° ±J99±Wc±k99°Z²f999°`µbh$9±kf± 99±>°9±Q]²S999±%³06AM$9°&´/;J`$9°,±BH99°E±9b9901#".5463267#"'#"546;2654+532654#"#"&547326=4632+"325332654'3254&#":K^^À‚5bFhDG�C=G@p0B´Ð,MU$'"0ŒIN{\mƒ¥)~YJD@‹gT„J+=(>#]ëXA7Gd‰þ©\'j^-b3'•a�ï•<)138-0€.SUd/4@,!LbPd]~ wÒT9E�V�RWkaxKA[2!)@–Nþ²>PzO®;ýƒ $Yÿ"„3ka²+°<3´7+°I2²!+´d++² +³@h +² +²+° /´7+´`(!h +´`+´/.!h +´/++°5/´P7+°l/°Ö´&+°±@+´E<+°E±K+´9&+°9±#+´b<+°b±*+°32±Yé°T2²*Y +³@*/ +°Y±f+±ié°i±+´&+±m+±@°9°E°9°K²BLK,:&##\ìW>:~Q²>:TØþô|]^~Œ�4znïnPŒT]i,') B.#NcKh_|UPrÔR9E�S=G©]cBB%I_6")GŸXþ¨?SYþ¡„3u€ ²(+°F3´7+°S2²,+´n++²( +³@r +²+°/´v++°/´$7+´j3,r +´j+´:9,r +´:++°@/´Z7+°�/°Ö´ &+° ±J+´O<+°O±U+´C&+°C±.+´l<+°l±5+°>2±cé°^2²5c +³@5: +°c±p+±sé°s±+´~+°~±+°x2´&+´ +±‚+±J °9°O°9°U²LFM999±l.³$@Z$9°5²3fn999°c±,`99±sp°*9±~¶ (&$9±v°x9°$³ ~$9°,² y{999±j²*.l999°3±0D99°9²CUc999°:· BJO`$9°@±V^99°Z²M99901%2654'7#"&547! '$47! 7#"'#"546767654'򂂮#"#"'&54732=47632#"#"'"3253264&#"ŠJeŽ0©2A_DB_ÄþöþÁÆþõx8eû·Œ¶q0G¯Ï,//3C7#.Œ“v_qB?¨'}'-O…HDeM>LK,:&##\ìW>ƒ)77)(89:~Q²>:TرvT9D`bBG^~Œ�4znïnPŒT]i,') B.#NŸw_|UPrÔR9E�S=G©kd=8%I_6")GŸXþ¨?Sþ«7R67('9Yþu„3v�’Ó²)+°G3´7+°T2²-+´o++²) +³@s +²+°/´‚++°/´%7+³w%+´‹+´k4-s +´k+´;:-s +´;++°A/´[7+°“/°Ö´!&+°!±K+´P<+°P±V+´D&+°D±/+´m<+°m±6+°?2±dé°_2²6d +³@6; +°d±q+±té³tq+´�+°t±Ž+´+°±z+´ˆ+°ˆ±+´&+°… Ö´ +±”+±K!°9°P°9°V²MGN999±m/³%A[$9°6²4go999°d±-a99±q°+9°t°9±z@  )'‚‹$9±%w@  z…‡Ž�$9°-² |}999±k²+/m999°4±1E99°:²DVd999°;·!CKPa$9°A±W_99°[²N99901%2654'7#"'&547# '$47! 7#"'#"546767654'򂂮#"#"'&54732=47632#"#"'"32532654&"2654'#"&'ŠJeŽ0©Œ6FiKL45µõþÁÆþõx8eû·Œ¶q0G¯Ï,//3C7#.Œ“v_qB?¨'}'-O…HDeM>LK,:&##\ìW>l""0"!0B9*(: D:~Q²>:TØ»w]>Ki45K;^~Œ�4znïnPŒT]i,') B.#NŸw_|UPrÔR9E�S=G©kd=8%I_6")GŸXþ¨?Sþí"! "pB0 +:8(.DYÿòç2/ž²(+²+°3±é°,/°#3±é°2°0/°Ö´ 1+° ±+´1+°±(+´'&+°'± +´1+±1+± ² 999±(°9°'°9° ²999±(°9°,¶  $9°° 901%#"&54732=4632632'654&#"#4&#" x_l„¥2‡YJ„}Wo63kq�¬)…cT0@ON6=@Ð`}£vÐV2D¥Wƒ¹^Y�UU wÒS97¹YrM3þšf5ItPYÿó?24AÀ²+²$+° 3±/é°52°Cx_l„¥2‡YJ„}ABB9O<.1#S­ƒm�oXg‚H…þ¡_6OuOP`}£vÔR2B§Wƒ¹^X‚þ`L6'V:9OYÿÀ2DP²=+²+°03±é°H2²(+°!/´&++°N/´6++°A/°83´C+°2°Q/°Ö´ 1+° ±+´1+°±=+´<1+°<±3+´E+°E±J+´-+°-±)+´+±R+± ² 999±=°9°<°9±E3°9°Jµ!&0#86$9°-±+99±&!°#9°°$9±N@  )+-3DEJ$9±A6±99°° 901%#"&547326=4632632#"'732654'#"&5463&#"#4&#"3254'&#" x_l„¥2‡YJE?vUz*'� Fpƒ§†SD9@g}„^\V[t_h=LQI5==Î72r'GUÐ`}£vÐV2D¥WƒY`^X�[Y‚ ¦€‘Ì.@,£t½'<:k‚m]c‡ü]+=. �þÿ$3jN]s65@d_~WOsÒT2D¥P@J³dj<4ÈNž9À¥+ Yþÿ22=J²+±D33´6++²+±,é° /´>++°/±é°K/°#Ö´(1+°(±.+´1+°±+±3é³H3+´ +° /´H+² H +³@  +°3±7+´1+°° Ö´A+°A/´+±L+±.(²%&999± ±699°±99±3H°<9°7² >E999±A°9±>³ AH$9±,°9±6¶#(./3$9°±&<99012##"&547#567654#"#"'&54732=476354'&'2654&'#錜^EB_¶/\Ac='&y^qB=¥2‡(/L„ZOè]?ü]+=)8. $ /9. �þÿ*4D_aB3+$3jN]s65@d_~WOsÒT2D¥P@J³dj<4ÈO›;À¥+ ýu7)#55#'9YþÓ21<GX+²+°C3±+é°62²+²+° /´H++°Q/´=+°/±é°Y/°"Ö´'1+°'±-+´1+°± +´V+² V +³@  +°V±+±2é³F2+´T+°T/´F+°;2°2±@+´N+°N±6+´1+°2°´K+°K/±Z+±-'²$%999±V ³5$9±F° 9°2³=CHQ$9±N@° 9±K°9±=· @EKMTV$9°+°9°¶"'.25$9°±%;99012#"&547#567654#"#"'&54732=476354'&'2654&#"2654'#"&'錜--i–j/–/\Ac='&y^qB=¥2‡(/L„ZOè]?ü]+=!#""0C9*)8 B. �þÿ3FKijJE4$3jN]s65@d_~WOsÒT2D¥P@J³dj<4ÈO›;À¥+ ý¹!"!0"pB/*:7)/BWÿ#;27–²,+´C+°/´7+°%/±é°8/°Ö´+°±/+´4<+°4±+´)&+°)±!+´ &+±9+±/±99±4´,12$9±!)°9±%· !)/4$9°±29901%26=47632#"'&547327654'&#"#"&547ãDL@A_w>3w‡ëÏ”˜g:]…}°¶vu$-TCDzao€©-„#)@hN^_=>eU€º�–†ŒÌ¬…*x•«vpnn´ZAOpTP`y¢{ÉU5B£P>JWþi;2BLâ²7+´C+°/´C++°/´(7+°0/±é°M/°Ö´$+°$±:+´?<+°?±+´4&+°4±+´J+°J±,+°E2´ &+´+±N+±:$±!"99±?´(7<=$9±J°9°,³0$9±C³EJ$9°(±F99°7²GH999±0· $,4:?$9°±"=9901%26=47632#"&547#"'&547327654'&#"#"&547264&"ãDL@A_w>3‡4G^DB_KTÏ”˜g:]…}°¶vu$-TCDzao€©-„#)÷(88P89@hN^_=>eU€Ä† W:D_aB†ŒÌ¬…*x•«vpnn´ZAOpTP`y¢{ÉU5B£P>Jþl8P88('9Wþ@;2AL]²6+´C+°/´M++°V/´B+°/´'7+°//±é°^/°Ö´#+°#±9+´><+°>±+´3&+°3± +´[+°[±Y+´K+°K±E+´S+°S±++°P2´ &+´+±_+±9#± !99±>´'6;<$9±[3°9±KY°9°E´/MV$9°S°9±B´KP[$9°'µEHJRY$9°6°9±/· #+39>$9°±!<9901%26=47632"&547#"'&547327654'&#"#"&5472654&#"2654'#"&'ãDL@A_w>3Ž8Hk”j :CÏ”˜g:]…}°¶vu$-TCDzao€©-„#)á"#!!0C9*(: C@hN^_=>eU€Ë‡]@JjjJ †ŒÌ¬…*x•«vpnn´ZAOpTP`y¢{ÉU5B£P>Jþ³"" 2!pB/ *:8(.CYþ„Ž2"FP²A+°)3´4+°;/°.3´G+°#2°/°3´7+° /´++°Q/°Ö´1+°±>+´N+°N±+°J2´1+´8+°±1+´E+°E± +´+°& Ö´++±R+±>°9°N²999°³6;GL$9°8±4A99±&E¶ ().$9±4G¶&+18>DL$9°A°(9±°9° µ  $9°°9012'654&#"#"&54732=462654'7#"&=4#"#"&54632!2654'št€\H*„\M{w`l„¥2‡[H„qœ$2[%sMC>Np NH;CY^$9°@±*ÔC&a3T'8Yý›Ž2"NTcm²I+°)3´<+°2/´V+°]/´T+°C/´d+°#2°d´Q++°/°3´7+° /´++°n/°Ö´1+°±F+´k+°k±+°g2´1+´@+°±9+´M+°b2°M´5+°5/°M±`+°72´R+°R±O+´Z+°Z± +°X2´+°& Ö´++° ´/+±o+±F°9°k²999°³>Cdi$9°@±iKJ65.þeõL+,:8-+I!m@AVW€€LFÚEGþ]3O,+þ+N]PXÒ!"0"!/D;)(: CwKj65JC4º($\9%&%$9R"<6zX99tVG"Oi?<9?l�yßýà2cO99Pbý¡" "pC/*;8(.DYÿB-=FT'²+´++² +³@ +°/´J+°Q/´++´!9 +°B3´!++°2°>/°(3´7+°42°U/°1Ö´,+°,±$+´7+²$7 +³@$! +°7±+°:2´&+°A2°±+±Gé°G±C+´<+°±+´ <+° ´&+°/±V+±$,³./45$9°7°99±G±>99°C°Q9°±J99°±N99±QJ³GN$9°°9±!°/9°9±".99°>³$,17$9012!!3#".5476326=!5#5654'&#"&547623546"!54&327654&#"gmŒþW9RdMm'SL1T46 °.ýqõL+,:8-+I!m@A¬€€‘pOaUX-b09h+5-|g�yßýÜ~F72: F3<º((X9%&%$9R"<6zW99tUH!Of}GcO99Pbý�  Yÿ?.?H[F²+´.++°7/´P+°L/°V3´<++°2²L< +³@LZ +° /°,3´"++°D2´ +°/°@3´7+°'2°\/°Ö´+°± +´ +² +³@ +° ±+°#2±.é°C2°.±9+´N&+°N±[+´Z+°Z±E+´,<+°,±/+°2´2&+±]+± ²999° °"9±N9°'9°[±<@99°Z²(P>999±,E²VW999°/±T99±LP±999°<°>9± .°9±" °9°³  $9°±0199012675!5#5654'&#"&547632354762!!3+"546326"!54&4&#"327674&"#@+E /ýzõL+,:8-+I!m@AVW€€LFÚEGþ]3Orc} ùS7[#‰N]PX5H¡L1,*4&C5$/<º($\9%&%$9R"<6zX99tVG"Oi?<9?l�yßýÙwF</889ÿcO99PbýŠ'=("\þ„>.(LU*²,+°03´E+°<2²E, +³@EA +°/´ +²  +³@ +°/°3´'+°Q2´+°M/°3´7+°!2°V/°Ö´+°±+´%+²% +³@ +°%±+°2± é°P2° ±)+´H+°H±A+´@+°R Ö´1+°@± +°92´1+´4+±W+±³!"$9°%°'9±AH´,JKM$9±@R°.9± ³067<$9± °9±'°9°M³%$9014632!!3!5#5654&"&5476234632632'654&#"#54&#"&"!54&h’miFHþ_1Pý*ôLVtUI!mA>¬A@~¤aMUQN//y X=2%C+0:\'w]O\PXPey8>hŒtÑýï´)[9HH6P":4xU:587UF!þBPkCD67MŠ93)l4C0ææ.H4j'29+^O88O^\þ„R.(NWc‘²,+°/3´G+°?2²G, +³@GC +°6/°M3´[+´¬A@~}bML!'°z"(F5?F< !;a=. /=Ru„O\PXÔ N 00Pey8>hŒtÑýï´)[9HH6P":4xU:587UF!þBOl::rWH27N;?T!Oäç ,J2l"56.^O88O^ý, .f4\ýöG.(_ht¿²5+°93´)+°X2²)5 +³@)\ +°B/´G+°P/°/3´l+°/´ +²  +³@ +°/°3´'+°d2´+°`/°3´7+°!2°u/°Ö´+°±+´%+²% +³@ +°%±+°2± é°c2³1 +´,+° ±\+´[+°[±e+°D2´1+³ie+´S+°S/´i+°±n+´N+°N± +´1+°°? Ö´J+°J/´?+±v+±³!"$9°%°'9±\ µ)./5`$9°[°79±eS±9X99±i³EPVl$9°n²BGr999°N±;L99±GB°D9°P°E9°l°.9°)@ ,1;?JLNSr$9°5°79± °9±'°9°`³%$9014632!!3!5#5654&"&547623"&547632632#"'732654'#"&5467&#"#54&"!54&3254'&#"h’miFHþ_1Pý*ôLVtUI!mA>¬A@~·0>Pr00OI!'O‚$O()sW<2&+@RL w4?B6AZ=,(O\PXg >%2Pey8>hŒtÑýï´)[9HH6P":4xU:587UF!þÀJ3l&46ŒP7722R 9:S^Š#4eFp !¤S9:`Méé"+%^O88O^ý%1\4$>Zÿ*Ò CK²'+´++²+±:33´/++°D2°/´!++´)?' +°H3´)+°2°)´*+°L/°Ö´+°±6+´1+°1±,+´=+²,= +³@,) +°=±'+°@2´1+°G2°±I+´1+°±%+°2´ &+±M+±°9°6°9±,1²34:999°=°?9±'±99°I²!999±)°49±?*°39°/µ,16=$9°² 999012!!3#"&# '&47!23276=!5#5654&"&5476323546"!54ül‹þX8O‚YÊÉþÏ¿íA<6ש­²QvýxõLVvUI nB>WV€€‘½šbUtc‡g»ýð|+l‡`s%bLûuYT ª'!W5FC5N!95sT62hTE JdsD[K77MZþ7× MU`l²1+´++²!+±D33´9++°N2°/´V++°/´+++´3I1! +°R3´3+°2°3´4+°a/°Ö´$+°$±@+´;+°;±6+´G+²6G +³@63 +°G±1+°J2´1+°Q2°±S+´1+° Ö´^+°±/+°2´ &+°2° ´Y+°Y/±b+±$°!9°@°"9±6;²=>D999°G°I9±1±(99°³+N$9±^S°9±/³V[\$9°Y° 9±V³Y^$9°+² [\999±3°>9±I4°=9°9µ$6;@G$9°!² "999012!!3#"&547#"&# '&47!23276=!5#5654&"&5476323546"!542654&"ül‹þX8OGL`CB_2IÉþÏ¿íA<6ש­²QvýxõLVvUI nB>WV€€‘½šbU’(87R7:tc‡g»ýð[01XC`aB.%l‡`s%bLûuYT ª'!W5FC5N!95sT62hTE JdsD[K77Mý8()77)&:ZþÒ NVbs¤²2+´++²"+±E33´:++°O2°/´c++°l/´W+°/´,++´4J2" +°S3´4+°2°4´5+°t/° Ö´%+°%±A+´<+°<±7+´H+²7H +³@74 +°H±2+°K2´1+°R2°±T+´1+³qT+´+°/´q+³`T+´o+°o/´`+°±Z+´i+° 2°i±0+°2´ &+°2° ´f+°f/±u+±% °"9°A°#9±7<²>?E999°H°J9±2±)99°³,O$9°T°9±Z´W]cl$9±W·Z`fhoq$9°,± ]99±4°?9±J5°>9°:µ% 7WV€€‘½šbU{""""1B9)(: Btc‡g»ýðc/6cKi54K;.l‡`s%bLûuYT ª'!W5FC5N!95sT62hTE JdsD[K77MýV"" "oA0!*:8(/BWþïê-HR]+²)+°3²:+°M3´S7+°2° /´I++°/´7+°°4 Ö´Y++°//°%3´AC+°E2°^/°=Ö±[é´2+°[±V+´7<+°7±*+´)1+°)±+´P+°P±+±"K22´&+°2² +³@ +°´ +±_+±V[±4:99°7±/A99±)*°C9±P²999°´ %E$9° °9±:I± 99±S)°9°µ7=V[$9°Y°29°°9±/4²"C99901#"&547.'532654+53254&#"'4'&#"632#"&547632632264&"2654&"ê."PI<_DB_% v-=oKIqT;GhP4.:]t^I[dLX]IP‡xHB‘TAK°(88P89ýú&61R45Š)@ iU.2MD^`B=.S3*YGP-0>8þ’m8!‚_F]ILd‹kŠZ`NN'-ýX8P99('9 <',<:+(>WþÊê-GSdoh²(+°3²N+°93±é°e2²+° /´T++°]/´H+°/´7+°°3 Ö´k++°./°$3´@C+°D2°p/°<Ö±mé´1+°m±h+´6<+°6±)+´(1+°(±+´b+°b±`+´Q+°Q±K+´Z+°Z±+±!W22´&+°2² +³@ +°´ +±q+±hm±3999°6±.@99±()°B9±b²999±Q`° 9°K´$DT]$9°Z° 9°±99±NHµ WY`b$9±(°9°µ68þ’m8!‚_F]ILd‹kŠZ`NN'-ý¤"! "pB0+:7)/C-<',<:+(>Yÿò¾.*3:GRß²$+± 33´H7+±922°N/±533´B7+± /22°;/°+3±é°2°S/°'Ö´Q+° Ö´>&+°Q±L+°C2´7&+°.2°7±4+°02´1+° 2°±+´&+±T+±>Q°)9°L³;$H$9°7²"F999°4± 99±±99±NH³"'$9°B°)9°;±>99°°901463263232#"'53254+#"'#"&547&%"354&5#32"6;547&265'5#"f`DQ#vSm6QfSQ#bs,cav'cIQJ=¢3BíDDíxuþŠ#476 K#-&6I˜@VFFuUWMUa J k`p‹QQbO['©O66Lô¶ª+!C &AþV5%[3.jYÿóÆ.3=DQ^² +± 33´R++±C22°/´+°Z/±?33´LC+±<22°E/°73´*7+°.2°_/°#Ö´\+°' Ö´H&+°\±X+±MU22´A&+°;2°A±>+°42´1+°22°±+°2´<+°2² +³@ +±`+±\'°%9±XH³*E R$9°A²,P999°>±.99±± 99°°9±R ° 9°² 999°³#U\$9°Z°9°L°%9°E²',H999012#"'5324+53254+#"'#"&547&54632632'4&#"35#32"6;547&26545'5#">5S''‹:#;@*61/*xÄv'cIQG:`CW&qU65QC37 ììwuþ‰$386 K3&1L4+A 3jCH>&!÷PP`PY)XAUFF:9W6P)+5]·²-#C $EþN6 X_-AZÿ1­2?HP]gV²+´(7+²&+°#/´ ++°=/°93´^7+°I2³.^=+°;3´/++°d/±4M33´XC+±D22°@/´ ++°2° ´Q+°h/°&Ö°2´&+°T2° Ö´f+°±Y+°a2´D&+°N2°D±L+°E2´61+°2²6L +³@6! +°6±++°22´<+°2²+ +³@+. +±i+±f&°9±Y¶(=QV^$9°D² ;\999°L± 999±+6±)99°°9± °%9±.=±+99±/^°9°d²f999°X±V99°@²T\999°Q° 9017467&5463263232#!"3!!"&463!254+53254+#"'#"&"354&26=#"6;547&265'5#"Z)7\>T(oMme„118+ýÌ(:bŠýiG\_D%-+3,.9ZiUt%hBP§.BâE+5;à’!1%"4 P"6(xì 8 M:KDA\In@ C,A%!CEH€N2'A")UjAAN@:,*:þ¹D7{O&-=þ² =@HYÿÀ.5>ER_j²+´D++²!+±Vé°/´i++°c/´7+°]/±@33´MC+±:22°F/°63±,é°02°k/°%Ö´S+°) Ö´I&+°S±[+± N22´B&+±9e22°B±?+±;`22´1+°42°±+´&+±l+±IS°'9°[²,FV999°B³.QY$9°?µ0ci$9°°9±ci± 99±]Dµ%SY$9°M°'9°F±)I99°,°.9012#"'&547632654&+#"'#"'&547&54632632'"354&5#32"6;547&3265/5#"4&#"32Xa�w§L>S@.?H>R£>8,Äv' B+J+(J1+°B2²\> +³@\X +°>´U&+°U/°>±4+´3&+°3±%+°,2´&+°2²% +³@%( +±s+±o±OP99°k±R99±`H± L99°\³E Jd$9°U±@<99°>± 899±34°9°%³ $9±X!·%BUjko$9±m(³@H`$9°Y±P99±LR¶,>J\^$9° ° 901%#"547632632632#"'53254+53254&#"'4&#"#"#"&547&#"6324+53254'3276264&"šPJ¦ofžŠ8-W†A4�T>G%MaMJ"Kfs9*‚S7E[OP;KKPgGhjs LvR` UBN^a "XWŒ%@&" þ$/+J.-£O_ô›YQJK+2O%%! nDLIN[HU.9<9þ�p5@5@Zb@TŽu�]6=pF_]IEK> <”E5A-?P54(*>Zþíw.]h{…­²<+²+±Nc33´|++±,x22²(+°"/´^++°1/´27+°l Ö´m++°1°� Ö±[é°U/±8A33´ 7+± 22°†/°Ö´ƒ<+°ƒ±+´+°±Q+´t+°t±p+´G1+°K2²pG +³@pl +°G´i&+°i/°G±=+´<&+°<±&+´f+°f±.+±5`22´&+°2². +³@.1 +°.´+±‡+±ƒ±XY99°±[99±tQ± U99°p³N Sx$9°i±IE99°G± A99±<=°9±f&²()*999°.³,"8$9°±99±^±&99±|<±)99°l¶*.Kƒ$9±�1³IQt$9°m±Y99±U[¶5GSpr$9° ° 901%#"547632632632#"'&547'53254+53254&#"'4&#"#"#"&547&#"632264&#"4+53254'3276264&"šPJ¦ofžŠ8-W†A4�T>G%MF9^EC/0'(^fs@1‚S7E[OP;KKPgGhjs LvR` UBN-(88()79þXa "XWŒ%@&" þ$/+J.-£O_ô›YQJK+2O%%! nP(1JD_02A>.[#N[HU.9<9þ�p5@5@Zb@TŽu�]6=pF_þF8P87)'9]IEK> <”E5A-?P54(*>ZþÊw.^j{Ž˜Û²=+²+±Oe33´�++±-‹22²(+°#/´k++°t/´_+°2/´37+° Ö´€++°2°” Ö±\é°V/±9B33´ 7+± 22°™/°Ö´–<+°–±’+´+°±R+´‡+°‡±ƒ+´H1+°L2²ƒH +³@ƒ +°H´|&+°|/°H±>+´=&+³&=>+´y+°=±w+´h+°h±b+´q+°q±/+±6n22´&+°2²/ +³@/2 +°/´+±š+±–±YZ99°’±\99±‡R± V99°ƒ³O T‹$9°|±JF99°H± B99±=>°9°y²*+(999±bhµ-#9kt$9±/±99±_µ&npwy$9±�=±*99°¶+/L’–$9±”2³JR‡$9°€±Z99±V\¶6HTƒ…$9° ° 901%#"547632632632#"&547&'53254+53254&#"'4&#"#"#"&547&#"6322654&#"2654'#"&'4+53254'3276264&"šPJ¦ofžŠ8-W†A4�T>G%MM=45KJk1(|fs9*‚S7E[OP;KKPgGhjs LvR` UBN#$"!0B9*)8 Dþsa "XWŒ%@&" þ$/+J.-£O_ô›YQJK+2O%%! nX$6RL45kJG4`(N[HU.9<9þ�p5@5@Zb@TŽu�]6=pF_þ“#" "pB0+:7).D€IEK> <”E5A-?P54(*>Zþùa '2ϲ+± -33´++°2² +³@ +°/´(++´ +±é°3/°$Ö´+°±+°2´&+´0+²0 +³@ +°±+´ 1+° 2° ´++°+/±4+±$°"9°²!999°0±99±²(-999± +° 9±(± 99±²"$99901233##"&547!5!2654&"&5476264&#"®Lm8âP&#_DB_"þG0KC^D N 9;Z)77)(78plKL*Ýýà,8E^`C7-CG/.?A.M35ýÌ7R78('9ZþÒa &1B²-+±é°2²+° 3´++² +³@ +°/´2++°;/´'+´- +±é°C/°#Ö´+°±+´&+°/2³@+´+°/´@+²@ +³@ +°´>+°>/°±*+´8+°8±+´ 1+° 2° ´5+°5/±D+±#°!9°² 999±@±99±>°9°*±2;99°8°9± 5° 9±-'µ 57>@$9±²!#99901233#"&547!5!2654&"&54762654&#"2654'#"&'®Lm8âP3/j–h/þ6G0KC^D N 9;F!"!"0C8+)9 DplKL*Ýýà5EKijJG3CG/.?A.M35þ" 2"pB0 +97(.DZÿ/a $¬² +°"3´ ++°2² +³@  +°/´$++´  +±é°%/°Ö´&+°±+´+² +³@ +³@ +°±!+°2´1+±&+±°9°²$999°± 99°!°#9±$°9± ²99901%33!57!5!2654&#"&5476325#d6ãPþçýöG.KC-.DP 9:NHn­=ÆÄ\%Ýý)¨CH.,@A-O55eþiŒŒZþ$a +/9ø²+°-3´++°2² +³@ +° /´0++°6/±,é°,´++°2´) +±)é°:/°%Ö´ &+° ±+°2´+´8+²8 +³@ +³@ +°±,+°2´1+° 2°´3+°3/±;+± %°#9°²")/999°8±99°°9°,´ .056$9±3°9±60± 99±,°9±²#%99901%33##"&547#57!5!2654&#"&5476325#2654&"d6ãP&%`CB_$ÃçýöG.KC-.DP 9:NHn­=Ư)78P89Ä\%Ýý,;CaaC:-)¨CH.,@A-O55eþiŒŒþô7)(77P8Zþa ,0;L=²+°.3´++°2² +³@ +° /´<++°E/´2+°/±733´0++´* +±*é°M/°&Ö´!&+°!±+´+³J+´+°/´J+²J +³@ +³@ +°°: Ö´H+°H/´:+°±4+´B+°B±-+°2´1+° 2°´?+°?/±N+±!&°$9°²#*999°°09°J±99±H°9±4:³/ /´H+³WH>+´*+° /´ +°2² +³@  +°/´7+°]/°Ö´+³@+´E+°E/´@+°±;+´K+²;K +³@;6 +°K±+´0+°0±+´&+°42² +³@ +°±' +´Z+°Z±+´1+°°! Ö´S+°S/´!+±^+±E°C9±@²>B999°;²=H999°K²M999±0°N9±°9±Zµ$+-PW$9°S°U9±>7·0!CEKSZ$9°W°U9± ²99901233!5!264&#"&5464632#"&5>;&#"!532654&"&546323&2654'&#"«Lm7áPüùH.LC/0CO s|tXWwO?4MK> !5?O*þ,¡,(6*CN62LQ#*$!+&ug–(Ðýð@FZ=;. Keý¿Xt€YD][3@UTAL"&5+%%5HE17))6(# 2#"2WýÿŠ gqÒ°0/´-+°*/´4+°M/°?3´N+°e2´K+´m+°U/´`+°G/´+° /´ +°2² +³@  +°/´7+°r/°\Ö´W+³,W\+´2+°2/´,+²,2 +³@,. +°W±+´+°±R+´c+²Rc +³@RM +°c±+´I+²I +³@IL +°I±+´&+² +³@ +³B+´k+°±+´1+³=+´o+°o/´=+³9+´&+±s+±,\°Z9°W±*499°°Y9°²U`999°R°9°c°e9°±99°I°f9±B°9±k±G99°o²)?E999°±#599±*-°29±Um@ &=9IRBY\cko$9°`²;hq999°G±#E99± ²99901233!5!264&#"&54764632#!"3!!"543!27654'#"&5467&#"!532654&#"#&5476323&%"3254'«Ml7áPüùH/KC//DO 99UiN*(0@RfLýð$$·ýA__).3l+71'!‰Bþ=™("C =(*-.LJ)%6 ug–(Ðýð@FZ=;. L22ýßLa RALg8;WV.&1. „?-.C sR$0 8 -A,$ _#5:+ Wþ› t~"²p+´K+°./´++°'/´2+°R/°D3´S+°j2´z+´P+³9SR+´:+°Z/´e+°@ Ö´+° /´ +°2² +³@  +°/´7+°/°bÖ´]+³)]b+´0+°0/´)+°]±+´+°±W+´h+²Wh +³@WR +°h±m+´N+²Nm +³@NQ +°N±+´&+² +³@ +°°x Ö´G+°G/´x+°±+´1+³B+´|+°|/´B+³=+°63´+°#2²= +³@=: +±€+±)b°`9°]±'299°°_9°²Ze999°W°9°h°j9±Nm²k999±G°9°°p9°x°K9°|±DI99°±@t99±=B±&399±²!,-999±'+°09±PR±#699±:z²!_`999°Z@ =BGNW]bhmx$9±e@°u9°°I9± ²99901233!5!264&#"&54762#!"3!!"543!2654+53254&##"&547&#"!532654&#"#&546323&54632"32=4«Ml7áPüùH/KC//DO 99¥=\%&.'ý}%%Ôý'^^ 1c.;Z"8GEþ:ž'!+ = P0/FIjM(-7 81)ug–(Ðýð@FZ=;. L22þM?3. 7)8:YV&0(‰?/b>4F +%! )9>-& 1Ka9+9? *Wýç½ fqyȲ'+´M+°2/´t+°x/´9+°U/°D3´V+±!l22´S+°]/´+° /´ +°2² +³@  +°/´7+°z/°dÖ´_+°_±+´+°±Z+´+²Z +³@ZU +°±$+´P+²P$ +³@PT +°P±G+°62´j+³jG+´&+°/´&+² +³@ +°G´r+°j±+´1+°n Ö´B+°±=+´.+±{+±_d°b9°°a9°²]999°Z°9°°!9°$±99°P°"9±G°9±j±'M99±nr·2D9glKtx$9±B²+@v999°°;9±xt°69°9°;9±]V@ $.=BGPadjn$9°²@gp999°M±+K99± ²99901233!5!264&#"&547623&54632#"'&54632654&'#"&54767&#"!532654&#"#&546"3254'&3254#"«Ml7áPüùH/KC//DO 99?8KW nY+-5 NX7>c++8J+j/*# x1> !5*;)GQ<þ»WþSŠ gp§²(+´O+²9+°./´@+°V/´W+±!o22°W´H+°V´T+°^/´+° /´ +°2² +³@  +°/´7+°q/°4Ö´;+°;±+´+°`2°´e+°e/°±[+´+°±$+´R+°R±+´&+² +³@ +³J+´m+°±+´1+°h Ö´F+³B+´,+±r+±;³89VW$9°e°9°°c9°[´]^b$9°²!999±R$²".@999±²TU999°m±(O99°h±HM99°°*9°F°D9±^W@ $,4;BFJRcehm$9°²Djk999°O±*M99± (°89± ²99901233!5!264&#"&547623&547632!".547673 54'#"5467&#"!532654&"&5464'#"32«Ml7áPüùH/KC//DO 99*<2/0GY,€þ~JwjG) %.:4evQU. id6,(3CBþ‘z', :=» G.1ug–(Ðýð@FZ=;. L22þ%:*$$1J23EƒÓ$:\=1*:_/?V,žD~m3JE3[)! -=[*Q<Wý©ƒ r{…²+´R+²<+°*/´|+°1/´C+°Y/´Z+±pz22°Z´K+°Y´W+°`/´k+° /´ +°2² +³@  +°/´7+°†/°7Ö´>+°>±+´+³c+´h+°h/´c+°±^+´n+²^n +³@^Y +°n±+´U+°U±+´&+² +³@ +³M+´x+°±-+´ƒ+°ƒ±+´1+³I+´s+°s/´I+³+°E3´'+°#2±‡+±>±;<99°h°9°c°f9±^³`ek$9°n²p999±U²1Cq999±M²WX999±-±R99±ƒx°/9°s´KPuz�$9°²!*|999°I±G€99°°%9±1|³-'ƒ$9°C²/€�999°K°%9±`Z@ 7>EI#UMfhnsx$9°k²Guv999°R±!P99± °;9± ²99901233!5!264&#"&54764632#"&547#".547673 54'#"5467&#"!53264&#"&546323&%4'#"32264&"«Ml7áPüùH/KC//DO 99{`GX,�HHI42L?VJwjG)%/:4evQU/ id6,(3CAþ�z& :>-*<3 G/1,,<+*ug–(Ðýð@FZ=;. L22ýÛHgE„Z5!P4IK2 $:\=5&<_/?V,žC~m3JD4[) ,-=:*$&+Q<þã+<,,*Wý‰ƒ r{ƒ“?²+´R+²<+°*/´„+°�/´‚+°1/´C+°Y/´Z+±pz22°Z´K+°Y´W+°`/´k+° /´ +°2² +³@  +°/´7+°”/°7Ö´>+°>±+´+³c+´h+°h/´c+°±^+´n+²^n +³@^Y +°n±+´U+°U±+´&+² +³@ +³M+´x+°‘2°x´-+°-/°±+´1+³I+´s+°s/´I+°I°Š Ö´|+°|/´Š+³E+´#+°‡ Ö´'+±•+±>±;<99°h°9°c°f9±^³`ek$9°n²p999±U²1Cq999±M²WX999±x²/R999°s·*KP~€‚„�$9°±!Œ99±I|°G9°Š°%9±1‚·-'|€‡‰�‘$9°C±/~99°K°%9±`Z@ 7>EI#UMfhnsx$9°k²Guv999°R±!P99± °;9± ²99901233!5!264&#"&54764632#"&547#".547673 54'#"5467&#"!53264&#"&546323&%4'#"324#"322654'"&'«Ml7áPüùH/KC//DO 99{`GX,�VKR8:Q6?JwjG)%/:4evQU/ id6,(3CAþ�z& :>-*<3 G/1'+--+*$4+@+ 4ug–(Ðýð@FZ=;. L22ýÛHgE„a6%W9QP:'$:\=5&<_/?V,žC~m3JD4[) ,-=:*$&+Q<»,,-V3$!,* $3Zÿ0a.S^>°'/´$7+°/´-++°L/´M++±W22°M±7é°L´J+°/± é° °? Ö´\7+°B/±é°_/°*Ö´!&+°!±+´+°±Q+´&+²Q +³@QL +°±+´F&+°F±;+´T+°T±Y+´5+°5±1+´&+±`+±²-999°Q± 99°°9±F°9°;±JK99°T°9°Y³.7?$9°5±399±1±%&99±$°*9±M@ 15;FTY$9°\°39±? °901"#&546323&547632)"3!!"&5463!2654'#"'&54763&'#"!5!2654&3254'#"¤-D HrGC564—+UTpœF×þüü¡V2$Tû¢AYYA‚HUb®E*&21J0JQ;@;ý;*B:ÿ'#i2KZ3)F`..A?4MqIFgÕÜD!&FO>=JeNo<½72FI8713OU0)E**(2I*=lD&@Zÿ1�.cp�²'+´4++²2+°//´,++°\/´]+°2°]°g Ö´K++°\´Z+°;/±<é°/± é³C +°k3±é°R/´7+°q/°2Ö´)&+°)±+´+°±b+´&+²b +³@b\ +°±+´V&+°V±M+´d+°d±i+´H+°H±8+´#+°2°#´?&+°?/²?# +³@?; +±r+±²'4999°b± 99°°9±V°9°M±Z[99°d°9°i²JKO999°H³EF$9°?²&5C999±#8²!-.999±',°19±Z\±8#99±<;´!L$9°@ ?HMVbdi$9± ±NO9901"&5476323&547632632#!"3!!"&463!2654+53254'&#"#"&467&+"!5!276543254'"#"ÑZD H: FG]**J5ûðV2$†ûpBXYA),%"(1)Q�elJ(ON>@=ý;)#"À9(U1,6X3'D01\€2OqIGc#/CKD5IC!&EOzI!9J7*:Qjd’e%26MW1%?(**BwE Zÿ¨.R^hM²C+°13´D+± V22²C+´A+°/´b++°g/´#++°L/´7+³\L+´7+°9/±é°i/°Ö´N+°N±I+´+²I +³@IC +°± +´=+°=±4+´S+° Ö´_<+°S±X+´.+°.±(+´+±j+±N°Q9°I±P99°° 9±= ° 9°4±AB99±S±999±X_¶1V7\bg$9°.²,d999°(°&9±gb³_&d$9±DA°@9°L@  (.4=QSX$9°\±,Z99±97°901746323&547632#".547632654'&'#"&5463&#"!5!27654&"&%3254'&#"3254&#"ïpOI766ž.„HZM~!yB=WW‡1`GI,2>€ Y %I`ZV\w\ of@A =ýG/(&D`FKß81s&FV Z0LX+S·Nk22Ia%Gm®]2I8\S~žji;&51%[”VL^„`L†—\=\þy 2gr}Ÿ²A+´B++°Z2².+´m++²A+´?+²$+°/´s++° /´!++°I/´T7+³hTI+´5+°7/±aé°~/°Ö´+°±P+´K+°K±F+´X+²FX +³@FA +°X±]+´;+°;±1+´k+°k±+°52´{+°{±o+´++°+±v+°%2´+°f2±+±P±99°K°N9°F±MT99°X°Z9±;]² ![999°1±?@99°k±7a99°±.m99°{² hq999±+o²)d999°v³sx$9± s³u{$9°!± v99°.±x99±m?°>9±IB@ +%;1NPX]fko$9°h±)q99±75°d9°a°901"&547#".54767327654'&'#"&54763&#"!532654&"&5476323&547632"3254'&264&#"œ/?`†_šéˆØÂ�K:ýJý0NE`GJ 9:OH766�,„GZN~ êþÐGRfp#ˆ(88()79JS7C_`B+Ak¨pSM1^$oBGc“[81N¼Q(/8Hiƒo\cDC9CDgG5D2DG./BD/O5522IX'Eh®]2H9ñ‘Z`L†—\=ýP7P98)'8\þP2hs~�Õ²C+´D+°[2²0+´n++²C+´A+²&+°/´++°ˆ/´t+°/´#++°J/´U7+³iUJ+´7+°9/±bé°�/°Ö´+°±Q+´L+°L±H+´Y+²HY +³@HC +°Y±^+´=+°=±3+´l+°l± +´�+°�±p+´-+³}-p+´‹+°‹/´}+°-±w+´…+°…±‚+°'2´+°g2±‘+±Q±99°L°O9°H±NU99°Y°[9±=^²#\999°3±AB99°l±9b99±� ´ 07in$9±p‹°r9±-}¶+etzˆ$9±…w°9±t´ }‚�$9°#´ w|„‹$9°0±z99±nA°@9±JD@ -'=3OQY^glp$9°i±+r99±97°e9°b°901#"'&547#".54767327654'&'#"&54763&#"!53264&"&5476323&547632"3254'&2654&#"2654'#"&'’3CiKH75 ‘ÒˆØÂ�K:L^BD/O5522I_&Cp®]2H9ñšc`L†—\=ý—!"!0"pB0 *:7(/CZÿ0È-R\doW²+´ +°/´++°"/°&3´X++°l2°f/´-++°J/´c+°_/´C+°?/°73´O+°2°p/°Ö°+2´1+°j2°L Ö´a+°±]+´F+°F±;+´:<+°:±4+´1+°2²4 +³@ +°´Z+°Z/°±+´+±q+±]¶ ACJ_c$9°F²&?O999°;±-n99°:±0Q99°4¶"$SVXe$9±Z³ $9± °9±fX¶+V$Z$9°-±S99°c²:;999°_³4FL$9°C°A9±O?°Q9012#!"3!%"543!2654'#"'#".54!2327654&#"#54&#"632#"546326"3254&%4#"32"32“Td•44PýêDD¾ý5‡‡$1EVP=d#=½0FA"#sÅA5qSR?T.8#%-uy`6,¬*FD)þ+6987- $]^=H«-^R1 ™Q00*)ChgF1W"*:F]`-!Š n27mTP6;5-0vQU??þ®#==$¡214z 2"Zÿ0ã-`jr}–²+´+°/´++°0/°43´f++°z2³$f0+´%+°t/´;++°X/´q+°m/´Q+°M/°E3´]+°2°~/°Ö°92´&+°x2°Z Ö´o+°±k+´T+°T±I+´H<+°H±B+´1+°-2²B +³@ +°´h+°h/°±!+°(2´ +° 2²! +³@!$ +±+±k¶OQXmq$9°T²4M]999°I±;|99°H±>_99°B¶02adfs$9±h±+99°!±99° ° 9±°9±$0±! 99±%f³ 29x$9°t´ (-dh$9°;²*+a999°q³HI$9°m³BTZ$9°Q°O9±]M°_9012#!"3!!"5463!2654+53254/#"'#".54!2327654&#"#54&#"632#"546326"3254&%4#"32"32“Td7/I 9)ýp;;çý~I5™&)$)9?!P=f!=½0FA"#sÅA5qSR?T.8#%-uy`6,¬*FD)þ+6987- $]^=H«-^R-"8+:5*@*+Ai/7,?0"6:F]`-!Š n27mTP6;5-0vQU??þ®#==$¡214z 2"Wÿè.IR^gqs²%+´m7+² +´J++° /´S++°Z/´++°p/´)+°A/´_+°d/´;+°7/°03´F7+°2°r/°CÖ´f+°' Ö´h&+°f±b+´>+°>±4+´31+³34+´\<+°3±.+´&+°2°´M+°M/°±+´+±s+±bh´;A_9d$9°>²%7F999°4±)m99°°H9±\3²*#o999°.· 0JPSZ$9±M²V999°°9±ZS³V\$9±m ±99±pJµ'#MPh$9°)°9±_A²43999°d³.C>$9°;°99°7°H9012#".547632654'#"&'#"54;27654#"#54#"632#"5463262654"2654'&#"2654#"327!"�U` ÄlN%,1_GH,1A} .nT8/J W£×ÝòH:CvtP‘a.7D1sub�&¸*Œ*2#;.(.QQþ !981)$­>þëk.fWF"óX… :'4.&3M”!6M6'p}€#)Elphdx$ ;/2EˆX_NNþ'=='ù %è$53?à zWÿê.IR[lu«²%+´t7+²!+´J++° /´c+°_/°g3´++°2²_ +³@_k +°n/´++°A/´S+°X/´;+°7/°03´F7+°2°v/°CÖ´Z+°' Ö´p&+°Z±V+´>+°>±4+´31+³a34+´&+°/´a&+°3±l+´k+°k±.+´&+°2°´M+°M/°±+´+±w+±Vp´;AS9X$9°>²%7F999°²+nt999±3a°H9°lµ,#P_m$9°k¶ !0Jc$9±M.±g99°²e999°°9±_c±99°°9±t!±99±nJµ'#MPp$9°+°9±SA²43999°X³.C>$9°;°99°7°H9012#"54632632654&'#"'#"5476?654#"#54#"632#"5463262654"%2654#".#"327&#"#"32�U` ZlnaŽùS7\!LQ#0=2S9f W£×Q0rÜÅvtP‘`/6D1stc�'¸*Œ*þ,!98ë4G tG6%CNÔ¬>,+­.fWF" „]‹NF.989J1K]þ3x,]óÜSr@6tP‘`.7C2sx_~8.}Ta[Iq¡ßK^Øo™'>;\~7.©)FG(þ/ 79.£à–´ûÍ0 89-kXQ0*C9Q3&YL…%E6@muos$ ?01B(þÓ [†DA6@muos$ ?01B„XeLLlWh1'B/ 6KÊ[1,LLþ (>>'h";:<õ@3h";:Wÿ'â-�•�¨±I°/´7+° /´++³L +´�++°#/°'3´“++°§2°{/´R++³ŸR{+´-++°-°® Ö´j+°2°H/´œ+°˜/´C+°C°d Ö°A3´ª+°`/²7?Y333´o7+²sŠ222°²/°lÖ´¬+°P Ö´}&+°¬±°+´g+°g±]+´\1+°\±V+´v&+°v±‡+´š+°+ Ö´£&+°‡° Ö´&+°A2°š±–+´F+°F±;+´:<+°:±4+´1+° 2²4 +³@ +°´”+°”/°±+´+±³+±°}´djbª®$9°g±`o99°]³RL{�$9°\°q9°V²Ssz999±š°J9±–´CH˜œ$9°F³' ?Š$9°;±-§99°:±0Œ99°4µ#%Ž‘ž$9±”³ $9± °9±{“@  +P%}‘”£$9±RŸ±Ž�99°-±\]99±œ®³;:J$9°ª@ 4Fglv…‡V–š¬°$9°˜°E9°d°b9±`C°q9°o°Œ9012#!"3!!"5463!2654'#"'#"'&54!2327654&#"#54&#"632#"'!"'&54;2654&#"#54#"632#"54632632+"32767&546326"254%4#"32"32"3254­Td–44PþTT¨ýK•TA 2DVQ=e ?»]/M!sÅA4rSR?T-8E14Sþ"x,]óÜSr@6tP‘`.7C2sx_~8.}Ta[Iq¡ßK^Ùn˜)z`~6,Ç8)Šþ6978.¡$]^=HªûÕ0 89-^R/"™Q00.+Fm8;?1W"*:F]`CŠ n27mTP6;5Z9þº [†DA6@muos$ ?01B„XeLLlWh1'B/ 6LË RT??þ®$==Ä214z 2"A";:Wÿ'û-𣬶¿�°/´++°/´+³Y+´Ž++°0/°43´ ++°µ2³$ 0+´%+°ˆ/´_++³®_ˆ+´:++°:°¼ Ö´w+°U/´©+°¤/´P+°P°q Ö°N3´¸+°m/²DLf333´|7+²€—222°À/°yÖ´º+°] Ö´Š&+°º±¾+´t+°t±j+´i1+°i±c+´ƒ&+°ƒ±+°82´&+°±2°” Ö´§+°±«+´S+°S±H+´G<+°G±A+´1+°-2²A +³@ +°´¡+°¡/°±!+°(2´ +° 2²! +³@!$ +±Á+±¾Š´qwo¸¼$9°t±m|99°j³_YˆŽ$9°i°~9°c²`€‡999±”°’9°§°W9±«µNPU¤©$9°S³4L—$9°H±:µ99°G±=™99°Aµ02›ž­$9±¡±+99°!±99° ° 9±°9±$ޱ! 99±% µ 28]б$9°ˆ²-ž¡999°®± (99°_°›9°:³*+ij$9±©¼´GHW$9°¸@ AStyƒc”§’«º¾$9°¤°R9°q°o9±mP°~9°|°™9012#!"3!%"5463!254+53254/#"'#"'&54!2327654&#"#54&#"632#"'!"'&54;2654&#"#54#"632#"54632632+"32767&546326"254&%"3254"32"3254­Sd9/G8)ý‹7UÌý&–Z<€'$+%)8@ P=f >»]/M!rÆB4qSS?T-7E06Sþ"x,]óÜSr@6tP‘`.7C2sx_~8.}Ta[Iq¡ßK^×o˜)y`€5+¬*Œ*ýô!67/¢$º=E«ûÖ0 89-^R+$9*:5+?,Ek2>',?0"=:F]`CŠ n18mTP7:5Z9þ» [†DA6@muos$ ?01B„XeLLlWh1'B/ 6KÈ RT??þ®#==#Ó432ß2"A";:Wÿ.ƒ�˜¢¬µ)²$+°C3´¦7+² +´„++°$´x++° /´Ž++°”/´++°r/°¨3´I++±(*22°?/°a3´™+°²2°ž/°­3´9+°[2°W/².5P333´f7+²j€222°¶/°cÖ´°+°G Ö´t&+°°±´+´^+°^±T+´S1+°S±M+´m&+°m±&+´£+°£±œ+´<+°<±2+´11+³12+´–<+°1±,+´&+°2°´‡+°‡/°±+´+±·+±´t´[aY®²$9°^±Wf99°T³ICrx$9°S°h9°M²Jjq999±&m±|}99°£±A 99°œ´9?™7ž$9°<²$5€999°2°¦9°°‚9±–1²"*¨999°,@ .„‰‹Ž”$9±‡²‘999°°9±”޳‘–$9±x ±99±r„·&G"t‡‹£$9°I±‰99±™?µ12AST$9°ž@ ,M^cm|<°´$9°9±7Y99°W²h}‚999012#".547632654'#"'#"54763254#"#54#"632#"'!"'&54;2654&#"#54#"632#"54632632+"327676763262654#"2654&#"2654#"327"3254®V`ÃaF.8/`GI,2@~ ,lV8d!W£Öò; ÅusP“a.6B2<Zþ.x,]óÜSr@6tP‘`.7C2sx_~8.}Ta[Iq¡ßK^ßmš$A7[�&·,HE*3!£c ]ý0 89.eXF"óR‚:%5/%0P”!6M]p}€‡lphdx$ :02E+þÍ [†DA6@muos$ ?01B„XeLLlWh1'B/ 7OÔX+'NNþ'=='ù%è$53&Ãz ";:WÿçB-x‚Œ•в>+²2+±"M33´|++°ƒ2°R Ö´++°/´X++°‰/°b3´G++°p Ö´’+°Ž/´j+°B/³)9_f$3´7+³u$2°–/°rÖ´�+°V Ö´ &+°�±”+´m+°m±c+´b1+°b±\+´&+°±†+´J<+°J±>+±=é°=±5+´y&+°y±+´.<+°.±%+´ &+±—+±” ´hjpŽ’$9°m±fu99°c³RX$9°b°w9°\²Y999±†·DEGMP‹$9°J±B99±=>°9±y5±999°³2+7$9°.±)99°%±"#99±>°#9±|´ JV†Œ$9°Xµ.5Py‹$9°‰±%E99°’° 9°G°9°Ž¶\mr�”$9°j±h�99°B³+7w$9°°9012+"32767>32632632'654'&#"#"&547&#"#4&#"632#"&'!"'&54;2654&#"#54#"632#"54632627654'2654&#""3254�Ta[Iq¡ßK^Åh‘6“t†HB�K.2fyž‹-l??Z$/K06\Vk(?XZc@Ux_H[aJK^ ƒþ†x,]óÜSr@6tP‘`.7C2sx_~8. >nouýÊT31*+5ý.0 89-lWh1'B/ *<�p�NN&&ªy½[.H›[DD %�F`CJ‚_¥^B7þ�p6C‰ZF]IKelQÉ [†DA6@muos$ ?01B„XeLLþ³De<0=rcSþ×;,-::X*";:WþóB-ƒ�˜¢«²I+²X+±=“33´š7+±,†22°] Ö´++²#+°'/´Ž++°/´c++°Ÿ/°m3´R++°{ Ö´¨+°¤/´u+°M/³4Djq$3´7+³€$2°¬/°}Ö´¦+°a Ö´ &+°¦±ª+´x+°x±n+´m1+°m±g+´&+°±œ+´U<+°U±I+±Hé°H±@+´„&+°„±Š+´9<+°* Ö´–+°9±0+´ &+°‘ Ö´$+±­+±ª ´su{¤¨$9°x±q€99°n³]c$9°m°‚9°g²d999±œ·OPRX[¡$9°U±M99±HI°9±„@±D99°*µ6=B‡Œ$9±–б499±‘9µ',."Ž“$9±]Ž´)*$‘–$9±I°"9±š´ Uaœ¢$9°cµ9@[„Š¡$9°Ÿ±0P99°¨° 9°R°9°¤¶gx}¦ª$9°u±sŒ99°M³6B‚$9°°9012+"32767>32632632#"&4632654'&#"#"&547&#"#4&#"632#"&'!"'&54;2654&#"#54#"632#"54632627654'264&#"2654&#""3254�Ta[Iq¡ßK^Åh‘6“t†HB�K.2fyžVF_DA`_BQ??Z$/K06\Vk(?XZc@Ux_H[aJK^ ƒþ†x,]óÜSr@6tP‘`.7C2sx_~8. >nouq)77)(78ü€T31*+5ý.0 89-lWh1'B/ *<�p�NN&&ªy–X1UD_a„aIƒ[DD %�F`CJ‚_¥^B7þ�p6C‰ZF]IKelQÉ [†DA6@muos$ ?01B„XeLLþ³De<0=rcSýÔ7R78('9;,-::X*";:WþÊB-ƒ�™©³¼b²I+²”+±=X33´,7+°] Ö´++°'/´›++°£/´Ž+°/´c++°°/°m3´R++°{ Ö´¹+°µ/´u+°M/³4Djq$3´7+³€$2°½/°}Ö´·+°a Ö´ &+°·±»+´x+°x±n+´m1+°m±g+´&+°±­+´U<+°U±I+±Hé°H±@+´„&+°„±Š+´9<+³¨9Š+´)+°)/´¨+³—9Š+´¦+°¦/´—+°9±‘+´ +°"2° ±0+°�2´ &+´$+±¾+±» ´su{µ¹$9°x±q€99°n³]c$9°m°‚9°g²d999±­·OPRX[²$9°U±M99±HI°9±„@±D99°)´=B‡Œ$9°Š°69±¦¨°49°—±'99±‘9¶.,Ž”š›£$9° °&9±]Ž·)$‘—�Ÿ¦¨$9±I°"9°,´.†‡ª«$9°´ Ua­³$9°cµ9@[„в$9°°±0P99°¹° 9°R°9°µ¶gx}·»$9°u±sŒ99°M³6B‚$9°°9012+"32767>32632632"&54632654'&#"#"&547&#"#4&#"632#"&'!"'&54;2654&#"#54#"632#"54632627654'2654&#"2654'#"&'$2654&#""3254�Ta[Iq¡ßK^Åh‘6“t†HB�K.2fyž[Sj”khM W??Z$/K06\Vk(?XZc@Ux_H[aJK^ ƒþ†x,]óÜSr@6tP‘`.7C2sx_~8. >nouf"$"!^C9*)8 üÔT31*+5ý.0 89-lWh1'B/ *<�p�NN&&ªyœW6bJkkJLhJ‡[DD %�F`CJ‚_¥^B7þ�p6C‰ZF]IKelQÉ [†DA6@muos$ ?01B„XeLLþ³De<0=rcSþ"" "pC/*;7)/é;,-::X*";:Yÿ#z2QZcjS²&+°!3´i++°R2°/´7+°e/´,++°D/´`+°[/´>+°:/°33´I7+°M2°k/° Ö´+°±F+´^+°* Ö´g&+°^±b+´A+°A±7+´61+°6±0+´P&+°2°P´U+°U/°P±+´&+±l+±F± 99±bg´>D[`<$9°A²&:I999°7±,i99°6²K999°0¶$-!MRXd$9±PU±99±i&°9°eµ*$UX$9°,°9°`µ 67$9°[³0FPA$9°>°<9°:°K9°I°901# '&547327654'&'#"&'#"'&54;2654&#"#54#"632#"546326322654""3254#"32ËR]©wµþÿ›°^@Y–†á’j—AR9.N L®c-GóÚStA6sP’_-7B2sva7,~UaŠ*Œ)þ- 79/£ß”µq[›F1q�úž…*zzÛo`&6xe#9Q0)YL…DA5Amuos$ ?02A„YdLLkX8û)>>(h";:<õ@3YþCz2[dmw~¬²0+°+3´}++°\2° /´n++°/´7+°y/´6++°N/´j+°e/´H+°D/°=3´S7+°W2°/°Ö´+°±P+´h+°4 Ö´{&+°h±l+´K+°K±A+´@1+°@± +´u+°u±:+´Z&+°(2°Z´_+°_/°Z±"+´&+°q Ö´+±€+±P±99±l{´HNejF$9°K²0DS999°A±6}99°@²U999° ³.7bx$9°u´+=W\$9°:°s9±Z_³ &n$9°q±r99±n³ qu$9°²rs999°0°9°}°9°yµ"(4._b$9°6°&9°jµ@A$9°e³:PZK$9°H°F9°D°U9°S°901#"&547# '&547327654'&'#"&'#"'&54;2654&#"#54#"632#"546326322654""3254264&"#"32ËR]kX_DB`BLþÿ›°^@Y–†á’j—AR9.N L®c-GóÚStA6sP’_-7B2sva7,~UaŠ*Œ)þ- 79(88P89ǣߔµq[xG.bE^aB& q�úž…*zzÛo`&6xe#9Q0)YL…DA5Amuos$ ?02A„YdLLkX8û)>>(h";:<üç8P88('9$@3Yþz2\eny€‘ײ1+°,3´++°]2° /´�++°Š/´o+°/´7+°{/´7++°O/´k+°f/´I+°E/°>3´T7+°X2°’/°Ö´+°±Q+´i+°5 Ö´}&+°i±m+´L+°L±B+´A1+°A±+´�+°�±�+´x+°x±;+´[&+°)2°[´`+°`/°[±r +´‡+°‡±#+´&+°„ Ö´+±“+±Q±99±m}´IOfkG$9°L²1ET999°B±799°A²V999°²/8z999°�³>Xc$9±x�±],99±[`¶ 'ou�Š$9°‡°9±o·rw„†��$9°±u99°1°9°°9°{µ#)5/`c$9°7°'9°kµAB$9°f³;Q[L$9°I°G9°E°V9°T°901#"'&547# '&547327654'&'#"&'#"'&54;2654&#"#54#"632#"546326322654""32542654&#"#"322654'#"&'ËR]vaiKH754=þÿ›°^@Y–†á’j—AR9.N L®c-GóÚStA6sP’_-7B2sva7,~UaŠ*Œ)þ- 79 "#""Á£ß”µ1B8*)9Dq[�F3nKi54K3)q�úž…*zzÛo`&6xe#9Q0)YL…DA5Amuos$ ?02A„YdLLkX8û)>>(h";:<ý-"" 2!Þ@3þ%A0!*;9(.CYþñ/Q\g1²+²,;W333´LC+±]22²L +³@LP +² +°/´R++°4/°#3´A7+±E22°h/°=Ö´8&+°8±0+´d&+°d±`+±(é°(±+´I&+°I±O+´1+³O+´Z+°±+´ &+°U Ö´+±i+±08±:;99°d°49°`´,%AC2$9°(±#E99±OI±99°°9±Z°9°U´ $9±R³UZ$9°L² :999°4@  (08=H`bd$9°A±C9901%3254'7#"'&547&'"'&=4'&#"#"'&547&#"&54763263232653264&#"2654'»4)�~3–_M`CB0/-',ÀAI9:K!/F28PW4.z #T5/j2„AOŽ;11^i’YD.3P�)77)(79üº/3bjÆ5UÍ­G2[Ç M0\D_0/DB0'M59\qN55 (�GTIPND[™` JCV�O2\¼oQd&&|awDZQ9^ý7R88)&:gBz[Mˆ?-=YþÌ/Q]nyf²+²,;X333´LC+±o22²L +³@LP +°/´^++°g/´R+°4/°#3´A7+±E22°z/°=Ö´8&+°8±0+´v&+°v±r+±(é°(±+´I&+°I±O+´1+°°l Ö´+°/´l+°±j+´[+°[±U+´d+° 2°d±+´ &+°a Ö´+±{+±08±:;99°v°49°r´,%AC2$9°(±#E99±OI±99±°9°l°9±U[µ^g$9±Rµacjl$9°L² :999°4@  (08=Hrtv$9°A±C9901%3254'7#"'&547&'"'&=4'&#"#"'&547&#"&547632632326532654&#"2654'#"&'2654'»4)�~3–gViKH75B,ÀAI9:K!/F28PW4.z #T5/j2„AOŽ;11^i’YD.3P!##"1B8*)9DüÒ/3bjÆ5UÍ­G2[Ç©J5eKi54KW6M59\qN55 (�GTIPND[™` JCV�O2\¼oQd&&|awDZQ9^ý[!#!!pA0!*;9(.C(gBz[Mˆ?-=Yÿ2[fq-²+°3´L7+°U2²++°:3´g++²L +³@LP +°/´e++°_/´ ++°3/°"3±@é±D22°r/°<Ö´7+°7±/+´n&+°n±j+±'é°'±+´I&+³ I+±aé°I±O+´R&+°R±Y+´&+±s+±/7±9:99°n°39°j´+$@B1$9°'±"D99±OaµL _e$9°R±\99°Y´[$9±_e± 99±g±999±3L@$'/7Ö´9+°9±1+´x&+°x±t+±)é°)± +´K&+³ K +´a&+°K±Q+´T&+³lTQ+´m+°m/´l+°T±[+´&+±}+±19±;<99°x°59°t´-&BD3$9°)±$F99±ma²N 999°Q²c999±Tl°9°[¶]eh$9±^c± 99° °9±q±;99±5N@ !&)19>J[tvx$9°B±D]9901#"5463263267#"'#"'&=4&#"#"'&547&#"&54763263232653327654'"327.#"#54&%2654'jBTnyÑøS7`QR#0#3f!*,.XAFoO"-H28PW4.z$T60j0„AP�A'%nfIOQ=.?O3+c%zþ¯0ŸuG$'B8ýÞ/3bj/,˜^Ö”£.901J7?V*47WxLf &‘ETIPND[–cJCW˜L-]»nSg**8=e}?YR3\þ¤5PX+8»Dý¯=.&)%‹gBw^P…?-=Yÿ)�2]h+²#+²4C333±Ué°2²#+´^++² +²+° /´C+°d~@YR3^þ¢4Q gBu`P…>.=Yþ|�2gr}y²-+²'>M333±_é°2²-+´s++²+°/´h++°/´#C+°F/°53±Sé²W222°~/°Ö´+°±O+´J&+°J±B+´z1+°z±v+±:é°:±1+´\&+°\±b+´e&+°p2°e´+°/°e±+´&+³ +´k+°k/´ +±+±O±99±BJ±LM99°z°F9°v´>7SUD$9°:±5W99°1±#99±b\°-9±e±+99°k¶ )'$9±h³ jp$9°#±k99°-± m99°s°L9°_°+9°F@127:BJO[vxz$9°S´Ucd$901%2654'7#"&547# '$47!2767#"'#"'&=4&#"#"'&547&#"&54763263232653264&#"2654'µIS}3–¥f^EB_§ãþ޼þï[;Oü¢KÝc§b g$mZBCoN#-G16SM65z$T5.f/„AP�A&%nfJOQ=.AM31)77)(89üç/4chAsU©K2[Çàw(oE^`C ,Or+—…*t‡ÿ]=WLN9:WyLf '�FVGPGEa–cJCW”N/\¼nSg++8>d~@YR3^þ¢4Qþ}8R78(':ygBu`P…>.=Yþi�2iu†‘¤²/+²)@O333±aé°2²/+´‡++²+°/´v++°/´j+°/´%C+°H/°73±Ué²Y222°’/°Ö´!+°!±Q+´L&+°L±D+´Ž1+°Ž±Š+±<é°<±3+´^&+°^±d+´g&+°g°„ Ö´+°/´„+°g±‚+´s+°s±m+´|+°|±+°y2´&+´ +±“+±Q!±99±DL±NO99°Ž°H9°Š´@9UWF$9°<±7Y99°3±%99±d^°/9±g±-99±ms@  )+v$9±j³ y„$9°%´ms{‚$9°/± p99°‡°N9°a°-9°H@!349Li54L.Oq,—…*t‡ÿ]=VLN9:WyLf '�FVGPGEa–cJCW”N/\¼nSg++8>d~@YR3^þ¢4QþÚ#! "oB0*;8(/C‹gBu`P…>.=Wþó>-LWcm=²9+²J+±-^33´d7+±P22²+°/´X++°j/´D++°>/±$433´7+± 22°n/°Ö±lé°l±g+´G1+°G±9+±8é°8±0+´M&+°M±T+´)<+° Ö´a+°)±[+° 2´+°2±o+±l±AB99°g±DJ99°G±>99±89°9±M0±499°µ &-2PV$9±aT± $99±[)´X^$9±JX´[a$9±d9°9°j· )0BGMT$9°D°9°>³&2V$9°° 90174632632632#"'&47632654'&#"#"&547&#"#4'&#"632#"&%327654'2654&#"2654&"Wž‚‡FB�J.2gyžNH^DC0//0C I>@Y"!.L08[Yf~(@WZ91;V>7_HZ_LWcÃ=78pt|)67()78ü¡)43T55錸NN&&ªyžO0WD_0/ˆ/0C‰\BE %‘D`CJb¦]A8þ�p9#GA[F^HLd�]De<0=rcRýÓ7)(87)'9<+,;:X<WþÌ?-MXct~�²:+²K+±._33´u7+±Q22°/´d++°m/´Z+°{/´E++°?/±%533´7+± 22°/°Ö±}é°}±x+´H1+°H±:+±9é°9±1+´N&+°N±U+´*<+°b2³r*U+´+°/´r+°*´p+°p/°*±\+´j+°2°j±!+´&+°2°´g+°g/±€+±}±BC99°x±EK99°H±?99±9:°9±N1±599°µ '.3QW$9±rU°%9°p° 9±\*¶Y_dm$9±KZµgipr$9±u:±99°{·!*1HNUC$9°E°9°?³'3W$9°° 90174632632632#"'&547632654'&#"#"&547&#"#4'&#"632#"&%327654'2654&#"2654'#"&'2654&"Wž‚‡FB�J.2gyžNOiKH7545KG>@Y"!.L08[Yf~(@WZ91;V>7_HZ_LWcÃ=78ptW2!##<1B9*)9 Bü³)43T55錸NN&&ªyªJ6`Ki54KL45>“\BE %‘D`CJb¦]A8þ�p9#GA[F^HLd�]De<0=rcRþ!#!‘A0 +:9(/B*<+,;:X<Wÿóà.FNY4²+°53´++°2²+´O7+°*/´M+°U/´A+°;/±$133´7+± 22°Z/°Ö±Wé°W±R+´D&+°D±6+±5é°5±-+´K+°K±G+´(&+°(± +´&+²  +³@  +°±+´&+±[+±W±>?99°R±A99°D±;99±56° 9±K-± 199°G² */999°(²$&999± °9±M*²DRW999°U´ (?$9°A²-GK999°;³ '/I$9°² 99901"&547632632632335!27654'&#"#"&547&#"#4'&#"6324'322654&" \ZIPƒŽ<6£;:0SrLGJËLý-K4559YFQKHPRA^Y5/=W<6^GW]xMSQOý<)22R43 ˆn‡[cRR#"[VvoTÝýáC:;K[AGI¦edOWIB8þ�p:"HBZF]ILdSK/3Gz“<+,==+,<Wþ÷à.PZbm©²'+±B33´(++°2²+´c7+²(' +³@( +°!/´Q++´7a +´7++´Ni +´N+°H/±0>33´ 7+± 22°n/°Ö±ké°k±f+´&+°±C+±Bé°B±:+´_+°_±[+´4&+°4±,+´&+³X,+´$+°$/´X+²$X +³@$' +°±+´&+°2°´T+°T/±o+±k±KL99°f±N99°± H99±BC° 9±_:± >99°[²7<999°4²02999±,$°&9°X°9°°V9°²!QU999±T°9±Q³$TX$9°'±UV99±a7²fk999°i²,L999°N´4:[_$9°H³ 2<]$9° °901%#"54763263263233##"&547!5!2654'&#"#"&547&#"#4'&#"632264&"4'322654&"µ]K¶IPƒŽ<6£;:0SqMGJËL$$_EB_#þOJj59YBRFDPNA^Y5/=W<6^GW‡)77R68þ¹KRPMý>)22R43£Ldö‡[cRR#"[UsqVÝýà-9E^aB8.CvJ[AGBfNifLiCB8þ�p:"HBZF]þN7R77)'9þ[-2Vt‹<+,==+,<WþÔã.P[ct²'+±B33´(++°2²+´u7+²W+´C+°!/´d++°m/´Q+°7/´b++°{/´N+°H/±0>33´ 7+± 22°€/°Ö±}é°}±x+´&+°±C+±Bé°B±:+´`+°`±\+´4+°4±$+´r+²$r +³@$' +°r±,+°p2´&+´Z+°±T+´j+°j±+´&+°2°´g+°g/±�+±}±KL99°x±N99°± H99±BC° 9±`:± >99°\²7<999°4²02999±r$°&9±Z,±!99±T³QWdm$9°j° 9±g°9±Q·$TYgipr$9±b7²x}999°{²,L999°N´4:\`$9°H³ 2<^$9° ²99901%#"54763263263233#"'&547!5!2654'&#"#"&547&#"#4'&#"6322654&#"4'322654'#"&'2654&"µ]K¶IPƒŽ<6£;:0SqMGJËL+.k”55.þeJj59Y@QEDPNA^Y5/=W<6^GWx!#!!þ¹JRPLa0C:)(; Cü )22R43£Ldö‡[cRR#"[UsqVÝýá6BJk67HE2CvJ[AGAgNghFkCB8þ�p:"HBZF]þ›"!2"±\,2VtþSB0!)<9'.D"<+,==+,<Wÿà.Zbnyˆ²J+±-33²+´o7+°J´++°/2²J +³@ +°/´c++°i/´'++´>a +´>++´Uu +´U+°O/±7E33´7+± 22°z/°Ö±wé°w±r+´X&+°X±J+±Ié°I±A+´_+°_±[+´;+°# Ö±lé°;±3+´&+²3 +³@3. +°±+°,2´&+±{+±w±RS99°r±U99°X±O99±IJ° 9±_A± E99°[² >C999°#°99°;±799±3l°i9°²c999°±*f99±ic±#*99±a>²Xrw999°u²3S999°U´;A[_$9°O³ 9C]$9°° 901"&54763263263233##".5476326=5!2654'&#"#"&547&#"#4'&#"6324'322654&#"%2654&" \ZIPƒŽ<6£;:0SqMGJËLSJn4eKO.5C€"ýyJj59Y?QDCNKA^Y5/=W<6^GW]uJPNLü#?Z&$@Yül)22R43 ˆn‡[cRR#"[UsqVÝýá|C<:(:-$3<CvJ[AG@iLhdJlBB8þ�p:"HBZF]ILdE\,2Vrþô<+,==+,<Wÿòá.aow‚œ²9+°S3´:++°2²+°%3´x7+°b2²9+´7+°I/´v++°~/´_+°i/´,++°Y/²0BO333´ 7+² 222°ƒ/°Ö±€é°€±{+´&+°±T+±Sé°S±K+´t+°t±p+´F+°F±>+´&+²> +³@>9 +°±+´3+²3 +³@38 +°3±(+´l+°l±e+´"+±„+±€±\]99°{±_99°± Y99±ST° 9±tK± O99°p³HIM$9°F²BD999±>°9±3°9±el´%,0.$9±vI³({€$9°~¶3>"el]$9°_µFKgpt$9±,i°.9°Y³ DMr$9° °901%#"5476326326323&547632#"&547632&#"!5!2654'&#""&547&#"#4'&#"6322654'&#"%4'322654&"µ]K¶IPƒŽ<6£;:0SqMGJâ-ZX~…WWr]Sh58^=lgƒF #üÓJj59Y?PŠNMA]Y5/=W<6^GW`9J!<:G!üïJPNLý?)22R43£Ldö‡[cRR#"[UsrUHj‰YVba…gŒ€Pa@AIŒjr; 2CvJ[AGBgOjeNlBB8þ�p:"HBZF]°W=9>Y?7)+ü\,2VuŠ<+,==+,<Wÿ0k.y„Ž™ ²l+²+´�7+°& Ö´4+°./±+é°O/´Q+°2°Q° Ö´?+°`/´ˆ+°•/´w+°z/´D+°q/²FYg333´ 7+² 222°š/°Ö±—é°—±’+´&+°±l+±ké°k±c+´…+°1 Ö±(é²(1 +³@(, +°…±Š+´]&+°]±U+´&+²U +³@UO +°±+´J+²J +³@JN +°J±A+´}+°}±�+´=+°=±9+´!+±›+±—±tu99°’±w99°± q99±kl° 9±…1± g99°(±`e99°Šµ&4_ˆŒ$9°]²Y[999±U°9±J°9±}A±F99°�±?D99°=³5%;$9±+.°09±&°19±O°M9±`Q±’—99°ˆ²!9999°•µ=A}�u$9°w·JU]c…Š$9°z±;ƒ99°D°9°q³ [eŒ$9° °901%#"5476326326323&547632#!"3!!"&4763!27654'#"5463&#"!5%27654'&#""'&547&#"#4'&#"632%"3254'&3254'2654&"µ]K¶IPƒŽ<6£;:0Sm˜JÕ-„IY£Hé8;Yûê>&Õû6Q+)3<+'º±v]o`ECC2üáG768:UCUˆ()OA]Y5/=W<6^GWŠFUir%ûé*&MK 2ýÛ)22R43£Ldö‡[cRR#"˜l_MIM�Q-zß[CH+KFf:6;� 43а\r6:9a=]&8/.HU78CVF`./BYFB8þ�p:"HBZF]‹NCs�F;0,=iX! GþË<+,==+,<Wÿ3„.�˜¥°F²c+²t+´¦7+°c° Ö´+°/´++°G/´H+°‡2°H°‘ Ö´5+°W/°&3´œ+°(2°¬/´n+°0/°•3´++´<+°h/²>O^333´z7+²~‚222°±/°vÖ±®é°®±©+´q&+°q±c+±bé°b±Z+´™+° Ö´<+² +³@ +°™±ž+´S+°S±L+´…&+²L… +³@LG +°…±Š+´B+²BŠ +³@BF +°B±8+´Ž&+°Ž±“+´2+°2±#+°,2´+° 2²# +³@#( +±²+±®v±kl99°©±nt99°q±hz99±bc°|9±™±^~99°°\9°žµW€œ¢$9°S²OQ‚999±…L°‡9±Bаˆ9±Ž8±>99°“±5<99°2±099°#± 99°° 9±°9±t°9±‘G²E#999±WH²q©®999°œ° 9°¬µ28lvŽ“$9°nµ BL,…Š$9°0³ZS™ž$9±<±¡¢99°h²Q\|999°z°€90123232#!"3!!"&463!2654&+532654&+#"&54763&#"!5!2654&#"#"&547&#"#4'&#"632#"5476326326323&54763254'#"%3254'&'2654&"–L�JBX88!!7û’FFØû8RO;}!S/ _ZQbA@Ok\DEC/üâHlsT=')@?TJA]Y5/=W<6^GW]K¶IPƒŽ<6£;:0Sm˜JÕ.XY†51n&=Xü�*#J$ ýØ)22R43-<0)D[K8,+,2D?d871=*%37AaqiSN>=1=>Y9^%9`GSp>KG57dEPBB8þ�p:"HBZF]ILdö‡[cRR#"˜kbLGQtRSþÄ7FƒK;P&-Dq(&"!þÄ<+,==+,<Wÿd2z†�˜£ø²P+±=l33´Q+±~22²+´™7+²P+´N+°(/´Š++°�/´0++°a/´—++°Ÿ/´x+°„/´D+°r/²FZh333´ 7+² 222°¤/°Ö±¡é°¡±œ+´&+°±m+±lé°l±d+´•+°•±‘+´^+°^±V+´&+²V +³@VP +°±+´J&+²J +³@JO +°J±@+´{+°, Ö±‡é°{±€+´:+°:±5+´$+±¥+±¡±uv99°œ±x99°± r99±lm° 9±•d± h99°‘²af999°^²Z\999±V°9±J°9±{,±F99±€‡¶(=~D„Š�$9°:² 8Œ999°5°39±�г,‡3Œ$9±aQ±$599°—´@{œ¡$9°Ÿ¶:JV€v$9°x´^d‘•$9°„±8‚99±rD´ \f“$9° °901%#"5476326326323&54632#".547632654&'#"&54763&#"!5!27654'&#"#"&547&#"#4'&#"6323254'&#"3254&#"4'322654&"µ]K¶IPƒŽ<6£;:0SqMGJ¾/¦‚K}#xB?XW‡1_GH-1Jg[NC_ZV\;:^"lf>? 5üøJ5559Y@SCBQMA]Y5/=W<6^GWÖ82r& FU Y0MX,Rý"JPNLý?)22R43£Ldö‡[cRR#"[UsuUFu…²L9\U|œli:&4.([”Yƒ:Ff}i[aDC=ABe>;B0@<=J[AGAgJjeHlBB8þ�p:"HBZF]+7J‘Z?aþi#Ÿ\,2Vr�<+,==+,<Yÿò.[dnu‹²:+²+± J33´t++±\v22°p/´++°|/´D++°D°e Ö´+C+°4/³$2?$3´T7+²PX222°€/°LÖ±~é°~±y+´G1+°G±:+±9é°9±.+´l+³l.+´r&+°l±h+´(&+°(± +´1+°±+´&+°2°´_+°_/±�+±~L±AB99°y±DJ99°G±?P99±9:°R9°.°T9°°49°l°09±hr³+eVj$9°(²&X999° ±t99°°Z9°¶ \bo$9±_°9±pt·G _by~$9°²L}999°|°B9°e± 99±4D·(.Rhjl$9°T²&VZ999012#"&'#"'&54;2654&"#54&'"#"&547&#"#"#4'&#"632#"54763263263262654"2654'#"32%2654&"MPg=>Q:.N M­d-J÷ÚStDh?QQ@>(ÿ#:=$Œ@3<+,;:X<Yÿ0„4t~‡�™²M+²]+´�7+°M° Ö´+°/´ +°%/´�++°�°u Ö´ +°‰/´)+³–)‰+´W++°A/´€+°R/°G3´c++°c°k Ö±go33´:+°12°š/°_Ö±˜é°˜±“+´Z1+°Z±M+±Lé°L±C+´†+³'†C+´‹&+° 2°‹´+°/°†±‚+´>+°>±6+´51+°5±.+´s&+°2²s. +³@s +°s´x+°x/°s±+´+±›+±˜_±TU99°“±W]99°Z±Rc99±LM°e9°C°g9°'°G9±†°E9°‹±A99°‚´@i€„$9°>³%:<$9°6°)9°5°m9°.·#* ouz|ˆ$9±sx³$9± °9±‰u@ 'Z#x|‹“—˜$9°–³U_z$9±W)²56999±R€·>CE.ems„$9°:°<9°c°i901#"3!%"'&5463%2654'#"&'#"54?>54&#"#54&#""&547&#"#4'&#"632#"547632632632632264&#"$2654';22654&"íBUiPýöPP±ýB5(.S82EZT9/J QªØóÝ3V=E15@QQ@ 8JhJ6;-/[71eJ;lP75‹****þ4#A9²Ö­ˆ«üb)43T440 `GPf*+A30;F1[#+6I2'dt8).9G6A==E362DD26-"#;þ�p9$ Š]F]ILdö‡[bV[!!KM/.T1ï%6$$6%ê"46˜C3#<+,;:X<Yÿ/Ÿ4‚Œ•�§Z²a+²q+´ž7+°a° Ö´ +°/´++°9/´›++°›°ƒ Ö´3+³&›9+´'+°—/´=+³¤=—+°T3´k++°�2°. Ö´+°f/°[3´w++°w° Ö±{33´N+°E2°¨/°sÖ±¦é°¦±¡+´n1+°n±a+±`é°`±W+´”+°; Ö´™&+°2°™´+°/°”±�+´R+°R±J+´I1+°I±B+´&+°02²B +³@ +°´†+°†/°±#+°*2´+° 2²# +³@#& +±©+±¦s±hi99°¡±kq99°n±fw99±`a°y9°W°{9°;°[9±”°Y9°™±�U99°�´ T}Ž’$9°R²NP999°J±9=99°I°�9°B·37>ƒ‡Š–$9±†±.99°#³ !$9°°9±°9±q°9±ž3±#99±'ƒµ7;…™¦$9°—· *0n†Š¡¥$9°.²s‡ˆ999°¤°i9±=± ?99°k²IJ999°f·RWYBy�’$9°N°P9°w°}90123#!"3!!"&463!254+53254'&##"'&'#"54?67654&#"#54&#""&547&#"#4'&#"632#"5476326326326264&"$2654';22654&"GRj ,2 %8)ýOOÙý:PQ9‹'%)%(9=T8.%$RªÙôÜK5GE15>QQ@ 3GdH2;-/[71eJ:œ**8++þ0$@8¯Õ¯Š ©üg)43T444aP0#-:5+?,*A8b;',?0!$,6I*dt @.9F7D@=E0<2HH2<*"#;þ�p9$ Š]F]ILdö‡[bV[!!KMþ/%6$%%æ$9:–C3#<+,;:X<Wÿòå-fr~Šd²V+°83²+²,H333´C+±o{22°…/´a7+°[/³$4>O$3´7+³ $2°‹/°Ö±ˆé°ˆ±‚+´d1+°d±V+±Ué°U±K+´w&+°w±s+´D<+°D±9+±8é°8±0+´k&+°k±g+±(é°(± +´&+±Œ+±ˆ±^_99°‚±a99°d±[99±UV° 9±wK°Q9°s´ HBM$9°D±>99±89°9±k0±499°g³,&2$9°(±$99° ±99±V°9°…@ 0D(Kgkdsw$9°a² _999°[· &2BMiu$9°± 9901"&547632632632632632'>54'&#"#"'&547&#"#4'&#"#"#"&547&#"#"#4'&#"632%4'3276%4'32762654&#"\^JP†…HAœ6A@OpKBœI53]o¨‹<5E>?\ p39WP:9y A`Y/-9n39WXiy%=UZ91;Y99_HZ_Gmv 8:ýZpt 9;ý*34),35 ‰m‡[bPP&&PP´o»]%€M]BD t‰[EMIH\˜b =6þ�l9! p�[EMƒa›g C6þ�p9#DD[F^HLdí†SOŠ:288-?‡RS†<088,d9+*74,+:Wþóë-p|ˆ” §²`+°B3²+²6Rƒ333´•C+²'y‘222²+°!/´}++°›/´k7+°e/³.>HY$3´7+³ $2°¡/°Ö±žé°ž±˜+´n1+°n±`+±_é°_±U+´�&+°�±‰+´N<+°N±C+±Bé°B±:+´u&+°u±q+°$2±2é´†+°2±*+´&+°2°´€+°€/±¢+±ž±hi99°˜±k99°n±e99±_`° 9±�U°[9°‰´ RLW$9°N±H99±BC°9±u:±>99°q³60<$9°†±.99±*2³(!}ƒ$9°€°9±}³$€†$9±•`°9°›@ :N2Uqun‰�$9°k²*i999°e· 0?\ p39WP:9y A`Y/-9n39WXiy%=UZ91;Y99_HZ_Gmv 8:¤)79'(88üÞpt 9;ý*34),35 ‰m‡[bPP&&PP´o¤F0ZD_aBC`@Š]BD t‰[EMIH\˜b =6þ�l9! p�[EMƒa›g C6þ�p9#DD[F^HLdí†SOŠ:288-þ•7)(88('9ª‡RS†<088,d9+*74,+:WþÊå-r~Š›§³÷²e+°G3²+±;W33´¨C+±{¤22²…+´+++°$/´‹++°”/´+°®/´p7+°j/³3CM^$3´ 7+³ $2°´/°Ö±±é°±±«+´1+°±e+±dé°d±Z+´ &+° ±œ+´S<+°S±H+±Gé°G±?+´w&+°w±s+±7é³™7s+´'+°'/´™+³ˆ7s+´—+°—/´ˆ+°7±‚+´‘+°2°‘±/+´&+° 2°´Ž+°Ž/±µ+±±±mn99°«±p99°± j99±de° 9± Z°`9°œ´ WQ\$9°S±M99±GH°9±w?±C99°'´;Au{$9°s°59±—™°39°ˆ°9±‚7¶+-$…‹”$9±…µ' Ž�—™$9±+e°9±®¨@ 7?SZswœ $9°p²/n999°j· 5AQ\už$9° ±9901%#"547632632632632632#"&547632654'&#"#"'&547&#"#4'&#"#"#"&547&#"#"#4'&#"6324'32762654&#"2654'#"&'4'32762654&#"¼_LºJP†…HAœ6A@OpKBœI53]o¨VR45KJk54L P>?\ p39WP:9y A`Y/-9n39WXiy%=UZ91;Y99_HZèmv 8:‡"$"!0B9*)8 Düÿpt 9;ý*34),35£Ldö‡[bPP&&PP´o£Q7`L45kJK54H‰]BD t‰[EMIH\˜b =6þ�l9! p�[EMƒa›g C6þ�p9#DD[F^ †SOŠ:288-þÜ"" "pB0+:7).DÓ‡RS†<088,d9+*74,+:YþïM.*5¼²0+´7+²+°/´+++° /±é°/´&7+°6/°#Ö°2´1+°±+´3+°3±.+°2´ +´1+°(2±7+±#°9±3² 999°.¶& $9° °)9±0+± 99°° 9° ²999±²#()99901";2#"'&547&'732654+"&54632&264&#"JA_yhÂSC_DD.0"yH1B�B`ybWr‹fªY1D>)77)(89æ31N–Z/1SD^02@7-L5J31IPKSY]5JýK7R89('9YþÈM.*6Fø²1+±é²+°/´8++°@/´++° /±é°/´&7+°G/°#Ö°2´1+°±+´E+°E±C+´4+°4±.+´=+°=±:+°2´ +´1+°(2±H+±#°9±E°9°C± 99°4±&99°.¶78@$9±:=° 9° °)9±1+µ :>?XZ~h(87)'89þýaB.' QSmwSS¦w‰U,gC`Y>>>=ZW>?~þ…8()78(&:YþÔš.+:Ó²&+´++²+² +°/´,++°4/´ +°/´7+°;/°Ö´+°±+´8+°8±6+´)+°)±#+´1+°1±+°/2´+´ +±<+±°9°8°9±)6±99°#´,34$9°1° 9±& µ /168$9°° 9°±9901.5462#"&544&#"3262654&#"2654'"&'Ic�¨î«tfkJIk-YX}~WX€z##!!/D:R9 C Ÿkv§§v‘U2pIllI=KX}}XW}}þÍ#! "pD.*=8(.DZþó 4:Cß²@+±&33´7+°22² +²+°/´<++° /´+7+°D/°(Ö´#+°#±+´/<+°/±5+±8é°8±+´B+°B±+°=2´&+´ +±E+±#²%&+999±5/°9°8°9±B°9°´ $9±@<± 99°± %99° ¶#(.$9°+²6799901%2654'7#"&547&'#"&=4&#"&5463232653264&"KY}(£dV0/DB`$R'9qm~H?M\„*žnfsNE:JTURP88P8=yW¥G;WÍ™Q/aA20aB8,=X„`hCd„[�B8VÃ}¨“rUFQN;^þ¢8Qþù8P88('ZþÏ 49EU²+±%@33±1é°2² +²+°/´F++°N/´:+°/´*7+°V/°'Ö´"+°"±+´.<+°.±4+±7é°7±+´S+°S±Q+´C+°C±=+´K+°K±+°I2´&+´ +±W+±"²$%*999±4.°9°7°9±S°9±=CµFN$9°K° 9±:· =CIKQS$9°1± $99°¶"'-$9°*²5699901%2654'7#"&547&'#"&=4&#"&54632326532654&#"2654'#"&'KY}(£j\kJIk3E9qg„J=M\„*žnfsNE:JTUg!#! /D9*)9 C=yW¥G;WÍŸQ3jJjjJI42XehDc„[�B8VÃ}¨“rUFQN;^þ¢8Q»!"! qC/#*>9(.DZÿ 3GRê²4+²&+° 3´B7+°2²B& +³@BG +°/´Q++°K/´7+°./´:7+°S/°6Ö´1+°1±)+´?<+°?±+´M1+°M±E+´1+°±+´ &+±T+±)1²34:999±M±&B99°E°9°³$KQ$9°µ  H$9±KQ±99±B&±399°.¶ $)16>$9°:° 901%327654'7#"'&54>3267#"'&'#"&=4'&#"&547632326534&#"32‹Y:M+'*¢myºN>R6L,E;M@66B81; +cˆ$$?M\%ž=Ctg92RA:MQ?_-a7($jÌ7N=9P®<?J=O/+„*ž:Bqhq“9KTÉ/4T$s,.M#HPFZ*$06Y$qXJFNW",E2Ö6M@9NžB:OÊoLSSS=>_bC\B=U•?7O¾tOU‰qR�J9Pü G5d/2=‡K79(AUCB(9N6_,1?}SnaL5X,"ææ .Zý½ 44mvk²_+°i3´T+°D/´n+°M/´e+°52°/°3´/7+°2°/´)7+°w/°%Ö´ +° ±+´-<+°W2°-´\+°\/°-±P+´c+°c±2+±é°±h+´k+³Gkh+´u+°k±+°82´ &+´=+°A2°=´q+°q/±x+± ²"#)999±P-µ/TYZ_$9±2²Me999±kh°K9°u²I999°@ 5 :;?Dnr$9±Mn³GAZr$9°e²?IY999°T¶8=KPW\b$9°_°:9°±#;99°/°"9°¶  %,$9°)² 3499901%327654'7#"'#"'&=4&#"&547632326532654'7#"&547&'#"&=4&#"&54632326=3264&"‹V8O.'}(£?Esv;9qn>?J=O/+„*ž:Bqhq“9KTÉ/4T$sCCI42K#7 PFZ*$06Y$qXJFNW",E2J,,<++Ö6M@9NžB:OÊoLSSS=>_bC\B=U•?7O¾tOU‰qR�J9Pü G5d/2=‡b7#M3JK23#$AUCB(9N6_,1?}SnaL5X,"ææ .Ô*<,,<*Zý¢ 4/go~ž²Y+°c3´N+°?/´p+°x/´n+°G/°j3´_+°02°/°3´*7+°2°/´$7+°/°!Ö´+°±+´(<+°Q2°(´V+°V/°(±J+´]+°]±-+±é°±b+´e+°e°| Ö´A+°A/´|+°e±h+´u+°u±+°32´ &+´8+°<2°8´s+°s/±€+±²$999±J(µ*NSTY$9±-²G_999±Ab°E9±|e±C99°h@  06?5lpw$9°±:>99±Gn¶A/±:K33´X+°a2°e/´k+°/°3´7+° 2°"/´.7+°t/°*Ö´%+°%±+°M2´2<+´H+°2±A+´U+°U±+±é°±[ +´^+°^±h+´r+°r±+´&+°°7 Ö´n&+°n/´7&+±u+±%³"'(.$9±A2³EJKQ$9°U±99±²>X999°^°<9±rh´ :a$9°n²e4999°°c9±X>±>PHU;M8\,1:N9:J&r&21#Ýè"(kD03C¯$.!7<Zýà 43s|… ²Z+°43´N+°y2²e+°>/´}+°G/°T3´a+°j2°n/´t+°/°3´7+° 2°"/´.7+°†/°*Ö´%+°%±+°V2´2<+´Q+°2±J+´^+°^±+±é°±d +´g+°g±A+°q2´„+´{+°„±+´&+°w Ö´7&+°;2°7´€+°€/±‡+±%³"'(.$9±J2³NSTZ$9°^±99±²Ga999°g°E9±„A² C999°{±j99°w¶>n4}�‚$9°±9l99±G}³A;€ƒ$9°aµC9ES�‚$9±tn´QV^Jl$9°N±7q99±Z°(9°°'9°"¶%*1$9°.²99901%2653327654'7#"'#"&=4&#"&5476322#"&547&'#"&54'&#"&547632326=3327#"&546264&#"264&"³:JT+,7M.)}(£BEpv;9qf…J=L]„*ž:BqgrW?EEEI42KO KGM :-2V q*+J],$"+EC+^+/?D2"!3;,,<**SI:Pþ°8%&?:NžB:OÊqLQSSwcbC\}W•?7O¾tOUŠpR�SXFt<"P3JK2+ ->PHU;M8\,1:N9:J&r&21#Ýè"(kD03C¯$.!7<þ§*<--<*Zý£ 4/mv~�Ö²T+°03´I+°s2²_+°:/´€+°‡/´}+°B/±Oy33´[+°d2°h/´n+°/°3´*7+°2°/´$7+°Ž/°!Ö´+°±+°Q2´(<+´L+°(±E+´X+°X±-+±é°±^ +´a+°a±k+´u+°{2³Œuk+´<+°99°u´:d‰$9°w@ 0 hnsy}€‡$9°q±9599°„°f9±B}µ<7‚„ŠŒ$9°[³>5@N$9±nh´LQXEf$9°I±3k99±T°9°*°9°¶ !'$9°$²./99901%32654'7#"'#"&=4&#"&54632326532"&547&'#"&54'&#"&54632326=3327#"&546264&#"4#"322654'#"&'‹V8JZ}(£‰nv;9qhƒJ=M\„*žnhq“9KTì>FNMRrR&@ KGM :-2V qVI],$"+EC+^+/?D2"!3W,--,PJ3 +! + Ö6MtSžB:OÊs›SSwcbC\|X•?7O¾yŸ‰qR�J9PýÚXE:)S9RR96)+>PHU;M8\,1:PqJ&r&21#Ýè"(kD03C¯$.!7<ø++-V3%"/,%Zþ� 44;CK ²:+´D++°7/´B+°/°3´/7+°2°/´)7+°L/°%Ö´ +° ±+´-<+°-±2+±é³H2+´7+°7/´H+°±J+´@+°@±C+´6+°6±+´ &+±M+± ²"#)999±2-°9±H7°9±J²:BD999°@³ >$9°C° 9±DB±@H99°:°>9°°#9°/°"9°¶  %,$9°)² 3499901%327654'7#"'#"'&=4&#"&54763232653!54324'3'"654‹V8O.'}(£?Esv;9qn>?J=O/+„*ž:Bqhq“9KT+þ“¸µ=Ne›�,,€Ö6M@9NžB:OÊoLSSS=>_bC\B=U•?7O¾tOU‰qR�J9Pýª§ÉÆl!']W÷L9kVZ@ZýÀ 44FNVbF²>+´O++°5/´W+°]/´N+°/°3´/7+°2°/´)7+°c/°%Ö´ +° ±+´-<+°-±2+±é°R2°´;+°;/°±8+´`+°`±U+´K+°K±Z+°G2´D+°@2°D±+´ &+±d+± ²"#)999±2-°9±;°9±`8²:MO999°U°>9°K¶5 IW]$9°Z° 9°D°B9±]W±D899°N³;AB:$9°O±KS99°>°I9°°#9°/°"9°¶  %,$9°)² 3499901%327654'7#"'#"'&=4&#"&54763232653"&547#5432#4'3'"6542654&#"‹V8O.'}(£?Esv;9qn>?J=O/+„*ž:Bqhq“9KT°2K ޏµ#INdš�,,€0++++Ö6M@9NžB:OÊoLSSS=>_bC\B=U•?7O¾tOU‰qR�J9PûšK20#§Éƪ"13Jzl!']W÷M8kVZ@þ6*,-+Zý§ 4/AIQYhz²9+´J++°0/´Z+°b/´X+°T/´I+°/°3´*7+°2°/´$7+°i/°!Ö´+°±+´(<+°(±-+±é°M2°´6+°6/°±3+´f+°f±P+´F+°F±R+´_+°_±I +´<+°?2°<´]+°]/°<± +´ &+±j+±²$999±-(°9±6°9±f3°59°P´9JHVc$9°F@ 0DTXZb$9°R°a9°_° 9±<]°=9±TXµ?3]_df$9°I³6<=5$9°J±FN99°9°D9°°9°*°9°¶ !'$9°$²./99901%32654'7#"'#"&=4&#"&5463232653"&547#5432#4'3'"6544#"322654'"&'‹V8JZ}(£‰nv;9qhƒJ=M\„*žnhq“9KT«9S$~¸µ"%RNdš�,,€U,--,*#3 ,@+ 4Ö6MtSžB:OÊs›SSwcbC\|X•?7O¾yŸ‰qR�J9Pû�R97'§Éƪ(68S“l!']W÷M8kVZ@þž,,-V4$!/+$4Zýì 44JR[c?²=+´U++°E/´^+°b/´5+°9/´Q+°/°3´/7+°2°/´)7+°d/°%Ö´ +° ±+´-<+°-±2+±é°Y2°´:+°:/³H2+´\+°±S+´O+°O±9+°K2´@+°@±+´ &+±e+± ²"#)999±2-°9±H:°9±S\¶=C5QU^b$9°O´ M`$9°9±7 99±b^°H9°5°79±UQ±OZ99°=°M9°°#9°/°"9°¶  %,$9°)² 3499901%327654'7#"'#"'&=4&#"&54763232653265!5432#"#"&54674'3'4#"63254#"‹V8O.'}(£?Esv;9qn>?J=O/+„*ž:Bqhq“9KTeV"þѹ±cQ3SH»Ib—s)!SR2K9Ö6M@9NžB:OÊoLSSS=>_bC\B=U•?7O¾tOU‰qR�J9PüL'4¢ÌÈ¥MY%$Æm '`U·@%CkVð\ÿ#§3BÓ² +±-33±:é°2² +° /´++°'/´27+°C/°Ö´+°±/+´*+°*±#+´7<+°7±=+´@<+°@±+´&+±D+±/°9°*°9°#²,-2999±=7²  999°@°9°³$9±: ±,99°'@ #*/6$9°2³>?$901%2654'7! 47!2767#"&'#"&=4&#"&5463232653´KYy&¢Ã˜þÈýH^@WxÍumD.0:k ,~bˆI>N[%žxuk:5QB:KSS=yW¥G:NÕþÞrYó—…'w~þP(#U3'ZƒahFaƒ\—C:X¾… OImUCTN;^þ¢8Q\þ|§3MX²++±&833±Eé°2°/´N++°/´!++°2/´=7+°Y/°Ö´+°±:+´5+°5±.+´B<+°B±H+´K<+°K±+´W+°W±Q+°2´ +°2±Z+±:°9°5°9°.²78=999±HB²!+999°K°)9±W°9°Q¶ $&$9±N³ QW$9°!±V99°+± T99°E±$799°2@ ).5:A$9°=³IJ$901%2654'7#"&547# 47!267#"&'#"&=4&#"&54632326532654&#"´KYy&¢z1C/0DB_ŒÊýO^@WqÀñI.0:k ,~bˆI>N[%žytk:5QB:KSSƒ(87)'9:=yW¥G:NÕÞxU8D/0`C)ó—…'w~þPFZ3'ZƒahFaƒ\—C:X¾„¡OImUCTN;^þ¢8Qþ�9()79N:\þR§3KVf=²*+±%733±Cé°2°/´W++°_/´L+°/´ ++°1/´<7+°g/°Ö´+°±9+´4+°4±-+´@<+°@±F+´I<+°I±+´d+°d±O+´\+°\±+°Z2´&+´ +±h+±9°9°4°9°-²67<999±F@² *999°I°(9±d°9°O@ #%TW_$9°\° 9±L³ Zd$9° ´OT\b$9°*² QR999°C±#699°1@ (-49?$9°<³GH$901%2654'7#"&547# 47!267#"&'#"&=4&#"&54632326532654&"2654'#"&'´KYy&¢…4FiKJj ‡ªýO^@WqÀñI.0:k ,~bˆI>M\%žytgsQB:KSTk"#.#!/D9*(9 C=yW¥G:NÕçx]=JjjJ!ó—…'w~þPFZ3'ZƒahG`„[—C:X¾„¡“rUCTN;^þ¢7RþÈ"""!qC/ +=9'.D\þö3.DP\,²+±"W33±.é°92²+²+° /´Q++°?/´E7+°/°K3´'7+°2°]/°$Ö´+°±+´++°+±2+´51+°5±B+´N&+°N°Z Ö´+°/´Z+°N±H+±é³TH+´+±^+±²!"'999±2+°9°5°9±N°9°Z°99°H· ?EKQW$9°T°;9°°<9±Q³TZ$9°.±!99°?±+99°E²$999°²W–D:X¾… t:¬@W,.8Qþ�?%‚b,dHKcþì=+)<9+*?þ9('9:&':\þÒ3.AMXhR²+°!3±-é°62²+²+° /´Y++°a/´N+°Q>,CE=K\ƒ&¡AEtµI@7''MqFa9..Œag@*89)(01S`+c7(%j.*RdDÇ•¬#B719h!NMÛeI^†Z ::QÅzQZþþSBP+,6PþŸ8GN>MIfFHfþì=+*;:*+>þP  Zÿ'Ë2MY²'+±#433´?C+°H2°/´++°/´O7+°T/°.3´++±922°Z/°Ö´+°±6+´1+°1±*+´<+°<±B+´E1+°E±+´W1+°W±J+´ 1+±[+±6°9°1°9°*²349999±B<²'999°E°%9±W°#9°J´H!Q$9±?'±!399°°%9°Oµ*16<$9°T´ +;K$9°²CD99901%"&54632! '&54767! 7#"'#"&=4&#"&54632326533275&2654&#"ÿE]bNf1'�ªþ�þ®·¾ =64²¥,Už82ŠK@gdt@=JXƒ&¡}q¼LA6KPuJ¦FHV;;*(5ÓfGKdUEkÿ~†y|úUC0:EØpešTO{ghGa‡Y ::QÅ€¤þüUCSX9Tþš=FÒ"&G=+*>=*)!Zþ|Ë2Xdna²2+±.?33´JC+°S2°/´f++°/´*++°/´Z7+°_/°93´++±!D22°o/°Ö´&+°&±A+´<+°<±5+´G+°G±M+´P1+°P±+´b1+³mb+´+°/´m+°b±h+´+°U Ö´ 1+±p+±A&°!9°<°"9°5²>?D999±MG²2*999°P°09±m°9°b°.9°h@  SZ_,ej$9°U°\9±f³gm$9°*±h99°2± j99°J±,>99°°09°Zµ&50:EØpešTO{ghGa‡Y ::QÅ€¤þüUCSX9Tþš=FÒ"&G=+*>=*)!ý…9P88('ZþcË2Zfr�„²3+±/@33´KC+°T2°/´t++°{/´g+°/´+++°/´[7+°a/°:3´++±!E22°‚/°Ö´&+°&±B+´=+°=±6+´H+°H±N+´Q1+°Q±+°2´d1+´€+°d±j+´x+°x±v+´+°³ +´W1+°W/´ 1+±ƒ+±B&°!9°=°"9°6²?@E999±NH²3+999°Q°19±€°9°d±/}99°j@  T[a-pst{$9°x±^99±g³v€$9°+´jpx~$9°3± m99°K±-?99°°19°[µ&6=BH$9°a´ 7GX$9°²"OP99901%"&54632"&547#".54>73 7#"'#"&=4&#"&5463232653326='2654&#"2654&#"2654'#"&'ÿE]dL__„5Hj”k ‰º|е~H",+6'#dµàŠUž82ŠK@gdt@=JXƒ&¡}q¼LA6KPuJUi E+;;*(53-#$"!\E9*(9 ÓfGKd‘té~\>JjjJ& Iq©l@h@4//1X5uªa-šTO{ghGa‡Y ::QÅ€¤þüUCSX9Tþš=Fpb)G=+*>=*+>ýü"""!pC.!+<9'-Wÿò’.8HS÷².+°$3²+°3´J7+°<2°O/´6++°E/±é°1/±!)33´7+± 22°T/°Ö±Ré°R±L+´&+°±.+±-é°-±%+´$1+°$±+´9&+°9±@+´1+±U+±R±3499°L±699°±199±-.° 9°%° 9°$°9±@9´!$9±OJ¶94@$9°6°B9±E°9°1± 9901%#"54632632632#"&54632&#"#4&#"#4#"632327654'&+"2654&#"±]Hµ ˆxB;s‰*A€ƒ´7:,+Wÿ 2JVa7²@+°63²+°)3´X7+°N2²+°/´C+°]/´H++°T/´0+°C/±2;33´7+± 22°b/°Ö±`é°`±Z+´&+°±@+±?é°?±7+´61+°6±,+´K+°K±P+´&+°&±"+´+±c+±`±EF99°Z±H99°±C99±?@° 9°7° 9°6°9±K,°9°Pµ)20$9°&±$99±°9°°9±]X@ "&,KFP$9±TH±$R99±C0² 99901%#"54632632632#"'7327654'#"&54763&#"#4&#"#4#"6323254'&#"2654&#"±]Hµ ˆzE3y{6;m›Lq€MU‰UD8@k?:‚^[Od=>X"c=NPN<;JU¦VpYš9/r&AYü–P32(*3£Jg÷‰¼QQQU… ¥‚�`j.E*SJnÉ%8HiƒuV[GH?N=þ¡_;LL;þ¡_‡ŒWF`)6P—XAhË;*+>:,+WÿòJ/ep0²[+±,Q33²+°.3´g7+°32°7/±&é±!#22°/°3±Gé°l Ö´c++°^/±MV33´7+± 22°q/°Ö±oé°o±i+´&+°±[+±Zé°Z±R+´Q1+°Q±?+´&+°±5+°I2´*+°2±r+±o±`a99°i±c99°±^99±Z[° 9°R° 9°Q°9°?°09°°19°5·&.3:BM$9±g[°09°7±*199°&²io999°l³?a$9±c°9±^G² 99901%#"54632632632#"/&#"32?632#"'73254#"#"#"&54632323254'&#"#4&#"#4#"6322654&#"±]Hµ ˆxB;xo?4—WAMA."#. ,$*= \O1'_dT.DG//7=.1D^PK>=HU¦VpYÐP32(*3£Jg÷‰¼MMKL"+K.G'#3O K-(B..H'&I>þ¡_>JJ>þ¡_‡ŒWF`°;*+>:,+WþìJ/lxƒt²b+±6X33²+°s3´z7+°:2²,+°1/´m++°>/±&é±!#22°/°3±Né° Ö´j++°e/±T]33´7+± 22°„/°Ö±‚é°‚±|+´&+°±b+±aé°a±Y+´X1+°X±4+´v+°F Ö´&+°v±<+°P2´*+°2°p Ö´.+±…+±‚±gh99°|±j99°±e99±ab° 9°Y° 9°X°9±F4°79°v±8699±p@ &1:>AILTms$9±.<°,9±m±.499±zb°79°>±*899°&²|‚999°³Fh$9±j°9±eN² 99901%#"54632632632#"/&#"32?632#"&547'73254#"#"#"&54632323254'&#"#4&#"#4#"6322654&#"2654&#"±]Hµ ˆxB;xo?4—WAMA."#. ,$*<._CB_,'_dT.DG//7=.1D^PK>=HU¦VpYé(87)(89ünP32(*3£Jg÷‰¼MMKL"+K.G'#3N.DB``BC/ K-(B..H'&I>þ¡_>JJ>þ¡_‡ŒWF`þF8')77)'8 ;*+>:,+WþÈJ/cm}ˆ˜²K+±#A33²Y+´(7+²+°/´n++°v/´e+°//´C+°2° /° 3±8é°„ Ö´S++°N/±=F33´^7+±b22°‰/°[Ö±‡é°‡±�+´V&+°V±K+±Jé°J±B+´A1+°A±!+´{+³2{!+´&+°{±g+´s+°s±*+±:q22´+°2´+±Š+±‡[±PQ99°�±SY99°V±N^99±JK°`9°B°b9°A°9±2!²#%&999±{±lx99°g@  (,/5=djnv$9°s²8 999±*°9±Ye¶!iqsy{$9±(K²%~999°/²*&999°²V�‡999°„³2Q[$9±N8²`99901>32#"&#"32632#"&547&'73254#"#"&546323254&#"#4&#"#4#"632#"546326322654&"2654'#"&'2654&#"šyDZ�A. ' #. * 0JC7iKJk9 .udT.DG/ * 7h4D^PK>=HU¦TrY]Hµ£…xB;xo2!#.#þ¡_>JJ>þ¡_‡ŠYF`FJg÷‹ºMMýM!!!’D. +=9'.D/;*+>:,+Yÿ-ë/y…c²C+°:3²S+´z7+² +° /´++°´+°"/±é°u2°o/°j3±,é³€,o+´L++°F/±6>33´[7+²_c222°†/° Ö´+°±W+±ƒé°ƒ±}+´O&+°O±C+±Bé°B±;+´:1+°:±*+´r&+°r± +°42´+°g2±‡+±W°9°ƒ²IJ999°}±LS99°O±F[99±BC°]9°;² _999°:°a9± rµ',6cj$9±°9°S°9±zC± 99±"´)Ox}ƒ$9°o²WJr999±L€± 99±F,²4ag999°[°901%2! '&476732767654#"#"#"&46323232654#"#4&"#4#"632#"'&547632632632#"/"#"323722654&#"{/AvG¬bþþþɪä89]Apª¼v¿X•D„A.0@C05"œD^QI|FW¦T<5\EY/.K_.&NRˆvB6•\=J;+9 6ü4'32()33¥R3Š4! VvW>=E)uyb•]: (e/QfP'RI>þ¡_>JJ>þ¡_‡GBZF`FJ43OCe‰\`MMKL")T5_l<)+><*+=YþFë/�‰•¬²L+°C3²\+´Š7+²+° /´ƒ++°/´#++°#´+°+/±é°}2°w/°r3±5é³�5w+´U++°O/±?G33´d7+²hl222°–/°Ö´+°±`+±“é°“±�+´X&+°X±L+±Ké°K±D+´C1+°C±+´‰+°3 Ö´z&+°‰±)+°=2´+±o22°´…+°…/±—+±`°9°“²RS999°�±U\99°X±Od99±KL°f9°D²#h999°C°j9±‰3°9°z° 9°)@ 05?lr‚ƒ†‡$9±ƒ³…ˆ$9±#±†‡99°\±&99±ŠL±)99±+´2X€�“$9°w²`Sz999±U�±99±O5²=jo999°d°901%2"'&547! '&476732767654#"#"#"&46323232654#"#4&"#4#"632#"'&547632632632#"/"#"32372264&"2654&#"{/APP/.Š./šþýþɪä89]Apª¼v¿X•D„A.0@C05"œD^QI|FW¦T<5\EY/.K_.&NRˆvB6 _y;+9 6UP77P9üÂ'32()33¥R3r80]B1001B-" VvW>=E)uyb•]: (e/QfP'RI>þ¡_>JJ>þ¡_‡GBZF`FJ43OCe‰\`MMKLPO5_ýä8P88Px<)+><*+=Yþë/u€�›á²I+°@3²W+´‘7+²)+° /´�++°‰/´v+°/´#++°#´+°//±sé°2°n/°–3±4é°4±ké°n´Q++°L/±54#"#"&463232654#"#4&"#4#"632#"&54632632632#"&#"3262654&"2654'#"&'2654&"{0@eSiKIk pþý�еzE299]Ap©¼w„¨šUAA & 0@C0 ( "œD^QI|FW¦Sr\DZ_IZY¤„vB6 _y;+ 0  .L"#.#!/D8+(9 Cü³'32P43¥R3€74eJjkI7/ Fn©o\tG)uyb•]: (8(/QfP(RI>þ¡_>JI?þ¡_‡‰ZF`FKfŠmŒ¹MMKLPO4`,þ*"#"!pB/ +<9'.CÚ<)+><*+=Wþ†..5BOZ+°9/´F++°M/´@++³@M+°(3´P++°V/´+°/±.33´++±"22°[/°Ö±Yé°Y±S+´&+°±+±é°±2+´11+³C12+´<+°¢'|_QnPK°z®=>><°<=þ¢T9;))R;:Sý�)23'(54êE<þ¸H�F?TC./AGb넲HHGGQJpÇO:@ŸVn�þ¸HUW<;;7+±:B22°]/°7Ö±[é°[±U+´0&+°0±%+±$é°$±+´1+°±+´F<+°F±L+±Oé°O±+´&+±^+±[7±*+99°U±-399°0±(:99±$%°<9°°>9°°@9°°B9±LF°9°O°9°² 999±I%±RS99°X·+07FU[$9°-³E$9° ±<@99°>²MN99901%2654'7#"'#"'&=4&#"#4&#"#4#"632#"'&54632632632326532654&#"LY}(£@Erx:7sgBALAnPK>=HU¦VpY]Ha.& ˆxB;xo?4fhuME;ITUúP32(*3=yW¥G;XÌwOWXX?>ghH`ˆþ¡_>JJ>þ¡_‡ŒWF`FJgOCe‰¼MMKO”uUFQM<^þ¢7R;*+>:,+Wþíû4Zcn^².+°$3²+±<_33±Ré°2² +²+°/´\++°j/´6++°)/±!133´G7+±CK22°o/°@Ö±mé°m±g+´9&+°9±.+±-é°-±%+´$1+°$±+´O<+°O±U+±Xé°X±+´b+°b±+°]2´&+´ +±p+±m@±3499°g±6<99°9±1C99±-.°E9°%°G9°$°I9°°K9±UO°9°X°9±b°9°¶ \_$9±\± 99±R.² de999°j·49@Ogm$9°6³N$9°)±EI99°G²VW99901%2654'7#"&547&'#"'&=4&#"#4&#"#4#"632#"'&5463263263232653264&"$2654&#"LY}(£g]/.FB`'X)7sgBALAnPK>=HU¦VpY]Ha.& ˆxB;xo?4fhuME;ITUVP88P8ùóP32(*3=yW¥G;XÌœQ+hB10aB<-@X?>ghH`ˆþ¡_>JJ>þ¡_‡ŒWF`FJgOCe‰¼MMKO”uUFQM<^þ¢7Rþó8P88('Ð;*+>:,+WþÍû4Wcs~�²,+±"33²+±:^33±Oé°2² +°/´d++°l/´X+°z/´4++°'/±/33´D7+±@H22°/°=Ö±}é°}±w+´7&+°7±,+±+é°+±#+´"1+°"±+´L<+°L±R+±Ué°U±+´q+°q±o+´a+°a±[+´i+°i±+°g2´&+´ +±€+±}=±1299°w±4:99°7±/@99±+,°B9°#°D9°"°F9°°H9±RL°9°U°9±q°9±[aµdl$9°i° 9±Xµ gioq$9±O,² tu999°z·27=Lw}$9°4³K$9°'±BF99°D²ST99901%2654'7#"&547&'#"&=4&#"#4&#"#4#"632#"&54632632632326532654&#"2654'#"&'2654&#"LY}(£j^iKJj3E#7sgƒLAnPK>=HU¦TrY]H[Z£…xB;xo?4fhuME;ITUj###"0C8*(:CùÕP32(*3=yW¥G;XÌ O4kKjkJH64X~fhH`ˆþ¡_>JJ>þ¡_‡ŠYF`FJgŠm‹ºMMKO”uUFQM<^þ¢7R½##!!pB0 +<8(/C);*+>:,+Wþýû4hs~Y²(+²"4<333´c7+°2²M+´u7+°/´l++°r/´++°z/´G++°A/±0833±Ué² X\222°/°QÖ±}é°}±w+´J&+°J±=+±<é°<±5+´41+°4±++±`é³`++´i<+°`±f+´<+°±+´&+±€+±}Q±DE99°w±GM99°J±AU99±<=°W9°5±XY99°4°Z9°+°\9±fiµ(clr$9°°&9°´  n$9±rl±99±u(° 9±zc@ &+EJQ`w}$9°G²,_999°A±WZ99°U² gh99901%327654'7#"'&54>3267#"#"'#"&=4'&#"#4&"#4&#"632#"'&5476326 632326533254'&#"$2654&#"zT8Q-)x#b&ƒ�áaHaDZ2VKag0)9lBBnk{#'@5:,+Zÿ1¤3s}S²>+°43²'+±"N33±eé°n2° /±é°´ +°z/´H++°B/±/933±Vé³Z^$2°~/°Ö´+°±R+±}é°}±w+´K&+°K±>+±=é°=±5+´41+°4±*+´b<+°b±h+´k<+°k±q+´&+±+±R°9°}²EF999°w±HN99°K±BV99±=>°X9°5°Z9°4°\9°*² ^999±hb°'9°k°%9°q²"s999±'°9±e>±tu99°z·*FKRb%w}$9°Hµ+aq$9°B±X\99°V³ijs$901! '$'&54767! 767#"'#"&=4'&#"#4&#"#4&#"632#"'&5476326326323265332654'2654&#"þF`™€ÿœþŸþm~þù‚š#=68 —yüG—}YÏ“�(Brky%(A9PN;:JVZLU:6[EZ^IY1)MS‡„5/…ƒ*/qhtJA;VZþ|¤3{…��²F+°<3²/+±*V33±mé°v2° /´}++°/±&é°Œ/´P++°J/±7A33±^é³bf$2°�/°Ö´ +° ±Z+±�é°�±‰+´S&+°S±F+±Eé°E±=+´<1+°<±2+´j<+°j±p+´s<+³ sp+´„+°s±+´+°±y +´&+±‘+±Z °9°�²MN999°‰±PV99°S±J^99±EF°`9°=°b9°<°d9°2²&f999±pj°/9° °-9°s°9±„µ v{*$9±}³ ~„$9°&±99°/²#�999±mF±†‡99°Œ·2NSZj-‰�$9°Pµ 3iy$9°J±`d99°^³qr{$901#"&547! '$'&54767! 767#"'#"&=4'&#"#4&#"#4&#"632#"'&5476326326323265332654'264&#"2654&#"þF`¬^_CB` ¾þ.þm~þù‚š#=68 —yüG—}YÏ“�(Brky%(A9PN;:JVZLU:6[EZ^IY1)MS‡„5/…ƒ*/qhtJA;VZþp¤3‚Ž�§á²Q+°G3²<+±7`33±té°}2° /´�++°—/´ƒ+°/±0é°0´+°¤/´Z++°L/±CU33±ié³em$2°¨/°Ö´(+°(±c+±§é°§±¡+´]&+°]±Q+±Pé°P±H+´G1+°G±?+´q<+°q±w+´z<+°z± +´œ+°œ±š+´Œ+°Œ±†+´”+°”±€+°’2´&+´+±©+±c(²#999°§²W X999°¡²Ze`999°]°U9°Q°f9°P°g9°H°i9°G°k9°?²0m999±wq°<9°z°:9±œ °9±Œš° 9°†¶}7‚��—$9°”± 99±ƒ³ ’œ$9±0µ†Œ”š$9°<²-‰999±tQ±žŸ99°¤·?X]cq:¡§$9°Zµ(@p€$9°L³#$gk$9°i´ xy‚$901"&547! '.54>7!2>7#"'#"&=4&#"#4&#"#4&#"632#"&546 6326323265332654'2654&#"2654'#"&'2654&#"þF`†3Fj”k Âþþm~h¢ŒZ3 -"6(3X‡˜bG—¢¼°Wd=2�(BrkyO?6;VWÿòG.[epW² +°3²+± .33´N7+°C2°V/´\7+³l\V+´(++°/²#a333´97+²5=222°q/°2Ö±oé°o±i+´+&+°+± +±é°±+´1+°±+´@+°@±G+´J1+°J±Y+´d&+°d±_+±é±r+±o2±%&99°i±(.99°+±#599± °79°°99°°;9°°=9±G@° 9°J° 9±dY°9°_²NV999°±QR99±N ±fg99°V´+@ io$9°l²2&999±(\³?R$9°´7;Y_d$9°9±HI99012#"'#"&=4&#"#4&#"#4#"632#"'&5463263263232765332767#"&5462654&"2654&#"„ZiNP„�H?hfqM@:FPK>=HU¦VpY]H_0& ˆxB;xo?3màK<9%&Q>6A]61$($E[bH*::R34ù‡P32(*3.�g†]eRQ{ihG^J;þ¡_>JJ>þ¡_‡ŒWF`FJgOCe‰¼MMKKþûU@W,.8Qþ�?%G=`"dHKcþì=+*;9V>á;*+>:,+WþóB.cmw‚­²++°!3²s+±933´Y7+°N2²+²+° /´n++°a/´d7+³~da+´3++°&/².i333´D7+²@H222°ƒ/°=Ö±�é°�±{+´6&+°6±++±*é°*±"+´!1+°!±+´K+°K±R+´U1+°U±+´l&+°l°v Ö´+°/´v+°l±g+±é³qg+´ +±„+±�=±0199°{±3999°6±.@99±*+°B9°"°D9°!°F9°°H9±RK°9°U°9±l°9°v°Y9°g· adjns$9± q±\]99±sn³ qu$9±Y+²xy999°a´6K{�$9°~²=1999±3d³J]$9°&´BFgl$9°D±ST99014632#"&547&'#"&=4&#"#4&#"#4#"632#"'&5463263263232765332767#"&2654&"264&#"2654&#"×bK¾n]0/DB_zA?hfqM@9GPK>=HU¦VpY]Ha.& ˆxB;xo?3màK<9%&Q>6A]61$($E[ª*::R344(88('99ùzP32(*3€KcôºV-gA20aB4)JQ{ihG^K:þ¡_>JJ>þ¡_‡ŒWF`FJgOCe‰¼MMKKþûU@W,.8Qþ�?%G=`"d=+*;9V>þ8P89N9;*+>:,+WþÐB.]gr�Œײ*+° 3²n+±833´U7+°L2²+²+° /´t++°{/´i+°[/´^7+³ˆ^[+´2++°%/²-c333´B7+²>F222°�/°;Ö±‹é°‹±…+´5&+°5±*+±)é°)±!+´ 1+° ±+´I+°I±O+´R1+°R±+´f&+° Ö´€+³~f+´q+°f±k+´x+°x±a+±é³va+´ +±Ž+±‹;±/099°…±2899°5±->99±)*°@9°!°B9° °D9°°F9±OI°9°R°9±€°9±qf°U9°k@ [^cd st{$9°x°9±va°W9° °X9±ni· kqvx~€$9±U*²‚ƒ999°[´5I…‹$9°ˆ²;0999±2^³HX$9°%´@Daf$9°B±PQ99014632#"&547&'#"&=4&#"#4&#"#4#"632#"&54632632632326533267#"&2654&"2654&#"2654'#"&'$2654&#"×bK¾sciKIl(j9?hfqM@9GPK>=HU¦TrY]H[Z£…xB;xo?3màK<7MQnGYk J(E[ª*::R34 0#$" ^D:*(9 ùÔP32(*3€Kcô½W2pKikIA1 BQ{ihG^K:þ¡_>JJ>þ¡_‡ŠYF`FJgŠm‹ºMMKKþûU@WX:Qþ�;H‚b+d=+*;9V>þi"""’C. +=9(/ä;*+>:,+Wÿ.3nyƒŽ’²*+²$4<333´c7+°m2²M+´…7+°/´}+°‚/´+°Š/´G++³oGŠ+´7+°0/²8At333´]7+² UY222°�/°QÖ±�é°�±‡+´J&+°J±=+±<é°<±5+´41+°4±-+´`<+°`±+±zé°z±f+´i<+°i±+´w&+°w±+´&+±�+±�Q±DE99°‡±GM99°J±AU99±<=°W9°5°Y9°4°[9°-°]9±fz´*c}‚$9°i±(99°°9°w° 9°µ "$mr$9±‚}± 99±…*°"9±c³(J‡�$9°Š³-EQ`$9°o°9°G±.99°0µW[_rw$9°]±gh9901#"'&547632#"'&54763267#"'&'#"&=4#"#4&"#4&#"632#"'&5476326326323265332'2654&"3254&#"$2654&#"ã F(D,,0/Jh.#'<ð±UOlQ8KOLk‚1AN>7@5vh„s4NPNvJU[KV:6Y]HZ1*NRˆ…5/„‚,.ÃU@:MS>9@­l*88P21þ){1‰6€ûmP32(*3+34EJ32bInof“«!E7 6Gh)0W~_c¨P2þš_;NN;þ¡_BGICYF`FJgRF_‰\d\]\XØ}?TL9Xþ¨>(%Ù=+)?<+*?þc#( —;*+>:,+Wþ„..7juz¨°;/´z+°x/´h+°c/±U\33´A+±EI22²cA +³@c` +°X2°/°*3´k++°q/´+°/±033´++± $22°{/°Ö±té°t±n+´&+°±+±é³y+´=+°=/´y+°±v+´8+°8±`+´_+°_±4+´31+°3±Y+´X+°X±-+´(&+°R Ö´M+±|+±t± 99°n±99°±99±y°f9°²;h999±8v±Ac99°`± 99°_°C9±34²"E\999±XY°G9°R¶$*0IO+P$9±z;°P9°x±=899°h²MRf999±Ac±CG99±k´+34$9°q² 999°±(-99°±"9901"#4#"632#"'&54632632632'654&#"#4&#"547632632632'654&#"#54#"#54#"6322654&#"4"2ê¢'|_QnPKcA2|65\U"VULN/*s#T91?EPMGd-= %/?þD)23'(54¢ffêE<þ±O�F?TC./AGbOA[„²HHGGQJpÇO:@ŸVn�þ±O;;::85M†=3+g5EMææNNææM<,A!9*):9R;þ«¢'|_QnPKW{#&E5>I<L[B3#!,Df+@ &/?A3>>65]Q&\R(«-;K üy)23'(54[2424êE<þ±O�F?TC./AGbOA[„²HHGGQJpÇO:@ŸVn�þ±O*A03DZJX?>;:==™2!Ldé9*):9R;þ«32#"'732654'&'#"'&5467&#"#54&#"#54#"632#"&5476326323254'#"2654&#"4#"3ê¢'|_QnPKTF%�FT36Z52%*=N# p3D/;$0B1!"-Fd-? %0>B2>=56\T(YN¬: !1ý)23'(54#343êE<þ±O�F?TC./AGbOA[„²HHGGQJpÇO:@ŸVn�þ±O?>>ò2X5%@9*):9R;þnv:<Wÿò .)3<Gñ² +°3´3++²!+´>7+°C/´++° /±-33±é±%22°±6é°H/°#Ö±Fé°F±@+´&+°±+±é°± +´;1+°;±4+±/é°/±*+´1+±I+±F#±99°@²%!999°°9°°&9°°'9° °9°;°9°4±399°/°-9±C3µ#;@F$9±6²/4999° °'901263 !4&#"#4#"632#"546 >54'4#"62654&#"í@f<©ýØW=;DU¦U;6Y]Hµ 2jœ�=(.UVG6)-ÓüFP32(*3.7,cþÓþÿV;RH<þ¡_„G@YF`FJg÷‰¼M"+þÀÊd?LYA+j29jº…“;*+>:,+Wþö .4>GR]W²M+´57+²,+´T7+²+±33´>++°/´H++°Y/´&++°/± 833±é±022°±Aé°^/°.Ö±\é°\±V+´)&+°)±+±é°±+´F1+°F±?+±:é³P:?+´+°/´P+°:±5+´1+° 2°´K+°K/±_+±\.±#$99°V²&0,999°)° 9°°19°°29°°9°F°9°±>A99°P±99°:°89°5²HM999±K° 9±,H³ KP$9±Y5µ).$FV\$9±A&²:?999°°2901263 ##"&547!4&#"#4#"632#"546 >54'4#"6264&#"2654&#"í@f<©%%`CB`%þøW=;DU¦U;6Y]Hµ 2jœ�=(.UVG6)-Ób(77('99ü P32(*3.7,cþÓþÿ,;C`aB9.V;RH<þ¡_„G@YF`FJg÷‰¼M"+þÀÊd?LYA+j29jº…þl9P88(':;*+>:,+WþÔ¡.4=EQ`ks²++´b7+²+²L333´=++°/´R++°Z/´F+°g/´%++° /±833±0é±22°0±@é°l/°-Ö±jé°j±d+´(&+°(±+±é°±+´D1+°D±+´^+°^±>+±:é°\ Ö´O+°82°:±I+´W+°W±5 +´1+° 2°´U+°U/±m+±j-±"#99°d±%+99°(± 099±°29°°9°D°9±^²=@999±>\°9±:O´FLRZ$9°I°Y9±U° 9±+F· IOUW\^$9±g=µ(-#Ddj$9±@%²:>999° °2901263 ##"&547#4&#"#4#"632#"54632>54'4#"62654&#"2654'"&'2654&#"í@f<©+,jJIk,íW=;DU¦SsY]Hµ£…ˆ2k›�=fEVGDHÓQ""""/C9R9 Dü"P31)*3.7,cþÓþÿ4CJklIE2V/°3±Gé°-/±.é°E/°63´ C+°2°Q/°Ö´+°# Ö´<+°±A+´N&+°N±J+´:<+°:±)+°22´1+°2²) +³@)- +±R+±A³&$9°N± E99°J³ >8C$9°:±699°)±'99°²999±°#9±G>²)999±.-´:AJN$9°E¶28CL$9° ° 901&547632632#!"3!!"&5463!254&+532654'&#"#"&547&#"2654' ?*$ŒZRpS9JTå²1+²"+´?++°/´N7+°S/´ 7+°/°*3´;C+°72°U/°3Ö´.&+°.±&+´I&+°I°K Ö´<+°/´K<+°I±B+±é°±+´&+±V+±.±0199±K&°*9°I°79°B@ "9(NPS$9°²;999±SN±99±?"°09°·&(.3E$9°;°9901%#"'&54763267654'&#"#"'&547&#"&5476326322654&'3254&#"ºt{ÀP>TA-CJ

[Ÿe DD[“I5[½=8®""cZþÔW>C{"%=A=•É $Wÿº-;GX²(+²+´<++²+°:/´O++°K/°S3´++²K +³@KW +°/°!3´2C+°.2°Y/°*Ö´%&+°%±+´F&+° Ö´M+°F±X+´W+°W±?+±é°± +´6&+±Z+±%±'(99±M°!9°F°.9°Xµ2!9€-:79U¢¹jEF'NO@SBEA>[Ÿe DD[“I5[½=8®""cZŠ»‘šDW>C{"%=A=•Ô%=,8%WÿòE-Q\g ²C+²+²&7333´]++°R2°/²-=H333´7+² 222°h/°Ö´ &+° ±+´f&+°f±`+±Né°N±C+±Bé°B±:+´[&+°[±U+±3é°3±)+´$&+±i+± ± 99°f±99°`³J$9°N±H99±BC°9±[:±>99°U´7/=<$9°3±- 99°)±&'99±]C±' 99°@  $)/3:NXc$9°±9901"&547&#"&547632632632632'654'&#"#"&547&"#4'&#"%2654&'!2654&' [h|!-W>=p1‹LW—M28Zw;=ŒN28[€PEŠ.l=>Y-9#59UZi{!V-3T4..(7%4;94:B/1@ýç3/±V33´]7+°f2°/²6EO333´ ++²222°o/°Ö´+°, Ö´#&+²#, +³@#' +°±Y+´m&+°m±i+´S&+°S±K+±Jé°J±A+´d+°d±`+´:&+°:±2+´+±p+±Y#³ /$9°m± 99°i´QVW[$9°S±O99±JK°9±dA±E99°`µ08>C$9°:±699± &°,9±]>²JK999°@ 28:AQSYbk$9° ±9901"&547632632632632#!"3!!"&5463!254'&#"#"&547&#"#4&#""&547&2654'!2654'PJcb,€>I‰<%+^v>5‘9(.[wFC��üˆ$97&‘ûbEYYEsô76U`-2MK`g0'-V[:b.2˜`hÀ,1]aýý,1]aèfJz50MšZBQ""LL""TOm‹“' %DH@AKÖS?> NvI9AtOwK /þá/8 PtFI‰9.,WhLHtC,6W@@bMûò$<9&·û;DYcEø0II)( *¿"W/0JH00`:VV[:#3,1IJ./]Æ+14$d2ýÊ+/Z&8èfJ~6+MšZBR!!ON""�[[IW)%DI?>N5*JM1"[UqG;?::MwO0.þÚ&,2o:G;>9:MqSþ»GfYKnqw$9°B²4< 999±qw±,499±yF° 9±b@  $8BI^h|‚$9°±9901"&547&#"&547632632632632#"'&54>3267654'&#"#"&547&#"#4'&#"%2654&'4&#"32%2654&' Zi|!-Z<k'4$!49TYj{!+.-0T/01(4##6::4:B05Úp/W<0#gý 4;C/1A ‚bžd DD[—L.[½?=§))LL))i^�Á†Ž%D"-27_agqIS %QMATAEz`�c .þ†u0 ! $PQAWDIMY@Dz"&<+°>±5+´$&+±ˆ+± ± 99°…±99°³V$9°Z±T99±NO°9±mE°I9°h°9°x¶B-^dGj$9°w²(o/999°a°:9°>´18 qs$9°5°39±jo²*3q999°-°/9±|B° 9±^@  $>EZd‚…$9°±9901"&547&#"&547632632632632#"54632632654&#"#"&547&#"#4'&#"%2654&'"327&#"#'4&%2654&' Zi|!-Z<."9.ý›4;C/1A ‚bžd DD[—L.[½?=§))LL))g]Œ¹Œ˜€-:/1M—¯q“ %QMATAEz`�c .þ†u0 ! $PQAWDIMY@Dz"&*$�`@D{#!{F Zÿ,î2doz3²V+²+±I33´p++°e2°(/´7++°/²?P[333´7+² 222°{/°,Ö´3+°3±+´ &+° ±+´y&+°y±s+´a<+°a±V+±Ué°U±L+´n&+°n±h+´E<+°E±;+´$&+±|+±3°09° °19°± 99°y±99°s³]$9°a±[99°V±(799°U°9±nL±P99°h³IAN$9°E±? 99±pV° 9°@  $,3;ELakv$9°²199901"&547&#"&547632632632632! '&4767! 7654'&#"#"&547&#"#4'&#"%2654&'!2654&'­Yj{!+W>=n/ŒLW—M2:Yw:;�L2:YzSO‡Àþ þOÇÞ:8Z×µ�½³ƒ=n/ŒLW—M2:Yw:;�L2:YzSO˜a_DB` ±þåþOÇÞ:8Z×µ�½³ƒ+°>±+´ &+° ±+´Ÿ&+°Ÿ±™+´l<+°l±c+±bé°b±Z+´x&+°x±r+´T<+³“Tr+´,+°,/´“+°T±}+´‹+°‹±L+°‰2´!&+´&+±¢+±>°;9° °<9°± 99°Ÿ±99°™³i$9°l±g99°c±0F99°b°9±xZ±^99°,´W\ou$9°r±.Q99±T“³Oƒ�$9°}´)z€†Ž$9°‹°#9±0z³,&‰“$9°Fµ.2}ƒ‹‘$9°²#D€999±–c° 9°@  !8>LTZluœ$9°²<99901"&547&#"&54632632632632#"&547!".546732>54&#"#"&547&#"#4&#"%2654&'2654&#"2654'#"&'2654&'­Yj{!+Yyn/Œµ…M2:Yw:;�L2:Yx¤„3BiKIk ¹þæo²µŠzO-/:8Z+Ir~¦ c�ÜÃ~I\*.LsPZi|!-0YU\3'/Ks=3=D/1Ae"##!/D8*(9Dü°499901"&547&#"&547632632347632!5654'&#"4&"!2654&' Zi|!-Z<:«))Z\|oOeFGDCdþ¹0K€eAE #SMCWDIPDd24Cþû`@D{#!{F Wþ÷þ2ENYd@²5+±)T33´+°M2²+°3´Z++°//´O++°/°<3´7+±$22°e/°Ö´ &+° ±+´c&+°c±]+±Bé°B±8+´1+²8 +³@85 +°±+´M1+°M±2+´W+°W±N+´)1+°,2°)´R+°R/±f+± ± 99°c±99°]³>$9°B±<99±8°9±W2±4I99°N´$H/OT$9±)R°*9±O³,2RW$9±Z5± 699±@  8B]`c$9°²HI99901"&547&#"&547632632347632##"&547!5654'&#"4&"!264&#"%2654&' Zi|!-Z<:«))Z\|mPeFGDCdþ¹,:C``C8.0K€eAE #SMCWDIPDd24Cþüþü7R78('9ý`@D{#!{F WþÔþ2<EQ`kn²/+±#L33´+°D2²+° 3´a++°)/´R++°Z/´F+°/±5@33´7+°2°l/°Ö´ &+° ±+´j&+°j±d+±:é°:±2+´1+²2 +³@2/ +°±+´D1+°D±,+´^+°^±\+´O+°O±I+´W+°W±E+´#1+°&2°#´U+°U/±m+± ± 99°j±99°d³7$9°:±599±2°9±^,±.99±O\°@9°I´ )RYZ$9±#U°$9±F·&,IOUW\^$9±a/± 099±@  2:dgj$9°°901"&547&#"&546326323462##"&547!5654&#"4&#"!2654&#"2654'"&'2654&' Yj|!-Xzp1‹³‡M28Zzž3“�È�/,jJIk-þ^Lua(/KrS`CB^Ch""""/C9R9 Cüñ33265!5654&#"4&#"!"32654&%2654&' Zi|!-Xzp1‹³‡M28Zzž3“�È�¡{'NG,.-$Cgý+4;C/1A ‚bžd ‡\—L.[½‡œ))³kPdމbþ¹t‹1 -*#6=2K~f… œJXŒPDdeDþþ¥ œ`@D{#!{F Wÿòþ.=Fɲ0+²+±%33´>++°+/±433´7+±22°G/°Ö´ &+° ±+´E&+°E±A+±:é°:±0+´/1+°/±(+´"&+±H+± ± 99°E±99°A³6$9°:°49±/0°9°(²%&999±>0±& 99°+· "(:C$9°°901"&547&#"&547632672632'654&#"#4&#"'2654' [h|!-W>=p1‹LW—N27\3:63msHC\O&ƒeR0@Q_867%4;T332#"&#"2654&'h [ 5VN'f_EI‘UPd0D')0 X 9j?O;PS54:(2'!6:SZix#'Z</2!#$%&#EþŸ_8'' #SMCWDI‚b¥] DD[—L.[½=8®''[*3)S2<)&¦`@D{#!{F Yÿ0´.kvF²+´7+²+° /´ ++°>/°33´t+°/°3±fé°i2°b/°_3±!é°E/±/733±Pé±TX22°w/°MÖ´H+° Ö´&+² +³@ +°H±A+´q&+°q±l+´;&+°;±4+´3+°3±+±dé°d±+°+2´&+°\2±x+±A³JK$9°q±EP99°l³>9RC$9°;±7T99±34°V9±d·!/X_i$9± °9±>°K9°t²J999±bf¶AHM;lq$9±E!µ+9CV\o$9°P°R901%#!"3!!"&463!254&#"#"&54632;232>54.#"#4#"#"&547&#"&54632632632#"&#"32632%4&'326´N>üâ$98%�üVDY[Bør#@*=='6 -;MqI�TaJHc\GdZ$€œrE&(Xp;6«9\@D1 ? )' C 3Aýr:&]5+-0„  56þçsQrLmnKlVeG~5.Jžk„MM>.0?"!Jd0\8k2GE\ÿ#à2w‚|²N+°\3´x++°# Ö´$++²+² +°/´++°)/´7+°2°q/´57+°5´t++°U/±9D33´b7+±fj22°ƒ/°Ö´+°±^+´Y&+°Y±Q+´�&+°�±{+±Jé°J±?+´><+°>±/+´v&+°v±'+±722±é± n22±„+±°9°^°9±QY±[\99°�±Ub99°{³NFdS$9°J³Df$9±>?°h9±v/±#$99°'µ,29jq$9°°9±N° 9°#±>?99°x±[99±)$°9°³JQ{�$9°qµ/Y^v$9±U5µ7FShn~$9°b±d9901%2632! '$47! 7654&+53254#"#"&546323254#"#4'&#"#"&547&#"&547632632632#"&#"2654&'÷ T 1P=:uþzþžŸþúHBBã�P„cC9'—�VC S +:<) \ 9€M?OS468'5$"6;RZiw!'\<;p0Œ]X„P08[{CD¯R?SM3 Q 3ýé4:B01?úB.KEb*&?fV”€(r{þÜZ9&,#D7*>+)='?$EþŸ_7'( $ROAXBJ‚b¦\ DB]—L.\¼‚SN''[\$I/=%#Ã_AE{""xH Wÿh/cmx9²+°3´n++°2/´g++°l/´97+°B/±*é°&/°#3±Jé°/±PZ33´7+±22°y/°Ö´ &+° ±+´w&+°w±q+±`é°`±U+´T<+°6 Ö±dé°T±F+±(é°(±>+°M2±/é° 2±z+± ± 99°w±99°q³\$9°`±Z99±T6°9±(F³29gl$9°>·#+99±n² TU999±&*´F`qw$9°J± 99°´ \t$9°°901"&547&#"&547632632632#"&#";2#"'&54632654&+&#"547632654&#"#4'&#"3254&#"%2654&' Zix#'Z<=p1‹LW—S//`=p1‹LW—S//`GSbl„²+° 3´c++²)+±N33´>++°$/´T++°\/´H+°/±.933´7+±22°±Aé°m/°Ö´ &+° ±+´k&+°k±f+±3é°3±*+´F&+°F±'+´`+°`±?+´;<+³Q;?+´^+°^/´Q+°;±K+´Y+°Y±6+´1+°!2°´W+°W/±n+± ± 99°k±99°f³0$9°3±.99±F*°9±`'²)>A999±?^°9±;Qµ$9HNT\$9°K°[9±W°9±H·!'KQWY^`$9±c)° 9±A>@  3;Ffhk$9°±099°°901"&547&#"&5463263263 ##"&547#4&#"%54'4#"62654&#"2654'"&'2654' Ziy!*Yyp1‹µ…S//`@zD¦/,jJIk,é^T 0CrÂ�=dGXGK$ÕL##""/D9R8Dý�4;r0B �cže †]—L.[½¤ 7(`þÓþÿ4CJklIE2 Zl '’MY‹NÀÊdVš5+jK326=!4&#"%54'4#"6"327654'&%2654' [hy!*W>=p1‹LW—S//`#2 .)ý–33´7+°2°]/°/Ö´4+°4±+´ &+° ±+´Q&+°Q±K+±Dé°' Ö´[+°D±;+°U2´&+´!+±^+±4/°19°°29± ± 99°Q±99°'·+8@HN$9°K°)9°[±>99°D°$9°;³#SX$9±+S³'!U[$9°8³)VXZ$9°°9°H° 9°@  /4;DN$9°±29901"&547&#"&547632632"'&547#"'&54732654&#"'2654&'264&#"¨Zh{!,[<;o/Œ[]€O27\ƒLF/A_†0/OUî’’E??�ÌÀäuc'5#"6:S4;B01@r(88('99 ‚bŸc DB]—L.\¼€QR))d\�ÉxS7D`0/E‡‡å¤x'g—¾usưp™ %QKEWDID`@Ez#!zG þn8P88P8Vþ5W2@KWg]²+° 3´A++°!/´X++°`/´L+°(/°]3´3++°/°93´7+°2°h/°+Ö´0+°0±+´ &+° ±+´J&+°J±D+±>é³e>D+´$+°$/´e+³U>D+´c+°c/´U+°>±O+´]+°]±6+°[2´&+´+±i+±0+°-9°°.9± ± 99°J±99°$¶(3AG$9°D±&;99±Uc±999±O>µ!LRX`$9±(L¶$OU[ce$9°3±&R99°°9°A° 9°@  +06>G$9°±.9901"&547&#"&54632632#"&547#"54732654&#"'2654&'2654&#"2654'#"&'¨Zh{!,Yyo/Œ¶‚O27\€•‰4HkJIk@HìþÚE??ɽçuc'/KrQ3p0�MW˜N28Z‚PFŒ.n€Z)7%4:®$2Z$s!'H>Np OG;@Z�F/Y³jP\''[Ri²Z1FŽX€&RE=RAFþ²T/c6'=ŠH3=V@7uB[D_bF]wS?:t�X?BxvD—þÏ&9&$`3Tý¶º--Ydny޲T+°43´G+°=/´e+°N/´r+°.2°r´j++°/±33´Z++°/°$3´++°2°z/°Ö´ &+° ±+°Q2´c&+´o+°c±v+´K+°K±D+´X+°X³X*+±]é°]/±*é°X°m Ö´@+°@/´m+°X±!+°g2´&+°1 Ö´6+°:2°!´:+±{+± ± 99°o°9°c°9°v´INrx$9°KµGTZ`$9°]°&9±@D±$99±m*°B9°1@ .348=ej$9±je±@:99±rN±8B99°G¶16DKQWx$9°T°39±Z± 99°¶ !*`$9°°901%"&547&#"&547632632'654&#"2654'7#"&547&=4#"#"&546322654&'264&#"327654'Xj{ -X=>p0�MW˜N28Z‚PFŒ.n€Z)7%4:®$2Z$s==K32K,Mp OG;@Z�F/Y³jP\''[Ri²Z1FŽX€&RE=RAFþ²T/_6'=†i3$I3JK29&%c7uB[D_bF]wS?:t�X?BxvD—ýš+<,,<+5&9&$`3Tý�º-(S^fv€�²N+°/3´B+°8/´g+°o/´e+°a/´)+°z2°/± 33´T++°/°!3´++°2°�/°Ö´ &+° ±+°K2´]&+´w+°]±}+´F+°F±?+°;2´R+°R³R&+±Wé°W/±&é°?´t+°R±_+´l+°32°l±+°j2´&+°, Ö´1+°´5+±‚+± ± 99°w°9°]±I99°}´DHz$9°FµBNTZ$9°W°#9±t?±!99°R±=r99°&°q9°_@ )./8cgo$9±ae·;5IHjlrt$9°)±3=99°B¶,1?FKQ$9°N°.9±T± 99°¶ &Z$9°°901%"&547&#"&54632632'654&#"2654'7#"&547&=4#""&546322654&'4#"322654'#"&'32654'Xj{ -X{p0�¸„N28Zv¢Œ.n‚X).Ls³%1Z$sC@S79S;>p OGvDw]Ek¼5:t�Y>AxuD—þ++-U3#".,$2N&9D%`3WÿòŽ4FQá²+²$+± 233´G++°2°+/±33´87+±<@22°R/°4Ö´/&+°/±'+´P&+°P±J+± é° ±+±é°±+±Dé°D±+´&+±S+±'/±1299°P±+899°J³$:)$9° ±<99±°>9°°@9±D² 999±G°19°+@  '/4>CM$9°8±:9901%2654'7#"&=4#"#4&#"#"&547&#"&5476326326322654&'¡PP‘+³4=}nzŠ}ZfD?7%4;T[h|!-W>=p1‹LW—M2;fš96np|Jü¬3=p1‹LW—M2;fš96np|J}(87)'99üV3/$9°'±"@99±°B9°°D9±b°9°N¶SU]$9°Z° 9±*L¶ PXZ`b$9±e± 699°1@ '-49BGk$9°<±>9901%2654'7#"&547.=4#"#4&#"#"&547&#"&546326326322654&"2654'#"&'2654&'¡PP‘+³``jKIk3LTŠ}ZgC?.LrQZi|!-Yyp1‹µ…M2;fš96np|Jb0""0";/D9*': Cü_4;C/1A<|b£@7VƲI3mKijJI4„cZ•‰þŸa;N #šIY‹�cžd †]—L.[½¤)+LOznhJ\À"!!’B/ +=9'.C+`@E|!!{F Wÿ–2Xdo&²+´]7+²+°&3´7+²6+°D3±eé° /´c++°=/±#,33´J7+±NR22°p/°FÖ´A&+°A±9+´n&+°n±h+±2é°2±'+±&é°&±+±_é°_± +±Vé°V±+±é±q+±9A±CD99°n±=J99°h³6.L;$9°2±,N99±&'°P9±_±#R99° °9°V² ]c999°µY$9±]c±99±e±C99±=@  29AFPUhkn$9°J±L9901%2654'7#"'&54763267#"'&=4#"#4'&#"#"&547&#"&5476326326324'&#"32%2654&'¡PQ‘,¹v|½O?S>2@B@R E1+?v=6Š}Z:4G22'!6:SZi|!-Z<=p1‹LW—M2;fš96np|J†A^D12ùä3=p1‹LW—M2;fš96np|J†A^@_ )77)(89ú3/²'/X333´I7+²MQ222°ˆ/°FÖ´A&+°A±:+´†&+°†±€+±4é°4±++±*é°*±$+±Ué°U±+´&+°±+´\1+²\ +³@ +°\±+´z+°z±x+´j+°j±d+´r+°r±]+´&+° 2°´p+°p/±‰+±:A±CD99°†±>I99°€³71K<$9°4±/M99±*+°O9°$°Q9±U²!999±z°9±jx° 9°d³Xmu$9°r° 9±p°9±7a· djprxz$9±}°C9±>]@ $4:AFOTU€ƒ†$9°I±K99014632#"&547!532654'7#"&=4#"#4&#"#"&547&#"&54632632632"!4&2654&#"2654'#"&'2654&'õ�bc�/.k”j.þÓŠþ¬PP‘+³4=}nzŠ}ZgC?.LrQZi|!-Yyp1‹µ…M2;fš96np|J†A^@_ ""!!/C8*)9 Cú4;C/1A@bŒ†aþ¹4EJjkIG2A|b£@7VÆ€MYŽwZ•‰þŸa;N #šIY‹�cžd †]—L.[½¤)+LOznhJ\ªbBþÿBaý ""!!pB/ +<8(/B!`@E|!!{F WÿÔ4\eq|e²+°/3´++°a2²<+±&I33´r++°2° /´f++°l/´++°C/²,4]333´N7+²RV222°}/°KÖ´F&+°F±?+´{&+°{±u+±9é°9±0+±/é°/±)+±Zé°Z±+´#&+°#±+´a1+²a +³@ +°a°o Ö±é°/±oé°a±b+°2´&+±~+±?F±HI99°{±CN99°u³<6PA$9°9±4R99±/0°T9°)°V9±Z² !&999±ba¶ fil$9±lf³io$9±r°H9±C@ #)9?FKTYZux{$9°N± P99014632#".54>3265!532654'7#"&=4#"#4&#"#"&547&#"&54632632632"!4&2654&#"%2654&'õ�bc�—y4eL9±eµAHbgh$9±]^°K9±VE¶ MSTY$9°Q°9±n#²/999°*@ &-2>Ds$9°6±89901%2654'7#"&=4#"#4&#"#"&547&#"&547632632>322632'654&#"#54&#"&5476%2654'¡QP‘,²yum|Š}ZcG484:UZi€%4Wtp1‹LTŒOGM[7<3d0o~Já%; RN./y X=1%D*1:\'w/.ýÝ4;o,IVr_š<5Q»�—‡qU�‚þ±O=E )N@?RAFz_“_~Z�F/X´hR\,,/oj`FXV&D78KŠ93)l3D0ææ/H4j'29ˆL87PY>ƒMx;—Wþ„�2Go|†²N+°J3´_+°g2²_N +³@_c +°U/°n3´s+´\ycN +´\+°#/± 033´}++°2°*/±33´6++±:A22°‡/°2Ö´-&+°-±&+´…&+°…±€+±é°±+±é°±H+´k+°k±+°c2±Eé´b+°E±Y+´p+°p±u+´R+°R±+´&+±ˆ+±&-±/099°…±*699°€³#8($9°±:99±°>9±kµAJKmn$9°b°L9±pY±N_99°uµ U]$9±sU°m9°y³HRkY$9±N_°L9±}#²/999°*@ &-2>D‚$9°6±89901%2654'7#"&=4#"#4&#"#"&547&#"&547632632>32462632#"'&546;&#"#54&#"&%3254'&#"2654'¡QP‘,²yum|Š}ZcG484:UZi€%4Wtp1‹LTŒOGM[7<3d0o~Jþ^b˜!'XW?=NC;H: =a=- 0Rt¤ N /ü©4;o,IVr_š<5Q»�—‡qU�‚þ±O=E )N@?RAFz_“_~Z�F/X´hR\,,/oj`FXþïOl:::9VKf.&5?T!Oäç ,%'0l"56Z/f Y>ƒMx;—Wýö�2G��—»²S+°W3´H+°z2²HS +³@H~ +°`/´e+°q/°N3´…+°#/± 033´Ž++°2°*/±33´6++±:A22°˜/°2Ö´-&+°-±&+´–&+°–±‘+±é°±+±é°K2°´P+°P/°±~+´}+°}±+±Eé°‚2°E´t+°t/°E±‡+´n+°n±+´&+³]+´i+°i/´]+±™+±&-±/099°–±*699°‘³#8($9°±:99±P°>9°~µAHMNS$9°}°U9±Et²Wbz999°‡´`ceqx$9°n´ Yl$9°i°9±e`°b9°q°c9°…°M9°H@ KPY]ilnt‹$9°S°U9±Ž#²/999°*@ &-2>D“$9°6±89901%2654'7#"&=4#"#4&#"#"&547&#"&547632632>32"&54632632#"'7327654&'#"&54767&#"#54&3254'&#"2654'¡QP‘,²yum|Š}ZcG484:UZi€%4Wtp1‹LTŒOGM[7<3d0o~Jþ¿0>Ps`PI!)Lƒ$M))rX;2&+@())" ;<4?"#4BZ=,Ü>%2üï4;o,IVr_š<5Q»�—‡qU�‚þ±O=E )N@?RAFz_“_~Z�F/X´hR\,,/oj`FX“J3l&46ŒNp22R 78V_‰#434D0N $I[S9;/0Méé!,¶1\4$>Y>ƒMx;—Wþ��2GNV_iI²L+´Y7+°Q2°I/´U+°#/± 033´`++°2°*/±33´6++±:A22°j/°2Ö´-&+°-±&+´h&+°h±c+±é°±+±é°±I+´^+°^±+±Eé°E±W+´S+°S±V+´H+°H±+´&+±k+±&-±/099°h±*699°c³#8($9°±:99±°>9°I±A99±E±UY99°W°L9°S°Q9±HV² 999°°9±YU±S^99±`#²/999°*@ &-2>De$9°6±89901%2654'7#"&=4#"#4&#"#"&547&#"&547632632>32!5432#4'3'4#"62654'¡QP‘,²yum|Š}ZcG484:UZi€%4Wtp1‹LTŒOGM[7<3d0o~Jzþ“¹´B?]Šr&uüå4;o,IVr_š<5Q»�—‡qU�‚þ±O=E )N@?RAFz_“_~Z�F/X´hR\,,/oj`FXþ:§ÉÆf'eP·< CjP0Y>ƒMx;—WýÂ�2GYajs}�²Q+´d7+°\2°H/´k+°p/´a++°#/± 033´t++°2°*/±33´6++±:A22°~/°2Ö´-&+°-±&+´|&+°|±w+±é°±+±é°±N+´i+°i±+±Eé³rE+´K+°K/´r+°E±b+´^+°^±a+´T+°W2°T´n+°n/°T±+´&+±+±&-±/099°|±*699°w³#8($9°±:99±°>9°N±A99±rK²M`d999±bE°Q9°^³H\kp$9°a°o9±Tn³ U$9°°9±pk±WK99°a³NTUM$9°d±^i99±t#²/999°*@ &-2>Dy$9°6±89901%2654'7#"&=4#"#4&#"#"&547&#"&547632632>32"&547#5432#4'3'4#"6264&"2654'¡QP‘,²yum|Š}ZcG484:UZi€%4Wtp1‹LTŒOGM[7<3d0o~J 2K’¹´I?^‹r&v7,-<**üÓ4;o,IVr_š<5Q»�—‡qU�‚þ±O=E )N@?RAFz_“_~Z�F/X´hR\,,/oj`FXýlK2-$§Éƪ#.3Jxf'^P°< CcOþÐ+<,,<+ZY>ƒMx;—Wý©�2CU]em|†ƲM+´`7+°X2°D/´n+°v/´l+°h/´\++°!/± .33´}++°2°(/±33´3++±7=22°‡/°0Ö´+&+°+±$+´…&+°…±€+±é°±+±é°±J+´d+°d±+±Aé³GA+´z+°A±^+´Z+°Z±]+´P+°S2³sP]+´f+°f/´s+°P´q+°q/°P±+´&+±ˆ+±$+±-.99°…±(399°€³!5&$9°±799±°:9°J±=99±zG°I9°A²\`w999°^±Mj99°ZµDXhlnv$9°f°u9±qs± 99°P±Q99°°9±hlµSGqsxz$9°\³JPQI$9°`±Zd99±}!²-999°(@ $+0:@‚$9°3±59901%2654'7#"&=4#"#4&#"#"&547&#"&54632632>32"&547#5432#4'3'4#"64#"322654'"&'2654'¡PQ‘,²yum|Š}ZcG4/BsPZi€%4Wtp1‹±{OGM[3qd0o~J9S%~¹´!#S?]Šr&)&uV+..+*%2 +@, 5üÝ3ƒMx;—Wýì�2G]env€޲P+´h7+°`2°V/´q+°u/´H+°L/´d+°#/± 033´w++°2°*/±33´6++±:A22°�/°2Ö´-&+°-±&+´&+°±z+±é°±+±é°±+±Eé³mE+´M+°M/´m+°°[ Ö´o+°E±f+´b+°b±L+°^2´S+°S±+´&+±‚+±&-±/099°±*699°z³#8($9°±:99±°>9°M±A99±Eo°h9°f´HPVdu$9°b²`qs999°L² J999°S±99±uq°[9°H°J9±hd±bm99±w#²/999°*@ &-2>D|$9°6±89901%2654'7#"&=4#"#4&#"#"&547&#"&547632632>32267!5432#"#"&54674'3'4#"63254#"2654'¡QP‘,²yum|Š}ZcG484:UZi€%4Wtp1‹LTŒOGM[7<3d0o~J?T!þÖ¸±cQ3SJµ?]Šr%uMT*I5ý"4;o,IVr_š<5Q»�—‡qU�‚þ±O=E )N@?RAFz_“_~Z�F/X´hR\,,/oj`FXþ $/¤ÌÉ£MZ&$ Ái&_P²<!DdPî  Y>ƒMx;—Zÿ#2cn²4+²C+±&P33´d++°2²+°/´ ++°J/±.933´X7+² \`222°o/°Ö´+°±R+´M&+°M±F+´m&+°m±g+´?<+°?±4+±3é°3±++´1+°±+´ +±p+±R°9°M°9°F±OP99°m±JX99°g³C;ZH$9°?±9\99°4± 99°3°^9°+°`9±² $999±d4°O9°J@  +,?FMR^cj$9°X² Z99901%327654'7! '.547!2767'#&'&=4&"#4'&#"#"&547&#"&547676326326322654&'˜R>N( …+¤þó¯þ•þñ€u±ŠHo4Z&šzËz´q g?=HvX:3E35$!69TWi{ ,[vn0Š$OLbL28h˜92m_yý5;B10?âBcM@T•B9VÌþÏqG?mªq�œ*‚€þæX.!VMIkZ?W(*8þŸaC$" $RMCXBJƒažd ˆ[–M.\¼<4W0,))JJ€aþë^BFy#!{F Zÿ#2`k²1+²@+±#M33´a++°2²+°/´++°G/±+633´U7+² Y]222°l/°Ö´+°±O+´J&+°J±C+´j&+°j±d+´<<+°<±1+±0é°0±(+´1+°±+´ +±m+±O°9°J°9°C±LM99°j±GU99°d³@8WE$9°<±6Y99°1±99°0°[9°(°]9±² !999±a1°L9°G@  ()N( …+¤þì´þ’þñ|àx•o4Z–w· g?=HvX:3E35$!69TWi{ ,[vn0Š$OLbL28h˜92m_yý5;B10?âBcM@T•B9VÌþÎpG`uä�œ*‚€þæX.�MIkZ?W(*8þŸaC$" $RMCXBJƒažd ˆ[–M.\¼<4W0,))JJ€aþë^BFy#!{F Zþk2my‰”›²7+²C+±*P33´Š++°d2°/´z++°‚/´n+° /´&++°J/±2;33´U7+²Y]j222°•/°Ö´+°±R+´M&+°M±F+´“&+°“±�+´@<+°@±7+±6é°6±.+´a1+°a± +´‡+°‡±g+´l+³lg+´q+°q/´+°l° Ö´}+°}/´+±–+±R°9°M°9°F±OP99°“±JU99°�³C=WH$9°@±;Y99°7± &99°6°[9°.°]9±‡ ° 9°q@ dij(wz‚$9± n³ }‡$9°&µ qw…$9°C²#t999±Š7°O9°J@ ./@FMR[`gl�$9°U²Wi99901#"&547!".5473 7'#.=4&#"#4&#"#"&547&#"&5463263263232654'72654&#"2654'#"&'2654&'Ž9MjJKj ¹þÖ]ˆ£u€XT1o4Z-JQrm“‚U· dH;8@XiI3/KsPWi{ ,Yxn0аˆL28h˜92m_yR>IM…+¤ª"#"!/D9*(9 Düv5;B10?3`@JjiK5 $2I\{J�œ*‚€>hO?, �•lZ?WN<þŸa?J œJXŒƒažd ‡\–M.\¼ƒ ))JJbjCb„]•B9VÌËþÝ!""!qD.!+=9'/CŠ^BFz"!{F Yþö8.",³²(+´7+° 2²+°3´ ++²  +³@  +°/´$++°/´7+°-/°Ö´ 1+° ± +´<+°±+´++°+±+´&+°2°´&+°&/±.+±+°9°´$($9±&°9±($±9901"&547!3347632#"!4&264&#"–B_$þ@P«GHbeHF$$_”A^CaN98('9þö`C:-&þÿcEFCBbþ¹-:C`ðbBþÿBaýR9P88('YþÔ8. +;Ʋ +°3´++°2² +³@ +°/´,++°4/´!+°/´7+°/°Ö´1+°±1+´,+°,±+´9<+°9±%+´$+°$±:+´&+°2°´+°/±?+±9°/9°%²).999°$² 5999°:³ $901%!335476322632'654&#"#54&#"&5476"!54&8ý!P«GHbfGFþ…%; RN./y X=2%C*1:\'w/.ÙA^Cbþ.óbBCA@`þ³&D78KŠ93)l4C0ææ/H4j'29ˆL87ç]AõöA\Yþ„:.7@L²+°3´/+°'2²/ +³@/+ +°/°63´D+´$J+ +´$+°/´++°<2² +³@ +°8/´ 7+°M/°Ö´1+°±+´3+°3±+´<<+°<±++´*+°*±!+´A+°A±=+´&+°2°´F+°F/±N+±3°69°<²/5999±*+°9±A!³ '8$9°=³%DJ$9°F°H9±D°59°J³3!$9±/°901%!335476324632632#"'&546;&#"#54&#"&"!54&3254'&#"8ý!P«GHbfGFý•bMK!'XW?=NB;G: =a=- 0SuxA^Cb M //þ.óbBCA@`ýøOl:::9VJg.&5?T!Oäç ,%'0k#56-]AõöA\ý-/f4Yýön.HQ]6²+°3´+°A2² +³@E +°'/´,+°8/°3´U+°/´++°M2² +³@ +°I/´ 7+°^/°Ö´1+³+´+°±+´M<+³EM+´D+°M±;+´R+°R±N+´&+³5N+´W+°W/´5+³0N+´$+±_+±³$9±DM°9±R;²)A999°W¶ *',8I?$9°N± 399±,'°)9°8°*9°U°9°@  $035;[$9°°901%!33547632"&54632632#"'7327654&'#"&54767&#"#54&"!54&3254'&#"8ý!P«GHbfGFþ0>Ps`PI!)Lƒ$M))rX;2&*@)))" ;<4?""5BZ=,ÝA^CbC>%2þ.óbBCA@`þvJ3k'46ŒNp22R 78V_‰#434D0N $I[S9;/0Méé!,$]AõöA\ý&1\4$>Yþ�8.&/²²+´)7+°!2°/´%+°/´++°2² +³@ +°/´ 7+°0/°Ö´1+°±+´<+°± +´.+°.±'+´#+°#±+´&+°& Ö´+±1+±'.³ %$9°#°!9±)%±#.9901%!33547632!5432"!54&4'3'4#"68ý!P«GHbfGF%þ“¸µÎA^CbI?]‹r%vþ.óbBCA@`ýC§ÉÆ­]AõöA\ýSf&_O°<!BcOYýÀ8. )1:Eþ²+´47+°,2°/´;+°A/´1++°/´++°%2² +³@ +°!/´ 7+°F/°Ö´1+°±+´%<+°%±+´9+°9±+´D+°D±2+´.+°.±&+°>2´&+°1 Ö´+°&´+±G+±D´ !04$9°2°9°.³,;A$9±&°9±A;±99°1³$9°4±.99901%!33547632"&547#5432#"!54&4'3'4#"62654&#"8ý!P«GHbfGF�2K ‘¸µ IŠA^CbP>]Šr%u6++**þ-ôbBCA@`üsK20#§Éƪ"13J']Aö÷A\ýSg(cO´< CgNþÔ*,-<*Yý¬8. '/7=M²+´27+°*2° /´>+°F/´=+°:/±33´.+°/´++°#2² +³@ +°/´ 7+°N/°Ö´1+°±+´#<+°#±+´6+°6±+´K+°K±0+´,+°,±9+´C+°C±$+°A2´&+°/ Ö´+°$´+±O+±K°9°0µ .2H$9°,µ *:=>F$9±$°9±:=µACIK$9±2.±,69901%!3354632"&547#5432#"!54&4'3'4#"64#"32654'#"&'8ý!P«Žcd�¥:R!{¸µ"R†A^CaO>]Šr%)'uX,--%2 +!, 5þ-ôa†�`ü_Q93'§Éƪ(28R;]Aö÷A\ýSg(eP·Fò²+´87+°02°/´A+°E/´+°/´4+°/´++°)2² +³@ +°%/´ 7+°G/°Ö´1+°±+´)<+°)±+´=+³"=+´?+°=±6+´2+°2±*+´&+° Ö°.3´+±H+±6?·% 48E$9°2²0AC999°°9±EA°"9°°9±84±2=9901%!33547632267!5432#"#"&546"!54&4'3'4#"63254#"8ý!P«GHbfGFåU!þÖ¸²cQ3RH!A^CbS?]Šr%vLS*I4þ-ôbBCA@`ý)$.¤ÌÉ£MZ&$ q]Aö÷A\ýPi(_P²<"CdQï Xþêj-6@˲=+°,3´7+²+° /´8++°/´7+°$/´4C+°A/°.Ö´)+°)±+´?+°?±+±!:22´&+°2´ +±B+±).°,9°°+9°?²999°µ $4$9° ±99±=8± 99°²+999°³).$9°°9°$°901"'&547&'532654+53254&#"&545476322654&"j/ML@//ˆ//* )W,?qKJrV;l~9F;PO’[…ÕN98P9Š&G `W.1PB1001B?.R 9+YGP-0‰oc{y�XWWýW9'(89'&YþÉj-/9Iö²6+°(3´++²+° /´:++°B/´1+°/´7+°"/´-C+°J/°*Ö´%+°%±+´G+°G±3+´?+°?±+±=22´&+°2´ +±K+±%*°(9°°'9°G²999°3@ "-8:B$9°?° 9°°9° °9±61µ =?EG$9°²'999°³%*$9°°9°"°901"&547&'532654+53254&#"&546322654&"2654'#"&'j/MSCj”k1 /|,?qKJrV;k9F;¡�[…Þ0##0"3&b8*ñ�¬*4[..7 =47vNO$?3-8‚bR 3:‰of}€Ð #Yÿ�-5Ió²4+°/´D+°@/°63´+°2²@ +³@@: +°$/±%é°./´C+°J/°Ö´1+³1+´B+°1±;+´:+°:± +´1+°° Ö´*<+°*/´<+²* +³@*% +±K+±1°49±;B±399°:²D999°*µ .F$9±@D±99°°9±$4² 3999°%² 1999°.°90174632#"54632632654&+5327654'&#"&"#'4'&#"327&#"Y¡�]CR*8_U�ÎC.NAE&_A773+,7.9l|9F;^7;„^=+ñ�¬*4[..7 =47ˆJCy+856E+FAbR 3:‰of}€Ö! &:-3Xÿm.2°² +°/±é° /´7+°/´7+°/±'é°3/°"Ö´+°± +±22±é±+/22² +³@ +³@  +±4+±"° 9° ³'$9°±-199±°9° ² 999° °9°°19°±"/99°°-9°°+901#"'73254+5324+53254#"&5454632mlJiA&+SekZYlkKJl‹o?8:I; ‘TBM>>>>:Hc5A*cYG†GP\GCmf}y�°'/NXRO!Xþm.<Hô²"+°/´=++°C/± é°/´7+°/´7+°/±)é°I/°$Ö´+°±+´F+°F± +²@222±5é±-122² 5 +³@  +³@  +° ´9+±J+±$°"9°±!99°F±99° µ )=C$9°9²/37999±C=±999° ²7999°"² 5999°°!9°°39°±$199°°/9°°-901"&547&'73254+5324+53254#"&5454632'2654&#"·B_1&+SekZYlkDCl‹o?8:I; ‘TBM>>>>Q>//E(87)(89þaBE0 A*cYG†GP\GCmf}y�°'/NXRO!`Z0/QB10C8()67('9Yýõm.7BR0²!+°/´C++°K/´8+°>/± é°/´7+°/´7+°/±'é°S/°#Ö´+°±+´P+°P±N+´@+°@±;+´H+°H± +²F222±2é±*.22² 2 +³@  +³@  +° ´6+±T+±#°!9°° 9°P±99°N°9°@°9°;´' CK$9°H°9° °49°6±,099±>8µ6FHNP$9° ²4999°!² 2999°° 9°°09°°.9°°,9°°*901"&547&'73254+5324+53254#"&=4632'2654&"2654'#"&'ð”kF&+SekZYlkKJl‹lz:I;£ŽYŠ>>>>YF¶#$.#!/D9*(8DýõjJW7A*cYG†GP\†qf}y�­ZJXRO!`a-7XJI"""!qD.!+=8(.DXÿm.9GÛ² +°6/´:++°A/´++° /´7+°/´7+°/±'é°H/°"Ö´+³"+´D<+°±+± 22±+é±/222²+ +³@ +³@ +±I+±"° 9±D°9°´'6=$9°+±-199±A:´3=D$9°± 99± °9°±1299°±"/99°°-9°°+9014>32654+5324+53254#"&5454632#"'&2654'&#"–4H' ˜kZYlkDCl‹o?8:I; ‘TBM>>>>`JY`>6Í#;#=<!�. CYG†GP\GCmf}y�°'/NXRO!À9,*$ Yþûp.?N²+°/´M+°I/°B3´#+°'2²I# +³@ID +°./´1++°7/´:7+°<2°/± é°O/°Ö´+³+´K+°±E+´D+°D±4+°>2±é±22²4 +³@4. +³@47 +°´+<+°+/±P+±°9±EK±#99°D´%1:M$9°4µ ')2@$9±+±99±IM²@)999°#²%+999±.°9°1°9°7±99°:±99°°901"&54632#"'&547632632654+523254+5203254&#"#4'&#"32‹l|:I;¢�TBM>>>AbShI9N'.N@DrZˆkDˆ5-268�Wãˆoh{€~�®'/NXRO#Li?5 C1-/HYGECGQ\ý†7M,(=YÿæÁ3Lú²+°'3´G7+²G +³@GB +°° Ö´=++°/±é°!/´-C+°M/°)Ö´$+°$±+´:<+°:±+°2±4é°02²4 +³@ +°4±@+±Cé°C±J+´+±N+±$)°'9°°&9°:±!-99°±899°4² 2=999±C@° 9°J²L999±=°&9±Gµ $)4:$9°²2J999°!°09°-°L901#"'#".54767654'&+53254&#"&5476323265332654'M[?Cyp0J»3ZDT.)% 93$yG1w~7F;ST‹T‰=:.[(T b�Y!/Piˆ3'™fuPVQ]1%Q "OL%'€xor‚|’TVLAi CNYSNþ²108yV­AYþñÁ3T`7²[+°03´O++° Ö´E++²+²+° /´U++°#/±$é°*/´5C+°a/°2Ö´-+°-±+´B<+°B±+°'2±<é°82²< +³@# +°<±H+±Ké°K±+´^+°^±R+´+°X Ö´+±b+±-2°09°°/9°B±*599°±@99°<²:E999±KH°9±^°9°X´ OT$9±U³X^$9±E[±/99±#Oµ-2RgFDK !YOCþ¼1/6Ý  YÿÅ3]qp²+°%3´7+²#+°>3´T+² +³@Y +°/´c+°^/°h3´+°2²^ +³@^l +´0/>Y +´0C+°8/´CC+°r/°@Ö´;+°;±'+´Q<+°Q±,+°52±Ké°G2²,K +³@,/ +³K,+´a+°K±W+±Zé³lZW+´m+°m/´l+°Z±+´&+±s+±;@°>9°'°=9°Q±8C99°,±)O99°²#IT999±Wa±^99±lm³c$9±Z¶eh$9±^c±99°°9±T±=99±/¶';@KQ$9°0±I99°8°G9°C°901%2654'7#"5463263267#"'#"'&54?654'#5327654&#"&5463232653"327.#"#54'&¾Sfˆ*¬EG|MSÙG0VFH?"]p0WK?=5eTC)†H0H0w~7F;¦ŒLBO=:.[*U_„Y!È*Œd@ <GmU­AK YOCþ¼1/6¡:+%(Yþ„Á2Lqu²M+°R3´f+°]2²fM +³@fb +° /±%33´=+´G++²G +³@GB +°7/´+°/´C+°/´+7+°r/°'Ö´"+°"±+´:<+°:±n+´i+³4in+±é°/°3±4é°/2²4 +³@ +°i±@+±Cé³bC@+´a+°C±J+´+³UJ+´Z+°Z/´U+±s+±"'°%9°°$9°:±+99°±799°n² 1=999±@i±kl99°b² Mf999±aC°P9°Z¶GRWLX$9±= °$9±7G² :999±²"'4999°²1J999°°/9°+°L901#"'#".54?654'&+53254#"&5476323265332654'2632'654&#"#54&#"&5476K]CFro1DÂ1YESC)%=44ixu€7F;SUŠ7aE=!<#<(Ud€Y!/Piˆë&: QP\x W=2%C+09['w/.2$‘`mOQLR/"OIIDxrjkzyˆPR>+b ,##6NP>þÂ//3rQ¥>þ&DnLŠ93)l4C0ææ.H4j'29ˆL87Yþ„Á2Lt�²P+°S3´l+°d2²lP +³@lh +°Z/°s3´x+´a~hP +´a+° /±%33´=+´G++²G +³@GB +°7/´+°/´C+°/´+7+°‚/°'Ö´"+°"±+´:<+°:±M+´p+±/422°p±é°/°3²p +³@ +°p±@+±Cé°C°g Ö´h+°h/´g+°C±^+´u+°u±J+´+°z Ö´W+±ƒ+±"'°%9°°$9°:±+99°±799°M± =99°p°19°@³Plrs$9±Ch± R99±^g°S9°u²Gd999°z´TZLb$9±xZ°r9°~³MWp^$9±Pl°R9±= °$9±7G² :999±²"'4999°²1J999°°/9°+°L901#"'#".54?654'&+53254#"&5476323265332654'463262#"'&546;&#"#54&#"&%3254'&#"K]CFro1DÂ1YESC)%=44ixu€7F;SUŠ7aE=!<#<(Ud€Y!/Piˆþ;bLM!'®?=NB;H: ;b=- 1St¤!M 02$‘`mOQLR/"OIIDxrjkzyˆPR>+b ,##6NP>þÂ//3rQ¥>ýKOl:::9VJg.'4>U!Oäç ,%&1k#56Z/fYýöÁ2L…‘ã²X+°\3´M+°~2²MX +³@M‚ +°e/´j+°u/°S3´‰+° /±%33´=+´G++²G +³@GB +°7/´+°/´C+°/´+7+°’/°'Ö´"+°"±+´:<+°:±U+´P+³PU+°3±4é°/2²4 +³@ +°P±@+±Cé°‚ Ö´�+°C±x+´†+°†±‹+´r+°r±J+´+°b2°´m+°m/±“+±"'°%9°°$9°:±+99°U²8999°°79°P± =99°4°S9°‚²MRX999±�@°Z9°C° 9±†x²\g~999°‹·GehjuL|$9°r²^p999±je°g9°u°h9°‰°R9°M@ PU^bmprx�$9°X°Z9±= °$9±7G² :999±²"'4999°²1J999°°/9°+°L901#"'#".54?654'&+53254#"&5476323265332654'"&54632632#"'732654&'#"&54767&#"#54&3254'&#"K]CFro1DÂ1YESC)%=44ixu€7F;SUŠ7aE=!<#<(Ud€Y!/Piˆþ§0?Ps`PI!)M‚$M)*sX:2&+@Q)" <<3@##3B[=,Ü ?%32$‘`mOQLR/"OIIDxrjkzyˆPR>+b ,##6NP>þÂ//3rQ¥>ýÉJ3l&46ŒNp22R 79U^Š#4fE0N !H\T8910Méé!,¶2\3%>Yþ�Á2LS[cq²R+´\++°O/´Z+° /±%33´=+´G++²G +³@GB +°7/´+°/´C+°/´+7+°d/°'Ö´"+°"±+´:<+°:±+°2±4é°/2²4 +³@ +°4±@+±Cé°_2°C´O+°O/°C±b+´X+°X±J+´+³NJ+´[+°[/´N+±e+±"'°%9°°$9°:±+99°±799°4± =99±CO° 9°b´GRZ\$9°X±VL99°[°9±\Z±X`99°R°V9±= °$9±7G² :999±²"'4999°²1J999°°/9°+°L901#"'#".54?654'&+53254#"&5476323265332654'!54324'3'"654K]CFro1DÂ1YESC)%=44ixu€7F;SUŠ7aE=!<#<(Ud€Y!/Piˆ“þ”¸´=Ldš�+,€2$‘`mOQLR/"OIIDxrjkzyˆPR>+b ,##6NP>þÂ//3rQ¥>ý@ª§ÉÆl (]W÷M8kVZ@YýÂÁ2L^fnyIJV+´g++°M/´o+°u/´f+° /±%33´=+´G++²G +³@GB +°7/´+°/´C+°/´+7+°z/°'Ö´"+°"±+´:<+°:±+°2±4é°/2²4 +³@ +°4±@+±Cé°j2°C´S+°S/°C±P+´w+°w±m+´c+°c±J+´+³YJ+´f+°f/´Y+°\2°Y´r+°r/±{+±"'°%9°°$9°:±+99°±799°4± =99±CS° 9±wP²Reg999°m²GV999°c´MaLou$9°f±t99±Jr°Z9±uo±\P99°f³SYZR$9°g±ck99°V°a9±= °$9±7G² :999±²"'4999°²1J999°°/9°+°L901#"'#".54?654'&+53254#"&5476323265332654'"&547#5432#4'3'"6542654&"K]CFro1DÂ1YESC)%=44ixu€7F;SUŠ7aE=!<#<(Ud€Y!/Piˆ2Kޏ´JLdš�+,€2*+<+*2$‘`mOQLR/"OIIDxrjkzyˆPR>+b ,##6NP>þÂ//3rQ¥>ûÈK2/"§Éƪ#.3Jxl (]W÷M8kVZ@þ7*,,*Yý¤Á2IZbjp€è²R+´c++°J/´q+°y/´p+°m/´b++° /±$33´;+´D++²D +³@D@ +°6/´+°/´C+°/´)7+°�/°&Ö´!+°!± +´9<+°9±+°2±2é°-2²2 +³@ +°2±>+±Aé°f2°A´O+°O/°A±M+´~+°~±i+´_+°_±l+´v+°v±G+´+³UG+´b+°b/´U+°X2°U´t+°t/±‚+±!&°$9° °#9°9±)99°±599°2± ;99±AO°9±~M°N9°iµRDca{$9°_¶J]Impqy$9°l°9±Gt°V9±yq°L9±mpµMXtv|~$9°b³OUVN$9°c±_g99°R°]9±; °#9±6D² 9999±²!&2999°²/G999°°-9°)°I901#"'#"&546;2654&+53254#"&54632+"3265332654'"&47#5432#4'3'"6544#"32654'#"&'K]Žmo1DÂt[*)Cx4ixu€7F;¨Š7aE=!="<sd€Y@+Piˆ9S(ƒ¸µ#'RLešœ,,€V+..%2 + - 52$‘`qœLR+7).IIDxrjkzy‡£>+b ,#$; #NP>þÂ4]rQ¥>ûªRr(§Éƪ(98S–l (]W÷M8kVZ@þoXXV2%!.+$3YýìÁ2I_gpx¬²R+´j++°Z/´s+°w/´J+°O/´f+° /±$33´;+´D++²D +³@D@ +°6/´+°/´C+°/´)7+°y/°&Ö´!+°!± +´9<+°9±+°2±2é°-2²2 +³@ +°2±>+±Aé°A°o Ö´O+°O/´o+°A±]+´q+°q±h+´d+°d±N+°`2´U+°G Ö´+±z+±!&°$9° °#9°9±)99°±599°2± ;99±O>°9±hq@ JRXDfjsw$9°d³Ibu$9°N°L9±ws°]9°J°L9±jf±do99°R°b9±; °#9±6D² 9999±²!&2999°²/G999°°-9°)°I901#"'#"&546;2654&+53254#"&54632+"3265332654'267!5432#"#"&54674'3'4#"63254#"K]Žmo1DÂt[*)Cx4ixu€7F;¨Š7aE=!="<sd€Y@+Piˆ#W"þѸ±cQ3RG¼Mdšt)#€US4M:2$‘`qœLR+7).IIDxrjkzy‡£>+b ,#$; #NP>þÂ4]rQ¥>üv'7£ÊÈ¥MY$$Èm )`U·B%ClWñZÿ)W3Y#²+°53´T7+²T +³@TP +°° Ö´J++°/´+°$/±(é°//´:C+°Z/°Ö´ +° ±7+´2&+°2±+´H<+°H±!+°,2±Bé°>2²!B +³@!' +°B±N+±Qé°Q±W+´&+±[+±7 ± 99°2°59°°49°H²$/:999°!²F999°B²@999±QN°9°W³Y$9±J°49±$Tµ27BH$9°(´ @W$9°/°>9°:± Y9901! 473 7#"'#"54767654+#5327654&#"&54632#"3265332654'®L]ýý„`9VR—É~hp;e.H;S,)K% B&G0x~7F<®�GAN=:JL #2AbƒV=8E\Š3'�eþí–†*yyq§e0”N]iQ 'O8%'€xor„z�¯")Bi CWZRNþ²BU}Pµ<Zþ|W3isÙ² +°B3´d7+²d +³@d` +° °$ Ö´[++° /´k++°/´++°//±5é°3´]7+²] +³@]Y +°°# Ö´T++° /´o++°w/´c+°/´++°N/´*+°0/±1é°8/´CC+°/°Ö´+°±@+´;&+°;±&+´Q<+°Q±-+°52±Jé°F2²-J +³@-0 +°J±W+±Zé³ZW+´|+°Z±f+´t+°t±`+°r2´&+´+±€+±@±99°;°>9°&°=9°Q±8C99°-±)N99°Jµ#HMT$9±W°!9°Z°9±f|@ ]blow$9±c³r|$9°´fltz$9°#±i99±T°=9±N]²&!Q999±0*²;@J999°1´H`$9°8°F9°C±b9901#"&547# 47! 7#"'#"&546;2654+532654&#"&54632+"3265332654'2654&#"2654'#"&'®L]‡4GjJIk |œý„`9V*qm;e.H¼if+(BRS5;5G0x~7F<®�O‡=:.S1BbƒV=8E\Š"##!/D8*)9 D3'œfáx^=JjjJ%í–†*yyþV‘N]09+6&O ,%'€xor„z�¯P=Y G$@YSNþ²BU}Pµ<ý ""!!qD.!+=9'.DZÿ 23Ÿ²'+°/±é°/±é° /´-7+° 2°4/° Ö´+°±)+´$+°$±+´&+° Ö´0&+±5+±)± 99°$°'9°µ&-$9±'²&999°´ $)$9° °09°-° 901%#"&54732654&+53254#"&547632Á).Y[нÃd:XfV}bŽM5CCzšt>3:K9EQšl|ÚhBwDFôѾ�*sȲ^QdV6QX_ƒRBbdƒ‡…{Vddb2&+Zþ.2>Jë²2+° /´?++°/±é°%/±&é°+/´87+°2°K/°Ö´+°±4+´/+°/±+´H+°H±!+°B2´&+°) Ö´;&+°!´+±L+±4±99°/°29°°19°H³%&$9°)¶ +8?E$9±?³BH$9°±E99±%2²!1999°&´/4$9°+°;9°8°901%#"'&547#"&54732654&+53254#"&5476322654&#"Á).aW/.FD./¾Âd:XfV}bŽM5<3:H/°Ö´1+°±%+´(1+°(±+´;+°;±0+°52´1+´+±?+±%²999°(°9±;°9°0´ ,2$9±3³6;$9°!°901#"&547&'#"'&5467327653327654'264&#"ôM_fX//DB`!Q%5lrID_N&ƒfQ2P$$6R1/„$(88('99.$–d–S-dB10aB6+>TUPsg˜%=?­Vr+*/`þ 3)(@;Rª=ýE8P88('9YþÏ .-9IÞ²+°43±é°(2²+²+° /´:++°B/´.+°J/°Ö´1+°±"+´%1+°%± +´G+°G±E+´7+°7±1+´?+°?±++°=2´1+´+±K+±"²999°%°9±G °9±7E°(9°1´ -:B$9°?°9±.· 17=?EG$9°°901#"&547&'#"&54673265332654'2654&#"2654'#"&'ôM_m^iKIl1B5lo�_N&ƒfQ.BPJ4Nd„#$"!/D9*)7D.$–džO4lJjkID62T£uf™%=?­VrR2`þ 5OyTª=ý‘"""!qD.!,<9(.DYÿ¡.4?£²+°3±,é°2° /´>++°8/´7+°@/°"Ö´(1+°(±+´:1+°:±/+´2&+°2±+±é±A+±(°%9°:²&,999°/±899°2² >999°µ5$9±8>±99±,°901%2654'7#".543267#"'#"'&5467326534&#"32–Sa~'®p}»8aE®CAN D69Hx'+yuHD`L(ƒ,/R4LOBa+b7(%jFmW¦B;aܺ’¢;+d0.p!XXTPta–#>A P:>N4[þ¥2QÜ  Yþÿ¡.5Hв+°3±-é°2° /´;+°6/°@3´+°2²6 +³@6D +°I/°#Ö´)1+°)±+´9+°9±0+´3&+°C2°3´E+°E/°3±+±é±J+±)°&9°9²'-999°0±699±3E³ ;$9°¶=@$9±6;²=999°°9±-°901%2654'7#"5463263267#"'#"'&546732653"327.#"#'4&–Sa~'®w€°ØD1U IL=&:Mx'+yuHD`L(ƒ,/R4LOBÇ&‡`@ 92FmW¦B;aÜ»– z,5%'F+\!XXTPta–#>A P:>N4[þ¥2Q£:,)- Yþ„ .)N̲*+°/3´C+°:2²C* +³@C? +° /°3´7+°#2°O/°Ö´1+°±K+´F+°F±+´ 1+° ±?+´>+°>±'+´1+³2'+´7+°7/´2+±P+±K±99°F± 99°±HI99° ² *C999±>?°-9°7¶#/4)5$901#"'#"'&54767327653327654'2632'654&#"#54&#"&5476ôKaEHvr25lqJD*.U&ƒfQ0 PJ4R1/„í%: RO\x W=2&B+19['w/..“^oNQPPPMkYKO#98©Rk'(.Mþ³3J=8N¤7þ 'DnLŠ93)l4C1ææ.G5j'29ˆL87Yþ„ .$IU²C+°F3´8+°02²8C +³@84 +°(/°>3´T+´.N4C +´.+°/°3´7+°2°V/° Ö´1+°±@+´;+°;±+´1+°°3 Ö´4+°4/´3+°±++´Q+°Q±+´1+°J Ö´%+±W+±@° 9°;°9°µ8=>C$9°4°9±3°E9°+°F9°Q²0999°J´"(!G.$9±T(°=9°N³%;@+$9±C8°E901#"'#"&54673265332654'7#"&5463&#"#54&#"&54632624'&#"32 ’qr25lm’`M&ƒfQ.BPJ4Me„(Ka,NB4@M>!:b=- />SubLM!'®?=@"/ Ms›PP˜pc“ 98©RkM0Mþ³3JrQ¤79“ý»KfO:BQ!Oäç ,J2k#56‹Ol:::9a!5/Yýö¨.)co0²5+°93´*+°\2²*5 +³@*` +°B/´G+°S/°03´g+° /°3´7+°#2°p/°Ö´1+°±2+´-+°-±+°`2´ 1+´_+° ±V+´d+°d±i+´P+°P±'+´1+°°? Ö´K+°K/´?+±q+±-2°9°µ /05$9°_± 799±dV²9D\999°i@ #BEGS)Z$9°P±;N99±GB°D9°S°E9°g°/9°*@ -2;?KNPVm$9°5°7901#"'#"'&54767327653327654'"&54632632#"'7327654&'#"&54767&#"#54&3254'&#"ôKaEHvr25lqJD*.U&ƒfQ0 PJ4R1/„þ¶0?Ps`PI!)M€&M))rX:2&+?))*" ;<3@""5BZ=,Ü ?%3.“^oNQPPPMkYKO#98©Rk'(.Mþ³3J=8N¤7ýÎJ3k'46ŒNp22R 78V_‰#434D0N !I[T8;/0Méé!,¶2\3%>Yþ� .)08@½²/+´9++°,/´7+° /°3´7+°#2°A/°Ö´1+°±+°,2´ 1+´=+° ±?+´5+°5±8+´++°+±'+´1+±B+±² 999°=° 9±? ²/79999°5³#)3$9°8°9±97±5=99°/°3901#"'#"'&54767327653327654'!54324'3'"654ôKaEHvr25lqJD*.U&ƒfQ0 PJ4R1/„wþ“¹´=Me›ž+,€.“^oNQPPPMkYKO#98©Rk'(.Mþ³3J=8N¤7ýEª§ÉÆl (]W÷M8kU[@YýÀ .);CKT ²3+´D++°*/´L+°Q/´C+° /°3´7+°#2°U/°Ö´1+°±+°02´ 1+´H+° ±-+´S+°S±J+´@+°@±C+´6+°92°6´O+°O/°6±'+´1+±V+±² 999°H° 9±S-²/BD999°J°39°@¶#*)>LQ$9°C±P99±6O°79±QL±9-99°C³067/$9°D±@H99°3°>901#"'#"'&54767327653327654'"&547#5432#4'3'"654264&"ôKaEHvr25lqJD*.U&ƒfQ0 PJ4R1/„ 2K �¹´"IMe›ž+,€1--<**.“^oNQPPPMkYKO#98©Rk'(.Mþ³3J=8N¤7ûËK20#§Éƪ"13Jzl (]W÷M8kU[@þ6*<--<*Yý§ .$6>FN^G².+´?++°%/´O+°W/´M+°I/´>+° /°3´7+°2°_/° Ö´1+°±+´1+°B2°´++°+/°±(+´\+°=2°\±E+´;+°;±G+´T+°T±"+´1+³1"+´>+°>/´1+°1°4 Ö´R+°R/´4+±`+±² 999±+°9±\(±*?99°E³.Y$9°;·%$9IKMOW$9°G°9±1R°29±IMµ4(RTZ\$9°>³+12*$9°?±;C99°.°9901#"'#"&54673265332654'"&547#5432#4'3'"6544#"322654'#"&'ôKa’qr25lm’`M&ƒfQ.BPJ4Me„9S$„¹´%R Mdš�,+€Z+..+*$3 + - 5.“^s›PP˜pc“ 98©RkM0Mþ³3JrQ¤7û²R97'§Éƪ(68S“l (]W÷M8kVZ@þž,,-V4$!/,$4Yýì .)?GPZ²2+´J++°:/´T+°Y/´*+°./´F+° /°3´7+°#2°[/°Ö´1+°±+´ 1+° °O Ö´/+°//´O+³= +´Q+° ±H+´D+°D±.+°@2´5+³'5.+´1+±\+±² 999± /° 9±HQ@ #28*FJTY$9°D²B)V999°.±,99±YT°=9±JF±DO99°2°B901#"'#"'&54767327653327654'265!5432#"#"&54674'3'4#"63254&#"ôKaEHvr25lqJD*.U&ƒfQ0 PJ4R1/„@^#þѺ°cQ3SBÁIc—r* €U.#5*":.“^oNQPPPMkYKO#98©Rk'(.Mþ³3J=8N¤7üƒ(.¢ÌÈ¥MY'% Àm '_V·@&BkVí  Wÿ#6/9в,+°(3´C+° 2°/±$é°:/°Ö´ +° ±0+´6<+°6±+´1+°±+´<+±;+±0 ±99±6´$,34$9°°*9°³&($9±,°&901%2653327654'7!"'&547327#"'#"'&5467í3KP!1U32€'«i~þÿö…|J:;jvÓÛj05y'+zvGDbN&„+2IY÷²3+°/3´C+° 2°/´J++°R/´@+° /±+é°Z/°#Ö´(+°(±6+´<<+°<±+´1+°±+´W+°W±B+´O+°O± +´<+°2°´M+°M/±[+±6(±%&99±<´ +39:$9°°19±W°9°B@ -/HJR$9± @³MW$9°+µBEHOU$9°3°9°°-901%265332654'7#"&547#"547327#"'#"&54672654&#"2654'#"&'í3KP@/Rh€'«„6IjKIj ;JçþðJ:;ëÈÛj05y'+zr�bN&„_Å0"#!:0C9*(9 B+±%-²/999°$° 9±3:´  $9±0%°/9°7³-$9°°9°)° 901.547632632#"&547632&#"#4&#"%2654'&#"N_HGu30.AŠ…Z[6>lY^:;e aL3*V:?kD=‡`^V5.UNK5R41„:<% F-.'”dw¦O%~TUƒ”ei1?-VOvÆ'7FlˆB;UZHL8K<þ¡_6QB;S©=VEXA34E2).YÿÄ24?¥²+°/´8++°>/´7+°//°&3±é° 2°@/°Ö´21+°2±+±5é°5±++´*1+°*±#+´<+±A+±2°9°5²/4999±*+´ 8>$9°#² :999±>8±99±/´ #*$901.547632632#"'&54>3267654&#"#4&#"3254'&#"LaHGuk98zƒKCvxÏL­# YÿÄ21Eç²+°/´7+°2/°<3´+°2²2 +³@2@ +°,/°#3±é° 2°F/°Ö´/1+°/±+´5+°5±(+´'1+°'°@ Ö´A+°A/´@+°'± +´<+±G+±/±199°5±,99°(±299°A° 9°'²7999± @³ #9$9±27²9999°°9±,´  '$901.547632632#"54632632654&#"#4&#""327.#"#5&'&LaHGuk98zƒKCs|¾ßJ1WGI!Šc_†:+%(Yÿòõ-:D˲0+²$+±33±;é°4/±+33´C+± 22°E/°Ö´81+°8±0+´/1+°/±'+´C1+°C±>+± é° ±+´&+±F+±08²:999°/° 9±C'± +99°>³ $)$9° ±99°±99±;0±:99°4@  ') 8A$9°° 901.547632632632'654&#"#"&547&#"#4&#"%2654&'N_HHtn63�Q28awžŠ.m€Y&4##6:TYiw!!@OPK4Q1/‰2;A0o%–dwRSSS))ªy»]/M•YŠ $RNBWDI‚b£_ I>þ¡_5P@;S®>\>Dx!J“šZÿ0ú-HPû²+´$++²"+°/´++°2/°3´O++°9/±+B33´ ++±22°Q/°Ö´E&+°! Ö´1+°E±>+´=&+°=±5+´M<+°M±I+±/é°/±(+´1+±R+±>µ$BH$9°=°9±M5± 999°I³ 2-7$9°/³+%$9±(±99±°!9±O2²=>H999°9·(/5EK$9° ° 901%.54632632632#!"3!!"&5463!2654&#"#"&547&#"#'4&#"%4'32Jb”ln83�Z/7^{ŸŸ{ý0#66#Þü@__@Ì_zy`anJRch+?PNL3MbJ=v`ecbazRePP ˜x|¡$ +DR=:J|a\lStJldRpVD=úú4LSGF_ }j<>hqZÿ0ô.U]'²+´++²+°/´ ++°+/°A3±\é°/±é°2/±$;33´K++±GP22°^/°DÖ´>&+° Ö´ 1+°>±7+´6&+°6±.+´Z&+°Z±V+±(é°(±+±é°T2°±!é°!/²! +³@! +±_+±7 µ;@AG$9°6°I9±Z.±2K99°V³+&M0$9±!(³$P$9±² 999± °9±\+´67@$9±´(.VZ$9°2¶&0>DITX$9°K°M901#!"3!!"&5463!2654&+53254&#"#"&547&#"#'4&#".54632632>324'32·$UAü²Y6#×üD[\C?%7*/)Gd?: YgIQ]h.S N3/6?g&4##6:T]50G56@OPK4Q1/‰29@/.?^'i_,c%˜bwRSSS%%f_‘¿‹�#B2236pgWdKV $PQ?SBEA>[P�)I>þ¡_5P@;S®>V54'&#"#"'&5467&#"#4&#"%2654&'"327&#"#'4'&LaHHtn65Ž[.3`†PHw~¹ÝH2WCK;T6?g&4##6:T]50G56@OPK4Q1/‰29@/.?"(ŽfA1 <%˜bwRSSS%%f_‘ºŠ“{,602F?°YdKV $PQ?SBEA>[P�)I>þ¡_5P@;S®>VPOJ4R1.†„ror7%—cxQSSS%%f_�éwdqƒÿ–†+p�Ýp_ScÇeMN 'MOCYAJ‚b¦bJ=þ¡_6O@:T¯=­ˆQL�š5,Zþ|›2[eo=²Q+²D+°3±bé°/´g++°#/´27+°U/±:K33´C+± 22°p/°'Ö´,+°,±+´Y<+°Y±Q+´P&+°P±G+´`1+°`±\+±@é° Ö´n+°@±6+´&+°i Ö´+±q+±,±)*99±QY²[999°P° 9°G±#299°`° 9°µ POJ4R1.†„ror7dN98('9%—cxQSSS%%f_�¼rS7D/0`C+q‚–†+p�Y�bCScÇeMN 'MOCYAJ‚b¦bJ=þ¡_6O@:T¯=­ˆQL�š5,þ 9P88('ZþW›2U^iy†²L+²@+°3±\é°/´j++°r/´_+° /´17+°P/±8G33´C+± 22°z/°&Ö´++°+±+´S<+°S±L+´K&+°K±C+´Z1+°Z±V+±=é³w=V+´+°/´w+³g=V+´u+°u/´g+°=±b+´o+°o±5+°m2´&+´+±{+±+±()99±LS²U999°K°9°C± 199°Z± G99°´ @EX\$9°V±:99±uw°89°g°9±b=µ_ejr$9± _³mw$9°1´bgou$9°@²de999±\L°U9°P@ &+5:=CESX$9°± )9901.54632632632#"&547#".547327654&#"#"&547&#"#4&#"%4'3262654&"2654'#"&'¦L`‘sn65�X03_z¡Š5HiKIl …¤tÊ­{F_8N?nš²eñž¾|_""0KrQYj|4>POJ4Nc†„ror3<‚##0"!/D9*(8D%—cx¤SS%%Á…½r]>KjkJ!$#Ns¨g–†+p�Y�bCScÇfš #šIZŠ‚b¦bJ=þ¡_6OxV¯=­ˆQL�š]þp#! "pD. +<8(.DYÿòõ.2<½²+²+°'3´++°72°,/±#333±é± 22°=/°Ö´01+°0±(+´'1+°'± +´&+²  +³@  +°±+´71+°7±8+´&+±>+±(0²2999°'° 9° ° 9°°9±87°9±±299°,´ 0$901.547632632347632!5654&#"#4&#""!4'&M`EJui;7itHC@²FHdcHFüõgdS/APH7Q3-‰ÑB_C0.%–dwOW]]TOt�UÿcEFCBbþ¹/F¦WtS4þ¡_5P@¼bBþÿA20Yþùö.=GQ ²+²(+²2M333´++°B2°"/´H++°7/±.>33±é± 22°R/°Ö´;1+°;±3+´21+°2±++´&+²+ +³@+( +°±+´B1+°B±%+´P+°P±C+´&+°2°´K+°K/±S+±3;²=999°2° 9°+° 9°°9±P%°'9°C´>"HM$9±K°9±H³%KO$9±(±)=99°7´ +;$901.547632632347632##"&547!5654&#"#4&#""!4'&264&#"M`EJui;7itHC@²FHdcHF!"_CB_!þgdS/APH7Q3-‰ÑB_C0. (88('99%–dwOW]]TOt�UÿcEFCBbþ¹+9C``C8,6C¢WtS4þ¡_5P@¼bBþÿA20ýV8P88P8YþÔõ.8@L\)²+²$+².G333´++°=2°/´M++°U/´A+°3/±*933±é± 22°]/°Ö´61+°6±/+´.1+°.±'+´ &+²' +³@'$ +° ±+´=1+°=±!+´Z+°Z±D+´R+°R±>+´&+°2°´P+°P/±^+±/6²8999°.°9°'° 9° °9±Z!±#:99°Dµ9JMU$9±P°9±A·!DJPRXZ$9±$±%899°3´ '6$901.5463263234632##"&547!5654&#"#4&#""!42654&#"2654'#"&'M`’ri;7ip�@²ŽdcŽ-,kJIk-þ2gdS0@PJ5Nc‰„_Ch""!!/D9*(9 C%•ex¥]] w�Uÿc‹†aþ¹4CIllID36C¢WtS4þ¡_6OxV®>¼bBþÿBþ" !pC/+<9'.DYÿõ.>FRê²+²*+°43´++°C2°/´G++°M/´$++°9/±0?33±é± 22°S/°Ö´<1+°<±5+´41+°4±-+´ &+²- +³@-* +° ± +°2±Pé°B2°P±D+°)2´&+±T+±5<²>999°4°9°-° 9° °9±DP´$'J$9±MG³ 'JP$9±*±+>99°9´ -<$901.5463263234632#".54>3265!5654&#"#4&#""!42654&#"M`’ri;7ip�@²ŽdcŽ’v&LD*9M*B{ ý@gdS/APJ5Nc‰„_CÄ#?X,!¼bBþÿBýÀYÿõ.@H[)²+²,+°63´++°E2°/´N+°I/°S3´!+°%2²I! +³@IW +°;/±2A33±é± 22°\/°Ö´>1+°>±7+´61+°6±/+´ &+²/ +³@/, +³ /+´L&+° ±+´E1+°E±X+´W+°W±++°F2´&+±]+±7>²@999°6°9°/° 9°°9±E±!I99±WX²#N999°+³%BP$9±IN±(99°!°#9±,±-@99°;´ />$901.5463263234632# 54632632>5!5654&#"#4&#""!4"3274&#"#5.M`’ri;7ip�@²ŽdcŽ_œdþõU6_O*G ýDgdS/APJ5Nc‰„_Cþ{-¤qL+&C7%–dx¥]] w�Uÿc‹†aþÇX}9.9345$1&6C¢WtS4þ¡_6OxV®>¼bBþÿBþ$@)*&"YÿðÊ.=¨²,+²+°73´C+°/´ 7+°0/°&3±é°2°>/°:Ö´41+°4±,+´+1+°+±+°#2´1+° 2±?+±,4²67999°+°9°³$9°°9±,°69°±99° ²4:999°0± 9901267632#"'5;2654+53254&#"#4&#".5476]5fA?qEHnk>D21PI6Q1/‰-N_HG.:&+$,S"&$ a£I2+ZGR+0&%>þ¥_7N@;S®>8%–dvTSYþêÊ.FRç²5+²M+°@3±"é²+°/´G++°(/´)7+°9/°/3±é°2°S/°CÖ´=1+°=±5+´41+°4±+´P+°P±%+±,J22´1+° 2´+±T+±5=²?@999°4°9±P² 999°%µ")/($9°±99±MG±99±"5±?99°(± 99°)²=C999°9± 9901267632#"&547&'532654+53254&#"#4&#".54762654&#"]5fA?D21PI6Q1/‰-N_HG0(87)'89.:&+$,S"&$ aW/2NC`aB=-S3*ZGR+0&%>þ¥_7N@;S®>8%–dvTSüÿ8()78(&:YþÆÊ.@IY²1+°;3²F+±é²+°/´J++°R/´A+°%/´&7+°5/°,3±é°2°Z/°>Ö´81+°8±1+´01+°0±+´W+°W±D+´O+°O±"+±)M22´1+° 2´+±[+±18²:;999°0°9±W²999°D@ &,%GJR$9±"O°9°° 9±FAµMOUW$9±1²:999°%±99°&² 8>999°5± 99012>32#"&547&'532654+53254&#"#4&#".546264&"2654'#"&']5f@a‹/NSFiKJk6 z/=qEHnj?DcPI6Nc‰-N_’$#0""0B9*': C.:&'9UN'F a]-6XKjkJK6V 2+ZGR+0L=þ¥_7NyU®>8%–dw¦ýK#.! 0"pC/,<9'/CYÿë.ERÛ²$+´F7+²+°/´M++°./±/é°?/°63±é°2²? +³@?; +°S/°Ö´C1+°C±;+´:1+° Ö±Ié°:±*+´1+°2°´3<+°3/²3 +³@3/ +±T+±;C²E999±: ° 9±3I¶$(6O$9±FM± (99±.²*E999°/°9°?³ C$901.54763267632#"'&547632654&+532654&#"#4&#""3254'&N_HGu365 B„ %Yÿ"t2?À²0+°:3°/´++°!/±"é°4/°*3±é°2°@/°Ö´+°±=+´71+°7±0+´/1+°/±+°'2´ &+° 2±A+±=±99±07²9:999°/²999°±!99° ° 9±!0² 9999°"° 9°4¶ '7=$9°°9012632! '&473 54+5327654&#"#4&#".5465d9¢cAMMMþ-þÿ—°T@Lš…à…p6+0&%UCG8APH7Mcˆ-L`Ž.2%X/5bo$+|þól}£‚,n‹áj[ÉtR2=E %Aþ _5PyU®>8%—cw¦Yþ?t2LT ²=+°G3°/´N++°/´)++°./±/é°A/°73±é°2°U/° Ö´%+°%±J+´D1+°D±=+´<1+°<±+´T+°T±++±4O22´ &+° 2´+±V+±J%±"#99±=D²FG999°<²)999±T°9°+¶./7$9°° 9±N³PS$9°)²QR999°=°9°.² +F999°/° 9°A¶ %4DJ$9°°#9012632"'&547# '&473 54+5327654&#"#4&#".546264&"5d9¢cAMPPiX0.Š./9Tþÿ—°T@Lš…à…p>30&%UCG8APH7Mcˆ-L`ŽN98P8.2%X/5bo$-zuI.aB2//1C'!l}£‚,n‹áj[ÉtR2=E %Aþ _5PyU®>8%—cw¦üS9P88PYþt2FQa-²7+°A3°/´R++°Z/´G+°/´%++°*/±+é°;/°23±é°2°b/°Ö´"+°"±D+´>1+°>±7+´61+°6±+´_+°_±J+´W+°W±'+±/U22´ &+°2´+±c+±D"± 99±7>²@A999°6²%999±_°9°J·+2*ORZ$9°W°9°'° 9±G·JOUW]_$9°%²LM999°7°9°*² '@999°+° 9°;¶"/>D$9°° 9012632#"&547# $5473 54+532654&#"#4&#".5462654&"2654'#"&'5c9¢gŠPPmaiKIk,FþðþÁT@Lï~p>32IUCKuPJ5Mcˆ-L`�%#$.#!/D:*(8 C.3$Xj\o$-zƒB3nJjjJ4*øó£‚,n‹ÓÓÉtR>0=EI=þ _6OyU®>8%—cx¥üš"""!qC/ +=9'.DYÿòw.GIJ+² +±#33±6é°A2°/°3´.7+±*22°H/°&Ö´ 1+° ±+´<+°±+´3<+°3±:+±=é°=±E+´+±I+± ²"#*999°°,9°°.9±:3° 9°=° 9°E²G999±6°"9°· &,2E$9°.²;2°X/°6Ö´01+°0±'+´&1+°&±+´C1+°C±I+´L<+°L±+´V+°V±+°Q2´&+´ +±Y+±'0²239999°&°<9°°>9±IC°9°L°9±V°9°´ $9±P± 99±F'± 299°,·06?H99901#"&547&'#"&=4&#"#4&#".546326323265332654'2654&"2654'#"&'ËM_jbiKIk.F4m_’d@1>RI5Nc‰-M`’rq33m`�eB/>TI4Oj‹#$.#!/D:*(8 C.$–d›Q1pJjjJG25T|Z’3232653Qb{"¨þâºþ|þ4ÅÎW9H϶Žö†Ëe!%w(*we�XE7JOJ4S^…+L`EIvy*b?j|ZC3GS!:vY©E3232653264&#"Qb{"¨”d`CB_Ÿþ®þ)¾É49Hɰš sÉd!%w(*we�XE7JOJ4S^…+L`EIvy*b?j|ZC3GS!_'98('9::vY©E7#"'#"&=4&#"#4&#".54632>32326532654&#"2654'#"&'Qb{"¨Œ5GkJIk Ÿþ®z³¿„zI+&19H*Fr{¬ jihŸYnQ$!%w(*we�XE3NOJ4Pa…+L`‘sy*a?j|ZC3GS@j"#!!/D9*': D:vY©EJjkI%',Jh“^[lN$v{PY@&0" [Zn\ @GM1þš_6OyU¬?9%—cy¤\+1uf–YÿòU.:Hʲ0+°&3²+°3±;é°C/±é°+/±"433´ C+±22°I/°Ö´81+°8±0+´/1+°/±'+´&1+°&±+´F&+°F±>+´1+±J+±08²:999°/° 9°'° 9°&° 9±>F´" $9±;0°:9°C³8$9°° 9°+± 9901.547632632632#"&547632&#"#4&#"#4&#"%2654'&+"LaHGuk93sz0?Œ‚\[7>jY_;;daL3*U;UN&%:8CPK4Q1/‰M:;% D/-%˜bvTSTTT&~ ZS€‹ed,C(NMnÆ'9Dm‡zX\’8K<þ¡_7(&K:þ¡_5P@;S®> WDXA31H4),Yÿó.=GѲ+´F7+²0+²+°/´A7+°)/± 33±7é±:22°H/°3Ö´-1+°-±%+´$1+°$± +±>é°>±+´1+°±+´1+±I+±%-²/07999°$°99° °:9°>° 9°²;F999°²8$˜cvTS]]]]ýT!%Yÿ,ª2G½²=+±233°/´$++°A/±.833±é± 22°H/°Ö´+°±+´E<+°E±=+´<1+°<±3+´21+°2±*+´&+±I+±±99±=E²G999°<° 9°3³ $$9°2° 9°*°9±A=· * G$9°°901.54763262632# 4732>54'&#"#4'&#"#4&#"¦MaIGui;7Þ;9nMF?o¦Àwý:e9V`µÞ’i¦�`718Y:FP&%98DPK3S1.‡$˜cuUS]]]^b]}g�gAê–†1twx©](7XˆY^FML<þ¡_7(&L9þ¡_5P@:T®>Yþ|ª2PZ ²F+±;33°/´Q++°!/´-++°J/±7A33±é± 22°[/°#Ö´(+°(±+´N<+°N±F+´E1+°E±<+´;1+°;±+´Y+°Y±3+°S2´&+´+±\+±(±%&99±FN²P999°E° 9°<³ !-$9°;° 9±Y²7999°3±99±!Q³SY$9°-²TX999°F±V99°J· #(3 P$9°°&901.54763262632#"&547# 4732>54'&#"#4'&#"#4&#"264&#"¦MaIGui;7Þ;9nMFz.@`CB_�Áý:e9V`µÞ’i¦�`718Y:FP&%98DPK3S1.‡*'98('9:$˜cuUS]]]^b]}ËoT6C``C"ê–†1twx©](7XˆY^FML<þ¡_7(&L9þ¡_5P@:T®>þ”9P89N:YþOª2LXh-²C+±933°/´Y++°a/´M+° /´-++°G/±5>33±é± 22°i/°"Ö´'+°'±+´J<+°J±C+´B1+°B±:+´91+°9±+´f+°f±P+´^+°^±2+´&+°\ Ö´+±j+±'±$%99±CJ²L999°B°9°:³ -$9°9° 9±f°9°Pµ 5VYa$9°^°9± M³\f$9°-´PV^d$9°C±S99°G· "'2L$9°°%901.5463262632#"'&547# 4732>54&#"#4&#"#4&#"2654&#"2654'#"&'¦Ma“ri;7Þ;9ny™‰2DkJH75 t¨ý:e9VAp¦»s„ÅœQlV:FPL87EPK3Oc‡"#"!/D9*': C$™bw¦]]]^¸„Õq\þØ""!!pB/#,<9'.CYÿòü.%.–²+²+´%++° /°3±é°2°±(é°//°Ö´1+°±+´-+°-±&+±!é°!±+´&+±0+±²999°-°9°&±%99°!°9±%°9°(´!-$901>3 !4'&#".54763254'4#"6,XY ýã&%9Q3-‰-M`EJu€Ó�=',XVG7'.ÓÑ6'þÓþÿ`6(&@8%–dwOWþ¾Îe>KWC)n3=i¹…Yþöý.&09Có²+²?+±'é²+°3´0++° /´;++°/°*3±%é°2°%±3é°D/°!Ö´1+°±+´8+°8±+´B+°B±1 +±,é°,±'+´&+° 2°´=+°=/±E+±²%999°8°9°±0399°B±99°,±*:99°'² ;?999±=°9±;³ =B$9±'°9°3´!,8$901>3 ##"&547#4'&#".54763254'4#"6264&#",XY $%_DB_$þ&%9Q3-‰-M`EJu€Ó�=',XVG7'.Ó8N98('9Ñ6'þÓþÿ,;C``C:-`6(&@8%–dwOWþ¾Îe>KWC)n3=i¹…þk9P88('YþÐý.#,4@O)²;+°3±$é²+°3´,++° /´B++°I/´5+°/°'3±"é°2°"±/é°P/°Ö´1+°±+´3+°3±+´N+°N±-+±)é³>)-+´L+°L/´>+°)±8+´F+°F±$+´&+° 2°´D+°D/±Q+±²"999°3°9±N²,/999±-L°9±)>µ '5;AI$9°8°B9±D°9±;5µ DFLN$9±$°9°/´)3$901>3 ##"&547#4&#".5463254'4#"62654&#"2654'#"&'+YY /0kIJk1æM7Nc‰-M`’r€Ó�=eFVGDHÓL##""^D9*(9 Ñ6'þÓþÿ4HJjjJH4`7MxV®>8%•ex¥þ¾ÎeU™5)n�X¹…þ¶""""pC.!,<9(/Yÿü.-7@NÙ²%+²+´7++° /´A++°H/´++°/°13±,é°2°,±:é°O/°(Ö´"1+°"±+´?+°?±+´K1+°K±8+±3é°3±.+°2´&+±P+±"²$%,999°?°9±8Kµ7:AH$9°3± 199°.±D99±HA³DK$9±7°$9°:´"(3?$901>3 #"'&54>326=!4'&#".54763254'4#"62654'&#",XY MEh^A65I*?sþ.&%9Q3-‰-M`EJu€Ó�=',XVG7'.Ó":%>!8!Ñ6'þÓþûzD=(!2 .,%(G`6(&@8%–dwOWþ¾Îe>KWC)n3=i¹…þxWÿ%”21:B̲$+°3²+´:++°/´7+°/°53±*é°/2°*±=é°C/° Ö´+°±'+´!<+°!±+´A+°A±;+±7é°7±2+°2´&+±D+±'± 99±!²#$*999°A±,99°;²/:999°7°59±:°#9°=¶! '7,A$9±*° 901#".54732>5!4&#".54632>3 54'4#"6”Uˆ”W™à£QY:JH�Æ@{~Mþ0L6Ocˆ,N`”q€6,XY L�=eEVGEGÓ ;T,3rŠ—…2l~w¦b+ >+`6NxV¯=8%•ex¥]6'þÓ¾¾ÎeT›4)n€Y¹…Wþ=”2:CKW$²-+°3²#+´C++°/´U++°/´7+°'/°>3±3é°82°3±Fé°X/°Ö´+°±0+´*<+°*±#+´J+°J± +´R+°R±D+±@é°@±;+°"2´&+°2°´L+°L/±Y+±0±99±#*²,-3999°J±599° ²CF999°R± 899±@D°>9°;³OU$9±U³ LR$9°± O99°-°9±C#°,9°F¶*0@5J$9±3'°901#"&547#".54732>5!4&#".54632>3 54'4#"64&#"326” PZ_DB_FY™à£QY:JH�Æ@{~Mþ0L6Ocˆ,N`”q€6,XY L�=eEVGEGÓ½7)(89'(8 O3-dC`aB,# 3rŠ—…2l~w¦b+ >+`6NxV¯=8%•ex¥]6'þÓ¾¾ÎeT›4)n€Y¹…þ)77)'98Wþ—29BJUdn²(+°63²+´B++°/´c++°[/´S+° /´7+°"/°=3±.é°32°.±Eé°e/°Ö´+°±++´%<+°%±+´I+°I±+´`+°`±C+±?é³P?C+´^+°^/´P+°?±K+´X+°X±:+°2´6&+°2°6´V+°V/±f+±+±99±%²'(.999°I±099°° 9°`²BE999±C^°39°P°9°?´=NS[b$9°K±Mc99°X±899± S·KPVX^`$9°²MN999°(°89±B°'9°E¶%+?0I$9±."°901"&547#".54732>5!4&#".54632>3 54'4#"64&"3264'#"&'26—i–j;K™à£QY:JH�Æ@{~Mþ0L6Ocˆ,N`”q€6+YY TcO�=eEVGEGÓˆ$.#!#:9*(8C^DþÌKiiK3-3sÁŠ—…2l~w¦b+ >+`6NxV¯=8%•ex¥]6'þÓþòS31¾ÎeT›4)n€Y¹…þ8"""#!!,<8(.DDZÿ#L2/œ²+°#3°/´7+°/°3´-7+°)2°0/°Ö´ +° ±&+´ <+° ±+´&+°±+´&+±1+±& ± 99± ´"#)$9°°+9°°-9±¶ "&+$9°-° 901%#"54732654&#"#4&#".54632632LþýÕñþ×O@HγØiZ.BOJ4Ob†,M_‘sj:8hz�áÎð çŸ}'kŠÅèͰj–T3þ¡_6OwW¯=8%–dx¥]]ÂZþZL2?Kã²5+°3°/´@++°/´)7+°9/°03±é° 2°L/° Ö´%+°%±+´=<+°=±5+´4&+°4±+´I+°I±-+´&+°C Ö´+±M+±%±"#99±5=´)?$9°4°9±I°9°C³ 0$9±@³CI$9°)±F99°5°9°9¶ %-?$9°°#901.54632632#"&547#"547327654&#"#4&#"2654&#"¦M_Žvj:8hIB†0@aCA` DIõþâO@H}{ѲqpiZ.BOJ4R3,†À(87)(78%–dw¦]]h^‡ÑwT8C`aB çŸ}'kŠÄutff±j–T3þ¡_6O@9U¯=þs8()78('9Zþ<L2;FV²2+°3°/´G++°O/´=+°/°R3´'7+°6/°-3±é° 2°W/°Ö´$+°$±+´9<+°9±2+´1&+°1±+´T+°T±R+´E+°E±?+´L+°L±*+°J2´ &+´+±X+±$±!"99±29´';$9°1°9±T°9±ER±- 99°?³GO$9±=³JT$9°'´?BEL$9°2°9°6¶ $*;$9°°"901.54632632#"&547#"54732654&#"#4&#"2654&#"2654'#"&'¦M_‘sj:8hz�„5GiKIl ;?òþßO@HüÍ´ßiZ.BOJ4Ob†£2!#"JjkI!  éŸ}'kŠÅèίj–T3þ¡_6OwW¯=þÅ!""’D.!+<8(.DVþ†Þ9O[&²:+´E+° /´P7+°/°3´)++°-2°4/±é°\/°&Ö´&+°±+´&+°°6 Ö´7+°7/´6+³M+´H+°±+´Y&+°Y±1+´&+°±S+´ &+³= S+´B+°B/´=+±]+±²"#)999±M7°+9±H°49°Y³3K$9°1±-J99°¶ :?@EW$9°B°P9±P ³"#$9°¶ &+W$9°)°9°4²67999012#"'&547#4&#".546326323654&"'>2'654&#"&54672654'&'yD] `9838[^.(D@TKG4JaU@=I\Špr3@ 3F6@ R›Vp‡fP:9Ng†t›6=))LE<Q@('VTg[BGM@a[‘I;þ¿J5JrQO|/"�]qœYY# ''7DýoU‚43#^:OO:`!35�RrT^AS@A�O@_Yý¸á9Zeo`²:+´P+°D/´f+° /°$3±[é°/°3´.7+°*2°5/´7+°p/°'Ö´1+°±+´1+°±+´b&+³Sb+´X+°X/´S+°b±G+´n+°n±^+°h2´&+³^+´2&+°2/´&+°^°M Ö´=+°^´A+±q+±³#$*+$9°°,9±X°89±bS²7.999°G°V9°n²PU999°2@ 0 5:DJK[`fk$9°M±?99±Pfµ=AGVXk$9±[ ²#999°µ',`$9°.±099°5³278$9012#"'&547&#"#4&#".54762632654&#"'62#"&5467'654&#"&54672654'264&#"FN-shMS41|.;HPL3M22'&F7KbIJâ35qM8$/<6-6iTmHLI42K5'bM98Ic�q{/:dqQ,,**[K68]°S€FAZ†h D:þ³M3K9:PL?>1"�^sMNJJ/!8:-UüþpT]6!S3JK2,@ #^:OO:`!34‚Rr\Y8~QVv6+3ý�+<+*>*Yýœá6W`hx–²7+´M+°A/´i+°q/´g+° /°!3±Yé°/°3´'7+°+2°2/´7+°y/°$Ö´1+°±+´1+°± +´_&+³P_ +´U+°U/´P+³D_ +´v+°_±[+´&+³[+´/&+°//´&+°[°J Ö´:+³n:J+´a+°a/´n+°:°> Ö´l+°l/´>+±z+±² !'999°°)9± U°59±DP²4+999±v_²SR999°/@ -27AGHMX]cegiq$9°a±Y99°J°<9±Mg@ >D:SUclntv$9±Y ² 999°µ $)]$9°'±-99°2³/45$9012#"&547&#"#4&#".54632632654&#"'62#"&5467'654&#"&54>2654'4#"322654'#"&'FN-shMPh|.;HPL3MdRA7Kb”pq35qM8$/<6-6iTmHWP9:R>.bM98Ic�pM^:dq³,--,*#4*! + 5[K68]°S€‡Z†h D:þ³M3KsPQz1"�^rœJJ/!8:-UüþpT\8$^9QQ93J #^:OO:`!34‚Rr\Y8~QVv8ýš++.V5#"/,$4Yþ÷X &2ç²+² "-333´++²+´+² +³@ +°/´'++´" +´++°3/°$Ö´+°±+´+² +³@ +°±+´0+°0±+´ &+° 2° ´*+°*/±4+±³!"$9°°9±0°9°²'-999± *° 9±'± 99±°!9°³$$9012!3##"&547#5654&#"&5462654&#"0]{N"#_CB`#ÄLW:9,+Io€Ý(87)(89upYH#ßýà.8C`aB8.#'_8O&%+°±)+´6+°6±+´ &+° 2° ´4+°4/±B+±² !999°°9±>°9°)³/19$9± 4° 9±'µ 46<>$9±° 9°³#$9012!3##"&547#5654&#"&5462654&#"2654'#"&'0]{N++jKIk,§LW:;UIo€¯2!#";0D9*(9 BupYH#ßýà2DJjkIB4#'_8ON9O$:8xTuþ!""‘B/!+<9'.CYÿW -=Þ²+°)3´++²+´+² +³@ +° /´.++°7/´++´") +´++°>/°+Ö´&+°&±+´+² +³@ +³:+´1+°/´:1+°±+°2´ &+±?+±&³"()$9±:°9°³ .1$9±7.²:999±°(9°"³&+$9012!3#"'&54>326=!5654&#"&5462654'&'&#"0]{NPHm`905I'LhþjLW:9,+S)o€z";#. 9#upYH#ßýÜzD=)"0-*#)F*'X8O&%9Z 68xUtýÐ YþÿW 7J²&+°33´++²&+´'+²'& +³@' +°/´=+°8/°B3´+°2²8 +³@8F +´,3 +´++°K/°5Ö´0+°0±+´;+°;±)+´+²) +³@)& +°±G +´F+°F±+°$2´ &+±L+±0³,23$9±);°9°±899°F±=99°±?99° ° 9±=° 9°8² ?999°°9±'°29°,³)05$9012!3#'.547632632676?!5654&#"&546"3274&#"#'4&0]{N]Qr3GC"$%-SCUþeLW:9,+Io€ç%�e?"!9.upYH#ßýî$mA8 2%012Q !#'_8O&%(/V]EC€YFn@)-X]D>)/U]DC€66$#64$% D/+-W]D?;KÍ,+**|mVF!Îýò#%Z6MH6R!95{Qnþ9;A.27*g= $C3%$$%30% 2-16(6þ–*++*YýŸZ BJY‚²+´#+°1/´L+°S/´I+°E/´;++°@/´'+° /´+´ +² +³@  +°/´++°Z/°Ö´+°± +´+²  +³@ +°±4+´X+³%X4+´+°/°83´%+°X±+´ &+² *.222³P +´C+°C/´P+° ´=+°=/° ´N+°N/±[+± ²999°°9±4°99±X%°69°C@ #'(1?@;GLS$9±NP°,9° °!9±EIµ4.NPVX$9°;±6,99°@²8*9999±#'² !999± °9± °9°³ $9012!3!5654&#"&5464632&#";2#"&547&'73254+"&4#"322654'#"&'0\|NþL\59WIo�3[Eo>)/U]DC€<GHK!B@|mVF!Îýò#%Z6MH6R!95{QnþGP9Z3)A{I7@##@8H{A+1Z8Q]-;,1UC`@ÿ6'T0-W]Yþ„ QZi²+°"3´J+°<2°0/´-+°(/´6+°D/´W+° /´+´ +² +³@  +°/´++°[/°Ö´+°±+°22´M+´++°M± +´+²  +³@ +³F +´U+°±Y+´A+°A±+´ &+³9 +´%+±\+±³$9± +°P9°F³)5O$9±U²HJ999°Y²CD 999°A´"6<(?$9±% ±./99±-0°29±6(°39°D°P9°W°O9°J·%9?AFMR$9°° 9° °9± °9°³ $9012!3!5654&#"&5464632632+"3!!"&4632654&#"#"&547&#"&%32540\|NþL\59WIo�ƒqU3GLhrWâ22¦þR.@@.à?RB0 'BfA- 6ND\ "97|mVF!Îýò#%Z6MH6R!95{QnýëIPfQXt $50R0V@2G&C4EE4A%1,J--¬/DD7Yþs ]d©²+°Z3´@+°N2°-/´*+°%/´4+°G/´d+°:/´;+° /´+´ +² +³@  +°/´++°e/°Ö´+°±V+°02´Q+´(+²(V +³@(+ +°Q± +´+²  +³@ +³J +´b+°±^+´D+°D±+´ &+° °" Ö´7+°7/°>3´"+°2²7" +³@7: +±f+±V³$9± (²3ST999°J±&99°±NZ99°b°L9°^±\G99°D°B9°³%4@$9± 7° 9±%*°09±G4°T9°d²7"S999±;:´ DJ^b$9°@µBLQV`$9°°\9° °9± °9°³ $9012!3!5654&#"&5462#!"3!!"&54632654+53254#"#"&547&#"&54763264'20\|NþL\59WIo�ùD\,,P>þÜ11¨þP+AA+$88-c (<-.6/1J4U=5J= *2\|mVF!Îýò#%Z6MH6R!95{Qnþ„66D B:@ $40'&3)541; ,@0GD3B,8-C1/eG+(¬>:=Yýæt MW`m²J+°3´?+°12°"/´Z+°_/´(+°8/´S+° /´+´ +² +³@  +°/´++°a/°Ö´+°±G+´B+°B± +°%2´+°X2²  +³@ +°°Q Ö´;+°;/´Q+°±U+°\2´5+°5±+´ &+° ° Ö´.+°./´+±b+±G³$9± B±DE99±;²?J999±UQ·("83L=Z_$9°5²+1999±_Z±%+99±8(°E9°S°D9°?¶.5;BGN$9°J°L9° °9± °9°³ $9012!3!5654&#"&5462#"&54632>54&#"#"&547&#"&5463263254&3254&#"0\|NþL\59WIo�ßWdMQ};aM/1Z (:F;AJ3:CC 5L8%SzV7!)%@<&jX52&5|mVF!Îýò#%Z6MH6R!95{Qnþ„{_}^e)'!% ŠF@V;[6QKP6Z),;xRnTP$PP%Nþ– Yýæq QYh§²N+°3´B+°22°!/´g+°c/°\3´'+°+2²c' +³@c_ +°;/´X+° /´+´ +² +³@  +°/´++°i/°Ö´+°±J+´E+°E±>+°$2´V+°V° Ö´ +° /´+°>´e+²>e +³@> +°V±`+´_+°_±R+´7+°7±+´ &+° ° Ö´/+°//´+±j+±J³$9± E°H9°>°G9°²BN999±`Vµ;'T@Xc$9°_³!)Pg$9°R°49°7´+2Z\$9°°-9±cg±$-99°'±)H99±X;°G9°B¶/7>EJT$9± N°9± °9°³ $9012!3!5654&#"&5462#"&54632632654&#"#"&547&#"&54763264'32&#"#5&#"320\|NþL\59WIo�ÜWd¤o:Y3"-%1TM;)$&:=IH7JL*a4Œ6BAC@'$%-R8|mVF!Îýò#%Z6MH6R!95{Qnþƒ{_wÈ*)',H�>X],:+0TA_BQ8Z1/B}*$uáT0/UX“ $Yþ„u ?þ²+° 3´4+°+2²4 +³@40 +° /´+´ +² +³@  +°/´++°@/°Ö´+°±<+´7+°7± +´+²  +³@ +°±0+´/+°/±+´ &+° °# Ö´(+°(/´#+±A+±<³$9± ´49:$9±/0°9°³ %&+$9± °9± °9°³ $9012!3!5654&#"&5462632'654&#"#54&#"&54760\|NþL\59WIo�"%: RO\x W=2&B+19['w/.|mVF!Îýò#%Z6MH6R!95{Qnþ„'DnLŠ93)l4C1ææ.G5j'29ˆL87Xþ„‡ >JP²9+°<3´.+°&2².9 +³@.* +°/°43´I+´$C*9 +´$+°/´+´+² +³@ +°/´++°K/°Ö´ +° ±6+´1+°1±+´+² +³@ +°±*+´)+°)±!+´F+°F±+´&+³?+´+±L+±6 ± 99°1±99°±3499°².9999±)*°;9°!°<9°F°&9°±I99°?²$=C999±I°39°C³16!$9±9.°;9°° 9±° 9°³ $901%!5654&#"&54632!3#"&5463&#"#54&#"&54632624'&#"32WþLW:;UIo€W\|N0NB5?P;!:a>- 0=StbML!'®|@ 00!M#%Z7LH6R!94{RnmVF!ÎýJgO:AR!Oäç ,I3k#56‹Ol::t`5/YýöÆ S_x²&+°*3´+°L2²& +³@P +°3/´8+°C/°!3´W+° /´+´ +² +³@  +°/´++°`/°Ö´+°±#+´+°±P+´O+³OP+´ +° /´+²  +³@ +°O±F+´T+°T±+´ &+³Y +´@+° ±;+´0+±a+±#±99°±99° ³ !&$9°P°9±O°(9±TF²*5L999°¶368CJW[$9±@Y±,>99±83°59°C°69°W° 9°@ #,0;>@F]$9°&°(9° °9± °9°³ $9012!3!5654&#"&546"&54632632#"'732654&'#"&54767&#"#54&3254'&#"0\|NþL\59WIo�Å0?Ps`PI!)M€&M)*sX:2(*@Q*" ;<3@"#4A[=,Ü ?%3|mVF!Îýò#%Z6MH6R!95{QnþGJ3l&46ŒNp22R 79U^Š#4fE0N !I[T8;/0Méé!,¶2\3%>Yþ‹W 7 ²"+°%/´ +°+/´+° /´+´ +² +³@  +°/´++°8/°Ö´+°±5+´.+°.± +´+²  +³@ +°±(+´+²( +³@(% +°±+´ &+°#2° ´!+°!/±9+±5³$9± ²23999°(±+99°° 9± %±&299°+³(.5$9± "°9± °9°³ $9012!3!5654&#"&546233!5654&#"&5460\|NþL\59WIo�1>U‰Aþ×23"!31QV|mVF!Îýò#%Z6MH6R!95{QnþL; :þ� 8 .*02'S8OYýÃ] @KR²"+°*/´A+°F/°<3´!+°6/´+° /´+´ +² +³@  +°/´++°L/°Ö´+°±>+´9+°9± +´+²  +³@ +°±3+°-2´+´I+²3I +³@30 +°±+´ &+±#'22° ´!+°!/° ´D+°D/±M+±>³$9± ²;<999°3±699°I± /99±²*AF999± D°%9±FA±-'99°!´$%/1;$9°6³39>$9± "°9± °9°³ $9012!3!5654&#"&546233##"&547#5654&#"&546264&#"0\|NþL\59WIo�1>U‰AJ32KR23"!31QV,,*+|mVF!Îýò#%Z6MH6R!95{QnþL; :þ�".2KK2-# 8 .,02'S8Oþl*<-,*Yý§^ @IY€²"+°*/´J+°R/´G+°C/°<3´!+°6/´+° /´+´ +² +³@  +°/´++°Z/°Ö´+°±>+´9+°9± +´+²  +³@ +°±3+´+°- Ö´W+²-W +³@-0 +°±+´ &+°#2°A Ö´O+° ´!+°!/° °' Ö´M+°M/´'+±[+±>³$9± ²;<999°-±699±W3°/9°± T99°A³*EJR$9± M°%9±CGµ-'MOUW$9°!´$%/1;$9°6³39>$9± "°9± °9°³ $9012!3!5654&#"&546233##"&547#5654&#"&5464#"3262654'#"&'0\|NþL\59WIo�1>U‰A$R89S%?23"!31QV.+..*$4+ - 6|mVF!Îýò#%Z6MH6R!95{QnþL; :þ�'78SR96( 8 .,02'S8OþÑ,,-p4$!/,#5YýæW DMa²"+°'/´G+°L/´-+°2/´ +´3+°:/´+° /´+´ +² +³@  +°/´++°N/°Ö´+°±B+´=+°=± +´+²  +³@ +°±5+´+²5 +³@52 +³E5+´*+°*/´E+°±+´ &+°#2° ´1+°1/°!3±O+±B³$9± =°@9°³:?$9±E° 9°µ'-/GIL$9±LG±*E99°-°/9°2°@9± 3°?9°:³5=B$9± "°9± °9°³ $9012!3!5654&#"&546233#"&5463267!5654&#"#"&5463254&#"0\|NþL\59WIo�?T  A`N5VE/V! ÿ-2# 01"LW£X..$4|mVF!Îýò#%Z6MH6R!95{QnþL<,<þ‘L],& &, >!-,6.!V9Oþ¬Yþ‹f ;D@²+´<+°$/´:+°@2´%+°*/´5+° /´+´ +² +³@  +°/´++°E/°Ö´+°±2+´-+°-± +´+²  +³@ +³8 +´'+°'/´8+²'8 +³@'$ +°±;+´@+°@±+´ &+° °# Ö´A+°A/´#+±F+±-2±99°'´/05$9±8 °:9°°9±@±<99±:%°/9°*³'-28$9± °9± °9°³ $9012!3!5654&#"&5464632!5654&#"&5463237"354&0\|NþL\59WIo�LZED./ýþ11"$22RW<>RfŸ'6¿9|mVF!Îýò#%Z6MH6R!95{QnýäE[./>Õ 9!-*!11'S9NL;!ý;(šœ)8YýÂg FOY—²+´G+°)/´P+°//°#3´E+°K2°E´U+°;2°/´0+°5/´@+° /´+´ +² +³@  +°/´++°Z/°Ö´+°±=+´8+°8± +´+²  +³@ +³C +´2+°2/´C+²2C +³@2/ +°±F+´K+°K±,+´W+°W±+´ &+° °# Ö´L+°L/´#+°&2°#´S+°S/±[+±8=±99°2´:;@$9±C °E9°°9±W,°.9°´)GPT$9± S°$9±UP±,&99±E0°:9°5³28=C$9± °9± °9°³ $9012!3!5654&#"&5464632##"&547!5654&#"&5463237"354&264&"0\|NþL\59WIo�LZED./I42KþØ11"$22RW<>RfŸ'6¿9,,<+*|mVF!Îýò#%Z6MH6R!95{QnýäE[./>Õ#.3JK2/" 9!-*!11'S9NL; ý;(šœ)8þ3+<,,*Yý£m ENVe¾²+´F+°(/´W+°_/´U+°./°"3´D+°J2°D´Q++°.´/+°4/´?+° /´+´ +² +³@  +°/´++°f/°Ö´+°±<+´7+°7± +´+²  +³@ +³B +´1+°1/´B+²1B +³@1. +°±E+´J+³+JE+´c+°J±+°O2´ &+´\+° °" Ö´K+°K/´"+° °% Ö´Z+°Z/´%+±g+±7<±99°1´9:?$9±B °D9°°9±cJ°-9°·(FQSUW^$9± Z°#9±QUµ+%Z\ac$9°.°:9±D/°99°4³17RfŸ'6¿9,--,+&2 ,@+ 4|mVF!Îýò#%Z6MH6R!95{QnýäE[[@Õ)98SS89) 9!-*!11'S9NL; ý;(šœ)8þ–++-V2&!0,%3Wÿ"ñ2)ò+°%3´++²+´+² +³@ +° /´7+´% +´++°*/°Ö´+°±'+´"+°"±+´+² +³@ +°±+°2´ 1+±++±'°9°"°9°²$%999°² 999±°$9°µ"'$9012!3! $547! 75!5654&"&546Ê^zPþˆÿþíd9V¾8 þlMWt,+K!o€uoZH#ßýÓÑóò¦…'y‹þbŠ #%a8O&%9T":8xUtWþ5ñ25? ²%+°13´++²%+´&+°/´6++°/´!7+°+/´++°@/°Ö´+°±3+´.+°.±(+´+²( +³@(% +°±+´>+°>±#+°2´ 1+° 2° ´9+°9/±A+±3°9°.°9°(²01999°²!999±>°9°#³ 6;$9± 9° 9±6³ 9=$9°!± ;99±&°09°+µ(.3$9012!3#"&547# $547! 75!5654&"&546264&#"Ê^zPKR_DC^(.ÿþíd9V¾8 þlMWt,+K!o€Û(88('99uoZH#ßýÓZ4.`D^_C(&óò¦…'y‹þbŠ #%a8O&%9T":8xUtý8P89N9Wþ ñ25AQ4²&+°13´++²&+´'+°/´B++°J/´6+°/´!7+°,/´++°R/°Ö´+°±3+´.+°.±)+´+²) +³@)& +³)+´O+°±M+´?+°?±9+´G+°G±$+°2´ 1+° 2° ´E+°E/±S+±3°9°.°9°)²01999°²!999±O°9±9?²BJ999°G° 9±6· 9?EGMO$9°!± <99±'°09°,µ).3$9012!3#"&547# $547!26=!5654&"&5462654&#"2654'#"&'Ê^zP`^iKIk *ÿþíd9V¾š«þlMWtWK!o€Ç#"!!0C8+(9 CuoZH#ßýÓ]93lJjjJ7.óò¦…'y‹þbJ@ #%a8OL8T":8xTuýH""!!qB0+;8(/CYþ„� ?I3²9+°!3´-+°'/°33´+°@2° /´+´ +² +³@  +°/´++°J/°Ö´+°±6+´G+°G±C+´1+°1° Ö´ +° /´+²  +³@ +°1±*+´>+°>±+´ &+³ +´#+±K+±6±99°G±99° ²4@E999°C±/399°²-9999±>² '999°°!9±-¶#*16=E$9°9° 9° °9± °9°³ $9012!3!5654&#"&5462654'7#"&=4#""&54632!2654'0\|NþL\59WIo�$2Z$s!'H>No OHvCv^D38þþ$S4%|mVF!Îýò#%Z6MH6R!95{QnýDT/c6'=ŠH3=V@7uB[D_bF]w')B:tC&`3T&9Yý¶{ ENXв@+°!3´4+°*/´F+°;/´O+°2°O´K++° /´+´ +² +³@  +°/´++°Y/°Ö´+°±=+´V+°V±R+´8+°8° Ö´ +° /´+²  +³@ +°8±1+´D+°D°M Ö´-+°-/´M+°D±+´ &+³ +´#+°'2°#´I+°I/±Z+±=±99°V±99° ²;OT999°R±6:99°²4@999±MD°/9°µ !*FK$9°±%J99±KF±-'99±O;±%/99°4¶#18=CT$9°@° 9° °9± °9°³ $9012!3!5654&#"&5462654'7#"&547&=4#""&54632264&"%2654'0\|NþL\59WIo� $2[%s=>I42K+Np OIvCw]Ek`,-<**þ¼$S4%|mVF!Îýò#%Z6MH6R!95{QnýDU.b7'>‰i3#J3JK29&&b7uB[D_bF]wT>:tÖ+<,,<+ÖC&`3T&9Yýœ{ EM]g˜²@+°!3´4+°*/´N+°V/´L+°;/´^+°2°^´H++° /´+´ +² +³@  +°/´++°h/°Ö´+°±=+´e+°e±a+´8+°8° Ö´ +° /´+²  +³@ +°8±1+´D+°[2°D´-+°-/°D±+´ &+³F +´S+°%2³ +´#+°'2°#´Q+°Q/±i+±=±99°e±99° ²;^c999°a±6:99°²4@999±D@  !*/HJLNVY$9±HLµ-'QSY[$9±^;±%/99°4¶#18=Cc$9°@° 9° °9± °9°³ $9012!3!5654&#"&5462654'7#"&547&=4#""&546324#"322654'#"&'%2654'0\|NþL\59WIo� $2[%sBCQ9:R‰n1)N9QQ9H))Z7uB[D_bF\xT>:tn++.V4$!0-$4òC&`3T&9Yþ„Ž F<°*/´!+°7/°03´C+±&22²7C +³@74 +° /´+´ +² +³@  +°/´++°G/°?Ö´:+³:?+´+°/´+°:±4+´3+³ 34+´+²  +³@ +°3±-+´+°±+´ &+³# +´(+±H+±:°9°4µ<=C$9° °E9±3±99°-°09±²!%*999°#°&9±!*°<9°7µ#(-:?$9°C±%E99° °9± °9°³ $9012!3!5654&#"&54623254'7#"&=4#"#54#"&54763260\|NþL\59WIo�,HWQZ]$wšFPTDFS-3S%n).LW|mVF!Îýò#%Z6MH6R!95{Qnþ…RFBa„b*.9‚Á`L9VPääPI4f*2<†J7:::Yý¹Ž OX‚°//´P+°U/´!7+°@/°93´L+±&22²@L +³@@= +° /´+´ +² +³@  +°/´++°Y/°HÖ´C+³CH+´+°/´+°C±=+´<+³ <=+´+²  +³@ +°<±6+´+°°W Ö´2+°2/´W+°±+´ &+³# +°R3´(+´,+±Z+±C°9°=µEFL$9° °N9±<±99°6°99±W°49°´!%/PU$9°#²&*T999±UP±2,99°!³*4EF$9°@µ#(6CH$9°L±%N99° °9± °9°³ $9012!3!5654&#"&54623254'7#"&547&=4#"#54#"&5476326264&"0\|NþL\59WIo�,HWQZ]$wE7K32K,STDFS-3S%n).LWF,-<**|mVF!Îýò#%Z6MH6R!95{Qnþ…RFBa„b*.9‚}.$D3JK2:&&x9VPääPI4f*2<†J7:::ýì+<,,<+YýŸ‘ NVdª°//´X+°_/´U+°Q/´!7+°@/°93´K+±&22²@K +³@@= +° /´+´ +² +³@  +°/´++°e/°HÖ´C+³CH+´+°/´+°C±=+´<+³ <=+´+²  +³@ +°<±6+´+°°c Ö´2+°2/´c+°±+´ &+°\2° ´O+°O/³# +´(+° ±Z+´,+±f+±C°9°=µEFK$9° °M9±<±99°6°99±c@ !%/4QSUW_$9°O²&X^999°#°*9±QUµ2,Z\ac$9°!³*4EF$9°@µ#(6CH$9°K±%M99° °9± °9°³ $9012!3!5654&#"&54623254'7#"&547&=4#"#54#"&5463264#"322654'"&'0\|NþL\59WIo�,HWQZ]$wADS79S5RTDFS-3S%n[HWu+..+OJ2 +@+ |mVF!Îýò#%Z6MH6R!95{Qnþ…RFBa„b*.9‚y/)O7SR8C*'w9VPääPJ3f*2<†Ol::þT++.U2%!/,%Yýí† S[w²P+°3´E+°>2°+/´Z+°V/´0+°7/°A3´!+° /´+´ +² +³@  +°/´++°\/°MÖ´H+³HM+´+°/´+°H±B+´A+³ AB+´+²  +³@ +°A±.+´X+°X±:+´+°±+´ &+³# +´(+±]+±H°9°BµJKP$9°A°R9°.°9°±>99±:³+0VZ$9°´!%27T$9°#±&599±VZ°.9°0±2K99±!7±5J99°Eµ#(:HM$9°P±%R99° ±&99± °9°³ $9012!3!5654&#"&54623254'7#"&5432>7#"&=4&#"#54#"&5463264#"320\|NþL\59WIo�'GVUS\$x‘‚3Joe GL"1EDS,1S%lXFI)$ñT,P0|mVF!Îýò#%Z6MH6R!95{QnþƒRG2ld*/>–�´+'D4 ]M!93OææOI2h*3<‡Mo,,þ3YþSƒ T`²+²&1Q333´?+°F2²? +³@?C +²2+°,/´7+° /´+´ +² +³@  +°/´++°U/°/Ö´4+³4/+´+°/´+°4±N+´I+°I±C+° 2´B+´+²C +³@C +°B±<+´+°±+´ &+³# +´(+±V+±4±199°N±299°I±99°C³FKLQ$9°B²RS999°°79°<²,?999±²!%9999°#°&9±?7·#(/4!LN$9°±%S99° °9± °9°³ $9012!3!5654&#"&54623254'7#"&547327'&=4#"#54#"&5476260\|NþL\59WIo�\+³>9+´+°/´+°>±X+´S+°S±M+° 2´L+´+²M +³@M +°L±F+°22´+´f+°±+´ &+³# +´(+°b Ö´,+±j+±>°;9°X²<999±MS´UV[$9°L±]99°±6A99°F±I99°f°49±µ!%/C_d$9°b²&*c999±6_³2,bf$9°A²4cd999°P@ #(*9>!VX$9°[±%]99° °9± °9°³ $9012!3!5654&#"&54623254'7#"&547#"&547327'&=4#"#54#"&546326264&"0\|NþL\59WIo�T@ ü,,<++|mVF!Îýò#%Z6MH6R!95{Qnþ„G:8PnM'*4szEW3JK2 x˜WI>C‚dB 1E@ÁÁ@;*Y -2rE[--ýß*<-,*Yý‡{ ^fvÕ²[+²&;333´P+°I2²P[ +³@PM +²<+°//´g+°o/´e+°6/´A+° /´+´ +² +³@  +°/´++°w/°9Ö´>+³>9+´+°/´+°>±X+´S+°S±M+° 2´L+´+²M +³@M +°L±F+´+³tF+´2+°2/´t+°±+°_2´ &+´l+° °, Ö´j+°j/´,+³# +´(+±x+±>°;9°X²<999±MS´UV[$9°L±]99°±6A99°2±I99°F°49±t±cq99°·!%/Caego$9°l±&*99±6e·2,_cjlrt$9°A±4a99°P@ #(*9>!VX$9°[±%]99° °9± °9°³ $9012!3!5654&#"&54623254'7#"&547#"&547327.=4#"#54#"&5463264#"322654'#"&'0\|NþL\59WIo�T@ ,--,+$4 , , 4|mVF!Îýò#%Z6MH6R!95{Qnþ„G:8PnM'*4s…E#]8SS8$#x˜WI>C‚dBDD1E@ÁÁ@;*Y -2rE[--þ=,,-U3$!/,$3Yþ÷w-*3=î²+±&33´++°/2²+´+°/´4++° /´++°+/´ 7+°>/°(Ö´#+°#±+´+² +³@ +°±+´/1+°/±+´;+°;±0+´+°7 Ö´+±?+±#²%&999°°9±;°9°7² +999±0°9±4²8999±°%9° ³#($9012354632##"&547!5654&#"&546%"!54&264&"0[{¶„haŒ3#_DB`$þ-LW:;UK!o€±A[?e(88P89uqXH#ühˆŠ`þ½.8D_aB9-#'_8OM:R$78xTuqdCþþBeýT8P88('9YþÖw-)2>N²+²%9333´++°.2²+´+°/´?++°G/´3+°/´++°*/´ 7+°O/°'Ö´"+°"±+´+² +³@ +°±+´.1+°.±+´L+°L±6+´D+°D±B+°/2´+° 2±P+±"²$%999°°9±L°9°6µ* TèaCôöBþ?3&'2›:8y=%19Xþˆw-"AJ²&+´++°5/´:+°?/´/+° /´!+°F2´ +°/´++°B/´++°K/°Ö´+°± +´+²  +³@ +°±"+´F1+°F±#+°72´-+°-±G+´+³2G+´<+°(/V]EC€YFn@)-X]D>99°E@ +/&9C0HKTY$9°W°49°P°)9±YT±<699°C±>499°H²@2A999±+/²(#)999± &°9±! °9°² 999014632!5654&"&54763234632&#";2#"&547&'73254+"&"!54&264&#"ž„hdEDüüLWt++K!o@?X^;=¶i[Eo>)/U]DC€77I42K#F0*-W]D>;K‡B^?^,,**DfƒBA`þÆ"$^7L$$;Q"64|P9678TF!Ä9;A.27*g> %C3JK20& 2-16(6�aCôöB`ü+<+*>*Yý�w-GOWg•²#+´(+°6/´X+°`/´V+°R/´@7+°E/´,+°/´+°L2´ +°/´++°I/´++°h/°Ö´+°± +´+²  +³@  +°±+´L1+°L±9+´e+³*e9+´ +° /°=3´*+°e±P+´]+°]±M+´+°[ Ö´3+°3³3/+´B+°B/´/+°%2±i+± ²999°°9±9 °>9±e*±;I99°P@ (,-6@DEH#TX`$9±[]°19°M°&9±RVµ93[]ce$9°@±;199°E²=/>999±(,²% &999±#°9± °9°³ $9014632!5654&#"&5463234632&#";2#"&547&'73254+"&"!544#"322654'#"&'ž„hb‹üüLX9;UK!o€WZ|¶i[Eo>)/U]DC€@;Q89S/7+*-W]D>;KÉ„^?@,--,*$3 +!, 5Dfƒƒ`þÆ"$^6MJ9P#63}QnmVF!Ä9;A.27*gC)J8RR8?) --16(6�aCôöBüË++-U2$".,$2Xþ„”-"OXaO²7+°;3´*+°G2°#/´Y+° /´!+°T2´ +°/´++°P/´++°b/°Ö´+°± +´+²  +³@ +°±3+´.+°.±"+´T1+°T±&+´`+°`±\+´L+°L±U+´+°°? Ö´D+°D/´?+±c+± ²999°°!9±T"±0199±`&±*799°\µ#9IP($9°L±G;99°U°B9°D°A9±Y#±0B99°*¶&.3?DL^$9°7°99° °9±! °9°² 999014632!5654&"&5476323"&547&#"&547632632'654&#""!54&2654'ž„hdEDüüLWt++K!o@?X^;=¶Ù=II6%$K*a17P3FL53qWã22¦þR.@@.á>RA0'AfA,VB^?^P#:7DfƒBA`þÆ"$^7L$$;Q"64|P9678TF!�1,I--jN(#32RXt $50R0V@2G&C4EE4A%+aCôöB`ýÁ0DD7XþŽ-"env¸²#+°b3´H+°V2°5/´2+°-/´<+°O/´u+°B/´C+° /´!+°j2´ +°/´++°f/´++°w/°Ö´+°± +´+²  +³@ +°±^+°82´Y+´0+²0^ +³@03 +°Y±" +´j1+°j±R+´s+°s±o+´L+°L±k+´+°°* Ö´?+°?/°F3´*+°&2²?* +³@?B +±x+± ²999°°!9±j0³.;[\$9±sR²TVb999°o³dfO$9°L°J9°k³#<-H$9±?°(9±-2°89±O<°\9°u²?*[999±CB´(LRos$9°Hµ&JTY^q$9°#°d9° °9±! °9°² 999014632!5654&"&54763232#!"3!!"&54632654+53254#"#"&547&#"&5476326"!54&4'32ž„hdEDüüLWt++K!o@?X^;=¶PE[++N?þÜ11§þP+AB*%67-c)<.-7/2J5T=5I= B^?^,+1-/DfƒBA`þÆ"$^7L$$;Q"64|P9678TF!P66E B:@ $40'%4(541; .>0GE2B,8-B1.fG+(èaCôöB`ýl>:=Xýæ¡-"V_ir‰²S+°#3´H+°92°*/´l+°q/´0+°A/´e+° /´!+°[2´ +°/´++°W/´++°s/°Ö´+°± +´+²  +³@ +°±"+´[1+³K["+´P+°P/´K+°[±D+´c+°c°j Ö´-+°-/´j+°c±g+°n2´=+°=±\+´+³6\+´&+±t+± ²999°°!9±-K±MN99±jD°H9°c°S9°g@ 0*A;UWFlq$9°=²3#9999±ql±-399±A0°N9°e°M9°H¶&6=DKP`$9°S°U9° °9±! °9°² 999014632!5654&"&54763232#"&54632>54&#"#"&547&#"&546326"!54&3254&3254&#"ž„hdEDüüLWt++K!o@?X^;=¶HWdMQ};aM/1Z (:F;A!'5:CC 5L8$TzV7!B^?^N%@<&jX52&5DfƒBA`þÆ"$^7L$$;Q"64|P9678TF!P{_}^e)'!% ŠF@V;[2),KP6Z),, /?TtaML"'®|þûC]?^„ 00!M"$^7LI7T"64{QomVF!ôfƒƒ`ýíJgN;DO!Oäç ,J2k#56‹Ol::t\aCôöB`ýD5/Xýö -'^j…²3+°73´(+°W2²(3 +³@([ +°?/´D+°O/°.3´b+°/´+°#2´+°/´++°/´++°k/°Ö´ +° ±0+´++°2°+´+°/²+ +³@ +°+±+´#1+°#°Z Ö´[+°[/´Z+°#±R+´_+°_±d+´L+°L±$+´+³G$+´<+±l+± ² 999±+0°9°³(-.3$9±#[°59±_R²7AW999°d¶?BDOU$9°L±9J99±D?°A9°O°B9°b°-9°(@ +09Xþ‹w-'D.²/+°2/´-+´3+°8/´(+°/´+°#2´+°/´++°/´++°E/°Ö´ +° ±+´+² +³@ +°±+´#1+³;#+´B+°B/´;+°#±5+´++²5+ +³@52 +°+±$+´+°02°´.+°./±F+± ² 999°°9±#;±?@99°5±(899°+²-999±-3°?9°8³+5;B$9±/° 9±° 9°² 99901%!5654&"&54632354632'"!54&233!5654&#"&546wüüLWtVK!o€WZ|¶„hb‹éC]?^Â>U¦Bþº12"!31RX"$^7LI7T"64{QomVF!ôfƒƒ`žaCôöB`ý¤L;*þ™'2!-*02'S8OYýÃz-(NY‰²0+°8/´O+°=/±2T33´.+´?+°D/´)+°/´+°$2´+°/´++° /´++°Z/°Ö´ +° ±+´+² +³@ +°±+´$1+³G$+´L+°L/´G+°$±A+´,+²A, +³@A> +°,°W Ö´;+°;/´W+°,±%+´+±1522°´/+°//°´R+°R/±[+± ² 999°°9±$G±IJ99°A±)D99±,;³ .=$9±%W²8OT999±R°39±=O²5;J999±.?°I9°D³,AGL$9±0° 9±° 9°³ $901%!5654&#"&54632354632'"!54&233##"&547#5654&#"&546264&#"wüüLX9:VK!o€W[{¶„hb‹éB^?^Â>U¦BJ32Km12"!31RX*,,*+"$^6MI7T"63|QomVF!ôfƒƒ`žaCôöB`ý¤L;*þ™$,2KK2-#'2!--02'S8Oþl*<-,*Yý¤z-(NTc¨²0+°8/´U+°]/´T+°Q/´/7+³>/Q+°23´?+°D/´)+°/´+°$2´+°/´++° /´++°d/°Ö´ +° ±+´+² +³@ +°±+´$1+³G$+´L+°L/´G+°$±A+°;2´,+´a+²Aa +³@A> +°,±%+´+±1522³Z%+´P+°P/´Z+°´/+°//°´X+°X/±e+± ² 999°°9±$G±IJ99°A±)D99°a³ .=$9±P,´8QU\_$9±X°39±QTµ;5XZ_a$9°>°J9±/?°I9°D³,AGL$9±0° 9±° 9°³ $901%!5654&#"&54632354632'"!54&233##"&547#5654&#"&5464#"32654'"&'wüüLX9:VK!o€W[{¶„hb‹éB^?^Â>U¦B#'S89R'[12"!31RXG,--$4 ,@+ 4"$^6MI7T"63|QomVF!ôfƒƒ`žaCôöB`ý¤L;*þ™(98SS89('2!-+ 02'S8Oþ¢XXV3$!.*$3Yþ�w-(/7@þ²-+´:7+°22°*/´6+°/´+°$2´+°/´++° /´++°A/°Ö´ +° ±+´+² +³@ +°±+´$1+°$±* +´?+°?±8+´4+°4±%+´+°7 Ö´)+±B+± ² 999°°9±8?³ -6$9°4°29±:6±4?99±-° 9±° 9°³ $901%!5654&#"&54632354632'"!54&!5432#4'3'4#"6wüüLX9:VK!o€W[{¶„hb‹éB^?^Œþ“¹´B?]‹r&v"$^6MI7T"63|QomVF!ôfƒƒ`žaCôöB`ü¨§ÉÆf&_O°< CcOYýÃw-(:BKUP²2+´E7+°=2°)/´L+°Q/´B++°/´+°$2´+°/´++° /´++°V/°Ö´ +° ±+´+² +³@ +°±+´$1+°$±/ +´J+°J±,+´S+°S±C+´?+°?±%+°N2´+°B Ö´5+°%´8+±W+± ² 999°°9±S,´ .AE$9°C°29°?³)=LQ$9°B°P9±5%°69±QL±8,99°B³/56.$9°E±?J99±2° 9±° 9°³ $901%!5654&#"&54632354632'"!54&"&547#5432#4'3'4#"6264&"wüüLX9:VK!o€W[{¶„hb‹éB^?^2K’¹´J?]‹r&v9,,<++"$^6MI7T"63|QomVF!ôfƒƒ`žaCôöB`ûÛK2-#§Éƪ$,3Jwf&_O°< CcOþÒ*<-,*Yý¦w-(9AIQas²2+´D7+°<2°*/´R+°Z/´P+°L/´@++°/´+°$2´+°/´++° /´++°b/°Ö´ +° ±+´+² +³@ +°±+´$1+°$±/ +´H+°H±,+´_+°_±B+´>+°>±J+´W+°W±%+°U2´+°A Ö´5+°%´8+±c+± ² 999°°9±_,°.9°B·*2 @DN\$9°>´H99±2° 9±° 9°³ $901%!5654&#"&54632354632'"!54&"&547#5432#4'3'4#"64#"322654'#"&'wüüLX9:VK!o€W[{¶„hb‹éB^?^;pS&¹´$&D?]‹r&)'vV,--,+&2 +!, 4"$^6MI7T"63|QomVF!ôfƒƒ`žaCôöB`û¾R87)§Éƪ)78Bf&_O°+°'2´&+±C+±6±99±+1²34999°°9°±!99±>=° 9±!°9±)°39°.µ+16$9± 9°9012354632# 467!2>7!5654&#"&546%"!54&Ð[z¶ƒgcŒ'1SIz]Mýc&4;.$ZSg€N@ ýGKW9:UH!n€°@[?_uqXI"üi‡‰aþ¾,C- ìamN(A_TþW8)#%a7PL8V#78xTuqeBþþEbZþA2>GQ'².+°:3´++°C2².+´/+°/´H++°/´'++°4/´++°?/´ 7+°R/°Ö´%+°%±<+´7+°7±1+´+²1 +³@1. +°±+´C&+°C±+´P+°P±E+´ +°2±S+±<%±!"99±17²9:999°°9°±'99±P°9°Eµ -?J$9° °K9±H³KO$9°'±M99°.°9±/°99°4µ%17<$9± ?°"9012354632#"&547# 467!2>7!5654&#"&546%"!54&264&#"Ð[z¶ƒgcŒET`CB_F¦ýc&4;.$ZSg€NA ýGKW98WH!n€°@[?c(87)(89uqXI"üi‡‰aþ¾[3/_D`aC)#ìblN(A_TþW8)#%a7PR2V#78xTuqeBþþCdüž8R78P9Zþ2>GRb_².+°:3´++°C2².+´/+°/´S++°[/´H+°/´'++°4/´++°?/´ 7+°c/°Ö´%+°%±<+´7+°7±1+´+²1 +³@1. +°±+´C&+°C±+´`+°`±^+´P+°P±K+´X+°X±D+°-2´&+°2°´V+°V/±d+±<%±!"99±17²9:999°°9°±'99±`°9±KP´ ?S[$9°X°9±H·KPVX^`$9°'³MN$9±/°99°4µ%17<$9± ?°"9012354632#"&547# 467!2>7!5654&#"&546%"!54&2654&"2654'#"&'Ð[z¶ƒgcŒNajJKjC‘ýc&4;.$ZSg€N@ ýGKW9:UH!n€°@[?_ ""0#$.C9*(: CuqXI"üi‡‰aþ¾c13mKiiK5.ìamN(A_TþW8)#%a7PL8V#78xTuqeBþþEbüæ""""rD/!+<9(/DYþ„Œ-(MWE²H+°/3´;+°B/°53´N+°)2°/´+°$2´+°/´++° /´++°X/°Ö´ +° ±+´+² +³@ +°±E+´U+°U±+´$1+°$±Q +´?+°?±8+´L+°L±%+´+°°1 Ö´,+°,/´1+±Y+± ² 999°°9±U°S9°$²=BN999°?±;H99±L8± 99°%³)./5$9±;N¶,18?EKS$9°H°.9°° 9±° 9°³ $901%!5654&#"&54632354632'"!54&2654'7#"&=4#"#"&54632!2654'wüüLX9:VK!o€W[{¶„hb‹éB^?^+%0Z%r!%I>Np NG;:tC&`3T&9Yý¸…-(T^h�²N+°/3´B+°8/´U+°Z/´)+°_2°/´+°$2´+°/´++° /´++°i/°Ö´ +° ±+´+² +³@ +°±K+´f+°f±+´$1+³b$+´F+°$±?+´S+°S°] Ö´;+°;/´]+°S±%+´+°°1 Ö´,+°,/´1+°52°1´X+°X/±j+± ² 999°°9±f±Id99°b²DH_999±F$±BN99±;?°9°S° 9°]°=9°%µ)./8UZ$9°,°39±ZU³;5IH$9°)±3=99°B¶,1?FKRd$9°N°.9°° 9±° 9°³ $901%!5654&#"&54632354632'"!54&2654'7#"&547&=4#""&54632264&#"%2654'wüüLX9:VK!o€W[{¶„hb‹éB^?^#%1Z$s==I42K*Kp OHvCv^D39^,,**þ½&S5%"$^6MI7T"63|QomVF!ôfƒƒ`žaCôöB`üØT/c6'=Ši3$G3JK29%%b7uB[E^bF]w'*A:tÔ+<++<+ÔD%`3T&9YýœŒ-(S[ku«²N+°/3´B+°8/´\+°d/´Z+°I/´l+°)2°l´V++°/´+°$2´+°/´++° /´++°v/°Ö´ +° ±+´+² +³@ +°±K+´s+°s±+´$1+°$±o +´F+°F±?+°;2´R+´i+°R±%+°T2´+´a+°32°°1 Ö´,+°,/´1+°52°1´_+°_/±w+± ² 999°°9±s±Iq99°$²DHl999°F±BN99±i?± 99°R±=g99°%¶)/8.X\d$9±VZµ;5_agi$9±lI±3=99°B¶,1?FKQq$9°N°.9°° 9±° 9°³ $901%!5654&#"&54632354632'"!54&2654'7#"&547&=4#""&546324#"322654'#"&'%2654'wüüLX9:VK!o€W[{¶„hb‹éB^?^+%0Z%rB@R8:R=@p NGvDw]Fjy,--,*$3 +! + 5þÓ$S5&"$^6MI7T"63|QomVF!ôfƒƒ`žaCôöB`üØT/c6'=Šp0(N8RQ9K(*W7uA\D_bF\xT>:tn++.V4$"/,$4òC&`3T&9Yþƒ‹-(S^°8/´/+°E/°>3´Q+°)2²EQ +³@EB +°/´+°$2´+°/´++° /´++°T/°Ö´ +° ±M+°2´H+°H±+´+°±+´$1+³A$+´B+°B/´A+°$±;+´-+°-±%+´+°°6 Ö´1+°1/´6+±U+±M ³ $9±±K99°B²EJQ999°°S9°A°)9±;$±*>99°-± 99°%³/348$9±/8°J9°Eµ,16;HM$9°Q±3S99°± 499±° 9°³ $901%!5654&#"&54632354632'"!54&23254'7#"&=4#"#54#"&547632wüüLX9:VK!o€W[{¶„hb‹éB^?^þÝ–[Q]`&zžIQXEIT.6V%r,-M["$^6MI7T"63|QomVF!ôfƒƒ`žaCôöB`þRFBa„b*0;‚Á^N9VOååOJ3f*3=†M68:Yý»“-(]h®°>/´^+°d/°U3´/++°N/°G3´Z+°)2²NZ +³@NK +°/´+°$2´+°/´++° /´++°i/°Ö´ +° ±W+´R+°R± +´+² +³@ +°±+´$1+³J$+´K+°K/´J+°$±D+´-+°-°f Ö´@+°@/´f+°-±%+´+°°6 Ö´1+°1/°a3´6+´:+±j+±W ³ $9±R±U99°K²NTZ999°°\9±D$±)G99±-@± 99°f°B9°%µ/34>^c$9°1±8=99±d^±@:99°/²8BT999°Nµ,16DRW$9°Z±3\99°± 499±° 9°³ $901%!5654&#"&54632354632'"!54&23254'7"&547&=4#"#54#"&5463262654&"wüüLX9:VK!o€W[{¶„hb‹éB^?^ÑK[Q^a'zG6$#jH(WXEIT0V&qXM\R+*>*+"$^6MI7T"63|QomVF!ôfƒƒ`žaCôöB`þRFBa„b*0;‚{0$C3%$H48%&z9VOååO%&2f*3>…Kp::ýî*++*Yý¢‹-([csǰ=/´d+°l/´b+°^/°T3´/++°N/°G3´Y+°)2²NY +³@NK +°/´+°$2´+°/´++° /´++°t/°Ö´ +° ±V+°2´Q+°Q±+´+°±+´$1+³J$+´K+°K/´J+°$±D+´-+°-°q Ö´@+°@/´q+°-±%+°\2´+´i+°82°°6 Ö´1+°1/´6+°:2°6´g+°g/±u+±V ³ $9±±T99°K²NSY999°°[9°J°)9±D$±*G99±-@± 99°q°B9°%¶/4=3`dl$9±^bµ@:gioq$9°/²8BS999°Nµ,16DQV$9°Y±3[99°± 499±° 9°³ $901%!5654&#"&54632354632'"!54&23254'7#"&547&=4#"#54#"&546324#"322654'#"&'wüüLX9:VK!o€W[{¶„hb‹éB^?^þÝ–[Q]`&zC@Q9:Q1QXEIT.6V%r\J[—+--+*$4*! + 4"$^6MI7T"63|QomVF!ôfƒƒ`žaCôöB`þRFBa„b*0;‚w1(M9QP:B((v9VOååOJ3f*3=†Nm:þ�,,-U3$".,$3Yýê¢-(bj‡²_+°)3´T+°M2°9/´i+°e/´>+°F/°P3´/+°/´+°$2´+°/´++° /´++°k/°Ö´ +° ±\+´W+³W\+´+² +³@ +°W±+´$1+°Q Ö´P+°$±<+´g+°g±I+´-+°-±%+´+³1%+´6+±l+±\ ³ $9±W±Z99°Q²TY_999±P°a9±g<±)M99±-Iµ 9>ei$9°%µ/34@Fc$9°1°D9±ei°<9°>±@Z99±/F±DY99°Tµ,16IW\$9°_±3a99°± 499±° 9°³ $901%!5654&#"&54632354632'"!54&23254'7#"&5432>7#"&=4&#"#54#"&5463264#"32wüüLX9:VK!o€W[{¶„hb‹éB^?^ÂKYR]`%}—ˆ6MtnIQ$3FIV-4V&qZKO(%ýW-Q3"$^6MI7T"63|QomVF!ôfƒƒ`žaCôöB`þQH3n�c,0>˜’´*)D5  ]M!;3QææQJ3g,4;ŠPm++þ0 Yþ†ž-(=S²>+°)3´I+°32°/´+°$2´+°/´++° /´++°T/°Ö´ +° ±Q+´L+³LQ+´+² +³@ +°L±+´$1+°$°A Ö´F+°F/´A+°$±;+´6+°6±%+´+³1%+´,+±U+±Q ³ $9±L°9°µ>CDINO$9±%6· )./389$9±>° 9±° 9°³ $901%!5654&#"&54632354632'"!54&2'654&"&546!2'654&#"&546wüüLX9:VK!o€W[{¶„hb‹éB^?^Sm‚cMpLd„qþ¾Sm…bN98Ic�q"$^6MI7T"63|QomVF!ôfƒƒ`žaCôöB`þpTƒ33$]9PO:`!34‚RrpT‚43#^:OO:`!34‚RrYý»¡-(I_kr²J+°)3´U+°?2°4/´`+°/´+°$2´+°/´++° /´++°l/°Ö´ +° ±]+´X+°X± +´+² +³@ +°±+´$1+°$°M Ö´R+°R/´M+°$±G+´B+°B±8+´i+°i±%+´+³=%+´,+°,°0 Ö´c+°c/´0+±m+±] ³ $9±X±[99°´JOPUZ$9±8B³ @E$9°i±)D99°%µ4:;?`f$9°=°.9±U`@ ,08EGMO[]f$9±J° 9±° 9°³ $901%!5654&#"&54632354632'"!54&2#"'&547'654&"&546!2'654&#"&5462654&#"wüüLX9:VK!o€W[{¶„hb‹éB^?^SmCM$#64$%VcNpKcƒqþ¾Sl„aM98Ic�q3,+**"$^6MI7T"63|QomVF!ôfƒƒ`žaCôöB`þpTX8 U3%$$%3[ $]9PP9`!35�RrpT‚43"_:OO:`!34‚Rrýï*++*Yýœ¥-(H^fv•²I+°)3´T+°>2°3/´g+°o/´e+°/´+°$2´+°/´++° /´++°w/°Ö´ +° ±\+´W+°W±+´+°±+´$1+°$°L Ö´Q+°Q/´L+°$±F+´A+°A±6+´t+°t±%+´+°°, Ö´<+°acego$9±<_°.9±Te@06,DFLNZ\ajlrt$9±I° 9±° 9°³ $901%!5654&#"&54632354632'"!54&2#"&5467'654&"&546!2'654&#"&5464#"322654'#"&'wüüLX9:VK!o€W[{¶„hb‹éB^?^SmF[P9;Q<+dNpKcƒqþ¾Tk„aM98Jd‚r[+--+)#4*! + 5"$^6MI7T"63|QomVF!ôfƒƒ`žaCôöB`þpTZ9!b9QP:1I $]9PP9`!35�RroU‚43"_9PP9`!34‚RrþR++.V5#"/,$4Wþ÷³-:EO;²0+´GC+²+² !@333´++² +³@ +°/´;++´*L0 +´*++°&/°3´77+°2°P/°3Ö±Né°N±I+´-&+°-±"+´!<+°!±+´&+° Ö´C+²C +³@ +°±+´ 1+° 2° ´>+°>/±Q+±N3°(9°I±*099°-±&799±!"°99°±99±C±99±²;@999± >° 9±0;³ >C$9±G°9±L´(-3IN$9°*±99°&°9901233##"&547#5>54'&#"#4&#"632#"&5476326264&#"2654&"Øz€GØP%#_DB_#†1H(+O654&#"#4&#"632#"&5463262654&#"2654'"&'2654&"Øz€GØP.,jJIk,k2GWK5=SfG² ]GU]IX[£‰…?5€##""/C9R9 DýR20R3-›…wUßýà4CJklIE2'$ˆJTuB7þ“m9@ãF_JKbƒh“¼JJýZ#! "pC/*=8(.D%6+,<;,+Wÿ³-BR\6²+± )33´++²8+´TC+² +³@ +°/´C++°L/´++´2Y8 +´2++°./°%3´?7+°2°]/°;Ö±[é°[±V+´5&+°5±*+´)<+°)±+±Oé°O±!+´&+²! +³@! +°±+°2´ 1+±^+±[;°09°V±2899°5±.?99±)*°A9±O±%99°!°9°²C999°±F99° ° 9±LC²O999±T°9±Y´05;V[$9°2±!99°.°A901233##"'&54>326=!5>54'&#"#4&#"632#"&54763262654'&'&#"$2654&"Øz€GØP�{k918L(Okþ©1H(+O6$/ ;%ýuR20R3-›…wUßýàw„)#/,*#/@'$‰IR7@B7þ“m9@ãF_JKbƒh�\fJJý÷7*,<;,+Wþ†Å-0S^}²4+´@+°F/°:3´Q+° /°3´+² +³@ +°°T Ö´%++°Z/´++°/°3´-7+°2°_/°)Ö±]é°]±W+´"&+°"±+´<+°±I+´N+°N±S+´C+°C° Ö´&+°/´&+² +³@ +°C±+´ 1+° °8 Ö´=+°=/´8+±`+±])°9°W±%99°"±-99±°/9±NI±99°³FKLQ$9°S°9±C³4:;@$9±QF°;9°@µ18=CIN$9°4°L9± %°K9°T° 9±Z´")W]$9°±99°°/901233!5>54'&#"#4&#"632#"'&54763264632'654&#"#"&5473252654&#"Øy�GØPþW2G(+O5=SgF³]GU\Ja,&JS�„@5L=T+%r.b5/GS@IYt,[2-Mýo)21()32-–�tRÑýï&#„HP5=?5þ�c7=ÛD\HK^J=]ŠYcIIýA?S=5Q}:,)j5Iv3?SkO‡;+-c6Mm7*+99T8Wþ·-0do£²1+´K+°?/´<+°8/´E+°R/´_+° /°3´+² +³@ +°°e Ö´%++°k/´++°/°3´-7+°2°p/°)Ö±né°n±h+´"&+°"±+´<+°±V+´[+°B Ö´:+°[±a+´O+°O° Ö´&+°/´&+² +³@ +°O±+´ 1+°=2° °4 Ö´H+°H/´4+±q+±n)°9°h±%99°"±-99±°/9±[B±99±:µ8ERXY_$9°a°9±O³17FK$9±8<°B9±K_µ4HOV[b$9°1°Y9± %°X9°e° 9±k´")hn$9°±99°°/901233!5>54'&#"#4&#"632#"'&54763262+"3!!"&546;254&#"#"'&54732=46%2654&#"Øy�GØPþW2G(+O5=SgF³]GU\Ja,&JS�„@5¡HRiZ«33gþ’/?@.¦�1*#K9E''k#L%BBý%)21()32-–�tRÑýï&#„HP5=?5þ�c7=ÛD\HK^J=]ŠYcIIýÓcO^v=/)*3™0D*.)5?+, Ö´F+°F/´>+²>F +³@>A +°d±i+´Y+°Y° Ö´&+°/´&+² +³@ +°Y±+´ 1+° °8 Ö´M+°M/°T3´8+°42²M8 +³@MP +±y+±v)°9°p±%99°"±-99±°/9°_°9°F°9±>µ54'&#"#4&#"632#"'&54763262#!"3!!"&546;2654+53254#"#"&54732=46%2654&#"Øy�GØPþW2G(+O5=SgF³]GU\Ja,&JS�„@5¶@U//C.þÿ44kþŽ-??-ý'@@\?J:?Tl J1"@Lý)21()32-–�tRÑýï&#„HP5=?5þ�c7=ÛD\HK^J=]ŠYcIIýÓ96DC0I>/)*3%2=+6X'5>Q?p2/$J%8L06DH7*+99T8WýéÈ-0^gr±°54'&#"#4&#"632#"'&54763264632#"&54632>54#"#"'&5473253254&#"2654&#"Øy�GØPþW2G(+O5=SgF³]GU\Ja,&JS�„@5O=R,*GO�7`L,*V?:Y{_l(% '4�DŒv2@N75G‹:4*`0%(hü 7*+99T8Wþ†À-0aiqxƒü²^+°13´R+°K2°?/°;3´w+°h2°s/´D+°Y/´p+°l/´T+° /°3´+² +³@ +°°y Ö´%++°/´++°/°3´-7+°2°„/°)Ö±‚é°‚±|+´"&+°"±+´<+°±[+°B2´n+´u+°n±j+´V+°V±+´&+² +³@ +³O+´N+°±+´ 1+° °4 Ö´I+°I/´4+°82°4´b+°b/±…+±‚)°9°|±%99°"±-99±°/9±n[±99±ju³YTlp$9°V³?R^w$9°°D9°O°9±N°`9°@ 1;=EKdfhr$9± b°69±w?°=9°s³8Bbf$9°D±6d99°p±NO99°l³IV[4$9±^R°`9±y ° 9±´")|‚$9°±99°°/901233!5>54'&#"#4&#"632#"'&54763262#"'#"&54;27654#"#54#"#"5463264#"32%4#"32#"322654&#"Øy�GØPþW2G(+O5=SgF³]GU\Ja,&JS�…?5È9C%%8'D4sHE¦Ž0&$GF=Z% D/"NOAO%"“)(()þµ  Áa�Wtý,)21()32-–�tRÑýï&#„HP5=?5þ�c7=ÛD\HK^J=]ŠYcGGýÓE87")'8662Y(C>MJAH!+W:?++þè$$*Á  c$‹7*+99T8Wþá-0w}…Ž™²o+°s3´c+°\2°?/´<+°8/´C+°N/°R3´}+°�2°‰/´V+°j/´„+° /°3´+² +³@ +°°� Ö´%++°•/´++°/°3´-7+°2°š/°)Ö±˜é°˜±’+´"&+°"±+´<+°±A+°T2´:+°‹2°l Ö´‚+°:±~+° 2´g+°g±+´&+³`+´_+°±+´ 1+°Z Ö´v+²vZ +³@v= +°°x Ö´K+³G +´4+±›+±˜)°9°’±%99°"±-99±°/9±:‚±99°~´Cej€„$9°g´8Rco�$9°°V9±_`±q99°°†9°Z´NP\s{$9±K²17D999±8<°A9±‰}·G4KTPx{‹$9°V°I9±„j²1`_999°cµZglqv€$9±� ° 9±•´")’˜$9°±99°°/901233!5>54'&#"#4&#"632#"'&5476326#!"3!!"543!2654'#"'#"54727654#"#54#"#"546326324"2%4#"32"322654&#"Øy�GØPþW2G(+O5=SgF³]GU\Ja,&JS�„@5*7I4þ¬//Æþ1cc]+#4&A?d“¥~zGJ6]80!PR?\Y9E6RRþ²Á`<7[hýd)21()32-–�tRÑýï&#„HP5=?5þ�c7=ÛD\HK^J=]ŠYcIIý' @-5J3FJ0,#*67AJL>>85A 8)R6;55A7p%%!­[q7*+99T8Wýýá-0ƒ‰‘š¥Œ²€+°13´t+°m2²t€ +³@tp +°A/´M+°^/°b3´‰+°™2°‰°S Ö´R+°“/´f+°{/´�+° /°3´+² +³@ +°°› Ö´%++°¡/´++°/°3´-7+°2°¦/°)Ö±¤é°¤±ž+´"&+°"±+´<+°D Ö´I+°±}+´Ž+°d Ö´—+°Ž±Š+´x+°x±+´&+² +³@ +°°q Ö´p+°±+´ 1+³4 +´k+°k/´4+°[2³O +°V3´=+°92²O= +³@OR +±§+°6ºú÷À3+ °Y°XÀ±6ù°7À³67XY....³67XY....°@±¤)°9°ž±%99°"±-99±I±/F99±d}°G9±Š—µ{vŒ�$9°x³bt€™$9°q°f9°²AM‚999°p°9°±`’99°k³1^m†$9±= °;9±^M±=O99±‰R°;9°S±:`99°“³V[d—$9°f±9†99°{±Ii99°�°D9°t´4kx}Œ$9°€±G‚99± %°F9°›° 9±¡´")ž¤$9°±99°°/901233!5>54'&#"#4&#"632#"'&54763262#"&5473 54+53254/#"'#"54727>54#"#54#"#"5463264#"3%4#"32"322654&#"Øy�GØPþW2G(+O5=SgF³]GU\Ja,&JS�„@5s8E &%5lB·«ÌM+E`•X'#*4+A.s“¤0^3IGD@Y7/"QRAP%•'))þÜ¿_A7[gýˆ)21()32-–�tRÑýï&#„HP5=?5þ�c7=ÛD\HK^J=]ŠYcIIýÓ>5*.F&\´’mV';sOw9Q1!*18:MY1*54'&#"#4&#"632#"'&54763262#"'&54632654'#"'#"5476327654#"#74'0#"5463264#"32%4#"323254#"'#"322654&#"Øy�GØPþW2G(+O5=SgF³]GU\Ja,&JS�„@5l:B w65J/,5S,S 36)F/q“¤6Y/#$CI7\*=0#RS@b˜)(()þ·äQ/Q/)+YaZdý�)21()32-–�tRÑýï&#„HP5=?5þ�c7=ÛD\HK^J=]ŠYcIIýÔF;*šF21$,#-M&0.9NL0@B<54'&#"#4&#"632#"'&54763262#"'53254+53254#"&5>%2654&#"Øy�GØPþW2G(+O5=SgF³]GU\Ja,&JS�„@5…=X6G170<@AA@SAM(<)kýb)21()32-–�tRÑýï&#„HP5=?5þ�c7=ÛD\HK^J=]ŠYcIIýÓ;4C/= @20>)4SB@T]M^rH7*+99T8Wý½·-0`it³²1+´V+°A/´a+°f/°\3´K++°P/´Q+° /°3´+² +³@ +°°j Ö´%++°p/´++°/°3´-7+°2°u/°)Ö±sé°s±m+´"&+°"±+´<+°±^+´Y+°Y±+´&+² +³@ +³D+´h+°±+±MT22´ 1+°>2´:+°42²: +³@P +° ´d+°d/±v+±s)°9°m±%99°"±-99±°/9°^±99°Y°\9±D±[99°±HI99°h°F9°µ1AKVae$9°d±8<99±fa±D>99°K³FH<[$9°P±:I99°Q±8Y99°V°49±j ° 9±p´")ms$9°±99°°/901233!5>54'&#"#4&#"632#"'&54763262#"&547&'53254+53254#"&5>264&"2654&#"Øy�GØPþW2G(+O5=SgF³]GU\Ja,&JS�„@5Œ=X6")4SB@T_K]sýò*<,,<*V7*+99T8Wý¤½--[apzé².+´Q+°=/´b+°j/´a+°^/°W3´F+°K/´L+° /°3´+² +³@ +°°r Ö´$++°w/´++°/°3´*7+°2°{/°'Ö±zé°z±t+´!&+°!±+´<+°±Y+´T+°T±+´&+² +³@ +°°n Ö´?+°?/´n+°±+°\2´ 1+°H Ö°O3´6+°12²H6 +³@HK +°´g+° °: Ö´e+°e/´:+±|+±z'°9°t±$99°!±*99±°,9°Y±99°T°W9±?±V99°±AD99±Hn·=.FQ^abi$9±g²48<999±^aµ?:egln$9°F³AC8V$9°K±6D99°L±4T99°Q°19±r ° 9±w´!'tz$9°±99°°,901233!5>54&#"#4&#"632#"&5463262"&547&/3254+53254#"&5>4#"32654'"&'2654&#"Øy�GØPþW2GWK5=SgF³]FV]IX[£‰„@5…=X 6 GSpS& H<@AA@SAM(<)k¸,--%3 ,@+ 4üÑP31()3-•‚tRÑýï&#„HRp?5þ�c7=ÛD\HJ_~f�¶IIýÓ;4-C-)Q8SS85)C60>)4SB@T]M^rþ.XXV2%!.*$3p8)*:9TWýçÀ--7gq²²e+´Z+°B/´k+°p/´I+°Q/´R+° /°3´+² +³@ +°°/ Ö´$++°4/´++°/°3´*7+°2°r/°'Ö±7é°7±1+´!&+°!±+´<+°±+´&+² +³@ +³]+´b+°b/´]+°°F Ö´h+°±+´ 1+°82° ´V+°V/° °? Ö´M+°M/´?+±s+±7'°9°1±$99°!±*99±°,9°b±99°F°`9±h]±_99±·IQRZekmp$9°V°K9°M°;9±pk°F9°I°K9°Q³?M_`$9°R²;]b999°Z°89±/ ° 9±4´!'17$9°±99°°,901233!5>54&#"#4&#"632#"&5463262654&#""'&54632654&+532654'&#"&546323254&#"Øy�GØPþW2GWK5=SgF³]FV]IX[£‰„@5þcP31()3%"mO0)6G+`$7$))1"@N(=*o\C_ý-".'!5-•‚tRÑýï&#„HRp?5þ�c7=ÛD\HJ_~f�¶IIþ8)*:9Tþ!= )'Nj* '0,&>=* QA?SZN\pEþ  WþˆÎ--7]n²Y+°I/°D3´U+°82° /°3´+² +³@ +°°/ Ö´$++°4/´++°/°3´*7+°2°^/°'Ö±7é°7±1+´!&+°!±+´<+°±M+´R+°R±X+´[+°2°[´&+°/²[ +³@ +°[±+´ 1+° °@ Ö´;+°;/´@+±_+±7'°9°1±$99°!±*99±°,9±RM±99°³IOPU$9°X°9°[°G9°³8=>D$9±UI°G9°Y³=@MP$9°$±>O99±/ ° 9±4´!'17$9°±99°°,901233!5>54&#"#4&#"632#"&5463262654&#"2654'7#"&'#"'&547326=3Øy�GØPþW2GWK5=SgF³]FV]IX[£‰„@5þcP31()3t0:Y$x-2O > LN./y W=1$C+-•‚tRÑýï&#„HRp?5þ�c7=ÛD\HJ_~f�¶IIþ8)*:9TþFG3e)59‡M68 =67KŠ95(i3D/ää.Wý½Î--7dm¬²`+°G/´e+°P/´\+°82° /°3´+² +³@ +°°/ Ö´$++°4/´++°/°3´*7+°2°n/°'Ö±7é°7±1+´!&+°!±+´<+°±T+´Y+°Y±_+´b+°2°b´&+°/²b +³@ +³Jb_+´l+°b±+´ 1+° °@ Ö´;+°;/°g3´@+´D+±o+±7'°9°1±$99°!±*99±°,9±YT±99°³PVW\$9°_°9°J°N9±lb°L9°µ8=>Gej$9°;±Bi99±Pe²JDi999°\²BLN999°`³=@TW$9°$±>V99±/ ° 9±4´!'17$9°±99°°,901233!5>54&#"#4&#"632#"&5463262654&#"2654'7#"&547&'#"'&547326=3264&"Øy�GØPþW2GWK5=SgF³]FV]IX[£‰„@5þcP31()3t0:Y$xI?I42K$+ LN./y W=1$C+D,,<++-•‚tRÑýï&#„HRp?5þ�c7=ÛD\HJ_~f�¶IIþ8)*:9TþFG3e)59‡e6&H3JK24$#=67KŠ95(i3D/ää.Ô*<,,<*Wý¢Î--7ck{ß²_+°G/´l+°t/´j+°P/°f3´[+°82° /°3´+² +³@ +°°/ Ö´$++°4/´++°/°3´*7+°2°|/°'Ö±7é°7±1+´!&+°!±+´<+°±S+´X+°X±^+´a+°2°a´&+°/²a +³@ +°a°y Ö´J+°J/´y+°a±+´ 1+³d +´q+° °@ Ö´;+°;/´@+°D2°@´o+°o/±}+±7'°9°1±$99°!±*99±°,9±XS±99°³PUV[$9°^°9°J°N9±ya°L9°@ 8=>Gfhjlt$9±qd°B9±PjµJDoqwy$9°[²BLN999°_³=@SV$9°$±>U99±/ ° 9±4´!'17$9°±99°°,901233!5>54&#"#4&#"632#"&5463262654&#"2654'7#"&547&'#"&547326=34#"322654'#"&'Øy�GØPþW2GWK5=SgF³]FV]IX[¤ˆ„@5þcP31()3t0:Y$xJIR8:R0% LK`y W=1$C+i+--+)$3*! + 5-•‚tRÑýï&#„HSo?5þ�c7=ÛD\HJ_~f�¶IIþ8)*:9TþFG3e)59‡h5(R8RQ9@(=kMŠ95(i3D/ää.o,,-U3$".,$3WýéÎ--7gp¼²c+°D/´k+°o/´H+°O/°S3´8+°_2° /°3´+² +³@ +°°/ Ö´$++°4/´++°/°3´*7+°2°q/°'Ö±7é°7±1+´!&+°!±+´<+°±W+´\+°\±F+´h+°h±b+´e+°e° Ö´&+°/´&+² +³@ +°e±+´ 1+° °@ Ö´;+°;/´@+±r+±7'°9°1±$99°!±*99±°,9±\W±99°F°Y9°h²SZ_999±b°9°´DHQko$9±eµ8=>KOm$9°;°M9±ok±FK99±8O±MQ99°c³=@WZ$9°$±>Y99±/ ° 9±4´!'17$9°±99°°,901233!5>54&#"#4&#"632#"&5463262654&#"2654'7#"543267#"'#"'&547326=33254#"Øy�GØPþW2GWK5=SgF³]FV]IX[£‰„@5þcP31()3o0;P#tLQy‘s.S -A I!GP.0r$Q8/,D%”-".P--•‚tRÑýï&#„HRp?5þ�c7=ÛD\HJ_~f�¶IIþ8)*:9TþCF3m'1A”{_iJ==119;Lˆ64$i3H-éé1‘ WýâÁ--7ixä²e+±>[33°D/´w+°s/°l3´H+°L2²sH +³@so +°R/°V3´8+°a2° /°3´+² +³@ +°°/ Ö´$++°4/´++°/°3´*7+°2°y/°'Ö±7é°7±1+´!&+°!±+´<+°±Y+´^+°^±F+´u+°u±d+´g+°n2°g³g+´&+°/´&+² +³@ +°g´p+°p/°g±+°P2´ 1+° °@ Ö´;+°;/´@+±z+±7'°9°1±$99°!±*99±°,9±F^²[999°u²V\a999°±Hs99°d°9±gp³DTJw$9±¶8=>LRjl$9±sw±Fj99°H±JN99±8R±PT99°e³=@Y\$9±/ ° 9±4´!'17$9°±99°°,901233!5>54&#"#4&#"632#"&5463262654&#"2654'7#"543263267#"'#"&547326=3&#"#5&#"32Øy�GØPþW2GWK5=SgF³]FV]IX[£‰„@5þcP31()3b3>UwKQ{’R,%5!%*KJP\vW<0!.<(-(#T=-•‚tRÑýï&#„HRp?5þ�c7=ÛD\HJ_~f�¶IIþ8)*:9Tþ>G5j*/A“{bjS@&,44nN„70*f5H/!ææ3�"Wþ„Â--7\Z²8+°=3´Q+°H2²Q8 +³@QM +° /°3´+² +³@ +°°/ Ö´$++°4/´++°/°3´*7+°2°]/°'Ö±7é°7±1+´!&+°!±+´<+°±Y+´T+°T±M+´L+°2°L´&+°/²L +³@ +°L±+´ 1+° °@ Ö´E+°E/´@+±^+±7'°9°1±$99°!±*99±°,9±TY°9°´8QVW$9°M°9°L°;9°³=BCH$9±/ ° 9±4´!'17$9°±99°°,901233!5>54&#"#4&#"632#"&5463262654&#"2632'654&#"#54&#"&5476Øy�GØPþW2GWK5=SgF³]FV]IX[£‰„@5þcP31()3œ%: RO\x W=2&B+19['w/.-•‚tRÑýï&#„HRp?5þ�c7=ÛD\HJ_~f�¶IIþ8)*:9T€'DnLŠ93)l4C1ææ.G5j'29ˆL87Wþ„Ä--7_k¨²;+°>3´W+°O2²W; +³@WS +°E/°^3´c+´LiS; +´L+° /°3´+² +³@ +°°/ Ö´$++°4/´++°/°3´*7+°2°l/°'Ö±7é°7±1+´!&+°!±+´<+³8+´[+°±S+´R+°2²SR +³@S +³RS+´&+°R±I+´`+°`±+´ 1+° °B Ö´e+°e/´B+±m+±7'°9°1±$99°!±*99±8°,9±S[´;]^$9°°=9±IR°>9±`°O9°´?EMci$9°e°g9±cE°]9°i³8B[I$9±;W°=9±/ ° 9±4´!'17$9°±99°°,901233!5>54&#"#4&#"632#"&5463262654&#"463262#"'&546;&#"#54&#"&%3254'&#"Øy�GØPþW2GWK5=SgF³]FV]IX[£‰„@5þcP31()3ªbML!'®?=NB;G: =a=- 0Su¥ M //-•‚tRÑýï&#„HRp?5þ�c7=ÛD\HJ_~f�¶IIþ8)*:9TþÅOl:::9VJg.&5?T!Oäç ,%'0k#56Z/f4WýöÄ--7q}à²C+°G3´8+°j2²8C +³@8n +°P/´U+°a/°>3´u+° /°3´+² +³@ +°°/ Ö´$++°4/´++°/°3´*7+°2°~/°'Ö±7é°7±1+´!&+°!±+´<+³;+´@+°@/´;+°±n+´m+°m±+´&+² +³@ +³r+´d+°d/´r+°±w+´^+°^±+´ 1+° °M Ö´Y+°Y/´M+±+±7'°9°1±$99°!±*99±;±,>99°n´8=C$9°m°E9±d±Gj99°r±R99°²Sau999°w³PUh{$9°^±I\99±UP°R9°a°S9°u°=9°8@ ;@IMY\^d{$9°C°E9±/ ° 9±4´!'17$9°±99°°,901233!5>54&#"#4&#"632#"&5463262654&#""&54632632#"'7327654&'#"&54767&#"#54&3254'&#"Øy�GØPþW2GWK5=SgF³]FV]IX[£‰„@5þcP31()3ð0?Ps`PJ!'O�$P')sW;2&,?))+! <<3?"#3BZ=-Ý?%2-•‚tRÑýï&#„HRp?5þ�c7=ÛD\HJ_~f�¶IIþ8)*:9T½K2k'46ŒNp22R 7:T^Š#434D/O !H\T8;/0Méé -¶2\2&=Wÿ/±-26@²(+´8C+² +±433´++² +³@ +° /´6++´"=( +´"++°/°3´/7+°2°A/°+Ö±?é°?±:+´%&+°%±+´<+°±+´&+² +³@ +³@ +°±3+°2´ &+±B+±?+° 9°:±"(99°%±/99±°19°±699°± 99°3°59±6 ° 9±8 °9±=´ %+:?$9°"±99°°1901233!57#5>54'&#"#4&#"632#"&54763265#$2654&"Øz€GØNþé–3F(+O6BNXY²4+´PC+²+±%@33´++² +³@ +°/´C++°/± I33´B++´.U4 +´.++°*/°!3´;7+°2°Y/°7Ö±Wé°W±R+´1&+°1±&+´%<+°%±+´&+° Ö´L+²L +³@ +³@ +°±?+°2´ &+° 2° ´F+°F/±Z+±W7°,9°R±.499°1±*;99±%&°=9°²!B999±L²999±?³ACI$9± F° 9±C± 99°B°9±P°9±U´,17RW$9°.±99°*°=901233##"&547#57#5>54'&#"#4&#"632#"&54763265#2654&#"2654&"Øz€GØN!#/.GB_#Úé–1H(+O6JZd�²1+´\C+²+±"<33´++² +³@ +°/´K++°S/´?+°/± E33´>++´+a1 +´+++°'/°3´77+°2°e/°4Ö±cé°c±^+´.&+°.±#+´"<+°"±+´&+³X+´+°/´X+°2²X +³@ +³@ +°±B+´P+°P±;+°2´ &+° 2° ´N+°N/±f+±c4°)9°^±+199°.±'799±"#°99°±99°±>99±X³HU$9°B´=?EKS$9°P°9± N° 9±?µ NPVX$9°>°9±\°9±a´).4^c$9°+±99°'°9901233#"&547#57#5>54&#"#4&#"632#"&5463265#2654&#"2654'#"&'2654&"Øz€GØN/.j”k.¾é–2GWK5=SfG² ]GU]IX[£‰…?5çIƦ##"".D9*(9 CýR20R3-›…wUßý4DIkjJF2)¨'$ˆJTuB7þ“m9@ãF_JKbƒh“¼JJýGŒŒ¾""""pC. *=9'/Bö6+,<;,+Wþ€³--7p™²_+´U+°>/´C+°@ Ö´A++°H/´m+°i/´M+° /°3´+² +³@ +°°/ Ö´$++°4/´++°/°3´*7+°2°q/°'Ö±7é°7±1+´!&+°!±+´<+°±\+´W+°W±+´&+² +³@ +³K+°A3´k+°±E+±S22´;+°2´a+±r+±7'°9°1±$99°!±*99±°,9°\±99°W°Z9±K±Y99°°@9±Ek@ >CHMQU_dm$9±@>°Y9±AC±;E99±mH±JW99±Mi°K9°U°a9±/ ° 9±4´!'17$9°±99°°,901233!5>54&#"#4&#"632#"&5463262654&#"2#"/3254+"&4632325&#"&'4632#"#'"#"3632Øy�GØPþW2GWK5=SgF³]FV]IX[£‰„@5þcP31()3¦#7CI<-/J:%:!36 %X’ :"q_ž6%//-•‚tRÑýï&#„HRp?5þ�c7=ÛD\HJ_~f�¶IIþ8)*:9Tþª2!2D,@4)š6_X\^ni",Zÿ,X2DP² +°+3´++²:+´EC+² +³@ +° /´++´4K: +´4++°0/°'3´A7+°2°Q/°Ö´+°±=+±Né°N±H+´7&+°7±,+´+<+°+±$+´1+²$ +³@$ +°±+°2´ &+±R+±=±99°N°29°H±4:99°7±0A99±+,² C999°$°9°°9±E °!9±K´27=HN$9°4³$$9°0°C9°A°901233! '&47! 7675!5>54&#"#4&#"632#"&54763262654&#"|{€HÚOŽrþÂþ¢š¬Z?R—‡4 x‚þ¤1HVK6=SfF³_GT\JX[KR�…?5þŠ*1/*)32-š†xTàýߊ* er–†$uƒð`UR'$‰IUtA8þ“m9@ãF_JLa„gŽ[fJJþ6+-;;,*8ZþCX2MUaz²)+°43´++²C+´VC+²) +³@ +°/´O++°/´#++´=\C +´=++°9/°03´J7+°2°b/°Ö´+°±F+±_é°_±Y+´@&+°@±5+´4<+°4±-+°2´1+²- +³@-) +°-° Ö´U+°±+°'2´ &+° 2° ´Q+°Q/±c+±F±99°_°;9°Y±=C99°@±9J99±45²#L999°±099±U-°9°°9°µ NORS$9±O³ QT$9°#²RS999°C° 9±V)°*9±\´;@FY_$9°=³-$9°9°L9°J°901233"&547# '&47! 7675!5>54&#"#4&#"632#"&5476326264&"2654&#"|{€HÚOBQ_†_UÑþ¢š¬Z?R—‡4 x‚þ¤1HVK6=SfF³_GT\JX[KR�…?5jP88P8ýX*1/*)32-š†xTàýß^//^C``C+#er–†$uƒð`UR'$‰IUtA8þ“m9@ãF_JLa„gŽ[fJJüY8P88P~6+-;;,*8ZþZ2O[jv¸²++°63´++²E+´kC+²+ +³@ +°/´]++°e/´P+°/´%++´?qE +´?++°;/°23´L7+°2°w/°Ö´!+°!±H+±té°t±n+´B&+°B±7+´6<+°6±/+´1+²/ +³@/+ +³i/+´+°/´i+³Y/+´g+°g/´Y+°±S+´b+°b± +°)2´ &+° 2° ´_+°_/±x+±H!±99°t°=9°n±?E99°B±;L99±67²%N999°±299°/°9°i°9±Y°\9°SµPV]de$9°b° 9±P· SY_agi$9°%² V999±k+°,9±q´=BHnt$9°?³!/$9°;°N9°L°901233#"'&547# '&47! 7675!5>54&#"#4&#"632#"&54763262654&#"2654'"&'2654&#"|{€HÚOH_kJK54U»þ¢š¬Z?R—‡4 x‚þ¤1HVK6=SfF³_GT\JX[KR�…?5�""##^C:R: ýw*1/*)32-š†xTàýßd/3kJk54L6.er–†$uƒð`UR'$‰IUtA8þ“m9@ãF_JLa„gŽ[fJJü " !#pC/!)<8(/œ6+-;;,*8Wþ„Î-0U_j‰²O+°73´C+°=/°I3´1+°V2° /°3´+² +³@ +°°` Ö´%++°f/´++°/°3´-7+°2°k/°)Ö±ié°i±c+´"&+°"±+´<+°±L +´]+°]±Y+´G+°G±+´&+² +³@ +°°T Ö´@+°@/´T+°±+´ 1+° °9 Ö´4+°4/´9+±l+±i)°9°c±%99°"±-99±°/9±Y]´EIJ$9°G±CO99±@°9±T³167=$9±C1¶49@GLS[$9°O°69±` ° 9±f´")ci$9°±99°°/901233!5>54'&#"#4&#"632#"'&54763262654'7#"&=4#""&54632!2654'2654&#"Øy�GØPþW2G(+O5=SgF³]GU\Ja,&JS�„@5¿$2Z$s!'H>No OHvCv^D38þþ$S4%þ8)21()32-–�tRÑýï&#„HP5=?5þ�c7=ÛD\HK^J=]ŠYcIIü“T/c6'=ŠH3=V@7uB[D_bF]w')B:tC&`3T&9ˆ7*+99T8Wý¹Î-0\eozȲV+°73´J+°@/´]+°1/°f3° /°3´+² +³@ +°°p Ö´%++°v/´++°/°3´-7+°2°{/°)Ö±yé°y±s+´"&+°"±+´<+°±S +´m+°m±i+´N+°N±+´&+² +³@ +°°[ Ö´G+°G/´[+°[°d Ö´C+°C/´d+°±+´ 1+° °9 Ö´4+°4/°_3´9+´=+±|+±y)°9°s±%99°"±-99±°/9±im´LPQ$9°N±JV99±G°9±d[°E9°µ167@]a$9°4°;9±1]¶;=CEPQa$9°J¶49GNSZk$9°V°69±p ° 9±v´")sy$9°±99°°/901233!5>54'&#"#4&#"632#"'&54763262654'7#"&547&=4#""&54632264&"%2654'2654&#"Øy�GØPþW2G(+O5=SgF³]GU\Ja,&JS�„@5¿$2Z$sC3I42K0Bo OHvCv^D38O,,<**þÍ$S4%þ8)21()32-–�tRÑýï&#„HP5=?5þ�c7=ÛD\HK^J=]ŠYcIIü“T/c6'=Šo1&@3JK2>%)X7uB[D_bF]w')B:tÓ+<,,<+ÓC&`3T&9ˆ7*+99T8Wý™Î--7bjz„é²]+°>3´Q+°G/´k+°s/´i+°X/´{+°82°{´e7+° /°3´+² +³@ +°°/ Ö´$++°4/´++°/°3´*7+°2°…/°'Ö±7é°7±1+´!&+°!±+´<+°±Z +´‚+°‚±~+´U+°U±+´&+² +³@ +°°a Ö´N+°N/°J3´a+´x+°±+´ 1+³c +´p+°B2° °D Ö´n+°n/°;3´D+°@2±†+±7'°9°1±$99°!±*99±°,9±~‚´SWX$9°U±Q]99±N°9±ax°v9°@ 8=>GLegiksu$9±eiµJDnpvx$9±{X±BL99°Q¶;@NUZ`€$9°]°=9±/ ° 9±4´!'17$9°±99°°,901233!5>54&#"#4&#"632#"&5463262654&#"2654'7#"&547&=4#""&546324#"322654'#"&'%2654'Øy�GØPþW2GWK5=SgF³]FV]IX[¤ˆ„@5þcP31()3Ž%1Z$sFAQ89S@Bo OHvCv^Ejx,--,*$3 +!, 5þÔ$S4%-•‚tRÑýï&#„HSo?5þ�c7=ÛD\HJ_~f�¶IIþ8)*:9Tþ@T/c6'=Št.)N8RR8L*)X7uB[D_bF]wT>:tq++.U4#".,$3ôC&`3T&9Yÿ0v/Cï²+´++²+°/´ ++°/±é±Aé°>/°;3±!é°$2°*/´4C+°D/°2Ö´-&+°-° Ö´&+°/´ &+°-±+±@é°@±+°&2´<+°82±E+±-°09± ±/99°@°9°·!*4;$9°± 99± °9±³/0$9°A±199±>°-9°!°9°*²&2899901%2+"3!!"&46;254#"#"&46323254.#"&4632#"&#"3266?ŽÕ$97&UþžEYZD®o9C+AB,J 00=$ly,J0«ˆ>cFE5 P .+ ZôE8x' %DH€H90DXC' hcMnkò…A14BFhÿ*2Zò²V+²6+´7++²+°$/±0é°/>G5D/9gÿ"2Eв2+²+²+°/±é°/±Eé°?/°<3±$é°,/´7C+°2°F/° Ö´+°±4+´/+³2/4+´1+°/± +´A<+°A±+°*2´<+°92±G+±4°9°2°9±A ±99°µ$,7<$9±2°19±?E´  /4$9±,$°99°7°901%2#"&5476732>54&+"&5476;232654#"&54632#"&#"3}>KZ‡Nµ»9=[[J7eH4'@5>,'4V–or*A.�‹â?/GD # bECe/ôËpCPN'pǾ\NB.$*G8J& ]ŒxX†…‡�¦¨6Z0! gþ'2O[²<+²+²+²#+° /´P++°'/±Oé°I/°F3±.é°6/´AC+°2°\/°Ö´+°±>+´9+³<9>+´;+°9±+´Y+°K2°Y´*<+°*/°Y±#+±4S22´<+°C2´+±]+±>°9°<°9±Y±99°#@ '.6AFPV$9±$9±6.°C9°A°901%2#"&547&'&5476732>54&+"&5476;232654#"&54632#"&#"32654&#"}>KaR/.FB_™\o9=[[J7eH4'@5>,'4V–or*A.�‹â?/GD #(87)(78 bEd>/^B10aB2&duâpCPN'pǾ\NB.$*G8J& ]ŒxX†…‡�¦¨6Z0! ýË7()78('8gþ2DO_?²4+²+²+° /´P++°X/´F+°K/´7+°"/±Dé°?/±(é°./´9C+°2°`/°Ö´+°±6+´1+³416+´3+°1± +´]+°% Ö´A<+°]±[+´N+°N±H+´U+°U±+±,S22´<+°;2´+±a+±6°9°4°9±]%±99±HN@ !"(.9?D PX$9°U³)>$9±KF¶ SU[]$9°±99±"4°39±?D´%16$9±.(°;9°9°901%2#"&547.546732654&+"&546;2654#"&54632+"32654&#"2654'#"&'}>KiZiKIl&£ª+8=[’’XŒ4'@5>H?V–or*A.�‹â?/WD$0"#"(-VVG7'.Óc(87)(89þö`C:-û3þÓþÿ-:C`N½Îd/° Ö´!+°!±+´;+°;±+±é°±&+´3+°3± +´&+°2°´1+°1/±?+±;²999°± 899°¶#)+.6$9°&°(9±1°9±)#µ139;$9±±!99° °901#"&547#5! #'54'4#"62654&"2654'#"&'zjJIl1ë )/R�>eFVGDHÓP""0"!/D9*(8DzIkkID6û3þÓþÿ5y½ÎdSš5(n�X·…þµ" "pD.!,;8'.DYÿ~.'0@¬°/´8+°1/´+°/´'++°/2°*/± é°A/°Ö´/&+°/±+´4&+°4±(+´#&+°#±+°2´ +±B+±(4µ '*18$9°#± !99°±<99±8°9°1²4999±*'°#9° ± !990126=!5! #"'&'&54>%54'&'4#"6"327654&'&WKgþ%PHm P/16I|"='-^dK:'/Û$!=#9-<2*-%1Eü1þÓþùzC<"#,+p»¹&c>HVE'm1=k¹ŠþÈ  Wÿv.'0Aç²+´'++°/´8+°4/°<3´+°2²4 +³@4A +°*/±é°B/°Ö´/+°/°6 Ö´+°/´6+°/±A+´@+°@±(+±#é°#±+° 2´&+±C+±A6²*'999°@±899°(°9°#²!<999°± :99±48² :999°°9±'±99°*±#/99°°!901463263267675!5! 3+"54'4#"64&#"327&#"#hF/[(-VVG7'.ÓG/;Š`G 6"9€+;00I û3þÓó$eE>B½ÎdDz+° 3´ +°2²  +³@  +°/´5++°8/±é°?/°Ö°(2´=+´#+°=±+´+°/2³6+´1<+°±,+´&+°° Ö´+°/´+±@+±=µ %&58$9°6± 99±,1³ $9±85±1=99°°/901%!5! 2632'654&#"#54&#"&5476%54'4#"6týå þ‘%: QP\x W=2%B+19['w/.u�<&,WVG7&-Ñõ)þÛþ÷'DnLŠ93)l4C0ææ.G5j'29ˆL87S¶Éb>GV>k29h²‚YþˆŒ.,6?L²+°)3´+°2² +³@ +° /°$3´C+´I +´+°/´6++°9/±é°M/°Ö°&2´>+´!+°>±+´+³7+´2<+°±+´@+°@±-+´&+°° Ö´E+°E/´ +±N+±>µ#$)69$9°±+99°°09±@2±99°-³ CI$9°E°G9±C °#9°I³ !&$9±°+9±96±2>99°°0901%!5! 2#"&546;&#"#54&#"&546326754'4#"63254'&#"týå ¦QmE=/:@6 6X6'+6IjWFE#¨�<&,WVG7&-ÑcE*õ)þÛþôrTHfO7=T"Oàä +J1e(2:ƒLn;9V¶Éb>GV>k29h²‚þ;.dWýõÛ.=GP\?°/´+°&/°<3´T+°6/°.3´ +°2°/´G++°J/±é°]/°Ö°2´O+´9+°O±2+´1+°1±H+´C<+°C°Q Ö´)+°)/´Q+°C±>+´&+°$2°´V+°V/°±+´+±^+±2Oµ 6;Q¶&,TZ$9°V°X9°±"99±°9°&°9°T²12;999°6@ $)"9Z$9° ° 9±JG±CO99°°A901%!5! 4632632#"'732654&'#"&5467&#"#54&#"&54'4#"63254'&#"týå ýãVFA#Fs!DI23O2. (:G% j/8GV>k29h²‚þ42[5%>Yÿò‘.+«²+²+° 3´++² +³@ +°%/°3±é° 2°,/°Ö´)1+°)±!+´ 1+° ±+´&+² +³@ +°±+´1+±-+±!)²+999° ° 9°° 9°°9±±+99°%´ )$901.54763263233!5654&#"#4&#"M`EJui;7itHC@áPþYgdS/APH7Q3-‰%–dwOW]]TOt�Uàýß6C¢WtS4þ¡_5P@Yþù‘.7Aø²+²!+²,=333´++²! +³@ +°/´8++°1/°(3±é° 2°B/°Ö´51+°5±-+´,1+°,±%+°2´&+´@+²%@ +³@%" +°±+´1+°2°´;+°;/±C+±-5²7999°,° 9°%± (99°@±!99±²8=999±;°9±8³;?$9±!±#799°1´ %5$901.54763263233##"&547#5654&#"#4&#"264&#"M`EJui;7itHC@áP##/0DB_!„gdS/APH7Q3-‰»)77)'99%–dwOW]]TOt�Uàýß*:D/0`C8,6C¢WtS4þ¡_5P@î7R79N9YþÔ‘.3?N7²+°)3²:+´7+²+²+°/´@++°H/´4+°./°%3±é° 2°O/°Ö´11+°1±*+´)1+°)±"+´ &+°=2³L "+´+°/´L+²L +³@ +° ´J+°J/° ±7+´E+°E±+´1+°2°´C+°C/±P+±*1²3999°)°9°± %99±L"±99±7 ³@GH$9±C°9±4·7=CEJL$9±:± 399°.´ "1$9°±9901.5463263233##"&547#5654&#"#4&#"2654&#"2654'"&'M`’ri;7ip�@áP,,jJIk,kgdS0@PJ5Nc‰©##""/C9R9 D%•ex¥]] w�Uàýß4CJklIE26C¢WtS4þ¡_6OxV®>£#! "pC/*=8(.DYÿ‘.8Dï²+²$+°.3´++²$ +³@ +°/´9++°?/´++°3/°*3±é° 2°E/°Ö´61+°6±/+´.1+°.±+´B<+°B±'+´ &+²' +³@'$ +° ±+°#2´1+±F+±/6²8999°.°9°± *99± '´9?$9°±!<99±?9³!3265!5654&#"#4&#"2654&#"M`’ri;7ip�@áP‰r2^E6J)>sþ¥gdS/APJ5Nc‰Z!:S)!8O%–dx¥]] w�UàýßsŒ:( .,%(K6C¢WtS4þ¡_6OxV®>åYÿ,32<Ò²+²(+°23´++°/´"++°7/°.3±é° 2°=/°Ö´+°±+´:<+°:±3+´21+°2±++´1+²+ +³@+( +°±'+°2±é±>+±±99±3:²<999°2° 9°+²" 999°°9±(±)<99°7¶ +:$9°²99901.54763263233! $547!27675!5654&#"#4&#"§L`GFxi99htŒBÞTýñþŽþºZ3E’‘J±~”þ¬gdS/@QI5R^‡%—cuUS]]¤s�UãýÙÑìþ–†2n|Ýed'D6C¢WtT3þ¡_6O|R®>YþP42GR0²+²3+°=3´++°/´H++°!/´-++°B/°93±é° 2°S/°$Ö´)+°)±+´E<+°E±>+´=1+°=±6+°2´1+²6 +³@63 +°6´P+°±2+°2±é°2°´K+°K/±T+±)±&'99±>E²G999°=° 9°6³ !-9$9°P±99±2µHMN$9±K°9±!H³KP$9°-²MN999°°9±3±4G99°B¶ $)6E$9°²'99901.54763263233"&547# $547!27675!5654&#"#4&#"2654&"§L`GFxi99htŒBÞTNUa„af‰þŽþºZ3E’‘J±~”þ¬gdS/@QI5R^‡½'98P88%—cuUS]]¤s�UãýÙI2/`BaaB%$ìþ–†2n|Ýed'D6C¢WtT3þ¡_6O|R®>þi9'(88('9Yþ#:2KWfc²+²7+°A3´++°/´Y++°`/´L+°!/´1++°F/°=3±é° 2°g/°&Ö´++°+±+´I<+°I±B+´A1+°A±:+´ 1+²: +³@:7 +°:° Ö´e+° ±+°62±é³]+´O+°O/´]+°° Ö´[+°[/´+±h+±+±()99±BI²K999°A°9°³ !1=$9°:°9°e°9° °b9°O´UXY`$9°°9±!L·OU[]ce$9°1±R99°°9±7±8K99°F¶ &+:I$9°²)99901.5463263233#"&547#".54732>7!5654&#"#4&#"2654&#"2654'#"&'§L`‘ti99hq�BÞTXfkJIkX…©ó½_Z3E:f ¶wG��bþ¬gdS/@QI5Oa‡°!#! ^D9*(9 %—cy¤]]¢u�UãýÙO31sJjkI3. -lÃŽ–†2n|d•^9<(6C¢WtT3þ¡_6OyU®>þ¬!"! pB/#+<9'/WE. $,ž²+´$++± 22°'/°3±é°2°-/°Ö´++°+±%+±!é°!±+±é°±+±é°± +´&+±.+±%+±$99°!°9±°9°±99°°9±'$³!+$9°±9901)5!263 54'4#"65&'4#"6Eü¤EB¦ K�=eEVH3RÍþÞ—>fEVGDHÓû3ttþÓ¾¾ÎeT›4)n=Øx{ÄÊdSœ4)n�X¹…Wþ÷G.&09Aó² +°3´9++±%22°/´/++°fEVGDHÓfC`aB9-û3ttþÓþÿ.q¾ÎeT›4)n=ØxþÜ)77)(88ÑÄÊdSœ4)n�X¹…WþÔE.&2BKS² +±*33´K++±%22°/´@++°8/´0+°N/°!3±é°2°T/° Ö´R+°R±L+±Hé°H±C+±%é°%± +´=+°=±+±é°±'+´5+°5±+´&+°2°´3+°3/±U+±LR±K99°H°F9±%C°9±= ² !999°±:99°¶*-08@$9±3°9± 0µ 35;=$9±NK³HR$9°±F9901!##"&547!5!263 54'4#"64&#"3264'#"&'326%5&'4#"6E++jJIk-ýM¤EB¦ K�=eEVH3RÍ„#""#:9)(9D./Dþ —>fEVGDHÓ2EJklID3û3ttþÓ¾¾ÎeT›4)n=Øxü! "#! *=9'.DCéÄÊdS›5)n€Y¹…WÿE.#+4@Hݲ+´4++±*22°/´8++°>/´++°C/°&3± é° 2°I/°Ö´G+°G±A+±1é°1±,+±*é³*,+´51+°*±$+± é° ±+°2´&+±J+±AG± 499°1°/9±,° 9±$5µ #&8>$9° ±99°±;99±>8±99±C4³ 1G$9° ±/9901265!5!263 #".54>%54'4#"65&'32654&#"4#"6 =sü]¤EB¦ Šr2]D5J�=eEVH3RÍþÞ—>fE©O)#;S'%7þ­GDHÓ"-$(Kû3ttþÓþÿsŒ:(!.e¾ÎeT›4)n=Øx{ÄÊdSœ4Ïän�X¹…Zÿ",2"*“²+´"++°/´7+°%/±é°+/°Ö´ +° ±+´)1+°)±#+±é°±+°2´<+±,+± ° 9°° 9±#)³"$9°°9±%"³ )$9°± 9901# 47!2>=!5! 54'4#"6,2ZnBþj9H8N>gJþ#R�=dFVFEHÓþò8R0ô§udšþT@0 û3þÀÊdVš5+j|Yº…Zþ),2$.7Cë²+´.++°/´8++°/´7+°1/± é°D/°Ö´#+°#±+´61+°6±/+±*é³A*/+´+°/´A+°*±%+°2´ <+°2° ´;+°;/±E+±#° 9°°!9±6±.199°A³ $9°*°(9°%³8>$9±8²;A999°±>99±1.³#*6$9° ±!(99012>=!5! #"&547#"# 47%54'4#"62654&#"ñ>gJþ#TR//EB_ þq9H87�=&.VVF9'-Óa(87)'99–@0 û3þÓþòd71[B10aB/'ô§udšþT×ÀÊd=NYA+j29jº…ý 8()78('9Zþ,2(0<Kû²+´(++°/´>++°E/´1+°+/± é°L/°Ö´+°±+´/1+°/±+´J+°J±)+±%é°%±4+´B+°B± +°2´ <+°2° ´@+°@/±M+±°9°°9±J³(+$9°)± G99°%¶#17:=E$9°4°>9°B±99±1@ 7@BHJ$9±+(³%/$9° ±#99012>=!5! "&547$47%54'4#"62654&#"2654'#"&'ñ>gJþ#[[k”j#þt9H87�=dFVFEHÓP"#!!^D8*(9 –@0 û3þÓþòh75hJjkI:1î§udšþT×ÀÊdVš5+j|Yº…ýê""!!pC.!+<9'/Yþ€Š.-7@J° /°3´A+°2°/´'+°/´7++°:/±é°K/°Ö´?+³H?+´#+°#/´H+°?±D+´+°±+´,+°32°,´8<+°8/°,±.+´&+°° Ö´ +° /´+±L+±D?³ AF$9°³'7:$9°8°9±,°19°.³  $9±A¶ #+F$9°'° 9°° 9±:7±3?99°°1901%!5! 2654'7#"&5'4#"#"&54763254'4#"62654'týå n"+R"g"C9Ef G?87;57U<21d�<&,WVG7&-Ñ›!K/!õ)þÛý´V0e7(?ŒI5>XA:vD\DcfF_;=)(D:w–¶Éb>GV>k29h²‚ýäF&b5U';Yý¶‘.3=FPZ)°/´G+°M/°'3´+°Q2° /´-+°/´=++°@/±é°[/°Ö´E+°X2°E´*+°*/°E±T+´$+°$±+°2´O+±1922°O´><+°>/°O±4+´&+³J4+° 3´+°2±\+±TE³'"QV$9°$³ -=@$9°>°9°°79°O°9°4´ GM$9°J² L999±MG±99°±99° ¶ $*1V$9°-° 9°° 9±@=±9E99°°7901%!5! 2654'7#"&547&5'4#"#"&5463254'4#"62654&"%2654'týå g#*R"g86K32K36f G?87:jV<21]�<&,WVG7&-Ñ�--<*)þî!K/!õ)þÛý´V0e7(?Œn2&C3JK2A%*V:vD\DcfF\{)(D:w–¶Éb>GV>k29h²‚ý+-+>*ÓF&b5U';Yý�š.1:BJZd€°/´K+°S/´I+°E/°&3´+°[2°/´,+°/´:++°=/±é°e/°Ö´A+³bA+´)+°)/´b+°A±^+´#+°#±+°2´0+°72°0´;<+°;/°´X+°0±2+´&+³C2+´P+°° Ö´ +° /´+°° Ö´N+°N/´+±f+±^A³&![`$9°#³,:=$9°;°9±X°59°0±U99°2@   EGIKS$9± C°9°P°9±EIµNPVX$9°±99°¶ #)/`$9°,° 9°° 9±=:±7A99°°5901%!5! 2654'7"&547&=4#"#"&5463254'4#"64#"322654'#"&'%2654'týå n"+R"g4DRpT<6g G?87;jW@_d� Ö´+±S+±ME°9°9²+H999°$µ)/5J$9°2±&99±> µ!;@$9±+;³$>B$9°H²)@999°Oµ/$9°°9014632632327654'7#"&547#"'#"'&>54&#"264&#"327.54#"ZaTc-7}W;:’%[BIV=g}`_DB_C"6N¤]^ç=QFDE&�(99('99ý’�{-:Da.8=c�NNED]µKBGn{N3cœ¤Z*jC``C0$#!Z[IuKQf91D®þ´8P89N9yŠ�X§kZþÔþ-(3>N[#²&+°"3´R7+°2²+°/´?++°G/´4+°Y/°/3´C+±22°\/°Ö´O&+°O±W+´2&+°2± +´L+°L±,+´ 1+° ±7+´D+°D±+´&+°B Ö´+±]+±WO°9°2²&R999° ´$)/T$9°L± "99°,±I99° ±:<99°7µ49?G$9°D°9°B°9±&4· 754&#"2654&"2654'#"&'327.54#"ZaTc-7}Ys’%a…V=g„fkIJk"< 6N ¿ç=QFDAGm""0"!/D:)(9 Dý«�{-:Da.8=dŒNN�`µK’e{N3cœ«X2pIllI70 !±EuKQfbL®þÿ" "pD. *=9'/C&yŠŽX§kZÿý-/:GQæ²+°3´-C+°>2°/´K++°P/´7+°E/°03´"C+±&22°R/°Ö´;&+°;±C+´3&+° Ö±Hé°3±8+´)1+°)±+´&+±S+±C;°"9±3 ²$>999±8H@ &-05+@M$9°)°9°²999±PK± 99°° 9±-°9°E¶)$5$9°"°9014'7#".4>3267#"'#"&54632632326">54&327.54#"3254&#"°V=fÀÆ,OE):O.J… k,kf@%5O¡¾`Ue+7}Xt’#d‚þ•AG„?OEþ�{+:Da.8?_&\U)c1{N3aÙæþõ 3F/7.H}." «™dŒNN‹`³IŠcK©*mLQf§y„ˆX§jþ $Wþˆ-GR_hnwf² +´`+°*/±7=33´/+±mo22°t/±3j33´C+±$d22°/°3´7+°V2°]/°N3´++±22°x/°Ö´S1+°S±[+´Q&+°v2°Q´@+°@/°Q±s+°D2´l+°c2°l±i+°e2´5+± #22°5´K1+°K/°5±+´1+³(+´1+°1/´(+±y+±[S°9±Q@²V999°s²=Xo999°l³:HN$9°K¶ 7 `$9±5i±,-99°1²*/999°°9±/*±,:99°t²(-@999±°9°]µ H$9°°901463263232654'7#"'#"&232#"'53254+#"&'#"&546;546'>54&#"%327.54#""354&5#2'265'#"WcSc-6€Xv’%`†U=hƘA%4OžÄC8K5Hk8F†":/19G4N>QFEAHþì�{.:Fa-8ì%ˆ((ˆˆòEJ^…JJƒZ­G‡btJ0]“‹¢ ¥·N9<3z< ?3¤!B53?;LykHN_[I¤¬v€‡Sœcþ>-  ,”l"?4<Wþˆ-*7hqx�¥°Z/±BV33´y+°w2´G+°L/´M+°~/±Rs33´_+±8m22°i/´d+°/°3´7+°.2°5/°&3´++±22°‚/°Ö´+1+°+±3+´)&+°€2°)´]+°]/°)±}+°`2´u+°l2°u±r+°n2´T+± g22°T´#1+°#/°T±+´1+³?+´I+°I/´?+°;2°?´P+°P/²P? +³@PL +±ƒ+±3+°9±)]².999°}²0Zy999°u´ &X$9°#¶ Vdiw$9±Tr°D9°P³BEG$9±I±=99±GZ±DX99±Ly³?IE\$9°M±=€99°~±;]99±°9°5µ  $9°°901463263232654'7#"'#"&>54&#"%327.54#"2#"'73254+53254+#"'#"&46;54632'"354&5#32#265'#"WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8¯$92$& ))<ƒI;/7C4 L<8H† (‘))‘JG÷KJ^…JJƒZ­G‡btJ0]“Š£ ¥>kHN_\H¤¬v€‡Sœcýé&& !&.' ¤..Bf> ;KN8 [/# ".šq!C8AWýý-*7nv}ˆ¹²8+°I3´r+°E/´Q+°b/°f3´z+°�2³Yzb+´Z+°‡/±_|33´k+±;u22°/°3´7+°.2°5/°&3´++±22°‰/°Ö´+1+°+±G+´L+°L±3+´)&+°~2°)´i+°i/°)±ƒ+°l2´w+°u2°w±#+´ 1+±;`22° ´|+°|/°o3° ±+´1+³B+´V+°V/°]3´B+°>2²VB +³@VY +±Š+±G+±599±i3°I9°)³.J$9°ƒ²0f�999°w³ &d$9°#@  8EQbrz$9±V °9°±@99±bQ°B9°z±Vd99°Z²A@h999°‡µGL>i~ƒ$9±8r°J9±°9°5µ  $9°°901463263232654'7#"'#"&>54&#"%327.54#"232# 4732>54+53254+#"'#"&46;464&#"3325'3254&5#"WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8ó:M(&_|Bþtn!^.^wU%JI-*(@…='9,7H1I‚' #(’’,G’–2JJ^…JJƒZ­G‡btJ0]“Š£ ¥>kHN_\H¤¬v€‡Sœcþ{V=Y/`DŠZ%KfHb6 &)1) ¯//E`E>T‰".4%B:8y=$19Wýé-*7_hnx�ްI/´{+°€/´O+°8/°Z3´w+°m2°s/±Xi33´=+±Cd22°`/´?+°/°3´7+°.2°5/°&3´++±22°‚/°Ö´+1+°+±3+´)&+°)°u Ö´;+°;/´u+°)±o+±=M22´k+±cy22°k±#+´ 1+±CX22° ´i+°i/°e3° ±+´1+³E+´V+°V/´E+±ƒ+±3+°9±);².999±ou±8099°k´ &]$9°#@  ?IOZ`m{€$9± i°}9°V±R99°°9±€{³My}R$9±w8°]9°s²EV;999±°9°5µ  $9°°901463263232654'7#"'#"&>54&#"%327.54#""&547632#"'&543267654'#"&'"354&#32'4&5#"323254&#"WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8F19–†@#œUNm5*8x.[ )Zƒ!;.”&ˆ))ˆDBÅG/+A]12&6J^…JJƒZ­G‡btJ0]“‹¢ ¥>kHN_[I¤¬v€‡SœcüþD4q“,)> ‹lG>(< 7-.O­ !?/.’i045:�Wþƒ-*7bmu|†«²_+°83´n+°C2°W/±LQ33´…+±lz22°�/±ev33´\+±Er22°/°3´7+°.2°5/°&3´++±22°‡/°Ö´+1+°+±Z+´ƒ+°ƒ±3+´)&+°)°x Ö´}+°}/±\€33´x+°q2°)±|+°s2´j+°j±#+´ 1+° °H Ö´c+°c/´H+° ±+´1+³;+´@+°@/´;+±ˆ+±ƒZ±599°3±W…99±)}³.U$9±|x· &QR_0$9°j²Oa 999°#´ELl$9± c±8C99±@H²=>999°°9±…W±>U99°�²HZO999°\±@;99°n°a9±°9°5µ  $9°°901463263232654'7#"'#"&>54&#"%327.54#"2'654&#"32#"&5"'&'#"&547>3264+32'"354#3254&5#"32WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8\[ld$JH;S�!84:J A29—G>_)JH1/ë)‘‘HIÐG1+J^…JJƒZ­G‡btJ0]“‹¢ ¥>kHN_[I¤¬v€‡Sœcþ{jZ}<#-i54&#"%327.54#"#"'532654&+532654&#"3232#"'&'#"'#"&547>326324&#32'"354#3254&5#"32WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8G1?.' "")U14&-}@6NO@29—G>\ ,sB;Iô.32/ë)‘‘HIÐG1+J^…JJƒZ­G‡btJ0]“‹¢ ¥>kHN_[I¤¬v€‡Sœcýþ+ D,5 ;!2!)q6AA88C4o?PDD"Ã!cþ.M�ll924<Wýý-*7}„Š�™ò²H+±8z33´^+°‡2°A/´M+°j/±nr33´„+±Ž˜22°”/±€‹33´w+±b‰22³Vw”+´U+°/°3´7+°.2°5/°&3´++±22°š/°FÖ´K+³+KF+´1+°/´+1+°K±u+´–+°–±�+°w2´�+°‰2°�°) Ö´3&+°3/´)&+°�±Š+°‹2´b+°�2°b±#+´ 1+° °g Ö´~+°~/´g+° ±+´1+°Q Ö°[3´?+°;2±›+±uK±HI99°–±599°3±r˜99±)�³.p$9±Š�· &Mnz0$9°b³A l|$9°#³ej$9±g ±8^99°Q²U999°°=9±„j°?9°U·Qglpu~�–$9°”°=9±wV±KF99°^²[;|999°H°I9±°9°5µ  $9°°901463263232654'7#"'#"&>54&#"%327.54#"2!".547!27654&+5327654&#"3232#"'#"'#"&547>3264+2'4#"3#2'4&5#"32WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8‚Fg44þ†jŸz?E):ŠpR…"H0+)4t;2<GF8.3ŒA:S!0=L`˜FDŒŒŒÄE/*J^…JJƒZ­G‡btJ0]“‹¢ ¥>kHN_[I¤¬v€‡Sœcþ|G;FKÀ!J�\aY LNþí%W*5$&/o5AII==C3n?QGHþþ7nµPV: o657?Wþè-*7S0°B/´C+°=2²CB +³@C? +°J/´8+°/°3´7+°.2°5/°&3´++±22°T/°Ö´+1+°+±3+´)&+°)±Q+´L+°L±#+´ 1+° °; Ö´G+°G/´;+²G; +³@GB +° ±>+´A+° Ö´1+±U+±3+°9°)².999°Q°09°L´ &O$9°#µ 8IN$9± G°=9±>;°9°°9±JC²;OQ999±°9°5µ  $9°°901463263232654'7#"'#"&>54&#"%327.54#"233!532654&"&546WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8 3JuBþÚ+&4' DMJ^…JJƒZ­G‡btJ0]“‹¢ ¥>kHN_[I¤¬v€‡Sœcþ[I20,þ¡3/"#4IWþ-*7^g…°G/´_+°M/°A3´N+°=2²NM +³@N? +°N´d+°U/´8+°/°3´7+°.2°5/°&3´++±22°h/°Ö´+1+°+±3+´)&+°)±\+´W+°W±#+´ 1+³J #+´f+²Jf +³@JM +° °; Ö´R+°R/´;+° ±>+´A+°D2°A´b+°b/°>° Ö´1+±i+±3+°9°)².999°\°09°W´ &Z$9°#µ 8TY$9±fR°L9° °=9±>;´G_cd$9°b°9±A°B9±d_±JD99±UN²;Z\999±°9°5µ  $9°°901463263232654'7#"'#"&>54&#"%327.54#"233##"&547!532654&"&546264&"WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8 3JuBI42KþØÚ+&4' DMÙ,-<**J^…JJƒZ­G‡btJ0]“‹¢ ¥>kHN_[I¤¬v€‡Sœcþ[I20,þ¡#/3JK2.$3/"#4Iþm+<,,<+Wýü-*7_gw³°G/´h+°p/´f+°M/°A3´N+°=2²NM +³@N@ +°N´b+°U/´8+°/°3´7+°.2°5/°&3´++±22°x/°Ö´+1+°+±3+´)&+°)±]+´X+°X±#+´ 1+°d2°J Ö´u+²Ju +³@JM +° °; Ö´R+°R/´;+° ±>+´A+³mA>+´`+°`/´m+°>° Ö´1+°k Ö´D+±y+±3+°9°)².999°]°09°X´ &[$9°J´8 UZ$9°#°9°R°L9± u±=r99±`;µGbfhp$9±m>°9±A°B9±bfµJDkmsu$9±UN²;[]999±°9°5µ  $9°°901463263232654'7#"'#"&>54&#"%327.54#"233##"&547!532654&#"&5464#"322654'#"&'WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8 2KuB(S89S(þåÚ+&& DLý+..+*%2 + - 5J^…JJƒZ­G‡btJ0]“Š£ ¥>kHN_\H¤¬v€‡Sœcþ[I20,þ¡(:8RR8:(3/"#5HþÒ++.U2%!/-$3Wþ„-*7bkM²D+°H3´8+°T2°\/´c+°/°3´7+°.2°5/°&3´++±22°l/°Ö´+1+°+±3+´)&+°@ Ö´;+°)±_+´j+°j±#+´ 1+°f Ö´Y+° ±Q+°2´L+°L±+´1+±m+±@+±599±;3°9°)±.99°_²0=>999°j²D8999°f@  &FV\a $9°#°9°Y±HT99° °O9°Q°N9°L°9±c\±O=99°8¶;@LQY_h$9°D°F9±°9°5µ  $9°°901463263232654'7#"'#"&>54&#"%327.54#""&547632632'654&#"#"&547&2654'WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8|7IL*b1HH K!B@J^…JJƒZ­G‡btJ0]“‹¢ ¥>kHN_[I¤¬v€‡Sœcþ>P9Y4)A{I7@##@8H|@+2Y7R]-=[UC`@ÿ6'T0-W]Wþ-*7ox‰²;+°?3´h+°Z2°N/´K+°F/´T+°b/´u+°/°3´7+°.2°5/°&3´++±22°y/°Ö´+1+°+±3+´)&+³k)3+´8+°8/°P3´k+´I+°)±d+´s+°s±#+´ 1+°w Ö´_+° ±W+°2´C+°C±+´1+±z+±3+°9±k8±.99°)°9±dI´G0Smn$9°sµ &;fh$9°wµ=ab $9°#±T99°_³?FZ]$9±CW²LM999±KN°P9±TF°Q9°b°n9°u°m9°h·CW]_d8kp$9°;°=9±°9°5µ  $9°°901463263232654'7#"'#"&>54&#"%327.54#"4632632+"3!!"&4632654&#"#"&547&#"&%3254WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8ÒqU3GM43rWâ22¥þS.@@.á>Q@1 'BfA- 6NE\ $:8J^…JJƒZ­G‡btJ0]“‹¢ ¥>kHN_[I¤¬v€‡SœcýâIP32RXt $50R0V@2G&C4EE4A%1,I--¬0DD7Wþ-*7z‚®²8+°w3´]+°k2°J/´G+°B/´Q+°d/´�+°W/´X+°/°3´7+°.2°5/°&3´++±22°ƒ/°Ö´+1+°+±3+°s2´)&+°E2´n+°)´M+°M/²)M +³@)H +°)±g+´+°±#+´ 1+°{ Ö´a+° ±T+±[22´?+°;2²T? +³@TW +°?±+´1+±„+±3+°9±nM°9°)±.99°g´0CPpq$9°¶ &ikw$9°{³dy $9°#±_99± a³8BQ]$9±?T±=99±BG°M9±dQ°q9°�²T?p999±XW´=ag{$9°]µ;_ins}$9°8°y9±°9°5µ  $9°°901463263232654'7#"'#"&>54&#"%327.54#"2#!"3!!"&54632654+53254#"#"&547&#"&54763264'32WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8VE\,,P>þÜ11§þP+AB*%67-c)<.-702J5T=5I<" +1-/J^…JJƒZ­G‡btJ0]“‹¢ ¥>kHN_[I¤¬v€‡Sœcþ{66D B:@ $40'%4(541; .>0GE2A-8-B1.fG+(¬>:=Wýæ-*7ku~�²h+°83´]+°O2°?/´x+°}/´E+°V/´q+°/°3´7+°.2°5/°&3´++±22°/°Ö´+1+°+±3+´)&+°e Ö´`+°)±Y+´o+°o°v Ö´B+°B/´v+°o±#+´ 1+°s Ö°z3´S+° ±L+°2´;+°;±+´1+±€+±e+±599±`3°9°)².c999°B°b9°Y°09°v°]9°o² h999°s@ &?EQV[j x}$9°#°9°S²8HO999±;L°9±}x±BH99±VE°c9°q°b9°]¶;LSY`el$9°h°j9±°9°5µ  $9°°901463263232654'7#"'#"&>54&#"%327.54#"2#"&5463267654&#"#"&547&#"&5463263254&3254&#"WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8kHN_[I¤¬v€‡Sœcþ{z`\e*& & JE>?WP6Z),;xRnTM&PP&Mþ– Wþ„-*7�Š“ŲD+²HLP333´8+²\js222°{/±cn33´‹+°‚2°/°3´7+°.2°5/°&3´++±22°”/°Ö´+1+³@++´;+°+±~+´’+°’±3+´)&+³Ž)3+´w+°)±o+´n+°n±f+´‰+°‰±#+°h2´ 1+° ±…+´`+°`±+´1+°°T Ö´Y+°Y/´T+±•+±~+±=>99°’³5D8$9°3°€9°ŽµFu{‹�$9°)±.99°w±Hs99°o°09°n´ &J$9°f° 9°‰²Lj999°#°9° ³Nc‚‡$9°…°^9°`²P\999°±W99°Y°V9±‹{±W=99°8@ ;@JTY`fw~‡�$9°D±FN99±°9°5µ  $9°°901463263232654'7#"'#"&>54&#"%327.54#""&547632632632632'654&#"#"&547&#"#54&#"#"&547&2654'2654'WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8n6G;%O07_4IO_8=S1.P%@7>:?"69>A Ø ??þ¬>?J^…JJƒZ­G‡btJ0]“‹¢ ¥>kHN_[I¤¬v€‡SœcþBS:h(&6†H8@ >> @9G†6((f8U6q:\UAj:+üú,6q:,1VAi;þ÷;&[0-^a;'\/-^bWþ-*7Ž–ž÷°_/´\+°X/´d+°ˆ/°q3´�+°•2°8/²jx�333´D+²HLP222°/°3´7+°.2°5/°&3´++±22°Ÿ/°Ö´+1+°+°; Ö´@+°@/´;+°b Ö´Z+²Zb +³@Z] +°+±‹+´›+°›±3+´)&+³—)3+´…+°)±}+´|+°|±t+´“+°“±#+´ 1+° ±�+´n+°n±+´1+°T2°´g+°g/± +±‹Z³>X=d$9°›³5D8$9°3´Fˆ�™�$9°—°9°)³.�ƒ$9°…°H9°}°09°|´ &J$9±“t´L vx$9°#°9° ³Nq‘•$9°�°e9°n´PWjl$9°°9±X\°b9±ˆd²>|}999°�°=9°8@ ;@JTgnt…‹‘™$9°D±FN99±°9°5µ  $9°°901463263232654'7#"'#"&>54&#"%327.54#""&547632632632632#!"3!!"&543!254&#"#"&547&#"#54&#"#"&547&4'32%4'32WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8s.>B"[*3[&?T"d1@N0.k^ý¼88üø/?n>œE6 4A./?6 5C; 3A.0=7 6886þp6776J^…JJƒZ­G‡btJ0]“‹¢ ¥>kHN_[I¤¬v€‡SœcþI>.P!(7f:.67794I]i)&3/*U™7J,L1KJ2M*&ºº&-J1JH3K+{1-&8GH0-'6HWþ-*7œ¤«2°c/´`+°[/´i+°~/±‰–33´£+°ª2°p/´q+°8/²v…Ž333´D+²HLP222°/°3´7+°.2°5/°&3´++±22°¬/°Ö´+1+°^2³;++´@+°@/´;+°+´f+°f/²+f +³@+a +°+±™+´©+°©±3+´)&+°)°’ Ö´¥+°¥/´’+°)±Š+´‰+°‰±�+´¡+°¡±#+´ 1+³� #+´z+° ±+´1+±RV22°´m+°m/°t3²m +³@mp +±­+±™+³=>[i$9°©´58D›$9°3²F–§999±)¥µ.HŽ�$9±Š’°09°‰³ &J$9°�°9°¡³L ƒ$9°#°9° ³N~Ÿ£$9°z²Pvx999°³Zj$9±m°T9±[`°f9±~i°>9°£²Vm=999±qp@ ;Tz�’™�¡¥©$9°8@ @JRxƒ�›Ÿ§$9°D±FN99±°9°5µ  $9°°901463263232654'7#"'#"&>54&#"%327.54#""&547632632632632#!"3!!"&5463!2654+53254#"#"&547&##'4&#"#"&547&4'32%4'2WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8e/>:!S*3Z)?U!\5B®++ 9ýZ#6üã0;B/—0)*x .0.@55=? -1.>4 1:83þq55jJ^…JJƒZ­G‡btJ0]“‹¢ ¥>kHN_[I¤¬v€‡SœcþI>.S"$6g;-666j:92#"&3-,(-1-8361G,'*L1K/&¸¸)-M.('K2G1{>$%=GG>$#?GWýì-*7Š’›¤ °?/´–+°š/´E+°V/´‘+°œ2°‘´l+±`y22°s/²O\e333´+²8ƒ‡222°/°3´7+°.2°5/°&3´++±22°¥/°Ö´+1+³{++´v+°+±o+´£+°£±3+´)&+³Ÿ)3+´i+°)±a+´`+°`±Y+´�+°�°“ Ö´C+°C/´“+°�±#+´ 1+° ±‹+°˜2´S+°S±L+´;+°;° Ö´1+°/´1+±¦+±o+±xy99°£³5s$9°3±q¡99°Ÿ´gl�œ$9°)±.99°i±eƒ99°a°09°`´ &…$9±YC°]9°“± 99°�±\‡99°#±[99° ·?EV‰�‘–š$9°‹°Q9°S³8IO$9°°9±š–±CI99±‘V°x9°s@ ;LSYiov{…�¡$9°±�‰99±°9°5µ  $9°°901463263232654'7#"'#"&>54&#"%327.54#"2#"'&5432>54&#"#"&547&"#54&#"#"&547&#"&54763263263264'323254#"%2654'WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8¶U_GKw5(:l,'4 ,;BA?26=9=A38>@ 6GG%[1‚3?B*&V1#=<>;Ž:;]1þÃ==J^…JJƒZ­G‡btJ0]“‹¢ ¥>kHN_[I¤¬v€‡Sœcþ€b~Y_,?  ~FH`6p8[U>j9-ýú/7p<]WBj:T:^3&@},'n!!99á\.+_^†t;'].-^bWþ„-*7]²8+°=3´R+°I2²R8 +³@RN +°/°3´7+°.2°5/°&3´++±22°^/°Ö´+1+°+±3+´)&+³U)3+´Z+°Z/´U+°)±N+´M+°M±#+´ 1+° ±F+´A+°A±+´1+±_+±Z+±599±)U².999°Nµ08RWX$9°M³ &;$9°#´ =I$9° ±CD99±AF°9°°9±°9°5µ  $9°°901463263232654'7#"'#"&>54&#"%327.54#"2632'654&#"#54&#"&5476WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8Q%: RO./y W=2%C+19['w/.J^…JJƒZ­G‡btJ0]“‹¢ ¥>kHN_[I¤¬v€‡Sœcþ{'D78KŠ93)l4C0ææ.G5j'29ˆL87Wþ„-*7_k|²;+°>3´W+°O2²W; +³@WS +°E/°^3´c+´LiS; +´L+°/°3´7+°.2°5/°&3´++±22°l/°Ö´+1+°+±3+´)&+³[)3+´8+°8/´[+°)±S+´R+°R±#+´ 1+³` #+´I+°I/´`+° ±+´1+³B+´e+°e/´B+±m+±8+±599±)[³.^$9°Sµ 0;W]$9°R²&=999°I²> 999°#°9°`°O9±e µ?EMci$9°°9±cE°]9°i³8B[I$9±;W°=9±°9°5µ  $9°°901463263232654'7#"'#"&>54&#"%327.54#"463262#"'&546;&#"#54&#"&%3254'&#"WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8ŸbML!'®?=NB;G: kHN_[I¤¬v€‡SœcýÀOl:::9VJg.&5?T!Oäç ,%'0k#56Z/f4Wýö-*7q}–²C+°G3´8+°j2²8C +³@8n +°P/´U+°a/°>3´u+°/°3´7+°.2°5/°&3´++±22°~/°Ö´+1+°+±@+´;+°;±3+´)&+°=2°)±n+´m+°m±#+´ 1+³r #+´d+°d/´r+° ±w+´^+°^±+´1+°M2°´Y+°Y/±+±@+±599±)3³.>$9°n²08C999°m´ E&$9°d° 9°#´GRj$9± r³Sahu$9°w²PU{999°^²I\999°°9±UP°R9°a°S9°u°=9°8@ ;@IMY\^d{$9°C°E9±°9°5µ  $9°°901463263232654'7#"'#"&>54&#"%327.54#""&54632632#"'7327654&'#"&54767&#"#54&3254'&#"WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-810?Ps`PI!'O€&M)*sX:2(*@))*" <<3@"#4AZ=-Ý?%2J^…JJƒZ­G‡btJ0]“‹¢ ¥>kHN_[I¤¬v€‡Sœcþ>K2k'46ŒNp22R 79U^Š#434D/O !H\T8;/0Méé -¶2\3%=WþÓ-*7R3°B/´=+²=B +³@=? +°H/´8+°/°3´7+°.2°5/°&3´++±22°S/°Ö´+1+°+±3+´)&+°)±P+´K+°K±#+´ 1+³; #+´E+°E/´;+²E; +³@EB +° ±>+´A+³A>+´1+±T+±3+°9°)².999±KP°09°E@  &8 MN$9°#°9°;°=9±> °9°°9±=B±CM99°H³;EKP$9±°9°5µ  $9°°901463263232654'7#"'#"&>54&#"%327.54#"233!5654&#"&546WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8´?S¦Aþº23!"32RXJ^…JJƒZ­G‡btJ0]“Š£ ¥>kHN_\H¤¬v€‡SœcþPL<#1þ™ 7 /, /3'S8PWþ -*7]g‘°G/´^+°c/°Y3´>+°>´L+°A2²>L +³@>@ +°S/´8+°/°3´7+°.2°5/°&3´++±22°h/°Ö´+1+°+±3+´)&+°)±[+´V+°V±#+°J2´ 1+³; #+´P+°P/´;+²P; +³@PM +°#´e+° ±>+´A+°A°D Ö´a+°a/´D+³A>+´1+±i+±3+°9°)².999±V[°09°P@  &8 XY$9°#°9°;°=9°e°L9±> ´G^bc$9°a°9±A°B9±c^±JD99±>L±NX99°S³;PV[$9±°9°5µ  $9°°901463263232654'7#"'#"&>54&#"%327.54#"233##"&547#5654&#"&546264&"WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8´?S¦AJ32K x23!"32RX1,,<+*J^…JJƒZ­G‡btJ0]“Š£ ¥>kHN_\H¤¬v€‡SœcþPL<#1þ™$/2KK20# 7 /, /3'S8Pþh+<,,*Wýï-*7\dt¢°G/´e+°m/´c+°_/°X3´>+°R/´8+°/°3´7+°.2°5/°&3´++±22°u/°Ö´+1+°+±3+´)&+°)±Z+´U+°U±#+´ 1+³; #+´O+°O/°I3´;+´r+²Or +³@OL +° ±>+´A+°D2³jA>+´]+°]/´j+°A´h+°h/³A>+´1+±v+±3+°9°)².999±UZ°09°O@  &8 WX$9°#°9°r±=K99± ;³Gaop$9°]´_cem$9°>°F9±h±B99±_cµIDhjpr$9°>´ABKMW$9°R³;OUZ$9±²?@999°5µ  $9°°901463263232654'7#"'#"&>54&#"%327.54#"233#"&547#5654&#"&5464#"322654'#"&'WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8´?S¦A &SpS&\23!"32RXH,--,+%3 +!, 4J^…JJƒZ­G‡btJ0]“Š£ ¥>kHN_\H¤¬v€‡SœcþPL<#1þ™)78RR87) 7 /, /3'S8PþÐ++.V3%"/,$4Wþ>-*7cl°E/´f+°k/´K+°P/´=+´Q+°X/´8+°/°3´7+°.2°5/°&3´++±22°m/°Ö´+1+°+±3+´)&+°)±`+´[+°[±#+´ 1+³d #+´H+°H/´d+°#°S Ö´;+²S; +³@SP +° ±O+°>2´A+° Ö´1+±n+±3+°9°)².999±[`°09°H· &8 ]^$9°S°9°#°9±;d°=9° ±Kk99°O³Mfh$9°°9±kf²Hdh999°K°M9°P°^9±=Q°]9°X³;S[`$9±²?@999°5µ  $9°°901463263232654'7#"'#"&>54&#"%327.54#"233#"&5463267!5654&#"#"&54763254&#"WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8Â?T  A;1B3WD.W! ÿ-1#!/1#K+,£X--$4J^…JJƒZ­G‡btJ0]“‹¢ ¥>kHN_[I¤¬v€‡Sœcþ\M<(-þ¡Y,$-' !') >",, 5.!U;''þ¯Wþ�-*7>FN²=+´G++°:/´E+°/°3´7+°.2°5/°&3´++±22°O/°Ö´+1+°+±3+´)&+°)±:+°02´K+°K±M+´C+°C±F+´9+³ 9F+´#1+°#/´ 1+°9±+´1+±P+±3+°9°)².999±MK· &= E$9°#±A99±9±99±GE±CK99°=°A9±°9°5µ  $9°°901463263232654'7#"'#"&>54&#"%327.54#"!54324'3'"654WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8°þ“¹´=Ldš�+,€J^…JJƒZ­G‡btJ0]“‹¢ ¥>kHN_[I¤¬v€‡Sœcýµª§ÉÆl (]W÷M8kVZ@WýÀ-*7HPYch²A+´S++°9/´Z+°_/´P+°/°3´7+°.2°5/°&3´++±22°d/°Ö´+1+°+±3+´)&+°)±>+´X+°X±;+´a+°a±#+´ 1+°Q Ö´M+° ±P+´D+°G2°D´]+°]/°D±+´1+±e+±3+°9°)².999°>°09±;X³ &$9°a³ =OS$9°Q²9A999°#±_99°M±KZ99° ±8^99±D]±E99°°9±_Z±G;99°P³>DE=$9°S±MX99°A°K9±°9°5µ  $9°°901463263232654'7#"'#"&>54&#"%327.54#""&547#5432#4'3'4#"6264&"WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8tfK!’¹´ kHN_[I¤¬v€‡Sœcü;J31"§Éƪ$/30l (]W·@%CkVþÐ*<-,*Wý¤-*7GOW]l˜²@+´P++°9/´^+°f/´]+°Z/´O++°/°3´7+°.2°5/°&3´++±22°m/°Ö´+1+°+±3+´)&+°)±=+´T+°T±;+´j+°j±#+°V2´ 1+´L+° ±O+´C+°F2³cCO+´Y+°Y/´c+°C´a+°a/°C±+´1+±n+±3+°9°)².999°=°09°T² &999°;°9°j± <99°#¶9@PNg$9°L´JZ]^f$9° °e9°O°89±Ca±D99°°9±f^°:9±Z]µ;Fachj$9°O³=CD<$9°P±LT99°@°J9±°9°5µ  $9°°901463263232654'7#"'#"&>54&#"%327.54#""&47#5432#4'3'"6544#"32654'"&'WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8ˆrS(ƒ¹³"'BLeš�,+�U+--%2 ,@, 5J^…JJƒZ­G‡btJ0]“Š£ ¥>kHN_\H¤¬v€‡SœcüRr(§Éƪ':9Dl (]W÷M8kU[@þoXXV2%!.+$3Wýì-*7MU^fP²@+´X7+°P2°H/´a+°e/´8+°54&#"%327.54#"267!5432#"#"&54674'3'4#"63254#"WcSc-6€Xv’%`†U=hƘA%4OžÄê>QFEAHþì�{.:Fa-8T!þÖ¹²dP3TJµ>]Šq&vNT*I5J^…JJƒZ­G‡btJ0]“‹¢ ¥>kHN_[I¤¬v€‡Sœcüñ$/¤ÌÉ£L[&$ Ái'_P²<!DdQï Zÿ/þ-*6:Gè²'+´>7+°2²!+°/´:++°E/°13´C+±22°H/°Ö´;&+°;±C+´5&+°5±.+´ 1+° ±7+´1+²7 +³@7 +°±+´&+±I+±C;°9°5²'>999°.¶%!:@$9° °99±7±99°°9±:° 9±>'´%89$9°Eµ+$9°°9014632632327654'73!57&'&'#"'&>54&#"5327.54#"ZaTc-7}W;:’%[BIV=g—þ$Ô# 6N¤]^ç=QFDE&xL¯þo�{-:Da.8=c�NNED]µKBGn{N3cœ¹Uñ)¥ !Z[IuKQf91D®þì‹ ÉyŠ�X§kZþ'þ-6BFS_4²3+´J7+°2²-+°%/´T++°*/±Z33´F++°Q/°=3´C+±22°`/°Ö´G&+°G±O+´A&+°A±(+´]+²(] +³@(+ +°]±:+´ 1+° ±C+´1+°!2°´W+°W/°±+´&+±a+±OG°9°A²3J999°(²1FL999°]´*-7=$9°:±99° ³%ETZ$9±W²999°°9±*T±!(99°F°,9±J3´1DE$9°Qµ7$9°°9014632632327654'73##"&547#57&'&'#"'&>54&#"5327.54#"2654&#"ZaTc-7}W;:’%[BIV=g—%#//EB_#¹Ô# 6N¤]^ç=QFDE&xL¯þo�{-:Da.88(98)(8:=c�NNED]µKBGn{N3cœ¹Uñ,9B10aB9,)¥ !Z[IuKQf91D®þì‹ ÉyŠ�X§küò7()78(&9Zþþ--8<IUec²++´@7+°2²'+° /´V++°^/´J+°$/±P33´<++°G/°43´C+±22°f/°Ö´=&+°=±E+´7&+°7±"+´c+²"c +³@"% +°c±1+´ 1+° °[ Ö´M+°M/´[+° ±9+´1+°2°´Y+°Y/°±+´&+±g+±E=°9°7²+@999°"°B9°cµ$).4<$9°1@  ' JPSV^$9°M°;9° °9±Y²999°°9±$Jµ"Y[ac$9°<°&9±@+´):;$9°Gµ .$9°°901463263232654'73#"&547#57&'#"&>54&#"5327.54#"2654&#"2654'#"&'ZaTc-7}Ys’%a…V=g—.+j”k+›Ô%6N ¿ç=QFDAGxL¯þo�{-:Da.8$"#"!/D9*(9 D=dŒNN�`µK’e{N3cœ¹Uñ3BIkjJD1)¥!±EuKQfbL®þì‹ ÉyŠŽX§ký@!""!pC.!*=9'.CYÿòÚ-=GÖ²)+±833±>é°2°/±é°1/°!3´7+°2°H/°:Ö´5+°5±-+´E&+°E±A+´%<+°%±+°2± é°2² +³@ +±I+±-5±7899°E°19°A´)#/$9±%³!$9° ° 9±>)°79°² 999°¶ %-5:AE$9°1³#/C$9°°901263 #"'53254/53232654#"#"'&547&#"&54762654'„%T>|99hI>4Le\-3.¹/Ka/6Y^5/ƒ$)V;8o+ŒG@47]�;-)®ddIN MWKL",odŽ[DNMC]‘hHDX“I5e³:8±þ_CyTH…E]Zþÿn2NYô²2+°A3±Oé°/´++° /±!é°:/°*3´G7+°2°Z/°Ö´+°±C+´>+°>±6+´W&+°W±R+±.é°.±+°&2´ <+°2² +³@ +±[+±C°9°>°9°6±@A99°W°:9°R¶2,GJ8$9±.±*M99° °9±O2² @999±! ´.6RW$9°:·,8>CT$9°G±J99012#"'&5473 54/5323254'&#"#"'&547&#"&547632>322654'ZMzM%P¡y»ôŸ¬|7l•‹Óˆj,,g?4HO+c37VX80†*(V;7n,‹EÏ#\ l.Ê57`4K:-([A-07 ~¥N9~Ší±�6u”ÎwkïfTtE"`–ZENMD\”cHCY“I5d´99±þ^D~RrAF\Zÿp/7AL̲+².+´@7+²+°/´E++°K/´ ++°/´ 7+°M/°Ö´&+°±1+´>&+° Ö´B&+°>±8+´+&+°+±%+±é±N+±±99±>B± 99°8¶ .5EGK$9°+²#)999±KE±#99±@.°9°@ %)+1:$901"&547632#"'&5432654'&'#"&54767.4'"323254'&#"£sˆa6yWV‘KIFp;5JPq /O+±±99±:°9±%*²-5999± 0° 9±"¶ '028:$9012!!3##"&547!46"!542654&"2654'#"&'Tm�þZ]P.+jJIl.þ@—²˜^R ""0"!/D9*(8D-}f›nßýà2EJklIC4J_„GdN@@Oþ" "pD. +<8(.DYÿW- (6»²+´++² +³@ +°/´)++°0/´++´% +´++°"/´7+°7/°Ö´1+°$2°±+´31+°3±&+´<+°±+°2´ 1+±8+±±"99°3°!9±&±099°³),$9±0)³,3$9012!!3#"'&54>326=!46"!542654'&#"Tm�þZ]PMEh]A65I)?týL–³˜^RU";%? 8!-|g›nßýÜzD=(!2 .,%(GJ_„GcO@@OýÂYþˆW-?HOX'²+´@+°//±"533´N+±'P22°U/±+J33´;+±D22° /´+² +³@ +°/´++°/´7+°Y/° Ö´1+°2°±8+´W+°W±T+°<2´L+°C2°L±+´<+°±I+°E2´-+°2°-±+´ 1+³ +´)+°)/´ +±Z+±8°9±TW³5P$9°L°29±³/@N$9±-²"$'999±N/±$299°U² %8999012!!3!46"!54232#"'53254+#"&'#"&546;546"354&5#32'265'#"Tm�þZ]Pý—²˜^R58K2&%l 9F‡!:019F4N6&‰((‰DEñF-xe—iÑýï@^F_M@@MþxN96z< ?3¤ !B53?;L=. ,”l?4<Yþ†W-BJSZcm°3/±/33´[+°Y2´+°"/´#+°`/±(U33´8+±O22°K/´=+° /´+² +³@ +°/´G++°D/´7+°d/° Ö´1+°F2°±6+´b+°b±_+°92´W+°N2°W±H+´<+°±T+°P2´-+°A2°-±+´ 1+±22° ´&+°&/²& +³@&" +° ´ +° /±e+±6°D9°b°9°_²3C[999°W°19±H³/=KY$9±-T°9°³($9± °9±3±199±"[²5999°#±b99°`²&6999012!!3!462#"'7324+53254#"&"##"'#"&46;54632"!54"354&5#32#265'#"Tm�þZ]Pý—%;5$%''…I81:F5O=:$$þä˜^R8'�((�GFöK-xe—iÑýï@^ýD' $ !(1,( ¦,,Ch@ Yýüg-PW^ht°&/´2+°G/°C3´g+°[2³:gG+´;+°c/±@]33´M+±V22°T/´+°*2° /´+² +³@ +°/´++°/´7+°i/° Ö´1+°2°±(+´-+°-±J+´e+°e±_+°N2´X+°V2°X±+´<+°±]+°Q2´A+°2°A±+´ 1+° °! Ö´7+°7/°>3´!+°2²7! +³@7: +±j+±J-°9°e²*+999°_±G99°X°E9±µ&2CT[$9± 7°9±:G²!7E999±;g°9°cµ(-J_e$9±T°+9012!!3!46"!54232# 4732>54+53254+#"'#"&546;>4&#"325#4&5#"32Tm�þZ]Pý—²˜^RF;N‚%$6Xa2þtn&a.]xT%HH,&$;†='8+:I2J%HŽŽ,DŽ:I-/-xe—iÑýï@^F_M@@MþyT?Z//&: ‹['KfGa6 %'5'°//J.1F>SŠ"-UD96tD6:9Yýés-=FLV_L°(/´Y+°^/´-+°/°83´U+°K2°Q/±6G33´+±"B22°>/´+° /´+² +³@ +°/´++°/´7+°`/° Ö´1+°2°±+´S+°S±M+±+22´I+±AW22³IM+´<+°I±G+°C2´6+°"2°6±+´ 1+° °$ Ö´4+°4/´$+±a+±°9°S°9°M±99°°;9±I³->K^$9°G³(8Y$9°6±0[99±^Y²+W0999±U°;9°Q²$4999012!!3!46"!54"&547632#"&543267654'#"&'"354&#32'4&5#"323254&#"Tm�þZ]Pý—²˜^R_1:–†A"œUMn9_y.[ )Z‚";-“'‰))‰EBÅG0*A]02&5-xe—iÑýï@^F_M@@MüûD4q“,)> ‹lG>%%< 7-.O­ !?0.’i045:�Yþƒs-@MU\f\²=+°3´N+°"2°5/±+033´e+±LZ22°a/±CV33´:+±$R22° /´+² +³@ +°/´++°/´7+°g/° Ö´1+°2³8 +´c+°±]+±:`22´X+°Q2°X±+±SV22´<+´J+°D2°±A+´'+°'±+´ 1+° ° Ö´+°/´+±h+±]c±599°X±399°µ01=NZ$9°J±.?99°°$9°A±+L99°'±"99°°9°°9±e5±399°a²'8.999°:±99°N°?9012!!3!46"!542'654&#"32#"&5"&'#"&547>3264+32'"354#3254&5#"32Tm�þZ]Pý—²˜^R®Zme$JH;S�!74:J:@1;—H=_)JH0/ë)‘‘IHÐG0+-xe—iÑýï@^F_M@@MþxkY}<#-i326324&#32'"354#3254&5#"32Tm�þZ]Pý—²˜^Ru1?.'!"!)U15%-}@60NO>29—G>\ ,sB;Jõ/210ë)‘‘HIÐF/,-xe—iÑýï@^F_M@@Mýû, D,5 ;!2!)q6A'A88C4o?PDD#Â!bþ.M�ll924<Pýüs-[bhnx§°-/´7+°/±TX33´w+±am22°s/±^i33´+±Lg22³As+´@+°e/°H3´+±#222° /´+² +³@ +°/´++°/´7+°y/° Ö´1+°2°0 Ö´5+°±+´u+°u±o+°2´k+°g2°k±+±ci22´<+´`+°L2°±\+´Q+°Q±+´ 1+° °+ Ö´;+°;/°E3´++°'2±z+±5°29±u°39°o±99°k±Z99°´Xem$9°`³!-7V$9±\±OT99°Q°#9°±@A99± ;°)9±w±+Z99°@µ;V\ou$9°s°)9±A±0599°e²!'E999°°39012!!3!46"!54"&547>32632!"&547!27654'&+532654&#"3232#"'#"'%4+2'4#"3#32'4&5#"32Tm�þZ]Pý—²˜^Ræ-2‰>9O 1n=3900þ‘×ÝC(8}hS€ D/*'2r:29B@GIZ“B@……CA¼A-'-xe—iÑýï@^F_M@@MýD3o?QDF&?EJÁ–³a["KOþî&T9/#%-q5BDD99w5j³NS=m435>Yþ†W-9ï²+´&+°,/° 3´7+° /´+² +³@ +°/´++°/´7+°:/° Ö´1+°2°±/+´4+°4±9+´)+°)° Ö´<+°/´<+°)±+°#2´ 1+´+±;+±/°9°4°9°´,127$9±)² !999±7,°!9°&µ#)/4$9°°29° °19012!!3!46"!544632'654&#"#"&547325Tm�þZ]Pý—²˜^RL=S+&s-b6/GS@IXt,\4,M-xe—iÑýï@^F_M@@Mýæ?S=5Q}:,)j5Iv3@RjP‡;+-c4OmYþW-I²+´1+°%/´"+°/´++°8/´D+° /´+² +³@ +°/´++°/´7+°J/° Ö´1+°2°±<+´A+°( Ö´ +² ( +³@ # +°A±F+´5+³5F+´<+°/´<+°5±+°.2´ 1+´+±K+±<±99± A°9°µ+8>?D$9±5²,999±"°(9±1Dµ.59012!!3!46"!542+"3!!"&546;254&#"#"'&54732=46Tm�þZ]Pý—²˜^R¯GSiZ«33fþ’/>?.¨Ž1*$L9E''l"L/#AD-xe—iÑýï@^F_M@@MþxdN_u=/)*3™0D)/)5?+,>-þ @@T?J:?TlI0"AL9@T-xe—iÑýï@^F_M@@Mþ .B0I>/)*3$9/26X'5>Q?p2/$J%8L06D9Yýé]-DM4°"/´G+°L/´(+°5/´B+°//´+°;2° /´+² +³@ +°/´++°/´7+°N/° Ö´1+°2°±9+´>+°>±%+´E+°E±D+´2+°2° Ö´<+°/´<+°2±+´ 1+°2° ´-+°-/±O+±9°9°>°9°%°9°E³5;$9°°<9012!!3!46"!544632#"&5462>54#"#"'&5473253254&#"Tm�þZ]Pý—²˜^R*O=S,*GP�7`MX^(:hDRAL-)v!R/I6R<:'--xe—iÑýï@^F_M@@Mýå>V?:Y{_l(% '#’GŒv2?O74H‹:4*`2#(hü Yþ�W-3á²+°!/´"+°2°)/´+° /´+² +³@ +°/´++°/´7+°4/° Ö´1+°2°±1+´,+°,±+´<+°±&+´+²& +³@&! +°±+´ 1+°2° ´+°/±5+±1±99°,°/9±²).999±&°9±)"²/1999012!!3!46"!54233!532654&#"&546Tm�þZ]Pý—²˜^R;2KtCþØ-'' DN-xe—iÑýï@^F_M@@MþJ2/:þ‘5.##4IYýÂW->G4²+°&/´?+°,/° 3´-+°2°-´D+°4/´+° /´+² +³@ +°/´++°/´7+°H/° Ö´1+°2°±<+´7+°7±+´<+°±)+´F+²)F +³@), +³1F)+°+3´+°F±+´ 1+±#22° ´+°/° ´B+°B/±I+±<±99°7°:9±²49999±F°9°³&?CD$9± B°!9±D?±)#99±4-²:<999012!!3!46"!54233##"&547!532654&#"&546264&"Tm�þZ]Pý—²˜^R;2KtC I42KþÞØ-'' DNÔ,,<**-xe—iÑýï@^F_M@@MþJ2/:þ‘#.3JK2-$5.##4Iþm+<,,<+Yý§^->FVc²+°&/´G+°O/´E+°,/° 3´-+°2°-´A+°4/´+° /´+² +³@ +°/´++°/´7+°W/° Ö´1+°2°±<+´7+°7±+´<+³)+´T+²)T +³@), +°±1+´+°±+´ 1+°2°? Ö´L+° ´+°/° °# Ö´J+°J/´#+±X+±<±99°7°:9±)²49999±1°+9±T²CQ999°?´&AEGO$9± J°!9±AEµ)#JLRT$9±4-²:<999012!!3!46"!54233##"&547!532654&#"&5464#"322654'#"&'Tm�þZ]Pý—²˜^R;2KtC$R89S%þêØ-'& DNû+..+*$4+ - 6-xe—iÑýï@^F_M@@MþJ2/:þ‘'78SR96(5.$#5HþÔ,,-V4$!/,#5Yþ„W-BK²#+°'3´+°32°+°>±+°52´ 1+´!+±Z+±°9°K°9±D'´%1MN$9°S²FH999±³APU$9±>W´28$<$9±!±*+99±),°.9±2$°/9°A°N9°U°M9°H·!5<>DKP$9°°9012!!3!46"!544632632+"3!!"&4632654&#"##"&547&#"&%3254Tm�þZ]Pý—²˜^RÛpU4FLhrWâ22¥þS.@@.à>R@0 'A23B- 6OE\ #;6-xe—iÑýï@^F_M@@MýßIPfQXt $50R0V@2G&C3FE4A%1,I--¬1DD7YþW-Yaƒ²+°V3´<+°J2°)/´&+°!/´0+°C/´`+°6/´7+° /´+² +³@ +°/´++°/´7+°b/° Ö´1+°2°±R+´M+°, Ö´$+²$, +³@$' +°M±+´<+³^+´F+°F/´^+°±Z+´@+°@±+±3:22´ 1+´+°2² +³@6 +±c+±R°9±M,°9±F$´"/OP$9°^²HJV999°³CX\`$9±@Z°>9°³!0<$9°°9±!&°,9±C0°P9°`²3O999±76´@FZ^$9°<µ>HMR\$9°°X9012!!3!46"!542#!"3!!"&54632654+53254#"#"&547&#"&54763264'32Tm�þZ]Pý—²˜^R©D\,,N?þÛ11¨þP+@@+$77-c (=-.601J4U=5J= *2-/-xe—iÑýï@^F_M@@Mþx66D B:@ $4.)&3(541; ,@0GD3A-8-C1/eG+(¬>:=YýæW-JT]U²G+°3´<+°.2°/´W+°\/´$+°5/´P+° /´+² +³@ +°/´++°/´7+°^/° Ö´1+°2°±D+´?+°?±8+´N+°N°U Ö´!+°!/´U+°N±+´<+°±R+°Y2´2+°2±+°+2´ 1+´+±_+±D°9±!?²AB999°8°9°U°<9°N°G9°°:9°·$5IKPW\$9°R°09°2²'.999±\W±!'99±5$°B9°P°A9°<¶+28?DK$9°G°I9012!!3!46"!542#"&5463267654&#"#"&547&#"&5463263254&3254&#"Tm�þZ]Pý—²˜^R�WeNQ};aN.1Y /H:AJ3:CC 5K7$SzV5")%@<&jW62%6-xe—iÑýï@^F_M@@Mþx{_~]e)' & IAB?W;[6QKP6[(,;xRnTP$PP%Nþ– $þ€ -`go‘²#+²'+/333´+²;IS222°Z/³5BM$3´n+°f2° /´+² +³@ +°/´++°/´7+°p/° Ö´1+°2³ +´+°/´+°±]+´l+°l±h+´W+°W±N+´M+°M±E+´e+°e° Ö´<+°/´<+°e±+´ 1+³? +´a+°a/´?+° ±8+´3+±q+±±99±l]±#99°hµ%ZU_$9°W±'S99°N°9°°)9±E°I9°e°+9°a³-B=G$9°±/;99± ?±5699±nZ±699°@ )38?EW]cj$9°#±%-99012!!3!46"!54"&547632632632632'654&#"#"&547&#"#54'&#"#"&547&4'32%4'32Tm�þZ]Pý—²˜^RþÒ2B:&L.4Z/CIX59O0)L$9F2:A05<< 2=:B/6:; ô:798þ…89:7-xe—iÑýï@^F_M@@Mþ;T8e*(6‡I9@ << @:H‡6)*d6V9n9^X?i;*ÿü:m8`X@j:¨[.+¼^[.,]_0þ |-krz´°4/´1+°-/´9+°]/°F3´y+°q2°d/²?MV333´+²"&222° /´+² +³@ +°/´++°/´7+°{/° Ö´1+°2³g +´+°/´g+°7 Ö´/+²/7 +³@/2 +°±`+´w+°w±s+´Z+°Z±R+´Q+°Q±+´<+°p2°´I+°I/°±l+´C+°C±+´ 1+³< +´)+±|+±/³-9ij$9±w`²bd999°s²]999°Z³VX$9°R°9°Q° 9±I±"M99°l³$:FK$9°C³,&?A$9±14°69°-°79±]9²QRj999°y°i9°d@ )< CIZ`glnpu$9°±$99012!!3!46"!544632632632632#!"3!!"&463!254&#"#"&547&#"#54&#"#"&547&#"&%4'2%4'32Tm�þZ]Pý—²˜^Rþ2bG%!SŠ22dþŒ2332-xe—iÑýï@^F_M@@MýÝEW66hK\g*%2/P4�4L,K1II1L*'¹¹$-I/KI1L)?,Q '6S1,%8GH/-&6G:þ†-w‡Þ°@/´=+°8/´G+°q/±Ze33´†+°~2°M/´N+°/²Saj333´#+²'+/222° /´+² +³@ +°/´++°/´7+°ˆ/° Ö´1+°2°C Ö°3´;+°2°±t+´„+°„±€+´n+°n±f+´e+°e±+´<+°°| Ö´]+°]/´|+°±x+´W+°W±+´ 1+³J +°Q3´5+°12²J5 +³@JM +±‰+±;³9F$9±„t²#v999°€²%q999°n³'jl$9°f°9°e°)9±]°+9°|°_9°x±-Z99°W²/SU999±J±8G99±5 ²3>?999±8=°C9±qG°9°†²5J999±NM@ 3W]ntx|€„$9°@ )1U_lvz‚$9°#±%-99012!!3!46"!54"&547632632632632#"3!!"&5463!2654+53254#"#"&547&##54&#"#"&547&4'32%4'32Tm�þZ]Pý—²˜^RþÖ*:5 K'.S':PT1;Ÿ((<0ý�44Öý#+:>,b)$&m *:*,:0 2:9 +;*,8.Ý.530þ�0330-xe—iÑýï@^F_M@@MþHB,T"$6h<.776l;<2E*%30()6+.8471I0OM2K/*¹¹*.L0OM2I1}>$$>II=&&=IYþ‹W-0í²+°!/´+´"+°'/´+° /´+² +³@ +°/´++°/´7+°1/° Ö´1+°2°±.+´)+°)±+´<+³$+´+²$ +³@$! +°±+´ 1+°2° ´+°/±2+±.±99±)´'+,$9°$°&9±°9±"°+9°'³$).$9012!!3!46"!54233!5654&"&546Tm�þZ]Pý—²˜^R>U¥Aþ»12D32RX-xe—iÑýï@^F_M@@MþL;#2þ™U¥A&S79S&]12"#22RXJ,--,*%2 +!, 5-xe—iÑýï@^F_M@@MþL;-þ™)78RR87)$5!-)"02'S8OþÐ,,-V2%".,$3YþRW-A)²+²(+°"/´.+°1/´+°7/´+° /´+² +³@ +°/´++°/´7+°B/° Ö´1+°2°±%+´*+°*±?+´:+°:±+´<+°±4+´+²4 +³@41 +°±+´ 1+°2° ´0+°0/°3±C+±%±99±?*±'99°:°(9°°=9°²7<999±4²".999±1.°=9°±2<99°7µ%*4:?$9± °'9012!!3!46"!54233#"&547327#5654&#"&546Tm�þZ]Pý—²˜^R,3A‰AÏŒ¡=(6MCg�Õ##$(BC-xe—iÑýï@^F_M@@Mþ>2. þÊx‡‚`I?Qq81D3"!*,!K0@Yý‰]-KUr²+²2+°'/´L+°,/°P3´8+°;/´+°A/´+° /´+² +³@ +°/´++°/´7+°V/° Ö´1+°2°±/+´4+°4±I+´D+°D±+´<+°±*+°>2´S+´+²* +³@*; +°S±+´ 1+±$22° ´:+°:/°3° ´O+°O/±W+±/±99±I4±199°D°29°°G9°²AF999±S*²,8999±³'LPQ$9±O:°"9±,L±*$99°8°"9°;°G9°±DI$9± °19012!!3!46"!54233#"&547.547327#5654&#"&546264&"Tm�þZ]Pý—²˜^R,3A‰A5;J32K‰™=(6MCg�Õ##$(BCæ,,<+*-xe—iÑýï@^F_M@@Mþ>2. þÊ<$F3JK2, †€`I?Qq81D3"!*,!K0@þ#+<,,*Yý…W-IO^†²+²1+°'/´Q+°X/´O+°L/´6+°9/´+°?/´+° /´+² +³@ +°/´++°/´7+°_/° Ö´1+°2°±.+´3+°3±G+´B+°B±+´<+³*+°93´]+°±<+°,2´+°M2°±+´ 1+±$22°K Ö´U+°"2° ´8+°8/°3° ´S+°S/±`+±.±99±G3±099°B°19°°E9°*²?D999±]²6Z999°K³'PQX$9±LOµ*$SU[]$9°6±",99°9°E9°±:D99°?µ.3Õ 9!-+ 11'S9NL; ý;(šœ)8YýÂW-BKU`²+´C+°%/´L+°+/°3´A+°G2°A´Q+°72°+´,+°1/´<+° /´+² +³@ +°/´++°/´7+°V/° Ö´1+°2³9 +´4+°±.+´?+².? +³@.+ +°?±B+´G+°G° Ö´<+°/´<+°G±(+´S+°S±+´ 1+±"22° ´H+°H/° ´O+°O/±W+±.4´67<$9°?±A99±S(°*9°´%CLP$9± O° 9±QL±("99±A,°69°1³.49?$9012!!3!46"!544632##"&547!5654&#"&5463237"354&264&"Tm�þZ]Pý—²˜^R[EC./I42KþÛ12"#33SW<=Tf '6¾8,,<+*-xe—iÑýï@^F_M@@MýØD\./>Õ#.3JK2/" 9!-+ 11'S9NL; ý;(šœ)8þ3+<,,*Yý§W-AJRb{²+´B+°$/´S+°[/´Q+°*/°3´@+°F2°@´M+°62°*´++°0/´;+° /´+² +³@ +°/´++°/´7+°c/° Ö´1+°2³8 +´3+°±-+´>+²-> +³@-* +°>±A+´F+°F° Ö´<+°/´<+³'FA+´`+°F±+´ 1+±!22°K Ö´X+° ´G+°G/° ´V+°V/±d+±-3´56;$9°>±@99±`F°)9°Kµ$BOS[$9± V°9±MQµ'!VX^`$9±@+°59°0³-38>$9012!!3!46"!544632##"&547!5654&#"&5463237"354&4#"322654'#"&'Tm�þZ]Pý—²˜^R[EA_$$R89S$þñ12"#33SW<=Tf '6¾8+..+*$3 + - 4-xe—iÑýï@^F_M@@MýØE[[@Õ'78SR97' 9!-+ 11'S9NL; ý;(šœ(9þš,,-V4$!/,$4Yþ†X-?GH²+³+°<3´'+°.2°!/°*3´+°F2°´7+°B/´2+° /´+² +³@ +°/´++°/´7+°H/° Ö´1+°2³9 +´D+°±@+´5+°5±++´*+°*±+´<+°±$+´+²$ +³@$! +°±+´ 1+°2° ´+°/±I+±D°09°@²27999°5±<99°+°9°*°>9±±'99±$°9±!°"9°B²459999°2²$0999±'°>9012!!3!46"!54233!5654&#"#54#"632#"5463264#"32Tm�þZ]Pý—²˜^R1OR$l@þíK0,>BbU/9=0ufYN( ²0//0-xe—iÑýï@^F_M@@MþygXD51þ“'9_4DDóóDgCdCŸ`|))þù:98YýÀ^-KT\¸²H+°3´9+°22²9H +³@95 +± +22²+°&/´L+°Q/°C3´++´[+´=W5H +´=+° /´+² +³@ +°/´++°/´7+°]/° Ö´1+°2°°Y Ö´E+°E/´Y+°;2°±U+´@+°@±6+´5+°5±+´<+°±/+°+2´+³S/+´)+°)/´S+²)S +³@), +°±+´ 1+°2° ´+°/° °# Ö´O+°O/´#+±^+±UY²=C999°@±H99±56±J99±±299±S±Q99°²&LP999± O°!9±QL±)#99°[°-9±W³@EUY$9°=²/;999±9°J9012!!3!46"!54233##"&547#5654&#"#54'"632#"546326264&"4#"32Tm�þZ]Pý—²˜^RQW'xAI42KMO5-DCh_&2:@2zn[S,"--<**þb5665-xe—iÑýï@^F_M@@MþxfXF3.þ™$/3JK2/$$7a3GGïïEn?42A�`{++ýõ*<--<*<;:Yý¦^-KSckÖ²H+°3´9+°22²9H +³@95 +± +22²+°&/´T+°\/´R+°C/°N3´j+´++´=f5H +´=+° /´+² +³@ +°/´++°/´7+°l/° Ö´1+°2°°h Ö´E+°E/´h+°;2°±d+´@+°@±6+´5+°5±+´<+³)+´a+²)a +³@), +°±/+´+°±+´ 1+°2°L Ö´Y+° ´+°/° °# Ö´W+°W/´#+±m+±dh²=C999°@±H99±56±J99±)±299±a°+9°/°_9°²P^999°L´&NRT\$9± W°!9±CRµ)#WY_a$9°j°-9±f³@Edh$9°=²/;999±9°J9012!!3!46"!54233##"&547#5654&#"#54'"632#"5463264#"322654'#"&'4#"32Tm�þZ]Pý—²˜^RRV'xA&R89S'9O5-DCh_&2:@2zn[S,"+..+*$4*!- 5þu5665-xe—iÑýï@^F_M@@MþxfXF3.þ™)78RR88($7a3GGïïEn?42A�_|++þ\,,-V3$".,$3!<;:Yþ�W-%-ײ+´&++°/´$+° /´+² +³@ +°/´++°/´7+°./° Ö´1+°2°±+´*+°*±+´<+°±,+´"+°"±+´ 1+³ +´%+°%/´+±/+±±99±±$&99°,°9°"° 9±&$±"*99°° 9012!!3!46"!54!54324'3'"654Tm�þZ]Pý—²˜^R þ“¹´=Meš�+,€-xe—iÑýï@^F_M@@Mý²ª§ÉÆl!'`WúM8nV]@YýÀW-(09B*² +´3++°/´:+°?/´0+° /´+² +³@ +°/´++°/´7+°C/° Ö´1+°2°±+´8+°8±+´<+°/2°°A Ö´+°/´A+°±1+´-+°-±+´ 1+°0 Ö´#+°&2°#´=+°=/±D+±±99±±399±1A° 9°-³+:?$9°0°>9±=°$9±?:±&99°0³#$$9°3±-899° °+9012!!3!46"!54"&547#5432#4'3'4#"6264&"Tm�þZ]Pý—²˜^R§2K �¹´"INe›u)"1--<**-xe—iÑýï@^F_M@@Mü8K20#§Éƪ"13Jzl!'`Wº@#EnUþÔ*<--<*Yý¦W-(08@PH² +´3++°/´A+°I/´?+°;/´0+° /´+² +³@ +°/´++°/´7+°Q/° Ö´1+°2°±+´7+°7±+´<+°/2³N+´+°/´N+°±1+´-+°-±9+´F+°F±+´ 1+°0 Ö´#+°&2°#´D+°D/±R+±±99±N°9°°39°1³ =KL$9°-µ+;?AI$9±D°$9±;?µ&DFLN$9°0³#$$9°3±-799° °+9012!!3!46"!54"&547#5432#4'3'4#"64#"322654'#"&'Tm�þZ]Pý—²˜^R£9R&ƒ¹´ &SNe›u),*X,--,+%2 +!, 5-xe—iÑýï@^F_M@@MüQ97)§Éƪ)78R”l!'`Wº@M8nUÅ,,-V2%".,$3Yþ„f-:D²5+°3´)+°#/°/3´+°;2° /´+² +³@ +°/´++°/´7+°E/° Ö´1+°2°±2+´B+°B±>+´-+°-±&+´9+³9&+´<+°/´<+°9±+´ 1+° ° Ö´+°/´+±F+±B2°9°>´/0+$9°±)599±9³#$9±)¶&-28@$9°5°9012!!3!46"!542654'7#"&=4#""&54632!2654'Tm�þZ]Pý—²˜^RÕ$2Z$s"'G>Np NHvCw]Fjþý%T3%-xe—iÑýï@^F_M@@Mý8T/c6'=ŠF5=V@7uB[D_bF]wS?:tC&`2U&9Yý¸f-AKUY²<+°3´0+°&/´B+°G/´+°L2° /´+² +³@ +°/´++°/´7+°V/° Ö´1+°2°±9+´S+°S±O+´4+°4±-+´@+³@-+´<+°/´<+°@°J Ö´)+°)/´J+°@±+´ 1+° ° Ö´+°/´+°#2°´E+°E/±W+±S9°9°O´672$9°±0<99±J@°+9°µ&BG$9°°!9±GB³)#76$9°±!+99°0¶-49?Q$9°<°9012!!3!46"!542654'7#"&547&=4#""&54632264&#"%2654'Tm�þZ]Pý—²˜^RÕ$2Z$s=;I42K*Jp NHvCw]Fj]++++þ¾%T3%-xe—iÑýï@^F_M@@Mý8T/c6'=Ši3#H3JK29%%b7uB[D_bF]wS?:tÔ*>*+<+ÔC&`2U&9Yý™f-@HXbo²;+°3´/+°&/´I+°Q/´G+°6/´Y+°2°Y´C7+° /´+² +³@ +°/´++°/´7+°c/° Ö´1+°2°±8+´`+°`±\+´3+°3±,+°(2´?+³?,+´<+°/´<+°,´V+°?±+°A2´ 1+´N+° ° Ö´+°/´+°#2°´L+°L/±d+±`8°9°\´561$9°±/;99±?@ &*EIQT$9°N±!%99±CGµ(#LNTV$9±Y6±!*99°/¶,38>^$9°;°9012!!3!46"!542654'7"&547&=4#""&546324#"322654'#"&'%2654'Tm�þZ]Pý—²˜^RÕ%1Z$sEESpS?Ep NHvCw]Ek|,--,+$4 +!, 4þÐ&T3$-xe—iÑýï@^F_M@@Mý8T/c6'=Šp2'P8RR8J*'\7uB[D_bF\xT>:tq++.U3$".,$3ôC&`2U&9Vþùn.%-ä²+²+°!3´++² +³@ +°/´'++° /±é°./°Ö´+°± +´+° Ö´-+²- +³@ +°±+´!1+°$2°!´)+°)/±/+±³ $9° °9°-°9°°9°´&'*+$9±!)°"9±'³$),$9°±*+99°±99° ³ $901"&547#5654&#"&546323#264&"†_!‡�z[^:;�#´¦|{œOÞP##ÊP88P9þù`C8,3G“]z>@] 6=KÉ~¦¢}�?àýß,8C8P89NVþÔn.%1A ²+²,+´ 7+² +²#+°/´2++°:/´&+°/±é°B/°Ö´+°± +´+³? +´+°/´?+²? +³@ +°±)+´7+°7± +´#1+°2°#´5+°5/±C+±³$9° ±99±?±/<99°)´&,2:$9±#5°$9±&·)/57=?$9± ,± 99°³ $9°±!"9901#"&547#5654&#"&546323#2654&#"2654'#"&'njJIk-o�z[]v�#´§{z�OÞP++µ##""/D9)(9DwJklID33G“\{}^ 6=KÉ|¨£|�?àýß2G#! "pC/ *=9'.DVÿn.)4Ͳ+²+´++°#/´0++°*/´++° /±é°5/°Ö´+°±'+´-1+°-± +´+²  +³@  +°±+°2´ 1+±6+±'³ $9± -±99°²#*0999°±299±*0³'-2$9±±99° ³ $9°±9901265!5654&#"&546323#".546"3254&B>uþ¦�z[]v�#´§{z�OÞP‹r6[AdF 9Z1JS,$&F3G“\{}^Ÿ7=LÈ|¨£|�?àýßrŒ=+/3D!Yÿ"21¬²"+²+´/++°/´7+°/±(é°2/°Ö´ &+° ±$+´+°±+´,&+², +³@ +°,±/+°2´&+±3+±$ ° 9°° 9°µ!"(.$9±/±!99°µ $,$9°(² 0199901%#"547327675!5654&#"&5476323 }«`öþØaCX€~×t]` þ¨�x^]t�#µTS|{NOQßNHh/Þ™ƒ+r¾xw+,:3G“]z|_ 6=MÇ}TSQR|Œ@åYþ?2=E ².+²!+´;++°/´?++°/´7+°(/±4é°F/°Ö´&+°±0+´++°+±%+´8&+²%8 +³@%" +°%° Ö´E+°8±;+° 2´&+°2°´A+°A/±G+±0°9°+°9° µ(-.4$9°%±:99±;8µ>?BC$9±?³ AD$9°²BC999°.°9±;!±#-99°(µ%+08$9°4²<=99901%#"'&547#"547327675!5654&#"&5476323264&" S\/.FD.0$6öþØaCX€~×t]` þ¨�x^]t�#µTS|{NOQßNËN98P8S:-eC1//2B$!Þ™ƒ+r¾xw+,:3G“]z|_ 6=MÇ}TSQR|Œ@åü[9P88PYþ 2=HY=²*+²+´7++°/´I++°R/´>+° /´7+°$/±0é°Z/°Ö´&+°±,+´'+°'±!+´4&+²!4 +³@! +³W4!+´+°/´W+³U4!+´F+°4±A+´O+°O±7+°2´:&+°2°:´L+°L/±[+±,°9°'°9°µ $)*0$9°!± 699±A4´>DIR$9°O°<9± >·AFLNUW$9°±CD99°*°<9±7±)99°$µ!',4$9°0²8999901#"'&547#"547327675!5654&#"&54763232654&"2654'#"&' 54LK45!!öþØaCX€~×t]` þ¨�x^]t�#µTS|{NOQßN Xf·!#.$#/C;(): CþÌK5445K0)Þ™ƒ+r¾xw+,:3G“]z|_ 6=MÇ}TSQR|Œ@åýÛW<2r"!"#pC/")<8(.DVþ�„.>I*°&/°23´+°B2°,/´9+°/´ +²  +³@ +°/´7+°J/°Ö´+°±5+´?+°?±F+´0+°0±)+´=+°=° Ö´+°/´ +² +³@ +°=± +´1+°°# Ö´+°/´#+±K+±5²999±F?´.23$9°0±,999°° 9± =³ !&$9±,¶#)05Lo LHtA98_Cjþ¿#P1!Š`z£žyŠ=Óýí1EŽZxy\�3þU.d6)>ŒNmWB7uCZDbdG^<;PC:t_&9%!#`2Vý»†.HS^�°+/´I+°=/°N3´W+°2°6/´C+°/´ +²  +³@ +°/´7+°_/°Ö´+°±?+´T+°T±[+´:+°:±3+´G+°G° Ö´+°/´ +² +³@ +°G°Q Ö´/+°//´Q+°G± +´1+°°# Ö´+°/´#+°'2°#´L+°L/±`+±?²999±[T´8<=$9°:±6C99°° 9±QG°19° µ !+IO$9°°N9°L°%9±=I±/'99°W±%199°6¶#3:?F]$9°C° 9°±!99° ±99°³ $901%.5463233!5654&"2654'7#"'&547&=4#""&5476322654&"327654' Pd§{yžOÞPþV�z¶x�Æ$0Y%q9;%#54$%'Fo LHtA98_Cj\,+>*+þ�#P1!Š`z£žyŠ=Óýí1EŽZxy\�3þU.d6)>Œf5$F1'$$%37%'`7uCZDbdG^<;PC:tÑ*++*0&9%!#`2Vý�„.EM]g‹°*/´N+°V/´L+°H/°:3´++°a2°4/´@+°/´ +²  +³@ +°/´7+°h/°Ö´+°±=+´^+°^±d+´8+°8±1+°-2´D+°D° Ö´+°/´ +² +³@ +°1´[+°D± +°F2´1+´S+°%2°°# Ö´+°/´#+°'2°#´Q+°Q/±i+±=²999±d^´6:;$9°8±4@99°° 9±D[±/X99° @  !*HJLNV$9±HLµ-'QSY[$9°±%/99°4¶#18=Cf$9°@° 9°±!99° ±99°³ $901%.5463233!5654&"2654'7#"&547&=4#""&546324#"322654'#"&'32654' Pd§{yžOÞPþV�z¶x�Æ$0Y%q@?S89R;;o LHtAs]Ehu+--+*$4 +!, 4þ˜#"P1!Š`z£žyŠ=Óýí1EŽZxy\�3þU.d6)>Œm3(M8RQ9J))W7uCZDbdG^wS@:tm++-U2$".,$2N&9B'`2Vÿ/n.!­²+²+°3´++² +³@ +°/´!++° /±é°"/°Ö´+°±+´+² +³@ +³@ +°±+°2´1+±#+±´!$9°°9°° 9±!°9±±99° ³$901!57#5654&#"&546325#nþ*é½�z[]v�#´§{z�OÞ.Æ!ý)¨3G“\{}^Ÿ7=LÈ|¨£|�?àýSŒŒVþ&n.'+3þ²+² +°)3´!++²! +³@!# +°/´-++°/°%3´+++°/±é°4/°Ö´+°±+´+° Ö´3+²3 +³@ +³@ +°±"+°(2´%1+°2°%´/+°//±5+±³$9°±!+99°3°9°± 99°"µ*,-01$9±%/°&9±-²0999°+° 9±! ± 99°³$901"&547#57#5654&#"&546323#'5#264&"n_†_#µé½�z[]v�#´§{z�OÞP$$O.ÆyP88P9þÉC``C:,)¨3G“\{}^Ÿ7=LÈ|¨£|�?àý+pŒŒþõ8P89NVþn.(,6F'²+² +°*3´"++²" +³@"$ +°/´7++°?/´-+°/±&233´,++°/±é°G/°Ö´+°±+´ +³D +´+°/´D+²D +³@ +³@ +° ±0+´<+°<±#+°)2´&1+°2°&´:+°:/±H+±³$9°²",999± D³ 45A$9°0µ+-27?$9±&:°'9±-µ:++°@/´++°Q/°Ö´ +°* Ö´!&+° ±+´&+°±;+´N+°N±G+´5&+°5±1+´+±R+±!µ -$9±GNµ.8@>$9°5±399±1±%&99±$°*9±K@  135;CGN$9°>°9±@° 901%#"&547327654632#!"3!!"&5463!2654'#"&5467&#"2654'&#"ãhM`t’%pR@M‚]–BVvˆyýù$99$ÿüõEXYD]l\ jRF^yW0A@XÞ4; Fb4ûHV€c«G6:yB_HpSfi xYry' %CI?@J]Va!)UuQCXy$J=ÄL:--M?'0Zÿ0$2Q]1²+´'+²%+°!/´++°J/°;3±é°R2°//´0+°6/± é°A2° ´Y++°C/´ ++°^/°MÖ´+°$ Ö´&+²$ +³@ +°±+´G&+°G±>+´\+°\±U+´8&+°8±++°32´<+°2²+ +³@+/ +±_+±µ'JOP$9±U\³ ;CA$9°8± 699°+±(99°°9±°$9±J°+9±0/±>99°6@ 8FGMU\$9°Y°W9± C°P9013276546322#!"3!!"&5463!2654&+53254&##"&5467&#"#"&5472654'&#"¡S?M‚]œ<0cF+*L6ýo%87&üîFYZE…+.@ jRF^yWU@XiL_u’%p 49 FbIB^HoSfi%F)@?6M&!%DH@?G'&1+°>±E+±2é°2±&+´Q&+³WQ&+±é°/±Wé°Q±I+´1+°±+´ &+±a+±E>²5;<999±IQ@ *#.,U[]$9°²999±U[±99±MF@ &129>E$9°*°9±.°<9014632#"'&5432>54'#"&5476323&#"#"'&54732652654'&#""3254'Ä‘lMBF$k†~¸F:L¿;CJN]9>`PjFDe;PMfvYrB=¤(|^#&8<Y=F P;9< :=4'"^5Mdz#= —s²rs%Ef #,&•g’$0/aHNgPjIG6_K�WoUOuÒT+´!<+°!±+´+² +³@ +°±+´&+±I+±;²389999±B'±,99°>² $*999°!² 999±°9±E$°09°,@ !*/6;@$9°³ 9$901%26=4632632335!2654&#"#"&'547&#"#"&5474'326LD4 mX!'\n–IÊLüåOHmsT G[GDVRGgr^mƒ¢*|[ŠLR*%&)=VV`c‚#"®utSÝýáCvJ[ˆJRMmkJTJgGs]s¢wÐVJþÿ8P88P8”?.V-1R,AYþÔž2GQZik² +°3´!++°2²=+±é²N+´C+°/´\++°c/´I+°//±Ué°6/°(3±é° 2°j/°@Ö´E1+°E±+±:é°:±2+´R&+°R±W+±,é°,±+´h+²h +³@ +°h±%+´+°±K+´`+°`±+´&+°2°´^+°^/±k+±E²=BC999±R2±699°W² /4999°,² (*999±h°9°%°e9°´HNP[$9°K´IM\c$9±^°9±=I·KP^`fh$9±U/°:9°6@ %*,29@EY$9°³ C$901%26=463263233##"&547!5!2654&#"#"&547&#"#"&5472654&"3254'2654'#"&'LD4 mX!'\n–IÊL--jJIk.þOHmrU I\HEYSGgr^mƒ¢*|ZÍ0""0"þ@,%OLTÎ\D9*(9 =VV`c‚#"®utSÝýá5CJklIE2CvJ[ˆJRNonLTKgGs]s¡xÐV326=5!27654'&#"#"&547&#"#"'&547%2654'2654'&#"2LD4ULlX!'\qLGIÊLPHnaC95K)E|ý.OI6669X I/-HFXSGgr^qB=¢*|(-A&)LT,v#>&?!>7=WU`eC=#"[TèSÝýý#zD=)"1 /,&0>C;:KYCGLVG86kKVKgGs^rUOuÐVJ’?/V-1R-Aþv Zÿò 2`nx\²5+´6++°2²T+°!3±é°a2²5+´3+°F/´o7+°h/´(++°?/±,M33´ 7+±22°y/°XÖ´]1+°]±+±Qé°Q±I+´v&+°v±r+±Cé°C±;+´&+²; +³@;5 +°±+´/+²/ +³@/4 +°/±%+´k+°k±d+´+±z+±]²TZ[999±vI±M99°r² FK999°C² ?A999±;°9±/°9±dk´!(,*$9±oF²%Qk999°h@/;CIPXd]rv$9°(°*9°?²AKt999° ± [9901%26=476326323&547632#"'&54632&#"!5!27654'&#"#"&547&#"#"'&5472654'&#"%2654'MD5TLmW!'\qLHIá-[Y|�YX3;_R65p\=lgƒF #ü‹PI655;WI]ED]UHgr^qB=£)|)-Õ8K!<9H !ü£$*MU.=WU`fB=#"[VrtSHjŠXVba…fBK?>Sa�I�is: 2C;9LZBGLVJonIXLfHs]sUOuÐVZ>6*+‘C-V-1R-C\ÿ0,2}ˆ”¸²q+±é°$ Ö´1+³Lq+°=3´M++°2´ƒ+´J+°+/´(++°_/´“++°~/´B+°i/±DV33±é± 22°•/°uÖ´z1+°z±+±né°n±c+°.2´�+´&+²&c +³@&) +°�±Œ+´Z&+°Z±R+´+²R +³@RL +°±+´G+²G +³@GK +°G±?+´�+°�±…+´;+°;±6+´+±–+±z²qwx999±�c²gi999±Œ&µ $1]Ž“$9°Z² VX999±R°9±G°9±�?±D99°…±=B99°;³2#9$9±$(°.9±“_µ?6n�$9°~@;GRZcmuz…‡Œ�9$9°B°9°i²XgŽ999°± x9901%26=476326323&547>32#!"3!!"&5463!27654&'#"5463&#"!5!27654'&#"#"#"'&54767&#"#"'&547"3254'&2654'32PD3UMmW!'\pKHHÕ- “\M~ ç7IV1@)&=C¹±v]!nc†F1ü˜NK565:Y@X=@)*I32r]qC=¤)|'/ÿGVkq&ü9"(JL(!=VV`eC=#"QLgaKBTC4F^D6à\CG+:C@90<54BMN43а[s6w];`0C12BP8<)G#"G)?Zÿ/D2‡”¡ø²c+±pé³pc+´+³Dpc+°23´F+±‚‹22´B+°/´+°U/°#3´•++´%+°-/°‘3´++°:2°\/±Yjc@Ajü PI655:X AYA@XLHgr^qB=£)|)-MD5TLmW!'\rKHIÔ.°…9.o&D,'üÝ#(##-+2@2T8ZK;W/>A2/9Q2=*&37Bas=5LD?G1@AS�6*>32EQ8=5XDeaBe2iHs^rUOuÐV32654'&'#"&54763&#"!5%27654'&#"#"'&547&#"#"'&547%3254'&#"2654'&#"2654'MD5TLmW!'\qLHI½/RR‚M}#xB?YW‡]B86J'IiZ"%I`YV[98a"lf>?!4ü©WI655;WI^DG+/UHgr^qB=£)|)-K81r% EV¤3%: :1ü_$*MU.=WU`fB=#"[VäRGn„YZK:\T}�ki)#/-.(Z•T>H8He}h[_ED=ABe>;B0D98LZBGLVIn49HXLfHs]sUOuÐV+°>/´9+±e+±R$³!"($9±+°P9° ±0J99±EF°39°>@ 5;U!?kI/0r^qB=¢*|(.MC5HG+%; TO./y W<2%C+0:\(w/0Z6Pp8E.ª�[BG@;UR<<D/0Fm\jSJnÆN6@“N;FQRZ]?>ýÒ&D78KŠ93)l4C0ææ.H4j'29ˆN67bH4�M97Yþ„ñ//Vdql²3+°53´N+°F2²N3 +³@NJ +°U!?kI/0r^qB=¢*|(.MC5HGÿb˜"'®?=NB;H: ýOl:::9VJg.'4?T!Oäç ,%&1k#56¨H4�M97ý²/fYýöñ//iwƒ•²;+°?3´0+°b2²0; +³@0f +°H/´M+°Y/°63´{+°/°3´(7+°o2°j/´7+°/´7+°!2°„/°Ö´$1+°$±8+´3+°3±++±é³f++´e+°± +´m1+°m°x Ö´\+°\/´x+°m±}+´V+°V±t+´1+³Et+´Q+°Q/´E+±…+±8$°!9°3²("999°+³056;$9±e°=9±m\±?b99°x±J99°}@ HKMYjo`$9°V²AT999°t±rv99±MH°J9°Y°K9°{°59°0@ 38AEQTV\�$9°;°=9±j(¶$ ,$9°°9±°"9012#"'&547632&#"#"'&547326=476"&54632632#"'7327654&'#"&54767&#"#54&"3267654'&3254'&#"³‘­9?bX3/=>U!?kI/0r^qB=¢*|(.MC5HG�0?Ps`PI!)M‚$M)*sX:2&+@))+! <<3@##3BZ=-P6Pp8Eº?%2.ª�[BG@;UR<<D/0Fm\jSJnÆN6@“N;FQRZ]?>ý•K2l&46ŒNp22R 79U^Š#434D/O !H\T8910Méé -ŸH4�M97ý«2\3%=Yþ�ñ//6DLT²5+´M++°2/´K+°/°3´(7+°<2°7/´7+°/´7+°!2°U/°Ö´$1+°$±++±é³2++´Q+°± +´:1+°:±S+´I+°I±L+´1+°1±A+´1+±V+±+$²!"999±: ±KM99°S²5999°I°G9°L³7<$9°1°9°A±?C99±MK±IQ99°5°G9±7(¶$ ,$9°°9±°"9012#"'&547632&#"#"'&547326=476!5432"3267654'&4'3'"654³‘­9?bX3/=>U!?kI/0r^qB=¢*|(.MC5HG"þ“¹´B6Pp8EBLdš�+,€.ª�[BG@;UR<<D/0Fm\jSJnÆN6@“N;FQRZ]?>ý ª§ÉbH4�M97ýØl (]W÷M8kVZ@Yý¿ñ//AOW_hU²9+´X++°0/´`+°e/´W++°/°3´(7+°G2°B/´7+°/´7+°!2°i/°Ö´$1+°$±++±é°±6+´\+³ \6+´E1+°\±3+´g+°g±^+´T+°T±W+´<+°?2°<´c+°c/°<±L+´1+±j+±+$²!"999±gE´5VX$9°^°99°Tµ0GR`e$9°W²Bd999±U!?kI/0r^qB=¢*|(.MC5HGÈ2K"“¸µ" I6Pp8EMe›�,,�2,-<**.ª�[BG@;UR<<D/0Fm\jSJnÆN6@“N;FQRZ]?>û‘K2/%§Éƪ%/3J£H4�M97ýØl (]W÷M8kU[@þ4+<,,<+Yý¤ñ/(9EMU[kв1+´N++°)/´\+°d/´[+°X/´M++°/°3´"7+°?2°:/´ 7+°/´7+°2°l/°Ö´1+°±%+±é°±.+´R+°R± +´=1+°i2°=´,+°,/°=±T+´J+°J±M+´4+°72³a4M+´W+°W/´a+°4´_+°_/°4±B+´<+±m+±%²999±=,°-9°Tµ1LNf$9°J¶)HX[\d$9°W± ?99°M°:9±4_±599°B°D9±d\°+9±X[µ,7_agi$9°M³.45-$9°N±JR99°1°H9±:"¶ &$9° °9±°9012#"&54632&#"#"&547326=46"&47#5432#"32654'&4'3'"6544#"32654'#"&'³�®}]Tf|T!?kGaq_k…¢*|[HC5�´9S'„¹´!'R 6Pp9I,Mdš�,+€W+..%2 *! + 2.ª�`„wYSwD_Fm\jšqÆN6@“S|QRZ\~ûvRr(§Éƪ(98S¾H4�N8L*ýØl (]W÷M8kVZ@þoXXV2%"-*%2Yýìñ/(4JRZbI²=+´S+°E/´]+°a/´5+°:/´Q+°/°3´"7+°.2°)/´ 7+°/´7+°2°c/°Ö´1+°±%+±é°±:+° 2´W+´,1+°,°[ Ö´H+°H/´[+°W±Y+´O+°O±9+°K2´@+°1 Ö´<+±d+±%²999±[,°9°Y@ =C5SQ]a$9°O´ ).M_$9°9±799°1°39±a]°H9°5°79±SQ±OW99°=°M9±)"¶ &$9° °9±°9012#"&54632&#"#"&547326=46"32654'&267!5432#"#"&54674'3'"6543254#"³�®}]Tf|T!?kGaq_k…¢*|[HC5�à6Pp9I~P)þϹ±cQ3RH¼Pgžž,+�WS6U4.ª�`„wYSwD_Fm\jšqÆN6@“S|QRZ\~ÌH4�N8L*ý,6£ÊÈ¥MY$$Ån ")^XûM;nX]AþrYÿ#=2Q_â²E+°23±é°R2²+°/±&é°Y/±:é°>/´7+°`/°Ö´ +° ±I+´N<+°N±+±Bé°B±6+´]1+°]±U+´.<+°.±*+´&+±a+±I °9°N°9°²EKL999±6B±&99±U]³2><$9°.± ,99±Y@  *,.6ABIN$9°:° 9±>±L9901%26=47632!".547673 7654'#"'&5476323&#"#"'&547%2654'&#"ð8F Q8;<>YCsh=9#= HKsœ`|;wÂX@F Q8;<ÿ(99('9:>YCsh=9#= HKs›^(pA10`B;wÂX@54'#"&5463&#"#"&547%2654'&#"2654&#"2654'#"&'ð8<’mSƒ"jw{1AkJIkq��å­_3<3ZF Rr<ñ"#!!/D8*(9 C>YCseyF8 ’t¡^Z;JjkI%";wÂ_sJ4rvW�bB E~VŽ11e–jPl’6^L�Vp¢wÒTMq OIvCw]E38þþ$S4%.ª�`„wYSwD_Fm\jšqÆN6@“S|QRZ\~ÌH4�N8L*ý^U.c6'>‰F5=V@7uB[D_bF]w')B:tC&`3T&9Yý¶ñ/(4`is—²Z+°;3´N+°D/´a+°U/´j+°52°j´f++°/°3´"7+°.2°)/´ 7+°/´7+°2°t/°Ö´1+°±W+´q+°q±%+±é°± +´,1+³R, +´m+°m/´R+°,±K+´_+°_°h Ö´G+°G/´h+°_±1+°c2´<+°8 Ö´=+°1´A+±u+±W³"$9±%q°U9°±jo99°m±PT99° ±NZ99±K,°9°G°9±h_°I9°8@  ).35:;?Dae$9±fa±GA99±jU±?I99°N¶8=KRW^o$9°Z°:9±)"¶ &$9° °9±°9012#"&54632&#"#"&547326=46"32654'&2654'7#"&547&=4#""&54632264&"%2654'³�®}]Tf|T!?kGaq_k…¢*|[HC5�à6Pp9I8$1Z$s=>I42K+Mq OIvCw]E38`,-<**þ¼$S4%.ª�`„wYSwD_Fm\jšqÆN6@“S|QRZ\~ÌH4�N8L*ý^U.c6'>‰i3#J3JK29&%c7uB[D_bF]w')B:tÖ+<,,<+ÖC&`3T&9Yý›ñ/(4_gw�®²Z+°;3´N+°D/´h+°p/´f+°U/´x+°52°x´b++°/°3´"7+°.2°)/´ 7+°/´7+°2°‚/°Ö´1+°±W+´+°±%+±é°± +´,1+³R, +´{+°{/´R+°,±K+´^+°u2°^´G+°G/°^±`+´m+°m±1+°k2´<+°8 Ö´=+°1´A+±ƒ+±W³"$9±%°U9°±x}99°{±PT99° ±NZ99±K,°9°G°9±`^@ ).5;DI:dhps$9°m±3?99±bfµGAkmsu$9±xU±?I99°N¶8=KRW]}$9°Z°:9±)"¶ &$9° °9±°9012#"&54632&#"#"&547326=46"32654'&2654'7#"&547&=4#""&546324#"322654'#"&'%2654'³�®}]Tf|T!?kGaq_k…¢*|[HC5�à6Pp9I8$1Z$sBER89S‰n1)P8QP9J()[7uB[D_bF\xS?:tp,,-V3$!/,$3óC&`3T&9Yþˆñ/(4`kC²8+´J+°R/°@3´^+°a2°g/´G+°/°3´"7+°.2°)/´ 7+°/´7+°2°l/°Ö´1+°±V+´[+°[±%+±é°±`+´N+° Ö´,1+°N±D+´j+°j±1+´<+°c Ö´<+±m+±V³"$9±%³RXY^$9±D,°9°j²8J999°c@  ).@aeH$9°1°39±g^¶^?.2/)98O#=*I;)'94M‡;1/[5Nddf!+XYþñ/(4xƒ„²A+´j+°R/´O+°K/´W+°q/°b3´8+°~2°/°3´"7+°.2°)/´ 7+°/´7+°2°„/°Ö´1+°±t+´5+°U Ö´M+²MU +³@MP +°5±%+±é°±:+´n+³ n:+´,1+°n±d+´|+°|±€+´_+°_±1+´<+°[ Ö´G+±…+±t³"$9±%µ8KWqvw$9±|,²A999°€@ ).JXbjh$9°_±C99°[°39±OR°T9±WK°U9±j8@ 5=CG[]_dnty$9°A°w9°°v9±)"¶ &$9° °9±°9012#"&54632&#"#"&547326=46"32654'&32=&547632#!"3!!"&463!2654'#"54767&#"#"&547"3254'&³�®}]Tf|T!?kGaq_k…¢*|[HC5�à6Pp9Iþ"0%=609n7%&_Oþ±44öþ.>?-K7D->5a/'BF4ANh!L‹$3-8.ª�`„wYSwD_Fm\jšqÆN6@“S|QRZ\~ÌH4�N8L*þ'9R ;$C/1:LS%!4,R2<559Ja1*( ."C08QCs1.(%1$.J"Yþñ/(4‡‘·²A+´x+°X/´U+°Q/´^+°€/°q3´8+°�2³e8€+´f+°/°3´"7+°.2°)/´ 7+°/´7+°2°’/°Ö´1+°±ƒ+°[2´5+´S+²Sƒ +³@SV +°5±%+±é°±:+´}+³ }:+´,1+°}±s+´‹+°‹±�+´n+°n±1+´<+³b1+°i3´M+°G2²bM +³@be +±“+±ƒ³"$9±%µ8Q^€…†$9±‹,±99°�· ).Aqxv$9°n²Cl999°1²3P_999±Mb°I9±QU°[9±8€±Kb99°f³Is}‹$9°x@ :5=GClnv|ƒˆ�$9°A°†9°°…9±)"¶ &$9° °9±°9012#"&54632&#"#"&547326=46"32654'&32=&547632#"3!!"&5463!2654+53254&'#"5467&#"#"&547"3254'³�®}]Tf|T!?kGaq_k…¢*|[HC5�à6Pp9Iþ&0&870<^&3)4:$þY55ýýû.@@. (K6bD2&!H6ANh"MŠ'60:.ª�`„wYSwD_Fm\jšqÆN6@“S|QRZ\~ÌH4�N8L*þ(6P <"B,4 8#6% 5-(*2#17Pf6O $C29UBs1.)*-%,IYýçñ/(4t‡œ²?+´f+°I/´†+°‚/´N+°m/´8+°8°u Ö´^+°/°3´"7+°.2°)/´ 7+°/´7+°2°ˆ/°Ö´1+°±p+´5+°5±%+±é°°j Ö´:+°:/´j+°± +´,1+°~2³„, +´L+°L/´„+°,´a+°a/°,±x+´[+°[±1+°V2´<+´E+±‰+±p°9°5°9°%µ"8mrs$9±,„²?f‚999°x@ .IN^duz€†$9°[´ A)RY$9°1±399±‚†±LR99±fu@ :;AEV5[aYjpz$9°?°s9°°r9±)"¶ &$9° °9±°9012#"&54632&#"#"&547326=46"32654'&32=47632#"&543267654&'#"&5467&#"#"&5472654'#"4#"32³�®}]Tf|T!?kGaq_k…¢*|[HC5�à6Pp9IýÌ9.I75Ek5H()UWv4Q}#'. ..D4.>C7".LO:I[h Hš )9JI0J/.ª�`„wYSwD_Fm\jšqÆN6@“S|QRZ\~ÌH4�N8L*ýä5Q[OB,'R 24JvKL+'A353(C  >bE/B[;*U9LlP�4-,Ú:)+=*=¤YþRñ/(4py„²8+´\+°@/´K+°c/´n+°s2°n´T+°/°3´"7+°.2°)/´ 7+°/´7+°2°z/°Ö´1+°±C+´H+°H±f+´k+°k±%+±é°±p+´`+³ `p+´,1+°`±W+´q+°q±u+´Q+°Q±1+°M2´<+´=+±{+±C°9°H±99°f±"E99°k°F9±%³chin$9±W`±@K99±q,²8999°u¶ ).T\Z$9°Q²:O999°1°39±\n@ :=5HMCQWO`fkw$9°8±Fi99°±Eh99±)"¶ &$9° °9±°9012#"&54632&#"#"&547326=46"32654'&4632#"&5473 54'#"&5467&#"#"&5473253254'"³�®}]Tf|T!?kGaq_k…¢*|[HC5�à6Pp9IþÂS>b:M¬ª£ÅE%7«�3@1*9?-!&7A2ZCq6,*K*@J4Q+Yý¢ñ/(4{„�Ò²8+´g+°D/´…+°K/´V+°n/´y+°~2°y´_+°/°3´"7+°.2°)/´ 7+°/´7+°2°�/°Ö´1+°±N+´S+°S±q+´v+°v±%+±é°±{+´k+³ k{+´,1+°k±b+´|+°|±G+´�+°�±€+´\+°\±1+°X2´<+´=+°ˆ Ö´A+±‘+±N°9°S°9°q³"PQ$9±%³nsty$9±bk±KV99±|,²8999°G°g9°�´I_e~$9°€³). ‚$9°\µ:DZ…Š$9°1±3?99±K…³GAˆ�$9°V±IŠ99°n°?9±gy@ :=5SXN\bZkqv‚$9°8±Qt99°±Ps99±)"¶ &$9° °9±°9012#"&54632&#"#"&547326=46"32654'&4632#"&547#"&5473 54'#"&5467&#"#"&5473253254'"264&#"³�®}]Tf|T!?kGaq_k…¢*|[HC5�à6Pp9IþÃS=b9LBQI42K2G¡ÆD"6¬�6?1)9A-"'7B0;F]D-"9�1:$?—+++*.ª�`„wYSwD_Fm\jšqÆN6@“S|QRZ\~ÌH4�N8L*þ9DE L9]5W3JK2ˆˆVJ"=?wn¦24N8)2O .%F0?ZBo5))L(DL6S.þ€*>+,*Yý…ñ/(4}†Œœæ²8+´i+°F/´�+°•/´Œ+°M/´W+°p/´{+°€2°{´`+°/°3´"7+°.2°)/´ 7+°/´7+°2°�/°Ö´1+°±P+´U+°U±s+´x+°x±%+±é°±}+´m+³ m}+´,1+°m±c+´~+³I~c+´š+°~±‚+´]+°]±ˆ+´’+°’±Y+±1�22´?+°C2´<+±ž+±P°9°U²"999°s±RS99±%³puv{$9±cm±MW99±I,°9°~±899°š±Ki99°‚@ ).`€g„—$9°]·:F[‰Œ�•$9±’ˆ±3A99±MŒµIC�’˜š$9°W°‰9°p°A9±i{@ :5UYP]c[msx„$9°8±Sv99°±Ru99±)"¶ &$9° °9±°9012#"&54632&#"#"&547326=46"32654'&4632#"&547#"&547! 54'#"&54767&#"#"&5473253254'"4#"32654'#"&'³�®}]Tf|T!?kGaq_k…¢*|[HC5�à6Pp9IþÃS=b9LLOQ9:Q'/¡ÆD"176?1)91"'7B0;F]D-"9�1:$?¨+--$4*!, 4.ª�`„wYSwD_Fm\jšqÆN6@“S|QRZ\~ÌH4�N8L*þ9DE L9`5%Y9QP:)ˆˆVJ"7Gà£24N8).*( .%F0?ZBo5))L(DL6S.þ¸XXV3$".,$3YþùK./6@KO²!+² F333´+++°02´+°/´A++°5/°-3´C+°=2²5 +³@ +°/´&7+°7/´7+°L/°#Ö´+°±+´)+²) +³@ +³)+´:+°)±,+°=2±6é°2°6°I Ö´+°/´I+°6±0+´ +° 2° ´D+°D/° ´+°/±M+±³ !%&$9°°+9±,:°9±6°9±0I²AF999± ° 9±!A± 99±+° 9°5³#)$9±±199±7&±:9901463263##"&547!5654&"&546235.5#"54&264&#"[?š¶(4"#`CB_#þILVvUI$j€®A@ üaü;@8¡+Z=/ó)77)'88‘?^¤}ýÞ.7C`aB7.#'_8OL8T":9wVt;:UD&�h÷ç# #�¥6"6E‹/ýT7R78('9YþÔJ-.4=IYc²+² !D333´*++°/2²+´+°/´J++°R/´>+°,/°33±;é°2²;, +³@; +°/´&++°6/´7+°Z/°#Ö´+°±+´(+²( +³@ +³(+´8+°(±++±;22±4é°2´W+°4±A+´O+°O±/+´ +° 2° ´M+°M/° ´+°/±[+±³ !%&$9°°*9±+8±599°W°9°4°T9°A³GJR$9± ° 9±>µ MOUW$9±*° 9°,³#($9±;±099±6&±89901463263##"&547!5654&"&546235.5#"542654&#"2654'#"&'\>š¶(4,,kJIk-þeLWtVI$j€®� üaü‚2ƒ<,Z=°""!!/D9*(9 C�?^¤}ýß4CIllID3#'_8OL8T":9wTuuTE&‚høè"D‚¦7"6E‹ýÐ" !pC/+<9'.DYÿW06;COD²+°&3´0++°72²+´+° /´D++°J/´++°2/°:3±Aé°2²A2 +³@A +°!/´+++°73#".54>3265!5654&"&5463235&546"542654&#"“M;>uI 6‹q1_F6J'DeýhLWtVIo€WV€åÇS²W™„!&}„";R) ;P/X[mY?ýÚr�:'-)$,G/"X8OL8Q%:8xTuuTH#ƒ±/±1D33´m+±6o22°t/±:i33´J+±*c22°/´$++°O2´+°S/°3´ ++°[2² S +³@ +°/´++°U/´++°x/°Ö´+°±+´"+²" +³@ +³"+´X+°"±G+´v+°v±%+°[2±Té°2³kT%+´s+°s/°K3´k+°b2°T±h+°d2´<+°)2°<±O+´ +° ´ +° /° °/ Ö´8+°8/´/+±y+±²999°°$9±sv³DUo$9°%°A9±hT³&>_m$9±O<²136999±m>±3A99°t²/4G999±&°9±$°9°S³"$9± ± P99±U±X9901%.5463263!5654&'"&546323232#"'53254+#"&'#"&546;54675#"54&"354&5#32'265'#"ä_�\>šµ)4ý)LW::VI$j€WV‚ ü[9K2&%l 9F†":/19F4Mý‚2¡+[<0†&‰((‰DEñFÏ eU>[ zýë%$]7KH7T<6ySpqRD#RN96z< ?3¤!B53?;LRß!A}˜5!4D‰.ýÙ. ,”l?4<YþˆT.%+5enu~ÿ°W/±?S33´v+°t2´D+°I/´J+°{/±Op33´\+±6j22°f/´a+°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°/°Ö´+°±+´"+²" +³@ +³"+´/+°"±Z+´}+°}±%+°22±+é°2³r+%+´z+°z/°]3´r+°i2°+±o+°k2´Q+°d2°Q±&+´ +° ´ +° /°M3´9+°<2² 9 +³@ I +° °= Ö´F+°F/´=+±€+±²999°°$9±z}³,Wv$9°%°U9±o+³Saft$9°Q°A9°&²?BD999± F°;9±DW²=AU999±Iv²FBY999°J²<;}999°{±9Z99±a°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&'"&546323!5#"54&2#"'73254+53254+#"'#"&46;54632'"354&5#32#265'#"ä_�\>šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0C%83#( ));ƒJ:.9D4 L=7H† (‘))‘JG÷KÏ eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ý„%& @'.% ¤..Bf> 9±v]²@Q_999°U°>9°ƒµFKšµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0‡:N~'&_{Cþtm"_­¬U�)'>†>'8+8G2Iƒ( #(““,H“–2JÏ eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.þWT‰".3&B:8y=%19YýçY.%+5]flvݰG/´y+°~/´N+°6/°X3´u+°k2°q/±Vg33´;+±Ab22°^/´=+°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°€/°Ö´+°±+´"+²" +³@ +³"+´/+°"±9+´s+°s±%+°22±+é°2³i+%+´m+°m/±;K33´i+±aw22°+±g+°c2´V+°A2°V±&+´ +° ´ +° /° °C Ö´T+°T/´C+±�+±²999°°$9±ms²,6999°%°[9±+i´NX^k~$9°g²=Gy999°V±P{99±~y³Kw{P$9±u6±S[99°q²CT9999±=°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&'"&546323!5#"54&"&547632#"'&546326764&'#"&'"354&#32'4&5#"323254&#"ä_�\>šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0019–†@#œUOl2-9M,y-7(ƒ!;/”'‰))‰DCÅG/+A]01&6Ï eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ü™D4q“,)> ‹lG@'!5/3L-­ "?0.’i045:�Yþƒj.%+5`lt{…ó²]+°63´m+°A2°U/±JP33´„+±ky22°€/±cu33´Z+±Cq22°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°†/°Ö´+°±+´"+²" +³@ +³‚"+´X+°X/´‚+°"±|+±Z22´w+°p2°w°/ Ö´+°/´/+°w±%+°22±+é²di222°+´{+°{/°r3°+±a+´F+°F±&+´ +° ´ +° /³> &+´9+±‡+±X²999±‚²$U„999±/|°S9±%wµ,P]my$9±+{±M_99°a±CJ99°F±6A99°&°<9° °;9±„U±999°m°_9±]°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&'"&546323!5#"54&2'654&#"32#"&5#"&'#"&547>3264+2'"354#3254&5#"32ä_�\>šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0ïZmd%JH;S‚"749%$<@1;˜G>_(KI`ë*‘‘IHÐG0+Ï eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.þkY}<#-i^g333´Œ+±C—22´~+°“/±zˆ33´l+±V„22°J Ö´K+°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°™/°Ö´+°±j+´•+°•±�+±l22´Š+°ƒ2³"Š�+´+°/´"+²" +³@ +°�´/+°Š±%+°22±+é°2°Ž Ö°…3´|+±Vz22°+±w+´[+°[±&+´ +° ´ +° /³F &+°O3´;+°62²F; +³@FJ +±š+±j²999±�²$g—999±Š"°e9±Ž/µ,co€Œ$9±|%±aq99±w+²Y^~999°[±Rs99°&²>@C999± F°99±Œc±@e99±J~@ ;FA[ajw�•$9±K“°99±€l²O6q999±o°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&'"&546323!5#"54&#"'532654&+532654&#"3232#"&'#"'#"&547>326324&#32'"354#3254&5#"32ä_�\>šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0¶1?.' "")O05)0}@61NO?2:—H=\ ,z@:Fõ.32/ë)‘‘IHÐG0+Ï eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ý™, D,5 ;!2!)q6A(A88C4o?PDD#Â!cþ.M�ll924<YýýZ.%+5{‚ˆŽ˜;²>+±BS33´…+°h2°L/´X+°6/±tx33´—+±��22°“/±~‰33´;+±l‡22³a;“+´`+°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°™/°Ö´+°±Q+´V+°V±+´"+²" +³@ +³•"+´9+°9/´•+°"±�+°;2´‹+±/‡22°‹´+°/°‹±%+²2ƒ‰222±+é°2´€+°l2°+±|+´q+°q±&+´ +° ´ +° /° °J Ö´\+°\/°e3´J+°F2±š+±Q±99°V°9°9±ST99±•²$6—999±‹�°z9°%´,>Xx$9°€²@Lv999±|+±ot99°q±Bh99°&±`a99± \°H9±—6°J9°`¶\9vz|�•$9°“°H9±;a±QV99°…²@Fe999°>°T9°°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&'"&546323!5#"54&"&547>32632!".547!27654&+532654&#"3232#"'#"'%4+2'4#"3#32'4&5#"32ä_�\>šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0Ç-5Ž@:S!0sA2:55þ†jŸz?E(:ŠrR„"G0,)4u;2<FESK`™ED‹‹FEÂF0+Ï eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.üŸD2n?QGH%?FJÀ!J�\cW LNþí%W*50$&/o5AII==v7nµPV: o657? Yýée.%+5emswˆ:²>+°A3´n+°T2°G/´~+°z/´L+°6/°b3´‡+°v2°\ Ö´f+°ƒ/±kt33´;+±Vq22°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°‰/°Ö´+°±+´"+²" +³@ +³…"+´9+°9/´…+°"±€+°;2´u+°q2°u°/ Ö´+°/´/+°u±%+°22±+é²Vl222³|+%+´J+°J/´|+°+´t+°t/°r3°+±i+´Y+°Y±&+´ +° ´ +° /° °D Ö´R+°R/´D+±Š+±9³$9±…²$6‡999±/€°d9±Ju´>,bn$9±+|³@L_z$9°iµAG\fx~$9°Y±OT99°&°B9±z~±JO99±‡\°d9±ƒf¶DRY9_€…$9±n;°@9±>°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&#"&546323!5#"54&"&547>3262#"&5432>54#"32#"&'#"'%2654+'"3424#"32%4'#"32ä_�\>šµ)4ý)LX9:VI$j€WV‚ ü‚2¡+[<0¿39—G>]%¸fŸv7bz/^':€^‚E20 :!R (IŒ '’’’—W9W9þ™G0,Ï eU>[ zýë%$]8LH7T<6ySpqRD#ß!A}˜5!4D‰.ü™C5r@RFF{cº)%@ŠB™Sm1C%+99E 0hú1#T‘s” Û!5=YþP`.$*4^bgpв\+´a+²A+°;/´F+°N/°R3´f+°l2°i/±Kc33´X+±5_22°/´#++°%2´+°)/°3´ ++°12² ) +³@ +°/´++°+/´++°q/°Ö´+°±+´!+²! +³@ +°!±>+´C+°.2°C´+°/°C±U+´k+°k±$+°12±*é²bd222°*´o+°o/±Yh33°*±c+°_2´K+°52°K±%+´ +° ´ +° /° °8 Ö´I+°I/´8+±r+±²999°°#9±UC°@9°k²+A999°$±Rl99±*o°P9°c³;FN\$9±fN°P9°i´>CI8U$9±\±@99±#°9°)³!$9± ± &99±+±.9901%.5463263!5654&"&546323!5#"54&#"&54732654##"'#"&546;>32&"#32'#"32654ä_�\>šµ)4ý)LWtVI$j€WV‚ ü‚2¡+[<0/8Ežk�¿F*?¢iS�D<62!)'3>+A10C=jnn64§ 9$Ï eU>[ zýë%$]8LH7T<6ySpqRD#ß!A}˜5!4D‰.ýŸ?5ZjŒp^ZIRYrKA?>R%&=)*:2GF3@@9ZZXYý›^.%+5jns|‡,²i+°L3´m+²M+°@/´}+°G/´R+°[/°_3´r+°t2°z/±Vo33´e+±6k22°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°ˆ/°Ö´+°±+´"+²" +³@ +°"±J+´O+°/2°O´+°/°O±b+´|+°|±%+°22±+é²np222°+´w+°w/±fy33°+±C+´…+°…±o+°k2´X+°62°X±&+´ +° ´ +° /° °= Ö´€+°€/°T3´=+°92±‰+±²999°°$9±bO°L9°|²,M999°%±_t99±+w°]9°C²GRh999°…²E[r999°o°i9°X²@}‚999°&°V9° °;9±G}³C=€…$9°R°‚9°[°;9°r±T]99°z³JO9b$9±i°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&#"&546323!5#"54&#"&547#"&5473264#"##"'#"&546;4624"#32'2654'#"264&#"ä_�\>šµ)4ý)LX9:VI$j€WV‚ ü‚2¡+[<0-8EMLI43J}±E'>•gWŽD:62!(&2=*B`A:npp87É :',,*+Ï eU>[ zýë%$]8LH7T<6ySpqRD#ß!A}˜5!4D‰.ý�=5T4!S3JJ3 ‰q^WGT[rM‚>R%'=():2GF3CC6]\þÚ,<+*, Yý…^.%+5kotzƒ“B²j+°L3´n+²M+°@/´„+°Œ/´z+°G/´S+°\/°`3´s+°{2°�/±Yp33´f+±6l22°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°”/°Ö´+°±+´"+²" +³@ +°"±J+´O+°/2°O´+°/°O±c+´ƒ+°ƒ±%+°22±+é²oq222°+´~+°~/±g€33°+±C+´‘+°‘±p+°l2´Y+°62°Y±‡+°W2´=+°92°=° Ö´&+°&/´ +°v Ö´‰+° ´ +° /±•+±²999°°$9±cO°L9°ƒ²,M999°%±`{99±+~°^9°C±Si99°‘³EG\s$9°p±jŽ99°Y´@wz„Œ$9± &°;9±GzµC=‡‰�‘$9°S°w9°\°;9°s°^9°�´JOW9c$9±j°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&'"&546323!5#"54&#"&547#"&547327654##"'#"&546;4624"#324#"3'2654'#"2654'#"&'ä_�\>šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0-8ETOR9:Q }±E':OEdMDTG:62!(&2=*B`A:npp87R,--ï :%2 , , 5Ï eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ý�<5X6"U9QP:&‰q^WDWa93(GA?Q%'=():2GF3CC6]åXXæ \þÄ2%!/,$3YþˆJ.%+5Td²9+´>+°H/´M+°R/´B+°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°U/°Ö´+°±+´"+²" +³@ +³"+´/+°"±%+²26J222±+é°2´@+°+±&+´ +°O Ö´E+°;2° ´ +° /±V+±²999°°$9±%/°9°@°K9±O+¶9>BCHMR$9± &°<9±RM²JEK999±>B²;6<999±9°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&'"&546323!5#"54&4632&#";2#"'73254+"&ä_�\>šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<00[Eo>)/U]DC€XFo@+-W]E>;KÏ eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ý¢9;A.27*g:9A-16(6Yý¼J.%+5]gŸ²9+´>+°L/´^+°c/´V++°[/´B+°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°h/°Ö´+°±+´"+²" +³@ +³"+´/+°"±%+²26S222±+é°2´@+³O+%+´e+°+±a+´I+±;E22°I´X+°X/³ Ia+´ +±i+±²999°°$9±%/°9°@°T9±e+°Q9°X@ >B9LVC[^b$9°a°G9° ²&'<999±c^±OI99°V±QG99°[²SET999±>B²;6<999±9°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&'"&546323!5#"54&4632&#";2#"&547&'73254+"&264&"ä_�\>šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<00[Eo>)/U]DC€54J32K@0+-W]E>;KÌ,,<+*Ï eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ý¢9;A.27*g>$A3JK21" 1-16(6þ—+<,,*YýŸJ.%+5]et̲9+´>+°L/´f+°n/´d+°`/´V++°[/´B+°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°u/°Ö´+°±+´"+²" +³@ +³"+´/+°"±%+²26S222±+é°2´@+°+°r Ö´O+°O/´r+°+±^+´k+°k±i+´I+±;E22°I´X+°X/³ Ii+´ +±v+±²999°°$9±%/°9°O°T9±r+°Q9°^@ >BCL9Z[Vbfm$9±ik°G9° ²&'<999±`dµOIikpr$9°V±QG99°[²SET999±>B²;6<999±9°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&'"&546323!5#"54&4632&#";2#"&547&'73254+"&4#"322654'"&'ä_�\>šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<00[Eo>)/U]DC€=;Ké,--,*%2 ,@+ 5Ï eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ý¢9;A.27*gA*I7SR8=) --16(6þü++.U2%!/,$3YþˆJ.%+5W_u²9+´>+°J/´^+°Z/´N+°V/´B+°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°`/°Ö´+°±+´"+²" +³@ +³"+´/+°"±%+²26L222±+é°2´\+°@2°+± +´ +³F +´R+°R/´F+°;2±a+±²999°°$9±%/°9±R+@ 9>BCJNVXZ^$9° ²&'<999±Z^±LP99°N±FR99±>B²;6<999±9°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&'"&546323!5#"54&4632&#"32#"5432654'&#"4#"32ä_�\>šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<01_Bn>(/U]8O6IA3A•vk9G†ÂM1L2Ï eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ý¦6:A.23?3<J::+ nYþ„J.%+5]l­²9+´>+°J/´k+°g/°`3´N+°R2²gN +³@gc +°[/´B+°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°m/°Ö´+°±+´"+²" +³@ +³"+´/+°"±%+²26L222±+é°2´i+´@+°+±d+´c+°c±&+´ +°T Ö´F+°;2° ´ +° /±n+±²999°°$9±%/°9±+@°N9°d°g9°c¶>B9J[Pk$9°T³CRZ^$9± &°<9±gk±LT99°N²FPW999±>B²;6<999±9°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&'"&546323!5#"54&4632&#";2#"54326325654&+"&&#"#5&#"32ä_�\>šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<01\Em?'-XbGE4KE3@“Q0&-2@:Lð /'#TAÏ eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ý¤78@*17+:/=O@34” #Yþ†J.%+5_�²9+°P3´>+°J/´W+°]/´B+°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°`/°Ö´+°±+´"+²" +³@ +³"+´/+°"±N+´S+°S±%+°22±+é°2³@+%+´6+°6/´@+°+± +´ +° °F Ö´Z+°Z/´F+°;2±a+±²999°°$9±SN±,99°%±PQ99±Z+¶9>BCJW]$9° ²&'<999±]W°F9°B±NS99°>²;6<999°9°Q9°°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&'"&546323!5#"54&4632&#";2#"'&54732654+"&ä_�\>šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0:^Dp@*/V`FC6P?1BoL];-1Ed:%GG@[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ý¢8!,4hlG":X/B!(6Yý½J.%+5gs˲9+°X3´>+°M/´h+°n/´_+°e/´B+°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°t/°Ö´+°±+´"+²" +³@ +³"+´/+°"±V+´[+°[±%+°22±+é°2³@+%+´6+°6/´@+°+±Q+´q+°q±&+°b2´ +´F+°;2³k &+´J+° ´ +° /±u+±²999°°$9±[V±,99°%±XY99±qQ±Se99°&·9B>M_Chn$9°k°H9° °<9±nh±QJ99°_±SH99°e°F9°B±V[99°>²;6<999°9°Y9°°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&'"&546323!5#"54&4632&#";2#"'&547.54732654+"&2654&#"ä_�\>šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0:^Dp@*/V`FC6P:5I43%$f�;-1Ed:%GG@[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ý¢8+°M/´o+°w/´m+°i/´^++°d/´B+°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°/°Ö´+°±+´"+²" +³@ +³"+´/+°"±U+´Z+°Z±%+°22±+é°2³@+%+´6+°6/´@+³P+%+´|+°+±g+´t+°H2°t±r+´J+±;F22°J´a+°a/°r° Ö´ +±€+±²999°°$9±ZU±,99°%±WX99±|+°R9°g@ 9BCM^cd>kow$9±rt±'&99° °<9±imµPJrtz|$9°^±RH99°d°F9°B±UZ99°>²;6<999°9°X9°°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&'"&546323!5#"54&4632&#";2#"&547.54732654+"&4#"322654'#"&'ä_�\>šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0:^Dp@*/V`FC6PGAR89S,ay;-1Ed:%GG@[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ý¢8šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0T9:ž:99:OP:8õfJJfIÏ eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ý[Q8888QO8887ÌIfHHfYýÇJ.%+5KWcš²9+´R+°C/´X+°^/´L+°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°d/°Ö´+°±+´"+²" +³@ +³"+´/+°"±%+°22±+é°2³U+%+´6+°6/´U+°+±G+´a+°a±&+´ +°O Ö´<+°<°@ Ö´[+°[/´@+° ´ +° /±e+±²999°°$9±6/±,99±+U°89±aG²ILR999°O´9C>X^$9±^X²GI@999°L°>9°R±<699±9°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&'"&546323!5#"54&462#"'&547.2654&#"2654&#"ä_�\>šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0pœ97>JJ32&$C_¾5KK54LL�++++Ï eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ý[Mn76NV8T3J&$3( i7J54JK34KÊ*,-+Yý¬J.%+5ITZj¤²9+´P+°B/´[+°c/´Z+°W/´J+°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°k/°Ö´+°±+´"+²" +³@ +³"+´/+°"±%+°22±+é°2³S+%+´6+°6/´S+³E+%+´h+°+±&+´ +°?2°M Ö´;+°V Ö´`+° ´^+°^/° 3±l+±²999°°$9±6/±,99±ES°89±h+°G9°V¶9JPBW[c$9°M°=9±WZ¶E?G^`fh$9°J°=9°P±;699±9°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&'"&546323!5#"54&462#"&547.2654&#"4#"32654'#"&'ä_�\>šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0pœp@YQ9:QA\¾5KK54LL«+--$4*! + 3Ï eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ý[MnmNU9#^9QP:/& g9J54JJhK‘XXV3$"-+$3Yþ„`.%+5hoæ°9/´n+°k/´f+°a/±SZ33´?+±CG22²a? +³@a^ +°V2°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°p/°Ö´+°±;+´m+°m±+´"+²" +³@ +°"°6 Ö´i+°i/´6+°"±^+´]+³/]^+´+°/´/+°]±%+°22±+é°2³W+%+´V+°+±&+´ +° ´ +° /° °K Ö´P+°P/´K+±q+±;±99°m±d99°³9fkn$9±i²$?a999±]/°A9°%³,CZ$9±V+°E9°&³GMNS$9±n9°N9°k±;699°f²KPd999±?a±AE99°°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&'"&546323!5#"54&#"547632632632'654&#"#54#"#54#"6324#"32ä_�\>šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0–A3|65]U" TULO/*s#T91@DPMHd,? &/?B3443Ï eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ý3D¤X?>;;::85M‡<3+g5EMææNNææM=+A4šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0áW{#&F5=I<L[B4"!,Df+@ %0?A3>>65]Q&\R(«-;K ý«15fÏ eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.þtUG25I;BZMæã!0/"ãæM>*A03DZJX?>;:==™2!Ldl+±—+±“z²o999°�²qw999°t±l~99±i±$€99±`/³,d‚$9°%°69±„+²9D[999°‰´EGBRY$9°&±;N99±GB°D9°R°E9°‡³_`hi$9°‘@ JP>Vz„t‰“$9°q±No99°lµ;Y6€‹Œ$9±~°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&'"&546323!5#"54&>32#"'732654'&'#"'&5467&#"#54&#"#54#"632#"&5476326323254'#"4#"3ä_�\>šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0"E%�EU36Z70$+=M$ q2D.<$0B1"!-Fd-? &0?C2=>56[T(ZO«; 1ýü343Ï eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ýÙ%V qP]BG!5dD)*'&�,(38`-#èä!21"äèO?,B03E]I[>?>>ò3X2(@uv:<Yþ‹J.%+5Or²=+°@/´;+´A+°F/´6+°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°P/°Ö´+°±+´"+²" +³@ +³"+´/+°"±M+´H+°H±%+°22±+é°2³C+%+´9+²C9 +³@C@ +°+±<+´?+° 2°?´&+°&/°?´ +° /±Q+±²999°°$9±%Hµ,6FJK$9°C°E9±9+°;9±;A°J9°F³9CHM$9±=°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&'"&546323!5#"54&233!5654&"&546ä_�\>šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0->U¥Bþº12D21QVÏ eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ý¢L;-þ™$5!-*!02'S8OYýÂJ.%+5[eµ²=+°E/´\+°a/°W3´<++³Kšµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0->U¥BJ32Kj12"!31QV',,<+*Ï eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ý¢L;-þ™#.2KK2/"#6!-,02'S8Oþj+<,,*Yý¬N.%+5[apײ=+°E/´b+°j/´a+°^/±?J33´<+´L+°Q/´6+°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°q/°Ö´+°±+´"+²" +³@ +³"+´/+°"±Y+´T+°T±%+°22±+é°2³N+%+´9+°+±H +´n+²Hn +³@HK +°n±<+´?+± B22³g?<+´]+°]/´g+°?´&+°&/°?´e+°e/° 3±r+±²999°°$9±%Tµ,6QVW$9±n+±;J99±]9´E^bil$9±?e°@9±^a¶HBWegln$9±šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0->U¥B R8:R"V12"!31QVH+..$4+@, 5Ï eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ý¢L;-þ™(28RQ92($5!-+ 02'S8Oþ©XXV3$!.+$3YýæJ.%+5aj»²=+°B/´e+°i/´I+°N/´;+´O+°V/´6+°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°k/°Ö´+°±+´"+²" +³@ +³"+´/+°"±^+´Y+°Y±%+°22±+é°2°+°b Ö´E+°E/´b+³Q+%+´9+²Q9 +³@QN +°+±M+°<2´?+° 2°?´&+°&/°?´ +° /±l+±²999°°$9±%Yµ,6V[\$9±9b°;9°&µBIKegi$9±ie±Eb99±NI°\9±;O°[9°V³9QY^$9±=°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&'"&546323!5#"54&233#"&54763267#5654&#"#"&54763254#"ä_�\>šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0-?T ŸB`N5V* (X! ÿ,1# 01#K++¤1%0R4Ï eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ý L<%5þ‘L]-(" '*'6",,6.!V:''þ¯YþRK.%+5_§²=+°F3°A/´L+°O/´;+´P+°U/´6+°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°`/°Ö´+°±+´"+²" +³@ +³"+´/+°"±D+´I+°I±]+´X+°X±% +°22±+é°2°+±R+´9+²R9 +³@RO +°9±N+°<2´?+° 2°?´&+°&/°?´ +° /±a+±²999°°$9±]I²F,999°X°G9°+³6UZ[$9±9R²;AL999±OL°[9±;P°Z9°Uµ9DIRX]$9±=°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&'"&546323!5#"54&233#"&547327#5654&#"&546ä_�\>šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0j3A‰AÏŒ ='6‡p�Õ##$(ABÏ eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ý°>2. þÊx‡‚XJ?QhrD4"!*, L/AYý‰K.%+5irê²=+°P3°F/´j+°K/°n3´V+°Y/´;+´Z+°_/´6+°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°s/°Ö´+°±+´"+²" +³@ +³"+´/+°"±N+´S+°S±g+´b+°b±% +°22±+é°2°+±I+´q+°\ Ö´9+²\9 +³@\Y +°q±X+°<2´?+± C22°?´&+°&/°?´m+°m/° 3±t+±²999°°$9±gS²P,999°b°Q9°+³6_de$9±q\²;VK999±&9³Fjno$9±mX°A9±Kj±IC99°V±AL99°Y°e9±;Z°d9°_µ9NS\bg$9±=°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&'"&546323!5#"54&233#"&547.547327#5654&#"&546264&"ä_�\>šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0j3A‰A77I42K…–='6‡p�Õ##$(ABà,-<**Ï eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ý°>2. þÊ=%D3JK2, …XJ?QhrD4"!*, L/Aþ#+<,,<+Yýƒ[.%+5iq�²=+²Q+°F/´r+°z/´p+°K/°l3´V+°Y/´;+°_/´6+°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°‚/°Ö´+°±+´"+²" +³@ +³"+´/+°"±N+´S+°S±g+´b+°b±% +°22±+é°2°+±I+´+°\ Ö´9+²\9 +³@\Y +°±X+°<2´?+° 2°j Ö´w+°A2°?´ +° /°?°C Ö´u+°u/´C+±ƒ+±²999°°$9±gS²P,999°b°Q9°+³6_de$9±\±VK99°9±;|99°j³Fnrz$9°X±'&99±KpµICuw}$9°V±AL99°Y°e9°;±Zd99°_µ9NS\bg$9±=±P99±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&'"&546323!5#"54&2353#"&547.547327#5654&#"&5464#"322654'#"&'ä_�\>šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0j2B‰A2BQ9:Q�–?%6‰q�Õ##$(AC ,--,+%2 +!, 4Ï eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ýÃ?1.òþÞ<(N9RQ:0&€xZGšµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0V[EC./ýþ23!#33SW<=Tf '6¾8Ï eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ývD\./>Õ"6 .*!11'S9NL;ú;(—™)8YýÃJ.%+5ajtà²9+´b+°D/´k+°J/°>3´`+°f2°P/´[+°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°u/°Ö´+°±+´"+²" +³@ +³S"+´X+°X/´S+³"+´/+°"±M+´^+²M^ +³@MJ +°^±%+°22±+é°2°+°f Ö´a+°a/´f+°+±G+´r+°r±&+´ +±=A22° ´g+°g/° ´n+°n/° 3±v+±X²999±S²$UV999±/"±P[99±^M²,`999±rG°I9°&´9Dbko$9± n°?9±Jk³AGVo$9°`±KU99°P³MSX^$9±9°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&'"&546323!5#"54&4632##"&547!5654&#"&5463237"354&264&"ä_�\>šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0V[EC./J32KþÛ23!#33SW<=Tf '6¾8,,<++Ï eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ývD\./>Õ$,3JK2-#$4 .*!11'S9NL;ù;(–˜)8þ5*<-,*Yý§J.%+5ajr‚²9+´b+°D/´s+°{/´q+°J/°>3´`+°f2°`´m++°V2°P/´[+°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°ƒ/°Ö´+°±+´"+²" +³@ +³S"+´X+°X/´S+³"+´/+°"±M+´^+²M^ +³@MJ +°^±%+°22±+é°2°+°f Ö´a+°a/´f+³G+%+´€+°+±&+´ +±=A22³x &+´k+°k/´x+° ´g+°g/° ´v+°v/° 3±„+±X²999±S²$UV999±/"±P[99±^M²,`999±€f°I9°kµDb9os{$9± v°?9±mqµGAvx~€$9±`J±KU99°P³MSX^$9±9°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&'"&546323!5#"54&4632##"&547!5654&#"&5463237"354&4#"322654'#"&'ä_�\>šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0V[EC./%%R89S$þð22"#33SW<=Tf '6¾9,--,*$3 , - 4Ï eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ývE[./>Õ(68SR97'$4 .*!11'S9NL;ù;(–˜(9þš,,-V4$!/,$4Yþ�J.%+5<DL]²;+´E++°8/´C+°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°M/°Ö´+°±+´"+²" +³@ +³"+´/+°"±%+°22±+é°2³I+%+´8+°8/´I+°+±K+´A+°A±&+´ +°D Ö´7+° ´ +° /±N+±²999°°$9±8/±,99±K+²;CE999°A°?9±EC±AI99°;°?9°°9±$°9°*³"$9± ± '99±,±/9901%.5463263!5654&'"&546323!5#"54&!54324'3'"654ä_�\>šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0wþ“¹´=Mdš�+,€Ï eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ýPª§ÉÆl"&_WùM8mV\@YýÂJ.%+5GOWa¨²?+´P++°6/´X+°]/´O+°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°b/°Ö´+°±+´"+²" +³@ +³"+´/+°"±%+°22±+é°2³T+%+´<+°šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0ü2K“¹´J Mdš�+,€6,,<+*Ï eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.ûØK2/"§Éƪ$-3Jxl"&_WùM8mV\@þ7+<,,*Yý¦J.%+5GOW_oÖ²?+´P++°6/´`+°h/´^+°Z/´O+°/´$++°&2´+°*/°3´ ++°22² * +³@ +°/´++°,/´++°p/°Ö´+°±+´"+²" +³@ +³"+´/+°"±%+°22±+é°2³T+%+´<+°šµ)4ý)LW::VI$j€WV‚ ü‚2¡+[<0ó9S'„¹´ &SMdš�,+€W+..+*%2 *!- 5Ï eU>[ zýë%$]7KH7T<6ySpqRD#ß!A}˜5!4D‰.û¼R88(§Éƪ)78R”l"&_WùM8mV\@þ�,,-V2%".,$3Yÿ,ç2;AJ*²+°$3´.++°<2²+´+°/´++°0/°@3±Jé°92°/´)++°E/´67+°K/° Ö´+°±&+´!+°!±+´,&+², +³@ +³3,+´G+°,±/+°B2±Aé°82°A±<+°2´+°´;+°;/±L+±&± 99±!²#$)999°3°.9±G,±99°/°69±°9±.°#9°0³!&,$9±J³ :=$9±E)±3G99°6²;99901# 4673 5!5654&"&5463235.5463265#4&"ç+R`qDýƒ%59.$P›Ê‡ÅýuLWtVI$j€WV„"üa\>š¶(„2T.>+Z=!ýâ.G.êcjO(A_Tv¨`+“$%`8OL8Q%:7yTuvSB'€hW?^¤}þ"æ!E€U /7"6EYþGì2AGP[ˆ²+°%3´/++°B2²+´+°/´Y++° /´++°1/°F3±Pé°:2° /´*++°K/´77+°\/° Ö´+°±'+´"+°"±+´-&+²- +³@ +³4-+´M+°-±0+°H2±Gé°92°G°V Ö´+°/´V+°G±B+°2´>+°2°>´Q+°Q/°>´<+°š¶(4V[O„2T.>+Z='8P8:&'9þêBaaB)$ êcjO(A_Tv¨`+“$%`8OL8Q%:7yTuvSB'€hW?^¤}ýßJ:.õæ!E€U /7"6EýÝ(88(&98Yþ ê2BHQ]n¡²+°&3´0++°C2²+´+°/´l++°d/´[+° /´++°2/°G3±Qé°;2°!/´+++°L/´87+°o/° Ö´+°±(+´#+°#±+´.&+². +³@ +³5.+´N+°.±1+±I22±Hé°:2´i+³gH1+´X+°H±R+´a+°a±C+°2´?+°2°?´^+°^/°?´=+°=/±p+±(±99±#²%&+999°5°09±N.± 99°1°89°i°9±RX²dl999°a°A9± [·RX^`gi$9°±U99°°A9±0°%9°2³#(.$9±!Q³ 99901#"&547# 4673 5!5654&"&5463235.54632635#4&"4&#"3264'#"&'326êkIJkI|ýƒ%59.$P›Ê‡ÅýuLWtVI$j€WV„"üa\>š¶(4`cM„2T.>+Z=ë!""!;;()9 C/-DþÔIkjJ4,êcjO(A_Tv¨`+“$%`8OL8Q%:7yTuvSB'€hW?^¤}ýßO;3æ!E€U /7"6Eþ!""! (<8(.CDWþí3;Dز +°3²A+°+3±é² +°/´=++°/°$3±5é°12°E/°-Ö´(&+°(± +±é°±+±9é°9±+´C+°C±+´&+°? Ö´ +±F+± (²*+1999°°39°°59±C°9°?´ $9±A=± 99± ± *99°¶(-38$9°5°901%2654'7#"'&547.=4#"#4&#"&547632632264&" NM�+®`P/.FD.0(KT“yVP?O.)�-¡@Cs€74jo„INP88P8={b¢@7TDzJ/]B1002A>.†aZ“‰þ¢^?LC=R§B;YÊvPVLL{jeJ^þó8P88('WþÊ36BRñ²+²=+°'3±é°/´C++°K/´7+°/°!3±0é°,2°S/°)Ö´$&+°$±+±é°±+±4é³4+´P+°4±:+´H+° 2°H±+°F2´&+´ +±T+±$²&',999°°.9°°09±P4°9°:¶@CK$9±=7µ FHNP$9±² &999°¶$).3$9°0°901%2654'7#"&547&=4#"#4&#"&546326322654&#"2654'#"&' NM�+®eViKJj7Œ“yVP?LZ�-¡‡o€74jo„Ie###"/D9)(9D={b¢@7TÇ·H5eKjkJL65ÁZ“‰þ¢^?L|V§B;YÊx¤LL{jeJ^À#"!"pC/ *=9'.DWÿ 3@Kز$+²+°/3±é° /´J++°D/´7+° /°(3±9é°52°L/°1Ö´,&+°,±$+±#é°#±+´F&+°F±+±=é°=±+´<+±M+±$,²./5999°#°79±F± 999±=³ DJ$9°µA$9±DJ±99±$±.99° ¶,17<$9°9°901%2654'7#"&5463267#"&=4#"#4&#"&5476326324&#"32 NM�+´py±T„dEA;P 80,7mv“yVO@O.)�-¡@Cs€74jn… ' \+_4(#g=|a¢@7Wë»” B<223)^�uZ“‰þ¢^?LC=R§B;VÍvPVLLzkeG.3Ó  Wÿ 3AV²%+²+°03±é° /´E+°T/°I3´+°2²T +³@TO +°!/°)3±:é°62°W/°2Ö´-&+°-±%+±$é°$±+´B+°B±+±>é°N2°>´P+°P/°>±+´<+±X+±%-²/06999°$°89±B±!:99°±T99±>P² E999°µG$9±TE±99°°9±%±/99°!¶-28=$9°:°901%2654'7#"5463263267#"&=4#"#4&#"&547632632327&#"#"#'4&#" NM�+´ry´ÚG1TEI0,7mv“yVO@O.)�-¡@Cs€74jn… 'þüY3]F.!8.(=|a¢@7Wë½” |,911G57�uZ“‰þ¢^?LC=R§B;VÍvPVLLzkeG.3 !2:'#Wþˆ30XagpI²1+´Y+°H/±;N33´f+±@h22°m/±Dc33´T+±5]22°/°3´*7+° /°3´#7+°2°q/°Ö´&+°±+±é°±Q+´o+°o± +±Uk22±'é´d+°\2°'±b+°^2´F+°42°F±-+´&+°B Ö´9+±r+±²999°°!9°Q°#9°o° 9° ±Nh99°d°K9±b'³1HYf$9°F²*0999°B²;=999±fH±=K99°m²9>Q999±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'232#"'53254+#"&'#"&546;546"354&5#32'265'#"YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?k9I5Hk9F…":/29G4N7&‰((‰DEòF3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnþM:<3z< ?3¤!A63?;L=. ,”r?4<Wþ†30cls~ްS/±;O33´t+°r2´@+°E/´F+°{/±Kn33´Y+±1h22°d/´^+°/°3´*7+° /°3´#7+°2°/°Ö´&+°±+±é°±V+´}+°}± +±Zw22±'é´p+°g2°'±m+°i2´M+°b2°M±-+´&+°B Ö´8+°42°8´I+°I/²I8 +³@IE +±€+±²999°°!9°V°#9°}° 9° ±St99°p°Q9±m'³O^dr$9°M³*=0$9°I³>;@$9±8-°69±@S±=Q99±Et²8B>999°F³6Vw}$9°{°49±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'2#"'73254+53254+#"'#"&546;54632'"354&5#32#26545'#"YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?M%:4$% '';„H;09F3N=9$$‡)�((�IFöK3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^Nnýr'$ #&/ % ¦--D32A 54+53254+#"'#"&546;4654'&#"327'4&5#"32YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?ZT’SE96sD6rWýå30[djt}i°B/´w+°|/´I+°1/°U3´s+°i2°o/±Se33´6+±<`22°\/´8+°/°3´*7+° /°3´#7+°2°~/°Ö´&+°±+±é°±4+´q+°q± +±'é³k' +±6F33´g+±_u22°'±e+°a2´S+°<2°S±-+´&+°O Ö´>+±+±²999°°!9°4± #99± q±1s99±gk°Y9±e'·8BIU\iw|$9°S´*0Ky$9°O°9±|w±FK99±s1°Y9°o²>O4999±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'"&547632#".5463267654'&'#"'&'"354&#32'4&5#"323254&#"YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?þè28–…A"ŸWMm"C4J/}+$ƒ/”'ˆ''ˆDCÆG0*B\01&53"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^Nnü…D4q“,)> ‹nF@$!":2-+)­"?0-’i035:�Wþƒ30\fnuv²Y+°13´g+°<2°Q/±EK33´~+±es22°z/±_o33´V+±>k22°/°3´*7+° /°3´#7+°2°€/°Ö´&+°±+±é³T+´|+°±v+±Vy22´q+°j2°q± +±'é³u' +°l3´d+°'±]+´A+°A±-+´&+°9 Ö´4+±�+±²999°T°!9±v|² #Q999°q°O9° ³KYgs$9±d'±H[99°]±E>99°Aµ*1<0$9°9±6799±~Q±7O99°z²ATH999°V±9499°g°[9±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'2'654&#"32#"&5#"'&'#"&547>3264+2'"354#3254&5#"32YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN? [me$JH;U�!84:%$ @2:—H>_(KI`ì)‘‘IHÏG0,3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnþkY}<#,j�22´x+°‹/±t�33´f+±O}22°E Ö´F+°/°3´*7+° /°3´#7+°2°‘/°Ö´&+°±+±é°�2°´d+°d/°±‡+°f2´ƒ+°|2°ƒ± +±'é±Ot22°'´†+°†/°~3°'±q+´T+°T±-+´&+°A Ö°J3´6+°12²A6 +³@AE +±’+±²999±d°!9°‡±a�99°ƒ²# _999° ²]iy999±'†±[k99°q±RW99°T´*M0m$9°A²9;999±6-°49±…]±;_99±Ex@ 6A326324&#2'"354#254&5#"32YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?¿1?.' "!([2}~@6NO?2:—H>[ ,kB@Mô/3bì*’’’ÐH1+3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^Nný…- D,5 ; 2"Rq6AA88C4o?PDD"Ã!bþ.M�ll914<Wýü 30w…‹•ذG/´S+°1/±pt33´”+±~Š22°�/±z†33´6+±h„22³]6�+´\+°‚/°d3´9+±=N22°/°3´*7+° /°3´#7+°2°–/°Ö´&+°±+±é°L Ö´Q+°±4+´’+°’±Œ+±6�22´ˆ+°„2°ˆ± +±'é³…' +°†3´h+°{2°'±x+´m+°m±-+´&+±AE22°´W+°W/°a3±—+±L³$9±Q±!N99±’4°O9°Œ² #1999°ˆ°v9±… ´9St‚Š$9°'°G9°h±;r99°x´*kp~$9°m³=d0$9°-±\]99±W°C9±”1±Ev99°\¶W4mrxŒ’$9°�°C9±6]±LQ99°‚²;Aa999°9°O9±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'"&547>32632!".547!27654'&+532654&#"3232#"'#"'%4+32'4#"3#32'4&5#"32YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?þm.4ŒB:R"2q@3<22þ„kŸz?F+;‰lV„E0,'5v<3;DFTJ./™DC‰‰EDÂD.)3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnüŠD3o>REG&?EJÁ!I‚]a["MMþî%U9-#%-q5BEE99w5j³NS=m435>Wýé30aipu}†­²9+°=3´j+°P2°C/´|+°x/´H+°1/°^3´…+°t2°X Ö´b+°�/±gq33´6+±Rm22°/°3´*7+° /°3´#7+°2°‡/°Ö´&+°±+±é³4+´ƒ+°±~+°62´r+°m2°r± +±'é³z' +´F+°F/´z+³q' +°n3´h+°'±e+´U+°U±-+°N2´&+´@+±ˆ+±²999°4°!9±~ƒ² #1999°r°`9° ³9^jt$9±h'³;H[x$9°e¶*CXRv|$9°U´=KP0$9±x|±FK99±…X°`9±�b¶@NU4[~ƒ$9±j6°;9±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'"&547>32632#"&5432>54#"32#"&'#"'%2654+'"34&324#"32%4'#"32YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?þW1:—G>^#][h v7az/](9^ƒF2. :!R*HŒ '‘##‘HI˜X9X9þ˜G/,3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^Nnü…D4r@RFF|bº)%@ˆC™Sm1C%+99E 0hú1#+)‘s” Û)5=WþP30^chqn²\+´a+²?+°8/´E+°N/°R3´g+°i2°o/±Kd33´X+±1_22°/°3´*7+° /°3´#7+°2°r/°Ö´&+°±+±é°±<+´A+°A±U+´q+°q± +±'é³k' +±Yn33´e+°c2°'±d+°_2´K+°12°K±-+´&+°I Ö´4+±s+±²999°°!9±A<±# 99°U°>9°q°?9°k±RZ99±e'°P9°dµ*E8N\$9°K±099±gN°P9°o´9°*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'#"'&547327654##"'#"&546;>32&#"#32'274&5#"YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?57EZIg|[gG+?WMcL=KB<61!'(4>+C/1C?51jj35Æ 93"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnýŒ>5`6.@Fv_YIR^93)F>>R$%<*+;0GD3==;Z%(XWýœ30dinw�̲c+´g+²H+°;/´x+°B/´M+°U/°Y3´m+°s2°p/±Rj33´_+±1e22°/°3´*7+° /°3´#7+°2°‚/°Ö´&+°±+±é°±E+´J+°J± +±'é³r' +´\+°\/´r+³o' +±`u33´k+°i2°'±>+´€+°€±j+°e2´R+°12°R±-+±P{22´&+´8+°42±ƒ+±²999°°!9°E°#9°J° 9°\°G9° °H9±or±Ys99±k'°W9°>²BMb999°€µ*@Ugm$9°j±c099°R³;x~$9°-±6}99±Bx³>8{$9°M±}~99°U°69°m°W9°p´EJP4\$9±c°G9°*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'#"&547#"&54732654##"'#"&546;4624#"#32'#"3274&2654&"YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?A8FMJJ42K}±F)?“gWŽG962!'&4=*A`A;75mm76§ :&ß,-<*)3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^Nný‹=5T4!R4IK2 Šp_XIR[pLA@@P%'=();2FD4@@7]]\ ,þ‰),,<*Wý‚30ejow€�²d+´h+²H+°;/´�+°‰/´v+°B/´M+°V/°Z3´n+°|2°y/±Sk33´`+±1f22°/°3´*7+° /°3´#7+°2°�/°Ö´&+°±+±é°±E+´J+°J± +±'é³{' +´]+°]/´{+³x' +°a3´l+°j2°'±>+´�+°�±k+°f2´S+°12°S±p+´†+°†±-+°Q2´&+´4+°4°8 Ö´„+°„/´8+±‘+±²999°°!9°E°#9°J° 9°]°G9° °H9±x{±Z|99±l'°X9°>²BMc999°�³@Vhn$9°k´*d0Š$9°S¶;rtv�‰$9°p°ˆ9°†°69±Bv·>8pt„†‹�$9°M°r9°V°69°n°X9°y´EJQ4]$9±d°G9°*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'#"&547#"&547327654##"'#"&546;4624#"#324#"32#"3274&2654'"&'YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?A8FLTR89R }±F)?“gNBUG872!'&4=*A`A;75mm76b,--,þ÷ :&Þ%2 ,@+ 53"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^Nný‹<6R6"_8QQ8( Šp_XIR[p'H@@P%'=();2FD4@@7]¼,,-F\ 2þh2$!/,#3Wþˆ30SZM²;+´L+²C+°F/´A+°4 Ö´Y+°V/´Q+°/°3´*7+° /°3´#7+°2°[/°Ö´&+°±+±é°±8+´X&+°X± +±'é³T' +´1+°'±I+´?+²I? +³@IF +°?±B+´E+°- Ö´&+±\+±²999°°!9°8± #99°X°O9±T ³4QVY$9°'°L9°1°;9±?I´*0A$9±YF°G9±VA²81T999°Q²?IO999±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'#"'&5463233!5654&#"6324#"32YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?t=0D"n^X67iCþô9G;5H &0=?12213"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^Nnüü1A2,@^|;P@-D29rWýÆ30]gn°²;+´V+²C+°K/´^+°c/±EO33´B+°4 Ö´m+°j/´[+°/°3´*7+° /°3´#7+°2°o/°Ö´&+°±+±é°±8+´l&+°l± +±'é³h' +´1+°'±S+´?+³e?S+´M+°M/´e+²Me +³@MP +°?±B+´E+°H2°- Ö´&+°E´a+°a/±p+±²999°°!9°8± #99°l°Y9±h ³4[jm$9°'°V9°1°;9±SM°O9°e±*99°?´0AKc$9°B²J^b999±E-°F9±4^³HMae$9±mc°Q9±jB²81h999°[²?SY999±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'#"'&5463233#"&547#5654&#"632264&"4#"32YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?t=0D"n^X67iCJfK19G;5H &0=¹,,<+*Ù12213"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^Nnüü1A2,@^|;P@-DþÎ+<,,*9rWý¦30[cszIJ:+´T+²A+°I/´d+°l/´b+°4/°^3´y+´?++°v/´Y+°/°3´*7+° /°3´#7+°2°{/°Ö´&+°±+±é°±7+´x&+°x± +±'é³t' +´1+°'±K+´q+°q±Q +´=+°=±@+´C+°\ Ö´i+°@°- Ö´&+°C°F Ö´g+°g/´F+±|+±²999°°!9°7± #99°x°W9±t ³4Yvy$9°'°T9°1°:9°K±NO99°q°M9°=·*0?I`n$9°\³^bdl$9°@°H9±Cg°D9±4bµFKgioq$9°y³CDMO$9±v?²71t999°Y²=QW999±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'#"&5463233#"&547#5654&#"6324#"322654'#"&'4#"32YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?t=0?Bp\VoiC&SpS&,9F<3J &0=à,--,+%3 +!, 4Ð12213"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^Nnüü1AWG_{uW=**þ™)78RR87)0&P>P@-DÐ,,-V2%".,$3!9rWþˆ30O²4+´9+°C/´H+°M/´=+°/°3´*7+° /°3´#7+°2°P/°Ö´&+°±+±é°± +±'é³1' +°E3´;+°'±-+´&+³@-+´J+°J/´@+°62±Q+±²999°°!9° °#9±;'°F9°J@ *490>CHM$9°-°79±MH²E@F999±9=²617999±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'4632&#";2#"'73254+"&YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?¹\En>(/U^EC€YFn@*-W]D>;L3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnýŽ9;A.27*g:9A-16(6Wý¿30XaW²4+´9+°G/´Y+°^/´Q+°V/´=+°/°3´*7+° /°3´#7+°2°b/°Ö´&+°±+±é°± +±'é³1' +°N3´;+°'±J+´`+°`±-+´&+³D-+´\+°\/´D+±6@22°D´S+°S/±c+±²999°°!9° °#9±;'°O9±`J°L9°S@ *49=>GQ0VY]$9±-\±7B99±^Y±JD99°Q±LB99°V²N@O999±9=²617999±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'4632&#";2#"&547&'73254+"&264&"YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?¹\En>(/U^EC€42I42K@.*-W]D>;LÌ,,<**3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnýŽ9;A.27*g; &>3JK2-# 1-16(6þš+<,,<+Wý¢30X`py²4+´9+°G/´a+°i/´_+°[/´Q++°V/´=+°/°3´*7+° /°3´#7+°2°q/°Ö´&+°±+±é°± +±'é³1' +°N3´;+°'±J+´n+°n±Y+´f+°f±-+´&+°d Ö´D+°D°@ Ö´S+°S/´@+°62±r+±²999°°!9° °#9±;'°O9±nJ°L9°Y@*49=>GQUV0]ai$9±fS°B9°d°79±[_µJDdfln$9°Q±LB99°V²N@O999±9=²617999±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'4632&#";2#"&547&'73254+"&4#"322654'#"&'YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?¹[Fn>(/U^EC€-EQ9:Q%E0*-W]D>;L-,,-+%2 , + 53"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnýŽ::A.27*g8)P9QP:7( 2-16(6þþ,,-U2%!/,$3Wþ†30Y?²4+°K3´9+°E/´Q+°W/´=+°/°3´*7+° /°3´#7+°2°Z/°Ö´&+°±+±é°±I+´N+°N± +±'é°'°; Ö´2+°2/´;+°'±-+´&+³A-+´T+°T/´A+°62±[+±²999°°!9°I± #99± N°K9°2°L9±T;@ *490>EQW$9°-°79±WQ°A9°=²1IN999°9±6799°4±2L99±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'4632&#";2#"'&54732654+"'YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?À]Dq@*/V`FC6P?1BnM];-1‡['EEA5%3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnýVp!,4hgN$:XDI (Wý½30`iˆ²4+°R3´9+°H/´a+°f/´X+°^/´=+°/°3´*7+° /°3´#7+°2°j/°Ö´&+°±+±é°±P+´U+°U± +±'é°'°; Ö´2+°2/´;+°'±K+´h+°h±-+´&+³E-+´d+°d/´E+±6A22°E´[+°[/±k+±²999°°!9°P± #99± U°R9°2°S9±hK²=M^999°[@ *49>HX0]ae$9°d°C9°-°79±fa±KE99°X±MC99°^°A9°=²1PU999°9±6799°4±2S99±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'4632&#";2#"&547.54732654+"'264&"YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?À]Dq@*/V`FC6P97I42Kh‚;-1‡['EEA5%¦,,<**3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnýVp+´v+°v±b+´o+°o±-+´&+³8-+´m+°m/´8+°8°4 Ö´O+°O/´4+°Z2±z+±²999°°!9°C± #99± H°E9°U°F9±v>°@9°b@*1;LQRX]a0fjq$9±oO°69°m°[9±dhµ>8motv$9°L±@699°R°49°a±CH99°]²UZ[999°X°F9±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'2#"&547.54732654+"&54632&#"34#"322654'"&'YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN? 6P;DQ89S&d€;-1Ec:'EEA@-ó>IE8 4A56?67NDa>9P169873"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnþfRTj%+65,*5G?8E.G6FE7D26/H!-.lN)%±<#@FWþ30rz¼°C/´@+°+²>l +³@>A +°g± +±'é³w' +´`+°`/´w+°'±s+´Z+°Z±-+´&+³8-+´M+°M/°T3´8+°42²M8 +³@MP +±|+±²999°°!9°l°#9°g° 9± >³þÛ00©þO,BB,$55+a!(>.-8/1I5VsK:#")0+.3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^Nnþ76A?:A#72'(2&38/9,?1HF3A-9+@5/gCX­<8;Wþ?30ahpx°8/´o+°k/´=+°L/´h+°R/°E3´^+°12°/°3´*7+° /°3´#7+°2°q/°Ö´&+°±+±é°± +±'é³U' +´Z+°Z/´U+°'°m Ö´;+°;/´m+³O' +´f+°'±b+´I+°I±-+´&+°B Ö´4+±r+±²999°°!9°Z± #99±;U°X9°O°W9±fm±^Q99°b@ *=8`Liko$9°Iµ1?E0G$9±ko°;9°=±?X99±hL°W9°R¶4BIOUZd$9°^°`9±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'2#"&5432>54&#"#"&547#"&54763264'24#"32YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?IU@Ck3Pia .8/5D.4;6+:A(U,u*64jD.@23"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnþgPjOT&$=/j73F7F0HC5I6A-J(,9i !c¹B)(CDˆ Wýå30iq€¡²f+°13´Z+°J2°8/´+°{/°t3´=+°A2²{= +³@{w +°S/´p+°/°3´*7+° /°3´#7+°2°�/°Ö´&+°±+±é°±b+´]+°]± +±'é³n' +´V+°V/°:3´n+´}+°'±x+´w+°w±j+´O+°O±-+´&+°G Ö´4+±‚+±²999°°!9°b± #99± ]±_`99±}V±Zf99±'n°X9°x´=Slp{$9°w³?8h$9°j°L9°O·*1AJ0rt$9°G±C99±{±:C99°=±?`99±pS°_9°Z¶4GOV]bl$9±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'2#"5463263267654&#"#"&547&#"&54763264'32&#"#5&#"32YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?WfKNt™1#-'5$N;*%&:=HG7IK*a4Œ6C@C@(%$-Q:3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^Nnþ{_z`eS',E@:>X^+:+0SB_BP9Y2/B}&(uáS1.VX“  $WþS30gog°7/´C+°R/´n+°Y/°J3´d+°12°/°3´*7+° /°3´#7+°2°p/°Ö´&+°±+±é°±;+´@+°@± +±'é³\' +´a+°a/´\+³U' +´l+°'±h+´N+°N±-+°F2´&+´4+±q+±²999°°!9°;± #99°@°=9± a°>9±U\±^_99±l'²WYd999°h¶*7CRf0$9°N³J1L$9±RC°_9°n°^9°Y@ 4@F;NU\aj$9°d±>f99°°=9°*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'2#"'&54732654'&#"#"&547&#"&5463264'32YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?(GV—{‚RP*1%†hbw3 6 13>9,=B'UhJ)63543"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnþkOt‚JI€YH;Pbuc[6(&6K.('G6J6B-L+'8iG]º?)%CIWý›30sz„¯°M/´{+°U/´`+°m/´z+°1/°f3´=+°A2°/°3´*7+° /°3´#7+°2°…/°Ö´&+°±+±é°±X+´]+°]± +±'é³4' +´9+°9/´4+³p' +´x+°'±Q+´ƒ+°ƒ±t+´j+°j±-+±c}22´&+´I+´E+±†+±²999°°!9°X± #99°]°Z9± 9°[9±'4±6799°x±1=99°Q²U`r999°ƒµ*?Smv$9°t°09°j¶MfAh{€$9°-°G9±U{³QI~‚$9°`°€9°m±G799°z°69°1@ 49EX]cjpv$9°=±?[99°°Z9°*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'"&547632632#"'&547#"&54732654&#"#"&547&4'2264&#"YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?z-=@$S21M*2J()TM$#73$& ‚¡)/%…kbx:3 9B.3<: w84l3-,**3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnýÏC.M*%8gG.-67K{BU4%$$&3"”}WINZgp$9°nµ*J0y‡$9°d·`@bw{}…$9±‚u±IE99±O{·LGuy€‚ˆŠ$9°Z°w9°g±E799°t°69°1@ 49CRW]djp$9°<±>U99°°T9°*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'"&54632632"&547#"&54732654&#"#"&547&4'24#"322654'#"&'YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?z,>@$SeK*2GTWRSpT€ž)/%†jbx;2 9A/3<: w84lR+..+*$3 + - 53"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnýÏC.M*%8gG[kM|B&Z7RR7)!•|WI326=!53476"!42654'&#" NM�+®utlw“yVP?LZ�-¡‡o€74jo„I¹d�MEg^A76J)?rýžÇFH¥„_D²!;%=!8!={b¢@7TdžŸ�tZ“‰þ¢^?L|V§B;YÊx¤LL{jeJ^ñ†aþÖ#zD=("1 .,%*EAÿcEFHbBþÿBýÀWþ„30V²1+°63´K+°B2²K1 +³@KG +°/°3´*7+° /°3´#7+°2°W/°Ö´&+°±+±é°±S+´N+°N± +±'é°'°F Ö´G+°G/´F+°'±?+´:+°:±-+´&+±X+±²999°°!9±NS± #99° ³1KPQ$9±'G°49±?F¶*6<0=$9±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'2632'654&#"#54&#"&5476YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?þù%; QO./y X=2%C*1:\'w/.3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^Nnþ&D78KŠ93)l4C0ææ/H4j'29ˆL87Wþ„30WcT²4+°63´O+°G2²O4 +³@OK +°=/°V3´[+´DaK4 +´D+°/°3´*7+° /°3´#7+°2°d/°Ö´&+°±+±é°±1+´S+°S± +±'é°I2°'´K+°K/°'±A+´X+°X±-+´&+³:-+´]+°]/´:+±e+±²999°°!9± Sµ #3OUV$9°K°49°'°59°A°69°X°G9°]¶*7=0E$9±[=°U9°a³1:SA$9±4O°59±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'46262#"'&546;&#"#54&#"&%3254'&#"YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?þ2b˜!(®?=NB;H: ;b=- 1St¤!L1/3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnýGOl:::9VJg.'4>U!Oäç ,%&1k#56Z/f!4Wýö30kwi²=+°A3´1+°d2²1= +³@1h +°J/´O+°[/°73´o+°/°3´*7+° /°3´#7+°2°x/°Ö´&+°±+±é°±9 +´4+°4± +±'é°h Ö´g+°'±^+´l+°l±q+´X+°X±-+´&+°G2°´S+°S/±y+±²999°°!9±h4´# 67=$9±g °?9±l^²ALd999°q·*JMO[0b$9°X²CV999±OJ°L9°[°M9°o°69°1@ 49CGSVX^u$9°=°?9±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'"&547632632#"'7327654&'#"&54767&#"#54&3254'&#"YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?þ°/?Ps10PI!'O�$P')rX;2&,@))+! <;3@"#4AZ=.Þ?%13"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnýÅK2k'46ŒM9822R 7:T_‰#434D/O $I[T8;/0Méé!,¶2\3%=Wþ‹30K²8+°;/´6+´<+°A/´1+°/°3´*7+° /°3´#7+°2°L/°Ö´&+°±+±é°±I+´D+°D± +±'é°'±>+´4+²>4 +³@>; +°4±7+´:+³-:7+´&+±M+±²999°°!9°I± #99± D°G9°'²1AF999±4>°69°7³*0$9±6<°F9°A³4>DI$9±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'233!5654&#"&546YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?Ê>U¥Bþº12"!32QV3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnýŽL;#9þ‘ 9!-,02'S8OWýÂ30V`u²8+°@/´W+°]/°R3´7+³F7]+°:3´G+°L/´1+°/°3´*7+° /°3´#7+°2°a/°Ö´&+°±+±é°±T+´O+°O± +±'é°'±I+´4+²I4 +³@IF +°4°_ Ö´C+°C/´_+°4±7+´:+°=2°:´Z+°Z/³-:7+´&+±b+±²999°°!9°T± #99± O°R9°'²1LQ999±4C±6E99±7_¶*0@W\$9±-Z°;9±]W±C=99±7G°Q9°L³4IOT$9±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'233##"&547#5654&#"&5462654&"YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?Ê>U¥BJ41Lj12" 42QV&,-<**3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnýŽL;#9þ‘#.3JL1-$ 9!-/02'S8Oþj*,,<+Wý§30V\l�²8+°@/´]+°e/´\+°Y/°R3´7+³F7Y+°:3´G+°L/´1+°/°3´*7+° /°3´#7+°2°m/°Ö´&+°±+±é°±T+´O+°O± +±'é°'±C+°I2´j+°42²Cj +³@CF +°j±7+´:+³b:7+´W+°W/´b+°:°= Ö´`+°`/´=+³-:7+´&+±n+±²999°°!9°T± #99± O°R9°'²1LQ999±jC±6E99°W·*0@Z]e$9±-`°;9±Y\µC=`bhj$9±7G°Q9°L³4IOT$9±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'233##"&547#5654&#"&5464"22654'#"&'YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?Ê>U¥B$R89S%\12"!32QVKXX*#4 , + 53"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnýŽL;#9þ‘'78SR96( 9!-+ 02'S8OþÑ,,-V5#!/+$4Wýæ30[dd²8+°=/´_+°c/´D+°I/´6+´J+°Q/´1+°/°3´*7+° /°3´#7+°2°e/°Ö´&+°±+±é°±Y+´T+°T± +±'é°'±L+´4+²L4 +³@LI +³\4L+´@+°@/´\+°4±H+°72´:+°- Ö´&+±f+±²999°°!9°Y± #99± T°W9°'²1QV999±4\°69°H@ *0=D_ac$9±c_²@\a999±ID°W9±6J°V9°Q³4LTY$9±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'233#"&54763267!5654&#"#"&5463254#"YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?­?T  B`N5V+(W! ÿ-1#!/1#KW£1%/Q43"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnýŒL<*<þ‘L]-(" '( >",,6.!V9Oþ¯WþR30\T²8+²C+°2°:´i+°i/³-:T+´&+±p+±²999°°!9°I± #99±cN°K9° °L9±'^±`a99°D±1[99±mX±FR99±T4·*0Afjk$9°i°<9±Ff±D>99°R±2°:´l+°l/³-:Q+´&+±z+±²999°°!9°H± #99±`M°J9° °K9±'[±]^99°D±1X99°U±FR99±4v²Os6999°d@ *0Aehiq$9±ln°<9±ehµD>lntv$9°O±Tf '6¾83"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnýbE[./>Õ 9!-*!11'S9NL;!ý;(šœ)8WýÂ30\enв4+´]+°?/´f+°E/°93´[+°a2°[´k+°Q2°E´F+°K/´V+°/°3´*7+° /°3´#7+°2°o/°Ö´&+°±+±é³S+´N+°±H+´Y+²HY +³@HE +°Y± +±'é³\' +´a+°'±B+´m+°m±-+´&+³9-+´b+°b/´9+°<2°9´i+°i/±p+±²999°S°!9±HN´# PQV$9°Y°[9±ma°D9°b@ *4?]0fj$9±-i°:9±kf±B<99±[F°P9°K³HNSY$9±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'4632##"&547!5654&#"&5463237"354&264&"YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?¡ZFC./K32KþÛ13"#22RW;>Tf '6¾8,-<**3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnýbE[./>Õ#.3JK2-$ 9!-*!11'S9NL;!ý;(šœ)8þ3+<,,<+Wý©30\em|›²4+´]+°?/´n+°v/´l+°E/±9h33´[+°a2´F+°K/´V+°/°3´*7+° /°3´#7+°2°}/°Ö´&+°±+±é³S+´N+°±H+´Y+²HY +³@HE +°Y± +±'é³\' +´a+°'±B+´z+°z±f+´s+°s±-+´&+³9-+´b+°b/´9+°<2°9´q+°q/±~+±²999°S°!9±HN´# PQV$9°Y°[9±za°D9°f@ *4?]0jnu$9±-q°:9±El¶Tf '6¾8+--+*$4 ,@+ 43"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnýbE[./>Õ(58RQ97& 9!-+ 11'S9NL;!ý;(šœ(9þœ,,-V3$!.+$3Wþ�307?Gû²6+´@++°3/´>+°/°3´*7+° /°3´#7+°2°H/°Ö´&+°±+±é°± +±'é³3' +´D+°'±F+´<+°<±?+´2+°2±-+´&+±I+±²999°°!9° °#9±F'²6>@999°<³*0:$9°?°9±@>±9±XS±@499°J³7=>6$9°K±GO99°:°E9±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'"&547#5432#4'3'"654264&"YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?2K�¸µINdš�,,€3,,<+*3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnûÄK2-$§Éƪ#.3Jxl!']W÷M8kVZ@þ7+<,,*Wý©30BJRZj|²:+´K++°1/´[+°c/´Y+°U/´J+°/°3´*7+° /°3´#7+°2°k/°Ö´&+°±+±é°± +±'é³O' +´7+°7/´O+°'±4+´h+°h±Q+´G+°G±S+´`+°`±-+´&+³=-+´J+°J/´=+°@2°=´^+°^/±l+±²999°°!9° °#9±h4°69°Q´:KIWe$9°G@ *1E0UY[c$9°S°9±=^°>9±UYµ@4^`fh$9°J³7=>6$9°K±GO99°:°E9±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'"&547#5432#4'3'"6544#"322654'#"&'YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN? 9S$�¸µ"QNdš�,,€X,--,*$3*! + 43"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^Nnû«R86'§Éƪ&78R‘l!']W÷M8kVZ@þ ,,-V4#"-+%2Wýá30EMVaG°4/´Z+°_/´;+°@/´L+°P/´C++°/°3´*7+° /°3´#7+°2°b/°Ö´&+°±+±é°± +±'é³U' +´@+°@/´U+³9' +´W+°'±N+´J+°J±?+°F2´1+³-1?+´&+±c+±²999°°!9° °#9±NW´C;LP_$9°J¶*4H0Z\$9°?±=99±Z4±7699°_²9W\999°;°=9±PL±JU99°C°H9±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'#"'.543265!5432#4'3'4#"63254&#"YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?“aN 0JsbþÆ¿·é±:22°E/°Ö´+°±6+´1&+°1±)+±(é°(±"+±Bé°B±+´&+±F+±6±99±)1²34:999°(°<9°"² >999±B³$9±)°39°%@ "16±9901%2654'7# '&547! 7#"'&=4#"#4&#"&547632632ÁONŽ+¯g¸î�þÕ·ÓH:>¾¢ 6¬n>6”yVOAN/',¢@Fr€73lk†I={b¢@7VÓ~¿r9r„þž~"i…çr`�KFsZ“‰þ¢^@KC?E999°3°G9°-²%I999±Y°9°S¶ )'$9±%´ SY$9°)± V99±4°>9°0@ !-¾¢ 6¬n>6”yVOAN/',¢@Fr€73lk†Iu(87)'89={b¢@7VÓÍzT9B10aB/r„þž~"i…çr`�KFsZ“‰þ¢^@KC3±é°/´X++°`/´N+°/´&7+°0/°83±Gé±C22°h/°Ö´ +° ±@+´;&+°;±4+±3é°3±-+±Jé³J-+´e+°J±P+´]+°]±+´&+°[ Ö´ +±i+±@ ±99±4;²=>C999°3°E9°-³&FG$9±J°9±Pe@  (*VX`$9±N³ [e$9°&´PV]c$9°*± S99±4±=99°0@  -;@EI$9°G±9901%2654'7#"&547#".5473 7#"&=4#"#4&#"&54632622654&#"2654'#"&'ÁPMŽ+¯�5GkJIk „¥’öÀmH:>@pž¶i6¬mu”yVOAKY,¢‰o€73Ø…IH2!#!;/D9*(9 C={b¢@7VþZ{]>JjkI$;vÄž~"i…]•eD�ŽvZ“‰þ¢^@K{W¦C;VÍx¤LL|ieI_þÒ!"!’C/"+<9'.DWþ„30U_²O+°73´C+°=/°I3´1+°V2°/°3´*7+° /°3´#7+°2°`/°Ö´&+°±+±é°±L+´]+°]± +°Y2±'é´G+°'±@+´T+°T±-+´&+°4 Ö´9+±a+±²999°°!9±]L± #99° ´EIJV[$9°G±CO99±4T¶*067=$9±C1¶49@GLS[$9°O°69±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'2654'7#"&=4#""&54632!2654'YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?%1[%s"%J>Mp OIvCw]D39þý$R4%3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnüÂT/b7'=ŠF5=V@7uB[D_bF]w'*A:tB'a3T&9Wý¸30\eo`²V+°73´J+°@/´]+°1/°f3°/°3´*7+° /°3´#7+°2°p/°Ö´&+°±+±é°±S+´m+°m± +°i2±'é´N+°'±G+´[+°[°d Ö´C+°C/´d+°[±-+´&+°4 Ö´9+°=2°9´`+°`/±q+±²999°°!9±mS± #99° ´LPQfk$9°N±JV99±d[°E9°4@ *1067;@]a$9±1]¶;=CEPQa$9°J¶49GNSZk$9°V°69±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'2654'7#"&547&=4#""&54632264&"%2654'YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?%1[%s=;I42K*Jp OIvCw]D39],,<**þ¾$R4%3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnüÂT/b7'=Ši3#H3JK29%&a7uB[D_bF]w'*A:tÔ+<++<+ÔB'a3T&9Wý�30[cs}}²V+°73´J+°@/´d+°l/´b+°^/´1+°t2°/°3´*7+° /°3´#7+°2°~/°Ö´&+°±+±é°±S+´{+°{± +°w2±'é´N+°'±G+°C2´Z+´q+°Z±\+´i+°;2°i±-+´&+°4 Ö´9+°=2°9´g+°g/±+±²999°°!9±{S± #99° ´LPQty$9°N±JV99±Zq°E9°\@ *107@6`dlo$9±^b·C=QPgioq$9°1±;E99°J¶49GNSYy$9°V°69±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'2654'7#"&547&=4#""&546324#"322654'#"&'%2654'YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?%1[%sBBS79S:@p OIvCw]Ek|,--,*#4 +!, 4þÐ$R4$3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnüÂT/b7'=Šn1)M7SR8H*(Y7uB[D_bF\xT>:tm++-U3#".,$2ïB'a3T&9Wþƒ30\;°@/´7+°M/°F3´Z+°12²MZ +³@MJ +°/°3´*7+° /°3´#7+°2°]/°Ö´&+°±+±é°V Ö´Q+°±J+´I+°I± +±'é°'±C+´5&+°5±-+´&+°9 Ö´>+±^+±V³$9±Q°!9±Jµ #MSTZ$9°I±1\99±' °F9°C°29±95¶*0;<@$9±7@°S9°Mµ49>CQV$9°Z±;\99°°<9°*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'23254'7#"&=4#"#54#"&547632YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?þÝ”]P^`%{ŸIQWFHU0V&r--M[3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnþRFBa„b*0:ƒÁ^N9VOååO%&2f*3=†L78:Wý½30en‚°E/´f+°k/°]3´7++°V/°O3´c+°12²Vc +³@VS +°/°3´*7+° /°3´#7+°2°o/°Ö´&+°±+±é°_ Ö´Z+°±S+´R+°R± +±'é°'±L+´5&+³H5L+´m+°5±-+°h2´&+°9 Ö´>+°B2°-´B+±p+±_³$9±Z°!9±Sµ #V\]c$9°R±1e99±' °O9°L°29±m5²*J999°9·70;LZ_$9°c±;e99°°<9°*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'23254'7#"&547&=4#"#54#"&547632264&"YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?þÝ”]P^`%{==J42K#aWFHU0V&r--M[|--<**3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnþRFBa„b*0:ƒp3%G4IK21%"‚9VOååO%&2f*3=†L78:þ+*<,,<*WýŸ30dl|¢°E/´m+°u/´k+°g/°\3´77+°V/°O3´a+°12²Va +³@VS +°/°3´*7+° /°3´#7+°2°}/°Ö´&+°±+±é°^ Ö´Y+°±S+´R+°R± +±'é°'±L+´5&+°5°z Ö´H+°H/´z+°5±e+´r+°r±-+°p2´&+°9 Ö´>+°-´B+±~+±^³$9±Y°!9±Sµ #V[\a$9°R°c9±' ±1O99±z5°J9°e@ *70LY^$9°a±;c99°°<9°*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'23254'7#"&547&=4#"#54#"&5463264#"322654'#"&'YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?ÙK\P^`%{CES89S3WWFHU.5V&r]J[€+..+*%2 + - 53"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnþRFBa„b*0:ƒx0)O8RR8A*&z9VOååOI4f*3=†Nm::þT++.U2%!/-$3Wýê30jrn²g+°13´\+°U2°A/´q+°m/´F+°N/°X3´7+°/°3´*7+° /°3´#7+°2°s/°Ö´&+°±+±é°d Ö´_+°±Y+´X+°X± +°D2±'é´o+°'±Q+´5+°5±-+´&+°9 Ö´>+±t+±d³$9±_°!9±Yµ #\abg$9°X°i9±o ±1U99±5Q³AFmq$9°9@ *0;Q_d$9°g±;i99°°<9°*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'23254'7#"&5432>7#"&=4&#"#54#"&5463264#"32YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?çKYR]`&}™‡6MtnIQ$3FIV,5V&qZKP($ýW.R33"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnþQH3n�c,0>˜’´*)D5  ]M!;3QææQJ3g,4;ŠPm++þ0 WþO30kl²h+²1+±m+±²999±JE±!G99±`e°H9°Z´# bch$9° °j9±'Y³1BNV$9±95¶*0;EJS`e$9°h²;Hj999±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'23254'7#"&547327"&=4#"#54#"&546326YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN? =NBMO fe i¨Ô++$ZŽ_–VA!3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnýÿF;7RoQ%(1wZ{4ˆ‰ZF2°- Ö´&+±‚+±²999±TO±!Q99±jo°R9°d´# lmr$9° °t9±'c³1LX`$9±5H°J9°y@ *0;<@EZv|$9±Lv³HBy~$9°X²J{|999°Z°@9°7²cdl999°g·49>OT]jo$9°r²;Rt999±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'23254'7#"&547#"&547327"&=4#"#54#"&5463262654&"YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN? =NBMO fSOI42K 5D¨Ô++$ZŽ_–VA!,,<**3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnýÿF;7RoQ%(1wuEV3JK2 ˆ‰ZF+°€ Ö´B+±Ž+±²999±UP±!R99±kp°S9°e´# mns$9° °u9±'d³1LYa$9±^H°J9±5а‡9°x@ *07;E[y|}…$9°‚±<@99±L|µHB€‚ˆŠ$9°Y±Jy99°[°@9°7²dem999°h·49>PU^kp$9°s²;Su999±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'23254'7#"&547#".547327"&=4#"#54#"&5463264#"32654'#"&'YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN? =NBMO fiRQ9:R#0l§i++$ZŽ_–VA!+..$4+ - 43"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnýÿF;7RoQ%(1w‡D$Z9QQ9%6~]ZF' +´C+°C/´>+°'±-+´&+³4-+´9+°9/´4+±]+±Y³$9±T°!9°N· #FKLQVW$9±9'@ *0167<@A$9±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'2'654&"&546!2'654&#"&546YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?SmƒcNpKcƒqþ¾Sl„aM98Ic�q3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnþpTƒ33$]9PP9`!35�RrpT‚43"_:OO:`!34‚RrWý³30QgsL²R+°13´]+°F2°;/´h+°/°3´*7+° /°3´#7+°2°t/°Ö´&+°±+±é°e Ö´`+°± +±'é°I2³U' +´Z+°Z/´U+°'´N+°N/°'±>+´q+°q±-+´&+°D Ö´4+°82°4´k+°k/±u+±e³$9±`°!9°Z· #RWX]bc$9±>'±GL99°q°K9°D@ *16;0BAFhn$9±]h@ 48>LNUWcen$9±*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'2#"&5467'654&"&5476!2'654&#"&5462654&#"YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?SlKKI42K9)cMpLd„88þ¿Sm…bM98Jc�q),+*+3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^NnþpT`7#R3JK2-D $]9PO:`!34‚Q:9pT‚43#^:OO:`!34‚Rrýç,+++Wý� 30Qgol²R+°M3´]+°B2°7/´p+°x/´n+°/°3´*7+° /°3´#7+°2°€/°Ö´&+°±+±é°e Ö´`+°± +±'é°E2³U' +´Z+°Z/´U+°'´J+°J/°'±:+´}+°}±-+´&+°42°? Ö´P+°-°h Ö´u+°´s+°s/±�+±e³$9±`°!9°Z· #RWX]bc$9±:'°H9°}´*BGM$9°?@ 170=54&"&546!2'654&#"&546YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?!Ha(FdpBUŒo>7+/6bxHFt`6Ab=Gr^þæFYnQ@./=Sn_3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^Nnþ^F9Z<(?mIKXI;=Y30U:0?A1S,.lI^`Gl.,!M/CB0N ,/kEbWý²30bx‚޲c+°13´n+°X2²J+°;/´y+°B/´Q+°/°3´*7+° /°3´#7+°2°ƒ/°Ö´&+°±+±é³G+´L+°±v+´q+°q± +±'é³f' +´k+°k/´f+°'±`+´[+°[±>+´�+°�±V+´4+°82³V-+´&+±„+±²999±LG°!9°°I9°v°J9± q· #chinst$9±fk±BQ99±�>¶*0@Y]^$9°-¶16;Xy~$9°V±{|99±By³>8|€$9°Q±@~99°n@ 6GL4^`fhtv$9±c°I9°*²999° ¶ !&-$9°#°0901#"&=4#"#4&#"&5463263232654&'2#"&547#".54732>54&"&546!2'654&#"&546264&#"YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?!HaQQI42K @TUŒo>7+/6bxHFt`6Ab=Gr^þæFYnQ@./=Sn_Ô++,+3"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^Nnþ^FtBX3JK2 ?mIKXI;=Y30U:0?A1S,.lI^`Gl.,!M/CB0N ,/kEbýç*>+,<+WýŒ30Fx~ޝ²1+°G3´<+°n2²`+°Q/´+°‡/´~+°X/´g+°/°3´*7+° /°3´#7+°2°�/°Ö´&+°±+±é³]+´b+°±D+´?+°?± +±'é³4' +´9+°9/´4+°'±v+´q+³Tqv+´Œ+°q±z+´„+°„±-+°l2´&+°‚ Ö´N+°-´J+±�+±²999±b]°!9°°_9°D°`9± ?· #16754&"&5464#"32654'#"&'YN`vsjy“yVP?K[�-¡‰m84jn…IBNMN?þ¾FYnQ@./=Sn_¨HaeRQ9:Q0=UŒo>7+/6bxHFt`6Ab=Gr^+--$4*! + 43"Š`€—ˆoV‹�þ³M=FtS¡<9PÅr›HHsfbFWt^Nnþ`Gl.,!M/CB0N ,/kEb^F„A$\9QP:&?mIKXI;=Y30U:0?A1S,.lI^þXXV3$"-+$3Zÿ1a.Dö² +´/+²-+°(/´%7+°?/´+´@+´=+°/± é°6/´7+°E/°Ö´&+°, Ö±"é°±B+´&+²B +³@B? +°±+´9<+²9 +³@9> +°9±3+±é±F+±B"µ /$9°°9±9°9°3²0999°±&'99± %°,9±?/°9±=°9°·39B$901"&546323&547632#!"3!!"'&5463!2654&#"!5654&#3K<$c~KQ=A§9NGw�KDƒ{ý­U2#>üµA/-ZCM[`gSRh2þbDNT:-A=.iLf.2R2>hjA=TP{�D %F'&>=D~eVqVK=3;$J-=Zÿ0c.M&²+´+²+°/´7+°4/´K+´5+´2+°$/±%é°:/±Eé°,/´7+°N/°BÖ´=&+° Ö±é°=±7+´I&+²7I +³@74 +°I±+´.&+². +³@.3 +°.±!+°)2´ <+°2²! +³@!% +±O+±7µ:?@E$9°I°K9±.°L9°!² 999° ²999±°9±4°@9±K2² !?999±%$´7=BI$9°:±.99°E±)99014632#!"3!!"'&5463!2654+532654&#"!5654&#"&546323&J‘zpž55dRýcU2#>üµA/-[B”1IF..)rJ¾2þbDN23K<$c~KQ=A§4;s€pMJ')HGIC &F'&?R>,BC>Q N1,g^X797þ]HSrSF!m@BS[z­Až¥_&j`+d.°•ÁŒš"C737phhi‡<>VACL+e7NJ7V$<9}T<=sZH"N…zžýO $Yÿò˜.Bõ²=+°3²0+°!3´++²0+´1+²0+´.+°7/±é°&/°3± é°2°C/°?Ö´:+°:±3+´+²3 +³@30 +°±+´*1+°*±"+´!1+°!±+´&+±D+±3:²<=999°°9±*°9°"² ./999°!°9°²999±.1°9°°<9°7·*3:?$9±&°90123&547632632'654&#"#4&#"!5654'&#"&5476.\y­AGHtk:6jsEF\O&‚eS.@QK3S1. 9þ]H)'<9SF!m@BztYH"N…tPT]]RTqi—%;?¯XsT3þ¡_5P@DM2$ e8'&J7U%<9}T<=Yÿòý.HU!²++°3´C++² +°83±Ié²++´,+²++´)+°2/±>é³P>2+±é°!/°3±é°2°V/°:Ö´5+°5±.+´A+².A +³@.+ +°A±F+´%1+°%±+´1+°±+´T&+°T±L+´ 1+±W+±.5²78>999°A°C9±%F°D9°²)*999°°9±LT´ $9±I)°79±2C@ %.5:AFLST$9°P°N9±>°9°!°9012632#"&547632&#"#4&#"!5654'&#"&5476323&5462654'&#"T3`A‡…\[6=mY_;:eDM2$ e8'&J7U%<9}T<=tYH"N…t¤þ`M4)+*vNYÿ›.[ic²V+²I+°:3´++²,+´\7+²I+´J+²I+´G+²$+°/´!++°P/±é³cP+´4++°?/°63± é°2°j/°XÖ´S+°S±L+´+²L +³@LI +°±+´C1+°C±;+´:1+°:±0+´f&+°f±_+´)+°)±%+´&+±k+±LS²UV999°°9±C°9°;² GH999°:°9±f0±699°_´!,4$9°)±'99±!°9°,°9±\G°U9±P@ %)0CLSX_f$9°c±'a99±?4±990123&54763267632#"'7327654'#"'&54763&#"#4&#"!5654'&#"&54762654'&#".\y­AEHut1:33ªKvAAVWŠQK=@kB>‡`^V30=B] v>UPI4Q01 9þ]H)'<9SF!m@BL;:' FZztYH"N…tPTO%~ UT„”ei1?-VNwÆ'8Em‡BDM2$ e8'&J7U%<9}T<=þ»UFWBfF2).Yÿ÷¸.)2Ͳ+² +´++° 2² +´+°/±é°,/± é°3/°Ö´+°±+´+² +³@ +°±+´1&+°1±*+´%<+°%± +´ 1+±4+±²999°°9±*1± )99°%°#9±°9°´1$9°±%*99± ,°#901235! !5654'&#"&547654'4#"6.\y«ü¹H)'<9SF!m@B�ž=25ZnG9&-ÔztYJ ¸3þÓþÿ#g8'&J7U%<9}T<=þÇÀÊd9RWC+j29j´ƒYþú¸.+5>G/²&+²+± D33´++°,2²+´+°/´@++° /±é°8/± é°H/°(Ö´#+°#±+´+² +³@ +°±+´=&+°=±6+´1<+³G16+´+°/´G+°1±,+´ 1+°2° ´B+°B/±I+±#²%&999°°9±=±5899°G± 99°1³/?E$9°,²@D999± B° 9±&@³BF$9±°%9° ´#(=$9°±1699± 8°/901235! #"'&547!5654'&#"&547654'4#"62654&".\y«!!//ˆ//!ýÜH)'<9SF!m@B�ž=25ZnG9&-Ô;N98P9ztYH"¸3þÓþÿ,7B1001B7,$ e8'&J7U%<9}T<=þÇÀÊd9RWC+j29j´…þk9'(89NYþÔ¸.(19EUB²$+°@3²+° 3´++°)2²+´+°/´F++°N/´:+°/±é°4/± é°V/°&Ö´!+°!±+´+² +³@ +°±+´8&+°8±+´S+°S±2+´.<+°.±=+´K+°K±)+´ 1+°2° ´I+°I/±W+±!²#$999°°9±8°19°S±499°2± P99°.¶,:@CFN$9± I° 9±$:·=CIKQS$9±°#9°´!&8$9°±.299± 4°,901235! ##"&547!5654&#"&54654'4#"62654&#"2654'#"&'.\y«,,jJIk,ýõHR:9SF!m�Žž=xInGEGÔO##""/D9)(9DztYH"¸3þÓþÿ4CJklIE2$ e8MJ7U%<9}SzþÇÀÊdN 7+j|Y´…þµ#! "pC/ *=9'.DYÿ¸..7?K²*+²+´++°/2²+´+°/´@++°F/´++°$/±é°:/± é°L/°,Ö´'+°'±!+´+²! +³@! +°±+´>&+°>±+´I1+°I±8+´4<+°4±/+°2´ 1+±M+±!'²)*999°°9±8I´ 7:F$9°4²2@999°/±C99±F@³CI$9±°)9°$´!',>$9°±4899± :°2901235! #".54>326=!5654&#"&54654'4#"62654&#".\y«‰p3]E5J)?sýHR:9SF!m�Žž=xInGEGÔ":T)!8OztYH"¸3þÓþûqŠ:( .,%+D$ e8MJ7U%<9}SzþÇÀÊdN 7+j|Y´…þsWÿ&.2;õ²7+²++´++²++´,+²++´)+°/´7+°1/±é°$/´ 7+°54&"!5654&#"&546Ô\x¬Ažy}£Z¤×…ýƒr5^0s»‘Ox°mD0þ]GS98SDoƒzsZJ N…yŸÂ‡v¯h2ñ•†*q€þU+X–dcšvZH‰2$ e8MK6T&<9}SzWþu.2EOH²A+²5+´++²5+´6+²5+´3+°/´G++°/´&7+°;/±é°./´ 7+°P/°Ö´$+°$±C+´>+°>±8+´+²8 +³@85 +°±+´0<+°0±+´N+°N±++´1+°I Ö´+±Q+±C$°!9°>°"9°8²@A999°°9°±&99°0°9°².34999°N± 99°I²-999±G³IN$9°&°9°A²KL999±3°@9°;@ $+08>C$9± .°"90123&54632#"&547# 47!2>54&"!5654&#"&5462654&"Ô\x¬Ažy}£�.?`CB`yŸý’r5^!t¿—Sx°mD0þ]GS98SDoƒÐN97R7zsZJ N…yŸÂ‡ÃqT6C_`B!ñ•†*q€þU+X–dcšvZH‰2$ e8MK6T&<9}Szý=9')77)'WþK.2DP`f²@+²5+´++²5+´6+²5+´3+°/´Q++°Y/´E+°/´&7+°;/±é°./´ 7+°a/°Ö´$+°$±B+´=+°=±8+´+²8 +³@85 +°±+´0<+°0±+´^+°^±H+´V+°V±++°T2´1+´+±b+±B$°!9°=°"9°8²?@999°°9°±&99°0°9±^³.34$9°Hµ -NQY$9°V°9±E³T^$9°&´HNV\$9°@±K99±3°?9°;@ $+08=B$9± .°"90123&54632#"&547# 47!2>54&"!5654&"&5462654&#"2654'#"&'Ô[y¬Ažy}£Œ2FjKIk l�ý’r5^!t¿—Sx°mD0þ]GSrRDoƒä"#!!/D9*(9 CzsZJ N…yŸÂ‡Êr];KijJ$ñ•†*q€þU*Y–dcšvZH‰2$ e8MJ7T&<9}Szýƒ""!!pC/!*=9'.DYþ„{..T^S²N+°53´A+°H/°;3´U+°/2°)/´+´*+´'+°/´ C+°!/´7+°_/°Ö´+°±K+´\+³\K+´,+°,/´+², +³@,) +°\±+´$1+°$±X+´E+°E±>+´S+°S±+°22´<+´7+±`+±,² 999°°9±$³HUZ$9°X°C9°E±AN99°>±('99°S±!99°´45;$9±AU¶27>EKRZ$9°N°49°)±99±'±99°·$,$901"&546323&54632'654&#"!5654&2654'7#"&=4#"#"&54632!2654'-9SF!m�T\y­A¡wsž´!‚kSVrD1þ]HRg$2Z$s!%J>MpNG;/´\+°O/´f+°/2°f´a++°)/´+´*+´'+°/´ C+°!/´7+°p/°Ö´+°±R+´m+³mR+´,+°,/´+², +³@,) +°m±+´$1+°$±i+´L+°L±E+´Z+°Z°c Ö´A+°A/´c+°Z±+±2^22´<+´7+´;+±q+±,² 999°°9±$³Ofk$9°i°J9°L±HU99°E±('99±ZA±!99°c°C9°@ /459>\`$9±a\±A;99±fO±9C99°H¶27ELRYk$9°U°49°)±99±'±99°·$,$901"&546323&54632'654&#"!5654&2654'7#"&547&=4#"#"&54632264&"%2654'-9SF!m�T\y­A¡wsž´!‚kSVrD1þ]HRg$2Z$s>=J32K+KpNG;/´b+°j/´`+°\/´/+°r2°)/´+´*+´'+°/´ C+°!/´7+°|/°Ö´+°±Q+´y+³yQ+´,+°,/´+², +³@,) +°y±+´$1+°$±u+´L+°L±E+´X+°o2°X´A+°A/°X±+°22´<+³g+´Z+°Z/´g+°´7+°7°; Ö´e+°e/´;+±}+±,² 999°°9±y°O9°$²rw999°u±JN99°L±HT99°E±('99±XA±!99°Z@ /5>C4^bj$9°°99±\`·A;ONegmo$9°/±9C99°H¶27ELQWw$9°T°49°)±99±'±99°·$,$901"&546323&54632'654&#"!5654&2654'7#"&547&=4#""&546324#"322654'#"&'%2654'-9SF!m�T\y­A¡wsž´!‚kSVrD1þ]HRg%1Z$s=GR89S6EpNGvDx]Ek…+..+*$4*!- 4þÆ%R5%6I6T":4|RvpXG N€vš¥uÃH;9™WzsVG….!c7KýŠT/c6'=Šj1)Q8RR8E*']7uB[D_bF]wT>:tm++-U2$".,$2ïC&a3T&9Vþ*Ê/EQ]$²+´)++°/´R++°$/±X33´++°C/´F++°//±0é°L/´=7+°7/´7+°^/°Ö±Oé°2°O´'&+°'/°O±!+´[+°[°@ Ö±Ié°I/±@é°[±3+±,U22´<+° 2´+°2²3 +³@30 +±_+±O'°;9°I³)=C$9±@!±#799°[°9°3²*999°± 99±$R±!99±°'9±FC±, 99±0/´ @IO$9±=L²3;999014632#!"3!##"&547#"&543!254+53254'&#"632#"&2654&#"2654&#"V¶‘nQkFI-1Rþù&99&§&#/.FB_!ŽDZ¡ÿoZ((W[BIXBH,?>XZBPZ¨*+! ,-8(87)(89%€Š$0_O [<+0&@%C,8B10aB9+I?ˆVSJH:',M8U=?Mm*)!*(!+ýÉ8()78('9VþÊ/COZj;²+´(++°/´[++°c/´Q+°#/±V33´++°A/´D++°./±/é°J/´;7+°6/´7+°k/°Ö±Mé°2°M´&&+°&/°M± +´h+³ G+±>é°h±S+´`+°`±++±2^22´ <+°2´+°2²+ +³@+/ +±l+±M&°99°G³(;A$9±h ±"699±S>·)Y[cf$9±+± 99±#Qµ ^`fh$9±°&9±DA±+ 99±/.´ >GM$9±;J²29999014632#!"3!##"&547#"&543!254+53254.#"632#"&2654&#"2654&#"2654'#"&'V¶‘L‚\FIgIþù&99&§.+iKIl,tDZ¡ÿoZ((WOd3]†,?>XZBPZ¨*+! ,. 0#$"Ö±‰é°P2°‰´ &+° /°‰±ƒ+±8é°8±%+°,2´I<+°E2°I±+°V2±}é´&+°i2² +³@ +°}±w+´n<+°n±[+°b2´ <+°2±�+±‰ °39°ƒ³"5M;$9°8°09°%³#(AL$9°I°G9±²T999±w}³Xkq$9°n°f9°[³Y^$9° ° 9±S°9°M± V99±€;³% I[$9±)(@ 8>Gnw}ƒ‰$9±5†µ,3Ebi$9014632#!"3!!"'!"&543!254+53254.#"632#"&54632#!"3!&543!254+53254.#"632#"&2654&#"!2654&#"î¹�I„^GI.3Oþß%88%Àþ5K.ýøEY¡ÿoZ((WOd3]†*A>XZBPZ¸�Jƒ]FIhHþù&99&ç nY++VNe2]‡,?>WZBPZ©+,! -.ý‰*+! ,-%Ž&U;O [:,0( %D++H@‹TSJH$2WI8U=?MmW€�%V;O [BT'!%'‹TSJH#3WI8T>?Mm**!*)!+)!*(!+Vþ&c2��˜¤βZ+°3´-++°e2°/´Ž++°(/±#33´`++°2°`±“é°G/°3´™++°‚2°3/°j3±4é°l2°Ÿ/°ˆ3´A7+°y2°;/°s3±Né°2°¥/°JÖ±¢é°]2°¢´+&+°+/°¢±œ+±Dé°D±0+°72´V<+°R2°V±+°c2±‹é´&+°w2°‹±!+´–+°–°| Ö´…<+°…/´|<+°–±h+°o2´ <+°2°‘ Ö´+²‘ +³@ +±¦+±¢+°?9°œ³-AZG$9°D°;9°0³.3NY$9°V°T9±²&'a999±…‹³ey$9±|!±#s99°–°9°‘´flk$9±h± 99±“ޱ!99±`(°&9°Z±+c99±™G³0 Vh$9±43@ DJT|…‹œ¢$9±AŸµ7?Row$9014632#!"3!##"&547#"'!"&543!254+53254'&#"632#"&547632#!"3!&543!254+53254'&#"632#"&2654&#"264&#"2654&#"î¹�lRmGI.3Oþß%88%À1%aCB_$žK.ýøEY¡ÿoZ((W[BIXBH*A>XZBPZdX‹mRkFIhHþù&99&ç nY++V\AHXBI,?>WZBPZ©+,! -.-)77)'88üƒ*+! ,-%Ž'0_O [:,0( %D,;C`aB:-++H@‹TSJH:',M8U=?MmW†FA'0_O [BT'!%'‹TSJH9'+N8T>?Mm**!*)!+ýÅ7R78('9;)!*(!+Vþc2|ˆ‘¡­ѲW+°3´,++°b2°/´’++°š/´Š+°'/²"Ž333´]++°2°E/°z3´¢++°}2°2/°g3±3é°i2°¨/°ƒ3´?7+°t2°:/°p3±Ké°2°®/°HÖ±«é°Z2°«´*&+°*/°«±¥+±Bé°B±/+°62´S<+°O2°S±+°`2±†é´&+°s2°†± +´Ÿ+°w2°Ÿ´€<+°€/°Ÿ±Œ+´—+°—±e+±l•22´ <+°2´+°2±¯+±«*°=9°¥³,?WE$9°B°:9°/³-2KV$9°S°Q9±²%&^999±€†´btuz$9±Ÿ ±"p99°Œ@ cih�’š�$9±e± 99±'е •—�Ÿ$9°]°%9°W±*`99±¢E³/ Se$9±32@ BHQw€†¥«$9±?¨µ6=Ols$9014632#!"3!##"&547#"'!"&543!254+53254.#"632#"&54632#!"3!&543!254+53254.#"62#"&2654&#"264&#"2654'#"&'2654&#"î¹�I„^GIiGþß%88%À+-jJIl.’K.ýøEY¡ÿoZ((WOd3]†*A>XZBPZ¸�Jƒ]FIhHþù&99&ç nY++VNe2]‡,~VZBPZ©+,!..0""!?Mm*)!*)!+þ"0!!0’D. *=9'.D])!*(!+Yÿ�37ALì°/´B++°$/´17+°8/´7+°M/°(Ö´-+°-±5+´;<+° Ö´J+°;± +´ 1+° ±?+´&+³?+´E+°E/´+±N+±-(°9°²*+999°5°9°J°9°;³"1$3$9° °H9° µ =BG$9°E±899±$B¶  G$9°1°9°8³(5=$9°°+9012#"'&547&'732654'#"'&547327&546"654&2654&"ÔP]38b 6J//EC/0V++0?\mJ)*\X'IJGjG=.L: l,9ý^8')77)'8Zþì�32<HX%°/´I++°Q/´=+° /´+7+°3/´7+°Y/°#Ö´(+°(±0+°2´6<+° Ö´V+°6°F Ö´T+°T/´F+°6±+´1+°±@+´N+°N±:+´&+°L Ö´ +±Z+±(#°9°²%&999±V0² +999°T°.9°6°9°°9±F¶ 8=CIQ$9°@±399°N°9± =@  CLNTV$9°+°9°3´#(08$9°°&9012"&547&'732654'#"&5473263&546"654&2654&#"2654'#"&'ÔQ\yTFck”j\/+09(.CGþˆƒ2)OYahqh²K+´[+°@/±/<33´i+±4g22°n/±8c33´F+±*^22° /´++°/´"++°P/´++°r/°Ö´+°C Ö´p+°±m+°G2´e+°]2°e±' +´S<+°S±b+°_2´:+°N2°:° Ö´1+°/´1+°:±W+´&+°-2°´6+°6/±s+±p° 9°m³@i$9°e±>99°S@  "%C$9±³ $9°"°9°P´'U$9°°9012#"'732654'#"&5473263&5462#"'53254+#"'#"&546;54632"654&"3545#32'265'#"ÔO`|S_>m3,/>!3a‹[3GWF 2o~6Fj ,ž3�@(��IGöJ.]OJd3 6DO6B uZgF''ZBOGEFbý@;3x5B7 ¤AAB32? 9LM8 |9-I6 e+5ýß0# "l q C7BPþˆƒ2)3cls|¯°U/±=Q33´t+°r2´B+°G/´H+°y/±Mn33´Z+±4h22°d/´_+° /´++°/´"++°*/´++°}/°Ö´+°X Ö´{+°±x+°[2´p+°g2³'px+´-<+°p±m+°i2´O+°b2³Om+´1+°/´1+°O±1+´&+±7:22²1 +³@1G +°´K+°K/°´D+°D/±~+±{° 9°x´Ut$9°'°S9±-p· "%dr$9°±Q_99°m°/9°°9°O²*?999°1²=@B999±D°99±BU²;?S999±Gt²D@W999°H²:9{999°y±7X99±³ $9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&2#"'73254+53254'##"'#"&46;54632'"354&5#32#265'#"ÔO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3#$93#% **8 ƒJ:07D4L=8H† (‘))‘JGøL.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5ý„&& @'.1 ¤..Bf> ;KN8 [/# !/šq#C8A'ýúž2)3lsz‚±°B/´N+°b/°^3´‚+°w2³U‚b+´V+°/±[y33´i++±7r22°p/´4+°G2° /´++°/´"++°*/´++°ƒ/°EÖ´J+°J± +´+³f+° 3´�+°±{+²'j~222´t+°r2´-<+°t±+´1+°±y+°m2´\+°72°\±R+°Y2´>+°:2²R> +³@RU +°>° Ö´1&+°1/´&+±„+±f°G9°�²H999°{±b99°tµ "%`$9°-°9±·/4BN^pw$9±\y±*99±R°<9±Ub²>R`999±V‚±<{99°³EJ:f$9±4p°H9±³ $9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&232#"&54732>54+53254+#"'#"'&546;>4&#"3327#4&5#"2ÔO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3p7Gw! XvD³±f VfI‹/ZI%$:{9#3+A1Cv#=}}!=}<AR.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5þX;\./2E„�‹])E€†8%-!&7&°//%&,2H=U�.RE*EsC5rþ�¨2)3]dlr|™°R/±IN33´{+°c2°w/±`m33´W+±Ai22°e/°?3´Z+°42° /´++°/´"++°*/´++°}/°UÖ´y+°y±+´+°±v+°W2´o+°h2°o±'+´-<+³r-'+°j3´b+°-±+´1+°±^+´F+°F±<+´7+³7<+´1&+°1/´&+±~+±² R{999±ov²P999°'°9°r· "%NZe$9°-°9°°L9°b±/\99°³ADI$9°^±*99°F±4?99°1°:9°<°99±{R°:9°w³FPUL$9°W±<799°e°\9±³ $9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&2'654&#"3232#"&'#"'#"&547>3264+2"354#254&5#"32ÔO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3 S^ZC>8Ip71&GC5-2†<9S&ABXÓ$‚‚‚º@+'.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5þnX}?$/ij999°²bg999°x±*99°d±]@99°1±MN99°R±KP99±H°F9±‘4°M9°U@ 7HRNdjnx‰�$9±V�°F9±p9²>DZ999±³ $9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&"&547>32632#"'53254+532654&#"3232#"&'#"'"3544'&#32'5#32'4&5#"32ÔO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3þ‚+0ƒ=7M)Z<-;##1'-* A,i m61&?Bl$Œ+,*Œ@?µ?,%.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5ü™I3r@UGG B>?*: :.95 $Wt6F,G==G/ OË$ noq657AýüÊ2)3u{ƒ‰“ô°A/´K+°l/±dh33´’+±‚ˆ22°Ž/±~„33´q++±\z22³SqŽ+´R+°X/°x3´7+±Ft22° /´++°/´"++°*/´++°”/°DÖ´I+°I±+°o2´+´�+°±Š+°q2´†+°z2°†±'+´-<+°-±„+°v2´�+±\22° Ö´1+°�±|+´a+°a±O+°V2´?+°;2²O? +³@OS +³?O+´1&+°1/´&+±•+±I°F9°�°G9°° 9°Š³l’$9°†±j99±-'@  "%htxˆ$9°„±AK99±�±4/99°²_d999°|±*99°a±X799±?°=9±’l²?fj999°RµOao|Š�$9°Ž±=�99±qS±ID99°X²;V4999°7°G9±³ $9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&>32!"&547!27654+53254#"3232#"'#"'#"&547>324#"34+2'#32'4&5#"32òO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3jL(/(6 þļ¸<$3DZEl"T%)c2,1 96,(.v73E 83n€> J€n86£ 7$ .]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5ýÖ)#BLCÁ›®b]'MKþî&S:@>G+r4G??66J1q=S�LOt2ckl302<Wþèƒ2)3Q%°B/´C+°=2°J/´7+° /´++°/´"++°*/´++°R/°Ö´+°±4+´M+°M±'+´-<+°-±G+´;+²G; +³@GB +°;° Ö´1+°/´1+°;±>+°12´A+´&+±S+±° 9°4±99°M±P99±-'@  "%7JO$9±G²/=999±>;±*99±JC²;4P999±µ ?@$9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&463233!532654&#"&ÔO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3þÐN52&$uBþÙ+&' D.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5ýy4I$#4-8þ’6,"#Wþƒ2)3\fc°G/´]+°M/´N+°=2°U/´7+° /´++°/´"++°*/´++°g/°Ö´+°±4+´X+°X±'+´-<+°-±J+°2´d+²Jd +³@JM +°J´1+°R Ö´;+°d±>+°12´A+°D2´&+°A´`+°`/±h+±° 9°4±99°X±[99±-'@  "%7UZ$9±dR±/L99°±=99±>;µ*G]ab$9±A`°B9±M]³DJAa$9°N°B9°U²;4[999±µ ?@$9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&463233##"&547!532654&#"&264&"ÔO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3þÐN52&$uBJ32KþÜÙ,&' D&,,<++.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5ýy4I$#4/;þ’$-3JK2/"3/"#ý*<-,*Wýýƒ2)3[cs¦°F/´d+°l/´b+°L/°@3´M+°<2°M´^+°T/´7+° /´++°/´"++°*/´++°t/°Ö´+°±4+´W+°W±'+´-<+³I-'+´q+²Iq +³@IL +°-±Q+´:+°:° Ö´1+°/´1+°:±=+°12´@+°C2³i@=+´\+°\/´i+°=´&+°@´g+°g/±u+±° 9°4±99°W±Z99±I'· "%7TY$9°-°9±q°K9°´/<`n$9±\:¶*F^bdl$9±@g°A9±^bµICgioq$9±TM²:4Z999±µ >?$9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&463233##"&547!532654&#"&4#"322654'#"&'ÔO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3þÐN53IuB$&S89R&þîÙ+&' DC,--,+$4 +!, 5.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5ýy4IH3/;þ’)78SS87)3/"#™++-V4$".,$4Wþ„ƒ2)3]fp²@+°D3´4+°P2°W/´^+° /´++°/´"++°*/´++°g/°<Ö´7+°7° Ö´+°/´+°7±Z+´e+°' Ö´-<+°e±a+´T+³Ta+´1+°/´1+°T±M+´H+°H³H+´1&+°1/´&+±h+±<° 9±Z7´9:$9±e'³ 4@$9°-´"%\$9°²W^c999°a²/BR999°±P99°T²*D999°1±JK99±^W±K999°4¶7m3,/>!3a‹[3GWF 2oP/>,ž3å3BD$Y-6[3:P0+Z#EG3=D78@@ D ?=.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5ýÚQ9Y5(BzH8??7IzB)4Y6T7i8\V>c:þ8%O5+Y]Wýý�2)3nv™²k+°43´_+°Q2°C/´@+°+°±'+´-<+³s-'+´[+°[/´s+°-±o+´U+³Uo+´1+°/´1+°U±N+´7+°7° Ö´1&+°1/´&+±x+±F° 9±[>¶<Ide$9±s'³ _k$9°-´"%]$9°³Xmqu$9°o°/9°±S99°Uµ*4;JQ$9±7±AB99±<@°F9±uX°d9°_·7SN[Ubgq$9±³ $9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&2+"3!!"&546;27654&#"#"&547&#"&54763264'32ÔO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3'Pd57Pö66ªþN-??-õ;(&F8 7R0 <@@<.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5þfQZ24'-57+*5#"D9G6A9JI:?981J +.jN+$±8&*4MWýÿŒ2)3t|ѲF+°J3´;+°n2°Z/´W+°S/´`+°4/´{+°g/´h+° /´++°/´"++°*/´++°}/°BÖ°2´=+°] Ö´U+°2°=±'+´-<+³y-'+´7+°7/´y+°-±u+´r+°r° Ö´1+°/´1+°r±c+°l2´P+°L2°P° Ö´1&+°1/´&+°X2²1 +³@1g +±~+±=]° 9±7U¶?@S`$9°'°F9°y² ;999°-´"%9$9°³4Hw{$9°u°/9°±p99°r²*J999°1²Ran999±c°N9±SW°]9±4`°@9°{²?Pc999±hg´7Nruy$9°;¶9=BLlpw$9°F°H9±³ $9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&"&547&#"&547632632#!"3!!"&5463!254&+532654#"74'32ÔO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3–5>> •G`=7L:$(C©++ŒþÓ88°þG-?@,-Y !_(4D6A:=.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5üæF7G2hJ!+0iJ-&k@:h(-47*)70:;:=7F}6*%;Gþl$2)3{ƒ‹Á²@+²DHL333´4++²Xeo222°^/±iu33´‚+°Š2° /´++°/´"++°*/´++°Œ/°<Ö´7+°7±x+´ˆ+° Ö´+°ˆ±„+´r+°r±j+´i+°-2°i´'<+°'/°i±a+´€+°€³€+´1+°/´1+°€±|+´[+°1 Ö´&+°[±U+´P+±�+±x7±9:99±ˆ²4@z999°° 9°„µBu†Š$9°r²Dp999±j'± 99°i´"%F$9±€a´/Hce$9±|µ*J^~‚$9°1°Y9°[°L9°°S9°U°R9±‚^±S999°4@ 7m3,/>!3a‹[3GWF 2oP/>,ž3þY,84%E(.Q'7>L*/F)&F#2:,08.232 *</7.243 ·//0.þ¶1.0/.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5ýÎW5g,-:‹M:A77A9N‰<.,f5W-þù;mm3,/>!3a‹[3GWF 2oP/>,ž3þ•&/9#N"+M3BP$3C'($,[þ%))|ý~)44)Øz5*&6)+3( '@,'6)+3(¥())(þ¸(()'.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5ýÒ?*M#09k>.92289KT8B& =4)+8�2L,K1QO3L+&ÃÃ%-I1PN3J,w-+$4EF.)$3D ýìú2)3”œ¤3²@+²DHL333´4+²p~‡222°]/´Z+°U/´d+°w/±‚Ž33´›+°£2°j/´k++° /´++°/´"++°*/´++°¥/°`Ö°<2´X+°72°X±+´+°°¡ Ö´‘+°‘/´¡+°±�+´‹+°‹±ƒ+´‚+³-‚ƒ+´'<+°'/´-<+³‚ƒ+´1+°‚±z+´™+°™±•+°12´t+´&+°t±g+°n2´R+°N2²gR +³@gj +±¦+±X°:9°‘²9Vc999°² 4“999°¡°@9°�´BŽ$9°'²D‡‰999°‹°9°ƒ³ "%$9°-°9°°F9±z‚°/9°°9°™´*H|~$9°•±Jw99°t²Lpr999°°d9°g°U9°R²P[\999±UZ°`9±wd°:9°›²Rg9999±kj@ <7Ptz‹‘•™�¡$9°4¶Nr|‰“—Ÿ$9°@²BFJ999±³ $9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&"&547632632632632#"3!!"&5463!2654+53254#"#"&547&#"#54&#"#"&547&4'32%4'32èO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3þ‘%-.F!)I!1BD)2‹4-ýê))sý‡)05(  ["3'(2&'8.#4&)1&›$*(&þÅ&((&.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5ýÕA+Q%*;i=0933q964I%$;4+)9**A/51G0TS1I/)¿¿+-K/VR3D4z;"";FF;#"?D$9±³ $9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&2632'654&#"#54&#"&5476ÔO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3ü%; RO\y X=2%C*1:\'w/..]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5þ&DnLŠ93)l4C0ææ/H4j'29ˆL87Wþ†ƒ2)3\iz²Y+°43´M+°E2²MY +³@MI +°:/°S3´`+´BfIY +´B+° /´++°/´"++°*/´++°j/°UÖ´P+°2°P´+°/°P±I+´H+°H°- Ö´'<+°'/´-<+°H±>+´]+°]° Ö´1+°/´1+°]±b+´7+°2°7´1&+°1/±k+±PU° 9°'¶MRSY$9°I²" 999°-³%[$9±>°/9°²4E999±1]µ*:C`f$9°b°d9±`:°R9°f³7PU>$9±YM°[9±³ $9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&2#"'&54763&#"#54&#"&54763263254'&#"ÔO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3:PjD;4!8 4V6&*5Hf**FD"VD(.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5þuSHg,(38)2"Nâå-L0c*4:…M77:9ë1f ýö¢2)3kwв7+°;3´d+°\2°D/´I+°S/°j3´o+° /´++°/´"++°*/´++°x/°4Ö´g+°g±+´+°i2°±`+´_+³'_`+´-<+°_±V+´l+° Ö´1+°l±q+´Q+°Q±L+´@+³@L+´1&+°1/´&+±y+±± j99°`´7d$9°'°99°_± 99°V²"%999°-°9±l³/;F\$9°±G99°q·*DISZou$9°Q±=O99±ID°F9°S°G9°o²_`i999°d@ =@L4QVOgu$9°7°99±³ $9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&4632632#"'732654&'#"&54767&#"#54&#"&%3254'&#"ÔO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3þWF@#Ft FH23O2/"%:I' k/80;P6(+8Ge~8"+.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5ýXNp22R nWbBD#4hC.O! ¤U7820Méé -L1f,4=P2\3%?þ�¶2)3bR°P/±?H33´[++±4_22²P[ +³@PK +°C2° /´++°/´"++°*/´++°c/°XÖ´S+°S±+´+°±L+´K+³'KL+´-<+°K±D+´C+°C° Ö´1+°/´1+°C±<+´7+³7<+´1&+°1/°:3´&+±d+±² UV999°L´P[$9°'°]9±-K· "%H_$9±D°/9°±a99°C±*99°1±4?99°<°99±[P±]a99±³ $9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&2'654&#"#54&#"#54&#"&546326326ÞO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3DTc>6+ :'=:&*3CaTE8"";;"".]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5þpL�98&m0F2éé,Jéé.I0i(59‹Mq3333!þwÇ2)3it†²b+±4f33´W++±EN22²Wb +³@WS +°I2°:/´o++´AjSb +´A++° /´++°/´"++°*/´++°u/°_Ö´Z+³Z_+´+°\2°Z±S+´R+³'RS+´-<+°R±J+´I+°2°I´1+°/°I±=+´m+°m±1+´&+°±q+´7+±v+±Z± ]99°S´Wb$9°'°d9±-R· "%Nf$9±J°/9°I±h99°=±*99°m±4E99±1´:ACjo$9°q°s9±o:°\9°j³7Z_=$9±bW±dh99±³ $9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&2#"&54>323&#"#54&#"#54&#"&546326326"3254'&ÔO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3K`=3-41"$#26"8"&-D _MB5 #2<*‚+: .]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5þ{TCqO5(H3,"ëë//ëë1L0l'69�Nt5555 3McýÃÓ2)3xƒ°²7+±;?33±qé±`i22²q7 +³@qm +°d2°I/´N+°X/°w3´|++° /´++°/´"++°*/´++°„/°4Ö´t+°t±+´+°±m+´l+°l±e+´d+³-de+´'<+°'/´-<+°e° Ö´1+°d±[+´y+°y±~+´V+³~1+´&+°V±R+´E+±…+±´ 7qvw$9°m±99°l±999±e'¶ "%;i$9°-°9±d±/=99°[°9±y´*?K`$9°1¶ILNX^|€$9±V~±AT99±NI°K9°X°L9°|°v9°q@ AER4V[^Tt€$9°7±9=99±³ $9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&4632632632#"'732>54'#"&5467&#"#54&#"#54&#"&%3254'#"ÞO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3þG@0867e;!I/-' 0.[*.,("(737$)B[å) ".]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5ýBQ2233X A@T:sS'=$@T)u$ ´`;>e 0þþ0Nþþ1P0x%/´9+°D/´4+° /´++°;2°/´"++°*/´++°O/°Ö´+°°G Ö´L+°L/´G+°±'+´-<+³A-'+´7+²A7 +³@A> +°-±+´1+°±:+°12´=+´&+±P+±L° 9°G°9°'µ4DIJ$9°A´ "%$9°-°9±7±/999°°9°:±*99±9>±?I99°D³7AGL$9±³ $9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&233!5654&#"&546ÔO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3ù>U§Aþº23"!31QX.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5ýùL;-þ™"4!..02'S7PWþƒ2)3Ydo°C/´Z+°H/°=3´9+°O/´4+° /´++°;2°/´"++°*/´++°e/°Ö´+°°R Ö´W+°W/´R+°±'+´-<+³L-'+´7+²L7 +³@LI +°-±F+°2´b+°2´1+°b±:+°12´=+°@2´&+°=´]+°]/±f+±W° 9°R°9°'µ4OTU$9°L´ "%$9°-°9±7F²/9H999±:µ*CZ_`$9±=]°>9±HZ³@FU_$9°9±JT99°O³7LRW$9±³ $9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&233##"&547#5654&#"&5462654&"ÔO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3ù>U§AJ32Km23"!31QX+*+<+*.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5ýùL;-þ™"-2KK2-""4!.,02'S7Pþm*,,*Wýýƒ2)3Yaq°°C/´b+°j/´`+°\/´:++°O/´4+° /´++°;2°/´"++°*/´++°r/°Ö´+°°R Ö´W+°W/´R+°±'+´-<+³L-'+´7+°o2°7´F+°F/²F7 +³@FI +°L° Ö´1+°-±:+°12´=+³g=:+´Z+°Z/´g+°:´&+°=°@ Ö´e+°e/´@+±s+±W° 9°R°9°'µ4OTU$9°L´ "%$9±-F°9±7²/9H999°³^lm$9°Z¶*C\`bj$9±=e°>9±\`µF@egmo$9°:µ=>HJTU$9°O³7LRW$9±³ $9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&233##"&547#5654&#"&5464#"322654'#"&'ÔO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3ù>U§A%Q9:Q%^23"!31QXK,--,+%2 +!, 5.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5ýùL;/þ™(89RQ:8("4!.,02'S7PþÐ++-V3%".,$4Wþ�ƒ2)3:BJ"²9+´C++°6/´A+° /´++°/´"++°*/´++°K/°Ö´+°±6+´G+°G±'+´-<+°A2°-±I+´?+°?° Ö´1+°/´1+°?±B+´5+³15B+´&+±L+±° 9°6±99°G°9±-'¶ "%C$9±I°99°²/=999±B?±*99±CA±?G99°9°=9±³ $9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&!54324'3'"654ÔO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3Aþ“¹´=Mdš�+,€.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5ýPª§ÉÆl"&]W÷M8kVZ@WýÃ2)3EMVbq²=+´P++°4/´W+°]/´M+° /´++°/´"++°*/´++°c/°Ö´+°±:+´U+³'U:+´-<+°U±7+´`+°`±N+´J+°J° Ö´1+°/°93´1+°H2°J±M+´@+°C2°@´Z+°Z/³1@M+´&+±d+±° 9°:²999±7U´ "%$9°-°9°°P9°`°L9°N±=/99°°9°J´*4W]$9±@1°A9±]W±C799°M³:@A9$9°P±JU99°=°H9±³ $9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&"&547#5432#4'3'4#"62654&#"ÔO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3,2K‘¹´I Mdšu)"6++++.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5ûÙK2-#§Éƪ".3Jwl (]W·@%CkUþÔ*,-+Wý¦ƒ2)3EMU]m˜²=+´N++°4/´^+°f/´\+°X/´M+° /´++°/´"++°*/´++°n/°Ö´+°±:+´R+³'R:+´-<+°R±7+´k+°k±T+´J+³JT+´1+°/°93´1+°J±M+´@+°C2³c@M+´V+°V/´c+°@´a+°a/°M°1 Ö´&+±o+±° 9°:²999±R'± 99°7²"%999°-°9±Tkµ=/NLZh$9°°9°J·*4HX\^f$9±@a°A9±X\µC7acik$9°M³:@A9$9°N±JR99°=°H9±³ $9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&"&547#5432#4'3'"6544#"322654'#"&'ÔO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3&9S&ƒ¹´ &SMdš�,+€W+..+*%2 *!- 5.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5û¼R87)§Éƪ)78R”l"&]W÷M8kVZ@þ�,,-V2%".,$3Wþˆƒ2)3MB²;+³;5+´D+°>/´9+° /´++°/´"++°*/´++°N/°Ö´+°°G Ö´L+°L/´G+°±'+´-<+°-±A+´7+³7A+´1+°/´1+°92² +³@> +°7±:+´=+°2°=´1&+°1/±O+±L° 9°G°9°'´4IJ$9°-¶ "%D$9±A±/599°°9°7±*99±9>±?I99°D³7AGL$9±³ $9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&233!5654&#"&54ÔO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3þã¢i*wCþßSJ87G`~.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5þlRM),þ—1-T7JL8a"46‚QWýÃ2)3Xb ²;+³;5+´O+°C/´Y+°^/°U3´:++° /´++°/´"++°*/´++°c/°Ö´+°°R Ö´W+°W/´R+°±'+´-<+°-±L+´7+³`7L+´F+°F/´`+²F` +³@FI +°`³`+´1+°/´1+°92°7±:+´=+±@22°=´1&+°1/°=´\+°\/±d+±W° 9°R°9°'´4TU$9°-¶ "%O$9±F°59°L±/H99°`°9±7²*^999°1²CY]999±=\°>9±^Y±F@99°:´=>HJT$9°O³7LRW$9±³ $9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&233##"&547#5654&#"&54264&"ÔO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3þã¢i*wCJ32KFSJ87G`~�,,<++.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5þlRM),þ—$,3JK2-#1-T7JL8a"46‚Qþg*<-,*Wý§Œ2)3W_o´²;+³;5+´O+°C/´`+°h/´^+°Z/°T3´9++° /´++°/´"++°*/´++°p/°Ö´+°°Q Ö´V+°V/´Q+°±'+´-<+°-±F+°2´m+²Fm +³@FI +°F´1+°92°m±L+´7+°7±:+´=+°2°=´1&+°1/°X Ö´e+°=°@ Ö´c+°c/´@+±q+±V° 9°Q°9°'µ4OST$9°-¶ "%N$9±mF²/5H999°L°k9°±j99°7²*\999°X´CZ^`h$9±=c°>9±Z^µF@cekm$9°9´=>HJS$9°O³7LQV$9±³ $9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&233##"&547#5654&"&544#"322654'#"&'ÔO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3þã¢i*wC%S89S%:SKnG`~µ+..+*$4*!, 5.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5þmQM),þ—(68SR96(1-T7JL8a"46‚RþË,,-V4$".,$4#þ}Ô2)3_c°C/´:++°P/°I3´\++°42²P\ +³@PM +° /´++°/´"++°*/´++°`/°XÖ´S+°S±+´+°±M+´L+³'LM+´-<+°L±F+´8+³8F+´1+°/´1+°8±1+´&+°±< +´A+±a+±² UV999°M´P\$9°'°^9°L°9°-¶ "%4I$9±F°/9°°9°8±*99°1²:>C999°°?9±:C°U9°Pµ7^99° °?9±³ $9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&23254'7#"&=4#"#54#"&5476326èO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3£BPBOT$mŒBEJ:CG',L#f%(FJ.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5þYEBa„b,3=…ÈeN9VOëëOM0g+7AˆM7=99#ý½Ô2)3hv¤°H/´i+°p/´:++°Y/°R3´e++°42²Ye +³@YV +° /´++°/´"++°*/´++°w/°aÖ´\+°\±+´+°±V+´U+³'UV+´-<+°U±O+´8+°t2³8O+´1+°/´1+°8´K+°K/°8±1+´&+°C2°±< +°l2´A+´E+±x+±² ^_999°V´Ye$9°'°g9°U°9°-¶ "%4R$9±O°/9°K°9±8²*M999°1³:>pr$9°³?Hin$9±pi´KE_lt$9°:²CM^999°Yµ7g99° °?9±³ $9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&23254'7#"&547&=4#"#54#"&54763262654'#"'èO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3£BPBOT$m;0K32K.;J:CG',L#f%(FJ-:  7*.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5þYEBa„b,3=…{1%>3JK2:&/k9VOëëOM0g+7AˆM7=99ýë*<  <*#ý�Û2)3hp€Ò°H/´q+°y/´o+°k/°_3´:7+°Y/°R3´e++°42²Ye +³@YV +° /´++°/´"++°*/´++°�/°aÖ´\+°\±+´+°±V+´U+³'UV+´-<+°U±O+°K2´8+³8O+´1+°/´1+°O´~+°8±1+´&+±Cv22°´i+°i/°±< +´A+°A°E Ö´t+°t/´E+±‚+±² ^_999°V´Ye$9°'°g9°U°9°-¶ "%4R$9±O°/9°°9°~±*99°8±M{99°1²:>m999°iµ?Hkoqy$9±koµKEtv|~$9°:²CM^999°Yµ7g99° °?9±³ $9°"°9°*´'/$9°°9012#"'732654'#"&5473263&546"654&23254'7#"&547&=4#"#54#"&54763264#"322654'#"&'èO`|S_>m3,/>!3a‹[3GWF 2oP/>,ž3£BPBOT$m:AR79S8=J:CG',L#f%(FJG+--+)$2 *! + 4.]OJd3 6DO6B uZgF''ZBOGEFbD9-I6 e+5þYEBa„b,3=…z1)N7SR8I)+p9VOëëOM0g+7AˆM7=99þL++-U2$".+$2Yþí™-!*—²+°&3² +°/´"++°/´C+°+/°Ö´+°±+´)+°)±+´ +° 2° ´%+°%/±,+±±!99°)±99°¶ "&$9±"± 99°² 99901.54632"&5467'654&#"264&"Re¥z}¡cf`†_@/’~\[|RBÅ(88P9: �c}­«ˆT)nBa`C7U4–]„„]Omý8P89N9YþÏ–-!-=Ö²(+°3´++² +°/´.++°6/´"+°/´C+°>/°Ö´+°±+´;+°;±9+´++°+±%+´3+°3±+´ +°1 Ö´ +±?+±°9°;°!9±+9±99°%³.6$9°3° 9±("µ 139;$9°± !99°² 99901.54632#"&5463654&#"2654&#"2654'#"&'Re¥z}¡nXjKIklO|~\[|RB™!#! /D9*)9 C �c}­«�T5gKijJMg>Ž]„„]Om«!"! qC/#*>9(.DWþƒ–-.w°$/´++°/´++°//°Ö´+°±,+´'+°'±!+´+°±+´ +±0+±!'@  )*$9±³ $901%.54632'>54&"2'654&#"&546Qh©x}¡jP AS�¶|RBITn‡cM85Jd „rŠ^x¤ |]Š8jJZ}}ZLjCrU‚76$]8NO7_!76ƒRuWý½–-9Bβ5+´*+°/´:+°/´++°C/°Ö´+°±2+´-+°-±"+´A+°A±'+´8+°8±+´ +³ +´=+°=/´+±D+±"-´/0$9°A²*5999°'· $% :>$9°=°9±*:µ"028>$9±5³ $901%.54632'>54&"#"&547'654&#"&54632264&"Qh©x}¡jP AS�¶|RBÏ&3J32KBbN97Jc�qRSm^,,<++Š^x¤ |]Š8jJZ}}ZLjþm A,3JK2L$#^:OP9`!34‚RrpTS÷*<,,<*Wý›–-9?Oä²5+´*+°/´@+°H/´?+°/´++°P/°Ö´+°±2+´-+°-±"+´M+°M±'+°:2´8+´E+°8±+´ +³ +´C+°C/´+±Q+±"-³0$9°M³*/5$9°'@ $% =@H$9±*?@ "028:CEKM$9±5³ $901%.54632'>54&"#"&547'654&#"&546324"22654'#"&'Qh©x}¡jP AS�¶|RBÆ,;Q98SZ bM:7Jc�qRSm@!;;^E38I'Z$sþcT3!×E5=+,?7tB[>.67/A[=<')A:u.(-c6'=�`2U&& Yþàw.NYø²+²+± '33±7é°@2°/´X++°S/´7+°/°!3´07+±,F22°Z/°*Ö´$1+°$±+´<+°±+´4<+³4+±Ué°4±:+±=é°=±C+´I+±[+±$³&',-$9°°.9°°09±:Uµ7SX$9°=±O99°C´ EF$9±SX± 99±7°&9°·$*.3CI$9°0²;TI4Oj‹(O]=h†”:0!b[(jþà=+57?/5`ST|Z’ËPýÞ3P23')2ÔDccD&88&ý:9‡f‡Q GcJIa„i�¾²„w?ßþ}*<=+)<<Yÿóhé>¶²'+°3±4é° /´;C+°/´C+°?/°+Ö´01+°0±6+´#&+°#±+´+° Ö´ +°±+´+±@+±60²-'.999±#³ ;$9± °9°±99±4'°9° µ#+07$9°;°.9°°-901"&5473327654'3'654'&#"#"'&547325'47632h\„\H""IÚ¤4Ž)/Q{9@\OYéFP²+´C++²C +³@CE +´7E +°G3´++°A2°´+°%/°K3´17+°<2³1%+´C+°Q/°.Ö´)+°)±!+´5+²!5 +³@! +°5±+°82±Cé°O2°C±G+´A<+°A±D+´&+° Ö´ +°±+´+±R+±!)²+,1999°5°79°°9±GC±=<99± °9°±99±C°,9±7°+9°%³!).5$901"&5473327654'3!5#"'#5654'&#"&54632354762!!354&#"\„\I##HÜý)6,_L+,:8-+I!m€WV@A€LFÚEGþ]3OþÏXMN/.ÔEbbE ''ýº($\9%&%$9R"<6zVt:;UG"Oh@<+°f±^+´D<+°D±5+´41+°4±$+°+2´&+°X2²$ +³@$' +°$° Ö´ +°±+´+±m+±^f±@H99°D±:P99±45°R9°´ /T$9°$°\9± °9°±99±'¶$DL^ef$9°b°>9°(°\9±:@²+RX99901"&5473327654'3#"'5327654+53254'&#"'4'&#"632#"'&5476326324'&#"326Ä\„\I"$HÚ45I;6U+ oYWq1%9D29P3-V=:VUYÿòéT_jq=²$+°3´p++°]2°l/´*++°D/´i+°d/´=+°9/°23´J7+°N2°/´C+°r/°FÖ´g+°( Ö´n+°g±`+´@+°@±6+´51+°5±/+´Q&+°2° Ö´ +°Q´U+°U/°Q±+´+±s+±`n´=D;di$9°@³$9Jp$9°6°*9°5°L9°@ "+2NWY]k$9± U°S9±Q±99±lp´(UY"$9°*±SW99°i±5699°d³/FQ@$9°=°;9°9°L901#"'&5473327654'3#"'&'#"'&54;27654&#"#54#"632#"5476326324#"3264'&#"32#"32/.AB./H##IÔ)(;1%& Mºd(DøÛP6?@5sP“]/6"!2t@;]~7.|W`=?GEG(þ"89.£æ�ÀÔD2112D )'ý˜9)(&YL…"E6@muos$ @/0"!„]1/LLlWQ0*C>>(";@3YÿòÙéhr#²$+²5D333´WC+°b2²W$ +³@W\ +°=/°,3´J7+±Ng22³J=+´C+°s/°FÖ´A&+°A±9+´m&+°m±i+±2é°2±'+´S&+°S±[+´^1+°^±d+´&+° Ö´ +°±+´+±t+±9A±CD99°m°=9°iµ56.JL;$9°2±,N99±[S°$9°^° 9°³bfg$9±±99±W$²Cop999°=@ ' 29AFRdikm$9°J±Lf9901#"'&5473327654'3#"'#"&=4'&#""'&547&#"&5476326323276533254'74'276Ù/.AB./H##IÙ8=mW0%))`Š9:K!5"47ž82z #O54j2„AOŽ;11^hJI,*G.P*�~3–üAbj:`ÔD2112D )'þ)tOUK#rXqN55 .NJ6VINIBb™` DC\�O2\¼oQd&&>=bwB/-+)6^þ¢5'.Í­G2[ôz[MˆGb9.WÿòéPZe0²1+²%+±@33´X++°c2°^/´:++°5/±,33´F7+±JN22°/´C+°f/°CÖ±aé°a±[+´=1+°=±1+±0é°0±(+´U&+°U±Q+´"<+°"±+´&+° Ö´ +°±+´+±g+±aC±7899°[±:@99°=±5F99±01°H9±U(±,J99°Q³%L*$9°"±N99°±99±± 99±X1°9°^·"(=CQU8$9°:°9°5³*HS$9°F°L901#"&54732654'3'654&#"#"&547&#"#4&#"632#"&546326326324'326%4&#"326]BA]I1H2HØ‹.l€W"!/KkXWhz(?XZf?Tw_HZ`KVdž‚‡FB�8@CVv¡þÀpt<84<ýn3*+45*)4ÔCddC&87' þ+½[.K˜Z‰ %�FcŠŠ\›cB7þ�p5D‰ZF^HKe�f‹¹NN&&«¢rcRƒEdg,;:X<<Yÿò&éA®²+´#7+°*/±=é°7/´27+³27+´C+°B/°.Ö° 2´;1+°;±+´ +°' Ö´1+°42° ±+´+±C+±;.°!9°¶#)*27>$9± '°59±±99±*#² !999±7=²4.599901#"'&5473327654'3#"'7327654+"'&547632&#";2&/.AB./H$"HÙJAe«Y1B�@,6ybZ87JAfªY1DŽ?+6yhT59ÔD2112D )) ý¿W-(]5J3I)(JW-(]5J3N#*Yÿóré'6²+±4é°,/´%7+³%,+´C+°7/°!Ö´0+°0±(+´+° Ö´ +°±+´+±8+±0³%,4$9±±99±,4±!9901#"'&5473327654'3#"&5476324'&#"326r/.BA./H##HØUTyw¨TUvxªJ?@YW@>>?XZ~ÔD2112D )) þ2uUT¨vwSS¦wY>>>=ZW>?~WÿðãéPÚ² +±.33±=é°H2°'/´47+³4'+´C+°Q/°0Ö´++°+±#+´9<+°9±A+±Dé°D±L+´&+° Ö´ +°±+´+±R+±#+²-.4999±A9° 9°D°9°³HNO$9± °9°±99±= °-9°'¶#+08L$9°4²BCN999°°O901"&5473327654'3#"'#"&=4&#"&547632327653327654'7ã/.„\I"$HØ?Esw:9qm~H?O/+„*¡2°Q/´h7+°)/°`3´67+°X2³6)+´C+°l/°2Ö´-+°-±%+´:+°:±B+´E1+°E±U+´d&+°d±\+±é° Ö´ +°±+´+±m+±%-²/06999±B:±!"99°E° 9±dU°9°´IQX`h$9± \±LM99±±99±I°/9°Q±: 99°h²-2%999°)²MU999°6±CD9901#"'&5473327654'3#"'"'&54'&#"&54763232765332767#"'&546324'&#"3276 /.AB./H##IÕLP„‘F?Ð87 bR*##¡3?{‡)%$?9%&P?6A[8/ &'%F-,bK^6-`)*'+ÔD2112D )'þV‡\eRQ>=iŠ%aK>W–D:VÀzN]t:¬>-,,.8Qþ�?%G=`!20JLbMC(+,!WÿòéQ_ ²1+°&3²A+°3´\7+°V/´9++°4/±#,33´F7+±JN22³F4+´C+°`/°CÖ±Yé°Y±R+´=&+°=±1+±0é°0±'+´&1+°&±+´&+° Ö´ +°±+´+±a+±YC±6799°R±9A99°=±4F99±01°H9°'°J9°&°L9°³#N$9±±99±\1°9°V²=C7999°9±99°4±HL9901#"'&5473327654'3'654'&#"#4'&#"#4#"632#"546326326324'&#"3276/.BA./I"$H×¢'|+0UnP'&<9LU¦Vp+,./Hµ ˆxB;xo?3lqF>ü6)+22*)ÔD2112D ') þ7ÍW=C¦Y8=‡þ¡_A$#FBþ¡_‡ŒWF01EL23÷‰¼MMKKTNî,:,*>Wÿò•éIWײ-+±<33´T++°5/°#3´B7+°F2°/´C+°X/°>Ö´9&+°9±1+´R&+°R±J+±)é°)±+´&+° Ö´ +°±+´+±Y+±19±;<99°R±5B99°J³-%D3$9°)±#F99°±99±±99±T-±;99°5¶)19>N$9°B°D901#"'&5473327654'3'654'&#"#"'&547&#"&5476326324'&'3276•/.AB./H##IÛŒ.m?@Z$9 4;T]51y#(W>=p1‹LW—M36[ƒNGþ¿ !.6 u6ÔD2112D ))þ&»]/L–[CE -TBBWCJD>b¡a BA`—L.[½nU`**_V¡B=> $=>> 5-Wé%.—²+´++°&2² +³@ +°*/´!7+³!*+´C+°//°Ö´1+°±+´.1+°.±&+´1+° Ö´ +°±+´+±0+±.±!*99± °9°±9901"&5473327654'3!335476324&#"\„\H""IÛý Q«FHceHFP`CB^ÔEbbE''ý&þýcEFCBbþüC`bBÿYÿóBé;̲+°/3´7+°"/´#C+°)/´4C+°/´ C+°->qZYrV;j€9F;£Ž[…/MÔDccD&88&ý¯GYI2+XIO-0�kh{Ž®WL&G YÿòyéD¦² +°3±/é°:2°/´C+°E/°$Ö´+1+°+±3+±6é°6±>+´1+° Ö´ +°±+´+±F+±3+²( )999°6°9°³:@A$9± °9°±99±/µ$)4@$9°±(A9901"&5473327654'3#"'#"'&54767327653327654'7y/.„\I"$HÙEHvr25lrID*-V&ƒ03T2T$$5R1/„(T/)ÔD21bE ') þ1wQUSTUPs^KR)=?­U7<+)0`þ 3)(@;Rª=='RLYÿòyéC®²)+±433°#/°-3´@7+°<2³@#+´C+°D/°8Ö´11+°1±)+´(<+°(±+´&+° Ö´ +°±+´+±E+±)1²34<999°(°>9°³#@$9± °9°±99±#)´38>$901"&5473327654'3'654'&#"#4&#"&'&547632632y/.„\I"$HÙ)-V%‚12T3RH6Q3-‰-T/*EJuq33mtHCÔD21bE ') þ8^LR);@®V:;&&4þšf4J@+±² !&999°)°+9±<±0899± °9°± 99±+± 99°³#)$901"&54732654'3!5654&#"&5463235463254&#"Q\„]H2H2IÚüüLW:9WK!o€W[{¶„haŒJaBA[ÔDcdC '78&ý*(W8OO5V#78xTurWH#ühˆ‰aþþþDcdCþWÿóŠéP\²+°)3´M++²=+´ZC+²M +³@MO +´5T=O +´5++°//°$3´C7+°G2°/´C+°]/°?Ö±Wé°W±Q+´9&+°9±*+´)<+°)± +´K&+² K +³@  +°K±N+´1+° Ö´ +°±+´+±^+±W?°39°Q±5=99°9±/C99±)*°E9° °G9°K°M9±±99±Z°9±TM´9?3QW$9°5± K99°/°E901#"'&5473327654'3!567654'&#"#4'&#"632#"547632632334&#"276Š/.AB./H$"H×þW9!(+O5S81B]90]J(*0/K¯JS�ADQ‚A7GØPü¯0)*20TÔD2112D )) ý!/)CC?R7@%$7þšm< G;aF02GH32ë�\fIIYI~vVßþ},<<+*8YÿíZéIç²+°63´7+°$/´FC+°A/±)é°0/´;7+³;0+´ C+°J/°8Ö´3+°3±'+±Dé°D±!+°-2±é°=2° Ö´ +°±+´+±K+±38°69°'±599°D°9°@ #$)*0;@G$9± °9°± 99±±599°$±99°F°&9°A±3899°)°'9°0°=901"&54732654'3#"/32654+"&46;2654&#"&54632+";2Z\„\I2H2HÖ(,WVG7'.ÓÔD21bE ') ý!û3þÓ¾¾Îd&54#"32Ö^AB\I2H2Hس’Y (_™ÆaTc-7}Vv†d‚V=gþÑFDAG†8Tá~a.8˜p'ÔCdcD &87' þO�­ ·”dŒNNŠ\°`•i{N3c�QfbL›Ex¯eŸ§k+±%±'(99±7¶ "-2:$9±± 99±:°'9°4³%*$9°° 901#"&54732654'3#"&54632&#"&546324'&#"326¦^AB\I2H2HÚ€^X\x^;mj�b3y±�ަR>:V:59LÔCdcD &87' þb�wc\zJŠbŠJ1_­�¬¹ªQ+M6?VVYÿóié5ƒ²*+°3°#/´2C+°/´C+°6/°.Ö´'+°'±+´&+° Ö´ +°±+´+±7+±'µ#)*2$9± °9°±99±#*±.9901"&5473327654'3'654'&#"&'&547632i/.„\I"$HÓ10Y �>=\];<‘!Z./RSzOPÔD21bE ') þ$[IH$:6 ]CAAB^¢4:#IJZUVUVY0é'1 ²+´$++²$ +³@$& +´#1& +´#++°-/´7+°/´C+°2/°Ö´$1+°02°$±(+´"<+°"±%+´1+° Ö´ +°±+´+±3+±($°9± °9°±9901"'&5473327654'3!4632!!354'&#"0\„./H$"IÙý–eqFEþZ]Pþ§*/OJ`ÔEb12D )'ýJ_„@?d›lÝþÓAL15`RAVÿ0¡éZi ²+´0++°*/´'++°K/´f++°6/±7é°^/´D7+°>/´S7+³S>+´C+°j/°OÖ±bé°#2°b´.&+°./°b±[+±Gé°G±3+°:2´<+°W2° Ö´ +°±+´+±k+±b.°B9°[³0DK$9°G°>9°´167S$9± 3°Y9°±()99°±99±'°.9±fK±399±76´GOY[b$9±D^²:BW99901#"'&5473327654'3#!"3!!"'&543!254+53254'&#"632#"'&5476324&#"3276¡/.BA./I"$H×-1Rþù% %§þLE,-¡ÿoZ((W[BIXBH,?>X-.AS-*dV�nQkFIþ}*"" ÔD2112D ') ý·<*0" D#$A‹TSJH:',M8T>A%&:5U†F>$0_O !* "ZÿóZé;Eò²+´!++°(/´47+°?/´97+³9?+´ C+°F/°+Ö´1+°1±6+´B<+°B±$+´1+°±<+´&+° Ö´ +°±+´+±G+±1+°9°6²-.999°B´!&(4$9±$±D99°±9?99± °9°± 99±(!³$$9°4°9°?´+16D$9°9°.9° °-901"&54732654'3#"'732654'#"&5473&546324&#"6Z\„\I2H2HÙyT^?m1+0@] 6=KÉ~¦¢}�?ÞYÿóÌé=IÔ²)+°3±4é°G2°B/±é°"/´;7+³;"+´C+°J/°,Ö´11+°1±7+±&é°&±+´E1+°E±>+´<+° Ö´ +°±+´+±K+±71².)/999±E¶ ";BG$9°>°@9±± 99±B4¶%&,18$9°° 9±;"°/9°°.901#"&54732654'3#"&54632&#"#"&547326=46324'&#"326Ì^AB\I2H2HÛ{_UezV#?kFbr^mƒ¢*|[HE3�_“«RD6Pp7KÔCdcD &87' þd‹~\WJiGs^r¢wÏW +°/´*++°K/´97+°/´C+°S/°'Ö´"+°"±+´-+²- +³@ +³5-+´N+°-±0+°G2±Fé°;2°F±@+´+° Ö´ +°´>+°>/°±+´+±T+±"²$%*999°5°/9±0N°99± °9°±99±/±$99°1³"'-$9±R±=A99±K*±5N9901"&5473327654'3!5654&#"&5463235&'&547632635#4'&"$\„\I""IÚý)LV;9,+I$j€WX€ ü\;I-.?š½(-J;@8T:+,@ÔEbbE ''ý*(W7P&%9T":9wUttUE&‚,8[>/0¤}þ è# #‚W"$3$$WÿðàéPв)+²+°53±Hé°%/°.3±?é°;2³?%+´C+°Q/°7Ö´2&+°2±)+±(é°(±"+±Dé°D±L+´&+° Ö´ +°±+´+±R+±)2²45;999°(°=9°"°?9±D³HNO$9±±99±H)°49°%¶"27=CL$9°?°N9°°O901#"'&5473327654'3#"'&=4#"#4'&#"&547632632327654'7à/.BA./H##HÙ3+²+> +³@+( +°>±C+´"1+²"C +³@"' +°"±+´<+° Ö´ +°±+´+±K+±+2²45;999°>°@9±"C°A9°³F$9± °9°±99±@&±499°/·"+27>C$901"&5473327654'3'654&#"!5654'&#"&5476323&54632U\„\I##IÚ´!‚jTVr8þ]H)'<8TF!m@BS_v­A¢vrPOÔEbbE ''þ)ÉK>=™Y€vZB@M1*_8'&H9U%<7T<=vWH"Pƒ|œTSRÿn‡&0°/´++°/°Ö´ &+±+± ° 9±°901#"54767332‡ =ÐGA†-2Rïg›Š=þö²· ÿx$+e°/±é°,/°Ö´*1+°*± +´&+°# Ö´&+°±+±é±-+±*°!9±& ³($9±°9°°9012654'&'&'&'3#"'&547676?3¯/E,(+,O0U,:;QA04'G*+¶7+3>97FPV«FpQOzA=O./"?0  96 þ³$4>¡°/´6++°:/´++°?/°Ö´1+°±)+± 22´,&+´=+°2°,±!+±3é³83!+´+±@+±°9°)°9°=³ %$9±!,³05:$9°8²16999±:6² 999°°901#"'&547&547676?332654'&'&'&'3264&#"L+<0.ED./'G*+Q/E,(+,O0U,�N98('9ÄR4B2//1C3+j0  967+3>97FPV«FpQOzA=CþÛ9P88(' ýâË$1=Mذ/´>++°F/´2+°8/´++°N/° Ö´1+°±%+´)&+° Ö´K+°%° Ö´+°)±+±0é°C2°0´5+°5/°0±A+´+±O+± °9±K%²# 999°±I99°)°H9°¶-28;>F$9°5°.9°0°9±82¶  ACIK$9°°901#"&547&547676?332654'&'&'&'32654&#"2654'#"&'Q4FhLJj&|'G*+Q/E,(+,O0U,b###"/D8*(9D¾\=JjjJ>/g0  967+3>97FPV«*FpQOzA=>Ú##!"pC/!+<8'.Dÿÿ÷ 8²+´C+² +³@ +°/°Ö´<+² +³@ +±+01#533÷ÛˆSIØÿÿ5�Ì&à|Âÿÿ+ÿéûÅ'yˆ<=?:²+´+°/´+°/°Ö´+°±+´+± +01)!!?ýþ8þnþ6’þn+ÿñÝ£T²+´+°/´ +°/° Ö´+°±+´ +±+±³ $9±³ $901264&"6  `«ò««òàÊÊÊþâÃò««ò«þMÊÊþâÊÿéøÙ &‹²+±é² +±é²+°/´C+°'/°Ö±é°°" Ö´+°/´"+°±+±é±(+±"°9°³ $9°±99±±99° °9°±"9901"32654&'2#"&5467&546;#"6 FPPFEQOHq}np}/)4MEêÊ08(Îm¾mm\anM•ˆ�”•„Kw$%K54&#"##"=ZQ…’þ;XÐ\8G6ZwC!Q/3FI�)6V6M˜92KhIH«MX<^{/h0!+rþüj5(%ƒ-ÿÿÿöÿ Be'V8ÿòáÿÿÿëÿ,e'Vÿþâÿÿÿöÿ me'Vvÿò'˜±2}ÿÿÿöÿ-e'˜‰ mÿÿÿöÿÇ3e'˜±2úÿÿÿöÿÇme'˜±2ûÿÿÿöÿÇ&e'˜Å2üÿÿÿöÿÇ"e'˜±2ÿÿÿöÿÇ"e'˜§2ÿ`Nƒ!}²+² +°3´ C+°2°/´+° 2°"/°Ö° 2´+°2² +³@ +² +³@ +°´&+°/±#+± °!9°²999°± 9901'###53'73&54>32&#"JJJ(MHWWí=ûY 1#**-%#JJJ½ýäIã;þâsG, : Z/ÿ"G„%‰²+² +°3´ C+±$22°/´+°2°&/°Ö´+² +³@ +² +³@ +°°! Ö´&+°/´!&+±'+±!°9± ´ $9°±9901'###53%7'73&54>32&#"3ýJJJ9WHW?þíÈV>‹Y 1#**-%$JJJ¾ýäIs325 iþ­:HBS€6i.#  Iþï+g"’+!£",ˆII²PRBXˆ.eJ!,  ïÕœ9•pM7H�ê îÐàwxÿöw„ÿìw‹ÿöw’ÿöw•ÿöw˜ÿöw¡ÿöw£ÿöw¤ÿìw¦ÿìw§ÿìw¨ÿìw©ÿìwªÿìw«ÿìw¬ÿìw­ÿìw®ÿìw¯ÿìw°ÿìw±ÿìw²ÿìw³ÿìw´ÿìwµÿìw¶ÿìw·ÿìw¸ÿìw¹ÿìwºÿìw»ÿìw¼ÿìw½ÿìw¾ÿìw¿ÿìwÀÿìwÁÿìwÂÿìwÃÿìwÄÿìwÅÿìwÆÿìwÇÿìwÈÿìwÉÿìwÊÿìwËÿìwÌÿìwÍÿìwÎÿìwÏÿìwÐÿìwÑÿìwÒÿìwÓÿìx–ÿñx£ÿö€xÿØ€„ÿö€‹ÿØ€’ÿØ€•ÿØ€–ÿ‘ÿØ€¡ÿØ€£ÿö€¤ÿ쀦ÿ쀧ÿ쀨ÿ쀩ÿ쀪ÿ쀫ÿ쀬ÿ쀭ÿ쀮ÿ쀯ÿ쀰ÿ쀱ÿ쀲ÿ쀳ÿ쀴ÿ쀵ÿ쀶ÿ쀷ÿ쀸ÿ쀹ÿ쀺ÿ쀻ÿ쀼ÿ쀽ÿ쀾ÿ쀿ÿì€Àÿì€Áÿì€Âÿì€Ãÿì€Äÿì€Åÿì€Æÿì€Çÿì€Èÿì€Éÿì€Êÿì€Ëÿì€Ìÿì€Íÿì€Îÿì€Ïÿì€Ðÿì€Ñÿì€Òÿì€Óÿì‚xÿâ‚„ÿ΂‹ÿâ‚’ÿâ‚•ÿₘÿâ‚¡ÿâ‚£ÿ삤ÿØ‚¦ÿØ‚§ÿØ‚¨ÿØ‚©ÿØ‚ªÿØ‚«ÿØ‚¬ÿØ‚­ÿØ‚®ÿØ‚¯ÿØ‚°ÿØ‚±ÿØ‚²ÿØ‚³ÿØ‚´ÿØ‚µÿØ‚¶ÿØ‚·ÿØ‚¸ÿØ‚¹ÿØ‚ºÿØ‚»ÿØ‚¼ÿØ‚½ÿØ‚¾ÿØ‚¿ÿØ‚ÀÿØ‚ÁÿØ‚ÂÿØ‚ÃÿØ‚ÄÿØ‚ÅÿØ‚ÆÿØ‚ÇÿØ‚ÈÿØ‚ÉÿØ‚ÊÿØ‚ËÿØ‚ÌÿØ‚ÍÿØ‚ÎÿØ‚ÏÿØ‚ÐÿØ‚ÑÿØ‚ÒÿØ‚Óÿ؇xÿö‡„ÿ쇋ÿö‡’ÿö‡•ÿö‡˜ÿö‡¡ÿö‡£ÿö‡¤ÿ쇦ÿ쇧ÿ쇨ÿ쇩ÿ쇪ÿ쇫ÿ쇬ÿ쇭ÿ쇮ÿ쇯ÿ쇰ÿ쇱ÿ쇲ÿ쇳ÿ쇴ÿ쇵ÿ쇶ÿ쇷ÿ쇸ÿ쇹ÿ쇺ÿ쇻ÿ쇼ÿ쇽ÿ쇾ÿ쇿ÿì‡Àÿì‡Áÿì‡Âÿì‡Ãÿì‡Äÿì‡Åÿì‡Æÿì‡Çÿì‡Èÿì‡Éÿì‡Êÿì‡Ëÿì‡Ìÿì‡Íÿì‡Îÿì‡Ïÿì‡Ðÿì‡Ñÿì‡Òÿì‡Óÿì‹–ÿñ‹£ÿöŽxÿØŽ„ÿöŽ‹ÿØŽ’ÿØŽ•ÿØŽ–ÿ⎘ÿØŽ¡ÿØŽ£ÿöޤÿ쎦ÿ쎧ÿ쎨ÿ쎩ÿ쎪ÿ쎫ÿ쎬ÿ쎭ÿ쎮ÿ쎯ÿ쎰ÿ쎱ÿ쎲ÿ쎳ÿ쎴ÿ쎵ÿ쎶ÿ쎷ÿ쎸ÿ쎹ÿ쎺ÿ쎻ÿ쎼ÿ쎽ÿ쎾ÿ쎿ÿìŽÀÿìŽÁÿìŽÂÿìŽÃÿìŽÄÿìŽÅÿìŽÆÿìŽÇÿìŽÈÿìŽÉÿìŽÊÿìŽËÿìŽÌÿìŽÍÿìŽÎÿìŽÏÿìŽÐÿìŽÑÿìŽÒÿìŽÓÿì’–ÿñ’£ÿö”xÿû”„ÿ┋ÿû”’ÿû”•ÿû”˜ÿû”¡ÿû”£ÿû”¤ÿö”¦ÿö”§ÿö”¨ÿö”©ÿö”ªÿö”«ÿö”¬ÿö”­ÿö”®ÿö”¯ÿö”°ÿö”±ÿö”²ÿö”³ÿö”´ÿö”µÿö”¶ÿö”·ÿö”¸ÿö”¹ÿö”ºÿö”»ÿö”¼ÿö”½ÿö”¾ÿö”¿ÿö”Àÿö”Áÿö”Âÿö”Ãÿö”Äÿö”Åÿö”Æÿö”Çÿö”Èÿö”Éÿö”Êÿö”Ëÿö”Ìÿö”Íÿö”Îÿö”Ïÿö”Ðÿö”Ñÿö”Òÿö”Óÿö•–ÿñ•£ÿö–xÿö–„ÿì–‹ÿö–’ÿö–•ÿö–˜ÿö–¡ÿö–£ÿö–¤ÿì–¦ÿì–§ÿì–¨ÿì–©ÿì–ªÿì–«ÿì–¬ÿì–­ÿì–®ÿì–¯ÿì–°ÿì–±ÿì–²ÿì–³ÿì–´ÿì–µÿì–¶ÿì–·ÿì–¸ÿì–¹ÿì–ºÿì–»ÿì–¼ÿì–½ÿì–¾ÿì–¿ÿì–Àÿì–Áÿì–Âÿì–Ãÿì–Äÿì–Åÿì–Æÿì–Çÿì–Èÿì–Éÿì–Êÿì–Ëÿì–Ìÿì–Íÿì–Îÿì–Ïÿì–Ðÿì–Ñÿì–Òÿì–Óÿì—xÿâ—„ÿΗ‹ÿâ—’ÿâ—•ÿâ—˜ÿâ—¡ÿâ—£ÿì—¤ÿØ—¦ÿØ—§ÿØ—¨ÿØ—©ÿØ—ªÿØ—«ÿØ—¬ÿØ—­ÿØ—®ÿØ—¯ÿØ—°ÿØ—±ÿØ—²ÿØ—³ÿØ—´ÿØ—µÿØ—¶ÿØ—·ÿØ—¸ÿØ—¹ÿØ—ºÿØ—»ÿØ—¼ÿØ—½ÿØ—¾ÿØ—¿ÿØ—ÀÿØ—ÁÿØ—ÂÿØ—ÃÿØ—ÄÿØ—ÅÿØ—ÆÿØ—ÇÿØ—ÈÿØ—ÉÿØ—ÊÿØ—ËÿØ—ÌÿØ—ÍÿØ—ÎÿØ—ÏÿØ—ÐÿØ—ÑÿØ—ÒÿØ—Óÿؘ–ÿñ˜£ÿöž–ÿñž£ÿö –ÿñ £ÿö¡–ÿñ¡£ÿö¢–ÿñ¢£ÿö§¨ÿ춨ÿì·¨ÿöÒ¨ÿö2^MœüS€¯Ôå +A É $Ò Ä² ¤ b T š ê  4 n $‰ Â Ý Vé ’m HË  l ~  p 6 � æÈ º ¬œŠ ^ P!$" B$z&  'ô*:-ä9DCopyright 2002, 2003, 2005, 2008, 2009, 2010, 2012 GNU Freefont contributors.Copyright 2002, 2003, 2005, 2008, 2009, 2010, 2012 GNU Freefont contributors.FreeSansFreeSansRegularRegularGNU: FreeSans Normal: 2012GNU: FreeSans Normal: 2012FreeSansFreeSansVersion 0412.2268 Version 0412.2268 FreeSansFreeSansGNUGNUhttps://savannah.gnu.org/projects/freefont/https://savannah.gnu.org/projects/freefont/This computer font is part of GNU FreeFont. It is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This font is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this font. If not, see http://www.gnu.org/licenses/ As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.This computer font is part of GNU FreeFont. It is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This font is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this font. If not, see http://www.gnu.org/licenses/ As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.http://www.gnu.org/copyleft/gpl.htmlhttp://www.gnu.org/copyleft/gpl.htmlvëa?@O<V9NormalNormalNormalNavadnoNormálne1KG=K9NormalNormalOdmiana ZwykBaNormalnormalusisvidjsMediomenengahNormál 8 > . > ( M /µµÃ±¯±MittelNormalNormaaliGemiddeldnormaloby ejnéNormal=>@<0;5=ArruntaÿP2€  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a¬£„…½–膎‹�©¤ŠÚƒ“òó�ˆÞñžªõôö¢­ÉÇ®bc�dËeÈÊÏÌÍÎéfÓÐѯgð‘ÖÔÕhëíjikmln oqprsutvwêxzy{}|¸¡~€�ìîº   ýþ  ÿøù !"#$%&'()*+,-.ú×/0123456789:;<=âã>?@ABCDEFGHIJKL°±MNOPQRSTUVûüäåWXYZ[\]^_`abcdefghijkl»mnopæçqrstuvwxyz{|}~€�‚ƒ¦„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—Øá˜™š›œ�žŸ ¡¢£¤¥¦§ÛÜÝàÙߨ©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abŸcdefghijklmnopqrstuvwx›yz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  € � ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ � Ž � � ‘ ’ “ ” • – — ˜ ™ š › œ � ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  € � ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ � Ž � � ‘ ’ “ ” • – — ˜ ™ š › œ � ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  € � ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ � Ž � � ‘ ’ “ ” • – — ˜ ™ š › œ � ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  € � ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ � Ž � � ‘ ’ “ ”²³ • – —¶·Ä ˜´µÅ ™‚‡ š › œ« � ž Ÿ   ¡ ¢ £ ¤ ¥Æ ¦ § ¨ © ª « ¬ ­¾¿ ® ¯ ° ± ² ³ ´ µ ¶¼ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û÷ ü ý þ ÿ                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N OŒ P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  € � ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ � Ž � � ‘ ’ “ ” • – — ˜ ™ š › œ � ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì˜ Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Øš Ù™ï Ú Û Ü Ý Þ ß à¥ á â ã’ ä å æ ç è é ê ë ì í î ïœ ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ§     �”• !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz¹{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDÀÁEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„ softhyphenmicromiddotssharpAmacronamacronAbreveabreveAogonekaogonek Ccircumflex ccircumflex Cdotaccent cdotaccentDcarondcaronDcroatEmacronemacronEbreveebreve Edotaccent edotaccentEogonekeogonekEcaronecaron Gcircumflex gcircumflex Gdotaccent gdotaccent Gcommaaccent gcommaaccent Hcircumflex hcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJij Jcircumflex jcircumflex Kcommaaccent kcommaaccent kgreenlandicLacutelacute Lcommaaccent lcommaaccentLcaronlcaronLdotldotNacutenacute Ncommaaccent ncommaaccentNcaronncaron napostropheEngengOmacronomacronObreveobreve Ohungarumlaut ohungarumlautRacuteracute Rcommaaccent rcommaaccentRcaronrcaronSacutesacute Scircumflex scircumflexTcedillatcedillaTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuring Uhungarumlaut uhungarumlautUogonekuogonek Wcircumflex wcircumflex Ycircumflex ycircumflexZacutezacute Zdotaccent zdotaccentlongsuni0180uni0181uni0182uni0183uni0184uni0185uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni018F Epsilonlatinuni0191uni0193uni0194uni0195uni0196uni0197uni0198uni0199lbar lambdastrokeuni019Cuni019Duni019EObarOhornohornOioiuni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01AAuni01ABuni01ACuni01ADuni01AEUhornuhornuni01B1uni01B2uni01B3yhookuni01B5uni01B6Yoghuni01B8uni01B9uni01BAuni01BBuni01BEwynnuni01C0uni01C1uni01C2uni01C3DZcaronDzcarondzcaronLJLjljNJNjnjAcaronacaronIcaronicaronOcaronocaronUcaronucaronUdieresismacronudieresismacronUdieresisacuteudieresisacuteUdieresiscaronudieresiscaronUdieresisgraveudieresisgraveeturnuni01DEuni01DFuni01E0uni01E1uni01E2uni01E3uni01E4uni01E5Gcarongcaronuni01E8kcaronOogonekoogonekuni01ECuni01EDuni01EEezhcaronjcaronDZDzuni01F3GacutegacuteWynnuni01F8uni01F9 Aringacute aringacuteAEacuteaeacute Oslashacute oslashacute Adblgrave adblgraveAinvertedbreveainvertedbreve Edblgrave edblgraveEinvertedbreveeinvertedbreve Idblgrave idblgraveIinvertedbreveiinvertedbreve Odblgrave odblgraveOinvertedbreveoinvertedbreve Rdblgrave rdblgraveRinvertedbreverinvertedbreve Udblgrave udblgraveUinvertedbreveuinvertedbreve Scommaaccent scommaaccentuni021Auni021Buni021Cuni021Duni021Euni021Funi0220uni0224uni0225 A_dotaccent a_dotaccentuni0228uni0229uni022Auni022Buni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233dotlessjuni0238uni0239aturnascript ascriptturnbhookcturnccurldtaildhookerevschwa schwahook epsilonlatinepsilonlatinrevepsilonlatinrevhookepsilonlatinrevclosed jdotlessbarghookgscript Gsmallcap gammalatinramshornhturnhhookhenghookibar iotalatin Ismallcap lmidtildelbeltlrthooklezhmturnedmlonglegturnedmhook nhookleftnrthook Nsmallcapobar OEsmallcap omegaclosedphilatinrturnrlonglegturned rhookturnedrlonglegrhook rfishhook rfishhookrev Rsmallcap Rsmallcapinvshookeshdotlessjstrokehook eshshortreveshcurltturntrthookubar upsilonlatinvhookvturnwturnyturn Ysmallcapzrthookzcurlezhezhcurl glottalstopglottalstoprevinvglottalstopinvcstretch bilabialclick Bsmallcap epsilonclosed Gsmallhook Hsmallcap jcrosstailkturn Lsmallcapqhookglottalstopbarglottalstopbarrevdzaltonedezhdzcurltsteshtccurluni02A9uni02AAuni02ABuni02ACuni02ADuni02AEuni02AFhsuper hhooksuperjsuperrsuper rturnsuperrturnrthooksuper Rturnsuperwsuperysuperprimemod dblprimemod quoteleftmod apostrophe apostropherev ringhalfright ringhalfleftglottalstopmodglottalstopreversedmodfrontedbackedraisedloweredverticallinemodmacronmodifier acutemodifier gravemodifierverticallinelowmod macronlowmodgravesubacutesubcolontriangularmodcolontriangularhalfmodringhalfrightcenteredringhalfleftcentered tackupmid tackdownmidplusmodminusmoduni02DEuni02DF gammasuperlsuperssuperxsuperglottalrevsuper toneextrahightonehightonemidtonelow toneextralowuni02EAuni02EBuni02ECuni02EDuni02EEuni02EFuni02F0uni02F1uni02F2uni02F3uni02F4uni02F5uni02F6uni02F7uni02F8uni02F9uni02FAuni02FBuni02FCuni02FDuni02FEuni02FF gravecomb acutecombcircumflexcomb tildecomb macroncomb overlinecmb brevecomb dotaccentcmb dieresiscmb hookabovecombringcmbhungarumlautcmb caroncombverticallineabovecmbdblverticallineabovecmb gravedblnospcandrabinducmbbreveinvertedcmbcommaturnedabovecmb commaabovecmbcommareversedabovecmbcommaaboverightcmb gravebelowcmb acutebelowcmblefttackbelowcmbuni0319uni031Ahorncmbringlefthalfsubnospuptackbelowcmbuni031Euni031F minusbelowcmbhookpalatalizedbelowcmbhookretroflexbelowcmb dotbelowcombdieresisbelowcmb ringbelowcmb commasubnosp cedillacmb ogonekcmblinevertsubnospbridgebelowcmbdblarchinvertedbelowcmb caronbelowcmbcircumflexbelowcmb brevebelowcmbbreveinvertedbelowcmb tildebelowcmbmacronbelowcmb lowlinecmb dbllowlinecmbtildeoverlaycmbstrokeshortoverlaycmbstrokelongoverlaycmbsolidusshortoverlaycmbsoliduslongoverlaycmbringrighthalfsubnospbridgeinvertedbelowcmbsquarebelowcmbseagullbelowcmb xabovecmbtildeverticalcmbdbloverlinecmb gravetonecmb acutetonecmbperispomenigreekcmb koroniscmbdiaeresistonosnospypogegrammenigreekcmbuni0346uni0347uni0348uni0349uni034Auni034Buni034Cuni034Duni034Euni034Funi0350uni0351uni0352uni0353uni0354uni0355uni0356uni0357uni0358uni0359uni035Auni035Buni035Cuni035Duni035Euni035Funi0360uni0361uni0362uni0363uni0364uni0365uni0366uni0367uni0368uni0369uni036Auni036Buni036Cuni036Duni036Euni036Funi0374uni0375 ypogegrammeniuni037buni037cuni037duni037Etonos dieresistonos Alphatonos anoteleia EpsilontonosEtatonos Iotatonos Omicrontonos Upsilontonos OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsi IotadieresisUpsilondieresis alphatonos epsilontonosetatonos iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigma1sigmatauupsilonphichipsiomega iotadieresisupsilondieresis omicrontonos upsilontonos omegatonostheta1 UpsilonhookUpsilonhooktonosUpsilonhookdiaeresisphi1 pisymbolgreekuni03D7uni03F0rhosymbolgreek sigmalunateuni03f3uni03f4uni03F5uni03f6uni03f9uni03fduni03feuni03ffIecyrillic_grave Iocyrillic Djecyrillic Gjecyrillic Ecyrillic Dzecyrillic Icyrillic Yicyrillic Jecyrillic Ljecyrillic Njecyrillic Tshecyrillic KjecyrillicIicyrillic_graveUshortcyrillic Dzhecyrillic Acyrillic Becyrillic Vecyrillic Gecyrillic Decyrillic Iecyrillic Zhecyrillic Zecyrillic IicyrillicIishortcyrillic Kacyrillic Elcyrillic Emcyrillic Encyrillic Ocyrillic Pecyrillic Ercyrillic Escyrillic Tecyrillic Ucyrillic Efcyrillic Khacyrillic Tsecyrillic Checyrillic Shacyrillic ShchacyrillicHardsigncyrillic YericyrillicSoftsigncyrillicEreversedcyrillic IUcyrillic IAcyrillic acyrillic becyrillic vecyrillic gecyrillic decyrillic iecyrillic zhecyrillic zecyrillic iicyrilliciishortcyrillic kacyrillic elcyrillic emcyrillic encyrillic ocyrillic pecyrillic ercyrillic escyrillic tecyrillic ucyrillic efcyrillic khacyrillic tsecyrillic checyrillic shacyrillic shchacyrillichardsigncyrillic yericyrillicsoftsigncyrillicereversedcyrillic iucyrillic iacyrilliciecyrillic_grave iocyrillic djecyrillic gjecyrillic ecyrillic dzecyrillic icyrillic yicyrillic jecyrillic ljecyrillic njecyrillic tshecyrillic kjecyrilliciicyrillic_graveushortcyrillic dzhecyrillic Omegacyrillic omegacyrillicuni0462uni0463uni0464uni0465uni0466uni0467uni0468uni0469uni046Auni046Buni046Cuni046Duni046Euni046Funi0470uni0471 Fitacyrillic fitacyrillicuni0474uni0475uni0476uni0477uni0478uni0479uni047Auni047BOmegatitlocyrillicomegatitlocyrillic Otcyrillic otcyrillicthousandcyrillictitlocyrilliccmbpalatalizationcyrilliccmbdasiapneumatacyrilliccmbpsilipneumatacyrilliccmbuni0487uni0488uni0489uni048auni048buni048Cuni048Duni048Euni048Funi0490uni0491uni0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni049Cuni049Duni049Euni049Funi04A0uni04A1uni04A2uni04A3uni04A4uni04A5uni04A6uni04A7uni04A8uni04A9uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04B4uni04B5uni04B6uni04B7uni04B8uni04B9uni04BAuni04BBuni04BCuni04BDuni04BEuni04BFuni04C0uni04C1uni04C2uni04C3uni04C4uni04C5uni04C6uni04C7uni04C8uni04C9uni04CAuni04CBuni04CCuni04CDuni04CEuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04d9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFDzeabkhasiancyrillicuni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1Uhungarumlautcyrillicuhungarumlautcyrillicuni04F4uni04F5uni04f6uni04f7uni04F8uni04F9uni04fauni04fbuni04fcuni04fduni04feuni04ffuni0510uni0511uni0512uni0513uni051auni051buni051cuni051duni051euni051funi0524uni0525uni0526uni0527uni0531uni0532uni0533uni0534uni0535uni0536uni0537uni0538uni0539uni053Auni053Buni053Cuni053Duni053Euni053Funi0540uni0541uni0542uni0543uni0544uni0545uni0546uni0547uni0548uni0549uni054Auni054Buni054Cuni054Duni054Euni054Funi0550uni0551uni0552uni0553uni0554uni0555uni0556uni0559uni055Auni055Buni055Cuni055Duni055Euni055Funi0561uni0562uni0563uni0564 echarmenianuni0566uni0567uni0568uni0569uni056A iniarmenianuni056C xeharmenianuni056Euni056Funi0570uni0571uni0572uni0573 menarmenianuni0575 nowarmenianuni0577uni0578uni0579uni057Auni057Buni057Cuni057D vewarmenianuni057Funi0580uni0581 yiwnarmenianuni0583uni0584uni0585uni0586echyiwnarmenianuni0589uni058A dramarmenian afii57799 afii57801 afii57800 afii57802 hiriqhebrew tserehebrew segolhebrew patahhebrew qamatshebrew holamhebrewuni05BA afii57796 dageshhebrew afii57839 afii57645 rafehebrew afii57842 shindothebrew sindothebrewsofpasuqhebrewupperdothebrewuni05C5uni05C6uni05C7 alefhebrew bethebrew gimelhebrew dalethebrewhehebrew vavhebrew zayinhebrew hethebrew tethebrew yodhebrewfinalkafhebrew kafhebrew lamedhebrewfinalmemhebrew memhebrewfinalnunhebrew nunhebrew samekhhebrew ayinhebrew finalpehebrewpehebrew tsadifinal tsadihebrew qofhebrew reshhebrew shinhebrew tavhebrew vavvavhebrew vavyodhebrew yodyodhebrew gereshhebrewgershayimhebrewuni0700uni0701uni0702uni0703uni0704uni0705uni0706uni0707uni0708uni0709uni070Auni070Buni070Cuni070Duni070Funi0710uni0711uni0712uni0713uni0714uni0715uni0716uni0717uni0718uni0719uni071Auni071Buni071Cuni071Duni071Euni071Funi0720uni0721uni0722uni0723uni0724uni0725uni0726uni0727uni0728uni0729uni072Auni072Buni072Cuni072duni072euni072funi0730uni0731uni0732uni0733uni0734uni0735uni0736uni0737uni0738uni0739uni073Auni073Buni073Cuni073Duni073Euni073Funi0740uni0741uni0742uni0743uni0744uni0745uni0746uni0747uni0748uni0749uni074Auni074duni074euni074finvcandrabindudevacandrabindudeva anusvaradeva visargadeva shortadevaadevaaadevaidevaiidevaudevauudeva rvocalicdeva lvocalicdeva ecandradeva eshortdevaedevaaideva ocandradeva oshortdevaodevaaudevakadevakhadevagadevaghadevangadevacadevachadevajadevajhadevanyadevattadevatthadevaddadevaddhadevannadevatadevathadevadadevadhadevanadevannnadevapadevaphadevabadevabhadevamadevayadevaradevarradevaladevalladevallladevavadevashadevassadevasadevahadeva oesigndeva ooesigndeva nuktadeva avagrahadeva aasigndeva isigndeva iisigndeva usigndeva uusigndevarvocalicsigndevarrvocalicsigndevaecandrasigndevaeshortsigndeva esigndeva aisigndevaocandrasigndevaoshortsigndeva osigndeva ausigndevavirama epristhamatra awsigndevaomdeva udattadeva anudattadeva gravedeva acutedevalongecandradeva uesigndeva uuesigndevaqadevakhhadevaghhadevazadeva dddhadevarhadevafadevayyadeva rrvocalicdeva llvocalicdevalvocalicvowelsigndevallvocalicsigndevadandadbldandazerodevaonedevatwodeva threedevafourdevafivedevasixdeva sevendeva eightdevaninedevaabbreviationsigndevaellipsisdotdeva acandradevaoedevaooedevaawdevauedevauuedevazhadeva heavyyadevaggadevajjadevaglottalstopdevadddadevabbadevabn_candrabindu bn_anusvara bn_visargabn_abn_aabn_ibn_iibn_ubn_uubn_ribn_libn_ebn_aibn_obn_aubn_kabn_khabn_gabn_ghabn_ngabn_cabn_chabn_jabn_jhabn_nyabn_ttabn_tthabn_ddabn_ddhabn_nnabn_tabn_thabn_dabn_dhabn_nabn_pabn_phabn_babn_bhabn_mabn_yabn_rabn_labn_shabn_ssabn_sabn_habn_nukta bn_avagraha bn_aakaarbn_ikaar bn_iikaarbn_ukaar bn_uukaar bn_rikaar bn_rrikaarbn_ekaar bn_aikaarbn_okaar bn_aukaar bn_hasanta bn_half_ta bn_aumarkbn_rrabn_rhabn_yyabn_rribn_lli bn_likaar bn_llikaarbn_zerobn_onebn_twobn_threebn_fourbn_fivebn_sixbn_sevenbn_eightbn_nine bn_asamira bn_asamiba bn_rupeemark bn_rupeesign bn_currency1 bn_currency2 bn_currency3 bn_currency4bn_currencyless bn_currency16 bn_issharuni09fbadak_bindi_gur bindi_gur visarga_gura_guraa_guri_gurii_guru_guruu_guree_gurai_guroo_gurau_gurka_gurkha_gurga_gurgha_gurnga_gurca_gurcha_gurja_gurjha_gurnya_gurtta_gurttha_gurdda_gurddha_gurnna_gurta_gurtha_gurda_gurdha_gurna_gurpa_gurpha_gurba_gurbha_gurma_gurya_gurra_gurla_gurlla_gurva_gursha_gursa_gurha_gur nukta_gur aamatra_gur imatra_gur iimatra_gur umatra_gur uumatra_gur eematra_gur aimatra_gur oomatra_gur aumatra_gur virama_gur uudatsign_gurkhha_gurghha_gurza_gurrra_gurfa_gurzero_gurone_gurtwo_gur three_gurfour_gurfive_gursix_gur seven_gur eight_gurnine_gur tippi_gur addak_guriri_gurura_gur ek_onkar_guryakashsign_gur anusvara_mal viasrga_mal a_vowel_mal aa_vowel_mal i_vowel_mal ii_vowel_mal u_vowel_mal uu_vowel_mal r_vocalic_mal l_vocalic_mal e_vowel_mal ee_vowel_mal ai_vowel_mal o_vowel_mal oo_vowel_mal au_vowel_malka_malkha_malga_malgha_malnga_malcha_malchha_malja_maljha_malnya_maltta_malttha_maldda_malddha_malnna_malta_maltha_malda_maldha_malna_malnnna_malpa_malpha_malba_malbha_malma_malya_malra_malrra_malla_mallla_malllla_malva_malsha_malssa_malsa_malha_malttta_mal avagraha_malaa_mali_malii_malu_maluu_mal r_voc_mal rr_voc_male_malee_malai_malo_maloo_malau_mal candrakalareph_mal au_length_malrr_vocalic_malll_voc_skt_mal l_voc_mal ll_voc_malzero_malone_maltwo_mal three_malfour_malfive_malsix_mal seven_mal eight_malnine_malten_malone_hundred_malone_thousand_malone_quarter_mal one_half_malthree_quarters_maldate_mal nn_chil_mal n_chil_mal rr_chil_mal l_chil_mal ll_chil_mal k_chil_maluni10A0uni10A1uni10A2uni10A3uni10A4uni10A5uni10A6uni10A7uni10A8uni10A9uni10AAuni10ABuni10ACuni10ADuni10AEuni10AFuni10B0uni10B1uni10B2uni10B3uni10B4uni10B5uni10B6uni10B7uni10B8uni10B9uni10BAuni10BBuni10BCuni10BDuni10BEuni10BFuni10C0uni10D0uni10D1uni10D2uni10D3uni10D4uni10D5uni10D6uni10D7uni10D8uni10D9uni10DAuni10DBuni10DCuni10DDuni10DEuni10DFuni10E0uni10E1uni10E2uni10E3uni10E4uni10E5uni10E6uni10E7uni10E8uni10E9uni10EAuni10EBuni10ECuni10EDuni10EEuni10EFuni10F0uni10F1uni10F2uni10F3uni10F4uni10F5uni10f9uni10fbuni10fcuni13A0uni13A1uni13A2uni13A3uni13A4uni13A5uni13A6uni13A7uni13A8uni13A9uni13AAuni13ABuni13ACuni13ADuni13AEuni13AFuni13B0uni13B1uni13B2uni13B3uni13B4uni13B5uni13B6uni13B7uni13B8uni13B9uni13BAuni13BBuni13BCuni13BDuni13BEuni13BFuni13C0uni13C1uni13C2uni13C3uni13C4uni13C5uni13C6uni13C7uni13C8uni13C9uni13CAuni13CBuni13CCuni13CDuni13CEuni13CFuni13D0uni13D1uni13D2uni13D3uni13D4uni13D5uni13D6uni13D7uni13D8uni13D9uni13DAuni13DBuni13DCuni13DDuni13DEuni13DFuni13E0uni13E1uni13E2uni13E3uni13E4uni13E5uni13E6uni13E7uni13E8uni13E9uni13EAuni13EBuni13ECuni13EDuni13EEuni13EFuni13F0uni13F1uni13F2uni13F3uni13F4uni1400uni1401uni1402uni1403uni1404uni1405uni1406uni1407uni1408uni1409uni140Auni140Buni140Cuni140Duni140Euni140Funi1410uni1411uni1412uni1413uni1414uni1415uni1416uni1417uni1418uni1419uni141Auni141Buni141Cuni141Duni141Euni141Funi1420uni1421uni1422uni1423uni1424uni1425uni1426uni1427uni1428uni1429uni142Auni142Buni142Cuni142Duni142Euni142Funi1430uni1431uni1432uni1433uni1434uni1435uni1436uni1437uni1438uni1439uni143Auni143Buni143Cuni143Duni143Euni143Funi1440uni1441uni1442uni1443uni1444uni1445uni1446uni1447uni1448uni1449uni144Auni144Buni144Cuni144Duni144Euni144Funi1450uni1451uni1452uni1453uni1454uni1455uni1456uni1457uni1458uni1459uni145Auni145Buni145Cuni145Duni145Euni145Funi1460uni1461uni1462uni1463uni1464uni1465uni1466uni1467uni1468uni1469uni146Auni146Buni146Cuni146Duni146Euni146Funi1470uni1471uni1472uni1473uni1474uni1475uni1476uni1477uni1478uni1479uni147Auni147Buni147Cuni147Duni147Euni147Funi1480uni1481uni1482uni1483uni1484uni1485uni1486uni1487uni1488uni1489uni148Auni148Buni148Cuni148Duni148Euni148Funi1490uni1491uni1492uni1493uni1494uni1495uni1496uni1497uni1498uni1499uni149Auni149Buni149Cuni149Duni149Euni149Funi14A0uni14A1uni14A2uni14A3uni14A4uni14A5uni14A6uni14A7uni14A8uni14A9uni14AAuni14ABuni14ACuni14ADuni14AEuni14AFuni14B0uni14B1uni14B2uni14B3uni14B4uni14B5uni14B6uni14B7uni14B8uni14B9uni14BAuni14BBuni14BCuni14BDuni14BEuni14BFuni14C0uni14C1uni14C2uni14C3uni14C4uni14C5uni14C6uni14C7uni14C8uni14C9uni14CAuni14CBuni14CCuni14CDuni14CEuni14CFuni14D0uni14D1uni14D2uni14D3uni14D4uni14D5uni14D6uni14D7uni14D8uni14D9uni14DAuni14DBuni14DCuni14DDuni14DEuni14DFuni14E0uni14E1uni14E2uni14E3uni14E4uni14E5uni14E6uni14E7uni14E8uni14E9uni14EAuni14EBuni14ECuni14EDuni14EEuni14EFuni14F0uni14F1uni14F2uni14F3uni14F4uni14F5uni14F6uni14F7uni14F8uni14F9uni14FAuni14FBuni14FCuni14FDuni14FEuni14FFuni1500uni1501uni1502uni1503uni1504uni1505uni1506uni1507uni1508uni1509uni150Auni150Buni150Cuni150Duni150Euni150Funi1510uni1511uni1512uni1513uni1514uni1515uni1516uni1517uni1518uni1519uni151Auni151Buni151Cuni151Duni151Euni151Funi1520uni1521uni1522uni1523uni1524uni1525uni1526uni1527uni1528uni1529uni152Auni152Buni152Cuni152Duni152Euni152Funi1530uni1531uni1532uni1533uni1534uni1535uni1536uni1537uni1538uni1539uni153Auni153Buni153Cuni153Duni153Euni153Funi1540uni1541uni1542uni1543uni1544uni1545uni1546uni1547uni1548uni1549uni154Auni154Buni154Cuni154Duni154Euni154Funi1550uni1551uni1552uni1553uni1554uni1555uni1556uni1557uni1558uni1559uni155Auni155Buni155Cuni155Duni155Euni155Funi1560uni1561uni1562uni1563uni1564uni1565uni1566uni1567uni1568uni1569uni156Auni156Buni156Cuni156Duni156Euni156Funi1570uni1571uni1572uni1573uni1574uni1575uni1576uni1577uni1578uni1579uni157Auni157Buni157Cuni157Duni157Euni157Funi1580uni1581uni1582uni1583uni1584uni1585uni1586uni1587uni1588uni1589uni158Auni158Buni158Cuni158Duni158Euni158Funi1590uni1591uni1592uni1593uni1594uni1595uni1596uni1597uni1598uni1599uni159Auni159Buni159Cuni159Duni159Euni159Funi15A0uni15A1uni15A2uni15A3uni15A4uni15A5uni15A6uni15A7uni15A8uni15A9uni15AAuni15ABuni15ACuni15ADuni15AEuni15AFuni15B0uni15B1uni15B2uni15B3uni15B4uni15B5uni15B6uni15B7uni15B8uni15B9uni15BAuni15BBuni15BCuni15BDuni15BEuni15BFuni15C0uni15C1uni15C2uni15C3uni15C4uni15C5uni15C6uni15C7uni15C8uni15C9uni15CAuni15CBuni15CCuni15CDuni15CEuni15CFuni15D0uni15D1uni15D2uni15D3uni15D4uni15D5uni15D6uni15D7uni15D8uni15D9uni15DAuni15DBuni15DCuni15DDuni15DEuni15DFuni15E0uni15E1uni15E2uni15E3uni15E4uni15E5uni15E6uni15E7uni15E8uni15E9uni15EAuni15EBuni15ECuni15EDuni15EEuni15EFuni15F0uni15F1uni15F2uni15F3uni15F4uni15F5uni15F6uni15F7uni15F8uni15F9uni15FAuni15FBuni15FCuni15FDuni15FEuni15FFuni1600uni1601uni1602uni1603uni1604uni1605uni1606uni1607uni1608uni1609uni160Auni160Buni160Cuni160Duni160Euni160Funi1610uni1611uni1612uni1613uni1614uni1615uni1616uni1617uni1618uni1619uni161Auni161Buni161Cuni161Duni161Euni161Funi1620uni1621uni1622uni1623uni1624uni1625uni1626uni1627uni1628uni1629uni162Auni162Buni162Cuni162Duni162Euni162Funi1630uni1631uni1632uni1633uni1634uni1635uni1636uni1637uni1638uni1639uni163Auni163Buni163Cuni163Duni163Euni163Funi1640uni1641uni1642uni1643uni1644uni1645uni1646uni1647uni1648uni1649uni164Auni164Buni164Cuni164Duni164Euni164Funi1650uni1651uni1652uni1653uni1654uni1655uni1656uni1657uni1658uni1659uni165Auni165Buni165Cuni165Duni165Euni165Funi1660uni1661uni1662uni1663uni1664uni1665uni1666uni1667uni1668uni1669uni166Auni166Buni166Cuni166Duni166Euni166Funi1670uni1671uni1672uni1673uni1674uni1675uni1676uni1677uni1678uni1679uni167auni167buni167cuni167duni167euni167funi18b0uni18b1uni18b2uni18b3uni18b4uni18b5uni18b6uni18b7uni18b8uni18b9uni18bauni18bbuni18bcuni18bduni18beuni18bfuni18c0uni18c1uni18c2uni18c3uni18c4uni18c5uni18c6uni18c7uni18c8uni18c9uni18cauni18cbuni18ccuni18cduni18ceuni18cfuni18d0uni18d1uni18d2uni18d3uni18d4uni18d5uni18d6uni18d7uni18d8uni18d9uni18dauni18dbuni18dcuni18dduni18deuni18dfuni18e0uni18e1uni18e2uni18e3uni18e4uni18e5uni18e6uni18e7uni18e8uni18e9uni18eauni18ebuni18ecuni18eduni18eeuni18efuni18f0uni18f1uni18f2uni18f3uni18f4uni18f5uni1d00uni1d01uni1d02uni1d03uni1d04uni1d05uni1d06uni1d07uni1d08uni1d09uni1d0auni1d0buni1d0cuni1d0duni1d0funi1d18uni1d19uni1d1auni1d1buni1d1cuni1d20uni1d21uni1d22uni1d9buni1d9duni1d9euni1d9funi1da4uni1da5uni1da6uni1dabuni1dacuni1daduni1daeuni1dafuni1db0uni1db1uni1db2uni1db7uni1db8uni1db9uni1dbcuni1dbduni1dbeuni1dbfuni1E00uni1E01 Bdotaccent bdotaccent Bdotbelow bdotbelow Blinebelow blinebelow Ccedillaacute ccedillaacute Ddotaccent ddotaccent Ddotbelowuni1E0D Dlinebelowuni1E0Funi1E10uni1E11Dcircumflexbelowdcircumflexbelow Emacrongrave emacrongrave Emacronacute emacronacuteEcircumflexbelowecircumflexbelow Etildebelow etildebelow Ecedillabreve ecedillabreve Fdotaccent fdotaccentGmacronuni1E21 Hdotaccent hdotaccentuni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E2Eidieresisacuteuni1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3BLcircumflexbelowlcircumflexbelowuni1E3Emacute Mdotaccent mdotaccentuni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49Ncircumflexbelowncircumflexbelowuni1E4C otildeacuteuni1E4Euni1E4Funi1E50uni1E51uni1E52 omacronacutePacutepacute Pdotaccent pdotaccent Rdotaccent rdotaccent Rdotbelowuni1E5Buni1E5Cuni1E5D Rlinebelowuni1E5F Sdotaccent sdotaccent Sdotbelow sdotbelowuni1E64uni1E65ScarondotaccentscarondotaccentSdotbelowdotaccentsdotbelowdotaccent Tdotaccent tdotaccent Tdotbelow tdotbelowuni1E6Euni1E6FTcircumflexbelowtcircumflexbelowUdieresisbelowudieresisbelow Utildebelow utildebelowUcircumflexbelowucircumflexbelow Utildeacute utildeacuteUmacrondieresisumacrondieresisVtildevtilde Vdotbelow vdotbelowWgravewgraveWacutewacute Wdieresis wdieresisuni1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8D Ydotaccent ydotaccent Zcircumflex zcircumflexuni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99arighthalfringuni1E9Buni1e9cuni1e9duni1e9euni1e9f Adotbelow adotbelow Ahookabove ahookaboveAcircumflexacuteacircumflexacuteAcircumflexgraveacircumflexgraveAcircumflexhookaboveacircumflexhookaboveAcircumflextildeacircumflextildeAcircumflexdotbelowacircumflexdotbelow Abreveacute abreveacute Abrevegrave abrevegraveAbrevehookaboveabrevehookabove Abrevetilde abrevetildeAbrevedotbelowabrevedotbelow Edotbelow edotbelow Ehookabove ehookaboveEtildeetildeEcircumflexacuteecircumflexacuteEcircumflexgraveecircumflexgraveEcircumflexhookaboveecircumflexhookaboveEcircumflextildeecircumflextildeEcircumflexdotbelowecircumflexdotbelow Ihookabove ihookabove Idotbelow idotbelow Odotbelow odotbelow Ohookabove ohookaboveOcircumflexacuteocircumflexacuteOcircumflexgraveocircumflexgraveOcircumflexhookaboveocircumflexhookaboveOcircumflextildeocircumflextildeOcircumflexdotbelowocircumflexdotbelow Ohornacute ohornacute Ohorngrave ohorngraveOhornhookaboveohornhookabove Ohorntilde ohorntilde Ohorndotbelow ohorndotbelow Udotbelow udotbelow Uhookabove uhookabove Uhornacute uhornacute Uhorngrave uhorngraveUhornhookaboveuhornhookabove Uhorntilde uhorntilde Uhorndotbelow uhorndotbelowYgraveygrave Ydotbelow ydotbelow Yhookabove yhookaboveYtildeytildeuni1F00uni1F01uni1F02uni1F03uni1F04uni1F05uni1F06uni1F07uni1F08uni1F09uni1F0Auni1F0Buni1F0Cuni1F0Duni1F0Euni1F0Funi1F10uni1F11uni1F12uni1F13uni1F14uni1F15uni1F18uni1F19uni1F1Auni1F1Buni1F1Cuni1F1Duni1F20uni1F21uni1F22uni1F23uni1F24uni1F25uni1F26uni1F27uni1F28uni1F29uni1F2Auni1F2Buni1F2Cuni1F2Duni1F2Euni1F2Funi1F30uni1F31uni1F32uni1F33uni1F34uni1F35uni1F36uni1F37uni1F38uni1F39uni1F3Auni1F3Buni1F3Cuni1F3Duni1F3Euni1F3Funi1F40uni1F41uni1F42uni1F43uni1F44uni1F45uni1F48uni1F49uni1F4Auni1F4Buni1F4Cuni1F4Duni1F50uni1F51uni1F52uni1F53uni1F54uni1F55uni1F56uni1F57uni1F59uni1F5Buni1F5Duni1F5Funi1F60uni1F61uni1F62uni1F63uni1F64uni1F65uni1F66uni1F67uni1F68uni1F69uni1F6Auni1F6Buni1F6Cuni1F6Duni1F6Euni1F6Funi1F70uni1F71uni1F72uni1F73uni1F74uni1F75uni1F76uni1F77uni1F78uni1F79uni1F7Auni1F7Buni1F7Cuni1F7Duni1F80uni1F81uni1F82uni1F83uni1F84uni1F85uni1F86uni1F87uni1F88uni1F89uni1F8Auni1F8Buni1F8Cuni1F8Duni1F8Euni1F8Funi1F90uni1F91uni1F92uni1F93uni1F94uni1F95uni1F96uni1F97uni1F98uni1F99uni1F9Auni1F9Buni1F9Cuni1F9Duni1F9Euni1F9Funi1FA0uni1FA1uni1FA2uni1FA3uni1FA4uni1FA5uni1FA6uni1FA7uni1FA8uni1FA9uni1FAAuni1FABuni1FACuni1FADuni1FAEuni1FAFuni1FB0uni1FB1uni1FB2uni1FB3uni1FB4uni1FB6uni1FB7uni1FB8uni1FB9uni1FBAuni1FBBuni1FBClenisprosgegrammenipsili perispomenidialytikaperispomeniuni1FC2uni1FC3uni1FC4uni1FC6uni1FC7uni1FC8uni1FC9uni1FCAuni1FCBuni1FCC psilivaria psilioxiapsiliperispomeniuni1FD0uni1FD1uni1FD2uni1FD3uni1FD6uni1FD7uni1FD8uni1FD9uni1FDAuni1FDB dasiavaria dasiaoxiadasiaperispomeniuni1FE0uni1FE1uni1FE2uni1FE3uni1FE4uni1FE5uni1FE6uni1FE7uni1FE8uni1FE9uni1FEAuni1FEBuni1FECdialytikavaria dialytikaoxiavariauni1FF2uni1FF3uni1FF4uni1FF6uni1FF7uni1FF8uni1FF9uni1FFAuni1FFBuni1FFCoxiadasiaenquademquadenspaceemspacethreeperemspacefourperemspace sixperemspace figurespacepunctuationspace thinspace hairspacezerowidthspacezerowidthnonjoinerzerojoinuni200Euni200F hyphentwo hyphennobreak figuredash quotedashdblverticalbar underscoredbl quotereversed quotedblrevtrianglebulletonedotenleadertwodotenleader hyphendot lineseparatorparagraphseparatorlrerlepdflrorlouni202Fpertenthousandprimesecond primetripleprimerev primedblrevprimetriplerevcaret referencemark exclamdbl interrobangoverlineuni203Ftie caretinsertasterism hyphenbulletuni2045uni2046uni2047uni2048uni2049uni204Auni204Buni204Cuni204Duni204Euni204Fclosureuni2051uni2052uni2053uni2054uni2055uni2056uni2057uni2058uni2059uni205Auni205Buni205Cuni205Duni205Euni205Funi2060uni2061uni2062uni2063uni2064 zerosuperioruni2071 foursuperior fivesuperior sixsuperior sevensuperior eightsuperior ninesuperior plussuperior minussuperior equalsuperiorparenleftsuperiorparenrightsuperior nsuperior zeroinferior oneinferior twoinferior threeinferior fourinferior fiveinferior sixinferior seveninferior eightinferior nineinferior plusinferioruni208B equalinferiorparenleftinferiorparenrightinferioruni2090uni2091uni2092uni2093uni2094uni20a0 colonmonetarycruzeiroliramillnairapesetarupeewonsheqeldongEurokiptugrikdrachmapfennigpesoguaraniaustralhryvniaceditenge indian_rupeeleftharpoonaccentrightharpoonaccentuni20D2uni20D3uni20d4uni20d5uni20D6uni20D7uni20d8uni20d9uni20dauni20DBuni20DCuni20DDuni20DEuni20DFuni20E0uni20E1uni20e4uni20E5uni20E6uni20E7uni20E8uni20E9uni20EAuni20EBuni20ECuni20EDuni20EEuni20EFuni20F0 accountofaddresssubjectCbb centigradeCLcareofcadaunaEulerscruple fahrenheitHscript HblackletterHbbplanck planckover2piIscriptIfrakturLscriptlitrelbbarNbbnumero recordright weierstrassPbbQbbRscriptRfrakturRbb prescriptionresponse servicemark telephoneversicleZbbOhmmho Zblackletteriotaturn degreekelvinangstromBscript Cblackletter estimatedescriptEscriptFscriptFturnMscript alephmathbethmath gimelmath dalethmathuni2139uni213auni213buni213cuni213euni213funi2141uni2142uni2143uni2144uni2145uni214auni214buni214duni214eonethird twothirdsuni2155uni2156uni2157uni2158uni2159uni215A oneeighth threeeighths fiveeighths seveneighthsuni215Funi2160uni2161uni2162uni2163uni2164uni2165uni2166uni2167uni2168uni2169uni216Auni216Buni216Cuni216Duni216Euni216Funi2170uni2171uni2172uni2173uni2174uni2175uni2176uni2177uni2178uni2179uni217Auni217Buni217Cuni217Duni217Euni217F arrowleftarrowup arrowright arrowdown arrowboth arrowupdn arrowupleft arrowuprightarrowdownright arrowdownleftuni21a4uni21a5 arrowbarrightuni21a7 arrowhookleftarrowhookrightuni21b4carriagereturnharpoonleftbarbuparrowleftbothalfharpoonupright harpoonupleftharpoonrightbarbuparrowrightbothalfharpoondownrightharpoondownleftuni21C4uni21C5uni21C6uni21c7uni21c8uni21c9uni21cauni21CBharpoonrightleft arrowdblleft arrowdblup arrowdblright arrowdbldown arrowdblboth arrowdblbothvuni21dcarrowsquiggleright universal complement existentialnotexistentialemptyset Delta.mathgradientelement notelementuni220Asuchthat notcontains ownersmalluni220euni2210uni2213dotplus slashmath backslashmath asteriskmath ringoperatoruni2219uni221buni221c proportionaluni221fangleuni2221uni2222dividesnotbarparallel notparallel logicaland logicalor intersectionunionuni222Cuni222Duni222E surfintegral thereforebecauseratio proportionuni2238uni2239uni223auni223bsimilar reversedtildelazysinv wreathproduct notsimilaruni2242 asymptequalnotasymptequal congruentapproxnotequalnotapproxequaluni2249uni224auni224buni224cequivasymptotic approachesuni2251uni2252uni2253uni2254uni2255 ringequaluni2258uni2259uni225auni225bdefinesuni225duni225euni225f equivalence notidenticalstrictequivalenceuni2266uni2267muchless muchgreaternotequivasymptoticnotless notgreater notlessequalnotgreaterequaluni2272uni2273uni2276uni2277precedesfollows precedesequal followsequaluni227euni227f notprecedes notsucceedssubsetsuperset notsubset notsuperset reflexsubsetreflexsuperset notsubseteqlnotsuperseteqluni228Cuni228duni228e squareimagesquareoriginal subsetsqequalsupersetsqequalintersectionsqunionsq circleplus circleminuscirclemultiply circledivide circledot circleringcircleasterisk circleequal circlevertbar turnstilelefttacklefttackdown perpendicular assertion truestatesatisfy triangleright trianglelefttriangleftequaltriangrightequalxornandnornarylogicaland narylogicalornaryintersection naryuniondotmathuni22C6bowtierevasymptequalcurlyorcurlyanduni22d6uni22d7uni22d8uni22d9preceedsnotequalfollowsnotequalnotsubsetsqequalnotsupersetsqequaluni22e6uni22e7uni22e8uni22e9uni22eeuni22efuni22f0uni22f1uni2300 ceilingleft ceilingright floorleft floorrightlogicalnotreversed integraltp integralbtfrown slurbelow angleleft anglerightuni239Buni239Cuni239Duni239Euni239Funi23A0uni23A1uni23A2uni23A3uni23A4uni23A5uni23A6uni23a7uni23a8uni23a9uni23aauni23abuni23acuni23aduni23aeuni23b2uni23b3uni2400uni2401uni2402uni2403uni2404uni2405uni2406uni2407uni2408uni2409uni240auni240buni240cuni240duni240euni240funi2410uni2411uni2412uni2413uni2414uni2415uni2416uni2417uni2418uni2419uni241auni241buni241cuni241duni241euni241funi2420uni2421blankbblankuni2424uni2425uni2426uni2460uni2461uni2462uni2463uni2464uni2465uni2466uni2467uni2468uni2469SF100000uni2501SF110000uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250BSF010000uni250Duni250Euni250FSF030000uni2511uni2512uni2513SF020000uni2515uni2516uni2517SF040000uni2519uni251Auni251BSF080000uni251Duni251Euni251Funi2520uni2521uni2522uni2523SF090000uni2525uni2526uni2527uni2528uni2529uni252Auni252BSF060000uni252Duni252Euni252Funi2530uni2531uni2532uni2533SF070000uni2535uni2536uni2537uni2538uni2539uni253Auni253BSF050000uni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254BSF430000SF240000SF510000SF520000SF390000SF220000SF210000SF250000SF500000SF490000SF380000SF280000SF270000SF260000SF360000SF370000SF420000SF190000SF200000SF230000SF470000SF480000SF410000SF450000SF460000SF400000SF540000SF530000SF440000upblockuni2581uni2582uni2583dnblockuni2585uni2586uni2587blockuni2589uni258Auni258Blfblockuni258Duni258Euni258Frtblockltshadeshadedkshadeuni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259F filledboxsquare boxrounded boxnestedsquarehorizontalfillsquareverticalfillsquareorthogonalcrosshatchfillboxleftdiaghatchboxrtdiaghatchboxcrossdiaghatchsquaresmallsolidwhitesmallsquare filledrect rectanglefilledvertrect vertrectanglefilledparallelogram parallelogram trianglesolidtrianglesmalltrianglesld smalltriangleblackrightpointingtrianglewhiterightpointingtrianglesmalltrianglerightsldsmalltrianglerightblackrightpointingpointer triagrtopentriangledownsld triangleinvsmalltriangleinvsldsmalltriangleinvblackleftpointingtrianglewhiteleftpointingtrianglesmalltriangleleftsldsmalltriangleleftblackleftpointingpointer triaglfopen diamondsolid diamondrhombdiamondrhombnestedfisheyecircle dottedcirclecircleverthatchbullseye circlesolid circleleftsldcirclerightsldcirclebottomsld circletopsld circlenesld circlenwopensemicircleleftsldsemicirclelertsld bulletinversewhitecircleinverseinvsemicircleupinvsemicircledn nwquadarc nequadarc sequadarc swquadarctoparc bottomarc trianglesesld triangleswsld tranglenwsld trianglenesld whitebullet squareleftsldsquarerightsld squarenwsld squaresesldsquarevertbisect triangledottriangleleftsldtrianglerightsld largecircleuni25f0uni25f1uni25f2uni25f3uni25f4uni25f5uni25f6uni25f7uni25f8uni25f9uni25fauni25fbuni25fcuni25fduni25feuni25ffuni262Cuni262Duni2639 smilefacespade heartopen diamondopenclubspadesuitwhiteheartdiamond clubsuitwhiteuni2669 musicalnotemusicalnotedbluni266Cuni266Duni266Euni266Funi2740uni2A00uni2A01uni2A02uni2A03uni2A04uni2A09uni2D30uni2D31uni2D32uni2D33uni2D34uni2D35uni2D36uni2D37uni2D38uni2D39uni2D3Auni2D3Buni2D3Cuni2D3Duni2D3Euni2D3Funi2D40uni2D41uni2D42uni2D43uni2D44uni2D45uni2D46uni2D47uni2D48uni2D49uni2D4Auni2D4Buni2D4Cuni2D4Duni2D4Euni2D4Funi2D50uni2D51uni2D52uni2D53uni2D54uni2D55uni2D56uni2D57uni2D58uni2D59uni2D5Auni2D5Buni2D5Cuni2D5Duni2D5Euni2D5Funi2D60uni2D61uni2D62uni2D63uni2D64uni2D65uni2D66uni2D67uni2D6Funi2e16uni2E17uni2e18uni2e1auni2e1buni2e1euni2e1funi2e28uni2e29uni2e2auni2e2buni2e2cuni2e2duni2e2euni2e30uniA500uniA501uniA502uniA503uniA504uniA505uniA506uniA507uniA508uniA509uniA50AuniA50BuniA50CuniA50DuniA50EuniA50FuniA510uniA511uniA512uniA513uniA514uniA515uniA516uniA517uniA518uniA519uniA51AuniA51BuniA51CuniA51DuniA51EuniA51FuniA520uniA521uniA522uniA523uniA524uniA525uniA526uniA527uniA528uniA529uniA52AuniA52BuniA52CuniA52DuniA52EuniA52FuniA530uniA531uniA532uniA533uniA534uniA535uniA536uniA537uniA538uniA539uniA53AuniA53BuniA53CuniA53DuniA53EuniA53FuniA540uniA541uniA542uniA543uniA544uniA545uniA546uniA547uniA548uniA549uniA54AuniA54BuniA54CuniA54DuniA54EuniA54FuniA550uniA551uniA552uniA553uniA554uniA555uniA556uniA557uniA558uniA559uniA55AuniA55BuniA55CuniA55DuniA55EuniA55FuniA560uniA561uniA562uniA563uniA564uniA565uniA566uniA567uniA568uniA569uniA56AuniA56BuniA56CuniA56DuniA56EuniA56FuniA570uniA571uniA572uniA573uniA574uniA575uniA576uniA577uniA578uniA579uniA57AuniA57BuniA57CuniA57DuniA57EuniA57FuniA580uniA581uniA582uniA583uniA584uniA585uniA586uniA587uniA588uniA589uniA58AuniA58BuniA58CuniA58DuniA58EuniA58FuniA590uniA591uniA592uniA593uniA594uniA595uniA596uniA597uniA598uniA599uniA59AuniA59BuniA59CuniA59DuniA59EuniA59FuniA5A0uniA5A1uniA5A2uniA5A3uniA5A4uniA5A5uniA5A6uniA5A7uniA5A8uniA5A9uniA5AAuniA5ABuniA5ACuniA5ADuniA5AEuniA5AFuniA5B0uniA5B1uniA5B2uniA5B3uniA5B4uniA5B5uniA5B6uniA5B7uniA5B8uniA5B9uniA5BAuniA5BBuniA5BCuniA5BDuniA5BEuniA5BFuniA5C0uniA5C1uniA5C2uniA5C3uniA5C4uniA5C5uniA5C6uniA5C7uniA5C8uniA5C9uniA5CAuniA5CBuniA5CCuniA5CDuniA5CEuniA5CFuniA5D0uniA5D1uniA5D2uniA5D3uniA5D4uniA5D5uniA5D6uniA5D7uniA5D8uniA5D9uniA5DAuniA5DBuniA5DCuniA5DDuniA5DEuniA5DFuniA5E0uniA5E1uniA5E2uniA5E3uniA5E4uniA5E5uniA5E6uniA5E7uniA5E8uniA5E9uniA5EAuniA5EBuniA5ECuniA5EDuniA5EEuniA5EFuniA5F0uniA5F1uniA5F2uniA5F3uniA5F4uniA5F5uniA5F6uniA5F7uniA5F8uniA5F9uniA5FAuniA5FBuniA5FCuniA5FDuniA5FEuniA5FFuniA600uniA601uniA602uniA603uniA604uniA605uniA606uniA607uniA608uniA609uniA60AuniA60BuniA60CuniA60DuniA60EuniA60FuniA610uniA611uniA612uniA613uniA614uniA615uniA616uniA617uniA618uniA619uniA61AuniA61BuniA61CuniA61DuniA61EuniA61FuniA620uniA621uniA622uniA623uniA624uniA625uniA626uniA627uniA628uniA629uniA62AuniA62B lowcircumflex colonmodifier shortequalsSaltillosaltillouniA7AAffffiffllongs_t m_n_armenian m_e_armenian m_i_armenian v_n_armenian m_x_armenianyodhiriqhebrewuniFB1EyodyodpatahhebrewayinaltonehebrewuniFB21uniFB22uniFB23uniFB24uniFB25uniFB26uniFB27uniFB28uniFB29shinshindothebrewshinsindothebrewshindageshshindothebrewshindageshsindothebrewalefpatahhebrewalefqamatshebrewalefdageshhebrewbetdageshhebrewgimeldageshhebrewdaletdageshhebrewhedageshhebrewvavdageshhebrewzayindageshhebrewtetdageshhebrewyoddageshhebrewfinalkafdageshhebrewkafdageshhebrewlameddageshhebrewmemdageshhebrewnundageshhebrewsamekhdageshhebrewpefinaldageshhebrewpedageshhebrewtsadidageshhebrewqofdageshhebrewreshdageshhebrewshindageshhebrewtavdageshhebrewvavholamhebrew betrafehebrew kafrafehebrew perafehebrewaleflamedhebrewunifff9unifffaunifffbunifffcuniFFFDuni10380uni10381uni10382uni10383uni10384uni10385uni10386uni10387uni10388uni10389uni1038auni1038buni1038cuni1038duni1038euni1038funi10390uni10391uni10392uni10393uni10394uni10395uni10396uni10397uni10398uni10399uni1039auni1039buni1039cuni1039duni1039funi103a0uni103a1uni103a2uni103a3uni103a4uni103a5uni103a6uni103a7uni103a8uni103a9uni103aauni103abuni103acuni103aduni103aeuni103afuni103b0uni103b1uni103b2uni103b3uni103b4uni103b5uni103b6uni103b7uni103b8uni103b9uni103bauni103bbuni103bcuni103bduni103beuni103bfuni103c0uni103c1uni103c2uni103c3uni103c8uni103c9uni103cauni103cbuni103ccuni103cduni103ceuni103cfuni103d0uni103d1uni103d2uni103d3uni103d4uni103d5uni10480uni10481uni10482uni10483uni10484uni10485uni10486uni10487uni10488uni10489uni1048auni1048buni1048cuni1048duni1048euni1048funi10490uni10491uni10492uni10493uni10494uni10495uni10496uni10497uni10498uni10499uni1049auni1049buni1049cuni1049duni104a0uni104a1uni104a2uni104a3uni104a4uni104a5uni104a6uni104a7uni104a8uni104a9uni10900uni10901uni10902uni10903uni10904uni10905uni10906uni10907uni10908uni10909uni1090auni1090buni1090cuni1090duni1090euni1090funi10910uni10911uni10912uni10913uni10914uni10915uni10916uni10917uni10918uni10919uni1091auni1091buni1091f bn_initekaar bn_initaikaarbn_reph bn_kaphala bn_nnaphala bn_taphala bn_thaphala bn_thaphala1 bn_dhaphala bn_naphala bn_below_ba bn_bhaphala bn_raphala bn_laphala bn_half_ka bn_half_kha bn_half_ga bn_half_gha bn_half_nga bn_half_ca bn_half_ca1 bn_half_cha bn_half_ja bn_half_jha bn_half_nya bn_half_tta bn_half_ttha bn_half_dda bn_half_ddha bn_half_nna bn_half_tha bn_half_dha bn_half_da bn_half_na bn_half_pa bn_half_pha bn_half_ba bn_half_bha bn_half_ma bn_half_ya bn_half_ra bn_half_la bn_half_sha bn_half_ssa bn_half_sa bn_half_ha bn_half_rra bn_half_rha bn_half_yyabn_half_asamirabn_half_asamiba bn_khaphala bn_phaphala bn_baphala1 bn_maphala bn_maphala1 bn_yaphalabn_k_rabn_k_ra1bn_kh_rabn_g_rabn_gh_rabn_c_rabn_ch_rabn_j_rabn_tt_ra bn_tth_rabn_dd_ra bn_ddh_rabn_t_rabn_t_ra1bn_th_rabn_d_rabn_dh_rabn_n_rabn_n_ra1bn_p_rabn_ph_rabn_b_rabn_bh_ra bn_bh_ra1bn_m_rabn_y_ra bn_ssa_mal_rabn_ss_rabn_s_rabn_s_ra1bn_h_ra bn_asamir_ra bn_asamib_ra bn_k_ss_rabn_k_kabn_k_tta bn_k_tt_rabn_k_tabn_k_ta1 bn_k_t_ba bn_k_t_ba1 bn_k_t_ra bn_k_t_ra1 bn_k_t_ra2bn_k_nabn_k_mabn_k_labn_k_ssa bn_k_ss_nna bn_k_ss_mabn_k_sabn_g_gabn_g_dabn_g_dha bn_g_dh_babn_g_labn_g_nabn_g_mabn_gh_na bn_nga_mal_kabn_nga_mal_k_rabn_nga_mal_k_ssabn_nga_mal_k_ss_rabn_nga_mal_kha bn_nga_mal_gabn_nga_mal_ghabn_nga_mal_gh_ra bn_nga_mal_mabn_nga_mal_ma1bn_c_cabn_c_cha bn_c_ch_ba bn_c_ch_rabn_c_nyabn_c_nabn_j_ja bn_j_j_babn_j_jhabn_j_nyabn_ny_ca bn_ny_chabn_ny_ja bn_ny_jha bn_tt_tta bn_tt_tt_rabn_tt_mabn_dd_ga bn_dd_ddabn_dd_ma bn_nn_tta bn_nn_tt_ra bn_nn_ttha bn_nn_dda bn_nn_dda1 bn_nn_dd_ra bn_nn_dd_ra1 bn_nn_ddha bn_nn_nnabn_nn_mabn_t_ta bn_t_t_babn_t_thabn_t_nabn_t_mabn_t_ma1bn_t_labn_d_gabn_d_ghabn_d_da bn_d_d_ba bn_d_d_rabn_d_dha bn_d_dh_babn_d_nabn_d_bha bn_d_bh_ra bn_d_bh_ra1bn_d_mabn_dh_nabn_dh_mabn_n_tta bn_n_tt_ra bn_n_tthabn_n_dda bn_n_dd_ra bn_n_ddhabn_n_ta bn_n_t_ba bn_n_t_ra bn_n_t_ra1bn_n_thabn_n_da bn_n_d_ba bn_n_d_rabn_n_dha bn_n_dh_ba bn_n_dh_rabn_n_nabn_n_mabn_n_ma1bn_n_sabn_p_ttabn_p_tabn_p_pabn_p_mabn_p_nabn_p_labn_p_sa bn_ph_ttabn_ph_labn_b_jabn_b_da bn_b_d_rabn_b_dhabn_b_nabn_b_bhabn_b_labn_bh_labn_m_tabn_m_thabn_m_dabn_m_nabn_m_na1bn_m_pa bn_m_p_ra bn_m_p_labn_m_pha bn_m_ph_rabn_m_bha bn_m_bh_ra bn_m_bh_ra1bn_m_mabn_m_ma1bn_m_labn_m_la1bn_m_sa bn_m_s_rabn_l_kabn_l_gabn_l_tta bn_l_tt_rabn_l_dda bn_l_dd_rabn_l_tabn_l_dabn_l_dhabn_l_pabn_l_pha bn_l_ph_rabn_l_mabn_l_la bn_ssa_mal_cabn_ssa_mal_cha bn_ssa_mal_ta bn_ssa_mal_na bn_ssa_mal_ma bn_ssa_mal_labn_ss_ka bn_ss_k_ra bn_ss_k_ra1 bn_ss_tta bn_ss_tta1 bn_ss_tt_ra bn_ss_tt_ra1 bn_ss_ttha bn_ss_nnabn_ss_pa bn_ss_p_ra bn_ss_pha bn_ss_ph_rabn_ss_ma bn_ss_ma1bn_s_ka bn_s_k_ra bn_s_k_ra1bn_s_khabn_s_tta bn_s_tta1 bn_s_tt_ra bn_s_tt_ra1bn_s_ta bn_s_t_ba bn_s_t_ra bn_s_t_ra1bn_s_thabn_s_nabn_s_na1bn_s_pa bn_s_p_ra bn_s_p_labn_s_pha bn_s_ph_rabn_s_mabn_s_ma1bn_s_labn_s_la1bn_h_nnabn_h_nabn_h_mabn_h_labn_h_la1bn_rr_gabn_k_babn_g_babn_gh_babn_c_babn_ch_babn_j_babn_tt_babn_dd_babn_nn_babn_t_babn_th_babn_d_babn_dh_ba bn_dh_ba1bn_n_babn_n_ba1bn_p_babn_b_babn_bh_babn_m_ba bn_m_b_rabn_m_ba1 bn_m_b_ra1bn_l_ba bn_ssa_mal_babn_s_babn_s_ba1bn_h_babn_h_ba1 bn_kh_r_ukaarbn_kh_r_uukaar bn_g_ukaar bn_g_r_ukaar bn_g_r_uukaar bn_g_l_ukaar bn_g_l_uukaar bn_j_r_ukaar bn_j_r_uukaar bn_t_r_ukaar bn_t_r_uukaar bn_th_r_ukaarbn_th_r_uukaar bn_d_ukaar bn_d_r_ukaar bn_d_r_uukaar bn_dh_r_ukaarbn_dh_r_uukaar bn_n_ukaar bn_n_uukaar bn_n_rikaar bn_n_t_ukaarbn_n_d_r_ukaarbn_n_d_r_uukaar bn_p_r_ukaar bn_p_r_uukaar bn_p_l_ukaar bn_p_l_uukaar bn_b_r_ukaar bn_b_r_uukaar bn_b_l_ukaar bn_b_l_uukaar bn_bh_r_ukaarbn_bh_r_uukaar bn_m_r_ukaar bn_m_r_uukaarbn_m_p_r_ukaarbn_m_p_r_uukaar bn_r_ukaar bn_r_uukaar bn_l_g_ukaarbn_ssa_mal_ukaarbn_ssa_mal_r_ukaarbn_ssa_mal_r_uukaarbn_ssa_mal_l_ukaarbn_ssa_mal_l_uukaarbn_ss_p_r_ukaarbn_ss_p_r_uukaar bn_s_ukaar bn_s_uukaar bn_s_rikaar bn_s_t_ukaar bn_s_r_ukaar bn_s_r_uukaarbn_s_p_r_ukaarbn_s_p_r_uukaarbn_s_p_l_ukaarbn_s_p_l_uukaar bn_s_l_ukaar bn_s_l_uukaar bn_h_ukaar bn_h_rikaarbn_asamir_ukaarbn_asamir_uukaarbn_asamib_ukaarbn_asamib_uukaarbn_asamib_r_ukaarbn_asamib_r_uukaar bn_k_hasanta bn_kh_hasanta bn_g_hasanta bn_gh_hasantabn_nga_mal_hasanta bn_c_hasanta bn_ch_hasanta bn_j_hasanta bn_jh_hasanta bn_ny_hasanta bn_tt_hasantabn_tth_hasanta bn_dd_hasantabn_ddh_hasanta bn_nn_hasanta bn_t_hasanta bn_th_hasanta bn_d_hasanta bn_dh_hasanta bn_n_hasanta bn_p_hasanta bn_ph_hasanta bn_b_hasanta bn_bh_hasanta bn_m_hasanta bn_y_hasanta bn_r_hasanta bn_l_hasantabn_ssa_mal_hasanta bn_ss_hasanta bn_s_hasanta bn_h_hasanta bn_rr_hasantabn_rra_mal_hasanta bn_yy_hasantabn_asamir_hasantabn_asamib_hasanta bn_post_k_raglyph569glyph570glyph571glyph572glyph57487 bn_baphala bn_below_ba2glyph578glyph579glyph580glyph581glyph582glyph583bn_ssa_mal_ra.001bn_yaphala.002bn_d_yabn_n_ya bn_la.001 bn_ssa_mal_yabn_ss_yabn_s_yaglyph593bn_h_yaglyph595 bn_ss_tta.002glyph597glyph598 bn_uukaar.1glyph600 deva_tta.nuktdeva_ttha.nuktdev_ii_anusvara.abvsdev_e_candra.abvsdev_o_candra.abvsdev_au_ra_candra.abvsdev_ai_ra_candra.abvsdev_ra_candra.abvs dev_cha.nuktdev_ha_rrvocalic.blwsdev_ka_ssa.akhndev_ja_nya.akhndev_ta_ta.pres dev_ta.vatudev_sha_ca.pres dev_sha.vatudev_sha_va.pres dev_za.vatu dev_sa.vatu dev_ra_u.blwsdev_ra_uu.blwsdev_ka_na.presdev_kha_na.presdev_gha_na.presglyph269 dev_ka.half dev_kha.half dev_ga.half dev_gha.half dev_ca.halfUNUSED_dev_ja_na dev_ja.half dev_jha.half dev_nya.halfdev_ta_na.presdev_tha_na.presdev_da_na.presdev_dha_na.pres dev_nna.half dev_ta.half dev_tha.halfdev_da_da_half.pres dev_dha.half dev_na.halfdev_na.half.nukt dev_pa.half dev_pha.half dev_ba.half dev_bha.half dev_ma.half dev_ya.halfdev_pa_na.presUNUSED_dev_ka_na dev_la.half dev_lla.half dev_llla.half dev_va.half dev_sha.half dev_ssa.half dev_sa.half dev_ha.halfdev_na_half_na.halfdev_ba_na.presUNUSED_dev_ba_nadev_ma_na.presdev_va_na.presdev_sha_na.presdev_ka_ka.presdev_nga_ka.presdev_nga_kha.presdev_nga_ga.presdev_nga_gha.presdev_nya_ja.presdev_da_gha.presdev_da_da.presdev_da_dha.presdev_da_ba.presdev_da_bha.presdev_da_ma.presdev_da_ya.presdev_da_va.presdev_tta_tta.presdev_tta_ttha.presdev_ttha_ttha.presdev_da_da_half_ga.presdev_da_da_half_dda.presdev_da_da_half_ddha.presdev_ha_half_ma.presdev_ha_half_ya.presdev_la_half_ha.presglyph335dev_sa_half_ta_half_ra.presglyph337dev_rra_ra.halfdev_ca_ca.halfdev_sa_na_half.presglyph341glyph342glyph343glyph344glyph345glyph346glyph347glyph348glyph349dev_ka_ssa.akhn.halfdev_ja_nya.akhn.halfdev_ta_ta.halfdev_ta.half.vatudev_sha_ca.halfdev_sha.vatu.halfdev_sha_va.halfdev_ha_rvocalic.blws dev_rakaardev_ra_anusvara.rphfdev_ha_ra.blws dev_ra.rphfdev_rakaar.blwfdev_kash_au_markdev_ii_ra.abvsdev_e_anusvara.abvs dev_e_ra.abvsdev_e_ra_anusvara.abvsdev_ai_anusvara.abvsdev_ai_ra.abvsdev_ai_ra_anusvara.abvsdev_sa_tta.half.vatudev_na_half_na.pres dev_nga.half dev_tta.half dev_ttha.half dev_dda.half dev_ddha.half dev_da.half dev_nga.vatu dev_cha.vatu dev_jha.vatu dev_tta.vatu dev_ttha.vatu dev_dda.vatu dev_ddha.vatu dev_ra.vatu dev_la.vatudev_sha_half_la_half.presdev_ssa_half_ta.presdev_ssa_half_ttha.presdev_ssa_half_ta_ra.vatudev_ssa_half_ttha_ra.vatudev_sha_half_na_half.presdev_sa_half_ta_half_EMPTY.presdev_da_half_ma_half.presdev_ta_half_na_half.presdev_ha_half_nna.presdev_ha_half_la.presdev_ha_half_va.presdev_pa_half_ta_half.presdev_ha_half_na.presdev_ha_half_ma_half.presdev_pa.half.vatudev_nga.half.nukt dev_ha.nukt dev_da.nuktdev_tta.nukt.haln dev_ttha.halndev_dddha.haln dev_rha.halndev_da.nukt.halndev_ha.nukt.halndev_nga.nukt.halndev_ha_half_nna.halndev_ha_half_na.halndev_ha_half_la.halndev_ha_half_va.halndev_pha_virama.nuktdev_ja_virama.nukt gur_ra.blwf gur_va.blwf gur_ha.blwfgur_ya_halant.pstfglyph152glyph153glyph154glyph155glyph156glyph157gur_ra_umatra.blwsgur_ha_umatra.blwsnounicode_3_1_3glyph161gur_ra_uumatra.blwsgur_ha_uumatra.blwsnounicode_3_1_30gur_na_uumatra_tippi.abvsgur_aamatra_bindi.abvsgur_u_addak.pstsgur_uu_addak.pstsgur_oo_addak.psts gur_ka.nukt gur_gha.nukt gur_nga.nukt gur_ca.nukt gur_cha.nukt gur_jha.nukt gur_nya.nukt gur_tta.nukt gur_ttha.nukt gur_ddha.nukt gur_nna.nukt gur_ta.nukt gur_tha.nukt gur_da.nukt gur_dha.nukt gur_na.nukt gur_pa.nukt gur_ba.nukt gur_bha.nukt gur_ma.nukt gur_ya.nukt gur_ra.nukt gur_va.nukt gur_ha.nukt gur_a.nukt gur_aa.nukt gur_i.nukt gur_ii.nukt gur_u.nukt gur_uu.nukt gur_ee.nukt gur_ai.nukt gur_oo.nukt gur_au.nuktgur_aa_bindi.abvsgur_va_umatra.blwsgur_va_uumatra.blws gur_ra.blws gur_ha.blws gur_va.blwscyrillic_cresc cyrillic_dotcyrillic_titlo ucas.ringucas.horizlineucas.shortvertucas.righttack ucas.lefttackcyrillic_ukrainian_yi_yi_ligEngsamisc.asc.bsc.csc.dsc.esc.fsc.gsc.hsc.isc.jsc.ksc.lsc.msc.nsc.osc.psc.qsc.rsc.ssc.tsc.usc.vsc.wsc.xsc.ysc.zsc.ae sc.oslash sc.ssharpsc.thornsc.eth sc.lslashsc.uhornsc.ohornmal_k1u1mal_k1u2mal_k1r1mal_k1r2mal_k1l1mal_k1k1 mal_k1k1u1 mal_k1k1u2 mal_k1k1r1 mal_k1k1r3 mal_k1k1r3u1 mal_k1k1r3u2mal_k1t1 mal_k1t1u1 mal_k1t1u2 mal_k1t1r3 mal_k1t1r3u1 mal_k1t1r3u2mal_k1nh mal_k1nhu1 mal_k1nhu2 mal_k1th1 mal_k1th1u1 mal_k1th1u2 mal_k1th1r1 mal_k1th1r2 mal_k1th1r3 mal_k1th1r3u1 mal_k1th1r3u2mal_k1n1 mal_k1n1u1 mal_k1n1u2mal_k1m1 mal_k1m1u1 mal_k1m1u2mal_k1r3 mal_k1r3u1 mal_k1r3u2mal_k1l3 mal_k1l3u1 mal_k1l3u2mal_k1sh mal_k1shu1 mal_k1shu2 mal_k1shr1 mal_k1shnh mal_k1shnhu1 mal_k1shnhu2 mal_k1shm1 mal_k1shm1u1 mal_k1shm1u2 mal_k1shm1r1mal_k1s1 mal_k1s1u1 mal_k1s1u2 mal_k1s1r1 mal_k1rhrh mal_k1rhrhu1 mal_k1rhrhu2mal_k2u1mal_k2u2mal_k2r1mal_k3u1mal_k3u2mal_k3r1mal_k3r2mal_k3k3 mal_k3k3u1 mal_k3k3u2 mal_k3k3r1mal_k3k4 mal_k3k4u1 mal_k3k4u2 mal_k3k4r1 mal_k3th3 mal_k3th3u1 mal_k3th3u2 mal_k3th3r1 mal_k3th3th4mal_k3th3th4u1mal_k3th3th4u2mal_k3th3th4r1mal_k3th3th4r3mal_k3th3th4r3u1mal_k3th3th4r3u2mal_k3n1 mal_k3n1u1 mal_k3n1u2mal_k3m1 mal_k3m1u1 mal_k3m1u2mal_k3r3 mal_k3r3u1 mal_k3r3u2mal_k3l3 mal_k3l3u1 mal_k3l3u2mal_k4u1mal_k4u2mal_k4r1mal_k4r2mal_k4n1 mal_k4n1u1 mal_k4n1u2mal_k4r3 mal_k4r3u1 mal_k4r3u2mal_ngu1mal_ngu2mal_ngk1 mal_ngk1u1 mal_ngk1u2 mal_ngk1r1mal_ngng mal_ngngu1 mal_ngngu2 mal_ch1u1 mal_ch1u2 mal_ch1ch1 mal_ch1ch1u1 mal_ch1ch1u2 mal_ch1ch2 mal_ch1ch2u1 mal_ch1ch2u2 mal_ch1ch2r1 mal_ch1ch2r3mal_ch1ch2r3u1mal_ch1ch2r3u2 mal_ch2u1 mal_ch2u2 mal_ch2r1 mal_ch2r3 mal_ch2r3u1 mal_ch2r3u2 mal_ch3u1 mal_ch3u2 mal_ch3r1 mal_ch3r2 mal_ch3ch3 mal_ch3ch3u1 mal_ch3ch3u2 mal_ch3ch3r1 mal_ch3nj mal_ch3nju1 mal_ch3nju2 mal_ch3r3 mal_ch3r3u1 mal_ch3r3u2 mal_ch4u1 mal_ch4u2 mal_ch4r1 mal_ch4r2 mal_ch4r3 mal_ch4r3u1 mal_ch4r3u2mal_nju1mal_nju2 mal_njch1 mal_njch1u1 mal_njch1u2 mal_njch1r1 mal_njch2 mal_njch2u1 mal_njch2u2 mal_njch2r1 mal_njch3 mal_njch3u1 mal_njch3u2mal_njnj mal_njnju1 mal_njnju2mal_t1u1mal_t1u2mal_t1r1mal_t1r2mal_t1t1 mal_t1t1u1 mal_t1t1u2mal_t1r3 mal_t1r3u1 mal_t1r3u2mal_t2u1mal_t2u2mal_t3u1mal_t3u2mal_t3r1mal_t3t3 mal_t3t3u1 mal_t3t3u2mal_t3t4 mal_t3t4u1 mal_t3t4u2mal_t3m1 mal_t3m1u1 mal_t3m1u2 mal_t3m1r1mal_t3r3 mal_t3r3u1 mal_t3r3u2mal_t4u1mal_t4u2mal_t4r1mal_t4r3 mal_t4r3u1 mal_t4r3u2mal_nhu1mal_nhu2mal_nht1 mal_nht1u1 mal_nht1u2 mal_nht1r3 mal_nht1r3u1 mal_nht1r3u2mal_nht2mal_nht3 mal_nht3u1 mal_nht3u2 mal_nht3r1 mal_nht3r3 mal_nht3r3u1 mal_nht3r3u2mal_nht4 mal_nht4u1 mal_nht4u2 mal_nht4r1mal_nhnh mal_nhnhu1 mal_nhnhu2mal_nhm1 mal_nhm1u1 mal_nhm1u2 mal_th1u1 mal_th1u2 mal_th1r1 mal_th1r2 mal_th1th1 mal_th1th1u1 mal_th1th1u2 mal_th1th1r1 mal_th1th1r2 mal_th1th1r3mal_th1th1r3u1mal_th1th1r3u2 mal_th1th2 mal_th1th2u1 mal_th1th2u2 mal_th1th2r1 mal_th1n1 mal_th1p4 mal_th1p4u1 mal_th1p4u2 mal_th1p4r1 mal_th1m1 mal_th1m1u1 mal_th1m1u2 mal_th1m1r1 mal_th1r3 mal_th1r3u1 mal_th1r3u2 mal_th1l3 mal_th1l3u1 mal_th1l3u2 mal_th1s1 mal_th1s1u1 mal_th1s1u2 mal_th1s1r1 mal_th1s1r2 mal_th1s1th2mal_th1s1th2u1mal_th1s1th2u2mal_th1s1th2r1 mal_th1s1n1 mal_th1s1n1u1 mal_th1s1n1u2 mal_th1s1m1 mal_th1s1m1u1 mal_th1s1m1u2 mal_th1s1m1r1 mal_th1s1r3 mal_th1s1r3u1 mal_th1s1r3u2 mal_th2u1 mal_th2u2 mal_th2n1 mal_th2n1u1 mal_th2n1u2 mal_th2m1 mal_th2m1u1 mal_th2m1u2 mal_th2m1r1 mal_th3u1 mal_th3u2 mal_th3r1 mal_th3r2 mal_th3th3 mal_th3th3u1 mal_th3th3u2 mal_th3th3r1 mal_th3th3r2 mal_th3th4 mal_th3th4u1 mal_th3th4u2 mal_th3th4r1 mal_th3th4r2 mal_th3th4n1mal_th3th4n1u1mal_th3th4n1u2 mal_th3th4m1mal_th3th4m1u1mal_th3th4m1u2mal_th3th4m1r1 mal_th3th4r3mal_th3th4r3u1mal_th3th4r3u2 mal_th3r3 mal_th3r3u1 mal_th3r3u2 mal_th4u1 mal_th4u2 mal_th4r1 mal_th4r2 mal_th4n1 mal_th4n1u1 mal_th4n1u2 mal_th4m1 mal_th4m1u1 mal_th4m1u2 mal_th4m1r1 mal_th4r3 mal_th4r3u1 mal_th4r3u2mal_n1u1mal_n1u2mal_n1r1mal_n1r2 mal_n1th1 mal_n1th1u1 mal_n1th1u2 mal_n1th1r1 mal_n1th1r2 mal_n1th1r3 mal_n1th1r3u1 mal_n1th1r3u2 mal_n1th2 mal_n1th2u1 mal_n1th2u2 mal_n1th2r1 mal_n1th2r2 mal_n1th3 mal_n1th3u1 mal_n1th3u2 mal_n1th3r1 mal_n1th3r3 mal_n1th3r3u1 mal_n1th3r3u2 mal_n1th4 mal_n1th4u1 mal_n1th4u2 mal_n1th4r3 mal_n1th4r3u1 mal_n1th4r3u2mal_n1n1 mal_n1n1u1 mal_n1n1u2 mal_n1n1r1 mal_n1n1r3 mal_n1n1r3u1 mal_n1n1r3u2mal_n1m1 mal_n1m1u1 mal_n1m1u2 mal_n1m1r1 mal_n1m1r3 mal_n1m1r3u1 mal_n1m1r3u2mal_n1r3 mal_n1r3u1 mal_n1r3u2mal_n1rh mal_n1rhu1 mal_n1rhu2mal_p1u1mal_p1u2mal_p1r1mal_p1r2mal_p1t1 mal_p1t1u1 mal_p1t1u2 mal_p1th1 mal_p1th1u1 mal_p1th1u2 mal_p1th1r1 mal_p1th1r2mal_p1n1 mal_p1n1u1 mal_p1n1u2mal_p1p1 mal_p1p1u1 mal_p1p1u2 mal_p1p1r1mal_p1p2 mal_p1p2u1 mal_p1p2u2mal_p1r3 mal_p1r3u1 mal_p1r3u2mal_p1l3 mal_p1l3u1 mal_p1l3u2mal_p1s1 mal_p1s1u1 mal_p1s1u2 mal_p1s1r1 mal_p1s1r3 mal_p1s1r3u1 mal_p1s1r3u2mal_p2u1mal_p2u2mal_p2k1 mal_p2k1u1 mal_p2k1u2mal_p2t1 mal_p2t1u1 mal_p2t1u2 mal_p2th1 mal_p2th1u1 mal_p2th1u2 mal_p2th1r1mal_p2n1 mal_p2n1u1 mal_p2n1u2mal_p2p1 mal_p2p1u1 mal_p2p1u2mal_p2m1 mal_p2m1u1 mal_p2m1u2mal_p2r3 mal_p2r3u1 mal_p2r3u2mal_p2l3 mal_p2l3u1 mal_p2l3u2mal_p2s1 mal_p2s1u1 mal_p2s1u2 mal_p2s1r1 mal_p2rhrh mal_p2rhrhu1 mal_p2rhrhu2mal_p3u1mal_p3u2mal_p3r1mal_p3k3 mal_p3k3u1 mal_p3k3u2 mal_p3k3r1 mal_p3ch3 mal_p3ch3u1 mal_p3ch3u2 mal_p3ch3r1 mal_p3th3 mal_p3th3u1 mal_p3th3u2 mal_p3th3r1 mal_p3th4 mal_p3th4u1 mal_p3th4u2 mal_p3th4r1 mal_p3th4r2mal_p3n1 mal_p3n1u1 mal_p3n1u2mal_p3p3 mal_p3p3u1 mal_p3p3u2mal_p3p4mal_p3r3 mal_p3r3u1 mal_p3r3u2mal_p3l3 mal_p3l3u1 mal_p3l3u2mal_p4u1mal_p4u2mal_p4r1mal_p4r2mal_p4r3 mal_p4r3u1 mal_p4r3u2mal_m1u1mal_m1u2mal_m1r1mal_m1r2mal_m1n1 mal_m1n1u1 mal_m1n1u2mal_m1p1 mal_m1p1u1 mal_m1p1u2 mal_m1p1r1 mal_m1p1r3 mal_m1p1r3u1 mal_m1p1r3u2mal_m1m1 mal_m1m1u1 mal_m1m1u2 mal_m1m1r1mal_m1r3 mal_m1r3u1 mal_m1r3u2mal_m1l3 mal_m1l3u1 mal_m1l3u2mal_y1u1mal_y1u2mal_y1r1mal_y1k1 mal_y1k1u1 mal_y1k1u2 mal_y1k1r1 mal_y1k1k1 mal_y1k1k1u1 mal_y1k1k1u2 mal_y1ch1 mal_y1ch1u1 mal_y1ch1u2 mal_y1th1 mal_y1th1u1 mal_y1th1u2 mal_y1th1r1 mal_y1th1th1mal_y1th1th1u1mal_y1th1th1u2mal_y1th1th1r1mal_y1n1 mal_y1n1u1 mal_y1n1u2mal_y1p1 mal_y1p1u1 mal_y1p1u2 mal_y1p1r1mal_y1m1 mal_y1m1u1 mal_y1m1u2 mal_y1m1r1mal_y1y1 mal_y1y1u1 mal_y1y1u2mal_r3u1mal_r3u2mal_r3r1mal_l3u1mal_l3u2mal_l3r1mal_l3k1 mal_l3k1u1 mal_l3k1u2 mal_l3k1r1 mal_l3k1k1 mal_l3k1k1u1 mal_l3k1k1u2mal_l3k3 mal_l3k3u1 mal_l3k3u2 mal_l3k3r1 mal_l3ch1 mal_l3ch1u1 mal_l3ch1u2 mal_l3th1 mal_l3th1u1 mal_l3th1u2 mal_l3th1r1 mal_l3th1th1mal_l3th1th1u1mal_l3th1th1u2mal_l3p1 mal_l3p1u1 mal_l3p1u2 mal_l3p1r3 mal_l3p1r3u1 mal_l3p1r3u2mal_l3p2 mal_l3p2u1 mal_l3p2u2mal_l3p3 mal_l3p3u1 mal_l3p3u2mal_l3m1 mal_l3m1u1 mal_l3m1u2mal_l3l3 mal_l3l3u1 mal_l3l3u2mal_v1u1mal_v1u2mal_v1r1mal_v1r3 mal_v1r3u1 mal_v1r3u2mal_v1l3 mal_v1l3u1 mal_v1l3u2mal_v1v1 mal_v1v1u1 mal_v1v1u2mal_z1u1mal_z1u2mal_z1r1 mal_z1ch1 mal_z1ch1u1 mal_z1ch1u2 mal_z1ch1r1 mal_z1ch2 mal_z1ch2u1 mal_z1ch2u2 mal_z1ch2r1mal_z1n1 mal_z1n1u1 mal_z1n1u2mal_z1m1 mal_z1m1u1 mal_z1m1u2 mal_z1m1r1mal_z1r3 mal_z1r3u1 mal_z1r3u2mal_z1l3 mal_z1l3u1 mal_z1l3u2mal_z1z1 mal_z1z1u1 mal_z1z1u2 mal_z1z1r1 mal_z1z1r3 mal_z1z1r3u1 mal_z1z1r3u2mal_shu1mal_shu2mal_shr1mal_shk1 mal_shk1u1 mal_shk1u2 mal_shk1r1 mal_shk1k1 mal_shk1k1u1 mal_shk1k1u2 mal_shk1k1r1 mal_shk1r3 mal_shk1r3u1 mal_shk1r3u2mal_sht1 mal_sht1u1 mal_sht1u2 mal_sht1r1 mal_sht1r2 mal_sht1r3 mal_sht1r3u1 mal_sht1r3u2mal_sht2 mal_sht2u1 mal_sht2u2mal_shnh mal_shnhu1 mal_shnhu2mal_shp1 mal_shp1u1 mal_shp1u2 mal_shp1r1 mal_shp1r3 mal_shp1r3u1 mal_shp1r3u2mal_shp2 mal_shp2u1 mal_shp2u2mal_shm1 mal_shm1u1 mal_shm1u2 mal_shm1r3 mal_shm1r3u1 mal_shm1r3u2mal_s1u1mal_s1u2mal_s1r1mal_s1r2mal_s1k1 mal_s1k1u1 mal_s1k1u2 mal_s1k1r1 mal_s1k1k1 mal_s1k1k1u1 mal_s1k1k1u2 mal_s1k1k1r1 mal_s1k1r3 mal_s1k1r3u1 mal_s1k1r3u2mal_s1k2 mal_s1k2u1 mal_s1k2u2mal_s1t1 mal_s1t1u1 mal_s1t1u2 mal_s1t1r3 mal_s1t1r3u1 mal_s1t1r3u2 mal_s1th1 mal_s1th1u1 mal_s1th1u2 mal_s1th1r1 mal_s1th1r2 mal_s1th1r3 mal_s1th1r3u1 mal_s1th1r3u2 mal_s1th2 mal_s1th2u1 mal_s1th2u2 mal_s1th2r1mal_s1n1 mal_s1n1u1 mal_s1n1u2mal_s1p1 mal_s1p1u1 mal_s1p1u2 mal_s1p1r1 mal_s1p1r3 mal_s1p1r3u1 mal_s1p1r3u2mal_s1p2 mal_s1p2u1 mal_s1p2u2mal_s1m1 mal_s1m1u1 mal_s1m1u2 mal_s1m1r1mal_s1r3 mal_s1r3u1 mal_s1r3u2mal_s1l3 mal_s1l3u1 mal_s1l3u2mal_s1s1 mal_s1s1u1 mal_s1s1u2 mal_s1s1r1 mal_s1s1r3 mal_s1s1r3u1 mal_s1s1r3u2 mal_s1rhrh mal_s1rhrhu1 mal_s1rhrhu2 mal_s1rhrhr3mal_s1rhrhr3u1mal_s1rhrhr3u3mal_h1u1mal_h1u2mal_h1r1mal_h1n1 mal_h1n1u1 mal_h1n1u2mal_h1m1 mal_h1m1u1 mal_h1m1u2 mal_h1m1r1mal_h1r3 mal_h1r3u1 mal_h1r3u2mal_h1l3 mal_h1l3u1 mal_h1l3u2mal_lhu1mal_lhu2mal_lhlh mal_lhlhu1 mal_lhlhu2mal_zhu1mal_zhu2mal_zhk1 mal_zhk1u1 mal_zhk1u2 mal_zhk1k1 mal_zhk1k1u1 mal_zhk1k1u2 mal_zhch1 mal_zhch1u1 mal_zhch1u2 mal_zhth1 mal_zhth1u1 mal_zhth1u2 mal_zhth1th1mal_zhth1th1u1mal_zhth1th1u2mal_zhn1 mal_zhn1u1 mal_zhn1u2 mal_zhn1n1 mal_zhn1n1u1 mal_zhn1n1u2mal_zhp1 mal_zhp1u1 mal_zhp1u2mal_zhm1 mal_zhm1u1 mal_zhm1u2mal_zhv1 mal_zhv1u1 mal_zhv1u2mal_zhs1 mal_zhs1u1 mal_zhs1u2mal_rhu1mal_rhu2mal_rhrh mal_rhrhu1 mal_rhrhu2mal_l4 mal_n1th4r1mal_k1xxmal_k2xxmal_k3xxmal_k4xxmal_ngxx mal_ch1xx mal_ch2xx mal_ch3xx mal_ch4xxmal_njxxmal_t1xxmal_t2xxmal_t3xxmal_t4xxmal_nhxx mal_th1xx mal_th2xx mal_th3xx mal_th4xxmal_n1xxmal_p1xxmal_p2xxmal_p3xxmal_p4xxmal_m1xxmal_y1xxmal_r3xxmal_rhxxmal_l3xxmal_lhxxmal_zhxxmal_v1xxmal_z1xxmal_shxxmal_s1xxmal_h1xxmal_r4mal_y2mal_y2u1mal_y2u2mal_v2sc.i_dot zeroslashedsquareoperatorcircleoperatorcyrillic_serb_be grave_cap acute_capcircumflex_cap caron_caphungarianumlaut_cap gravedbl_cap caron_side dapostrophe lapostrophe tapostrophefit.0fit.1fit.2fit.3fit.4fit.5fit.6fit.7fit.8fit.9dev_93f_902.abvsdev_940_902.abvs dev_i_ra.abvsdev_i_ra_anusvara.abvsdev_candrabindu_combdev_ka_half_ta_half.presdev_tta_nukt.rkrfdev_ttha_nukta.rkrfdev_dda_nukta.rkrfdev_ddha_nukta.rkrf dev_qa.half dev_khha.half dev_ghha.half dev_za.half dev_fa.halfdev_o_ra_anusvara.abvsdev_au_ra_anusvara.abvsindic_question indic_exclam dev_ka.vatu ÿÿPX5ƒ„„…‹ŒŒ����‘•––—œ��ž£¤¤¥«¬¬­­®±²µ¶¶·¼½½¾ÃÄÅÆÕÖרêëëììíïðóôõöö÷÷ø-./0abcdpqrs���‘¯°°±ÇÈÈÉÉÊÊËabbc¢£¼½½¾ÃÄÅÆñòòóôõûüÒÓÓÔÖ×àááâãäåææç=>XY[\^_•––——˜˜™œ�¤¥¨©©ª¬­³´½¾¿ÀÌÍÎÏ    6789_``aabbcdeefghpqsttuuv€�‚„……†ÊËËÌÎÏÐÑáâçè   % & ' ( / 0 7 8 ? @ B C C D I J Q R û ü   b c e f f g g h h i k l<=HIIJJKtuuv$%%&EFHIJKKLVWWX[\\]`aabfgghhiijoppqqrrsstuv€€�‹ŒŒ��ŽŽ�’““”¦§§¨¨©©ª±²²³º»»¼½¾¾¿ÊËËÌÐÑÑÒÔÕÕÖãääåëììíóôôõõöö÷÷øøù  !"##$$%%&())*+,,-233445569::;EFFGHIIJJKKLOPRSUVVWWXXYjkmnˆ‰‹ŒÁÂÈÉÉÊÒÓÔÕÕÖØÙÙÚÚÛàáâããääåæçèéøùùúþÿÿ  !:;;<<==>@AIJQRSTTUVWWXXY^_uvvw��’““”Ÿ  ¡ÈÉÍÎÏÐÐÑÕÖÖ×ùúGHHI¡¢¢£$%%&RS^_abmnnopq|}~×äææèéëìîî\^––˜˜� ¡¤­­®®¯±²³¾¿ Ü DFLTŒarmnœbengªbng2Ìcyrlîdev2devaRgeor”gjr2žgrek¨gujr´gur2¾guruÔhebrêlatnmlm2pmly2|mlym†phnx syrcªtml2´ugar¾xpeoÈÿÿ(9ÿÿÿÿ  )-037ÿÿ  )-037MKD SRB ÿÿ(ÿÿ# SAN &ÿÿ  $&*48ÿÿ  $&+48 SAN &ÿÿ  $&*48ÿÿ  $&+48ÿÿÿÿÿÿ(ÿÿÿÿ '.1ÿÿ '.1IWR JII ÿÿÿÿ.CAT @ISM HLSM HNLD PNSM HSKS HTRK Xÿÿ (5ÿÿ!ÿÿ%ÿÿ"ÿÿ6ÿÿÿÿÿÿ ,/2ÿÿÿÿÿÿÿÿÿÿ:aalt^abvsdabvsjakhnpakhnvakhn|blwf‚blwfˆblwfŽblwf”blwsšblws blws¦blws¬c2sc²c2sc¸ccmp¾ccmpÄccmpÌdligØdligÞfracähalfêhalfðhalföhalnühalnhalnhlighliginitliga liga&liga,liga2locl8locl>loclDnuktJnuktPpnumVpres\presbpreshpresppstfvpstf|pstf‚pstsˆpstsŽpsts”rphfšrphf smcp¦smcp¬vatu²vatu¸zero¾/ 4%6'18,!39  (7."< $ # 0+:*2=-5;&)>~†Ž–ž¦°¸ÀÈÐØâêòú "*2:BJRZblz‚Š”œ¤¬´¼ÄÌÔÜäìôü $,4<HPX`hpx&œºØö(2®².z¬¼Àltx| Œ Š ¨¸îþ Ø ú   Z ¢ ä ü L X^þˆ¾Zdj|š6‚®x ¶!"è"î$è%%$%€%®%Ú'+ê,H.B.R/¤5dN"N„ñ¤óËñv d $*06<BHNT C¬Ê´È²�¯ï©í§ë¦±«°¥¯¤®£ °¯÷¥LM yy/O ô-õM,L6",b¾q¾c¾r¾28RXÎ ,>Pbt†˜ª¼ Ä©„¥ Ö©Œ¥ î©�¥ ©–¥ .©�¥ Å©¤¥ ש¬¥ ï©°¥ ©¶¥ /©½¥ $(,28DHLRX&8Z|žÀâ  "¬ $¦ £ ¤  <¬ >¦ :£ 8¤  N¬ P¦ L£ J¤  #¬ %¦ !£ ¤  =¬ ?¦ ;£ 9¤  O¬ Q¦ M£ K¤  ,¬ .¦ *£ (¤  -¬ /¦ +£ )¤„Œ–¤¬¶ÄÅ SàLóJ"ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñôòöóõ÷ùø D]¡¡¨¨²²ººÀÀcc rr!aòJ"ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòöóõS÷ùø $=ˆˆ’’šš  òòbb qq!B 0 _¶_¸ `¶`¸ a¶a¸GOW6 "(AIO@IL?O>L=IIBWAË ¦&Pf� c ¡ c " i ¡ i d ¡ d e ¡ e " j ¡ j g ¡ g k ¡ kOA²¥ÖËËöBHNTZ`flrx~„Š�–œ¢¨®´ºÀÆÌÒØÞäêðèéoèoéïãðãñãòãóãôãõã÷ãøãùãúãûãýãÿãããããããã ãôàðæúææUX[t HÛJÞø uûï6 , G¹E·D±CÂFÂÀÊÓαÂ",6@J^hr|†�¤®¸´˜µ˜¶˜€˜�˜©·˜á˜â˜¸˜¹˜‚˜Ž˜©º˜»˜�˜ ˜qrsux{|}~‚‡‹• " ë©“ì©zqxU©ŒR©Œ6 (?©v©L©€©©„©v€„$-`jt~ˆ’œ¦°ºÄÎØâìö (2<FPZfpz„Ž˜¢¬¶ÀÊÔÞèòüú©û©ü©ý©a©þ©©©©b©c©d©e©©© ©f© © ©©©©©©©>© j>©©©©©©©©©v©w©x©y©z©J©K©N©O©P©qvx„†•´·#ºº'ëì(ïñ*6",tRuRrRsR¸¹áâîRB$.8MRR_jsntnqr®",6@JT^hr|†�š¤RgRhRiRjRkRlRmRîRnRoRðRóRòRquwy{|}~€ŒŽ’”·2$>HRdnxŠ”ž¨Òäq$qö„ø„)x x „„`„ |„„!„"„ $u p#„ñ‘ïv r|q{ (t's&r%q 3|2{/Š*t„úý  abfö $.8B\fpª´@ ÷„퀄7~6}5s:•<"(.4~}„{‘zŽy9‹8Š4|$*06<w1‘0‹.‰-ˆ,ƒ+‚ f ”û  cf’2>T[U^^U^çU]{U^|U^æU]&.6|¨^{§^^¤^[£^ç¤]æ¨]£¤§¨U‚(2DV`SUnUXU ZUY^ \^]Uå] S^è]]¤Z£^›œ£¤§U6  õžô�TRQŸê Œ•Š &0:DNXblv€…©†©ƒ©„©Š©Œ©�©‹©‰©ˆ©‡© ¸¹áâyz{}€�‚ ~}" þyê +Š &0:DNXblv€É êøùúüý+Â%PZdnx‚Œ– ª´¾ÈÒÜæðú",6@JT^hr|†�𤮏 !"#$&'()*+,-./1023456789:;<=>?@ABCê  +,#V>HR\fpz„Ž˜¢¬¶ÀÊÔÞèòü$.8BLJLMNOPQRSTUVXYZ[]^_`bcdefhjkêíïñô÷ù  ,,yy*  DEIëÿš:d®àê,NhФ¾TÖ"T^ØJ|ÖXz„ $³±°ý¯ú­ù  &,28>D|xwvýsVoùnRmôlê &,ƒ‚ý�ü~û}ì„ý$*06<�‹íŠì‰ëˆk‡y†J…ê ”ý’P�ð�ï˜ó—ò•ñ œò›ñšð™ïŸžR�ô¢¡ö ì$*06<¬«øª÷¨T¦ö¥õ¤R£ô ÁÀý$*06<¿½`¼¹ü¸Y¶ûµí´ì"(.4:@FLRX^djpv|ÖÔÓýÒZÐüÏYÍûÌúÊVÈùÇ÷ÆTÅöÄõÃRÂô"(.4ÝÜÛýÚÙþØù×ô ßÞô &,æåãüâYáûàñç &,28>DJPV\bhntúfù÷õó`òñ^ðÿïÜî]íþëýêûéúèù$*06<BHNTZ`fl^ÿþüûùTÿöþRýôüìûê &,  ý ù ð ï $*06<BHNT^ÿ]þøõRôJê"(.4:@FLRX^djpv|421^0ÿ/Ü.]-þ+ý*ú(V&ù$R"ô!ëJê 987ý6ø;ì{zø!"#$')*,.01234567:;<=>?yÎ:z„– ª´¾ÈÒÜæø  *4FPbl†˜ª¼Îàò(:L^p‚”¦°ÂÌÖàêô"4FXbt†˜ª¼<É [=É>É?É@ÉAÉBÉCÉDÉEÉ fGÉHÉJÉLÉMÉNÉOÉ €SÉ ‚TÉUÉ–•WÉ ˜— š™ ZY ]\ a` cb ed hg ji rq vu zy |{ „ƒ Ž� œ›qÉ _^‘É–É®É·ÉºÉ nÉÉÎÉ po ts xw ~}� †… ˆ‡ Œ'É �� ’‘ ”“:êìíïðñôöøùûüýþ +,LMQVXYZ]_`bdfjo��•­¶¹ÈÍÏÜæîü&./4Z*6BNÓ jIÔ jIÖ jI× jIØ jIÚ jIûý Â%PZdnx‚Œ– ª´¾ÈÒÜæðú",6@JT^hr|†�𤮏�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁê  +,# þæ(V`jt~ˆ’œ¦°ºÄÎØâìö (2<FPZdnx‚Œ– ª´¾ÈÒܾe¿eÀeÁeÂeÃeÄeÅeÆeÇe¦eqere§e¨e©eªese«e¬e­e®e¯e°e±e²e³e´eµe¶eue·e¸e¹eºe»e`e¼ebe½e:OQ_aa%cd&*  �o‘o’o^ad“o]Z &@ËožjšiÍoÊjÉiÌoŸj›i�‘’, "È8¡j€¢8;Wf*  £�¤�¥�>?B DT€ž®¾êú 2ʲʲ*ʸʯ'ʸʤ'ʧʨ  ʹʯ ʹʩʹʦ-ʨʯ*ʨʩ¹Ê²Ê²7ʥʥ ʩʩʥʥʖʖ~Ê–Ê–åʲʲ«Ê–Ê– –˜¥§¬³µ¸¹¨<‚¶ÂØî.:Z˜Öì`žÜ$DP„�Äø6’ (08@#ʸʯʩ ʤʠÿÊ–þÏ $,OÊ©Dʧ@Ê™<ʘRʯ_Ê©kÊšgÊ–sÊœpÊ›ˆÊŸ„Ê� "¢ÊŸŸÊ�›Êœ—Êœ©Ê ºÊ¯·Ê£´Ê¢&.6ÞʯÛʤ×Ê£ÐÊ¢ÏÊ¡ÉÊ &.6ʹöʯòÊ®ñÊ©íʦåʥʯʩ%ʨ ʧ>ʯ;Ê© (08@tʲjʯcÊ©]ʨVʧQʦIÊ¥&.6“ʹŠÊ¬†Ê«ƒÊ©~Ê¥{Ê &.6µÊ¹¬Ê¯©Ê«¦Ê©ŸÊ œÊ– (08@ÖÊ®ÓÊ­ÐÊ©ËʨÇʧÃÊ�¿Ê˜òʯëÊ«èÊ©%ʲ $,FʯCÊ­@ʬ3Ê¥,ʘýÊ´ $,ʯ ʹʩ ʥʖ $,pÊ·fʯcÊ©_Êœ[Ê›&.6šÊ¬�ʤ�Ê¡…Ê �ʯzÊ– $,4<DLTÔʯÑʬÇÊ©Ãʦ»Ê¥µÊ ²Ê—Þʹ§Ê–ñʯîÊ©–˜™š›�Ÿ ¢¤¥¦§¨©«¬­¯²³´µ·¸¹ºZ*6BNçÊ jâÊ jãÊ jäÊ jåÊ jæÊ j–¤©±³´ò$Nblv€Š”ž¨²¼ÆÐÚäø  4>HR\fp„Ž¢¶ÀÊÔÞèçÊ j*Ê+Ê,Ê-Ê.Ê/Ê0Ê1Ê2Ê3Ê4Ê5Ê6Ê7ÊâÊ j8Ê9Ê:Ê;Ê<ÊãÊ j=Ê>Ê?Ê@ÊAÊBÊCÊäÊ jDÊEÊåÊ jFÊæÊ jGÊHÊIÊJÊKÊLÊMÊ–©«º(ʳ&6@JT^hr|†�𤮏ÂÌÖàêôþ (X(ý(�(²(Ú(ù(I(R(m(Û(ø( ³X³ý³�³²³Ú³ù³I³R³m³Û³ø³–˜¥«¬­¯³¶·¹º*,9>?@BFIJLM*M ª´¾ÈÒÜæðú",6@JT^hr|†š®ÂÖêþ&:NbvŠž²ÆÚî*>RfzŽ¢¶ÐÚäîø  *4>HR\fpz¼Öèòü NUNbN}N‹N’N¬N¾NÄNúN4NBNqN�N¯N×NáNöNONjN NØNõNʱN ʱ NʱNLʱLNwʱwNÌʱÌNÔʱÔNêʱêNʱN1ʱ1NNʱNNZʱZN`ʱ`NgʱgNnʱnN—ʱ—NïʱïN=ʱ=NtʱtN‚ʱ‚NŠÊ±ŠN—ʱ—N¯Ê±¯N¸Ê±¸NÀʱÀNÎʱÎNâʱâNèʱèN.¹±¥U±b±}±‹±’±¬±¾±Ä±ú±4±B±q±�±¯±×±á±ö±$*06<¯«© å ¥›ÿÿ–:«0›)ÿ «›O±j±  ±“« رʫõ±M–˜™œ�ž ¢£¥§¨©«¬­®¯¶·¸¹ºÿHsÉÐå%IV]cj“ë:pz…“§µ»ÊÞå*,-0124679;<=>?@ABCFHIJKLMâðæ"DfxФÆèú.Hbt–¨Êì0B\~ Öð.\’¬Æè.@Rd†˜ª¼Îàú &@Rl† ºÌÞð&8Rdv�¢´Îàò   8 J \ n € ’ ¤ ¾ Ð â ô  2 L ^ p ’ ¤ ¾ Ø ò   8 R d ~ � ¢ ¼ Þ  , > P b | Ž °  ä þ  * < V h ‚ ” ¦ ¸ Ê ì þ*<NhzŒž¸ÊÜî,>XrŒ®ÀÒäö4F`r„ž°ÂÜö"<Vh‚”®ÀÒäö,>Pj„–°ÂÔî4FhzŒž¸ÊÜî4FXj|ž°ÊÜö4FXr„–¨ºÔæø .@Rdvˆš¬¾Ð ýÃüÂûÁúÀ7Â6Á5À ;Ã:Â9Á8À ^Ã]Â\Á[À fÁeÀ oÁnÀ|Â{ÁzÀ ƒÃ‚Â�Á€À ‘Ã�Â�ÁŽÀ –Á•À ¨Ã§Â¦Á¥À °Á¯À³Â²Á±ÀÃÂÂÁÁÀ ÈÁÇÀ äÃãÂâÁáÀ ÁÀ ÃÂÁÀ :Ã9Â8Á7À HÃGÂFÁEÀ zÃyÂxÁwÀ ›ÁšÀ¾Â½Á¼À àÃßÂÞÁÝÀ çÃæÂåÁäÀ$*0OÁOÀOþÂýÁüÀ! ÁÀ $Á#À$Â#Á"À üÁûÀ "(RÁRÀRÁÀ$*0WRÁVRÀURNÂMÁLÀZÂYÁXÀyÂxÁwÀ ¦Ã¥Â¤Á£ÀíÂìÁëÀÂÁÀ ÁÀ ÁÀ  Á À Á À ÃÂÁÀ ÁÀ ÁÀ ÁÀ ÁÀ "Á!À&Â%Á$À )Á(À-Â,Á+À1Â0Á/À 4Á3À?Â>Á=ÀCÂBÁAÀGÂFÁEÀKÂJÁIÀ NÁMÀ QÁPÀ TÁSÀ WÁVÀ ZÁYÀ aÁ`À dÁcÀjÂiÁhÀ mÁlÀ rÁqÀvÂuÁtÀ yÁxÀ Á~À‡Â†Á…À ŠÁ‰À �ÁŒÀ ”Á“ÀšÂ™Á˜ÀžÂ�ÁœÀ ¡Á À ¤Á£À «ÁªÀ ®Á­À ¶ÁµÀ ¹Á¸À½Â¼Á»À ÀÁ¿À ÆÁÅÀ ËÁÊÀ ÎÁÍÀÓÂÒÁÑÀ ÖÁÕÀÚÂÙÁØÀ ÝÁÜÀ àÁßÀ éÃèÂçÁæÀ ìÁëÀðÂïÁîÀõÂôÁóÀùÂøÁ÷À üÁûÀ ÿÁþÀ ÃÂÁÀÂÁÀ  Á ÀÂÁ À ÁÀ ÁÀÂÁÀ $Ã#Â"Á!À )Ã(Â'Á&À ,Á+À0Â/Á.À 3Á2À 6Á5À =Á<ÀAÂ@Á?À DÁCÀ MÃLÂKÁJÀ PÁOÀ UÃTÂSÁRÀYÂXÁWÀ \Á[À)Â_Á^À bÁaÀfÂeÁdÀ iÁhÀmÂlÁkÀ pÁoÀ sÁrÀ vÁuÀ }Á|À ‚Ã�€ÁÀ …Á„À‰ÂˆÁ‡À ŒÁ‹À �ÁŽÀ ’Á‘À–•Á”À ™Á˜À žÁ�À ¡Á À¥Â¤Á£À ¨Á§À «ÁªÀ ®Á­À ±Á°À ´Á³À¸Â·Á¶À »ÁºÀÂÂÁÁÀÀÆÂÅÁÄÀÊÂÉÁÈÀ ÏÃÎÂÍÁÌÀ ÒÁÑÀ ÕÁÔÀ ÙÁØÀ ÜÁÛÀ ãÁâÀ êÁéÀîÂíÁìÀ ñÁðÀõÂôÁóÀ øÁ÷À ûÁúÀÂÁÀ ÁÀ ÁÀ  Á ÀÂÁÀ ÁÀÂÁÀÂÁÀ(Â'Á&À +Á*À/Â.Á-À 2Á1À6Â5Á4À 9Á8À <Á;À ?Á>À BÁAÀ EÁDÀ HÁGÀ KÁJÀ QÁPÀ TÁSÀ^Â]Á\ÀbÂaÁ`À eÁdÀiÂhÁgÀ lÁkÀ oÁnÀsÂrÁqÀ vÁuÀ}Â|Á{À�€ÁÀ „ÁƒÀ ‰ÃˆÂ‡Á†À ŒÁ‹À �ÁŽÀ ’Á‘À–•Á”À ™Á˜À œÁ›À ŸÁžÀ ¢Á¡ÀªÂ©Á¨À®Â­Á¬À ±Á°À ´Á³À ·Á¶À ºÁ¹À ¿Ã¾Â½Á¼À ÂÁÁÀÆÂÅÁÄÀ ÉÁÈÀÍÂÌÁËÀ ÐÁÏÀ ÓÁÒÀ×ÂÖÁÕÀ ÚÁÙÀ ÝÁÜÀáÂàÁßÀ äÁãÀ çÁæÀ êÁéÀ ðÁïÀôÂóÁòÀ ÷ÁöÀ úÁùÀ ÿÁþÀ ÁÀ ÁÀ  Á À  Á À ÁÀ ÁÀ ÁÀ ÁÀ ÁÀ "Á!À 'Á&À QÁPÀð–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©«¬­®¯°±²³´µ¶·¸¹ºÿ   #'*.2<@DHLORUX_bgkpsw}„ˆ‹’—›Ÿ¢©¬´·º¾ÄÉÌÐÔ×ÛÞåêíòöúý   %*-14;>BINQVZ]`cgjnqt{~ƒ†Š��“—œŸ¢¦©¬¯²µ¹¿ÃÇËÐÓ×Úáèëïòöùÿ  %),037:=@CFIOR[_cfjmptz~‚…Š��“—š� §«¯²µ¸»ÀÃÇÊÎÑÔØÛÞâåèîñõøý  %OZ*6BNçÊ jâÊ jãÊ jäÊ jåÊ jæÊ j–¤©±³´*  OÊNÊRʰ±¶ àÎDFLTŒarmn˜beng¤bng2²cyrlÀdev2Ðdevaâgeorôgjr2grek gujrgur2$guru0hebr@latnhmlm2tmly2~mlymŒphnxšsyrc¦tml2²ugar¾xpeoÊÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIWR JII ÿÿ ÿÿ ÿÿ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿabvmnabvmtabvmzblwm€blwm†blwmŒblwm”kernšmark mark¦mark®mark¸markÀmarkÈmarkÔmkmkÜmkmkâmkmkè     .:BJRZdlt|„Œ”œ¤¬¶¾ÆÎØâ¾xÈDhºPrP |p "ˆ'ü+Š+Ä6`:¨CòE`IRIžJ¶SÀZ[ˆ¨†®  &,28>DJPV\bhnteIUeeÑee�eÿ°eÿMeÿ“eye<eoeÿËIÿéIIdjnopœ¢£¤¦§¨UZ]]þãe>þD >DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìllT:n”rl@lDŠ läløl:lŒlÿB�ÿ°eÿVlÿˆl”‚l<ldl¾lPl‚D DþlllHlÿœ:ÿØ:ÿâ:b:`dijlmnop›œ¡¢£¤¥¦§¨«BCDGHIUZ]n^ÿBezæª {øþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š�–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔsf'fyfÉf¿fdêf‡f¤fÃg¿fþf f#feqfhfYf»e d c¦ffâfJf¬ffêfíf‹f�f¡føf¾fâgbfbfJf f fˆf6f–fTf”fˆfªaÃg¿fqf e¨g–eâgþdàdêf½g£aÿºe^ºa¹g[i_d˜i¡e#aeg4cžge.e:cœc«^±d ^ýgýdúd§iŽgÌc�g¶gš^½g·ekj÷d÷a«a�gúd¥aWcªh›gªgžjúdôa÷dýd÷d c”e©e·c¢g d¢d¨gŠgjùe÷aòda‹aôdgacehkkq•šš-´½.ÖÖ8áâ9ää;éê<óö>B*=CQQWTTX__YghZjn\qtay{e}~h€Žjqqyz\]^–¡¢£¤­¯°±çèSUYZ[\]^Z`flrx~„Š�–œ¢¨®´ºÀÆÌÒØÿ‹kÿ¥eÿ¦eÿËeÿŽgÿÄeÿµfÿ¹fÿËaÿeÿjeÿ’GÿÁeÿÉeÿºeÿÀeÿºeÿ·eÿ·eÿºeÿÀeÿ·e¢,¼ k®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š�–œ¢¨®´ºÀÆÌÒØÞäêðöüp÷€8—œÿÿ|÷¢¢÷Þ…ÿúÂüzÿò0´PL& 8H Kÿþ  „ €ÿþ>ÿöÐ÷òÊÃ÷$„ŇÿÛ¤è¨÷ÊÊQpp)s†„²íÔv㘜"ÀJÿôVÿé$ÒÃÿ‘FðfVpN).ÿ·onllrsovp÷�ÿÿ8—™ÿÃzÙŸÿÿ0“Tÿÿ6ÿJ4%ÿJp)kÿøœãÂÿÿ™ÿþMÿõ_wÿÿ©ÿçLÿÉ|ÿÄQÿ­¶Îÿ§6ÿ®WËŶÇÿ§?ÿ.'ÿ31ÿ3÷ÿhˆÿ0šÿ0iM†LWmÿÿ”ÿ¶`ÿ¶–*»îuìÿ‡äÿ�lÿ4ÿ4f:ÿ4ÿ4vÿ4:ÿ4eR; 4ÿ4 ÿ>ÿ‘÷ÿ‹Úÿšÿ”äÿŽiÿ­·ÿÔbßDÿ ÿ*€ÿ Dÿ éq•——%šœ&¥¨)´»-óö59*<:JKMQQOTTPgnQqtYy{]}~`�‚bŽŽdquej �žŸ ©²³¾¿RV .4:@FLRX^djÿHÿèÿsÿÞÿmÿÑÿƒUÿkÿéÿ%ÿéÿ%ÿéÿoSÿ{ãÿ„¾ÿ ÿö&0  ÿ’ÿtÿÿ¾˜R� $ÿ=ÿòÿ`ÿóÿ[ÿóÿƒz@6F %LRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $ 5Š5 5j585Æ5¬5ä5B55N5v5`585è5 5Æ5Š5ø5 55ä5ˆ5H5”5i5R5™5y5U5ž5v5w55¢5¢5R5–ºËˆ06&> #HNTZ`flrx~„Š�–œ¢¨®´ºÀÆÌÒØÞäêðöüVÿê*ÿêÿê«ÿêWÿêÁÿêeÿê·ÿêiÿê«ÿê½ÿêùÿêeÿê—ÿê—ÿê9ÿê£ÿêïÿêýÿêýÿêÿêËÿêÙÿê ÿêùÿêÑÿêCÿê?ÿêÿê£ÿêËÿêMÿê�ÿêQÿêÙÿê–³¶ºÏÐ ÿœHÿœÞ|Nˆ H’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<Æ€˜€È€X€*€&€à€&€N€ô€€ô€ô€ô€à€à€€þ€ô€¤€þ€à€þ€Ö€ô€ê€ô€Ö€ê€ô€D€Ö€€:€Ö€þ€þ€Ì€|€ê€b€ô€€þ€þ€&€X€€€ô€ô€à€ê€@€ô€¤€þ€à€þ€Ö€,€ê€Ö€à€÷€D€Ö€à€Ì€Æ€f€Ð€:<@ADdff&qu'‚‚,¦À-7klm$ÿ\€ÿz€ÿz€ÿz€\Fd 'PV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4.€8€V€`€B€V€8€B€8€L€.€.€.€V€.€.€.€V€.€.€.€B€8€€L€j€€`€ˆ€8€L€L€8€.€œ€B€.€L€L€Ddqu!‚‚&€� ÿ`€ÿ?€Ü®þ Tª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š�–œÆÿö˜ÿöÆÿöäÿöþÿöÆÿö†ÿö¼ÿö0ÿöàÿö&ÿöPÿöþÿöÿöþÿöôÿöÖÿöàÿöàÿö@ÿöôÿöÿöÿöôÿöàÿöþÿöàÿö,ÿöêÿöôÿöÖÿöêÿöþÿöDÿöÌÿö:ÿövÿöÖÿöþÿöÿöÂÿö–ÿöxÿöêÿöbÿöôÿöôÿöþÿöþÿö�ÿöHÿö0ÿöXÿöþÿöÿöÿöÖÿöàÿöôÿö@ÿöôÿöšÿöôÿöàÿöþÿöàÿö,ÿöôÿöÖÿöÖÿöþÿöDÿöÖÿöÌÿöÌÿöÆÿöpÿöÐÿöÚÿöôÿöÆÿö†ÿö¼ÿö˜ÿö:=@dgh)qu+‚„0¦Á3ÄÈOop……�’”ŸÉÍ^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâþÞÿöþÞÿöÿ ÿöÿ`ÿñÿ`ÿ`ÿñÿ`ÿñÿ`ÿñÿ`ÿñþòÿñÿ$ÿñÿ`ÿñÿ`-ÿ`KÿUÿ`7ÿ`‡ÿ`‘ÿ`wÿ`Ÿÿ`wÿ`�ÿ`•:.B  ‚ÿ´‚ÿ´‚ÿ¾‚hklm78 ÿ€ÿµ€ÆžÎ R¦¬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š�–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†ŒŒÿìŒÿì@ÿìxÿìnÿì–ÿì‚ÿì–ÿììÿìÿì‚ÿìZÿììÿìdÿì<ÿìFÿìFÿì‚ÿìPÿì<ÿì ÿìŒÿìdÿìdÿìÿìxÿì ÿì2ÿì(ÿìxÿìÿì<ÿìZÿìÿìxÿìZÿì‚ÿìnÿìFÿìPÿìZÿì(ÿì<ÿì<ÿì<ÿìxÿìxÿì–ÿì‚ÿììÿØFÿÎöÿØdÿì2ÿº<ÿì‚ÿìZÿØFÿÎŒÿìZÿìZÿÎÿìnÿì(ÿì2ÿØ(ÿìÿì2ÿÎPÿì<ÿâdÿìnÿìZÿØŒÿì–ÿìTÿºnÿÎnÿØ–ÿØ‚ÿì–ÿìŒÿì:=@dqu)‚ƒ.¥Á0ÄÈMij þ´ÿìþ´ÿìâÆì v|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š�–œ¢¨®´9]�C�q]"{]"W·9·u�99ÿœé··£·)Õ·éÁ•ÅkßÏ »Õ·9Á·Sa‰�‰9·…%£ÿœC ')* ,= >Xntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ ~//jMCj8$ý~BC~CLCLCB9BM~/9&6  eÝÄÝø ×ßââ *06<BHNTZ`---------î& <z€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜ,,öž;fª;<jÈöN;,¿;, ,PÂ…qÖÕÇ,††††,,¢6¾¾@«ÈðJ,,ú""@ÂŒrf6ïýÿ KKUX[u!×ßââ *06<BHNTZ`,,,,,,,,,R<\ @‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š�–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*@XuXŠ,XZXÞ2ðXiXh2,XNXÞ26XnX72kX,X2ªX;X)26XpX92@XgX?2iX.XúXGXÄ2X]XÞ26XáXÈ26XqX526X\XG2lXÈXWXy2@XhX:2;X‚XR2XgX«XhX §XFX6XkXa26XoX82XNXÞ2†XcX2|X X�2ÚXnXÒXeXËX`X,XuXM2†X¥Xè܆XuXè܆X£X†XiX,XuX,XuX,XuXXaXXuXXMX,XkX¾XaXXWXJXkX«XMXXMXXaX†XíX,XWXXaX,XuX,XkX"XkX,XkX,XkXXMXªXkX�X�X–XÿÿX2ÖX2®Xý2àXkXª^X÷X…2ï KKUuàãæ,X,ÚXÜ–þ Q¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„wØuØHٌؓØrØrØSØTØ5ØCØÆØ^ØÃØKØØCØoسØqØ…Ø`ØHØyØ6Ø;Ø£ØSØTØ6ØŸØ™ØÜØ»ØnØWØiØuØ!ðê!Þ!G!!�!í! !ò!!7! !! !&! !Í!å!§£ô! !!N!M!z!e!þ!ö! !7! !ø!vä‹ÏI!F! !ѰWêuÚGú£  vvxz}~ƒŒŽ¬®Ã/ÈËEÍÎIÓÕKäåNììP£¤§©«²´áãäõö÷øÐ>DJPV\bhntz€†Œ’ÿ]ÿLÿXÿVÿTÿ3ÿYÿZ.ÿ^=ÿ@.ÿ<#ÿ:%ÿ_8ÿc8ÿ 0&6 ÿXèÿX·ÿW¾¥÷øùþÑ{RF° çÐÖÜâèîôú $*06<BHNTZ`flrx~„Š�–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š�–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4V;|YNN�h’îY.©ÿþ[ˆ/ˆ_P:hIÔFY=ÿÿˆÿ8njÿ8d’ ÿ8ÿ8eò¢òñeí_îXXXXXXnXXXX’’•’††ƒ††mmnmW)°ÿÿÿÿÿÿÿÿqo��÷÷÷÷iiXXXÿÿbXÿÿXÿÿ•…’�—†’m†ƒ†8Ðm÷m÷l m÷m÷S€P<ZF¼Yà´ÿðˆ ˆ ÿ8hò^ƒlXÿ8%øÿ8þöô–ÿ8ûÿ8ûÿ8Žd’ÿ8,ÿ8ÿ8  ²ÿ8ñó±ÿ8ñ’ûßõíí)ÿi¬þÕ4ÿÿü%Ö%ùöáñRðúíÆ,$=D]‚ˆ4Š‘;”˜C›ŸH¡¨Mª±U´¸]»¿bÁÅgÔÙlÜÝrêïtòóz|*3„89ŽHH�PR‘WW”ZZ•]^–be˜ggœqr�ttŸ‘” ðð¤óü¥þÿ¯±  ¶·¸))¾22¿77À=>Á@@ÃDHÄuuÉØòÊøùå¹¼¿ÃÆÊ ÌÖÜßèèêìðñ!öù#üý'ÿÿ)*+  ,  -1ÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæÿKÿ]ÿÿÿXÿbÿþÿTÿ\ÿ\ÿ[þòÿ(ÿ ÿÿ#ÿ ÿ"ÿZÿXÿYÿVÿWÿZÿÿþÑþÒÿ ÿ ÿþÿÿþìÿZÿ"ÿFþÝÿýþöÿÿþÐÿÿþöÿÿþòÿÿþòÿÿþàÿÿþÏÿÿþÏÿÿþÏÿÿþÏÿÿÿÿÿÿÿ@fF kØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTVÿü3ÿÿ’Åÿü¿cÿÿÔ:o0ºnÿþXÿüXÿüXÿüXÿüXÿüXÿü=ÿÿ=ÿÿ=ÿÿ=ÿÿ’’—’ÃÿüÃÿüÃÿüÃÿüÃÿüÄÄÄÄaÿÿàààààà:DDDrp‚‚66666¿¿¿¿xÿþxÿþXÿüàXÿüà=ÿÿD=ÿÿD=ÿÿD=ÿÿD•†’‚•†’nÃÿü6Ãÿü6Ãÿü6ĿĿĿĿĿaÿÿxÿþº·³ÿý’ÿÿiQÿý>ÿÿk$(,28<DHLRX\‚ƒ„…†‡Š‹Œ�Ž��‘”•–—˜›œ�žŸ¢£¤¥¦§ª«¬­®¯°±´µ¶·¸»¼½¾¿ÁÂÃÄÅÔÕÖרÙÜÝêëìíîïòó*+,-./012389ruØÜàæìðËÿjÿÿ.ž ¡DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š�–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþMÙ4Ù}ÙRÙNÙNÙ�ÙhÙŽÙ�ÙYÙŒá©×táˆÙ(ÙˆÙXÙOÙ=ÙhÙIÙÔÙPÙYÛAÙ«Ø{رØûdÌoç€çhÌgç–  ¶ö†œ ûhøîùná‹Ù6Ù°ƒOÙOÙ’ÙÙo+8ÙÐhÙPæ<æ^èFäYÛ¸ÌYÙÿ°¯ÝˆÙ ˆÙ ?ÐhÙ hÙúGÙ$Ù ö…Ù AÙm%ø þöôþeû�gç–2    Ûù#ôçuÙù çôçþ綘¸‘Äô Ú  ð í í ) ÿ f  þ a4 % Ñ % ô õ ã  ñ R ð úð Æ (   .$=D]ˆˆ4šš5¡¡6¨¨7°°8ÆÇ9ÚÛ;ðñ=óó?  @A45CHHEPRFVWIZZK]^LbeNggRqrSttUvvVy|Wª«[àà]ðð^óõ_÷øbûüdþÿfhi  lmn22t47u::y=>z@@|DH}uu‚ØóƒøùŸbb£·àçééíïóõ"úû%þþ'(*, ü ý9 ;  ? A  B  C  DE"(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š�–œ¢¨®¢ÿ^ÿOÿUÿR>ÿX>ÿRAÿUÿUÿUÿÿUÿ/ÿUÿU#ÿU ÿ:ÿU,ÿX,ÿSÿ[ÿXÿRÿUþÐÿBÿBÿ=ÿXÿ&ÿUÿ0ÿÿ3ÿ>ÿsÿ=ÿ[þîÿþÒþÒþÒþÖTþþþñþóþíþúÿ þþÿþòþÿþþþëþ÷þöþöþÜòþ±òþöþÍÿÉþÛþ¸ÿÿÌÿ2X` "FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú çÙT٘ș/¸¥�Ò²ä²jÔ²šž´²ûh•�pu†{£š¤÷¶i Ÿ  2288D]ÏÏ  ]]uuææ ìì!¸¾ ÿy øÖ& Y´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄSSS l SSSmb SQ/=yvhUhThXh~hip’hõhNŒ/h©hnh…h6h„h]hKl>hfoF­ÖhJvWÇ5hø  „MÐ kB}BÜRfR– û °ò‡0ýö0fïïåí’[÷Úáòñô i±öÖ4 #Û"øòãþï5Só ùHç$= D]$uu>Øñ?רÙÚÛúû þ ÿ        V\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎþâÿþó þ^÷þ¤Aþ¤dþûnÿ1;ÿQ(ÿ<ÿ ÿÿ ÿÿ ÿÿ(ÿ(ÿ(ÿ(ý¼(þ–dÿ(þ\ÿ@8ÿìÿö§§¶¶··ÒÒ¨§¶·ÒüX¶ÿìÿöÿìÿöÿØÿâÿÎÿìÿöÿûÿâÿûÿñÿöÿìÿØÿöÿâÿöwwxx€€‚‚‡‡‹‹ŽŽ’’””••––——˜˜žž ¢ xx„„‹‹’’••––˜˜¡¡££¤¤¦Ówx€‚‡‹Ž’”•–—˜ž ¡¢F@ÿÄÿØÿìÿìÿâÿØÿâÿìÿâÿöÿâÿâÿìÿçÿñÿâÿØÿÎÿÉÿâÿÎÿâÿöÿâÿÎÿìÿâÿâÿöÿöÿÎÿìÿìÿöÿìÿâÿØÿÎÿÉÿØÿÎÿìÿìÿöÿØÿâÿâÿâÿìÿìÿØÿöÿìÿìÿâÿâÿØÿÓÿÎÿìÿìÿØÿâÿâÿØÿìÿìÿâÿâÿØÿìÿâÿâÿÎÿâÿìÿÓÿìÿâÿØÿÓÿÎÿØÿìÿâÿâÿâÿöÿâÿìÿØÿÎÿØÿìÿâÿØÿØÿâÿÎÿìÿâÿØÿÎÿÉÿØÿìÿÓÿâÿØÿâÿöÿìÿìÿÉÿÎÿÎÿöÿÄÿÝÿÝÿçÿÓÿìÿöÿØÿÓÿÎÿØÿâÿâÿìÿâÿâÿìÿÎÿØÿìÿÎÿâÿâÿìÿØÿñÿìÿØÿÓÿÉÿÄÿØÿâÿìÿØÿØÿöÿØÿìÿâÿØÿâÿØÿçÿâÿØÿÎÿÉÿØÿØÿìÿìÿöÿâÿìÿöÿìÿØÿâÿâÿöÿÎÿâÿâÿâÿâÿìÿìÿâÿØÿÓÿÄÿØÿìÿØÿÎÿâÿØÿØÿØÿâÿÄÿâÿâÿìÿØÿâÿìÿØÿÓÿÎÿâÿØÿìÿØÿìÿÎÿìÿìÿöÿñÿöÿâÿâÿØÿöÿÎÿöÿöÿöÿöÿìÿöÿöÿöÿìÿìÿìÿöÿØÿöÿâÿØÿÉÿâÿÎÿìÿìÿØÿöÿØÿìÿöÿÎÿöÿìÿöÿçÿìÿâÿÝÿØÿÎÿöÿØÿØÿØÿìÿØÿâÿØÿØÿìÿØÿØÿØÿâÿØÿçÿìÿâÿÝÿØÿÄÿÎÿÎÿÎÿâÿâÿÄÿØÿìÿâÿÎÿÄÿØÿÎÿâÿØÿÎÿÉÿÄÿÎÿØÿâÿâÿöÿìÿØÿìÿâÿÎÿØÿâÿØÿâÿØÿÎÿÎÿÉM$$%%&'(())**+,--..//01 22 33 44 55 66 779:;;<<==‚‡ˆˆ‰‰Š�Ž‘’’”˜ šš ŸŸ  ÂÂÄÄÆÆÈÈÊÊÌÌÎÎÐÐÒÒÔÔÚÚÜÜÞÞààââääøøûûýýÿÿ       "" $$&&88::??yy¶¶ | | „ „ ˜ ˜ Ð Ð Ú Ú Ü Ü ä ä æ æ 6 6 l lˆ$$&&(())**++,,--..//01224466779:;;<<==DDFGHHII JJMM PQ RRSSTTUUVV WW XXYZ[[ \\]] ‚ˆ‰‰Š�Ž‘”˜ššŸŸ¢¨©©ª­²²³³ ´¸ºº»¾¿¿ÁÁÂÂÃÃÄÄÅÅÆÆÇÇÈÈÊÊËËÌÌÎÎÏÏÑÑÔÔÕÕ××ÚÚÛÛÜÜÞÞààááââããääååøøûûýýÿÿ       !! ""## $$%% &&++--//11338899::;;<< ==>> ??@@ ˜ ˜ » » Ñ Ñ Ú Ú Û Û Ü Ü Ý Ý ä ä å å æ æ ç ç 6 6 l l m m=> @A `$%&'()*+,-./012345679:;<=‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’”•–—˜šŸ ÂÄÆÈÊÌÎÐÒÔÚÜÞàâäøûýÿ "$&8:?y¶ | „ ˜ Ð Ú Ü ä æ 6 ltÐÒÿöÿöÿìÿñÿöÿöÿçÿöÿöÿñÿöÿìÿçÿìÿñÿñÿöÿûÿöÿñÿöÿûÿìÿçÿñÿöÿûÿûÿûÿöÿûÿìÿöÿìÿûÿìÿûÿìÿöÿöÿöÿöÿìÿöÿìÿñÿìÿöÿìÿûÿûÿñÿìÿñÿìÿöÿñÿöÿûÿìÿìÿöÿâÿñÿñÿìÿñÿöÿñÿûÿñÿìÿìÿçÿìÿöÿçÿñÿçÿñÿìÿìÿöÿöÿìÿöÿìÿÝÿñÿìÿöÿûÿöÿûÿöÿöÿâÿìÿØÿìÿöÿìÿìÿöÿñÿìÿìÿöÿìÿöÿöÿñÿöÿñÿìÿìÿñÿñÿâÿìÿìÿìÿìÿìÿìÿìÿìÿìÿöÿìÿâÿìÿöÿâÿìÿçÿìÿ°ÿ°ÿrÿìÿÎÿ°ÿ°ÿÎÿÎÿÎÿÄUDDEFGGHHIIJJKKLLMMNN OOPQRSTTUU VV WW XXYZ [[ \\ ]]¢§¨¨©©ª­³³´¸ºº»¾¿¿ ÁÁ ÃÃÅÅÇÇÉÉËËÍÍÏÏÑÑÕÕ××ÙÙÛÛÝÝááããååùù     !! ## %% ''++--//113399 <<>>@@vv … … � � » » Ñ Ñ Û Û Ý Ý å å ç ç m m ==>>@AEDDFHIIJJKL MMOO PQRRSS TTUU VVWWXX YZ[[\\]] ¢¨©­¯¯ ³³´¸»¾ ¿¿ÁÁÃÃÅÅÇÇËËÏÏÑÑÕÕ××ááããååññ    !!##%%++ -- // 11 33 99<< >> @@ 55 � � Ñ Ñ Û Û Ý Ý å å ç ç m m=AiDEFGHIJKLMNOPQRSTUVWXYZ[\]¢£¤¥¦§¨©ª«¬­³´µ¶·¸º»¼½¾¿ÁÃÅÇÉËÍÏÑÕ×ÙÛÝáãåù !#%'+-/139<>@v … � » Ñ Û Ý å ç m=>@Avf| +X^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNT Рвl�Š*:H:²Ðî&øbîX\p¨¨äž”ŠÆŠ ÿêžÿþä0ž¨îDŠ0¼ÿê žÿô”Š>¼Š€b²vvX”lžvžŠ>&²0¼v¨lvв€”vžDÞ & þÿÿý¢N¬ ¨RX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š�–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<J†�hšJ¸ÿÌþÌÆ&@:JÌ0@|Ö&†^^rš^@Ö:|hJ®®h®¸ÿþÌÿÌ@ÿ¤h(ÿ|�ÿ¤�ÿ¤�ÿ¸�ÿ¤�ÿ6šÿ@þÿê†ÿr†ÿ6šÿ^†ÿ6®ÿ^�ÿš�ÿ¤�ÿhšÿ¤�ÿ�†ÿ¤¸ÿršÿJ�ÿ¤¤ÿ¤†ÿ¤®ÿhšÿ^šÿ†ÿ|¤ÿ¤JÿÌ^ÿ@�ÿT^ÿÂÿT^ÿš�ÿJÿ†JÿÖ¤¤ÿ|ÿÌrÿÌhÿ6�ÿô�ÿ¤0ÿ|hÿr@ÆÆôÿ|bÿ"TþÈžÿ@Öÿr@ôÿ^:ÿTÂÿ|Nÿ||ÿ|ÿ|†þúNÿ|¤ÿ|®ÿ@TTÿ¤rÿ¤ÿ@^ÿ^ÿ|66ÿTrÿ¤rÿ†ÿ|:ÿ|šÿ¤^ÿ¸JÿÖ@ÿr|ÿ"¤¤ÿ®rÿ|ÿ||ÿôrÿÌ�&ÿ¤Dÿ|®ÿ¤Dÿ|,ÿô^ÿš¤ÿ|b²ÿ®ôÿ|†ÿô¤ÿô†ÿ|Nÿ@¤ÿ|®ÿ�Dÿ|hÿ@Jÿ|šÿÖhÿ^,ÿ|rÿôÿTÿ|rÿ^|ÿJ|ÿhhÿrrÿ¤šÿh|ÿr|ÿ|�ÿ"¤ÿ¤¤ÿ¤®ÿ®hÿ@@@@@¨êëìíîïðñòóôõö÷øùúûüýþÿ GKLMNOPQRSTUWXZ[]^_abcdefhijklnqrstuvxyz|€�‚ƒ„…‡‰Ž‘”–—™šœŸ¢«¬°²³·¹º»¾ÀÁÐÑÒÓÔÚÛßãäìðñôöûü   $%,36<=>?@ABCEFIKNPQRSTVX—˜™š$ÿ¾7ÿÈÿPÿÈ_ɉo1ÃÞYïËÅÚÞjimtcl-0.84/examples/certificate.pem000066400000000000000000000115331522604140100175300ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIEwDCCAqgCCQCFOs3gH4RsKTANBgkqhkiG9w0BAQUFADAiMQswCQYDVQQGEwJh dTETMBEGA1UEAwwKamltLnRjbC50azAeFw0xOTA5MjQyMzQ2NDFaFw00NzAyMDgy MzQ2NDFaMCIxCzAJBgNVBAYTAmF1MRMwEQYDVQQDDApqaW0udGNsLnRrMIICIjAN BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0T9HMb5b2WZDIAF7+7KZzwAEiXC5 misVrY1gmlwvLlSVx1pXKx5KrFpwkBMfDs1Zsi03/D46N+kViOmSJY/h5nxpiTdb s1Gld2b1RqFbnXcLmx7eWVXXouLDcmzoJM1Y7vh26e9j3Uy4Bsew7zfxgnWmbfOA 9Sg/rHamQFfJ+Ov9NglkAoGPwdIiDWc4+hkKD6HL3B72m3VyD4crDSuTm2vFqUDh Xk+Jw3clNQYXHQrOSpDKst1qPQtEDTQbrmKhSN6jMBRwcwfo39lCZLN02jEfOC2b wHPe+VgcyfCzWgfKHtPlhqqanSIndDSAc6aF5hzI1vlT2dZNmSWDZ6QBrwharh25 QXcnQhDr/9DyHIjgvojROsOiSaT4pVvJRBsVm7N/7kVQKvNdbwB8itz+ubLlb5SY ahlZNBMpE9RqgchwAwe0SpjILMBHI90/H89SrZPZ4rMitZiIq5/3mBFEy/7Xio/G 5jw/Gp3cHa6SMf/6cqhll7binB8s8Yd5c8RvdNunczCobKmbnTMDRdsnjnvWFmia PJZUdcOtftxUCxYP2tEjapQL8kjC+K4MjCGkde/5lrd8+yRY6GK6zixxfYb1jka/ NFdXBaws4gm8amrsFstkY3K2GqrVh44/sG7BNqsl4hxkqyHryay7B413+KUrkiET 4PqwSHgtJHPayAMCAwEAATANBgkqhkiG9w0BAQUFAAOCAgEAlieZi6YNBCKkCLVP bIEtB/Ky28YTZ8Blv9dyOG557nfIze0NgsFJLOvLCFqKh8TKJRxGWkBeDh72ozjd R0twQ9w/uWv/RIvBvX+O67ByN8/u3E+H8TqsnRq6FxnHLKh4MbUuNya6/dskVAtB 5JthL5EPU0z+6MqIissmx4V7d/MA3bEWF+etAnI9maxdJ2KXlqiBy0K09RCydZzi JHSVqpY/UrwYjWxgJgMFq5ZLrMwLv2SVqFa5FnMsP2Qc1Ojgq0Jz8vbYFd9CCyyc mZUb1fAoxKRjBOBbbgW3fYsS4MkJ1PGeUh+60beDsKZhuTe5g5KCiB0QdB53Juth UizaqM+u2PECDV5TmhVIDCyHhGbbfzIFppsrpCZfXwtie4qqj50l55I7KoX6Twhu 7uadSWRiU60aOD7m99SUkqqkODXy2BvQixKZ6QOruTMqgbbpxpVMOUxFPkkmB5Jk LQ+3uIjBbVKQxGzniVwYwIRCTgg1x/nTlHEr5DhEs/8MiFrw3UafX9B6m9Jo1oJh HAs01bC9yMqNhaTXZRrGR4hEM3cmS0Sa6VYiZ+dhDwucvBwz0ClSiTT3iFjGcTMZ r9m5x0V15qZSvj1GWp6hSWIG/NwS+4gvv75Jlx83cr+bTlHgDl8h4seEmj8HhPq1 j9ZXBr9P2ETiD8OVyZAT3hhSwOg= -----END CERTIFICATE----- -----BEGIN RSA PRIVATE KEY----- MIIJKgIBAAKCAgEA0T9HMb5b2WZDIAF7+7KZzwAEiXC5misVrY1gmlwvLlSVx1pX Kx5KrFpwkBMfDs1Zsi03/D46N+kViOmSJY/h5nxpiTdbs1Gld2b1RqFbnXcLmx7e WVXXouLDcmzoJM1Y7vh26e9j3Uy4Bsew7zfxgnWmbfOA9Sg/rHamQFfJ+Ov9Nglk AoGPwdIiDWc4+hkKD6HL3B72m3VyD4crDSuTm2vFqUDhXk+Jw3clNQYXHQrOSpDK st1qPQtEDTQbrmKhSN6jMBRwcwfo39lCZLN02jEfOC2bwHPe+VgcyfCzWgfKHtPl hqqanSIndDSAc6aF5hzI1vlT2dZNmSWDZ6QBrwharh25QXcnQhDr/9DyHIjgvojR OsOiSaT4pVvJRBsVm7N/7kVQKvNdbwB8itz+ubLlb5SYahlZNBMpE9RqgchwAwe0 SpjILMBHI90/H89SrZPZ4rMitZiIq5/3mBFEy/7Xio/G5jw/Gp3cHa6SMf/6cqhl l7binB8s8Yd5c8RvdNunczCobKmbnTMDRdsnjnvWFmiaPJZUdcOtftxUCxYP2tEj apQL8kjC+K4MjCGkde/5lrd8+yRY6GK6zixxfYb1jka/NFdXBaws4gm8amrsFstk Y3K2GqrVh44/sG7BNqsl4hxkqyHryay7B413+KUrkiET4PqwSHgtJHPayAMCAwEA AQKCAgEApOLjPCyP/jkaLg9dXtK3ZynRaWh9qSHIXFFqzVhVCYI34Last9qP508B IlcfAzAIPWJqmoeCouo2QQQlWRoPXeut0iXgSebNp9Bm+ThPlD7p01u4xNbjLITa lMGDEPUL3ovGUMOGgy1gWl9jaq4/zpjdBAl9FjKYMlPw4AUNr+xuRPWTbHIiEQ6A LOWpPVMb3YOWvCdeFtSug9P0tdUf5LpBMQViUkoE+hVaKXVaI1WPh6yfPeFCRUYq Yukr4vfvthdSqqGAlvSlqjdunSHYs9M/kapG8JmeHAg171+QRSKcQDyjwsGPQsFW K7jve7K+Er2d+eDRFXhM/6BS8wmHFLP5BtHY/XCCZdjcJShIrGWK/Arepzh5TPpe lIriZBzFBdtLNDaVs0Fj7C+r5ERYulgrF8gwEfPXxFen4vp4gjP3fRnApXgLfEGu 2Cj7SR62nZrRWKBuOYhaoVGt1zdoP7mmcL32/Kg78ItteaNXG07ICogXBoTl0Tj0 N0wPpFG280amcJLB2tSwYyiIF53XyNazKxhgpBHnt1/y+peQfZadncQ/nImmM0f6 GTql3ToEMKj9V3nrYUQhRVEmltCrfJA8pVjFJkp0AjlyZOf/FgcSFNvWbdn0t6vE EOPU6RklpK0X0Go7B3ywOEqAu51oxo0QgUdRe6v2nzv7Xeuh9FkCggEBAPUV6JTg uqjWxq7XNA3RljCy8NPzTsT7AS7XwLBD/+JcICXjQQ2SVqMzx7SftGucGw6/8GKx HRXwp67k73iifiiQ7f1xOsXXgVs7aDg1MT7UE9KOVuY0r74P3No13nSfNYzOMBjh a+FqKO5v8yjZjNwT5ghtHluJqXPQPMeKYzR3ngNlFRzW9cfDQspiHdTSpu9gFE02 iSug9SNxMjRDiWsqBC14qu3S3ynaU5UuKhqw5CVSRj/Y7pN94b01tVXe4Szcf/U0 HXzg33jlf1QshwsdcBXcGpkB5ijtp6koQuAKRHjxeqcpMKIPpxzratlWBPeynvX7 xO+bDultW4z8tr0CggEBANqQy30ZMM64v39bo04cQNrIMJd2ez1c/lqysneQwIuK 1ALfRJbN74/Zy+vlx9VH6tKT2i5o1FP1Nd5BKiRGLd3bTLE+UlweUWrZoJbyz7ns IuLqGhw9Qy9SaqCfSyGu9Lmn8blCMVDPf1AggB4fuFHhiT+aBK1AidzDM/Usar2H D2HwfWP3tKARcyzBnWExiDncUau8oRFdfsYL72kb2P3RvtDtsMRLSFHOdd88o1Us LSQ+T36U3A2UKCteBndBguN+N7zyUNk7DVpfXILKmFj9nDmoYOFsnctG+TYbRmfr 7G/wKDcEtrmK0tpSOLF5QvowO3qDYaYYYGdK5EPbxb8CggEACDRtjt5fIVvfVucZ dQT5NDQpX88bafjFN149syjzng5bfSk4ek3V3KzVGLToA1o8hafjUkp/oMZntrEv WyiFdLI1ZXCu+QSX7gf1Gzyco2/SIhBl1FsbLw+04xE+m0ThNA+LCKozRF6bdDAH QezWjF+WKd4NUB8xrxDfmAaH/6+peI+fv1Fq9P8Sc1gJi6BpukXLKDKVMQK4cjFN 7vX72byUWzlY75FJq0sF1U6wVihp2t4AQA7xHbrvHbh4k6FchHX1Sq4t9opIsPFt 69F5y+N2ZyTxNwIbRG+AV2djpcByPmJHKuV0HVjMzWkMMK5yiCBQtgdxtlvIigQB Np0XOQKCAQEAw6yYEUJpONmbz/iJppeS1IwfPKq9QL2tliOftX2pdARxNLUQYfay v9WcRHBuTJrbN3VZAu2lEhlZBcbPZLRTwejgq1oBQCmAeKmnpRxzLp+iyAYQJDIQ oSAnB/A0wk4xGLmrplEFd7Sc5W6DZPS+/sdtKbzI7Rb3leZI8Pm4AkAVXHiCuen9 EsUsmOgp7ub6b9q4X4k7piFPKx1qVG6zAOIz9DaoZ8SCVYMCcj6Gd+1Z6LXEU64P qDR5FgJSxZeoB+VrH0TNbv34QW1YlFuusxUyNUhym76zMlczK+aVTNqhzcFzL3aP 5GLNzNmJmhHXDcf6p/9Rf/MY88DPxZTPXwKCAQEAt2cxXMiEWfFwWHufqpahl3Aq C4yf0EFMhBsOmnDYZ4RDYikFGJog7XY+BOEX0NZ2z2ZghwjmQW/Gm14ISQnww97d uo/MDuUZvf6aAeh6gRmkiejhIXMwuvxRAwm90TFUiJ4yn8LKp2c1XxX8DMHujlzS cdUKcFO3OL+eLQazM5M+3qxQuAFDTlBf41d3OJjCOuQ9soBy0Gy9yMhtjFVVmKDw eArA0lZgskLVcI9JH6bPhv7+5+n26OqMlFjtmbNMwqi/lOoyGwst5b2d9oAMkWQi QW5pi51MaAwVV8q8NdfUv1twD8lpRV8Rwb2k8rmG5FqSwhOsibSwpu8gf4WYow== -----END RSA PRIVATE KEY----- jimtcl-0.84/examples/client-server.tcl000066400000000000000000000023741522604140100200340ustar00rootroot00000000000000proc bgerror {msg} { puts "bgerror: $msg" #exit 0 } proc verbose {msg} { puts $msg } if {[os.fork] == 0} { verbose "child: waiting a bit" # This will be our client sleep .1 set f [socket stream localhost:9876] fconfigure $f -buffering line set done 0 proc onread {f} { if {[$f gets buf] > 0} { verbose "child: read response '$buf'" } else { verbose "child: read got eof" set ::done 1 } } proc onwrite {f} { verbose "child: sending request" $f puts -nonewline "GET / HTTP/1.0\r\n\r\n" $f writable {} } $f writable [list onwrite $f] $f readable [list onread $f] alarm 10 verbose "child: in event loop" vwait -signal done verbose "child: done event loop" alarm 0 $f close exit 0 } verbose "parent: opening socket" set done 0 # This will be our server set f [socket stream.server 0.0.0.0:9876] proc server_onread {f} { verbose "parent: onread (server) got connection on [$f filename]" set cfd [$f accept] verbose "parent: onread accepted [$cfd filename]" verbose "parent: read request '[string trim [$cfd gets]]'" $cfd puts "Thanks for the request" $cfd close verbose "parent: sent response" incr ::done } $f readable [list server_onread $f] alarm 10 vwait -signal done alarm 0 $f close sleep .5 return "ok" jimtcl-0.84/examples/dbgtest.tcl000066400000000000000000000005641522604140100167050ustar00rootroot00000000000000# An example script useful for testing the Jim debugger # Taken from http://www.nist.gov/msidlibrary/doc/libes93c.ps set b 1 proc p4 {x} { return [ expr 5+[expr 1+$x]] } set z [ expr 1+[expr 2+[p4 $b]] ] proc p3 {} { set m 0 } proc p2 {} { set c 4 p3 set d 5 } proc p1 {} { set a 2 p2 set a 3 set a 5 } p1 set k 7 p1 jimtcl-0.84/examples/dns.tcl000066400000000000000000001071551522604140100160410ustar00rootroot00000000000000# dns.tcl - Steve Bennett # # Modified for Jim Tcl to: # - use udp transport by default # - use sendto/recvfrom # - don't try to determine local nameservers # - remove support for dns uris and finding local nameservers # - remove logging calls # (both of these in order to remove dependencies on tcllib) # Based on: # dns.tcl - Copyright (C) 2002 Pat Thoyts # # Provide a Tcl only Domain Name Service client. See RFC 1034 and RFC 1035 # for information about the DNS protocol. This should insulate Tcl scripts # from problems with using the system library resolver for slow name servers. # # This implementation uses TCP only for DNS queries. The protocol reccommends # that UDP be used in these cases but Tcl does not include UDP sockets by # default. The package should be simple to extend to use a TclUDP extension # in the future. # # Support for SPF (http://spf.pobox.com/rfcs.html) will need updating # if or when the proposed draft becomes accepted. # # Support added for RFC1886 - DNS Extensions to support IP version 6 # Support added for RFC2782 - DNS RR for specifying the location of services # Support added for RFC1995 - Incremental Zone Transfer in DNS # # TODO: # - When using tcp we should make better use of the open connection and # send multiple queries along the same connection. # # - We must switch to using TCP for truncated UDP packets. # # - Read RFC 2136 - dynamic updating of DNS # # ------------------------------------------------------------------------- # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # ------------------------------------------------------------------------- # # $Id: dns.tcl,v 1.36 2008/11/22 12:28:54 mic42 Exp $ package require binary package require namespace namespace eval ::dns { variable version 1.3.3-jim2 variable rcsid {$Id: dns.tcl,v 1.36 2008/11/22 12:28:54 mic42 Exp $} namespace export configure resolve name address cname \ status reset wait cleanup errorcode variable options if {![info exists options]} { array set options { port 53 timeout 30000 protocol udp search {} nameserver {localhost} loglevel warn } #variable log [logger::init dns] #${log}::setlevel $options(loglevel) } variable types array set types { A 1 NS 2 MD 3 MF 4 CNAME 5 SOA 6 MB 7 MG 8 MR 9 NULL 10 WKS 11 PTR 12 HINFO 13 MINFO 14 MX 15 TXT 16 SPF 16 AAAA 28 SRV 33 IXFR 251 AXFR 252 MAILB 253 MAILA 254 ANY 255 * 255 } variable classes array set classes { IN 1 CS 2 CH 3 HS 4 * 255} variable uid if {![info exists uid]} { set uid 0 } } # ------------------------------------------------------------------------- # Description: # Configure the DNS package. In particular the local nameserver will need # to be set. With no options, returns a list of all current settings. # proc ::dns::configure {args} { variable options variable log if {[llength $args] < 1} { set r {} foreach opt [lsort [array names options]] { lappend r -$opt $options($opt) } return $r } set cget 0 if {[llength $args] == 1} { set cget 1 } while {[string match -* [lindex $args 0]]} { switch -glob -- [lindex $args 0] { -n* - -ser* { if {$cget} { return $options(nameserver) } else { set options(nameserver) [Pop args 1] } } -po* { if {$cget} { return $options(port) } else { set options(port) [Pop args 1] } } -ti* { if {$cget} { return $options(timeout) } else { set options(timeout) [Pop args 1] } } -pr* { if {$cget} { return $options(protocol) } else { set proto [string tolower [Pop args 1]] if {[string compare udp $proto] == 0 \ && [string compare tcp $proto] == 0} { return -code error "invalid protocol \"$proto\":\ protocol must be either \"udp\" or \"tcp\"" } set options(protocol) $proto } } -sea* { if {$cget} { return $options(search) } else { set options(search) [Pop args 1] } } -log* { if {$cget} { return $options(loglevel) } else { set options(loglevel) [Pop args 1] ${log}::setlevel $options(loglevel) } } -- { Pop args ; break } default { set opts [join [lsort [array names options]] ", -"] return -code error "bad option [lindex $args 0]:\ must be one of -$opts" } } Pop args } return } # ------------------------------------------------------------------------- # Description: # Create a DNS query and send to the specified name server. Returns a token # to be used to obtain any further information about this query. # proc ::dns::resolve {query args} { variable uid variable options variable log # get a guaranteed unique and non-present token id. set id [incr uid] while {[info exists [set token [namespace current]::$id]]} { set id [incr uid] } # FRINK: nocheck variable $token upvar 0 $token state # Setup token/state defaults. set state(id) $id set state(query) $query set state(qdata) "" set state(opcode) 0; # 0 = query, 1 = inverse query. set state(-type) A; # DNS record type (A address) set state(-class) IN; # IN (internet address space) set state(-recurse) 1; # Recursion Desired set state(-command) {}; # asynchronous handler set state(-timeout) $options(timeout); # connection timeout default. set state(-nameserver) $options(nameserver);# default nameserver set state(-port) $options(port); # default namerservers port set state(-search) $options(search); # domain search list set state(-protocol) $options(protocol); # which protocol udp/tcp # Support for DNS URL's removed while {[string match -* [lindex $args 0]]} { switch -glob -- [lindex $args 0] { -n* - ns - -ser* { set state(-nameserver) [Pop args 1] } -po* { set state(-port) [Pop args 1] } -ti* { set state(-timeout) [Pop args 1] } -co* { set state(-command) [Pop args 1] } -cl* { set state(-class) [Pop args 1] } -ty* { set state(-type) [Pop args 1] } -pr* { set state(-protocol) [Pop args 1] } -sea* { set state(-search) [Pop args 1] } -re* { set state(-recurse) [Pop args 1] } -inv* { set state(opcode) 1 } -status {set state(opcode) 2} -data { set state(qdata) [Pop args 1] } default { set opts [join [lsort [array names state -*]] ", "] return -code error "bad option [lindex $args 0]: \ must be $opts" } } Pop args } if {$state(-nameserver) == {}} { return -code error "no nameserver specified" } # Check for reverse lookups if {[regexp {^(?:\d{0,3}\.){3}\d{0,3}$} $state(query)]} { set addr [lreverse [split $state(query) .]] lappend addr in-addr arpa set state(query) [join $addr .] set state(-type) PTR } BuildMessage $token if {$state(-protocol) == "tcp"} { TcpTransmit $token if {$state(-command) == {}} { wait $token } } else { UdpTransmit $token wait $token } return $token } # ------------------------------------------------------------------------- # Description: # Return a list of domain names returned as results for the last query. # proc ::dns::name {token} { set r {} Flags $token flags array set reply [Decode $token] switch -exact -- $flags(opcode) { 0 { # QUERY foreach answer $reply(AN) { array set AN $answer if {![info exists AN(type)]} {set AN(type) {}} switch -exact -- $AN(type) { MX - NS - PTR { if {[info exists AN(rdata)]} {lappend r $AN(rdata)} } default { if {[info exists AN(name)]} { lappend r $AN(name) } } } } } 1 { # IQUERY foreach answer $reply(QD) { array set QD $answer lappend r $QD(name) } } default { return -code error "not supported for this query type" } } return $r } # Description: # Return a list of the IP addresses returned for this query. # proc ::dns::address {token} { set r {} array set reply [Decode $token] foreach answer $reply(AN) { array set AN $answer if {[info exists AN(type)]} { switch -exact -- $AN(type) { "A" { lappend r $AN(rdata) } "AAAA" { lappend r $AN(rdata) } } } } return $r } # Description: # Return a list of all CNAME results returned for this query. # proc ::dns::cname {token} { set r {} array set reply [Decode $token] foreach answer $reply(AN) { array set AN $answer if {[info exists AN(type)]} { if {$AN(type) == "CNAME"} { lappend r $AN(rdata) } } } return $r } # Description: # Return the decoded answer records. This can be used for more complex # queries where the answer isn't supported byb cname/address/name. proc ::dns::result {token args} { array set reply [eval [linsert $args 0 Decode $token]] return $reply(AN) } # ------------------------------------------------------------------------- # Description: # Get the status of the request. # proc ::dns::status {token} { upvar #0 $token state return $state(status) } # Description: # Get the error message. Empty if no error. # proc ::dns::error {token} { upvar #0 $token state if {[info exists state(error)]} { return $state(error) } return "" } # Description # Get the error code. This is 0 for a successful transaction. # proc ::dns::errorcode {token} { upvar #0 $token state set flags [Flags $token] set ndx [lsearch -exact $flags errorcode] incr ndx return [lindex $flags $ndx] } # Description: # Reset a connection with optional reason. # proc ::dns::reset {token {why reset} {errormsg {}}} { upvar #0 $token state set state(status) $why if {[string length $errormsg] > 0 && ![info exists state(error)]} { set state(error) $errormsg } catch {fileevent $state(sock) readable {}} Finish $token } # Description: # Wait for a request to complete and return the status. # proc ::dns::wait {token} { upvar #0 $token state if {$state(status) == "connect"} { vwait [subst $token](status) } return $state(status) } # Description: # Remove any state associated with this token. # proc ::dns::cleanup {token} { upvar #0 $token state if {[info exists state]} { catch {close $state(sock)} catch {after cancel $state(after)} unset state } } # ------------------------------------------------------------------------- # Description: # Dump the raw data of the request and reply packets. # proc ::dns::dump {args} { if {[llength $args] == 1} { set type -reply set token [lindex $args 0] } elseif { [llength $args] == 2 } { set type [lindex $args 0] set token [lindex $args 1] } else { return -code error "wrong # args:\ should be \"dump ?option? methodName\"" } # FRINK: nocheck variable $token upvar 0 $token state set result {} switch -glob -- $type { -qu* - -req* { set result [DumpMessage $state(request)] } -rep* { set result [DumpMessage $state(reply)] } default { error "unrecognised option: must be one of \ \"-query\", \"-request\" or \"-reply\"" } } return $result } # Description: # Perform a hex dump of binary data. # proc ::dns::DumpMessage {data} { set result {} binary scan $data c* r foreach c $r { append result [format "%02x " [expr {$c & 0xff}]] } return $result } # ------------------------------------------------------------------------- # Description: # Contruct a DNS query packet. # proc ::dns::BuildMessage {token} { # FRINK: nocheck variable $token upvar 0 $token state variable types variable classes variable options if {! [info exists types($state(-type))] } { return -code error "invalid DNS query type" } if {! [info exists classes($state(-class))] } { return -code error "invalid DNS query class" } set qdcount 0 set qsection {} set nscount 0 set nsdata {} # In theory we can send multiple queries. In practice, named doesn't # appear to like that much. If it did work we'd do this: # foreach domain [linsert $options(search) 0 {}] ... # Pack the query: QNAME QTYPE QCLASS set qsection [PackName $state(query)] append qsection [binary format SS \ $types($state(-type))\ $classes($state(-class))] incr qdcount if {[string length $state(qdata)] > 0} { set nsdata [eval [linsert $state(qdata) 0 PackRecord]] incr nscount } switch -exact -- $state(opcode) { 0 { # QUERY set state(request) [binary format SSSSSS $state(id) \ [expr {($state(opcode) << 11) | ($state(-recurse) << 8)}] \ $qdcount 0 $nscount 0] append state(request) $qsection $nsdata } 1 { # IQUERY set state(request) [binary format SSSSSS $state(id) \ [expr {($state(opcode) << 11) | ($state(-recurse) << 8)}] \ 0 $qdcount 0 0 0] append state(request) \ [binary format cSSI 0 \ $types($state(-type)) $classes($state(-class)) 0] switch -exact -- $state(-type) { A { append state(request) \ [binary format Sc4 4 [split $state(query) .]] } PTR { append state(request) \ [binary format Sc4 4 [split $state(query) .]] } default { return -code error "inverse query not supported for this type" } } } default { return -code error "operation not supported" } } return } # Pack a human readable dns name into a DNS resource record format. proc ::dns::PackName {name} { set data "" foreach part [split [string trim $name .] .] { set len [string length $part] append data [binary format ca$len $len $part] } append data \x00 return $data } # Pack a character string - byte length prefixed proc ::dns::PackString {text} { set len [string length $text] set data [binary format ca$len $len $text] return $data } # Pack up a single DNS resource record. See RFC1035: 3.2 for the format # of each type. # eg: PackRecord name wiki.tcl.tk type MX class IN rdata {10 mail.example.com} # proc ::dns::PackRecord {args} { variable types variable classes array set rr {name "" type A class IN ttl 0 rdlength 0 rdata ""} array set rr $args set data [PackName $rr(name)] switch -exact -- $rr(type) { CNAME - MB - MD - MF - MG - MR - NS - PTR { set rr(rdata) [PackName $rr(rdata)] } HINFO { array set r {CPU {} OS {}} array set r $rr(rdata) set rr(rdata) [PackString $r(CPU)] append rr(rdata) [PackString $r(OS)] } MINFO { array set r {RMAILBX {} EMAILBX {}} array set r $rr(rdata) set rr(rdata) [PackString $r(RMAILBX)] append rr(rdata) [PackString $r(EMAILBX)] } MX { foreach {pref exch} $rr(rdata) break set rr(rdata) [binary format S $pref] append rr(rdata) [PackName $exch] } TXT { set str $rr(rdata) set len [string length [set str $rr(rdata)]] set rr(rdata) "" for {set n 0} {$n < $len} {incr n} { set s [string range $str $n [incr n 253]] append rr(rdata) [PackString $s] } } NULL {} SOA { array set r {MNAME {} RNAME {} SERIAL 0 REFRESH 0 RETRY 0 EXPIRE 0 MINIMUM 0} array set r $rr(rdata) set rr(rdata) [PackName $r(MNAME)] append rr(rdata) [PackName $r(RNAME)] append rr(rdata) [binary format IIIII $r(SERIAL) \ $r(REFRESH) $r(RETRY) $r(EXPIRE) $r(MINIMUM)] } } # append the root label and the type flag and query class. append data [binary format SSIS $types($rr(type)) \ $classes($rr(class)) $rr(ttl) [string length $rr(rdata)]] append data $rr(rdata) return $data } # ------------------------------------------------------------------------- # Description: # Transmit a DNS request over a tcp connection. # proc ::dns::TcpTransmit {token} { # FRINK: nocheck variable $token upvar 0 $token state # setup the timeout if {$state(-timeout) > 0} { set state(after) [after $state(-timeout) \ [list [namespace origin reset] \ $token timeout\ "operation timed out"]] } # Jim Tcl has no async connect ... set s [socket stream $state(-nameserver):$state(-port)] fileevent $s writable [list [namespace origin TcpConnected] $token $s] set state(sock) $s set state(status) connect return $token } proc ::dns::TcpConnected {token s} { variable $token upvar 0 $token state fileevent $s writable {} # Jim Tcl has no async connect ... # if {[catch {fconfigure $s -peername}]} { # # TCP connection failed # Finish $token "can't connect to server" # return # } fconfigure $s -blocking 0 -translation binary -buffering none # For TCP the message must be prefixed with a 16bit length field. set req [binary format S [string length $state(request)]] append req $state(request) puts -nonewline $s $req fileevent $s readable [list [namespace current]::TcpEvent $token] } # ------------------------------------------------------------------------- # Description: # Transmit a DNS request using UDP datagrams # # Note: # This requires a UDP implementation that can transmit binary data. # As yet I have been unable to test this myself and the tcludp package # cannot do this. # proc ::dns::UdpTransmit {token} { # FRINK: nocheck variable $token upvar 0 $token state # setup the timeout if {$state(-timeout) > 0} { set state(after) [after $state(-timeout) \ [list [namespace origin reset] \ $token timeout\ "operation timed out"]] } set state(sock) [socket dgram] #fconfigure $state(sock) -translation binary -buffering none set state(status) connect $state(sock) sendto $state(request) $state(-nameserver):$state(-port) fileevent $state(sock) readable [list [namespace current]::UdpEvent $token] return $token } # ------------------------------------------------------------------------- # Description: # Tidy up after a tcp transaction. # proc ::dns::Finish {token {errormsg ""}} { # FRINK: nocheck variable $token upvar 0 $token state global errorInfo errorCode if {[string length $errormsg] != 0} { set state(error) $errormsg set state(status) error } catch {close $state(sock)} catch {after cancel $state(after)} if {[info exists state(-command)] && $state(-command) != {}} { if {[catch {eval $state(-command) {$token}} err]} { if {[string length $errormsg] == 0} { set state(error) [list $err $errorInfo $errorCode] set state(status) error } } if {[info exists state(-command)]} { unset state(-command) } } } # ------------------------------------------------------------------------- # Description: # Handle end-of-file on a tcp connection. # proc ::dns::Eof {token} { # FRINK: nocheck variable $token upvar 0 $token state set state(status) eof Finish $token } # ------------------------------------------------------------------------- # Description: # Process a DNS reply packet (protocol independent) # proc ::dns::Receive {token} { # FRINK: nocheck variable $token upvar 0 $token state binary scan $state(reply) SS id flags set status [expr {$flags & 0x000F}] switch -- $status { 0 { set state(status) ok Finish $token } 1 { Finish $token "Format error - unable to interpret the query." } 2 { Finish $token "Server failure - internal server error." } 3 { Finish $token "Name Error - domain does not exist" } 4 { Finish $token "Not implemented - the query type is not available." } 5 { Finish $token "Refused - your request has been refused by the server." } default { Finish $token "unrecognised error code: $err" } } } # ------------------------------------------------------------------------- # Description: # file event handler for tcp socket. Wait for the reply data. # proc ::dns::TcpEvent {token} { variable log # FRINK: nocheck variable $token upvar 0 $token state set s $state(sock) if {[eof $s]} { Eof $token return } set status [catch {read $state(sock)} result] if {$status != 0} { ${log}::debug "Event error: $result" Finish $token "error reading data: $result" } elseif { [string length $result] >= 0 } { if {[catch { # Handle incomplete reads - check the size and keep reading. if {![info exists state(size)]} { binary scan $result S state(size) set result [string range $result 2 end] } append state(reply) $result # check the length and flags and chop off the tcp length prefix. if {[string length $state(reply)] >= $state(size)} { binary scan $result S id set id [expr {$id & 0xFFFF}] if {$id != [expr {$state(id) & 0xFFFF}]} { ${log}::error "received packed with incorrect id" } # bug #1158037 - doing this causes problems > 65535 requests! #Receive [namespace current]::$id Receive $token } else { ${log}::debug "Incomplete tcp read:\ [string length $state(reply)] should be $state(size)" } } err]} { Finish $token "Event error: $err" } } elseif { [eof $state(sock)] } { Eof $token } elseif { [fblocked $state(sock)] } { ${log}::debug "Event blocked" } else { ${log}::critical "Event error: this can't happen!" Finish $token "Event error: this can't happen!" } } # ------------------------------------------------------------------------- # Description: # file event handler for udp sockets. proc ::dns::UdpEvent {token} { # FRINK: nocheck variable $token upvar 0 $token state set s $state(sock) set payload [$state(sock) recvfrom 1500] append state(reply) $payload binary scan $payload S id set id [expr {$id & 0xFFFF}] if {$id != [expr {$state(id) & 0xFFFF}]} { ${log}::error "received packed with incorrect id" } # bug #1158037 - doing this causes problems > 65535 requests! #Receive [namespace current]::$id Receive $token } # ------------------------------------------------------------------------- proc ::dns::Flags {token {varname {}}} { # FRINK: nocheck variable $token upvar 0 $token state if {$varname != {}} { upvar $varname flags } array set flags {query 0 opcode 0 authoritative 0 errorcode 0 truncated 0 recursion_desired 0 recursion_allowed 0} binary scan $state(reply) SSSSSS mid hdr nQD nAN nNS nAR set flags(response) [expr {($hdr & 0x8000) >> 15}] set flags(opcode) [expr {($hdr & 0x7800) >> 11}] set flags(authoritative) [expr {($hdr & 0x0400) >> 10}] set flags(truncated) [expr {($hdr & 0x0200) >> 9}] set flags(recursion_desired) [expr {($hdr & 0x0100) >> 8}] set flags(recursion_allowed) [expr {($hdr & 0x0080) >> 7}] set flags(errorcode) [expr {($hdr & 0x000F)}] return [array get flags] } # ------------------------------------------------------------------------- # Description: # Decode a DNS packet (either query or response). # proc ::dns::Decode {token args} { variable log # FRINK: nocheck variable $token upvar 0 $token state array set opts {-rdata 0 -query 0} while {[string match -* [set option [lindex $args 0]]]} { switch -exact -- $option { -rdata { set opts(-rdata) 1 } -query { set opts(-query) 1 } default { return -code error "bad option \"$option\":\ must be -rdata" } } Pop args } if {$opts(-query)} { binary scan $state(request) SSSSSSc* mid hdr nQD nAN nNS nAR data } else { binary scan $state(reply) SSSSSSc* mid hdr nQD nAN nNS nAR data } set fResponse [expr {($hdr & 0x8000) >> 15}] set fOpcode [expr {($hdr & 0x7800) >> 11}] set fAuthoritative [expr {($hdr & 0x0400) >> 10}] set fTrunc [expr {($hdr & 0x0200) >> 9}] set fRecurse [expr {($hdr & 0x0100) >> 8}] set fCanRecurse [expr {($hdr & 0x0080) >> 7}] set fRCode [expr {($hdr & 0x000F)}] set flags "" if {$fResponse} {set flags "QR"} else {set flags "Q"} set opcodes [list QUERY IQUERY STATUS] lappend flags [lindex $opcodes $fOpcode] if {$fAuthoritative} {lappend flags "AA"} if {$fTrunc} {lappend flags "TC"} if {$fRecurse} {lappend flags "RD"} if {$fCanRecurse} {lappend flags "RA"} set info "ID: $mid\ Fl: [format 0x%02X [expr {$hdr & 0xFFFF}]] ($flags)\ NQ: $nQD\ NA: $nAN\ NS: $nNS\ AR: $nAR" #${log}::debug $info set ndx 12 set r {} set QD [ReadQuestion $nQD $state(reply) ndx] lappend r QD $QD set AN [ReadAnswer $nAN $state(reply) ndx $opts(-rdata)] lappend r AN $AN set NS [ReadAnswer $nNS $state(reply) ndx $opts(-rdata)] lappend r NS $NS set AR [ReadAnswer $nAR $state(reply) ndx $opts(-rdata)] lappend r AR $AR return $r } # ------------------------------------------------------------------------- proc ::dns::Expand {data} { set r {} binary scan $data c* d foreach c $d { lappend r [expr {$c & 0xFF}] } return $r } # ------------------------------------------------------------------------- # Description: # Pop the nth element off a list. Used in options processing. # proc ::dns::Pop {varname {nth 0}} { upvar $varname args set r [lindex $args $nth] set args [lreplace $args $nth $nth] return $r } # ------------------------------------------------------------------------- proc ::dns::KeyOf {arrayname value {default {}}} { upvar $arrayname array set lst [array get array] set ndx [lsearch -exact $lst $value] if {$ndx != -1} { incr ndx -1 set r [lindex $lst $ndx] } else { set r $default } return $r } # ------------------------------------------------------------------------- # Read the question section from a DNS message. This always starts at index # 12 of a message but may be of variable length. # proc ::dns::ReadQuestion {nitems data indexvar} { variable types variable classes upvar $indexvar index set result {} for {set cn 0} {$cn < $nitems} {incr cn} { set r {} lappend r name [ReadName data $index offset] incr index $offset # Read off QTYPE and QCLASS for this query. set ndx $index incr index 3 binary scan [string range $data $ndx $index] SS qtype qclass set qtype [expr {$qtype & 0xFFFF}] set qclass [expr {$qclass & 0xFFFF}] incr index lappend r type [KeyOf types $qtype $qtype] \ class [KeyOf classes $qclass $qclass] lappend result $r } return $result } # ------------------------------------------------------------------------- # Read an answer section from a DNS message. # proc ::dns::ReadAnswer {nitems data indexvar {raw 0}} { variable types variable classes upvar $indexvar index set result {} for {set cn 0} {$cn < $nitems} {incr cn} { set r {} lappend r name [ReadName data $index offset] incr index $offset # Read off TYPE, CLASS, TTL and RDLENGTH binary scan [string range $data $index end] SSIS type class ttl rdlength set type [expr {$type & 0xFFFF}] set type [KeyOf types $type $type] set class [expr {$class & 0xFFFF}] set class [KeyOf classes $class $class] set ttl [expr {$ttl & 0xFFFFFFFF}] set rdlength [expr {$rdlength & 0xFFFF}] incr index 10 set rdata [string range $data $index [expr {$index + $rdlength - 1}]] if {! $raw} { switch -- $type { A { set rdata [join [Expand $rdata] .] } AAAA { set rdata [ip::contract [ip::ToString $rdata]] } NS - CNAME - PTR { set rdata [ReadName data $index off] } MX { binary scan $rdata S preference set exchange [ReadName data [expr {$index + 2}] off] set rdata [list $preference $exchange] } SRV { set x $index set rdata [list priority [ReadUShort data $x off]] incr x $off lappend rdata weight [ReadUShort data $x off] incr x $off lappend rdata port [ReadUShort data $x off] incr x $off lappend rdata target [ReadName data $x off] incr x $off } TXT { set rdata [ReadString data $index $rdlength] } SOA { set x $index set rdata [list MNAME [ReadName data $x off]] incr x $off lappend rdata RNAME [ReadName data $x off] incr x $off lappend rdata SERIAL [ReadULong data $x off] incr x $off lappend rdata REFRESH [ReadLong data $x off] incr x $off lappend rdata RETRY [ReadLong data $x off] incr x $off lappend rdata EXPIRE [ReadLong data $x off] incr x $off lappend rdata MINIMUM [ReadULong data $x off] incr x $off } } } incr index $rdlength lappend r type $type class $class ttl $ttl rdlength $rdlength rdata $rdata lappend result $r } return $result } # Read a 32bit integer from a DNS packet. These are compatible with # the ReadName proc. Additionally - ReadULong takes measures to ensure # the unsignedness of the value obtained. # proc ::dns::ReadLong {datavar index usedvar} { upvar $datavar data upvar $usedvar used set r {} set used 0 if {[binary scan $data @${index}I r]} { set used 4 } return $r } proc ::dns::ReadULong {datavar index usedvar} { upvar $datavar data upvar $usedvar used set r {} set used 0 if {[binary scan $data @${index}cccc b1 b2 b3 b4]} { set used 4 # This gets us an unsigned value. set r [expr {($b4 & 0xFF) + (($b3 & 0xFF) << 8) + (($b2 & 0xFF) << 16) + ($b1 << 24)}] } return $r } proc ::dns::ReadUShort {datavar index usedvar} { upvar $datavar data upvar $usedvar used set r {} set used 0 if {[binary scan [string range $data $index end] cc b1 b2]} { set used 2 # This gets us an unsigned value. set r [expr {(($b2 & 0xff) + (($b1 & 0xff) << 8)) & 0xffff}] } return $r } # Read off the NAME or QNAME element. This reads off each label in turn, # dereferencing pointer labels until we have finished. The length of data # used is passed back using the usedvar variable. # proc ::dns::ReadName {datavar index usedvar} { upvar $datavar data upvar $usedvar used set startindex $index set r {} set len 1 set max [string length $data] while {$len != 0 && $index < $max} { # Read the label length (and preread the pointer offset) binary scan [string range $data $index end] cc len lenb set len [expr {$len & 0xFF}] incr index if {$len != 0} { if {[expr {$len & 0xc0}]} { binary scan [binary format cc [expr {$len & 0x3f}] [expr {$lenb & 0xff}]] S offset incr index lappend r [ReadName data $offset junk] set len 0 } else { lappend r [string range $data $index [expr {$index + $len - 1}]] incr index $len } } } set used [expr {$index - $startindex}] return [join $r .] } proc ::dns::ReadString {datavar index length} { upvar $datavar data set startindex $index set r {} set max [expr {$index + $length}] while {$index < $max} { binary scan [string range $data $index end] c len set len [expr {$len & 0xFF}] incr index if {$len != 0} { append r [string range $data $index [expr {$index + $len - 1}]] incr index $len } } return $r } # ------------------------------------------------------------------------- package provide dns $dns::version # ------------------------------------------------------------------------- # Local Variables: # indent-tabs-mode: nil # End: jimtcl-0.84/examples/dnstest.tcl000066400000000000000000000007461522604140100167370ustar00rootroot00000000000000lappend auto_path [pwd] package require dns # Use google's DNS dns::configure -nameserver 8.8.8.8 puts "Resolve with udp" set tok [dns::resolve www.tcl.tk] puts status=[dns::status $tok] puts address=[dns::address $tok] puts names=[dns::name $tok] dns::cleanup $tok # Now with tcp dns::configure -protocol tcp puts "Resolve with tcp" set tok [dns::resolve www.google.com] puts status=[dns::status $tok] puts address=[dns::address $tok] puts names=[dns::name $tok] dns::cleanup $tok jimtcl-0.84/examples/jcov000077500000000000000000000022611522604140100154300ustar00rootroot00000000000000#!/usr/bin/env jimsh # vim:se syntax=tcl: # Experimental code coverage for Jim Tcl set auto_path [linsert $auto_path 0 [file dirname $argv0]/jimlib] set opt_all 0 if {[lindex $argv 0] eq "-all"} { incr opt_all set argv [lrange $argv 1 end] } set argv [lassign $argv argv0] set coverage($argv0) {} proc xcov {type file line result name arglist} { upvar ::coverage($file) info incr info($line) } xtrace xcov # Catch exit but not error set rc [catch -noerror -exit {source $argv0} msg opts] xtrace {} proc show-coverage {filename} { set info $::coverage($filename) puts "=== $filename ===" set f [open $filename] set n 0 while {[$f gets buf] >= 0} { incr n if {[info exists info($n)]} { set prefix [format "%4d: " $info($n)] } else { set b [string trimleft $buf] if {$b eq "" || [string match "#*" $b] || [string match "\}*" $b]} { set prefix " -: " } else { set prefix "####: " } } puts "$prefix$buf" } $f close } puts [dict keys $coverage] if {$opt_all} { foreach filename [lsort [dict keys $coverage]] { if {$filename in {"" jcov}} { continue } show-coverage $filename puts "" } } else { show-coverage $argv0 } #parray coverage jimtcl-0.84/examples/jtclsh.tcl000066400000000000000000000024421522604140100165350ustar00rootroot00000000000000# Simple example of how the history extension # can be used to provide line editing and history # Build jimsh with the history extension and enable line editing (the default) # ./configure --with-ext=history package require history set histfile [env HOME]/.jtclsh history load $histfile # Use the standard Tcl autocompletion and hint support history completion tcl::autocomplete tcl::autohint set prefix "" while {1} { # Read a complete line (script) set prompt "${prefix}jim> " set cmd {} while {1} { if {[history getline $prompt line] < 0} { exit 0 } if {$cmd ne ""} { append cmd \n } append cmd $line if {[info complete $cmd char]} { break } set prompt "$char> " } if {$cmd eq "h"} { history show continue } # Don't bother adding single char commands to the history if {[string length $cmd] > 1} { history add $cmd history save $histfile } # Evaluate the script and display the error try { set result [eval $cmd] set prefix "" } on {error return break continue signal} {result opts} { set rcname [info returncodes $opts(-code)] if {$rcname eq "ok" } { # Note: return set -code to 0 set rcname return } elseif {$rcname eq "error"} { set result [errorInfo $result] } set prefix "\[$rcname\] " } if {$result ne {}} { puts $result } } jimtcl-0.84/examples/jtime000077500000000000000000000020021522604140100155700ustar00rootroot00000000000000#!/usr/bin/env jimsh # vim:se syntax=tcl: # Experimental code coverage for Jim Tcl set auto_path [linsert $auto_path 0 [file dirname $argv0]/jimlib] set argv [lassign $argv argv0] set jtime::fileinfo($argv0) {} set jtime::last [clock micros] proc jtime::xtrace {type file line result name arglist} { variable fileinfo variable last set now [clock micros] if {![exists fileinfo($file)]} { set info {} } else { set info $fileinfo($file) } incr info($line) $($now - $last) set fileinfo($file) $info set last $now } xtrace jtime::xtrace # Catch exit but not error set rc [catch -noerror -exit {source $argv0} msg opts] xtrace {} set info $jtime::fileinfo($argv0) set f [open $argv0] set n 0 while {[$f gets buf] >= 0} { incr n if {[info exists info($n)]} { set prefix [format "%8d: " $info($n)] } else { set b [string trimleft $buf] if {$b eq "" || [string match "#*" $b] || [string match "\}*" $b]} { set prefix " -: " } else { set prefix " ####: " } } puts "$prefix$buf" } jimtcl-0.84/examples/jtrace000077500000000000000000000010571522604140100157410ustar00rootroot00000000000000#!/usr/bin/env jimsh # vim:se syntax=tcl: # Experimental code coverage for Jim Tcl set auto_path [linsert $auto_path 0 [file dirname $argv0]/jimlib] set argv [lassign $argv argv0] proc jtime::xtrace {type file line result name arglist} { set indent [string repeat " " [info level]] if {[string length $arglist] > 45} { set arglist [string range $arglist 0 45]... } stderr puts "$indent$name [string map {\r \\r \n \\n} $arglist]" } xtrace jtime::xtrace # Catch exit but not error set rc [catch -noerror -exit {source $argv0} msg opts] xtrace {} jimtcl-0.84/examples/metakit.tcl000066400000000000000000000071431522604140100167070ustar00rootroot00000000000000package require mk # These will become subcommands of every view handle # Looping using cursors proc {mk.view each} {view arrayVar script} { upvar 1 $arrayVar array for {set cur $view!0} {[cursor valid $cur]} {cursor incr cur} { set array [cursor get $cur] uplevel 1 $script } } # Shortcuts to avoid cursors for one-time operations proc {mk.view set} {view pos args} { tailcall cursor set $view!$pos {*}$args } proc {mk.view append} {view args} { tailcall cursor set $view!end+1 {*}$args } proc {mk.view insert} {view pos args} { # Note that this only inserts fresh rows and doesn't set any data tailcall cursor insert $view!$pos {*}$args } # Dump a view to stdout proc {mk.view dump} {view} { $view each row {puts " $row"} } # ----------------------------------------------------------------------------- # Open an in-memory database set db [storage] # Specify the view structure, creating new views and restructuring existing # ones as necessary $db structure firstview {key string first string} $db structure secondview {key string second string} # Open them. [$db view firstview] as fstview # Or equivalently (using pipeline notation) $db view secondview | as sndview # Use the helpers defined above to populate the first view $fstview set 0 key foo first bar $fstview append key hello first world $fstview insert 0 $fstview set 0 key metakit first example # Or use cursors directly. A end-X/end+X cursor moves automatically when # the view size changes. set cur $sndview!end+1 cursor set $cur key foo second baz cursor set $cur key hello second goodbye cursor set $cur key silly second examples puts "First view:" $fstview dump puts "Second view:" $sndview dump puts "\nNow trying view operations. Note that all the binary operations" puts "are left-biased when it comes to conflicting property values.\n" puts "Join on key:" ;# Common subset of the two outer joins below $fstview join $sndview key | dump puts "Outer join on key:" ;# Will yield more rows than an inner join $fstview join $sndview -outer key | dump puts "Outer join on key, in reverse order:" $sndview join $fstview -outer key | dump puts "Cartesian product:" $fstview product $sndview | dump puts "Pairing:" $fstview pair $sndview | dump puts "Pairing, in reverse order:" $sndview pair $fstview | dump puts "Complex pipeline (fetch rows 3,5,.. from the cartesian product and sort" puts "them on the 'first' property):" $fstview product $sndview | range 3 end 2 | sort first | dump # Slice step defaults to 1. Sorting may be performed on several properties at # a time, prepending a "-" (minus sign) will cause the sort order to be reversed. puts "Another one (fetch the unique key values from the cartesian product):" $fstview product $sndview | project key | unique | dump # Use "without" to remove certain properties. puts "Keys in the cartesian product not in the reverse pairing:" [$fstview product $sndview | project key | unique] minus [$sndview pair $fstview | unique] | dump # Union "union", intersection "intersect" and symmetric difference "different" # are also available. They all work only if the rows are unique. puts "Create a subview:" $fstview product $sndview | group subv key | as complexview | dump # Not so informative as subviews are not displayed properly. Several grouping # properties may be specified. puts "Get its values for row #0:" cursor get $complexview!0 subv | dump puts "And flatten it back:" $complexview flatten subv | dump puts "Remove a row:" cursor remove $sndview!1 $sndview dump # Several rows may be removed at once by specifying a row count puts "Clear the view:" $sndview resize 0 $sndview dump jimtcl-0.84/examples/nonblocking-gets.tcl000066400000000000000000000012201522604140100205020ustar00rootroot00000000000000#!/usr/bin/env jimsh # Tests that 'gets' on a non-blocking socket # does not return partial lines lassign [socket pipe] r w if {[os.fork] == 0} { # The child will be our client $r close # Output increasingly long lines loop i 10000 { $w puts [string repeat a $i] } } else { # The server reads lines with gets. # Each one should be one longer than the last $w close set exp 0 $r ndelay 1 $r readable { while {[$r gets buf] >= 0} { set len [string length $buf] if {$len != $exp} { puts "Read line of length $len but expected $exp" incr done break } incr exp } if {[$r eof]} { incr done } } vwait done } jimtcl-0.84/examples/ootest.tcl000066400000000000000000000100311522604140100165540ustar00rootroot00000000000000package require oo # Create a class, the usual bank account, with two instance variables: class Account { balance 0 name "Unknown" } # We have some class methods predefined # Note we can call (e.g.) either Account.methods or 'Account methods' puts "---- class Account ----" puts "Account vars=[Account vars]" puts "Account methods=[Account methods]" puts "" # Create a constructor that takes a name and an optional balance. Account method constructor {who {amount 0}} { if {$amount < 0} { error "Can't initialise account for $who with a -ve balance" } set name $who set balance $amount } # Now flesh out the class with some methods # Could use 'Account method' here instead Account method deposit {amount} { set balance [+ $balance $amount] } Account method see {} { set balance } Account method withdraw {amount} { if {$amount > $balance} {error "Sorry $name, can only withdraw $balance"} set balance [- $balance $amount] } Account method describe {} { puts "I am object $self of class [$self classname]" puts "My 'see' method returns [$self see]" puts "My variables are:" foreach i [$self vars] { puts " $i=[set $i]" } } # Since the constructor requires an argument, can't # not provide them try { set a [Account] } on error msg { puts "Correctly did not create uninitialised account" } # Now an instance, using the constructor for initialisation set a [Account new "Bob Smith"] puts "---- object Account ----" # We can use class methods on the instance too puts a.vars=[$a vars] puts a.classname=[$a classname] # Now object methods $a deposit 100 puts "deposit 100 -> [$a see]" $a withdraw 40 puts "withdraw 40 -> [$a see]" catch {$a withdraw 1000} res puts "withdraw 1000 -> $res\n" # Tell me something about the object $a describe puts "" # Now create a new subclass # Could change the initial balance here too class CreditAccount Account { limit -1000 } CreditAccount method constructor {who {amount 0}} { # Invoke the baseclass constructor, then # set the amount, which may be -ve super constructor $who set balance $amount } # Override the 'withdraw' method to allow overdrawing CreditAccount method withdraw {amount} { if {$balance - $amount < $limit} {error "Sorry $name, that would exceed your credit limit of [expr -$limit]"} set balance [- $balance $amount] } # Override the 'describe' method, but invoke the baseclass method first CreditAccount method describe {} { # First invoke the base class 'describe' super describe if {$balance < 0} { puts "*** Account is in debit" } } puts "---- class CreditAccount ----" puts "CreditAccount vars=[CreditAccount vars]" puts "CreditAccount methods=[CreditAccount methods]" puts "" puts "---- object CreditAccount ----" set b [CreditAccount new "John White" -20] puts b.vars=[$b vars] puts b.classname=[$b classname] puts "initial balance -> [$b see]" $b deposit 100 puts "deposit 100 -> [$b see]" $b withdraw 40 puts "withdraw 40 -> [$b see]" $b withdraw 1000 puts "withdraw 1000 -> [$b see]" puts "" # Tell me something about the object $b describe puts "" # 'eval' is similar to 'dict with' for an object, except it operates # in it's own scope. A list of variables can be imported into the object scope. # It is useful for ad-hoc operations for which it is not worth defining a method. set total 0 $a eval total { incr total $balance } incr total [$b get balance] puts "Total of accounts [$a get name] and [$b eval {return "$name (Credit Limit: $limit)"}] is: $total" # Can we find all objects in the system? # Almost. We can't really distinguish those which aren't real classes. # This will get all references which aren't simple lambdas. puts "---- All objects ----" Account new "Terry Green" 20 set x [Account new -] lambda {} {dummy} ref blah blah foreach r [info references] { if {[getref $r] ne {}} { try { $r eval { puts [format "Found %14s: Owner: %14s, Balance: %+5d, in object %s" [$self classname] $name $balance $self] } } on error msg { puts "Not an object: $r" } } } unset r # And goodbye $a destroy # Let the garbage collection take care of this one unset b collect jimtcl-0.84/examples/parray.tcl000066400000000000000000000007311522604140100165430ustar00rootroot00000000000000# Example of using the 'putter' function to redirect parray output set a {1 one 2 two 3 three} # Use 'curry' to create a single command from two words stderr puts "curry" parray a * [curry stderr puts] # Same thing, but an alias instead stderr puts "\nalias" alias stderr_puts stderr puts parray a * stderr_puts # Now use a lambda to accumulate the results in a buffer stderr puts "\nlamba" parray a * [lambda {msg} {lappend ::lines $msg}] stderr puts [join $lines \n] jimtcl-0.84/examples/pipe.tcl000066400000000000000000000003531522604140100162020ustar00rootroot00000000000000lassign [socket pipe] r w # Note, once the exec has the fh (via dup), close it # so that the pipe data is accessible exec ps aux >@$w & $w close $r readable { puts [$r gets] if {[eof $r]} { $r close set done 1 } } vwait done jimtcl-0.84/examples/popen.tcl000066400000000000000000000007051522604140100163670ustar00rootroot00000000000000# Internally, open "|..." calls out to popen from tclcompat.tcl # # This code is compatible with Tcl # Write to a pipe set f [open |[list cat | sed -e "s/line/This is line/" >temp.out] w] puts "Creating temp.out with pids: [pid $f]" foreach n {1 2 3 4 5} { puts $f "line $n" } close $f # Read from a pipe set f [open "|cat temp.out"] puts "Reading temp.out with pids: [pid $f]" while {[gets $f buf] >= 0} { puts $buf } close $f file delete temp.out jimtcl-0.84/examples/redis-async.tcl000066400000000000000000000031231522604140100174640ustar00rootroot00000000000000#!/usr/bin/env jimsh # Testing redis client access in non-blocking mode # Requires the redis extension package require redis # A redis server should be running either on localhost 6379 # or on the given address (e.g. host:port) try { lassign $argv addr if {$addr eq ""} { set addr localhost:6379 } set s [socket stream $addr] # socket must be in non-blocking mode $s ndelay 1 set r [redis -async $s] } on error msg { puts [errorInfo $msg] exit 1 } # List of outstanding redis commands set cmds {} $r readable { while {1} { set result [$r -type read] if {$result eq ""} { break } set cmds [lassign $cmds cmd] # Show command and response puts "$cmd => $result" } } # queue a command and remember it proc redis_command {r args} { global cmds lappend cmds $args set ret [$r {*}$args] # If the command is multiexec, there will be an additional "EXEC" command to wait for the result of the transaction if {[lindex $args 0] eq "multiexec"} { lappend cmds EXEC } return $ret } redis_command $r SET zz 0 proc periodic {r} { global counter done if {[incr counter] > 10} { incr done } else { redis_command $r INCR zz after 100 periodic $r } } set counter 0 periodic $r # And also multiexec in async mode # In async mode, all commands within multiexec are batched and sent together, # reducing the number of round trips to the redis server redis_command $r multiexec { redis_command $r DEL mykey redis_command $r HSET mykey field1 value1 redis_command $r HSET mykey field2 value2 redis_command $r HSET mykey field3 value3 redis_command $r HGETALL mykey } vwait done jimtcl-0.84/examples/redis-pubsub.tcl000066400000000000000000000030661522604140100176550ustar00rootroot00000000000000#!/usr/bin/env jimsh # Requires the redis extension package require redis # A redis server should be running either on localhost 6379 # or on the given host port # # Usage: redis-pubsub.tcl ?pub|sub? ?host:addr? # # If pub or sub is not given, forks and does both if {[lindex $argv 0] in {pub sub}} { # Run in single process mode set argv [lassign $argv op] } else { # fork before connecting so that both processes don't share # a connection if {[os.fork] == 0} { # child subscribes set op sub } else { set op pub } } try { lassign $argv addr if {$addr eq ""} { set addr localhost:6379 } set r [redis [socket stream $addr]] } on error msg { puts [errorInfo $msg] exit 1 } if {$op eq "sub"} { # read will generate a bgerror if the server goes away proc bgerror {msg} { set ::done "$::op: $msg" } $r SUBSCRIBE chin $r SUBSCRIBE chan proc sub_timeout {} { set ::done "$::op: quitting on idle" } $r readable { after cancel $afterid set result [$r read] puts "$op: $result" set afterid [after 2000 sub_timeout] } # If no message for 2 seconds, stop set afterid [after 2000 sub_timeout] vwait done puts $done } else { try { loop i 1 15 { $r PUBLISH chan PONG$i puts "$op: chan PONG$i" after 250 $r PUBLISH chin PING$i puts "$op: chin PING$i" after 250 } } on error msg { puts "$op: $msg" } } jimtcl-0.84/examples/redis.tcl000066400000000000000000000023611522604140100163540ustar00rootroot00000000000000#!/usr/bin/env jimsh # A simple test of the redis extension # Requires the redis extension package require redis # A redis server should be running either on localhost 6379 # or on the given address (e.g. host:port) try { lassign $argv addr if {$addr eq ""} { set addr localhost:6379 } set r [redis [socket stream $addr]] } on error msg { puts [errorInfo $msg] exit 1 } puts "KEYS: [$r KEYS *]" # Set a hash set env(testing) yes $r HMSET env {*}$env set result [$r HGET env testing] puts "HGET: testing=$result" # Now the same with -type set result [$r -type HGET env testing] puts "HGET (-type): testing=$result" # Now a missing value with -type set result [$r -type HGET env doesnotexist] puts "HGET (-type): doesnotexist=$result" set result [$r -type HGETALL env] puts "HGETALL (-type): $result" set size [$r HLEN env] puts "Size of env is $size" set time [time { $r HGETALL env } 100] puts "HGETALL: $time" # a multi-command transation $r MULTI $r SET a A1 $r SET b B2 $r EXEC puts "MGET: [$r MGET a b]" # discard $r MULTI $r SET a ~A1 $r SET b ~B2 $r DISCARD puts "MGET (DISCARD): [$r MGET a b]" set result [$r -type multiexec { $r SET a 1 $r SET b 2 $r INCR b }] puts "multiexec: $result" set result [$r HGET env testing] $r close jimtcl-0.84/examples/sdlcircles.tcl000066400000000000000000000011251522604140100173720ustar00rootroot00000000000000package require sdl set xres 1024 set yres 768 set s [sdl.screen $xres $yres "Jim SDL Circles"] proc drawlist {s list} { foreach item $list { $s {*}$item } } proc rand_circle {xres yres maxradius alpha} { list fcircle [rand $xres] [rand $yres] [rand $maxradius] [rand 256] [rand 256] [rand 256] $alpha } loop i 0 200 { set commands {} loop j 0 1000 { lappend commands [rand_circle $xres $yres 40 100] if {$j % 50 == 0} { #$s clear 200 200 200 drawlist $s $commands $s flip sleep 0.1 } } } jimtcl-0.84/examples/sdlevents.tcl000066400000000000000000000035321522604140100172560ustar00rootroot00000000000000package require sdl package require oo set xres 640 set yres 384 set s [sdl.screen $xres $yres "Jim Tcl - SDL, Eventloop integration"] set col(cyan) {0 255 255} set col(yellow) {255 255 0} set col(red) {255 0 0} set col(green) {0 255 0} set col(white) {255 255 255} set col(blue) {0 0 255} set ncols [dict size $col] set grey {50 50 50} class ball { name - pos {x 256 y 256} color {255 255 255} res {x 512 y 512} delta {x 3 y 3} radius 40 havetext 1 } ball method draw {s} { $s fcircle $pos(x) $pos(y) $radius {*}$color if {$havetext} { $s text "($pos(x),$pos(y))" $pos(x)-25 $pos(y)-5 0 0 0 } foreach xy {x y} { incr pos($xy) $delta($xy) if {$pos($xy) <= $radius + $delta($xy) || $pos($xy) >= $res($xy) - $radius - $delta($xy) || [rand 50] == 1} { set delta($xy) $(-1 * $delta($xy)) incr pos($xy) $(2 * $delta($xy)) } } } ball method setvar {name_ value_} { set $name_ $value_ } try { $s font [file dirname [info script]]/FreeSans.ttf 12 set havetext 1 } on error msg { puts $msg set havetext 0 } foreach c [dict keys $col] { set b [ball] $b setvar name $c $b setvar res(x) $xres $b setvar res(y) $yres $b setvar pos(x) $($xres/2) $b setvar pos(y) $($yres/2) $b setvar color [list {*}$col($c) 150] $b setvar havetext $havetext lappend balls $b } proc draw {balls} {s} { $s clear {*}$::grey foreach ball $balls { $ball draw $s } $s flip } # Example of integrating the Tcl event loop with SDL # We need to always be polling SDL, and also run the Tcl event loop # The Tcl event loop runs from within the SDL poll loop via # a (non-blocking) call to update proc heartbeat {} { puts $([clock millis] % 1000000) after 250 heartbeat } set t1 [clock millis] draw $balls heartbeat $s poll { draw $balls update set t2 [clock millis] # 33ms = 30 frames/second if {$t2 - $t1 < 33} { after $(33 - ($t2 - $t1)) } set t1 $t2 } jimtcl-0.84/examples/sdltest.tcl000066400000000000000000000024551522604140100167340ustar00rootroot00000000000000package require sdl # Basic test of all sdl commands set xres 640 set yres 384 set s [sdl.screen $xres $yres [info script]] set cyan {0 255 255} set yellow {255 255 0} set red {255 0 0} set green {0 255 0} set grey {20 20 20} set white {255 255 255} set blue {0 0 255} $s clear {*}$grey $s fcircle 320 280 40 {*}$cyan 150 $s circle 320 280 60 {*}$yellow $s aacircle 320 280 80 {*}$green $s rectangle 200 100 300 180 {*}$cyan $s box 210 110 290 170 {*}$yellow 150 set x 20 set y 20 set dy 10 set dx 10 foreach i [range 50] { set nx $($x + $dx) set ny $($y + $dy) $s line $x $y $nx $ny {*}$green $s aaline $x $($y+30) $nx $($ny+30) {*}$red set x $nx set y $ny set dy $(-$dy) } $s rectangle 50 150 150 250 {*}$yellow foreach i [range 500] { $s pixel $([rand 100] + 50) $([rand 100] + 150) {*}$white } if {[llength $argv]} { lassign $argv font } else { set font [file join [file dirname [info script]] FreeSans.ttf] } try { $s font $font 18 $s text "[file tail $font] 16pt" 20 270 {*}$yellow $s font $font 14 $s text "[file tail $font] 12pt" 20 300 {*}$green 150 # Note that depending on the font, certain unicode glyphs # may or may not be rendered. # Also, need to build with --utf8 $s text "utf-8: \u00bb \u273b \u261e" 20 330 {*}$cyan } on error msg { puts $msg } $s poll { sleep 0.25 } $s free jimtcl-0.84/examples/socket-show-filename.tcl000066400000000000000000000010151522604140100212650ustar00rootroot00000000000000#!/usr/bin/env jimsh # Shows what [$handle filename] returns for each socket type foreach {type addr} { dgram {} dgram.server 5000 dgram 127.0.0.1:5000 pair {} pipe {} pty {} stream.server 127.0.0.1:5002 stream 127.0.0.1:5002 unix.server /tmp/uds.socket unix /tmp/uds.socket unix.dgram.server /tmp/uds.dgram.socket unix.dgram /tmp/uds.dgram.socket } { try { set socks [socket $type {*}$addr] foreach s $socks { puts "$type $addr => [$s filename]" } } on error msg { puts "$type $addr => $msg" } } jimtcl-0.84/examples/sqlite3test.tcl000066400000000000000000000007021522604140100175270ustar00rootroot00000000000000package require sqlite3 set db [sqlite3.open :memory:] $db query {CREATE TABLE plays (id, author, title)} $db query {INSERT INTO plays (id, author, title) VALUES (1, 'Goethe', 'Faust');} $db query {INSERT INTO plays (id, author, title) VALUES (2, 'Shakespeare', 'Hamlet');} $db query {INSERT INTO plays (id, author, title) VALUES (3, 'Sophocles', 'Oedipus Rex');} set res [$db query "SELECT * FROM plays"] $db close foreach r $res {puts $r(author)} jimtcl-0.84/examples/ssl.client000066400000000000000000000004001522604140100165330ustar00rootroot00000000000000# Example of sending via a ssl encrypted, connected tcp socket load_ssl_certs /etc/ssl/certs set s [[socket stream 127.0.0.1:20000] ssl] try { $s verify } on error msg { stderr puts $msg } foreach i [range 1 20] { $s puts "1 << $i" puts [$s gets] } jimtcl-0.84/examples/ssl.server000066400000000000000000000015561522604140100166000ustar00rootroot00000000000000# Example of a ssl encrypted, tcp server which sends a response # Listen on port 20000. No host specified means 0.0.0.0 set s [socket stream.server 20000] $s readable { # Clean up children wait -nohang 0 set sock [[$s accept addr] ssl -server certificate.pem] puts "Client address: $addr" # Make this server forking so we can accept multiple # simultaneous connections if {[os.fork] == 0} { $s close $sock buffering line # Get the request (max 80 chars) - need the source address while {[$sock gets buf] >= 0} { if {$buf eq ""} { break } set buf [string trim $buf] puts -nonewline "read '$buf'" try { set result "$buf = [expr $buf]" } on error {msg} { set result "Error: $buf => $msg" } puts ", sending '$result'" # Send the result back to where it came from $sock puts $result } } $sock close } vwait done jimtcl-0.84/examples/tcp.client000066400000000000000000000002271522604140100165270ustar00rootroot00000000000000# Example of sending via a connected tcp socket set s [socket stream 127.0.0.1:20000] foreach i [range 1 20] { $s puts "1 << $i" puts [$s gets] } jimtcl-0.84/examples/tcp.server000066400000000000000000000014351522604140100165610ustar00rootroot00000000000000# Example of a udp server which sends a response # Listen on port 20000. No host specified means 0.0.0.0 set s [socket stream.server 20000] $s readable { # Clean up children wait -nohang 0 set sock [$s accept addr] puts "Client address: $addr" # Make this server forking so we can accept multiple # simultaneous connections if {[os.fork] == 0} { $s close $sock buffering line # Get the request (max 80 chars) - need the source address while {[$sock gets buf] >= 0} { set buf [string trim $buf] puts -nonewline "read '$buf'" try { set result "$buf = [expr $buf]" } on error {msg} { set result "Error: $buf => $msg" } puts ", sending '$result'" # Send the result back to where it came from $sock puts $result } } $sock close } vwait done jimtcl-0.84/examples/timedread.tcl000066400000000000000000000004731522604140100172060ustar00rootroot00000000000000# Tests that SIGALRM can interrupt read set f [open "/dev/urandom" r] set count 0 set error NONE signal handle SIGALRM catch -signal { alarm 0.5 while {1} { incr count [string bytelength [read $f 100]] } alarm 0 signal default SIGALRM } error puts "Read $count bytes in 0.5 seconds: Got $error" $f close jimtcl-0.84/examples/tip.tcl000077500000000000000000000054021522604140100160440ustar00rootroot00000000000000#!/usr/bin/env jimsh # tip.tcl is like a simple version of cu, written in pure Jim Tcl # It makes use of the new aio tty support # Note: On Mac OS X, be sure to open /dev/cu.* devices, not /dev/tty.* devices set USAGE \ {Usage: tip ?settings? device or tip help Where settings are as follows: 1|2 stop bits (default 1) 5|6|7|8 data bits (default 8) even|odd parity (default none) xonxoff|rtscts handshaking (default none) baud rate (default 115200) e.g. tip 9600 8 1 rtscts /dev/ttyUSB0} set settings { baud 115200 stop 1 data 8 parity none handshake none input raw output raw vmin 1 vtime 1 } set showhelp 0 foreach i $argv { if {[string match -h* $i] || [string match help* $i]} { puts $USAGE return 0 } if {$i in {even odd}} { set settings(parity) $i continue } if {$i in {ixonixoff rtscts}} { set settings(handshake) $i continue } if {$i in {1 2}} { set settings(stop) $i continue } if {$i in {5 6 7 8}} { set settings(data) $i continue } if {[string is integer -strict $i]} { set settings(baud) $i continue } if {[file exists $i]} { set device $i continue } puts "Warning: unrecognised setting $i" } if {![exists device]} { puts $USAGE exit 1 } # save stdin and stdout tty settings # note that stdin and stdout are probably the same file descriptor, # but it doesn't hurt to treat them independently set stdin_save [stdin tty] set stdout_save [stdout tty] try { set f [open $device r+] } on error msg { puts "Failed to open $device" return 1 } if {[$f lock] == 0} { puts "Device is in use: $device" return 1 } try { $f tty {*}$settings } on error msg { puts "$device: $msg" return 1 } puts "\[$device\] Use ~. to exit" $f ndelay 1 $f buffering none stdin tty input raw stdin ndelay 1 stdout tty output raw stdout buffering none set status "" set tilde 0 proc bgerror {args} { set status $args incr ::done } # I/O loop $f readable { set c [$f read] #stdout puts "" #stdout flush if {[$f eof]} { set status "$device: disconnected" incr done } stdout puts -nonewline $c } proc tilde_timeout {} { global tilde f if {$tilde} { $f puts -nonewline ~ set tilde 0 } } stdin readable { set c [stdin read] # may receive more than one char here, but only need to consider # ~. processing if we receive them as separate chars if {$tilde == 0 && $c eq "~"} { incr tilde # Need ~. within 1 second of each other after 1000 tilde_timeout } else { if {$tilde} { after cancel tilde_timeout set tilde 0 if {$c eq "."} { incr done return } $f puts -nonewline ~ } $f puts -nonewline $c } } vwait done # restore previous settings stdin tty {*}$stdin_save stdout tty {*}$stdout_save puts $status jimtcl-0.84/examples/udp.client000066400000000000000000000013671522604140100165370ustar00rootroot00000000000000# Example of sending from an unconnected socket set s [socket dgram] foreach i [range 1 5] { # Specify the address and port with sendto $s sendto "$i + $i + 10" 127.0.0.1:20000 # Receive the response - max length of 100 puts [$s recvfrom 100] } $s close # Now sending via a connected udp socket set s [socket dgram 127.0.0.1:20000] $s buffering none foreach i [range 5 10] { # Socket is connected, so can just use puts here # No need to flush because we set 'buffering none' above. $s puts -nonewline "$i * $i" #$s flush # Receive the response - max length of 100 puts [$s recvfrom 100] } # If taint is supported, this is an unsafe command # and the server will refuse to do it $s puts -nonewline {[exec echo hello]} puts [$s recvfrom 100] jimtcl-0.84/examples/udp.server000066400000000000000000000011751522604140100165640ustar00rootroot00000000000000# Example of a udp server which sends a response # Listen on port 20000. No host specified means 0.0.0.0 set s [socket dgram.server 20000] # We won't run unsafe commands, but # we don't mind sending anything back catch { $s taint sink 0 } # For each request... $s readable { # Get the request (max 80 chars) - need the source address set buf [$s recvfrom 80 addr] puts -nonewline "read '$buf' from $addr" try { set result "$buf = [expr $buf]" } on error {msg} { set result "Error: $buf => $msg" } puts ", sending '$result' to $addr" # Send the result back to where it came from $s sendto $result $addr } vwait done jimtcl-0.84/examples/udp2.client000066400000000000000000000005221522604140100166110ustar00rootroot00000000000000# Example of sending via a connected udp socket set s [socket dgram 127.0.0.1:20000] foreach i [range 1 20] { # Socket is connected, so can just use puts here # But remember to flush to ensure that each message is separate $s puts -nonewline "$i * $i" $s flush # Receive the response - max length of 100 puts [$s recvfrom 100] } jimtcl-0.84/examples/udp6.client000066400000000000000000000011371522604140100166200ustar00rootroot00000000000000# Example of sending from an unconnected ipv6 socket set s [socket -ipv6 dgram] foreach i [range 1 5] { # Specify the address and port with sendto $s sendto "$i + $i + 10" {[::1]:20000} # Receive the response - max length of 100 puts [$s recvfrom 100] } $s close # Now sending via a connected udp socket set s [socket -ipv6 dgram {[::1]:20000}] foreach i [range 5 10] { # Socket is connected, so can just use puts here # But remember to flush to ensure that each message is separate $s puts -nonewline "$i * $i" $s flush # Receive the response - max length of 100 puts [$s recvfrom 100] } jimtcl-0.84/examples/udp6.server000066400000000000000000000011241522604140100166440ustar00rootroot00000000000000# Example of a udp server listening on ipv6 which sends a response # Note that on many hosts, this will also respond to ipv4 requests too # Listen on port 20000. set s [socket -ipv6 dgram.server {[::]:20000}] # For each request... $s readable { # Get the request (max 80 chars) - need the source address set buf [$s recvfrom 80 addr] puts -nonewline "read '$buf' from $addr" try { set result "$buf = [expr $buf]" } on error {msg} { set result "Error: $buf => $msg" } puts ", sending '$result'" # Send the result back to where it came from $s sendto $result $addr } vwait done jimtcl-0.84/examples/unix.client000066400000000000000000000002251522604140100167220ustar00rootroot00000000000000# Example of sending via a connected tcp socket set s [socket unix unix.tmp] foreach i [range 1 20] { $s puts "expr {1 << $i}" puts [$s gets] } jimtcl-0.84/examples/unix.dgram.client000066400000000000000000000007061522604140100200170ustar00rootroot00000000000000# Example of sending from an unconnected socket # Now sending via a connected udp socket set s [socket unix.dgram unix.sock] $s buffering none puts "dgram socket [$s sockname] connected to [$s peername]" foreach i [range 5 10] { # Socket is connected, so can just use puts here # No need to flush because we set 'buffering none' above. $s puts -nonewline "$i * $i" #$s flush # Receive the response - max length of 100 puts [$s recvfrom 100] } jimtcl-0.84/examples/unix.dgram.server000066400000000000000000000013441522604140100200460ustar00rootroot00000000000000# Example of a udp server which sends a response # Listen on port 20000. No host specified means 0.0.0.0 file delete unix.sock set s [socket unix.dgram.server unix.sock] puts "Listening on dgram socket [$s sockname]" set count 0 # For each request... $s readable { # Get the request (max 80 chars) - need the source address set buf [$s recvfrom 80 addr] puts -nonewline "read '$buf' from client $addr" try { set result "$buf = [expr $buf]" } on error {msg} { set result "Error: $buf => $msg" } puts ", sending '$result' to client $addr" # Send the result back to where it came from $s sendto $result $addr } # Handle signals so the socket is removed on exit signal handle SIGINT SIGTERM catch -signal { vwait done } jimtcl-0.84/examples/unix.server000066400000000000000000000020161522604140100167520ustar00rootroot00000000000000# Example of a unix domain stream server which sends a response file delete unix.tmp set s [socket unix.server unix.tmp] puts "Listening on [$s sockname]" $s readable { # Clean up children wait -nohang 0 set sock [$s accept] # Make this server forking so we can accept multiple # simultaneous connections if {[os.fork] == 0} { # We don't want the unix domain path to be deleted here $s close -nodelete $sock buffering line # Get the requests, one line at a time an evaluate while {[$sock gets buf] >= 0} { set buf [string trim $buf] if {$buf in {? help}} { set result "Enter any Tcl command to run in the server" } else { try { set result [eval $buf] set result [string map [list \\ \\\\ \n \\n \r \\r] $result] } on error {msg} { set result "Error: $buf => $msg" } } # Send the result back to where it came from $sock puts $result } } $sock close } # Handle signals so the socket is removed on exit signal handle SIGINT SIGTERM catch -signal { vwait done } jimtcl-0.84/examples/vwaitsignal.tcl000066400000000000000000000007561522604140100176040ustar00rootroot00000000000000# In lieu of some proper unit tests, this example # checks that vwait can be interrupted by handled signals set f [open "/dev/urandom" r] set count 0 $f ndelay 1 signal handle SIGALRM $f readable { incr count [string bytelength [read $f 100]] } set start [clock millis] # Even though nothing sets 'done', vwait will return on the signal alarm 0.5 vwait -signal done set end [clock millis] puts "Read $count bytes and received [signal check -clear] after $($end - $start)ms" $f close jimtcl-0.84/freebsd/000077500000000000000000000000001522604140100143345ustar00rootroot00000000000000jimtcl-0.84/freebsd/andrew.txt000066400000000000000000000054011522604140100163550ustar00rootroot00000000000000Delivered-To: oyvindharboe@gmail.com Received: by 10.100.7.20 with SMTP id 20cs86142ang; Wed, 16 Jul 2008 00:45:59 -0700 (PDT) Received: by 10.142.238.12 with SMTP id l12mr5009290wfh.204.1216194359186; Wed, 16 Jul 2008 00:45:59 -0700 (PDT) Return-Path: Received: from cpanel5.proisp.no (cpanel5.proisp.no [209.85.100.29]) by mx.google.com with ESMTP id 31si6762736wff.16.2008.07.16.00.45.57; Wed, 16 Jul 2008 00:45:59 -0700 (PDT) Received-SPF: fail (google.com: domain of andrew@lunn.ch does not designate 209.85.100.29 as permitted sender) client-ip=209.85.100.29; Authentication-Results: mx.google.com; spf=hardfail (google.com: domain of andrew@lunn.ch does not designate 209.85.100.29 as permitted sender) smtp.mail=andrew@lunn.ch Received: from londo.lunn.ch ([80.238.139.98]:48839 ident=mail) by cpanel5.proisp.no with esmtp (Exim 4.69) (envelope-from ) id 1KJ1ht-00085G-Ng for oyvind.harboe@zylin.com; Wed, 16 Jul 2008 09:45:52 +0200 Received: from lunn by londo.lunn.ch with local (Exim 3.36 #1 (Debian)) id 1KJ1hq-0005ss-00; Wed, 16 Jul 2008 09:45:46 +0200 Date: Wed, 16 Jul 2008 09:45:46 +0200 From: Andrew Lunn To: ?yvind Harboe Cc: jim-devel@lists.berlios.de, antirez@gmail.com, patthoyts@users.sf.net, andrew@lunn.ch, openocd@duaneellis.com, uklein@klein-messgeraete.de, ml-jim@qiao.in-berlin.de Subject: Re: Change Jim Tcl license Message-ID: <20080716074546.GC24771@lunn.ch> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.18 (2008-05-17) X-Spam-Status: No, score=-2.6 X-Spam-Score: -25 X-Spam-Bar: -- X-Spam-Flag: NO X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - cpanel5.proisp.no X-AntiAbuse: Original Domain - zylin.com X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - lunn.ch X-Source: X-Source-Args: X-Source-Dir: On Wed, Jul 16, 2008 at 09:34:14AM +0200, ?yvind Harboe wrote: > Hi all, > > I'm currently the maintainer of Jim Tcl trying as best as I can > to fill Salvatore's shoes. > > Short story: > > If you have contributed to Jim Tcl, please reply to this email > that you agree that we can switch Jim Tcl to a FreeBSD license. I've no problems with this, but my contributions are very minimal. Do you want this written down, in blood, to keep the lawyers happy? At a minimum i think everybody's agreement needs to be posted to a public email list which is publicly archived etc so there is a record of the agreement... Andrew jimtcl-0.84/freebsd/clemens.txt000066400000000000000000000074271522604140100165350ustar00rootroot00000000000000 Delivered-To: oyvindharboe@gmail.com Received: by 10.100.7.20 with SMTP id 20cs114742ang; Wed, 16 Jul 2008 08:58:18 -0700 (PDT) Received: by 10.114.137.2 with SMTP id k2mr325372wad.95.1216223896673; Wed, 16 Jul 2008 08:58:16 -0700 (PDT) Return-Path: Received: from cpanel5.proisp.no (cpanel5.proisp.no [209.85.100.29]) by mx.google.com with ESMTP id m28si10145125waf.16.2008.07.16.08.58.15; Wed, 16 Jul 2008 08:58:16 -0700 (PDT) Received-SPF: neutral (google.com: 209.85.100.29 is neither permitted nor denied by best guess record for domain of ml-jim@qiao.in-berlin.de) client-ip=209.85.100.29; Authentication-Results: mx.google.com; spf=neutral (google.com: 209.85.100.29 is neither permitted nor denied by best guess record for domain of ml-jim@qiao.in-berlin.de) smtp.mail=ml-jim@qiao.in-berlin.de Received: from gnu.in-berlin.de ([192.109.42.4]:58401) by cpanel5.proisp.no with esmtps (TLSv1:AES256-SHA:256) (Exim 4.69) (envelope-from ) id 1KJ9OG-0006Hf-8y for oyvind.harboe@zylin.com; Wed, 16 Jul 2008 17:58:07 +0200 X-Envelope-From: ml-jim@qiao.in-berlin.de X-Envelope-To: Received: from qiao.in-berlin.de (qiao.in-berlin.de [217.197.85.72]) by gnu.in-berlin.de (8.13.8/8.13.8/Debian-2) with ESMTP id m6GFvxio009504 for ; Wed, 16 Jul 2008 17:58:02 +0200 Received: from [192.168.0.10] ([::ffff:192.168.0.10]) by qiao.in-berlin.de with esmtp; Wed, 16 Jul 2008 18:00:04 +0200 id 0001D68D.487E1B04.000042E7 In-Reply-To: References: Mime-Version: 1.0 (Apple Message framework v753.1) Content-Type: text/plain; charset=ISO-8859-1; delsp=yes; format=flowed Message-Id: Cc: jim-devel@lists.berlios.de, antirez@gmail.com, patthoyts@users.sf.net, andrew@lunn.ch, openocd@duaneellis.com, uklein@klein-messgeraete.de Content-Transfer-Encoding: quoted-printable From: Clemens Hintze Subject: Re: Change Jim Tcl license Date: Wed, 16 Jul 2008 17:58:14 +0200 To: "=?ISO-8859-1?Q?\"=D8yvind_Harboe\"?=" X-Mailer: Apple Mail (2.753.1) X-Spam-Score: (0.101) BAYES_50,RDNS_NONE X-Scanned-By: MIMEDefang_at_IN-Berlin_e.V. on 192.109.42.4 X-Spam-Status: No, score=-2.6 X-Spam-Score: -25 X-Spam-Bar: -- X-Spam-Flag: NO X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - cpanel5.proisp.no X-AntiAbuse: Original Domain - zylin.com X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - qiao.in-berlin.de X-Source: X-Source-Args: X-Source-Dir: Am 16.07.2008 um 09:34 schrieb =D8yvind Harboe: > Hi all, Hi =D8yvind, (...) > If you have contributed to Jim Tcl, please reply to this email > that you agree that we can switch Jim Tcl to a FreeBSD license. > > Once I have a record of all contributors agreeing to switch > to a FreeBSD license, I'll update CVS. No problem with me: I agree to permit my contributions to the Jim =20 project to be re-licensed under a BSD compatible license. (...) > Please let me know if any of the emails below are wrong(chi is > missing) or the list is not complete. After consultation with the voices in my head, I can ensure you, =20 'chi' is also agreeing with the re-licensing, because its me too ;-) Thank you very much to revive Jim! :-) Best regards, Clemens Hintze. (...)= jimtcl-0.84/freebsd/duane.txt000066400000000000000000000053701522604140100161760ustar00rootroot00000000000000Delivered-To: oyvindharboe@gmail.com Received: by 10.100.7.20 with SMTP id 20cs93801ang; Wed, 16 Jul 2008 03:40:02 -0700 (PDT) Received: by 10.142.148.10 with SMTP id v10mr5070849wfd.317.1216204801306; Wed, 16 Jul 2008 03:40:01 -0700 (PDT) Return-Path: Received: from cpanel5.proisp.no (cpanel5.proisp.no [209.85.100.29]) by mx.google.com with ESMTP id 27si9313433wff.3.2008.07.16.03.40.00; Wed, 16 Jul 2008 03:40:01 -0700 (PDT) Received-SPF: neutral (google.com: 209.85.100.29 is neither permitted nor denied by best guess record for domain of openocd@duaneellis.com) client-ip=209.85.100.29; Authentication-Results: mx.google.com; spf=neutral (google.com: 209.85.100.29 is neither permitted nor denied by best guess record for domain of openocd@duaneellis.com) smtp.mail=openocd@duaneellis.com Received: from smtpout10-04.prod.mesa1.secureserver.net ([64.202.165.238]:48803 helo=smtpout10.prod.mesa1.secureserver.net) by cpanel5.proisp.no with smtp (Exim 4.69) (envelope-from ) id 1KJ4QL-0005cq-GB for oyvind.harboe@zylin.com; Wed, 16 Jul 2008 12:39:54 +0200 Received: (qmail 2305 invoked from network); 16 Jul 2008 10:39:56 -0000 Received: from unknown (68.37.53.103) by smtpout10-04.prod.mesa1.secureserver.net (64.202.165.238) with ESMTP; 16 Jul 2008 10:39:55 -0000 Message-ID: <487DCFEC.4010104@duaneellis.com> Date: Wed, 16 Jul 2008 06:39:40 -0400 From: Duane Ellis Reply-To: openocd@duaneellis.com User-Agent: Thunderbird 2.0.0.14 (Windows/20080421) MIME-Version: 1.0 To: =?ISO-8859-1?Q?=D8yvind_Harboe?= CC: jim-devel@lists.berlios.de, antirez@gmail.com, patthoyts@users.sf.net, andrew@lunn.ch, uklein@klein-messgeraete.de, ml-jim@qiao.in-berlin.de Subject: Re: Change Jim Tcl license References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.6 X-Spam-Score: -25 X-Spam-Bar: -- X-Spam-Flag: NO X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - cpanel5.proisp.no X-AntiAbuse: Original Domain - zylin.com X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - duaneellis.com X-Source: X-Source-Args: X-Source-Dir: Oyvind Harboe wrote: > Short story: > > If you have contributed to Jim Tcl, please reply to this email > that you agree that we can switch Jim Tcl to a FreeBSD license. > > Once I have a record of all contributors agreeing to switch > to a FreeBSD license, I'll update CVS. > > OK - from me --Duane. -Duane. jimtcl-0.84/freebsd/oharboe.txt000066400000000000000000000056121522604140100165200ustar00rootroot00000000000000 Received: by 10.100.7.20 with HTTP; Wed, 16 Jul 2008 10:12:05 -0700 (PDT) Message-ID: Date: Wed, 16 Jul 2008 19:12:05 +0200 From: "=?ISO-8859-1?Q?=D8yvind_Harboe?=" Sender: oyvindharboe@gmail.com To: jim-devel@lists.berlios.de Subject: Re: Change Jim Tcl license In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline References: Delivered-To: oyvindharboe@gmail.com X-Google-Sender-Auth: fc18e85532eee8f2 For the record: I would like my contributions to Jim Tcl to be under a FreeBSD license too= . On Wed, Jul 16, 2008 at 9:34 AM, =D8yvind Harboe = wrote: > Hi all, > > I'm currently the maintainer of Jim Tcl trying as best as I can > to fill Salvatore's shoes. > > Short story: > > If you have contributed to Jim Tcl, please reply to this email > that you agree that we can switch Jim Tcl to a FreeBSD license. > > Once I have a record of all contributors agreeing to switch > to a FreeBSD license, I'll update CVS. > > Long story: > > The current Jim Tcl license has a problem with GPL. If you > link GPL code and Jim Tcl, the result is no license at all. > > This prevents Jim Tcl from being used in GPL projects. > > Lately Jim Tcl has been used with OpenOCD, a GPL project, > and the license issue must be resolved one way or another. > > Upon conferring with Jonathan Larmour , who > has kindly helped out with his knowledge on the topic, I have > concluded that the best way to rectify this is to change the > Jim Tcl license to a FreeBSD license. See OpenOCD mailing > list for a discussion on this if you want details. > > http://www.fsf.org/licensing/licenses/index_html#FreeBSD > > As far as I can determine, below is the complete list of contributors. > > > antirez - Salvatore Sanfilippo > patthoyts - ?? Pat Thoyts > oharboe - =D8yvind Harboe - soyvind.harboe@zylin.com > chi - ?? > Andrew Lunn > Duane Ellis > Uwe Klein > Clemens Hintze ml-jim@qiao.in-berlin.de > > Please let me know if any of the emails below are wrong(chi is > missing) or the list is not complete. > > > -- > =D8yvind Harboe > http://www.zylin.com/zy1000.html > ARM7 ARM9 XScale Cortex > JTAG debugger and flash programmer > --=20 =D8yvind Harboe http://www.zylin.com/zy1000.html ARM7 ARM9 XScale Cortex JTAG debugger and flash programmer jimtcl-0.84/freebsd/pat.txt000066400000000000000000000077121522604140100156700ustar00rootroot00000000000000 Delivered-To: oyvindharboe@gmail.com Received: by 10.100.7.20 with SMTP id 20cs108097ang; Wed, 16 Jul 2008 07:49:02 -0700 (PDT) Received: by 10.142.232.20 with SMTP id e20mr80874wfh.138.1216219741865; Wed, 16 Jul 2008 07:49:01 -0700 (PDT) Return-Path: Received: from cpanel5.proisp.no (cpanel5.proisp.no [209.85.100.29]) by mx.google.com with ESMTP id 30si10551683wff.18.2008.07.16.07.49.01; Wed, 16 Jul 2008 07:49:01 -0700 (PDT) Received-SPF: neutral (google.com: 209.85.100.29 is neither permitted nor denied by best guess record for domain of patthoyts@users.sourceforge.net) client-ip=209.85.100.29; Authentication-Results: mx.google.com; spf=neutral (google.com: 209.85.100.29 is neither permitted nor denied by best guess record for domain of patthoyts@users.sourceforge.net) smtp.mail=patthoyts@users.sourceforge.net Received: from smtp-out4.blueyonder.co.uk ([195.188.213.7]:38596) by cpanel5.proisp.no with esmtp (Exim 4.69) (envelope-from ) id 1KJ8JH-0000Vd-OT for oyvind.harboe@zylin.com; Wed, 16 Jul 2008 16:48:52 +0200 Received: from [172.23.170.141] (helo=anti-virus02-08) by smtp-out4.blueyonder.co.uk with smtp (Exim 4.52) id 1KJ8JO-0007r0-Cy; Wed, 16 Jul 2008 15:48:58 +0100 Received: from [77.102.249.21] (helo=badger.patthoyts.tk) by asmtp-out4.blueyonder.co.uk with esmtp (Exim 4.52) id 1KJ8J6-0000gY-VY; Wed, 16 Jul 2008 15:48:41 +0100 Received: by badger.patthoyts.tk (Postfix, from userid 1000) id 810535184F; Wed, 16 Jul 2008 15:48:40 +0100 (BST) Sender: pat@badger.patthoyts.tk To: =?iso-8859-1?q?=D8yvind_Harboe?= Cc: jim-devel@lists.berlios.de Subject: Re: Change Jim Tcl license References: X-Face: .`d#euqz@6H{";Ysmx2IVe_7M3vA+2w1X[QLk?ZO&QRauXQL{*L'$3getx}9+zK.-KWDx3. qrlR)76MFb`6bgoGvLpLtcQKB=X~;* Date: 16 Jul 2008 15:48:39 +0100 In-Reply-To: Message-ID: <87fxq97um0.fsf@badger.patthoyts.tk> Lines: 27 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3 MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-2.6 X-Spam-Score: -25 X-Spam-Bar: -- X-Spam-Flag: NO X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - cpanel5.proisp.no X-AntiAbuse: Original Domain - zylin.com X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - users.sourceforge.net X-Source: X-Source-Args: X-Source-Dir: -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 "=D8yvind Harboe" writes: >If you have contributed to Jim Tcl, please reply to this email >that you agree that we can switch Jim Tcl to a FreeBSD license. > >Once I have a record of all contributors agreeing to switch >to a FreeBSD license, I'll update CVS. I hereby agree to permit my contributions to the Jim project to be re-licensed under a BSD compatible license. - --=20 Pat Thoyts http://www.patthoyts.tk/ PGP fingerprint 2C 6E 98 07 2C 59 C8 97 10 CE 11 E6 04 E0 B9 DD -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.8 (SunOS) Comment: Processed by Mailcrypt 3.5.8 iQCVAwUBSH4KO2B90JXwhOSJAQKtqQP9ERwSXpbP69l4JSrunG29Rhu2F3r83zu3 GAKpFu4HwkVnIStLQ4o3tsqG9uKrVDbRMa187eSwHmlXXIMwDlkCKNsDFxvdLDZz kbTYDibspYSw6CjwOUSTXifK9P7ho4Q7PtsRnJ8T1IMlGJlwg39Rxd+mpEO/if3q ExIwM1aBbAs=3D =3Du8si -----END PGP SIGNATURE----- jimtcl-0.84/freebsd/salvatore.txt000066400000000000000000000103241522604140100170750ustar00rootroot00000000000000 Delivered-To: oyvindharboe@gmail.com Received: by 10.100.7.20 with SMTP id 20cs113143ang; Wed, 16 Jul 2008 08:41:11 -0700 (PDT) Received: by 10.142.140.15 with SMTP id n15mr127048wfd.84.1216222870242; Wed, 16 Jul 2008 08:41:10 -0700 (PDT) Return-Path: Received: from cpanel5.proisp.no (cpanel5.proisp.no [209.85.100.29]) by mx.google.com with ESMTP id 29si7397124wfg.0.2008.07.16.08.41.08; Wed, 16 Jul 2008 08:41:10 -0700 (PDT) Received-SPF: neutral (google.com: 209.85.100.29 is neither permitted nor denied by domain of antirez@gmail.com) client-ip=209.85.100.29; Authentication-Results: mx.google.com; spf=neutral (google.com: 209.85.100.29 is neither permitted nor denied by domain of antirez@gmail.com) smtp.mail=antirez@gmail.com; dkim=pass (test mode) header.i=@gmail.com Received: from fg-out-1718.google.com ([72.14.220.155]:16058) by cpanel5.proisp.no with esmtp (Exim 4.69) (envelope-from ) id 1KJ97g-0004yX-1W for oyvind.harboe@zylin.com; Wed, 16 Jul 2008 17:40:59 +0200 Received: by fg-out-1718.google.com with SMTP id l27so3985052fgb.19 for ; Wed, 16 Jul 2008 08:40:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to :subject:cc:in-reply-to:mime-version:content-type :content-transfer-encoding:content-disposition:references; bh=/aWDZQfgMBPqomYWZ2AUKOhhGMju+bwnSBbKL8MBonA=; b=i0P3OKDopn/vHfa5ZrUvBjuPBnj43GMw8FOXKjxM/IfvywJParYqBS2Vmlw8RTndFg J5wwxXf5056cZu/GbKbj8xLfylFfSInVaO7OnDutA3CeX1iU35my1DU6l9W6ILkLiT1P Azi3L27rFQrzau/s53VU/UVELc3WckWdu1a1k= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version :content-type:content-transfer-encoding:content-disposition :references; b=ww2MIz9svJttgS8mTRBhEX8Isveugn2hl3sMcgh0hZ1+ln8YbiysxYxZkdddewWm02 WXsWgSgwy7MIPAUK1tNjzgkZ2l789SdrAtBCmqmRWJJI+ESTqbHMz8cqW+QRVP/A9Dfm 8+AR85DHi7SOB0mdHtq9fsavZReUdaSIgy6F4= Received: by 10.86.80.5 with SMTP id d5mr2284433fgb.19.1216222858224; Wed, 16 Jul 2008 08:40:58 -0700 (PDT) Received: by 10.86.50.18 with HTTP; Wed, 16 Jul 2008 08:40:58 -0700 (PDT) Message-ID: Date: Wed, 16 Jul 2008 17:40:58 +0200 From: "Salvatore Sanfilippo" To: "=?ISO-8859-1?Q?=D8yvind_Harboe?=" Subject: Re: Change Jim Tcl license Cc: jim-devel@lists.berlios.de, patthoyts@users.sf.net, andrew@lunn.ch, openocd@duaneellis.com, uklein@klein-messgeraete.de, ml-jim@qiao.in-berlin.de In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: X-Spam-Status: No, score=-2.6 X-Spam-Score: -25 X-Spam-Bar: -- X-Spam-Flag: NO X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - cpanel5.proisp.no X-AntiAbuse: Original Domain - zylin.com X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - gmail.com X-Source: X-Source-Args: X-Source-Dir: I agree to permit my contributions to the Jim project to be re-licensed under a BSD compatible license. Since I'm currently the top contributor if it's safer from the legal point of view I can also put a tar.gz of the current Jim source code with a BSD "LICENSE" file on my website. Otherwise I can sign by hand a letter and send a digitalized image here. Ciao, Salvatore -- Salvatore 'antirez' Sanfilippo http://antirez.com Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations. Conway's Law jimtcl-0.84/freebsd/uwe.txt000066400000000000000000000072621522604140100157040ustar00rootroot00000000000000Delivered-To: oyvindharboe@gmail.com Received: by 10.100.7.20 with SMTP id 20cs89014ang; Wed, 16 Jul 2008 01:58:32 -0700 (PDT) Received: by 10.142.125.9 with SMTP id x9mr5028534wfc.123.1216198711465; Wed, 16 Jul 2008 01:58:31 -0700 (PDT) Return-Path: Received: from cpanel5.proisp.no (cpanel5.proisp.no [209.85.100.29]) by mx.google.com with ESMTP id 30si6756166wfa.10.2008.07.16.01.58.29; Wed, 16 Jul 2008 01:58:31 -0700 (PDT) Received-SPF: neutral (google.com: 209.85.100.29 is neither permitted nor denied by domain of wiederling@googlemail.com) client-ip=209.85.100.29; Authentication-Results: mx.google.com; spf=neutral (google.com: 209.85.100.29 is neither permitted nor denied by domain of wiederling@googlemail.com) smtp.mail=wiederling@googlemail.com; dkim=pass (test mode) header.i=@googlemail.com Received: from wr-out-0506.google.com ([64.233.184.233]:51225) by cpanel5.proisp.no with esmtp (Exim 4.69) (envelope-from ) id 1KJ2q7-00057b-IR for oyvind.harboe@zylin.com; Wed, 16 Jul 2008 10:58:24 +0200 Received: by wr-out-0506.google.com with SMTP id c8so2209154wra.27 for ; Wed, 16 Jul 2008 01:58:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to :subject:cc:in-reply-to:mime-version:content-type :content-transfer-encoding:content-disposition:references; bh=VxcH0g2H5iLUo27gqJiqrlY4uVbN1NFE4skyMKqysPM=; b=JPK53r6LQ6GqBCG1kfVYyTPuPuVhlBrbzQ8oSBwpwuwwB7t3CSv+c75jRjb/n3y8mi gN1r6noZucK9ZpRZiHxYZpHVhYFcWbZ+ZXM75H2qIFfl4YDzfgg/Ub7CzoR2LskuBsRk DMH2LnyAYf+Om2YAKJdkoMnGbPMDMFSrNHeIc= DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version :content-type:content-transfer-encoding:content-disposition :references; b=VAGlxpb1YGbex/eaS0tQgWvH/lWHzgD5R/rxjshVSwZJOStwqMA1F5jNQgybQFIn1F zWoiAV81uWMzBEGYab7SGsStWLxovcBSgi9NL+XqwAkhBdrWjgFPvpBHn5PvgOOXEhGH EGhjrY8qp2LSxhFcW3/DvgObhBBKtY1J+qzvA= Received: by 10.90.115.17 with SMTP id n17mr1231758agc.90.1216198705850; Wed, 16 Jul 2008 01:58:25 -0700 (PDT) Received: by 10.90.105.18 with HTTP; Wed, 16 Jul 2008 01:58:25 -0700 (PDT) Message-ID: <1af31b6f0807160158o295303adh43abdd34fbe8ec99@mail.gmail.com> Date: Wed, 16 Jul 2008 10:58:25 +0200 From: "Uwe Klein" To: "=?ISO-8859-1?Q?=D8yvind_Harboe?=" Subject: Re: [Jim-devel] Change Jim Tcl license Cc: jim-devel@lists.berlios.de, patthoyts@users.sf.net, andrew@lunn.ch, uklein@klein-messgeraete.de, antirez@gmail.com, openocd@duaneellis.com, ml-jim@qiao.in-berlin.de In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: X-Spam-Status: No, score=-2.6 X-Spam-Score: -25 X-Spam-Bar: -- X-Spam-Flag: NO X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - cpanel5.proisp.no X-AntiAbuse: Original Domain - zylin.com X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - googlemail.com X-Source: X-Source-Args: X-Source-Dir: > If you have contributed to Jim Tcl, please reply to this email > that you agree that we can switch Jim Tcl to a FreeBSD license. For Uwe Klein This is OK with me. uwe jimtcl-0.84/glob.tcl000066400000000000000000000105511522604140100143530ustar00rootroot00000000000000# Implements a mostly Tcl-compatible glob command based on readdir # # (c) 2008 Steve Bennett # (c) 2012 Alexander Shpilkin # # See LICENCE in this directory for licensing. package require readdir # Return a list of all entries in $dir that match the pattern. proc glob.globdir {dir pattern} { if {[file exists $dir/$pattern]} { # Simple case return [list $pattern] } set result {} set files [readdir $dir] lappend files . .. foreach name $files { if {[string match $pattern $name]} { # Starting dots match only explicitly if {[string index $name 0] eq "." && [string index $pattern 0] ne "."} { continue } lappend result $name } } return $result } # Return the list of patterns resulting from expanding any braced # alternatives inside the given pattern, prepending the unprocessed # part of the pattern. Does _not_ handle escaped braces or commas. proc glob.explode {pattern} { set oldexp {} set newexp {""} while 1 { set oldexp $newexp set newexp {} set ob [string first \{ $pattern] set cb [string first \} $pattern] if {$ob < $cb && $ob != -1} { set mid [string range $pattern 0 $ob-1] set subexp [lassign [glob.explode [string range $pattern $ob+1 end]] pattern] if {$pattern eq ""} { error "unmatched open brace in glob pattern" } set pattern [string range $pattern 1 end] foreach subs $subexp { foreach sub [split $subs ,] { foreach old $oldexp { lappend newexp $old$mid$sub } } } } elseif {$cb != -1} { set suf [string range $pattern 0 $cb-1] set rest [string range $pattern $cb end] break } else { set suf $pattern set rest "" break } } foreach old $oldexp { lappend newexp $old$suf } list $rest {*}$newexp } # Core glob implementation. Returns a list of files/directories inside # base matching pattern, in {realname name} pairs. proc glob.glob {base pattern} { set dir [file dirname $pattern] if {$pattern eq $dir || $pattern eq ""} { return [list [file join $base $dir] $pattern] } elseif {$pattern eq [file tail $pattern]} { set dir "" } # Recursively expand the parent directory set dirlist [glob.glob $base $dir] set pattern [file tail $pattern] # Collect the files/directories set result {} foreach {realdir dir} $dirlist { if {![file isdir $realdir]} { continue } if {[string index $dir end] ne "/" && $dir ne ""} { append dir / } foreach name [glob.globdir $realdir $pattern] { lappend result [file join $realdir $name] $dir$name } } return $result } # Implements the Tcl glob command # # Usage: glob ?-nocomplain? ?-directory dir? ?--? pattern ... # # Patterns use 'string match' (glob) pattern matching for each # directory level, plus support for braced alternations. # # e.g. glob {te[a-e]*/*.{c,tcl}} # # Note: files starting with . will only be returned if matching component # of the pattern starts with . proc glob {args} { set nocomplain 0 set base "" set tails 0 set n 0 foreach arg $args { if {[info exists param]} { set $param $arg unset param incr n continue } switch -glob -- $arg { -d* { set switch $arg set param base } -n* { set nocomplain 1 } -ta* { set tails 1 } -- { incr n break } -* { return -code error "bad option \"$arg\": must be -directory, -nocomplain, -tails, or --" } * { break } } incr n } if {[info exists param]} { return -code error "missing argument to \"$switch\"" } if {[llength $args] <= $n} { return -code error "wrong # args: should be \"glob ?options? pattern ?pattern ...?\"" } set args [lrange $args $n end] set result {} foreach pattern $args { set escpattern [string map { \\\\ \x01 \\\{ \x02 \\\} \x03 \\, \x04 } $pattern] set patexps [lassign [glob.explode $escpattern] rest] if {$rest ne ""} { return -code error "unmatched close brace in glob pattern" } foreach patexp $patexps { set patexp [string map { \x01 \\\\ \x02 \{ \x03 \} \x04 , } $patexp] foreach {realname name} [glob.glob $base $patexp] { incr n if {$tails} { lappend result $name } else { lappend result [file join $base $name] } } } } if {!$nocomplain && [llength $result] == 0} { set s $(([llength $args] > 1) ? "s" : "") return -code error "no files matched glob pattern$s \"[join $args]\"" } return $result } jimtcl-0.84/initjimsh.tcl000066400000000000000000000104061522604140100154250ustar00rootroot00000000000000# This pseudo-package is loaded from jimsh to add additional # paths to $auto_path and to source ~/.jimrc proc _jimsh_init {} { rename _jimsh_init {} global jim::exe jim::argv0 tcl_interactive auto_path tcl_platform # Stash the result of [info nameofexecutable] now, before a possible [cd] if {[exists jim::argv0]} { if {[string match "*/*" $jim::argv0]} { set jim::exe [file join [pwd] $jim::argv0] } else { set jim::argv0 [file tail $jim::argv0] set path [split [env PATH ""] $tcl_platform(pathSeparator)] if {$tcl_platform(platform) eq "windows"} { # Windows searches the current directory first, and convert backslashes to slashes set path [lmap p [list "" {*}$path] { string map {\\ /} $p }] } foreach p $path { set exec [file join [pwd] $p $jim::argv0] if {[file executable $exec]} { set jim::exe $exec break } } } } # Add to the standard auto_path lappend p {*}[split [env JIMLIB {}] $tcl_platform(pathSeparator)] if {[exists jim::exe]} { lappend p [file dirname $jim::exe] } lappend p {*}$auto_path set auto_path $p if {$tcl_interactive && [env HOME {}] ne ""} { foreach src {.jimrc jimrc.tcl} { if {[file exists [env HOME]/$src]} { uplevel #0 source [env HOME]/$src break } } } return "" } if {$tcl_platform(platform) eq "windows"} { set jim::argv0 [string map {\\ /} $jim::argv0] } # Set a global variable here so that custom commands can be added post hoc set tcl::autocomplete_commands {array clock debug dict file history info namespace package signal socket string tcl::prefix zlib} # Simple interactive command line completion callback # Explicitly knows about some commands that support "-commands" proc tcl::autocomplete {prefix} { if {[set space [string first " " $prefix]] != -1} { set cmd [string range $prefix 0 $space-1] if {$cmd in $::tcl::autocomplete_commands || [info channel $cmd] ne ""} { set arg [string range $prefix $space+1 end] # Add any results from -commands return [lmap p [$cmd -commands] { if {![string match "${arg}*" $p]} continue function "$cmd $p" }] } } # Find matching files. if {[string match "source *" $prefix]} { set path [string range $prefix 7 end] return [lmap p [glob -nocomplain "${path}*"] { function "source $p" }] } # Find matching commands, omitting results containing spaces return [lmap p [lsort [info commands $prefix*]] { if {[string match "* *" $p]} { continue } function $p }] } # Only procs and C commands that support "cmd -help subcommand" have autohint suport set tcl::stdhint_commands {array clock debug dict file history info namespace package signal string zlib} set tcl::stdhint_cols { none {0} black {30} red {31} green {32} yellow {33} blue {34} purple {35} cyan {36} normal {37} grey {30 1} gray {30 1} lred {31 1} lgreen {32 1} lyellow {33 1} lblue {34 1} lpurple {35 1} lcyan {36 1} white {37 1} } # Make it easy to change the colour set tcl::stdhint_col $tcl::stdhint_cols(lcyan) # The default hint implementation proc tcl::stdhint {string} { set result "" lassign $string cmd arg if {[llength $string] >= 2} { if {$cmd in $::tcl::stdhint_commands || [info channel $cmd] ne ""} { catch { set help [$cmd -help $arg] if {[string match "Usage: $cmd *" $help]} { set n [llength $string] set subcmd [lindex $help $n] incr n set hint [join [lrange $help $n end]] set prefix "" if {![string match "* " $string]} { if {$n == 3 && $subcmd ne $arg} { # complete the subcommand in the hint set prefix "[string range $subcmd [string length $arg] end] " } else { set prefix " " } } set result [list $prefix$hint {*}$::tcl::stdhint_col] } } } } else { catch { if {[exists -alias $cmd] && [llength [info alias $cmd]] == 1} { # Look through a simple alias. Doesn't really work for anything more complex. # consider 'alias p stderr puts' where we can't really provide the usage # of 'stderr puts' set help [info usage [info alias $cmd]] } else { set help [info usage $cmd] } set hint [join [lrange $help 1 end]] set prefix " " if {[string match "* " $string]} { set prefix "" } set result [list $prefix$hint {*}$::tcl::stdhint_col] } } return $result } _jimsh_init jimtcl-0.84/jim-aio.c000066400000000000000000002454401522604140100144240ustar00rootroot00000000000000/* Jim - A small embeddable Tcl interpreter * * Copyright 2005 Salvatore Sanfilippo * Copyright 2005 Clemens Hintze * Copyright 2005 patthoyts - Pat Thoyts * Copyright 2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com * Copyright 2008 Andrew Lunn * Copyright 2008 Duane Ellis * Copyright 2008 Uwe Klein * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE JIM TCL PROJECT ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * JIM TCL PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * The views and conclusions contained in the software and documentation * are those of the authors and should not be interpreted as representing * official policies, either expressed or implied, of the Jim Tcl Project. **/ #include "jimautoconf.h" #include #include #include #include #include #ifdef HAVE_UNISTD_H #include #include #endif #ifdef HAVE_UTIL_H #include #endif #ifdef HAVE_PTY_H #include #endif #include "jim.h" #if defined(HAVE_SYS_SOCKET_H) && defined(HAVE_SELECT) && defined(HAVE_NETINET_IN_H) && defined(HAVE_NETDB_H) && defined(HAVE_ARPA_INET_H) #include #include #include #include #include #ifdef HAVE_SYS_UN_H #include #endif #define HAVE_SOCKETS #elif defined (__MINGW32__) /* currently mingw32 doesn't support sockets, but has pipe, fdopen */ #endif #if defined(JIM_SSL) #include #include #endif #ifdef HAVE_TERMIOS_H #include #endif #include "jim-eventloop.h" #include "jim-subcmd.h" #include "jimiocompat.h" #define AIO_CMD_LEN 32 /* e.g. aio.handleXXXXXX */ #define AIO_DEFAULT_RBUF_LEN 256 /* read size for gets, read */ #define AIO_DEFAULT_WBUF_LIMIT (64 * 1024) /* max size of writebuf before flushing */ #define AIO_KEEPOPEN 1 /* don't set O_CLOEXEC, don't close on command delete */ #define AIO_NODELETE 2 /* don't delete AF_UNIX path on close */ #define AIO_EOF 4 /* EOF was reached */ #define AIO_WBUF_NONE 8 /* default to buffering=none */ #define AIO_NONBLOCK 16 /* socket is non-blocking */ #define AIO_NOTAINT 32 /* Don't set taint on the channel */ #define AIO_ONEREAD 32 /* passed to aio_read_len() to return after a single read */ enum wbuftype { WBUF_OPT_NONE, /* write immediately */ WBUF_OPT_LINE, /* write if NL is seen */ WBUF_OPT_FULL, /* write when write buffer is full or on flush */ }; #if defined(JIM_IPV6) #define IPV6 1 #else #define IPV6 0 #ifndef PF_INET6 #define PF_INET6 0 #endif #endif #if defined(HAVE_SYS_UN_H) && defined(PF_UNIX) #define UNIX_SOCKETS 1 #else #define UNIX_SOCKETS 0 #endif #if defined(HAVE_SOCKETS) && !defined(JIM_BOOTSTRAP) /* Avoid type punned pointers */ union sockaddr_any { struct sockaddr sa; struct sockaddr_in sin; #if IPV6 struct sockaddr_in6 sin6; #endif #if UNIX_SOCKETS struct sockaddr_un sun; #endif }; #ifndef HAVE_INET_NTOP const char *inet_ntop(int af, const void *src, char *dst, int size) { if (af != PF_INET) { return NULL; } snprintf(dst, size, "%s", inet_ntoa(((struct sockaddr_in *)src)->sin_addr)); return dst; } #endif #endif /* JIM_BOOTSTRAP */ /* Wait for the fd to be readable and return JIM_OK if ok or JIM_ERR on timeout */ /* ms=0 means block forever */ static int JimReadableTimeout(int fd, long ms) { #ifdef HAVE_SELECT int retval; struct timeval tv; fd_set rfds; FD_ZERO(&rfds); FD_SET(fd, &rfds); tv.tv_sec = ms / 1000; tv.tv_usec = (ms % 1000) * 1000; retval = select(fd + 1, &rfds, NULL, NULL, ms == 0 ? NULL : &tv); if (retval > 0) { return JIM_OK; } return JIM_ERR; #else return JIM_OK; #endif } struct AioFile; typedef struct { int (*writer)(struct AioFile *af, const char *buf, int len); int (*reader)(struct AioFile *af, char *buf, int len, int pending); int (*error)(const struct AioFile *af); const char *(*strerror)(struct AioFile *af); } JimAioFopsType; typedef struct AioFile { Jim_Obj *filename; /* filename or equivalent for error reporting */ int wbuft; /* enum wbuftype */ int flags; /* AIO_KEEPOPEN | AIO_NODELETE | AIO_EOF */ long timeout; /* timeout (in ms) for read operations if blocking */ int fd; unsigned taintsource; /* Data read from the file are tainted with this value */ unsigned taintsink; /* Data with any of these taint types can't be written to this file */ int addr_family; void *ssl; const JimAioFopsType *fops; Jim_Obj *readbuf; /* Contains any buffered read data. NULL if empty. refcount=0 */ Jim_Obj *writebuf; /* Contains any buffered write data. refcount=1 */ char *rbuf; /* Temporary read buffer (NULL if not yet allocated) */ size_t rbuf_len; /* Length of rbuf */ size_t wbuf_limit; /* Max size of writebuf before flushing */ } AioFile; static void aio_consume(Jim_Obj *objPtr, int n); static int stdio_writer(struct AioFile *af, const char *buf, int len) { int ret = write(af->fd, buf, len); if (ret < 0 && errno == EPIPE) { /* Also discard the write buffer since otherwise when * we try to flush on shutdown we may get SIGPIPE */ aio_consume(af->writebuf, Jim_Length(af->writebuf)); } return ret; } static int stdio_reader(struct AioFile *af, char *buf, int len, int nb) { if (nb || af->timeout == 0 || JimReadableTimeout(af->fd, af->timeout) == JIM_OK) { /* timeout on blocking read */ int ret; errno = 0; ret = read(af->fd, buf, len); if (ret <= 0 && errno != EAGAIN && errno != EINTR) { af->flags |= AIO_EOF; } return ret; } errno = ETIMEDOUT; return -1; } static int stdio_error(const AioFile *af) { if (af->flags & AIO_EOF) { return JIM_OK; } /* XXX Probably errno should have been stashed in af->err instead */ switch (errno) { case EAGAIN: case EINTR: case ETIMEDOUT: #ifdef ECONNRESET case ECONNRESET: #endif #ifdef ECONNABORTED case ECONNABORTED: #endif return JIM_OK; default: return JIM_ERR; } } static const char *stdio_strerror(struct AioFile *af) { return strerror(errno); } static const JimAioFopsType stdio_fops = { stdio_writer, stdio_reader, stdio_error, stdio_strerror, }; #if defined(JIM_SSL) && !defined(JIM_BOOTSTRAP) static SSL_CTX *JimAioSslCtx(Jim_Interp *interp); static int ssl_writer(struct AioFile *af, const char *buf, int len) { return SSL_write(af->ssl, buf, len); } static int ssl_reader(struct AioFile *af, char *buf, int len, int nb) { if (nb || af->timeout == 0 || SSL_pending(af->ssl) || JimReadableTimeout(af->fd, af->timeout) == JIM_OK) { int ret; if (SSL_pending(af->ssl)) { /* If there is pending data to read return it first */ if (len > SSL_pending(af->ssl)) { len = SSL_pending(af->ssl); } } ret = SSL_read(af->ssl, buf, len); if (ret <= 0 && errno != EAGAIN && errno != EINTR) { af->flags |= AIO_EOF; } return ret; } errno = ETIMEDOUT; return -1; } static int ssl_error(const struct AioFile *af) { int ret = SSL_get_error(af->ssl, 0); /* These indicate "normal" conditions */ if (ret == SSL_ERROR_ZERO_RETURN || ret == SSL_ERROR_NONE || ret == SSL_ERROR_WANT_READ) { return JIM_OK; } if (ret == SSL_ERROR_SYSCALL) { return stdio_error(af); } return JIM_ERR; } static const char *ssl_strerror(struct AioFile *af) { int err = ERR_get_error(); if (err) { return ERR_error_string(err, NULL); } else { return stdio_strerror(af); } } static const JimAioFopsType ssl_fops = { ssl_writer, ssl_reader, ssl_error, ssl_strerror, }; #endif /* JIM_BOOTSTRAP */ /** * Sets nonblocking on the channel (if different from current) * and updates the flags in af->flags. */ static void aio_set_nonblocking(AioFile *af, int nb) { #ifdef O_NDELAY int old = !!(af->flags & AIO_NONBLOCK); if (old != nb) { int fmode = fcntl(af->fd, F_GETFL); if (nb) { fmode |= O_NDELAY; af->flags |= AIO_NONBLOCK; } else { fmode &= ~O_NDELAY; af->flags &= ~AIO_NONBLOCK; } (void)fcntl(af->fd, F_SETFL, fmode); } #endif } /** * If the socket is blocking (not nonblocking) and a timeout is set, * put the socket in non-blocking mode. * * Returns the original mode. */ static int aio_start_nonblocking(AioFile *af) { int old = !!(af->flags & AIO_NONBLOCK); if (af->timeout) { aio_set_nonblocking(af, 1); } return old; } static int JimAioSubCmdProc(Jim_Interp *interp, int argc, Jim_Obj *const *argv); static void JimAioSetTaint(AioFile *af, int taintsource, int taintsink); static AioFile *JimMakeChannel(Jim_Interp *interp, int fd, Jim_Obj *filename, const char *hdlfmt, int family, int flags); #if defined(HAVE_SOCKETS) && !defined(JIM_BOOTSTRAP) #ifndef HAVE_GETADDRINFO /* * Poor man's getaddrinfo(). * hints->ai_family must be set and must be PF_INET or PF_INET6 * Only returns the first matching result. * servname must be numeric. */ struct addrinfo { int ai_family; socklen_t ai_addrlen; struct sockaddr *ai_addr; /* simply points to ai_storage */ union sockaddr_any ai_storage; }; static int getaddrinfo(const char *hostname, const char *servname, const struct addrinfo *hints, struct addrinfo **res) { struct hostent *he; char *end; unsigned long port = strtoul(servname, &end, 10); if (port == 0 || port > 65536 || *end) { errno = EINVAL; return -1; } if ((he = gethostbyname(hostname)) != NULL) { int i; for (i = 0; he->h_addr_list[i]; i++) { if (he->h_addrtype == hints->ai_family) { struct addrinfo *ai = malloc(sizeof(*ai)); memset(ai, 0, sizeof(*ai)); ai->ai_family = he->h_addrtype; ai->ai_addr = &ai->ai_storage.sa; if (ai->ai_family == PF_INET) { ai->ai_addrlen = sizeof(ai->ai_storage.sin); ai->ai_storage.sin.sin_family = he->h_addrtype; assert(sizeof(ai->ai_storage.sin.sin_addr) == he->h_length); memcpy(&ai->ai_storage.sin.sin_addr, he->h_addr_list[i], he->h_length); ai->ai_storage.sin.sin_port = htons(port); } #if IPV6 else { ai->ai_addrlen = sizeof(ai->ai_storage.sin6); ai->ai_storage.sin6.sin6_family = he->h_addrtype; assert(sizeof(ai->ai_storage.sin6.sin6_addr) == he->h_length); memcpy(&ai->ai_storage.sin6.sin6_addr, he->h_addr_list[i], he->h_length); ai->ai_storage.sin6.sin6_port = htons(port); } #endif *res = ai; return 0; } } } return ENOENT; } static void freeaddrinfo(struct addrinfo *ai) { free(ai); } #endif static int JimParseIPv6Address(Jim_Interp *interp, int socktype, const char *hostport, union sockaddr_any *sa, socklen_t *salen) { #if IPV6 /* * An IPv6 addr/port looks like: * [::1] * [::1]:2000 * [fe80::223:6cff:fe95:bdc0%en1]:2000 * [::]:2000 * 2000 * * Note that the "any" address is ::, which is the same as when no address is specified. */ char *sthost = NULL; const char *stport; int ret = JIM_OK; struct addrinfo req; struct addrinfo *ai; stport = strrchr(hostport, ':'); if (!stport) { /* No : so, the whole thing is the port */ stport = hostport; hostport = "::"; sthost = Jim_StrDup(hostport); } else { stport++; } if (*hostport == '[') { /* This is a numeric ipv6 address */ char *pt = strchr(++hostport, ']'); if (pt) { sthost = Jim_StrDupLen(hostport, pt - hostport); } } if (!sthost) { sthost = Jim_StrDupLen(hostport, stport - hostport - 1); } memset(&req, '\0', sizeof(req)); req.ai_family = PF_INET6; req.ai_socktype = socktype; if (getaddrinfo(sthost, stport, &req, &ai)) { Jim_SetResultFormatted(interp, "Not a valid address: %s:%s", sthost, stport); ret = JIM_ERR; } else { memcpy(&sa->sin6, ai->ai_addr, ai->ai_addrlen); *salen = ai->ai_addrlen; freeaddrinfo(ai); } Jim_Free(sthost); return ret; #else Jim_SetResultString(interp, "ipv6 not supported", -1); return JIM_ERR; #endif } static int JimParseIpAddress(Jim_Interp *interp, int socktype, const char *hostport, union sockaddr_any *sa, socklen_t *salen) { /* An IPv4 addr/port looks like: * 192.168.1.5 * 192.168.1.5:2000 * 2000 * * If the address is missing, INADDR_ANY is used. * If the port is missing, 0 is used (only useful for server sockets). */ char *sthost = NULL; const char *stport; int ret = JIM_OK; struct addrinfo req; struct addrinfo *ai; stport = strrchr(hostport, ':'); if (!stport) { /* No : so, the whole thing is the port */ stport = hostport; sthost = Jim_StrDup("0.0.0.0"); } else { sthost = Jim_StrDupLen(hostport, stport - hostport); stport++; } memset(&req, '\0', sizeof(req)); req.ai_family = PF_INET; req.ai_socktype = socktype; if (getaddrinfo(sthost, stport, &req, &ai)) { ret = JIM_ERR; } else { memcpy(&sa->sin, ai->ai_addr, ai->ai_addrlen); *salen = ai->ai_addrlen; freeaddrinfo(ai); } Jim_Free(sthost); if (ret != JIM_OK) { Jim_SetResultFormatted(interp, "Not a valid address: %s", hostport); } return ret; } #if UNIX_SOCKETS static int JimParseDomainAddress(Jim_Interp *interp, const char *path, union sockaddr_any *sa, socklen_t *salen) { sa->sun.sun_family = PF_UNIX; snprintf(sa->sun.sun_path, sizeof(sa->sun.sun_path), "%s", path); *salen = strlen(sa->sun.sun_path) + 1 + sizeof(sa->sun.sun_family); return JIM_OK; } #endif static int JimParseSocketAddress(Jim_Interp *interp, int family, int socktype, const char *addr, union sockaddr_any *sa, socklen_t *salen) { switch (family) { #if UNIX_SOCKETS case PF_UNIX: return JimParseDomainAddress(interp, addr, sa, salen); #endif case PF_INET6: return JimParseIPv6Address(interp, socktype, addr, sa, salen); case PF_INET: return JimParseIpAddress(interp, socktype, addr, sa, salen); } return JIM_ERR; } /** * Format that address in 'sa' as a string and return it as a zero-refcount object. * */ static Jim_Obj *JimFormatSocketAddress(Jim_Interp *interp, const union sockaddr_any *sa, socklen_t salen) { /* INET6_ADDRSTRLEN is 46. Add some for [] and port */ char addrbuf[60]; const char *addr = addrbuf; int addrlen = -1; switch (sa->sa.sa_family) { #if UNIX_SOCKETS case PF_UNIX: addr = sa->sun.sun_path; addrlen = salen - 1 - sizeof(sa->sun.sun_family); if (addrlen < 0) { addrlen = 0; } break; #endif #if IPV6 case PF_INET6: addrbuf[0] = '['; /* Allow 9 for []:65535\0 */ inet_ntop(sa->sa.sa_family, &sa->sin6.sin6_addr, addrbuf + 1, sizeof(addrbuf) - 9); snprintf(addrbuf + strlen(addrbuf), 8, "]:%d", ntohs(sa->sin6.sin6_port)); break; #endif case PF_INET: /* Allow 7 for :65535\0 */ inet_ntop(sa->sa.sa_family, &sa->sin.sin_addr, addrbuf, sizeof(addrbuf) - 7); snprintf(addrbuf + strlen(addrbuf), 7, ":%d", ntohs(sa->sin.sin_port)); break; default: /* Otherwise just an empty address */ addr = ""; break; } return Jim_NewStringObj(interp, addr, addrlen); } static int JimSetVariableSocketAddress(Jim_Interp *interp, Jim_Obj *varObjPtr, const union sockaddr_any *sa, socklen_t salen) { int ret; Jim_Obj *objPtr = JimFormatSocketAddress(interp, sa, salen); ret = Jim_SetVariable(interp, varObjPtr, objPtr); return ret; } static Jim_Obj *aio_sockname(Jim_Interp *interp, int fd) { union sockaddr_any sa; socklen_t salen = sizeof(sa); if (getsockname(fd, &sa.sa, &salen) < 0) { return NULL; } return JimFormatSocketAddress(interp, &sa, salen); } static Jim_Obj *aio_peername(Jim_Interp *interp, int fd) { union sockaddr_any sa; socklen_t salen = sizeof(sa); if (getpeername(fd, &sa.sa, &salen) < 0) { return NULL; } return JimFormatSocketAddress(interp, &sa, salen); } #endif /* JIM_BOOTSTRAP */ static const char *JimAioErrorString(AioFile *af) { if (af && af->fops) return af->fops->strerror(af); return strerror(errno); } static void JimAioSetError(Jim_Interp *interp, Jim_Obj *name) { AioFile *af = Jim_CmdPrivData(interp); if (name) { Jim_SetResultFormatted(interp, "%#s: %s", name, JimAioErrorString(af)); } else { Jim_SetResultString(interp, JimAioErrorString(af), -1); } } static int aio_eof(AioFile *af) { return af->flags & AIO_EOF; } static int JimCheckStreamError(Jim_Interp *interp, AioFile *af) { int ret = 0; if (!aio_eof(af)) { ret = af->fops->error(af); if (ret) { JimAioSetError(interp, af->filename); } } return ret; } /** * Removes n bytes from the beginning of objPtr. * * objPtr must have a string rep. * n must be <= bytelen(objPtr) */ static void aio_consume(Jim_Obj *objPtr, int n) { assert(objPtr->bytes); assert(n <= objPtr->length); /* Move the data down, plus 1 for the null terminator */ memmove(objPtr->bytes, objPtr->bytes + n, objPtr->length - n + 1); objPtr->length -= n; /* Note that we don't have to worry about utf8 len because the read and write * buffers are used as pure byte buffers */ } /* forward declaration */ static int aio_flush(Jim_Interp *interp, AioFile *af); #ifdef jim_ext_eventloop /** * Called when the channel is writable. * Write what we can and return -1 when the write buffer is empty to remove the handler. */ static int aio_autoflush(Jim_Interp *interp, void *clientData, int mask) { AioFile *af = clientData; aio_flush(interp, af); if (Jim_Length(af->writebuf) == 0) { /* Done, so remove the handler */ return -1; } return 0; } #endif /** * Flushes af->writebuf to the channel and removes that data * from af->writebuf. * * If not all data could be written, starts a writable callback to continue * flushing. This will only run when the eventloop does. * * On error or if not all data could be written, consumes only * what was written and returns an error. */ static int aio_flush(Jim_Interp *interp, AioFile *af) { int len; const char *pt = Jim_GetString(af->writebuf, &len); if (len) { int ret = af->fops->writer(af, pt, len); if (ret > 0) { /* Consume what we wrote */ aio_consume(af->writebuf, ret); } if (ret < 0) { return JimCheckStreamError(interp, af); } /* If not all data could be written, but with no error, and there is no writable * handler, we can try to auto-flush */ if (Jim_Length(af->writebuf)) { #ifdef jim_ext_eventloop void *handler = Jim_FindFileHandler(interp, af->fd, JIM_EVENT_WRITABLE); if (handler == NULL) { Jim_CreateFileHandler(interp, af->fd, JIM_EVENT_WRITABLE, aio_autoflush, af, NULL); return JIM_OK; } else if (handler == af) { /* Nothing to do, handler already installed */ return JIM_OK; } #endif /* There is an existing foreign handler or no event loop so return an error */ Jim_SetResultString(interp, "send buffer is full", -1); return JIM_ERR; } } return JIM_OK; } /** * Read until 'len' bytes are available in readbuf. * * If flags contains AIO_NONBLOCK, indicates a nonblocking read. * If flags contains AIO_ONEREAD, return after a single read. * (In this case JIM_ERR is also returned on timeout) * * If nonblocking or timeout, may return early. * 'len' may be -1 to read until eof (or until no more data if nonblocking) * * Returns JIM_OK if data was read or JIM_ERR on error. */ static int aio_read_len(Jim_Interp *interp, AioFile *af, unsigned flags, int neededLen) { if (!af->readbuf) { af->readbuf = Jim_NewStringObj(interp, NULL, 0); } if (neededLen >= 0) { neededLen -= Jim_Length(af->readbuf); if (neededLen <= 0) { return JIM_OK; } } while (neededLen && !aio_eof(af)) { int retval; int readlen; if (neededLen == -1) { readlen = af->rbuf_len; } else { readlen = (neededLen > af->rbuf_len ? af->rbuf_len : neededLen); } /* Allocate buffer if not already allocated */ if (!af->rbuf) { af->rbuf = Jim_Alloc(af->rbuf_len); } retval = af->fops->reader(af, af->rbuf, readlen, flags & AIO_NONBLOCK); if (retval > 0) { if (retval) { Jim_AppendString(interp, af->readbuf, af->rbuf, retval); } if (neededLen != -1) { neededLen -= retval; } if (flags & AIO_ONEREAD) { return JIM_OK; } continue; } if ((flags & AIO_ONEREAD) || JimCheckStreamError(interp, af)) { return JIM_ERR; } break; } return JIM_OK; } /** * Consumes neededLen bytes from readbuf and those * bytes as a string object. * * If neededLen is -1, or >= len(readbuf), returns the entire readbuf. * * Returns NULL if no data available. */ static Jim_Obj *aio_read_consume(Jim_Interp *interp, AioFile *af, int neededLen) { Jim_Obj *objPtr = NULL; if (neededLen < 0 || af->readbuf == NULL || Jim_Length(af->readbuf) <= neededLen) { objPtr = af->readbuf; af->readbuf = NULL; } else if (af->readbuf) { /* Need to consume part of the readbuf */ int len; const char *pt = Jim_GetString(af->readbuf, &len); objPtr = Jim_NewStringObj(interp, pt, neededLen); aio_consume(af->readbuf, neededLen); } return objPtr; } static void JimAioDelProc(Jim_Interp *interp, void *privData) { AioFile *af = privData; JIM_NOTUSED(interp); /* Try to flush and write data before close */ aio_flush(interp, af); Jim_DecrRefCount(interp, af->writebuf); #if UNIX_SOCKETS if (af->addr_family == PF_UNIX && (af->flags & AIO_NODELETE) == 0) { /* If this is bound, delete the socket file now */ Jim_Obj *filenameObj = aio_sockname(interp, af->fd); if (filenameObj) { if (Jim_Length(filenameObj)) { remove(Jim_String(filenameObj)); } Jim_FreeNewObj(interp, filenameObj); } } #endif Jim_DecrRefCount(interp, af->filename); #ifdef jim_ext_eventloop /* remove all existing EventHandlers */ Jim_DeleteFileHandler(interp, af->fd, JIM_EVENT_READABLE | JIM_EVENT_WRITABLE | JIM_EVENT_EXCEPTION); #endif #if defined(JIM_SSL) if (af->ssl != NULL) { SSL_free(af->ssl); } #endif if (!(af->flags & AIO_KEEPOPEN)) { close(af->fd); } if (af->readbuf) { Jim_FreeNewObj(interp, af->readbuf); } Jim_Free(af->rbuf); Jim_Free(af); } static int aio_cmd_read(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); int nonewline = 0; jim_wide neededLen = -1; /* -1 is "read as much as possible" */ static const char * const options[] = { "-pending", "-nonewline", NULL }; enum { OPT_PENDING, OPT_NONEWLINE }; int option; int nb; Jim_Obj *objPtr; if (argc) { if (*Jim_String(argv[0]) == '-') { if (Jim_GetEnum(interp, argv[0], options, &option, NULL, JIM_ERRMSG) != JIM_OK) { return JIM_ERR; } switch (option) { case OPT_PENDING: /* accepted for compatibility, but ignored */ break; case OPT_NONEWLINE: nonewline++; break; } } else { if (Jim_GetWide(interp, argv[0], &neededLen) != JIM_OK) return JIM_ERR; if (neededLen < 0) { Jim_SetResultString(interp, "invalid parameter: negative len", -1); return JIM_ERR; } } argc--; argv++; } if (argc) { return JIM_USAGE; } /* reads are nonblocking if a timeout is given */ nb = aio_start_nonblocking(af); if (aio_read_len(interp, af, nb ? AIO_NONBLOCK : 0, neededLen) != JIM_OK) { aio_set_nonblocking(af, nb); return JIM_ERR; } objPtr = aio_read_consume(interp, af, neededLen); Jim_TaintObj(objPtr, af->taintsource); aio_set_nonblocking(af, nb); if (objPtr) { if (nonewline) { int len; const char *s = Jim_GetString(objPtr, &len); if (len > 0 && s[len - 1] == '\n') { objPtr->length--; objPtr->bytes[objPtr->length] = '\0'; } } Jim_SetResult(interp, objPtr); } else { Jim_SetEmptyResult(interp); } return JIM_OK; } /* Use 'name getfd' to get the file descriptor associated with channel 'name' * Currently this is only used by 'info channels'. Is there a better way? */ int Jim_AioFilehandle(Jim_Interp *interp, Jim_Obj *command) { Jim_Cmd *cmdPtr = Jim_GetCommand(interp, command, JIM_ERRMSG); /* XXX: There ought to be a supported API for this */ if (cmdPtr && !(cmdPtr->flags & JIM_CMD_ISPROC) && cmdPtr->u.native.cmdProc == JimAioSubCmdProc) { return ((AioFile *) cmdPtr->u.native.privData)->fd; } Jim_SetResultFormatted(interp, "Not a filehandle: \"%#s\"", command); return -1; } static int aio_cmd_getfd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); /* XXX Should we return this error? */ aio_flush(interp, af); Jim_SetResultInt(interp, af->fd); return JIM_OK; } static int aio_cmd_gettaint(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); static const char * const options[] = { "-source", "-sink", NULL }; enum { OPT_SOURCE, OPT_SINK }; int option; if (Jim_GetEnum(interp, argv[0], options, &option, NULL, JIM_ERRMSG) != JIM_OK) { return JIM_ERR; } switch (option) { case OPT_SOURCE: Jim_SetResultInt(interp, af->taintsource); break; case OPT_SINK: Jim_SetResultInt(interp, af->taintsink); break; } return JIM_OK; } static int aio_cmd_copy(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); jim_wide count = 0; jim_wide maxlen = JIM_WIDE_MAX; int ok = 1; Jim_Obj *objv[4]; long taintsink; if (argc == 2) { if (Jim_GetWide(interp, argv[1], &maxlen) != JIM_OK) { return JIM_ERR; } } objv[0] = argv[0]; objv[1] = Jim_NewStringObj(interp, "gettaint", -1); objv[2] = Jim_NewStringObj(interp, "-sink", -1); if (Jim_EvalObjVector(interp, 3, objv) != JIM_OK || Jim_GetLong(interp, Jim_GetResult(interp), &taintsink) != JIM_OK) { Jim_SetResultFormatted(interp, "Not a filehandle: \"%#s\"", argv[0]); return JIM_ERR; } if (af->taintsource & taintsink) { Jim_SetResultString(interp, "copying tainted source", -1); return JIM_ERR; } /* Need to flush any write data first. This could fail because of send buf full, * but more likely because the target isn't a filehandle. * Should use use getfd to test for that case instead? */ objv[0] = argv[0]; objv[1] = Jim_NewStringObj(interp, "flush", -1); if (Jim_EvalObjVector(interp, 2, objv) != JIM_OK) { Jim_SetResultFormatted(interp, "Not a filehandle: \"%#s\"", argv[0]); return JIM_ERR; } /* Now prep for puts -nonewline. It's a shame we don't simply have 'write' */ objv[0] = argv[0]; objv[1] = Jim_NewStringObj(interp, "puts", -1); objv[2] = Jim_NewStringObj(interp, "-nonewline", -1); Jim_IncrRefCount(objv[1]); Jim_IncrRefCount(objv[2]); while (count < maxlen) { jim_wide len = maxlen - count; if (len > af->rbuf_len) { len = af->rbuf_len; } if (aio_read_len(interp, af, 0, len) != JIM_OK) { ok = 0; break; } objv[3] = aio_read_consume(interp, af, len); count += Jim_Length(objv[3]); if (Jim_EvalObjVector(interp, 4, objv) != JIM_OK) { ok = 0; break; } if (aio_eof(af)) { break; } if (count >= 16384 && af->rbuf_len < 65536) { /* Heuristic check - for large copy speed-up */ af->rbuf_len = 65536; af->rbuf = Jim_Realloc(af->rbuf, af->rbuf_len); } } Jim_DecrRefCount(interp, objv[1]); Jim_DecrRefCount(interp, objv[2]); if (!ok) { return JIM_ERR; } Jim_SetResultInt(interp, count); return JIM_OK; } /* Like strstr() but optimised in the case the the needle is of length 1 */ static const char *jim_strstr(const char *haystack, int haylen, const char *needle, int needlen) { if (needlen == 1) { return (const char *)memchr(haystack, needle[0], haylen); } return strstr(haystack, needle); } static int aio_cmd_gets(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); Jim_Obj *objPtr = NULL; int len; int nb; unsigned flags = AIO_ONEREAD; const char *nl = NULL; int offset = 0; long keepnl = 0; const char *nlstr = "\n"; int nlstrlen = 1; while (argc >= 2) { enum {OPT_EOL, OPT_KEEP}; static const char * const options[] = { "-eol", "-keep", NULL }; int opt; /* Expect an option here */ if (*Jim_String(argv[0]) != '-') { return JIM_USAGE; } if (Jim_GetEnum(interp, argv[0], options, &opt, NULL, JIM_ERRMSG | JIM_ENUM_ABBREV) != JIM_OK) { return JIM_ERR; } switch (opt) { case OPT_EOL: nlstr = Jim_GetString(argv[1], &nlstrlen); break; case OPT_KEEP: if (Jim_GetLong(interp, argv[1], &keepnl) != JIM_OK) { return JIM_ERR; } break; } argc -= 2; argv += 2; } errno = 0; /* reads are non-blocking if a timeout has been given */ nb = aio_start_nonblocking(af); if (nb) { flags |= AIO_NONBLOCK; } while (!aio_eof(af)) { if (af->readbuf) { const char *pt = Jim_GetString(af->readbuf, &len); nl = jim_strstr(pt + offset, len - offset, nlstr, nlstrlen); if (nl) { /* got a line */ objPtr = Jim_NewStringObj(interp, pt, nl - pt + (keepnl ? nlstrlen : 0)); /* And consume it plus the eol */ aio_consume(af->readbuf, nl - pt + nlstrlen); break; } offset = len; } /* Not got a line yet, so read more */ if (aio_read_len(interp, af, flags, -1) != JIM_OK) { break; } } aio_set_nonblocking(af, nb); if (!nl && aio_eof(af) && af->readbuf) { /* Just take what we have as the line */ objPtr = af->readbuf; af->readbuf = NULL; } else if (!objPtr) { objPtr = Jim_NewStringObj(interp, NULL, 0); } Jim_TaintObj(objPtr, af->taintsource); if (argc) { if (Jim_SetVariable(interp, argv[0], objPtr) != JIM_OK) { return JIM_ERR; } len = Jim_Length(objPtr); if (!nl && len == 0) { /* On EOF or partial line with empty result, returns -1 if varName was specified */ len = -1; } Jim_SetResultInt(interp, len); } else { Jim_SetResult(interp, objPtr); } return JIM_OK; } static int aio_cmd_puts(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); int wlen; const char *wdata; Jim_Obj *strObj; int wnow = 0; int nl = 1; if (Jim_CheckTaint(interp, af->taintsink)) { Jim_SetResultString(interp, "puts: tainted data", -1); return JIM_ERR; } if (argc == 2) { if (!Jim_CompareStringImmediate(interp, argv[0], "-nonewline")) { return JIM_USAGE; } strObj = argv[1]; nl = 0; } else { strObj = argv[0]; } /* Keep it simple and always go via the writebuf instead of trying to optimise * the case that we can write immediately */ #ifdef JIM_MAINTAINER if (Jim_IsShared(af->writebuf)) { /* This should generally never happen since this object isn't accessible, * but it is possible with 'debug objects' */ Jim_DecrRefCount(interp, af->writebuf); af->writebuf = Jim_DuplicateObj(interp, af->writebuf); Jim_IncrRefCount(af->writebuf); } #endif Jim_AppendObj(interp, af->writebuf, strObj); if (nl) { Jim_AppendString(interp, af->writebuf, "\n", 1); } /* Now do we need to flush? */ wdata = Jim_GetString(af->writebuf, &wlen); switch (af->wbuft) { case WBUF_OPT_NONE: /* Just write immediately */ wnow = 1; break; case WBUF_OPT_LINE: /* Write everything if it contains a newline, or -nonewline wasn't given */ if (nl || memchr(wdata, '\n', wlen) != NULL) { wnow = 1; } break; case WBUF_OPT_FULL: if (wlen >= af->wbuf_limit) { wnow = 1; } break; } if (wnow) { return aio_flush(interp, af); } return JIM_OK; } static int aio_cmd_isatty(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { #ifdef HAVE_ISATTY AioFile *af = Jim_CmdPrivData(interp); Jim_SetResultInt(interp, isatty(af->fd)); #else Jim_SetResultInt(interp, 0); #endif return JIM_OK; } #if defined(HAVE_SOCKETS) && !defined(JIM_BOOTSTRAP) static int aio_cmd_recvfrom(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); Jim_Obj *objPtr; char *buf; union sockaddr_any sa; long len; socklen_t salen = sizeof(sa); int rlen; if (Jim_GetLong(interp, argv[0], &len) != JIM_OK) { return JIM_ERR; } buf = Jim_Alloc(len + 1); rlen = recvfrom(af->fd, buf, len, 0, &sa.sa, &salen); if (rlen < 0) { Jim_Free(buf); JimAioSetError(interp, NULL); return JIM_ERR; } buf[rlen] = 0; objPtr = Jim_NewStringObjNoAlloc(interp, buf, rlen); Jim_TaintObj(objPtr, af->taintsource); Jim_SetResult(interp, objPtr); if (argc > 1) { return JimSetVariableSocketAddress(interp, argv[1], &sa, salen); } return JIM_OK; } static int aio_cmd_sendto(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); int wlen; int len; const char *wdata; union sockaddr_any sa; const char *addr = Jim_String(argv[1]); socklen_t salen; if (Jim_CheckTaint(interp, af->taintsink)) { Jim_SetResultString(interp, "sendto: tainted data", -1); return JIM_ERR; } if (JimParseSocketAddress(interp, af->addr_family, SOCK_DGRAM, addr, &sa, &salen) != JIM_OK) { return JIM_ERR; } wdata = Jim_GetString(argv[0], &wlen); /* Note that we don't validate the socket type. Rely on sendto() failing if appropriate */ len = sendto(af->fd, wdata, wlen, 0, &sa.sa, salen); if (len < 0) { JimAioSetError(interp, NULL); return JIM_ERR; } Jim_SetResultInt(interp, len); return JIM_OK; } /** * Returns the peer name of 'fd' or NULL on error. */ static int aio_cmd_accept(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *serv_af = Jim_CmdPrivData(interp); AioFile *af; int sock; union sockaddr_any sa; socklen_t salen = sizeof(sa); Jim_Obj *filenameObj; int n = 0; int flags = AIO_NODELETE; sock = accept(serv_af->fd, &sa.sa, &salen); if (sock < 0) { JimAioSetError(interp, NULL); return JIM_ERR; } if (argc > 0 && Jim_CompareStringImmediate(interp, argv[0], "-noclose")) { flags = AIO_KEEPOPEN; n++; } if (argc > n) { if (JimSetVariableSocketAddress(interp, argv[n], &sa, salen) != JIM_OK) { close(sock); return JIM_ERR; } } /* This probably can't fail at this point */ filenameObj = JimFormatSocketAddress(interp, &sa, salen); if (!filenameObj) { filenameObj = Jim_NewStringObj(interp, "accept", -1); } /* Create the file command */ af = JimMakeChannel(interp, sock, filenameObj, "aio.sockstream%ld", serv_af->addr_family, flags); if (af) { JimAioSetTaint(af, serv_af->taintsource, serv_af->taintsink); return JIM_OK; } return JIM_ERR; } static int aio_cmd_sockname(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); Jim_Obj *objPtr = aio_sockname(interp, af->fd); if (objPtr == NULL) { JimAioSetError(interp, NULL); return JIM_ERR; } Jim_SetResult(interp, objPtr); return JIM_OK; } static int aio_cmd_peername(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); Jim_Obj *objPtr = aio_peername(interp, af->fd); if (objPtr == NULL) { JimAioSetError(interp, NULL); return JIM_ERR; } Jim_SetResult(interp, objPtr); return JIM_OK; } static int aio_cmd_listen(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); long backlog; if (Jim_GetLong(interp, argv[0], &backlog) != JIM_OK) { return JIM_ERR; } if (listen(af->fd, backlog)) { JimAioSetError(interp, NULL); return JIM_ERR; } return JIM_OK; } #endif /* JIM_BOOTSTRAP */ static int aio_cmd_flush(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); return aio_flush(interp, af); } static int aio_cmd_eof(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); Jim_SetResultInt(interp, !!aio_eof(af)); return JIM_OK; } static int aio_cmd_close(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); if (argc == 3) { int option = -1; #if defined(HAVE_SOCKETS) static const char * const options[] = { "r", "w", "-nodelete", NULL }; enum { OPT_R, OPT_W, OPT_NODELETE }; if (Jim_GetEnum(interp, argv[2], options, &option, NULL, JIM_ERRMSG) != JIM_OK) { return JIM_ERR; } #endif switch (option) { #if defined(HAVE_SHUTDOWN) case OPT_R: case OPT_W: if (shutdown(af->fd, option == OPT_R ? SHUT_RD : SHUT_WR) == 0) { return JIM_OK; } JimAioSetError(interp, NULL); return JIM_ERR; #endif #if UNIX_SOCKETS case OPT_NODELETE: if (af->addr_family == PF_UNIX) { af->flags |= AIO_NODELETE; break; } /* fall through */ #endif default: Jim_SetResultString(interp, "not supported", -1); return JIM_ERR; } } /* Explicit close ignores AIO_KEEPOPEN */ af->flags &= ~AIO_KEEPOPEN; return Jim_DeleteCommand(interp, argv[0]); } static int aio_cmd_seek(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); int orig = SEEK_SET; jim_wide offset; if (argc == 2) { if (Jim_CompareStringImmediate(interp, argv[1], "start")) orig = SEEK_SET; else if (Jim_CompareStringImmediate(interp, argv[1], "current")) orig = SEEK_CUR; else if (Jim_CompareStringImmediate(interp, argv[1], "end")) orig = SEEK_END; else { return JIM_USAGE; } } if (Jim_GetWide(interp, argv[0], &offset) != JIM_OK) { return JIM_ERR; } if (orig != SEEK_CUR || offset != 0) { /* Try to write flush if seeking. XXX What about on error? */ aio_flush(interp, af); } if (Jim_Lseek(af->fd, offset, orig) == -1) { JimAioSetError(interp, af->filename); return JIM_ERR; } if (af->readbuf) { Jim_FreeNewObj(interp, af->readbuf); af->readbuf = NULL; } af->flags &= ~AIO_EOF; return JIM_OK; } static int aio_cmd_tell(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); Jim_SetResultInt(interp, Jim_Lseek(af->fd, 0, SEEK_CUR)); return JIM_OK; } static int aio_cmd_filename(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); Jim_SetResult(interp, af->filename); return JIM_OK; } #ifdef JIM_TAINT static int aio_cmd_taint(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); static const char * const types[] = { "sink", "source", NULL }; enum { TAINT_TYPE_SINK, TAINT_TYPE_SOURCE, }; int type; long taint; if (Jim_GetEnum(interp, argv[0], types, &type, NULL, JIM_ERRMSG) != JIM_OK) return JIM_ERR; if (argc == 1) { Jim_SetResultInt(interp, type == TAINT_TYPE_SINK ? af->taintsink : af->taintsource); return JIM_OK; } else if (Jim_GetLong(interp, argv[1], &taint) == JIM_OK) { if (type == TAINT_TYPE_SINK) { af->taintsink = taint; } else { af->taintsource = taint; } return JIM_OK; } else { return JIM_ERR; } } #endif #ifdef O_NDELAY static int aio_cmd_ndelay(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); if (argc) { long nb; if (Jim_GetLong(interp, argv[0], &nb) != JIM_OK) { return JIM_ERR; } aio_set_nonblocking(af, nb); } Jim_SetResultInt(interp, (af->flags & AIO_NONBLOCK) ? 1 : 0); return JIM_OK; } #endif #if defined(HAVE_SOCKETS) && !defined(JIM_BOOTSTRAP) #define SOCKOPT_BOOL 0 #define SOCKOPT_INT 1 #define SOCKOPT_TIMEVAL 2 /* not currently supported */ static const struct sockopt_def { const char *name; int level; int opt; int type; /* SOCKOPT_xxx */ } sockopts[] = { #ifdef SOL_SOCKET #ifdef SO_BROADCAST { "broadcast", SOL_SOCKET, SO_BROADCAST }, #endif #ifdef SO_DEBUG { "debug", SOL_SOCKET, SO_DEBUG }, #endif #ifdef SO_KEEPALIVE { "keepalive", SOL_SOCKET, SO_KEEPALIVE }, #endif #ifdef SO_NOSIGPIPE { "nosigpipe", SOL_SOCKET, SO_NOSIGPIPE }, #endif #ifdef SO_OOBINLINE { "oobinline", SOL_SOCKET, SO_OOBINLINE }, #endif #ifdef SO_SNDBUF { "sndbuf", SOL_SOCKET, SO_SNDBUF, SOCKOPT_INT }, #endif #ifdef SO_RCVBUF { "rcvbuf", SOL_SOCKET, SO_RCVBUF, SOCKOPT_INT }, #endif #if 0 && defined(SO_SNDTIMEO) { "sndtimeo", SOL_SOCKET, SO_SNDTIMEO, SOCKOPT_TIMEVAL }, #endif #if 0 && defined(SO_RCVTIMEO) { "rcvtimeo", SOL_SOCKET, SO_RCVTIMEO, SOCKOPT_TIMEVAL }, #endif #endif #ifdef IPPROTO_TCP #ifdef TCP_NODELAY { "tcp_nodelay", IPPROTO_TCP, TCP_NODELAY }, #endif #endif }; static int aio_cmd_sockopt(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); size_t i; if (argc == 0) { Jim_Obj *dictObjPtr = Jim_NewListObj(interp, NULL, 0); for (i = 0; i < sizeof(sockopts) / sizeof(*sockopts); i++) { int value = 0; socklen_t len = sizeof(value); if (getsockopt(af->fd, sockopts[i].level, sockopts[i].opt, (void *)&value, &len) == 0) { if (sockopts[i].type == SOCKOPT_BOOL) { value = !!value; } Jim_ListAppendElement(interp, dictObjPtr, Jim_NewStringObj(interp, sockopts[i].name, -1)); Jim_ListAppendElement(interp, dictObjPtr, Jim_NewIntObj(interp, value)); } } Jim_SetResult(interp, dictObjPtr); return JIM_OK; } if (argc == 1) { return JIM_USAGE; } /* Set an option */ for (i = 0; i < sizeof(sockopts) / sizeof(*sockopts); i++) { if (strcmp(Jim_String(argv[0]), sockopts[i].name) == 0) { int on; if (sockopts[i].type == SOCKOPT_BOOL) { if (Jim_GetBoolean(interp, argv[1], &on) != JIM_OK) { return JIM_ERR; } } else { long longval; if (Jim_GetLong(interp, argv[1], &longval) != JIM_OK) { return JIM_ERR; } on = longval; } if (setsockopt(af->fd, sockopts[i].level, sockopts[i].opt, (void *)&on, sizeof(on)) < 0) { Jim_SetResultFormatted(interp, "Failed to set %#s: %s", argv[0], strerror(errno)); return JIM_ERR; } return JIM_OK; } } /* Not found */ Jim_SetResultFormatted(interp, "Unknown sockopt %#s", argv[0]); return JIM_ERR; } #endif /* JIM_BOOTSTRAP */ #ifdef HAVE_FSYNC static int aio_cmd_sync(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); if (aio_flush(interp, af) != JIM_OK) { return JIM_ERR; } fsync(af->fd); return JIM_OK; } #endif static int aio_cmd_buffering(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); Jim_Obj *resultObj; static const char * const options[] = { "none", "line", "full", NULL }; if (argc) { if (Jim_GetEnum(interp, argv[0], options, &af->wbuft, NULL, JIM_ERRMSG) != JIM_OK) { return JIM_ERR; } if (af->wbuft == WBUF_OPT_FULL && argc == 2) { long l; if (Jim_GetLong(interp, argv[1], &l) != JIM_OK || l <= 0) { return JIM_ERR; } af->wbuf_limit = l; } if (af->wbuft == WBUF_OPT_NONE) { if (aio_flush(interp, af) != JIM_OK) { return JIM_ERR; } } /* don't bother flushing when switching from full to line */ } resultObj = Jim_NewListObj(interp, NULL, 0); Jim_ListAppendElement(interp, resultObj, Jim_NewStringObj(interp, options[af->wbuft], -1)); if (af->wbuft == WBUF_OPT_FULL) { Jim_ListAppendElement(interp, resultObj, Jim_NewIntObj(interp, af->wbuf_limit)); } Jim_SetResult(interp, resultObj); return JIM_OK; } static int aio_cmd_translation(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { enum {OPT_BINARY, OPT_TEXT}; static const char * const options[] = { "binary", "text", NULL }; int opt; if (Jim_GetEnum(interp, argv[0], options, &opt, NULL, JIM_ERRMSG) != JIM_OK) { return JIM_ERR; } #if defined(Jim_SetMode) else { AioFile *af = Jim_CmdPrivData(interp); Jim_SetMode(af->fd, opt == OPT_BINARY ? O_BINARY : O_TEXT); } #endif return JIM_OK; } static int aio_cmd_readsize(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); if (argc) { long l; if (Jim_GetLong(interp, argv[0], &l) != JIM_OK || l <= 0) { return JIM_ERR; } af->rbuf_len = l; if (af->rbuf) { af->rbuf = Jim_Realloc(af->rbuf, af->rbuf_len); } } Jim_SetResultInt(interp, af->rbuf_len); return JIM_OK; } #ifdef jim_ext_eventloop static int aio_cmd_timeout(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { #ifdef HAVE_SELECT AioFile *af = Jim_CmdPrivData(interp); if (argc == 1) { if (Jim_GetLong(interp, argv[0], &af->timeout) != JIM_OK) { return JIM_ERR; } } Jim_SetResultInt(interp, af->timeout); return JIM_OK; #else Jim_SetResultString(interp, "timeout not supported", -1); return JIM_ERR; #endif } static int aio_eventinfo(Jim_Interp *interp, AioFile * af, unsigned mask, int argc, Jim_Obj * const *argv) { if (argc == 0) { /* Return current script */ Jim_Obj *objPtr = Jim_FindFileHandler(interp, af->fd, mask); if (objPtr) { Jim_SetResult(interp, objPtr); } return JIM_OK; } /* Delete old handler */ Jim_DeleteFileHandler(interp, af->fd, mask); /* Now possibly add the new script(s) */ if (Jim_Length(argv[0])) { Jim_CreateScriptFileHandler(interp, af->fd, mask, argv[0]); } return JIM_OK; } static int aio_cmd_readable(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); return aio_eventinfo(interp, af, JIM_EVENT_READABLE, argc, argv); } static int aio_cmd_writable(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); return aio_eventinfo(interp, af, JIM_EVENT_WRITABLE, argc, argv); } static int aio_cmd_onexception(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); return aio_eventinfo(interp, af, JIM_EVENT_EXCEPTION, argc, argv); } #endif #if defined(jim_ext_file) && defined(Jim_FileStat) static int aio_cmd_stat(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { jim_stat_t sb; AioFile *af = Jim_CmdPrivData(interp); if (Jim_FileStat(af->fd, &sb) == -1) { JimAioSetError(interp, NULL); return JIM_ERR; } return Jim_FileStoreStatData(interp, argc == 0 ? NULL : argv[0], &sb); } #endif #if defined(JIM_SSL) && !defined(JIM_BOOTSTRAP) static int aio_cmd_ssl(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); SSL *ssl; SSL_CTX *ssl_ctx; int server = 0; const char *sni = NULL; if (argc > 2) { static const char * const options[] = { "-server", "-sni", NULL }; enum { OPT_SERVER, OPT_SNI }; int option; if (Jim_GetEnum(interp, argv[2], options, &option, NULL, JIM_ERRMSG) != JIM_OK) { return JIM_ERR; } switch (option) { case OPT_SERVER: if (argc != 4 && argc != 5) { return JIM_ERR; } server = 1; break; case OPT_SNI: if (argc != 4) { return JIM_ERR; } sni = Jim_String(argv[3]); break; } } if (af->ssl) { Jim_SetResultFormatted(interp, "%#s: stream is already ssl", argv[0]); return JIM_ERR; } ssl_ctx = JimAioSslCtx(interp); if (ssl_ctx == NULL) { return JIM_ERR; } ssl = SSL_new(ssl_ctx); if (ssl == NULL) { goto out; } SSL_set_cipher_list(ssl, "ALL"); if (SSL_set_fd(ssl, af->fd) == 0) { goto out; } if (server) { const char *certfile = Jim_String(argv[3]); const char *keyfile = (argc == 4) ? certfile : Jim_String(argv[4]); if (SSL_use_certificate_file(ssl, certfile, SSL_FILETYPE_PEM) != 1) { goto out; } if (SSL_use_PrivateKey_file(ssl, keyfile, SSL_FILETYPE_PEM) != 1) { goto out; } if (SSL_accept(ssl) != 1) { goto out; } } else { if (sni) { /* Set server name indication if requested */ SSL_set_tlsext_host_name(ssl, sni); } if (SSL_connect(ssl) != 1) { goto out; } } af->ssl = ssl; af->fops = &ssl_fops; /* Set the command name as the result */ Jim_SetResult(interp, argv[0]); return JIM_OK; out: if (ssl) { SSL_free(ssl); } Jim_SetResultString(interp, ERR_error_string(ERR_get_error(), NULL), -1); return JIM_ERR; } static int aio_cmd_verify(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); int ret; X509 *cert; if (!af->ssl) { return JIM_OK; } cert = SSL_get_peer_certificate(af->ssl); if (!cert) { if (JimCheckStreamError(interp, af) == JIM_OK) { Jim_SetResultString(interp, "failed to verify the connection authenticity", -1); } return JIM_ERR; } X509_free(cert); ret = SSL_get_verify_result(af->ssl); if (ret == X509_V_OK) { return JIM_OK; } Jim_SetResultFormatted(interp, "ssl certificate verify error: %s", X509_verify_cert_error_string(ret)); return JIM_ERR; } #endif /* JIM_BOOTSTRAP */ #if defined(HAVE_STRUCT_FLOCK) && !defined(JIM_BOOTSTRAP) static int aio_cmd_lock(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); struct flock fl; int lockmode = F_SETLK; if (argc == 1) { if (!Jim_CompareStringImmediate(interp, argv[0], "-wait")) { return JIM_USAGE; } lockmode = F_SETLKW; } fl.l_start = 0; fl.l_len = 0; fl.l_type = F_WRLCK; fl.l_whence = SEEK_SET; switch (fcntl(af->fd, lockmode, &fl)) { case 0: Jim_SetResultInt(interp, 1); break; case -1: if (errno == EACCES || errno == EAGAIN) Jim_SetResultInt(interp, 0); else { Jim_SetResultFormatted(interp, "lock failed: %s", strerror(errno)); return JIM_ERR; } break; default: Jim_SetResultInt(interp, 0); break; } return JIM_OK; } static int aio_cmd_unlock(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); struct flock fl; fl.l_start = 0; fl.l_len = 0; fl.l_type = F_UNLCK; fl.l_whence = SEEK_SET; Jim_SetResultInt(interp, fcntl(af->fd, F_SETLK, &fl) == 0); return JIM_OK; } #endif /* JIM_BOOTSTRAP */ #if defined(HAVE_TERMIOS_H) && !defined(JIM_BOOTSTRAP) static int aio_cmd_tty(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); Jim_Obj *dictObjPtr; int ret; if (argc == 0) { /* get the current settings as a dictionary */ dictObjPtr = Jim_GetTtySettings(interp, af->fd); if (dictObjPtr == NULL) { JimAioSetError(interp, NULL); return JIM_ERR; } Jim_SetResult(interp, dictObjPtr); return JIM_OK; } if (argc > 1) { /* Convert name value arguments to a dictionary */ dictObjPtr = Jim_NewListObj(interp, argv, argc); } else { /* The settings are already given as a list */ dictObjPtr = argv[0]; } Jim_IncrRefCount(dictObjPtr); if (Jim_ListLength(interp, dictObjPtr) % 2) { /* Must be a valid dictionary */ Jim_DecrRefCount(interp, dictObjPtr); return JIM_USAGE; } ret = Jim_SetTtySettings(interp, af->fd, dictObjPtr); if (ret < 0) { JimAioSetError(interp, NULL); ret = JIM_ERR; } Jim_DecrRefCount(interp, dictObjPtr); return ret; } static int aio_cmd_ttycontrol(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); Jim_Obj *dictObjPtr; int ret; if (argc == 0) { /* get the current settings as a dictionary */ dictObjPtr = Jim_GetTtyControlSettings(interp, af->fd); if (dictObjPtr == NULL) { JimAioSetError(interp, NULL); return JIM_ERR; } Jim_SetResult(interp, dictObjPtr); return JIM_OK; } if (argc > 1) { /* Convert name value arguments to a dictionary */ dictObjPtr = Jim_NewListObj(interp, argv, argc); } else { /* The settings are already given as a list */ dictObjPtr = argv[0]; } Jim_IncrRefCount(dictObjPtr); if (Jim_ListLength(interp, dictObjPtr) % 2) { /* Must be a valid dictionary */ Jim_DecrRefCount(interp, dictObjPtr); return -1; } ret = Jim_SetTtyControlSettings(interp, af->fd, dictObjPtr); if (ret < 0) { JimAioSetError(interp, NULL); ret = JIM_ERR; } Jim_DecrRefCount(interp, dictObjPtr); return ret; } #endif /* JIM_BOOTSTRAP */ static const jim_subcmd_type aio_command_table[] = { { "read", "?-nonewline|len?", aio_cmd_read, 0, 2, /* Description: Read and return bytes from the stream. To eof if no len. */ }, { "copyto", "handle ?size?", aio_cmd_copy, 1, 2, /* Description: Copy up to 'size' bytes to the given filehandle, or to eof if no size. */ }, { "getfd", NULL, aio_cmd_getfd, 0, 0, JIM_MODFLAG_HIDDEN, /* Description: Internal command to return the underlying file descriptor. */ }, { "gettaint", "?-source|-sink?", aio_cmd_gettaint, 1, 1, JIM_MODFLAG_HIDDEN, /* Description: Internal command to return the taint of the channel. */ }, { "gets", "?-eol ? ?-keep 0|1? ?var?", aio_cmd_gets, 0, -1, /* Description: Read one line and return it or store it in the var */ }, { "puts", "?-nonewline? str", aio_cmd_puts, 1, 2, /* Description: Write the string, with newline unless -nonewline */ }, { "isatty", NULL, aio_cmd_isatty, 0, 0, /* Description: Is the file descriptor a tty? */ }, #if defined(HAVE_SOCKETS) && !defined(JIM_BOOTSTRAP) { "recvfrom", "len ?addrvar?", aio_cmd_recvfrom, 1, 2, /* Description: Receive up to 'len' bytes on the socket. Sets 'addrvar' with receive address, if set */ }, { "sendto", "str address", aio_cmd_sendto, 2, 2, /* Description: Send 'str' to the given address (dgram only) */ }, { "accept", "?addrvar?", aio_cmd_accept, 0, 1, /* Description: Server socket only: Accept a connection and return stream */ }, { "listen", "backlog", aio_cmd_listen, 1, 1, /* Description: Set the listen backlog for server socket */ }, { "sockopt", "?opt 0|1?", aio_cmd_sockopt, 0, 2, /* Description: Return a dictionary of sockopts, or set the value of a sockopt */ }, { "sockname", NULL, aio_cmd_sockname, 0, 0, /* Description: Returns the local address of the socket, if any */ }, { "peername", NULL, aio_cmd_peername, 0, 0, /* Description: Returns the remote address of the socket, if any */ }, #endif /* JIM_BOOTSTRAP */ { "flush", NULL, aio_cmd_flush, 0, 0, /* Description: Flush the stream */ }, { "eof", NULL, aio_cmd_eof, 0, 0, /* Description: Returns 1 if stream is at eof */ }, { "close", "?r(ead)|w(rite)?", aio_cmd_close, 0, 1, JIM_MODFLAG_FULLARGV, /* Description: Closes the stream. */ }, { "seek", "offset ?start|current|end", aio_cmd_seek, 1, 2, /* Description: Seeks in the stream (default 'current') */ }, { "tell", NULL, aio_cmd_tell, 0, 0, /* Description: Returns the current seek position */ }, { "filename", NULL, aio_cmd_filename, 0, 0, /* Description: Returns the original filename */ }, #ifdef JIM_TAINT { "taint", "source|sink ?0|n?", aio_cmd_taint, 1, 2, /* Description: Set or return the taint setting */ }, #endif #ifdef O_NDELAY { "ndelay", "?0|1?", aio_cmd_ndelay, 0, 1, /* Description: Set O_NDELAY (if arg). Returns current/new setting. */ }, #endif #ifdef HAVE_FSYNC { "sync", NULL, aio_cmd_sync, 0, 0, /* Description: Flush and fsync() the stream */ }, #endif { "buffering", "?none|line|full? ?size?", aio_cmd_buffering, 0, 2, /* Description: Sets or returns write buffering */ }, { "translation", "binary|text", aio_cmd_translation, 1, 1, /* Description: Sets output translation mode */ }, { "readsize", "?size?", aio_cmd_readsize, 0, 1, /* Description: Sets or returns read size */ }, #if defined(jim_ext_file) && defined(Jim_FileStat) { "stat", "?var?", aio_cmd_stat, 0, 1, /* Description: 'file stat' on the open file */ }, #endif #ifdef jim_ext_eventloop { "readable", "?readable-script?", aio_cmd_readable, 0, 1, /* Description: Returns script, or invoke readable-script when readable, {} to remove */ }, { "writable", "?writable-script?", aio_cmd_writable, 0, 1, /* Description: Returns script, or invoke writable-script when writable, {} to remove */ }, { "onexception", "?exception-script?", aio_cmd_onexception, 0, 1, /* Description: Returns script, or invoke exception-script when oob data, {} to remove */ }, { "timeout", "?ms?", aio_cmd_timeout, 0, 1, /* Description: Timeout for blocking read, gets */ }, #endif #if !defined(JIM_BOOTSTRAP) #if defined(JIM_SSL) { "ssl", "?-server cert ?priv?|-sni servername?", aio_cmd_ssl, 0, 3, JIM_MODFLAG_FULLARGV /* Description: Wraps a stream socket with SSL/TLS and returns a new channel */ }, { "verify", NULL, aio_cmd_verify, 0, 0, /* Description: Verifies the certificate of a SSL/TLS channel */ }, #endif #if defined(HAVE_STRUCT_FLOCK) { "lock", "?-wait?", aio_cmd_lock, 0, 1, /* Description: Attempt to get a lock, possibly waiting */ }, { "unlock", NULL, aio_cmd_unlock, 0, 0, /* Description: Relase a lock. */ }, #endif #if defined(HAVE_TERMIOS_H) { "tty", "?baud rate? ?data bits? ?stop bits? ?parity even|odd|none? ?handshake xonxoff|rtscts|none? ?input raw|cooked? ?output raw|cooked? ?echo 0|1? ?vmin n? ?vtime n? ?vstart char? ?vstop char?", aio_cmd_tty, 0, -1, /* Description: Get or set tty settings - valid only on a tty */ }, { "ttycontrol", "?rts 0|1? ?dtr 0|1? ?break duration?", aio_cmd_ttycontrol, 0, -1, /* Description: Get or set tty modem control settings - valid only on a tty */ }, #endif #endif /* JIM_BOOTSTRAP */ { NULL } }; static int JimAioSubCmdProc(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return Jim_CallSubCmd(interp, Jim_ParseSubCmd(interp, aio_command_table, argc, argv), argc, argv); } /** * Returns open flags or 0 on error. */ static int parse_posix_open_mode(Jim_Interp *interp, Jim_Obj *modeObj) { int i; int flags = 0; #ifndef O_NOCTTY /* mingw doesn't support this flag */ #define O_NOCTTY 0 #endif static const char * const modetypes[] = { "RDONLY", "WRONLY", "RDWR", "APPEND", "BINARY", "CREAT", "EXCL", "NOCTTY", "TRUNC", NULL }; static const int modeflags[] = { O_RDONLY, O_WRONLY, O_RDWR, O_APPEND, 0, O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, }; for (i = 0; i < Jim_ListLength(interp, modeObj); i++) { int opt; Jim_Obj *objPtr = Jim_ListGetIndex(interp, modeObj, i); if (Jim_GetEnum(interp, objPtr, modetypes, &opt, "access mode", JIM_ERRMSG) != JIM_OK) { return -1; } flags |= modeflags[opt]; } return flags; } /** * Returns flags for open() or -1 on error and sets an error. */ static int parse_open_mode(Jim_Interp *interp, Jim_Obj *filenameObj, Jim_Obj *modeObj) { /* Parse the specified mode. */ int flags; const char *mode = Jim_String(modeObj); if (*mode == 'R' || *mode == 'W') { return parse_posix_open_mode(interp, modeObj); } if (*mode == 'r') { flags = O_RDONLY; } else if (*mode == 'w') { flags = O_WRONLY | O_CREAT | O_TRUNC; } else if (*mode == 'a') { flags = O_WRONLY | O_CREAT | O_APPEND; } else { Jim_SetResultFormatted(interp, "%s: invalid open mode '%s'", Jim_String(filenameObj), mode); return -1; } mode++; if (*mode == 'b') { #ifdef O_BINARY flags |= O_BINARY; #endif mode++; } if (*mode == 't') { #ifdef O_TEXT flags |= O_TEXT; #endif mode++; } if (*mode == '+') { mode++; /* read+write so set O_RDWR instead */ flags &= ~(O_RDONLY | O_WRONLY); flags |= O_RDWR; } if (*mode == 'x') { mode++; #ifdef O_EXCL flags |= O_EXCL; #endif } if (*mode == 'F') { mode++; #ifdef O_LARGEFILE flags |= O_LARGEFILE; #endif } if (*mode == 'e') { /* ignore close on exec since this is the default */ mode++; } return flags; } static int JimAioOpenCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int openflags; AioFile *af; const char *filename; int fd = -1; int n = 0; /* filehandles created by open are not tainted by default */ int flags = AIO_NOTAINT; if (argc > 2 && Jim_CompareStringImmediate(interp, argv[2], "-noclose")) { flags = AIO_KEEPOPEN; n++; } if (Jim_CheckTaint(interp, JIM_TAINT_ANY)) { Jim_SetTaintError(interp, 1, argv); return JIM_ERR; } if (argc > 3 + n) { return JIM_USAGE; } filename = Jim_String(argv[1]); #ifdef jim_ext_tclcompat { /* If the filename starts with '|', use popen instead */ if (*filename == '|') { Jim_Obj *evalObj[3]; int i = 0; evalObj[i++] = Jim_NewStringObj(interp, "::popen", -1); evalObj[i++] = Jim_NewStringObj(interp, filename + 1, -1); if (argc == 3 + n) { evalObj[i++] = argv[2 + n]; } return Jim_EvalObjVector(interp, i, evalObj); } } #endif if (argc == 3 + n) { openflags = parse_open_mode(interp, argv[1], argv[2 + n]); if (openflags == -1) { return JIM_ERR; } } else { openflags = O_RDONLY; } fd = open(filename, openflags, 0666); if (fd < 0) { JimAioSetError(interp, argv[1]); return JIM_ERR; } af = JimMakeChannel(interp, fd, argv[1], "aio.handle%ld", 0, flags); if (af) { /* filehandles created by open are not tainted by default */ JimAioSetTaint(af, 0, 0); return JIM_OK; } return JIM_ERR; } #if defined(JIM_SSL) && !defined(JIM_BOOTSTRAP) static void JimAioSslContextDelProc(struct Jim_Interp *interp, void *privData) { SSL_CTX_free((SSL_CTX *)privData); ERR_free_strings(); } #ifdef USE_TLSv1_2_method #define TLS_method TLSv1_2_method #endif static SSL_CTX *JimAioSslCtx(Jim_Interp *interp) { SSL_CTX *ssl_ctx = (SSL_CTX *)Jim_GetAssocData(interp, "ssl_ctx"); if (ssl_ctx == NULL) { SSL_load_error_strings(); SSL_library_init(); ssl_ctx = SSL_CTX_new(TLS_method()); if (ssl_ctx && SSL_CTX_set_default_verify_paths(ssl_ctx)) { SSL_CTX_set_verify(ssl_ctx, SSL_VERIFY_NONE, NULL); Jim_SetAssocData(interp, "ssl_ctx", JimAioSslContextDelProc, ssl_ctx); } else { Jim_SetResultString(interp, ERR_error_string(ERR_get_error(), NULL), -1); } } return ssl_ctx; } #endif /* JIM_BOOTSTRAP */ static void JimAioSetTaint(AioFile *af, int taintsource, int taintsink) { af->taintsource = taintsource; af->taintsink = taintsink; } /** * Creates a channel for fd/filename. * * fd must be a valid file descriptor. * * hdlfmt is a sprintf format for the filehandle. Anything with %ld at the end will do. * mode is used for open or fdopen. * * Creates the command and sets the name as the current result. * Returns the AioFile pointer on success or NULL on failure (only if fdopen fails). */ static AioFile *JimMakeChannel(Jim_Interp *interp, int fd, Jim_Obj *filename, const char *hdlfmt, int family, int flags) { AioFile *af; char buf[AIO_CMD_LEN]; Jim_Obj *cmdname; snprintf(buf, sizeof(buf), hdlfmt, Jim_GetId(interp)); cmdname = Jim_NewStringObj(interp, buf, -1); if (!filename) { filename = cmdname; } Jim_IncrRefCount(filename); /* Create the file command */ af = Jim_Alloc(sizeof(*af)); memset(af, 0, sizeof(*af)); af->filename = filename; af->fd = fd; af->addr_family = family; af->fops = &stdio_fops; af->ssl = NULL; if (flags & AIO_WBUF_NONE) { af->wbuft = WBUF_OPT_NONE; } else { #ifdef HAVE_ISATTY af->wbuft = isatty(af->fd) ? WBUF_OPT_LINE : WBUF_OPT_FULL; #else af->wbuft = WBUF_OPT_FULL; #endif } /* don't set flags yet so that aio_set_nonblocking() works */ #ifdef FD_CLOEXEC if ((flags & AIO_KEEPOPEN) == 0) { (void)fcntl(af->fd, F_SETFD, FD_CLOEXEC); } #endif aio_set_nonblocking(af, !!(flags & AIO_NONBLOCK)); /* Now set flags */ af->flags |= flags; /* Create an empty write buf */ af->writebuf = Jim_NewStringObj(interp, NULL, 0); Jim_IncrRefCount(af->writebuf); af->wbuf_limit = AIO_DEFAULT_WBUF_LIMIT; af->rbuf_len = AIO_DEFAULT_RBUF_LEN; /* Don't allocate rbuf or readbuf until we need it */ /* By default, all channels are JIM_TAINT_STD for input and output. */ if (!(flags & AIO_NOTAINT)) { JimAioSetTaint(af, JIM_TAINT_STD, JIM_TAINT_STD); } Jim_RegisterCommand(interp, cmdname, JimAioSubCmdProc, JimAioDelProc, NULL, /* usage comes from -help */ NULL, /* no help */ 0, -1, JIM_CMD_ISCHANNEL, af); /* Note that the command must use the global namespace, even if * the current namespace is something different */ Jim_SetResult(interp, Jim_MakeGlobalNamespaceName(interp, cmdname)); return af; } #if defined(HAVE_PIPE) || (defined(HAVE_SOCKETPAIR) && UNIX_SOCKETS) || defined(HAVE_OPENPTY) /** * Create a pair of channels. e.g. from pipe() or socketpair() */ static int JimMakeChannelPair(Jim_Interp *interp, int p[2], Jim_Obj *filename, const char *hdlfmt, int family, int flags) { if (JimMakeChannel(interp, p[0], filename, hdlfmt, family, flags)) { Jim_Obj *objPtr = Jim_NewListObj(interp, NULL, 0); Jim_ListAppendElement(interp, objPtr, Jim_GetResult(interp)); if (JimMakeChannel(interp, p[1], filename, hdlfmt, family, flags)) { Jim_ListAppendElement(interp, objPtr, Jim_GetResult(interp)); Jim_SetResult(interp, objPtr); return JIM_OK; } } /* Can only be here if fdopen() failed */ close(p[0]); close(p[1]); JimAioSetError(interp, NULL); return JIM_ERR; } #endif #ifdef HAVE_PIPE static int JimCreatePipe(Jim_Interp *interp, Jim_Obj *filenameObj, int flags) { int p[2]; if (pipe(p) != 0) { JimAioSetError(interp, NULL); return JIM_ERR; } return JimMakeChannelPair(interp, p, filenameObj, "aio.pipe%ld", 0, flags); } /* Note that if you want -noclose, use "socket -noclose pipe" instead */ static int JimAioPipeCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return JimCreatePipe(interp, argv[0], 0); } #endif #ifdef HAVE_OPENPTY static int JimAioOpenPtyCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int p[2]; char path[MAXPATHLEN]; if (openpty(&p[0], &p[1], path, NULL, NULL) != 0) { JimAioSetError(interp, NULL); return JIM_ERR; } /* Note: The replica path will be used for both handles */ return JimMakeChannelPair(interp, p, Jim_NewStringObj(interp, path, -1), "aio.pty%ld", 0, 0); return JimMakeChannelPair(interp, p, Jim_NewStringObj(interp, path, -1), "aio.pty%ld", 0, 0); } #endif #if defined(HAVE_SOCKETS) && !defined(JIM_BOOTSTRAP) static int JimAioSockCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const char *socktypes[] = { "unix", "unix.server", "unix.dgram", "unix.dgram.server", "dgram", "dgram.server", "stream", "stream.server", "pipe", "pair", "pty", NULL }; enum { SOCK_UNIX, SOCK_UNIX_SERVER, SOCK_UNIX_DGRAM, SOCK_UNIX_DGRAM_SERVER, SOCK_DGRAM_CLIENT, SOCK_DGRAM_SERVER, SOCK_STREAM_CLIENT, SOCK_STREAM_SERVER, SOCK_STREAM_PIPE, SOCK_STREAM_SOCKETPAIR, SOCK_STREAM_PTY, }; int socktype; int sock; const char *addr = NULL; const char *bind_addr = NULL; const char *connect_addr = NULL; Jim_Obj *filename = NULL; union sockaddr_any sa; socklen_t salen; int on = 1; int reuse = 0; int do_listen = 0; int family = PF_INET; int type = SOCK_STREAM; int ipv6 = 0; int async = 0; int flags = 0; if (argc == 2 && Jim_CompareStringImmediate(interp, argv[1], "-commands")) { return Jim_CheckShowCommands(interp, argv[1], socktypes); } while (argc > 1 && Jim_String(argv[1])[0] == '-') { static const char * const options[] = { "-async", "-ipv6", "-noclose", NULL }; enum { OPT_ASYNC, OPT_IPV6, OPT_NOCLOSE }; int option; if (Jim_GetEnum(interp, argv[1], options, &option, NULL, JIM_ERRMSG) != JIM_OK) { return JIM_ERR; } switch (option) { case OPT_ASYNC: flags |= AIO_NONBLOCK; break; case OPT_IPV6: if (!IPV6) { Jim_SetResultString(interp, "ipv6 not supported", -1); return JIM_ERR; } ipv6 = 1; family = PF_INET6; break; case OPT_NOCLOSE: flags |= AIO_KEEPOPEN; break; } argc--; argv++; } if (argc < 2) { return JIM_USAGE; } if (Jim_GetEnum(interp, argv[1], socktypes, &socktype, "socktype", JIM_ERRMSG) != JIM_OK) { /* No need to check for -commands here since we did it above */ return JIM_ERR; } Jim_SetEmptyResult(interp); if (argc > 2) { addr = Jim_String(argv[2]); filename = argv[2]; } #if defined(HAVE_SOCKETPAIR) && UNIX_SOCKETS if (socktype == SOCK_STREAM_SOCKETPAIR) { int p[2]; if (addr || ipv6) { return JIM_USAGE; } if (socketpair(PF_UNIX, SOCK_STREAM, 0, p) < 0) { JimAioSetError(interp, NULL); return JIM_ERR; } /* Should we expect socketpairs to be line buffered by default? */ return JimMakeChannelPair(interp, p, argv[1], "aio.sockpair%ld", PF_UNIX, 0); } #endif #if defined(HAVE_PIPE) if (socktype == SOCK_STREAM_PIPE) { if (addr || ipv6) { return JIM_USAGE; } return JimCreatePipe(interp, argv[1], flags); } #endif /* Now all these socket types are very similar */ switch (socktype) { case SOCK_DGRAM_CLIENT: connect_addr = addr; type = SOCK_DGRAM; break; case SOCK_STREAM_CLIENT: if (addr == NULL) { return JIM_USAGE; } connect_addr = addr; break; case SOCK_STREAM_SERVER: if (addr == NULL) { return JIM_USAGE; } bind_addr = addr; reuse = 1; do_listen = 1; break; case SOCK_DGRAM_SERVER: if (addr == NULL) { return JIM_USAGE; } bind_addr = addr; type = SOCK_DGRAM; reuse = 1; break; #if UNIX_SOCKETS case SOCK_UNIX: if (addr == NULL) { return JIM_USAGE; } connect_addr = addr; family = PF_UNIX; break; case SOCK_UNIX_DGRAM: connect_addr = addr; type = SOCK_DGRAM; family = PF_UNIX; /* A dgram unix domain socket client needs to bind * to a temporary address to allow the server to * send responses */ { int tmpfd = Jim_MakeTempFile(interp, NULL, 1); if (tmpfd < 0) { return JIM_ERR; } close(tmpfd); /* This will be valid until a result is next set, which is long enough here */ bind_addr = Jim_String(Jim_GetResult(interp)); } break; case SOCK_UNIX_SERVER: if (addr == NULL) { return JIM_USAGE; } bind_addr = addr; family = PF_UNIX; do_listen = 1; break; case SOCK_UNIX_DGRAM_SERVER: if (addr == NULL) { return JIM_USAGE; } bind_addr = addr; type = SOCK_DGRAM; family = PF_UNIX; break; #endif #ifdef HAVE_OPENPTY case SOCK_STREAM_PTY: if (addr || ipv6) { return JIM_USAGE; } return JimAioOpenPtyCommand(interp, 1, &argv[1]); #endif default: Jim_SetResultString(interp, "Unsupported socket type", -1); return JIM_ERR; } /* Now do all the steps necessary for the given socket type */ sock = socket(family, type, 0); if (sock < 0) { JimAioSetError(interp, NULL); return JIM_ERR; } if (bind_addr) { if (JimParseSocketAddress(interp, family, type, bind_addr, &sa, &salen) != JIM_OK) { close(sock); return JIM_ERR; } if (reuse) { setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void *)&on, sizeof(on)); } if (bind(sock, &sa.sa, salen)) { Jim_SetResultFormatted(interp, "%s: bind: %s", bind_addr, strerror(errno)); close(sock); return JIM_ERR; } } if (connect_addr) { if (JimParseSocketAddress(interp, family, type, connect_addr, &sa, &salen) != JIM_OK) { close(sock); return JIM_ERR; } if (connect(sock, &sa.sa, salen)) { if (async && errno == EINPROGRESS) { /* OK */ } else { Jim_SetResultFormatted(interp, "%s: connect: %s", connect_addr, strerror(errno)); close(sock); return JIM_ERR; } } } if (do_listen) { if (listen(sock, 5)) { Jim_SetResultFormatted(interp, "listen: %s", strerror(errno)); close(sock); return JIM_ERR; } } if (!filename) { filename = argv[1]; } return JimMakeChannel(interp, sock, filename, "aio.sock%ld", family, flags) ? JIM_OK : JIM_ERR; } #endif /* JIM_BOOTSTRAP */ #if defined(JIM_SSL) && !defined(JIM_BOOTSTRAP) static int JimAioLoadSSLCertsCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { SSL_CTX *ssl_ctx; ssl_ctx = JimAioSslCtx(interp); if (!ssl_ctx) { return JIM_ERR; } if (SSL_CTX_load_verify_locations(ssl_ctx, NULL, Jim_String(argv[1])) == 1) { return JIM_OK; } Jim_SetResultString(interp, ERR_error_string(ERR_get_error(), NULL), -1); return JIM_ERR; } #endif /* JIM_BOOTSTRAP */ /* Create filehandles for stdin, stdout and stderr */ static void JimMakeStdioChannel(Jim_Interp *interp, FILE *fh, const char *name, unsigned flags) { /* Note: this can't fail */ AioFile *af = JimMakeChannel(interp, fileno(fh), NULL, name, 0, AIO_KEEPOPEN | flags); JimAioSetTaint(af, 0, 0); } int Jim_aioInit(Jim_Interp *interp) { Jim_PackageProvideCheck(interp, "aio"); #if defined(JIM_SSL) Jim_RegisterSimpleCmd(interp, "load_ssl_certs", "dir", 1, 1, JimAioLoadSSLCertsCommand); #endif Jim_RegisterCmd(interp, "open", "filename ?-noclose? ?mode?", 1, 3, JimAioOpenCommand, NULL, NULL, JIM_CMD_NOTAINT); #ifdef HAVE_SOCKETS Jim_RegisterCmd(interp, "socket", "?-async? ?-ipv6? socktype ?address?", 1, 4, JimAioSockCommand, NULL, NULL, JIM_CMD_NOTAINT); #endif #ifdef HAVE_PIPE Jim_RegisterSimpleCmd(interp, "pipe", "", 0, 0, JimAioPipeCommand); #endif /* Create filehandles for stdin, stdout and stderr */ JimMakeStdioChannel(interp, stdin, "stdin", 0); JimMakeStdioChannel(interp, stdout, "stdout", 0); JimMakeStdioChannel(interp, stderr, "stderr", AIO_WBUF_NONE); return JIM_OK; } jimtcl-0.84/jim-array.c000066400000000000000000000202611522604140100147620ustar00rootroot00000000000000/* * Implements the array command for jim * * (c) 2008 Steve Bennett * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE JIM TCL PROJECT ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * JIM TCL PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * The views and conclusions contained in the software and documentation * are those of the authors and should not be interpreted as representing * official policies, either expressed or implied, of the Jim Tcl Project. * * Based on code originally from Tcl 6.7: * * Copyright 1987-1991 Regents of the University of California * Permission to use, copy, modify, and distribute this * software and its documentation for any purpose and without * fee is hereby granted, provided that the above copyright * notice appear in all copies. The University of California * makes no representations about the suitability of this * software for any purpose. It is provided "as is" without * express or implied warranty. */ #include #include #include #include #include #include static int array_cmd_exists(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { /* Just a regular [info exists] */ Jim_Obj *dictObj = Jim_GetVariable(interp, argv[0], JIM_UNSHARED); Jim_SetResultInt(interp, dictObj && Jim_DictSize(interp, dictObj) != -1); return JIM_OK; } static int array_cmd_get(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *objPtr = Jim_GetVariable(interp, argv[0], JIM_NONE); Jim_Obj *patternObj; if (!objPtr) { return JIM_OK; } patternObj = (argc == 1) ? NULL : argv[1]; /* Optimise the "all" case */ if (patternObj == NULL || Jim_CompareStringImmediate(interp, patternObj, "*")) { if (Jim_IsList(objPtr) && Jim_ListLength(interp, objPtr) % 2 == 0) { /* A list with an even number of elements */ Jim_SetResult(interp, objPtr); return JIM_OK; } } return Jim_DictMatchTypes(interp, objPtr, patternObj, JIM_DICTMATCH_KEYS, JIM_DICTMATCH_KEYS | JIM_DICTMATCH_VALUES); } static int array_cmd_names(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *objPtr = Jim_GetVariable(interp, argv[0], JIM_NONE); if (!objPtr) { return JIM_OK; } return Jim_DictMatchTypes(interp, objPtr, argc == 1 ? NULL : argv[1], JIM_DICTMATCH_KEYS, JIM_DICTMATCH_KEYS); } static int array_cmd_unset(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int i; int len; Jim_Obj *resultObj; Jim_Obj *objPtr; Jim_Obj **dictValuesObj; if (argc == 1 || Jim_CompareStringImmediate(interp, argv[1], "*")) { /* Unset the whole array */ Jim_UnsetVariable(interp, argv[0], JIM_NONE); return JIM_OK; } objPtr = Jim_GetVariable(interp, argv[0], JIM_NONE); if (objPtr == NULL) { /* Doesn't exist, so nothing to do */ return JIM_OK; } dictValuesObj = Jim_DictPairs(interp, objPtr, &len); if (dictValuesObj == NULL) { /* Variable is not an array - tclsh ignores this and returns nothing - be compatible */ Jim_SetResultString(interp, "", -1); return JIM_OK; } /* Create a new object with the values which don't match */ resultObj = Jim_NewDictObj(interp, NULL, 0); for (i = 0; i < len; i += 2) { if (!Jim_StringMatchObj(interp, argv[1], dictValuesObj[i], 0)) { Jim_DictAddElement(interp, resultObj, dictValuesObj[i], dictValuesObj[i + 1]); } } Jim_SetVariable(interp, argv[0], resultObj); return JIM_OK; } static int array_cmd_size(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *objPtr; int len = 0; /* Not found means zero length */ objPtr = Jim_GetVariable(interp, argv[0], JIM_NONE); if (objPtr) { len = Jim_DictSize(interp, objPtr); if (len < 0) { /* Variable is not an array - tclsh ignores this and returns 0 - be compatible */ Jim_SetResultInt(interp, 0); return JIM_OK; } } Jim_SetResultInt(interp, len); return JIM_OK; } static int array_cmd_stat(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *objPtr = Jim_GetVariable(interp, argv[0], JIM_NONE); if (objPtr) { return Jim_DictInfo(interp, objPtr); } Jim_SetResultFormatted(interp, "\"%#s\" isn't an array", argv[0], NULL); return JIM_ERR; } static int array_cmd_set(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int i; int len; Jim_Obj *listObj = argv[1]; Jim_Obj *dictObj; len = Jim_ListLength(interp, listObj); if (len % 2) { Jim_SetResultString(interp, "list must have an even number of elements", -1); return JIM_ERR; } dictObj = Jim_GetVariable(interp, argv[0], JIM_UNSHARED); if (!dictObj) { /* Doesn't exist, so just set the list directly */ return Jim_SetVariable(interp, argv[0], listObj); } else if (Jim_DictSize(interp, dictObj) < 0) { return JIM_ERR; } if (Jim_IsShared(dictObj)) { dictObj = Jim_DuplicateObj(interp, dictObj); } for (i = 0; i < len; i += 2) { Jim_Obj *nameObj; Jim_Obj *valueObj; Jim_ListIndex(interp, listObj, i, &nameObj, JIM_NONE); Jim_ListIndex(interp, listObj, i + 1, &valueObj, JIM_NONE); Jim_DictAddElement(interp, dictObj, nameObj, valueObj); } return Jim_SetVariable(interp, argv[0], dictObj); } static const jim_subcmd_type array_command_table[] = { { "exists", "arrayName", array_cmd_exists, 1, 1, /* Description: Does array exist? */ }, { "get", "arrayName ?pattern?", array_cmd_get, 1, 2, /* Description: Array contents as name value list */ }, { "names", "arrayName ?pattern?", array_cmd_names, 1, 2, /* Description: Array keys as a list */ }, { "set", "arrayName list", array_cmd_set, 2, 2, /* Description: Set array from list */ }, { "size", "arrayName", array_cmd_size, 1, 1, /* Description: Number of elements in array */ }, { "stat", "arrayName", array_cmd_stat, 1, 1, /* Description: Print statistics about an array */ }, { "unset", "arrayName ?pattern?", array_cmd_unset, 1, 2, /* Description: Unset elements of an array */ }, { NULL } }; int Jim_arrayInit(Jim_Interp *interp) { Jim_PackageProvideCheck(interp, "array"); Jim_RegisterSubCmd(interp, "array", array_command_table, NULL); return JIM_OK; } jimtcl-0.84/jim-clock.c000066400000000000000000000127751522604140100147520ustar00rootroot00000000000000/* * jim-clock.c * * Implements the clock command */ #include "jimautoconf.h" #include #include #include #include #include #ifdef HAVE_SYS_TIME_H #include #endif struct clock_options { int gmt; const char *format; }; /* Parses the options ?-format string? ?-gmt boolean? and fills in *opts. * Any options not present are not set. * argc must be even. * * Returns JIM_OK or JIM_ERR and sets an error result. */ static int parse_clock_options(Jim_Interp *interp, int argc, Jim_Obj *const *argv, struct clock_options *opts) { static const char * const options[] = { "-gmt", "-format", NULL }; enum { OPT_GMT, OPT_FORMAT, }; int i; for (i = 0; i < argc; i += 2) { int option; if (Jim_GetEnum(interp, argv[i], options, &option, NULL, JIM_ERRMSG | JIM_ENUM_ABBREV) != JIM_OK) { return JIM_ERR; } switch (option) { case OPT_GMT: if (Jim_GetBoolean(interp, argv[i + 1], &opts->gmt) != JIM_OK) { return JIM_ERR; } break; case OPT_FORMAT: opts->format = Jim_String(argv[i + 1]); break; } } return JIM_OK; } static int clock_cmd_format(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { /* How big is big enough? */ char buf[100]; time_t t; jim_wide seconds; struct clock_options options = { 0, "%a %b %d %H:%M:%S %Z %Y" }; struct tm *tm; if (Jim_GetWide(interp, argv[0], &seconds) != JIM_OK) { return JIM_ERR; } if (argc % 2 == 0) { return -1; } if (parse_clock_options(interp, argc - 1, argv + 1, &options) == JIM_ERR) { return JIM_ERR; } t = seconds; tm = options.gmt ? gmtime(&t) : localtime(&t); if (tm == NULL || strftime(buf, sizeof(buf), options.format, tm) == 0) { Jim_SetResultString(interp, "format string too long or invalid time", -1); return JIM_ERR; } Jim_SetResultString(interp, buf, -1); return JIM_OK; } #ifdef HAVE_STRPTIME /* Implement timegm() that doesn't require messing with timezone * Based on: http://howardhinnant.github.io/date_algorithms.html#days_from_civil */ static time_t jim_timegm(const struct tm *tm) { int m = tm->tm_mon + 1; int y = 1900 + tm->tm_year - (m <= 2); int era = (y >= 0 ? y : y - 399) / 400; unsigned yoe = (unsigned)(y - era * 400); unsigned doy = (153 * (m + (m > 2 ? -3 : 9)) + 2) / 5 + tm->tm_mday - 1; unsigned doe = yoe * 365 + yoe / 4 - yoe / 100 + doy; long days = (era * 146097 + (int)doe - 719468); int secs = tm->tm_hour * 3600 + tm->tm_min * 60 + tm->tm_sec; return days * 24 * 60 * 60 + secs; } static int clock_cmd_scan(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { char *pt; struct tm tm; time_t now = time(NULL); /* No default format */ struct clock_options options = { 0, NULL }; if (argc % 2 == 0) { return -1; } if (parse_clock_options(interp, argc - 1, argv + 1, &options) == JIM_ERR) { return JIM_ERR; } if (options.format == NULL) { return -1; } localtime_r(&now, &tm); pt = strptime(Jim_String(argv[0]), options.format, &tm); if (pt == 0 || *pt != 0) { Jim_SetResultString(interp, "Failed to parse time according to format", -1); return JIM_ERR; } /* Now convert into a time_t */ tm.tm_isdst = options.gmt ? 0 : -1; Jim_SetResultInt(interp, options.gmt ? jim_timegm(&tm) : mktime(&tm)); return JIM_OK; } #endif static int clock_cmd_seconds(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_SetResultInt(interp, Jim_GetTimeUsec(CLOCK_REALTIME) / 1000000); return JIM_OK; } static int clock_cmd_clicks(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_SetResultInt(interp, Jim_GetTimeUsec(CLOCK_MONOTONIC_RAW)); return JIM_OK; } static int clock_cmd_micros(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_SetResultInt(interp, Jim_GetTimeUsec(CLOCK_REALTIME)); return JIM_OK; } static int clock_cmd_millis(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_SetResultInt(interp, Jim_GetTimeUsec(CLOCK_REALTIME) / 1000); return JIM_OK; } static const jim_subcmd_type clock_command_table[] = { { "clicks", NULL, clock_cmd_clicks, 0, 0, /* Description: Returns the current time in 'clicks' */ }, { "format", "seconds ?-format string? ?-gmt boolean?", clock_cmd_format, 1, 5, /* Description: Format the given time */ }, { "microseconds", NULL, clock_cmd_micros, 0, 0, /* Description: Returns the current time in microseconds */ }, { "milliseconds", NULL, clock_cmd_millis, 0, 0, /* Description: Returns the current time in milliseconds */ }, #ifdef HAVE_STRPTIME { "scan", "str -format format ?-gmt boolean?", clock_cmd_scan, 3, 5, /* Description: Determine the time according to the given format */ }, #endif { "seconds", NULL, clock_cmd_seconds, 0, 0, /* Description: Returns the current time as seconds since the epoch */ }, { NULL } }; int Jim_clockInit(Jim_Interp *interp) { Jim_PackageProvideCheck(interp, "clock"); Jim_RegisterSubCmd(interp, "clock", clock_command_table, NULL); return JIM_OK; } jimtcl-0.84/jim-config.h.in000066400000000000000000000000671522604140100155250ustar00rootroot00000000000000/* Public autoconf settings */ @DEFINE_HAVE_LONG_LONG@ jimtcl-0.84/jim-eventloop.c000066400000000000000000000626721522604140100156730ustar00rootroot00000000000000/* Jim - A small embeddable Tcl interpreter * * Copyright 2005 Salvatore Sanfilippo * Copyright 2005 Clemens Hintze * Copyright 2005 patthoyts - Pat Thoyts * Copyright 2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com * Copyright 2008 Andrew Lunn * Copyright 2008 Duane Ellis * Copyright 2008 Uwe Klein * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE JIM TCL PROJECT ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * JIM TCL PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * The views and conclusions contained in the software and documentation * are those of the authors and should not be interpreted as representing * official policies, either expressed or implied, of the Jim Tcl Project. **/ #include "jimautoconf.h" #include #include #include #include #include #include #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_SYS_TIME_H #include #endif #if defined(__MINGW32__) #include #include #ifndef HAVE_USLEEP #define usleep(US) Sleep((US) / 1000) #define HAVE_USLEEP #endif #else #include #ifdef HAVE_SYS_SELECT_H #include #endif #endif #ifndef HAVE_USLEEP /* XXX: Implement this in terms of select() or nanosleep() */ #define usleep(US) sleep((US) / 1000000) #warning "sub-second sleep not supported" #endif /* --- */ /* File event structure */ typedef struct Jim_FileEvent { int fd; int mask; /* one of JIM_EVENT_(READABLE|WRITABLE|EXCEPTION) */ Jim_FileProc *fileProc; Jim_EventFinalizerProc *finalizerProc; void *clientData; struct Jim_FileEvent *next; } Jim_FileEvent; /* Time event structure */ typedef struct Jim_TimeEvent { jim_wide id; /* time event identifier. */ jim_wide initialus; /* initial relative timer value in microseconds */ jim_wide when; /* microseconds */ Jim_TimeProc *timeProc; Jim_EventFinalizerProc *finalizerProc; void *clientData; struct Jim_TimeEvent *next; } Jim_TimeEvent; /* Per-interp stucture containing the state of the event loop */ typedef struct Jim_EventLoop { Jim_FileEvent *fileEventHead; Jim_TimeEvent *timeEventHead; jim_wide timeEventNextId; /* highest event id created, starting at 1 */ int suppress_bgerror; /* bgerror returned break, so don't call it again */ } Jim_EventLoop; static void JimAfterTimeHandler(Jim_Interp *interp, void *clientData); static void JimAfterTimeEventFinalizer(Jim_Interp *interp, void *clientData); int Jim_EvalObjBackground(Jim_Interp *interp, Jim_Obj *scriptObjPtr) { Jim_EventLoop *eventLoop = Jim_GetAssocData(interp, "eventloop"); Jim_CallFrame *savedFramePtr; int retval; savedFramePtr = interp->framePtr; interp->framePtr = interp->topFramePtr; retval = Jim_EvalObj(interp, scriptObjPtr); interp->framePtr = savedFramePtr; /* Try to report the error (if any) via the bgerror proc */ if (retval != JIM_OK && retval != JIM_RETURN && !eventLoop->suppress_bgerror) { Jim_Obj *objv[2]; int rc = JIM_ERR; objv[0] = Jim_NewStringObj(interp, "bgerror", -1); objv[1] = Jim_GetResult(interp); Jim_IncrRefCount(objv[0]); Jim_IncrRefCount(objv[1]); if (Jim_GetCommand(interp, objv[0], JIM_NONE) == NULL || (rc = Jim_EvalObjVector(interp, 2, objv)) != JIM_OK) { if (rc == JIM_BREAK) { /* No more bgerror calls */ eventLoop->suppress_bgerror++; } else { /* Report the error to stderr. */ Jim_MakeErrorMessage(interp); fprintf(stderr, "%s\n", Jim_String(Jim_GetResult(interp))); /* And reset the result */ Jim_SetResultString(interp, "", -1); } } Jim_DecrRefCount(interp, objv[0]); Jim_DecrRefCount(interp, objv[1]); } return retval; } /** * Register a file event handler on the given file descriptor with the given mask * (may be 1 or more of JIM_EVENT_xxx) * * When the event occurs, proc is called with clientData and the mask of events that occurred. * When the filehandler is removed, finalizerProc is called. * * Note that no check is made that only one handler is registered for the given * event(s). */ void Jim_CreateFileHandler(Jim_Interp *interp, int fd, int mask, Jim_FileProc * proc, void *clientData, Jim_EventFinalizerProc * finalizerProc) { Jim_FileEvent *fe; Jim_EventLoop *eventLoop = Jim_GetAssocData(interp, "eventloop"); fe = Jim_Alloc(sizeof(*fe)); fe->fd = fd; fe->mask = mask; fe->fileProc = proc; fe->finalizerProc = finalizerProc; fe->clientData = clientData; fe->next = eventLoop->fileEventHead; eventLoop->fileEventHead = fe; } static int JimEventHandlerScript(Jim_Interp *interp, void *clientData, int mask) { return Jim_EvalObjBackground(interp, (Jim_Obj *)clientData); } static void JimEventHandlerScriptFinalize(Jim_Interp *interp, void *clientData) { Jim_DecrRefCount(interp, (Jim_Obj *)clientData); } /** * A convenience version of Jim_CreateFileHandler() which evaluates * scriptObj with Jim_EvalObjBackground() when the event occurs. */ void Jim_CreateScriptFileHandler(Jim_Interp *interp, int fd, int mask, Jim_Obj *scriptObj) { Jim_IncrRefCount(scriptObj); Jim_CreateFileHandler(interp, fd, mask, JimEventHandlerScript, scriptObj, JimEventHandlerScriptFinalize); } /** * If there is a file handler registered with the given mask, return the clientData * for the (first) handler. * Otherwise return NULL. */ void *Jim_FindFileHandler(Jim_Interp *interp, int fd, int mask) { Jim_FileEvent *fe; Jim_EventLoop *eventLoop = Jim_GetAssocData(interp, "eventloop"); for (fe = eventLoop->fileEventHead; fe; fe = fe->next) { if (fe->fd == fd && (fe->mask & mask)) { return fe->clientData; } } return NULL; } /** * Removes all event handlers for 'handle' that match 'mask'. */ void Jim_DeleteFileHandler(Jim_Interp *interp, int fd, int mask) { Jim_FileEvent *fe, *next, *prev = NULL; Jim_EventLoop *eventLoop = Jim_GetAssocData(interp, "eventloop"); for (fe = eventLoop->fileEventHead; fe; fe = next) { next = fe->next; if (fe->fd == fd && (fe->mask & mask)) { /* Remove this entry from the list */ if (prev == NULL) eventLoop->fileEventHead = next; else prev->next = next; if (fe->finalizerProc) fe->finalizerProc(interp, fe->clientData); Jim_Free(fe); continue; } prev = fe; } } jim_wide Jim_CreateTimeHandler(Jim_Interp *interp, jim_wide us, Jim_TimeProc * proc, void *clientData, Jim_EventFinalizerProc * finalizerProc) { Jim_EventLoop *eventLoop = Jim_GetAssocData(interp, "eventloop"); jim_wide id = ++eventLoop->timeEventNextId; Jim_TimeEvent *te, *e, *prev; te = Jim_Alloc(sizeof(*te)); te->id = id; te->initialus = us; te->when = Jim_GetTimeUsec(CLOCK_MONOTONIC_RAW) + us; te->timeProc = proc; te->finalizerProc = finalizerProc; te->clientData = clientData; /* Add to the appropriate place in the list */ prev = NULL; for (e = eventLoop->timeEventHead; e; e = e->next) { if (te->when < e->when) { break; } prev = e; } if (prev) { te->next = prev->next; prev->next = te; } else { te->next = eventLoop->timeEventHead; eventLoop->timeEventHead = te; } return id; } static jim_wide JimParseAfterId(Jim_Obj *idObj) { const char *tok = Jim_String(idObj); jim_wide id; if (strncmp(tok, "after#", 6) == 0 && Jim_StringToWide(tok + 6, &id, 10) == JIM_OK) { /* Got an event by id */ return id; } return -1; } static jim_wide JimFindAfterByScript(Jim_EventLoop *eventLoop, Jim_Obj *scriptObj) { Jim_TimeEvent *te; for (te = eventLoop->timeEventHead; te; te = te->next) { /* Is this an 'after' event? */ if (te->timeProc == JimAfterTimeHandler) { if (Jim_StringEqObj(scriptObj, te->clientData)) { return te->id; } } } return -1; /* NO event with the specified ID found */ } static Jim_TimeEvent *JimFindTimeHandlerById(Jim_EventLoop *eventLoop, jim_wide id) { Jim_TimeEvent *te; for (te = eventLoop->timeEventHead; te; te = te->next) { if (te->id == id) { return te; } } return NULL; } static Jim_TimeEvent *Jim_RemoveTimeHandler(Jim_EventLoop *eventLoop, jim_wide id) { Jim_TimeEvent *te, *prev = NULL; for (te = eventLoop->timeEventHead; te; te = te->next) { if (te->id == id) { if (prev == NULL) eventLoop->timeEventHead = te->next; else prev->next = te->next; return te; } prev = te; } return NULL; } static void Jim_FreeTimeHandler(Jim_Interp *interp, Jim_TimeEvent *te) { if (te->finalizerProc) te->finalizerProc(interp, te->clientData); Jim_Free(te); } jim_wide Jim_DeleteTimeHandler(Jim_Interp *interp, jim_wide id) { Jim_TimeEvent *te; Jim_EventLoop *eventLoop = Jim_GetAssocData(interp, "eventloop"); if (id > eventLoop->timeEventNextId) { return -2; /* wrong event ID */ } te = Jim_RemoveTimeHandler(eventLoop, id); if (te) { jim_wide remain; remain = te->when - Jim_GetTimeUsec(CLOCK_MONOTONIC_RAW); remain = (remain < 0) ? 0 : remain; Jim_FreeTimeHandler(interp, te); return remain; } return -1; /* NO event with the specified ID found */ } /* --- POSIX version of Jim_ProcessEvents, for now the only available --- */ /* Process every pending time event, then every pending file event * (that may be registered by time event callbacks just processed). * The behaviour depends upon the setting of flags: * * If flags is 0, the function does nothing and returns. * if flags has JIM_ALL_EVENTS set, all event types are processed. * if flags has JIM_FILE_EVENTS set, file events are processed. * if flags has JIM_TIME_EVENTS set, time events are processed. * if flags has JIM_DONT_WAIT set, the function returns as soon as all * the events that are possible to process without waiting are processed. * * Returns the number of events processed or -1 if * there are no matching handlers, or -2 on error. */ int Jim_ProcessEvents(Jim_Interp *interp, int flags) { jim_wide sleep_us = -1; int processed = 0; Jim_EventLoop *eventLoop = Jim_GetAssocData(interp, "eventloop"); Jim_FileEvent *fe = eventLoop->fileEventHead; Jim_TimeEvent *te; jim_wide maxId; if ((flags & JIM_FILE_EVENTS) == 0 || fe == NULL) { /* No file events */ if ((flags & JIM_TIME_EVENTS) == 0 || eventLoop->timeEventHead == NULL) { /* No time events */ return -1; } } /* Note that we want call select() even if there are no * file events to process as long as we want to process time * events, in order to sleep until the next time event is ready * to fire. */ if (flags & JIM_DONT_WAIT) { /* Wait no time */ sleep_us = 0; } else if (flags & JIM_TIME_EVENTS) { /* The nearest timer is always at the head of the list */ if (eventLoop->timeEventHead) { Jim_TimeEvent *shortest = eventLoop->timeEventHead; /* Calculate the time missing for the nearest * timer to fire. */ sleep_us = shortest->when - Jim_GetTimeUsec(CLOCK_MONOTONIC_RAW); if (sleep_us < 0) { sleep_us = 0; } } else { /* Wait forever */ sleep_us = -1; } } #ifdef HAVE_SELECT if (flags & JIM_FILE_EVENTS) { int retval; struct timeval tv, *tvp = NULL; fd_set rfds, wfds, efds; int maxfd = -1; FD_ZERO(&rfds); FD_ZERO(&wfds); FD_ZERO(&efds); /* Check file events */ while (fe != NULL) { if (fe->mask & JIM_EVENT_READABLE) FD_SET(fe->fd, &rfds); if (fe->mask & JIM_EVENT_WRITABLE) FD_SET(fe->fd, &wfds); if (fe->mask & JIM_EVENT_EXCEPTION) FD_SET(fe->fd, &efds); if (maxfd < fe->fd) maxfd = fe->fd; fe = fe->next; } if (sleep_us >= 0) { tvp = &tv; tvp->tv_sec = sleep_us / 1000000; tvp->tv_usec = sleep_us % 1000000; } retval = select(maxfd + 1, &rfds, &wfds, &efds, tvp); if (retval < 0) { if (errno == EINVAL) { /* This can happen on mingw32 if a non-socket filehandle is passed */ Jim_SetResultString(interp, "non-waitable filehandle", -1); return -2; } } else if (retval > 0) { fe = eventLoop->fileEventHead; while (fe != NULL) { int mask = 0; int fd = fe->fd; if ((fe->mask & JIM_EVENT_READABLE) && FD_ISSET(fd, &rfds)) mask |= JIM_EVENT_READABLE; if (fe->mask & JIM_EVENT_WRITABLE && FD_ISSET(fd, &wfds)) mask |= JIM_EVENT_WRITABLE; if (fe->mask & JIM_EVENT_EXCEPTION && FD_ISSET(fd, &efds)) mask |= JIM_EVENT_EXCEPTION; if (mask) { int ret = fe->fileProc(interp, fe->clientData, mask); if (ret != JIM_OK && ret != JIM_RETURN) { /* Remove the element on handler error */ Jim_DeleteFileHandler(interp, fd, mask); /* At this point fe is no longer valid - it will be assigned below */ } processed++; /* After an event is processed our file event list * may no longer be the same, so what we do * is to clear the bit for this file descriptor and * restart again from the head. */ FD_CLR(fd, &rfds); FD_CLR(fd, &wfds); FD_CLR(fd, &efds); fe = eventLoop->fileEventHead; } else { fe = fe->next; } } } } #else if (sleep_us > 0) { usleep(sleep_us); } #endif /* Check time events */ te = eventLoop->timeEventHead; maxId = eventLoop->timeEventNextId; while (te) { jim_wide id; if (te->id > maxId) { te = te->next; continue; } if (Jim_GetTimeUsec(CLOCK_MONOTONIC_RAW) >= te->when) { id = te->id; /* Remove from the list before executing */ Jim_RemoveTimeHandler(eventLoop, id); te->timeProc(interp, te->clientData); /* After an event is processed our time event list may * no longer be the same, so we restart from head. * Still we make sure to don't process events registered * by event handlers itself in order to don't loop forever * even in case an [after 0] that continuously register * itself. To do so we saved the max ID we want to handle. */ Jim_FreeTimeHandler(interp, te); te = eventLoop->timeEventHead; processed++; } else { te = te->next; } } return processed; } /* ---------------------------------------------------------------------- */ static void JimELAssocDataDeleProc(Jim_Interp *interp, void *data) { void *next; Jim_FileEvent *fe; Jim_TimeEvent *te; Jim_EventLoop *eventLoop = data; fe = eventLoop->fileEventHead; while (fe) { next = fe->next; if (fe->finalizerProc) fe->finalizerProc(interp, fe->clientData); Jim_Free(fe); fe = next; } te = eventLoop->timeEventHead; while (te) { next = te->next; if (te->finalizerProc) te->finalizerProc(interp, te->clientData); Jim_Free(te); te = next; } Jim_Free(data); } static int JimELVwaitCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_EventLoop *eventLoop = Jim_CmdPrivData(interp); Jim_Obj *oldValue = NULL; Jim_Obj *scriptObjPtr = NULL; int rc; int signal = 0; if (argc > 2 && Jim_CompareStringImmediate(interp, argv[1], "-signal")) { signal++; } if (argc - signal == 3) { scriptObjPtr = argv[2 + signal]; } else if (argc - signal != 2) { return JIM_USAGE; } oldValue = Jim_GetGlobalVariable(interp, argv[1 + signal], JIM_NONE); if (oldValue) { Jim_IncrRefCount(oldValue); } else { /* If a result was left, it is an error */ if (Jim_Length(Jim_GetResult(interp))) { return JIM_ERR; } } eventLoop->suppress_bgerror = 0; while ((rc = Jim_ProcessEvents(interp, JIM_ALL_EVENTS)) >= 0) { Jim_Obj *currValue; if (signal && interp->sigmask) { /* vwait -signal and handled signals were received, so transfer them * to ignored signals so that 'signal check -clear' will return them. * It's possible that if signals aren't supported we shouldn't even * allow the -signal option. */ #ifdef jim_ext_signal Jim_SignalSetIgnored(interp->sigmask); #endif interp->sigmask = 0; break; } currValue = Jim_GetGlobalVariable(interp, argv[1 + signal], JIM_NONE); /* Stop the loop if the vwait-ed variable changed value, * or if was unset and now is set (or the contrary) * or if a signal was caught */ if ((oldValue && !currValue) || (!oldValue && currValue) || (oldValue && currValue && !Jim_StringEqObj(oldValue, currValue)) || Jim_CheckSignal(interp)) { break; } if (scriptObjPtr) { /* Stop the loop if a provided script returns BREAK or ERR */ int retval = Jim_EvalObj(interp, scriptObjPtr); if (retval == JIM_ERR || retval == JIM_BREAK) { if (retval == JIM_ERR) { rc = -2; } break; } } } if (oldValue) Jim_DecrRefCount(interp, oldValue); if (rc == -2) { return JIM_ERR; } Jim_SetEmptyResult(interp); return JIM_OK; } static int JimELUpdateCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_EventLoop *eventLoop = Jim_CmdPrivData(interp); static const char * const options[] = { "idletasks", NULL }; enum { UPDATE_IDLE, UPDATE_NONE }; int option = UPDATE_NONE; int flags = JIM_TIME_EVENTS; if (argc == 1) { flags = JIM_ALL_EVENTS; } else if (argc > 2 || Jim_GetEnum(interp, argv[1], options, &option, NULL, JIM_ENUM_ABBREV) != JIM_OK) { return JIM_USAGE; } eventLoop->suppress_bgerror = 0; while (Jim_ProcessEvents(interp, flags | JIM_DONT_WAIT) > 0) { } return JIM_OK; } static void JimAfterTimeHandler(Jim_Interp *interp, void *clientData) { Jim_Obj *objPtr = clientData; Jim_EvalObjBackground(interp, objPtr); } static void JimAfterTimeEventFinalizer(Jim_Interp *interp, void *clientData) { Jim_Obj *objPtr = clientData; Jim_DecrRefCount(interp, objPtr); } static int JimELAfterCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_EventLoop *eventLoop = Jim_CmdPrivData(interp); double ms = 0; jim_wide id; Jim_Obj *objPtr, *idObjPtr; static const char * const options[] = { "cancel", "info", "idle", NULL }; enum { AFTER_CANCEL, AFTER_INFO, AFTER_IDLE, AFTER_RESTART, AFTER_EXPIRE, AFTER_CREATE }; int option = AFTER_CREATE; if (Jim_GetDouble(interp, argv[1], &ms) != JIM_OK) { if (Jim_GetEnum(interp, argv[1], options, &option, "argument", JIM_ERRMSG) != JIM_OK) { return JIM_ERR; } Jim_SetEmptyResult(interp); } else if (argc == 2) { /* Simply a sleep */ usleep(ms * 1000); return JIM_OK; } switch (option) { case AFTER_IDLE: if (argc < 3) { Jim_WrongNumArgs(interp, 2, argv, "script ?script ...?"); return JIM_ERR; } /* fall through */ case AFTER_CREATE: { Jim_Obj *scriptObj = Jim_ConcatObj(interp, argc - 2, argv + 2); Jim_IncrRefCount(scriptObj); id = Jim_CreateTimeHandler(interp, (jim_wide)(ms * 1000), JimAfterTimeHandler, scriptObj, JimAfterTimeEventFinalizer); objPtr = Jim_NewStringObj(interp, NULL, 0); Jim_AppendString(interp, objPtr, "after#", -1); idObjPtr = Jim_NewIntObj(interp, id); Jim_IncrRefCount(idObjPtr); Jim_AppendObj(interp, objPtr, idObjPtr); Jim_DecrRefCount(interp, idObjPtr); Jim_SetResult(interp, objPtr); return JIM_OK; } case AFTER_CANCEL: if (argc < 3) { Jim_WrongNumArgs(interp, 2, argv, "id|command"); return JIM_ERR; } else { jim_wide remain = 0; id = JimParseAfterId(argv[2]); if (id <= 0) { /* Not an event id, so search by script */ Jim_Obj *scriptObj = Jim_ConcatObj(interp, argc - 2, argv + 2); id = JimFindAfterByScript(eventLoop, scriptObj); Jim_FreeNewObj(interp, scriptObj); if (id <= 0) { /* Not found */ break; } } remain = Jim_DeleteTimeHandler(interp, id); if (remain >= 0) { Jim_SetResultInt(interp, remain); } } break; case AFTER_INFO: if (argc == 2) { Jim_TimeEvent *te = eventLoop->timeEventHead; Jim_Obj *listObj = Jim_NewListObj(interp, NULL, 0); char buf[30]; const char *fmt = "after#%" JIM_WIDE_MODIFIER; while (te) { snprintf(buf, sizeof(buf), fmt, te->id); Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, buf, -1)); te = te->next; } Jim_SetResult(interp, listObj); } else if (argc == 3) { id = JimParseAfterId(argv[2]); if (id >= 0) { Jim_TimeEvent *e = JimFindTimeHandlerById(eventLoop, id); if (e && e->timeProc == JimAfterTimeHandler) { Jim_Obj *listObj = Jim_NewListObj(interp, NULL, 0); Jim_ListAppendElement(interp, listObj, e->clientData); Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, e->initialus ? "timer" : "idle", -1)); Jim_SetResult(interp, listObj); return JIM_OK; } } Jim_SetResultFormatted(interp, "event \"%#s\" doesn't exist", argv[2]); return JIM_ERR; } else { Jim_WrongNumArgs(interp, 2, argv, "?id?"); return JIM_ERR; } break; } return JIM_OK; } int Jim_eventloopInit(Jim_Interp *interp) { Jim_EventLoop *eventLoop; Jim_PackageProvideCheck(interp, "eventloop"); eventLoop = Jim_Alloc(sizeof(*eventLoop)); memset(eventLoop, 0, sizeof(*eventLoop)); Jim_SetAssocData(interp, "eventloop", JimELAssocDataDeleProc, eventLoop); Jim_RegisterCmd(interp, "vwait", "?-signal? name ?script?", 1, 3, JimELVwaitCommand, NULL, eventLoop, 0); Jim_RegisterCmd(interp, "update", "?idletasks?", 0, 1, JimELUpdateCommand, NULL, eventLoop, 0); Jim_RegisterCmd(interp, "after", "option ?arg ...?", 1, -1, JimELAfterCommand, NULL, eventLoop, 0); return JIM_OK; } jimtcl-0.84/jim-eventloop.h000066400000000000000000000125431522604140100156700ustar00rootroot00000000000000/* Jim - A small embeddable Tcl interpreter * * Copyright 2005 Salvatore Sanfilippo * Copyright 2005 Clemens Hintze * Copyright 2005 patthoyts - Pat Thoyts * Copyright 2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com * Copyright 2008 Andrew Lunn * Copyright 2008 Duane Ellis * Copyright 2008 Uwe Klein * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE JIM TCL PROJECT ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * JIM TCL PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * The views and conclusions contained in the software and documentation * are those of the authors and should not be interpreted as representing * official policies, either expressed or implied, of the Jim Tcl Project. **/ /* ------ USAGE ------- * See jim-aio.c as an example of an event provider. * * Public event loop APIs are documented here; internal implementation * details belong in jim-eventloop.c. */ #ifndef __JIM_EVENTLOOP_H__ #define __JIM_EVENTLOOP_H__ #ifdef __cplusplus extern "C" { #endif /* Callback invoked when a registered file descriptor becomes ready. */ typedef int Jim_FileProc(Jim_Interp *interp, void *clientData, int mask); /* Callback invoked when a signal event is delivered. */ typedef int Jim_SignalProc(Jim_Interp *interp, void *clientData, void *msg); /* Callback invoked when a registered timer expires. */ typedef void Jim_TimeProc(Jim_Interp *interp, void *clientData); /* Cleanup callback invoked when a file or time handler is deleted. */ typedef void Jim_EventFinalizerProc(Jim_Interp *interp, void *clientData); /* File handler mask bit for readable descriptors. */ #define JIM_EVENT_READABLE 1 /* File handler mask bit for writable descriptors. */ #define JIM_EVENT_WRITABLE 2 /* File handler mask bit for exceptional conditions. */ #define JIM_EVENT_EXCEPTION 4 /* Register a file event handler for fd and the selected JIM_EVENT_* bits. */ JIM_EXPORT void Jim_CreateFileHandler (Jim_Interp *interp, int fd, int mask, Jim_FileProc *proc, void *clientData, Jim_EventFinalizerProc *finalizerProc); /* Register a file handler which evaluates scriptObj in the background. */ JIM_EXPORT void Jim_CreateScriptFileHandler(Jim_Interp *interp, int fd, int mask, Jim_Obj *scriptObj); /* Delete all file handlers for fd that match any bit in mask. */ JIM_EXPORT void Jim_DeleteFileHandler (Jim_Interp *interp, int fd, int mask); /* Create a one-shot timer that fires after microseconds and return its id. */ JIM_EXPORT jim_wide Jim_CreateTimeHandler (Jim_Interp *interp, jim_wide microseconds, Jim_TimeProc *proc, void *clientData, Jim_EventFinalizerProc *finalizerProc); /* * Delete the timer identified by id. * * Returns the remaining time in microseconds, -1 if no such timer exists, * or -2 if id is larger than any timer id allocated so far. */ JIM_EXPORT jim_wide Jim_DeleteTimeHandler (Jim_Interp *interp, jim_wide id); /* Return the clientData for the first file handler on fd matching mask, or NULL. */ JIM_EXPORT void *Jim_FindFileHandler(Jim_Interp *interp, int fd, int mask); /* Wait until fd is readable or the timeout in milliseconds expires. */ JIM_EXPORT int Jim_ReadableTimeout(int fd, long ms); /* Process registered file handlers. */ #define JIM_FILE_EVENTS 1 /* Process registered timer handlers. */ #define JIM_TIME_EVENTS 2 /* Process both file and timer handlers. */ #define JIM_ALL_EVENTS (JIM_FILE_EVENTS|JIM_TIME_EVENTS) /* Poll only; do not wait for a future event to become ready. */ #define JIM_DONT_WAIT 4 /* * Process pending events selected by flags. * * Accepted flags are JIM_FILE_EVENTS, JIM_TIME_EVENTS, JIM_ALL_EVENTS, * and JIM_DONT_WAIT. Returns the number of events processed, -1 if no * matching handlers exist, or -2 on error. */ JIM_EXPORT int Jim_ProcessEvents (Jim_Interp *interp, int flags); /* Evaluate a script as a background event callback and report errors via bgerror. */ JIM_EXPORT int Jim_EvalObjBackground (Jim_Interp *interp, Jim_Obj *scriptObjPtr); /* Initialise the event loop package and register its core commands. */ int Jim_eventloopInit(Jim_Interp *interp); #ifdef __cplusplus } #endif #endif /* __JIM_EVENTLOOP_H__ */ jimtcl-0.84/jim-exec.c000066400000000000000000001451411522604140100145750ustar00rootroot00000000000000/* * (c) 2008 Steve Bennett * * Implements the exec command for Jim * * Based on code originally from Tcl 6.7 by John Ousterhout. * From that code: * * The Tcl_Fork and Tcl_WaitPids procedures are based on code * contributed by Karl Lehenbauer, Mark Diekhans and Peter * da Silva. * * Copyright 1987-1991 Regents of the University of California * Permission to use, copy, modify, and distribute this * software and its documentation for any purpose and without * fee is hereby granted, provided that the above copyright * notice appear in all copies. The University of California * makes no representations about the suitability of this * software for any purpose. It is provided "as is" without * express or implied warranty. */ #include #include #include "jimautoconf.h" #include #if (!(defined(HAVE_VFORK) || defined(HAVE_FORK)) || !defined(HAVE_WAITPID)) && !defined(__MINGW32__) /* Poor man's implementation of exec with system() * The system() call *may* do command line redirection, etc. * The standard output is not available. * Can't redirect filehandles. */ static int Jim_ExecCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *cmdlineObj = Jim_NewEmptyStringObj(interp); int i, j; int rc; /* Create a quoted command line */ for (i = 1; i < argc; i++) { int len; const char *arg = Jim_GetString(argv[i], &len); if (i > 1) { Jim_AppendString(interp, cmdlineObj, " ", 1); } if (strpbrk(arg, "\\\" ") == NULL) { /* No quoting required */ Jim_AppendString(interp, cmdlineObj, arg, len); continue; } Jim_AppendString(interp, cmdlineObj, "\"", 1); for (j = 0; j < len; j++) { if (arg[j] == '\\' || arg[j] == '"') { Jim_AppendString(interp, cmdlineObj, "\\", 1); } Jim_AppendString(interp, cmdlineObj, &arg[j], 1); } Jim_AppendString(interp, cmdlineObj, "\"", 1); } rc = system(Jim_String(cmdlineObj)); Jim_FreeNewObj(interp, cmdlineObj); if (rc) { Jim_Obj *errorCode = Jim_NewListObj(interp, NULL, 0); Jim_ListAppendElement(interp, errorCode, Jim_NewStringObj(interp, "CHILDSTATUS", -1)); Jim_ListAppendElement(interp, errorCode, Jim_NewIntObj(interp, 0)); Jim_ListAppendElement(interp, errorCode, Jim_NewIntObj(interp, rc)); Jim_SetGlobalVariableStr(interp, "errorCode", errorCode); return JIM_ERR; } return JIM_OK; } int Jim_execInit(Jim_Interp *interp) { Jim_PackageProvideCheck(interp, "exec"); Jim_RegisterSimpleCmd(interp, "exec", "arg ?arg ...? ?&?", 1, -1, Jim_ExecCmd); return JIM_OK; } #else /* Full exec implementation for unix and mingw */ #include #include #include "jim-signal.h" #include "jimiocompat.h" #include struct WaitInfoTable; static char **JimOriginalEnviron(void); static char **JimSaveEnv(char **env); static void JimRestoreEnv(char **env); static int JimCreatePipeline(Jim_Interp *interp, int argc, Jim_Obj *const *argv, phandle_t **pidArrayPtr, int *outPipePtr, int *errFilePtr); static void JimDetachPids(struct WaitInfoTable *table, int numPids, const phandle_t *pidPtr); static int JimCleanupChildren(Jim_Interp *interp, int numPids, phandle_t *pidPtr, Jim_Obj *errStrObj); static int Jim_WaitCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv); #if defined(__MINGW32__) static phandle_t JimStartWinProcess(Jim_Interp *interp, char **argv, char **env, int inputId, int outputId, int errorId); #endif /* * If the last character of 'objPtr' is a newline, then remove * the newline character. */ static void Jim_RemoveTrailingNewline(Jim_Obj *objPtr) { int len; const char *s = Jim_GetString(objPtr, &len); if (len > 0 && s[len - 1] == '\n') { objPtr->length--; objPtr->bytes[objPtr->length] = '\0'; } } /** * Read from 'fd', append the data to strObj and close 'fd'. * Returns 1 if data was added, 0 if not, or -1 on error. */ static int JimAppendStreamToString(Jim_Interp *interp, int fd, Jim_Obj *strObj) { char buf[256]; int ret = 0; while (1) { int retval = read(fd, buf, sizeof(buf)); if (retval > 0) { ret = 1; Jim_AppendString(interp, strObj, buf, retval); } if (retval <= 0) { break; } } close(fd); return ret; } /** * Builds the environment array from $::env * * If $::env is not set, simply returns environ. * * Otherwise allocates the environ array from the contents of $::env * * If the exec fails, memory can be freed via JimFreeEnv() */ static char **JimBuildEnv(Jim_Interp *interp) { int i; int size; int num; int n; char **envptr; char *envdata; Jim_Obj *objPtr = Jim_GetGlobalVariableStr(interp, "env", JIM_NONE); if (!objPtr) { return JimOriginalEnviron(); } /* We build the array as a single block consisting of the pointers followed by * the strings. This has the advantage of being easy to allocate/free and being * compatible with both unix and windows */ /* Calculate the required size */ num = Jim_ListLength(interp, objPtr); if (num % 2) { /* Silently drop the last element if not a valid dictionary */ num--; } /* We need one \0 and one equal sign for each element. * A list has at least one space for each element except the first. * We need one extra char for the extra null terminator and one for the equal sign. */ size = Jim_Length(objPtr) + 2; envptr = Jim_Alloc(sizeof(*envptr) * (num / 2 + 1) + size); envdata = (char *)&envptr[num / 2 + 1]; n = 0; for (i = 0; i < num; i += 2) { const char *s1, *s2; Jim_Obj *elemObj; Jim_ListIndex(interp, objPtr, i, &elemObj, JIM_NONE); s1 = Jim_String(elemObj); Jim_ListIndex(interp, objPtr, i + 1, &elemObj, JIM_NONE); s2 = Jim_String(elemObj); envptr[n] = envdata; envdata += sprintf(envdata, "%s=%s", s1, s2); envdata++; n++; } envptr[n] = NULL; *envdata = 0; return envptr; } /** * Frees the environment allocated by JimBuildEnv() * * Must pass original_environ. */ static void JimFreeEnv(char **env, char **original_environ) { if (env != original_environ) { Jim_Free(env); } } static Jim_Obj *JimMakeErrorCode(Jim_Interp *interp, long pid, int waitStatus, Jim_Obj *errStrObj) { Jim_Obj *errorCode = Jim_NewListObj(interp, NULL, 0); if (pid <= 0) { Jim_ListAppendElement(interp, errorCode, Jim_NewStringObj(interp, "NONE", -1)); Jim_ListAppendElement(interp, errorCode, Jim_NewIntObj(interp, pid)); Jim_ListAppendElement(interp, errorCode, Jim_NewIntObj(interp, -1)); } else if (WIFEXITED(waitStatus)) { Jim_ListAppendElement(interp, errorCode, Jim_NewStringObj(interp, "CHILDSTATUS", -1)); Jim_ListAppendElement(interp, errorCode, Jim_NewIntObj(interp, pid)); Jim_ListAppendElement(interp, errorCode, Jim_NewIntObj(interp, WEXITSTATUS(waitStatus))); } else { const char *type; const char *action; const char *signame; if (WIFSIGNALED(waitStatus)) { type = "CHILDKILLED"; action = "killed"; signame = Jim_SignalId(WTERMSIG(waitStatus)); } else { type = "CHILDSUSP"; action = "suspended"; signame = "none"; } Jim_ListAppendElement(interp, errorCode, Jim_NewStringObj(interp, type, -1)); if (errStrObj) { /* Append the message to 'errStrObj' with a newline. * The last newline will be stripped later */ Jim_AppendStrings(interp, errStrObj, "child ", action, " by signal ", Jim_SignalId(WTERMSIG(waitStatus)), "\n", NULL); } Jim_ListAppendElement(interp, errorCode, Jim_NewIntObj(interp, pid)); Jim_ListAppendElement(interp, errorCode, Jim_NewStringObj(interp, signame, -1)); } return errorCode; } /* * Create and store an appropriate value for the global variable $::errorCode * Based on pid and waitStatus. * * Returns JIM_OK for a normal exit with code 0, otherwise returns JIM_ERR. * * Note that $::errorCode is left unchanged for a normal exit. * Details of any abnormal exit is appended to the errStrObj, unless it is NULL. */ static int JimCheckWaitStatus(Jim_Interp *interp, long pid, int waitStatus, Jim_Obj *errStrObj) { if (WIFEXITED(waitStatus) && WEXITSTATUS(waitStatus) == 0) { return JIM_OK; } Jim_SetGlobalVariableStr(interp, "errorCode", JimMakeErrorCode(interp, pid, waitStatus, errStrObj)); return JIM_ERR; } /* * Data structures of the following type are used by exec and * wait to keep track of child processes. */ struct WaitInfo { phandle_t phandle; /* Process handle (pid on Unix) of child. */ int status; /* Status returned when child exited or suspended. */ int flags; /* Various flag bits; see below for definitions. */ }; /* This table is shared by exec and wait */ struct WaitInfoTable { struct WaitInfo *info; /* Table of outstanding processes */ int size; /* Size of the allocated table */ int used; /* Number of entries in use */ int refcount; /* Free the table once the refcount drops to 0 */ }; /* * Flag bits in WaitInfo structures: * * WI_DETACHED - Non-zero means no-one cares about the * process anymore. Ignore it until it * exits, then forget about it. */ #define WI_DETACHED 2 #define WAIT_TABLE_GROW_BY 4 static void JimFreeWaitInfoTable(struct Jim_Interp *interp, void *privData) { struct WaitInfoTable *table = privData; if (--table->refcount == 0) { Jim_Free(table->info); Jim_Free(table); } } static struct WaitInfoTable *JimAllocWaitInfoTable(void) { struct WaitInfoTable *table = Jim_Alloc(sizeof(*table)); table->info = NULL; table->size = table->used = 0; table->refcount = 0; return table; } /** * Removes the given pid from the wait table. * * Returns 0 if OK or -1 if not found. */ static int JimWaitRemove(struct WaitInfoTable *table, phandle_t phandle) { int i; /* Find it in the table */ for (i = 0; i < table->used; i++) { if (phandle == table->info[i].phandle) { if (i != table->used - 1) { table->info[i] = table->info[table->used - 1]; } table->used--; return 0; } } return -1; } /* * The main [exec] command */ static int Jim_ExecCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int outputId; /* File id for output pipe. -1 means command overrode. */ int errorId; /* File id for temporary file containing error output. */ phandle_t *pidPtr; int numPids, result; int child_siginfo = 1; Jim_Obj *childErrObj; Jim_Obj *errStrObj; struct WaitInfoTable *table = Jim_CmdPrivData(interp); /* * See if the command is to be run in the background; if so, create * the command, detach it, and return. */ if (argc > 1 && Jim_CompareStringImmediate(interp, argv[argc - 1], "&")) { Jim_Obj *listObj; int i; argc--; numPids = JimCreatePipeline(interp, argc - 1, argv + 1, &pidPtr, NULL, NULL); if (numPids < 0) { return JIM_ERR; } /* The return value is a list of the pids */ listObj = Jim_NewListObj(interp, NULL, 0); for (i = 0; i < numPids; i++) { Jim_ListAppendElement(interp, listObj, Jim_NewIntObj(interp, JimProcessPid(pidPtr[i]))); } Jim_SetResult(interp, listObj); JimDetachPids(table, numPids, pidPtr); Jim_Free(pidPtr); return JIM_OK; } /* * Create the command's pipeline. */ numPids = JimCreatePipeline(interp, argc - 1, argv + 1, &pidPtr, &outputId, &errorId); if (numPids < 0) { return JIM_ERR; } result = JIM_OK; errStrObj = Jim_NewStringObj(interp, "", 0); /* Read from the output pipe until EOF */ if (outputId != -1) { if (JimAppendStreamToString(interp, outputId, errStrObj) < 0) { result = JIM_ERR; Jim_SetResultErrno(interp, "error reading from output pipe"); } } /* Now wait for children to finish. Any abnormal results are appended to childErrObj */ childErrObj = Jim_NewStringObj(interp, "", 0); Jim_IncrRefCount(childErrObj); if (JimCleanupChildren(interp, numPids, pidPtr, childErrObj) != JIM_OK) { result = JIM_ERR; } /* * Read the child's error output (if any) and put it into the result. * * Note that unlike Tcl, the presence of stderr output does not cause * exec to return an error. */ if (errorId != -1) { int ret; Jim_Lseek(errorId, 0, SEEK_SET); ret = JimAppendStreamToString(interp, errorId, errStrObj); if (ret < 0) { Jim_SetResultErrno(interp, "error reading from error pipe"); result = JIM_ERR; } else if (ret > 0) { /* Got some error output, so discard the abnormal info string */ child_siginfo = 0; } } if (child_siginfo) { /* Append the child siginfo to the result */ Jim_AppendObj(interp, errStrObj, childErrObj); } Jim_DecrRefCount(interp, childErrObj); /* Finally remove any trailing newline from the result */ Jim_RemoveTrailingNewline(errStrObj); /* Set this as the result */ Jim_SetResult(interp, errStrObj); return result; } /** * Does waitpid() on the given process, and then removes the * entry from the wait table. * * Returns the pid of the process if OK and updates *statusPtr with the status, * or -1 if the process was not in the table. */ static long JimWaitForProcess(struct WaitInfoTable *table, phandle_t phandle, int *statusPtr) { if (JimWaitRemove(table, phandle) == 0) { /* wait for it */ return waitpid(phandle, statusPtr, 0); } /* Not found */ return -1; } /** * Indicates that one or more child processes have been placed in * background and are no longer cared about. * These children can be cleaned up with JimReapDetachedPids(). */ static void JimDetachPids(struct WaitInfoTable *table, int numPids, const phandle_t *pidPtr) { int j; for (j = 0; j < numPids; j++) { /* Find it in the table */ int i; for (i = 0; i < table->used; i++) { if (pidPtr[j] == table->info[i].phandle) { table->info[i].flags |= WI_DETACHED; break; } } } } /* Use 'name getfd' to get the file descriptor associated with channel 'name' * and dup() the resulting file descriptor. * Returns the file descriptor or -1 on error */ static int JimGetChannelFd(Jim_Interp *interp, const char *name) { Jim_Obj *objv[2]; objv[0] = Jim_NewStringObj(interp, name, -1); objv[1] = Jim_NewStringObj(interp, "getfd", -1); if (Jim_EvalObjVector(interp, 2, objv) == JIM_OK) { jim_wide fd; if (Jim_GetWide(interp, Jim_GetResult(interp), &fd) == JIM_OK) { return dup(fd); } } return -1; } static void JimReapDetachedPids(struct WaitInfoTable *table) { struct WaitInfo *waitPtr; int count; int dest; if (!table) { return; } waitPtr = table->info; dest = 0; for (count = table->used; count > 0; waitPtr++, count--) { if (waitPtr->flags & WI_DETACHED) { int status; long pid = waitpid(waitPtr->phandle, &status, WNOHANG); if (pid > 0) { /* Process has exited, so remove it from the table */ table->used--; continue; } } if (waitPtr != &table->info[dest]) { table->info[dest] = *waitPtr; } dest++; } } /* * wait ?-nohang? ?pid? * * An interface to waitpid(2) * * Returns a 3 element list. * * If the process has not exited or doesn't exist, returns: * * {NONE x x} * * If the process exited normally, returns: * * {CHILDSTATUS } * * If the process terminated on a signal, returns: * * {CHILDKILLED } * * Otherwise (core dump, stopped, continued, ...), returns: * * {CHILDSUSP none} * * With no arguments, reaps any finished background processes started by exec ... & */ static int Jim_WaitCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { struct WaitInfoTable *table = Jim_CmdPrivData(interp); int nohang = 0; long pid; phandle_t phandle; int status; Jim_Obj *errCodeObj; /* With no arguments, reap detached children */ if (argc == 1) { JimReapDetachedPids(table); return JIM_OK; } if (argc > 1 && Jim_CompareStringImmediate(interp, argv[1], "-nohang")) { nohang = 1; } if (argc != nohang + 2) { return JIM_USAGE; } if (Jim_GetLong(interp, argv[nohang + 1], &pid) != JIM_OK) { return JIM_ERR; } /* On Windows a processId is passed here, but a process handle is needed for waitpid */ phandle = JimWaitPid(pid, &status, nohang ? WNOHANG : 0); if (phandle == JIM_BAD_PHANDLE) { pid = -1; } #ifndef __MINGW32__ else if (pid < 0) { /* This catches the case where pid=-1. It is only supported on unix where * the returned phandle is a pid, so can simply assign here */ pid = phandle; } else if (phandle == 0) { /* Child still running */ pid = 0; } #endif errCodeObj = JimMakeErrorCode(interp, pid, status, NULL); if (phandle != JIM_BAD_PHANDLE && (WIFEXITED(status) || WIFSIGNALED(status))) { /* The process has finished. Remove it from the wait table if it exists there */ JimWaitRemove(table, phandle); } Jim_SetResult(interp, errCodeObj); return JIM_OK; } static int Jim_PidCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_SetResultInt(interp, (jim_wide)getpid()); return JIM_OK; } #define JIM_ETT_IN 0x0001 /* < */ #define JIM_ETT_OUT 0x0002 /* > */ #define JIM_ETT_ERR 0x0004 /* 2> */ #define JIM_ETT_PIPE 0x0008 /* | */ #define JIM_ETT_NOARG 0x0010 /* does not accept an additional argument */ #define JIM_ETT_APPEND 0x0020 /* append to output */ #define JIM_ETT_STR 0x0040 /* arg is a literal */ #define JIM_ETT_DUPERR 0x0080 /* dup output to err */ #define JIM_ETT_HANDLE 0x0100 /* arg is a filehandle */ #define JIM_ETT_CMD 0xF000 #define JIM_ETT_BAD 0xF001 struct redir_type_t { const char *prefix; unsigned flags; }; /* These need to be sorted by length, most specific first */ static const struct redir_type_t redir_types[] = { { "<<@", JIM_ETT_IN | JIM_ETT_HANDLE | JIM_ETT_STR }, { "<<", JIM_ETT_IN | JIM_ETT_STR }, { "<@", JIM_ETT_IN | JIM_ETT_HANDLE }, { "<", JIM_ETT_IN }, { "2>>", JIM_ETT_ERR | JIM_ETT_APPEND }, { "2>@", JIM_ETT_ERR | JIM_ETT_HANDLE }, { "2>", JIM_ETT_ERR }, { ">>&", JIM_ETT_OUT | JIM_ETT_APPEND | JIM_ETT_DUPERR }, { ">>", JIM_ETT_OUT | JIM_ETT_APPEND }, { ">&@", JIM_ETT_OUT | JIM_ETT_HANDLE | JIM_ETT_DUPERR }, { ">@", JIM_ETT_OUT | JIM_ETT_HANDLE }, { ">&", JIM_ETT_OUT | JIM_ETT_DUPERR }, { ">", JIM_ETT_OUT }, { "|&", JIM_ETT_PIPE | JIM_ETT_DUPERR }, { "|", JIM_ETT_PIPE }, { NULL } }; static unsigned JimExecClassifyArg(const char *arg) { int i; for (i = 0; redir_types[i].prefix; i++) { int len = strlen(redir_types[i].prefix); if (strncmp(arg, redir_types[i].prefix, len) == 0) { if (strlen(arg) > len) { if (redir_types[i].flags & JIM_ETT_NOARG) { /* error - no arg expected */ return JIM_ETT_BAD; } return redir_types[i].flags; } /* Token doesn't contain an arg */ return redir_types[i].flags | JIM_ETT_NOARG; } } return JIM_ETT_CMD; } /** * Parses the exec pipeline in TIP424 format into two lists, cmdList and redirectList. * (These must start as empty lists) * * Returns JIM_OK if ok or JIM_ERR on error. */ static int JimParsePipeline(Jim_Interp *interp, int argc, Jim_Obj *const *argv, Jim_Obj *cmdList, Jim_Obj *redirectList) { int i; /* Add an initial empty commandlist */ int first = 1; const char *arg = NULL; for (i = 0; i < argc; i++) { unsigned ett; if (first) { if (Jim_ListLength(interp, argv[i]) == 0) { Jim_SetResultString(interp, "empty command list", -1); return JIM_ERR; } Jim_ListAppendElement(interp, cmdList, argv[i]); first = 0; continue; } /* Remaining items should be redirections or | */ arg = Jim_String(argv[i]); ett = JimExecClassifyArg(arg); if (ett == JIM_ETT_BAD || ett == JIM_ETT_CMD) { Jim_SetResultFormatted(interp, "invalid redirection %s", arg); return JIM_ERR; } if (ett & JIM_ETT_PIPE) { Jim_ListAppendElement(interp, cmdList, argv[i]); first = 1; continue; } Jim_ListAppendElement(interp, redirectList, argv[i]); if ((ett & JIM_ETT_NOARG)) { /* This means we need an arg */ if (i >= argc - 1) { /* This is an error */ Jim_SetResultFormatted(interp, "can't specify \"%#s\" as last word in command", argv[i]); return -1; } i++; Jim_ListAppendElement(interp, redirectList, argv[i]); } } if (first) { if (Jim_ListLength(interp, cmdList)) { Jim_SetResultFormatted(interp, "cmdlist required after %s", arg); } else { Jim_SetResultString(interp, "cmdlist is required", -1); } return JIM_ERR; } return JIM_OK; } /** * Parses the exec pipeline in legacy format into two lists, cmdList and redirectList. * (These must start as empty lists) * * cmdList contains a list of {cmdlist ?sep cmdlist ...? } * i.e. pairs of cmdlist (a list of {command arg...}) and a separator: | or |& * with the separator missing after the last command list. * * Returns JIM_OK if ok or JIM_ERR on error. */ static int JimParsePipelineLegacy(Jim_Interp *interp, int argc, Jim_Obj *const *argv, Jim_Obj *cmdList, Jim_Obj *redirectList) { int i; /* Add an initial empty commandlist */ Jim_Obj *cmdObj = Jim_NewListObj(interp, NULL, 0); Jim_ListAppendElement(interp, cmdList, cmdObj); const char *arg = NULL; for (i = 0; i < argc; i++) { arg = Jim_String(argv[i]); unsigned ett = JimExecClassifyArg(arg); if (ett == JIM_ETT_BAD) { Jim_SetResultFormatted(interp, "invalid: %s", arg); return JIM_ERR; } if (ett == JIM_ETT_CMD) { /* Add to the current command */ Jim_ListAppendElement(interp, cmdObj, argv[i]); continue; } if (ett & JIM_ETT_PIPE) { if (Jim_ListLength(interp, cmdObj) == 0) { goto missing_cmd; } /* Add this separator */ Jim_ListAppendElement(interp, cmdList, argv[i]); /* Now start a new command list */ cmdObj = Jim_NewListObj(interp, NULL, 0); Jim_ListAppendElement(interp, cmdList, cmdObj); continue; } Jim_ListAppendElement(interp, redirectList, argv[i]); if ((ett & JIM_ETT_NOARG)) { /* This means we need an arg */ if (i >= argc - 1) { /* This is an error */ Jim_SetResultFormatted(interp, "can't specify \"%#s\" as last word in command", argv[i]); return -1; } i++; Jim_ListAppendElement(interp, redirectList, argv[i]); } } if (Jim_ListLength(interp, cmdObj) == 0) { missing_cmd: if (arg && *arg == '|') { Jim_SetResultString(interp, "illegal use of | or |& in command", -1); } else { Jim_SetResultString(interp, "didn't specify command to execute", -1); } return JIM_ERR; } return JIM_OK; } static int JimExecPipeline(Jim_Interp *interp, Jim_Obj *cmdList, Jim_Obj *redirectList, phandle_t **pidArrayPtr, int *outPipePtr, int *errFilePtr) { phandle_t *pidPtr = NULL; /* Points to alloc-ed array holding all * the pids of child processes. */ int numPids = 0; /* Actual number of processes that exist * at *pidPtr right now. */ int cmdCount; /* Count of number of distinct commands * found in argc/argv. */ const char *input = NULL; /* Describes input for pipeline, depending * on "inputFile". NULL means take input * from stdin/pipe. */ int input_len = 0; /* Length of input, if relevant */ #define FILE_NAME 0 /* input/output: filename or @filehandle */ #define FILE_APPEND 1 /* output only: filename, append */ #define FILE_HANDLE 2 /* input/output: @ filehandle */ #define FILE_TEXT 3 /* input only: input is actual text */ int inputFile = FILE_NAME; /* 1 means input is name of input file. * 2 means input is filehandle name. * 0 means input holds actual * text to be input to command. */ int outputFile = FILE_NAME; /* 0 means output is the name of output file. * 1 means output is the name of output file, and append. * 2 means output is filehandle name. * All this is ignored if output is NULL */ int errorFile = FILE_NAME; /* 0 means error is the name of error file. * 1 means error is the name of error file, and append. * 2 means error is filehandle name. * All this is ignored if error is NULL */ const char *output = NULL; /* Holds name of output file to pipe to, * or NULL if output goes to stdout/pipe. */ const char *error = NULL; /* Holds name of stderr file to pipe to, * or NULL if stderr goes to stderr/pipe. */ int inputId = -1; /* Readable file id input to current command in * pipeline (could be file or pipe). -1 * means use stdin. */ int outputId = -1; /* Writable file id for output from current * command in pipeline (could be file or pipe). * -1 means use stdout. */ int errorId = -1; /* Writable file id for all standard error * output from all commands in pipeline. -1 * means use stderr. */ int lastOutputId = -1; /* Write file id for output from last command * in pipeline (could be file or pipe). * -1 means use stdout. */ int pipeIds[2]; /* File ids for pipe that's being created. */ int i; phandle_t phandle; char **save_environ; #if defined(HAVE_EXECVPE) && !defined(__MINGW32__) char **child_environ; #endif struct WaitInfoTable *table = Jim_CmdPrivData(interp); if (outPipePtr != NULL) { *outPipePtr = -1; } if (errFilePtr != NULL) { *errFilePtr = -1; } pipeIds[0] = pipeIds[1] = -1; /* Now interpet the redirection list */ int redir_len = Jim_ListLength(interp, redirectList); for (i = 0; i < redir_len; i++) { int len; int item_len; Jim_Obj *redirObj = Jim_ListGetIndex(interp, redirectList, i); const char *arg = Jim_GetString(redirObj, &len); unsigned ett = JimExecClassifyArg(arg); const char *item; int type = FILE_NAME; if ((ett & JIM_ETT_NOARG) == 0) { /* No separate arg. Need to skip over the appropriate number or redirection chars */ item = arg + 1; if (ett & JIM_ETT_HANDLE) { item++; } if (ett & JIM_ETT_APPEND) { item++; } if (ett & JIM_ETT_DUPERR) { item++; } if (ett & JIM_ETT_ERR) { item++; } if (ett & JIM_ETT_STR) { type = FILE_TEXT; item++; } item_len = len - (item - arg); } else { /* separate arg, so fetch it */ i++; item = Jim_GetString(Jim_ListGetIndex(interp, redirectList, i), &item_len); } /* Figure out the type */ if (ett & JIM_ETT_HANDLE) { type = FILE_HANDLE; } if (ett & JIM_ETT_APPEND) { type = FILE_APPEND; } if (ett & JIM_ETT_STR) { type = FILE_TEXT; } if (ett & JIM_ETT_IN) { input = item; input_len = item_len; inputFile = type; } else if (ett & JIM_ETT_OUT) { output = item; outputFile = type; if (ett & JIM_ETT_DUPERR) { error = output; errorFile = outputFile; } } else if (ett & JIM_ETT_ERR) { error = item; errorFile = type; } } /* Must do this before vfork(), so do it now */ save_environ = JimSaveEnv(JimBuildEnv(interp)); /* * Set up the redirected input source for the pipeline, if * so requested. */ if (input != NULL) { if (inputFile == FILE_TEXT) { /* * Immediate data in command. Create temporary file and * put data into file. */ inputId = Jim_MakeTempFile(interp, NULL, 1); if (inputId == -1) { goto error; } if (write(inputId, input, input_len) != input_len) { Jim_SetResultErrno(interp, "couldn't write temp file"); close(inputId); goto error; } Jim_Lseek(inputId, 0L, SEEK_SET); } else if (inputFile == FILE_HANDLE) { inputId = JimGetChannelFd(interp, input); if (inputId < 0) { goto error; } } else { /* * File redirection. Just open the file. */ inputId = Jim_OpenForRead(input); if (inputId == -1) { Jim_SetResultFormatted(interp, "couldn't read file \"%s\": %s", input, strerror(Jim_Errno())); goto error; } } } /* * Set up the redirected output sink for the pipeline from one * of two places, if requested. */ if (output != NULL) { if (outputFile == FILE_HANDLE) { lastOutputId = JimGetChannelFd(interp, output); if (lastOutputId < 0) { goto error; } } else { /* * Output is to go to a file. */ lastOutputId = Jim_OpenForWrite(output, outputFile == FILE_APPEND); if (lastOutputId == -1) { Jim_SetResultFormatted(interp, "couldn't write file \"%s\": %s", output, strerror(Jim_Errno())); goto error; } } } else if (outPipePtr != NULL) { /* * Output is to go to a pipe. */ if (pipe(pipeIds) != 0) { Jim_SetResultErrno(interp, "couldn't create output pipe"); goto error; } lastOutputId = pipeIds[1]; *outPipePtr = pipeIds[0]; pipeIds[0] = pipeIds[1] = -1; } /* If we are redirecting stderr with 2>filename or 2>@fileId, then we ignore errFilePtr */ if (error != NULL) { if (errorFile == FILE_HANDLE) { if (strcmp(error, "1") == 0) { /* Special 2>@1 so stderr goes to the pipe output too */ if (lastOutputId != -1) { errorId = dup(lastOutputId); } else { /* No redirection of stdout, so just use 2>@stdout */ error = "stdout"; } } if (errorId == -1) { errorId = JimGetChannelFd(interp, error); if (errorId < 0) { goto error; } } } else { /* * Output is to go to a file. */ errorId = Jim_OpenForWrite(error, errorFile == FILE_APPEND); if (errorId == -1) { Jim_SetResultFormatted(interp, "couldn't write file \"%s\": %s", error, strerror(Jim_Errno())); goto error; } } } else if (errFilePtr != NULL) { /* * Set up the standard error output sink for the pipeline, if * requested. Use a temporary file which is opened, then deleted. * Could potentially just use pipe, but if it filled up it could * cause the pipeline to deadlock: we'd be waiting for processes * to complete before reading stderr, and processes couldn't complete * because stderr was backed up. */ errorId = Jim_MakeTempFile(interp, NULL, 1); if (errorId == -1) { goto error; } *errFilePtr = dup(errorId); } /* * Iterate over cmdList, forking off a process for each * cmdlist */ int cmd_list_size = Jim_ListLength(interp, cmdList); cmdCount = (cmd_list_size + 1) / 2; pidPtr = Jim_Alloc(cmdCount * sizeof(*pidPtr)); for (i = 0; i < cmd_list_size; ) { char **arg_array; int j; int origErrorId = errorId; Jim_Obj *cmdObj = Jim_ListGetIndex(interp, cmdList, i++); int cmd_len = Jim_ListLength(interp, cmdObj); Jim_Obj *sepObj = NULL; if (i < cmd_list_size - 1) { sepObj = Jim_ListGetIndex(interp, cmdList, i++); } /* Build exec array */ arg_array = Jim_Alloc((cmd_len + 1) * sizeof(*arg_array)); for (j = 0; j < cmd_len; j++) { arg_array[j] = (char *)Jim_String(Jim_ListGetIndex(interp, cmdObj, j)); } arg_array[j] = NULL; if (sepObj == NULL) { outputId = lastOutputId; lastOutputId = -1; } else { if (pipe(pipeIds) != 0) { Jim_SetResultErrno(interp, "couldn't create pipe"); Jim_Free(arg_array); goto error; } outputId = pipeIds[1]; } /* Need to do this before vfork() */ if (sepObj && Jim_CompareStringImmediate(interp, sepObj, "|&")) { errorId = outputId; } /* Now fork the child */ #ifdef __MINGW32__ phandle = JimStartWinProcess(interp, &arg_array[0], save_environ, inputId, outputId, errorId); if (phandle == JIM_BAD_PHANDLE) { Jim_SetResultFormatted(interp, "couldn't exec \"%s\"", arg_array[0]); goto error; } #else int argv0_len = strlen(arg_array[0]); #ifdef HAVE_EXECVPE child_environ = Jim_GetEnviron(); #endif /* * Make a new process and enter it into the table if the vfork * is successful. */ #ifdef HAVE_VFORK phandle = vfork(); #else phandle = fork(); #endif if (phandle < 0) { Jim_SetResultErrno(interp, "couldn't fork child process"); goto error; } if (phandle == 0) { /* Child */ /* Set up stdin, stdout, stderr */ if (inputId != -1 && inputId != fileno(stdin)) { dup2(inputId, fileno(stdin)); close(inputId); } if (outputId != -1 && outputId != fileno(stdout)) { dup2(outputId, fileno(stdout)); if (outputId != errorId) { close(outputId); } } if (errorId != -1 && errorId != fileno(stderr)) { dup2(errorId, fileno(stderr)); close(errorId); } /* Close parent-only file descriptors */ if (outPipePtr && *outPipePtr != -1) { close(*outPipePtr); } if (errFilePtr && *errFilePtr != -1) { close(*errFilePtr); } if (pipeIds[0] != -1) { close(pipeIds[0]); } if (lastOutputId != -1) { close(lastOutputId); } execvpe(arg_array[0], arg_array, child_environ); if (write(fileno(stderr), "couldn't exec \"", 15) && write(fileno(stderr), arg_array[0], argv0_len) && write(fileno(stderr), "\"\n", 2)) { /* nothing */ } #ifdef JIM_MAINTAINER { /* Keep valgrind happy */ static char *const false_argv[2] = {"false", NULL}; execvp(false_argv[0],false_argv); } #endif _exit(127); } #endif /* parent */ Jim_Free(arg_array); /* * Enlarge the wait table if there isn't enough space for a new * entry. */ if (table->used == table->size) { table->size += WAIT_TABLE_GROW_BY; table->info = Jim_Realloc(table->info, table->size * sizeof(*table->info)); } table->info[table->used].phandle = phandle; table->info[table->used].flags = 0; table->used++; pidPtr[numPids++] = phandle; /* Restore in case of pipe_dup_err */ errorId = origErrorId; /* * Close off our copies of file descriptors that were set up for * this child, then set up the input for the next child. */ if (inputId != -1) { close(inputId); } if (outputId != -1) { close(outputId); } inputId = pipeIds[0]; pipeIds[0] = pipeIds[1] = -1; } *pidArrayPtr = pidPtr; /* * All done. Cleanup open files lying around and then return. */ cleanup: if (inputId != -1) { close(inputId); } if (lastOutputId != -1) { close(lastOutputId); } if (errorId != -1) { close(errorId); } JimRestoreEnv(save_environ); return numPids; /* * An error occurred. There could have been extra files open, such * as pipes between children. Clean them all up. Detach any child * processes that have been created. */ error: if ((outPipePtr != NULL) && (*outPipePtr != -1)) { close(*outPipePtr); *outPipePtr = -1; } if ((errFilePtr != NULL) && (*errFilePtr != -1)) { close(*errFilePtr); *errFilePtr = -1; } if (pipeIds[0] != -1) { close(pipeIds[0]); } if (pipeIds[1] != -1) { close(pipeIds[1]); } if (pidPtr != NULL) { for (i = 0; i < numPids; i++) { if (pidPtr[i] != JIM_BAD_PHANDLE) { JimDetachPids(table, 1, &pidPtr[i]); } } Jim_Free(pidPtr); } numPids = -1; goto cleanup; } /* *---------------------------------------------------------------------- * * JimCreatePipeline -- * * Given an argc/argv array, instantiate a pipeline of processes * as described by the argv. * * Results: * The return value is a count of the number of new processes * created, or -1 if an error occurred while creating the pipeline. * *pidArrayPtr is filled in with the address of a dynamically * allocated array giving the ids of all of the processes. It * is up to the caller to free this array when it isn't needed * anymore. If outPipePtr * isn't NULL, then *outPipePtr is filled in with the file id * for the output pipe from the pipeline: the caller must close * this file. If errFilePtr isn't NULL, then *errFilePtr is filled * with a file id that may be used to read error output after the * pipeline completes. * * Side effects: * Processes and pipes are created. * *---------------------------------------------------------------------- */ static int JimCreatePipeline(Jim_Interp *interp, int argc, Jim_Obj *const *argv, phandle_t **pidArrayPtr, int *outPipePtr, int *errFilePtr) { int rc = -1; int ret; Jim_Obj *cmdList = Jim_NewListObj(interp, NULL, 0); Jim_Obj *redirectList = Jim_NewListObj(interp, NULL, 0); Jim_IncrRefCount(cmdList); Jim_IncrRefCount(redirectList); if (argc > 1 && Jim_CompareStringImmediate(interp, argv[0], "|")) { /* TIP424 exec format */ ret = JimParsePipeline(interp, argc - 1, argv + 1, cmdList, redirectList); } else { /* legacy exec format */ ret = JimParsePipelineLegacy(interp, argc, argv, cmdList, redirectList); } if (ret == JIM_OK) { /* OK, try to exec */ rc = JimExecPipeline(interp, cmdList, redirectList, pidArrayPtr, outPipePtr, errFilePtr); } Jim_DecrRefCount(interp, cmdList); Jim_DecrRefCount(interp, redirectList); return rc; } /* *---------------------------------------------------------------------- * * JimCleanupChildren -- * * This is a utility procedure used to wait for child processes * to exit, record information about abnormal exits. * * Results: * The return value is a standard Tcl result. If anything at * weird happened with the child processes, JIM_ERR is returned * and a structured message is left in $::errorCode. * If errStrObj is not NULL, abnormal exit details are appended to this object. * * Side effects: * pidPtr is freed * *---------------------------------------------------------------------- */ static int JimCleanupChildren(Jim_Interp *interp, int numPids, phandle_t *pidPtr, Jim_Obj *errStrObj) { struct WaitInfoTable *table = Jim_CmdPrivData(interp); int result = JIM_OK; int i; /* Now check the return status of each child */ for (i = 0; i < numPids; i++) { int waitStatus = 0; long pid = JimWaitForProcess(table, pidPtr[i], &waitStatus); if (pid > 0) { if (JimCheckWaitStatus(interp, pid, waitStatus, errStrObj) != JIM_OK) { result = JIM_ERR; } } } Jim_Free(pidPtr); return result; } int Jim_execInit(Jim_Interp *interp) { struct WaitInfoTable *waitinfo; Jim_PackageProvideCheck(interp, "exec"); waitinfo = JimAllocWaitInfoTable(); Jim_RegisterCmd(interp, "exec", "arg ?arg ...? ?&?", 1, -1, Jim_ExecCmd, JimFreeWaitInfoTable, waitinfo, JIM_CMD_NOTAINT); waitinfo->refcount++; Jim_RegisterCmd(interp, "wait", "?-nohang? ?pid?", 0, 2, Jim_WaitCommand, JimFreeWaitInfoTable, waitinfo, 0); waitinfo->refcount++; Jim_RegisterSimpleCmd(interp, "pid", "", 0, 0, Jim_PidCommand); return JIM_OK; } #if defined(__MINGW32__) /* Windows-specific (mingw) implementation */ static int JimWinFindExecutable(const char *originalName, char fullPath[MAX_PATH]) { int i; static char extensions[][5] = {".exe", "", ".bat"}; for (i = 0; i < (int) (sizeof(extensions) / sizeof(extensions[0])); i++) { snprintf(fullPath, MAX_PATH, "%s%s", originalName, extensions[i]); if (SearchPath(NULL, fullPath, NULL, MAX_PATH, fullPath, NULL) == 0) { continue; } if (GetFileAttributes(fullPath) & FILE_ATTRIBUTE_DIRECTORY) { continue; } return 0; } return -1; } static char **JimSaveEnv(char **env) { return env; } static void JimRestoreEnv(char **env) { JimFreeEnv(env, Jim_GetEnviron()); } static char **JimOriginalEnviron(void) { return NULL; } static Jim_Obj * JimWinBuildCommandLine(Jim_Interp *interp, char **argv) { char *start, *special; int quote, i; Jim_Obj *strObj = Jim_NewStringObj(interp, "", 0); for (i = 0; argv[i]; i++) { if (i > 0) { Jim_AppendString(interp, strObj, " ", 1); } if (argv[i][0] == '\0') { quote = 1; } else { quote = 0; for (start = argv[i]; *start != '\0'; start++) { if (isspace(UCHAR(*start))) { quote = 1; break; } } } if (quote) { Jim_AppendString(interp, strObj, "\"" , 1); } start = argv[i]; for (special = argv[i]; ; ) { if ((*special == '\\') && (special[1] == '\\' || special[1] == '"' || (quote && special[1] == '\0'))) { Jim_AppendString(interp, strObj, start, special - start); start = special; while (1) { special++; if (*special == '"' || (quote && *special == '\0')) { /* * N backslashes followed a quote -> insert * N * 2 + 1 backslashes then a quote. */ Jim_AppendString(interp, strObj, start, special - start); break; } if (*special != '\\') { break; } } Jim_AppendString(interp, strObj, start, special - start); start = special; } if (*special == '"') { if (special == start) { Jim_AppendString(interp, strObj, "\"", 1); } else { Jim_AppendString(interp, strObj, start, special - start); } Jim_AppendString(interp, strObj, "\\\"", 2); start = special + 1; } if (*special == '\0') { break; } special++; } Jim_AppendString(interp, strObj, start, special - start); if (quote) { Jim_AppendString(interp, strObj, "\"", 1); } } return strObj; } /** * Note that inputId, etc. are osf_handles. */ static phandle_t JimStartWinProcess(Jim_Interp *interp, char **argv, char **env, int inputId, int outputId, int errorId) { STARTUPINFO startInfo; PROCESS_INFORMATION procInfo; HANDLE hProcess; char execPath[MAX_PATH]; phandle_t phandle = INVALID_HANDLE_VALUE; Jim_Obj *cmdLineObj; char *winenv; if (JimWinFindExecutable(argv[0], execPath) < 0) { return phandle; } argv[0] = execPath; hProcess = GetCurrentProcess(); cmdLineObj = JimWinBuildCommandLine(interp, argv); /* * STARTF_USESTDHANDLES must be used to pass handles to child process. * Using SetStdHandle() and/or dup2() only works when a console mode * parent process is spawning an attached console mode child process. */ ZeroMemory(&startInfo, sizeof(startInfo)); startInfo.cb = sizeof(startInfo); startInfo.dwFlags = STARTF_USESTDHANDLES; startInfo.hStdInput = INVALID_HANDLE_VALUE; startInfo.hStdOutput= INVALID_HANDLE_VALUE; startInfo.hStdError = INVALID_HANDLE_VALUE; /* * Duplicate all the handles which will be passed off as stdin, stdout * and stderr of the child process. The duplicate handles are set to * be inheritable, so the child process can use them. */ /* * If stdin was not redirected, input should come from the parent's stdin */ if (inputId == -1) { inputId = _fileno(stdin); } DuplicateHandle(hProcess, (HANDLE)_get_osfhandle(inputId), hProcess, &startInfo.hStdInput, 0, TRUE, DUPLICATE_SAME_ACCESS); if (startInfo.hStdInput == INVALID_HANDLE_VALUE) { goto end; } /* * If stdout was not redirected, output should go to the parent's stdout */ if (outputId == -1) { outputId = _fileno(stdout); } DuplicateHandle(hProcess, (HANDLE)_get_osfhandle(outputId), hProcess, &startInfo.hStdOutput, 0, TRUE, DUPLICATE_SAME_ACCESS); if (startInfo.hStdOutput == INVALID_HANDLE_VALUE) { goto end; } /* Ditto stderr */ if (errorId == -1) { errorId = _fileno(stderr); } DuplicateHandle(hProcess, (HANDLE)_get_osfhandle(errorId), hProcess, &startInfo.hStdError, 0, TRUE, DUPLICATE_SAME_ACCESS); if (startInfo.hStdError == INVALID_HANDLE_VALUE) { goto end; } /* If env is NULL, use the original environment. * If env[0] is NULL, use an empty environment. * Otherwise use the environment starting at env[0] */ if (env == NULL) { /* Use the original environment */ winenv = NULL; } else if (env[0] == NULL) { winenv = (char *)"\0"; } else { winenv = env[0]; } if (!CreateProcess(NULL, (char *)Jim_String(cmdLineObj), NULL, NULL, TRUE, 0, winenv, NULL, &startInfo, &procInfo)) { goto end; } /* * "When an application spawns a process repeatedly, a new thread * instance will be created for each process but the previous * instances may not be cleaned up. This results in a significant * virtual memory loss each time the process is spawned. If there * is a WaitForInputIdle() call between CreateProcess() and * CloseHandle(), the problem does not occur." PSS ID Number: Q124121 */ WaitForInputIdle(procInfo.hProcess, 5000); CloseHandle(procInfo.hThread); phandle = procInfo.hProcess; end: Jim_FreeNewObj(interp, cmdLineObj); if (startInfo.hStdInput != INVALID_HANDLE_VALUE) { CloseHandle(startInfo.hStdInput); } if (startInfo.hStdOutput != INVALID_HANDLE_VALUE) { CloseHandle(startInfo.hStdOutput); } if (startInfo.hStdError != INVALID_HANDLE_VALUE) { CloseHandle(startInfo.hStdError); } return phandle; } #else static char **JimOriginalEnviron(void) { return Jim_GetEnviron(); } static char **JimSaveEnv(char **env) { char **saveenv = Jim_GetEnviron(); Jim_SetEnviron(env); return saveenv; } static void JimRestoreEnv(char **env) { JimFreeEnv(Jim_GetEnviron(), env); Jim_SetEnviron(env); } #endif #endif jimtcl-0.84/jim-file.c000066400000000000000000000733521522604140100145740ustar00rootroot00000000000000/* * Implements the file command for jim * * (c) 2008 Steve Bennett * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE JIM TCL PROJECT ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * JIM TCL PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * The views and conclusions contained in the software and documentation * are those of the authors and should not be interpreted as representing * official policies, either expressed or implied, of the Jim Tcl Project. * * Based on code originally from Tcl 6.7: * * Copyright 1987-1991 Regents of the University of California * Permission to use, copy, modify, and distribute this * software and its documentation for any purpose and without * fee is hereby granted, provided that the above copyright * notice appear in all copies. The University of California * makes no representations about the suitability of this * software for any purpose. It is provided "as is" without * express or implied warranty. */ #include #include #include #include #include #include #include #include #ifdef HAVE_UTIMES #include #endif #ifdef HAVE_UNISTD_H #include #elif defined(_MSC_VER) #include #define F_OK 0 #define W_OK 2 #define R_OK 4 #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) #endif #if defined(__MINGW32__) || defined(__MSYS__) || defined(_MSC_VER) #define ISWINDOWS 1 /* Even if we have symlink it isn't compatible enought to use */ #undef HAVE_SYMLINK #else #define ISWINDOWS 0 #endif /* extract nanosecond resolution mtime from struct stat */ #if defined(HAVE_STRUCT_STAT_ST_MTIMESPEC) #define STAT_MTIME_US(STAT) ((STAT).st_mtimespec.tv_sec * 1000000ll + (STAT).st_mtimespec.tv_nsec / 1000) #elif defined(HAVE_STRUCT_STAT_ST_MTIM) #define STAT_MTIME_US(STAT) ((STAT).st_mtim.tv_sec * 1000000ll + (STAT).st_mtim.tv_nsec / 1000) #endif /* On windows, convert backslashes to forward slashes (in place) in the null terminated path */ static void JimFixPath(char *path) { if (ISWINDOWS) { /* Try to keep backslashes out of paths */ char *p = path; while ((p = strchr(p, '\\')) != NULL) { *p++ = '/'; } } } /* *---------------------------------------------------------------------- * * JimGetFileType -- * * Given a mode word, returns a string identifying the type of a * file. * * Results: * A static text string giving the file type from mode. * * Side effects: * None. * *---------------------------------------------------------------------- */ static const char *JimGetFileType(int mode) { if (S_ISREG(mode)) { return "file"; } else if (S_ISDIR(mode)) { return "directory"; } #ifdef S_ISCHR else if (S_ISCHR(mode)) { return "characterSpecial"; } #endif #ifdef S_ISBLK else if (S_ISBLK(mode)) { return "blockSpecial"; } #endif #ifdef S_ISFIFO else if (S_ISFIFO(mode)) { return "fifo"; } #endif #ifdef S_ISLNK else if (S_ISLNK(mode)) { return "link"; } #endif #ifdef S_ISSOCK else if (S_ISSOCK(mode)) { return "socket"; } #endif return "unknown"; } /* *---------------------------------------------------------------------- * * Jim_FileStoreStatData -- * * This is a utility procedure that breaks out the fields of a * "stat" structure and stores them in textual form into the * elements of an associative array (dict). * The result is also returned as the Tcl result. * If varName is NULL, the result is only returned, not stored. * * Results: * Returns a standard Tcl return value. If an error occurs then * a message is left in interp->result. * * Side effects: * Elements of the associative array given by "varName" are modified. * *---------------------------------------------------------------------- */ static void AppendStatElement(Jim_Interp *interp, Jim_Obj *listObj, const char *key, jim_wide value) { Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, key, -1)); Jim_ListAppendElement(interp, listObj, Jim_NewIntObj(interp, value)); } int Jim_FileStoreStatData(Jim_Interp *interp, Jim_Obj *varName, const jim_stat_t *sb) { /* Just use a list to store the data */ Jim_Obj *listObj = Jim_NewListObj(interp, NULL, 0); AppendStatElement(interp, listObj, "dev", sb->st_dev); AppendStatElement(interp, listObj, "ino", sb->st_ino); AppendStatElement(interp, listObj, "mode", sb->st_mode); AppendStatElement(interp, listObj, "nlink", sb->st_nlink); AppendStatElement(interp, listObj, "uid", sb->st_uid); AppendStatElement(interp, listObj, "gid", sb->st_gid); AppendStatElement(interp, listObj, "size", sb->st_size); AppendStatElement(interp, listObj, "atime", sb->st_atime); AppendStatElement(interp, listObj, "mtime", sb->st_mtime); AppendStatElement(interp, listObj, "ctime", sb->st_ctime); #ifdef STAT_MTIME_US AppendStatElement(interp, listObj, "mtimeus", STAT_MTIME_US(*sb)); #endif Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, "type", -1)); Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, JimGetFileType((int)sb->st_mode), -1)); /* Was a variable specified? */ if (varName) { Jim_Obj *objPtr; objPtr = Jim_GetVariable(interp, varName, JIM_NONE); if (objPtr) { Jim_Obj *objv[2]; objv[0] = objPtr; objv[1] = listObj; objPtr = Jim_DictMerge(interp, 2, objv); if (objPtr == NULL) { /* This message matches the one from Tcl */ Jim_SetResultFormatted(interp, "can't set \"%#s(dev)\": variable isn't array", varName); Jim_FreeNewObj(interp, listObj); return JIM_ERR; } Jim_InvalidateStringRep(objPtr); Jim_FreeNewObj(interp, listObj); listObj = objPtr; } Jim_SetVariable(interp, varName, listObj); } /* And also return the value */ Jim_SetResult(interp, listObj); return JIM_OK; } /** * Give a path of length 'len', returns the length of the path * with any trailing slashes removed. */ static int JimPathLenNoTrailingSlashes(const char *path, int len) { int i; for (i = len; i > 1 && path[i - 1] == '/'; i--) { /* Trailing slash, so remove it */ if (ISWINDOWS && path[i - 2] == ':') { /* But on windows, we won't remove the trailing slash from c:/ */ break; } } return i; } /** * Give a path in objPtr, returns a new path with any trailing slash removed. * Use Jim_DecrRefCount() on the returned object (which may be identical to objPtr). */ static Jim_Obj *JimStripTrailingSlashes(Jim_Interp *interp, Jim_Obj *objPtr) { int len = Jim_Length(objPtr); const char *path = Jim_String(objPtr); int i = JimPathLenNoTrailingSlashes(path, len); if (i != len) { objPtr = Jim_NewStringObj(interp, path, i); } Jim_IncrRefCount(objPtr); return objPtr; } static int file_cmd_dirname(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *objPtr = JimStripTrailingSlashes(interp, argv[0]); const char *path = Jim_String(objPtr); const char *p = strrchr(path, '/'); if (!p) { Jim_SetResultString(interp, ".", -1); } else if (p[1] == 0) { /* Trailing slash so do nothing */ Jim_SetResult(interp, objPtr); } else if (p == path) { Jim_SetResultString(interp, "/", -1); } else if (ISWINDOWS && p[-1] == ':') { /* z:/dir => z:/ */ Jim_SetResultString(interp, path, p - path + 1); } else { /* Strip any trailing slashes from the result */ int len = JimPathLenNoTrailingSlashes(path, p - path); Jim_SetResultString(interp, path, len); } Jim_DecrRefCount(interp, objPtr); return JIM_OK; } static int file_cmd_split(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *listObj = Jim_NewListObj(interp, NULL, 0); const char *path = Jim_String(argv[0]); if (*path == '/') { Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, "/", 1)); } while (1) { /* Remove leading slashes */ while (*path == '/') { path++; } if (*path) { const char *pt = strchr(path, '/'); if (pt) { Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, path, pt - path)); path = pt; continue; } Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, path, -1)); } break; } Jim_SetResult(interp, listObj); return JIM_OK; } static int file_cmd_rootname(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const char *path = Jim_String(argv[0]); const char *lastSlash = strrchr(path, '/'); const char *p = strrchr(path, '.'); if (p == NULL || (lastSlash != NULL && lastSlash > p)) { Jim_SetResult(interp, argv[0]); } else { Jim_SetResultString(interp, path, p - path); } return JIM_OK; } static int file_cmd_extension(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *objPtr = JimStripTrailingSlashes(interp, argv[0]); const char *path = Jim_String(objPtr); const char *lastSlash = strrchr(path, '/'); const char *p = strrchr(path, '.'); if (p == NULL || (lastSlash != NULL && lastSlash >= p)) { p = ""; } Jim_SetResultString(interp, p, -1); Jim_DecrRefCount(interp, objPtr); return JIM_OK; } static int file_cmd_tail(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *objPtr = JimStripTrailingSlashes(interp, argv[0]); const char *path = Jim_String(objPtr); const char *lastSlash = strrchr(path, '/'); if (lastSlash) { Jim_SetResultString(interp, lastSlash + 1, -1); } else { Jim_SetResult(interp, objPtr); } Jim_DecrRefCount(interp, objPtr); return JIM_OK; } #ifndef HAVE_RESTRICT #define restrict #endif static char *JimRealPath(const char *restrict path, char *restrict resolved_path, size_t len) { #if defined(HAVE__FULLPATH) return _fullpath(resolved_path, path, len); #elif defined(HAVE_REALPATH) return realpath(path, resolved_path); #else return NULL; #endif } static int file_cmd_normalize(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const char *path = Jim_String(argv[0]); char *newname = Jim_Alloc(MAXPATHLEN); if (JimRealPath(path, newname, MAXPATHLEN)) { JimFixPath(newname); Jim_SetResult(interp, Jim_NewStringObjNoAlloc(interp, newname, -1)); return JIM_OK; } Jim_Free(newname); Jim_SetResultFormatted(interp, "can't normalize \"%#s\": %s", argv[0], strerror(errno)); return JIM_ERR; } static int file_cmd_join(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int i; char *newname = Jim_Alloc(MAXPATHLEN + 1); char *last = newname; *newname = 0; /* Simple implementation for now */ for (i = 0; i < argc; i++) { int len; const char *part = Jim_GetString(argv[i], &len); if (*part == '/') { /* Absolute component, so go back to the start */ last = newname; } else if (ISWINDOWS && strchr(part, ':')) { /* Absolute component on mingw, so go back to the start */ last = newname; } else if (part[0] == '.') { if (part[1] == '/') { part += 2; len -= 2; } else if (part[1] == 0 && last != newname) { /* Adding '.' to an existing path does nothing */ continue; } } /* Add a slash if needed */ if (last != newname && last[-1] != '/') { *last++ = '/'; } if (len) { if (last + len - newname >= MAXPATHLEN) { Jim_Free(newname); Jim_SetResultString(interp, "Path too long", -1); return JIM_ERR; } memcpy(last, part, len); last += len; } /* Remove a slash if needed */ if (last > newname + 1 && last[-1] == '/') { /* but on on Windows, leave the trailing slash on "c:/ " */ if (!ISWINDOWS || !(last > newname + 2 && last[-2] == ':')) { *--last = 0; } } } *last = 0; /* Probably need to handle some special cases ... */ Jim_SetResult(interp, Jim_NewStringObjNoAlloc(interp, newname, last - newname)); return JIM_OK; } static int file_access(Jim_Interp *interp, Jim_Obj *filename, int mode) { Jim_SetResultBool(interp, access(Jim_String(filename), mode) != -1); return JIM_OK; } static int file_cmd_readable(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return file_access(interp, argv[0], R_OK); } static int file_cmd_writable(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return file_access(interp, argv[0], W_OK); } static int file_cmd_executable(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { #ifdef X_OK return file_access(interp, argv[0], X_OK); #else /* If no X_OK, just assume true. */ Jim_SetResultBool(interp, 1); return JIM_OK; #endif } static int file_cmd_exists(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return file_access(interp, argv[0], F_OK); } static int file_cmd_delete(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int force = Jim_CompareStringImmediate(interp, argv[0], "-force"); if (force || Jim_CompareStringImmediate(interp, argv[0], "--")) { argc--; argv++; } while (argc--) { const char *path = Jim_String(argv[0]); if (unlink(path) == -1 && errno != ENOENT) { if (rmdir(path) == -1) { /* Maybe try using the script helper */ if (!force || Jim_EvalPrefix(interp, "file delete force", 1, argv) != JIM_OK) { Jim_SetResultFormatted(interp, "couldn't delete file \"%s\": %s", path, strerror(errno)); return JIM_ERR; } } } argv++; } return JIM_OK; } #ifdef HAVE_MKDIR_ONE_ARG #define MKDIR_DEFAULT(PATHNAME) mkdir(PATHNAME) #else #define MKDIR_DEFAULT(PATHNAME) mkdir(PATHNAME, 0755) #endif /** * Create directory, creating all intermediate paths if necessary. * * Returns 0 if OK or -1 on failure (and sets errno) * * Note: The path may be modified. */ static int mkdir_all(char *path) { int ok = 1; /* First time just try to make the dir */ goto first; while (ok--) { /* Must have failed the first time, so recursively make the parent and try again */ { char *slash = strrchr(path, '/'); if (slash && slash != path) { *slash = 0; if (mkdir_all(path) != 0) { return -1; } *slash = '/'; } } first: if (MKDIR_DEFAULT(path) == 0) { return 0; } if (errno == ENOENT) { /* Create the parent and try again */ continue; } /* Maybe it already exists as a directory. MorphOS can return ENOTDIR instead of EEXIST */ if (errno == EEXIST || errno == ENOTDIR) { jim_stat_t sb; if (Jim_Stat(path, &sb) == 0 && S_ISDIR(sb.st_mode)) { return 0; } /* Restore errno */ errno = EEXIST; } /* Failed */ break; } return -1; } static int file_cmd_mkdir(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { while (argc--) { char *path = Jim_StrDup(Jim_String(argv[0])); int rc = mkdir_all(path); Jim_Free(path); if (rc != 0) { Jim_SetResultFormatted(interp, "can't create directory \"%#s\": %s", argv[0], strerror(errno)); return JIM_ERR; } argv++; } return JIM_OK; } static int file_cmd_tempfile(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int fd = Jim_MakeTempFile(interp, (argc >= 1) ? Jim_String(argv[0]) : NULL, 0); if (fd < 0) { return JIM_ERR; } close(fd); return JIM_OK; } static int file_cmd_rename(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const char *source; const char *dest; int force = 0; if (argc == 3) { if (!Jim_CompareStringImmediate(interp, argv[0], "-force")) { return -1; } force++; argv++; argc--; } source = Jim_String(argv[0]); dest = Jim_String(argv[1]); if (!force && access(dest, F_OK) == 0) { Jim_SetResultFormatted(interp, "error renaming \"%#s\" to \"%#s\": target exists", argv[0], argv[1]); return JIM_ERR; } #if ISWINDOWS if (access(dest, F_OK) == 0) { /* Windows won't rename over an existing file */ remove(dest); } #endif if (rename(source, dest) != 0) { Jim_SetResultFormatted(interp, "error renaming \"%#s\" to \"%#s\": %s", argv[0], argv[1], strerror(errno)); return JIM_ERR; } return JIM_OK; } #if defined(HAVE_LINK) && defined(HAVE_SYMLINK) static int file_cmd_link(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int ret; const char *source; const char *dest; static const char * const options[] = { "-hard", "-symbolic", NULL }; enum { OPT_HARD, OPT_SYMBOLIC, }; int option = OPT_HARD; if (argc == 3) { if (Jim_GetEnum(interp, argv[0], options, &option, NULL, JIM_ENUM_ABBREV | JIM_ERRMSG) != JIM_OK) { return JIM_ERR; } argv++; argc--; } dest = Jim_String(argv[0]); source = Jim_String(argv[1]); if (option == OPT_HARD) { ret = link(source, dest); } else { ret = symlink(source, dest); } if (ret != 0) { Jim_SetResultFormatted(interp, "error linking \"%#s\" to \"%#s\": %s", argv[0], argv[1], strerror(errno)); return JIM_ERR; } return JIM_OK; } #endif static int file_stat(Jim_Interp *interp, Jim_Obj *filename, jim_stat_t *sb) { const char *path = Jim_String(filename); if (Jim_Stat(path, sb) == -1) { Jim_SetResultFormatted(interp, "could not read \"%#s\": %s", filename, strerror(errno)); return JIM_ERR; } return JIM_OK; } #ifdef Jim_LinkStat static int file_lstat(Jim_Interp *interp, Jim_Obj *filename, jim_stat_t *sb) { const char *path = Jim_String(filename); if (Jim_LinkStat(path, sb) == -1) { Jim_SetResultFormatted(interp, "could not read \"%#s\": %s", filename, strerror(errno)); return JIM_ERR; } return JIM_OK; } #else #define file_lstat file_stat #endif static int file_cmd_atime(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { jim_stat_t sb; if (file_stat(interp, argv[0], &sb) != JIM_OK) { return JIM_ERR; } Jim_SetResultInt(interp, sb.st_atime); return JIM_OK; } /** * Set file atime/mtime to the given time in microseconds since the epoch. */ static int JimSetFileTimes(Jim_Interp *interp, const char *filename, jim_wide us) { #ifdef HAVE_UTIMES struct timeval times[2]; times[1].tv_sec = times[0].tv_sec = us / 1000000; times[1].tv_usec = times[0].tv_usec = us % 1000000; if (utimes(filename, times) != 0) { Jim_SetResultFormatted(interp, "can't set time on \"%s\": %s", filename, strerror(errno)); return JIM_ERR; } return JIM_OK; #else Jim_SetResultString(interp, "Not implemented", -1); return JIM_ERR; #endif } static int file_cmd_mtime(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { jim_stat_t sb; if (argc == 2) { jim_wide secs; if (Jim_GetWide(interp, argv[1], &secs) != JIM_OK) { return JIM_ERR; } return JimSetFileTimes(interp, Jim_String(argv[0]), secs * 1000000); } if (file_stat(interp, argv[0], &sb) != JIM_OK) { return JIM_ERR; } Jim_SetResultInt(interp, sb.st_mtime); return JIM_OK; } #ifdef STAT_MTIME_US static int file_cmd_mtimeus(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { jim_stat_t sb; if (argc == 2) { jim_wide us; if (Jim_GetWide(interp, argv[1], &us) != JIM_OK) { return JIM_ERR; } return JimSetFileTimes(interp, Jim_String(argv[0]), us); } if (file_stat(interp, argv[0], &sb) != JIM_OK) { return JIM_ERR; } Jim_SetResultInt(interp, STAT_MTIME_US(sb)); return JIM_OK; } #endif static int file_cmd_copy(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return Jim_EvalPrefix(interp, "file copy", argc, argv); } static int file_cmd_size(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { jim_stat_t sb; if (file_stat(interp, argv[0], &sb) != JIM_OK) { return JIM_ERR; } Jim_SetResultInt(interp, sb.st_size); return JIM_OK; } static int file_cmd_isdirectory(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { jim_stat_t sb; int ret = 0; if (file_stat(interp, argv[0], &sb) == JIM_OK) { ret = S_ISDIR(sb.st_mode); } Jim_SetResultInt(interp, ret); return JIM_OK; } static int file_cmd_isfile(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { jim_stat_t sb; int ret = 0; if (file_stat(interp, argv[0], &sb) == JIM_OK) { ret = S_ISREG(sb.st_mode); } Jim_SetResultInt(interp, ret); return JIM_OK; } #ifdef HAVE_GETEUID static int file_cmd_owned(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { jim_stat_t sb; int ret = 0; if (file_stat(interp, argv[0], &sb) == JIM_OK) { ret = (geteuid() == sb.st_uid); } Jim_SetResultInt(interp, ret); return JIM_OK; } #endif #if defined(HAVE_READLINK) static int file_cmd_readlink(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const char *path = Jim_String(argv[0]); char *linkValue = Jim_Alloc(MAXPATHLEN + 1); int linkLength = readlink(path, linkValue, MAXPATHLEN); if (linkLength == -1) { Jim_Free(linkValue); Jim_SetResultFormatted(interp, "could not read link \"%#s\": %s", argv[0], strerror(errno)); return JIM_ERR; } linkValue[linkLength] = 0; Jim_SetResult(interp, Jim_NewStringObjNoAlloc(interp, linkValue, linkLength)); return JIM_OK; } #endif static int file_cmd_type(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { jim_stat_t sb; if (file_lstat(interp, argv[0], &sb) != JIM_OK) { return JIM_ERR; } Jim_SetResultString(interp, JimGetFileType((int)sb.st_mode), -1); return JIM_OK; } #ifdef Jim_LinkStat static int file_cmd_lstat(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { jim_stat_t sb; if (file_lstat(interp, argv[0], &sb) != JIM_OK) { return JIM_ERR; } return Jim_FileStoreStatData(interp, argc == 2 ? argv[1] : NULL, &sb); } #else #define file_cmd_lstat file_cmd_stat #endif static int file_cmd_stat(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { jim_stat_t sb; if (file_stat(interp, argv[0], &sb) != JIM_OK) { return JIM_ERR; } return Jim_FileStoreStatData(interp, argc == 2 ? argv[1] : NULL, &sb); } static const jim_subcmd_type file_command_table[] = { { "atime", "name", file_cmd_atime, 1, 1, /* Description: Last access time */ }, { "mtime", "name ?time?", file_cmd_mtime, 1, 2, /* Description: Get or set last modification time */ }, #ifdef STAT_MTIME_US { "mtimeus", "name ?time?", file_cmd_mtimeus, 1, 2, /* Description: Get or set last modification time in microseconds */ }, #endif { "copy", "?-force? source dest", file_cmd_copy, 2, 3, /* Description: Copy source file to destination file */ }, { "dirname", "name", file_cmd_dirname, 1, 1, /* Description: Directory part of the name */ }, { "rootname", "name", file_cmd_rootname, 1, 1, /* Description: Name without any extension */ }, { "extension", "name", file_cmd_extension, 1, 1, /* Description: Last extension including the dot */ }, { "tail", "name", file_cmd_tail, 1, 1, /* Description: Last component of the name */ }, { "split", "name", file_cmd_split, 1, 1, /* Description: Split path into components as a list */ }, { "normalize", "name", file_cmd_normalize, 1, 1, /* Description: Normalized path of name */ }, { "join", "name ?name ...?", file_cmd_join, 1, -1, /* Description: Join multiple path components */ }, { "readable", "name", file_cmd_readable, 1, 1, /* Description: Is file readable */ }, { "writable", "name", file_cmd_writable, 1, 1, /* Description: Is file writable */ }, { "executable", "name", file_cmd_executable, 1, 1, /* Description: Is file executable */ }, { "exists", "name", file_cmd_exists, 1, 1, /* Description: Does file exist */ }, { "delete", "?-force|--? name ...", file_cmd_delete, 1, -1, JIM_MODFLAG_NOTAINT, /* Description: Deletes the files or directories (must be empty unless -force) */ }, { "mkdir", "dir ...", file_cmd_mkdir, 1, -1, JIM_MODFLAG_NOTAINT, /* Description: Creates the directories */ }, { "tempfile", "?template?", file_cmd_tempfile, 0, 1, JIM_MODFLAG_NOTAINT, /* Description: Creates a temporary filename */ }, { "rename", "?-force? source dest", file_cmd_rename, 2, 3, JIM_MODFLAG_NOTAINT, /* Description: Renames a file */ }, #if defined(HAVE_LINK) && defined(HAVE_SYMLINK) { "link", "?-symbolic|-hard? newname target", file_cmd_link, 2, 3, /* Description: Creates a hard or soft link */ }, #endif #if defined(HAVE_READLINK) { "readlink", "name", file_cmd_readlink, 1, 1, /* Description: Value of the symbolic link */ }, #endif { "size", "name", file_cmd_size, 1, 1, /* Description: Size of file */ }, { "stat", "name ?var?", file_cmd_stat, 1, 2, /* Description: Returns results of stat, and may store in var array */ }, { "lstat", "name ?var?", file_cmd_lstat, 1, 2, /* Description: Returns results of lstat, and may store in var array */ }, { "type", "name", file_cmd_type, 1, 1, /* Description: Returns type of the file */ }, #ifdef HAVE_GETEUID { "owned", "name", file_cmd_owned, 1, 1, /* Description: Returns 1 if owned by the current owner */ }, #endif { "isdirectory", "name", file_cmd_isdirectory, 1, 1, /* Description: Returns 1 if name is a directory */ }, { "isfile", "name", file_cmd_isfile, 1, 1, /* Description: Returns 1 if name is a file */ }, { NULL } }; static int Jim_CdCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const char *path = Jim_String(argv[1]); if (chdir(path) != 0) { Jim_SetResultFormatted(interp, "couldn't change working directory to \"%s\": %s", path, strerror(errno)); return JIM_ERR; } return JIM_OK; } static int Jim_PwdCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { char *cwd = Jim_Alloc(MAXPATHLEN); if (getcwd(cwd, MAXPATHLEN) == NULL) { Jim_SetResultString(interp, "Failed to get pwd", -1); Jim_Free(cwd); return JIM_ERR; } JimFixPath(cwd); Jim_SetResultString(interp, cwd, -1); Jim_Free(cwd); return JIM_OK; } int Jim_fileInit(Jim_Interp *interp) { Jim_PackageProvideCheck(interp, "file"); Jim_RegisterSubCmd(interp, "file", file_command_table, NULL); Jim_RegisterSimpleCmd(interp, "pwd", "", 0, 0, Jim_PwdCmd); Jim_RegisterCmd(interp, "cd", "dirname", 1, 1, Jim_CdCmd, NULL, NULL, JIM_CMD_NOTAINT); return JIM_OK; } jimtcl-0.84/jim-format.c000066400000000000000000000335741522604140100151470ustar00rootroot00000000000000/* * Implements the internals of the format command for jim * * The FreeBSD license * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE JIM TCL PROJECT ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * JIM TCL PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * The views and conclusions contained in the software and documentation * are those of the authors and should not be interpreted as representing * official policies, either expressed or implied, of the Jim Tcl Project. * * Based on code originally from Tcl 8.5: * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * Copyright (c) 1999 by Scriptics Corporation. * * See the file "tcl.license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include #include #include #include #include "utf8.h" #define JIM_INTEGER_SPACE 24 #define MAX_FLOAT_WIDTH 320 /** * Apply the printf-like format in fmtObjPtr with the given arguments. * * Returns a new object with zero reference count if OK, or NULL on error. */ Jim_Obj *Jim_FormatString(Jim_Interp *interp, Jim_Obj *fmtObjPtr, int objc, Jim_Obj *const *objv) { const char *span, *format, *formatEnd, *msg; int numBytes = 0, objIndex = 0, gotXpg = 0, gotSequential = 0; static const char * const mixedXPG = "cannot mix \"%\" and \"%n$\" conversion specifiers"; static const char * const badIndex[2] = { "not enough arguments for all format specifiers", "\"%n$\" argument index out of range" }; int formatLen; Jim_Obj *resultPtr; /* A single buffer is used to store numeric fields (with sprintf()) * This buffer is allocated/reallocated as necessary */ char *num_buffer = NULL; int num_buffer_size = 0; span = format = Jim_GetString(fmtObjPtr, &formatLen); formatEnd = format + formatLen; resultPtr = Jim_NewEmptyStringObj(interp); while (format != formatEnd) { char *end; int gotMinus, sawFlag; int gotPrecision, useShort; long width, precision; int newXpg; int ch; int step; int doubleType; char pad = ' '; char spec[2*JIM_INTEGER_SPACE + 12]; char *p; int formatted_chars; int formatted_bytes; const char *formatted_buf; step = utf8_tounicode(format, &ch); format += step; if (ch != '%') { numBytes += step; continue; } if (numBytes) { Jim_AppendString(interp, resultPtr, span, numBytes); numBytes = 0; } /* * Saw a % : process the format specifier. * * Step 0. Handle special case of escaped format marker (i.e., %%). */ step = utf8_tounicode(format, &ch); if (ch == '%') { span = format; numBytes = step; format += step; continue; } /* * Step 1. XPG3 position specifier */ newXpg = 0; if (isdigit(ch)) { int position = strtoul(format, &end, 10); if (*end == '$') { newXpg = 1; objIndex = position - 1; format = end + 1; step = utf8_tounicode(format, &ch); } } if (newXpg) { if (gotSequential) { msg = mixedXPG; goto errorMsg; } gotXpg = 1; } else { if (gotXpg) { msg = mixedXPG; goto errorMsg; } gotSequential = 1; } if ((objIndex < 0) || (objIndex >= objc)) { msg = badIndex[gotXpg]; goto errorMsg; } /* * Step 2. Set of flags. Also build up the sprintf spec. */ p = spec; *p++ = '%'; gotMinus = 0; sawFlag = 1; do { switch (ch) { case '-': gotMinus = 1; break; case '0': pad = ch; break; case ' ': case '+': case '#': break; default: sawFlag = 0; continue; } *p++ = ch; format += step; step = utf8_tounicode(format, &ch); /* Only allow one of each flag, so if we have more than 5 flags, stop */ } while (sawFlag && (p - spec <= 5)); /* * Step 3. Minimum field width. */ width = 0; if (isdigit(ch)) { width = strtoul(format, &end, 10); format = end; step = utf8_tounicode(format, &ch); } else if (ch == '*') { if (objIndex >= objc - 1) { msg = badIndex[gotXpg]; goto errorMsg; } if (Jim_GetLong(interp, objv[objIndex], &width) != JIM_OK) { goto error; } if (width < 0) { width = -width; if (!gotMinus) { *p++ = '-'; gotMinus = 1; } } objIndex++; format += step; step = utf8_tounicode(format, &ch); } /* * Step 4. Precision. */ gotPrecision = precision = 0; if (ch == '.') { gotPrecision = 1; format += step; step = utf8_tounicode(format, &ch); } if (isdigit(ch)) { precision = strtol(format, &end, 10); format = end; step = utf8_tounicode(format, &ch); } else if (ch == '*') { if (objIndex >= objc - 1) { msg = badIndex[gotXpg]; goto errorMsg; } if (Jim_GetLong(interp, objv[objIndex], &precision) != JIM_OK) { goto error; } /* * TODO: Check this truncation logic. */ if (precision < 0) { precision = 0; } objIndex++; format += step; step = utf8_tounicode(format, &ch); } /* * Step 5. Length modifier. */ useShort = 0; if (ch == 'h') { useShort = 1; format += step; step = utf8_tounicode(format, &ch); } else if (ch == 'l') { /* Just for compatibility. All non-short integers are wide. */ format += step; step = utf8_tounicode(format, &ch); if (ch == 'l') { format += step; step = utf8_tounicode(format, &ch); } } format += step; span = format; /* * Step 6. The actual conversion character. */ if (ch == 'i') { ch = 'd'; } doubleType = 0; /* Each valid conversion will set: * formatted_buf - the result to be added * formatted_chars - the length of formatted_buf in characters * formatted_bytes - the length of formatted_buf in bytes */ switch (ch) { case '\0': msg = "format string ended in middle of field specifier"; goto errorMsg; case 's': { formatted_buf = Jim_GetString(objv[objIndex], &formatted_bytes); formatted_chars = Jim_Utf8Length(interp, objv[objIndex]); if (gotPrecision && (precision < formatted_chars)) { /* Need to build a (null terminated) truncated string */ formatted_chars = precision; formatted_bytes = utf8_index(formatted_buf, precision); } break; } case 'c': { jim_wide code; if (Jim_GetWide(interp, objv[objIndex], &code) != JIM_OK) { goto error; } /* Just store the value in the 'spec' buffer */ formatted_bytes = utf8_getchars(spec, code); formatted_buf = spec; formatted_chars = 1; break; } case 'b': { unsigned jim_wide w; int length; int i; int j; if (Jim_GetWide(interp, objv[objIndex], (jim_wide *)&w) != JIM_OK) { goto error; } length = sizeof(w) * 8; /* XXX: width and precision not yet implemented for binary * also flags in 'spec', e.g. #, 0, - */ /* Increase the size of the buffer if needed */ if (num_buffer_size < length + 1) { num_buffer_size = length + 1; num_buffer = Jim_Realloc(num_buffer, num_buffer_size); } j = 0; for (i = length; i > 0; ) { i--; if (w & ((unsigned jim_wide)1 << i)) { num_buffer[j++] = '1'; } else if (j || i == 0) { num_buffer[j++] = '0'; } } num_buffer[j] = 0; formatted_chars = formatted_bytes = j; formatted_buf = num_buffer; break; } case 'e': case 'E': case 'f': case 'g': case 'G': doubleType = 1; /* fall through */ case 'd': case 'u': case 'o': case 'x': case 'X': { jim_wide w; double d; int length; /* Fill in the width and precision */ if (width) { p += sprintf(p, "%ld", width); } if (gotPrecision) { p += sprintf(p, ".%ld", precision); } /* Now the modifier, and get the actual value here */ if (doubleType) { if (Jim_GetDouble(interp, objv[objIndex], &d) != JIM_OK) { goto error; } length = MAX_FLOAT_WIDTH; } else { if (Jim_GetWide(interp, objv[objIndex], &w) != JIM_OK) { goto error; } length = JIM_INTEGER_SPACE; if (useShort) { if (ch == 'd') { w = (short)w; } else { w = (unsigned short)w; } } *p++ = 'l'; #ifdef HAVE_LONG_LONG if (sizeof(long long) == sizeof(jim_wide)) { *p++ = 'l'; } #endif } *p++ = (char) ch; *p = '\0'; /* Put some reasonable limits on the field size */ if (width > 10000 || length > 10000 || precision > 10000) { Jim_SetResultString(interp, "format too long", -1); goto error; } /* Adjust length for width and precision */ if (width > length) { length = width; } if (gotPrecision) { length += precision; } /* Increase the size of the buffer if needed */ if (num_buffer_size < length + 1) { num_buffer_size = length + 1; num_buffer = Jim_Realloc(num_buffer, num_buffer_size); } if (doubleType) { snprintf(num_buffer, length + 1, spec, d); } else { formatted_bytes = snprintf(num_buffer, length + 1, spec, w); } formatted_chars = formatted_bytes = strlen(num_buffer); formatted_buf = num_buffer; break; } default: { /* Just reuse the 'spec' buffer */ spec[0] = ch; spec[1] = '\0'; Jim_SetResultFormatted(interp, "bad field specifier \"%s\"", spec); goto error; } } if (!gotMinus) { while (formatted_chars < width) { Jim_AppendString(interp, resultPtr, &pad, 1); formatted_chars++; } } Jim_AppendString(interp, resultPtr, formatted_buf, formatted_bytes); while (formatted_chars < width) { Jim_AppendString(interp, resultPtr, &pad, 1); formatted_chars++; } objIndex += gotSequential; } if (numBytes) { Jim_AppendString(interp, resultPtr, span, numBytes); } Jim_Free(num_buffer); return resultPtr; errorMsg: Jim_SetResultString(interp, msg, -1); error: Jim_FreeNewObj(interp, resultPtr); Jim_Free(num_buffer); return NULL; } jimtcl-0.84/jim-history.c000066400000000000000000000072221522604140100153470ustar00rootroot00000000000000#include #include #include #include "jim.h" #include "jimautoconf.h" #include "jim-subcmd.h" static int history_cmd_getline(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *objPtr; char *line = Jim_HistoryGetline(interp, Jim_String(argv[0])); /* On EOF returns -1 if varName was specified; otherwise the empty string. */ if (line == NULL) { if (argc == 2) { Jim_SetResultInt(interp, -1); } return JIM_OK; } objPtr = Jim_NewStringObjNoAlloc(interp, line, -1); /* Returns the length of the string if varName was specified */ if (argc == 2) { if (Jim_SetVariable(interp, argv[1], objPtr) != JIM_OK) { return JIM_ERR; } Jim_SetResultInt(interp, Jim_Length(objPtr)); } else { Jim_SetResult(interp, objPtr); } return JIM_OK; } static int history_cmd_setcompletion(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_HistorySetCompletion(interp, Jim_Length(argv[0]) ? argv[0] : NULL); return JIM_OK; } static int history_cmd_sethints(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_HistorySetHints(interp, Jim_Length(argv[0]) ? argv[0] : NULL); return JIM_OK; } static int history_cmd_load(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_HistoryLoad(Jim_String(argv[0])); return JIM_OK; } static int history_cmd_save(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_HistorySave(Jim_String(argv[0])); return JIM_OK; } static int history_cmd_add(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_HistoryAdd(Jim_String(argv[0])); return JIM_OK; } static int history_cmd_show(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_HistoryShow(); return JIM_OK; } static int history_cmd_keep(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { long len; if (argc == 1) { if (Jim_GetLong(interp, argv[0], &len) != JIM_OK) { return JIM_ERR; } Jim_HistorySetMaxLen(len); } else { Jim_SetResultInt(interp, Jim_HistoryGetMaxLen()); } return JIM_OK; } static const jim_subcmd_type history_command_table[] = { { "add", "line", history_cmd_add, 1, 1, /* Description: Adds the line to the history ands saves */ }, { "completion", "command", history_cmd_setcompletion, 1, 1, /* Description: Sets an autocompletion callback command, or none if "" */ }, { "hints", "command", history_cmd_sethints, 1, 1, /* Description: Sets a hints callback command, or none if "" */ }, { "getline", "prompt ?varname?", history_cmd_getline, 1, 2, /* Description: Reads one line from the user. Similar to gets. */ }, { "keep", "?count?", history_cmd_keep, 0, 1, /* Description: Set or display the max history length */ }, { "load", "filename", history_cmd_load, 1, 1, /* Description: Loads history from the given file, if possible */ }, { "save", "filename", history_cmd_save, 1, 1, /* Description: Saves history to the given file */ }, { "show", NULL, history_cmd_show, 0, 0, /* Description: Displays the history */ }, { NULL } }; int Jim_historyInit(Jim_Interp *interp) { Jim_PackageProvideCheck(interp, "history"); Jim_RegisterSubCmd(interp, "history", history_command_table, NULL); return JIM_OK; } jimtcl-0.84/jim-interactive.c000066400000000000000000000245451522604140100161720ustar00rootroot00000000000000#include #include #include #include "jimautoconf.h" #include #ifdef USE_LINENOISE #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_SYS_STAT_H #include #endif #include "linenoise.h" #else #define MAX_LINE_LEN 512 #endif #ifdef USE_LINENOISE struct JimCompletionInfo { Jim_Interp *interp; Jim_Obj *completion_command; Jim_Obj *hints_command; /*Jim_Obj *hint;*/ }; static struct JimCompletionInfo *JimGetCompletionInfo(Jim_Interp *interp); static void JimCompletionCallback(const char *prefix, linenoiseCompletions *comp, void *userdata); static const char completion_callback_assoc_key[] = "interactive-completion"; static char *JimHintsCallback(const char *prefix, int *color, int *bold, void *userdata); static void JimFreeHintsCallback(void *hint, void *userdata); #endif /** * Returns an allocated line, or NULL if EOF. */ char *Jim_HistoryGetline(Jim_Interp *interp, const char *prompt) { #ifdef USE_LINENOISE struct JimCompletionInfo *compinfo = JimGetCompletionInfo(interp); char *result; Jim_Obj *objPtr; long mlmode = 0; /* Set any completion callback just during the call to linenoise() * to allow for per-interp settings */ if (compinfo->completion_command) { linenoiseSetCompletionCallback(JimCompletionCallback, compinfo); } if (compinfo->hints_command) { linenoiseSetHintsCallback(JimHintsCallback, compinfo); linenoiseSetFreeHintsCallback(JimFreeHintsCallback); } objPtr = Jim_GetVariableStr(interp, "history::multiline", JIM_NONE); if (objPtr && Jim_GetLong(interp, objPtr, &mlmode) == JIM_NONE) { linenoiseSetMultiLine(mlmode); } result = linenoise(prompt); /* unset the callbacks */ linenoiseSetCompletionCallback(NULL, NULL); linenoiseSetHintsCallback(NULL, NULL); linenoiseSetFreeHintsCallback(NULL); return result; #else int len; char *line = Jim_Alloc(MAX_LINE_LEN); fputs(prompt, stdout); fflush(stdout); if (fgets(line, MAX_LINE_LEN, stdin) == NULL) { Jim_Free(line); return NULL; } len = strlen(line); if (len && line[len - 1] == '\n') { line[len - 1] = '\0'; } return line; #endif } void Jim_HistoryLoad(const char *filename) { #ifdef USE_LINENOISE linenoiseHistoryLoad(filename); #endif } void Jim_HistoryAdd(const char *line) { #ifdef USE_LINENOISE linenoiseHistoryAdd(line); #endif } void Jim_HistorySave(const char *filename) { #ifdef USE_LINENOISE #ifdef HAVE_UMASK mode_t mask; /* Just u=rw, but note that this is only effective for newly created files */ mask = umask(S_IXUSR | S_IRWXG | S_IRWXO); #endif linenoiseHistorySave(filename); #ifdef HAVE_UMASK umask(mask); #endif #endif } void Jim_HistoryShow(void) { #ifdef USE_LINENOISE /* built-in history command */ int i; int len; char **history = linenoiseHistory(&len); for (i = 0; i < len; i++) { printf("%4d %s\n", i + 1, history[i]); } #endif } void Jim_HistorySetMaxLen(int length) { #ifdef USE_LINENOISE linenoiseHistorySetMaxLen(length); #endif } int Jim_HistoryGetMaxLen(void) { #ifdef USE_LINENOISE return linenoiseHistoryGetMaxLen(); #endif return 0; } #ifdef USE_LINENOISE static void JimCompletionCallback(const char *prefix, linenoiseCompletions *comp, void *userdata) { struct JimCompletionInfo *info = (struct JimCompletionInfo *)userdata; Jim_Obj *objv[2]; int ret; objv[0] = info->completion_command; objv[1] = Jim_NewStringObj(info->interp, prefix, -1); ret = Jim_EvalObjVector(info->interp, 2, objv); /* XXX: Consider how best to handle errors here. bgerror? */ if (ret == JIM_OK) { int i; Jim_Obj *listObj = Jim_GetResult(info->interp); int len = Jim_ListLength(info->interp, listObj); for (i = 0; i < len; i++) { linenoiseAddCompletion(comp, Jim_String(Jim_ListGetIndex(info->interp, listObj, i))); } } } static char *JimHintsCallback(const char *prefix, int *color, int *bold, void *userdata) { struct JimCompletionInfo *info = (struct JimCompletionInfo *)userdata; Jim_Obj *objv[2]; int ret; char *result = NULL; objv[0] = info->hints_command; objv[1] = Jim_NewStringObj(info->interp, prefix, -1); ret = Jim_EvalObjVector(info->interp, 2, objv); /* XXX: Consider how best to handle errors here. bgerror? */ if (ret == JIM_OK) { Jim_Obj *listObj = Jim_GetResult(info->interp); Jim_IncrRefCount(listObj); /* Should return a list of {hintstring color bold} where the second two are optional */ int len = Jim_ListLength(info->interp, listObj); if (len >= 1) { long x; result = Jim_StrDup(Jim_String(Jim_ListGetIndex(info->interp, listObj, 0))); if (len >= 2 && Jim_GetLong(info->interp, Jim_ListGetIndex(info->interp, listObj, 1), &x) == JIM_OK) { *color = x; } if (len >= 3 && Jim_GetLong(info->interp, Jim_ListGetIndex(info->interp, listObj, 2), &x) == JIM_OK) { *bold = x; } } Jim_DecrRefCount(info->interp, listObj); } return result; } static void JimFreeHintsCallback(void *hint, void *userdata) { Jim_Free(hint); } static void JimHistoryFreeCompletion(Jim_Interp *interp, void *data) { struct JimCompletionInfo *compinfo = data; if (compinfo->completion_command) { Jim_DecrRefCount(interp, compinfo->completion_command); } if (compinfo->hints_command) { Jim_DecrRefCount(interp, compinfo->hints_command); } Jim_Free(compinfo); } static struct JimCompletionInfo *JimGetCompletionInfo(Jim_Interp *interp) { struct JimCompletionInfo *compinfo = Jim_GetAssocData(interp, completion_callback_assoc_key); if (compinfo == NULL) { compinfo = Jim_Alloc(sizeof(*compinfo)); compinfo->interp = interp; compinfo->completion_command = NULL; compinfo->hints_command = NULL; Jim_SetAssocData(interp, completion_callback_assoc_key, JimHistoryFreeCompletion, compinfo); } return compinfo; } #endif /** * Sets a completion command to be used with Jim_HistoryGetline() * If commandObj is NULL, deletes any existing completion command. */ void Jim_HistorySetCompletion(Jim_Interp *interp, Jim_Obj *completionCommandObj) { #ifdef USE_LINENOISE struct JimCompletionInfo *compinfo = JimGetCompletionInfo(interp); if (completionCommandObj) { /* Increment now in case the existing object is the same */ Jim_IncrRefCount(completionCommandObj); } if (compinfo->completion_command) { Jim_DecrRefCount(interp, compinfo->completion_command); } compinfo->completion_command = completionCommandObj; #endif } /** * Sets a hints command to be used with Jim_HistoryGetline() * If commandObj is NULL, deletes any existing hints command. */ void Jim_HistorySetHints(Jim_Interp *interp, Jim_Obj *hintsCommandObj) { #ifdef USE_LINENOISE struct JimCompletionInfo *compinfo = JimGetCompletionInfo(interp); if (hintsCommandObj) { /* Increment now in case the existing object is the same */ Jim_IncrRefCount(hintsCommandObj); } if (compinfo->hints_command) { Jim_DecrRefCount(interp, compinfo->hints_command); } compinfo->hints_command = hintsCommandObj; #endif } int Jim_InteractivePrompt(Jim_Interp *interp) { int retcode = JIM_OK; char *history_file = NULL; #ifdef USE_LINENOISE const char *home; home = getenv("HOME"); if (home && isatty(STDIN_FILENO)) { int history_len = strlen(home) + sizeof("/.jim_history"); history_file = Jim_Alloc(history_len); snprintf(history_file, history_len, "%s/.jim_history", home); Jim_HistoryLoad(history_file); } Jim_HistorySetCompletion(interp, Jim_NewStringObj(interp, "tcl::autocomplete", -1)); Jim_HistorySetHints(interp, Jim_NewStringObj(interp, "tcl::stdhint", -1)); #endif printf("Welcome to Jim version %d.%d\n", JIM_VERSION / 100, JIM_VERSION % 100); Jim_SetVariableStrWithStr(interp, JIM_INTERACTIVE, "1"); while (1) { Jim_Obj *scriptObjPtr; const char *result; int reslen; char prompt[20]; if (retcode != JIM_OK) { const char *retcodestr = Jim_ReturnCode(retcode); if (*retcodestr == '?') { snprintf(prompt, sizeof(prompt) - 3, "[%d] . ", retcode); } else { snprintf(prompt, sizeof(prompt) - 3, "[%s] . ", retcodestr); } } else { strcpy(prompt, ". "); } scriptObjPtr = Jim_NewStringObj(interp, "", 0); Jim_IncrRefCount(scriptObjPtr); while (1) { char state; char *line; line = Jim_HistoryGetline(interp, prompt); if (line == NULL) { if (errno == EINTR) { continue; } Jim_DecrRefCount(interp, scriptObjPtr); retcode = JIM_OK; goto out; } if (Jim_Length(scriptObjPtr) != 0) { /* Line continuation */ Jim_AppendString(interp, scriptObjPtr, "\n", 1); } Jim_AppendString(interp, scriptObjPtr, line, -1); Jim_Free(line); if (Jim_ScriptIsComplete(interp, scriptObjPtr, &state)) break; snprintf(prompt, sizeof(prompt), "%c> ", state); } #ifdef USE_LINENOISE if (strcmp(Jim_String(scriptObjPtr), "h") == 0) { /* built-in history command */ Jim_HistoryShow(); Jim_DecrRefCount(interp, scriptObjPtr); continue; } Jim_HistoryAdd(Jim_String(scriptObjPtr)); if (history_file) { Jim_HistorySave(history_file); } #endif retcode = Jim_EvalObj(interp, scriptObjPtr); Jim_DecrRefCount(interp, scriptObjPtr); if (retcode == JIM_EXIT) { break; } if (retcode == JIM_ERR) { Jim_MakeErrorMessage(interp); } result = Jim_GetString(Jim_GetResult(interp), &reslen); if (reslen) { if (fwrite(result, reslen, 1, stdout) == 0) { /* nothing */ } putchar('\n'); } } out: Jim_Free(history_file); return retcode; } jimtcl-0.84/jim-interp.c000066400000000000000000000117751522604140100151570ustar00rootroot00000000000000#include #include #include "jim.h" #include "jimautoconf.h" #include "jim-subcmd.h" static void JimInterpDelProc(Jim_Interp *interp, void *privData) { Jim_FreeInterp((Jim_Interp *)privData); } /* Everything passing between interpreters must be converted to a string */ static Jim_Obj *JimInterpCopyObj(Jim_Interp *target, Jim_Obj *obj) { const char *rep; int len; rep = Jim_GetString(obj, &len); return Jim_NewStringObj(target, rep, len); } #define JimInterpCopyResult(to, from) Jim_SetResult((to), JimInterpCopyObj((to), Jim_GetResult((from)))) static int interp_cmd_eval(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int ret; Jim_Interp *child = Jim_CmdPrivData(interp); Jim_Obj *scriptObj; Jim_Obj *targetScriptObj; scriptObj = Jim_ConcatObj(interp, argc, argv); targetScriptObj = JimInterpCopyObj(child, scriptObj); Jim_FreeNewObj(interp, scriptObj); Jim_IncrRefCount(targetScriptObj); ret = Jim_EvalObj(child, targetScriptObj); Jim_DecrRefCount(child, targetScriptObj); JimInterpCopyResult(interp, child); return ret; } static int interp_cmd_delete(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return Jim_DeleteCommand(interp, argv[0]); } static void JimInterpDelAlias(Jim_Interp *interp, void *privData) { Jim_Interp *parent = Jim_GetAssocData(interp, "interp.parent"); Jim_DecrRefCount(parent, (Jim_Obj *)privData); } static int JimInterpAliasProc(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int i, ret; Jim_Interp *parent = Jim_GetAssocData(interp, "interp.parent"); Jim_Obj *targetPrefixObj = Jim_CmdPrivData(interp); Jim_Obj *targetScriptObj; assert(parent); /* Build the complete command */ targetScriptObj = Jim_DuplicateObj(parent, targetPrefixObj); for (i = 1; i < argc; i++) { Jim_ListAppendElement(parent, targetScriptObj, JimInterpCopyObj(parent, argv[i])); } Jim_IncrRefCount(targetScriptObj); ret = Jim_EvalObj(parent, targetScriptObj); Jim_DecrRefCount(parent, targetScriptObj); JimInterpCopyResult(interp, parent); return ret; } static int interp_cmd_alias(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Interp *child = Jim_CmdPrivData(interp); Jim_Obj *aliasPrefixList; /* The prefix list will be held inside the child, but it still belongs * to the parent! */ aliasPrefixList = Jim_NewListObj(interp, argv + 1, argc - 1); Jim_IncrRefCount(aliasPrefixList); Jim_RegisterCmd(child, Jim_String(argv[0]), NULL, 0, -1, JimInterpAliasProc, JimInterpDelAlias, aliasPrefixList, 0); return JIM_OK; } static const jim_subcmd_type interp_command_table[] = { { "eval", "script ...", interp_cmd_eval, 1, -1, /* Description: Concat the args and evaluate the script in the interpreter */ }, { "delete", NULL, interp_cmd_delete, 0, 0, JIM_MODFLAG_FULLARGV, /* Description: Delete this interpreter */ }, { "alias", "childcmd parentcmd ?arg ...?", interp_cmd_alias, 2, -1, /* Description: Create an alias which refers to a script in the parent interpreter */ }, { NULL } }; static int JimInterpSubCmdProc(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return Jim_CallSubCmd(interp, Jim_ParseSubCmd(interp, interp_command_table, argc, argv), argc, argv); } static void JimInterpCopyVariable(Jim_Interp *target, Jim_Interp *source, const char *var, const char *default_value) { Jim_Obj *value = Jim_GetGlobalVariableStr(source, var, JIM_NONE); const char *str; str = value ? Jim_String(value) : default_value; if (str) { Jim_SetGlobalVariableStr(target, var, Jim_NewStringObj(target, str, -1)); } } /** * [interp] creates a new interpreter. */ static int JimInterpCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Interp *child; char buf[34]; int i; static const char * const copyvars[] = { "argv", "argc", "argv0", "jim::argv0", "jim::exe", "jim::lineedit", NULL }; /* Create the interpreter command */ child = Jim_CreateInterp(); Jim_RegisterCoreCommands(child); Jim_InitStaticExtensions(child); /* Copy some core variables to the new interpreter */ for (i = 0; copyvars[i]; i++) { JimInterpCopyVariable(child, interp, copyvars[i], NULL); } /* Allow the child interpreter to find the parent */ Jim_SetAssocData(child, "interp.parent", NULL, interp); snprintf(buf, sizeof(buf), "interp.handle%ld", Jim_GetId(interp)); Jim_RegisterCmd(interp, buf, "subcommand ?arg ...?", 1, -1, JimInterpSubCmdProc, JimInterpDelProc, child, 0); Jim_SetResult(interp, Jim_MakeGlobalNamespaceName(interp, Jim_NewStringObj(interp, buf, -1))); return JIM_OK; } int Jim_interpInit(Jim_Interp *interp) { Jim_PackageProvideCheck(interp, "interp"); Jim_RegisterSimpleCmd(interp, "interp", "", 0, 0, JimInterpCommand); return JIM_OK; } jimtcl-0.84/jim-json.c000066400000000000000000000277121522604140100146250ustar00rootroot00000000000000/* * Copyright (c) 2015 - 2016 Svyatoslav Mishyn * Copyright (c) 2019 Steve Bennett * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the * above copyright notice and this permission notice appear in all * copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include #include #include "jsmn/jsmn.h" /* These are all the schema types we support */ typedef enum { JSON_BOOL, JSON_OBJ, JSON_LIST, JSON_MIXED, JSON_STR, JSON_NUM, JSON_MAX_TYPE, } json_schema_t; struct json_state { Jim_Obj *fileNameObj; int line; Jim_Obj *nullObj; const char *json; jsmntok_t *tok; int retcode; /* The following are used for -schema */ int enable_schema; int enable_index; Jim_Obj *schemaObj; Jim_Obj *schemaTypeObj[JSON_MAX_TYPE]; }; static void json_decode_dump_value(Jim_Interp *interp, struct json_state *state, Jim_Obj *list); /** * Start a new subschema. Returns the previous schemaObj. * Does nothing and returns NULL if -schema is not enabled. */ static Jim_Obj *json_decode_schema_push(Jim_Interp *interp, struct json_state *state) { Jim_Obj *prevSchemaObj = NULL; if (state->enable_schema) { prevSchemaObj = state->schemaObj; state->schemaObj = Jim_NewListObj(interp, NULL, 0); Jim_IncrRefCount(state->schemaObj); } return prevSchemaObj; } /** * Combines the current schema with the previous schema, prevSchemaObj * returned by json_decode_schema_push(). * Does nothing if -schema is not enabled. */ static void json_decode_schema_pop(Jim_Interp *interp, struct json_state *state, Jim_Obj *prevSchemaObj) { if (state->enable_schema) { Jim_ListAppendElement(interp, prevSchemaObj, state->schemaObj); Jim_DecrRefCount(interp, state->schemaObj); state->schemaObj = prevSchemaObj; } } /** * Appends the schema type to state->schemaObj based on 'type' */ static void json_decode_add_schema_type(Jim_Interp *interp, struct json_state *state, json_schema_t type) { static const char * const schema_names[] = { "bool", "obj", "list", "mixed", "str", "num", }; assert(type >= 0 && type < JSON_MAX_TYPE); /* Share multiple instances of the same type */ if (state->schemaTypeObj[type] == NULL) { state->schemaTypeObj[type] = Jim_NewStringObj(interp, schema_names[type], -1); } Jim_ListAppendElement(interp, state->schemaObj, state->schemaTypeObj[type]); } /** * Returns the schema type for the given token. * There is a one-to-one correspondence except for JSMN_PRIMITIVE * which will return JSON_BOOL for true, false and JSON_NUM otherise. */ static json_schema_t json_decode_get_type(const jsmntok_t *tok, const char *json) { switch (tok->type) { case JSMN_PRIMITIVE: assert(json); if (json[tok->start] == 't' || json[tok->start] == 'f') { return JSON_BOOL; } return JSON_NUM; case JSMN_OBJECT: return JSON_OBJ; case JSMN_ARRAY: /* Return mixed by default - need other checks to select list instead */ return JSON_MIXED; case JSMN_STRING: default: return JSON_STR; } } /** * Returns the current object (state->tok) as a Tcl list. * * state->tok is incremented to just past the object that was dumped. */ static Jim_Obj * json_decode_dump_container(Jim_Interp *interp, struct json_state *state) { int i; Jim_Obj *list = Jim_NewListObj(interp, NULL, 0); int size = state->tok->size; int type = state->tok->type; json_schema_t container_type = JSON_OBJ; /* JSON_LIST, JSON_MIXED or JSON_OBJ */ if (state->schemaObj) { /* Don't strictly need to initialise this, but some compilers can't figure out it is always * assigned a value below. */ json_schema_t list_type = JSON_STR; /* Figure out the type to use for the container */ if (type == JSMN_ARRAY) { /* If every element of the array is of the same primitive schema type (str, bool or num), * we can use "list", otherwise need to use "mixed" */ container_type = JSON_LIST; if (size) { list_type = json_decode_get_type(&state->tok[1], state->json); if (list_type == JSON_BOOL || list_type == JSON_STR || list_type == JSON_NUM) { for (i = 2; i <= size; i++) { if (json_decode_get_type(state->tok + i, state->json) != list_type) { /* Can't use list */ container_type = JSON_MIXED; break; } } } else { container_type = JSON_MIXED; } } } json_decode_add_schema_type(interp, state, container_type); if (container_type == JSON_LIST && size) { json_decode_add_schema_type(interp, state, list_type); } } state->tok++; for (i = 0; i < size; i++) { if (type == JSMN_OBJECT) { /* Dump the object key */ if (state->enable_schema) { const char *p = state->json + state->tok->start; int len = state->tok->end - state->tok->start; Jim_ListAppendElement(interp, state->schemaObj, Jim_NewStringObj(interp, p, len)); } json_decode_dump_value(interp, state, list); } if (state->enable_index && type == JSMN_ARRAY) { Jim_ListAppendElement(interp, list, Jim_NewIntObj(interp, i)); } if (state->schemaObj && container_type != JSON_LIST) { if (state->tok->type == JSMN_STRING || state->tok->type == JSMN_PRIMITIVE) { json_decode_add_schema_type(interp, state, json_decode_get_type(state->tok, state->json)); } } /* Dump the array or object value */ json_decode_dump_value(interp, state, list); } return list; } /** * Appends the value at state->tok to 'list' and increments state->tok to just * past that token. * * Also appends to the schema if state->enable_schema is set. */ static void json_decode_dump_value(Jim_Interp *interp, struct json_state *state, Jim_Obj *list) { const jsmntok_t *t = state->tok; if (t->type == JSMN_UNDEFINED) { /* Malformed JSON - just return */ state->retcode = JIM_ERR; Jim_SetResultString(interp, "invalid JSON string", -1); return; } if (t->type == JSMN_STRING || t->type == JSMN_PRIMITIVE) { Jim_Obj *elem; int len = t->end - t->start; const char *p = state->json + t->start; int decr = 0; int set_source = 1; if (t->type == JSMN_STRING) { elem = Jim_NewStringObj(interp, p, len); if (memchr(p, '\\', len) != NULL) { /* Need to process backslash escapes */ Jim_Obj *newelem; Jim_IncrRefCount(elem); Jim_SubstObj(interp, elem, &newelem, JIM_SUBST_FLAG | JIM_SUBST_NOCMD | JIM_SUBST_NOVAR); Jim_IncrRefCount(newelem); Jim_DecrRefCount(interp, elem); decr = 1; elem = newelem; } } else if (p[0] == 'n') { /* null */ elem = state->nullObj; set_source = 0; } else if (p[0] == 'I') { elem = Jim_NewStringObj(interp, "Inf", -1); } else if (p[0] == '-' && p[1] == 'I') { elem = Jim_NewStringObj(interp, "-Inf", -1); } else { /* number, true or false */ elem = Jim_NewStringObj(interp, p, len); } if (set_source) { /* Note we need to subtract 1 because both are 1-based values */ Jim_SetSourceInfo(interp, elem, state->fileNameObj, state->line + t->line - 1); } Jim_ListAppendElement(interp, list, elem); if (decr) { Jim_DecrRefCount(interp, elem); } state->tok++; } else { Jim_Obj *prevSchemaObj = json_decode_schema_push(interp, state); Jim_Obj *newList = json_decode_dump_container(interp, state); Jim_ListAppendElement(interp, list, newList); json_decode_schema_pop(interp, state, prevSchemaObj); } } /* Parses the options ?-null string? ?-schema? *state. * Any options not present are not set. * * Returns JIM_OK or JIM_ERR and sets an error result. */ static int parse_json_decode_options(Jim_Interp *interp, int argc, Jim_Obj *const argv[], struct json_state *state) { static const char * const options[] = { "-index", "-null", "-schema", NULL }; enum { OPT_INDEX, OPT_NULL, OPT_SCHEMA, }; int i; for (i = 1; i < argc - 1; i++) { int option; if (Jim_GetEnum(interp, argv[i], options, &option, NULL, JIM_ERRMSG | JIM_ENUM_ABBREV) != JIM_OK) { return JIM_ERR; } switch (option) { case OPT_INDEX: state->enable_index = 1; break; case OPT_NULL: i++; Jim_IncrRefCount(argv[i]); Jim_DecrRefCount(interp, state->nullObj); state->nullObj = argv[i]; break; case OPT_SCHEMA: state->enable_schema = 1; break; } } if (i != argc - 1) { return JIM_USAGE; } return JIM_OK; } /** * Use jsmn to tokenise the JSON string 'json' of length 'len' * * Returns an allocated array of tokens or NULL on error (and sets an error result) * Note that a sentinel value is added to the end of the array (type JSMN_UNDEFINED) * so the caller can detect the end of the array in the case of malformed JSON. */ static jsmntok_t * json_decode_tokenize(Jim_Interp *interp, const char *json, size_t len) { jsmntok_t *t; jsmn_parser parser; int n; /* Parse once just to find the number of tokens */ jsmn_init(&parser); n = jsmn_parse(&parser, json, len, NULL, 0); error: switch (n) { case JSMN_ERROR_INVAL: Jim_SetResultString(interp, "invalid JSON string", -1); return NULL; case JSMN_ERROR_PART: Jim_SetResultString(interp, "truncated JSON string", -1); return NULL; case 0: Jim_SetResultString(interp, "root element must be an object or an array", -1); return NULL; default: break; } if (n < 0) { return NULL; } t = Jim_Alloc((n + 1) * sizeof(*t)); jsmn_init(&parser); n = jsmn_parse(&parser, json, len, t, n); if (t->type != JSMN_OBJECT && t->type != JSMN_ARRAY) { n = 0; } if (n <= 0) { Jim_Free(t); goto error; } /* Add a sentinel value */ t[n].type = JSMN_UNDEFINED; return t; } /** * json::decode returns the decoded data structure. * * If -schema is specified, returns a list of {data schema} */ static int json_decode(Jim_Interp *interp, int argc, Jim_Obj *const argv[]) { Jim_Obj *list; jsmntok_t *tokens; int len; int ret = JIM_ERR; struct json_state state; memset(&state, 0, sizeof(state)); state.nullObj = Jim_NewStringObj(interp, "null", -1); Jim_IncrRefCount(state.nullObj); if ((ret = parse_json_decode_options(interp, argc, argv, &state)) != JIM_OK) { goto done; } state.json = Jim_GetString(argv[argc - 1], &len); if (!len) { Jim_SetResultString(interp, "empty JSON string", -1); goto done; } /* Save any source information from the original string */ state.fileNameObj = Jim_GetSourceInfo(interp, argv[argc - 1], &state.line); if ((tokens = json_decode_tokenize(interp, state.json, len)) == NULL) { goto done; } state.tok = tokens; state.retcode = JIM_OK; json_decode_schema_push(interp, &state); list = json_decode_dump_container(interp, &state); Jim_Free(tokens); /* Make sure the refcount doesn't go to 0 during Jim_SubstObj() */ Jim_IncrRefCount(list); if (state.retcode == JIM_OK) { if (state.schemaObj) { Jim_Obj *resultObj = Jim_NewListObj(interp, NULL, 0); Jim_ListAppendElement(interp, resultObj, list); Jim_ListAppendElement(interp, resultObj, state.schemaObj); Jim_SetResult(interp, resultObj); Jim_DecrRefCount(interp, state.schemaObj); } else { Jim_SetResult(interp, list); } Jim_DecrRefCount(interp, list); } else { if (state.schemaObj) { Jim_DecrRefCount(interp, state.schemaObj); } Jim_DecrRefCount(interp, list); } done: Jim_DecrRefCount(interp, state.nullObj); return state.retcode; } int Jim_jsonInit(Jim_Interp *interp) { Jim_PackageProvideCheck(interp, "json"); Jim_RegisterSimpleCmd(interp, "json::decode", "?-index? ?-null nullvalue? ?-schema? json", 1, 5, json_decode); /* Load the Tcl implementation of the json encoder if possible */ Jim_PackageRequire(interp, "jsonencode", 0); return JIM_OK; } jimtcl-0.84/jim-load.c000066400000000000000000000067711522604140100145750ustar00rootroot00000000000000#include #include #include "jimautoconf.h" #include /* ----------------------------------------------------------------------------- * Dynamic libraries support (WIN32 not supported) * ---------------------------------------------------------------------------*/ #if defined(HAVE_DLOPEN) || defined(HAVE_DLOPEN_COMPAT) #ifdef HAVE_DLFCN_H #include #endif #ifndef RTLD_NOW #define RTLD_NOW 0 #endif #ifndef RTLD_LOCAL #define RTLD_LOCAL 0 #endif static void JimFreeOneLoadHandle(void *handle) { dlclose(handle); } static void JimFreeLoadHandles(Jim_Interp *interp, void *data) { Jim_Stack *handles = data; if (handles) { Jim_StackFree(handles); Jim_Free(handles); } } /** * Note that Jim_LoadLibrary() requires a path to an existing file. * * If it is necessary to search JIM_LIBPATH, use Jim_PackageRequire() instead. */ int Jim_LoadLibrary(Jim_Interp *interp, const char *pathName) { void *handle = dlopen(pathName, RTLD_NOW | RTLD_LOCAL); if (handle == NULL) { Jim_SetResultFormatted(interp, "error loading extension \"%s\": %s", pathName, dlerror()); } else { /* We use a unique init symbol depending on the extension name. * This is done for compatibility between static and dynamic extensions. * For extension readline.so, the init symbol is "Jim_readlineInit" */ const char *pt; const char *pkgname; int pkgnamelen; char initsym[40]; typedef int jim_module_init_func_type(Jim_Interp *); jim_module_init_func_type *onload; pt = strrchr(pathName, '/'); if (pt) { pkgname = pt + 1; } else { pkgname = pathName; } pt = strchr(pkgname, '.'); if (pt) { pkgnamelen = pt - pkgname; } else { pkgnamelen = strlen(pkgname); } snprintf(initsym, sizeof(initsym), "Jim_%.*sInit", pkgnamelen, pkgname); if ((onload = (jim_module_init_func_type *)dlsym(handle, initsym)) == NULL) { Jim_SetResultFormatted(interp, "No %s symbol found in extension %s", initsym, pathName); } else if (onload(interp) != JIM_ERR) { /* Add this handle to the stack of handles to be freed */ Jim_Stack *loadHandles = Jim_GetAssocData(interp, "load::handles"); if (loadHandles == NULL) { loadHandles = Jim_Alloc(sizeof(*loadHandles)); Jim_StackInit(loadHandles, JimFreeOneLoadHandle); Jim_SetAssocData(interp, "load::handles", JimFreeLoadHandles, loadHandles); } Jim_StackPush(loadHandles, handle); Jim_SetEmptyResult(interp); return JIM_OK; } } if (handle) { dlclose(handle); } return JIM_ERR; } #else /* JIM_DYNLIB */ int Jim_LoadLibrary(Jim_Interp *interp, const char *pathName) { JIM_NOTUSED(interp); JIM_NOTUSED(pathName); Jim_SetResultString(interp, "the Jim binary has no support for [load]", -1); return JIM_ERR; } void Jim_FreeLoadHandles(Jim_Interp *interp) { } #endif /* JIM_DYNLIB */ /* [load] */ static int Jim_LoadCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return Jim_LoadLibrary(interp, Jim_String(argv[1])); } int Jim_loadInit(Jim_Interp *interp) { Jim_RegisterCmd(interp, "load", "libraryFile", 1, 1, Jim_LoadCoreCommand, NULL, NULL, JIM_CMD_NOTAINT); return JIM_OK; } jimtcl-0.84/jim-mk.cpp000066400000000000000000001770151522604140100146250ustar00rootroot00000000000000#include #include #include #include #include "jim.h" #include "jimautoconf.h" #include "jim-subcmd.h" extern "C" { /* The whole file is essentially C */ #define MK_PROPERTY_BINARY 'B' #define MK_PROPERTY_INT 'I' #define MK_PROPERTY_LONG 'L' #define MK_PROPERTY_FLOAT 'F' #define MK_PROPERTY_DOUBLE 'D' #define MK_PROPERTY_STRING 'S' #define MK_PROPERTY_VIEW 'V' #define MK_MODE_ORIGINAL -1 #define MK_MODE_READONLY 0 #define MK_MODE_READWRITE 1 #define MK_MODE_EXTEND 2 #define MK_CMD_LEN 32 #define JIM_CURSOR_SPACE (35+JIM_REFERENCE_TAGLEN + 1 + 20) #define JIM_POSITION_SPACE 32 #define MK_VERSION_SPACE 16 #define JIM_MK_DESCR_LEN 64 /* Default, will be reallocated if needed */ #define isnamech(c) ( (c) && !strchr(":,[^]!", (c)) ) #ifndef max #define max(x, y) ((x) >= (y) ? (x) : (y)) #endif /* utilities */ static int JimCheckMkName(Jim_Interp *interp, Jim_Obj *name, const char *type); static const char *JimMkTypeName(char type); static Jim_Obj *JimFromMkDescription(Jim_Interp *interp, const char *descr, const char **endPtr); static int JimToMkDescription(Jim_Interp *interp, Jim_Obj *obj, char **descrPtr); static Jim_Obj *JimGetMkValue(Jim_Interp *interp, c4_Cursor cur, const c4_Property &prop); static int JimSetMkValue(Jim_Interp *interp, c4_Cursor cur, const c4_Property &prop, Jim_Obj *obj); static int JimPipelineBoundary(int argc, Jim_Obj *const *argv); /* property object */ static Jim_Obj *JimNewPropertyObj (Jim_Interp *interp, c4_Property prop); static int JimGetProperty (Jim_Interp *interp, Jim_Obj *obj, c4_View view, const char *what, const c4_Property **propPtr); static int JimGetPropertyTyped (Jim_Interp *interp, Jim_Obj *obj, char type, const c4_Property **propPtr); static int JimGetNewProperty (Jim_Interp *interp, Jim_Obj *obj, c4_View view, char type, const c4_Property **propPtr); static int JimGetProperties (Jim_Interp *interp, int objc, Jim_Obj *const *objv, c4_View view, c4_View *propsPtr); static Jim_Obj *JimViewPropertiesList (Jim_Interp *interp, c4_View view); /* cursor object */ static int JimGetPosition (Jim_Interp *interp, Jim_Obj *obj, c4_View view, int *indexPtr); static int JimGetCursor (Jim_Interp *interp, Jim_Obj *obj, c4_Cursor *curPtr); static int JimGetCursorView (Jim_Interp *interp, Jim_Obj *obj, Jim_Obj **viewObjPtr); static int JimCursorPos (Jim_Interp *interp, Jim_Obj *obj, Jim_Obj **posObjPtr); static int JimIncrCursor (Jim_Interp *interp, Jim_Obj *obj, int offset); static int JimSeekCursor (Jim_Interp *interp, Jim_Obj *obj, Jim_Obj *posObj); /* Also accepts JIM_ERRMSG */ #define JIM_CURSOR_GET (1 << JIM_PRIV_FLAG_SHIFT) #define JIM_CURSOR_SET (2 << JIM_PRIV_FLAG_SHIFT) #define JIM_CURSOR_INSERT (4 << JIM_PRIV_FLAG_SHIFT) static int JimCheckCursor (Jim_Interp *interp, Jim_Obj *curObj, int flags); /* view handle */ static Jim_Obj *JimNewViewObj (Jim_Interp *interp, c4_View view); static int JimGetView (Jim_Interp *interp, Jim_Obj *obj, c4_View *viewPtr); static void JimPinView (Jim_Interp *interp, Jim_Obj *obj); /* ------------------------------------------------------------------------- * Utilities * ------------------------------------------------------------------------- */ static int JimCheckMkName(Jim_Interp *interp, Jim_Obj *name, const char *type) { const char *s; int i, len; s = Jim_GetString(name, &len); if (len > 0 && s[0] == '-') goto err; for (i = 0; i < len; i++) { if (!isnamech(s[i])) goto err; } return JIM_OK; err: Jim_SetResultFormatted(interp, "expected %s name but got \"%#s\"", type ? type : "property", name); return JIM_ERR; } static const char *const jim_mktype_options[] = { "-integer", "-long", "-float", "-double", "-string", "-subview", /* FIXME "-binary", */ 0 }; static const char *const jim_mktype_names[] = { "integer", "long", "float", "double", "string", "subview", /* FIXME "binary", */ 0 }; static const char jim_mktype_types[] = { MK_PROPERTY_INT, MK_PROPERTY_LONG, MK_PROPERTY_FLOAT, MK_PROPERTY_DOUBLE, MK_PROPERTY_STRING, MK_PROPERTY_VIEW, /* MK_PROPERTY_BINARY, */ }; #define JIM_MKTYPES ((int)(sizeof(jim_mktype_types) / sizeof(jim_mktype_types[0]))) static const char *JimMkTypeName(char type) { int i; for (i = 0; i < JIM_MKTYPES; i++) { if (type == jim_mktype_types[i]) return jim_mktype_names[i]; } return "(unknown type)"; } static Jim_Obj *JimFromMkDescription(Jim_Interp *interp, const char *descr, const char **endPtr) { Jim_Obj *result; const char *delim; result = Jim_NewListObj(interp, NULL, 0); for (;;) { if (*descr == ']') { descr++; break; } else if (*descr == '\0') break; else if (*descr == ',') descr++; delim = strpbrk(descr, ",:[]"); /* JimPanic((!delim, "Invalid Metakit description string")); */ Jim_ListAppendElement(interp, result, Jim_NewStringObj(interp, descr, delim - descr)); if (delim[0] == '[') { Jim_ListAppendElement(interp, result, JimFromMkDescription(interp, delim + 1, &descr)); } else if (delim[0] == ':') { Jim_ListAppendElement(interp, result, Jim_NewStringObj(interp, JimMkTypeName(delim[1]), -1)); descr = delim + 2; } else { /* Seems that Metakit never generates descriptions without type * tags, but let's handle this just to be safe */ Jim_ListAppendElement(interp, result, Jim_NewStringObj(interp, JimMkTypeName(MK_PROPERTY_STRING), -1)); } } if (endPtr) *endPtr = descr; return result; } /* This allocates the buffer once per user call and stores it in a static * variable. Recursive calls are distinguished by descrPtr == NULL. */ static int JimToMkDescription(Jim_Interp *interp, Jim_Obj *descrObj, char **descrPtr) { static char *descr, *outPtr; static int bufSize; #define ENLARGE(size) do { \ if ((descr - outPtr) + (size) > bufSize) { \ bufSize = max(2*bufSize, (descr - outPtr) + (size)); \ descr = (char *)Jim_Realloc(descr, bufSize); \ } \ } while(0) int i, count; Jim_Obj *name, *struc; const char *rep; int len; count = Jim_ListLength(interp, descrObj); if (count % 2) { Jim_SetResultString(interp, "view description must have an even number of elements", -1); return JIM_ERR; } if (descrPtr) { descr = (char *)Jim_Alloc(bufSize = JIM_MK_DESCR_LEN); outPtr = descr; } for (i = 0; i < count; i += 2) { Jim_ListIndex(interp, descrObj, i, &name, 0); Jim_ListIndex(interp, descrObj, i + 1, &struc, 0); if (JimCheckMkName(interp, name, NULL) != JIM_OK) goto err; rep = Jim_GetString(name, &len); ENLARGE(len + 3); /* At least :T, or [], */ memcpy(outPtr, rep, len); outPtr += len; if (Jim_ListLength(interp, struc) == 1) { int idx; if (Jim_GetEnum(interp, struc, jim_mktype_names, &idx, "property type", JIM_ERRMSG | JIM_ENUM_ABBREV) != JIM_OK) goto err; *outPtr++ = ':'; *outPtr++ = jim_mktype_types[idx]; } else { *outPtr++ = '['; if (JimToMkDescription(interp, struc, NULL) != JIM_OK) goto err; ENLARGE(2); /* bracket, comma */ *outPtr++ = ']'; } *outPtr++ = ','; } *(--outPtr) = '\0'; #undef ENLARGE if (descrPtr) { *descrPtr = (char *)Jim_Realloc(descr, strlen(descr) + 1); descr = NULL; /* Safety measure */ } return JIM_OK; err: if (descrPtr) Jim_Free(descr); return JIM_ERR; } static Jim_Obj *JimGetMkValue(Jim_Interp *interp, c4_Cursor cur, const c4_Property &prop) { switch (prop.Type()) { case MK_PROPERTY_INT: return Jim_NewIntObj(interp, ((c4_IntProp &)prop).Get(*cur)); case MK_PROPERTY_LONG: return Jim_NewIntObj(interp, ((c4_LongProp &)prop).Get(*cur)); case MK_PROPERTY_FLOAT: return Jim_NewDoubleObj(interp, ((c4_FloatProp &)prop).Get(*cur)); case MK_PROPERTY_DOUBLE: return Jim_NewDoubleObj(interp, ((c4_DoubleProp &)prop).Get(*cur)); case MK_PROPERTY_STRING: return Jim_NewStringObj(interp, ((c4_StringProp &)prop).Get(*cur), -1); case MK_PROPERTY_VIEW: return JimNewViewObj(interp, ((c4_ViewProp &)prop).Get(*cur)); case MK_PROPERTY_BINARY: /* FIXME */ default: /* FIXME Something more meaningful here? */ return Jim_NewEmptyStringObj(interp); } } static int JimSetMkValue(Jim_Interp *interp, c4_Cursor cur, const c4_Property &prop, Jim_Obj *obj) { switch (prop.Type()) { case MK_PROPERTY_INT: { jim_wide value; if (Jim_GetWide(interp, obj, &value) != JIM_OK) return JIM_ERR; ((c4_IntProp &)prop).Set(*cur, value); return JIM_OK; } case MK_PROPERTY_LONG: { jim_wide value; if (Jim_GetWide(interp, obj, &value) != JIM_OK) return JIM_ERR; ((c4_LongProp &)prop).Set(*cur, value); return JIM_OK; } case MK_PROPERTY_FLOAT: { double value; if (Jim_GetDouble(interp, obj, &value) != JIM_OK) return JIM_ERR; ((c4_FloatProp &)prop).Set(*cur, value); return JIM_OK; } case MK_PROPERTY_DOUBLE: { double value; if (Jim_GetDouble(interp, obj, &value) != JIM_OK) return JIM_ERR; ((c4_DoubleProp &)prop).Set(*cur, value); return JIM_OK; } case MK_PROPERTY_STRING: { int len; const char *rep; rep = Jim_GetString(obj, &len); if (len != (int)strlen(rep)) { Jim_SetResultString(interp, "null characters are not allowed in Metakit strings", -1); return JIM_ERR; } ((c4_StringProp &)prop).Set(*cur, rep); return JIM_OK; } case MK_PROPERTY_VIEW: { c4_View value; if (JimGetView(interp, obj, &value) != JIM_OK) return JIM_ERR; ((c4_ViewProp &)prop).Set(*cur, value); } case MK_PROPERTY_BINARY: /* FIXME */ default: Jim_SetResultString(interp, "unsupported Metakit type", -1); return JIM_ERR; } } static int JimPipelineBoundary(int argc, Jim_Obj *const *argv) { const char *rep; int pipe, len; for (pipe = 0; pipe < argc; pipe++) { rep = Jim_GetString(argv[pipe], &len); if (len == 1 && rep[0] == '|') break; } return pipe; } /* ------------------------------------------------------------------------- * Property object * ------------------------------------------------------------------------- */ #define JimPropertyValue(o) ((c4_Property *)((o)->internalRep.ptr)) static void FreePropertyInternalRep(Jim_Interp *interp, Jim_Obj *obj) { delete JimPropertyValue(obj); } static void DupPropertyInternalRep(Jim_Interp *interp, Jim_Obj *oldObj, Jim_Obj *newObj) { newObj->internalRep.ptr = new c4_Property(*JimPropertyValue(oldObj)); newObj->typePtr = oldObj->typePtr; } static void UpdateStringOfProperty(Jim_Obj* obj) { const char *name = JimPropertyValue(obj)->Name(); int len = strlen(name); obj->bytes = (char *) Jim_Alloc(len + 1); memcpy(obj->bytes, name, len + 1); obj->length = len; } static Jim_ObjType propertyObjType = { "mk.property", FreePropertyInternalRep, DupPropertyInternalRep, UpdateStringOfProperty, JIM_TYPE_NONE }; static int JimGetProperty(Jim_Interp *interp, Jim_Obj *obj, c4_View view, const char *name, const c4_Property **propPtr) { int index; if (obj->typePtr == &propertyObjType) { index = view.FindProperty(JimPropertyValue(obj)->GetId()); } else { if (JimCheckMkName(interp, obj, name) != JIM_OK) return JIM_ERR; index = view.FindPropIndexByName(Jim_String(obj)); } if (index != -1) { *propPtr = &view.NthProperty(index); return JIM_OK; } else { Jim_SetResultFormatted(interp, "%s \"%#s\" does not exist", name ? name : "property", obj); return JIM_ERR; } } static int JimGetPropertyTyped(Jim_Interp *interp, Jim_Obj *obj, char type, const c4_Property **propPtr) { c4_Property *prop; if (obj->typePtr == &propertyObjType) { if (JimPropertyValue(obj)->Type() != type) { /* coerce the property type */ prop = new c4_Property(type, JimPropertyValue(obj)->Name()); delete JimPropertyValue(obj); obj->internalRep.ptr = prop; } } else { if (JimCheckMkName(interp, obj, NULL) != JIM_OK) return JIM_ERR; prop = new c4_Property(type, Jim_String(obj)); Jim_FreeIntRep(interp, obj); obj->typePtr = &propertyObjType; obj->internalRep.ptr = (void *)prop; } *propPtr = JimPropertyValue(obj); return JIM_OK; } static int JimGetNewProperty(Jim_Interp *interp, Jim_Obj *obj, c4_View view, char type, const c4_Property **propPtr) { const c4_Property *newp, *prop; if (JimGetPropertyTyped(interp, obj, type, &newp) != JIM_OK) return JIM_ERR; prop = &view.NthProperty(view.AddProperty(*newp)); if (prop->Type() != newp->Type()) { Jim_SetResultFormatted(interp, "property \"%#s\" is %s, not %s", obj, JimMkTypeName(prop->Type()), JimMkTypeName(newp->Type())); return JIM_ERR; } *propPtr = prop; return JIM_OK; } static int JimGetProperties(Jim_Interp *interp, int objc, Jim_Obj *const *objv, c4_View view, c4_View *propsPtr) { int i; const c4_Property *prop; c4_View props; for (i = 0; i < objc; i++) { if (JimGetProperty(interp, objv[i], view, NULL, &prop) != JIM_OK) return JIM_ERR; props.AddProperty(*prop); } *propsPtr = props; return JIM_OK; } static Jim_Obj *JimNewPropertyObj(Jim_Interp *interp, c4_Property prop) { Jim_Obj *obj; obj = Jim_NewObj(interp); obj->typePtr = &propertyObjType; obj->bytes = NULL; obj->internalRep.ptr = new c4_Property(prop); return obj; } /* ------------------------------------------------------------------------- * Cursor object * ------------------------------------------------------------------------- */ /* Position ---------------------------------------------------------------- */ /* A normal position if endFlag == 0; otherwise an offset from end+1 (!) */ typedef struct MkPosition { int index; int endFlag; } MkPosition; /* This is mostly the same as SetIndexFromAny, but preserves more information * and allows multiple [+-]integer parts. */ static int GetPosition(Jim_Interp *interp, Jim_Obj *obj, MkPosition *posPtr) { MkPosition pos; const char *rep; char *end; int sign, offset; rep = Jim_String(obj); if (strncmp(rep, "end", 3) == 0) { pos.endFlag = 1; pos.index = -1; rep += 3; } else { pos.endFlag = 0; pos.index = strtol(rep, &end, 10); if (end == rep) goto err; rep = end; } while ((rep[0] == '+') || (rep[0] == '-')) { sign = (rep[0] == '+' ? 1 : -1); rep++; offset = strtol(rep, &end, 10); if (end == rep) goto err; pos.index += sign * offset; rep = end; } while (isspace(UCHAR(*rep))) rep++; if (*rep != '\0') goto err; *posPtr = pos; return JIM_OK; err: Jim_SetResultFormatted(interp, "expected cursor position but got \"%#s\"", obj); return JIM_ERR; } static int PositionIndex(const MkPosition *posPtr, c4_View view) { if (posPtr->endFlag) return view.GetSize() + posPtr->index; else return posPtr->index; } static int JimGetPosition(Jim_Interp *interp, Jim_Obj *obj, c4_View view, int *indexPtr) { MkPosition pos; if (GetPosition(interp, obj, &pos) != JIM_OK) return JIM_ERR; *indexPtr = PositionIndex(&pos, view); return JIM_OK; } /* Cursor type ------------------------------------------------------------- */ typedef struct MkCursor { MkPosition pos; Jim_Obj *viewObj; } MkCursor; #define JimCursorValue(obj) ((MkCursor *)(obj->internalRep.ptr)) static void FreeCursorInternalRep(Jim_Interp *interp, Jim_Obj *obj) { Jim_DecrRefCount(interp, JimCursorValue(obj)->viewObj); Jim_Free(obj->internalRep.ptr); } static void DupCursorInternalRep(Jim_Interp *interp, Jim_Obj *oldObj, Jim_Obj *newObj) { newObj->internalRep.ptr = Jim_Alloc(sizeof(MkCursor)); *JimCursorValue(newObj) = *JimCursorValue(oldObj); Jim_IncrRefCount(JimCursorValue(oldObj)->viewObj); newObj->typePtr = oldObj->typePtr; } static void UpdateStringOfCursor(Jim_Obj *obj) { char buf[JIM_CURSOR_SPACE + 1]; MkCursor *curPtr = JimCursorValue(obj); int idx, len; len = snprintf(buf, JIM_CURSOR_SPACE + 1, "%s!", Jim_String(curPtr->viewObj)); if (curPtr->pos.endFlag) { idx = curPtr->pos.index + 1; if (idx == 0) len += snprintf(buf + len, JIM_CURSOR_SPACE + 1 - len, "end"); else len += snprintf(buf + len, JIM_CURSOR_SPACE + 1 - len, "end%+d", idx); } else { len += snprintf(buf + len, JIM_CURSOR_SPACE + 1 - len, "%d", curPtr->pos.index); } obj->bytes = (char *)Jim_Alloc(len + 1); memcpy(obj->bytes, buf, len + 1); obj->length = len; } static Jim_ObjType cursorObjType = { "mk.cursor", FreeCursorInternalRep, DupCursorInternalRep, UpdateStringOfCursor, JIM_TYPE_REFERENCES }; static int SetCursorFromAny(Jim_Interp *interp, Jim_Obj *obj) { const char *rep, *delim; int len; Jim_Obj *posObj; MkCursor cur; rep = Jim_GetString(obj, &len); delim = strrchr(rep, '!'); if (!delim) { Jim_SetResultFormatted(interp, "expected cursor but got \"%#s\"", obj); return JIM_ERR; } cur.viewObj = Jim_NewStringObj(interp, rep, delim - rep); posObj = Jim_NewStringObj(interp, delim + 1, len - (delim - rep) - 1); if (GetPosition(interp, posObj, &cur.pos) != JIM_OK) { Jim_FreeNewObj(interp, posObj); Jim_FreeNewObj(interp, cur.viewObj); return JIM_ERR; } Jim_FreeIntRep(interp, obj); Jim_FreeNewObj(interp, posObj); Jim_IncrRefCount(cur.viewObj); obj->typePtr = &cursorObjType; obj->internalRep.ptr = Jim_Alloc(sizeof(MkCursor)); *JimCursorValue(obj) = cur; return JIM_OK; } /* Functions --------------------------------------------------------------- */ static int JimCursorPos(Jim_Interp *interp, Jim_Obj *obj, Jim_Obj **posObjPtr) { if (obj->typePtr != &cursorObjType && SetCursorFromAny(interp, obj) != JIM_OK) return JIM_ERR; *posObjPtr = Jim_NewStringObj(interp, strrchr(Jim_String(obj), '!') + 1, -1); return JIM_OK; } static int JimGetCursorView(Jim_Interp *interp, Jim_Obj *obj, Jim_Obj **viewObjPtr) { if (obj->typePtr != &cursorObjType && SetCursorFromAny(interp, obj) != JIM_OK) return JIM_ERR; *viewObjPtr = JimCursorValue(obj)->viewObj; return JIM_OK; } static int JimGetCursor(Jim_Interp *interp, Jim_Obj *obj, c4_Cursor *curPtr) { c4_View view; if (obj->typePtr != &cursorObjType && SetCursorFromAny(interp, obj) != JIM_OK) return JIM_ERR; if (JimGetView(interp, JimCursorValue(obj)->viewObj, &view) != JIM_OK) return JIM_ERR; if (curPtr) *curPtr = &view[PositionIndex(&JimCursorValue(obj)->pos, view)]; return JIM_OK; } static int JimIncrCursor(Jim_Interp *interp, Jim_Obj *obj, int offset) { /* JimPanic((Jim_IsShared(obj), "JimIncrCursor called with shared object")) */ if (obj->typePtr != &cursorObjType && SetCursorFromAny(interp, obj) != JIM_OK) return JIM_ERR; Jim_InvalidateStringRep(obj); JimCursorValue(obj)->pos.index += offset; return JIM_OK; } static int JimSeekCursor(Jim_Interp *interp, Jim_Obj *obj, Jim_Obj *posObj) { /* JimPanic((Jim_IsShared(obj), "JimSeekCursor called with shared object")) */ if (obj->typePtr != &cursorObjType && SetCursorFromAny(interp, obj) != JIM_OK) return JIM_ERR; Jim_InvalidateStringRep(obj); return GetPosition(interp, posObj, &JimCursorValue(obj)->pos); } static int JimCheckCursor(Jim_Interp *interp, Jim_Obj *curObj, int flags) { static c4_View nullView; c4_Cursor cur = &nullView[0]; int size; if (JimGetCursor(interp, curObj, &cur) != JIM_OK) return JIM_ERR; size = (*cur).Container().GetSize(); if ((flags & JIM_CURSOR_GET) && (cur._index < 0 || cur._index >= size)) { if (flags & JIM_ERRMSG) { Jim_SetResultFormatted(interp, "cursor \"%#s\" does not point to an existing row", curObj); } return JIM_ERR; } else if ((flags & JIM_CURSOR_SET) && cur._index < 0) { if (flags & JIM_ERRMSG) { Jim_SetResultFormatted(interp, "cursor \"%#s\" points before start of view", curObj); } return JIM_ERR; } else if ((flags & JIM_CURSOR_INSERT) && (cur._index < 0 || cur._index > size)) { if (flags & JIM_ERRMSG) { Jim_SetResultFormatted(interp, "cursor \"%#s\" does not point to a valid insert position", curObj); } return JIM_ERR; } return JIM_OK; } /* Records ----------------------------------------------------------------- */ static int cursor_cmd_get(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { c4_View view; c4_Cursor cur = &view[0]; if (JimGetCursor(interp, argv[0], &cur) != JIM_OK) return JIM_ERR; if (JimCheckCursor(interp, argv[0], JIM_ERRMSG | JIM_CURSOR_GET) != JIM_OK) return JIM_ERR; view = (*cur).Container(); if (argc == 1) { /* Return all properties */ int i, count; Jim_Obj *result; result = Jim_NewListObj(interp, NULL, 0); count = view.NumProperties(); for (i = 0; i < count; i++) { c4_Property prop = view.NthProperty(i); Jim_ListAppendElement(interp, result, JimNewPropertyObj(interp, prop)); Jim_ListAppendElement(interp, result, JimGetMkValue(interp, cur, prop)); } Jim_SetResult(interp, result); return JIM_OK; } else { /* Return a single property */ const c4_Property *propPtr; int pipe; pipe = JimPipelineBoundary(argc, argv); if (pipe == 2) { /* No type annotation, existing property */ if (JimGetProperty(interp, argv[1], view, NULL, &propPtr) != JIM_OK) return JIM_ERR; } else if (pipe == 3) { /* Explicit type annotation; the property may be new */ int idx; if (Jim_GetEnum(interp, argv[1], jim_mktype_options, &idx, "property type", JIM_ERRMSG | JIM_ENUM_ABBREV) != JIM_OK) return JIM_ERR; if (JimGetNewProperty(interp, argv[2], view, jim_mktype_types[idx], &propPtr) != JIM_OK) return JIM_ERR; } else { Jim_WrongNumArgs(interp, 0, NULL, "cursor get ?-type? ?prop?"); return JIM_ERR; } Jim_SetResult(interp, JimGetMkValue(interp, cur, *propPtr)); if (pipe == argc) return JIM_OK; else return Jim_EvalObjPrefix(interp, Jim_GetResult(interp), argc - pipe - 1, argv + pipe + 1); } } static int cursor_cmd_set(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { c4_View view; c4_Cursor cur = &view[0]; const c4_Property *propPtr; int i, oldSize; if (JimGetCursor(interp, argv[0], &cur) != JIM_OK) return JIM_ERR; if (JimCheckCursor(interp, argv[0], JIM_ERRMSG | JIM_CURSOR_SET) != JIM_OK) return JIM_ERR; view = (*cur).Container(); oldSize = view.GetSize(); if (cur._index >= oldSize) view.SetSize(cur._index + 1); if (argc == 2) { /* Update everything except subviews from a dictionary in argv[1]. * No new properties are permitted. */ int objc; Jim_Obj **objv; if (Jim_DictPairs(interp, argv[1], &objv, &objc) != JIM_OK) goto err; for (i = 0; i < objc; i += 2) { if (JimGetProperty(interp, objv[i], view, NULL, &propPtr) != JIM_OK || JimSetMkValue(interp, cur, *propPtr, objv[i+1]) != JIM_OK) { Jim_Free(objv); goto err; } } } else { /* Update everything from argv[1..]. New properties are permitted if * explicitly typed. */ for (i = 1; i < argc; i += 2) { if (Jim_String(argv[i])[0] == '-') { int idx; if (i + 2 >= argc) { Jim_WrongNumArgs(interp, 2, argv, "?-type? prop value ?...?"); goto err; } if (Jim_GetEnum(interp, argv[i], jim_mktype_options, &idx, "property type", JIM_ERRMSG | JIM_ENUM_ABBREV) != JIM_OK) goto err; if (JimGetNewProperty(interp, argv[i+1], view, jim_mktype_types[idx], &propPtr) != JIM_OK) goto err; i++; } else { if (i + 1 >= argc) { Jim_WrongNumArgs(interp, 2, argv, "?-type? prop value ?...?"); goto err; } if (JimGetProperty(interp, argv[i], view, NULL, &propPtr) != JIM_OK) goto err; } if (JimSetMkValue(interp, cur, *propPtr, argv[i+1]) != JIM_OK) goto err; } } return JIM_OK; err: view.SetSize(oldSize); return JIM_ERR; } static int cursor_cmd_insert(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { c4_View view; c4_Cursor cur = &view[0]; jim_wide count; if (JimGetCursor(interp, argv[0], &cur) != JIM_OK) return JIM_ERR; if (JimCheckCursor(interp, argv[0], JIM_ERRMSG | JIM_CURSOR_INSERT) != JIM_OK) return JIM_ERR; view = (*cur).Container(); if (argc == 1) count = 1; else { if (Jim_GetWide(interp, argv[1], &count) != JIM_OK) return JIM_ERR; } if (count > 0) { c4_Row empty; view.InsertAt(cur._index, empty, (int)count); } Jim_SetEmptyResult(interp); return JIM_OK; } static int cursor_cmd_remove(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { c4_View view; c4_Cursor cur = &view[0]; int pos; jim_wide count; if (JimGetCursor(interp, argv[0], &cur) != JIM_OK) return JIM_ERR; if (JimCheckCursor(interp, argv[0], JIM_ERRMSG | JIM_CURSOR_SET) != JIM_OK) return JIM_ERR; view = (*cur).Container(); pos = cur._index; if (argc == 1) count = 1; else { if (Jim_GetWide(interp, argv[1], &count) != JIM_OK) return JIM_ERR; } if (pos + count < view.GetSize()) count = view.GetSize() - pos; if (pos < view.GetSize()) view.RemoveAt(pos, (int)count); return JIM_OK; } /* Attributes -------------------------------------------------------------- */ static int cursor_cmd_view(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *viewObj; if (JimGetCursorView(interp, argv[0], &viewObj) != JIM_OK) return JIM_ERR; JimPinView(interp, viewObj); Jim_SetResult(interp, viewObj); return JIM_OK; } /* Positioning ------------------------------------------------------------- */ static int cursor_cmd_tell(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { if (argc == 1) { Jim_Obj *result; if (JimCursorPos(interp, argv[0], &result) != JIM_OK) return JIM_ERR; Jim_SetResult(interp, result); } else { static c4_View nullView; c4_Cursor cur = &nullView[0]; if (!Jim_CompareStringImmediate(interp, argv[0], "-absolute")) { Jim_SetResultFormatted(interp, "bad option \"%#s\": must be -absolute", argv[0]); return JIM_ERR; } if (JimGetCursor(interp, argv[1], &cur) != JIM_OK) return JIM_ERR; Jim_SetResultInt(interp, cur._index); } return JIM_OK; } static int cursor_cmd_validfor(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { static const char *options[] = { "get", "set", "insert", "remove", 0 }; static int optflags[] = { JIM_CURSOR_GET, JIM_CURSOR_SET, JIM_CURSOR_INSERT, JIM_CURSOR_SET }; int idx; if (argc == 1) idx = 0; else { if (Jim_GetEnum(interp, argv[0], options, &idx, NULL, JIM_ERRMSG | JIM_ENUM_ABBREV) != JIM_OK) return JIM_ERR; } if (JimGetCursor(interp, argv[argc-1], NULL) != JIM_OK) return JIM_ERR; Jim_SetResultBool(interp, JimCheckCursor(interp, argv[argc-1], optflags[idx]) == JIM_OK); return JIM_OK; } static int cursor_cmd_seek(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *curObj; curObj = Jim_GetVariable(interp, argv[0], JIM_ERRMSG | JIM_UNSHARED); if (curObj == NULL) return JIM_ERR; if (JimSeekCursor(interp, curObj, argv[1]) != JIM_OK) return JIM_ERR; Jim_SetResult(interp, curObj); return JIM_OK; } static int cursor_cmd_incr(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *curObj; jim_wide offset; if (argc == 1) offset = 1; else { if (Jim_GetWide(interp, argv[1], &offset) != JIM_OK) return JIM_ERR; } curObj = Jim_GetVariable(interp, argv[0], JIM_ERRMSG | JIM_UNSHARED); if (curObj == NULL) return JIM_ERR; if (JimIncrCursor(interp, curObj, (int)offset) != JIM_OK) return JIM_ERR; Jim_SetResult(interp, curObj); return JIM_OK; } /* Command table ----------------------------------------------------------- */ static const jim_subcmd_type cursor_command_table[] = { /* Records */ { "get", "cur ?-type? ?prop?", cursor_cmd_get, 1, -1, 0, /*"Get the whole record or a specific property at the cursor"*/ }, { "set", "cur [dict | ?-type? field value ?...?]", cursor_cmd_set, 1, -1, 0, /*"Update the record at the cursor"*/ }, { "insert", "cur ?count?", cursor_cmd_insert, 1, 2, 0, /*"Insert a specified number of empty rows at the cursor (default 1)"*/ }, { "remove", "cur ?count?", cursor_cmd_remove, 1, 2, 0, /*"Remove a specified number of rows at the cursor (default 1)"*/ }, /* Attributes */ { "view", "cur", cursor_cmd_view, 1, 1, 0, /*"Get the view the cursor points into"*/ }, /* Positioning */ { "tell", "?-absolute? cur", cursor_cmd_tell, 1, 2, 0, /*"Get the position of the cursor"*/ }, { "validfor", "?command? cur", cursor_cmd_validfor, 1, 2, 0, /*"Checks if the cursor is valid for get (default), set or insert commands"*/ }, { "seek", "curVar index", cursor_cmd_seek, 2, 2, 0, /*"Seek to the specified index in the view"*/ }, { "incr", "curVar ?offset?", cursor_cmd_incr, 1, 2, 0, /*"Move the cursor offset records from its current position (default 1)"*/ }, { 0 } }; static int JimCursorCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *cmdObj; if (argc < 2) { Jim_WrongNumArgs(interp, 1, argv, "command ..."); return JIM_ERR; } cmdObj = Jim_NewStringObj(interp, "cursor ", -1); Jim_AppendObj(interp, cmdObj, argv[1]); if (Jim_GetCommand(interp, cmdObj, 0) != NULL) return Jim_EvalObjPrefix(interp, cmdObj, argc - 2, argv + 2); else { Jim_FreeNewObj(interp, cmdObj); return Jim_CallSubCmd(interp, Jim_ParseSubCmd(interp, cursor_command_table, argc, argv), argc, argv); } } /* ------------------------------------------------------------------------- * View handle * ------------------------------------------------------------------------- */ /* Views aren't really Jim objects; instead, they are Tk-style commands with * oo.tcl-like lifetime management. Additionally, all views are initially * created as one-shot, meaning that they die after one command. Call * JimPinView to make a view object persistent. * * It is valid to rename a view in the Tcl land, but by doing this you take * the responsibility of destroying the object when it's no longer needed. * Any cursors that pointed into the view become invalid. */ static int JimViewSubCmdProc(Jim_Interp *interp, int argc, Jim_Obj *const *argv); static int JimOneShotViewSubCmdProc(Jim_Interp *interp, int argc, Jim_Obj *const *argv); /* Unary operations -------------------------------------------------------- */ #define UNOP(name, Method) \ static int view_cmd_##name(Jim_Interp *interp, int argc, Jim_Obj *const *argv) \ { \ const c4_View *viewPtr = (const c4_View *)Jim_CmdPrivData(interp); \ \ Jim_SetResult(interp, JimNewViewObj(interp, viewPtr->Method())); \ return JIM_OK; \ } UNOP(copy, Duplicate) UNOP(clone, Clone) UNOP(unique, Unique) #undef UNOP static int view_cmd_blocked(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const c4_View *viewPtr = (const c4_View *)Jim_CmdPrivData(interp); if (viewPtr->GetSize() != 1 || strcmp(viewPtr->NthProperty(0).Name(), "_B") != 0 || viewPtr->NthProperty(0).Type() != MK_PROPERTY_VIEW) { Jim_SetResultString(interp, "blocked view must have exactly one subview property called _B", -1); return JIM_ERR; } Jim_SetResult(interp, JimNewViewObj(interp, viewPtr->Blocked())); return JIM_OK; } /* Binary operations ------------------------------------------------------- */ #define BINOP(name, Method) \ static int view_cmd_##name(Jim_Interp *interp, int argc, Jim_Obj *const *argv) \ { \ const c4_View *viewPtr = (const c4_View *)Jim_CmdPrivData(interp); \ c4_View otherView; \ \ if (JimGetView(interp, argv[0], &otherView) != JIM_OK) \ return JIM_ERR; \ \ Jim_SetResult(interp, JimNewViewObj(interp, viewPtr->Method(otherView))); \ return JIM_OK; \ } BINOP(pair, Pair) BINOP(concat, Concat) BINOP(product, Product) BINOP(union, Union) BINOP(intersect, Intersect) BINOP(minus, Minus) BINOP(different, Different) #undef BINOP /* Projections ------------------------------------------------------------- */ static int view_cmd_project(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const c4_View *viewPtr = (const c4_View *)Jim_CmdPrivData(interp); c4_View props; if (JimGetProperties(interp, argc, argv, *viewPtr, &props) != JIM_OK) return JIM_ERR; Jim_SetResult(interp, JimNewViewObj(interp, viewPtr->Project(props))); return JIM_OK; } static int view_cmd_without(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const c4_View *viewPtr = (const c4_View *)Jim_CmdPrivData(interp); c4_View props; if (JimGetProperties(interp, argc, argv, *viewPtr, &props) != JIM_OK) return JIM_ERR; Jim_SetResult(interp, JimNewViewObj(interp, viewPtr->ProjectWithout(props))); return JIM_OK; } static int view_cmd_range(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const c4_View *viewPtr = (const c4_View *)Jim_CmdPrivData(interp); int start, end; jim_wide step; if (JimGetPosition(interp, argv[0], *viewPtr, &start) != JIM_OK || JimGetPosition(interp, argv[1], *viewPtr, &end) != JIM_OK) { return JIM_ERR; } if (argc == 2) step = 1; else if (Jim_GetWide(interp, argv[2], &step) != JIM_OK) return JIM_ERR; Jim_SetResult(interp, JimNewViewObj(interp, viewPtr->Slice(start, end + 1, (int)step))); return JIM_OK; } /* Ordering ---------------------------------------------------------------- */ static int view_cmd_sort(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const c4_View *viewPtr = (const c4_View *)Jim_CmdPrivData(interp); c4_View sortProps, revProps; const c4_Property *propPtr; int i, len; const char *rep; int reverse; Jim_Obj *propObj; /* Special case: property names may be preceded with a dash. Use * a temporary object in this case. */ for (i = 0; i < argc; i++) { propObj = argv[i]; rep = Jim_GetString(argv[i], &len); reverse = (len > 0 && rep[0] == '-'); if (reverse) propObj = Jim_NewStringObj(interp, rep + 1, len - 1); if (JimGetProperty(interp, propObj, *viewPtr, NULL, &propPtr) != JIM_OK) { if (reverse) Jim_FreeNewObj(interp, propObj); return JIM_ERR; } sortProps.AddProperty(*propPtr); if (reverse) { revProps.AddProperty(*propPtr); Jim_FreeNewObj(interp, propObj); } } if (sortProps.GetSize() == 0) Jim_SetResult(interp, JimNewViewObj(interp, viewPtr->Sort())); else if (revProps.GetSize() == 0) Jim_SetResult(interp, JimNewViewObj(interp, viewPtr->SortOn(sortProps))); else Jim_SetResult(interp, JimNewViewObj(interp, viewPtr->SortOnReverse(sortProps, revProps))); return JIM_OK; } /* Metakit core seems to be doing something similar for SortOn, but neither * Ordered nor Hash use it, for unknown reason. */ static int BubbleProperties(Jim_Interp *interp, c4_View orig, int objc, Jim_Obj *const *objv, c4_View *projPtr) { c4_View proj; const c4_Property *propPtr; int i, count; for (i = 0; i < objc; i++) { if (JimGetProperty(interp, objv[i], orig, NULL, &propPtr) != JIM_OK) return JIM_ERR; proj.AddProperty(*propPtr); } count = orig.NumProperties(); for (i = 0; i < count; i++) proj.AddProperty(orig.NthProperty(i)); *projPtr = proj; return JIM_OK; } static int view_cmd_ordered(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const c4_View *viewPtr = (const c4_View *)Jim_CmdPrivData(interp); c4_View proj; if (BubbleProperties(interp, *viewPtr, argc, argv, &proj) != JIM_OK) return JIM_ERR; Jim_SetResult(interp, JimNewViewObj(interp, proj.Ordered(argc))); return JIM_OK; } static int view_cmd_hash(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const c4_View *viewPtr = (const c4_View *)Jim_CmdPrivData(interp); c4_View hash, proj; if (JimGetView(interp, argv[0], &hash) != JIM_OK) return JIM_ERR; if (hash.GetSize() != 2 || strcmp(hash.NthProperty(0).Name(), "_H") != 0 || hash.NthProperty(0).Type() != MK_PROPERTY_INT || strcmp(hash.NthProperty(1).Name(), "_R") != 0 || hash.NthProperty(1).Type() != MK_PROPERTY_INT) /* Ouch. */ { Jim_SetResultString(interp, "hash view must be laid out as {_H integer _R integer}", -1); return JIM_ERR; } if (BubbleProperties(interp, *viewPtr, argc - 1, argv + 1, &proj) != JIM_OK) return JIM_ERR; Jim_SetResult(interp, JimNewViewObj(interp, proj.Hash(hash, argc - 1))); return JIM_OK; } /* Relational operations --------------------------------------------------- */ static int view_cmd_join(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const c4_View *viewPtr = (const c4_View *)Jim_CmdPrivData(interp); c4_View other, props; int outer, off; if (JimGetView(interp, argv[0], &other) != JIM_OK) return JIM_ERR; off = 1; outer = 0; if (Jim_CompareStringImmediate(interp, argv[1], "-outer")) { off++; outer = 1; } if (JimGetProperties(interp, argc - off, argv + off, *viewPtr, &props) != JIM_OK) return JIM_ERR; Jim_SetResult(interp, JimNewViewObj(interp, viewPtr->Join(props, other, outer))); return JIM_OK; } static int view_cmd_group(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const c4_View *viewPtr = (const c4_View *)Jim_CmdPrivData(interp); const c4_Property *subviewPtr; c4_View props; if (JimGetPropertyTyped(interp, argv[0], MK_PROPERTY_VIEW, &subviewPtr) != JIM_OK) return JIM_ERR; if (JimGetProperties(interp, argc - 1, argv + 1, *viewPtr, &props) != JIM_OK) return JIM_ERR; Jim_SetResult(interp, JimNewViewObj(interp, viewPtr->GroupBy(props, *(c4_ViewProp *)subviewPtr))); return JIM_OK; } static int view_cmd_flatten(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const c4_View *viewPtr = (const c4_View *)Jim_CmdPrivData(interp); const c4_Property *subviewPtr; if (JimGetProperty(interp, argv[0], *viewPtr, NULL, &subviewPtr) != JIM_OK) return JIM_ERR; if (subviewPtr->Type() != MK_PROPERTY_VIEW) { Jim_SetResultFormatted(interp, "expected a subview property but got %s one", JimMkTypeName(subviewPtr->Type())); return JIM_ERR; } Jim_SetResult(interp, JimNewViewObj(interp, viewPtr->JoinProp(*(c4_ViewProp *)subviewPtr))); return JIM_OK; } /* View queries ------------------------------------------------------------ */ static int view_cmd_properties(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const c4_View *viewPtr = (const c4_View *) Jim_CmdPrivData(interp); Jim_SetResult(interp, JimViewPropertiesList(interp, *viewPtr)); return JIM_OK; } static int view_cmd_size(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const c4_View *viewPtr = (const c4_View *) Jim_CmdPrivData(interp); Jim_SetResultInt(interp, viewPtr->GetSize()); return JIM_OK; } static int view_cmd_resize(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { c4_View *view = (c4_View *) Jim_CmdPrivData(interp); jim_wide size; if (Jim_GetWide(interp, argv[0], &size) != JIM_OK) return JIM_ERR; if (size < 0 || size > INT_MAX) { Jim_SetResultFormatted(interp, "view size \"%#s\" is out of range", argv[0]); return JIM_ERR; } view->SetSize((int)size); Jim_SetResult(interp, argv[0]); return JIM_OK; } static int view_cmd_type(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const c4_View *viewPtr = (const c4_View *)Jim_CmdPrivData(interp); if (argc == 1) { const c4_Property *propPtr; if (JimGetProperty(interp, argv[0], *viewPtr, NULL, &propPtr) != JIM_OK) return JIM_ERR; Jim_SetResultString(interp, JimMkTypeName(propPtr->Type()), -1); } else { Jim_Obj *result; int i, count; result = Jim_NewListObj(interp, NULL, 0); count = viewPtr->NumProperties(); for (i = 0; i < count; i++) { c4_Property prop = viewPtr->NthProperty(i); Jim_ListAppendElement(interp, result, JimNewPropertyObj(interp, prop)); Jim_ListAppendElement(interp, result, Jim_NewStringObj(interp, JimMkTypeName(prop.Type()), -1)); } Jim_SetResult(interp, result); } return JIM_OK; } /* View lifetime ----------------------------------------------------------- */ static int view_cmd_pin(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { JimPinView(interp, argv[0]); Jim_SetResult(interp, argv[0]); return JIM_OK; } static int view_cmd_as(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { JimPinView(interp, argv[0]); Jim_SetVariable(interp, argv[2], argv[0]); Jim_SetResult(interp, argv[0]); return JIM_OK; } static int view_cmd_destroy(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_DeleteCommand(interp, argv[0]); return JIM_OK; } /* Command table ----------------------------------------------------------- */ static const jim_subcmd_type view_command_table[] = { /* Unary operations */ { "copy", "", view_cmd_copy, 0, 0, 0, /*"Create a copy of the view with exactly the same data"*/ }, { "clone", "", view_cmd_clone, 0, 0, 0, /*"Create an empty view with the same properties as this one"*/ }, { "unique", "", view_cmd_unique, 0, 0, 0, /*"Derived view without any duplicate rows (read-only, no change notifications)"*/ }, { "blocked", "", view_cmd_blocked, 0, 0, 0, /*"Build a scalable \"blocked\" out of a view with a single subview property called _B"*/ }, /* Binary operations */ #define BINOP(name, descr) \ { #name, "otherView", \ view_cmd_##name, \ 1, 1, 0, \ } BINOP(pair, "Pairwise concatenation of two views"), BINOP(concat, "Concatenation of two views; unlike union, doesn't remove duplicates"), BINOP(product, "Cartesian product of two views, i.e. every row in view paired with every row in otherView"), /* Set operations */ #define SETOP(name, descr) BINOP(name, descr "; works only if all the rows are unique") SETOP(union, "Set union of two views (read-only, no change notifications)"), SETOP(intersect, "Set intersection of two views"), SETOP(different, "Symmetric difference of two views"), SETOP(minus, "Set minus, i.e. all rows from view not in otherView"), #undef SETOP #undef BINOP /* Projections and selections */ { "project", "prop ?prop ...?", view_cmd_project, 1, -1, 0, /*"View projection: only the specified properties, in the specified order"*/ }, { "without", "prop ?prop ...?", view_cmd_without, 1, -1, 0, /*"View projection: remove the specified properties"*/ }, { "range", "first last ?step?", view_cmd_range, 2, 3, 0, /*"Range or slice of the view (read-write, no change notifications)"*/ }, /* Ordering */ { "sort", "?[prop|-prop] ...?", view_cmd_sort, 0, -1, 0, /*"Derived view sorted on the specified properties (in order), or on all properties"*/ }, { "ordered", "prop ?prop ...?", view_cmd_ordered, 1, -1, 0, /*"Consider the underlying view ordered on the specified properties"*/ }, { "hash", "hashView prop ?prop ...?", view_cmd_hash, 2, -1, 0, /*"Mapped view maintaining a hash table on the key consisting of the specified properties"*/ }, /* Relational operations */ { "join", "view ?-outer? prop ?prop ...?", view_cmd_join, 2, -1, 0, /*"Relational join with view on the specified properties"*/ }, { "group", "subviewName prop ?prop ...?", view_cmd_group, 1, -1, 0, /*"Group rows with equal specified properties, move all other properties into subview"*/ }, { "flatten", "subviewProp", view_cmd_flatten, 1, 1, 0, /*"Flatten the specified subview; the inverse of group"*/ }, /* Attributes */ { "properties", "", view_cmd_properties, 0, 0, 0, /*"List the properties in this view"*/ }, { "size", "", view_cmd_size, 0, 0, 0, /*"Return the number of records in the view"*/ }, { "resize", "newSize", view_cmd_resize, 1, 1, 0, /*"Set the number of records in the view"*/ }, { "type", "?prop?", view_cmd_type, 0, 1, 0, /*"Return the type of an existing property, or of all properties"*/ }, /* Lifetime management */ { "pin", "", view_cmd_pin, 0, 0, JIM_MODFLAG_FULLARGV, /*"Marks the view as persistent"*/ }, { "as", "varName", view_cmd_as, 1, 1, JIM_MODFLAG_FULLARGV, /*"Marks the view as persistent and assigns it to the given variable"*/ }, { "destroy", "", view_cmd_destroy, 0, 0, JIM_MODFLAG_FULLARGV, /*"Destroys the view explicitly"*/ }, { 0 } }; static void JimViewDelProc(Jim_Interp *interp, void *privData) { delete (c4_View *)privData; } static int JimViewSubCmdProc(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int pipe, result; Jim_Obj *cmdObj; pipe = JimPipelineBoundary(argc, argv); if (pipe < 1) { Jim_WrongNumArgs(interp, 1, argv, "command ..."); return JIM_ERR; } /* Check for a Tcl command first, and try builtins afterwards. * We have to do it in this order so that Jim_ParseSubCmd isn't too greedy * about abbreviations, and still it can't now detect ambigous abbrevs * properly :( Tcl commands cannot be abbreviated at all. */ cmdObj = Jim_NewStringObj(interp, "mk.view ", -1); Jim_AppendObj(interp, cmdObj, argv[1]); /* The command will be cached even though we discard the result */ if (Jim_GetCommand(interp, cmdObj, 0) != NULL) { /* Shuffle the arguments: $view cmd args... => {mk.view cmd} $view args... */ Jim_Obj **objv = (Jim_Obj **)Jim_Alloc(pipe * sizeof(Jim_Obj *)); objv[0] = cmdObj; objv[1] = argv[0]; memcpy(objv + 2, argv + 2, (pipe - 2) * sizeof(Jim_Obj *)); result = Jim_EvalObjVector(interp, pipe, objv); Jim_Free(objv); } else { Jim_FreeNewObj(interp, cmdObj); result = Jim_CallSubCmd(interp, Jim_ParseSubCmd(interp, view_command_table, pipe, argv), pipe, argv); } if (result != JIM_OK || pipe == argc) return result; else return Jim_EvalObjPrefix(interp, Jim_GetResult(interp), argc - pipe - 1, argv + pipe + 1); } static int JimOneShotViewSubCmdProc(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int result; Jim_Cmd *cmd; result = JimViewSubCmdProc(interp, argc, argv); cmd = Jim_GetCommand(interp, argv[0], 0); if (cmd && !cmd->isproc && cmd->u.native.cmdProc == JimOneShotViewSubCmdProc) Jim_DeleteCommand(interp, argv[0]); return result; } static int JimViewFinalizerProc(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { /* We won't succeed here if the user renamed the command, and this is right */ Jim_DeleteCommand(interp, argv[1]); return JIM_OK; } static Jim_Obj *JimNewViewObj(Jim_Interp *interp, c4_View view) { Jim_Obj *tag, *ref; tag = Jim_NewStringObj(interp, "mk.view", -1); ref = Jim_NewReference(interp, tag, tag, Jim_NewStringObj(interp, "mk.view.finalizer", -1)); Jim_CreateCommand(interp, Jim_String(ref), JimOneShotViewSubCmdProc, new c4_View(view), JimViewDelProc); return ref; } static int JimGetView(Jim_Interp *interp, Jim_Obj *obj, c4_View *viewPtr) { Jim_Cmd *cmd = Jim_GetCommand(interp, obj, 0); if (cmd == NULL || cmd->isproc || cmd->u.native.delProc != JimViewDelProc) { Jim_SetResultFormatted(interp, "invalid view object \"%#s\"", obj); return JIM_ERR; } *viewPtr = *(c4_View *)cmd->u.native.privData; return JIM_OK; } /* Only call this against known view objects. */ static void JimPinView(Jim_Interp *interp, Jim_Obj *obj) { Jim_Cmd *cmd = Jim_GetCommand(interp, obj, 0); /* JimPanic((cmd == NULL, "JimPinView called against non-view")) JimPanic((cmd->u.native.delProc != JimViewDelProc, "JimPinView called against non-view")) */ cmd->u.native.cmdProc = JimViewSubCmdProc; } static Jim_Obj *JimViewPropertiesList(Jim_Interp *interp, c4_View view) { int i, count; Jim_Obj *result; result = Jim_NewListObj(interp, NULL, 0); count = view.NumProperties(); for (i = 0; i < count; i++) { Jim_ListAppendElement(interp, result, Jim_NewStringObj(interp, view.NthProperty(i).Name(), -1)); } return result; } /* ---------------------------------------------------------------------------- * Storage handle * ---------------------------------------------------------------------------- */ /* These are also commands, like views, but must be managed explicitly by the * user. Quite like file handles, actually. */ typedef struct MkStorage { unsigned flags; Jim_Obj *filename; c4_Storage storage; c4_Cursor content; } MkStorage; #define JIM_MKFLAG_INMEMORY 0x0001 #define JIM_MKFLAG_READONLY 0x0002 #define JIM_MKFLAG_EXTEND 0x0004 #define JIM_MKFLAG_AUTOCOMMIT 0x0008 /* Attributes -------------------------------------------------------------- */ static int storage_cmd_autocommit(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { MkStorage *mk = (MkStorage *)Jim_CmdPrivData(interp); if (argc == 1) { jim_wide flag; if (Jim_GetWide(interp, argv[0], &flag) != JIM_OK) return JIM_ERR; if (flag) mk->flags |= JIM_MKFLAG_AUTOCOMMIT; else mk->flags &= ~JIM_MKFLAG_AUTOCOMMIT; mk->storage.AutoCommit(flag); } Jim_SetResultBool(interp, (mk->flags & JIM_MKFLAG_AUTOCOMMIT) != 0); return JIM_OK; } static int storage_cmd_readonly(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { MkStorage *mk = (MkStorage *)Jim_CmdPrivData(interp); Jim_SetResultBool(interp, (mk->flags & JIM_MKFLAG_READONLY) != 0); return JIM_OK; } /* Views ------------------------------------------------------------------- */ static int storage_cmd_views(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { MkStorage *mk = (MkStorage *)Jim_CmdPrivData(interp); Jim_SetResult(interp, JimViewPropertiesList(interp, mk->storage)); return JIM_OK; } static int storage_cmd_view(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { MkStorage *mk = (MkStorage *)Jim_CmdPrivData(interp); const c4_Property *propPtr; if (JimGetProperty(interp, argv[0], mk->storage, "view", &propPtr) != JIM_OK) return JIM_ERR; Jim_SetResult(interp, JimGetMkValue(interp, mk->content, *propPtr)); if (argc == 1) return JIM_OK; else { if (!Jim_CompareStringImmediate(interp, argv[1], "|")) { Jim_SetResultFormatted(interp, "expected start of a pipeline but got \"%#s\"", argv[1]); return JIM_ERR; } return Jim_EvalObjPrefix(interp, Jim_GetResult(interp), argc - 2, argv + 2); } } static int storage_cmd_structure(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { MkStorage *mk = (MkStorage *)Jim_CmdPrivData(interp); if (argc < 2) { /* Query */ const char *name; if (argc == 0) name = NULL; else { const c4_Property *propPtr; if (JimGetProperty(interp, argv[0], mk->storage, "view", &propPtr) != JIM_OK) return JIM_ERR; name = propPtr->Name(); } Jim_SetResult(interp, JimFromMkDescription(interp, mk->storage.Description(name), NULL)); } else { /* Modify */ char *descr; const char *name; int len, dlen; if (JimCheckMkName(interp, argv[0], "view") != JIM_OK) return JIM_ERR; name = Jim_GetString(argv[0], &len); if (JimToMkDescription(interp, argv[1], &descr) != JIM_OK) return JIM_ERR; dlen = strlen(descr); descr = (char *)Jim_Realloc(descr, dlen + len + 2); memmove(descr + len + 1, descr, dlen); memcpy(descr, name, len); descr[len] = '['; descr[len + 1 + dlen] = ']'; descr[len + 1 + dlen + 1] = '\0'; mk->storage.GetAs(descr); Jim_Free(descr); } return JIM_OK; } /* Store operations -------------------------------------------------------- */ static int storage_cmd_commit(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { MkStorage *mk = (MkStorage *)Jim_CmdPrivData(interp); if (mk->flags & JIM_MKFLAG_INMEMORY) { Jim_SetResultString(interp, "cannot commit an in-memory storage", -1); return JIM_ERR; } else if (mk->flags & JIM_MKFLAG_READONLY) { Jim_SetResultString(interp, "cannot commit a read-only storage", -1); return JIM_ERR; } if (mk->storage.Commit(0)) { Jim_SetEmptyResult(interp); return JIM_OK; } else { Jim_SetResultString(interp, "I/O error during commit", -1); return JIM_ERR; } } static int storage_cmd_rollback(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { MkStorage *mk = (MkStorage *)Jim_CmdPrivData(interp); if (mk->flags & JIM_MKFLAG_INMEMORY) { Jim_SetResultString(interp, "cannot rollback an in-memory storage", -1); return JIM_ERR; } if (mk->storage.Rollback(0)) { Jim_SetEmptyResult(interp); return JIM_OK; } else { Jim_SetResultString(interp, "I/O error during rollback", -1); return JIM_ERR; } } static int storage_cmd_close(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return Jim_DeleteCommand(interp, argv[0]); } /* Command table ----------------------------------------------------------- */ static const jim_subcmd_type storage_command_table[] = { /* Options */ { "autocommit", "?value?", storage_cmd_autocommit, 0, 1, 0, /*"Query or modify the auto-commit option of this storage"*/ }, { "readonly", "", storage_cmd_readonly, 0, 0, 0, /*"Returns the read-only status of this storage"*/ }, /* Views */ { "views", "", storage_cmd_views, 0, 0, 0, /*"Returns the list of views stored here"*/ }, { "view", "viewName", storage_cmd_view, 1, -1, 0, /*"Retrieve the view specified by viewName"*/ }, { "structure", "?viewName? ?description?", storage_cmd_structure, 0, 2, 0, /*"Query or modify the structure of this storage"*/ }, /* Store operations */ { "commit", "", storage_cmd_commit, 0, 0, 0, /*"Commit the changes to disk"*/ }, { "rollback", "", storage_cmd_rollback, 0, 0, 0, /*"Revert to the saved state"*/ }, { "close", "", storage_cmd_close, 0, 0, JIM_MODFLAG_FULLARGV, /*"Close this storage"*/ }, { 0 } }; static void JimStorageDelProc(Jim_Interp *interp, void *privData) { MkStorage *mk = (MkStorage *)privData; mk->storage.~c4_Storage(); mk->content.~c4_Cursor(); Jim_DecrRefCount(interp, mk->filename); Jim_Free(mk); } static int JimStorageSubCmdProc(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *cmdObj; cmdObj = Jim_NewStringObj(interp, "mk.storage ", -1); Jim_AppendObj(interp, cmdObj, argv[1]); if (Jim_GetCommand(interp, cmdObj, 0) != NULL) { int result; Jim_Obj **objv = (Jim_Obj **)Jim_Alloc(argc * sizeof(Jim_Obj *)); objv[0] = cmdObj; objv[1] = argv[0]; memcpy(objv + 2, argv + 2, (argc - 2) * sizeof(Jim_Obj *)); result = Jim_EvalObjVector(interp, argc, objv); Jim_Free(objv); return result; } else { Jim_FreeNewObj(interp, cmdObj); return Jim_CallSubCmd(interp, Jim_ParseSubCmd(interp, storage_command_table, argc, argv), argc, argv); } } /* ------------------------------------------------------------------------- * storage ?options? ?filename? * * Creates a new metakit storage object, optionally backed by a file. * * Options apply only when filename is given; these include: * * -readonly Open the file in read-only mode * -original Open the file in read-only mode, discarding possible extends * -extend Open the file in extend mode * -nocommit Do not commit the changes when the storage is closed * ------------------------------------------------------------------------- */ static int JimStorageCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { MkStorage *mk; char buf[MK_CMD_LEN]; int i, mode; static const char *const options[] = { "-readonly", "-original", "-extend", "-nocommit", 0 }; enum { OPT_READONLY, OPT_ORIGINAL, OPT_EXTEND, OPT_NOCOMMIT }; int option; mk = (MkStorage *)Jim_Alloc(sizeof(MkStorage)); mk->flags = JIM_MKFLAG_AUTOCOMMIT; mode = MK_MODE_READWRITE; for (i = 1; i < argc - 1; i++ ) { if (Jim_GetEnum(interp, argv[i], options, &option, NULL, JIM_ERRMSG) != JIM_OK) { Jim_Free(mk); return JIM_ERR; } switch (option) { case OPT_READONLY: if (mode != MK_MODE_READWRITE) goto modeconflict; mode = MK_MODE_READONLY; mk->flags |= JIM_MKFLAG_READONLY; break; case OPT_ORIGINAL: if (mode != MK_MODE_READWRITE) goto modeconflict; mode = MK_MODE_ORIGINAL; mk->flags |= JIM_MKFLAG_READONLY; break; case OPT_EXTEND: if (mode != MK_MODE_READWRITE) goto modeconflict; mode = MK_MODE_EXTEND; mk->flags |= JIM_MKFLAG_EXTEND; break; case OPT_NOCOMMIT: mk->flags &= ~JIM_MKFLAG_AUTOCOMMIT; break; } } if (argc > 1) { new(&mk->storage) c4_Storage(Jim_String(argv[argc-1]), mode); if (!mk->storage.Strategy().IsValid()) { mk->storage.~c4_Storage(); Jim_Free(mk); Jim_SetResultFormatted(interp, "could not open storage \"%#s\"", argv[argc-1]); return JIM_ERR; } mk->filename = argv[argc-1]; if ((mk->flags & JIM_MKFLAG_AUTOCOMMIT) && !(mk->flags & JIM_MKFLAG_READONLY)) mk->storage.AutoCommit(1); } else { mk->flags |= JIM_MKFLAG_INMEMORY; new(&mk->storage) c4_Storage(); mk->filename = Jim_NewEmptyStringObj(interp); } new(&mk->content) c4_Cursor(&mk->storage[0]); Jim_IncrRefCount(mk->filename); snprintf(buf, sizeof(buf), "mk.handle%ld", Jim_GetId(interp)); Jim_CreateCommand(interp, buf, JimStorageSubCmdProc, mk, JimStorageDelProc); Jim_SetResultString(interp, buf, -1); return JIM_OK; modeconflict: Jim_Free(mk); Jim_SetResultString(interp, "only one of -readonly, -original and -extend may be specified", -1); return JIM_ERR; } /* ------------------------------------------------------------------------- * Initialization code * ------------------------------------------------------------------------- */ int Jim_mkInit(Jim_Interp *interp) { char version[MK_VERSION_SPACE]; Jim_PackageProvideCheck(interp, "mk"); snprintf(version, MK_VERSION_SPACE, "%d.%d.%d", d4_MetakitLibraryVersion / 100, d4_MetakitLibraryVersion % 100 / 10, d4_MetakitLibraryVersion % 10); Jim_CreateCommand(interp, "storage", JimStorageCommand, NULL, NULL); Jim_CreateCommand(interp, "cursor", JimCursorCommand, NULL, NULL); Jim_CreateCommand(interp, "mk.view.finalizer", JimViewFinalizerProc, NULL, NULL); return JIM_OK; } } /* extern "C" */ jimtcl-0.84/jim-namespace.c000066400000000000000000000266461522604140100156150ustar00rootroot00000000000000/* * Support for namespaces in jim * * (c) 2011 Steve Bennett * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE JIM TCL PROJECT ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * JIM TCL PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * The views and conclusions contained in the software and documentation * are those of the authors and should not be interpreted as representing * official policies, either expressed or implied, of the Jim Tcl Project. * * Based on code originally from Tcl 6.7: * * Copyright 1987-1991 Regents of the University of California * Permission to use, copy, modify, and distribute this * software and its documentation for any purpose and without * fee is hereby granted, provided that the above copyright * notice appear in all copies. The University of California * makes no representations about the suitability of this * software for any purpose. It is provided "as is" without * express or implied warranty. */ #include #include #include #include #include #include "jim.h" #include "jimautoconf.h" #include "jim-subcmd.h" /* ----------------------------------------------------------------------------- * Namespace support * ---------------------------------------------------------------------------*/ /** * nsObj is a canonical namespace name (.e.g. "" for root, "abc" for ::abc) * * The given name is appended to the namespace name to produce a complete canonical name. * * e.g. "" "abc" => abc * "" "::abc" => abc * "" "abc::def" => abc::def * "abc" "def" => abc::def * "abc" "::def" => def * */ Jim_Obj *JimCanonicalNamespace(Jim_Interp *interp, Jim_Obj *nsObj, Jim_Obj *nameObj) { Jim_Obj *objPtr; const char *name = Jim_String(nameObj); assert(nameObj->refCount != 0); assert(nsObj->refCount != 0); if (name[0] == ':' && name[1] == ':') { /* Absolute namespace */ while (*++name == ':') { } return Jim_NewStringObj(interp, name, -1); } if (Jim_Length(nsObj) == 0) { /* Relative to the global namespace */ return nameObj; } /* Relative to non-global namespace */ objPtr = Jim_DuplicateObj(interp, nsObj); Jim_AppendString(interp, objPtr, "::", 2); Jim_AppendObj(interp, objPtr, nameObj); return objPtr; } int Jim_CreateNamespaceVariable(Jim_Interp *interp, Jim_Obj *varNameObj, Jim_Obj *targetNameObj) { int rc; Jim_IncrRefCount(varNameObj); Jim_IncrRefCount(targetNameObj); /* push non-namespace vars if in namespace eval? */ rc = Jim_SetVariableLink(interp, varNameObj, targetNameObj, interp->topFramePtr); if (rc == JIM_ERR) { /* This is the only reason the link can fail */ Jim_SetResultFormatted(interp, "can't define \"%#s\": name refers to an element in an array", varNameObj); } Jim_DecrRefCount(interp, varNameObj); Jim_DecrRefCount(interp, targetNameObj); return rc; } /** * Returns the parent of the given namespace. * * ::bob::tom => ::bob * bob::tom => bob * ::bob => :: * bob => "" * :: => "" * "" => "" */ Jim_Obj *Jim_NamespaceQualifiers(Jim_Interp *interp, Jim_Obj *ns) { const char *name = Jim_String(ns); const char *pt = strrchr(name, ':'); if (pt && pt != name && pt[-1] == ':') { return Jim_NewStringObj(interp, name, pt - name - 1); } else { return interp->emptyObj; } } Jim_Obj *Jim_NamespaceTail(Jim_Interp *interp, Jim_Obj *ns) { const char *name = Jim_String(ns); const char *pt = strrchr(name, ':'); if (pt && pt != name && pt[-1] == ':') { return Jim_NewStringObj(interp, pt + 1, -1); } else { return ns; } } static Jim_Obj *JimNamespaceCurrent(Jim_Interp *interp) { Jim_Obj *objPtr = Jim_NewStringObj(interp, "::", 2); Jim_AppendObj(interp, objPtr, interp->framePtr->nsObj); return objPtr; } static int JimVariableCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int retcode = JIM_OK; if (argc > 1) { Jim_Obj *targetNameObj; Jim_Obj *localNameObj; targetNameObj = JimCanonicalNamespace(interp, interp->framePtr->nsObj, argv[1]); localNameObj = Jim_NamespaceTail(interp, argv[1]); Jim_IncrRefCount(localNameObj); if (interp->framePtr->level != 0 || Jim_Length(interp->framePtr->nsObj) != 0) { retcode = Jim_CreateNamespaceVariable(interp, localNameObj, targetNameObj); } /* Set the variable via the local name */ if (retcode == JIM_OK && argc > 2) { retcode = Jim_SetVariable(interp, localNameObj, argv[2]); } Jim_DecrRefCount(interp, localNameObj); } return retcode; } /* Used to invoke script-based helpers. * It would be ideal if ensembles were supported in the core */ static int Jim_EvalEnsemble(Jim_Interp *interp, const char *basecmd, const char *subcmd, int argc, Jim_Obj *const *argv) { Jim_Obj *prefixObj = Jim_NewStringObj(interp, basecmd, -1); Jim_AppendString(interp, prefixObj, " ", 1); Jim_AppendString(interp, prefixObj, subcmd, -1); return Jim_EvalObjPrefix(interp, prefixObj, argc, argv); } static int JimNamespaceCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { /* Must be kept in order with the array below */ enum { OPT_CANONICAL, OPT_CODE, OPT_CURRENT, OPT_DELETE, OPT_ENSEMBLE, OPT_EVAL, OPT_EXPORT, OPT_IMPORT, OPT_INSCOPE, OPT_ORIGIN, OPT_PARENT, OPT_QUALIFIERS, OPT_TAIL, OPT_UPVAR, OPT_WHICH, OPT_COUNT, }; static const jim_subcmd_type namespace_cmds[OPT_COUNT + 1] = { JIM_DEF_SUBCMD("canonical", "?current? ?name?", 0, 2), JIM_DEF_SUBCMD("code", "arg", 1, 1), JIM_DEF_SUBCMD("current", NULL, 0, 0), JIM_DEF_SUBCMD("delete", "?name ...?", 0, -1), JIM_DEF_SUBCMD("ensemble", "subcommand ?arg ...?", 1, -1), JIM_DEF_SUBCMD("eval", "name arg ?arg ...?", 2, -1), JIM_DEF_SUBCMD("export", "?...?", 0, -1), JIM_DEF_SUBCMD("import", "?...?", 0, -1), JIM_DEF_SUBCMD("inscope", "name arg ?arg ...?", 2, -1), JIM_DEF_SUBCMD("origin", "name", 1, 1), JIM_DEF_SUBCMD("parent", "?name?", 0, 1), JIM_DEF_SUBCMD("qualifiers", "string", 1, 1), JIM_DEF_SUBCMD("tail", "string", 1, 1), JIM_DEF_SUBCMD("upvar", "ns ?arg ...?", 1, -1), JIM_DEF_SUBCMD("which", "?-command|-variable? name", 1, 2), { NULL } }; const jim_subcmd_type *ct = Jim_ParseSubCmd(interp, namespace_cmds, argc, argv); if (ct) { if (ct->function) { /* This is -help */ return ct->function(interp, argc, argv); } /* (ct - namespace_cmds) is the index into the table */ switch (ct - namespace_cmds) { case OPT_EVAL: { Jim_Obj *nsObj; Jim_Obj *objPtr; if (argc == 4) { objPtr = argv[3]; } else { objPtr = Jim_ConcatObj(interp, argc - 3, argv + 3); } nsObj = JimCanonicalNamespace(interp, interp->framePtr->nsObj, argv[2]); return Jim_EvalNamespace(interp, objPtr, nsObj); } case OPT_CURRENT: Jim_SetResult(interp, JimNamespaceCurrent(interp)); return JIM_OK; case OPT_CANONICAL: if (argc == 2) { Jim_SetResult(interp, interp->framePtr->nsObj); } else if (argc == 3) { Jim_SetResult(interp, JimCanonicalNamespace(interp, interp->framePtr->nsObj, argv[2])); } else { Jim_SetResult(interp, JimCanonicalNamespace(interp, argv[2], argv[3])); } return JIM_OK; case OPT_QUALIFIERS: Jim_SetResult(interp, Jim_NamespaceQualifiers(interp, argv[2])); return JIM_OK; case OPT_EXPORT: return JIM_OK; case OPT_TAIL: if (argc != 3) { Jim_WrongNumArgs(interp, 2, argv, "string"); return JIM_ERR; } Jim_SetResult(interp, Jim_NamespaceTail(interp, argv[2])); return JIM_OK; case OPT_PARENT: { Jim_Obj *objPtr; const char *name; if (argc == 3) { objPtr = argv[2]; } else { objPtr = interp->framePtr->nsObj; } if (Jim_Length(objPtr) == 0 || Jim_CompareStringImmediate(interp, objPtr, "::")) { return JIM_OK; } objPtr = Jim_NamespaceQualifiers(interp, objPtr); name = Jim_String(objPtr); if (name[0] != ':' || name[1] != ':') { /* Make it fully scoped */ Jim_SetResultString(interp, "::", 2); Jim_AppendObj(interp, Jim_GetResult(interp), objPtr); Jim_IncrRefCount(objPtr); Jim_DecrRefCount(interp, objPtr); } else { Jim_SetResult(interp, objPtr); } } return JIM_OK; default: /* Implemented as a Tcl helper proc. * Note that calling a proc will change the current namespace, * so helper procs must call [uplevel namespace canon] to get the callers * namespace. */ return Jim_EvalEnsemble(interp, "namespace", Jim_String(argv[1]), argc - 2, argv + 2); } } return JIM_ERR; } int Jim_namespaceInit(Jim_Interp *interp) { Jim_PackageProvideCheck(interp, "namespace"); Jim_RegisterSimpleCmd(interp, "namespace", "subcommand ?arg ...?", 1, -1, JimNamespaceCmd); Jim_RegisterSimpleCmd(interp, "variable", "name ?value?", 1, 2, JimVariableCmd); return JIM_OK; } jimtcl-0.84/jim-nosignal.c000066400000000000000000000007751522604140100154660ustar00rootroot00000000000000#include #include #include #include /* Implement trivial Jim_SignalId() just good enough for JimMakeErrorCode() in [exec] */ /* This works for mingw, but is not really portable */ #ifndef SIGPIPE #define SIGPIPE 13 #endif #ifndef SIGINT #define SIGINT 2 #endif const char *Jim_SignalId(int sig) { static char buf[10]; switch (sig) { case SIGINT: return "SIGINT"; case SIGPIPE: return "SIGPIPE"; } snprintf(buf, sizeof(buf), "%d", sig); return buf; } jimtcl-0.84/jim-pack.c000066400000000000000000000321051522604140100145620ustar00rootroot00000000000000#include #include /* Provides the [pack] and [unpack] commands to pack and unpack * a binary string to/from arbitrary width integers and strings. * * This may be used to implement the [binary] command. */ /** * Big endian bit test. * * Considers 'bitvect' as a big endian bit stream and returns * bit 'b' as zero or non-zero. */ static int JimTestBitBigEndian(const unsigned char *bitvec, int b) { div_t pos = div(b, 8); return bitvec[pos.quot] & (1 << (7 - pos.rem)); } /** * Little endian bit test. * * Considers 'bitvect' as a little endian bit stream and returns * bit 'b' as zero or non-zero. */ static int JimTestBitLittleEndian(const unsigned char *bitvec, int b) { div_t pos = div(b, 8); return bitvec[pos.quot] & (1 << pos.rem); } /** * Sign extends the given value, 'n' of width 'width' bits. * * For example, sign extending 0x80 with a width of 8, produces -128 */ static jim_wide JimSignExtend(jim_wide n, int width) { if (width == sizeof(jim_wide) * 8) { /* Can't sign extend the maximum size integer */ return n; } if (n & ((jim_wide)1 << (width - 1))) { /* Need to extend */ n -= ((jim_wide)1 << width); } return n; } /** * Big endian integer extraction. * * Considers 'bitvect' as a big endian bit stream. * Returns an integer of the given width (in bits) * starting at the given position (in bits). * * The pos/width must represent bits inside bitvec, * and the width be no more than the width of jim_wide. */ static jim_wide JimBitIntBigEndian(const unsigned char *bitvec, int pos, int width) { jim_wide result = 0; int i; /* Aligned, byte extraction */ if (pos % 8 == 0 && width % 8 == 0) { for (i = 0; i < width; i += 8) { result = (result << 8) + bitvec[(pos + i) / 8]; } return result; } /* Unaligned */ for (i = 0; i < width; i++) { if (JimTestBitBigEndian(bitvec, pos + width - i - 1)) { result |= ((jim_wide)1 << i); } } return result; } /** * Little endian integer extraction. * * Like JimBitIntBigEndian() but considers 'bitvect' as a little endian bit stream. */ static jim_wide JimBitIntLittleEndian(const unsigned char *bitvec, int pos, int width) { jim_wide result = 0; int i; /* Aligned, byte extraction */ if (pos % 8 == 0 && width % 8 == 0) { for (i = 0; i < width; i += 8) { result += (jim_wide)bitvec[(pos + i) / 8] << i; } return result; } /* Unaligned */ for (i = 0; i < width; i++) { if (JimTestBitLittleEndian(bitvec, pos + i)) { result |= ((jim_wide)1 << i); } } return result; } /** * Big endian bit set. * * Considers 'bitvect' as a big endian bit stream and sets * bit 'b' to 'bit' */ static void JimSetBitBigEndian(unsigned char *bitvec, int b, int bit) { div_t pos = div(b, 8); if (bit) { bitvec[pos.quot] |= (1 << (7 - pos.rem)); } else { bitvec[pos.quot] &= ~(1 << (7 - pos.rem)); } } /** * Little endian bit set. * * Considers 'bitvect' as a little endian bit stream and sets * bit 'b' to 'bit' */ static void JimSetBitLittleEndian(unsigned char *bitvec, int b, int bit) { div_t pos = div(b, 8); if (bit) { bitvec[pos.quot] |= (1 << pos.rem); } else { bitvec[pos.quot] &= ~(1 << pos.rem); } } /** * Big endian integer packing. * * Considers 'bitvect' as a big endian bit stream. * Packs integer 'value' of the given width (in bits) * starting at the given position (in bits). * * The pos/width must represent bits inside bitvec, * and the width be no more than the width of jim_wide. */ static void JimSetBitsIntBigEndian(unsigned char *bitvec, jim_wide value, int pos, int width) { int i; /* Common fast option */ if (pos % 8 == 0 && width == 8) { bitvec[pos / 8] = value; return; } for (i = 0; i < width; i++) { int bit = !!(value & ((jim_wide)1 << i)); JimSetBitBigEndian(bitvec, pos + width - i - 1, bit); } } /** * Little endian version of JimSetBitsIntBigEndian() */ static void JimSetBitsIntLittleEndian(unsigned char *bitvec, jim_wide value, int pos, int width) { int i; /* Common fast option */ if (pos % 8 == 0 && width == 8) { bitvec[pos / 8] = value; return; } for (i = 0; i < width; i++) { int bit = !!(value & ((jim_wide)1 << i)); JimSetBitLittleEndian(bitvec, pos + i, bit); } } /** * Binary conversion of jim_wide integer to float * * Considers the least significant bits of * jim_wide 'value' as a IEEE float. * * Should work for both little- and big-endian platforms. */ static float JimIntToFloat(jim_wide value) { int offs; float val; /* Skip offs to get to least significant bytes */ offs = Jim_IsBigEndian() ? (sizeof(jim_wide) - sizeof(float)) : 0; memcpy(&val, (unsigned char *) &value + offs, sizeof(float)); return val; } /** * Binary conversion of jim_wide integer to double * * Double precision version of JimIntToFloat */ static double JimIntToDouble(jim_wide value) { int offs; double val; /* Skip offs to get to least significant bytes */ offs = Jim_IsBigEndian() ? (sizeof(jim_wide) - sizeof(double)) : 0; memcpy(&val, (unsigned char *) &value + offs, sizeof(double)); return val; } /** * Binary conversion of float to jim_wide integer * * Considers the bits of IEEE float 'value' as integer. * The integer is zero-extended to jim_wide. * * Should work for both little- and big-endian platforms. */ static jim_wide JimFloatToInt(float value) { int offs; jim_wide val = 0; /* Skip offs to get to least significant bytes */ offs = Jim_IsBigEndian() ? (sizeof(jim_wide) - sizeof(float)) : 0; memcpy((unsigned char *) &val + offs, &value, sizeof(float)); return val; } /** * Binary conversion of double to jim_wide integer * * Double precision version of JimFloatToInt */ static jim_wide JimDoubleToInt(double value) { int offs; jim_wide val = 0; /* Skip offs to get to least significant bytes */ offs = Jim_IsBigEndian() ? (sizeof(jim_wide) - sizeof(double)) : 0; memcpy((unsigned char *) &val + offs, &value, sizeof(double)); return val; } /** * [unpack] * * Usage: unpack binvalue -intbe|-intle|-uintbe|-uintle|-floatbe|-floatle|-str bitpos bitwidth * * Unpacks bits from $binvalue at bit position $bitpos and with $bitwidth. * Interprets the value according to the type and returns it. */ static int Jim_UnpackCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int option; static const char * const options[] = { "-intbe", "-intle", "-uintbe", "-uintle", "-floatbe", "-floatle", "-str", NULL }; enum { OPT_INTBE, OPT_INTLE, OPT_UINTBE, OPT_UINTLE, OPT_FLOATBE, OPT_FLOATLE, OPT_STR, }; jim_wide pos; jim_wide width; if (Jim_GetEnum(interp, argv[2], options, &option, NULL, JIM_ERRMSG) != JIM_OK) { return JIM_ERR; } if (Jim_GetWideExpr(interp, argv[3], &pos) != JIM_OK) { return JIM_ERR; } if (pos < 0 || (option == OPT_STR && pos % 8)) { Jim_SetResultFormatted(interp, "bad bitoffset: %#s", argv[3]); return JIM_ERR; } if (Jim_GetWideExpr(interp, argv[4], &width) != JIM_OK) { return JIM_ERR; } if (width < 0 || (option == OPT_STR && width % 8) || (option != OPT_STR && width > sizeof(jim_wide) * 8) || ((option == OPT_FLOATLE || option == OPT_FLOATBE) && width != 32 && width != 64)) { Jim_SetResultFormatted(interp, "bad bitwidth: %#s", argv[4]); return JIM_ERR; } if (option == OPT_STR) { int len; const char *str = Jim_GetString(argv[1], &len); if (pos < len * 8) { if (pos + width > len * 8) { width = len * 8 - pos; } Jim_SetResultString(interp, str + pos / 8, width / 8); } return JIM_OK; } else { int len; const unsigned char *str = (const unsigned char *)Jim_GetString(argv[1], &len); jim_wide result = 0; if (pos < len * 8) { if (pos + width > len * 8) { width = len * 8 - pos; } if (option == OPT_INTBE || option == OPT_UINTBE || option == OPT_FLOATBE) { result = JimBitIntBigEndian(str, pos, width); } else { result = JimBitIntLittleEndian(str, pos, width); } if (option == OPT_INTBE || option == OPT_INTLE) { result = JimSignExtend(result, width); } } if (option == OPT_FLOATBE || option == OPT_FLOATLE) { double fresult; if (width == 32) { fresult = (double) JimIntToFloat(result); } else { fresult = JimIntToDouble(result); } Jim_SetResult(interp, Jim_NewDoubleObj(interp, fresult)); } else { Jim_SetResultInt(interp, result); } return JIM_OK; } } /** * [pack] * * Usage: pack varname value -intbe|-intle|-floatle|-floatbe|-str width ?bitoffset? * * Packs the binary representation of 'value' into the variable of the given name. * The value is packed according to the given type, width and bitoffset. * The variable is created if necessary (like [append]) * The variable is expanded if necessary */ static int Jim_PackCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int option; static const char * const options[] = { "-intle", "-intbe", "-floatle", "-floatbe", "-str", NULL }; enum { OPT_LE, OPT_BE, OPT_FLOATLE, OPT_FLOATBE, OPT_STR }; jim_wide pos = 0; jim_wide width; jim_wide value; double fvalue; Jim_Obj *stringObjPtr; int len; if (Jim_GetEnum(interp, argv[3], options, &option, NULL, JIM_ERRMSG) != JIM_OK) { return JIM_ERR; } if ((option == OPT_LE || option == OPT_BE) && Jim_GetWideExpr(interp, argv[2], &value) != JIM_OK) { return JIM_ERR; } if ((option == OPT_FLOATLE || option == OPT_FLOATBE) && Jim_GetDouble(interp, argv[2], &fvalue) != JIM_OK) { return JIM_ERR; } if (Jim_GetWideExpr(interp, argv[4], &width) != JIM_OK) { return JIM_ERR; } if (width <= 0 || (option == OPT_STR && width % 8) || (option != OPT_STR && width > sizeof(jim_wide) * 8) || ((option == OPT_FLOATLE || option == OPT_FLOATBE) && width != 32 && width != 64)) { Jim_SetResultFormatted(interp, "bad bitwidth: %#s", argv[4]); return JIM_ERR; } if (argc == 6) { if (Jim_GetWideExpr(interp, argv[5], &pos) != JIM_OK) { return JIM_ERR; } if (pos < 0 || (option == OPT_STR && pos % 8)) { Jim_SetResultFormatted(interp, "bad bitoffset: %#s", argv[5]); return JIM_ERR; } } stringObjPtr = Jim_GetVariable(interp, argv[1], JIM_UNSHARED); if (!stringObjPtr) { /* Create the string if it doesn't exist */ stringObjPtr = Jim_NewEmptyStringObj(interp); } else if (Jim_IsShared(stringObjPtr)) { stringObjPtr = Jim_DuplicateObj(interp, stringObjPtr); } len = Jim_Length(stringObjPtr) * 8; /* Extend the string as necessary first */ while (len < pos + width) { Jim_AppendString(interp, stringObjPtr, "", 1); len += 8; } Jim_SetResultInt(interp, pos + width); /* Now set the bits. Note that the the string *must* have no non-string rep * since we are writing the bytes directly. */ Jim_AppendString(interp, stringObjPtr, "", 0); /* Convert floating point to integer if necessary */ if (option == OPT_FLOATLE || option == OPT_FLOATBE) { /* Note that the following is slightly incompatible with Tcl behaviour. * In Tcl floating overflow gives FLT_MAX (cf. test binary-13.13). * In Jim Tcl it gives Infinity. This behavior may change. */ value = (width == 32) ? JimFloatToInt((float)fvalue) : JimDoubleToInt(fvalue); } if (option == OPT_BE || option == OPT_FLOATBE) { JimSetBitsIntBigEndian((unsigned char *)stringObjPtr->bytes, value, pos, width); } else if (option == OPT_LE || option == OPT_FLOATLE) { JimSetBitsIntLittleEndian((unsigned char *)stringObjPtr->bytes, value, pos, width); } else { pos /= 8; width /= 8; if (width > Jim_Length(argv[2])) { width = Jim_Length(argv[2]); } memcpy(stringObjPtr->bytes + pos, Jim_String(argv[2]), width); /* No padding is needed since the string is already extended */ } if (Jim_SetVariable(interp, argv[1], stringObjPtr) != JIM_OK) { return JIM_ERR; } return JIM_OK; } int Jim_packInit(Jim_Interp *interp) { Jim_PackageProvideCheck(interp, "pack"); Jim_RegisterSimpleCmd(interp, "pack", "varName value -intle|-intbe|-floatle|-floatbe|-str bitwidth ?bitoffset?", 4, 5, Jim_PackCmd); Jim_RegisterSimpleCmd(interp, "unpack", "binvalue -intbe|-intle|-uintbe|-uintle|-floatbe|-floatle|-str bitpos bitwidth", 4, 4, Jim_UnpackCmd); return JIM_OK; } jimtcl-0.84/jim-package.c000066400000000000000000000176021522604140100152440ustar00rootroot00000000000000#include #include #include "jimautoconf.h" #include #ifdef HAVE_UNISTD_H #include #else #define R_OK 4 #endif /* All packages have a fixed, dummy version */ static const char *package_version_1 = "1.0"; /* ----------------------------------------------------------------------------- * Packages handling * ---------------------------------------------------------------------------*/ int Jim_PackageProvide(Jim_Interp *interp, const char *name, const char *ver, int flags) { /* If the package was already provided returns an error. */ Jim_HashEntry *he = Jim_FindHashEntry(&interp->packages, name); /* An empty result means the automatic entry. This can be replaced */ if (he && *(const char *)he->u.val) { if (flags & JIM_ERRMSG) { Jim_SetResultFormatted(interp, "package \"%s\" was already provided", name); } return JIM_ERR; } Jim_ReplaceHashEntry(&interp->packages, name, (char *)ver); return JIM_OK; } /** * Searches along a of paths for the given package. * * Returns the allocated path to the package file if found, * or NULL if not found. */ static char *JimFindPackage(Jim_Interp *interp, Jim_Obj *prefixListObj, const char *pkgName) { int i; char *buf = Jim_Alloc(JIM_PATH_LEN); int prefixc = Jim_ListLength(interp, prefixListObj); for (i = 0; i < prefixc; i++) { Jim_Obj *prefixObjPtr = Jim_ListGetIndex(interp, prefixListObj, i); const char *prefix; if (Jim_GetObjTaint(prefixObjPtr)) { /* This element is tainted, so ignore it */ continue; } prefix = Jim_String(prefixObjPtr); /* Loadable modules are tried first */ #ifdef jim_ext_load snprintf(buf, JIM_PATH_LEN, "%s/%s.so", prefix, pkgName); if (access(buf, R_OK) == 0) { return buf; } #endif if (strcmp(prefix, ".") == 0) { snprintf(buf, JIM_PATH_LEN, "%s.tcl", pkgName); } else { snprintf(buf, JIM_PATH_LEN, "%s/%s.tcl", prefix, pkgName); } if (access(buf, R_OK) == 0) { return buf; } } Jim_Free(buf); return NULL; } /* Search for a suitable package under every dir specified by JIM_LIBPATH, * and load it if possible. If a suitable package was loaded with success * JIM_OK is returned, otherwise JIM_ERR is returned. */ static int JimLoadPackage(Jim_Interp *interp, const char *name, int flags) { int retCode = JIM_ERR; Jim_Obj *libPathObjPtr = Jim_GetGlobalVariableStr(interp, JIM_LIBPATH, JIM_NONE); if (libPathObjPtr) { char *path; /* Scan every directory for the the first match */ path = JimFindPackage(interp, libPathObjPtr, name); if (path) { const char *p; /* Note: Even if the file fails to load, we consider the package loaded. * This prevents issues with recursion. * Use a dummy version of "" to signify this case. */ Jim_PackageProvide(interp, name, "", 0); /* Try to load/source it */ p = strrchr(path, '.'); if (p && strcmp(p, ".tcl") == 0) { Jim_IncrRefCount(libPathObjPtr); retCode = Jim_EvalFileGlobal(interp, path); Jim_DecrRefCount(interp, libPathObjPtr); } #ifdef jim_ext_load else { retCode = Jim_LoadLibrary(interp, path); } #endif if (retCode != JIM_OK) { /* Upon failure, remove the dummy entry */ Jim_DeleteHashEntry(&interp->packages, name); } Jim_Free(path); } } return retCode; } int Jim_PackageRequire(Jim_Interp *interp, const char *name, int flags) { Jim_HashEntry *he; /* Start with an empty error string */ Jim_SetEmptyResult(interp); he = Jim_FindHashEntry(&interp->packages, name); if (he == NULL) { /* Try to load the package. */ int retcode = JimLoadPackage(interp, name, flags); if (retcode != JIM_OK) { if (flags & JIM_ERRMSG) { int len = Jim_Length(Jim_GetResult(interp)); Jim_SetResultFormatted(interp, "%#s%sCan't load package %s", Jim_GetResult(interp), len ? "\n" : "", name); } return retcode; } /* In case the package did not 'package provide' */ Jim_PackageProvide(interp, name, package_version_1, 0); /* Now it must exist */ he = Jim_FindHashEntry(&interp->packages, name); } Jim_SetResultString(interp, he->u.val, -1); return JIM_OK; } static int package_cmd_forget(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int i; for (i = 0; i < argc; i++) { Jim_DeleteHashEntry(&interp->packages, Jim_String(argv[i])); } return JIM_OK; } /* *---------------------------------------------------------------------- * * package provide name ?version? * * This procedure is invoked to declare that * a particular package is now present in an interpreter. * The package must not already be provided in the interpreter. * * Results: * Returns JIM_OK and sets results as "1.0" (the given version is ignored) * *---------------------------------------------------------------------- */ static int package_cmd_provide(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return Jim_PackageProvide(interp, Jim_String(argv[0]), package_version_1, JIM_ERRMSG); } /* *---------------------------------------------------------------------- * * package require name ?version? * * This procedure is load a given package. * Note that the version is ignored. * * Results: * Returns JIM_OK and sets the package version. * *---------------------------------------------------------------------- */ static int package_cmd_require(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return Jim_PackageRequire(interp, Jim_String(argv[0]), JIM_ERRMSG); } /* *---------------------------------------------------------------------- * * package list|names * * Returns a list of known packages * * Results: * Returns JIM_OK and sets a list of known packages. * *---------------------------------------------------------------------- */ static int package_cmd_names(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_HashTableIterator *htiter; Jim_HashEntry *he; Jim_Obj *listObjPtr = Jim_NewListObj(interp, NULL, 0); htiter = Jim_GetHashTableIterator(&interp->packages); while ((he = Jim_NextHashEntry(htiter)) != NULL) { Jim_ListAppendElement(interp, listObjPtr, Jim_NewStringObj(interp, he->key, -1)); } Jim_FreeHashTableIterator(htiter); Jim_SetResult(interp, listObjPtr); return JIM_OK; } static const jim_subcmd_type package_command_table[] = { { "forget", "package ...", package_cmd_forget, 1, -1, /* Description: Forget that the given packages were loaded */ }, { "provide", "name ?version?", package_cmd_provide, 1, 2, /* Description: Indicates that the current script provides the given package */ }, { "require", "name ?version?", package_cmd_require, 1, 2, /* Description: Loads the given package by looking in standard places */ }, { "list", NULL, package_cmd_names, 0, 0, JIM_MODFLAG_HIDDEN /* Description: Deprecated - Lists all known packages */ }, { "names", NULL, package_cmd_names, 0, 0, /* Description: Lists all known packages */ }, { NULL } }; int Jim_packageInit(Jim_Interp *interp) { Jim_RegisterSubCmd(interp, "package", package_command_table, NULL); return JIM_OK; } jimtcl-0.84/jim-posix.c000066400000000000000000000113221522604140100150040ustar00rootroot00000000000000/* * Jim - POSIX extension * * Copyright 2005 Salvatore Sanfilippo * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE JIM TCL PROJECT ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * JIM TCL PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * The views and conclusions contained in the software and documentation * are those of the authors and should not be interpreted as representing * official policies, either expressed or implied, of the Jim Tcl Project. */ #include #include #include #include #include #include #include "jimautoconf.h" #include #ifdef HAVE_SYS_SYSINFO_H #include #endif #ifdef HAVE_SYS_STAT_H #include #endif static void Jim_PosixSetError(Jim_Interp *interp) { Jim_SetResultString(interp, strerror(errno), -1); } #if defined(HAVE_FORK) static int Jim_PosixForkCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { pid_t pid; JIM_NOTUSED(argv); if ((pid = fork()) == -1) { Jim_PosixSetError(interp); return JIM_ERR; } Jim_SetResultInt(interp, (jim_wide) pid); return JIM_OK; } #endif #if !defined(JIM_BOOTSTRAP) static int Jim_PosixGetidsCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *objv[8]; objv[0] = Jim_NewStringObj(interp, "uid", -1); objv[1] = Jim_NewIntObj(interp, getuid()); objv[2] = Jim_NewStringObj(interp, "euid", -1); objv[3] = Jim_NewIntObj(interp, geteuid()); objv[4] = Jim_NewStringObj(interp, "gid", -1); objv[5] = Jim_NewIntObj(interp, getgid()); objv[6] = Jim_NewStringObj(interp, "egid", -1); objv[7] = Jim_NewIntObj(interp, getegid()); Jim_SetResult(interp, Jim_NewListObj(interp, objv, 8)); return JIM_OK; } #define JIM_HOST_NAME_MAX 1024 static int Jim_PosixGethostnameCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { char *buf; int rc = JIM_OK; buf = Jim_Alloc(JIM_HOST_NAME_MAX); if (gethostname(buf, JIM_HOST_NAME_MAX) == -1) { Jim_PosixSetError(interp); Jim_Free(buf); rc = JIM_ERR; } else { Jim_SetResult(interp, Jim_NewStringObjNoAlloc(interp, buf, -1)); } return rc; } static int Jim_PosixUptimeCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { #ifdef HAVE_STRUCT_SYSINFO_UPTIME struct sysinfo info; if (sysinfo(&info) == -1) { Jim_PosixSetError(interp); return JIM_ERR; } Jim_SetResultInt(interp, info.uptime); #else Jim_SetResultInt(interp, (long)time(NULL)); #endif return JIM_OK; } static int Jim_PosixUmaskCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { mode_t oldmask; if (argc == 2) { long mask; if (Jim_GetLong(interp, argv[1], &mask) != JIM_OK) { return JIM_ERR; } oldmask = umask(mask); } else { oldmask = umask(0); umask(oldmask); } Jim_SetResultInt(interp, oldmask); return JIM_OK; } #endif /* JIM_BOOTSTRAP */ int Jim_posixInit(Jim_Interp *interp) { Jim_PackageProvideCheck(interp, "posix"); #ifdef HAVE_FORK Jim_RegisterSimpleCmd(interp, "os.fork", "", 0, 0, Jim_PosixForkCommand); #endif #if !defined(JIM_BOOTSTRAP) Jim_RegisterSimpleCmd(interp, "os.gethostname", "", 0, 0, Jim_PosixGethostnameCommand); Jim_RegisterSimpleCmd(interp, "os.getids", "", 0, 0, Jim_PosixGetidsCommand); Jim_RegisterSimpleCmd(interp, "os.uptime", "", 0, 0, Jim_PosixUptimeCommand); Jim_RegisterSimpleCmd(interp, "os.umask", "?newmask?", 0, 1, Jim_PosixUmaskCommand); #endif /* JIM_BOOTSTRAP */ return JIM_OK; } jimtcl-0.84/jim-readdir.c000066400000000000000000000100611522604140100152530ustar00rootroot00000000000000/* * Tcl readdir command. * * (c) 2008 Steve Bennett * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE JIM TCL PROJECT ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * JIM TCL PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * The views and conclusions contained in the software and documentation * are those of the authors and should not be interpreted as representing * official policies, either expressed or implied, of the Jim Tcl Project. * * Based on original work by: *----------------------------------------------------------------------------- * Copyright 1991-1994 Karl Lehenbauer and Mark Diekhans. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies. Karl Lehenbauer and * Mark Diekhans make no representations about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. *----------------------------------------------------------------------------- */ #include #include #include #include #include #ifdef HAVE_DIRENT_H #include #endif /* *----------------------------------------------------------------------------- * * Jim_ReaddirCmd -- * Implements the rename TCL command: * readdir ?-nocomplain? dirPath * * Results: * Standard TCL result. *----------------------------------------------------------------------------- */ int Jim_ReaddirCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const char *dirPath; DIR *dirPtr; struct dirent *entryPtr; int nocomplain = 0; if (argc == 3 && Jim_CompareStringImmediate(interp, argv[1], "-nocomplain")) { nocomplain = 1; } if (argc != 2 && !nocomplain) { return JIM_USAGE; } dirPath = Jim_String(argv[1 + nocomplain]); dirPtr = opendir(dirPath); if (dirPtr == NULL) { if (nocomplain) { return JIM_OK; } Jim_SetResultString(interp, strerror(errno), -1); return JIM_ERR; } else { Jim_Obj *listObj = Jim_NewListObj(interp, NULL, 0); while ((entryPtr = readdir(dirPtr)) != NULL) { if (entryPtr->d_name[0] == '.') { if (entryPtr->d_name[1] == '\0') { continue; } if ((entryPtr->d_name[1] == '.') && (entryPtr->d_name[2] == '\0')) continue; } Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, entryPtr->d_name, -1)); } closedir(dirPtr); Jim_SetResult(interp, listObj); return JIM_OK; } } int Jim_readdirInit(Jim_Interp *interp) { Jim_PackageProvideCheck(interp, "readdir"); Jim_RegisterSimpleCmd(interp, "readdir", "?-nocomplain? dirPath", 1, 2, Jim_ReaddirCmd); return JIM_OK; } jimtcl-0.84/jim-readline.c000066400000000000000000000046351522604140100154360ustar00rootroot00000000000000/* * Jim - Readline bindings for Jim * * Copyright 2005 Salvatore Sanfilippo * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE JIM TCL PROJECT ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * JIM TCL PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * The views and conclusions contained in the software and documentation * are those of the authors and should not be interpreted as representing * official policies, either expressed or implied, of the Jim Tcl Project. */ #include #include #include #include static int JimRlReadlineCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { char *line; line = readline(Jim_String(argv[1])); if (!line) { return JIM_EXIT; } Jim_SetResult(interp, Jim_NewStringObj(interp, line, -1)); return JIM_OK; } static int JimRlAddHistoryCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { add_history(Jim_String(argv[1])); return JIM_OK; } int Jim_readlineInit(Jim_Interp *interp) { Jim_PackageProvideCheck(interp, "readline"); Jim_RegisterSimpleCmd(interp, "readline.readline", "prompt", 1, 1, JimRlReadlineCommand); Jim_RegisterSimpleCmd(interp, "readline.addhistory", "string", 1, 1, JimRlAddHistoryCommand); return JIM_OK; } jimtcl-0.84/jim-redis.c000066400000000000000000000203361522604140100147550ustar00rootroot00000000000000/* * Simple redis interface * * (c) 2020 Steve Bennett * * See LICENSE for license details. */ #include #include #include #include typedef struct { redisContext *c; int multi; /* 1 if in a MULTI script */ } jim_redis_t; /** * Recursively decode a redis reply as Tcl data structure. */ static Jim_Obj *jim_redis_get_result(Jim_Interp *interp, redisReply *reply, int addtype) { int i; Jim_Obj *obj; switch (reply->type) { case REDIS_REPLY_INTEGER: obj = Jim_NewIntObj(interp, reply->integer); break; case REDIS_REPLY_STATUS: case REDIS_REPLY_ERROR: case REDIS_REPLY_STRING: obj = Jim_NewStringObj(interp, reply->str, reply->len); break; case REDIS_REPLY_ARRAY: obj = Jim_NewListObj(interp, NULL, 0); for (i = 0; i < reply->elements; i++) { Jim_ListAppendElement(interp, obj, jim_redis_get_result(interp, reply->element[i], addtype)); } break; case REDIS_REPLY_NIL: obj = Jim_NewStringObj(interp, NULL, 0); break; default: obj = Jim_NewStringObj(interp, "badtype", -1); break; } if (addtype) { const char *type; switch (reply->type) { case REDIS_REPLY_INTEGER: type = "int"; break; case REDIS_REPLY_STATUS: type = "status"; break; case REDIS_REPLY_ERROR: type = "error"; break; case REDIS_REPLY_STRING: type = "str"; break; case REDIS_REPLY_ARRAY: type = "array"; break; case REDIS_REPLY_NIL: type = "nil"; break; default: type = "invalid"; break; } obj = Jim_NewListObj(interp, &obj, 1); Jim_ListAppendElement(interp, obj, Jim_NewStringObj(interp, type, -1)); } return obj; } static int jim_redis_write_callback(Jim_Interp *interp, void *clientData, int mask) { jim_redis_t *context = clientData; int done; if (redisBufferWrite(context->c, &done) != REDIS_OK) { return JIM_ERR; } if (done) { /* Write has completed, so remove the callback */ Jim_DeleteFileHandler(interp, context->c->fd, mask); } return JIM_OK; } /** * $r readable ?script? * - set or clear a readable script * $r close * - close (delete) the handle * $r read * - synchronously read a SUBSCRIBE response (typically from within readable) * $r ... * - invoke the redis command and return the decoded result */ static int jim_redis_subcmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int i; jim_redis_t *context = Jim_CmdPrivData(interp); redisContext *c = context->c; const char **args; size_t *arglens; int ret = JIM_OK; int addtype = 0; redisReply *reply; if (argc >= 3 && Jim_CompareStringImmediate(interp, argv[1], "-type")) { addtype = 1; argc--; argv++; } if (Jim_CompareStringImmediate(interp, argv[1], "readable")) { /* Remove any existing handler */ Jim_DeleteFileHandler(interp, c->fd, JIM_EVENT_READABLE); if (argc > 2) { Jim_CreateScriptFileHandler(interp, c->fd, JIM_EVENT_READABLE, argv[2]); } return JIM_OK; } if (Jim_CompareStringImmediate(interp, argv[1], "close")) { return Jim_DeleteCommand(interp, argv[0]); } if (Jim_CompareStringImmediate(interp, argv[1], "read")) { int rc; if (!(c->flags & REDIS_BLOCK)) { redisBufferRead(c); } rc = redisGetReply(c, (void **)&reply); if (rc != REDIS_OK) { reply = NULL; } } else if (Jim_GetObjTaint(argv[1]) & JIM_TAINT_ANY) { Jim_SetTaintError(interp, 1, argv); return JIM_ERR; } else if (Jim_CompareStringImmediate(interp, argv[1], "multiexec")) { /* $r multiexec