diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f667766f8..50ce67462 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,9 +12,17 @@ on: type: boolean default: false +# Release runs publish a `v*` tag pushed atomically with main HEAD; sharing +# the cheap branch-wide `CI-refs/heads/main` group meant a later main push +# silently cancelled the in-flight release and left the tag without a GitHub +# Release or npm publish (#2564). Detect release runs at workflow-scheduling +# time via the release-script commit subject (`chore: bump version to vX.Y.Z`, +# see scripts/release.ts) and via `v*` tag-ref dispatches, then scope them to +# a per-sha group with no cancellation. Every other event keeps the +# branch-wide cancel-in-progress for PR/main churn. concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true + group: "${{ github.workflow }}-${{ (startsWith(github.event.head_commit.message, 'chore: bump version to ') || startsWith(github.ref, 'refs/tags/v')) && format('release-{0}', github.sha) || github.ref }}" + cancel-in-progress: "${{ !(startsWith(github.event.head_commit.message, 'chore: bump version to ') || startsWith(github.ref, 'refs/tags/v')) }}" env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true @@ -172,9 +180,9 @@ jobs: echo "cross-platform-run-id=$cross_platform_run_id" } >> "$GITHUB_OUTPUT" - # Fast lint + type check (no Rust, no native build needed) + # Fast lint, type check, and browser bundle build (no Rust, no native build needed) check: - name: Lint & type check + name: Lint, type check & web build runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 @@ -189,6 +197,8 @@ jobs: - run: bun install --frozen-lockfile - name: Type check workspace run: bun run ci:check:full + - name: Build collab web + run: bun run collab:web:build # Linux x64 baseline + modern: required by `test`, so it runs on every PR # unless native_artifact_lookup found a cached run. Release runs always diff --git a/.gitignore b/.gitignore index 044b6ea46..de59ee70f 100644 --- a/.gitignore +++ b/.gitignore @@ -56,6 +56,7 @@ pi-*.html # Generated files packages/coding-agent/src/internal-urls/docs-index.generated.ts +packages/coding-agent/src/export/html/tool-views.generated.js packages/natives/npm/ /runs/ python/omp-rpc/src/omp_rpc.egg-info/ @@ -70,3 +71,6 @@ python/robomp/.cache/ python/robomp/src/robomp/static/ python/robomp/web/dist/ python/robomp/.env + +# Local, machine-specific boot perf baseline (see packages/coding-agent/scripts/bench-guard.ts) +packages/coding-agent/bench/boot-baseline.json diff --git a/AGENTS.md b/AGENTS.md index 600e80619..bb4a24039 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -237,6 +237,7 @@ Location: `packages/*/CHANGELOG.md` (per package). **Rules:** - New entries always go under `## [Unreleased]`. - Never modify already-released sections (e.g., `## [0.12.2]`) — they are immutable. +- Don't flag changelog section order or formatting in reviews or PRs — `bun run release` runs `fix-changelogs` which normalizes everything automatically. **Attribution:** - Internal (from issues): `Fixed foo bar ([#123](https://github.com/can1357/oh-my-pi/issues/123))`. diff --git a/Cargo.lock b/Cargo.lock index 109a82c19..05e5ba86c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -501,9 +501,9 @@ checksum = "ade8366b8bd5ba243f0a58f036cc0ca8a2f069cff1a2351ef1cac6b083e16fc0" [[package]] name = "cc" -version = "1.2.63" +version = "1.2.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" +checksum = "dad887fd958be91b5098c0248def011f4523ab786cd411be668777e55063501f" dependencies = [ "find-msvc-tools", "shlex", @@ -1672,9 +1672,9 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "js-sys" -version = "0.3.100" +version = "0.3.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162" +checksum = "03d04c30968dffe80775bd4d7fb676131cd04a1fb46d2686dbffbaec2d9dfd31" dependencies = [ "cfg-if", "futures-util", @@ -1773,9 +1773,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4" [[package]] name = "memmap2" @@ -2330,7 +2330,7 @@ dependencies = [ [[package]] name = "pi-ast" -version = "15.11.2" +version = "15.12.6" dependencies = [ "anyhow", "ast-grep-core", @@ -2398,7 +2398,7 @@ dependencies = [ [[package]] name = "pi-iso" -version = "15.11.2" +version = "15.12.6" dependencies = [ "async-trait", "libc", @@ -2410,7 +2410,7 @@ dependencies = [ [[package]] name = "pi-natives" -version = "15.11.2" +version = "15.12.6" dependencies = [ "anyhow", "arboard", @@ -2458,7 +2458,7 @@ dependencies = [ [[package]] name = "pi-shell" -version = "15.11.2" +version = "15.12.6" dependencies = [ "anyhow", "brush-builtins", @@ -3025,9 +3025,9 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.15.1" +version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" dependencies = [ "serde", ] @@ -4182,9 +4182,9 @@ dependencies = [ [[package]] name = "wasip2" -version = "1.0.3+wasi-0.2.9" +version = "1.0.4+wasi-0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" dependencies = [ "wit-bindgen 0.57.1", ] @@ -4209,9 +4209,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.123" +version = "0.2.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563" +checksum = "8ddb3f79143bced6de84270411622a2699cee572fc0875aeaf1e7867cf9fca1a" dependencies = [ "cfg-if", "once_cell", @@ -4222,9 +4222,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.123" +version = "0.2.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc" +checksum = "4e21a184b13fb19e157296e2c46056aec9092264fab83e4ba59e68c61b323c3d" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4232,9 +4232,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.123" +version = "0.2.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b" +checksum = "fecefd9c35bd935a20fc3fc344b5f29138961e4f47fb03297d88f2587afb5ebd" dependencies = [ "bumpalo", "proc-macro2", @@ -4245,9 +4245,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.123" +version = "0.2.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92" +checksum = "23939e44bb9a5d7576fa2b563dc2e136628f1224e88a8deed09e04858b77871f" dependencies = [ "unicode-ident", ] @@ -4358,9 +4358,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.100" +version = "0.3.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0871acf327f283dc6da28a1696cdc64fb355ba9f935d052021fa77f35cce69" +checksum = "a6430a72df5eb332242960fe84b3002a241163998241eb596d4f739b9757061d" dependencies = [ "js-sys", "wasm-bindgen", diff --git a/Cargo.toml b/Cargo.toml index fff265aca..8c1d3da0e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ exclude = ["crates/brush-core-vendored", "crates/brush-builtins-vendored"] resolver = "3" [workspace.package] -version = "15.11.2" +version = "15.12.6" edition = "2024" license = "MIT" authors = ["Can Boluk"] diff --git a/README.md b/README.md index 10c470db5..c22bb0d58 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ The most capable agent surface that ships. Continuously tuned by real-world use — complete out of the box, open all the way down. -**40+** providers · **32** built-in tools · **13** lsp ops · **27** dap ops · **~27k** lines of Rust core. +**40+** providers · **32** built-in tools · **14** lsp ops · **28** dap ops · **~55k** lines of Rust core. ## Install @@ -171,11 +171,11 @@ Every other agent ships an importer and expects you to convert. omp reads the ei ### 14 · omp commit: atomic splits, validated messages -omp reads the working tree through git-overview, git-file-diff, and git-hunk, then splits unrelated changes into atomic commits ordered by their dependencies. Cycles are rejected before anything is written. Source files score above tests, docs, and configs, so the headline commit is the one that matters. Lock files are excluded from analysis entirely. +omp reads the working tree through git_overview, git_file_diff, and git_hunk, then splits unrelated changes into atomic commits ordered by their dependencies. Cycles are rejected before anything is written. Source files score above tests, docs, and configs, so the headline commit is the one that matters. Lock files are excluded from analysis entirely. ### 15 · Read PRs. _Walk skills._ Pull JSON out of subagents. -Ten internal schemes — `pr://`, `issue://`, `agent://`, `skill://`, `rule://`, and the rest — resolve transparently inside every FS-shaped tool the agent already calls. `read pr://1428` returns the same shape as `read src/foo.ts`. `search` walks a diff like a directory. `agent:///findings.0.path` pulls a field out of a subagent's output by path. +Twelve internal schemes — `pr://`, `issue://`, `agent://`, `skill://`, `rule://`, and the rest — resolve transparently inside every FS-shaped tool the agent already calls. `read pr://1428` returns the same shape as `read src/foo.ts`. `search` walks a diff like a directory. `agent:///findings.0.path` pulls a field out of a subagent's output by path. ![omp TUI reading pr://can1357/oh-my-pi/1063 and then /diff/1, showing hunk headers, added lines, and a [MODIFIED] (+12 -0) summary.](https://omp.sh/captures/pr.webp) @@ -239,9 +239,10 @@ Stealth's on by default, so pages see a normal user instead of a headless bot. T - `browser` — Puppeteer tabs over headless Chromium or CDP-attached apps. - `web_search` — one query across configured providers, returning answer plus citations. - `github` — GitHub CLI ops — repo, PR, issues, code search, Actions run-watch. -- `generate_image` — generate or edit raster images via Gemini image models. +- `generate_image` — generate or edit raster images via Gemini, GPT, or xAI Grok image models. - `inspect_image` — vision-model analysis of a local image file. - `render_mermaid` — Mermaid source to terminal-friendly ASCII or PNG. +- `tts` — text-to-speech via xAI Grok Voice — five built-in voices, WAV or MP3. **Memory & state** @@ -256,7 +257,7 @@ Stealth's on by default, so pages see a normal user instead of a headless bot. T - `resolve` — apply or discard a queued preview action. - `search_tool_bm25` — BM25 over the hidden tool index; activates top matches mid-session. -Setting-gated, off by default: `github`, `inspect_image`, `render_mermaid`, `checkpoint`, `rewind`, `search_tool_bm25`, `retain`, `recall`, `reflect`. Flip them on once, scoped per project. +Setting-gated, off by default: `github`, `inspect_image`, `render_mermaid`, `tts`, `checkpoint`, `rewind`, `search_tool_bm25`, `retain`, `recall`, `reflect`. Flip them on once, scoped per project. [Full reference →](https://omp.sh/docs/tools) @@ -288,7 +289,7 @@ Ollama `local` · Ollama Cloud · LM Studio `local` · llama.cpp `local` · vLLM - **Custom providers** — Declare anything that speaks `openai-completions`, `openai-responses`, `openai-codex-responses`, `azure-openai-responses`, `anthropic-messages`, `google-generative-ai`, or `google-vertex` in `~/.omp/agent/models.yml`. - **Fallback chains** — Per-role chains under `retry.fallbackChains`. When the primary throws 429s or hits a quota wall, the next entry takes the rest of the turn — restored on cooldown. -- **Path-scoped roles** — Nest `paths:` under `modelRoles` to pin a heavier `default` on one repo without touching the global config. Closest path wins. +- **Path-scoped models** — Scope `enabledModels` and `disabledProviders` entries to a `path:` prefix to pin a different model set on one repo without touching the global config. Scoped entries cover the path and everything under it. - **Round-robin credentials** — Stack API keys per provider and the runtime rotates with session affinity and per-credential backoff. Useful when one key would burn its quota by lunch. Full provider & routing reference at [omp.sh/docs/providers](https://omp.sh/docs/providers). @@ -341,11 +342,11 @@ Vuln lookups answer with vendor data, not blog summaries. [`web_search` reference ↗](https://omp.sh/docs/tools#web_search) -## Roughly **~27,000** lines of Rust, doing the work other harnesses shell out for. +## Roughly **~55,000** lines of Rust, doing the work other harnesses shell out for. -Three crates, one platform-tagged N-API addon. Search, shell, AST, highlight, PTY, image decode, BPE counting — all in-process on the libuv pool. No fork/exec on the hot path. +Four crates, one platform-tagged N-API addon. Search, shell, AST, highlight, PTY, image decode, BPE counting — all in-process on the libuv pool. No fork/exec on the hot path. -- Crates: `pi-natives`, `pi-shell`, `pi-ast` +- Crates: `pi-natives`, `pi-shell`, `pi-ast`, `pi-iso` - Platforms: `linux-x64`, `linux-arm64`, `darwin-x64`, `darwin-arm64`, `win32-x64` The table below is a per-module breakdown that intentionally omits glue and tests. @@ -356,13 +357,13 @@ The table below is a per-module breakdown that intentionally omits glue and test | grep | Regex search · parallel/sequential · glob & type filters · fuzzy find | grep-regex · grep-searcher | 1,900 | | keys | Kitty keyboard protocol with xterm fallback · PHF perfect-hash lookup | phf | 1,490 | | text | ANSI-aware width · truncation · column slicing · SGR-preserving wrap | unicode-width · segmentation | 1,450 | -| summarize | Tree-sitter structural source summaries with elision controls | tree-sitter · ast-grep-core | 1,040 | +| summary | Tree-sitter structural source summaries with elision controls | tree-sitter · ast-grep-core | 1,040 | | ast | ast-grep pattern matching and structural rewrites | ast-grep-core | 1,000 | | fs_cache | Mtime-keyed file cache shared by read · grep · lsp | in-tree | 840 | | highlight | Syntax highlighting · 11 semantic categories · 30+ aliases | syntect | 470 | | pty | Native PTY allocation for sudo · ssh interactive prompts | portable-pty | 455 | | glob | Discovery with glob · type filters · mtime sort · gitignore respect | ignore · globset | 410 | -| workspace | Workspace walker with gitignore + AGENTS.md discovery in one pass | ignore · git2 | 385 | +| workspace | Workspace walker with gitignore + AGENTS.md discovery in one pass | ignore | 385 | | appearance | Mode 2031 + native macOS dark/light via CoreFoundation FFI | core-foundation | 270 | | power | macOS power-assertion API for idle/system/display-sleep prevention | IOKit FFI | 270 | | task | Blocking work on libuv thread pool · cancellation · timeout · profiling | tokio · napi | 260 | @@ -370,9 +371,9 @@ The table below is a per-module breakdown that intentionally omits glue and test | iso | Workspace isolation shim · apfs · btrfs · zfs · reflink · overlayfs · projfs · rcopy | pi-iso (PAL) | 245 | | prof | Circular buffer profiler with folded-stack and SVG flamegraph output | inferno | 240 | | ps | Cross-platform process-tree kill and descendant listing | libc · libproc · CreateToolhelp32Snapshot | 195 | -| image | Decode/encode PNG · JPEG · WebP · GIF · resize with 5 filters | image | 190 | | clipboard | Text copy and image read from system clipboard · no xclip/pbcopy | arboard | 80 | | tokens | O200k / Cl100k BPE token counting · both tables embedded | tiktoken-rs | 65 | +| sixel | Terminal image rendering · decode PNG · JPEG · WebP · GIF · resize · SIXEL encode | icy_sixel · image | 55 | | html | HTML to Markdown with optional content cleaning | html-to-markdown-rs | 50 | ## Four entry points: _interactive_, _one-shot_, RPC, and ACP. @@ -394,16 +395,21 @@ The same prompt cards surface over ACP, so editors get the picker without writin Node and TypeScript hosts pull the engine in directly. The package exposes `ModelRegistry`, `SessionManager`, `createAgentSession`, and `discoverAuthStorage`; the session emits typed events you subscribe to. ```ts -import { ModelRegistry, SessionManager, createAgentSession, discoverAuthStorage } from "@oh-my-pi/pi-coding-agent"; +import { + ModelRegistry, + SessionManager, + createAgentSession, + discoverAuthStorage, +} from "@oh-my-pi/pi-coding-agent"; const auth = await discoverAuthStorage(); const models = new ModelRegistry(auth); await models.refresh(); const { session } = await createAgentSession({ - sessionManager: SessionManager.inMemory(), - authStorage: auth, - modelRegistry: models, + sessionManager: SessionManager.inMemory(), + authStorage: auth, + modelRegistry: models, }); await session.prompt("list .ts files"); ``` @@ -433,7 +439,7 @@ The [Agent Client Protocol](https://github.com/zed-industries/agent-client-proto | `bash` | `terminal/create + terminal/output` | | `read` | `fs/read_text_file` | | `write` | `fs/write_text_file` | -| `edit, ast_edit, write, bash` | `session/request_permission` | +| `edit, bash` | `session/request_permission` | Full reference: [omp.sh/docs/sdk](https://omp.sh/docs/sdk). @@ -481,6 +487,7 @@ For architecture and contribution guidelines, see [packages/coding-agent/DEVELOP | Package | Description | | --------------------------------------------------------- | -------------------------------------------------------------------------- | +| **[@oh-my-pi/collab-web](packages/collab-web)** | Browser guest client, mock host, and local relay for collab live sessions | | **[@oh-my-pi/pi-ai](packages/ai)** | Multi-provider LLM client with streaming and model/provider integration | | **[@oh-my-pi/pi-catalog](packages/catalog)** | Model catalog: bundled model database, provider descriptors, and identity | | **[@oh-my-pi/pi-agent-core](packages/agent)** | Agent runtime with tool calling and state management | @@ -489,6 +496,7 @@ For architecture and contribution guidelines, see [packages/coding-agent/DEVELOP | **[@oh-my-pi/pi-natives](packages/natives)** | N-API bindings for grep, shell, image, text, syntax highlighting, and more | | **[@oh-my-pi/omp-stats](packages/stats)** | Local observability dashboard for AI usage statistics | | **[@oh-my-pi/pi-utils](packages/utils)** | Shared utilities (logging, streams, dirs/env/process helpers) | +| **[@oh-my-pi/pi-wire](packages/wire)** | Shared collab live-session protocol types and relay constants | | **[@oh-my-pi/hashline](packages/hashline)** | Line-anchored patch language and applier behind the `edit` tool | | **[@oh-my-pi/pi-mnemopi](packages/mnemopi)** | Local SQLite memory engine for Oh My Pi agents | | **[@oh-my-pi/snapcompact](packages/snapcompact)** | Bitmap-frame context compression package and SQuAD eval suite | diff --git a/biome.json b/biome.json index 1fbc28920..f4361aeed 100644 --- a/biome.json +++ b/biome.json @@ -60,7 +60,6 @@ "!**/vendor/**/*", "!**/node_modules/**/*", "!**/test-sessions.ts", - "!**/template.generated.ts", "!**/docs-index.generated.ts", "!**/agent_pb.ts", "!.worktrees/**/*", diff --git a/bun.lock b/bun.lock index 90d72824d..243d8943c 100644 --- a/bun.lock +++ b/bun.lock @@ -4,6 +4,11 @@ "workspaces": { "": { "name": "omp-monorepo", + "dependencies": { + "sherpa-onnx": "1.12.37", + "sherpa-onnx-darwin-arm64": "1.12.37", + "sherpa-onnx-node": "1.12.37", + }, "devDependencies": { "@biomejs/biome": "catalog:", "@types/bun": "catalog:", @@ -15,7 +20,7 @@ }, "packages/agent": { "name": "@oh-my-pi/pi-agent-core", - "version": "15.11.2", + "version": "15.12.6", "dependencies": { "@oh-my-pi/pi-ai": "catalog:", "@oh-my-pi/pi-catalog": "catalog:", @@ -32,12 +37,11 @@ }, "packages/ai": { "name": "@oh-my-pi/pi-ai", - "version": "15.11.2", + "version": "15.12.6", "dependencies": { "@bufbuild/protobuf": "catalog:", "@oh-my-pi/pi-catalog": "catalog:", "@oh-my-pi/pi-utils": "catalog:", - "openai": "catalog:", "partial-json": "catalog:", "zod": "catalog:", }, @@ -47,7 +51,7 @@ }, "packages/catalog": { "name": "@oh-my-pi/pi-catalog", - "version": "15.11.2", + "version": "15.12.6", "dependencies": { "@bufbuild/protobuf": "catalog:", "@oh-my-pi/pi-utils": "catalog:", @@ -60,7 +64,7 @@ }, "packages/coding-agent": { "name": "@oh-my-pi/pi-coding-agent", - "version": "15.11.2", + "version": "15.12.6", "bin": { "omp": "src/cli.ts", }, @@ -77,6 +81,7 @@ "@oh-my-pi/pi-natives": "catalog:", "@oh-my-pi/pi-tui": "catalog:", "@oh-my-pi/pi-utils": "catalog:", + "@oh-my-pi/pi-wire": "catalog:", "@oh-my-pi/snapcompact": "catalog:", "@opentelemetry/api": "catalog:", "@opentelemetry/context-async-hooks": "catalog:", @@ -104,11 +109,28 @@ }, "optionalDependencies": { "@huggingface/transformers": "catalog:", + "sherpa-onnx-node": "1.13.2", + }, + }, + "packages/collab-web": { + "name": "@oh-my-pi/collab-web", + "version": "15.11.7", + "dependencies": { + "@oh-my-pi/pi-wire": "catalog:", + "lucide-react": "catalog:", + "marked": "catalog:", + "react": "catalog:", + "react-dom": "catalog:", + }, + "devDependencies": { + "@types/bun": "catalog:", + "@types/react": "catalog:", + "@types/react-dom": "catalog:", }, }, "packages/hashline": { "name": "@oh-my-pi/hashline", - "version": "15.11.2", + "version": "15.12.6", "dependencies": { "diff": "catalog:", "lru-cache": "catalog:", @@ -119,7 +141,7 @@ }, "packages/mnemopi": { "name": "@oh-my-pi/pi-mnemopi", - "version": "15.11.2", + "version": "15.12.6", "bin": { "mnemopi": "src/cli.ts", }, @@ -127,17 +149,25 @@ "@oh-my-pi/pi-ai": "catalog:", "@oh-my-pi/pi-catalog": "catalog:", "@oh-my-pi/pi-utils": "catalog:", - "fastembed": "catalog:", "lru-cache": "catalog:", - "onnxruntime-node": "catalog:", }, "devDependencies": { "@types/bun": "catalog:", + "fastembed": "catalog:", + "onnxruntime-node": "catalog:", }, + "peerDependencies": { + "fastembed": "2.1.0", + "onnxruntime-node": "1.26.0", + }, + "optionalPeers": [ + "fastembed", + "onnxruntime-node", + ], }, "packages/natives": { "name": "@oh-my-pi/pi-natives", - "version": "15.11.2", + "version": "15.12.6", "devDependencies": { "@napi-rs/cli": "catalog:", "@types/bun": "catalog:", @@ -145,7 +175,7 @@ }, "packages/snapcompact": { "name": "@oh-my-pi/snapcompact", - "version": "15.11.2", + "version": "15.12.6", "dependencies": { "@oh-my-pi/pi-ai": "catalog:", "@oh-my-pi/pi-natives": "catalog:", @@ -157,7 +187,7 @@ }, "packages/stats": { "name": "@oh-my-pi/omp-stats", - "version": "15.11.2", + "version": "15.12.6", "bin": { "omp-stats": "./src/index.ts", }, @@ -183,7 +213,7 @@ }, "packages/swarm-extension": { "name": "@oh-my-pi/swarm-extension", - "version": "15.11.2", + "version": "15.12.6", "bin": { "omp-swarm": "src/cli.ts", }, @@ -199,7 +229,7 @@ }, "packages/tui": { "name": "@oh-my-pi/pi-tui", - "version": "15.11.2", + "version": "15.12.6", "dependencies": { "@oh-my-pi/pi-natives": "catalog:", "@oh-my-pi/pi-utils": "catalog:", @@ -240,7 +270,7 @@ }, "packages/utils": { "name": "@oh-my-pi/pi-utils", - "version": "15.11.2", + "version": "15.12.6", "dependencies": { "@oh-my-pi/pi-natives": "catalog:", "beautiful-mermaid": "catalog:", @@ -252,6 +282,13 @@ "@types/bun": "catalog:", }, }, + "packages/wire": { + "name": "@oh-my-pi/pi-wire", + "version": "15.12.6", + "devDependencies": { + "@types/bun": "catalog:", + }, + }, "python/robomp/web": { "name": "robomp-web", "version": "0.1.0", @@ -268,8 +305,11 @@ }, }, }, + "patchedDependencies": { + "beautiful-mermaid@1.1.3": "patches/beautiful-mermaid@1.1.3.patch", + }, "catalog": { - "@agentclientprotocol/sdk": "0.22.1", + "@agentclientprotocol/sdk": "0.25.0", "@babel/generator": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/traverse": "^7.29.7", @@ -280,17 +320,18 @@ "@huggingface/transformers": "^4.2.0", "@mozilla/readability": "^0.6.0", "@napi-rs/cli": "3.7.0", - "@oh-my-pi/hashline": "15.11.2", - "@oh-my-pi/omp-stats": "15.11.2", - "@oh-my-pi/pi-agent-core": "15.11.2", - "@oh-my-pi/pi-ai": "15.11.2", - "@oh-my-pi/pi-catalog": "15.11.2", - "@oh-my-pi/pi-coding-agent": "15.11.2", - "@oh-my-pi/pi-mnemopi": "15.11.2", - "@oh-my-pi/pi-natives": "15.11.2", - "@oh-my-pi/pi-tui": "15.11.2", - "@oh-my-pi/pi-utils": "15.11.2", - "@oh-my-pi/snapcompact": "15.11.2", + "@oh-my-pi/hashline": "15.12.6", + "@oh-my-pi/omp-stats": "15.12.6", + "@oh-my-pi/pi-agent-core": "15.12.6", + "@oh-my-pi/pi-ai": "15.12.6", + "@oh-my-pi/pi-catalog": "15.12.6", + "@oh-my-pi/pi-coding-agent": "15.12.6", + "@oh-my-pi/pi-mnemopi": "15.12.6", + "@oh-my-pi/pi-natives": "15.12.6", + "@oh-my-pi/pi-tui": "15.12.6", + "@oh-my-pi/pi-utils": "15.12.6", + "@oh-my-pi/pi-wire": "15.12.6", + "@oh-my-pi/snapcompact": "15.12.6", "@opentelemetry/api": "^1.9.1", "@opentelemetry/context-async-hooks": "^2.7.1", "@opentelemetry/exporter-trace-otlp-proto": "^0.218.0", @@ -303,49 +344,48 @@ "@types/babel__generator": "^7.27.0", "@types/babel__traverse": "^7.28.0", "@types/bun": "^1.3.14", - "@types/react": "^19.2.15", + "@types/react": "^19.2.17", "@types/react-dom": "^19.2.3", "@types/turndown": "5.0.6", - "@typescript/native-preview": "7.0.0-dev.20260527.1", + "@typescript/native-preview": "7.0.0-dev.20260609.1", "@xterm/headless": "^6.0.0", "beautiful-mermaid": "^1.1.3", "chalk": "^5.6.2", "chart.js": "^4.5.1", - "date-fns": "^4.3.0", + "date-fns": "^4.4.0", "diff": "^9.0.0", "fastembed": "2.1.0", "fflate": "0.8.3", "ghostty-web": "^0.4.0", "handlebars": "^4.7.9", "linkedom": "^0.18.12", - "lint-staged": "^17.0.5", + "lint-staged": "^17.0.7", "lru-cache": "11.5.1", - "lucide-react": "^1.16.0", - "marked": "^18.0.4", + "lucide-react": "^1.17.0", + "marked": "^18.0.5", "markit-ai": "0.5.3", - "onnxruntime-node": "1.24.3", - "openai": "^6.39.0", + "onnxruntime-node": "1.26.0", "partial-json": "^0.1.7", "postcss": "^8.5.15", - "prettier": "^3.8.3", + "prettier": "^3.8.4", "puppeteer-core": "^25.1.0", - "react": "19.2.6", + "react": "19.2.7", "react-chartjs-2": "^5.3.1", - "react-dom": "19.2.6", + "react-dom": "19.2.7", "regexp-tree": "^0.1.27", "solid-js": "^1.9.13", "tailwindcss": "^4.3.0", "turndown": "7.2.4", "turndown-plugin-gfm": "1.0.2", "typescript": "^6.0.3", - "vite": "^8.0.14", + "vite": "^8.0.16", "vite-plugin-solid": "^2.11.12", "winston": "^3.19.0", "winston-daily-rotate-file": "^5.0.0", - "zod": "4.4.3", + "zod": "^4", }, "packages": { - "@agentclientprotocol/sdk": ["@agentclientprotocol/sdk@0.22.1", "", { "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-DfqXtl/8gO9NImq094MTaCXEU2vkhh6v7q/kT+9UjZxUqj8hYaya2OjLVIqn16MzNHcXEpShTR2RIauLSYeDQQ=="], + "@agentclientprotocol/sdk": ["@agentclientprotocol/sdk@0.25.0", "", { "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-wU1VgXNtMvdVotX49txc3WJUDV+/QbLpsgjMvFhlRmp37osdLbI7L7y+iwAlQATwfjLxcv1r1p3ZxZBcXlGhcQ=="], "@anush008/tokenizers": ["@anush008/tokenizers@0.0.0", "", { "optionalDependencies": { "@anush008/tokenizers-darwin-universal": "0.0.0", "@anush008/tokenizers-linux-x64-gnu": "0.0.0", "@anush008/tokenizers-win32-x64-msvc": "0.0.0" } }, "sha512-IQD9wkVReKAhsEAbDjh/0KrBGTEXelqZLpOBRDaIRvlzZ9sjmUP+gKbpvzyJnei2JHQiE8JAgj7YcNloINbGBw=="], @@ -429,7 +469,7 @@ "@huggingface/jinja": ["@huggingface/jinja@0.5.9", "", {}, "sha512-uWTG+l3VJRsl7EXxYizuL3P+cCPoc3cRqbWWRcQN0FhejRfbdq0RNhCmbY/YDtnTcz9icdLYuLDjsnz4d8JMuw=="], - "@huggingface/tasks": ["@huggingface/tasks@0.21.8", "", {}, "sha512-+XNkgBks3dPVzSrnngHwsfB0BBjRZKmvmO6f45UDrvjygmZuzPTQN3+vbaMbxsAW2CHfEF6YQT3dAUvVNUGgug=="], + "@huggingface/tasks": ["@huggingface/tasks@0.21.11", "", {}, "sha512-Nmgbrjil1sjLYRXTcClB6x2zy5HwwdVGjBHyYFyPZOT5beLxM/5m8Th/7tlh0IOsgkCALJETY6/G9fAslcS0Ug=="], "@huggingface/tokenizers": ["@huggingface/tokenizers@0.1.3", "", {}, "sha512-8rF/RRT10u+kn7YuUbUg0OF30K8rjTc78aHpxT+qJ1uWSqxT1MHi8+9ltwYfkFYJzT/oS+qw3JVfHtNMGAdqyA=="], @@ -611,7 +651,7 @@ "@napi-rs/tar-win32-x64-msvc": ["@napi-rs/tar-win32-x64-msvc@1.1.0", "", { "os": "win32", "cpu": "x64" }, "sha512-L6Ed1DxXK9YSCMyvpR8MiNAyKNkQLjsHsHK9E0qnHa8NzLFqzDKhvs5LfnWxM2kJ+F7m/e5n9zPm24kHb3LsVw=="], - "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="], + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.5", "", { "dependencies": { "@tybys/wasm-util": "^0.10.2" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q=="], "@napi-rs/wasm-tools": ["@napi-rs/wasm-tools@1.0.1", "", { "optionalDependencies": { "@napi-rs/wasm-tools-android-arm-eabi": "1.0.1", "@napi-rs/wasm-tools-android-arm64": "1.0.1", "@napi-rs/wasm-tools-darwin-arm64": "1.0.1", "@napi-rs/wasm-tools-darwin-x64": "1.0.1", "@napi-rs/wasm-tools-freebsd-x64": "1.0.1", "@napi-rs/wasm-tools-linux-arm64-gnu": "1.0.1", "@napi-rs/wasm-tools-linux-arm64-musl": "1.0.1", "@napi-rs/wasm-tools-linux-x64-gnu": "1.0.1", "@napi-rs/wasm-tools-linux-x64-musl": "1.0.1", "@napi-rs/wasm-tools-wasm32-wasi": "1.0.1", "@napi-rs/wasm-tools-win32-arm64-msvc": "1.0.1", "@napi-rs/wasm-tools-win32-ia32-msvc": "1.0.1", "@napi-rs/wasm-tools-win32-x64-msvc": "1.0.1" } }, "sha512-enkZYyuCdo+9jneCPE/0fjIta4wWnvVN9hBo2HuiMpRF0q3lzv1J6b/cl7i0mxZUKhBrV3aCKDBQnCOhwKbPmQ=="], @@ -667,6 +707,8 @@ "@octokit/types": ["@octokit/types@16.0.0", "", { "dependencies": { "@octokit/openapi-types": "^27.0.0" } }, "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg=="], + "@oh-my-pi/collab-web": ["@oh-my-pi/collab-web@workspace:packages/collab-web"], + "@oh-my-pi/hashline": ["@oh-my-pi/hashline@workspace:packages/hashline"], "@oh-my-pi/omp-stats": ["@oh-my-pi/omp-stats@workspace:packages/stats"], @@ -687,6 +729,8 @@ "@oh-my-pi/pi-utils": ["@oh-my-pi/pi-utils@workspace:packages/utils"], + "@oh-my-pi/pi-wire": ["@oh-my-pi/pi-wire@workspace:packages/wire"], + "@oh-my-pi/snapcompact": ["@oh-my-pi/snapcompact@workspace:packages/snapcompact"], "@oh-my-pi/swarm-extension": ["@oh-my-pi/swarm-extension@workspace:packages/swarm-extension"], @@ -823,7 +867,7 @@ "@types/bun": ["@types/bun@1.3.14", "", { "dependencies": { "bun-types": "1.3.14" } }, "sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw=="], - "@types/node": ["@types/node@25.9.2", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-G05zqtJhcDLb8uslf5EjCxXg9G1KQxiV8OS0R26IC//Eoyitzqe8z37I7cqvnZlrlSfgocQRfSn/AHBZJJFyGw=="], + "@types/node": ["@types/node@25.9.3", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-603BddQMv3pUcr4U2dhujk83N2tTDVr/34wII2B6bJy6g+8WD6yUb11jszNs0gdi4PesVWl7ABt8nYMVpnLUcg=="], "@types/react": ["@types/react@19.2.17", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw=="], @@ -833,21 +877,21 @@ "@types/turndown": ["@types/turndown@5.0.6", "", {}, "sha512-ru00MoyeeouE5BX4gRL+6m/BsDfbRayOskWqUvh7CLGW+UXxHQItqALa38kKnOiZPqJrtzJUgAC2+F0rL1S4Pg=="], - "@typescript/native-preview": ["@typescript/native-preview@7.0.0-dev.20260527.1", "", { "optionalDependencies": { "@typescript/native-preview-darwin-arm64": "7.0.0-dev.20260527.1", "@typescript/native-preview-darwin-x64": "7.0.0-dev.20260527.1", "@typescript/native-preview-linux-arm": "7.0.0-dev.20260527.1", "@typescript/native-preview-linux-arm64": "7.0.0-dev.20260527.1", "@typescript/native-preview-linux-x64": "7.0.0-dev.20260527.1", "@typescript/native-preview-win32-arm64": "7.0.0-dev.20260527.1", "@typescript/native-preview-win32-x64": "7.0.0-dev.20260527.1" }, "bin": { "tsgo": "bin/tsgo.js" } }, "sha512-j81qKiwCPgMEjtk8uDLP+TDW60l6mugoJ7SNzfHWv1PJ6bUjIAHuag4P1jSLm1IpKuMuB3TTi4f61n7TJi8Jog=="], + "@typescript/native-preview": ["@typescript/native-preview@7.0.0-dev.20260609.1", "", { "optionalDependencies": { "@typescript/native-preview-darwin-arm64": "7.0.0-dev.20260609.1", "@typescript/native-preview-darwin-x64": "7.0.0-dev.20260609.1", "@typescript/native-preview-linux-arm": "7.0.0-dev.20260609.1", "@typescript/native-preview-linux-arm64": "7.0.0-dev.20260609.1", "@typescript/native-preview-linux-x64": "7.0.0-dev.20260609.1", "@typescript/native-preview-win32-arm64": "7.0.0-dev.20260609.1", "@typescript/native-preview-win32-x64": "7.0.0-dev.20260609.1" }, "bin": { "tsgo": "bin/tsgo.js" } }, "sha512-1HOuH/u/451O3hx4Z9fesNqarpeit6UfkgwK96sCVWi5p69F0N3v+6bI969lLIjF7K9dbYQNiWUaZ6Wik87iKg=="], - "@typescript/native-preview-darwin-arm64": ["@typescript/native-preview-darwin-arm64@7.0.0-dev.20260527.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-bDi6FJ644n3uKdp/ZI7j50ChVyGOsrJrkwihQb6x3yByFQkTINLu3e6ZkY+HveQ2Zw2vy9SGN8E7b3A5iSOO0A=="], + "@typescript/native-preview-darwin-arm64": ["@typescript/native-preview-darwin-arm64@7.0.0-dev.20260609.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Yf/zHEadP/yUiWUdM/mZVfEVFJuGMf6nhRSFif0vp+FwtfGU4jmlpNF7BTJJdOHrrcWkwEJKzAoMCtEtyxhuyQ=="], - "@typescript/native-preview-darwin-x64": ["@typescript/native-preview-darwin-x64@7.0.0-dev.20260527.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-r6GXrTdalXZu1/b5goMpAe+efZvOfwdE45gl8Tti3fckP9icK3xdiN+VnNi0RL2/c2L86RyN8nGxihaCHGCKbw=="], + "@typescript/native-preview-darwin-x64": ["@typescript/native-preview-darwin-x64@7.0.0-dev.20260609.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-z4dYWI57CPHs0wV/FWFth8fWmqYH7iOm7THOfZ5Fv0jo/SWK6kE1kEUIqIAExqo7ueRNqSrCw0I8U1J4TJszAw=="], - "@typescript/native-preview-linux-arm": ["@typescript/native-preview-linux-arm@7.0.0-dev.20260527.1", "", { "os": "linux", "cpu": "arm" }, "sha512-BlfQBatMkZHi3o+atxoUW0czGJNjo9cpO1BoQeB3gxZ7D/cDZHYHmKFSSRx8UxMktwP5k5lPxi0wgA3Ic2mQyQ=="], + "@typescript/native-preview-linux-arm": ["@typescript/native-preview-linux-arm@7.0.0-dev.20260609.1", "", { "os": "linux", "cpu": "arm" }, "sha512-mEtN8BbAgVtBu/5MVomYquXNvgok2C0KG6V0D4SV1jfBJNtlcqbp0WuIqT0bnM9DA4TgzcHvnFMpwGSK/dqI5A=="], - "@typescript/native-preview-linux-arm64": ["@typescript/native-preview-linux-arm64@7.0.0-dev.20260527.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-QJAFyPJgJqJVLbVPHl5xL7FCn3HNPLdpEm8l7KBgiYpltLhU1p/LJ3iN0XpFRAhq9ojWbZebo8t/h8MX35QjTQ=="], + "@typescript/native-preview-linux-arm64": ["@typescript/native-preview-linux-arm64@7.0.0-dev.20260609.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-OxNVWH9IhrMAzNlDyDit1dPO64GFIDPOUKoruIkJ9A1ZEONfIHXG5f+V3si9jtuNmuomiz9FjpbzOqLsgaxt+w=="], - "@typescript/native-preview-linux-x64": ["@typescript/native-preview-linux-x64@7.0.0-dev.20260527.1", "", { "os": "linux", "cpu": "x64" }, "sha512-UFB7ZdK2/vIIi62nfn3JhyGV7qR/qXjKPQaPVXwzCvaPieTZcsNsALjKU0W5WHThyi+5p3U7O3dGE7n6P4q4Yw=="], + "@typescript/native-preview-linux-x64": ["@typescript/native-preview-linux-x64@7.0.0-dev.20260609.1", "", { "os": "linux", "cpu": "x64" }, "sha512-KO8WO1gBIC09T3255RlTY42TGu8en5mEkLPQu2wkMn+dX2T8KYL64zXrCeLeUWa0NvmVdJUeyWu3pFOn3zKemw=="], - "@typescript/native-preview-win32-arm64": ["@typescript/native-preview-win32-arm64@7.0.0-dev.20260527.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-rp/q9+9H77JQvepC/UpDP8CdeTGSGyhp9BVbmFwqUV2NhMHPldfys3ihY7OQdoVBgWIKQyxEHB+FTr8Z7kre1Q=="], + "@typescript/native-preview-win32-arm64": ["@typescript/native-preview-win32-arm64@7.0.0-dev.20260609.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-+8q19LWjnMKK6SF3PLeMEalbfWDYWHs0AU8kSFCBCke/RLoDG4FjQzVtLgUo+KWhsmZMosiEyqEnZmSlED2tIQ=="], - "@typescript/native-preview-win32-x64": ["@typescript/native-preview-win32-x64@7.0.0-dev.20260527.1", "", { "os": "win32", "cpu": "x64" }, "sha512-864Pq4qoDcacUJhs2/kQplyfwNO0APUmx1k8qUaJt2P9ZGF0Pu++afJi7OagImHMiEQcmigjmZPuOodOk5YmqQ=="], + "@typescript/native-preview-win32-x64": ["@typescript/native-preview-win32-x64@7.0.0-dev.20260609.1", "", { "os": "win32", "cpu": "x64" }, "sha512-qNPcss+6yRoNFfFIKQbPwJWYxDfOZwyL8JBJh4J+yMLOad/+/AOjsO4EtZsIpv5PMCjpnD75coBoDkw+5NkItw=="], "@xmldom/xmldom": ["@xmldom/xmldom@0.8.13", "", {}, "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw=="], @@ -861,6 +905,8 @@ "ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + "anynum": ["anynum@1.0.0", "", {}, "sha512-xjR9/zBVnUOP6ztMIIgShjsxui80nQUQH+5xJnvrYLs+90bF25/KJqaAi8mk+B4RDtX1Nspi6fmp4YTEts8SfA=="], + "argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], "async": ["async@3.2.6", "", {}, "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA=="], @@ -1037,7 +1083,7 @@ "ghostty-web": ["ghostty-web@0.4.0", "", {}, "sha512-0puDBik2qapbD/QQBW9o5ZHfXnZBqZWx/ctBiVtKZ6ZLds4NYb+wZuw1cRLXZk9zYovIQ908z3rvFhexAvc5Hg=="], - "global-agent": ["global-agent@3.0.0", "", { "dependencies": { "boolean": "^3.0.1", "es6-error": "^4.1.1", "matcher": "^3.0.0", "roarr": "^2.15.3", "semver": "^7.3.2", "serialize-error": "^7.0.1" } }, "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q=="], + "global-agent": ["global-agent@4.1.3", "", { "dependencies": { "globalthis": "^1.0.2", "matcher": "^4.0.0", "semver": "^7.3.5", "serialize-error": "^8.1.0" } }, "sha512-KUJEViiuFT3I97t+GYMikLPJS2Lfo/S2F+DQuBWzuzaMPnvt5yyZePzArx36fBzpGTxZjIpDbXLeySLgh+k76g=="], "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], @@ -1143,7 +1189,7 @@ "markit-ai": ["markit-ai@0.5.3", "", { "dependencies": { "chalk": "^5.6.2", "commander": "^14.0.3", "exifr": "^7.1.3", "fast-xml-parser": "^5.5.9", "jszip": "^3.10.1", "mammoth": "^1.9.0", "mupdf": "^1.27.0", "music-metadata": "^11.12.3", "rss-parser": "^3.13.0", "turndown": "^7.2.0", "turndown-plugin-gfm": "^1.0.2" }, "bin": { "markit": "dist/main.js" } }, "sha512-h4nhn6a/SNXEdc3kLVtL37TspxjUNCNL0OM7LRWxd389ZByI/B7bjNNgxFdVAT0O+H7ZekSwLdVe/lws1l2AZQ=="], - "matcher": ["matcher@3.0.0", "", { "dependencies": { "escape-string-regexp": "^4.0.0" } }, "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng=="], + "matcher": ["matcher@4.0.0", "", { "dependencies": { "escape-string-regexp": "^4.0.0" } }, "sha512-S6x5wmcDmsDRRU/c2dkccDwQPXoFczc5+HpQ2lON8pnvHlnvHAHj5WlLVvw6n6vNyHuVugYrFohYxbS+pvFpKQ=="], "media-typer": ["media-typer@2.0.0", "", {}, "sha512-kOy3OxT2HH39N70UnKgu4NWDZjLOz8W/mfyvniHjRH/DrL3f2pOfvWQ4p60offbbtDAnXWp0v9LfMIqMec269Q=="], @@ -1191,14 +1237,12 @@ "onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], - "onnxruntime-common": ["onnxruntime-common@1.24.3", "", {}, "sha512-GeuPZO6U/LBJXvwdaqHbuUmoXiEdeCjWi/EG7Y1HNnDwJYuk6WUbNXpF6luSUY8yASul3cmUlLGrCCL1ZgVXqA=="], + "onnxruntime-common": ["onnxruntime-common@1.26.0", "", {}, "sha512-qVyMR4lcWgbkc4getFV+GQijsTnbg/siteoqcDwa3sI/LxbrMSNw4ePyvCq/ymdQaRomCA7YuWmhzsswxvymdw=="], - "onnxruntime-node": ["onnxruntime-node@1.24.3", "", { "dependencies": { "adm-zip": "^0.5.16", "global-agent": "^3.0.0", "onnxruntime-common": "1.24.3" }, "os": [ "linux", "win32", "darwin", ] }, "sha512-JH7+czbc8ALA819vlTgcV+Q214/+VjGeBHDjX81+ZCD0PCVCIFGFNtT0V4sXG/1JXypKPgScQcB3ij/hk3YnTg=="], + "onnxruntime-node": ["onnxruntime-node@1.26.0", "", { "dependencies": { "adm-zip": "^0.5.16", "global-agent": "^4.1.3", "onnxruntime-common": "1.26.0" }, "os": [ "linux", "win32", "darwin", ] }, "sha512-OHl6PiOEOqxaLHL0N9eFrbzS7IGmu3BtJNH3RTEnRAheCIkfc3gjcjl4sGcjp9C22ZC9YTquDOxSdT/stBQ6BQ=="], "onnxruntime-web": ["onnxruntime-web@1.26.0-dev.20260416-b7804b056c", "", { "dependencies": { "flatbuffers": "^25.1.24", "guid-typescript": "^1.0.9", "long": "^5.2.3", "onnxruntime-common": "1.24.0-dev.20251116-b39e144322", "platform": "^1.3.6", "protobufjs": "^7.2.4" } }, "sha512-MD6Ss4GSpQBo6zqoJzyT9LRbKYs7x/JVN23FT24EcEvlqF4VuzPOeH6X38orZPKHQDbprn7K+SBpu0/mj2CQiw=="], - "openai": ["openai@6.42.0", "", { "peerDependencies": { "ws": "^8.18.0", "zod": "^3.25 || ^4.0" }, "optionalPeers": ["ws", "zod"] }, "sha512-1WFEt/uXMXOLhYRNkgJWo08Y2YNvNwpVU72K7ibrWgWpNOXd4VojXLbe6SQ4bLiUQ3Y8jz4IiyVkylJCL1DtZg=="], - "option": ["option@0.2.4", "", {}, "sha512-pkEqbDyl8ou5cpq+VsnQbe/WlEy5qS7xPzMS1U55OCG9KPvwFD46zDbxQIj3egJSFc3D+XhYOPUzz49zQAVy7A=="], "pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="], @@ -1219,21 +1263,21 @@ "postcss": ["postcss@8.5.15", "", { "dependencies": { "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A=="], - "prettier": ["prettier@3.8.3", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw=="], + "prettier": ["prettier@3.8.4", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-N2MylSdi48+5N/6S5j+maeHbUSIzzZ5uOcX5Hm4QpV8Dkb1HFjfAKTKX6yNPJQD9AhcT3ifHNB66tWTTJDi11Q=="], "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], "progress": ["progress@2.0.3", "", {}, "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="], - "protobufjs": ["protobufjs@7.6.2", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", "@protobufjs/codegen": "^2.0.5", "@protobufjs/eventemitter": "^1.1.1", "@protobufjs/fetch": "^1.1.1", "@protobufjs/float": "^1.0.2", "@protobufjs/inquire": "^1.1.2", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.1", "@types/node": ">=13.7.0", "long": "^5.3.2" } }, "sha512-N9EiLovGEQOJSPF26Ij7qUGvahfEnq0eeYZ02aigIedkmz1qZSwjnP9SBITHJuF/6MYbIW4HDN8zdYjsjqJKXQ=="], + "protobufjs": ["protobufjs@7.6.3", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", "@protobufjs/codegen": "^2.0.5", "@protobufjs/eventemitter": "^1.1.1", "@protobufjs/fetch": "^1.1.1", "@protobufjs/float": "^1.0.2", "@protobufjs/inquire": "^1.1.2", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.1", "@types/node": ">=13.7.0", "long": "^5.3.2" } }, "sha512-+k0vdJKNdW+Vu+dYe8tZA/VvQb6XKNWexC6URwBFXxNnjLJz9nQJCemGyNgRAWD+B7+nGNc9qMPGwcD7s4nzUw=="], "puppeteer-core": ["puppeteer-core@25.1.0", "", { "dependencies": { "@puppeteer/browsers": "3.0.4", "chromium-bidi": "16.0.1", "devtools-protocol": "0.0.1624250", "typed-query-selector": "^2.12.2", "webdriver-bidi-protocol": "0.4.2", "ws": "^8.21.0" } }, "sha512-jKzy5y4WG6uNuFbTWgW1D7mqoT9o0nllc/6a1DGF775T1mPmgw3scdFEtEq67yVFikavQmbYq6NLfbTfxHSlqQ=="], - "react": ["react@19.2.6", "", {}, "sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q=="], + "react": ["react@19.2.7", "", {}, "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ=="], "react-chartjs-2": ["react-chartjs-2@5.3.1", "", { "peerDependencies": { "chart.js": "^4.1.1", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-h5IPXKg9EXpjoBzUfyWJvllMjG2mQ4EiuHQFhms/AjUm0XSZHhyRy2xVmLXHKrtcdrPO4mnGqRtYoD0vp95A0A=="], - "react-dom": ["react-dom@19.2.6", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.6" } }, "sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g=="], + "react-dom": ["react-dom@19.2.7", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.7" } }, "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ=="], "readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], @@ -1263,11 +1307,11 @@ "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], - "semver": ["semver@7.8.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-c8jsqUZm3omBOI66G90z1Dyw5z622G8oLG+omfsHBJf3CWQTlOcwOjvOG6wtiNfW6anKm/eA39LMwMtMez2TiQ=="], + "semver": ["semver@7.8.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA=="], "semver-compare": ["semver-compare@1.0.0", "", {}, "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow=="], - "serialize-error": ["serialize-error@7.0.1", "", { "dependencies": { "type-fest": "^0.13.1" } }, "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw=="], + "serialize-error": ["serialize-error@8.1.0", "", { "dependencies": { "type-fest": "^0.20.2" } }, "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ=="], "seroval": ["seroval@1.5.4", "", {}, "sha512-46uFvgrXTVxZcUorgSSRZ4y+ieqLLQRMlG4bnCZKW3qI6BZm7Rg4ntMW4p1mILEEBZWrFlcpp0AyIIlM6jD9iw=="], @@ -1277,6 +1321,22 @@ "sharp": ["sharp@0.34.5", "", { "dependencies": { "@img/colour": "^1.0.0", "detect-libc": "^2.1.2", "semver": "^7.7.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.34.5", "@img/sharp-darwin-x64": "0.34.5", "@img/sharp-libvips-darwin-arm64": "1.2.4", "@img/sharp-libvips-darwin-x64": "1.2.4", "@img/sharp-libvips-linux-arm": "1.2.4", "@img/sharp-libvips-linux-arm64": "1.2.4", "@img/sharp-libvips-linux-ppc64": "1.2.4", "@img/sharp-libvips-linux-riscv64": "1.2.4", "@img/sharp-libvips-linux-s390x": "1.2.4", "@img/sharp-libvips-linux-x64": "1.2.4", "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", "@img/sharp-libvips-linuxmusl-x64": "1.2.4", "@img/sharp-linux-arm": "0.34.5", "@img/sharp-linux-arm64": "0.34.5", "@img/sharp-linux-ppc64": "0.34.5", "@img/sharp-linux-riscv64": "0.34.5", "@img/sharp-linux-s390x": "0.34.5", "@img/sharp-linux-x64": "0.34.5", "@img/sharp-linuxmusl-arm64": "0.34.5", "@img/sharp-linuxmusl-x64": "0.34.5", "@img/sharp-wasm32": "0.34.5", "@img/sharp-win32-arm64": "0.34.5", "@img/sharp-win32-ia32": "0.34.5", "@img/sharp-win32-x64": "0.34.5" } }, "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg=="], + "sherpa-onnx": ["sherpa-onnx@1.12.37", "", {}, "sha512-3luwSdHwR8BtJiiFwqHfb15FE2FX0KsN4aOBbfq9Ma23r3w9C3bprFc/WBusXk56nUbzcEN5YczN7t9w1JwdtQ=="], + + "sherpa-onnx-darwin-arm64": ["sherpa-onnx-darwin-arm64@1.12.37", "", { "os": "darwin", "cpu": "arm64" }, "sha512-zpqbH+2TI6dvg7mxGm30Mnv17aJL3ZfRGshMiBK85dHBfhzqMbKUHNXCzsHhiKBQTzti6JqG1YoRbYrJwvdUjA=="], + + "sherpa-onnx-darwin-x64": ["sherpa-onnx-darwin-x64@1.13.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-VyiTiaU/QmBKh5ymEVefc86kMONyJxHaIKpAq0Cf60v/PGEfyfiFaWGGEJyysf8R8PXECB2YLv2wtKAomfcfcw=="], + + "sherpa-onnx-linux-arm64": ["sherpa-onnx-linux-arm64@1.13.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-IJNyd6ORcMpy1oR2ZXGNidRiPuIh5KWoOYSIOhW9UQ/BUIY43P6fq8Y3XcFj1xNjBtwke7keMW9DA7ZPYxlYoQ=="], + + "sherpa-onnx-linux-x64": ["sherpa-onnx-linux-x64@1.13.2", "", { "os": "linux", "cpu": "x64" }, "sha512-CI2pTKgbOTOpAbm6cSwsFzJZ9qD+xcpEKPfmMCMI7KjaEePnTfky+FYxVBvllbYNk9DQznuTT0Ob9XsBhwtE/Q=="], + + "sherpa-onnx-node": ["sherpa-onnx-node@1.12.37", "", { "optionalDependencies": { "sherpa-onnx-darwin-arm64": "^1.12.37", "sherpa-onnx-darwin-x64": "^1.12.37", "sherpa-onnx-linux-arm64": "^1.12.37", "sherpa-onnx-linux-x64": "^1.12.37", "sherpa-onnx-win-ia32": "^1.12.37", "sherpa-onnx-win-x64": "^1.12.37" } }, "sha512-SpblPUl/ODliBk4WzKLRa0VPyc30I3HU9U/qRUmhya7eTNLkJE8sQOmj2kvRL8k2cWrHES2pyvRwwq1jT/MPpw=="], + + "sherpa-onnx-win-ia32": ["sherpa-onnx-win-ia32@1.13.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-PJxFuZB6VcwxscP9whLdxBMhHWZ88Ax35LeKpAZWXIvFjIviX1yPJB1+ndhXvF9Nh1L8gPgO9MUBfC1BMKqzvw=="], + + "sherpa-onnx-win-x64": ["sherpa-onnx-win-x64@1.13.2", "", { "os": "win32", "cpu": "x64" }, "sha512-D11eEIW4LZLK6Q+yPGmpJ+45gV8EqiwcPNZiE/RoveBsasZCBtl3YXXqvH2APyHafhDk+L8pD/dDR7HdH3GZJw=="], + "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], "slice-ansi": ["slice-ansi@8.0.0", "", { "dependencies": { "ansi-styles": "^6.2.3", "is-fullwidth-code-point": "^5.1.0" } }, "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg=="], @@ -1301,7 +1361,7 @@ "strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], - "strnum": ["strnum@2.3.0", "", {}, "sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q=="], + "strnum": ["strnum@2.4.0", "", { "dependencies": { "anynum": "^1.0.0" } }, "sha512-sHrVyWWdq28RbhjuJdZsA1SnGRJV6NiXbk6AXBxDOsgAcA+lmpUZCYjOdLBxkXMwis6RRe7dlZt4VlIWFVzkmg=="], "strtok3": ["strtok3@10.3.5", "", { "dependencies": { "@tokenizer/token": "^0.3.0" } }, "sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA=="], @@ -1329,7 +1389,7 @@ "typanion": ["typanion@3.14.0", "", {}, "sha512-ZW/lVMRabETuYCd9O9ZvMhAh8GslSqaUjxmK/JLPCh6l73CvLBiuXswj/+7LdnWOgYsQ130FqLzFz5aGT4I3Ug=="], - "type-fest": ["type-fest@0.13.1", "", {}, "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg=="], + "type-fest": ["type-fest@0.20.2", "", {}, "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="], "typed-query-selector": ["typed-query-selector@2.12.2", "", {}, "sha512-EOPFbyIub4ngnEdqi2yOcNeDLaX/0jcE1JoAXQDDMIthap7FoN795lc/SHfIq2d416VufXpM8z/lD+WRm2gfOQ=="], @@ -1397,15 +1457,19 @@ "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "@huggingface/transformers/onnxruntime-node": ["onnxruntime-node@1.24.3", "", { "dependencies": { "adm-zip": "^0.5.16", "global-agent": "^3.0.0", "onnxruntime-common": "1.24.3" }, "os": [ "linux", "win32", "darwin", ] }, "sha512-JH7+czbc8ALA819vlTgcV+Q214/+VjGeBHDjX81+ZCD0PCVCIFGFNtT0V4sXG/1JXypKPgScQcB3ij/hk3YnTg=="], + "@isaacs/fs-minipass/minipass": ["minipass@7.1.3", "", {}, "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="], + "@oh-my-pi/pi-coding-agent/sherpa-onnx-node": ["sherpa-onnx-node@1.13.2", "", { "optionalDependencies": { "sherpa-onnx-darwin-arm64": "^1.13.2", "sherpa-onnx-darwin-x64": "^1.13.2", "sherpa-onnx-linux-arm64": "^1.13.2", "sherpa-onnx-linux-x64": "^1.13.2", "sherpa-onnx-win-ia32": "^1.13.2", "sherpa-onnx-win-x64": "^1.13.2" } }, "sha512-uIH6SA5Or4pb8HlCYWB3K54XkMtzdef4/tkw1amtIf8GB1tt6hQLpur9p2jSFNfTYRyzZ8XrXofxefXQ0A7EUA=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" }, "bundled": true }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], - "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" }, "bundled": true }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="], + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.5", "", { "dependencies": { "@tybys/wasm-util": "^0.10.2" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" }, "bundled": true }, "sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q=="], "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.2", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg=="], @@ -1455,10 +1519,18 @@ "@babel/helper-compilation-targets/lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], + "@huggingface/transformers/onnxruntime-node/global-agent": ["global-agent@3.0.0", "", { "dependencies": { "boolean": "^3.0.1", "es6-error": "^4.1.1", "matcher": "^3.0.0", "roarr": "^2.15.3", "semver": "^7.3.2", "serialize-error": "^7.0.1" } }, "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q=="], + + "@huggingface/transformers/onnxruntime-node/onnxruntime-common": ["onnxruntime-common@1.24.3", "", {}, "sha512-GeuPZO6U/LBJXvwdaqHbuUmoXiEdeCjWi/EG7Y1HNnDwJYuk6WUbNXpF6luSUY8yASul3cmUlLGrCCL1ZgVXqA=="], + + "@oh-my-pi/pi-coding-agent/sherpa-onnx-node/sherpa-onnx-darwin-arm64": ["sherpa-onnx-darwin-arm64@1.13.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-sakY1+WH/Va/vhzwlhIKXaMr0ioKsJ55w785QH+VDFyUqq1+2InbmB3BgX5gyYKeuW40R0U0IW5c7wnMArhpdw=="], + "cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], "cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "fastembed/onnxruntime-node/global-agent": ["global-agent@3.0.0", "", { "dependencies": { "boolean": "^3.0.1", "es6-error": "^4.1.1", "matcher": "^3.0.0", "roarr": "^2.15.3", "semver": "^7.3.2", "serialize-error": "^7.0.1" } }, "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q=="], + "fastembed/onnxruntime-node/onnxruntime-common": ["onnxruntime-common@1.21.0", "", {}, "sha512-Q632iLLrtCAVOTO65dh2+mNbQir/QNTVBG3h/QdZBpns7mZ0RYbLRBgGABPbpU9351AgYy7SJf1WaeVwMrBFPQ=="], "fastembed/onnxruntime-node/tar": ["tar@7.5.16", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-56adEpPMouktRlBLXiaYFFzZ/3+JXa8P9n7WbR+ibIjtviN55mEaOkiysCnPnWm+7kkui1Dn8J9l+g6zV8731w=="], @@ -1469,8 +1541,16 @@ "string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "@huggingface/transformers/onnxruntime-node/global-agent/matcher": ["matcher@3.0.0", "", { "dependencies": { "escape-string-regexp": "^4.0.0" } }, "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng=="], + + "@huggingface/transformers/onnxruntime-node/global-agent/serialize-error": ["serialize-error@7.0.1", "", { "dependencies": { "type-fest": "^0.13.1" } }, "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw=="], + "cliui/wrap-ansi/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + "fastembed/onnxruntime-node/global-agent/matcher": ["matcher@3.0.0", "", { "dependencies": { "escape-string-regexp": "^4.0.0" } }, "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng=="], + + "fastembed/onnxruntime-node/global-agent/serialize-error": ["serialize-error@7.0.1", "", { "dependencies": { "type-fest": "^0.13.1" } }, "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw=="], + "fastembed/onnxruntime-node/tar/chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], "fastembed/onnxruntime-node/tar/minipass": ["minipass@7.1.3", "", {}, "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="], @@ -1481,6 +1561,10 @@ "log-update/wrap-ansi/string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], + "@huggingface/transformers/onnxruntime-node/global-agent/serialize-error/type-fest": ["type-fest@0.13.1", "", {}, "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg=="], + "cliui/wrap-ansi/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "fastembed/onnxruntime-node/global-agent/serialize-error/type-fest": ["type-fest@0.13.1", "", {}, "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg=="], } } diff --git a/bunfig.toml b/bunfig.toml index 279e4f11e..8800cf685 100644 --- a/bunfig.toml +++ b/bunfig.toml @@ -17,6 +17,12 @@ saveTextLockfile = true # scratch dirs so a root-level `bun test` doesn't walk into them. pathIgnorePatterns = [ "**/node_modules/**", + "**/.git/**", + "**/target/**", + "**/dist/**", + "python/**", + "docs/**", + "runs/**", "python/robomp/data/**", ".wt/**", ".worktrees/**", diff --git a/crates/brush-core-vendored/src/builtins.rs b/crates/brush-core-vendored/src/builtins.rs index 602bc82cd..91f2caf64 100644 --- a/crates/brush-core-vendored/src/builtins.rs +++ b/crates/brush-core-vendored/src/builtins.rs @@ -164,6 +164,10 @@ pub struct Registration { /// Is this builtin one that takes specially handled declarations? pub declaration_builtin: bool, + + /// Can async background job spawning skip this builtin and launch its first + /// word argument directly? + pub transparent_background_wrapper: bool, } impl Registration { @@ -172,6 +176,14 @@ impl Registration { pub const fn special(self) -> Self { Self { special_builtin: true, ..self } } + + /// Marks this builtin as a transparent wrapper when used as an asynchronous + /// background command. The first word argument becomes the launched command, + /// and the wrapper itself is skipped so `$!` can refer to the real child PID. + #[must_use] + pub const fn transparent_background_wrapper(self) -> Self { + Self { transparent_background_wrapper: true, ..self } + } } fn get_builtin_man_page(name: &str, command: &clap::Command) -> Result { @@ -510,6 +522,7 @@ pub fn simple_builtin() -> R disabled: false, special_builtin: false, declaration_builtin: false, + transparent_background_wrapper: false, } } @@ -536,6 +550,7 @@ pub fn decl_builtin( async_params.set_fd(openfiles::OpenFiles::STDIN_FD, null); } - let job = if should_try_spawn_pipeline_as_job(ao_list, shell, &async_params).await? { - match try_spawn_pipeline_as_job(&ao_list.first, ao_list.to_string(), shell, &async_params) - .await? - { + let direct_pipeline = + background_process_pipeline_for_async_job(ao_list, shell, &async_params).await?; + let job = if let Some(pipeline) = direct_pipeline { + match try_spawn_pipeline_as_job(&pipeline, ao_list.to_string(), shell, &async_params).await? { Some(job) => job, None => spawn_async_ao_list_in_task(ao_list, shell, &async_params), } @@ -394,47 +394,98 @@ async fn spawn_async_ao_list_as_job<'a, SE: extensions::ShellExtensions>( Ok(shell.jobs_mut().add_as_current(job)) } -async fn should_try_spawn_pipeline_as_job( +enum BackgroundProcessPipeline { + Direct, + Wrapper(ast::Pipeline), + Internal, +} + +async fn background_process_pipeline_for_async_job( ao_list: &ast::AndOrList, shell: &mut Shell, params: &ExecutionParameters, -) -> Result { +) -> Result, error::Error> { if !ao_list.additional.is_empty() { - return Ok(false); + return Ok(None); } - let pipeline = &ao_list.first; + let mut pipeline = ao_list.first.clone(); + for _ in 0..8 { + match classify_background_process_pipeline(&pipeline, shell, params).await? { + BackgroundProcessPipeline::Direct => return Ok(Some(pipeline)), + BackgroundProcessPipeline::Wrapper(unwrapped) => pipeline = unwrapped, + BackgroundProcessPipeline::Internal => return Ok(None), + } + } + + Ok(None) +} + +async fn classify_background_process_pipeline( + pipeline: &ast::Pipeline, + shell: &mut Shell, + params: &ExecutionParameters, +) -> Result { if pipeline.bang { - return Ok(false); + return Ok(BackgroundProcessPipeline::Internal); } let [ast::Command::Simple(simple_cmd)] = pipeline.seq.as_slice() else { - return Ok(false); + return Ok(BackgroundProcessPipeline::Internal); }; let Some(command_word) = simple_cmd.word_or_name.as_ref() else { - return Ok(false); + return Ok(BackgroundProcessPipeline::Internal); }; let expanded = expansion::full_expand_and_split_word(shell, params, command_word).await?; let [command_name] = expanded.as_slice() else { - return Ok(false); + return Ok(BackgroundProcessPipeline::Internal); }; if shell.aliases().contains_key(command_name) { - return Ok(false); + return Ok(BackgroundProcessPipeline::Internal); } - if shell - .builtins() - .get(command_name.as_str()) - .is_some_and(|registration| !registration.disabled) + if let Some(registration) = shell.builtins().get(command_name.as_str()) + && !registration.disabled { - return Ok(false); + return if registration.transparent_background_wrapper { + Ok(unwrap_transparent_background_wrapper(pipeline) + .map_or(BackgroundProcessPipeline::Internal, BackgroundProcessPipeline::Wrapper)) + } else { + Ok(BackgroundProcessPipeline::Internal) + }; } if shell.funcs().get(command_name.as_str()).is_some() { - return Ok(false); + return Ok(BackgroundProcessPipeline::Internal); } - Ok(true) + Ok(BackgroundProcessPipeline::Direct) +} + +fn unwrap_transparent_background_wrapper(pipeline: &ast::Pipeline) -> Option { + let [ast::Command::Simple(simple_cmd)] = pipeline.seq.as_slice() else { + return None; + }; + let mut unwrapped = simple_cmd.clone(); + let suffix = unwrapped.suffix.as_mut()?; + let operand_index = suffix + .0 + .iter() + .position(|item| matches!(item, CommandPrefixOrSuffixItem::Word(_)))?; + let CommandPrefixOrSuffixItem::Word(operand_word) = suffix.0.remove(operand_index) else { + return None; + }; + + unwrapped.word_or_name = Some(operand_word); + if suffix.0.is_empty() { + unwrapped.suffix = None; + } + + Some(ast::Pipeline { + timed: pipeline.timed.clone(), + bang: pipeline.bang, + seq: vec![ast::Command::Simple(unwrapped)], + }) } async fn try_spawn_pipeline_as_job( diff --git a/crates/pi-ast/src/block.rs b/crates/pi-ast/src/block.rs index fd551d9a6..8dc9d0f5b 100644 --- a/crates/pi-ast/src/block.rs +++ b/crates/pi-ast/src/block.rs @@ -77,8 +77,20 @@ pub fn block_range_at(options: BlockRangeOptions) -> Result> }; let root = tree.root_node(); + // Query a one-column-wide range over the first content character rather + // than a zero-width point. Some grammars (e.g. tree-sitter-swift) insert a + // zero-width separator node at the start of a statement that follows a + // blank line. An empty point range at that node's start gets absorbed into + // the invisible node, which has no children and is not "relevant", so + // `named_descendant_for_point_range` bubbles back up to the last visible + // ancestor (the enclosing body, or the file root). That made `replace + // block` on a line like `var body: some View {` preceded by a blank line + // resolve to the whole enclosing type body and then fail. Spanning the + // first character skips the zero-width node (its end is < the range end) + // and forces the descent into the node that begins on `row`. let point = Point::new(row, col); - let Some(leaf) = root.named_descendant_for_point_range(point, point) else { + let point_end = Point::new(row, col + 1); + let Some(leaf) = root.named_descendant_for_point_range(point, point_end) else { return Ok(None); }; // A leaf whose own start row is earlier than `row` means `point` landed on @@ -298,6 +310,20 @@ mod tests { assert_eq!(resolve(TS_EXAMPLE, "x.unknownext", 2), None); } + #[test] + fn resolves_zsh_if_block_in_extensionless_rc_file() { + // Regression: an extensionless shell rc file (`zshrc`/`.zshrc`) must + // infer the bash grammar so `replace block` / `insert after block` + // works. Previously `Path::extension` returned `None`, leaving block + // ops permanently unresolvable on these files. + let code = "ZSH_COMPDUMP=x\nif [[ -f \"$ZSH_COMPDUMP\" ]]; then\n compinit -C\nelse\n \ + compinit\nfi\n"; + let span = Some(BlockRange { start_line: 2, end_line: 6 }); + assert_eq!(resolve(code, "modules/zsh/zshrc", 2), span); + assert_eq!(resolve(code, ".zshrc", 2), span); + assert_eq!(resolve(code, "/home/u/.bashrc", 2), span); + } + #[test] fn resolves_top_level_python_def() { let code = "x = 1\ndef greet():\n return 1\n"; @@ -358,6 +384,34 @@ mod tests { assert_eq!(resolve(code, "r.rs", 2), Some(BlockRange { start_line: 2, end_line: 4 })); } + #[test] + fn resolves_swift_computed_property_after_blank_line() { + // Regression: a block whose opening line is preceded by a blank line + // (here the SwiftUI `var body: some View {` computed property) used to + // resolve to nothing. tree-sitter-swift inserts a zero-width separator + // node at the start of a statement that follows a blank line; a + // zero-width point query at the first content column gets absorbed into + // that invisible node and bubbles back up to the enclosing type body. A + // one-column-wide query skips the zero-width node and descends into the + // property that actually begins on the line. + let code = "struct MenuBarUsage: View {\n let metric: AccountMetric\n\n var body: \ + some View {\n VStack {\n Text(\"Usage\")\n }\n \ + }\n}\n"; + assert_eq!( + resolve(code, "MenuBarUsage.swift", 4), + Some(BlockRange { start_line: 4, end_line: 8 }) + ); + } + + #[test] + fn resolves_swift_top_level_decl_after_blank_line() { + // Same zero-width-separator regression one level up: a top-level + // declaration following a blank line. Without the fix the query + // resolved to the whole `source_file` root and was rejected. + let code = "import Foundation\n\nfunc greet() {\n print(\"hi\")\n}\n"; + assert_eq!(resolve(code, "g.swift", 3), Some(BlockRange { start_line: 3, end_line: 5 })); + } + fn boundaries(code: &str, path: &str, ranges: &[(u32, u32)]) -> Option> { enclosing_block_boundaries(EnclosingBoundaryOptions { code: code.to_string(), diff --git a/crates/pi-ast/src/language/mod.rs b/crates/pi-ast/src/language/mod.rs index a7b93768b..506e22682 100644 --- a/crates/pi-ast/src/language/mod.rs +++ b/crates/pi-ast/src/language/mod.rs @@ -627,6 +627,31 @@ fn from_extension(path: &Path) -> Option { return Some(SupportLang::Dockerfile); } + // Extensionless shell rc/profile files. `Path::extension` returns `None` + // for both bare (`zshrc`) and dotfile (`.zshrc`) forms, so they would + // otherwise resolve to no language and disable block-aware ops on them. + let stem = name.strip_prefix('.').unwrap_or(name); + if matches!( + stem, + "zshrc" + | "zshenv" + | "zprofile" + | "zlogin" + | "zlogout" + | "zsh_aliases" + | "bashrc" + | "bash_profile" + | "bash_login" + | "bash_logout" + | "bash_aliases" + | "profile" + | "kshrc" + | "mkshrc" + | "shrc" + ) { + return Some(SupportLang::Bash); + } + let ext = path.extension()?.to_str()?; SupportLang::all_langs() .iter() diff --git a/crates/pi-iso/src/projfs.rs b/crates/pi-iso/src/projfs.rs index 13f0ed7fb..52d413c5a 100644 --- a/crates/pi-iso/src/projfs.rs +++ b/crates/pi-iso/src/projfs.rs @@ -553,7 +553,16 @@ mod imp { }; if matched { - let extended_info = symlink_extended_info(entry.symlink_target.as_deref()); + let extended_info = entry + .symlink_target + .as_deref() + .map(|target| PRJ_EXTENDED_INFO { + InfoType: PRJ_EXT_INFO_TYPE_SYMLINK, + NextInfoOffset: 0, + Anonymous: PRJ_EXTENDED_INFO_0 { + Symlink: PRJ_EXTENDED_INFO_0_0 { TargetName: target.as_ptr() }, + }, + }); let extended_info_ptr = extended_info .as_ref() .map_or(std::ptr::null(), |info| info as *const _); @@ -599,7 +608,13 @@ mod imp { Ok(target) => target, Err(err) => return io_error_to_hresult(&err), }; - let extended_info = symlink_extended_info(symlink_target.as_deref()); + let extended_info = symlink_target.as_deref().map(|target| PRJ_EXTENDED_INFO { + InfoType: PRJ_EXT_INFO_TYPE_SYMLINK, + NextInfoOffset: 0, + Anonymous: PRJ_EXTENDED_INFO_0 { + Symlink: PRJ_EXTENDED_INFO_0_0 { TargetName: target.as_ptr() }, + }, + }); let extended_info_ptr = extended_info .as_ref() .map_or(std::ptr::null(), |info| info as *const _); @@ -782,16 +797,6 @@ mod imp { Ok(Some(target)) } - fn symlink_extended_info(target: Option<&[u16]>) -> Option { - target.map(|target| PRJ_EXTENDED_INFO { - InfoType: PRJ_EXT_INFO_TYPE_SYMLINK, - NextInfoOffset: 0, - Anonymous: PRJ_EXTENDED_INFO_0 { - Symlink: PRJ_EXTENDED_INFO_0_0 { TargetName: target.as_ptr() }, - }, - }) - } - fn callback_relative_path(callback_data: &PRJ_CALLBACK_DATA) -> PathBuf { if callback_data.FilePathName.is_null() { return PathBuf::new(); diff --git a/crates/pi-iso/src/windows_block_clone.rs b/crates/pi-iso/src/windows_block_clone.rs index 5e0bb31ed..0c1417780 100644 --- a/crates/pi-iso/src/windows_block_clone.rs +++ b/crates/pi-iso/src/windows_block_clone.rs @@ -111,9 +111,7 @@ mod imp { let resolved = if path.is_absolute() { path.to_path_buf() } else { - std::env::current_dir() - .map(|cwd| cwd.join(path)) - .unwrap_or_else(|_| path.to_path_buf()) + std::env::current_dir().map_or_else(|_| path.to_path_buf(), |cwd| cwd.join(path)) }; let meta = fs::metadata(&resolved).map_err(|err| { IsoError::other(format!("invalid block-clone source {}: {err}", resolved.display())) @@ -164,6 +162,13 @@ mod imp { } let mut permissions = meta.permissions(); if permissions.readonly() { + // This backend only removes a temporary Windows block-clone tree; clearing + // the readonly file attribute is required so removal can proceed. + #[allow( + clippy::permissions_set_readonly_false, + reason = "Windows block-clone cleanup must clear the readonly file attribute before \ + deletion" + )] permissions.set_readonly(false); let _ = fs::set_permissions(path, permissions); } diff --git a/crates/pi-natives/src/fonts/6x12.bdf b/crates/pi-natives/src/fonts/6x12.bdf new file mode 100644 index 000000000..3fbf113d2 --- /dev/null +++ b/crates/pi-natives/src/fonts/6x12.bdf @@ -0,0 +1,86121 @@ +STARTFONT 2.1 +COMMENT $ucs-fonts: 6x12.bdf,v 1.32 2008-06-26 12:50:43+01 mgk25 Rel $ +COMMENT Send bug reports to Markus Kuhn +FONT -Misc-Fixed-Medium-R-SemiCondensed--12-110-75-75-C-60-ISO10646-1 +SIZE 12 75 75 +FONTBOUNDINGBOX 6 12 0 -2 +STARTPROPERTIES 22 +FONTNAME_REGISTRY "" +FOUNDRY "Misc" +FAMILY_NAME "Fixed" +WEIGHT_NAME "Medium" +SLANT "R" +SETWIDTH_NAME "SemiCondensed" +ADD_STYLE_NAME "" +PIXEL_SIZE 12 +POINT_SIZE 120 +RESOLUTION_X 75 +RESOLUTION_Y 75 +SPACING "C" +AVERAGE_WIDTH 60 +CHARSET_REGISTRY "ISO10646" +CHARSET_ENCODING "1" +FONT_ASCENT 10 +FONT_DESCENT 2 +DEFAULT_CHAR 0 +COPYRIGHT "Public domain terminal emulator font. Share and enjoy." +CAP_HEIGHT 7 +X_HEIGHT 5 +_GBDFED_INFO "Edited with gbdfed 1.3." +ENDPROPERTIES +CHARS 4531 +STARTCHAR char0 +ENCODING 0 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +00 +88 +00 +88 +00 +A8 +00 +00 +ENDCHAR +STARTCHAR space +ENCODING 32 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR exclam +ENCODING 33 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +20 +20 +20 +00 +20 +00 +00 +ENDCHAR +STARTCHAR quotedbl +ENCODING 34 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +50 +50 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR numbersign +ENCODING 35 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +50 +F8 +50 +50 +F8 +50 +00 +00 +ENDCHAR +STARTCHAR dollar +ENCODING 36 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +70 +A8 +A0 +70 +28 +A8 +70 +20 +00 +ENDCHAR +STARTCHAR percent +ENCODING 37 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +C8 +C8 +10 +20 +40 +98 +98 +00 +00 +ENDCHAR +STARTCHAR ampersand +ENCODING 38 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +A0 +A0 +40 +A8 +90 +68 +00 +00 +ENDCHAR +STARTCHAR quotesingle +ENCODING 39 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +20 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR parenleft +ENCODING 40 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +20 +40 +40 +40 +20 +20 +10 +00 +ENDCHAR +STARTCHAR parenright +ENCODING 41 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +20 +20 +10 +10 +10 +20 +20 +40 +00 +ENDCHAR +STARTCHAR asterisk +ENCODING 42 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +A8 +70 +20 +70 +A8 +20 +00 +00 +ENDCHAR +STARTCHAR plus +ENCODING 43 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +20 +F8 +20 +20 +00 +00 +00 +ENDCHAR +STARTCHAR comma +ENCODING 44 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +60 +60 +C0 +00 +ENDCHAR +STARTCHAR hyphen +ENCODING 45 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +F8 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR period +ENCODING 46 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +60 +60 +00 +00 +ENDCHAR +STARTCHAR slash +ENCODING 47 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +10 +10 +20 +40 +40 +80 +00 +00 +ENDCHAR +STARTCHAR zero +ENCODING 48 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +48 +48 +48 +48 +48 +30 +00 +00 +ENDCHAR +STARTCHAR one +ENCODING 49 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +60 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR two +ENCODING 50 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +08 +10 +20 +40 +F8 +00 +00 +ENDCHAR +STARTCHAR three +ENCODING 51 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +08 +10 +30 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR four +ENCODING 52 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +30 +50 +90 +F8 +10 +10 +00 +00 +ENDCHAR +STARTCHAR five +ENCODING 53 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +80 +F0 +08 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR six +ENCODING 54 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +40 +80 +F0 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR seven +ENCODING 55 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +08 +10 +10 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR eight +ENCODING 56 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +70 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR nine +ENCODING 57 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +78 +08 +10 +60 +00 +00 +ENDCHAR +STARTCHAR colon +ENCODING 58 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +60 +60 +00 +60 +60 +00 +00 +ENDCHAR +STARTCHAR semicolon +ENCODING 59 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +60 +60 +00 +60 +60 +C0 +00 +ENDCHAR +STARTCHAR less +ENCODING 60 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +20 +40 +20 +10 +00 +00 +00 +ENDCHAR +STARTCHAR equal +ENCODING 61 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +00 +F8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR greater +ENCODING 62 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +40 +20 +10 +20 +40 +00 +00 +00 +ENDCHAR +STARTCHAR question +ENCODING 63 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +10 +20 +20 +00 +20 +00 +00 +ENDCHAR +STARTCHAR at +ENCODING 64 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +B8 +A8 +B8 +80 +70 +00 +00 +ENDCHAR +STARTCHAR A +ENCODING 65 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR B +ENCODING 66 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +48 +48 +70 +48 +48 +F0 +00 +00 +ENDCHAR +STARTCHAR C +ENCODING 67 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +80 +80 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR D +ENCODING 68 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +48 +48 +48 +48 +48 +F0 +00 +00 +ENDCHAR +STARTCHAR E +ENCODING 69 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +80 +80 +F0 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR F +ENCODING 70 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +80 +80 +F0 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR G +ENCODING 71 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +80 +80 +98 +88 +70 +00 +00 +ENDCHAR +STARTCHAR H +ENCODING 72 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR I +ENCODING 73 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR J +ENCODING 74 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +38 +10 +10 +10 +10 +90 +60 +00 +00 +ENDCHAR +STARTCHAR K +ENCODING 75 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +90 +A0 +C0 +A0 +90 +88 +00 +00 +ENDCHAR +STARTCHAR L +ENCODING 76 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +80 +80 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR M +ENCODING 77 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +D8 +A8 +88 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR N +ENCODING 78 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +C8 +A8 +98 +88 +88 +00 +00 +ENDCHAR +STARTCHAR O +ENCODING 79 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR P +ENCODING 80 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +88 +88 +F0 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR Q +ENCODING 81 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +88 +A8 +90 +68 +00 +00 +ENDCHAR +STARTCHAR R +ENCODING 82 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +88 +88 +F0 +A0 +90 +88 +00 +00 +ENDCHAR +STARTCHAR S +ENCODING 83 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +80 +70 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR T +ENCODING 84 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +20 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR U +ENCODING 85 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR V +ENCODING 86 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +88 +88 +50 +50 +20 +00 +00 +ENDCHAR +STARTCHAR W +ENCODING 87 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +88 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR X +ENCODING 88 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +50 +20 +50 +88 +88 +00 +00 +ENDCHAR +STARTCHAR Y +ENCODING 89 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +50 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR Z +ENCODING 90 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +08 +10 +20 +40 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR bracketleft +ENCODING 91 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +40 +40 +40 +40 +40 +40 +40 +70 +00 +ENDCHAR +STARTCHAR backslash +ENCODING 92 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +40 +40 +20 +10 +10 +08 +00 +00 +ENDCHAR +STARTCHAR bracketright +ENCODING 93 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +10 +10 +10 +10 +10 +10 +10 +70 +00 +ENDCHAR +STARTCHAR asciicircum +ENCODING 94 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +88 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR underscore +ENCODING 95 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +F8 +ENDCHAR +STARTCHAR grave +ENCODING 96 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +20 +10 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR a +ENCODING 97 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +08 +78 +88 +78 +00 +00 +ENDCHAR +STARTCHAR b +ENCODING 98 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +F0 +88 +88 +88 +F0 +00 +00 +ENDCHAR +STARTCHAR c +ENCODING 99 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR d +ENCODING 100 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +08 +78 +88 +88 +88 +78 +00 +00 +ENDCHAR +STARTCHAR e +ENCODING 101 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +F0 +80 +70 +00 +00 +ENDCHAR +STARTCHAR f +ENCODING 102 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +48 +40 +E0 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR g +ENCODING 103 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +88 +88 +78 +08 +70 +ENDCHAR +STARTCHAR h +ENCODING 104 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +F0 +88 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR i +ENCODING 105 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +60 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR j +ENCODING 106 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +00 +18 +08 +08 +08 +08 +48 +30 +ENDCHAR +STARTCHAR k +ENCODING 107 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +88 +90 +E0 +90 +88 +00 +00 +ENDCHAR +STARTCHAR l +ENCODING 108 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +60 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR m +ENCODING 109 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +D0 +A8 +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR n +ENCODING 110 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +B0 +C8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR o +ENCODING 111 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR p +ENCODING 112 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F0 +88 +88 +88 +F0 +80 +80 +ENDCHAR +STARTCHAR q +ENCODING 113 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +88 +88 +88 +78 +08 +08 +ENDCHAR +STARTCHAR r +ENCODING 114 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +B0 +C8 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR s +ENCODING 115 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +80 +70 +08 +F0 +00 +00 +ENDCHAR +STARTCHAR t +ENCODING 116 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +F8 +20 +20 +20 +18 +00 +00 +ENDCHAR +STARTCHAR u +ENCODING 117 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +88 +98 +68 +00 +00 +ENDCHAR +STARTCHAR v +ENCODING 118 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +88 +50 +20 +00 +00 +ENDCHAR +STARTCHAR w +ENCODING 119 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR x +ENCODING 120 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +50 +20 +50 +88 +00 +00 +ENDCHAR +STARTCHAR y +ENCODING 121 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +88 +50 +20 +40 +80 +ENDCHAR +STARTCHAR z +ENCODING 122 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +10 +20 +40 +F8 +00 +00 +ENDCHAR +STARTCHAR braceleft +ENCODING 123 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +20 +20 +40 +20 +20 +20 +10 +00 +ENDCHAR +STARTCHAR bar +ENCODING 124 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +20 +20 +20 +20 +20 +20 +20 +00 +ENDCHAR +STARTCHAR braceright +ENCODING 125 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +20 +20 +20 +10 +20 +20 +20 +40 +00 +ENDCHAR +STARTCHAR asciitilde +ENCODING 126 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +48 +A8 +90 +00 +00 +00 +00 +ENDCHAR +STARTCHAR space +ENCODING 160 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR exclamdown +ENCODING 161 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR cent +ENCODING 162 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +70 +A8 +A0 +A8 +70 +20 +00 +ENDCHAR +STARTCHAR sterling +ENCODING 163 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +48 +40 +E0 +40 +48 +B0 +00 +00 +ENDCHAR +STARTCHAR currency +ENCODING 164 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A8 +50 +88 +50 +A8 +00 +00 +ENDCHAR +STARTCHAR yen +ENCODING 165 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +50 +F8 +20 +F8 +20 +20 +00 +00 +ENDCHAR +STARTCHAR brokenbar +ENCODING 166 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +20 +00 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR section +ENCODING 167 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +38 +40 +30 +48 +48 +30 +08 +70 +00 +00 +ENDCHAR +STARTCHAR dieresis +ENCODING 168 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR copyright +ENCODING 169 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +84 +94 +A4 +94 +84 +78 +00 +00 +ENDCHAR +STARTCHAR ordfeminine +ENCODING 170 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +30 +50 +30 +00 +70 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR guillemotleft +ENCODING 171 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +28 +50 +A0 +50 +28 +00 +00 +ENDCHAR +STARTCHAR logicalnot +ENCODING 172 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +F8 +08 +08 +00 +00 +00 +ENDCHAR +STARTCHAR hyphen +ENCODING 173 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +70 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR registered +ENCODING 174 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +84 +B4 +A4 +A4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR macron +ENCODING 175 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR degree +ENCODING 176 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +30 +48 +48 +30 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR plusminus +ENCODING 177 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +F8 +20 +20 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR twosuperior +ENCODING 178 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +10 +20 +70 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR threesuperior +ENCODING 179 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +60 +10 +20 +10 +60 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR acute +ENCODING 180 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +40 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR mu +ENCODING 181 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +88 +98 +E8 +80 +80 +ENDCHAR +STARTCHAR paragraph +ENCODING 182 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +78 +E8 +E8 +E8 +68 +28 +28 +28 +00 +00 +ENDCHAR +STARTCHAR periodcentered +ENCODING 183 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +30 +30 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR cedilla +ENCODING 184 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +60 +ENDCHAR +STARTCHAR onesuperior +ENCODING 185 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +60 +20 +20 +70 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR ordmasculine +ENCODING 186 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +20 +00 +70 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR guillemotright +ENCODING 187 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A0 +50 +28 +50 +A0 +00 +00 +ENDCHAR +STARTCHAR onequarter +ENCODING 188 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +C0 +40 +40 +50 +30 +50 +78 +10 +10 +00 +00 +ENDCHAR +STARTCHAR onehalf +ENCODING 189 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +C0 +40 +40 +50 +28 +08 +10 +20 +38 +00 +00 +ENDCHAR +STARTCHAR threequarters +ENCODING 190 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +20 +40 +20 +D0 +30 +50 +78 +10 +10 +00 +00 +ENDCHAR +STARTCHAR questiondown +ENCODING 191 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +20 +20 +40 +88 +70 +00 +00 +ENDCHAR +STARTCHAR Agrave +ENCODING 192 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +20 +00 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR Aacute +ENCODING 193 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR Acircumflex +ENCODING 194 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +00 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR Atilde +ENCODING 195 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR Adieresis +ENCODING 196 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR Aring +ENCODING 197 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +20 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR AE +ENCODING 198 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +A0 +A0 +F0 +A0 +A0 +B8 +00 +00 +ENDCHAR +STARTCHAR Ccedilla +ENCODING 199 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +80 +80 +80 +88 +70 +10 +60 +ENDCHAR +STARTCHAR Egrave +ENCODING 200 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +20 +00 +F8 +80 +80 +F0 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR Eacute +ENCODING 201 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +F8 +80 +80 +F0 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR Ecircumflex +ENCODING 202 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +00 +F8 +80 +80 +F0 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR Edieresis +ENCODING 203 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +F8 +80 +80 +F0 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR Igrave +ENCODING 204 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +20 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR Iacute +ENCODING 205 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR Icircumflex +ENCODING 206 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR Idieresis +ENCODING 207 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR Eth +ENCODING 208 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +48 +48 +E8 +48 +48 +70 +00 +00 +ENDCHAR +STARTCHAR Ntilde +ENCODING 209 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +88 +88 +C8 +A8 +98 +88 +88 +00 +00 +ENDCHAR +STARTCHAR Ograve +ENCODING 210 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +20 +00 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR Oacute +ENCODING 211 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR Ocircumflex +ENCODING 212 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +00 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR Otilde +ENCODING 213 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR Odieresis +ENCODING 214 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR multiply +ENCODING 215 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +88 +50 +20 +50 +88 +00 +00 +00 +ENDCHAR +STARTCHAR Oslash +ENCODING 216 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +70 +98 +A8 +A8 +A8 +C8 +70 +80 +00 +ENDCHAR +STARTCHAR Ugrave +ENCODING 217 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +20 +00 +88 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR Uacute +ENCODING 218 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +88 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR Ucircumflex +ENCODING 219 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +00 +88 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR Udieresis +ENCODING 220 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +88 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR Yacute +ENCODING 221 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +88 +88 +50 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR Thorn +ENCODING 222 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +70 +48 +48 +48 +70 +40 +00 +00 +ENDCHAR +STARTCHAR germandbls +ENCODING 223 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +90 +A0 +90 +88 +B0 +00 +00 +ENDCHAR +STARTCHAR agrave +ENCODING 224 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +20 +00 +70 +08 +78 +88 +78 +00 +00 +ENDCHAR +STARTCHAR aacute +ENCODING 225 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +70 +08 +78 +88 +78 +00 +00 +ENDCHAR +STARTCHAR acircumflex +ENCODING 226 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +00 +70 +08 +78 +88 +78 +00 +00 +ENDCHAR +STARTCHAR atilde +ENCODING 227 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +68 +B0 +00 +70 +08 +78 +88 +78 +00 +00 +ENDCHAR +STARTCHAR adieresis +ENCODING 228 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +00 +70 +08 +78 +88 +78 +00 +00 +ENDCHAR +STARTCHAR aring +ENCODING 229 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +20 +70 +08 +78 +88 +78 +00 +00 +ENDCHAR +STARTCHAR ae +ENCODING 230 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +28 +70 +A0 +78 +00 +00 +ENDCHAR +STARTCHAR ccedilla +ENCODING 231 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +80 +88 +70 +10 +60 +ENDCHAR +STARTCHAR egrave +ENCODING 232 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +20 +00 +70 +88 +F0 +80 +70 +00 +00 +ENDCHAR +STARTCHAR eacute +ENCODING 233 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +70 +88 +F0 +80 +70 +00 +00 +ENDCHAR +STARTCHAR ecircumflex +ENCODING 234 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +00 +70 +88 +F0 +80 +70 +00 +00 +ENDCHAR +STARTCHAR edieresis +ENCODING 235 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +00 +70 +88 +F0 +80 +70 +00 +00 +ENDCHAR +STARTCHAR igrave +ENCODING 236 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +20 +00 +60 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR iacute +ENCODING 237 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +60 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR icircumflex +ENCODING 238 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +00 +60 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR idieresis +ENCODING 239 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +00 +60 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR eth +ENCODING 240 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +20 +50 +08 +78 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR ntilde +ENCODING 241 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +68 +B0 +00 +B0 +C8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR ograve +ENCODING 242 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +20 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR oacute +ENCODING 243 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR ocircumflex +ENCODING 244 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR otilde +ENCODING 245 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +68 +B0 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR odieresis +ENCODING 246 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR divide +ENCODING 247 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +00 +F8 +00 +20 +00 +00 +00 +ENDCHAR +STARTCHAR oslash +ENCODING 248 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +98 +A8 +C8 +F0 +00 +00 +ENDCHAR +STARTCHAR ugrave +ENCODING 249 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +20 +00 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uacute +ENCODING 250 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR ucircumflex +ENCODING 251 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +00 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR udieresis +ENCODING 252 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +00 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR yacute +ENCODING 253 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +88 +88 +88 +50 +20 +40 +80 +ENDCHAR +STARTCHAR thorn +ENCODING 254 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +F0 +88 +88 +88 +F0 +80 +80 +ENDCHAR +STARTCHAR ydieresis +ENCODING 255 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +00 +88 +88 +88 +50 +20 +40 +80 +ENDCHAR +STARTCHAR Amacron +ENCODING 256 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +00 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR amacron +ENCODING 257 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +00 +70 +08 +78 +88 +78 +00 +00 +ENDCHAR +STARTCHAR Abreve +ENCODING 258 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +88 +70 +00 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR abreve +ENCODING 259 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +70 +00 +70 +08 +78 +88 +78 +00 +00 +ENDCHAR +STARTCHAR Aogonek +ENCODING 260 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +F8 +88 +88 +88 +10 +08 +ENDCHAR +STARTCHAR aogonek +ENCODING 261 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +08 +78 +88 +78 +20 +30 +ENDCHAR +STARTCHAR Cacute +ENCODING 262 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +70 +88 +80 +80 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR cacute +ENCODING 263 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +70 +88 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR Ccircumflex +ENCODING 264 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +00 +70 +88 +80 +80 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR ccircumflex +ENCODING 265 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +00 +70 +88 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR Cdotaccent +ENCODING 266 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +00 +70 +88 +80 +80 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR cdotaccent +ENCODING 267 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +70 +88 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR Ccaron +ENCODING 268 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +20 +00 +70 +88 +80 +80 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR ccaron +ENCODING 269 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +20 +00 +70 +88 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR Dcaron +ENCODING 270 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +20 +00 +F0 +48 +48 +48 +48 +48 +F0 +00 +00 +ENDCHAR +STARTCHAR dcaron +ENCODING 271 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +14 +08 +00 +08 +08 +78 +88 +88 +88 +78 +00 +00 +ENDCHAR +STARTCHAR Dcroat +ENCODING 272 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +48 +48 +E8 +48 +48 +F0 +00 +00 +ENDCHAR +STARTCHAR dcroat +ENCODING 273 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +1C +08 +78 +88 +88 +88 +78 +00 +00 +ENDCHAR +STARTCHAR Emacron +ENCODING 274 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +00 +F8 +80 +80 +F0 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR emacron +ENCODING 275 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +00 +70 +88 +F0 +80 +70 +00 +00 +ENDCHAR +STARTCHAR Ebreve +ENCODING 276 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +88 +70 +00 +F8 +80 +80 +F0 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR ebreve +ENCODING 277 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +70 +00 +70 +88 +F0 +80 +70 +00 +00 +ENDCHAR +STARTCHAR Edotaccent +ENCODING 278 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +00 +F8 +80 +80 +F0 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR edotaccent +ENCODING 279 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +70 +88 +F0 +80 +70 +00 +00 +ENDCHAR +STARTCHAR Eogonek +ENCODING 280 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +80 +80 +F0 +80 +80 +F8 +20 +30 +ENDCHAR +STARTCHAR eogonek +ENCODING 281 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +F0 +80 +70 +20 +30 +ENDCHAR +STARTCHAR Ecaron +ENCODING 282 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +20 +00 +F8 +80 +80 +F0 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR ecaron +ENCODING 283 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +20 +00 +70 +88 +F0 +80 +70 +00 +00 +ENDCHAR +STARTCHAR Gcircumflex +ENCODING 284 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +00 +70 +88 +80 +80 +98 +88 +70 +00 +00 +ENDCHAR +STARTCHAR gcircumflex +ENCODING 285 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +00 +70 +88 +88 +88 +78 +08 +70 +ENDCHAR +STARTCHAR Gbreve +ENCODING 286 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +88 +70 +00 +70 +88 +80 +80 +98 +88 +70 +00 +00 +ENDCHAR +STARTCHAR gbreve +ENCODING 287 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +70 +00 +70 +88 +88 +88 +78 +08 +70 +ENDCHAR +STARTCHAR Gdotaccent +ENCODING 288 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +00 +70 +88 +80 +80 +98 +88 +70 +00 +00 +ENDCHAR +STARTCHAR gdotaccent +ENCODING 289 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +70 +88 +88 +88 +78 +08 +70 +ENDCHAR +STARTCHAR Gcommaaccent +ENCODING 290 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +80 +80 +98 +88 +70 +10 +60 +ENDCHAR +STARTCHAR gcommaaccent +ENCODING 291 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +40 +60 +00 +70 +88 +88 +88 +78 +08 +70 +ENDCHAR +STARTCHAR Hcircumflex +ENCODING 292 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +00 +88 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR hcircumflex +ENCODING 293 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +00 +80 +80 +F0 +88 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR Hbar +ENCODING 294 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +48 +FC +48 +78 +48 +48 +48 +00 +00 +ENDCHAR +STARTCHAR hbar +ENCODING 295 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +F0 +40 +70 +48 +48 +48 +00 +00 +ENDCHAR +STARTCHAR Itilde +ENCODING 296 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +28 +50 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR itilde +ENCODING 297 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +A0 +00 +60 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR Imacron +ENCODING 298 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR imacron +ENCODING 299 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +00 +60 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR Ibreve +ENCODING 300 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +88 +70 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR ibreve +ENCODING 301 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +70 +00 +60 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR Iogonek +ENCODING 302 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +20 +20 +20 +20 +20 +70 +20 +30 +ENDCHAR +STARTCHAR iogonek +ENCODING 303 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +60 +20 +20 +20 +70 +20 +30 +ENDCHAR +STARTCHAR Idotaccent +ENCODING 304 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR dotlessi +ENCODING 305 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +60 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR IJ +ENCODING 306 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +98 +88 +88 +88 +88 +A8 +90 +00 +00 +ENDCHAR +STARTCHAR ij +ENCODING 307 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +00 +98 +88 +88 +88 +88 +88 +30 +ENDCHAR +STARTCHAR Jcircumflex +ENCODING 308 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +28 +00 +38 +10 +10 +10 +10 +90 +60 +00 +00 +ENDCHAR +STARTCHAR jcircumflex +ENCODING 309 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +28 +00 +30 +10 +10 +10 +10 +90 +60 +ENDCHAR +STARTCHAR Kcommaaccent +ENCODING 310 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +90 +A0 +C0 +A0 +90 +88 +10 +60 +ENDCHAR +STARTCHAR kcommaaccent +ENCODING 311 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +88 +90 +E0 +90 +88 +10 +60 +ENDCHAR +STARTCHAR kgreenlandic +ENCODING 312 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +48 +50 +60 +50 +48 +00 +00 +ENDCHAR +STARTCHAR Lacute +ENCODING 313 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +80 +80 +80 +80 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR lacute +ENCODING 314 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +60 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR Lcommaaccent +ENCODING 315 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +80 +80 +80 +80 +F8 +10 +60 +ENDCHAR +STARTCHAR lcommaaccent +ENCODING 316 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +60 +20 +20 +20 +20 +20 +70 +10 +60 +ENDCHAR +STARTCHAR Lcaron +ENCODING 317 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +20 +00 +80 +80 +80 +80 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR lcaron +ENCODING 318 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +20 +00 +60 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR Ldot +ENCODING 319 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +80 +90 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR ldot +ENCODING 320 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +60 +20 +20 +28 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR Lslash +ENCODING 321 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +40 +60 +C0 +40 +40 +78 +00 +00 +ENDCHAR +STARTCHAR lslash +ENCODING 322 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +60 +20 +30 +60 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR Nacute +ENCODING 323 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +88 +88 +C8 +A8 +98 +88 +88 +00 +00 +ENDCHAR +STARTCHAR nacute +ENCODING 324 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +B0 +C8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR Ncommaaccent +ENCODING 325 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +C8 +A8 +98 +88 +88 +20 +40 +ENDCHAR +STARTCHAR ncommaaccent +ENCODING 326 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +B0 +C8 +88 +88 +88 +20 +40 +ENDCHAR +STARTCHAR Ncaron +ENCODING 327 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +20 +00 +88 +88 +C8 +A8 +98 +88 +88 +00 +00 +ENDCHAR +STARTCHAR ncaron +ENCODING 328 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +20 +00 +B0 +C8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR napostrophe +ENCODING 329 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +C0 +40 +80 +50 +68 +48 +48 +48 +00 +00 +ENDCHAR +STARTCHAR Eng +ENCODING 330 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +C8 +A8 +98 +88 +88 +08 +30 +ENDCHAR +STARTCHAR eng +ENCODING 331 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +B0 +C8 +88 +88 +88 +08 +30 +ENDCHAR +STARTCHAR Omacron +ENCODING 332 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +00 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR omacron +ENCODING 333 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR Obreve +ENCODING 334 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +88 +70 +00 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR obreve +ENCODING 335 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +70 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR Ohungarumlaut +ENCODING 336 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +48 +90 +00 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR ohungarumlaut +ENCODING 337 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +48 +90 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR OE +ENCODING 338 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +A0 +A0 +B0 +A0 +A0 +78 +00 +00 +ENDCHAR +STARTCHAR oe +ENCODING 339 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +A8 +B0 +A0 +78 +00 +00 +ENDCHAR +STARTCHAR Racute +ENCODING 340 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +F0 +88 +88 +F0 +A0 +90 +88 +00 +00 +ENDCHAR +STARTCHAR racute +ENCODING 341 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +B0 +C8 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR Rcommaaccent +ENCODING 342 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +88 +88 +F0 +A0 +90 +88 +20 +40 +ENDCHAR +STARTCHAR rcommaaccent +ENCODING 343 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +B0 +C8 +80 +80 +80 +20 +40 +ENDCHAR +STARTCHAR Rcaron +ENCODING 344 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +20 +00 +F0 +88 +88 +F0 +A0 +90 +88 +00 +00 +ENDCHAR +STARTCHAR rcaron +ENCODING 345 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +20 +00 +B0 +C8 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR Sacute +ENCODING 346 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +70 +88 +80 +70 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR sacute +ENCODING 347 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +78 +80 +70 +08 +F0 +00 +00 +ENDCHAR +STARTCHAR Scircumflex +ENCODING 348 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +00 +70 +88 +80 +70 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR scircumflex +ENCODING 349 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +00 +78 +80 +70 +08 +F0 +00 +00 +ENDCHAR +STARTCHAR Scedilla +ENCODING 350 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +80 +70 +08 +88 +70 +10 +60 +ENDCHAR +STARTCHAR scedilla +ENCODING 351 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +80 +70 +08 +F0 +10 +60 +ENDCHAR +STARTCHAR Scaron +ENCODING 352 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +20 +00 +70 +88 +80 +70 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR scaron +ENCODING 353 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +20 +00 +78 +80 +70 +08 +F0 +00 +00 +ENDCHAR +STARTCHAR Tcommaaccent +ENCODING 354 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +20 +20 +20 +20 +20 +20 +10 +60 +ENDCHAR +STARTCHAR tcommaaccent +ENCODING 355 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +F8 +20 +20 +20 +18 +08 +30 +ENDCHAR +STARTCHAR Tcaron +ENCODING 356 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +20 +00 +F8 +20 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR tcaron +ENCODING 357 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +20 +00 +20 +20 +F8 +20 +20 +20 +18 +00 +00 +ENDCHAR +STARTCHAR Tbar +ENCODING 358 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +20 +F8 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR tbar +ENCODING 359 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +F8 +20 +F8 +20 +20 +18 +00 +00 +ENDCHAR +STARTCHAR Utilde +ENCODING 360 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +88 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR utilde +ENCODING 361 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +68 +B0 +00 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR Umacron +ENCODING 362 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +00 +88 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR umacron +ENCODING 363 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +00 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR Ubreve +ENCODING 364 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +88 +70 +00 +88 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR ubreve +ENCODING 365 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +70 +00 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR Uring +ENCODING 366 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +20 +88 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uring +ENCODING 367 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +20 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR Uhungarumlaut +ENCODING 368 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +48 +90 +00 +88 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uhungarumlaut +ENCODING 369 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +48 +90 +00 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR Uogonek +ENCODING 370 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +88 +88 +88 +88 +70 +20 +30 +ENDCHAR +STARTCHAR uogonek +ENCODING 371 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +88 +88 +70 +20 +30 +ENDCHAR +STARTCHAR Wcircumflex +ENCODING 372 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +00 +88 +88 +88 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR wcircumflex +ENCODING 373 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +00 +88 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR Ycircumflex +ENCODING 374 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +00 +88 +88 +50 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR ycircumflex +ENCODING 375 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +00 +88 +88 +88 +50 +20 +40 +80 +ENDCHAR +STARTCHAR Ydieresis +ENCODING 376 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +88 +88 +50 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR Zacute +ENCODING 377 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +F8 +08 +10 +20 +40 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR zacute +ENCODING 378 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +F8 +10 +20 +40 +F8 +00 +00 +ENDCHAR +STARTCHAR Zdotaccent +ENCODING 379 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +00 +F8 +08 +10 +20 +40 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR zdotaccent +ENCODING 380 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +F8 +10 +20 +40 +F8 +00 +00 +ENDCHAR +STARTCHAR Zcaron +ENCODING 381 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +20 +00 +F8 +08 +10 +20 +40 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR zcaron +ENCODING 382 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +20 +00 +F8 +10 +20 +40 +F8 +00 +00 +ENDCHAR +STARTCHAR longs +ENCODING 383 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +40 +40 +C0 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni0180 +ENCODING 384 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +F0 +40 +70 +48 +48 +70 +00 +00 +ENDCHAR +STARTCHAR uni0181 +ENCODING 385 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +A8 +28 +30 +28 +28 +30 +00 +00 +ENDCHAR +STARTCHAR uni0182 +ENCODING 386 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +40 +40 +70 +48 +48 +F0 +00 +00 +ENDCHAR +STARTCHAR uni0183 +ENCODING 387 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +80 +F0 +88 +88 +88 +F0 +00 +00 +ENDCHAR +STARTCHAR uni0184 +ENCODING 388 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +C0 +C0 +70 +48 +48 +70 +00 +00 +ENDCHAR +STARTCHAR uni0185 +ENCODING 389 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +C0 +70 +48 +48 +48 +70 +00 +00 +ENDCHAR +STARTCHAR uni0186 +ENCODING 390 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +08 +08 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0187 +ENCODING 391 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +0C +70 +88 +80 +80 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0188 +ENCODING 392 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +18 +60 +90 +80 +90 +60 +00 +00 +ENDCHAR +STARTCHAR uni0189 +ENCODING 393 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +48 +48 +E8 +48 +48 +F0 +00 +00 +ENDCHAR +STARTCHAR uni018A +ENCODING 394 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +A8 +28 +28 +28 +28 +30 +00 +00 +ENDCHAR +STARTCHAR uni018B +ENCODING 395 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +08 +08 +78 +88 +88 +78 +00 +00 +ENDCHAR +STARTCHAR uni018C +ENCODING 396 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +08 +78 +88 +88 +88 +78 +00 +00 +ENDCHAR +STARTCHAR uni018D +ENCODING 397 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +88 +70 +08 +88 +70 +ENDCHAR +STARTCHAR uni018E +ENCODING 398 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +08 +08 +78 +08 +08 +F8 +00 +00 +ENDCHAR +STARTCHAR uni018F +ENCODING 399 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +08 +F8 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0190 +ENCODING 400 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +80 +70 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0191 +ENCODING 401 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +40 +40 +70 +40 +40 +40 +80 +00 +ENDCHAR +STARTCHAR florin +ENCODING 402 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +28 +20 +70 +20 +20 +A0 +40 +00 +ENDCHAR +STARTCHAR uni0193 +ENCODING 403 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +0C +70 +88 +80 +80 +98 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0194 +ENCODING 404 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +50 +50 +20 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni0195 +ENCODING 405 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +C8 +A8 +A8 +A8 +90 +00 +00 +ENDCHAR +STARTCHAR uni0196 +ENCODING 406 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +60 +20 +20 +20 +20 +20 +10 +00 +00 +ENDCHAR +STARTCHAR uni0197 +ENCODING 407 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +20 +20 +70 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni0198 +ENCODING 408 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +98 +A0 +C0 +C0 +A0 +90 +88 +00 +00 +ENDCHAR +STARTCHAR uni0199 +ENCODING 409 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +A0 +80 +88 +90 +E0 +90 +88 +00 +00 +ENDCHAR +STARTCHAR uni019A +ENCODING 410 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +60 +20 +20 +70 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni019B +ENCODING 411 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +20 +60 +20 +50 +50 +50 +00 +00 +ENDCHAR +STARTCHAR uni019C +ENCODING 412 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +A8 +A8 +A8 +A8 +A8 +58 +00 +00 +ENDCHAR +STARTCHAR uni019D +ENCODING 413 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +48 +48 +48 +68 +58 +48 +48 +80 +00 +ENDCHAR +STARTCHAR uni019E +ENCODING 414 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +B0 +C8 +88 +88 +88 +08 +08 +ENDCHAR +STARTCHAR uni019F +ENCODING 415 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +F8 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR Ohorn +ENCODING 416 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +68 +90 +90 +90 +90 +90 +60 +00 +00 +ENDCHAR +STARTCHAR ohorn +ENCODING 417 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +08 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni01A2 +ENCODING 418 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +B0 +A8 +A8 +A8 +A8 +48 +00 +00 +ENDCHAR +STARTCHAR uni01A3 +ENCODING 419 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +50 +A8 +A8 +A8 +48 +00 +00 +ENDCHAR +STARTCHAR uni01A4 +ENCODING 420 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +48 +48 +70 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni01A5 +ENCODING 421 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +80 +F0 +88 +88 +88 +F0 +80 +80 +ENDCHAR +STARTCHAR uni01A6 +ENCODING 422 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +F0 +88 +88 +F0 +A0 +90 +08 +00 +ENDCHAR +STARTCHAR uni01A7 +ENCODING 423 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +08 +70 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni01A8 +ENCODING 424 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F0 +08 +70 +80 +78 +00 +00 +ENDCHAR +STARTCHAR uni01A9 +ENCODING 425 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +40 +20 +10 +20 +40 +F8 +00 +00 +ENDCHAR +STARTCHAR uni01AA +ENCODING 426 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +A0 +70 +20 +20 +20 +28 +10 +00 +ENDCHAR +STARTCHAR uni01AB +ENCODING 427 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +F8 +20 +20 +20 +18 +08 +30 +ENDCHAR +STARTCHAR uni01AC +ENCODING 428 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +A0 +A0 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni01AD +ENCODING 429 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +18 +20 +20 +F8 +20 +20 +20 +18 +00 +00 +ENDCHAR +STARTCHAR uni01AE +ENCODING 430 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +20 +20 +20 +20 +20 +20 +18 +00 +ENDCHAR +STARTCHAR Uhorn +ENCODING 431 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +98 +90 +90 +90 +90 +90 +60 +00 +00 +ENDCHAR +STARTCHAR uhorn +ENCODING 432 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +08 +98 +90 +90 +B0 +50 +00 +00 +ENDCHAR +STARTCHAR uni01B1 +ENCODING 433 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni01B2 +ENCODING 434 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +90 +90 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni01B3 +ENCODING 435 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +48 +50 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni01B4 +ENCODING 436 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +A8 +A0 +A0 +A0 +60 +40 +80 +ENDCHAR +STARTCHAR uni01B5 +ENCODING 437 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +08 +10 +F8 +40 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR uni01B6 +ENCODING 438 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +10 +F8 +40 +F8 +00 +00 +ENDCHAR +STARTCHAR uni01B7 +ENCODING 439 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +10 +20 +70 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni01B8 +ENCODING 440 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +40 +20 +70 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni01B9 +ENCODING 441 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +40 +20 +70 +80 +88 +70 +ENDCHAR +STARTCHAR uni01BA +ENCODING 442 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +10 +30 +08 +70 +88 +70 +ENDCHAR +STARTCHAR uni01BB +ENCODING 443 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +10 +78 +20 +40 +F8 +00 +00 +ENDCHAR +STARTCHAR uni01BC +ENCODING 444 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +88 +E0 +10 +08 +08 +F0 +00 +00 +ENDCHAR +STARTCHAR uni01BD +ENCODING 445 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +40 +70 +08 +70 +00 +00 +ENDCHAR +STARTCHAR uni01BE +ENCODING 446 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +70 +20 +30 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni01BF +ENCODING 447 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +B0 +C8 +90 +A0 +C0 +80 +80 +ENDCHAR +STARTCHAR uni01C0 +ENCODING 448 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni01C1 +ENCODING 449 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +50 +50 +50 +50 +50 +50 +00 +00 +ENDCHAR +STARTCHAR uni01C2 +ENCODING 450 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +70 +20 +70 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni01C3 +ENCODING 451 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +70 +70 +20 +20 +00 +20 +00 +00 +ENDCHAR +STARTCHAR uni01C4 +ENCODING 452 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +28 +10 +00 +D8 +A8 +A8 +B0 +B0 +B0 +D8 +00 +00 +ENDCHAR +STARTCHAR uni01C5 +ENCODING 453 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +28 +10 +C0 +A0 +B8 +A8 +B0 +B0 +D8 +00 +00 +ENDCHAR +STARTCHAR uni01C6 +ENCODING 454 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +28 +10 +00 +20 +20 +78 +A8 +B0 +B0 +78 +00 +00 +ENDCHAR +STARTCHAR uni01C7 +ENCODING 455 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +88 +88 +88 +A8 +D0 +00 +00 +ENDCHAR +STARTCHAR uni01C8 +ENCODING 456 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +80 +98 +88 +88 +88 +E8 +08 +30 +ENDCHAR +STARTCHAR uni01C9 +ENCODING 457 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +C8 +40 +58 +48 +48 +48 +E8 +08 +30 +ENDCHAR +STARTCHAR uni01CA +ENCODING 458 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +C8 +A8 +A8 +A8 +A8 +A8 +B0 +00 +00 +ENDCHAR +STARTCHAR uni01CB +ENCODING 459 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +C8 +A0 +B8 +A8 +A8 +A8 +A8 +08 +30 +ENDCHAR +STARTCHAR uni01CC +ENCODING 460 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +00 +D8 +A8 +A8 +A8 +A8 +08 +30 +ENDCHAR +STARTCHAR uni01CD +ENCODING 461 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +20 +00 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni01CE +ENCODING 462 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +20 +00 +70 +08 +78 +88 +78 +00 +00 +ENDCHAR +STARTCHAR uni01CF +ENCODING 463 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +20 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni01D0 +ENCODING 464 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +20 +00 +60 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni01D1 +ENCODING 465 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +20 +00 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni01D2 +ENCODING 466 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +20 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni01D3 +ENCODING 467 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +20 +00 +88 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni01D4 +ENCODING 468 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +20 +00 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni01D5 +ENCODING 469 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +00 +50 +00 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni01D6 +ENCODING 470 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +00 +50 +00 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni01D7 +ENCODING 471 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +50 +00 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni01D8 +ENCODING 472 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +50 +00 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni01D9 +ENCODING 473 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +20 +50 +00 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni01DA +ENCODING 474 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +20 +00 +50 +00 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni01DB +ENCODING 475 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +20 +50 +00 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni01DC +ENCODING 476 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +20 +00 +50 +00 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni01DD +ENCODING 477 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +08 +78 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni01DE +ENCODING 478 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +00 +50 +00 +70 +88 +88 +F8 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni01DF +ENCODING 479 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +00 +50 +00 +70 +08 +78 +88 +78 +00 +00 +ENDCHAR +STARTCHAR uni01E0 +ENCODING 480 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +00 +20 +00 +70 +88 +88 +F8 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni01E1 +ENCODING 481 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +00 +20 +00 +70 +08 +78 +88 +78 +00 +00 +ENDCHAR +STARTCHAR uni01E2 +ENCODING 482 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +00 +78 +A0 +A0 +F0 +A0 +A0 +B8 +00 +00 +ENDCHAR +STARTCHAR uni01E3 +ENCODING 483 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +00 +70 +28 +70 +A0 +78 +00 +00 +ENDCHAR +STARTCHAR uni01E4 +ENCODING 484 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +80 +98 +98 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni01E5 +ENCODING 485 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +88 +88 +78 +F8 +70 +ENDCHAR +STARTCHAR Gcaron +ENCODING 486 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +20 +00 +70 +88 +80 +80 +98 +88 +70 +00 +00 +ENDCHAR +STARTCHAR gcaron +ENCODING 487 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +20 +00 +70 +88 +88 +88 +78 +08 +70 +ENDCHAR +STARTCHAR uni01E8 +ENCODING 488 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +20 +00 +88 +90 +A0 +C0 +A0 +90 +88 +00 +00 +ENDCHAR +STARTCHAR uni01E9 +ENCODING 489 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +20 +80 +80 +88 +90 +E0 +90 +88 +00 +00 +ENDCHAR +STARTCHAR uni01EA +ENCODING 490 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +88 +88 +88 +70 +40 +30 +ENDCHAR +STARTCHAR uni01EB +ENCODING 491 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +88 +88 +70 +40 +30 +ENDCHAR +STARTCHAR uni01EC +ENCODING 492 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +00 +70 +88 +88 +88 +88 +88 +70 +40 +30 +ENDCHAR +STARTCHAR uni01ED +ENCODING 493 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +00 +70 +88 +88 +88 +70 +40 +30 +ENDCHAR +STARTCHAR uni01EE +ENCODING 494 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +20 +00 +F8 +10 +20 +70 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni01EF +ENCODING 495 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +20 +00 +F8 +10 +20 +70 +08 +88 +70 +ENDCHAR +STARTCHAR uni01F0 +ENCODING 496 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +28 +10 +00 +30 +10 +10 +10 +10 +90 +60 +ENDCHAR +STARTCHAR uni01F1 +ENCODING 497 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +D8 +A8 +A8 +B0 +B0 +B0 +D8 +00 +00 +ENDCHAR +STARTCHAR uni01F2 +ENCODING 498 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +C0 +A0 +B8 +A8 +B0 +B0 +D8 +00 +00 +ENDCHAR +STARTCHAR uni01F3 +ENCODING 499 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +78 +A8 +B0 +B0 +78 +00 +00 +ENDCHAR +STARTCHAR uni01F4 +ENCODING 500 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +70 +88 +80 +80 +98 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni01F5 +ENCODING 501 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +70 +88 +88 +88 +78 +08 +70 +ENDCHAR +STARTCHAR uni01F6 +ENCODING 502 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A0 +A0 +E8 +A8 +A8 +A8 +90 +00 +00 +ENDCHAR +STARTCHAR uni01F7 +ENCODING 503 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +B0 +C8 +88 +90 +A0 +C0 +80 +00 +00 +ENDCHAR +STARTCHAR uni01F8 +ENCODING 504 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +20 +00 +88 +88 +C8 +A8 +98 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni01F9 +ENCODING 505 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +20 +00 +B0 +C8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR Aringacute +ENCODING 506 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +20 +50 +20 +70 +88 +F8 +88 +88 +00 +00 +ENDCHAR +STARTCHAR aringacute +ENCODING 507 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +20 +50 +20 +70 +08 +78 +88 +78 +00 +00 +ENDCHAR +STARTCHAR AEacute +ENCODING 508 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +78 +A0 +A0 +F0 +A0 +A0 +B8 +00 +00 +ENDCHAR +STARTCHAR aeacute +ENCODING 509 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +70 +28 +70 +A0 +78 +00 +00 +ENDCHAR +STARTCHAR Oslashacute +ENCODING 510 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +08 +70 +98 +A8 +A8 +A8 +C8 +70 +80 +00 +ENDCHAR +STARTCHAR oslashacute +ENCODING 511 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +78 +98 +A8 +C8 +F0 +00 +00 +ENDCHAR +STARTCHAR uni0200 +ENCODING 512 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +90 +48 +00 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni0201 +ENCODING 513 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +90 +48 +00 +70 +08 +78 +88 +78 +00 +00 +ENDCHAR +STARTCHAR uni0202 +ENCODING 514 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +88 +00 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni0203 +ENCODING 515 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +00 +70 +08 +78 +88 +78 +00 +00 +ENDCHAR +STARTCHAR uni0204 +ENCODING 516 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +90 +48 +00 +F8 +80 +80 +F0 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR uni0205 +ENCODING 517 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +90 +48 +00 +70 +88 +F0 +80 +70 +00 +00 +ENDCHAR +STARTCHAR uni0206 +ENCODING 518 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +90 +48 +00 +F8 +80 +80 +F0 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR uni0207 +ENCODING 519 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +00 +70 +88 +F0 +80 +70 +00 +00 +ENDCHAR +STARTCHAR uni0208 +ENCODING 520 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +90 +48 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni0209 +ENCODING 521 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +90 +48 +00 +60 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni020A +ENCODING 522 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +88 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni020B +ENCODING 523 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +00 +60 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni020C +ENCODING 524 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +90 +48 +00 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni020D +ENCODING 525 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +90 +48 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni020E +ENCODING 526 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +88 +00 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni020F +ENCODING 527 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0210 +ENCODING 528 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +90 +48 +00 +F0 +88 +88 +F0 +A0 +90 +88 +00 +00 +ENDCHAR +STARTCHAR uni0211 +ENCODING 529 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +90 +48 +00 +B0 +C8 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni0212 +ENCODING 530 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +88 +00 +F0 +88 +88 +F0 +A0 +90 +88 +00 +00 +ENDCHAR +STARTCHAR uni0213 +ENCODING 531 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +00 +B0 +C8 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni0214 +ENCODING 532 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +90 +48 +00 +88 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0215 +ENCODING 533 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +90 +48 +00 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0216 +ENCODING 534 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +88 +00 +88 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0217 +ENCODING 535 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +00 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR Scommaaccent +ENCODING 536 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +80 +70 +08 +88 +70 +10 +20 +ENDCHAR +STARTCHAR scommaaccent +ENCODING 537 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +80 +70 +08 +F0 +10 +20 +ENDCHAR +STARTCHAR Tcommaaccent +ENCODING 538 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +20 +20 +20 +20 +20 +20 +10 +20 +ENDCHAR +STARTCHAR tcommaaccent +ENCODING 539 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +F8 +20 +20 +20 +18 +10 +20 +ENDCHAR +STARTCHAR uni021C +ENCODING 540 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +10 +28 +08 +08 +F0 +00 +00 +ENDCHAR +STARTCHAR uni021D +ENCODING 541 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +10 +28 +08 +08 +F0 +ENDCHAR +STARTCHAR uni021E +ENCODING 542 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +20 +00 +88 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni021F +ENCODING 543 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +20 +80 +80 +F0 +88 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni0220 +ENCODING 544 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +B0 +C8 +88 +88 +88 +88 +88 +08 +00 +ENDCHAR +STARTCHAR uni0221 +ENCODING 545 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +10 +70 +90 +98 +94 +78 +20 +00 +ENDCHAR +STARTCHAR uni0222 +ENCODING 546 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +88 +88 +70 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0223 +ENCODING 547 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +50 +88 +70 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0224 +ENCODING 548 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +08 +10 +20 +40 +80 +F8 +08 +30 +ENDCHAR +STARTCHAR uni0225 +ENCODING 549 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +10 +20 +40 +F8 +08 +30 +ENDCHAR +STARTCHAR uni0226 +ENCODING 550 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +00 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni0227 +ENCODING 551 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +70 +08 +78 +88 +78 +00 +00 +ENDCHAR +STARTCHAR uni0228 +ENCODING 552 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +80 +80 +F0 +80 +80 +F8 +08 +30 +ENDCHAR +STARTCHAR uni0229 +ENCODING 553 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +F0 +80 +70 +08 +30 +ENDCHAR +STARTCHAR uni022A +ENCODING 554 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +00 +50 +00 +70 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni022B +ENCODING 555 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +00 +50 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni022C +ENCODING 556 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +68 +B0 +00 +70 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni022D +ENCODING 557 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +00 +68 +B0 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni022E +ENCODING 558 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +00 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni022F +ENCODING 559 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0230 +ENCODING 560 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +00 +20 +00 +70 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0231 +ENCODING 561 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +00 +20 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0232 +ENCODING 562 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +00 +88 +88 +50 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni0233 +ENCODING 563 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +00 +88 +88 +88 +50 +20 +40 +80 +ENDCHAR +STARTCHAR uni0234 +ENCODING 564 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +20 +20 +30 +28 +30 +40 +00 +ENDCHAR +STARTCHAR uni0235 +ENCODING 565 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +E0 +90 +98 +94 +98 +20 +00 +ENDCHAR +STARTCHAR uni0236 +ENCODING 566 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +78 +20 +30 +28 +50 +00 +00 +ENDCHAR +STARTCHAR uni0237 +ENCODING 567 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +10 +10 +10 +10 +10 +10 +90 +60 +ENDCHAR +STARTCHAR uni0238 +ENCODING 568 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +20 +70 +A8 +A8 +70 +00 +00 +ENDCHAR +STARTCHAR uni0239 +ENCODING 569 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +A8 +A8 +70 +20 +20 +20 +ENDCHAR +STARTCHAR uni023A +ENCODING 570 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +74 +88 +98 +F8 +A8 +C8 +88 +00 +00 +ENDCHAR +STARTCHAR uni023B +ENCODING 571 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +3C +48 +90 +90 +A0 +40 +B8 +00 +00 +ENDCHAR +STARTCHAR uni023C +ENCODING 572 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +98 +A0 +C8 +F0 +00 +00 +ENDCHAR +STARTCHAR uni023D +ENCODING 573 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +40 +40 +E0 +40 +40 +78 +00 +00 +ENDCHAR +STARTCHAR uni023E +ENCODING 574 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +FC +28 +30 +20 +20 +60 +A0 +00 +00 +ENDCHAR +STARTCHAR uni023F +ENCODING 575 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +80 +70 +08 +F0 +20 +10 +ENDCHAR +STARTCHAR uni0240 +ENCODING 576 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +10 +20 +40 +80 +40 +38 +ENDCHAR +STARTCHAR uni0241 +ENCODING 577 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +08 +30 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni0242 +ENCODING 578 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +08 +08 +30 +20 +00 +00 +ENDCHAR +STARTCHAR uni0243 +ENCODING 579 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +48 +70 +48 +E8 +48 +70 +00 +00 +ENDCHAR +STARTCHAR uni0244 +ENCODING 580 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +48 +48 +48 +FC +48 +48 +30 +00 +00 +ENDCHAR +STARTCHAR uni0245 +ENCODING 581 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +50 +50 +50 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni0246 +ENCODING 582 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +FC +88 +90 +F0 +A0 +C0 +F8 +00 +00 +ENDCHAR +STARTCHAR uni0247 +ENCODING 583 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +70 +A8 +F0 +C0 +F0 +00 +00 +ENDCHAR +STARTCHAR uni0248 +ENCODING 584 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +10 +10 +10 +10 +38 +10 +90 +60 +ENDCHAR +STARTCHAR uni0249 +ENCODING 585 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +00 +10 +10 +10 +38 +10 +90 +60 +ENDCHAR +STARTCHAR uni024A +ENCODING 586 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +68 +98 +88 +88 +98 +68 +08 +08 +04 +ENDCHAR +STARTCHAR uni024B +ENCODING 587 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +68 +98 +88 +98 +68 +08 +04 +ENDCHAR +STARTCHAR uni024C +ENCODING 588 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +48 +48 +F0 +48 +48 +48 +00 +00 +ENDCHAR +STARTCHAR uni024D +ENCODING 589 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +50 +60 +40 +E0 +40 +00 +00 +ENDCHAR +STARTCHAR uni024E +ENCODING 590 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +F8 +50 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni024F +ENCODING 591 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +F8 +50 +20 +40 +80 +ENDCHAR +STARTCHAR uni0250 +ENCODING 592 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F0 +88 +F0 +80 +70 +00 +00 +ENDCHAR +STARTCHAR uni0251 +ENCODING 593 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +68 +98 +88 +98 +68 +00 +00 +ENDCHAR +STARTCHAR uni0252 +ENCODING 594 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +B0 +C8 +88 +C8 +B0 +00 +00 +ENDCHAR +STARTCHAR uni0253 +ENCODING 595 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +60 +90 +80 +F0 +88 +88 +88 +F0 +00 +00 +ENDCHAR +STARTCHAR uni0254 +ENCODING 596 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0255 +ENCODING 597 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +80 +90 +A8 +70 +20 +00 +ENDCHAR +STARTCHAR uni0256 +ENCODING 598 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +10 +70 +90 +90 +90 +70 +08 +00 +ENDCHAR +STARTCHAR uni0257 +ENCODING 599 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +10 +10 +70 +90 +90 +90 +70 +00 +00 +ENDCHAR +STARTCHAR uni0258 +ENCODING 600 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +78 +08 +70 +00 +00 +ENDCHAR +STARTCHAR uni0259 +ENCODING 601 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +08 +78 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni025A +ENCODING 602 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +60 +18 +74 +90 +60 +00 +00 +ENDCHAR +STARTCHAR uni025B +ENCODING 603 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +60 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni025C +ENCODING 604 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +30 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni025D +ENCODING 605 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +68 +94 +20 +90 +60 +00 +00 +ENDCHAR +STARTCHAR uni025E +ENCODING 606 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +B0 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni025F +ENCODING 607 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +10 +10 +38 +10 +90 +60 +ENDCHAR +STARTCHAR uni0260 +ENCODING 608 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +08 +70 +90 +90 +90 +70 +10 +60 +ENDCHAR +STARTCHAR uni0261 +ENCODING 609 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +88 +88 +78 +08 +70 +ENDCHAR +STARTCHAR uni0262 +ENCODING 610 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +80 +98 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0263 +ENCODING 611 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +50 +50 +20 +50 +20 +ENDCHAR +STARTCHAR uni0264 +ENCODING 612 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +50 +A8 +20 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni0265 +ENCODING 613 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +88 +88 +78 +08 +08 +ENDCHAR +STARTCHAR uni0266 +ENCODING 614 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +80 +F0 +88 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni0267 +ENCODING 615 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +80 +F0 +88 +88 +88 +88 +08 +30 +ENDCHAR +STARTCHAR uni0268 +ENCODING 616 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +60 +20 +70 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni0269 +ENCODING 617 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +40 +40 +40 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni026A +ENCODING 618 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni026B +ENCODING 619 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +60 +20 +68 +B0 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni026C +ENCODING 620 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +60 +20 +60 +A0 +70 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni026D +ENCODING 621 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +60 +20 +20 +20 +20 +20 +20 +28 +10 +ENDCHAR +STARTCHAR uni026E +ENCODING 622 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +C0 +40 +78 +48 +50 +70 +E8 +48 +30 +ENDCHAR +STARTCHAR uni026F +ENCODING 623 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A8 +A8 +A8 +A8 +58 +00 +00 +ENDCHAR +STARTCHAR uni0270 +ENCODING 624 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A8 +A8 +A8 +A8 +58 +08 +08 +ENDCHAR +STARTCHAR uni0271 +ENCODING 625 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +D0 +A8 +A8 +A8 +A8 +08 +30 +ENDCHAR +STARTCHAR uni0272 +ENCODING 626 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +48 +48 +48 +48 +40 +80 +ENDCHAR +STARTCHAR uni0273 +ENCODING 627 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +E0 +90 +90 +90 +90 +10 +08 +ENDCHAR +STARTCHAR uni0274 +ENCODING 628 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +C8 +A8 +98 +88 +00 +00 +ENDCHAR +STARTCHAR uni0275 +ENCODING 629 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +F8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0276 +ENCODING 630 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +A0 +B0 +A0 +78 +00 +00 +ENDCHAR +STARTCHAR uni0277 +ENCODING 631 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni0278 +ENCODING 632 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +70 +A8 +A8 +A8 +70 +20 +20 +ENDCHAR +STARTCHAR uni0279 +ENCODING 633 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +08 +08 +08 +98 +68 +00 +00 +ENDCHAR +STARTCHAR uni027A +ENCODING 634 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +08 +08 +08 +08 +98 +68 +00 +00 +ENDCHAR +STARTCHAR uni027B +ENCODING 635 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +10 +10 +90 +70 +10 +08 +ENDCHAR +STARTCHAR uni027C +ENCODING 636 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +B0 +C8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni027D +ENCODING 637 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +B0 +C8 +80 +80 +80 +A0 +40 +ENDCHAR +STARTCHAR uni027E +ENCODING 638 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +30 +48 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni027F +ENCODING 639 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +60 +90 +08 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni0280 +ENCODING 640 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F0 +88 +F0 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni0281 +ENCODING 641 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +F0 +88 +F0 +00 +00 +ENDCHAR +STARTCHAR uni0282 +ENCODING 642 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +80 +70 +08 +F0 +80 +60 +ENDCHAR +STARTCHAR uni0283 +ENCODING 643 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +28 +20 +20 +20 +20 +A0 +40 +00 +ENDCHAR +STARTCHAR uni0284 +ENCODING 644 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +28 +20 +20 +70 +20 +A0 +40 +00 +ENDCHAR +STARTCHAR uni0285 +ENCODING 645 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +40 +A0 +20 +20 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni0286 +ENCODING 646 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +28 +20 +20 +20 +70 +A0 +40 +00 +ENDCHAR +STARTCHAR uni0287 +ENCODING 647 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +C0 +20 +20 +20 +F8 +20 +20 +ENDCHAR +STARTCHAR uni0288 +ENCODING 648 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +F8 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni0289 +ENCODING 649 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +F8 +88 +98 +68 +00 +00 +ENDCHAR +STARTCHAR uni028A +ENCODING 650 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +D8 +50 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni028B +ENCODING 651 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +90 +88 +88 +90 +60 +00 +00 +ENDCHAR +STARTCHAR uni028C +ENCODING 652 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +50 +50 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni028D +ENCODING 653 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +50 +A8 +A8 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni028E +ENCODING 654 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +10 +20 +50 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni028F +ENCODING 655 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +50 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni0290 +ENCODING 656 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +10 +20 +40 +F8 +20 +18 +ENDCHAR +STARTCHAR uni0291 +ENCODING 657 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +10 +20 +50 +F8 +20 +40 +ENDCHAR +STARTCHAR uni0292 +ENCODING 658 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +10 +20 +70 +08 +88 +70 +ENDCHAR +STARTCHAR uni0293 +ENCODING 659 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +10 +30 +08 +78 +88 +74 +ENDCHAR +STARTCHAR uni0294 +ENCODING 660 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +08 +30 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni0295 +ENCODING 661 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +80 +60 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni0296 +ENCODING 662 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +20 +30 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0297 +ENCODING 663 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +80 +80 +80 +80 +80 +88 +70 +ENDCHAR +STARTCHAR uni0298 +ENCODING 664 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +A8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0299 +ENCODING 665 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F0 +88 +F0 +88 +F0 +00 +00 +ENDCHAR +STARTCHAR uni029A +ENCODING 666 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +68 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni029B +ENCODING 667 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +10 +78 +80 +98 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni029C +ENCODING 668 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +F8 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni029D +ENCODING 669 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +00 +30 +10 +10 +10 +78 +90 +60 +ENDCHAR +STARTCHAR uni029E +ENCODING 670 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +48 +38 +48 +88 +08 +08 +ENDCHAR +STARTCHAR uni029F +ENCODING 671 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +80 +80 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR uni02A0 +ENCODING 672 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +10 +70 +90 +90 +90 +70 +10 +10 +ENDCHAR +STARTCHAR uni02A1 +ENCODING 673 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +08 +30 +20 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni02A2 +ENCODING 674 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +80 +60 +20 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni02A3 +ENCODING 675 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +78 +A8 +B0 +B0 +78 +00 +00 +ENDCHAR +STARTCHAR uni02A4 +ENCODING 676 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +78 +A8 +B0 +B8 +68 +08 +30 +ENDCHAR +STARTCHAR uni02A5 +ENCODING 677 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +78 +A8 +B0 +B0 +78 +10 +00 +ENDCHAR +STARTCHAR uni02A6 +ENCODING 678 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +40 +F8 +50 +48 +48 +30 +00 +00 +ENDCHAR +STARTCHAR uni02A7 +ENCODING 679 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +54 +50 +F0 +50 +50 +50 +30 +50 +20 +ENDCHAR +STARTCHAR uni02A8 +ENCODING 680 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +40 +E8 +50 +50 +50 +28 +10 +00 +ENDCHAR +STARTCHAR uni02A9 +ENCODING 681 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +60 +90 +80 +F0 +A8 +A8 +A8 +08 +30 +ENDCHAR +STARTCHAR uni02AA +ENCODING 682 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +C0 +40 +58 +60 +50 +48 +F0 +00 +00 +ENDCHAR +STARTCHAR uni02AB +ENCODING 683 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +C0 +40 +78 +48 +50 +60 +F8 +00 +00 +ENDCHAR +STARTCHAR uni02AC +ENCODING 684 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +A8 +50 +00 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni02AD +ENCODING 685 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +88 +00 +F8 +88 +00 +00 +00 +ENDCHAR +STARTCHAR uni02AE +ENCODING 686 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +48 +48 +48 +48 +48 +48 +38 +08 +08 +ENDCHAR +STARTCHAR uni02AF +ENCODING 687 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +48 +48 +48 +48 +48 +48 +38 +08 +04 +ENDCHAR +STARTCHAR uni02B0 +ENCODING 688 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +40 +40 +60 +50 +50 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02B1 +ENCODING 689 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +40 +60 +50 +50 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02B2 +ENCODING 690 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +00 +10 +10 +50 +20 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02B3 +ENCODING 691 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +60 +50 +40 +40 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02B4 +ENCODING 692 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +10 +50 +30 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02B5 +ENCODING 693 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +10 +50 +30 +08 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02B6 +ENCODING 694 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +50 +60 +50 +60 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02B7 +ENCODING 695 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +A8 +A8 +50 +50 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02B8 +ENCODING 696 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +50 +30 +10 +60 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02B9 +ENCODING 697 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +10 +20 +20 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02BA +ENCODING 698 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +48 +90 +90 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02BB +ENCODING 699 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +30 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR afii57929 +ENCODING 700 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +30 +10 +20 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR afii64937 +ENCODING 701 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +30 +20 +10 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02BE +ENCODING 702 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +10 +10 +20 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02BF +ENCODING 703 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +40 +40 +20 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02C0 +ENCODING 704 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +50 +10 +20 +20 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02C1 +ENCODING 705 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +50 +40 +20 +20 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02C2 +ENCODING 706 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +20 +40 +20 +10 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02C3 +ENCODING 707 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +40 +20 +10 +20 +40 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02C4 +ENCODING 708 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +50 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02C5 +ENCODING 709 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +50 +20 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR circumflex +ENCODING 710 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR caron +ENCODING 711 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02C8 +ENCODING 712 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR macron +ENCODING 713 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +78 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02CA +ENCODING 714 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +10 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02CB +ENCODING 715 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02CC +ENCODING 716 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +20 +00 +ENDCHAR +STARTCHAR uni02CD +ENCODING 717 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +78 +00 +00 +ENDCHAR +STARTCHAR uni02CE +ENCODING 718 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +10 +00 +ENDCHAR +STARTCHAR uni02CF +ENCODING 719 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +20 +00 +ENDCHAR +STARTCHAR uni02D0 +ENCODING 720 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +20 +00 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni02D1 +ENCODING 721 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +20 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02D2 +ENCODING 722 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +30 +08 +08 +30 +00 +00 +ENDCHAR +STARTCHAR uni02D3 +ENCODING 723 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +30 +40 +40 +30 +00 +00 +ENDCHAR +STARTCHAR uni02D4 +ENCODING 724 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +20 +F8 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02D5 +ENCODING 725 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +F8 +20 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni02D6 +ENCODING 726 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +20 +F8 +20 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni02D7 +ENCODING 727 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +88 +F8 +88 +00 +00 +00 +ENDCHAR +STARTCHAR breve +ENCODING 728 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +88 +70 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR dotaccent +ENCODING 729 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR ring +ENCODING 730 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +50 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR ogonek +ENCODING 731 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +30 +ENDCHAR +STARTCHAR tilde +ENCODING 732 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +68 +B0 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR hungarumlaut +ENCODING 733 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +90 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02DE +ENCODING 734 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +68 +A8 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni02DF +ENCODING 735 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +20 +50 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02E0 +ENCODING 736 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +50 +20 +50 +20 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02E1 +ENCODING 737 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +60 +20 +20 +20 +70 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02E2 +ENCODING 738 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +30 +60 +10 +60 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02E3 +ENCODING 739 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +20 +50 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02E4 +ENCODING 740 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +30 +40 +60 +20 +20 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02E5 +ENCODING 741 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni02E6 +ENCODING 742 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +70 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni02E7 +ENCODING 743 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +10 +10 +70 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni02E8 +ENCODING 744 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +10 +10 +10 +10 +70 +10 +00 +00 +ENDCHAR +STARTCHAR uni02E9 +ENCODING 745 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +10 +10 +10 +10 +10 +70 +00 +00 +ENDCHAR +STARTCHAR uni02EA +ENCODING 746 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +10 +10 +ENDCHAR +STARTCHAR uni02EB +ENCODING 747 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +40 +40 +70 +40 +40 +ENDCHAR +STARTCHAR uni02EC +ENCODING 748 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +20 +ENDCHAR +STARTCHAR uni02ED +ENCODING 749 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +00 +70 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02EE +ENCODING 750 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +D8 +48 +90 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02EF +ENCODING 751 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +88 +50 +50 +20 +ENDCHAR +STARTCHAR uni02F0 +ENCODING 752 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +20 +50 +50 +88 +ENDCHAR +STARTCHAR uni02F1 +ENCODING 753 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +10 +60 +80 +60 +10 +ENDCHAR +STARTCHAR uni02F2 +ENCODING 754 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +80 +60 +10 +60 +80 +ENDCHAR +STARTCHAR uni02F3 +ENCODING 755 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +48 +ENDCHAR +STARTCHAR uni02F4 +ENCODING 756 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +10 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02F5 +ENCODING 757 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +50 +28 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02F6 +ENCODING 758 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +28 +50 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02F7 +ENCODING 759 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +68 +B0 +ENDCHAR +STARTCHAR uni02F8 +ENCODING 760 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +30 +00 +00 +30 +30 +00 +00 +ENDCHAR +STARTCHAR uni02F9 +ENCODING 761 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +20 +20 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02FA +ENCODING 762 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +10 +10 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02FB +ENCODING 763 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +20 +20 +30 +00 +00 +ENDCHAR +STARTCHAR uni02FC +ENCODING 764 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +10 +10 +30 +00 +00 +ENDCHAR +STARTCHAR uni02FD +ENCODING 765 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni02FE +ENCODING 766 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +80 +F0 +00 +00 +ENDCHAR +STARTCHAR uni02FF +ENCODING 767 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +40 +F8 +40 +00 +ENDCHAR +STARTCHAR gravecomb +ENCODING 768 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR acutecomb +ENCODING 769 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0302 +ENCODING 770 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR tildecomb +ENCODING 771 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0304 +ENCODING 772 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0305 +ENCODING 773 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0306 +ENCODING 774 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +88 +70 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0307 +ENCODING 775 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0308 +ENCODING 776 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR hookabovecomb +ENCODING 777 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +60 +10 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni030A +ENCODING 778 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni030B +ENCODING 779 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +48 +90 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni030C +ENCODING 780 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni030D +ENCODING 781 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni030E +ENCODING 782 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni030F +ENCODING 783 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +90 +48 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0310 +ENCODING 784 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +88 +70 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0311 +ENCODING 785 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +88 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0312 +ENCODING 786 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0313 +ENCODING 787 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +20 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0314 +ENCODING 788 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +60 +20 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0315 +ENCODING 789 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +0C +08 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0316 +ENCODING 790 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +10 +ENDCHAR +STARTCHAR uni0317 +ENCODING 791 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +20 +ENDCHAR +STARTCHAR uni0318 +ENCODING 792 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +30 +10 +ENDCHAR +STARTCHAR uni0319 +ENCODING 793 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +30 +20 +ENDCHAR +STARTCHAR uni031A +ENCODING 794 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +1C +04 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni031B +ENCODING 795 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +04 +04 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni031C +ENCODING 796 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +20 +10 +ENDCHAR +STARTCHAR uni031D +ENCODING 797 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +70 +ENDCHAR +STARTCHAR uni031E +ENCODING 798 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +20 +ENDCHAR +STARTCHAR uni031F +ENCODING 799 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +70 +20 +ENDCHAR +STARTCHAR uni0320 +ENCODING 800 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +ENDCHAR +STARTCHAR uni0321 +ENCODING 801 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +28 +10 +ENDCHAR +STARTCHAR uni0322 +ENCODING 802 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +08 +04 +ENDCHAR +STARTCHAR dotbelowcomb +ENCODING 803 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +ENDCHAR +STARTCHAR uni0324 +ENCODING 804 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +ENDCHAR +STARTCHAR uni0325 +ENCODING 805 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +50 +20 +ENDCHAR +STARTCHAR uni0326 +ENCODING 806 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +20 +ENDCHAR +STARTCHAR uni0327 +ENCODING 807 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +20 +ENDCHAR +STARTCHAR uni0328 +ENCODING 808 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +10 +ENDCHAR +STARTCHAR uni0329 +ENCODING 809 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +20 +ENDCHAR +STARTCHAR uni032A +ENCODING 810 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +78 +48 +ENDCHAR +STARTCHAR uni032B +ENCODING 811 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +A8 +50 +ENDCHAR +STARTCHAR uni032C +ENCODING 812 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +30 +ENDCHAR +STARTCHAR uni032D +ENCODING 813 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +48 +ENDCHAR +STARTCHAR uni032E +ENCODING 814 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +88 +70 +ENDCHAR +STARTCHAR uni032F +ENCODING 815 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +88 +ENDCHAR +STARTCHAR uni0330 +ENCODING 816 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +28 +50 +ENDCHAR +STARTCHAR uni0331 +ENCODING 817 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +F8 +ENDCHAR +STARTCHAR uni0332 +ENCODING 818 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +FC +ENDCHAR +STARTCHAR uni0333 +ENCODING 819 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +FC +00 +FC +ENDCHAR +STARTCHAR uni0334 +ENCODING 820 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +28 +50 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0335 +ENCODING 821 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +70 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0336 +ENCODING 822 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +F8 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0337 +ENCODING 823 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +20 +40 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0338 +ENCODING 824 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +08 +08 +10 +10 +20 +40 +40 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni0339 +ENCODING 825 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +10 +20 +ENDCHAR +STARTCHAR uni033A +ENCODING 826 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +78 +ENDCHAR +STARTCHAR uni033B +ENCODING 827 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +50 +70 +ENDCHAR +STARTCHAR uni033C +ENCODING 828 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +A8 +ENDCHAR +STARTCHAR uni033D +ENCODING 829 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +20 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni033E +ENCODING 830 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +10 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni033F +ENCODING 831 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +FC +00 +FC +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0340 +ENCODING 832 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0341 +ENCODING 833 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0342 +ENCODING 834 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0343 +ENCODING 835 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +10 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0344 +ENCODING 836 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +D8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0345 +ENCODING 837 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +ENDCHAR +STARTCHAR uni0346 +ENCODING 838 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0347 +ENCODING 839 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +F8 +00 +F8 +ENDCHAR +STARTCHAR uni0348 +ENCODING 840 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +50 +ENDCHAR +STARTCHAR uni0349 +ENCODING 841 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +10 +ENDCHAR +STARTCHAR uni034A +ENCODING 842 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +68 +B0 +20 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni034B +ENCODING 843 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +00 +68 +B0 +00 +40 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni034C +ENCODING 844 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +68 +B0 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni034D +ENCODING 845 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +F8 +50 +ENDCHAR +STARTCHAR uni034E +ENCODING 846 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +70 +ENDCHAR +STARTCHAR uni034F +ENCODING 847 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0350 +ENCODING 848 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +E0 +38 +E0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0351 +ENCODING 849 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +40 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0352 +ENCODING 850 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +88 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0353 +ENCODING 851 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +20 +50 +ENDCHAR +STARTCHAR uni0354 +ENCODING 852 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +38 +E0 +38 +ENDCHAR +STARTCHAR uni0355 +ENCODING 853 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +E0 +38 +E0 +ENDCHAR +STARTCHAR uni0356 +ENCODING 854 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +08 +C8 +34 +D4 +ENDCHAR +STARTCHAR uni0357 +ENCODING 855 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +10 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0358 +ENCODING 856 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +18 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0359 +ENCODING 857 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +20 +70 +ENDCHAR +STARTCHAR uni035A +ENCODING 858 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +A8 +50 +ENDCHAR +STARTCHAR uni035B +ENCODING 859 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +70 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni035C +ENCODING 860 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +44 +38 +ENDCHAR +STARTCHAR uni035D +ENCODING 861 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +38 +44 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni035E +ENCODING 862 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +7C +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni035F +ENCODING 863 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7C +ENDCHAR +STARTCHAR uni0360 +ENCODING 864 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +4C +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0361 +ENCODING 865 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +38 +44 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0362 +ENCODING 866 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +7C +08 +ENDCHAR +STARTCHAR uni0363 +ENCODING 867 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +50 +30 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0364 +ENCODING 868 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +70 +40 +30 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0365 +ENCODING 869 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +00 +20 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0366 +ENCODING 870 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +48 +48 +30 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0367 +ENCODING 871 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +50 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0368 +ENCODING 872 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +40 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0369 +ENCODING 873 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +30 +50 +30 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni036A +ENCODING 874 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +60 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni036B +ENCODING 875 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +D0 +A8 +A8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni036C +ENCODING 876 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +60 +40 +40 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni036D +ENCODING 877 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +70 +20 +30 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni036E +ENCODING 878 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +50 +20 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni036F +ENCODING 879 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +20 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0370 +ENCODING 880 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +80 +F0 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni0371 +ENCODING 881 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +60 +A0 +38 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni0372 +ENCODING 882 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +A8 +A8 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni0373 +ENCODING 883 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +A8 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni0374 +ENCODING 884 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0375 +ENCODING 885 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +20 +ENDCHAR +STARTCHAR uni0376 +ENCODING 886 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +98 +98 +A8 +C8 +C8 +88 +00 +00 +ENDCHAR +STARTCHAR uni0377 +ENCODING 887 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +90 +B0 +D0 +90 +90 +08 +00 +ENDCHAR +STARTCHAR uni037A +ENCODING 890 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +30 +ENDCHAR +STARTCHAR uni037B +ENCODING 891 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni037C +ENCODING 892 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +A0 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni037D +ENCODING 893 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +28 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni037E +ENCODING 894 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +70 +20 +00 +30 +20 +40 +00 +ENDCHAR +STARTCHAR tonos +ENCODING 900 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR dieresistonos +ENCODING 901 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +50 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR Alphatonos +ENCODING 902 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +80 +00 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR anoteleia +ENCODING 903 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +30 +30 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR Epsilontonos +ENCODING 904 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +80 +00 +F8 +80 +80 +F0 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR Etatonos +ENCODING 905 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +80 +00 +88 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR Iotatonos +ENCODING 906 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +80 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR Omicrontonos +ENCODING 908 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +80 +00 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR Upsilontonos +ENCODING 910 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +80 +00 +88 +88 +50 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR Omegatonos +ENCODING 911 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +80 +00 +70 +88 +88 +88 +88 +50 +D8 +00 +00 +ENDCHAR +STARTCHAR iotadieresistonos +ENCODING 912 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +50 +00 +20 +20 +20 +28 +10 +00 +00 +ENDCHAR +STARTCHAR Alpha +ENCODING 913 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR Beta +ENCODING 914 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +88 +88 +F0 +88 +88 +F0 +00 +00 +ENDCHAR +STARTCHAR Gamma +ENCODING 915 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +80 +80 +80 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR Delta +ENCODING 916 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +50 +50 +88 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR Epsilon +ENCODING 917 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +80 +80 +F0 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR Zeta +ENCODING 918 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +08 +10 +20 +40 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR Eta +ENCODING 919 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR Theta +ENCODING 920 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +F8 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR Iota +ENCODING 921 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR Kappa +ENCODING 922 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +90 +A0 +C0 +A0 +90 +88 +00 +00 +ENDCHAR +STARTCHAR Lambda +ENCODING 923 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +50 +50 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR Mu +ENCODING 924 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +D8 +A8 +88 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR Nu +ENCODING 925 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +C8 +A8 +98 +88 +88 +00 +00 +ENDCHAR +STARTCHAR Xi +ENCODING 926 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +00 +00 +70 +00 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR Omicron +ENCODING 927 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR Pi +ENCODING 928 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +88 +88 +88 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR Rho +ENCODING 929 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +88 +88 +F0 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR Sigma +ENCODING 931 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +40 +20 +10 +20 +40 +F8 +00 +00 +ENDCHAR +STARTCHAR Tau +ENCODING 932 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +20 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR Upsilon +ENCODING 933 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +50 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR Phi +ENCODING 934 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +70 +A8 +A8 +A8 +70 +20 +00 +00 +ENDCHAR +STARTCHAR Chi +ENCODING 935 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +50 +20 +50 +88 +88 +00 +00 +ENDCHAR +STARTCHAR Psi +ENCODING 936 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +A8 +A8 +A8 +70 +20 +20 +00 +00 +ENDCHAR +STARTCHAR Omega +ENCODING 937 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +88 +88 +50 +D8 +00 +00 +ENDCHAR +STARTCHAR Iotadieresis +ENCODING 938 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR Upsilondieresis +ENCODING 939 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +88 +88 +50 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR alphatonos +ENCODING 940 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +68 +90 +90 +90 +68 +00 +00 +ENDCHAR +STARTCHAR epsilontonos +ENCODING 941 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +70 +88 +60 +88 +70 +00 +00 +ENDCHAR +STARTCHAR etatonos +ENCODING 942 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +B0 +C8 +88 +88 +88 +08 +08 +ENDCHAR +STARTCHAR iotatonos +ENCODING 943 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +40 +00 +40 +40 +40 +50 +20 +00 +00 +ENDCHAR +STARTCHAR upsilondieresistonos +ENCODING 944 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +50 +00 +90 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR alpha +ENCODING 945 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +68 +90 +90 +90 +68 +00 +00 +ENDCHAR +STARTCHAR beta +ENCODING 946 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +60 +90 +90 +B0 +88 +88 +F0 +80 +80 +ENDCHAR +STARTCHAR gamma +ENCODING 947 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +50 +50 +20 +20 +20 +ENDCHAR +STARTCHAR delta +ENCODING 948 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +80 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR epsilon +ENCODING 949 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +60 +88 +70 +00 +00 +ENDCHAR +STARTCHAR zeta +ENCODING 950 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +20 +40 +40 +40 +30 +08 +30 +00 +ENDCHAR +STARTCHAR eta +ENCODING 951 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +B0 +C8 +88 +88 +88 +08 +08 +ENDCHAR +STARTCHAR theta +ENCODING 952 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +48 +48 +78 +48 +48 +30 +00 +00 +ENDCHAR +STARTCHAR iota +ENCODING 953 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +20 +20 +28 +10 +00 +00 +ENDCHAR +STARTCHAR kappa +ENCODING 954 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +48 +50 +60 +50 +48 +00 +00 +ENDCHAR +STARTCHAR lambda +ENCODING 955 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +80 +40 +40 +20 +20 +50 +50 +88 +88 +00 +00 +ENDCHAR +STARTCHAR mu +ENCODING 956 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +88 +98 +E8 +80 +80 +ENDCHAR +STARTCHAR nu +ENCODING 957 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +50 +50 +20 +00 +00 +ENDCHAR +STARTCHAR xi +ENCODING 958 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +20 +40 +70 +80 +80 +70 +08 +10 +ENDCHAR +STARTCHAR omicron +ENCODING 959 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR pi +ENCODING 960 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +50 +50 +54 +48 +00 +00 +ENDCHAR +STARTCHAR rho +ENCODING 961 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +88 +C8 +B0 +80 +80 +ENDCHAR +STARTCHAR sigma1 +ENCODING 962 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +80 +80 +70 +08 +30 +ENDCHAR +STARTCHAR sigma +ENCODING 963 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +90 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR tau +ENCODING 964 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +20 +20 +28 +10 +00 +00 +ENDCHAR +STARTCHAR upsilon +ENCODING 965 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +90 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR phi +ENCODING 966 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +A8 +A8 +A8 +70 +20 +20 +ENDCHAR +STARTCHAR chi +ENCODING 967 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +50 +20 +50 +88 +88 +ENDCHAR +STARTCHAR psi +ENCODING 968 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A8 +A8 +A8 +A8 +70 +20 +20 +ENDCHAR +STARTCHAR omega +ENCODING 969 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +50 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR iotadieresis +ENCODING 970 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +00 +20 +20 +20 +28 +10 +00 +00 +ENDCHAR +STARTCHAR upsilondieresis +ENCODING 971 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +00 +90 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR omicrontonos +ENCODING 972 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR upsilontonos +ENCODING 973 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +90 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR omegatonos +ENCODING 974 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +50 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni03CF +ENCODING 975 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +90 +A0 +C0 +A0 +90 +88 +30 +10 +ENDCHAR +STARTCHAR uni03D0 +ENCODING 976 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +60 +90 +90 +B0 +C8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR theta1 +ENCODING 977 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +48 +3C +08 +C8 +48 +30 +00 +00 +ENDCHAR +STARTCHAR Upsilon1 +ENCODING 978 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +54 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni03D3 +ENCODING 979 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +80 +00 +88 +54 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni03D4 +ENCODING 980 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +00 +88 +54 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR phi1 +ENCODING 981 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +70 +A8 +A8 +A8 +70 +20 +20 +ENDCHAR +STARTCHAR omega1 +ENCODING 982 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni03D7 +ENCODING 983 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +48 +70 +50 +88 +08 +30 +ENDCHAR +STARTCHAR uni03D8 +ENCODING 984 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +88 +88 +88 +70 +20 +20 +ENDCHAR +STARTCHAR uni03D9 +ENCODING 985 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +88 +88 +70 +20 +20 +ENDCHAR +STARTCHAR uni03DA +ENCODING 986 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +80 +80 +70 +10 +00 +00 +ENDCHAR +STARTCHAR uni03DB +ENCODING 987 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +08 +70 +80 +80 +80 +70 +08 +30 +ENDCHAR +STARTCHAR uni03DC +ENCODING 988 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +80 +80 +E0 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni03DD +ENCODING 989 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +40 +40 +70 +40 +40 +40 +ENDCHAR +STARTCHAR uni03DE +ENCODING 990 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +40 +80 +F8 +08 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni03DF +ENCODING 991 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +80 +40 +48 +58 +68 +48 +08 +04 +ENDCHAR +STARTCHAR uni03E0 +ENCODING 992 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +E0 +30 +48 +18 +28 +08 +10 +00 +00 +ENDCHAR +STARTCHAR uni03E1 +ENCODING 993 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +C0 +20 +10 +30 +48 +18 +28 +08 +08 +ENDCHAR +STARTCHAR uni03E2 +ENCODING 994 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +A8 +A8 +A8 +A8 +58 +08 +F0 +00 +ENDCHAR +STARTCHAR uni03E3 +ENCODING 995 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A8 +A8 +A8 +58 +08 +F0 +00 +ENDCHAR +STARTCHAR uni03E4 +ENCODING 996 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +48 +88 +88 +88 +88 +98 +68 +08 +08 +ENDCHAR +STARTCHAR uni03E5 +ENCODING 997 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +48 +88 +88 +88 +78 +08 +08 +ENDCHAR +STARTCHAR uni03E6 +ENCODING 998 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +B0 +C8 +88 +88 +08 +70 +00 +ENDCHAR +STARTCHAR uni03E7 +ENCODING 999 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +6C +90 +68 +08 +C8 +B0 +00 +00 +ENDCHAR +STARTCHAR uni03E8 +ENCODING 1000 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +10 +20 +40 +88 +70 +00 +ENDCHAR +STARTCHAR uni03E9 +ENCODING 1001 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +88 +88 +10 +60 +80 +78 +00 +ENDCHAR +STARTCHAR uni03EA +ENCODING 1002 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +50 +20 +50 +50 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni03EB +ENCODING 1003 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +88 +50 +20 +50 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni03EC +ENCODING 1004 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +38 +40 +80 +E0 +90 +88 +F0 +00 +00 +ENDCHAR +STARTCHAR uni03ED +ENCODING 1005 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +40 +80 +E0 +90 +E0 +00 +00 +ENDCHAR +STARTCHAR uni03EE +ENCODING 1006 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +F8 +A8 +20 +20 +30 +00 +00 +ENDCHAR +STARTCHAR uni03EF +ENCODING 1007 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +F8 +A0 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni03F0 +ENCODING 1008 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +48 +70 +50 +88 +00 +00 +ENDCHAR +STARTCHAR uni03F1 +ENCODING 1009 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +88 +88 +F0 +80 +78 +ENDCHAR +STARTCHAR uni03F2 +ENCODING 1010 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni03F3 +ENCODING 1011 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +00 +30 +10 +10 +10 +10 +50 +20 +ENDCHAR +STARTCHAR uni03F4 +ENCODING 1012 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +F8 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni03F5 +ENCODING 1013 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +40 +70 +40 +38 +00 +00 +ENDCHAR +STARTCHAR uni03F6 +ENCODING 1014 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +08 +38 +08 +70 +00 +00 +ENDCHAR +STARTCHAR uni03F7 +ENCODING 1015 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +E0 +40 +70 +48 +48 +70 +40 +E0 +00 +00 +ENDCHAR +STARTCHAR uni03F8 +ENCODING 1016 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +80 +B0 +C8 +88 +88 +C8 +B0 +80 +00 +00 +ENDCHAR +STARTCHAR uni03F9 +ENCODING 1017 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +80 +80 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni03FA +ENCODING 1018 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +D8 +A8 +88 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni03FB +ENCODING 1019 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +D8 +A8 +88 +88 +80 +80 +ENDCHAR +STARTCHAR uni03FC +ENCODING 1020 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +30 +48 +48 +70 +40 +F0 +40 +ENDCHAR +STARTCHAR uni03FD +ENCODING 1021 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +08 +08 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni03FE +ENCODING 1022 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +80 +A0 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni03FF +ENCODING 1023 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +08 +28 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0400 +ENCODING 1024 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +20 +00 +F8 +80 +80 +F0 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR afii10023 +ENCODING 1025 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +F8 +80 +80 +F0 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR afii10051 +ENCODING 1026 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +E0 +40 +40 +70 +48 +48 +48 +08 +30 +ENDCHAR +STARTCHAR afii10052 +ENCODING 1027 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +F8 +80 +80 +80 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR afii10053 +ENCODING 1028 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +80 +F0 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR afii10054 +ENCODING 1029 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +80 +70 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR afii10055 +ENCODING 1030 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR afii10056 +ENCODING 1031 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR afii10057 +ENCODING 1032 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +38 +10 +10 +10 +10 +90 +60 +00 +00 +ENDCHAR +STARTCHAR afii10058 +ENCODING 1033 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +60 +A0 +A0 +B0 +A8 +A8 +B0 +00 +00 +ENDCHAR +STARTCHAR afii10059 +ENCODING 1034 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A0 +A0 +A0 +F0 +A8 +A8 +B0 +00 +00 +ENDCHAR +STARTCHAR afii10060 +ENCODING 1035 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +E0 +40 +40 +70 +48 +48 +48 +00 +00 +ENDCHAR +STARTCHAR afii10061 +ENCODING 1036 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +88 +90 +A0 +C0 +A0 +90 +88 +00 +00 +ENDCHAR +STARTCHAR uni040D +ENCODING 1037 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +20 +00 +88 +88 +98 +A8 +C8 +88 +88 +00 +00 +ENDCHAR +STARTCHAR afii10062 +ENCODING 1038 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +88 +70 +00 +88 +88 +88 +88 +78 +08 +70 +00 +00 +ENDCHAR +STARTCHAR afii10145 +ENCODING 1039 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +88 +88 +88 +88 +F8 +20 +20 +ENDCHAR +STARTCHAR afii10017 +ENCODING 1040 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR afii10018 +ENCODING 1041 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +80 +80 +F0 +88 +88 +F0 +00 +00 +ENDCHAR +STARTCHAR afii10019 +ENCODING 1042 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +88 +88 +F0 +88 +88 +F0 +00 +00 +ENDCHAR +STARTCHAR afii10020 +ENCODING 1043 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +80 +80 +80 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR afii10021 +ENCODING 1044 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +50 +50 +50 +50 +50 +F8 +88 +00 +ENDCHAR +STARTCHAR afii10022 +ENCODING 1045 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +80 +80 +F0 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR afii10024 +ENCODING 1046 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +A8 +70 +20 +70 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR afii10025 +ENCODING 1047 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +08 +70 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR afii10026 +ENCODING 1048 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +98 +A8 +C8 +88 +88 +00 +00 +ENDCHAR +STARTCHAR afii10027 +ENCODING 1049 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +88 +70 +00 +88 +88 +98 +A8 +C8 +88 +88 +00 +00 +ENDCHAR +STARTCHAR afii10028 +ENCODING 1050 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +90 +A0 +C0 +A0 +90 +88 +00 +00 +ENDCHAR +STARTCHAR afii10029 +ENCODING 1051 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +38 +48 +48 +48 +48 +48 +88 +00 +00 +ENDCHAR +STARTCHAR afii10030 +ENCODING 1052 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +D8 +A8 +88 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR afii10031 +ENCODING 1053 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR afii10032 +ENCODING 1054 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR afii10033 +ENCODING 1055 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +88 +88 +88 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR afii10034 +ENCODING 1056 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +88 +88 +F0 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR afii10035 +ENCODING 1057 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +80 +80 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR afii10036 +ENCODING 1058 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +20 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR afii10037 +ENCODING 1059 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +88 +88 +78 +08 +70 +00 +00 +ENDCHAR +STARTCHAR afii10038 +ENCODING 1060 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +70 +A8 +A8 +A8 +70 +20 +00 +00 +ENDCHAR +STARTCHAR afii10039 +ENCODING 1061 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +50 +20 +50 +88 +88 +00 +00 +ENDCHAR +STARTCHAR afii10040 +ENCODING 1062 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +90 +90 +90 +90 +90 +90 +F8 +08 +08 +ENDCHAR +STARTCHAR afii10041 +ENCODING 1063 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +88 +78 +08 +08 +08 +00 +00 +ENDCHAR +STARTCHAR afii10042 +ENCODING 1064 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +A8 +A8 +A8 +A8 +A8 +F8 +00 +00 +ENDCHAR +STARTCHAR afii10043 +ENCODING 1065 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +A8 +A8 +A8 +A8 +A8 +F8 +08 +08 +ENDCHAR +STARTCHAR afii10044 +ENCODING 1066 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +C0 +40 +40 +70 +48 +48 +70 +00 +00 +ENDCHAR +STARTCHAR afii10045 +ENCODING 1067 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +88 +C8 +A8 +A8 +C8 +00 +00 +ENDCHAR +STARTCHAR afii10046 +ENCODING 1068 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +40 +40 +70 +48 +48 +70 +00 +00 +ENDCHAR +STARTCHAR afii10047 +ENCODING 1069 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +08 +78 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR afii10048 +ENCODING 1070 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +90 +A8 +A8 +E8 +A8 +A8 +90 +00 +00 +ENDCHAR +STARTCHAR afii10049 +ENCODING 1071 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +88 +88 +78 +28 +48 +88 +00 +00 +ENDCHAR +STARTCHAR afii10065 +ENCODING 1072 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +08 +78 +88 +78 +00 +00 +ENDCHAR +STARTCHAR afii10066 +ENCODING 1073 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +80 +F0 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR afii10067 +ENCODING 1074 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F0 +88 +F0 +88 +F0 +00 +00 +ENDCHAR +STARTCHAR afii10068 +ENCODING 1075 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +80 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR afii10069 +ENCODING 1076 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +30 +50 +50 +50 +F8 +88 +00 +ENDCHAR +STARTCHAR afii10070 +ENCODING 1077 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +F0 +80 +70 +00 +00 +ENDCHAR +STARTCHAR afii10072 +ENCODING 1078 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A8 +70 +20 +70 +A8 +00 +00 +ENDCHAR +STARTCHAR afii10073 +ENCODING 1079 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +30 +88 +70 +00 +00 +ENDCHAR +STARTCHAR afii10074 +ENCODING 1080 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +98 +A8 +C8 +88 +00 +00 +ENDCHAR +STARTCHAR afii10075 +ENCODING 1081 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +70 +00 +88 +98 +A8 +C8 +88 +00 +00 +ENDCHAR +STARTCHAR afii10076 +ENCODING 1082 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +48 +50 +60 +50 +48 +00 +00 +ENDCHAR +STARTCHAR afii10077 +ENCODING 1083 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +48 +48 +48 +88 +00 +00 +ENDCHAR +STARTCHAR afii10078 +ENCODING 1084 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +D8 +A8 +88 +88 +00 +00 +ENDCHAR +STARTCHAR afii10079 +ENCODING 1085 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +F8 +88 +88 +00 +00 +ENDCHAR +STARTCHAR afii10080 +ENCODING 1086 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR afii10081 +ENCODING 1087 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +88 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR afii10082 +ENCODING 1088 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F0 +88 +88 +88 +F0 +80 +80 +ENDCHAR +STARTCHAR afii10083 +ENCODING 1089 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR afii10084 +ENCODING 1090 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR afii10085 +ENCODING 1091 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +88 +88 +78 +08 +70 +ENDCHAR +STARTCHAR afii10086 +ENCODING 1092 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +70 +A8 +A8 +A8 +70 +20 +20 +ENDCHAR +STARTCHAR afii10087 +ENCODING 1093 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +50 +20 +50 +88 +00 +00 +ENDCHAR +STARTCHAR afii10088 +ENCODING 1094 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +90 +90 +90 +90 +F8 +08 +08 +ENDCHAR +STARTCHAR afii10089 +ENCODING 1095 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +78 +08 +08 +00 +00 +ENDCHAR +STARTCHAR afii10090 +ENCODING 1096 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A8 +A8 +A8 +A8 +F8 +00 +00 +ENDCHAR +STARTCHAR afii10091 +ENCODING 1097 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A8 +A8 +A8 +A8 +F8 +08 +08 +ENDCHAR +STARTCHAR afii10092 +ENCODING 1098 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +C0 +40 +70 +48 +70 +00 +00 +ENDCHAR +STARTCHAR afii10093 +ENCODING 1099 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +C8 +A8 +C8 +00 +00 +ENDCHAR +STARTCHAR afii10094 +ENCODING 1100 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +40 +40 +70 +48 +70 +00 +00 +ENDCHAR +STARTCHAR afii10095 +ENCODING 1101 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +08 +38 +08 +70 +00 +00 +ENDCHAR +STARTCHAR afii10096 +ENCODING 1102 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +90 +A8 +E8 +A8 +90 +00 +00 +ENDCHAR +STARTCHAR afii10097 +ENCODING 1103 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +48 +38 +28 +48 +00 +00 +ENDCHAR +STARTCHAR uni0450 +ENCODING 1104 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +20 +00 +70 +88 +F0 +80 +70 +00 +00 +ENDCHAR +STARTCHAR afii10071 +ENCODING 1105 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +00 +70 +88 +F0 +80 +70 +00 +00 +ENDCHAR +STARTCHAR afii10099 +ENCODING 1106 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +E0 +40 +70 +48 +48 +48 +08 +10 +ENDCHAR +STARTCHAR afii10100 +ENCODING 1107 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +F8 +80 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR afii10101 +ENCODING 1108 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +40 +70 +40 +38 +00 +00 +ENDCHAR +STARTCHAR afii10102 +ENCODING 1109 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +80 +70 +08 +F0 +00 +00 +ENDCHAR +STARTCHAR afii10103 +ENCODING 1110 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +00 +60 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR afii10104 +ENCODING 1111 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +50 +00 +60 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR afii10105 +ENCODING 1112 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +08 +00 +18 +08 +08 +08 +48 +30 +ENDCHAR +STARTCHAR afii10106 +ENCODING 1113 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +60 +A0 +B0 +A8 +B0 +00 +00 +ENDCHAR +STARTCHAR afii10107 +ENCODING 1114 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A0 +A0 +F0 +A8 +B0 +00 +00 +ENDCHAR +STARTCHAR afii10108 +ENCODING 1115 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +E0 +40 +70 +48 +48 +48 +00 +00 +ENDCHAR +STARTCHAR afii10109 +ENCODING 1116 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +48 +50 +60 +50 +48 +00 +00 +ENDCHAR +STARTCHAR uni045D +ENCODING 1117 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +20 +00 +88 +98 +A8 +C8 +88 +00 +00 +ENDCHAR +STARTCHAR afii10110 +ENCODING 1118 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +70 +00 +88 +88 +88 +88 +78 +08 +70 +ENDCHAR +STARTCHAR afii10193 +ENCODING 1119 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +88 +88 +F8 +20 +20 +ENDCHAR +STARTCHAR uni0460 +ENCODING 1120 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +88 +88 +A8 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni0461 +ENCODING 1121 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +50 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR afii10146 +ENCODING 1122 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +F0 +40 +70 +48 +48 +70 +00 +00 +ENDCHAR +STARTCHAR afii10194 +ENCODING 1123 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +40 +F0 +40 +70 +48 +70 +00 +00 +ENDCHAR +STARTCHAR uni0464 +ENCODING 1124 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +98 +A0 +A0 +F8 +A0 +A0 +98 +00 +00 +ENDCHAR +STARTCHAR uni0465 +ENCODING 1125 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +98 +A0 +F8 +A0 +98 +00 +00 +ENDCHAR +STARTCHAR uni0466 +ENCODING 1126 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +50 +50 +88 +F8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni0467 +ENCODING 1127 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +50 +50 +88 +F8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni0468 +ENCODING 1128 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +90 +90 +B8 +F8 +B8 +B8 +B8 +00 +00 +ENDCHAR +STARTCHAR uni0469 +ENCODING 1129 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +90 +90 +F8 +B8 +B8 +00 +00 +ENDCHAR +STARTCHAR uni046A +ENCODING 1130 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F8 +88 +50 +50 +70 +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni046B +ENCODING 1131 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +88 +50 +70 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni046C +ENCODING 1132 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +FC +C4 +A8 +90 +F8 +B8 +B8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni046D +ENCODING 1133 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +FC +A8 +90 +F8 +B8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni046E +ENCODING 1134 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +20 +00 +70 +88 +08 +30 +08 +08 +70 +80 +70 +ENDCHAR +STARTCHAR uni046F +ENCODING 1135 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +20 +00 +70 +88 +30 +08 +70 +80 +70 +ENDCHAR +STARTCHAR uni0470 +ENCODING 1136 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +A8 +A8 +70 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni0471 +ENCODING 1137 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A8 +A8 +70 +20 +20 +00 +00 +ENDCHAR +STARTCHAR afii10147 +ENCODING 1138 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +F8 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR afii10195 +ENCODING 1139 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +F8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR afii10148 +ENCODING 1140 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +90 +90 +50 +50 +50 +20 +00 +00 +ENDCHAR +STARTCHAR afii10196 +ENCODING 1141 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +90 +50 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni0476 +ENCODING 1142 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +90 +48 +00 +88 +90 +90 +50 +50 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni0477 +ENCODING 1143 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +90 +48 +00 +88 +90 +50 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni0478 +ENCODING 1144 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +A0 +A0 +B8 +B8 +B8 +58 +08 +10 +ENDCHAR +STARTCHAR uni0479 +ENCODING 1145 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +58 +B8 +B8 +B8 +58 +08 +10 +ENDCHAR +STARTCHAR uni047A +ENCODING 1146 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +70 +A8 +88 +88 +88 +88 +A8 +70 +20 +00 +ENDCHAR +STARTCHAR uni047B +ENCODING 1147 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +70 +A8 +88 +88 +A8 +70 +20 +00 +ENDCHAR +STARTCHAR uni047C +ENCODING 1148 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +00 +20 +20 +88 +88 +88 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni047D +ENCODING 1149 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +00 +20 +A8 +88 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni047E +ENCODING 1150 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +F8 +A8 +00 +50 +88 +88 +A8 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni047F +ENCODING 1151 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F8 +A8 +00 +50 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni0480 +ENCODING 1152 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +88 +80 +80 +80 +80 +70 +10 +10 +ENDCHAR +STARTCHAR uni0481 +ENCODING 1153 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +88 +80 +80 +70 +10 +10 +00 +ENDCHAR +STARTCHAR uni0482 +ENCODING 1154 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +28 +10 +B0 +48 +40 +A0 +00 +00 +00 +ENDCHAR +STARTCHAR uni0483 +ENCODING 1155 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +04 +FC +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0484 +ENCODING 1156 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +8C +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0485 +ENCODING 1157 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +C8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0486 +ENCODING 1158 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +98 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0487 +ENCODING 1159 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +60 +9C +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0488 +ENCODING 1160 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +A0 +08 +14 +00 +00 +00 +00 +40 +A0 +08 +14 +ENDCHAR +STARTCHAR uni0489 +ENCODING 1161 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +84 +C8 +0C +00 +00 +00 +00 +40 +84 +C8 +0C +ENDCHAR +STARTCHAR uni048A +ENCODING 1162 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +88 +70 +00 +88 +98 +98 +A8 +C8 +C8 +88 +10 +10 +ENDCHAR +STARTCHAR uni048B +ENCODING 1163 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +88 +70 +00 +88 +88 +98 +A8 +C8 +88 +10 +10 +ENDCHAR +STARTCHAR uni048C +ENCODING 1164 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +40 +E0 +40 +70 +48 +48 +70 +00 +00 +ENDCHAR +STARTCHAR uni048D +ENCODING 1165 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +E0 +40 +70 +48 +48 +70 +00 +00 +ENDCHAR +STARTCHAR uni048E +ENCODING 1166 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F0 +88 +88 +A8 +F0 +88 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni048F +ENCODING 1167 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F0 +88 +88 +A8 +F0 +88 +80 +80 +ENDCHAR +STARTCHAR afii10050 +ENCODING 1168 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +08 +08 +F8 +80 +80 +80 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR afii10098 +ENCODING 1169 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +08 +F8 +80 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni0492 +ENCODING 1170 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +40 +40 +F0 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni0493 +ENCODING 1171 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +40 +F0 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni0494 +ENCODING 1172 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F8 +80 +80 +F0 +88 +88 +88 +88 +10 +00 +ENDCHAR +STARTCHAR uni0495 +ENCODING 1173 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +80 +F0 +88 +88 +88 +10 +00 +ENDCHAR +STARTCHAR uni0496 +ENCODING 1174 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +A8 +A8 +70 +A8 +A8 +AC +04 +04 +ENDCHAR +STARTCHAR uni0497 +ENCODING 1175 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A8 +70 +20 +70 +AC +04 +04 +ENDCHAR +STARTCHAR uni0498 +ENCODING 1176 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +08 +10 +08 +08 +88 +70 +20 +40 +ENDCHAR +STARTCHAR uni0499 +ENCODING 1177 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +88 +10 +08 +88 +70 +20 +40 +ENDCHAR +STARTCHAR uni049A +ENCODING 1178 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +90 +A0 +C0 +A0 +90 +88 +04 +04 +ENDCHAR +STARTCHAR uni049B +ENCODING 1179 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +90 +A0 +C0 +A0 +90 +08 +08 +ENDCHAR +STARTCHAR uni049C +ENCODING 1180 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +B0 +A0 +C0 +A0 +B0 +A8 +00 +00 +ENDCHAR +STARTCHAR uni049D +ENCODING 1181 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A8 +B0 +E0 +B0 +A8 +00 +00 +ENDCHAR +STARTCHAR uni049E +ENCODING 1182 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +48 +E8 +50 +60 +50 +48 +48 +00 +00 +ENDCHAR +STARTCHAR uni049F +ENCODING 1183 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +40 +E0 +48 +50 +60 +50 +48 +00 +00 +ENDCHAR +STARTCHAR uni04A0 +ENCODING 1184 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +C8 +48 +50 +60 +60 +50 +48 +48 +00 +00 +ENDCHAR +STARTCHAR uni04A1 +ENCODING 1185 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +C8 +50 +60 +50 +48 +00 +00 +ENDCHAR +STARTCHAR uni04A2 +ENCODING 1186 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +90 +90 +90 +F0 +90 +90 +90 +98 +08 +08 +ENDCHAR +STARTCHAR uni04A3 +ENCODING 1187 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +90 +90 +F0 +90 +98 +08 +08 +ENDCHAR +STARTCHAR uni04A4 +ENCODING 1188 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +B8 +A0 +A0 +E0 +A0 +A0 +A0 +A0 +00 +00 +ENDCHAR +STARTCHAR uni04A5 +ENCODING 1189 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +B8 +A0 +E0 +A0 +A0 +00 +00 +ENDCHAR +STARTCHAR uni04A6 +ENCODING 1190 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +E0 +A0 +A0 +B0 +A8 +A8 +A8 +A8 +08 +10 +ENDCHAR +STARTCHAR uni04A7 +ENCODING 1191 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +E0 +A0 +B0 +A8 +A8 +08 +10 +ENDCHAR +STARTCHAR uni04A8 +ENCODING 1192 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +78 +80 +90 +A8 +A8 +A8 +70 +20 +18 +00 +ENDCHAR +STARTCHAR uni04A9 +ENCODING 1193 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +80 +90 +A8 +70 +20 +18 +00 +ENDCHAR +STARTCHAR uni04AA +ENCODING 1194 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +80 +80 +80 +80 +88 +70 +20 +10 +ENDCHAR +STARTCHAR uni04AB +ENCODING 1195 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +80 +88 +70 +20 +10 +ENDCHAR +STARTCHAR uni04AC +ENCODING 1196 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F8 +20 +20 +20 +20 +20 +20 +30 +10 +10 +ENDCHAR +STARTCHAR uni04AD +ENCODING 1197 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +A8 +20 +20 +30 +10 +10 +ENDCHAR +STARTCHAR uni04AE +ENCODING 1198 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +50 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni04AF +ENCODING 1199 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +50 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni04B0 +ENCODING 1200 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +50 +F8 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni04B1 +ENCODING 1201 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +50 +F8 +20 +20 +20 +ENDCHAR +STARTCHAR uni04B2 +ENCODING 1202 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +50 +20 +50 +88 +88 +04 +04 +ENDCHAR +STARTCHAR uni04B3 +ENCODING 1203 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +50 +20 +50 +88 +04 +04 +ENDCHAR +STARTCHAR uni04B4 +ENCODING 1204 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +E8 +48 +48 +48 +48 +48 +48 +78 +08 +08 +ENDCHAR +STARTCHAR uni04B5 +ENCODING 1205 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +E8 +48 +48 +48 +48 +78 +08 +08 +ENDCHAR +STARTCHAR uni04B6 +ENCODING 1206 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +90 +90 +90 +90 +90 +70 +10 +18 +08 +08 +ENDCHAR +STARTCHAR uni04B7 +ENCODING 1207 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +90 +90 +90 +70 +10 +18 +08 +08 +ENDCHAR +STARTCHAR uni04B8 +ENCODING 1208 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +88 +A8 +A8 +78 +28 +28 +08 +00 +00 +ENDCHAR +STARTCHAR uni04B9 +ENCODING 1209 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +88 +88 +A8 +78 +28 +08 +00 +00 +ENDCHAR +STARTCHAR uni04BA +ENCODING 1210 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +F0 +88 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni04BB +ENCODING 1211 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +40 +40 +70 +48 +48 +48 +00 +00 +ENDCHAR +STARTCHAR uni04BC +ENCODING 1212 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +30 +48 +48 +48 +F8 +40 +48 +30 +00 +00 +ENDCHAR +STARTCHAR uni04BD +ENCODING 1213 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +48 +F8 +40 +48 +30 +00 +00 +ENDCHAR +STARTCHAR uni04BE +ENCODING 1214 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +30 +48 +48 +48 +F8 +40 +48 +30 +20 +10 +ENDCHAR +STARTCHAR uni04BF +ENCODING 1215 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +48 +F8 +40 +48 +30 +20 +10 +ENDCHAR +STARTCHAR uni04C0 +ENCODING 1216 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +20 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni04C1 +ENCODING 1217 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +88 +70 +00 +A8 +A8 +A8 +70 +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni04C2 +ENCODING 1218 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +70 +00 +A8 +70 +20 +70 +A8 +00 +00 +ENDCHAR +STARTCHAR uni04C3 +ENCODING 1219 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +90 +A0 +C0 +A0 +90 +88 +08 +30 +ENDCHAR +STARTCHAR uni04C4 +ENCODING 1220 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +90 +A0 +C0 +A0 +90 +10 +60 +ENDCHAR +STARTCHAR uni04C5 +ENCODING 1221 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +38 +48 +48 +48 +48 +48 +88 +88 +10 +10 +ENDCHAR +STARTCHAR uni04C6 +ENCODING 1222 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +48 +48 +48 +88 +10 +10 +ENDCHAR +STARTCHAR uni04C7 +ENCODING 1223 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +88 +88 +F8 +88 +88 +88 +88 +08 +30 +ENDCHAR +STARTCHAR uni04C8 +ENCODING 1224 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +F8 +88 +88 +08 +30 +ENDCHAR +STARTCHAR uni04C9 +ENCODING 1225 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +88 +88 +F8 +88 +88 +88 +88 +10 +10 +ENDCHAR +STARTCHAR uni04CA +ENCODING 1226 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +F8 +88 +88 +10 +10 +ENDCHAR +STARTCHAR uni04CB +ENCODING 1227 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +88 +88 +88 +88 +78 +08 +18 +10 +10 +ENDCHAR +STARTCHAR uni04CC +ENCODING 1228 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +88 +88 +88 +78 +08 +18 +10 +10 +ENDCHAR +STARTCHAR uni04CD +ENCODING 1229 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +D8 +D8 +A8 +A8 +88 +88 +88 +10 +10 +ENDCHAR +STARTCHAR uni04CE +ENCODING 1230 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +D8 +A8 +88 +88 +10 +10 +ENDCHAR +STARTCHAR uni04CF +ENCODING 1231 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +40 +40 +40 +40 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni04D0 +ENCODING 1232 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +88 +70 +00 +70 +88 +88 +F8 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni04D1 +ENCODING 1233 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +70 +00 +70 +08 +78 +88 +78 +00 +00 +ENDCHAR +STARTCHAR uni04D2 +ENCODING 1234 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni04D3 +ENCODING 1235 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +00 +70 +08 +78 +88 +78 +00 +00 +ENDCHAR +STARTCHAR uni04D4 +ENCODING 1236 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +A0 +A0 +F0 +A0 +A0 +B8 +00 +00 +ENDCHAR +STARTCHAR uni04D5 +ENCODING 1237 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +28 +70 +A8 +70 +00 +00 +ENDCHAR +STARTCHAR uni04D6 +ENCODING 1238 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +88 +70 +00 +F8 +80 +F0 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR uni04D7 +ENCODING 1239 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +70 +00 +70 +88 +F0 +80 +70 +00 +00 +ENDCHAR +STARTCHAR uni04D8 +ENCODING 1240 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +08 +F8 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR afii10846 +ENCODING 1241 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +08 +F8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni04DA +ENCODING 1242 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +70 +88 +08 +F8 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni04DB +ENCODING 1243 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +00 +70 +08 +F8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni04DC +ENCODING 1244 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +A8 +A8 +A8 +70 +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni04DD +ENCODING 1245 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +00 +A8 +70 +20 +70 +A8 +00 +00 +ENDCHAR +STARTCHAR uni04DE +ENCODING 1246 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +70 +88 +08 +30 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni04DF +ENCODING 1247 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +00 +70 +88 +30 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni04E0 +ENCODING 1248 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +10 +20 +70 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni04E1 +ENCODING 1249 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +10 +20 +70 +08 +88 +70 +ENDCHAR +STARTCHAR uni04E2 +ENCODING 1250 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +00 +88 +88 +98 +A8 +C8 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni04E3 +ENCODING 1251 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +00 +88 +98 +A8 +C8 +88 +00 +00 +ENDCHAR +STARTCHAR uni04E4 +ENCODING 1252 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +88 +88 +98 +A8 +C8 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni04E5 +ENCODING 1253 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +00 +88 +98 +A8 +C8 +88 +00 +00 +ENDCHAR +STARTCHAR uni04E6 +ENCODING 1254 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni04E7 +ENCODING 1255 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni04E8 +ENCODING 1256 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +F8 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni04E9 +ENCODING 1257 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +F8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni04EA +ENCODING 1258 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +70 +88 +88 +F8 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni04EB +ENCODING 1259 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +00 +70 +88 +F8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni04EC +ENCODING 1260 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +E0 +10 +08 +78 +08 +10 +E0 +00 +00 +ENDCHAR +STARTCHAR uni04ED +ENCODING 1261 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +00 +70 +08 +38 +08 +70 +00 +00 +ENDCHAR +STARTCHAR uni04EE +ENCODING 1262 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +00 +88 +88 +98 +68 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni04EF +ENCODING 1263 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +00 +88 +88 +88 +78 +08 +88 +70 +ENDCHAR +STARTCHAR uni04F0 +ENCODING 1264 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +88 +88 +98 +68 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni04F1 +ENCODING 1265 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +00 +88 +88 +88 +78 +08 +88 +70 +ENDCHAR +STARTCHAR uni04F2 +ENCODING 1266 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +48 +90 +00 +88 +88 +98 +68 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni04F3 +ENCODING 1267 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +48 +90 +00 +88 +88 +88 +78 +08 +88 +70 +ENDCHAR +STARTCHAR uni04F4 +ENCODING 1268 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +88 +88 +88 +78 +08 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni04F5 +ENCODING 1269 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +00 +88 +88 +78 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni04F6 +ENCODING 1270 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +80 +80 +80 +80 +80 +C0 +40 +00 +ENDCHAR +STARTCHAR uni04F7 +ENCODING 1271 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +40 +40 +40 +60 +20 +00 +ENDCHAR +STARTCHAR uni04F8 +ENCODING 1272 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +88 +88 +88 +C8 +A8 +A8 +C8 +00 +00 +ENDCHAR +STARTCHAR uni04F9 +ENCODING 1273 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +00 +88 +88 +C8 +A8 +C8 +00 +00 +ENDCHAR +STARTCHAR uni04FA +ENCODING 1274 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +40 +40 +E0 +40 +40 +60 +20 +40 +ENDCHAR +STARTCHAR uni04FB +ENCODING 1275 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +40 +E0 +40 +60 +20 +40 +ENDCHAR +STARTCHAR uni04FC +ENCODING 1276 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +50 +20 +50 +88 +88 +08 +10 +ENDCHAR +STARTCHAR uni04FD +ENCODING 1277 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +50 +20 +50 +88 +08 +10 +ENDCHAR +STARTCHAR uni04FE +ENCODING 1278 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +50 +F8 +50 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni04FF +ENCODING 1279 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +50 +F8 +50 +88 +00 +00 +ENDCHAR +STARTCHAR uni0500 +ENCODING 1280 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +08 +78 +88 +88 +88 +78 +00 +00 +ENDCHAR +STARTCHAR uni0501 +ENCODING 1281 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +08 +38 +48 +48 +48 +38 +00 +00 +ENDCHAR +STARTCHAR uni0502 +ENCODING 1282 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +60 +A8 +A8 +A8 +70 +00 +00 +ENDCHAR +STARTCHAR uni0503 +ENCODING 1283 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +20 +60 +A8 +A8 +70 +00 +00 +ENDCHAR +STARTCHAR uni0504 +ENCODING 1284 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +C0 +20 +20 +C0 +28 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni0505 +ENCODING 1285 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +C0 +20 +20 +48 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni0506 +ENCODING 1286 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +C0 +20 +20 +C0 +20 +20 +30 +10 +10 +ENDCHAR +STARTCHAR uni0507 +ENCODING 1287 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +C0 +20 +20 +40 +20 +30 +10 +10 +ENDCHAR +STARTCHAR uni0508 +ENCODING 1288 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +A0 +A0 +A8 +A8 +A8 +90 +00 +00 +ENDCHAR +STARTCHAR uni0509 +ENCODING 1289 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +A0 +A0 +A8 +90 +00 +00 +ENDCHAR +STARTCHAR uni050A +ENCODING 1290 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A0 +A0 +A0 +E8 +A8 +A8 +90 +00 +00 +ENDCHAR +STARTCHAR uni050B +ENCODING 1291 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A0 +A0 +E8 +A8 +90 +00 +00 +ENDCHAR +STARTCHAR uni050C +ENCODING 1292 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +80 +98 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni050D +ENCODING 1293 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +80 +98 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni050E +ENCODING 1294 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +20 +20 +28 +28 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni050F +ENCODING 1295 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +20 +20 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni0510 +ENCODING 1296 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +88 +80 +60 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0511 +ENCODING 1297 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +88 +60 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0512 +ENCODING 1298 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +FC +48 +48 +48 +48 +A8 +10 +00 +00 +ENDCHAR +STARTCHAR uni0513 +ENCODING 1299 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +FC +48 +48 +48 +88 +10 +00 +ENDCHAR +STARTCHAR uni0514 +ENCODING 1300 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +D4 +54 +54 +48 +54 +54 +94 +00 +00 +ENDCHAR +STARTCHAR uni0515 +ENCODING 1301 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +D4 +54 +48 +54 +94 +00 +00 +ENDCHAR +STARTCHAR uni0516 +ENCODING 1302 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +C8 +A8 +B0 +D0 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni0517 +ENCODING 1303 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +C8 +B0 +A0 +D0 +88 +80 +00 +ENDCHAR +STARTCHAR uni0518 +ENCODING 1304 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +A0 +A0 +70 +A0 +A0 +B8 +00 +00 +ENDCHAR +STARTCHAR uni0519 +ENCODING 1305 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +A8 +70 +A0 +98 +00 +00 +ENDCHAR +STARTCHAR uni051A +ENCODING 1306 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +88 +A8 +90 +68 +00 +00 +ENDCHAR +STARTCHAR uni051B +ENCODING 1307 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +88 +88 +88 +78 +08 +08 +ENDCHAR +STARTCHAR uni051C +ENCODING 1308 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +88 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni051D +ENCODING 1309 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni051E +ENCODING 1310 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +90 +A8 +C0 +A0 +90 +88 +00 +00 +ENDCHAR +STARTCHAR uni051F +ENCODING 1311 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A8 +90 +E8 +90 +88 +00 +00 +ENDCHAR +STARTCHAR uni0520 +ENCODING 1312 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +D0 +50 +50 +58 +54 +54 +94 +04 +08 +ENDCHAR +STARTCHAR uni0521 +ENCODING 1313 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +D0 +50 +58 +54 +94 +04 +00 +ENDCHAR +STARTCHAR uni0522 +ENCODING 1314 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A0 +A0 +A0 +F0 +A8 +A8 +A8 +08 +10 +ENDCHAR +STARTCHAR uni0523 +ENCODING 1315 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A0 +A0 +F0 +A8 +A8 +08 +10 +ENDCHAR +STARTCHAR uni0531 +ENCODING 1329 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +A0 +A0 +A0 +A0 +A0 +A0 +B0 +48 +00 +00 +ENDCHAR +STARTCHAR uni0532 +ENCODING 1330 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +88 +80 +80 +F0 +88 +80 +00 +00 +ENDCHAR +STARTCHAR uni0533 +ENCODING 1331 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +A0 +A0 +A0 +70 +28 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni0534 +ENCODING 1332 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +A0 +A0 +20 +30 +28 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni0535 +ENCODING 1333 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +80 +80 +F0 +88 +80 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0536 +ENCODING 1334 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +60 +90 +90 +70 +10 +A0 +F0 +88 +00 +00 +ENDCHAR +STARTCHAR uni0537 +ENCODING 1335 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +80 +80 +F0 +88 +80 +80 +80 +70 +08 +10 +ENDCHAR +STARTCHAR uni0538 +ENCODING 1336 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +60 +90 +90 +80 +80 +80 +80 +F0 +08 +00 +ENDCHAR +STARTCHAR uni0539 +ENCODING 1337 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +60 +90 +B8 +D0 +D0 +A0 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni053A +ENCODING 1338 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +10 +10 +78 +90 +90 +90 +60 +00 +00 +ENDCHAR +STARTCHAR uni053B +ENCODING 1339 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +80 +80 +80 +F0 +88 +88 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni053C +ENCODING 1340 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +80 +80 +80 +80 +80 +80 +80 +70 +08 +10 +ENDCHAR +STARTCHAR uni053D +ENCODING 1341 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +80 +80 +E8 +A8 +A8 +90 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni053E +ENCODING 1342 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F8 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni053F +ENCODING 1343 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +80 +88 +88 +88 +88 +78 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni0540 +ENCODING 1344 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +10 +20 +40 +80 +C0 +30 +08 +00 +ENDCHAR +STARTCHAR uni0541 +ENCODING 1345 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +30 +48 +48 +38 +08 +70 +90 +68 +00 +00 +ENDCHAR +STARTCHAR uni0542 +ENCODING 1346 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +A0 +A0 +20 +20 +20 +20 +30 +08 +00 +ENDCHAR +STARTCHAR uni0543 +ENCODING 1347 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +50 +20 +50 +50 +88 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni0544 +ENCODING 1348 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +B8 +A8 +A0 +A0 +A0 +A0 +A0 +40 +00 +00 +ENDCHAR +STARTCHAR uni0545 +ENCODING 1349 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +A8 +30 +28 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0546 +ENCODING 1350 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +80 +C0 +40 +40 +40 +48 +30 +00 +00 +ENDCHAR +STARTCHAR uni0547 +ENCODING 1351 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +F0 +40 +80 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0548 +ENCODING 1352 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +88 +88 +88 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni0549 +ENCODING 1353 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +88 +88 +78 +10 +20 +F8 +00 +00 +ENDCHAR +STARTCHAR uni054A +ENCODING 1354 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +A8 +A8 +A8 +28 +28 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni054B +ENCODING 1355 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +60 +90 +90 +50 +30 +A0 +F0 +88 +00 +00 +ENDCHAR +STARTCHAR uni054C +ENCODING 1356 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +A0 +A0 +B0 +A8 +A8 +A0 +A0 +00 +00 +ENDCHAR +STARTCHAR uni054D +ENCODING 1357 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +88 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni054E +ENCODING 1358 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +A0 +A0 +A0 +A0 +60 +20 +30 +08 +00 +ENDCHAR +STARTCHAR uni054F +ENCODING 1359 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +80 +70 +08 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0550 +ENCODING 1360 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +88 +80 +80 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni0551 +ENCODING 1361 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +88 +70 +88 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0552 +ENCODING 1362 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +80 +80 +80 +E0 +90 +90 +88 +80 +00 +00 +ENDCHAR +STARTCHAR uni0553 +ENCODING 1363 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +70 +A8 +A8 +A8 +70 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni0554 +ENCODING 1364 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +28 +28 +30 +A0 +70 +28 +20 +00 +00 +ENDCHAR +STARTCHAR uni0555 +ENCODING 1365 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0556 +ENCODING 1366 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +A0 +A0 +70 +28 +A8 +A8 +70 +00 +00 +ENDCHAR +STARTCHAR uni0559 +ENCODING 1369 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +40 +40 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni055A +ENCODING 1370 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +30 +10 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni055B +ENCODING 1371 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni055C +ENCODING 1372 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +08 +70 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni055D +ENCODING 1373 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni055E +ENCODING 1374 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +88 +A8 +A8 +10 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni055F +ENCODING 1375 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +88 +70 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0561 +ENCODING 1377 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +88 +A8 +A8 +58 +00 +00 +ENDCHAR +STARTCHAR uni0562 +ENCODING 1378 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F0 +88 +88 +80 +F8 +80 +80 +ENDCHAR +STARTCHAR uni0563 +ENCODING 1379 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +90 +90 +90 +78 +10 +10 +ENDCHAR +STARTCHAR uni0564 +ENCODING 1380 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A0 +D0 +90 +90 +98 +10 +10 +ENDCHAR +STARTCHAR uni0565 +ENCODING 1381 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +80 +80 +80 +F8 +80 +88 +C8 +B0 +00 +00 +ENDCHAR +STARTCHAR uni0566 +ENCODING 1382 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +90 +90 +90 +70 +10 +18 +ENDCHAR +STARTCHAR uni0567 +ENCODING 1383 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +80 +80 +80 +F8 +80 +80 +80 +70 +08 +00 +ENDCHAR +STARTCHAR uni0568 +ENCODING 1384 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +B0 +C8 +88 +88 +88 +80 +F8 +ENDCHAR +STARTCHAR uni0569 +ENCODING 1385 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A0 +D0 +90 +B8 +D0 +A0 +80 +ENDCHAR +STARTCHAR uni056A +ENCODING 1386 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +10 +10 +78 +90 +90 +90 +60 +00 +00 +ENDCHAR +STARTCHAR uni056B +ENCODING 1387 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +80 +80 +80 +A0 +D0 +90 +90 +90 +80 +80 +ENDCHAR +STARTCHAR uni056C +ENCODING 1388 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +C0 +40 +40 +40 +40 +40 +30 +ENDCHAR +STARTCHAR uni056D +ENCODING 1389 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +E8 +A8 +A8 +A8 +90 +80 +80 +ENDCHAR +STARTCHAR uni056E +ENCODING 1390 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +80 +40 +20 +78 +90 +90 +90 +60 +00 +00 +ENDCHAR +STARTCHAR uni056F +ENCODING 1391 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +80 +80 +80 +88 +88 +88 +88 +78 +08 +08 +ENDCHAR +STARTCHAR uni0570 +ENCODING 1392 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +80 +80 +80 +B0 +C8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni0571 +ENCODING 1393 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +40 +20 +78 +88 +88 +88 +78 +00 +00 +ENDCHAR +STARTCHAR uni0572 +ENCODING 1394 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A0 +D0 +90 +90 +90 +10 +18 +ENDCHAR +STARTCHAR uni0573 +ENCODING 1395 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +30 +48 +40 +F8 +48 +48 +58 +28 +00 +00 +ENDCHAR +STARTCHAR uni0574 +ENCODING 1396 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +10 +10 +90 +90 +90 +B0 +50 +00 +00 +ENDCHAR +STARTCHAR uni0575 +ENCODING 1397 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +18 +08 +08 +08 +88 +88 +70 +ENDCHAR +STARTCHAR uni0576 +ENCODING 1398 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +80 +98 +88 +88 +98 +68 +00 +00 +ENDCHAR +STARTCHAR uni0577 +ENCODING 1399 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +48 +08 +08 +10 +20 +40 +38 +ENDCHAR +STARTCHAR uni0578 +ENCODING 1400 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +B0 +C8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni0579 +ENCODING 1401 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +40 +20 +20 +40 +40 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR uni057A +ENCODING 1402 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +A8 +A8 +A8 +58 +08 +08 +ENDCHAR +STARTCHAR uni057B +ENCODING 1403 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +88 +50 +20 +40 +38 +ENDCHAR +STARTCHAR uni057C +ENCODING 1404 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A0 +D0 +90 +90 +98 +00 +00 +ENDCHAR +STARTCHAR uni057D +ENCODING 1405 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +88 +98 +68 +00 +00 +ENDCHAR +STARTCHAR uni057E +ENCODING 1406 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +10 +90 +90 +90 +90 +70 +10 +18 +ENDCHAR +STARTCHAR uni057F +ENCODING 1407 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +B0 +A8 +A8 +A8 +68 +00 +00 +ENDCHAR +STARTCHAR uni0580 +ENCODING 1408 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +B0 +C8 +88 +88 +88 +80 +80 +ENDCHAR +STARTCHAR uni0581 +ENCODING 1409 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +88 +78 +08 +88 +70 +ENDCHAR +STARTCHAR uni0582 +ENCODING 1410 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +40 +40 +40 +40 +38 +00 +00 +ENDCHAR +STARTCHAR uni0583 +ENCODING 1411 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +20 +B0 +A8 +A8 +A8 +68 +20 +20 +ENDCHAR +STARTCHAR uni0584 +ENCODING 1412 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +30 +48 +48 +70 +40 +F8 +40 +ENDCHAR +STARTCHAR uni0585 +ENCODING 1413 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0586 +ENCODING 1414 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +60 +A0 +A0 +70 +28 +28 +A8 +70 +20 +20 +ENDCHAR +STARTCHAR uni0587 +ENCODING 1415 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +90 +90 +90 +90 +68 +00 +00 +ENDCHAR +STARTCHAR uni0589 +ENCODING 1417 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +30 +00 +30 +30 +00 +00 +00 +ENDCHAR +STARTCHAR uni058A +ENCODING 1418 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +40 +38 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0591 +ENCODING 1425 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +50 +ENDCHAR +STARTCHAR uni0592 +ENCODING 1426 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +88 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0593 +ENCODING 1427 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +10 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0594 +ENCODING 1428 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +00 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0595 +ENCODING 1429 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +40 +50 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0596 +ENCODING 1430 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +10 +ENDCHAR +STARTCHAR uni0597 +ENCODING 1431 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +70 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0598 +ENCODING 1432 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +A8 +90 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0599 +ENCODING 1433 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +80 +40 +40 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni059A +ENCODING 1434 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +08 +04 +ENDCHAR +STARTCHAR uni059B +ENCODING 1435 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +10 +ENDCHAR +STARTCHAR uni059C +ENCODING 1436 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +20 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni059D +ENCODING 1437 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +04 +08 +08 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni059E +ENCODING 1438 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +24 +28 +28 +08 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni059F +ENCODING 1439 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +A8 +50 +50 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni05A0 +ENCODING 1440 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +28 +10 +10 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni05A1 +ENCODING 1441 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +D0 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni05A2 +ENCODING 1442 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +20 +ENDCHAR +STARTCHAR uni05A3 +ENCODING 1443 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +70 +ENDCHAR +STARTCHAR uni05A4 +ENCODING 1444 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +40 +20 +ENDCHAR +STARTCHAR uni05A5 +ENCODING 1445 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +20 +ENDCHAR +STARTCHAR uni05A6 +ENCODING 1446 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +90 +ENDCHAR +STARTCHAR uni05A7 +ENCODING 1447 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +10 +20 +10 +20 +ENDCHAR +STARTCHAR uni05A8 +ENCODING 1448 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +40 +20 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni05A9 +ENCODING 1449 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +40 +A0 +40 +40 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni05AA +ENCODING 1450 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +20 +ENDCHAR +STARTCHAR uni05AB +ENCODING 1451 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +40 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni05AC +ENCODING 1452 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +10 +70 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni05AD +ENCODING 1453 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +04 +ENDCHAR +STARTCHAR uni05AE +ENCODING 1454 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +50 +A0 +80 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni05AF +ENCODING 1455 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +50 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR afii57799 +ENCODING 1456 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +20 +ENDCHAR +STARTCHAR afii57801 +ENCODING 1457 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +A8 +00 +48 +ENDCHAR +STARTCHAR afii57800 +ENCODING 1458 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +E0 +08 +ENDCHAR +STARTCHAR afii57802 +ENCODING 1459 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +E0 +48 +ENDCHAR +STARTCHAR afii57793 +ENCODING 1460 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +ENDCHAR +STARTCHAR afii57794 +ENCODING 1461 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +ENDCHAR +STARTCHAR afii57795 +ENCODING 1462 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +88 +20 +ENDCHAR +STARTCHAR afii57798 +ENCODING 1463 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +ENDCHAR +STARTCHAR afii57797 +ENCODING 1464 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +20 +ENDCHAR +STARTCHAR afii57806 +ENCODING 1465 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni05BA +ENCODING 1466 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +C0 +C0 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR afii57796 +ENCODING 1467 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +20 +08 +ENDCHAR +STARTCHAR afii57807 +ENCODING 1468 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR afii57839 +ENCODING 1469 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +20 +ENDCHAR +STARTCHAR afii57645 +ENCODING 1470 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR afii57841 +ENCODING 1471 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR afii57842 +ENCODING 1472 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR afii57804 +ENCODING 1473 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR afii57803 +ENCODING 1474 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR afii57658 +ENCODING 1475 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +20 +00 +00 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni05C4 +ENCODING 1476 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni05C5 +ENCODING 1477 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +60 +ENDCHAR +STARTCHAR uni05C6 +ENCODING 1478 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +40 +40 +40 +70 +00 +00 +ENDCHAR +STARTCHAR uni05C7 +ENCODING 1479 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +20 +20 +ENDCHAR +STARTCHAR afii57664 +ENCODING 1488 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +90 +48 +68 +90 +C8 +00 +00 +ENDCHAR +STARTCHAR afii57665 +ENCODING 1489 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F0 +10 +10 +10 +F8 +00 +00 +ENDCHAR +STARTCHAR afii57666 +ENCODING 1490 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +40 +20 +10 +28 +48 +00 +00 +ENDCHAR +STARTCHAR afii57667 +ENCODING 1491 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR afii57668 +ENCODING 1492 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +08 +08 +88 +88 +00 +00 +ENDCHAR +STARTCHAR afii57669 +ENCODING 1493 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +30 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR afii57670 +ENCODING 1494 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +20 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR afii57671 +ENCODING 1495 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +48 +48 +48 +48 +00 +00 +ENDCHAR +STARTCHAR afii57672 +ENCODING 1496 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +98 +A8 +88 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR afii57673 +ENCODING 1497 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +30 +10 +10 +00 +00 +00 +00 +ENDCHAR +STARTCHAR afii57674 +ENCODING 1498 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR afii57675 +ENCODING 1499 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +08 +08 +08 +F0 +00 +00 +ENDCHAR +STARTCHAR afii57676 +ENCODING 1500 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +80 +80 +80 +F8 +08 +08 +10 +60 +00 +00 +ENDCHAR +STARTCHAR afii57677 +ENCODING 1501 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +48 +48 +48 +78 +00 +00 +ENDCHAR +STARTCHAR afii57678 +ENCODING 1502 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +90 +A8 +48 +88 +B8 +00 +00 +ENDCHAR +STARTCHAR afii57679 +ENCODING 1503 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +30 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR afii57680 +ENCODING 1504 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +18 +08 +08 +08 +78 +00 +00 +ENDCHAR +STARTCHAR afii57681 +ENCODING 1505 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +48 +48 +50 +60 +00 +00 +ENDCHAR +STARTCHAR afii57682 +ENCODING 1506 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +D8 +48 +48 +50 +E0 +00 +00 +ENDCHAR +STARTCHAR afii57683 +ENCODING 1507 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +48 +48 +08 +08 +08 +08 +ENDCHAR +STARTCHAR afii57684 +ENCODING 1508 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +48 +48 +08 +F0 +00 +00 +ENDCHAR +STARTCHAR afii57685 +ENCODING 1509 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +90 +48 +48 +50 +60 +40 +40 +ENDCHAR +STARTCHAR afii57686 +ENCODING 1510 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +90 +48 +28 +10 +F8 +00 +00 +ENDCHAR +STARTCHAR afii57687 +ENCODING 1511 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +08 +88 +88 +B0 +80 +80 +ENDCHAR +STARTCHAR afii57688 +ENCODING 1512 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F0 +08 +08 +08 +08 +00 +00 +ENDCHAR +STARTCHAR afii57689 +ENCODING 1513 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A8 +A8 +E8 +88 +F0 +00 +00 +ENDCHAR +STARTCHAR afii57690 +ENCODING 1514 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +48 +48 +48 +C8 +00 +00 +ENDCHAR +STARTCHAR afii57716 +ENCODING 1520 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +D8 +48 +48 +48 +48 +00 +00 +ENDCHAR +STARTCHAR afii57717 +ENCODING 1521 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +D8 +48 +48 +08 +08 +00 +00 +ENDCHAR +STARTCHAR afii57718 +ENCODING 1522 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +D8 +48 +48 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni05F3 +ENCODING 1523 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +20 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni05F4 +ENCODING 1524 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +48 +90 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1680 +ENCODING 5760 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FC +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1681 +ENCODING 5761 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FC +08 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni1682 +ENCODING 5762 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FC +28 +28 +28 +00 +00 +ENDCHAR +STARTCHAR uni1683 +ENCODING 5763 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FC +38 +38 +38 +00 +00 +ENDCHAR +STARTCHAR uni1684 +ENCODING 5764 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FC +78 +78 +78 +00 +00 +ENDCHAR +STARTCHAR uni1685 +ENCODING 5765 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FC +F8 +F8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni1686 +ENCODING 5766 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +08 +08 +FC +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1687 +ENCODING 5767 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +28 +28 +28 +FC +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1688 +ENCODING 5768 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +38 +38 +38 +FC +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1689 +ENCODING 5769 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +78 +78 +FC +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni168A +ENCODING 5770 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +F8 +F8 +FC +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni168B +ENCODING 5771 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +10 +10 +FC +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni168C +ENCODING 5772 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +28 +28 +28 +FC +50 +50 +50 +00 +00 +ENDCHAR +STARTCHAR uni168D +ENCODING 5773 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +38 +38 +38 +FC +70 +70 +70 +00 +00 +ENDCHAR +STARTCHAR uni168E +ENCODING 5774 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +3C +3C +3C +FC +78 +78 +78 +00 +00 +ENDCHAR +STARTCHAR uni168F +ENCODING 5775 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +7C +7C +7C +FC +F8 +F8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni1690 +ENCODING 5776 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +FC +10 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1691 +ENCODING 5777 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +28 +FC +28 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1692 +ENCODING 5778 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +FC +38 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1693 +ENCODING 5779 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +FC +78 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1694 +ENCODING 5780 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +FC +F8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1695 +ENCODING 5781 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +28 +28 +10 +FC +10 +28 +28 +00 +00 +ENDCHAR +STARTCHAR uni1696 +ENCODING 5782 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +48 +84 +FC +84 +48 +30 +00 +00 +ENDCHAR +STARTCHAR uni1697 +ENCODING 5783 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FC +40 +58 +48 +78 +00 +ENDCHAR +STARTCHAR uni1698 +ENCODING 5784 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FC +D8 +70 +D8 +00 +00 +ENDCHAR +STARTCHAR uni1699 +ENCODING 5785 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +28 +7C +28 +7C +28 +7C +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni169A +ENCODING 5786 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FC +00 +78 +00 +00 +00 +ENDCHAR +STARTCHAR uni169B +ENCODING 5787 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +40 +20 +1C +20 +40 +80 +00 +00 +ENDCHAR +STARTCHAR uni169C +ENCODING 5788 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +04 +08 +F0 +08 +04 +00 +00 +00 +ENDCHAR +STARTCHAR uni16A0 +ENCODING 5792 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +50 +60 +48 +50 +60 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni16A1 +ENCODING 5793 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +40 +48 +50 +60 +48 +50 +60 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni16A2 +ENCODING 5794 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +80 +C0 +A0 +90 +88 +88 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni16A3 +ENCODING 5795 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +80 +C0 +A0 +90 +A8 +A8 +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni16A4 +ENCODING 5796 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +80 +C0 +A0 +90 +88 +A8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni16A5 +ENCODING 5797 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +80 +C0 +A0 +90 +C8 +A8 +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni16A6 +ENCODING 5798 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +40 +40 +60 +50 +48 +50 +60 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni16A7 +ENCODING 5799 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +40 +40 +60 +50 +68 +50 +60 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni16A8 +ENCODING 5800 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +40 +60 +50 +48 +60 +50 +48 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni16A9 +ENCODING 5801 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C8 +B0 +80 +C8 +B0 +80 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni16AA +ENCODING 5802 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +88 +D0 +A0 +80 +C0 +B0 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni16AB +ENCODING 5803 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +40 +60 +50 +48 +60 +50 +48 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni16AC +ENCODING 5804 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +A0 +60 +30 +A8 +60 +30 +28 +20 +00 +00 +ENDCHAR +STARTCHAR uni16AD +ENCODING 5805 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +40 +40 +40 +60 +50 +40 +60 +50 +40 +00 +00 +ENDCHAR +STARTCHAR uni16AE +ENCODING 5806 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +20 +60 +A0 +20 +60 +A0 +20 +00 +00 +ENDCHAR +STARTCHAR uni16AF +ENCODING 5807 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +28 +30 +60 +A8 +30 +60 +A0 +20 +00 +00 +ENDCHAR +STARTCHAR uni16B0 +ENCODING 5808 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +28 +30 +60 +A0 +20 +60 +A0 +20 +00 +00 +ENDCHAR +STARTCHAR uni16B1 +ENCODING 5809 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +B0 +88 +B0 +C0 +A0 +90 +88 +80 +00 +00 +ENDCHAR +STARTCHAR uni16B2 +ENCODING 5810 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +10 +20 +40 +20 +10 +08 +00 +00 +00 +ENDCHAR +STARTCHAR uni16B3 +ENCODING 5811 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +80 +80 +80 +80 +80 +C0 +A0 +90 +88 +00 +00 +ENDCHAR +STARTCHAR uni16B4 +ENCODING 5812 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +88 +90 +A0 +C0 +80 +80 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni16B5 +ENCODING 5813 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +88 +90 +A0 +C0 +80 +80 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni16B6 +ENCODING 5814 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +44 +48 +50 +E0 +40 +40 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni16B7 +ENCODING 5815 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +88 +88 +50 +50 +20 +50 +50 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni16B8 +ENCODING 5816 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +88 +88 +50 +50 +A8 +50 +50 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni16B9 +ENCODING 5817 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +B0 +88 +B0 +C0 +80 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni16BA +ENCODING 5818 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +88 +88 +88 +C8 +A8 +98 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni16BB +ENCODING 5819 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +88 +88 +C8 +A8 +D8 +A8 +98 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni16BC +ENCODING 5820 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +A8 +70 +20 +70 +A8 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16BD +ENCODING 5821 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +20 +70 +70 +70 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16BE +ENCODING 5822 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +A0 +60 +20 +30 +28 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16BF +ENCODING 5823 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +20 +20 +30 +28 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16C0 +ENCODING 5824 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +A0 +70 +70 +70 +28 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16C1 +ENCODING 5825 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +20 +20 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16C2 +ENCODING 5826 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +20 +70 +70 +70 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16C3 +ENCODING 5827 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +40 +90 +48 +10 +20 +00 +00 +ENDCHAR +STARTCHAR uni16C4 +ENCODING 5828 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +20 +70 +A8 +70 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16C5 +ENCODING 5829 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +28 +30 +20 +60 +A0 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16C6 +ENCODING 5830 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +20 +20 +20 +60 +A0 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16C7 +ENCODING 5831 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +30 +28 +20 +20 +20 +A0 +60 +20 +00 +00 +ENDCHAR +STARTCHAR uni16C8 +ENCODING 5832 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +88 +D0 +A0 +80 +80 +80 +A0 +D0 +88 +00 +00 +ENDCHAR +STARTCHAR uni16C9 +ENCODING 5833 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +A8 +70 +20 +20 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16CA +ENCODING 5834 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +20 +40 +20 +10 +20 +40 +20 +10 +00 +00 +ENDCHAR +STARTCHAR uni16CB +ENCODING 5835 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +80 +80 +88 +98 +A8 +C8 +88 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni16CC +ENCODING 5836 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +20 +20 +20 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni16CD +ENCODING 5837 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +20 +20 +70 +70 +70 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni16CE +ENCODING 5838 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +20 +A8 +70 +20 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni16CF +ENCODING 5839 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +70 +A8 +20 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16D0 +ENCODING 5840 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +30 +50 +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni16D1 +ENCODING 5841 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +30 +50 +10 +10 +38 +38 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni16D2 +ENCODING 5842 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +A0 +90 +A0 +C0 +A0 +90 +A0 +C0 +00 +00 +ENDCHAR +STARTCHAR uni16D3 +ENCODING 5843 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +28 +30 +20 +28 +30 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16D4 +ENCODING 5844 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F0 +88 +A8 +88 +F0 +88 +A8 +88 +F0 +00 +00 +ENDCHAR +STARTCHAR uni16D5 +ENCODING 5845 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +88 +90 +A0 +C0 +80 +C0 +A0 +90 +88 +00 +00 +ENDCHAR +STARTCHAR uni16D6 +ENCODING 5846 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +88 +D8 +A8 +88 +88 +88 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni16D7 +ENCODING 5847 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +88 +D8 +A8 +D8 +88 +88 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni16D8 +ENCODING 5848 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +A8 +A8 +70 +20 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16D9 +ENCODING 5849 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +70 +70 +20 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16DA +ENCODING 5850 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +30 +28 +20 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16DB +ENCODING 5851 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +30 +28 +20 +70 +70 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16DC +ENCODING 5852 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +50 +88 +50 +20 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni16DD +ENCODING 5853 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +88 +50 +20 +50 +88 +50 +20 +50 +88 +00 +00 +ENDCHAR +STARTCHAR uni16DE +ENCODING 5854 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +88 +D8 +D8 +A8 +A8 +A8 +D8 +D8 +88 +00 +00 +ENDCHAR +STARTCHAR uni16DF +ENCODING 5855 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +50 +88 +88 +50 +20 +50 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni16E0 +ENCODING 5856 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +70 +20 +20 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16E1 +ENCODING 5857 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +A8 +70 +20 +70 +A8 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16E2 +ENCODING 5858 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +28 +30 +20 +20 +20 +20 +20 +60 +A0 +00 +00 +ENDCHAR +STARTCHAR uni16E3 +ENCODING 5859 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +20 +20 +20 +20 +20 +70 +A8 +00 +00 +ENDCHAR +STARTCHAR uni16E4 +ENCODING 5860 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +A8 +A8 +70 +A8 +A8 +A8 +70 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni16E5 +ENCODING 5861 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +88 +D8 +A8 +D8 +88 +D8 +A8 +D8 +88 +00 +00 +ENDCHAR +STARTCHAR uni16E6 +ENCODING 5862 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +20 +20 +20 +20 +70 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni16E7 +ENCODING 5863 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16E8 +ENCODING 5864 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +70 +A8 +20 +20 +20 +A8 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni16E9 +ENCODING 5865 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +68 +88 +68 +18 +08 +08 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni16EA +ENCODING 5866 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +40 +E0 +40 +50 +70 +50 +10 +38 +10 +00 +00 +ENDCHAR +STARTCHAR uni16EB +ENCODING 5867 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni16EC +ENCODING 5868 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +00 +00 +20 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni16ED +ENCODING 5869 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +F8 +20 +20 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni16EE +ENCODING 5870 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +30 +28 +20 +60 +A0 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16EF +ENCODING 5871 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +A8 +A8 +70 +20 +20 +20 +70 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni16F0 +ENCODING 5872 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +70 +A8 +A8 +A8 +70 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni1E02 +ENCODING 7682 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +00 +F0 +48 +48 +70 +48 +48 +F0 +00 +00 +ENDCHAR +STARTCHAR uni1E03 +ENCODING 7683 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +00 +80 +80 +F0 +88 +88 +88 +F0 +00 +00 +ENDCHAR +STARTCHAR uni1E04 +ENCODING 7684 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +48 +48 +70 +48 +48 +F0 +00 +20 +ENDCHAR +STARTCHAR uni1E05 +ENCODING 7685 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +F0 +88 +88 +88 +F0 +00 +20 +ENDCHAR +STARTCHAR uni1E06 +ENCODING 7686 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +48 +48 +70 +48 +48 +F0 +00 +F8 +ENDCHAR +STARTCHAR uni1E07 +ENCODING 7687 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +F0 +88 +88 +88 +F0 +00 +F8 +ENDCHAR +STARTCHAR uni1E0A +ENCODING 7690 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +00 +F0 +48 +48 +48 +48 +48 +F0 +00 +00 +ENDCHAR +STARTCHAR uni1E0B +ENCODING 7691 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +00 +08 +08 +78 +88 +88 +88 +78 +00 +00 +ENDCHAR +STARTCHAR uni1E0C +ENCODING 7692 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +48 +48 +48 +48 +48 +F0 +00 +20 +ENDCHAR +STARTCHAR uni1E0D +ENCODING 7693 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +08 +78 +88 +88 +88 +78 +00 +20 +ENDCHAR +STARTCHAR uni1E0E +ENCODING 7694 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +48 +48 +48 +48 +48 +F0 +00 +F8 +ENDCHAR +STARTCHAR uni1E0F +ENCODING 7695 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +08 +78 +88 +88 +88 +78 +00 +F8 +ENDCHAR +STARTCHAR uni1E10 +ENCODING 7696 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +48 +48 +48 +48 +48 +F0 +20 +40 +ENDCHAR +STARTCHAR uni1E11 +ENCODING 7697 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +08 +78 +88 +88 +88 +78 +20 +40 +ENDCHAR +STARTCHAR uni1E12 +ENCODING 7698 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F0 +48 +48 +48 +48 +48 +F0 +00 +20 +50 +ENDCHAR +STARTCHAR uni1E13 +ENCODING 7699 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +08 +78 +88 +88 +88 +78 +00 +20 +50 +ENDCHAR +STARTCHAR uni1E1E +ENCODING 7710 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +00 +F8 +80 +80 +F0 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni1E1F +ENCODING 7711 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +00 +30 +48 +40 +E0 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni1E30 +ENCODING 7728 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +88 +90 +A0 +C0 +A0 +90 +88 +00 +00 +ENDCHAR +STARTCHAR uni1E31 +ENCODING 7729 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +20 +80 +80 +88 +90 +E0 +90 +88 +00 +00 +ENDCHAR +STARTCHAR uni1E32 +ENCODING 7730 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +90 +A0 +C0 +A0 +90 +88 +00 +20 +ENDCHAR +STARTCHAR uni1E33 +ENCODING 7731 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +88 +90 +E0 +90 +88 +00 +20 +ENDCHAR +STARTCHAR uni1E34 +ENCODING 7732 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +90 +A0 +C0 +A0 +90 +88 +00 +F8 +ENDCHAR +STARTCHAR uni1E35 +ENCODING 7733 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +88 +90 +E0 +90 +88 +00 +F8 +ENDCHAR +STARTCHAR uni1E3E +ENCODING 7742 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +88 +D8 +A8 +88 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni1E3F +ENCODING 7743 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +D0 +A8 +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni1E40 +ENCODING 7744 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +00 +88 +D8 +A8 +88 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni1E41 +ENCODING 7745 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +D0 +A8 +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni1E42 +ENCODING 7746 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +D8 +A8 +88 +88 +88 +88 +00 +20 +ENDCHAR +STARTCHAR uni1E43 +ENCODING 7747 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +D0 +A8 +A8 +A8 +A8 +00 +20 +ENDCHAR +STARTCHAR uni1E54 +ENCODING 7764 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +F0 +88 +88 +F0 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni1E55 +ENCODING 7765 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +F0 +88 +88 +88 +F0 +80 +80 +ENDCHAR +STARTCHAR uni1E56 +ENCODING 7766 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +00 +F0 +88 +88 +F0 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni1E57 +ENCODING 7767 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +F0 +88 +88 +88 +F0 +80 +80 +ENDCHAR +STARTCHAR uni1E60 +ENCODING 7776 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +00 +70 +88 +80 +70 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1E61 +ENCODING 7777 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +78 +80 +70 +08 +F0 +00 +00 +ENDCHAR +STARTCHAR uni1E62 +ENCODING 7778 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +80 +70 +08 +88 +70 +00 +20 +ENDCHAR +STARTCHAR uni1E63 +ENCODING 7779 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +80 +70 +08 +F0 +00 +20 +ENDCHAR +STARTCHAR uni1E64 +ENCODING 7780 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +48 +10 +00 +70 +88 +80 +70 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1E65 +ENCODING 7781 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +48 +10 +00 +78 +80 +70 +08 +F0 +00 +00 +ENDCHAR +STARTCHAR uni1E66 +ENCODING 7782 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +00 +50 +20 +78 +80 +70 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1E67 +ENCODING 7783 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +00 +50 +20 +00 +78 +80 +70 +08 +F0 +00 +00 +ENDCHAR +STARTCHAR uni1E68 +ENCODING 7784 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +00 +70 +88 +80 +70 +08 +88 +70 +00 +20 +ENDCHAR +STARTCHAR uni1E69 +ENCODING 7785 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +78 +80 +70 +08 +F0 +00 +20 +ENDCHAR +STARTCHAR uni1E6A +ENCODING 7786 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +00 +F8 +20 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni1E6B +ENCODING 7787 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +00 +20 +20 +F8 +20 +20 +20 +18 +00 +00 +ENDCHAR +STARTCHAR uni1E6C +ENCODING 7788 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +20 +20 +20 +20 +20 +20 +00 +20 +ENDCHAR +STARTCHAR uni1E6D +ENCODING 7789 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +F8 +20 +20 +20 +18 +00 +20 +ENDCHAR +STARTCHAR uni1E6E +ENCODING 7790 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +20 +20 +20 +20 +20 +20 +00 +F8 +ENDCHAR +STARTCHAR uni1E6F +ENCODING 7791 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +F8 +20 +20 +20 +18 +00 +F8 +ENDCHAR +STARTCHAR uni1E70 +ENCODING 7792 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +20 +20 +20 +20 +20 +00 +20 +50 +ENDCHAR +STARTCHAR uni1E71 +ENCODING 7793 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +F8 +20 +20 +18 +00 +20 +50 +ENDCHAR +STARTCHAR Wgrave +ENCODING 7808 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +20 +00 +88 +88 +88 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR wgrave +ENCODING 7809 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +20 +00 +88 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR Wacute +ENCODING 7810 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +88 +88 +88 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR wacute +ENCODING 7811 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +88 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR Wdieresis +ENCODING 7812 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +88 +88 +88 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR wdieresis +ENCODING 7813 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +00 +88 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni1E86 +ENCODING 7814 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +00 +88 +88 +88 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni1E87 +ENCODING 7815 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +88 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni1E88 +ENCODING 7816 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +88 +88 +A8 +A8 +50 +00 +20 +ENDCHAR +STARTCHAR uni1E89 +ENCODING 7817 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +A8 +A8 +50 +00 +20 +ENDCHAR +STARTCHAR uni1E8A +ENCODING 7818 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +00 +88 +88 +50 +20 +50 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni1E8B +ENCODING 7819 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +88 +50 +20 +50 +88 +00 +00 +ENDCHAR +STARTCHAR uni1E8C +ENCODING 7820 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +88 +88 +50 +20 +50 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni1E8D +ENCODING 7821 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +00 +88 +50 +20 +50 +88 +00 +00 +ENDCHAR +STARTCHAR uni1E8E +ENCODING 7822 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +00 +88 +88 +50 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni1E8F +ENCODING 7823 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +88 +88 +88 +50 +20 +40 +80 +ENDCHAR +STARTCHAR Ygrave +ENCODING 7922 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +20 +00 +88 +88 +50 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR ygrave +ENCODING 7923 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +20 +00 +88 +88 +88 +50 +20 +40 +80 +ENDCHAR +STARTCHAR uni1EF4 +ENCODING 7924 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +50 +20 +20 +20 +20 +00 +20 +ENDCHAR +STARTCHAR uni1EF5 +ENCODING 7925 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +88 +50 +20 +40 +88 +ENDCHAR +STARTCHAR uni1EF6 +ENCODING 7926 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +10 +20 +88 +88 +50 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni1EF7 +ENCODING 7927 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +10 +20 +20 +88 +88 +88 +50 +20 +40 +80 +ENDCHAR +STARTCHAR uni1EF8 +ENCODING 7928 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +88 +88 +50 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni1EF9 +ENCODING 7929 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +68 +B0 +00 +88 +88 +88 +50 +20 +40 +80 +ENDCHAR +STARTCHAR uni1F00 +ENCODING 7936 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +60 +20 +00 +68 +90 +90 +90 +68 +00 +00 +ENDCHAR +STARTCHAR uni1F01 +ENCODING 7937 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +30 +20 +00 +68 +90 +90 +90 +68 +00 +00 +ENDCHAR +STARTCHAR uni1F02 +ENCODING 7938 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +D0 +48 +00 +68 +90 +90 +90 +68 +00 +00 +ENDCHAR +STARTCHAR uni1F03 +ENCODING 7939 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +D0 +88 +00 +68 +90 +90 +90 +68 +00 +00 +ENDCHAR +STARTCHAR uni1F04 +ENCODING 7940 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +C8 +50 +00 +68 +90 +90 +90 +68 +00 +00 +ENDCHAR +STARTCHAR uni1F05 +ENCODING 7941 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +C8 +90 +00 +68 +90 +90 +90 +68 +00 +00 +ENDCHAR +STARTCHAR uni1F06 +ENCODING 7942 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +30 +10 +00 +68 +90 +90 +68 +00 +00 +ENDCHAR +STARTCHAR uni1F07 +ENCODING 7943 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +30 +20 +00 +68 +90 +90 +68 +00 +00 +ENDCHAR +STARTCHAR uni1F08 +ENCODING 7944 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +40 +00 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni1F09 +ENCODING 7945 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +80 +00 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni1F0A +ENCODING 7946 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +D0 +48 +00 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni1F0B +ENCODING 7947 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +D0 +88 +00 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni1F0C +ENCODING 7948 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C8 +50 +00 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni1F0D +ENCODING 7949 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C8 +90 +00 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni1F0E +ENCODING 7950 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +C0 +80 +30 +48 +78 +48 +48 +00 +00 +ENDCHAR +STARTCHAR uni1F0F +ENCODING 7951 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +C0 +40 +30 +48 +78 +48 +48 +00 +00 +ENDCHAR +STARTCHAR uni1F10 +ENCODING 7952 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +60 +20 +00 +70 +88 +60 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F11 +ENCODING 7953 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +30 +20 +00 +70 +88 +60 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F12 +ENCODING 7954 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +D0 +48 +00 +70 +88 +60 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F13 +ENCODING 7955 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +D0 +88 +00 +70 +88 +60 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F14 +ENCODING 7956 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +C8 +50 +00 +70 +88 +60 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F15 +ENCODING 7957 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +C8 +90 +00 +70 +88 +60 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F18 +ENCODING 7960 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +40 +00 +F8 +80 +80 +F0 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR uni1F19 +ENCODING 7961 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +80 +00 +F8 +80 +80 +F0 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR uni1F1A +ENCODING 7962 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +D0 +48 +00 +F8 +80 +80 +F0 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR uni1F1B +ENCODING 7963 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +D0 +88 +00 +F8 +80 +80 +F0 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR uni1F1C +ENCODING 7964 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C8 +50 +00 +F8 +80 +80 +F0 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR uni1F1D +ENCODING 7965 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C8 +90 +00 +F8 +80 +80 +F0 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR uni1F20 +ENCODING 7968 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +60 +20 +00 +B0 +C8 +88 +88 +88 +08 +08 +ENDCHAR +STARTCHAR uni1F21 +ENCODING 7969 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +30 +20 +00 +B0 +C8 +88 +88 +88 +08 +08 +ENDCHAR +STARTCHAR uni1F22 +ENCODING 7970 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +D0 +48 +00 +B0 +C8 +88 +88 +88 +08 +08 +ENDCHAR +STARTCHAR uni1F23 +ENCODING 7971 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +D0 +88 +00 +B0 +C8 +88 +88 +88 +08 +08 +ENDCHAR +STARTCHAR uni1F24 +ENCODING 7972 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +C8 +50 +00 +B0 +C8 +88 +88 +88 +08 +08 +ENDCHAR +STARTCHAR uni1F25 +ENCODING 7973 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +C8 +90 +00 +B0 +C8 +88 +88 +88 +08 +08 +ENDCHAR +STARTCHAR uni1F26 +ENCODING 7974 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +30 +10 +00 +B0 +C8 +88 +88 +08 +08 +ENDCHAR +STARTCHAR uni1F27 +ENCODING 7975 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +30 +20 +00 +B0 +C8 +88 +88 +08 +08 +ENDCHAR +STARTCHAR uni1F28 +ENCODING 7976 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +40 +00 +88 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni1F29 +ENCODING 7977 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +80 +00 +88 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni1F2A +ENCODING 7978 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +D0 +48 +00 +88 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni1F2B +ENCODING 7979 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +D0 +88 +00 +88 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni1F2C +ENCODING 7980 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C8 +50 +00 +88 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni1F2D +ENCODING 7981 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C8 +90 +00 +88 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni1F2E +ENCODING 7982 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +C0 +80 +28 +28 +38 +28 +28 +00 +00 +ENDCHAR +STARTCHAR uni1F2F +ENCODING 7983 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +C0 +40 +28 +28 +38 +28 +28 +00 +00 +ENDCHAR +STARTCHAR uni1F30 +ENCODING 7984 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +60 +20 +00 +40 +40 +40 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni1F31 +ENCODING 7985 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +60 +40 +00 +40 +40 +40 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni1F32 +ENCODING 7986 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +D0 +48 +00 +40 +40 +40 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni1F33 +ENCODING 7987 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +D0 +88 +00 +40 +40 +40 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni1F34 +ENCODING 7988 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +C8 +50 +00 +40 +40 +40 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni1F35 +ENCODING 7989 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +C8 +90 +00 +40 +40 +40 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni1F36 +ENCODING 7990 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +30 +10 +40 +40 +40 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni1F37 +ENCODING 7991 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +30 +20 +40 +40 +40 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni1F38 +ENCODING 7992 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +40 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F39 +ENCODING 7993 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +80 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F3A +ENCODING 7994 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +D0 +48 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F3B +ENCODING 7995 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +D0 +88 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F3C +ENCODING 7996 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C8 +50 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F3D +ENCODING 7997 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C8 +90 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F3E +ENCODING 7998 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +C0 +9C +08 +08 +08 +08 +1C +00 +00 +ENDCHAR +STARTCHAR uni1F3F +ENCODING 7999 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +C0 +5C +08 +08 +08 +08 +1C +00 +00 +ENDCHAR +STARTCHAR uni1F40 +ENCODING 8000 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +60 +20 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F41 +ENCODING 8001 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +30 +20 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F42 +ENCODING 8002 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +D0 +48 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F43 +ENCODING 8003 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +D0 +88 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F44 +ENCODING 8004 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +C8 +50 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F45 +ENCODING 8005 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +C8 +90 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F48 +ENCODING 8008 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +40 +00 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F49 +ENCODING 8009 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +80 +00 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F4A +ENCODING 8010 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +D0 +48 +00 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F4B +ENCODING 8011 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +D0 +88 +00 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F4C +ENCODING 8012 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C8 +50 +00 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F4D +ENCODING 8013 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C8 +90 +00 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F50 +ENCODING 8016 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +60 +20 +00 +90 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F51 +ENCODING 8017 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +30 +20 +00 +90 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F52 +ENCODING 8018 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +D0 +48 +00 +90 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F53 +ENCODING 8019 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +D0 +88 +00 +90 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F54 +ENCODING 8020 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +C8 +50 +00 +90 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F55 +ENCODING 8021 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +C8 +90 +00 +90 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F56 +ENCODING 8022 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +30 +10 +00 +90 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F57 +ENCODING 8023 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +30 +20 +00 +90 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F59 +ENCODING 8025 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +80 +00 +88 +88 +50 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni1F5B +ENCODING 8027 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +D0 +88 +00 +88 +88 +50 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni1F5D +ENCODING 8029 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C8 +90 +00 +88 +88 +50 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni1F5F +ENCODING 8031 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +C0 +54 +14 +14 +08 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni1F60 +ENCODING 8032 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +60 +20 +00 +50 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni1F61 +ENCODING 8033 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +30 +20 +00 +50 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni1F62 +ENCODING 8034 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +D0 +48 +00 +50 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni1F63 +ENCODING 8035 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +D0 +88 +00 +50 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni1F64 +ENCODING 8036 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +C8 +50 +00 +50 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni1F65 +ENCODING 8037 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +C8 +90 +00 +50 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni1F66 +ENCODING 8038 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +30 +10 +00 +50 +88 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni1F67 +ENCODING 8039 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +30 +20 +00 +50 +88 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni1F68 +ENCODING 8040 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +40 +00 +70 +88 +88 +88 +88 +50 +D8 +00 +00 +ENDCHAR +STARTCHAR uni1F69 +ENCODING 8041 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +80 +00 +70 +88 +88 +88 +88 +50 +D8 +00 +00 +ENDCHAR +STARTCHAR uni1F6A +ENCODING 8042 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +D0 +48 +00 +70 +88 +88 +88 +88 +50 +D8 +00 +00 +ENDCHAR +STARTCHAR uni1F6B +ENCODING 8043 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +D0 +88 +00 +70 +88 +88 +88 +88 +50 +D8 +00 +00 +ENDCHAR +STARTCHAR uni1F6C +ENCODING 8044 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C8 +50 +00 +70 +88 +88 +88 +88 +50 +D8 +00 +00 +ENDCHAR +STARTCHAR uni1F6D +ENCODING 8045 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C8 +90 +00 +70 +88 +88 +88 +88 +50 +D8 +00 +00 +ENDCHAR +STARTCHAR uni1F6E +ENCODING 8046 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +C0 +80 +38 +44 +44 +44 +28 +6C +00 +ENDCHAR +STARTCHAR uni1F6F +ENCODING 8047 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +C0 +40 +38 +44 +44 +44 +28 +6C +00 +ENDCHAR +STARTCHAR uni1F70 +ENCODING 8048 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +10 +00 +68 +90 +90 +90 +68 +00 +00 +ENDCHAR +STARTCHAR uni1F71 +ENCODING 8049 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +68 +90 +90 +90 +68 +00 +00 +ENDCHAR +STARTCHAR uni1F72 +ENCODING 8050 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +10 +00 +70 +88 +60 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F73 +ENCODING 8051 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +70 +88 +60 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F74 +ENCODING 8052 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +10 +00 +B0 +C8 +88 +88 +88 +08 +08 +ENDCHAR +STARTCHAR uni1F75 +ENCODING 8053 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +B0 +C8 +88 +88 +88 +08 +08 +ENDCHAR +STARTCHAR uni1F76 +ENCODING 8054 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +20 +00 +20 +20 +20 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni1F77 +ENCODING 8055 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +20 +20 +20 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni1F78 +ENCODING 8056 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +10 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F79 +ENCODING 8057 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F7A +ENCODING 8058 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +10 +00 +90 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F7B +ENCODING 8059 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +90 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1F7C +ENCODING 8060 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +10 +00 +50 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni1F7D +ENCODING 8061 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +50 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni1F80 +ENCODING 8064 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +60 +20 +00 +68 +90 +90 +90 +68 +00 +20 +10 +ENDCHAR +STARTCHAR uni1F81 +ENCODING 8065 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +30 +20 +00 +68 +90 +90 +90 +68 +00 +20 +10 +ENDCHAR +STARTCHAR uni1F82 +ENCODING 8066 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D0 +48 +00 +68 +90 +90 +90 +68 +00 +20 +10 +ENDCHAR +STARTCHAR uni1F83 +ENCODING 8067 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D0 +88 +00 +68 +90 +90 +90 +68 +00 +20 +10 +ENDCHAR +STARTCHAR uni1F84 +ENCODING 8068 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C8 +50 +00 +68 +90 +90 +90 +68 +00 +20 +10 +ENDCHAR +STARTCHAR uni1F85 +ENCODING 8069 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C8 +90 +00 +68 +90 +90 +90 +68 +00 +20 +10 +ENDCHAR +STARTCHAR uni1F86 +ENCODING 8070 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +10 +20 +00 +68 +90 +90 +68 +00 +20 +10 +ENDCHAR +STARTCHAR uni1F87 +ENCODING 8071 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +20 +10 +00 +68 +90 +90 +68 +00 +20 +10 +ENDCHAR +STARTCHAR uni1F88 +ENCODING 8072 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +40 +00 +70 +88 +88 +F8 +88 +88 +88 +20 +10 +ENDCHAR +STARTCHAR uni1F89 +ENCODING 8073 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +80 +00 +70 +88 +88 +F8 +88 +88 +88 +20 +10 +ENDCHAR +STARTCHAR uni1F8A +ENCODING 8074 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +D0 +48 +00 +70 +88 +88 +F8 +88 +88 +88 +20 +10 +ENDCHAR +STARTCHAR uni1F8B +ENCODING 8075 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +D0 +88 +00 +70 +88 +88 +F8 +88 +88 +88 +20 +10 +ENDCHAR +STARTCHAR uni1F8C +ENCODING 8076 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C8 +50 +00 +70 +88 +88 +F8 +88 +88 +88 +20 +10 +ENDCHAR +STARTCHAR uni1F8D +ENCODING 8077 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C8 +90 +00 +70 +88 +88 +F8 +88 +88 +88 +20 +10 +ENDCHAR +STARTCHAR uni1F8E +ENCODING 8078 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +C0 +40 +30 +48 +78 +48 +48 +20 +10 +ENDCHAR +STARTCHAR uni1F8F +ENCODING 8079 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +C0 +80 +30 +48 +78 +48 +48 +20 +10 +ENDCHAR +STARTCHAR uni1F90 +ENCODING 8080 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +60 +20 +00 +B0 +C8 +88 +88 +88 +08 +88 +40 +ENDCHAR +STARTCHAR uni1F91 +ENCODING 8081 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +30 +20 +00 +B0 +C8 +88 +88 +88 +08 +88 +40 +ENDCHAR +STARTCHAR uni1F92 +ENCODING 8082 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D0 +48 +00 +B0 +C8 +88 +88 +88 +08 +88 +40 +ENDCHAR +STARTCHAR uni1F93 +ENCODING 8083 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D0 +88 +00 +B0 +C8 +88 +88 +88 +08 +88 +40 +ENDCHAR +STARTCHAR uni1F94 +ENCODING 8084 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C8 +50 +00 +B0 +C8 +88 +88 +88 +08 +88 +40 +ENDCHAR +STARTCHAR uni1F95 +ENCODING 8085 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C8 +90 +00 +B0 +C8 +88 +88 +88 +08 +88 +40 +ENDCHAR +STARTCHAR uni1F96 +ENCODING 8086 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +10 +20 +00 +B0 +C8 +88 +88 +08 +88 +40 +ENDCHAR +STARTCHAR uni1F97 +ENCODING 8087 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +20 +10 +00 +B0 +C8 +88 +88 +08 +88 +40 +ENDCHAR +STARTCHAR uni1F98 +ENCODING 8088 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +40 +00 +88 +88 +88 +F8 +88 +88 +88 +20 +10 +ENDCHAR +STARTCHAR uni1F99 +ENCODING 8089 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +80 +00 +88 +88 +88 +F8 +88 +88 +88 +20 +10 +ENDCHAR +STARTCHAR uni1F9A +ENCODING 8090 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +D0 +48 +00 +88 +88 +88 +F8 +88 +88 +88 +20 +10 +ENDCHAR +STARTCHAR uni1F9B +ENCODING 8091 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +D0 +88 +00 +88 +88 +88 +F8 +88 +88 +88 +20 +10 +ENDCHAR +STARTCHAR uni1F9C +ENCODING 8092 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C8 +50 +00 +88 +88 +88 +F8 +88 +88 +88 +20 +10 +ENDCHAR +STARTCHAR uni1F9D +ENCODING 8093 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C8 +90 +00 +88 +88 +88 +F8 +88 +88 +88 +20 +10 +ENDCHAR +STARTCHAR uni1F9E +ENCODING 8094 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +C0 +40 +28 +28 +38 +28 +28 +20 +10 +ENDCHAR +STARTCHAR uni1F9F +ENCODING 8095 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +C0 +80 +28 +28 +38 +28 +28 +20 +10 +ENDCHAR +STARTCHAR uni1FA0 +ENCODING 8096 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +60 +20 +00 +50 +88 +A8 +A8 +50 +00 +20 +10 +ENDCHAR +STARTCHAR uni1FA1 +ENCODING 8097 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +30 +20 +00 +50 +88 +A8 +A8 +50 +00 +20 +10 +ENDCHAR +STARTCHAR uni1FA2 +ENCODING 8098 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D0 +48 +00 +50 +88 +A8 +A8 +50 +00 +20 +10 +ENDCHAR +STARTCHAR uni1FA3 +ENCODING 8099 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D0 +88 +00 +50 +88 +A8 +A8 +50 +00 +20 +10 +ENDCHAR +STARTCHAR uni1FA4 +ENCODING 8100 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C8 +50 +00 +50 +88 +A8 +A8 +50 +00 +20 +10 +ENDCHAR +STARTCHAR uni1FA5 +ENCODING 8101 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C8 +90 +00 +50 +88 +A8 +A8 +50 +00 +20 +10 +ENDCHAR +STARTCHAR uni1FA6 +ENCODING 8102 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +10 +20 +00 +50 +88 +A8 +50 +00 +20 +10 +ENDCHAR +STARTCHAR uni1FA7 +ENCODING 8103 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +20 +10 +00 +50 +88 +A8 +50 +00 +20 +10 +ENDCHAR +STARTCHAR uni1FA8 +ENCODING 8104 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +40 +00 +70 +88 +88 +88 +88 +50 +D8 +20 +10 +ENDCHAR +STARTCHAR uni1FA9 +ENCODING 8105 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +80 +00 +70 +88 +88 +88 +88 +50 +D8 +20 +10 +ENDCHAR +STARTCHAR uni1FAA +ENCODING 8106 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +D0 +48 +00 +70 +88 +88 +88 +88 +50 +D8 +20 +10 +ENDCHAR +STARTCHAR uni1FAB +ENCODING 8107 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +D0 +88 +00 +70 +88 +88 +88 +88 +50 +D8 +20 +10 +ENDCHAR +STARTCHAR uni1FAC +ENCODING 8108 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C8 +50 +00 +70 +88 +88 +88 +88 +50 +D8 +20 +10 +ENDCHAR +STARTCHAR uni1FAD +ENCODING 8109 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C8 +90 +00 +70 +88 +88 +88 +88 +50 +D8 +20 +10 +ENDCHAR +STARTCHAR uni1FAE +ENCODING 8110 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +C0 +40 +38 +44 +44 +28 +6C +10 +08 +ENDCHAR +STARTCHAR uni1FAF +ENCODING 8111 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +C0 +80 +38 +44 +44 +28 +6C +10 +08 +ENDCHAR +STARTCHAR uni1FB0 +ENCODING 8112 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +70 +00 +68 +90 +90 +90 +68 +00 +00 +ENDCHAR +STARTCHAR uni1FB1 +ENCODING 8113 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +00 +68 +90 +90 +90 +68 +00 +00 +ENDCHAR +STARTCHAR uni1FB2 +ENCODING 8114 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +40 +20 +00 +68 +90 +90 +90 +68 +00 +20 +10 +ENDCHAR +STARTCHAR uni1FB3 +ENCODING 8115 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +68 +90 +90 +90 +68 +00 +20 +10 +ENDCHAR +STARTCHAR uni1FB4 +ENCODING 8116 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +20 +00 +68 +90 +90 +90 +68 +00 +20 +10 +ENDCHAR +STARTCHAR uni1FB6 +ENCODING 8118 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +68 +B0 +00 +68 +90 +90 +90 +68 +00 +00 +ENDCHAR +STARTCHAR uni1FB7 +ENCODING 8119 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +68 +B0 +00 +68 +90 +90 +90 +68 +00 +20 +10 +ENDCHAR +STARTCHAR uni1FB8 +ENCODING 8120 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +88 +70 +00 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni1FB9 +ENCODING 8121 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +00 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni1FBA +ENCODING 8122 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +80 +40 +00 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni1FBB +ENCODING 8123 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +80 +00 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni1FBC +ENCODING 8124 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +F8 +88 +88 +88 +20 +10 +ENDCHAR +STARTCHAR uni1FBD +ENCODING 8125 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +60 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FBE +ENCODING 8126 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +10 +ENDCHAR +STARTCHAR uni1FBF +ENCODING 8127 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +60 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FC0 +ENCODING 8128 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +68 +B0 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FC1 +ENCODING 8129 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +50 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FC2 +ENCODING 8130 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +40 +20 +00 +B0 +C8 +88 +88 +88 +08 +88 +40 +ENDCHAR +STARTCHAR uni1FC3 +ENCODING 8131 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +B0 +C8 +88 +88 +88 +08 +88 +40 +ENDCHAR +STARTCHAR uni1FC4 +ENCODING 8132 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +20 +00 +B0 +C8 +88 +88 +88 +08 +88 +40 +ENDCHAR +STARTCHAR uni1FC6 +ENCODING 8134 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +68 +B0 +00 +B0 +C8 +88 +88 +88 +08 +08 +ENDCHAR +STARTCHAR uni1FC7 +ENCODING 8135 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +68 +B0 +00 +B0 +C8 +88 +88 +88 +08 +88 +40 +ENDCHAR +STARTCHAR uni1FC8 +ENCODING 8136 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +80 +40 +00 +F8 +80 +80 +F0 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR uni1FC9 +ENCODING 8137 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +80 +00 +F8 +80 +80 +F0 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR uni1FCA +ENCODING 8138 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +80 +40 +00 +88 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni1FCB +ENCODING 8139 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +80 +00 +88 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni1FCC +ENCODING 8140 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +88 +F8 +88 +88 +88 +20 +10 +ENDCHAR +STARTCHAR uni1FCD +ENCODING 8141 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +D0 +48 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FCE +ENCODING 8142 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +C8 +50 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FCF +ENCODING 8143 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +30 +10 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FD0 +ENCODING 8144 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +70 +00 +20 +20 +20 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni1FD1 +ENCODING 8145 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +00 +40 +40 +40 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni1FD2 +ENCODING 8146 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +20 +00 +50 +00 +20 +20 +20 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni1FD3 +ENCODING 8147 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +20 +00 +50 +00 +20 +20 +20 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni1FD6 +ENCODING 8150 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +68 +B0 +00 +20 +20 +20 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni1FD7 +ENCODING 8151 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +50 +00 +20 +20 +20 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni1FD8 +ENCODING 8152 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +88 +70 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni1FD9 +ENCODING 8153 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni1FDA +ENCODING 8154 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +80 +40 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni1FDB +ENCODING 8155 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +80 +00 +70 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni1FDD +ENCODING 8157 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +D0 +88 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FDE +ENCODING 8158 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +C8 +90 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FDF +ENCODING 8159 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +30 +20 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FE0 +ENCODING 8160 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +70 +00 +90 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1FE1 +ENCODING 8161 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +00 +90 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1FE2 +ENCODING 8162 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +20 +00 +50 +00 +90 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1FE3 +ENCODING 8163 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +20 +00 +50 +00 +90 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1FE4 +ENCODING 8164 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +60 +20 +00 +70 +88 +88 +C8 +B0 +80 +80 +ENDCHAR +STARTCHAR uni1FE5 +ENCODING 8165 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +30 +20 +00 +70 +88 +88 +C8 +B0 +80 +80 +ENDCHAR +STARTCHAR uni1FE6 +ENCODING 8166 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +68 +B0 +00 +90 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1FE7 +ENCODING 8167 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +68 +B0 +00 +50 +00 +90 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1FE8 +ENCODING 8168 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +88 +70 +00 +88 +88 +50 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni1FE9 +ENCODING 8169 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +00 +88 +88 +50 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni1FEA +ENCODING 8170 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +80 +40 +00 +88 +88 +50 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni1FEB +ENCODING 8171 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +80 +00 +88 +88 +50 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni1FEC +ENCODING 8172 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +80 +00 +F0 +88 +88 +F0 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni1FED +ENCODING 8173 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +20 +00 +50 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FEE +ENCODING 8174 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +20 +00 +50 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FEF +ENCODING 8175 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FF2 +ENCODING 8178 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +40 +20 +00 +50 +88 +A8 +A8 +50 +00 +20 +10 +ENDCHAR +STARTCHAR uni1FF3 +ENCODING 8179 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +50 +88 +A8 +A8 +50 +00 +20 +10 +ENDCHAR +STARTCHAR uni1FF4 +ENCODING 8180 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +20 +00 +50 +88 +A8 +A8 +50 +00 +20 +10 +ENDCHAR +STARTCHAR uni1FF6 +ENCODING 8182 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +68 +B0 +00 +50 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni1FF7 +ENCODING 8183 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +68 +B0 +00 +50 +88 +A8 +A8 +50 +00 +20 +10 +ENDCHAR +STARTCHAR uni1FF8 +ENCODING 8184 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +88 +70 +00 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1FF9 +ENCODING 8185 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +00 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1FFA +ENCODING 8186 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +80 +40 +00 +70 +88 +88 +88 +88 +50 +D8 +00 +00 +ENDCHAR +STARTCHAR uni1FFB +ENCODING 8187 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +80 +00 +70 +88 +88 +88 +88 +50 +D8 +00 +00 +ENDCHAR +STARTCHAR uni1FFC +ENCODING 8188 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +88 +88 +50 +D8 +20 +10 +ENDCHAR +STARTCHAR uni1FFD +ENCODING 8189 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FFE +ENCODING 8190 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +30 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2010 +ENCODING 8208 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +70 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2011 +ENCODING 8209 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +70 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR figuredash +ENCODING 8210 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +F8 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR endash +ENCODING 8211 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +F8 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR emdash +ENCODING 8212 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FC +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR afii00208 +ENCODING 8213 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FC +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2016 +ENCODING 8214 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +50 +50 +50 +50 +50 +50 +00 +00 +ENDCHAR +STARTCHAR underscoredbl +ENCODING 8215 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +FC +00 +FC +ENDCHAR +STARTCHAR quoteleft +ENCODING 8216 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +20 +30 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR quoteright +ENCODING 8217 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +10 +20 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR quotesinglbase +ENCODING 8218 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +30 +10 +20 +00 +ENDCHAR +STARTCHAR quotereversed +ENCODING 8219 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +20 +10 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR quotedblleft +ENCODING 8220 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +48 +90 +D8 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR quotedblright +ENCODING 8221 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +D8 +48 +90 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR quotedblbase +ENCODING 8222 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +D8 +48 +90 +00 +ENDCHAR +STARTCHAR uni201F +ENCODING 8223 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +D8 +90 +48 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR dagger +ENCODING 8224 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +F8 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR daggerdbl +ENCODING 8225 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +F8 +20 +F8 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR bullet +ENCODING 8226 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +78 +78 +30 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2023 +ENCODING 8227 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +40 +60 +70 +60 +40 +00 +00 +00 +ENDCHAR +STARTCHAR onedotenleader +ENCODING 8228 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +ENDCHAR +STARTCHAR twodotenleader +ENCODING 8229 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +00 +00 +ENDCHAR +STARTCHAR ellipsis +ENCODING 8230 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +A8 +00 +00 +ENDCHAR +STARTCHAR uni2027 +ENCODING 8231 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR perthousand +ENCODING 8240 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +48 +A8 +50 +20 +68 +D4 +A8 +00 +00 +ENDCHAR +STARTCHAR uni2031 +ENCODING 8241 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +48 +A8 +58 +34 +68 +D4 +A8 +00 +00 +ENDCHAR +STARTCHAR minute +ENCODING 8242 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +40 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR second +ENCODING 8243 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +48 +48 +90 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2034 +ENCODING 8244 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +54 +54 +A8 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2035 +ENCODING 8245 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +40 +20 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2036 +ENCODING 8246 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +90 +90 +48 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2037 +ENCODING 8247 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +A8 +54 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2038 +ENCODING 8248 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +20 +20 +50 +50 +ENDCHAR +STARTCHAR guilsinglleft +ENCODING 8249 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +20 +40 +20 +10 +00 +00 +ENDCHAR +STARTCHAR guilsinglright +ENCODING 8250 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +40 +20 +10 +20 +40 +00 +00 +ENDCHAR +STARTCHAR uni203B +ENCODING 8251 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +88 +50 +20 +A8 +20 +50 +88 +20 +00 +ENDCHAR +STARTCHAR exclamdbl +ENCODING 8252 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +50 +50 +50 +50 +00 +50 +00 +00 +ENDCHAR +STARTCHAR uni203D +ENCODING 8253 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +A8 +28 +30 +20 +00 +20 +00 +00 +ENDCHAR +STARTCHAR uni203E +ENCODING 8254 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +FC +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni203F +ENCODING 8255 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +88 +70 +ENDCHAR +STARTCHAR uni2040 +ENCODING 8256 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +88 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2041 +ENCODING 8257 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +08 +10 +10 +20 +20 +50 +50 +ENDCHAR +STARTCHAR uni2042 +ENCODING 8258 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +70 +20 +50 +F8 +50 +00 +00 +ENDCHAR +STARTCHAR uni2043 +ENCODING 8259 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +70 +70 +00 +00 +00 +00 +ENDCHAR +STARTCHAR fraction +ENCODING 8260 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +10 +10 +20 +20 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni2045 +ENCODING 8261 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +40 +40 +70 +40 +40 +70 +00 +00 +ENDCHAR +STARTCHAR uni2046 +ENCODING 8262 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +10 +10 +70 +10 +10 +70 +00 +00 +ENDCHAR +STARTCHAR uni2047 +ENCODING 8263 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +48 +B4 +24 +48 +48 +00 +48 +00 +00 +ENDCHAR +STARTCHAR uni2048 +ENCODING 8264 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +48 +A8 +28 +48 +48 +00 +48 +00 +00 +ENDCHAR +STARTCHAR uni2049 +ENCODING 8265 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +90 +A8 +88 +90 +90 +00 +90 +00 +00 +ENDCHAR +STARTCHAR uni204A +ENCODING 8266 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +08 +08 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni204B +ENCODING 8267 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +B8 +B8 +B0 +A0 +A0 +A0 +00 +00 +ENDCHAR +STARTCHAR uni204C +ENCODING 8268 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +78 +E8 +E8 +78 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni204D +ENCODING 8269 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F0 +B8 +B8 +F0 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni204E +ENCODING 8270 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +A8 +70 +70 +A8 +20 +00 +00 +ENDCHAR +STARTCHAR uni204F +ENCODING 8271 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +70 +20 +00 +60 +20 +10 +ENDCHAR +STARTCHAR uni2050 +ENCODING 8272 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +88 +00 +00 +00 +00 +00 +00 +88 +70 +00 +ENDCHAR +STARTCHAR uni2051 +ENCODING 8273 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +A8 +70 +70 +A8 +20 +A8 +70 +70 +A8 +20 +00 +00 +ENDCHAR +STARTCHAR uni2052 +ENCODING 8274 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +90 +10 +20 +20 +40 +40 +90 +80 +00 +00 +ENDCHAR +STARTCHAR uni2053 +ENCODING 8275 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +68 +B0 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2054 +ENCODING 8276 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +88 +00 +ENDCHAR +STARTCHAR uni2055 +ENCODING 8277 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +70 +F8 +70 +A8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2056 +ENCODING 8278 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +00 +80 +00 +10 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2057 +ENCODING 8279 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +7C +7C +F8 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2058 +ENCODING 8280 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +88 +00 +20 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2059 +ENCODING 8281 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +00 +20 +00 +88 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni205A +ENCODING 8282 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +00 +00 +00 +00 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni205B +ENCODING 8283 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +00 +88 +88 +00 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni205C +ENCODING 8284 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +20 +F8 +20 +A8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni205D +ENCODING 8285 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +00 +20 +00 +00 +20 +00 +00 +ENDCHAR +STARTCHAR uni205E +ENCODING 8286 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +20 +00 +20 +00 +20 +00 +00 +ENDCHAR +STARTCHAR zerosuperior +ENCODING 8304 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +50 +50 +20 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2071 +ENCODING 8305 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +00 +60 +20 +70 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR foursuperior +ENCODING 8308 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +40 +50 +70 +10 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR fivesuperior +ENCODING 8309 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +40 +60 +10 +60 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR sixsuperior +ENCODING 8310 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +40 +60 +50 +20 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR sevensuperior +ENCODING 8311 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +10 +20 +20 +20 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR eightsuperior +ENCODING 8312 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +20 +50 +20 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR ninesuperior +ENCODING 8313 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +30 +10 +60 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni207A +ENCODING 8314 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +70 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni207B +ENCODING 8315 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni207C +ENCODING 8316 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +00 +70 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR parenleftsuperior +ENCODING 8317 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +40 +40 +40 +20 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR parenrightsuperior +ENCODING 8318 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +20 +20 +20 +40 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR nsuperior +ENCODING 8319 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +60 +50 +50 +50 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR zeroinferior +ENCODING 8320 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +20 +50 +50 +50 +20 +ENDCHAR +STARTCHAR oneinferior +ENCODING 8321 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +20 +60 +20 +20 +70 +ENDCHAR +STARTCHAR twoinferior +ENCODING 8322 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +60 +10 +20 +40 +70 +ENDCHAR +STARTCHAR threeinferior +ENCODING 8323 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +60 +10 +20 +10 +60 +ENDCHAR +STARTCHAR fourinferior +ENCODING 8324 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +40 +40 +50 +70 +10 +ENDCHAR +STARTCHAR fiveinferior +ENCODING 8325 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +70 +40 +60 +10 +60 +ENDCHAR +STARTCHAR sixinferior +ENCODING 8326 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +30 +40 +60 +50 +20 +ENDCHAR +STARTCHAR seveninferior +ENCODING 8327 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +70 +10 +20 +20 +20 +ENDCHAR +STARTCHAR eightinferior +ENCODING 8328 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +20 +50 +20 +50 +20 +ENDCHAR +STARTCHAR nineinferior +ENCODING 8329 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +20 +50 +30 +10 +60 +ENDCHAR +STARTCHAR uni208A +ENCODING 8330 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +20 +70 +20 +00 +ENDCHAR +STARTCHAR uni208B +ENCODING 8331 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +00 +00 +ENDCHAR +STARTCHAR uni208C +ENCODING 8332 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +70 +00 +70 +00 +ENDCHAR +STARTCHAR parenleftinferior +ENCODING 8333 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +20 +40 +40 +40 +20 +ENDCHAR +STARTCHAR parenrightinferior +ENCODING 8334 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +40 +20 +20 +20 +40 +ENDCHAR +STARTCHAR uni2090 +ENCODING 8336 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +40 +20 +60 +A0 +60 +00 +ENDCHAR +STARTCHAR uni2091 +ENCODING 8337 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +40 +A0 +E0 +80 +60 +ENDCHAR +STARTCHAR uni2092 +ENCODING 8338 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni2093 +ENCODING 8339 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +A0 +40 +A0 +ENDCHAR +STARTCHAR uni2094 +ENCODING 8340 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +C0 +20 +E0 +A0 +40 +ENDCHAR +STARTCHAR uni20A0 +ENCODING 8352 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +60 +80 +B8 +A0 +70 +20 +38 +00 +00 +ENDCHAR +STARTCHAR colonmonetary +ENCODING 8353 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +A8 +A8 +D0 +D0 +D8 +70 +00 +00 +ENDCHAR +STARTCHAR uni20A2 +ENCODING 8354 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +80 +B0 +A0 +A8 +70 +00 +00 +ENDCHAR +STARTCHAR franc +ENCODING 8355 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +80 +80 +E8 +B0 +A0 +A0 +00 +00 +ENDCHAR +STARTCHAR lira +ENCODING 8356 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +48 +E0 +40 +E0 +48 +B0 +00 +00 +ENDCHAR +STARTCHAR uni20A5 +ENCODING 8357 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +F0 +A8 +A8 +A8 +40 +00 +ENDCHAR +STARTCHAR uni20A6 +ENCODING 8358 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +C8 +FC +A8 +FC +98 +88 +00 +00 +ENDCHAR +STARTCHAR peseta +ENCODING 8359 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +60 +50 +F8 +50 +60 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni20A8 +ENCODING 8360 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +C0 +A0 +A0 +D8 +A0 +B0 +A8 +B0 +00 +00 +ENDCHAR +STARTCHAR uni20A9 +ENCODING 8361 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +FC +88 +FC +A8 +A8 +D8 +88 +00 +00 +ENDCHAR +STARTCHAR afii57636 +ENCODING 8362 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +60 +94 +B4 +B4 +B4 +B4 +A4 +98 +00 +00 +ENDCHAR +STARTCHAR dong +ENCODING 8363 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +3C +08 +78 +88 +88 +88 +78 +00 +78 +ENDCHAR +STARTCHAR Euro +ENCODING 8364 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +38 +40 +F0 +40 +F0 +40 +38 +00 +00 +ENDCHAR +STARTCHAR uni20AD +ENCODING 8365 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +48 +48 +50 +F8 +50 +48 +48 +00 +00 +ENDCHAR +STARTCHAR uni20AE +ENCODING 8366 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +20 +30 +60 +30 +60 +20 +00 +00 +ENDCHAR +STARTCHAR uni20AF +ENCODING 8367 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +E0 +50 +48 +48 +48 +E8 +D0 +00 +00 +ENDCHAR +STARTCHAR uni20B0 +ENCODING 8368 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +28 +28 +10 +10 +50 +68 +A8 +08 +10 +ENDCHAR +STARTCHAR uni20B1 +ENCODING 8369 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +60 +50 +F8 +F8 +50 +60 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni20B2 +ENCODING 8370 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +70 +A8 +A0 +A0 +B8 +A8 +70 +20 +00 +ENDCHAR +STARTCHAR uni20B3 +ENCODING 8371 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +F8 +88 +F8 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni20B4 +ENCODING 8372 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +60 +10 +F8 +20 +F8 +40 +30 +00 +00 +ENDCHAR +STARTCHAR uni20B5 +ENCODING 8373 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +70 +A8 +A0 +A0 +A0 +A8 +70 +20 +00 +ENDCHAR +STARTCHAR uni20D0 +ENCODING 8400 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +40 +F8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni20D1 +ENCODING 8401 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +10 +F8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni20D2 +ENCODING 8402 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +00 +ENDCHAR +STARTCHAR uni20D3 +ENCODING 8403 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +20 +20 +20 +20 +20 +20 +00 +ENDCHAR +STARTCHAR uni20D4 +ENCODING 8404 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +B0 +C8 +E0 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni20D5 +ENCODING 8405 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +68 +98 +38 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni20D6 +ENCODING 8406 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +40 +F8 +40 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni20D7 +ENCODING 8407 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +F8 +10 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni20D8 +ENCODING 8408 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +20 +50 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni20D9 +ENCODING 8409 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +30 +48 +E8 +48 +30 +00 +00 +ENDCHAR +STARTCHAR uni20DA +ENCODING 8410 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +60 +90 +B8 +90 +60 +00 +00 +ENDCHAR +STARTCHAR uni20DB +ENCODING 8411 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +A8 +A8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni20DC +ENCODING 8412 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +B4 +B4 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni20DD +ENCODING 8413 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +78 +84 +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni20DE +ENCODING 8414 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +FC +84 +84 +84 +84 +84 +84 +84 +84 +84 +84 +FC +ENDCHAR +STARTCHAR uni20DF +ENCODING 8415 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +48 +84 +84 +84 +84 +84 +84 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni20E0 +ENCODING 8416 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +78 +C4 +A4 +A4 +A4 +A4 +94 +94 +94 +94 +8C +78 +ENDCHAR +STARTCHAR uni20E1 +ENCODING 8417 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +F8 +50 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni20E2 +ENCODING 8418 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +00 +ENDCHAR +STARTCHAR uni20E3 +ENCODING 8419 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +FC +FC +84 +84 +84 +84 +84 +84 +84 +84 +FC +FC +ENDCHAR +STARTCHAR uni20E4 +ENCODING 8420 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +50 +50 +50 +50 +88 +88 +88 +88 +F8 +ENDCHAR +STARTCHAR uni20E5 +ENCODING 8421 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +80 +80 +40 +20 +20 +10 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni20E6 +ENCODING 8422 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +50 +50 +50 +50 +50 +50 +50 +00 +00 +ENDCHAR +STARTCHAR uni20E7 +ENCODING 8423 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +FC +04 +04 +04 +04 +04 +04 +04 +04 +00 +00 +ENDCHAR +STARTCHAR uni20E8 +ENCODING 8424 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +A8 +ENDCHAR +STARTCHAR uni20E9 +ENCODING 8425 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +F8 +88 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni20EA +ENCODING 8426 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +40 +FC +40 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni20EB +ENCODING 8427 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +24 +24 +24 +48 +48 +90 +90 +90 +00 +00 +ENDCHAR +STARTCHAR uni20EC +ENCODING 8428 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +F8 +10 +ENDCHAR +STARTCHAR uni20ED +ENCODING 8429 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +F8 +40 +ENDCHAR +STARTCHAR uni20EE +ENCODING 8430 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +F8 +40 +ENDCHAR +STARTCHAR uni20EF +ENCODING 8431 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +F8 +10 +ENDCHAR +STARTCHAR uni20F0 +ENCODING 8432 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +A0 +40 +A0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2100 +ENCODING 8448 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +68 +A8 +70 +10 +20 +40 +58 +A0 +98 +00 +00 +ENDCHAR +STARTCHAR uni2101 +ENCODING 8449 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +68 +A8 +70 +10 +20 +58 +60 +90 +88 +30 +00 +ENDCHAR +STARTCHAR uni2102 +ENCODING 8450 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +A8 +A0 +A0 +A0 +A8 +70 +00 +00 +ENDCHAR +STARTCHAR uni2103 +ENCODING 8451 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +A0 +40 +38 +40 +40 +40 +40 +40 +38 +00 +00 +ENDCHAR +STARTCHAR uni2104 +ENCODING 8452 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +70 +A0 +A0 +A0 +70 +20 +38 +00 +00 +ENDCHAR +STARTCHAR afii61248 +ENCODING 8453 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +88 +50 +10 +20 +40 +50 +A8 +90 +00 +00 +ENDCHAR +STARTCHAR uni2106 +ENCODING 8454 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +88 +50 +10 +20 +40 +68 +A8 +98 +00 +00 +ENDCHAR +STARTCHAR uni2107 +ENCODING 8455 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +88 +80 +60 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2108 +ENCODING 8456 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +08 +78 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2109 +ENCODING 8457 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +A0 +40 +3C +20 +20 +38 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni210A +ENCODING 8458 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +48 +48 +48 +30 +90 +60 +ENDCHAR +STARTCHAR uni210B +ENCODING 8459 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +C8 +48 +48 +70 +90 +90 +90 +08 +00 +ENDCHAR +STARTCHAR uni210C +ENCODING 8460 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +68 +90 +80 +B0 +C8 +48 +28 +A8 +48 +10 +20 +ENDCHAR +STARTCHAR uni210D +ENCODING 8461 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +A8 +A8 +B8 +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni210E +ENCODING 8462 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +40 +70 +48 +48 +90 +90 +00 +00 +ENDCHAR +STARTCHAR uni210F +ENCODING 8463 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +F0 +40 +70 +48 +48 +90 +90 +00 +00 +ENDCHAR +STARTCHAR uni2110 +ENCODING 8464 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +38 +08 +08 +10 +10 +20 +A0 +40 +00 +00 +ENDCHAR +STARTCHAR Ifraktur +ENCODING 8465 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F8 +88 +48 +10 +10 +08 +C8 +30 +00 +00 +ENDCHAR +STARTCHAR uni2112 +ENCODING 8466 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +28 +20 +20 +40 +40 +64 +98 +00 +00 +ENDCHAR +STARTCHAR afii61289 +ENCODING 8467 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +28 +28 +28 +10 +30 +48 +00 +00 +ENDCHAR +STARTCHAR uni2114 +ENCODING 8468 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A0 +F0 +A0 +B0 +A8 +A8 +B0 +00 +00 +ENDCHAR +STARTCHAR uni2115 +ENCODING 8469 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +C4 +C4 +A4 +B4 +B4 +AC +A4 +00 +00 +ENDCHAR +STARTCHAR afii61352 +ENCODING 8470 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +90 +90 +D8 +B4 +98 +90 +9C +00 +00 +ENDCHAR +STARTCHAR uni2117 +ENCODING 8471 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +E8 +D8 +E8 +C8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR weierstrass +ENCODING 8472 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +58 +64 +64 +78 +A0 +A0 +40 +00 +ENDCHAR +STARTCHAR uni2119 +ENCODING 8473 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +A8 +A8 +B0 +A0 +A0 +A0 +00 +00 +ENDCHAR +STARTCHAR uni211A +ENCODING 8474 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +A8 +A8 +A8 +A8 +B0 +68 +00 +00 +ENDCHAR +STARTCHAR uni211B +ENCODING 8475 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +48 +48 +70 +A0 +90 +90 +00 +00 +ENDCHAR +STARTCHAR Rfraktur +ENCODING 8476 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +A8 +68 +30 +30 +A8 +48 +00 +00 +ENDCHAR +STARTCHAR uni211D +ENCODING 8477 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +A8 +A8 +B0 +B0 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR prescription +ENCODING 8478 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +88 +88 +F0 +A8 +90 +A8 +00 +00 +ENDCHAR +STARTCHAR uni211F +ENCODING 8479 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +60 +20 +F0 +A8 +A8 +F0 +A0 +B0 +A8 +20 +00 +ENDCHAR +STARTCHAR uni2120 +ENCODING 8480 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +54 +9C +54 +94 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2121 +ENCODING 8481 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +E0 +40 +40 +70 +20 +30 +20 +30 +10 +10 +10 +18 +ENDCHAR +STARTCHAR trademark +ENCODING 8482 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +FC +5C +54 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2123 +ENCODING 8483 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +E0 +20 +A8 +A8 +A8 +50 +50 +50 +A0 +A0 +80 +00 +ENDCHAR +STARTCHAR uni2124 +ENCODING 8484 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +28 +48 +50 +90 +A0 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2125 +ENCODING 8485 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +78 +10 +20 +78 +10 +20 +70 +08 +88 +70 +ENDCHAR +STARTCHAR Omega +ENCODING 8486 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +88 +88 +50 +D8 +00 +00 +ENDCHAR +STARTCHAR uni2127 +ENCODING 8487 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +D8 +50 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2128 +ENCODING 8488 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +28 +38 +28 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2129 +ENCODING 8489 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +60 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni212A +ENCODING 8490 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +90 +A0 +C0 +A0 +90 +88 +00 +00 +ENDCHAR +STARTCHAR uni212B +ENCODING 8491 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +20 +70 +88 +88 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni212C +ENCODING 8492 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +48 +48 +70 +90 +90 +E0 +00 +00 +ENDCHAR +STARTCHAR uni212D +ENCODING 8493 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +74 +90 +90 +A0 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR estimated +ENCODING 8494 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +D8 +F0 +C0 +70 +00 +00 +ENDCHAR +STARTCHAR uni212F +ENCODING 8495 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +48 +70 +80 +60 +00 +00 +ENDCHAR +STARTCHAR uni2130 +ENCODING 8496 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +80 +60 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2131 +ENCODING 8497 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +7C +A0 +20 +78 +20 +20 +A0 +40 +00 +00 +ENDCHAR +STARTCHAR uni2132 +ENCODING 8498 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +08 +08 +78 +08 +08 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2133 +ENCODING 8499 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +C4 +6C +54 +44 +48 +48 +84 +00 +00 +ENDCHAR +STARTCHAR uni2134 +ENCODING 8500 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +48 +48 +90 +90 +60 +00 +00 +ENDCHAR +STARTCHAR aleph +ENCODING 8501 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +90 +48 +68 +90 +C8 +00 +00 +ENDCHAR +STARTCHAR uni2136 +ENCODING 8502 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F0 +10 +10 +10 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2137 +ENCODING 8503 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +40 +20 +10 +28 +48 +00 +00 +ENDCHAR +STARTCHAR uni2138 +ENCODING 8504 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni2139 +ENCODING 8505 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +00 +70 +30 +30 +70 +00 +00 +ENDCHAR +STARTCHAR uni213A +ENCODING 8506 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +04 +7C +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni213B +ENCODING 8507 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +E0 +80 +C0 +80 +70 +50 +70 +50 +14 +08 +14 +00 +ENDCHAR +STARTCHAR uni213C +ENCODING 8508 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +FC +68 +68 +68 +68 +00 +00 +ENDCHAR +STARTCHAR uni213D +ENCODING 8509 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +48 +A8 +50 +50 +50 +50 +ENDCHAR +STARTCHAR uni213E +ENCODING 8510 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +A8 +A0 +A0 +A0 +A0 +A0 +00 +00 +ENDCHAR +STARTCHAR uni213F +ENCODING 8511 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +A8 +A8 +A8 +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni2140 +ENCODING 8512 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +A0 +50 +50 +28 +50 +50 +A0 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2141 +ENCODING 8513 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +C8 +08 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2142 +ENCODING 8514 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +08 +08 +08 +08 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni2143 +ENCODING 8515 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +08 +08 +08 +08 +08 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2144 +ENCODING 8516 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +20 +50 +50 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni2145 +ENCODING 8517 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +78 +54 +54 +54 +A8 +A8 +A8 +F0 +00 +00 +ENDCHAR +STARTCHAR uni2146 +ENCODING 8518 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +1C +14 +14 +68 +A8 +A8 +78 +00 +00 +ENDCHAR +STARTCHAR uni2147 +ENCODING 8519 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +38 +54 +54 +B8 +A0 +78 +00 +00 +ENDCHAR +STARTCHAR uni2148 +ENCODING 8520 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +00 +78 +28 +28 +50 +50 +00 +00 +ENDCHAR +STARTCHAR uni2149 +ENCODING 8521 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +00 +78 +28 +28 +50 +50 +50 +E0 +ENDCHAR +STARTCHAR uni214A +ENCODING 8522 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +F0 +A8 +A8 +B0 +20 +38 +00 +00 +ENDCHAR +STARTCHAR uni214B +ENCODING 8523 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +B0 +48 +E8 +10 +28 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni214C +ENCODING 8524 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +B8 +A4 +F4 +AC +F8 +A8 +A0 +A0 +40 +00 +00 +ENDCHAR +STARTCHAR uni214D +ENCODING 8525 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +A8 +E8 +B0 +10 +20 +48 +50 +88 +90 +00 +00 +ENDCHAR +STARTCHAR uni214E +ENCODING 8526 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +08 +08 +08 +38 +08 +78 +00 +00 +ENDCHAR +STARTCHAR uni214F +ENCODING 8527 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +70 +70 +A8 +00 +00 +00 +ENDCHAR +STARTCHAR onethird +ENCODING 8531 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +48 +48 +50 +10 +38 +44 +48 +84 +98 +00 +00 +ENDCHAR +STARTCHAR twothirds +ENCODING 8532 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +A8 +48 +F0 +10 +38 +44 +48 +84 +98 +00 +00 +ENDCHAR +STARTCHAR uni2155 +ENCODING 8533 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +48 +48 +50 +10 +20 +58 +50 +88 +90 +00 +00 +ENDCHAR +STARTCHAR uni2156 +ENCODING 8534 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +A8 +48 +F0 +10 +20 +58 +50 +88 +90 +00 +00 +ENDCHAR +STARTCHAR uni2157 +ENCODING 8535 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +28 +48 +30 +D0 +20 +58 +50 +88 +90 +00 +00 +ENDCHAR +STARTCHAR uni2158 +ENCODING 8536 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +80 +C8 +E8 +50 +10 +20 +58 +50 +88 +90 +00 +00 +ENDCHAR +STARTCHAR uni2159 +ENCODING 8537 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +48 +48 +50 +10 +28 +50 +58 +94 +88 +00 +00 +ENDCHAR +STARTCHAR uni215A +ENCODING 8538 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +88 +48 +90 +10 +28 +50 +58 +94 +88 +00 +00 +ENDCHAR +STARTCHAR oneeighth +ENCODING 8539 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +48 +48 +50 +10 +28 +54 +48 +94 +88 +00 +00 +ENDCHAR +STARTCHAR threeeighths +ENCODING 8540 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +28 +48 +30 +D0 +28 +54 +48 +94 +88 +00 +00 +ENDCHAR +STARTCHAR fiveeighths +ENCODING 8541 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +88 +48 +90 +10 +28 +54 +48 +94 +88 +00 +00 +ENDCHAR +STARTCHAR seveneighths +ENCODING 8542 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +E0 +28 +48 +50 +10 +28 +54 +48 +94 +88 +00 +00 +ENDCHAR +STARTCHAR uni215F +ENCODING 8543 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +48 +48 +50 +10 +20 +40 +40 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni2160 +ENCODING 8544 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2161 +ENCODING 8545 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +50 +50 +50 +50 +50 +50 +00 +00 +ENDCHAR +STARTCHAR uni2162 +ENCODING 8546 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni2163 +ENCODING 8547 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +A8 +A8 +A8 +90 +90 +90 +00 +00 +ENDCHAR +STARTCHAR uni2164 +ENCODING 8548 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +88 +88 +50 +50 +50 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2165 +ENCODING 8549 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +A8 +A8 +A8 +48 +48 +48 +00 +00 +ENDCHAR +STARTCHAR uni2166 +ENCODING 8550 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +D4 +D4 +D4 +D4 +54 +54 +54 +00 +00 +ENDCHAR +STARTCHAR uni2167 +ENCODING 8551 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +DC +DC +DC +DC +5C +5C +5C +00 +00 +ENDCHAR +STARTCHAR uni2168 +ENCODING 8552 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +A8 +A8 +90 +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni2169 +ENCODING 8553 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +50 +20 +50 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni216A +ENCODING 8554 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +A8 +A8 +48 +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni216B +ENCODING 8555 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +AC +AC +AC +4C +AC +AC +AC +00 +00 +ENDCHAR +STARTCHAR uni216C +ENCODING 8556 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +80 +80 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR uni216D +ENCODING 8557 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +80 +80 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni216E +ENCODING 8558 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +48 +48 +48 +48 +48 +F0 +00 +00 +ENDCHAR +STARTCHAR uni216F +ENCODING 8559 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +D8 +A8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni2170 +ENCODING 8560 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2171 +ENCODING 8561 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +00 +50 +50 +50 +50 +50 +00 +00 +ENDCHAR +STARTCHAR uni2172 +ENCODING 8562 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +00 +A8 +A8 +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni2173 +ENCODING 8563 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +00 +A8 +A8 +A8 +90 +90 +00 +00 +ENDCHAR +STARTCHAR uni2174 +ENCODING 8564 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +50 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni2175 +ENCODING 8565 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +00 +A8 +A8 +A8 +48 +48 +00 +00 +ENDCHAR +STARTCHAR uni2176 +ENCODING 8566 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +14 +00 +D4 +D4 +D4 +D4 +54 +00 +00 +ENDCHAR +STARTCHAR uni2177 +ENCODING 8567 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +1C +00 +DC +DC +DC +DC +5C +00 +00 +ENDCHAR +STARTCHAR uni2178 +ENCODING 8568 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +00 +A8 +A8 +90 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni2179 +ENCODING 8569 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +50 +20 +50 +88 +00 +00 +ENDCHAR +STARTCHAR uni217A +ENCODING 8570 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +00 +A8 +A8 +48 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni217B +ENCODING 8571 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +0C +00 +AC +AC +4C +AC +AC +00 +00 +ENDCHAR +STARTCHAR uni217C +ENCODING 8572 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +60 +20 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni217D +ENCODING 8573 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni217E +ENCODING 8574 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +08 +08 +78 +88 +88 +78 +00 +00 +ENDCHAR +STARTCHAR uni217F +ENCODING 8575 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +D0 +A8 +A8 +A8 +88 +00 +00 +ENDCHAR +STARTCHAR uni2180 +ENCODING 8576 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +A8 +A8 +A8 +A8 +A8 +70 +00 +00 +ENDCHAR +STARTCHAR uni2181 +ENCODING 8577 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +88 +E8 +A8 +E8 +88 +F0 +00 +00 +ENDCHAR +STARTCHAR uni2182 +ENCODING 8578 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +A8 +F8 +A8 +F8 +A8 +70 +00 +00 +ENDCHAR +STARTCHAR uni2183 +ENCODING 8579 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +08 +08 +08 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2184 +ENCODING 8580 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +30 +48 +08 +48 +30 +00 +00 +ENDCHAR +STARTCHAR uni2185 +ENCODING 8581 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +80 +80 +88 +78 +08 +08 +00 +ENDCHAR +STARTCHAR uni2186 +ENCODING 8582 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +20 +20 +A8 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni2187 +ENCODING 8583 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +FC +FC +9C +FC +FC +F8 +00 +00 +ENDCHAR +STARTCHAR uni2188 +ENCODING 8584 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +F8 +F8 +A8 +F8 +F8 +70 +00 +00 +ENDCHAR +STARTCHAR arrowleft +ENCODING 8592 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +40 +F8 +40 +20 +00 +00 +00 +ENDCHAR +STARTCHAR arrowup +ENCODING 8593 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +70 +A8 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR arrowright +ENCODING 8594 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +10 +F8 +10 +20 +00 +00 +00 +ENDCHAR +STARTCHAR arrowdown +ENCODING 8595 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +20 +20 +A8 +70 +20 +00 +00 +ENDCHAR +STARTCHAR arrowboth +ENCODING 8596 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +50 +F8 +50 +00 +00 +00 +00 +ENDCHAR +STARTCHAR arrowupdn +ENCODING 8597 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +70 +A8 +20 +A8 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni2196 +ENCODING 8598 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +F0 +E0 +A0 +20 +10 +10 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni2197 +ENCODING 8599 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +78 +38 +28 +20 +40 +40 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni2198 +ENCODING 8600 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +80 +80 +40 +40 +20 +28 +38 +78 +18 +00 +00 +ENDCHAR +STARTCHAR uni2199 +ENCODING 8601 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +08 +08 +10 +10 +20 +A0 +E0 +F0 +C0 +00 +00 +ENDCHAR +STARTCHAR uni219A +ENCODING 8602 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +28 +48 +FC +50 +30 +00 +00 +00 +ENDCHAR +STARTCHAR uni219B +ENCODING 8603 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +28 +FC +48 +50 +00 +00 +00 +ENDCHAR +STARTCHAR uni219C +ENCODING 8604 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +C0 +D8 +64 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni219D +ENCODING 8605 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +0C +6C +98 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni219E +ENCODING 8606 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +28 +50 +FC +50 +28 +00 +00 +00 +ENDCHAR +STARTCHAR uni219F +ENCODING 8607 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +70 +A8 +70 +A8 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni21A0 +ENCODING 8608 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +50 +28 +FC +28 +50 +00 +00 +00 +ENDCHAR +STARTCHAR uni21A1 +ENCODING 8609 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +20 +A8 +70 +A8 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni21A2 +ENCODING 8610 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +24 +48 +F0 +48 +24 +00 +00 +00 +ENDCHAR +STARTCHAR uni21A3 +ENCODING 8611 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +90 +48 +3C +48 +90 +00 +00 +00 +ENDCHAR +STARTCHAR uni21A4 +ENCODING 8612 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +28 +48 +F8 +48 +28 +00 +00 +00 +ENDCHAR +STARTCHAR uni21A5 +ENCODING 8613 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +70 +A8 +20 +20 +20 +F8 +00 +00 +ENDCHAR +STARTCHAR uni21A6 +ENCODING 8614 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +A0 +90 +F8 +90 +A0 +00 +00 +00 +ENDCHAR +STARTCHAR uni21A7 +ENCODING 8615 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +20 +20 +20 +A8 +70 +20 +00 +00 +ENDCHAR +STARTCHAR arrowupdnbse +ENCODING 8616 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +70 +A8 +20 +A8 +70 +F8 +00 +00 +ENDCHAR +STARTCHAR uni21A9 +ENCODING 8617 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +28 +44 +F8 +40 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni21AA +ENCODING 8618 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +50 +88 +7C +08 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni21AB +ENCODING 8619 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +4C +FC +48 +28 +00 +00 +00 +ENDCHAR +STARTCHAR uni21AC +ENCODING 8620 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +C8 +FC +48 +50 +00 +00 +00 +ENDCHAR +STARTCHAR uni21AD +ENCODING 8621 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +48 +DC +EC +48 +00 +00 +00 +ENDCHAR +STARTCHAR uni21AE +ENCODING 8622 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +08 +58 +FC +68 +40 +00 +00 +00 +ENDCHAR +STARTCHAR uni21AF +ENCODING 8623 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +90 +B0 +D0 +90 +38 +10 +00 +00 +ENDCHAR +STARTCHAR uni21B0 +ENCODING 8624 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +40 +F8 +48 +28 +08 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni21B1 +ENCODING 8625 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +10 +F8 +90 +A0 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni21B2 +ENCODING 8626 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +08 +08 +28 +48 +F8 +40 +20 +00 +00 +ENDCHAR +STARTCHAR uni21B3 +ENCODING 8627 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +A0 +90 +F8 +10 +20 +00 +00 +ENDCHAR +STARTCHAR uni21B4 +ENCODING 8628 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F0 +10 +38 +10 +00 +00 +00 +ENDCHAR +STARTCHAR carriagereturn +ENCODING 8629 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +08 +08 +48 +F8 +40 +00 +00 +00 +ENDCHAR +STARTCHAR uni21B6 +ENCODING 8630 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +48 +48 +E8 +48 +00 +00 +00 +ENDCHAR +STARTCHAR uni21B7 +ENCODING 8631 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +60 +90 +90 +B8 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni21B8 +ENCODING 8632 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F8 +80 +E0 +C0 +A0 +20 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni21B9 +ENCODING 8633 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +A0 +C0 +F8 +C0 +A8 +18 +F8 +18 +28 +00 +00 +ENDCHAR +STARTCHAR uni21BA +ENCODING 8634 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +38 +30 +A8 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni21BB +ENCODING 8635 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +E0 +60 +A8 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni21BC +ENCODING 8636 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +40 +F8 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni21BD +ENCODING 8637 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +F8 +40 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni21BE +ENCODING 8638 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +30 +28 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni21BF +ENCODING 8639 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +60 +A0 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni21C0 +ENCODING 8640 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +10 +F8 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni21C1 +ENCODING 8641 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +F8 +10 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni21C2 +ENCODING 8642 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +20 +20 +20 +28 +30 +20 +00 +00 +ENDCHAR +STARTCHAR uni21C3 +ENCODING 8643 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +20 +20 +20 +A0 +60 +20 +00 +00 +ENDCHAR +STARTCHAR uni21C4 +ENCODING 8644 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +10 +F8 +10 +20 +40 +F8 +40 +20 +00 +00 +ENDCHAR +STARTCHAR uni21C5 +ENCODING 8645 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +F0 +50 +50 +50 +50 +78 +50 +00 +00 +ENDCHAR +STARTCHAR uni21C6 +ENCODING 8646 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +40 +F8 +40 +20 +10 +F8 +10 +20 +00 +00 +ENDCHAR +STARTCHAR uni21C7 +ENCODING 8647 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +40 +F8 +40 +20 +40 +F8 +40 +20 +00 +00 +ENDCHAR +STARTCHAR uni21C8 +ENCODING 8648 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +F8 +50 +50 +50 +50 +50 +50 +00 +00 +ENDCHAR +STARTCHAR uni21C9 +ENCODING 8649 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +10 +F8 +10 +20 +10 +F8 +10 +20 +00 +00 +ENDCHAR +STARTCHAR uni21CA +ENCODING 8650 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +50 +50 +50 +50 +50 +F8 +50 +00 +00 +ENDCHAR +STARTCHAR uni21CB +ENCODING 8651 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +40 +F8 +00 +F8 +10 +20 +00 +00 +ENDCHAR +STARTCHAR uni21CC +ENCODING 8652 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +10 +F8 +00 +F8 +40 +20 +00 +00 +ENDCHAR +STARTCHAR uni21CD +ENCODING 8653 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +14 +28 +7C +90 +7C +20 +50 +00 +00 +ENDCHAR +STARTCHAR uni21CE +ENCODING 8654 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +58 +FC +A4 +FC +68 +40 +00 +00 +ENDCHAR +STARTCHAR uni21CF +ENCODING 8655 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A0 +50 +F8 +24 +F8 +10 +28 +00 +00 +ENDCHAR +STARTCHAR arrowdblleft +ENCODING 8656 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +78 +80 +78 +20 +00 +00 +00 +ENDCHAR +STARTCHAR arrowdblup +ENCODING 8657 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +50 +D8 +50 +50 +50 +50 +00 +00 +ENDCHAR +STARTCHAR arrowdblright +ENCODING 8658 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +F0 +08 +F0 +20 +00 +00 +00 +ENDCHAR +STARTCHAR arrowdbldown +ENCODING 8659 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +50 +50 +50 +D8 +50 +20 +00 +00 +ENDCHAR +STARTCHAR arrowdblboth +ENCODING 8660 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +48 +FC +84 +FC +48 +00 +00 +00 +ENDCHAR +STARTCHAR uni21D5 +ENCODING 8661 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +D8 +50 +50 +D8 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni21D6 +ENCODING 8662 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +A0 +D0 +A8 +94 +08 +00 +00 +ENDCHAR +STARTCHAR uni21D7 +ENCODING 8663 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +7C +14 +2C +54 +A4 +40 +00 +00 +ENDCHAR +STARTCHAR uni21D8 +ENCODING 8664 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +40 +A4 +54 +2C +14 +7C +00 +00 +ENDCHAR +STARTCHAR uni21D9 +ENCODING 8665 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +08 +94 +A8 +D0 +A0 +F8 +00 +00 +ENDCHAR +STARTCHAR uni21DA +ENCODING 8666 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +3C +40 +FC +40 +3C +10 +00 +00 +ENDCHAR +STARTCHAR uni21DB +ENCODING 8667 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +F0 +08 +FC +08 +F0 +20 +00 +00 +ENDCHAR +STARTCHAR uni21DC +ENCODING 8668 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +40 +E8 +D4 +40 +00 +00 +00 +ENDCHAR +STARTCHAR uni21DD +ENCODING 8669 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +08 +5C +AC +08 +00 +00 +00 +ENDCHAR +STARTCHAR uni21DE +ENCODING 8670 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +70 +A8 +20 +70 +20 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni21DF +ENCODING 8671 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +70 +20 +70 +20 +A8 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni21E0 +ENCODING 8672 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +40 +D4 +40 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni21E1 +ENCODING 8673 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +70 +88 +20 +00 +20 +00 +20 +00 +00 +ENDCHAR +STARTCHAR uni21E2 +ENCODING 8674 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +08 +AC +08 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni21E3 +ENCODING 8675 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +00 +20 +00 +20 +88 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni21E4 +ENCODING 8676 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +A0 +C0 +F8 +C0 +A0 +00 +00 +00 +ENDCHAR +STARTCHAR uni21E5 +ENCODING 8677 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +28 +18 +F8 +18 +28 +00 +00 +00 +ENDCHAR +STARTCHAR uni21E6 +ENCODING 8678 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +78 +88 +78 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni21E7 +ENCODING 8679 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +D8 +50 +50 +50 +50 +70 +00 +00 +ENDCHAR +STARTCHAR uni21E8 +ENCODING 8680 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +F0 +88 +F0 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni21E9 +ENCODING 8681 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +50 +50 +50 +50 +D8 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni21EA +ENCODING 8682 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +50 +D8 +50 +70 +00 +70 +50 +70 +00 +00 +ENDCHAR +STARTCHAR uni21EB +ENCODING 8683 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +50 +D8 +50 +50 +50 +D8 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni21EC +ENCODING 8684 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +50 +F8 +88 +50 +50 +D8 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni21ED +ENCODING 8685 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +70 +F8 +70 +70 +70 +F8 +A8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni21EE +ENCODING 8686 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +50 +D8 +50 +D8 +50 +50 +50 +70 +00 +00 +ENDCHAR +STARTCHAR uni21EF +ENCODING 8687 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +50 +D8 +50 +D8 +50 +D8 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni21F0 +ENCODING 8688 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +A0 +F0 +88 +F0 +A0 +00 +00 +00 +ENDCHAR +STARTCHAR uni21F1 +ENCODING 8689 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F8 +80 +B0 +A0 +90 +10 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni21F2 +ENCODING 8690 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +80 +80 +40 +48 +28 +68 +08 +F8 +00 +00 +ENDCHAR +STARTCHAR uni21F3 +ENCODING 8691 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +D8 +50 +50 +D8 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni21F4 +ENCODING 8692 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +68 +FC +68 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni21F5 +ENCODING 8693 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +78 +50 +50 +50 +50 +F0 +50 +00 +00 +ENDCHAR +STARTCHAR uni21F6 +ENCODING 8694 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +F8 +10 +10 +F8 +10 +10 +F8 +10 +00 +00 +ENDCHAR +STARTCHAR uni21F7 +ENCODING 8695 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +28 +48 +FC +48 +28 +00 +00 +00 +ENDCHAR +STARTCHAR uni21F8 +ENCODING 8696 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +50 +48 +FC +48 +50 +00 +00 +00 +ENDCHAR +STARTCHAR uni21F9 +ENCODING 8697 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +78 +FC +78 +30 +00 +00 +00 +ENDCHAR +STARTCHAR uni21FA +ENCODING 8698 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +38 +58 +FC +58 +38 +00 +00 +00 +ENDCHAR +STARTCHAR uni21FB +ENCODING 8699 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +68 +FC +68 +70 +00 +00 +00 +ENDCHAR +STARTCHAR uni21FC +ENCODING 8700 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +78 +FC +78 +30 +00 +00 +00 +ENDCHAR +STARTCHAR uni21FD +ENCODING 8701 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +60 +B8 +60 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni21FE +ENCODING 8702 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +30 +E8 +30 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni21FF +ENCODING 8703 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +78 +B4 +78 +30 +00 +00 +00 +ENDCHAR +STARTCHAR universal +ENCODING 8704 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +F8 +88 +50 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni2201 +ENCODING 8705 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +50 +40 +40 +40 +50 +20 +00 +00 +ENDCHAR +STARTCHAR partialdiff +ENCODING 8706 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +48 +08 +38 +48 +48 +30 +00 +00 +ENDCHAR +STARTCHAR existential +ENCODING 8707 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +08 +08 +78 +08 +08 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2204 +ENCODING 8708 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +10 +F8 +18 +28 +78 +28 +48 +F8 +40 +40 +ENDCHAR +STARTCHAR emptyset +ENCODING 8709 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +10 +70 +98 +A8 +C8 +70 +40 +40 +00 +ENDCHAR +STARTCHAR Delta +ENCODING 8710 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +50 +50 +88 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR gradient +ENCODING 8711 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +88 +88 +50 +50 +20 +20 +00 +00 +ENDCHAR +STARTCHAR element +ENCODING 8712 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +38 +40 +80 +F0 +80 +40 +38 +00 +00 +ENDCHAR +STARTCHAR notelement +ENCODING 8713 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +38 +60 +A0 +F0 +A0 +60 +38 +20 +20 +ENDCHAR +STARTCHAR uni220A +ENCODING 8714 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +38 +40 +70 +40 +38 +00 +00 +00 +ENDCHAR +STARTCHAR suchthat +ENCODING 8715 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +E0 +10 +08 +78 +08 +10 +E0 +00 +00 +ENDCHAR +STARTCHAR uni220C +ENCODING 8716 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +E0 +30 +28 +78 +28 +30 +E0 +20 +20 +ENDCHAR +STARTCHAR uni220D +ENCODING 8717 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +08 +38 +08 +70 +00 +00 +00 +ENDCHAR +STARTCHAR uni220E +ENCODING 8718 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +F8 +F8 +F8 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR product +ENCODING 8719 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +FC +48 +48 +48 +48 +48 +48 +48 +EC +00 +ENDCHAR +STARTCHAR uni2210 +ENCODING 8720 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +EC +48 +48 +48 +48 +48 +48 +48 +FC +00 +ENDCHAR +STARTCHAR summation +ENCODING 8721 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F8 +80 +40 +20 +10 +20 +40 +80 +F8 +00 +ENDCHAR +STARTCHAR minus +ENCODING 8722 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +F8 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2213 +ENCODING 8723 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +00 +20 +20 +F8 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2214 +ENCODING 8724 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +20 +20 +F8 +20 +20 +00 +00 +ENDCHAR +STARTCHAR fraction +ENCODING 8725 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +10 +10 +20 +40 +40 +80 +00 +00 +ENDCHAR +STARTCHAR uni2216 +ENCODING 8726 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +40 +40 +20 +10 +10 +08 +00 +00 +ENDCHAR +STARTCHAR asteriskmath +ENCODING 8727 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +A8 +70 +A8 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni2218 +ENCODING 8728 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +50 +20 +00 +00 +00 +00 +ENDCHAR +STARTCHAR periodcentered +ENCODING 8729 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +30 +30 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR radical +ENCODING 8730 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +0C +08 +08 +08 +08 +10 +D0 +50 +50 +20 +20 +ENDCHAR +STARTCHAR uni221B +ENCODING 8731 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +04 +C4 +24 +48 +28 +C8 +10 +90 +90 +60 +60 +20 +ENDCHAR +STARTCHAR uni221C +ENCODING 8732 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +04 +84 +A4 +E8 +28 +28 +10 +90 +90 +60 +60 +20 +ENDCHAR +STARTCHAR proportional +ENCODING 8733 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +58 +A0 +A0 +58 +00 +00 +00 +ENDCHAR +STARTCHAR infinity +ENCODING 8734 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +50 +A8 +A8 +50 +00 +00 +00 +ENDCHAR +STARTCHAR orthogonal +ENCODING 8735 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +80 +80 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR angle +ENCODING 8736 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +08 +10 +20 +40 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2221 +ENCODING 8737 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +88 +50 +20 +50 +F8 +10 +10 +00 +ENDCHAR +STARTCHAR uni2222 +ENCODING 8738 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +08 +10 +30 +48 +88 +48 +30 +10 +08 +00 +00 +ENDCHAR +STARTCHAR uni2223 +ENCODING 8739 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +20 +20 +20 +20 +20 +20 +20 +00 +ENDCHAR +STARTCHAR uni2224 +ENCODING 8740 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +28 +30 +20 +60 +A0 +20 +20 +00 +ENDCHAR +STARTCHAR uni2225 +ENCODING 8741 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +50 +50 +50 +50 +50 +50 +50 +50 +00 +ENDCHAR +STARTCHAR uni2226 +ENCODING 8742 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +50 +58 +50 +70 +50 +D0 +50 +50 +00 +ENDCHAR +STARTCHAR logicaland +ENCODING 8743 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +20 +50 +50 +88 +00 +00 +ENDCHAR +STARTCHAR logicalor +ENCODING 8744 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +50 +50 +20 +20 +00 +00 +ENDCHAR +STARTCHAR intersection +ENCODING 8745 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR union +ENCODING 8746 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR integral +ENCODING 8747 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +28 +20 +20 +20 +20 +20 +20 +A0 +40 +00 +ENDCHAR +STARTCHAR uni222C +ENCODING 8748 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +24 +48 +48 +48 +48 +48 +48 +48 +48 +48 +90 +ENDCHAR +STARTCHAR uni222D +ENCODING 8749 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +54 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +D0 +ENDCHAR +STARTCHAR uni222E +ENCODING 8750 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +28 +20 +70 +A8 +A8 +70 +20 +A0 +40 +00 +ENDCHAR +STARTCHAR uni222F +ENCODING 8751 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +24 +48 +48 +78 +CC +CC +CC +78 +48 +48 +90 +ENDCHAR +STARTCHAR uni2230 +ENCODING 8752 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +54 +A8 +A8 +F8 +AC +AC +AC +F8 +A8 +A8 +D0 +ENDCHAR +STARTCHAR uni2231 +ENCODING 8753 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +28 +20 +20 +74 +AC +3C +20 +20 +20 +A0 +40 +ENDCHAR +STARTCHAR uni2232 +ENCODING 8754 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +28 +20 +20 +74 +AC +BC +A8 +70 +20 +A0 +40 +ENDCHAR +STARTCHAR uni2233 +ENCODING 8755 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +28 +20 +20 +70 +A8 +BC +AC +74 +20 +A0 +40 +ENDCHAR +STARTCHAR therefore +ENCODING 8756 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +00 +00 +88 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2235 +ENCODING 8757 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +00 +00 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni2236 +ENCODING 8758 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +00 +00 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni2237 +ENCODING 8759 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +48 +00 +00 +48 +00 +00 +00 +ENDCHAR +STARTCHAR uni2238 +ENCODING 8760 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +00 +F8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2239 +ENCODING 8761 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +08 +00 +E0 +00 +08 +00 +00 +00 +ENDCHAR +STARTCHAR uni223A +ENCODING 8762 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +88 +00 +F8 +00 +88 +00 +00 +00 +ENDCHAR +STARTCHAR uni223B +ENCODING 8763 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +00 +68 +B0 +00 +40 +00 +00 +ENDCHAR +STARTCHAR similar +ENCODING 8764 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +68 +B0 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni223D +ENCODING 8765 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +B0 +68 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni223E +ENCODING 8766 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +48 +A4 +94 +48 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni223F +ENCODING 8767 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +A0 +A0 +A8 +28 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni2240 +ENCODING 8768 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +10 +10 +10 +20 +40 +40 +40 +20 +00 +00 +ENDCHAR +STARTCHAR uni2241 +ENCODING 8769 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +20 +68 +B0 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2242 +ENCODING 8770 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +00 +68 +B0 +00 +00 +00 +ENDCHAR +STARTCHAR uni2243 +ENCODING 8771 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +68 +B0 +00 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2244 +ENCODING 8772 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +68 +B0 +20 +F8 +20 +00 +00 +ENDCHAR +STARTCHAR congruent +ENCODING 8773 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +68 +B0 +00 +F8 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2246 +ENCODING 8774 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +68 +B0 +00 +F8 +20 +F8 +20 +00 +00 +ENDCHAR +STARTCHAR uni2247 +ENCODING 8775 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +68 +B0 +20 +F8 +20 +F8 +20 +00 +00 +ENDCHAR +STARTCHAR approxequal +ENCODING 8776 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +68 +B0 +00 +68 +B0 +00 +00 +00 +ENDCHAR +STARTCHAR uni2249 +ENCODING 8777 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +68 +B0 +20 +68 +B0 +20 +00 +00 +ENDCHAR +STARTCHAR uni224A +ENCODING 8778 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +68 +B0 +00 +68 +B0 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni224B +ENCODING 8779 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +68 +B0 +00 +68 +B0 +00 +68 +B0 +00 +00 +ENDCHAR +STARTCHAR uni224C +ENCODING 8780 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +68 +B0 +00 +F8 +00 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni224D +ENCODING 8781 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +88 +70 +00 +70 +88 +00 +00 +00 +ENDCHAR +STARTCHAR uni224E +ENCODING 8782 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +D8 +00 +D8 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni224F +ENCODING 8783 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +D8 +00 +F8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2250 +ENCODING 8784 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +F8 +00 +F8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2251 +ENCODING 8785 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +F8 +00 +F8 +00 +20 +00 +00 +ENDCHAR +STARTCHAR uni2252 +ENCODING 8786 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +00 +F8 +00 +F8 +00 +08 +00 +00 +ENDCHAR +STARTCHAR uni2253 +ENCODING 8787 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +00 +F8 +00 +F8 +00 +80 +00 +00 +ENDCHAR +STARTCHAR uni2254 +ENCODING 8788 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +B8 +00 +B8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2255 +ENCODING 8789 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +E8 +00 +E8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2256 +ENCODING 8790 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +50 +F8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2257 +ENCODING 8791 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +20 +00 +F8 +00 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2258 +ENCODING 8792 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +00 +F8 +00 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2259 +ENCODING 8793 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +50 +00 +F8 +00 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni225A +ENCODING 8794 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +20 +00 +F8 +00 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni225B +ENCODING 8795 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +A8 +70 +F8 +70 +A8 +00 +F8 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni225C +ENCODING 8796 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +88 +F8 +00 +F8 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni225D +ENCODING 8797 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +4C +F8 +F8 +00 +F8 +00 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni225E +ENCODING 8798 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +D0 +A8 +A8 +00 +F8 +00 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni225F +ENCODING 8799 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +50 +10 +20 +00 +20 +F8 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR notequal +ENCODING 8800 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +10 +F8 +20 +F8 +40 +40 +00 +00 +ENDCHAR +STARTCHAR equivalence +ENCODING 8801 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +00 +F8 +00 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2262 +ENCODING 8802 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +F8 +20 +F8 +20 +F8 +40 +00 +00 +ENDCHAR +STARTCHAR uni2263 +ENCODING 8803 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +00 +F8 +00 +F8 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR lessequal +ENCODING 8804 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +18 +60 +80 +60 +18 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR greaterequal +ENCODING 8805 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +C0 +30 +08 +30 +C0 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2266 +ENCODING 8806 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +30 +C0 +30 +08 +F8 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2267 +ENCODING 8807 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +80 +60 +18 +60 +80 +F8 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2268 +ENCODING 8808 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +30 +C0 +30 +18 +F8 +20 +F8 +40 +00 +ENDCHAR +STARTCHAR uni2269 +ENCODING 8809 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +80 +60 +18 +60 +90 +F8 +20 +F8 +40 +00 +ENDCHAR +STARTCHAR uni226A +ENCODING 8810 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +28 +50 +A0 +50 +28 +00 +00 +00 +ENDCHAR +STARTCHAR uni226B +ENCODING 8811 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +A0 +50 +28 +50 +A0 +00 +00 +00 +ENDCHAR +STARTCHAR uni226C +ENCODING 8812 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +20 +50 +50 +50 +50 +20 +50 +00 +00 +ENDCHAR +STARTCHAR uni226D +ENCODING 8813 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +A8 +70 +20 +70 +A8 +20 +00 +00 +ENDCHAR +STARTCHAR uni226E +ENCODING 8814 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +28 +30 +20 +60 +A0 +60 +20 +30 +28 +00 +00 +ENDCHAR +STARTCHAR uni226F +ENCODING 8815 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +A0 +60 +20 +30 +28 +30 +20 +60 +A0 +00 +00 +ENDCHAR +STARTCHAR uni2270 +ENCODING 8816 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +38 +60 +A0 +60 +38 +20 +F8 +20 +00 +00 +ENDCHAR +STARTCHAR uni2271 +ENCODING 8817 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +E0 +30 +28 +30 +E0 +20 +F8 +20 +00 +00 +ENDCHAR +STARTCHAR uni2272 +ENCODING 8818 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +18 +60 +80 +60 +18 +00 +68 +B0 +00 +00 +ENDCHAR +STARTCHAR uni2273 +ENCODING 8819 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +C0 +30 +08 +30 +C0 +00 +68 +B0 +00 +00 +ENDCHAR +STARTCHAR uni2274 +ENCODING 8820 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +38 +60 +A0 +60 +38 +20 +68 +B0 +20 +00 +ENDCHAR +STARTCHAR uni2275 +ENCODING 8821 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +E0 +30 +28 +30 +E0 +20 +68 +B0 +20 +00 +ENDCHAR +STARTCHAR uni2276 +ENCODING 8822 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +60 +80 +60 +18 +C0 +30 +08 +30 +C0 +00 +ENDCHAR +STARTCHAR uni2277 +ENCODING 8823 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +30 +08 +30 +C0 +18 +60 +80 +60 +18 +00 +ENDCHAR +STARTCHAR uni2278 +ENCODING 8824 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +18 +70 +90 +60 +38 +E0 +30 +48 +70 +C0 +40 +ENDCHAR +STARTCHAR uni2279 +ENCODING 8825 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +D0 +30 +18 +30 +E0 +38 +60 +C0 +60 +58 +40 +ENDCHAR +STARTCHAR uni227A +ENCODING 8826 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +08 +10 +E0 +10 +08 +00 +00 +00 +ENDCHAR +STARTCHAR uni227B +ENCODING 8827 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +80 +40 +38 +40 +80 +00 +00 +00 +ENDCHAR +STARTCHAR uni227C +ENCODING 8828 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +10 +E0 +10 +E8 +10 +08 +00 +00 +ENDCHAR +STARTCHAR uni227D +ENCODING 8829 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +40 +38 +40 +B8 +40 +80 +00 +00 +ENDCHAR +STARTCHAR uni227E +ENCODING 8830 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +10 +E0 +10 +08 +00 +68 +B0 +00 +00 +ENDCHAR +STARTCHAR uni227F +ENCODING 8831 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +80 +40 +38 +40 +80 +00 +68 +B0 +00 +00 +ENDCHAR +STARTCHAR uni2280 +ENCODING 8832 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +28 +30 +E0 +30 +28 +20 +00 +00 +ENDCHAR +STARTCHAR uni2281 +ENCODING 8833 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +A0 +60 +38 +60 +A0 +20 +00 +00 +ENDCHAR +STARTCHAR propersubset +ENCODING 8834 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +78 +80 +80 +80 +78 +00 +00 +00 +ENDCHAR +STARTCHAR propersuperset +ENCODING 8835 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F0 +08 +08 +08 +F0 +00 +00 +00 +ENDCHAR +STARTCHAR notsubset +ENCODING 8836 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +78 +A0 +A0 +A0 +78 +40 +00 +00 +ENDCHAR +STARTCHAR uni2285 +ENCODING 8837 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +F0 +28 +28 +28 +F0 +40 +00 +00 +ENDCHAR +STARTCHAR reflexsubset +ENCODING 8838 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +80 +80 +80 +78 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR reflexsuperset +ENCODING 8839 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +08 +08 +08 +F0 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2288 +ENCODING 8840 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +78 +A0 +A0 +A0 +78 +20 +F8 +20 +00 +ENDCHAR +STARTCHAR uni2289 +ENCODING 8841 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +F0 +28 +28 +28 +F0 +20 +F8 +20 +00 +ENDCHAR +STARTCHAR uni228A +ENCODING 8842 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +80 +80 +80 +78 +10 +F8 +40 +00 +ENDCHAR +STARTCHAR uni228B +ENCODING 8843 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +08 +08 +08 +F0 +10 +F8 +40 +00 +ENDCHAR +STARTCHAR uni228C +ENCODING 8844 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +A8 +E8 +F8 +E8 +A8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni228D +ENCODING 8845 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +88 +A8 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni228E +ENCODING 8846 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +A8 +F8 +A8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni228F +ENCODING 8847 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +80 +80 +80 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2290 +ENCODING 8848 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +08 +08 +08 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2291 +ENCODING 8849 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +80 +80 +80 +F8 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2292 +ENCODING 8850 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +08 +08 +08 +F8 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2293 +ENCODING 8851 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +88 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni2294 +ENCODING 8852 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +88 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR circleplus +ENCODING 8853 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +A8 +F8 +A8 +70 +00 +00 +00 +ENDCHAR +STARTCHAR uni2296 +ENCODING 8854 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +88 +F8 +88 +70 +00 +00 +00 +ENDCHAR +STARTCHAR circlemultiply +ENCODING 8855 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +D8 +A8 +D8 +70 +00 +00 +00 +ENDCHAR +STARTCHAR uni2298 +ENCODING 8856 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +98 +A8 +C8 +70 +00 +00 +00 +ENDCHAR +STARTCHAR uni2299 +ENCODING 8857 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +88 +A8 +88 +70 +00 +00 +00 +ENDCHAR +STARTCHAR uni229A +ENCODING 8858 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +A8 +D8 +A8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni229B +ENCODING 8859 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +D8 +A8 +D8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni229C +ENCODING 8860 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +F8 +88 +F8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni229D +ENCODING 8861 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +F8 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni229E +ENCODING 8862 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +A8 +F8 +A8 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni229F +ENCODING 8863 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +88 +F8 +88 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni22A0 +ENCODING 8864 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +D8 +A8 +D8 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni22A1 +ENCODING 8865 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +88 +A8 +88 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni22A2 +ENCODING 8866 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +80 +F8 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni22A3 +ENCODING 8867 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +08 +08 +F8 +08 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni22A4 +ENCODING 8868 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +20 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR perpendicular +ENCODING 8869 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +20 +20 +20 +20 +F8 +00 +00 +ENDCHAR +STARTCHAR uni22A6 +ENCODING 8870 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +40 +40 +70 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni22A7 +ENCODING 8871 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +40 +70 +40 +70 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni22A8 +ENCODING 8872 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +F8 +80 +F8 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni22A9 +ENCODING 8873 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A0 +A0 +A0 +B8 +A0 +A0 +A0 +00 +00 +ENDCHAR +STARTCHAR uni22AA +ENCODING 8874 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +A8 +A8 +AC +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni22AB +ENCODING 8875 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A0 +A0 +BC +A0 +BC +A0 +A0 +00 +00 +ENDCHAR +STARTCHAR uni22AC +ENCODING 8876 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +90 +90 +F8 +A0 +A0 +80 +00 +00 +ENDCHAR +STARTCHAR uni22AD +ENCODING 8877 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +90 +F8 +A0 +F8 +C0 +80 +00 +00 +ENDCHAR +STARTCHAR uni22AE +ENCODING 8878 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A0 +A8 +A8 +BC +B0 +B0 +A0 +00 +00 +ENDCHAR +STARTCHAR uni22AF +ENCODING 8879 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A4 +A4 +BC +A8 +BC +B0 +B0 +00 +00 +ENDCHAR +STARTCHAR uni22B0 +ENCODING 8880 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +08 +10 +E0 +10 +08 +10 +00 +00 +ENDCHAR +STARTCHAR uni22B1 +ENCODING 8881 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +80 +40 +38 +40 +80 +40 +00 +00 +ENDCHAR +STARTCHAR uni22B2 +ENCODING 8882 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +18 +68 +88 +68 +18 +00 +00 +00 +ENDCHAR +STARTCHAR uni22B3 +ENCODING 8883 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +C0 +B0 +88 +B0 +C0 +00 +00 +00 +ENDCHAR +STARTCHAR uni22B4 +ENCODING 8884 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +18 +68 +88 +68 +18 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni22B5 +ENCODING 8885 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +C0 +B0 +88 +B0 +C0 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni22B6 +ENCODING 8886 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +50 +B8 +50 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni22B7 +ENCODING 8887 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +50 +E8 +50 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni22B8 +ENCODING 8888 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +E8 +10 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni22B9 +ENCODING 8889 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +20 +D8 +20 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni22BA +ENCODING 8890 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +20 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni22BB +ENCODING 8891 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +88 +50 +50 +20 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni22BC +ENCODING 8892 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +00 +20 +50 +50 +88 +00 +00 +ENDCHAR +STARTCHAR uni22BD +ENCODING 8893 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +00 +88 +50 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni22BE +ENCODING 8894 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +80 +80 +C0 +A0 +F8 +00 +00 +ENDCHAR +STARTCHAR uni22BF +ENCODING 8895 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +08 +18 +28 +48 +F8 +00 +00 +ENDCHAR +STARTCHAR uni22C0 +ENCODING 8896 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +20 +50 +50 +50 +88 +88 +88 +00 +ENDCHAR +STARTCHAR uni22C1 +ENCODING 8897 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +88 +88 +50 +50 +50 +20 +20 +20 +00 +ENDCHAR +STARTCHAR uni22C2 +ENCODING 8898 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +88 +88 +88 +88 +88 +88 +88 +00 +ENDCHAR +STARTCHAR uni22C3 +ENCODING 8899 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +88 +88 +88 +88 +88 +88 +88 +70 +00 +ENDCHAR +STARTCHAR uni22C4 +ENCODING 8900 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +50 +88 +50 +20 +20 +00 +00 +ENDCHAR +STARTCHAR dotmath +ENCODING 8901 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni22C6 +ENCODING 8902 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +F8 +70 +70 +88 +00 +00 +00 +ENDCHAR +STARTCHAR uni22C7 +ENCODING 8903 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +88 +50 +F8 +50 +88 +20 +00 +00 +ENDCHAR +STARTCHAR uni22C8 +ENCODING 8904 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +88 +D8 +A8 +D8 +88 +00 +00 +00 +ENDCHAR +STARTCHAR uni22C9 +ENCODING 8905 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +88 +D0 +A0 +D0 +88 +00 +00 +00 +ENDCHAR +STARTCHAR uni22CA +ENCODING 8906 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +88 +58 +28 +58 +88 +00 +00 +00 +ENDCHAR +STARTCHAR uni22CB +ENCODING 8907 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +80 +40 +20 +50 +88 +00 +00 +00 +ENDCHAR +STARTCHAR uni22CC +ENCODING 8908 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +08 +10 +20 +50 +88 +00 +00 +00 +ENDCHAR +STARTCHAR uni22CD +ENCODING 8909 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +B0 +68 +00 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni22CE +ENCODING 8910 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +88 +50 +50 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni22CF +ENCODING 8911 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +20 +20 +50 +50 +88 +00 +00 +ENDCHAR +STARTCHAR uni22D0 +ENCODING 8912 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +38 +40 +98 +A0 +98 +40 +38 +00 +00 +ENDCHAR +STARTCHAR uni22D1 +ENCODING 8913 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +E0 +10 +C8 +28 +C8 +10 +E0 +00 +00 +ENDCHAR +STARTCHAR uni22D2 +ENCODING 8914 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +A8 +A8 +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni22D3 +ENCODING 8915 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +A8 +A8 +A8 +A8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni22D4 +ENCODING 8916 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +70 +A8 +A8 +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni22D5 +ENCODING 8917 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +50 +F8 +50 +50 +F8 +50 +50 +00 +00 +ENDCHAR +STARTCHAR uni22D6 +ENCODING 8918 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +18 +60 +88 +60 +18 +00 +00 +00 +ENDCHAR +STARTCHAR uni22D7 +ENCODING 8919 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +C0 +30 +88 +30 +C0 +00 +00 +00 +ENDCHAR +STARTCHAR uni22D8 +ENCODING 8920 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +14 +28 +54 +A8 +54 +28 +14 +00 +00 +ENDCHAR +STARTCHAR uni22D9 +ENCODING 8921 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A0 +50 +A8 +54 +A8 +50 +A0 +00 +00 +ENDCHAR +STARTCHAR uni22DA +ENCODING 8922 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +18 +60 +80 +60 +18 +00 +F8 +C0 +30 +08 +30 +C0 +ENDCHAR +STARTCHAR uni22DB +ENCODING 8923 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +30 +08 +30 +C0 +00 +F8 +18 +60 +80 +60 +18 +ENDCHAR +STARTCHAR uni22DC +ENCODING 8924 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +00 +18 +60 +80 +60 +18 +00 +00 +ENDCHAR +STARTCHAR uni22DD +ENCODING 8925 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +00 +C0 +30 +08 +30 +C0 +00 +00 +ENDCHAR +STARTCHAR uni22DE +ENCODING 8926 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +10 +E8 +10 +E0 +10 +08 +00 +00 +ENDCHAR +STARTCHAR uni22DF +ENCODING 8927 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +40 +B8 +40 +38 +40 +80 +00 +00 +ENDCHAR +STARTCHAR uni22E0 +ENCODING 8928 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +28 +30 +E0 +30 +E8 +30 +28 +20 +00 +ENDCHAR +STARTCHAR uni22E1 +ENCODING 8929 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +A0 +60 +38 +60 +B8 +60 +A0 +20 +00 +ENDCHAR +STARTCHAR uni22E2 +ENCODING 8930 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +F8 +A0 +A0 +F8 +20 +F8 +20 +00 +00 +ENDCHAR +STARTCHAR uni22E3 +ENCODING 8931 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +F8 +28 +28 +F8 +20 +F8 +20 +00 +00 +ENDCHAR +STARTCHAR uni22E4 +ENCODING 8932 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +80 +80 +F8 +10 +F8 +40 +00 +00 +ENDCHAR +STARTCHAR uni22E5 +ENCODING 8933 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +08 +08 +F8 +10 +F8 +40 +00 +00 +ENDCHAR +STARTCHAR uni22E6 +ENCODING 8934 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +60 +80 +60 +38 +20 +68 +B0 +20 +20 +00 +ENDCHAR +STARTCHAR uni22E7 +ENCODING 8935 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +30 +08 +30 +E0 +20 +68 +B0 +20 +20 +00 +ENDCHAR +STARTCHAR uni22E8 +ENCODING 8936 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +10 +E0 +10 +28 +20 +68 +B0 +20 +20 +ENDCHAR +STARTCHAR uni22E9 +ENCODING 8937 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +80 +40 +38 +40 +A0 +20 +68 +B0 +20 +20 +ENDCHAR +STARTCHAR uni22EA +ENCODING 8938 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +38 +68 +A8 +68 +38 +20 +20 +00 +ENDCHAR +STARTCHAR uni22EB +ENCODING 8939 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +E0 +B0 +A8 +B0 +E0 +20 +20 +00 +ENDCHAR +STARTCHAR uni22EC +ENCODING 8940 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +38 +68 +A8 +68 +38 +20 +F8 +20 +00 +ENDCHAR +STARTCHAR uni22ED +ENCODING 8941 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +E0 +B0 +A8 +B0 +E0 +20 +F8 +20 +00 +ENDCHAR +STARTCHAR uni22EE +ENCODING 8942 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +00 +00 +00 +20 +00 +00 +00 +20 +00 +ENDCHAR +STARTCHAR uni22EF +ENCODING 8943 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +A8 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni22F0 +ENCODING 8944 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +00 +00 +20 +00 +00 +80 +00 +00 +ENDCHAR +STARTCHAR uni22F1 +ENCODING 8945 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +00 +00 +20 +00 +00 +08 +00 +00 +ENDCHAR +STARTCHAR uni22F2 +ENCODING 8946 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +38 +40 +40 +F0 +40 +40 +38 +00 +00 +ENDCHAR +STARTCHAR uni22F3 +ENCODING 8947 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +38 +40 +88 +F8 +88 +40 +38 +00 +00 +ENDCHAR +STARTCHAR uni22F4 +ENCODING 8948 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +38 +40 +88 +F8 +88 +40 +38 +00 +00 +ENDCHAR +STARTCHAR uni22F5 +ENCODING 8949 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +00 +38 +40 +80 +F0 +80 +40 +38 +00 +00 +ENDCHAR +STARTCHAR uni22F6 +ENCODING 8950 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +00 +38 +40 +80 +F0 +80 +40 +38 +00 +00 +ENDCHAR +STARTCHAR uni22F7 +ENCODING 8951 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +78 +00 +38 +40 +70 +40 +38 +00 +00 +00 +ENDCHAR +STARTCHAR uni22F8 +ENCODING 8952 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +38 +40 +80 +F0 +80 +40 +38 +00 +F8 +ENDCHAR +STARTCHAR uni22F9 +ENCODING 8953 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +38 +40 +F0 +80 +F0 +40 +38 +00 +00 +ENDCHAR +STARTCHAR uni22FA +ENCODING 8954 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +E0 +10 +10 +78 +10 +10 +E0 +00 +00 +ENDCHAR +STARTCHAR uni22FB +ENCODING 8955 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +E0 +10 +88 +F8 +88 +10 +E0 +00 +00 +ENDCHAR +STARTCHAR uni22FC +ENCODING 8956 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +08 +48 +78 +48 +08 +70 +00 +00 +ENDCHAR +STARTCHAR uni22FD +ENCODING 8957 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +00 +E0 +10 +08 +78 +08 +10 +E0 +00 +00 +ENDCHAR +STARTCHAR uni22FE +ENCODING 8958 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +78 +00 +70 +08 +38 +08 +70 +00 +00 +00 +ENDCHAR +STARTCHAR uni22FF +ENCODING 8959 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +80 +80 +F8 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2300 +ENCODING 8960 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +68 +90 +A8 +48 +B0 +00 +00 +ENDCHAR +STARTCHAR uni2301 +ENCODING 8961 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +30 +A8 +60 +20 +00 +00 +00 +00 +ENDCHAR +STARTCHAR house +ENCODING 8962 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +50 +88 +88 +88 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2303 +ENCODING 8963 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +50 +88 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2304 +ENCODING 8964 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +88 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni2305 +ENCODING 8965 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +00 +20 +50 +88 +00 +00 +ENDCHAR +STARTCHAR uni2306 +ENCODING 8966 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +00 +F8 +00 +20 +50 +88 +00 +00 +ENDCHAR +STARTCHAR uni2307 +ENCODING 8967 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +10 +20 +20 +10 +10 +20 +20 +10 +00 +00 +ENDCHAR +STARTCHAR uni2308 +ENCODING 8968 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +40 +40 +40 +40 +40 +40 +40 +40 +00 +ENDCHAR +STARTCHAR uni2309 +ENCODING 8969 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +10 +10 +10 +10 +10 +10 +10 +10 +00 +ENDCHAR +STARTCHAR uni230A +ENCODING 8970 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +40 +40 +40 +40 +40 +40 +40 +70 +00 +ENDCHAR +STARTCHAR uni230B +ENCODING 8971 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +10 +10 +10 +10 +10 +10 +10 +70 +00 +ENDCHAR +STARTCHAR uni230C +ENCODING 8972 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +18 +20 +20 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni230D +ENCODING 8973 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +C0 +20 +20 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni230E +ENCODING 8974 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +18 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni230F +ENCODING 8975 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +20 +C0 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR revlogicalnot +ENCODING 8976 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +F8 +80 +80 +00 +00 +00 +ENDCHAR +STARTCHAR uni2311 +ENCODING 8977 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +88 +70 +50 +70 +88 +00 +00 +00 +ENDCHAR +STARTCHAR uni2312 +ENCODING 8978 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +88 +88 +88 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2313 +ENCODING 8979 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +88 +88 +F8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2314 +ENCODING 8980 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +50 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni2315 +ENCODING 8981 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +88 +C8 +F0 +00 +00 +ENDCHAR +STARTCHAR uni2316 +ENCODING 8982 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +70 +A8 +F8 +A8 +70 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2317 +ENCODING 8983 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +50 +F8 +50 +50 +F8 +50 +50 +00 +00 +ENDCHAR +STARTCHAR uni2318 +ENCODING 8984 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +A8 +70 +20 +70 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni2319 +ENCODING 8985 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +80 +80 +F8 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni231A +ENCODING 8986 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +50 +50 +70 +A8 +B8 +88 +70 +50 +50 +70 +00 +ENDCHAR +STARTCHAR uni231B +ENCODING 8987 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F8 +88 +70 +20 +20 +50 +A8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni231C +ENCODING 8988 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +E0 +80 +80 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni231D +ENCODING 8989 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +38 +08 +08 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni231E +ENCODING 8990 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +80 +80 +E0 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni231F +ENCODING 8991 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +08 +08 +38 +00 +00 +00 +00 +ENDCHAR +STARTCHAR integraltp +ENCODING 8992 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +28 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR integralbt +ENCODING 8993 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +20 +20 +20 +20 +A0 +40 +00 +ENDCHAR +STARTCHAR uni2322 +ENCODING 8994 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +70 +88 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2323 +ENCODING 8995 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +88 +70 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2324 +ENCODING 8996 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +D8 +20 +50 +88 +00 +00 +00 +ENDCHAR +STARTCHAR uni2325 +ENCODING 8997 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +18 +C0 +20 +18 +00 +00 +00 +ENDCHAR +STARTCHAR uni2326 +ENCODING 8998 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F0 +D8 +A4 +D8 +F0 +00 +00 +00 +ENDCHAR +STARTCHAR uni2327 +ENCODING 8999 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +D8 +A8 +D8 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2328 +ENCODING 9000 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +FC +84 +AC +84 +AC +84 +AC +84 +AC +84 +FC +00 +ENDCHAR +STARTCHAR uni232B +ENCODING 9003 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +3C +6C +94 +6C +3C +00 +00 +00 +ENDCHAR +STARTCHAR uni232C +ENCODING 9004 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +70 +D8 +C8 +D8 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni232D +ENCODING 9005 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +20 +60 +D8 +30 +20 +40 +00 +00 +ENDCHAR +STARTCHAR uni232E +ENCODING 9006 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +38 +44 +5C +64 +38 +A0 +C0 +E0 +00 +00 +ENDCHAR +STARTCHAR uni232F +ENCODING 9007 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +00 +F8 +00 +70 +00 +00 +00 +ENDCHAR +STARTCHAR uni2330 +ENCODING 9008 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +48 +FC +48 +48 +90 +90 +90 +F0 +00 +00 +ENDCHAR +STARTCHAR uni2331 +ENCODING 9009 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +40 +A8 +FC +A8 +40 +40 +00 +00 +00 +ENDCHAR +STARTCHAR uni2332 +ENCODING 9010 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +80 +E0 +98 +FC +98 +E0 +80 +00 +00 +00 +ENDCHAR +STARTCHAR uni2333 +ENCODING 9011 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +C0 +A0 +90 +F8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2334 +ENCODING 9012 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +84 +84 +84 +84 +FC +00 +00 +ENDCHAR +STARTCHAR uni2335 +ENCODING 9013 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +88 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni2336 +ENCODING 9014 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F8 +20 +20 +20 +20 +20 +20 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2337 +ENCODING 9015 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +48 +48 +48 +48 +48 +48 +48 +48 +78 +00 +ENDCHAR +STARTCHAR uni2338 +ENCODING 9016 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +88 +88 +F8 +88 +F8 +88 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2339 +ENCODING 9017 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +88 +A8 +88 +F8 +88 +A8 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni233A +ENCODING 9018 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +88 +A8 +D8 +88 +D8 +A8 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni233B +ENCODING 9019 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +88 +88 +A8 +D8 +A8 +88 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni233C +ENCODING 9020 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +88 +F8 +D8 +88 +D8 +F8 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni233D +ENCODING 9021 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +70 +A8 +A8 +A8 +70 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni233E +ENCODING 9022 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +A8 +D8 +A8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni233F +ENCODING 9023 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +10 +10 +F8 +40 +40 +80 +00 +00 +ENDCHAR +STARTCHAR uni2340 +ENCODING 9024 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +40 +40 +F8 +10 +10 +08 +00 +00 +ENDCHAR +STARTCHAR uni2341 +ENCODING 9025 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +98 +98 +A8 +A8 +A8 +C8 +C8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2342 +ENCODING 9026 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +C8 +C8 +A8 +A8 +A8 +98 +98 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2343 +ENCODING 9027 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +88 +98 +A8 +C8 +A8 +98 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2344 +ENCODING 9028 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +88 +C8 +A8 +98 +A8 +C8 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2345 +ENCODING 9029 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +10 +50 +F8 +50 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni2346 +ENCODING 9030 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +40 +50 +F8 +50 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni2347 +ENCODING 9031 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +88 +A8 +C8 +F8 +C8 +A8 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2348 +ENCODING 9032 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +88 +A8 +98 +F8 +98 +A8 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2349 +ENCODING 9033 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +80 +80 +70 +C8 +A8 +98 +70 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni234A +ENCODING 9034 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +20 +20 +20 +20 +F8 +00 +F8 +00 +ENDCHAR +STARTCHAR uni234B +ENCODING 9035 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +20 +70 +70 +A8 +A8 +F8 +20 +20 +00 +ENDCHAR +STARTCHAR uni234C +ENCODING 9036 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +88 +88 +D8 +D8 +A8 +A8 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni234D +ENCODING 9037 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +88 +A8 +A8 +D8 +D8 +F8 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni234E +ENCODING 9038 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +70 +A8 +A8 +A8 +70 +20 +F8 +00 +00 +ENDCHAR +STARTCHAR uni234F +ENCODING 9039 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +70 +A8 +20 +F8 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2350 +ENCODING 9040 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +A8 +F8 +A8 +A8 +A8 +A8 +A8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2351 +ENCODING 9041 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +00 +F8 +20 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2352 +ENCODING 9042 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +F8 +A8 +70 +70 +20 +20 +20 +20 +00 +ENDCHAR +STARTCHAR uni2353 +ENCODING 9043 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +88 +A8 +A8 +D8 +D8 +88 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2354 +ENCODING 9044 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +88 +F8 +D8 +D8 +A8 +A8 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2355 +ENCODING 9045 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +20 +20 +70 +A8 +A8 +70 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2356 +ENCODING 9046 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +20 +20 +F8 +20 +A8 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni2357 +ENCODING 9047 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +A8 +A8 +A8 +A8 +A8 +F8 +A8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2358 +ENCODING 9048 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +20 +00 +00 +00 +00 +00 +F8 +00 +ENDCHAR +STARTCHAR uni2359 +ENCODING 9049 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +50 +50 +88 +88 +F8 +00 +F8 +00 +ENDCHAR +STARTCHAR uni235A +ENCODING 9050 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +50 +88 +50 +20 +00 +F8 +00 +ENDCHAR +STARTCHAR uni235B +ENCODING 9051 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +50 +20 +00 +00 +00 +F8 +00 +ENDCHAR +STARTCHAR uni235C +ENCODING 9052 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +88 +70 +00 +00 +F8 +00 +ENDCHAR +STARTCHAR uni235D +ENCODING 9053 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +A8 +D8 +A8 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni235E +ENCODING 9054 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +A8 +A8 +A8 +88 +88 +88 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni235F +ENCODING 9055 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +A8 +F8 +A8 +D8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2360 +ENCODING 9056 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +88 +A8 +88 +88 +88 +A8 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2361 +ENCODING 9057 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +F8 +20 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2362 +ENCODING 9058 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +F8 +88 +88 +50 +50 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2363 +ENCODING 9059 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +20 +20 +F8 +70 +70 +88 +00 +00 +00 +ENDCHAR +STARTCHAR uni2364 +ENCODING 9060 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +00 +00 +20 +50 +20 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2365 +ENCODING 9061 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +00 +70 +88 +88 +88 +70 +00 +00 +00 +ENDCHAR +STARTCHAR uni2366 +ENCODING 9062 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +A8 +A8 +A8 +A8 +A8 +70 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2367 +ENCODING 9063 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +10 +78 +90 +90 +90 +78 +10 +10 +00 +ENDCHAR +STARTCHAR uni2368 +ENCODING 9064 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +00 +00 +68 +B0 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2369 +ENCODING 9065 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +00 +00 +C0 +30 +08 +30 +C0 +00 +00 +00 +ENDCHAR +STARTCHAR uni236A +ENCODING 9066 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +00 +00 +30 +20 +40 +00 +ENDCHAR +STARTCHAR uni236B +ENCODING 9067 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +88 +88 +7C +D8 +A0 +20 +00 +00 +ENDCHAR +STARTCHAR uni236C +ENCODING 9068 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +E8 +B8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni236D +ENCODING 9069 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +20 +68 +B0 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni236E +ENCODING 9070 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +70 +20 +00 +30 +F8 +40 +ENDCHAR +STARTCHAR uni236F +ENCODING 9071 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +88 +98 +F8 +A8 +F8 +C8 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2370 +ENCODING 9072 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +A8 +D8 +98 +A8 +88 +A8 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2371 +ENCODING 9073 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +B8 +E8 +88 +50 +50 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2372 +ENCODING 9074 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +50 +50 +88 +E8 +B8 +88 +00 +00 +ENDCHAR +STARTCHAR uni2373 +ENCODING 9075 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +20 +20 +20 +20 +10 +00 +00 +ENDCHAR +STARTCHAR uni2374 +ENCODING 9076 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +88 +88 +F0 +80 +80 +ENDCHAR +STARTCHAR uni2375 +ENCODING 9077 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +50 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni2376 +ENCODING 9078 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +68 +90 +90 +90 +68 +00 +F8 +00 +ENDCHAR +STARTCHAR uni2377 +ENCODING 9079 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +88 +60 +88 +70 +00 +F8 +00 +ENDCHAR +STARTCHAR uni2378 +ENCODING 9080 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +20 +20 +20 +10 +00 +F8 +00 +ENDCHAR +STARTCHAR uni2379 +ENCODING 9081 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +50 +88 +A8 +A8 +50 +00 +F8 +00 +ENDCHAR +STARTCHAR uni237A +ENCODING 9082 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +68 +90 +90 +90 +68 +00 +00 +ENDCHAR +STARTCHAR uni237B +ENCODING 9083 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +04 +04 +08 +3C +10 +90 +60 +20 +00 +00 +ENDCHAR +STARTCHAR uni237C +ENCODING 9084 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +60 +40 +C0 +60 +40 +C0 +60 +50 +FC +C0 +E0 +00 +ENDCHAR +STARTCHAR uni237D +ENCODING 9085 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +CC +48 +78 +00 +00 +ENDCHAR +STARTCHAR uni237E +ENCODING 9086 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +88 +88 +F8 +50 +D8 +00 +00 +ENDCHAR +STARTCHAR uni237F +ENCODING 9087 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +70 +F8 +F8 +F8 +70 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2380 +ENCODING 9088 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +08 +78 +88 +78 +00 +88 +50 +20 +ENDCHAR +STARTCHAR uni2381 +ENCODING 9089 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +60 +10 +70 +90 +74 +00 +FC +ENDCHAR +STARTCHAR uni2382 +ENCODING 9090 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +48 +24 +6C +B4 +6C +00 +6C +ENDCHAR +STARTCHAR uni2383 +ENCODING 9091 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +84 +A4 +10 +B4 +50 +B4 +84 +00 +ENDCHAR +STARTCHAR uni2384 +ENCODING 9092 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +D4 +D4 +D4 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2385 +ENCODING 9093 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +F8 +A8 +A8 +A8 +A8 +F8 +20 +00 +00 +ENDCHAR +STARTCHAR uni2386 +ENCODING 9094 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +88 +24 +F4 +24 +88 +50 +20 +00 +ENDCHAR +STARTCHAR uni2387 +ENCODING 9095 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +08 +1C +28 +40 +9C +00 +00 +00 +ENDCHAR +STARTCHAR uni2388 +ENCODING 9096 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +A8 +70 +A8 +70 +A8 +20 +00 +00 +ENDCHAR +STARTCHAR uni2389 +ENCODING 9097 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +78 +84 +84 +CC +B4 +78 +00 +00 +ENDCHAR +STARTCHAR uni238A +ENCODING 9098 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +84 +FC +CC +B4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni238B +ENCODING 9099 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +E8 +C4 +A4 +14 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni238C +ENCODING 9100 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F0 +C8 +00 +50 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni238D +ENCODING 9101 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +50 +50 +50 +D8 +00 +00 +00 +ENDCHAR +STARTCHAR uni238E +ENCODING 9102 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +78 +50 +50 +50 +F0 +00 +00 +00 +ENDCHAR +STARTCHAR uni238F +ENCODING 9103 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +20 +50 +88 +50 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni2390 +ENCODING 9104 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +50 +88 +50 +20 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2391 +ENCODING 9105 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +20 +50 +F8 +50 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni2392 +ENCODING 9106 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +50 +F8 +50 +20 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2393 +ENCODING 9107 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +00 +A8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2394 +ENCODING 9108 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +48 +84 +48 +30 +00 +00 +00 +ENDCHAR +STARTCHAR uni2395 +ENCODING 9109 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +88 +88 +88 +88 +88 +88 +88 +88 +F8 +00 +ENDCHAR +STARTCHAR uni2396 +ENCODING 9110 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +78 +70 +70 +60 +60 +40 +40 +00 +00 +00 +ENDCHAR +STARTCHAR uni2397 +ENCODING 9111 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +A8 +00 +BC +24 +84 +24 +FC +24 +84 +24 +3C +00 +ENDCHAR +STARTCHAR uni2398 +ENCODING 9112 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +F8 +80 +D4 +80 +84 +90 +FC +90 +84 +80 +54 +00 +ENDCHAR +STARTCHAR uni2399 +ENCODING 9113 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +38 +68 +48 +CC +CC +CC +FC +FC +00 +00 +ENDCHAR +STARTCHAR uni239A +ENCODING 9114 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +A4 +D4 +AC +94 +78 +00 +00 +00 +ENDCHAR +STARTCHAR uni239B +ENCODING 9115 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +20 +20 +40 +40 +40 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni239C +ENCODING 9116 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni239D +ENCODING 9117 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +40 +40 +40 +40 +40 +40 +40 +20 +20 +10 +00 +ENDCHAR +STARTCHAR uni239E +ENCODING 9118 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +40 +20 +20 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni239F +ENCODING 9119 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni23A0 +ENCODING 9120 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +20 +20 +40 +00 +ENDCHAR +STARTCHAR uni23A1 +ENCODING 9121 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni23A2 +ENCODING 9122 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni23A3 +ENCODING 9123 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +70 +00 +ENDCHAR +STARTCHAR uni23A4 +ENCODING 9124 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni23A5 +ENCODING 9125 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni23A6 +ENCODING 9126 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +70 +00 +ENDCHAR +STARTCHAR uni23A7 +ENCODING 9127 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni23A8 +ENCODING 9128 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +C0 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni23A9 +ENCODING 9129 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +18 +00 +ENDCHAR +STARTCHAR uni23AA +ENCODING 9130 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni23AB +ENCODING 9131 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni23AC +ENCODING 9132 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +18 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni23AD +ENCODING 9133 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +C0 +00 +ENDCHAR +STARTCHAR uni23AE +ENCODING 9134 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni23AF +ENCODING 9135 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FC +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni23B0 +ENCODING 9136 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +18 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +C0 +ENDCHAR +STARTCHAR uni23B1 +ENCODING 9137 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni23B2 +ENCODING 9138 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +FC +80 +80 +40 +40 +40 +20 +20 +20 +10 +10 +ENDCHAR +STARTCHAR uni23B3 +ENCODING 9139 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +10 +20 +20 +20 +40 +40 +40 +80 +80 +FC +00 +ENDCHAR +STARTCHAR uni23B4 +ENCODING 9140 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +88 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni23B5 +ENCODING 9141 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni23B6 +ENCODING 9142 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +F8 +00 +00 +F8 +88 +00 +00 +00 +ENDCHAR +STARTCHAR uni23B7 +ENCODING 9143 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +A0 +A0 +60 +60 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni23B8 +ENCODING 9144 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni23B9 +ENCODING 9145 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni23BA +ENCODING 9146 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +FC +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni23BB +ENCODING 9147 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +FC +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni23BC +ENCODING 9148 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +FC +00 +00 +00 +ENDCHAR +STARTCHAR uni23BD +ENCODING 9149 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +FC +ENDCHAR +STARTCHAR uni23BE +ENCODING 9150 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F8 +80 +80 +80 +80 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni23BF +ENCODING 9151 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +80 +80 +80 +80 +80 +80 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR uni23C0 +ENCODING 9152 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +70 +A8 +A8 +A8 +70 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni23C1 +ENCODING 9153 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +20 +70 +A8 +A8 +A8 +70 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni23C2 +ENCODING 9154 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +70 +A8 +A8 +A8 +70 +20 +F8 +00 +00 +ENDCHAR +STARTCHAR uni23C3 +ENCODING 9155 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +20 +70 +70 +A8 +F8 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni23C4 +ENCODING 9156 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +20 +20 +70 +70 +A8 +F8 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni23C5 +ENCODING 9157 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +20 +70 +70 +A8 +F8 +20 +F8 +00 +00 +ENDCHAR +STARTCHAR uni23C6 +ENCODING 9158 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +20 +68 +B0 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni23C7 +ENCODING 9159 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F8 +20 +20 +68 +B0 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni23C8 +ENCODING 9160 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +20 +68 +B0 +20 +20 +F8 +00 +00 +ENDCHAR +STARTCHAR uni23C9 +ENCODING 9161 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F8 +20 +20 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni23CA +ENCODING 9162 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +20 +20 +20 +20 +20 +F8 +00 +00 +ENDCHAR +STARTCHAR uni23CB +ENCODING 9163 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F8 +08 +08 +08 +08 +08 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni23CC +ENCODING 9164 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +08 +08 +08 +08 +08 +08 +F8 +00 +00 +ENDCHAR +STARTCHAR uni23CD +ENCODING 9165 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +A8 +A8 +88 +88 +88 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni23CE +ENCODING 9166 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +18 +18 +18 +18 +58 +F8 +F0 +40 +00 +00 +ENDCHAR +STARTCHAR uni23CF +ENCODING 9167 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +70 +F8 +00 +F8 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni23D0 +ENCODING 9168 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni23D1 +ENCODING 9169 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +88 +70 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni23D2 +ENCODING 9170 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +00 +88 +70 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni23D3 +ENCODING 9171 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +70 +00 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni23D4 +ENCODING 9172 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +FC +00 +B4 +48 +00 +00 +00 +ENDCHAR +STARTCHAR uni23D5 +ENCODING 9173 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +B4 +48 +00 +FC +00 +00 +00 +ENDCHAR +STARTCHAR uni23D6 +ENCODING 9174 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +B4 +48 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni23D7 +ENCODING 9175 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +08 +08 +F8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni23D8 +ENCODING 9176 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +F8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni23D9 +ENCODING 9177 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A8 +A8 +F8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni23DA +ENCODING 9178 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +20 +20 +F8 +00 +70 +00 +20 +00 +ENDCHAR +STARTCHAR uni23DB +ENCODING 9179 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +78 +48 +FC +48 +78 +00 +00 +00 +ENDCHAR +STARTCHAR uni23DC +ENCODING 9180 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +78 +84 +00 +00 +ENDCHAR +STARTCHAR uni23DD +ENCODING 9181 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +84 +78 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni23DE +ENCODING 9182 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +30 +CC +84 +00 +00 +ENDCHAR +STARTCHAR uni23DF +ENCODING 9183 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +84 +CC +30 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni23E0 +ENCODING 9184 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +78 +84 +00 +00 +ENDCHAR +STARTCHAR uni23E1 +ENCODING 9185 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +84 +78 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni23E2 +ENCODING 9186 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +E0 +90 +88 +84 +FC +00 +00 +ENDCHAR +STARTCHAR uni23E3 +ENCODING 9187 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +30 +78 +CC +84 +CC +78 +30 +00 +00 +00 +ENDCHAR +STARTCHAR uni23E4 +ENCODING 9188 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FC +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni23E5 +ENCODING 9189 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +7C +44 +88 +F8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni23E6 +ENCODING 9190 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +40 +A0 +FC +14 +08 +00 +00 +00 +ENDCHAR +STARTCHAR uni23E7 +ENCODING 9191 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A0 +A4 +A8 +B0 +30 +48 +84 +00 +00 +ENDCHAR +STARTCHAR uni2400 +ENCODING 9216 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +90 +D0 +B0 +90 +50 +50 +70 +20 +20 +20 +38 +00 +ENDCHAR +STARTCHAR uni2401 +ENCODING 9217 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +60 +80 +40 +20 +E0 +50 +50 +20 +28 +38 +28 +00 +ENDCHAR +STARTCHAR uni2402 +ENCODING 9218 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +60 +80 +40 +20 +C0 +70 +20 +20 +28 +10 +28 +00 +ENDCHAR +STARTCHAR uni2403 +ENCODING 9219 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +E0 +80 +C0 +80 +E0 +70 +20 +20 +28 +10 +28 +00 +ENDCHAR +STARTCHAR uni2404 +ENCODING 9220 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +E0 +80 +C0 +80 +E0 +50 +50 +20 +38 +10 +10 +00 +ENDCHAR +STARTCHAR uni2405 +ENCODING 9221 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +E0 +80 +C0 +80 +E8 +68 +58 +48 +10 +28 +28 +18 +ENDCHAR +STARTCHAR uni2406 +ENCODING 9222 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +A0 +E0 +A0 +30 +40 +30 +00 +28 +30 +28 +00 +ENDCHAR +STARTCHAR uni2407 +ENCODING 9223 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +A0 +C0 +A0 +F0 +40 +60 +40 +70 +20 +20 +38 +ENDCHAR +STARTCHAR uni2408 +ENCODING 9224 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +A0 +C0 +A0 +C0 +18 +20 +10 +08 +30 +00 +ENDCHAR +STARTCHAR uni2409 +ENCODING 9225 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +A0 +A0 +E0 +A0 +B8 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni240A +ENCODING 9226 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +80 +80 +80 +E0 +00 +38 +20 +30 +20 +00 +00 +ENDCHAR +STARTCHAR uni240B +ENCODING 9227 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +A0 +A0 +A0 +40 +78 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni240C +ENCODING 9228 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +E0 +80 +C0 +B8 +A0 +30 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni240D +ENCODING 9229 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +60 +80 +80 +80 +70 +28 +30 +28 +28 +00 +00 +ENDCHAR +STARTCHAR uni240E +ENCODING 9230 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +60 +80 +40 +20 +D0 +28 +28 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni240F +ENCODING 9231 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +60 +80 +40 +20 +C0 +38 +10 +10 +38 +00 +00 +ENDCHAR +STARTCHAR uni2410 +ENCODING 9232 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +A0 +A0 +C0 +40 +40 +70 +38 +20 +30 +20 +38 +ENDCHAR +STARTCHAR uni2411 +ENCODING 9233 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +A0 +A0 +C0 +30 +40 +30 +00 +10 +30 +10 +38 +ENDCHAR +STARTCHAR uni2412 +ENCODING 9234 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +A0 +A0 +C0 +30 +40 +30 +00 +30 +08 +10 +38 +ENDCHAR +STARTCHAR uni2413 +ENCODING 9235 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +A0 +A0 +C0 +30 +40 +30 +30 +08 +10 +08 +30 +ENDCHAR +STARTCHAR uni2414 +ENCODING 9236 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +A0 +A0 +C0 +30 +40 +30 +00 +20 +28 +38 +08 +ENDCHAR +STARTCHAR uni2415 +ENCODING 9237 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +90 +D0 +B0 +00 +20 +50 +70 +50 +00 +28 +30 +28 +ENDCHAR +STARTCHAR uni2416 +ENCODING 9238 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +60 +80 +40 +20 +C0 +50 +50 +20 +20 +48 +68 +58 +ENDCHAR +STARTCHAR uni2417 +ENCODING 9239 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +E0 +80 +C0 +80 +E0 +70 +20 +38 +34 +18 +14 +18 +ENDCHAR +STARTCHAR uni2418 +ENCODING 9240 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +60 +80 +60 +00 +20 +50 +70 +50 +00 +68 +58 +48 +ENDCHAR +STARTCHAR uni2419 +ENCODING 9241 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +E0 +80 +C0 +80 +E0 +00 +50 +70 +50 +50 +00 +ENDCHAR +STARTCHAR uni241A +ENCODING 9242 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +60 +80 +40 +E0 +50 +50 +20 +38 +14 +18 +14 +18 +ENDCHAR +STARTCHAR uni241B +ENCODING 9243 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +E0 +80 +C0 +80 +F0 +40 +20 +70 +00 +18 +20 +18 +ENDCHAR +STARTCHAR uni241C +ENCODING 9244 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +E0 +80 +C0 +80 +98 +20 +10 +08 +30 +00 +00 +ENDCHAR +STARTCHAR uni241D +ENCODING 9245 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +80 +B0 +90 +60 +18 +20 +10 +08 +30 +00 +00 +ENDCHAR +STARTCHAR uni241E +ENCODING 9246 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +A0 +C0 +A0 +A0 +18 +20 +10 +08 +30 +00 +00 +ENDCHAR +STARTCHAR uni241F +ENCODING 9247 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +90 +90 +90 +60 +18 +20 +10 +08 +30 +00 +00 +ENDCHAR +STARTCHAR uni2420 +ENCODING 9248 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +60 +80 +40 +20 +C0 +30 +28 +30 +20 +00 +00 +ENDCHAR +STARTCHAR uni2421 +ENCODING 9249 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +A0 +A0 +F0 +40 +60 +40 +70 +20 +20 +38 +00 +ENDCHAR +STARTCHAR uni2422 +ENCODING 9250 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +60 +40 +F0 +48 +48 +48 +70 +00 +00 +ENDCHAR +STARTCHAR uni2423 +ENCODING 9251 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2424 +ENCODING 9252 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +90 +D0 +B0 +90 +B0 +20 +20 +38 +00 +00 +ENDCHAR +STARTCHAR uni2425 +ENCODING 9253 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +48 +48 +90 +A0 +28 +48 +90 +90 +00 +00 +ENDCHAR +STARTCHAR uni2426 +ENCODING 9254 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +80 +40 +20 +20 +00 +20 +00 +00 +ENDCHAR +STARTCHAR uni2440 +ENCODING 9280 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +38 +28 +28 +20 +20 +A0 +A0 +E0 +00 +00 +ENDCHAR +STARTCHAR uni2441 +ENCODING 9281 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +08 +08 +08 +F8 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni2442 +ENCODING 9282 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +88 +88 +88 +F8 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2443 +ENCODING 9283 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +20 +F8 +88 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni2444 +ENCODING 9284 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F8 +A8 +A8 +20 +20 +A8 +A8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2445 +ENCODING 9285 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +D8 +A8 +D8 +88 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2446 +ENCODING 9286 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +18 +18 +D8 +C0 +C0 +D8 +18 +18 +00 +00 +ENDCHAR +STARTCHAR uni2447 +ENCODING 9287 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +08 +08 +20 +20 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni2448 +ENCODING 9288 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +0C +AC +AC +AC +A0 +A0 +00 +00 +00 +ENDCHAR +STARTCHAR uni2449 +ENCODING 9289 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +A8 +A8 +A8 +A8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni244A +ENCODING 9290 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +A0 +A0 +50 +50 +28 +28 +14 +14 +00 +00 +ENDCHAR +STARTCHAR uni2460 +ENCODING 9312 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +88 +A8 +E8 +A8 +A8 +F8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2461 +ENCODING 9313 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +88 +A8 +D8 +98 +A8 +F8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2462 +ENCODING 9314 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +88 +E8 +98 +A8 +98 +E8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2463 +ENCODING 9315 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +88 +C8 +C8 +E8 +F8 +A8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2464 +ENCODING 9316 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +88 +F8 +C8 +E8 +98 +E8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2465 +ENCODING 9317 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +88 +B8 +C8 +E8 +D8 +A8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2466 +ENCODING 9318 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +88 +F8 +98 +A8 +A8 +A8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2467 +ENCODING 9319 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +88 +A8 +D8 +A8 +D8 +A8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2468 +ENCODING 9320 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +88 +A8 +D8 +B8 +98 +E8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2469 +ENCODING 9321 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +D4 +EC +EC +EC +D4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni246A +ENCODING 9322 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +D4 +D4 +D4 +D4 +D4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni246B +ENCODING 9323 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +D4 +CC +CC +D4 +DC +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni246C +ENCODING 9324 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +D4 +CC +D4 +CC +D4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni246D +ENCODING 9325 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +D4 +D4 +DC +DC +CC +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni246E +ENCODING 9326 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +DC +D4 +DC +CC +DC +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni246F +ENCODING 9327 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +D4 +D4 +DC +D4 +CC +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni2470 +ENCODING 9328 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +DC +CC +D4 +D4 +D4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni2471 +ENCODING 9329 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +CC +D4 +CC +D4 +CC +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni2472 +ENCODING 9330 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +CC +D4 +CC +C4 +DC +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni2473 +ENCODING 9331 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +EC +B4 +B4 +D4 +EC +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni2474 +ENCODING 9332 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +88 +A8 +E8 +A8 +A8 +F8 +88 +50 +00 +00 +ENDCHAR +STARTCHAR uni2475 +ENCODING 9333 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +88 +A8 +D8 +98 +A8 +F8 +88 +50 +00 +00 +ENDCHAR +STARTCHAR uni2476 +ENCODING 9334 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +88 +E8 +98 +A8 +98 +E8 +88 +50 +00 +00 +ENDCHAR +STARTCHAR uni2477 +ENCODING 9335 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +88 +C8 +C8 +E8 +F8 +A8 +88 +50 +00 +00 +ENDCHAR +STARTCHAR uni2478 +ENCODING 9336 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +88 +F8 +C8 +E8 +98 +E8 +88 +50 +00 +00 +ENDCHAR +STARTCHAR uni2479 +ENCODING 9337 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +88 +B8 +C8 +E8 +D8 +A8 +88 +50 +00 +00 +ENDCHAR +STARTCHAR uni247A +ENCODING 9338 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +88 +F8 +98 +A8 +A8 +A8 +88 +50 +00 +00 +ENDCHAR +STARTCHAR uni247B +ENCODING 9339 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +88 +A8 +D8 +A8 +D8 +A8 +88 +50 +00 +00 +ENDCHAR +STARTCHAR uni247C +ENCODING 9340 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +88 +A8 +D8 +B8 +98 +E8 +88 +50 +00 +00 +ENDCHAR +STARTCHAR uni247D +ENCODING 9341 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +D4 +EC +EC +EC +D4 +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni247E +ENCODING 9342 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +D4 +D4 +D4 +D4 +D4 +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni247F +ENCODING 9343 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +D4 +CC +CC +D4 +DC +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni2480 +ENCODING 9344 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +D4 +CC +D4 +CC +D4 +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni2481 +ENCODING 9345 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +D4 +D4 +DC +DC +CC +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni2482 +ENCODING 9346 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +DC +D4 +DC +CC +DC +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni2483 +ENCODING 9347 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +D4 +D4 +DC +D4 +CC +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni2484 +ENCODING 9348 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +DC +CC +D4 +D4 +D4 +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni2485 +ENCODING 9349 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +CC +D4 +CC +D4 +CC +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni2486 +ENCODING 9350 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +CC +D4 +CC +C4 +DC +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni2487 +ENCODING 9351 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +EC +B4 +B4 +D4 +EC +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni2488 +ENCODING 9352 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +60 +20 +20 +20 +20 +74 +00 +00 +ENDCHAR +STARTCHAR uni2489 +ENCODING 9353 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +60 +10 +10 +20 +20 +40 +F4 +00 +00 +ENDCHAR +STARTCHAR uni248A +ENCODING 9354 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +60 +90 +10 +60 +10 +10 +E4 +00 +00 +ENDCHAR +STARTCHAR uni248B +ENCODING 9355 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +40 +90 +90 +F8 +10 +14 +00 +00 +ENDCHAR +STARTCHAR uni248C +ENCODING 9356 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +80 +E0 +10 +10 +90 +64 +00 +00 +ENDCHAR +STARTCHAR uni248D +ENCODING 9357 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +40 +80 +E0 +90 +90 +64 +00 +00 +ENDCHAR +STARTCHAR uni248E +ENCODING 9358 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +08 +08 +10 +10 +20 +24 +00 +00 +ENDCHAR +STARTCHAR uni248F +ENCODING 9359 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +60 +90 +90 +60 +90 +90 +64 +00 +00 +ENDCHAR +STARTCHAR uni2490 +ENCODING 9360 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +60 +90 +90 +70 +10 +10 +64 +00 +00 +ENDCHAR +STARTCHAR uni2491 +ENCODING 9361 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +90 +A8 +A8 +A8 +A8 +A8 +94 +00 +00 +ENDCHAR +STARTCHAR uni2492 +ENCODING 9362 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +50 +50 +50 +50 +50 +54 +00 +00 +ENDCHAR +STARTCHAR uni2493 +ENCODING 9363 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +B0 +88 +88 +90 +A0 +A0 +B4 +00 +00 +ENDCHAR +STARTCHAR uni2494 +ENCODING 9364 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +B0 +88 +88 +90 +88 +88 +B4 +00 +00 +ENDCHAR +STARTCHAR uni2495 +ENCODING 9365 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A0 +A0 +B0 +B0 +B8 +90 +94 +00 +00 +ENDCHAR +STARTCHAR uni2496 +ENCODING 9366 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +B8 +A0 +A0 +90 +90 +90 +A4 +00 +00 +ENDCHAR +STARTCHAR uni2497 +ENCODING 9367 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +90 +A0 +B0 +A8 +A8 +94 +00 +00 +ENDCHAR +STARTCHAR uni2498 +ENCODING 9368 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +B8 +88 +88 +88 +90 +90 +94 +00 +00 +ENDCHAR +STARTCHAR uni2499 +ENCODING 9369 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +90 +A8 +A8 +90 +A8 +A8 +94 +00 +00 +ENDCHAR +STARTCHAR uni249A +ENCODING 9370 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +90 +A8 +A8 +98 +88 +90 +A4 +00 +00 +ENDCHAR +STARTCHAR uni249B +ENCODING 9371 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +90 +68 +68 +68 +A8 +A8 +D4 +00 +00 +ENDCHAR +STARTCHAR uni249C +ENCODING 9372 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +A4 +94 +B4 +D4 +B4 +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni249D +ENCODING 9373 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +A4 +A4 +B4 +AC +B4 +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni249E +ENCODING 9374 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +84 +84 +94 +A4 +94 +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni249F +ENCODING 9375 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +94 +94 +B4 +D4 +B4 +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni24A0 +ENCODING 9376 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +94 +AC +BC +A4 +94 +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni24A1 +ENCODING 9377 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +94 +A4 +F4 +A4 +A4 +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni24A2 +ENCODING 9378 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +84 +B4 +D4 +B4 +94 +A4 +48 +00 +00 +ENDCHAR +STARTCHAR uni24A3 +ENCODING 9379 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +A4 +A4 +B4 +AC +AC +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni24A4 +ENCODING 9380 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +84 +94 +84 +94 +94 +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni24A5 +ENCODING 9381 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +84 +94 +84 +94 +94 +A4 +48 +00 +00 +ENDCHAR +STARTCHAR uni24A6 +ENCODING 9382 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +A4 +A4 +B4 +A4 +B4 +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni24A7 +ENCODING 9383 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +94 +94 +94 +94 +94 +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni24A8 +ENCODING 9384 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +84 +84 +EC +D4 +D4 +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni24A9 +ENCODING 9385 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +84 +84 +E4 +D4 +D4 +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni24AA +ENCODING 9386 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +84 +84 +94 +AC +94 +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni24AB +ENCODING 9387 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +84 +84 +B4 +AC +B4 +A4 +48 +00 +00 +ENDCHAR +STARTCHAR uni24AC +ENCODING 9388 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +84 +84 +B4 +D4 +B4 +94 +48 +00 +00 +ENDCHAR +STARTCHAR uni24AD +ENCODING 9389 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +84 +84 +B4 +A4 +A4 +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni24AE +ENCODING 9390 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +84 +B4 +A4 +94 +B4 +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni24AF +ENCODING 9391 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +A4 +A4 +F4 +A4 +94 +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni24B0 +ENCODING 9392 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +84 +84 +D4 +D4 +B4 +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni24B1 +ENCODING 9393 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +84 +84 +AC +AC +94 +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni24B2 +ENCODING 9394 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +84 +84 +C4 +D4 +BC +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni24B3 +ENCODING 9395 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +84 +84 +AC +94 +AC +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni24B4 +ENCODING 9396 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +84 +84 +AC +AC +94 +A4 +48 +00 +00 +ENDCHAR +STARTCHAR uni24B5 +ENCODING 9397 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +84 +84 +B4 +94 +A4 +B4 +84 +48 +00 +00 +ENDCHAR +STARTCHAR uni24B6 +ENCODING 9398 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +94 +AC +BC +AC +AC +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24B7 +ENCODING 9399 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +B4 +AC +B4 +AC +B4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24B8 +ENCODING 9400 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +94 +A4 +A4 +A4 +94 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24B9 +ENCODING 9401 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +B4 +AC +AC +AC +B4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24BA +ENCODING 9402 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +B4 +A4 +B4 +A4 +B4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24BB +ENCODING 9403 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +B4 +A4 +B4 +A4 +A4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24BC +ENCODING 9404 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +B4 +C4 +D4 +D4 +B4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24BD +ENCODING 9405 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +AC +AC +BC +AC +AC +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24BE +ENCODING 9406 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +94 +94 +94 +94 +94 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24BF +ENCODING 9407 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +B4 +94 +94 +94 +A4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24C0 +ENCODING 9408 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +AC +AC +B4 +AC +AC +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24C1 +ENCODING 9409 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +A4 +A4 +A4 +A4 +B4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24C2 +ENCODING 9410 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +AC +BC +AC +AC +AC +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24C3 +ENCODING 9411 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +AC +BC +BC +AC +AC +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24C4 +ENCODING 9412 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +94 +AC +AC +AC +94 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24C5 +ENCODING 9413 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +B4 +AC +B4 +A4 +A4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24C6 +ENCODING 9414 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +A4 +D4 +D4 +D4 +B4 +94 +78 +00 +00 +ENDCHAR +STARTCHAR uni24C7 +ENCODING 9415 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +B4 +AC +B4 +AC +AC +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24C8 +ENCODING 9416 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +9C +A4 +94 +8C +B4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24C9 +ENCODING 9417 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +BC +94 +94 +94 +94 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24CA +ENCODING 9418 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +AC +AC +AC +AC +94 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24CB +ENCODING 9419 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +AC +AC +AC +94 +94 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24CC +ENCODING 9420 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +C4 +D4 +D4 +AC +AC +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24CD +ENCODING 9421 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +AC +AC +94 +AC +AC +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24CE +ENCODING 9422 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +AC +AC +94 +94 +94 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24CF +ENCODING 9423 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +BC +8C +94 +A4 +BC +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24D0 +ENCODING 9424 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +A4 +94 +B4 +D4 +B4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24D1 +ENCODING 9425 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +A4 +A4 +B4 +AC +B4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24D2 +ENCODING 9426 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +84 +84 +94 +A4 +94 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24D3 +ENCODING 9427 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +94 +94 +B4 +D4 +B4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24D4 +ENCODING 9428 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +94 +AC +BC +A4 +94 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24D5 +ENCODING 9429 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +94 +A4 +F4 +A4 +A4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24D6 +ENCODING 9430 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +84 +B4 +D4 +B4 +94 +A4 +78 +00 +00 +ENDCHAR +STARTCHAR uni24D7 +ENCODING 9431 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +A4 +A4 +B4 +AC +AC +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24D8 +ENCODING 9432 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +84 +94 +84 +94 +94 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24D9 +ENCODING 9433 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +84 +94 +84 +94 +94 +A4 +78 +00 +00 +ENDCHAR +STARTCHAR uni24DA +ENCODING 9434 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +A4 +A4 +B4 +A4 +B4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24DB +ENCODING 9435 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +94 +94 +94 +94 +94 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24DC +ENCODING 9436 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +84 +84 +EC +D4 +D4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24DD +ENCODING 9437 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +84 +84 +E4 +D4 +D4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24DE +ENCODING 9438 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +84 +84 +94 +AC +94 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24DF +ENCODING 9439 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +84 +84 +B4 +AC +B4 +A4 +78 +00 +00 +ENDCHAR +STARTCHAR uni24E0 +ENCODING 9440 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +84 +84 +B4 +D4 +B4 +94 +78 +00 +00 +ENDCHAR +STARTCHAR uni24E1 +ENCODING 9441 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +84 +84 +B4 +A4 +A4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24E2 +ENCODING 9442 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +84 +B4 +A4 +94 +B4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24E3 +ENCODING 9443 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +A4 +A4 +F4 +A4 +94 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24E4 +ENCODING 9444 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +84 +84 +D4 +D4 +B4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24E5 +ENCODING 9445 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +84 +84 +AC +AC +94 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24E6 +ENCODING 9446 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +84 +84 +C4 +D4 +BC +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24E7 +ENCODING 9447 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +84 +84 +AC +94 +AC +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24E8 +ENCODING 9448 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +84 +84 +AC +AC +94 +A4 +78 +00 +00 +ENDCHAR +STARTCHAR uni24E9 +ENCODING 9449 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +84 +B4 +94 +A4 +B4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24EA +ENCODING 9450 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +94 +AC +AC +AC +94 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni24EB +ENCODING 9451 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +FC +AC +AC +AC +AC +AC +FC +78 +00 +00 +ENDCHAR +STARTCHAR uni24EC +ENCODING 9452 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +FC +AC +B4 +B4 +AC +A4 +FC +78 +00 +00 +ENDCHAR +STARTCHAR uni24ED +ENCODING 9453 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +FC +AC +B4 +AC +B4 +AC +FC +78 +00 +00 +ENDCHAR +STARTCHAR uni24EE +ENCODING 9454 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +FC +AC +AC +A4 +A4 +B4 +FC +78 +00 +00 +ENDCHAR +STARTCHAR uni24EF +ENCODING 9455 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +FC +A4 +AC +A4 +B4 +A4 +FC +78 +00 +00 +ENDCHAR +STARTCHAR uni24F0 +ENCODING 9456 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +FC +AC +AC +A4 +A8 +B4 +FC +78 +00 +00 +ENDCHAR +STARTCHAR uni24F1 +ENCODING 9457 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +FC +A4 +B4 +AC +AC +AC +FC +78 +00 +00 +ENDCHAR +STARTCHAR uni24F2 +ENCODING 9458 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +FC +B4 +A8 +B4 +A8 +B4 +FC +78 +00 +00 +ENDCHAR +STARTCHAR uni24F3 +ENCODING 9459 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +FC +B4 +A8 +B0 +B8 +B4 +FC +78 +00 +00 +ENDCHAR +STARTCHAR uni24F4 +ENCODING 9460 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +FC +B4 +C8 +C8 +A8 +94 +FC +78 +00 +00 +ENDCHAR +STARTCHAR uni24F5 +ENCODING 9461 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +F8 +88 +A8 +E8 +A8 +A8 +F8 +88 +F8 +70 +00 +ENDCHAR +STARTCHAR uni24F6 +ENCODING 9462 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +F8 +88 +A8 +D8 +98 +A8 +F8 +88 +F8 +70 +00 +ENDCHAR +STARTCHAR uni24F7 +ENCODING 9463 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +F8 +88 +E8 +98 +A8 +98 +E8 +88 +F8 +70 +00 +ENDCHAR +STARTCHAR uni24F8 +ENCODING 9464 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +F8 +88 +C8 +C8 +E8 +F8 +A8 +88 +F8 +70 +00 +ENDCHAR +STARTCHAR uni24F9 +ENCODING 9465 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +F8 +88 +F8 +C8 +E8 +98 +E8 +88 +F8 +70 +00 +ENDCHAR +STARTCHAR uni24FA +ENCODING 9466 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +F8 +88 +B8 +C8 +E8 +D8 +A8 +88 +F8 +70 +00 +ENDCHAR +STARTCHAR uni24FB +ENCODING 9467 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +F8 +88 +F8 +98 +A8 +A8 +A8 +88 +F8 +70 +00 +ENDCHAR +STARTCHAR uni24FC +ENCODING 9468 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +F8 +88 +A8 +D8 +A8 +D8 +A8 +88 +F8 +70 +00 +ENDCHAR +STARTCHAR uni24FD +ENCODING 9469 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +F8 +88 +A8 +D8 +B8 +98 +E8 +88 +F8 +70 +00 +ENDCHAR +STARTCHAR uni24FE +ENCODING 9470 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +78 +FC +84 +D4 +EC +EC +EC +D4 +84 +FC +78 +00 +ENDCHAR +STARTCHAR uni24FF +ENCODING 9471 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +FC +CC +B4 +B4 +B4 +CC +FC +78 +00 +00 +ENDCHAR +STARTCHAR SF100000 +ENCODING 9472 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FC +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2501 +ENCODING 9473 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +FC +FC +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF110000 +ENCODING 9474 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2503 +ENCODING 9475 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +30 +30 +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni2504 +ENCODING 9476 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +A8 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2505 +ENCODING 9477 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A8 +A8 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2506 +ENCODING 9478 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +00 +00 +20 +20 +00 +00 +20 +20 +00 +ENDCHAR +STARTCHAR uni2507 +ENCODING 9479 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +30 +30 +00 +00 +30 +30 +00 +00 +30 +30 +00 +ENDCHAR +STARTCHAR uni2508 +ENCODING 9480 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +A8 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2509 +ENCODING 9481 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A8 +A8 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni250A +ENCODING 9482 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +00 +20 +20 +00 +20 +20 +00 +20 +20 +ENDCHAR +STARTCHAR uni250B +ENCODING 9483 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +30 +30 +00 +30 +30 +00 +30 +30 +00 +30 +30 +ENDCHAR +STARTCHAR SF010000 +ENCODING 9484 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +3C +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni250D +ENCODING 9485 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +3C +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni250E +ENCODING 9486 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +3C +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni250F +ENCODING 9487 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +3C +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR SF030000 +ENCODING 9488 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +E0 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2511 +ENCODING 9489 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +E0 +E0 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2512 +ENCODING 9490 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +F0 +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni2513 +ENCODING 9491 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F0 +F0 +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR SF020000 +ENCODING 9492 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +20 +3C +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2515 +ENCODING 9493 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +3C +3C +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2516 +ENCODING 9494 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +30 +3C +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2517 +ENCODING 9495 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +3C +3C +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF040000 +ENCODING 9496 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +20 +E0 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2519 +ENCODING 9497 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +E0 +E0 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni251A +ENCODING 9498 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +30 +F0 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni251B +ENCODING 9499 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +F0 +F0 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF080000 +ENCODING 9500 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +20 +3C +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni251D +ENCODING 9501 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +3C +3C +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni251E +ENCODING 9502 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +30 +3C +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni251F +ENCODING 9503 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +20 +3C +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni2520 +ENCODING 9504 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +30 +3C +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni2521 +ENCODING 9505 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +3C +3C +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2522 +ENCODING 9506 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +3C +3C +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni2523 +ENCODING 9507 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +3C +3C +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR SF090000 +ENCODING 9508 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +20 +E0 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2525 +ENCODING 9509 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +E0 +E0 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2526 +ENCODING 9510 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +30 +F0 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2527 +ENCODING 9511 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +20 +F0 +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni2528 +ENCODING 9512 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +30 +F0 +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni2529 +ENCODING 9513 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +F0 +F0 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni252A +ENCODING 9514 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +F0 +F0 +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni252B +ENCODING 9515 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +F0 +F0 +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR SF060000 +ENCODING 9516 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FC +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni252D +ENCODING 9517 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +E0 +FC +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni252E +ENCODING 9518 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +FC +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni252F +ENCODING 9519 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +FC +FC +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2530 +ENCODING 9520 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FC +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni2531 +ENCODING 9521 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F0 +FC +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni2532 +ENCODING 9522 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +FC +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni2533 +ENCODING 9523 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +FC +FC +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR SF070000 +ENCODING 9524 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +20 +FC +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2535 +ENCODING 9525 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +E0 +FC +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2536 +ENCODING 9526 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +3C +FC +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2537 +ENCODING 9527 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +FC +FC +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2538 +ENCODING 9528 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +30 +FC +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2539 +ENCODING 9529 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +F0 +FC +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni253A +ENCODING 9530 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +3C +FC +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni253B +ENCODING 9531 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +FC +FC +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF050000 +ENCODING 9532 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +20 +FC +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni253D +ENCODING 9533 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +E0 +FC +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni253E +ENCODING 9534 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +3C +FC +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni253F +ENCODING 9535 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +FC +FC +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2540 +ENCODING 9536 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +30 +FC +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2541 +ENCODING 9537 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +20 +FC +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni2542 +ENCODING 9538 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +30 +FC +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni2543 +ENCODING 9539 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +F0 +FC +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2544 +ENCODING 9540 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +3C +FC +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2545 +ENCODING 9541 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +F0 +FC +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni2546 +ENCODING 9542 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +3C +FC +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni2547 +ENCODING 9543 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +FC +FC +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2548 +ENCODING 9544 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +FC +FC +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni2549 +ENCODING 9545 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +F0 +FC +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni254A +ENCODING 9546 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +3C +FC +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni254B +ENCODING 9547 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +FC +FC +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni254C +ENCODING 9548 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +D8 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni254D +ENCODING 9549 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +D8 +D8 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni254E +ENCODING 9550 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +00 +20 +20 +20 +20 +20 +00 +ENDCHAR +STARTCHAR uni254F +ENCODING 9551 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +00 +30 +30 +30 +30 +30 +00 +ENDCHAR +STARTCHAR SF430000 +ENCODING 9552 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +FC +00 +FC +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF240000 +ENCODING 9553 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +ENDCHAR +STARTCHAR SF510000 +ENCODING 9554 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +20 +3C +20 +20 +20 +20 +ENDCHAR +STARTCHAR SF520000 +ENCODING 9555 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +7C +50 +50 +50 +50 +50 +ENDCHAR +STARTCHAR SF390000 +ENCODING 9556 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +7C +40 +5C +50 +50 +50 +50 +ENDCHAR +STARTCHAR SF220000 +ENCODING 9557 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +E0 +20 +E0 +20 +20 +20 +20 +ENDCHAR +STARTCHAR SF210000 +ENCODING 9558 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +F0 +50 +50 +50 +50 +50 +ENDCHAR +STARTCHAR SF250000 +ENCODING 9559 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F0 +10 +D0 +50 +50 +50 +50 +ENDCHAR +STARTCHAR SF500000 +ENCODING 9560 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +3C +20 +3C +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF490000 +ENCODING 9561 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +50 +50 +50 +50 +50 +7C +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF380000 +ENCODING 9562 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +50 +50 +50 +50 +5C +40 +7C +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF280000 +ENCODING 9563 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +E0 +20 +E0 +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF270000 +ENCODING 9564 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +50 +50 +50 +50 +50 +F0 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF260000 +ENCODING 9565 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +50 +50 +50 +50 +D0 +10 +F0 +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF360000 +ENCODING 9566 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +3C +20 +3C +20 +20 +20 +20 +ENDCHAR +STARTCHAR SF370000 +ENCODING 9567 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +50 +50 +50 +50 +50 +5C +50 +50 +50 +50 +50 +ENDCHAR +STARTCHAR SF420000 +ENCODING 9568 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +50 +50 +50 +50 +5C +40 +5C +50 +50 +50 +50 +ENDCHAR +STARTCHAR SF190000 +ENCODING 9569 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +E0 +20 +E0 +20 +20 +20 +20 +ENDCHAR +STARTCHAR SF200000 +ENCODING 9570 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +50 +50 +50 +50 +50 +D0 +50 +50 +50 +50 +50 +ENDCHAR +STARTCHAR SF230000 +ENCODING 9571 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +50 +50 +50 +50 +D0 +10 +D0 +50 +50 +50 +50 +ENDCHAR +STARTCHAR SF470000 +ENCODING 9572 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +FC +00 +FC +20 +20 +20 +20 +ENDCHAR +STARTCHAR SF480000 +ENCODING 9573 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FC +50 +50 +50 +50 +50 +ENDCHAR +STARTCHAR SF410000 +ENCODING 9574 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +FC +00 +DC +50 +50 +50 +50 +ENDCHAR +STARTCHAR SF450000 +ENCODING 9575 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +FC +00 +FC +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF460000 +ENCODING 9576 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +50 +50 +50 +50 +50 +FC +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF400000 +ENCODING 9577 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +50 +50 +50 +50 +DC +00 +FC +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF540000 +ENCODING 9578 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +FC +20 +FC +20 +20 +20 +20 +ENDCHAR +STARTCHAR SF530000 +ENCODING 9579 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +50 +50 +50 +50 +50 +FC +50 +50 +50 +50 +50 +ENDCHAR +STARTCHAR SF440000 +ENCODING 9580 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +50 +50 +50 +50 +50 +DC +00 +DC +50 +50 +50 +50 +ENDCHAR +STARTCHAR uni256D +ENCODING 9581 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +0C +10 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni256E +ENCODING 9582 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +80 +40 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni256F +ENCODING 9583 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +40 +80 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2570 +ENCODING 9584 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +10 +0C +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2571 +ENCODING 9585 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +04 +04 +08 +08 +10 +10 +20 +20 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni2572 +ENCODING 9586 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +80 +80 +40 +40 +20 +20 +10 +10 +08 +08 +04 +04 +ENDCHAR +STARTCHAR uni2573 +ENCODING 9587 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +84 +84 +48 +48 +30 +30 +30 +30 +48 +48 +84 +84 +ENDCHAR +STARTCHAR uni2574 +ENCODING 9588 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +E0 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2575 +ENCODING 9589 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +20 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2576 +ENCODING 9590 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +1C +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2577 +ENCODING 9591 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2578 +ENCODING 9592 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +E0 +E0 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2579 +ENCODING 9593 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +30 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni257A +ENCODING 9594 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +1C +1C +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni257B +ENCODING 9595 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +30 +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni257C +ENCODING 9596 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +1C +FC +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni257D +ENCODING 9597 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +20 +30 +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni257E +ENCODING 9598 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +E0 +FC +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni257F +ENCODING 9599 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +30 +30 +30 +30 +30 +30 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR upblock +ENCODING 9600 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +FC +FC +FC +FC +FC +FC +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2581 +ENCODING 9601 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +FC +FC +ENDCHAR +STARTCHAR uni2582 +ENCODING 9602 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +FC +FC +FC +ENDCHAR +STARTCHAR uni2583 +ENCODING 9603 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +FC +FC +FC +FC +FC +ENDCHAR +STARTCHAR dnblock +ENCODING 9604 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FC +FC +FC +FC +FC +FC +ENDCHAR +STARTCHAR uni2585 +ENCODING 9605 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +FC +FC +FC +FC +FC +FC +FC +FC +ENDCHAR +STARTCHAR uni2586 +ENCODING 9606 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +FC +FC +FC +FC +FC +FC +FC +FC +FC +ENDCHAR +STARTCHAR uni2587 +ENCODING 9607 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +ENDCHAR +STARTCHAR block +ENCODING 9608 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +ENDCHAR +STARTCHAR uni2589 +ENCODING 9609 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +F8 +F8 +F8 +F8 +F8 +F8 +F8 +F8 +F8 +F8 +F8 +F8 +ENDCHAR +STARTCHAR uni258A +ENCODING 9610 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +ENDCHAR +STARTCHAR uni258B +ENCODING 9611 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +ENDCHAR +STARTCHAR lfblock +ENCODING 9612 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +ENDCHAR +STARTCHAR uni258D +ENCODING 9613 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni258E +ENCODING 9614 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni258F +ENCODING 9615 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR rtblock +ENCODING 9616 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +1C +1C +1C +1C +1C +1C +1C +1C +1C +1C +1C +1C +ENDCHAR +STARTCHAR ltshade +ENCODING 9617 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +A8 +00 +54 +00 +A8 +00 +54 +00 +A8 +00 +54 +00 +ENDCHAR +STARTCHAR shade +ENCODING 9618 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +A8 +54 +A8 +54 +A8 +54 +A8 +54 +A8 +54 +A8 +54 +ENDCHAR +STARTCHAR dkshade +ENCODING 9619 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +54 +FC +A8 +FC +54 +FC +A8 +FC +54 +FC +A8 +FC +ENDCHAR +STARTCHAR uni2594 +ENCODING 9620 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +FC +FC +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2595 +ENCODING 9621 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni2596 +ENCODING 9622 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +E0 +E0 +E0 +E0 +E0 +E0 +ENDCHAR +STARTCHAR uni2597 +ENCODING 9623 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +1C +1C +1C +1C +1C +1C +ENDCHAR +STARTCHAR uni2598 +ENCODING 9624 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +E0 +E0 +E0 +E0 +E0 +E0 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2599 +ENCODING 9625 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +E0 +E0 +E0 +E0 +E0 +E0 +FC +FC +FC +FC +FC +FC +ENDCHAR +STARTCHAR uni259A +ENCODING 9626 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +E0 +E0 +E0 +E0 +E0 +E0 +1C +1C +1C +1C +1C +1C +ENDCHAR +STARTCHAR uni259B +ENCODING 9627 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +FC +FC +FC +FC +FC +FC +E0 +E0 +E0 +E0 +E0 +E0 +ENDCHAR +STARTCHAR uni259C +ENCODING 9628 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +FC +FC +FC +FC +FC +FC +1C +1C +1C +1C +1C +1C +ENDCHAR +STARTCHAR uni259D +ENCODING 9629 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +1C +1C +1C +1C +1C +1C +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni259E +ENCODING 9630 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +1C +1C +1C +1C +1C +1C +E0 +E0 +E0 +E0 +E0 +E0 +ENDCHAR +STARTCHAR uni259F +ENCODING 9631 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +1C +1C +1C +1C +1C +1C +FC +FC +FC +FC +FC +FC +ENDCHAR +STARTCHAR filledbox +ENCODING 9632 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +F8 +F8 +F8 +F8 +00 +00 +ENDCHAR +STARTCHAR H22073 +ENCODING 9633 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +88 +88 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni25A2 +ENCODING 9634 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni25A3 +ENCODING 9635 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +88 +A8 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni25A4 +ENCODING 9636 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +88 +F8 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni25A5 +ENCODING 9637 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +A8 +A8 +A8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni25A6 +ENCODING 9638 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +A8 +F8 +A8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni25A7 +ENCODING 9639 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +C8 +A8 +98 +F8 +00 +00 +ENDCHAR +STARTCHAR uni25A8 +ENCODING 9640 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +98 +A8 +C8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni25A9 +ENCODING 9641 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +D8 +A8 +D8 +F8 +00 +00 +ENDCHAR +STARTCHAR H18543 +ENCODING 9642 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +70 +70 +00 +00 +00 +00 +ENDCHAR +STARTCHAR H18551 +ENCODING 9643 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +50 +70 +00 +00 +00 +00 +ENDCHAR +STARTCHAR filledrect +ENCODING 9644 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +FC +FC +FC +FC +FC +00 +00 +00 +ENDCHAR +STARTCHAR uni25AD +ENCODING 9645 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +FC +84 +84 +84 +FC +00 +00 +00 +ENDCHAR +STARTCHAR uni25AE +ENCODING 9646 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +78 +78 +78 +78 +78 +78 +78 +78 +78 +00 +ENDCHAR +STARTCHAR uni25AF +ENCODING 9647 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +48 +48 +48 +48 +48 +48 +48 +48 +78 +00 +ENDCHAR +STARTCHAR uni25B0 +ENCODING 9648 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +78 +F0 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni25B1 +ENCODING 9649 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +48 +F0 +00 +00 +00 +00 +ENDCHAR +STARTCHAR triagup +ENCODING 9650 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +70 +70 +F8 +F8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni25B3 +ENCODING 9651 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +50 +50 +88 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni25B4 +ENCODING 9652 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +20 +70 +70 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni25B5 +ENCODING 9653 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +20 +50 +50 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni25B6 +ENCODING 9654 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +60 +70 +78 +70 +60 +40 +00 +00 +ENDCHAR +STARTCHAR uni25B7 +ENCODING 9655 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +60 +50 +48 +50 +60 +40 +00 +00 +ENDCHAR +STARTCHAR uni25B8 +ENCODING 9656 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +40 +60 +70 +60 +40 +00 +00 +00 +ENDCHAR +STARTCHAR uni25B9 +ENCODING 9657 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +40 +60 +50 +60 +40 +00 +00 +00 +ENDCHAR +STARTCHAR triagrt +ENCODING 9658 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +C0 +F0 +FC +F0 +C0 +00 +00 +00 +ENDCHAR +STARTCHAR uni25BB +ENCODING 9659 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +C0 +B0 +8C +B0 +C0 +00 +00 +00 +ENDCHAR +STARTCHAR triagdn +ENCODING 9660 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +F8 +F8 +70 +70 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni25BD +ENCODING 9661 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +88 +88 +50 +50 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni25BE +ENCODING 9662 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +70 +70 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni25BF +ENCODING 9663 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +50 +50 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni25C0 +ENCODING 9664 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +18 +38 +78 +38 +18 +08 +00 +00 +ENDCHAR +STARTCHAR uni25C1 +ENCODING 9665 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +18 +28 +48 +28 +18 +08 +00 +00 +ENDCHAR +STARTCHAR uni25C2 +ENCODING 9666 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +30 +70 +30 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni25C3 +ENCODING 9667 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +30 +50 +30 +10 +00 +00 +00 +ENDCHAR +STARTCHAR triaglf +ENCODING 9668 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +0C +3C +FC +3C +0C +00 +00 +00 +ENDCHAR +STARTCHAR uni25C5 +ENCODING 9669 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +0C +34 +C4 +34 +0C +00 +00 +00 +ENDCHAR +STARTCHAR uni25C6 +ENCODING 9670 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +70 +F8 +70 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni25C7 +ENCODING 9671 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +50 +88 +50 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni25C8 +ENCODING 9672 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +50 +A8 +50 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni25C9 +ENCODING 9673 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +48 +B4 +B4 +48 +30 +00 +00 +ENDCHAR +STARTCHAR lozenge +ENCODING 9674 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +50 +50 +88 +50 +50 +20 +00 +00 +ENDCHAR +STARTCHAR circle +ENCODING 9675 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +48 +84 +84 +48 +30 +00 +00 +ENDCHAR +STARTCHAR uni25CC +ENCODING 9676 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +08 +80 +04 +40 +10 +00 +00 +ENDCHAR +STARTCHAR uni25CD +ENCODING 9677 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +A8 +A8 +A8 +70 +00 +00 +ENDCHAR +STARTCHAR uni25CE +ENCODING 9678 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +A8 +D8 +A8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR H18533 +ENCODING 9679 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +78 +FC +FC +78 +30 +00 +00 +ENDCHAR +STARTCHAR uni25D0 +ENCODING 9680 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +68 +E4 +E4 +68 +30 +00 +00 +ENDCHAR +STARTCHAR uni25D1 +ENCODING 9681 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +58 +9C +9C +58 +30 +00 +00 +ENDCHAR +STARTCHAR uni25D2 +ENCODING 9682 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +48 +84 +FC +78 +30 +00 +00 +ENDCHAR +STARTCHAR uni25D3 +ENCODING 9683 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +78 +FC +84 +48 +30 +00 +00 +ENDCHAR +STARTCHAR uni25D4 +ENCODING 9684 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +58 +9C +84 +48 +30 +00 +00 +ENDCHAR +STARTCHAR uni25D5 +ENCODING 9685 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +68 +E4 +84 +48 +30 +00 +00 +ENDCHAR +STARTCHAR uni25D6 +ENCODING 9686 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +04 +1C +3C +3C +7C +3C +3C +1C +04 +00 +00 +ENDCHAR +STARTCHAR uni25D7 +ENCODING 9687 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +80 +E0 +F0 +F0 +F8 +F0 +F0 +E0 +80 +00 +00 +ENDCHAR +STARTCHAR invbullet +ENCODING 9688 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +FC +FC +FC +FC +CC +84 +84 +CC +FC +FC +FC +FC +ENDCHAR +STARTCHAR invcircle +ENCODING 9689 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +FC +FC +FC +CC +B4 +78 +78 +B4 +CC +FC +FC +FC +ENDCHAR +STARTCHAR uni25DA +ENCODING 9690 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +FC +FC +FC +CC +B4 +78 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni25DB +ENCODING 9691 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +78 +B4 +CC +FC +FC +FC +ENDCHAR +STARTCHAR uni25DC +ENCODING 9692 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +40 +80 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni25DD +ENCODING 9693 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +08 +04 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni25DE +ENCODING 9694 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +04 +08 +10 +00 +00 +ENDCHAR +STARTCHAR uni25DF +ENCODING 9695 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +80 +40 +20 +00 +00 +ENDCHAR +STARTCHAR uni25E0 +ENCODING 9696 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +48 +84 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni25E1 +ENCODING 9697 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +84 +48 +30 +00 +00 +ENDCHAR +STARTCHAR uni25E2 +ENCODING 9698 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +08 +18 +38 +78 +F8 +00 +00 +ENDCHAR +STARTCHAR uni25E3 +ENCODING 9699 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +80 +C0 +E0 +F0 +F8 +00 +00 +ENDCHAR +STARTCHAR uni25E4 +ENCODING 9700 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +F0 +E0 +C0 +80 +00 +00 +ENDCHAR +STARTCHAR uni25E5 +ENCODING 9701 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +78 +38 +18 +08 +00 +00 +ENDCHAR +STARTCHAR openbullet +ENCODING 9702 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni25E7 +ENCODING 9703 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +E8 +E8 +E8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni25E8 +ENCODING 9704 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +B8 +B8 +B8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni25E9 +ENCODING 9705 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +F8 +E8 +C8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni25EA +ENCODING 9706 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +98 +B8 +F8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni25EB +ENCODING 9707 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +A8 +A8 +A8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni25EC +ENCODING 9708 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +50 +70 +A8 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni25ED +ENCODING 9709 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +70 +70 +E8 +E8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni25EE +ENCODING 9710 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +70 +70 +B8 +B8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni25EF +ENCODING 9711 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +48 +84 +84 +84 +48 +30 +00 +00 +ENDCHAR +STARTCHAR uni25F0 +ENCODING 9712 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +A8 +E8 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni25F1 +ENCODING 9713 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +88 +E8 +A8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni25F2 +ENCODING 9714 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +88 +B8 +A8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni25F3 +ENCODING 9715 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +A8 +B8 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni25F4 +ENCODING 9716 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +A8 +E8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni25F5 +ENCODING 9717 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +E8 +A8 +70 +00 +00 +ENDCHAR +STARTCHAR uni25F6 +ENCODING 9718 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +B8 +A8 +70 +00 +00 +ENDCHAR +STARTCHAR uni25F7 +ENCODING 9719 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +A8 +B8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni25F8 +ENCODING 9720 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +90 +A0 +C0 +80 +00 +00 +00 +ENDCHAR +STARTCHAR uni25F9 +ENCODING 9721 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +48 +28 +18 +08 +00 +00 +00 +ENDCHAR +STARTCHAR uni25FA +ENCODING 9722 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +80 +C0 +A0 +90 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni25FB +ENCODING 9723 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +78 +48 +48 +78 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni25FC +ENCODING 9724 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +78 +78 +78 +00 +00 +00 +ENDCHAR +STARTCHAR uni25FD +ENCODING 9725 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +78 +48 +48 +78 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni25FE +ENCODING 9726 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +78 +78 +78 +78 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni25FF +ENCODING 9727 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +08 +18 +28 +48 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2600 +ENCODING 9728 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +88 +20 +70 +20 +88 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2601 +ENCODING 9729 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +60 +F8 +FC +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2602 +ENCODING 9730 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +70 +F8 +F8 +20 +20 +20 +20 +40 +00 +00 +ENDCHAR +STARTCHAR uni2603 +ENCODING 9731 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +A0 +74 +50 +A8 +50 +54 +70 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2604 +ENCODING 9732 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +08 +48 +50 +54 +44 +08 +60 +90 +90 +60 +00 +00 +ENDCHAR +STARTCHAR uni2605 +ENCODING 9733 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +F8 +70 +70 +88 +00 +00 +00 +ENDCHAR +STARTCHAR uni2606 +ENCODING 9734 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +F8 +50 +70 +88 +00 +00 +00 +ENDCHAR +STARTCHAR uni2607 +ENCODING 9735 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +08 +10 +20 +40 +80 +40 +28 +18 +38 +00 +00 +ENDCHAR +STARTCHAR uni2608 +ENCODING 9736 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +88 +90 +90 +A0 +A0 +98 +98 +B8 +00 +00 +ENDCHAR +STARTCHAR uni2609 +ENCODING 9737 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +88 +A8 +88 +70 +00 +00 +00 +ENDCHAR +STARTCHAR uni260A +ENCODING 9738 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +50 +50 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni260B +ENCODING 9739 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +A8 +50 +50 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni260C +ENCODING 9740 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +08 +70 +90 +90 +60 +00 +00 +ENDCHAR +STARTCHAR uni260D +ENCODING 9741 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +30 +48 +48 +30 +20 +60 +90 +90 +60 +00 +00 +ENDCHAR +STARTCHAR uni260E +ENCODING 9742 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +F8 +A8 +70 +F8 +F8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni260F +ENCODING 9743 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +A8 +A8 +70 +88 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2610 +ENCODING 9744 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +FC +84 +84 +84 +84 +84 +84 +84 +FC +00 +00 +ENDCHAR +STARTCHAR uni2611 +ENCODING 9745 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +FC +84 +8C +8C +94 +94 +D4 +A4 +FC +00 +00 +ENDCHAR +STARTCHAR uni2612 +ENCODING 9746 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +FC +CC +CC +B4 +B4 +B4 +CC +CC +FC +00 +00 +ENDCHAR +STARTCHAR uni2613 +ENCODING 9747 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +88 +88 +50 +50 +20 +50 +50 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni2616 +ENCODING 9750 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +88 +88 +88 +88 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2617 +ENCODING 9751 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +70 +F8 +F8 +F8 +F8 +F8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2619 +ENCODING 9753 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +24 +74 +F8 +E8 +F4 +74 +28 +00 +00 +ENDCHAR +STARTCHAR uni261A +ENCODING 9754 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +FC +7C +7C +3C +00 +00 +00 +ENDCHAR +STARTCHAR uni261B +ENCODING 9755 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +FC +F8 +F8 +F0 +00 +00 +00 +ENDCHAR +STARTCHAR uni261C +ENCODING 9756 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +FC +4C +4C +3C +00 +00 +00 +ENDCHAR +STARTCHAR uni261D +ENCODING 9757 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +18 +78 +68 +48 +48 +78 +78 +00 +00 +ENDCHAR +STARTCHAR uni261E +ENCODING 9758 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +FC +C8 +C8 +F0 +00 +00 +00 +ENDCHAR +STARTCHAR uni261F +ENCODING 9759 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +78 +48 +48 +68 +78 +18 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni2620 +ENCODING 9760 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +A8 +F8 +70 +50 +20 +88 +70 +88 +00 +00 +ENDCHAR +STARTCHAR uni2621 +ENCODING 9761 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +08 +08 +10 +20 +40 +40 +38 +00 +00 +ENDCHAR +STARTCHAR uni2622 +ENCODING 9762 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +D8 +D8 +A8 +A8 +70 +00 +00 +ENDCHAR +STARTCHAR uni2623 +ENCODING 9763 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +48 +FC +48 +48 +30 +48 +00 +00 +ENDCHAR +STARTCHAR uni2624 +ENCODING 9764 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +F8 +70 +50 +70 +50 +70 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni2625 +ENCODING 9765 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +50 +20 +F8 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2626 +ENCODING 9766 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +70 +20 +F8 +20 +60 +30 +20 +00 +00 +ENDCHAR +STARTCHAR uni2627 +ENCODING 9767 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +30 +28 +30 +A8 +70 +20 +70 +A8 +00 +00 +ENDCHAR +STARTCHAR uni2628 +ENCODING 9768 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +70 +20 +F8 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2629 +ENCODING 9769 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +20 +A8 +F8 +A8 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni262A +ENCODING 9770 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +E4 +C8 +DC +C8 +D4 +C0 +E4 +78 +00 +00 +ENDCHAR +STARTCHAR uni262B +ENCODING 9771 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +A8 +50 +00 +20 +A8 +A8 +A8 +70 +70 +00 +00 +ENDCHAR +STARTCHAR uni262C +ENCODING 9772 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +70 +A8 +70 +88 +70 +70 +A8 +00 +00 +ENDCHAR +STARTCHAR uni262D +ENCODING 9773 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +88 +28 +68 +C8 +A8 +18 +48 +B4 +00 +00 +ENDCHAR +STARTCHAR uni262E +ENCODING 9774 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +A8 +A8 +A8 +F8 +A8 +70 +00 +00 +ENDCHAR +STARTCHAR uni262F +ENCODING 9775 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +78 +84 +EC +A4 +FC +78 +00 +00 +ENDCHAR +STARTCHAR uni2630 +ENCODING 9776 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F8 +F8 +00 +F8 +F8 +00 +F8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2631 +ENCODING 9777 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +D8 +D8 +00 +F8 +F8 +00 +F8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2632 +ENCODING 9778 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F8 +F8 +00 +D8 +D8 +00 +F8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2633 +ENCODING 9779 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F8 +F8 +00 +F8 +F8 +00 +D8 +D8 +00 +00 +ENDCHAR +STARTCHAR uni2634 +ENCODING 9780 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +D8 +D8 +00 +D8 +D8 +00 +F8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2635 +ENCODING 9781 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +D8 +D8 +00 +F8 +F8 +00 +D8 +D8 +00 +00 +ENDCHAR +STARTCHAR uni2636 +ENCODING 9782 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F8 +F8 +00 +D8 +D8 +00 +D8 +D8 +00 +00 +ENDCHAR +STARTCHAR uni2637 +ENCODING 9783 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +D8 +D8 +00 +D8 +D8 +00 +D8 +D8 +00 +00 +ENDCHAR +STARTCHAR uni2638 +ENCODING 9784 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +A8 +70 +D8 +70 +A8 +20 +00 +00 +ENDCHAR +STARTCHAR uni2639 +ENCODING 9785 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +D8 +D8 +88 +A8 +D8 +88 +70 +00 +ENDCHAR +STARTCHAR smileface +ENCODING 9786 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +D8 +D8 +88 +D8 +A8 +88 +70 +00 +ENDCHAR +STARTCHAR invsmileface +ENCODING 9787 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +F8 +A8 +A8 +F8 +A8 +D8 +F8 +70 +00 +ENDCHAR +STARTCHAR sun +ENCODING 9788 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +88 +20 +50 +20 +88 +20 +20 +00 +ENDCHAR +STARTCHAR uni263D +ENCODING 9789 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +C8 +28 +28 +28 +C8 +70 +00 +00 +ENDCHAR +STARTCHAR uni263E +ENCODING 9790 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +98 +A0 +A0 +A0 +98 +70 +00 +00 +ENDCHAR +STARTCHAR uni263F +ENCODING 9791 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +88 +70 +88 +88 +70 +20 +70 +20 +00 +00 +ENDCHAR +STARTCHAR female +ENCODING 9792 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +88 +88 +88 +70 +20 +70 +20 +ENDCHAR +STARTCHAR uni2641 +ENCODING 9793 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +70 +20 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR male +ENCODING 9794 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +1C +0C +74 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2643 +ENCODING 9795 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +48 +A8 +28 +28 +48 +F8 +08 +00 +00 +ENDCHAR +STARTCHAR uni2644 +ENCODING 9796 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +E0 +40 +50 +68 +48 +48 +00 +00 +ENDCHAR +STARTCHAR uni2645 +ENCODING 9797 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +A8 +F8 +A8 +A8 +20 +50 +20 +00 +ENDCHAR +STARTCHAR uni2646 +ENCODING 9798 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +A8 +FC +A8 +A8 +70 +20 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni2647 +ENCODING 9799 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +48 +48 +70 +40 +40 +78 +00 +00 +ENDCHAR +STARTCHAR uni2648 +ENCODING 9800 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +A8 +A8 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2649 +ENCODING 9801 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +84 +48 +30 +48 +48 +30 +00 +00 +ENDCHAR +STARTCHAR uni264A +ENCODING 9802 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +50 +50 +50 +50 +50 +F8 +00 +00 +ENDCHAR +STARTCHAR uni264B +ENCODING 9803 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +38 +44 +A0 +48 +14 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni264C +ENCODING 9804 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +48 +28 +68 +A8 +48 +04 +00 +ENDCHAR +STARTCHAR uni264D +ENCODING 9805 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +AC +FC +AC +AC +AC +A8 +A8 +18 +28 +ENDCHAR +STARTCHAR uni264E +ENCODING 9806 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +50 +D8 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni264F +ENCODING 9807 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +F8 +A8 +A8 +A8 +A8 +A8 +0C +00 +ENDCHAR +STARTCHAR uni2650 +ENCODING 9808 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +18 +A8 +40 +A0 +00 +00 +ENDCHAR +STARTCHAR uni2651 +ENCODING 9809 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +90 +A8 +B0 +C8 +88 +30 +00 +00 +ENDCHAR +STARTCHAR uni2652 +ENCODING 9810 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +54 +A8 +00 +54 +A8 +00 +00 +ENDCHAR +STARTCHAR uni2653 +ENCODING 9811 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +50 +50 +F8 +50 +50 +88 +00 +00 +ENDCHAR +STARTCHAR uni2654 +ENCODING 9812 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +70 +70 +A8 +F8 +88 +50 +50 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2655 +ENCODING 9813 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +A8 +F8 +88 +F8 +50 +50 +50 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2656 +ENCODING 9814 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +F8 +50 +50 +50 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2657 +ENCODING 9815 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +50 +70 +D8 +88 +50 +50 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2658 +ENCODING 9816 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +38 +68 +88 +E8 +28 +28 +44 +7C +00 +00 +ENDCHAR +STARTCHAR uni2659 +ENCODING 9817 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +20 +50 +50 +50 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni265A +ENCODING 9818 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +70 +70 +A8 +F8 +F8 +70 +70 +F8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni265B +ENCODING 9819 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +A8 +F8 +F8 +F8 +70 +70 +70 +F8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni265C +ENCODING 9820 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +F8 +70 +70 +70 +F8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni265D +ENCODING 9821 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +70 +70 +D8 +88 +50 +70 +F8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni265E +ENCODING 9822 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +38 +58 +F8 +F8 +38 +38 +7C +7C +00 +00 +ENDCHAR +STARTCHAR uni265F +ENCODING 9823 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +70 +20 +70 +70 +70 +F8 +F8 +00 +00 +ENDCHAR +STARTCHAR spade +ENCODING 9824 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +70 +70 +F8 +F8 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni2661 +ENCODING 9825 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +A8 +A8 +88 +50 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2662 +ENCODING 9826 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +50 +50 +88 +50 +50 +20 +00 +00 +ENDCHAR +STARTCHAR club +ENCODING 9827 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +70 +A8 +F8 +F8 +A8 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni2664 +ENCODING 9828 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +F8 +F8 +F8 +70 +20 +20 +00 +00 +ENDCHAR +STARTCHAR heart +ENCODING 9829 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +F8 +F8 +F8 +F8 +70 +70 +20 +00 +00 +ENDCHAR +STARTCHAR diamond +ENCODING 9830 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +70 +70 +F8 +F8 +70 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni2667 +ENCODING 9831 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +20 +70 +A8 +70 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni2668 +ENCODING 9832 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +90 +48 +90 +48 +00 +50 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2669 +ENCODING 9833 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +20 +20 +20 +E0 +C0 +00 +00 +ENDCHAR +STARTCHAR musicalnote +ENCODING 9834 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +30 +28 +20 +20 +E0 +C0 +00 +00 +ENDCHAR +STARTCHAR musicalnotedbl +ENCODING 9835 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +60 +58 +48 +48 +48 +C8 +D8 +18 +00 +00 +ENDCHAR +STARTCHAR uni266C +ENCODING 9836 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +60 +58 +68 +58 +48 +C8 +D8 +18 +00 +00 +ENDCHAR +STARTCHAR uni266D +ENCODING 9837 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +40 +50 +68 +48 +50 +60 +00 +00 +ENDCHAR +STARTCHAR uni266E +ENCODING 9838 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +48 +58 +68 +48 +58 +68 +48 +08 +00 +ENDCHAR +STARTCHAR uni266F +ENCODING 9839 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +58 +70 +D0 +58 +70 +D0 +40 +00 +00 +ENDCHAR +STARTCHAR uni2670 +ENCODING 9840 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +50 +20 +A8 +70 +A8 +20 +20 +50 +00 +00 +ENDCHAR +STARTCHAR uni2671 +ENCODING 9841 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +20 +D8 +A8 +20 +20 +50 +20 +00 +ENDCHAR +STARTCHAR uni2672 +ENCODING 9842 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +C8 +44 +8C +80 +94 +38 +10 +00 +00 +ENDCHAR +STARTCHAR uni2673 +ENCODING 9843 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +48 +58 +10 +94 +84 +DC +00 +00 +ENDCHAR +STARTCHAR uni2674 +ENCODING 9844 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +48 +78 +10 +B4 +84 +DC +00 +00 +ENDCHAR +STARTCHAR uni2675 +ENCODING 9845 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +48 +78 +30 +B4 +84 +DC +00 +00 +ENDCHAR +STARTCHAR uni2676 +ENCODING 9846 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +48 +78 +30 +94 +84 +DC +00 +00 +ENDCHAR +STARTCHAR uni2677 +ENCODING 9847 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +48 +78 +20 +B4 +84 +DC +00 +00 +ENDCHAR +STARTCHAR uni2678 +ENCODING 9848 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +48 +68 +30 +B4 +84 +DC +00 +00 +ENDCHAR +STARTCHAR uni2679 +ENCODING 9849 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +48 +78 +10 +94 +84 +DC +00 +00 +ENDCHAR +STARTCHAR uni267A +ENCODING 9850 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +48 +48 +00 +84 +84 +DC +00 +00 +ENDCHAR +STARTCHAR uni267B +ENCODING 9851 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +30 +28 +CC +CC +80 +94 +B8 +10 +00 +00 +ENDCHAR +STARTCHAR uni267C +ENCODING 9852 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +78 +FC +C4 +D4 +30 +30 +7C +68 +44 +EC +FC +78 +ENDCHAR +STARTCHAR uni267D +ENCODING 9853 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +78 +84 +30 +28 +CC +CC +80 +94 +B8 +10 +84 +78 +ENDCHAR +STARTCHAR uni267E +ENCODING 9854 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +00 +50 +A8 +50 +00 +88 +70 +00 +ENDCHAR +STARTCHAR uni267F +ENCODING 9855 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +60 +60 +40 +78 +40 +F0 +98 +64 +00 +00 +ENDCHAR +STARTCHAR uni2680 +ENCODING 9856 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +88 +88 +88 +A8 +88 +88 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2681 +ENCODING 9857 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +88 +C8 +88 +88 +88 +98 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2682 +ENCODING 9858 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +88 +C8 +88 +A8 +88 +98 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2683 +ENCODING 9859 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +88 +D8 +88 +88 +88 +D8 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2684 +ENCODING 9860 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +88 +D8 +88 +A8 +88 +D8 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2685 +ENCODING 9861 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +88 +D8 +88 +D8 +88 +D8 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2686 +ENCODING 9862 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +88 +98 +88 +70 +00 +00 +00 +ENDCHAR +STARTCHAR uni2687 +ENCODING 9863 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +88 +D8 +88 +70 +00 +00 +00 +ENDCHAR +STARTCHAR uni2688 +ENCODING 9864 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +F8 +E8 +F8 +70 +00 +00 +00 +ENDCHAR +STARTCHAR uni2689 +ENCODING 9865 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +F8 +A8 +F8 +70 +00 +00 +00 +ENDCHAR +STARTCHAR uni268A +ENCODING 9866 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +F8 +F8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni268B +ENCODING 9867 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +D8 +D8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni268C +ENCODING 9868 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +F8 +00 +F8 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni268D +ENCODING 9869 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +D8 +D8 +00 +F8 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni268E +ENCODING 9870 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +F8 +00 +D8 +D8 +00 +00 +00 +ENDCHAR +STARTCHAR uni268F +ENCODING 9871 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +D8 +D8 +00 +D8 +D8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2690 +ENCODING 9872 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +E0 +98 +88 +C8 +B8 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni2691 +ENCODING 9873 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +E0 +F8 +F8 +F8 +B8 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni2692 +ENCODING 9874 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +48 +CC +B4 +30 +48 +84 +00 +00 +ENDCHAR +STARTCHAR uni2693 +ENCODING 9875 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +20 +F8 +20 +A8 +A8 +70 +00 +00 +ENDCHAR +STARTCHAR uni2694 +ENCODING 9876 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +50 +20 +D8 +88 +00 +00 +ENDCHAR +STARTCHAR uni2695 +ENCODING 9877 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +70 +A0 +70 +28 +30 +60 +30 +20 +00 +ENDCHAR +STARTCHAR uni2696 +ENCODING 9878 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +F8 +A8 +88 +88 +D8 +D8 +00 +00 +ENDCHAR +STARTCHAR uni2697 +ENCODING 9879 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +38 +5C +88 +00 +1C +14 +00 +00 +ENDCHAR +STARTCHAR uni2698 +ENCODING 9880 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +20 +A8 +F8 +70 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2699 +ENCODING 9881 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +F8 +88 +A8 +88 +F8 +20 +00 +00 +ENDCHAR +STARTCHAR uni269A +ENCODING 9882 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +50 +20 +A8 +F8 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni269B +ENCODING 9883 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +70 +D8 +70 +D8 +70 +A8 +00 +00 +ENDCHAR +STARTCHAR uni269C +ENCODING 9884 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +D8 +88 +A8 +50 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni26A0 +ENCODING 9888 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +50 +88 +A8 +A8 +88 +A8 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni26A1 +ENCODING 9889 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +10 +20 +78 +10 +20 +40 +00 +00 +ENDCHAR +STARTCHAR uni26A2 +ENCODING 9890 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +A8 +A8 +70 +50 +F8 +50 +00 +ENDCHAR +STARTCHAR uni26A3 +ENCODING 9891 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +20 +6C +98 +A8 +48 +30 +00 +00 +ENDCHAR +STARTCHAR uni26A4 +ENCODING 9892 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +0C +0C +18 +64 +A4 +98 +60 +40 +E0 +40 +ENDCHAR +STARTCHAR uni26A5 +ENCODING 9893 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +0C +0C +10 +70 +88 +88 +88 +70 +20 +70 +20 +ENDCHAR +STARTCHAR uni26A6 +ENCODING 9894 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +0C +0C +18 +18 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni26A7 +ENCODING 9895 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +CC +CC +30 +48 +48 +30 +20 +70 +20 +ENDCHAR +STARTCHAR uni26A8 +ENCODING 9896 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +70 +A8 +20 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni26A9 +ENCODING 9897 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +48 +BC +48 +00 +00 +00 +ENDCHAR +STARTCHAR uni26AA +ENCODING 9898 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni26AB +ENCODING 9899 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +F8 +F8 +F8 +70 +00 +00 +ENDCHAR +STARTCHAR uni26AC +ENCODING 9900 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni26AD +ENCODING 9901 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +A8 +A8 +A8 +70 +00 +00 +ENDCHAR +STARTCHAR uni26AE +ENCODING 9902 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +50 +A8 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni26AF +ENCODING 9903 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +48 +B4 +48 +00 +00 +00 +ENDCHAR +STARTCHAR uni26B0 +ENCODING 9904 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +50 +88 +88 +88 +50 +50 +50 +70 +00 +00 +ENDCHAR +STARTCHAR uni26B1 +ENCODING 9905 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +50 +70 +88 +88 +88 +50 +50 +70 +00 +00 +ENDCHAR +STARTCHAR uni26B2 +ENCODING 9906 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +88 +70 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni26B3 +ENCODING 9907 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +08 +08 +08 +30 +20 +70 +20 +00 +ENDCHAR +STARTCHAR uni26B4 +ENCODING 9908 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +50 +88 +50 +20 +20 +70 +20 +00 +ENDCHAR +STARTCHAR uni26B5 +ENCODING 9909 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +A8 +70 +F8 +70 +A8 +20 +20 +70 +20 +00 +ENDCHAR +STARTCHAR uni26B6 +ENCODING 9910 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +20 +88 +50 +20 +00 +D8 +20 +00 +ENDCHAR +STARTCHAR uni26B7 +ENCODING 9911 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +28 +30 +20 +30 +28 +20 +70 +88 +70 +00 +ENDCHAR +STARTCHAR uni26B8 +ENCODING 9912 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +C0 +C0 +C0 +C0 +70 +20 +70 +20 +00 +ENDCHAR +STARTCHAR uni26B9 +ENCODING 9913 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +88 +50 +F8 +50 +88 +00 +00 +00 +ENDCHAR +STARTCHAR uni26BA +ENCODING 9914 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +88 +88 +50 +50 +20 +F8 +00 +00 +ENDCHAR +STARTCHAR uni26BB +ENCODING 9915 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +20 +50 +50 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni26BC +ENCODING 9916 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +88 +88 +A8 +F8 +20 +30 +00 +00 +ENDCHAR +STARTCHAR uni26C0 +ENCODING 9920 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +F8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni26C1 +ENCODING 9921 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +F8 +88 +F8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni26C2 +ENCODING 9922 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +F8 +F8 +F8 +70 +00 +00 +ENDCHAR +STARTCHAR uni26C3 +ENCODING 9923 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +F8 +F8 +70 +88 +F8 +70 +00 +00 +ENDCHAR +STARTCHAR uni2701 +ENCODING 9985 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +90 +FC +20 +40 +60 +00 +00 +00 +ENDCHAR +STARTCHAR uni2702 +ENCODING 9986 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +C4 +C8 +30 +C8 +C4 +00 +00 +00 +ENDCHAR +STARTCHAR uni2703 +ENCODING 9987 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +60 +40 +20 +FC +90 +00 +00 +00 +ENDCHAR +STARTCHAR uni2704 +ENCODING 9988 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +CC +94 +E8 +30 +E8 +94 +CC +00 +00 +ENDCHAR +STARTCHAR uni2706 +ENCODING 9990 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +78 +84 +B4 +B4 +A4 +B4 +B4 +84 +78 +00 +ENDCHAR +STARTCHAR uni2707 +ENCODING 9991 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +78 +84 +B4 +84 +B4 +84 +CC +84 +78 +00 +ENDCHAR +STARTCHAR uni2708 +ENCODING 9992 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +B0 +FC +B0 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni2709 +ENCODING 9993 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +FC +CC +B4 +84 +FC +00 +00 +ENDCHAR +STARTCHAR uni270C +ENCODING 9996 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +48 +48 +28 +38 +78 +78 +78 +38 +00 +00 +ENDCHAR +STARTCHAR uni270D +ENCODING 9997 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +04 +38 +7C +7C +40 +80 +00 +00 +00 +ENDCHAR +STARTCHAR uni270E +ENCODING 9998 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +40 +E0 +50 +28 +14 +0C +00 +00 +ENDCHAR +STARTCHAR uni270F +ENCODING 9999 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +F8 +8C +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2710 +ENCODING 10000 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +0C +14 +28 +50 +E0 +40 +00 +00 +ENDCHAR +STARTCHAR uni2711 +ENCODING 10001 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +84 +84 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2712 +ENCODING 10002 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +F4 +F8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2713 +ENCODING 10003 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +08 +10 +10 +A0 +E0 +40 +00 +00 +ENDCHAR +STARTCHAR uni2714 +ENCODING 10004 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +0C +0C +1C +D8 +F8 +70 +30 +00 +00 +ENDCHAR +STARTCHAR uni2715 +ENCODING 10005 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +50 +20 +50 +88 +00 +00 +ENDCHAR +STARTCHAR uni2716 +ENCODING 10006 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +D8 +F8 +20 +F8 +D8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2717 +ENCODING 10007 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +88 +50 +20 +50 +88 +80 +00 +00 +ENDCHAR +STARTCHAR uni2718 +ENCODING 10008 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +CC +CC +78 +70 +FC +CC +C0 +00 +ENDCHAR +STARTCHAR uni2719 +ENCODING 10009 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +78 +CC +A4 +F4 +A4 +CC +78 +00 +ENDCHAR +STARTCHAR uni271A +ENCODING 10010 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +30 +FC +FC +30 +30 +00 +00 +ENDCHAR +STARTCHAR uni271B +ENCODING 10011 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +20 +D8 +20 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni271C +ENCODING 10012 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +30 +CC +CC +30 +30 +00 +00 +ENDCHAR +STARTCHAR uni271D +ENCODING 10013 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +F8 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni271E +ENCODING 10014 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +50 +D8 +88 +D8 +50 +50 +50 +50 +70 +00 +ENDCHAR +STARTCHAR uni271F +ENCODING 10015 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +DC +BC +DC +58 +58 +58 +78 +78 +00 +00 +ENDCHAR +STARTCHAR uni2720 +ENCODING 10016 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +20 +A8 +F8 +A8 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni2721 +ENCODING 10017 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +F8 +50 +50 +50 +F8 +20 +00 +00 +ENDCHAR +STARTCHAR uni2722 +ENCODING 10018 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +20 +F8 +20 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni2723 +ENCODING 10019 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +30 +FC +FC +30 +30 +00 +00 +00 +ENDCHAR +STARTCHAR uni2724 +ENCODING 10020 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +30 +78 +30 +FC +FC +30 +78 +30 +00 +00 +ENDCHAR +STARTCHAR uni2725 +ENCODING 10021 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +70 +A8 +F8 +A8 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni2726 +ENCODING 10022 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +70 +F8 +70 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni2727 +ENCODING 10023 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +70 +D8 +70 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni2729 +ENCODING 10025 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +D8 +50 +20 +50 +00 +00 +00 +ENDCHAR +STARTCHAR uni272A +ENCODING 10026 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +D8 +88 +D8 +A8 +F8 +70 +00 +00 +ENDCHAR +STARTCHAR uni272B +ENCODING 10027 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +F8 +50 +70 +88 +00 +00 +00 +ENDCHAR +STARTCHAR uni272C +ENCODING 10028 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +D8 +20 +50 +88 +00 +00 +00 +ENDCHAR +STARTCHAR uni272D +ENCODING 10029 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +F8 +70 +70 +88 +00 +00 +00 +ENDCHAR +STARTCHAR uni272E +ENCODING 10030 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +F8 +70 +70 +88 +00 +00 +00 +ENDCHAR +STARTCHAR uni272F +ENCODING 10031 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +E8 +30 +50 +88 +00 +00 +00 +ENDCHAR +STARTCHAR uni2730 +ENCODING 10032 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +58 +8C +58 +AC +58 +00 +00 +ENDCHAR +STARTCHAR uni2731 +ENCODING 10033 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +A8 +70 +70 +A8 +20 +00 +00 +ENDCHAR +STARTCHAR uni2732 +ENCODING 10034 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +A8 +70 +50 +70 +A8 +20 +00 +00 +ENDCHAR +STARTCHAR uni2733 +ENCODING 10035 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +A8 +70 +F8 +70 +A8 +20 +00 +00 +ENDCHAR +STARTCHAR uni2734 +ENCODING 10036 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +A8 +70 +F8 +70 +A8 +20 +00 +00 +ENDCHAR +STARTCHAR uni2735 +ENCODING 10037 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +A8 +70 +F8 +70 +A8 +20 +00 +00 +ENDCHAR +STARTCHAR uni2736 +ENCODING 10038 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +A8 +70 +70 +A8 +20 +00 +00 +ENDCHAR +STARTCHAR uni2737 +ENCODING 10039 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +20 +A8 +70 +70 +A8 +20 +50 +00 +ENDCHAR +STARTCHAR uni2738 +ENCODING 10040 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +20 +A8 +70 +70 +A8 +20 +50 +00 +ENDCHAR +STARTCHAR uni2739 +ENCODING 10041 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +F8 +7C +F8 +7C +F8 +50 +00 +00 +ENDCHAR +STARTCHAR uni273A +ENCODING 10042 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +A8 +74 +F8 +74 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni273B +ENCODING 10043 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +A8 +70 +70 +A8 +20 +00 +00 +ENDCHAR +STARTCHAR uni273C +ENCODING 10044 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +A8 +70 +50 +70 +A8 +20 +00 +00 +ENDCHAR +STARTCHAR uni273D +ENCODING 10045 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +A8 +70 +70 +A8 +20 +00 +00 +ENDCHAR +STARTCHAR uni273E +ENCODING 10046 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +D8 +50 +A8 +74 +A8 +20 +00 +00 +ENDCHAR +STARTCHAR uni273F +ENCODING 10047 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +70 +F8 +D8 +70 +F8 +D8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2740 +ENCODING 10048 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +70 +D8 +A8 +50 +F8 +D8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2741 +ENCODING 10049 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +70 +D8 +70 +F8 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni2742 +ENCODING 10050 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +F8 +A8 +D8 +A8 +F8 +70 +00 +00 +ENDCHAR +STARTCHAR uni2743 +ENCODING 10051 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +A8 +70 +70 +A8 +20 +00 +00 +ENDCHAR +STARTCHAR uni2744 +ENCODING 10052 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +A8 +70 +70 +A8 +20 +00 +00 +ENDCHAR +STARTCHAR uni2745 +ENCODING 10053 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +A8 +70 +70 +A8 +20 +00 +00 +ENDCHAR +STARTCHAR uni2746 +ENCODING 10054 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +A8 +70 +70 +A8 +20 +00 +00 +ENDCHAR +STARTCHAR uni2747 +ENCODING 10055 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +A8 +70 +F8 +70 +A8 +20 +00 +00 +ENDCHAR +STARTCHAR uni2748 +ENCODING 10056 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +A8 +70 +F8 +70 +A8 +20 +00 +00 +ENDCHAR +STARTCHAR uni2749 +ENCODING 10057 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +A8 +70 +F8 +70 +A8 +20 +00 +00 +ENDCHAR +STARTCHAR uni274A +ENCODING 10058 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +A8 +70 +F8 +70 +A8 +20 +00 +00 +ENDCHAR +STARTCHAR uni274B +ENCODING 10059 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +A8 +70 +F8 +70 +A8 +20 +00 +00 +ENDCHAR +STARTCHAR uni274D +ENCODING 10061 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +78 +8C +8C +8C +78 +00 +00 +00 +ENDCHAR +STARTCHAR uni274F +ENCODING 10063 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +8C +8C +8C +FC +7C +00 +00 +ENDCHAR +STARTCHAR uni2750 +ENCODING 10064 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +7C +FC +8C +8C +8C +F8 +00 +00 +ENDCHAR +STARTCHAR uni2751 +ENCODING 10065 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +8C +8C +8C +FC +7C +00 +00 +ENDCHAR +STARTCHAR uni2752 +ENCODING 10066 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +7C +FC +8C +8C +8C +F8 +00 +00 +ENDCHAR +STARTCHAR uni2756 +ENCODING 10070 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +38 +54 +EC +54 +38 +10 +00 +00 +ENDCHAR +STARTCHAR uni2758 +ENCODING 10072 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2759 +ENCODING 10073 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +60 +60 +60 +60 +60 +60 +60 +00 +00 +ENDCHAR +STARTCHAR uni275A +ENCODING 10074 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +78 +78 +78 +78 +78 +78 +00 +00 +ENDCHAR +STARTCHAR uni275B +ENCODING 10075 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +30 +40 +70 +78 +30 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni275C +ENCODING 10076 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +30 +78 +38 +08 +30 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni275D +ENCODING 10077 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +90 +D8 +FC +48 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni275E +ENCODING 10078 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +48 +FC +6C +24 +48 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2761 +ENCODING 10081 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +08 +7C +C8 +C8 +C8 +78 +08 +C8 +88 +70 +00 +ENDCHAR +STARTCHAR uni2762 +ENCODING 10082 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +F8 +F8 +70 +20 +00 +20 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni2763 +ENCODING 10083 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +D8 +F8 +70 +20 +00 +20 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni2764 +ENCODING 10084 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +D8 +F8 +F8 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni2765 +ENCODING 10085 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +60 +F0 +F0 +78 +F0 +F0 +60 +00 +00 +ENDCHAR +STARTCHAR uni2766 +ENCODING 10086 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +64 +B8 +20 +D8 +F8 +F0 +E4 +78 +00 +00 +ENDCHAR +STARTCHAR uni2767 +ENCODING 10087 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +80 +58 +78 +DC +98 +40 +00 +00 +ENDCHAR +STARTCHAR uni2768 +ENCODING 10088 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +60 +60 +60 +60 +20 +10 +00 +00 +ENDCHAR +STARTCHAR uni2769 +ENCODING 10089 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +20 +30 +30 +30 +30 +20 +40 +00 +00 +ENDCHAR +STARTCHAR uni276A +ENCODING 10090 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +60 +60 +60 +60 +60 +60 +20 +00 +00 +ENDCHAR +STARTCHAR uni276B +ENCODING 10091 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +60 +60 +60 +60 +60 +60 +40 +00 +00 +ENDCHAR +STARTCHAR uni276C +ENCODING 10092 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +18 +18 +30 +30 +60 +30 +30 +18 +18 +00 +ENDCHAR +STARTCHAR uni276D +ENCODING 10093 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +60 +60 +30 +30 +18 +30 +30 +60 +60 +00 +ENDCHAR +STARTCHAR uni276E +ENCODING 10094 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +18 +30 +60 +C0 +60 +30 +18 +00 +00 +ENDCHAR +STARTCHAR uni276F +ENCODING 10095 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +C0 +60 +30 +18 +30 +60 +C0 +00 +00 +ENDCHAR +STARTCHAR uni2770 +ENCODING 10096 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +38 +38 +70 +70 +E0 +70 +70 +38 +38 +00 +ENDCHAR +STARTCHAR uni2771 +ENCODING 10097 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +E0 +E0 +70 +70 +38 +70 +70 +E0 +E0 +00 +ENDCHAR +STARTCHAR uni2772 +ENCODING 10098 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +40 +40 +40 +40 +40 +20 +10 +00 +ENDCHAR +STARTCHAR uni2773 +ENCODING 10099 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +20 +10 +10 +10 +10 +10 +20 +40 +00 +ENDCHAR +STARTCHAR uni2774 +ENCODING 10100 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +18 +30 +30 +30 +60 +30 +30 +30 +18 +00 +ENDCHAR +STARTCHAR uni2775 +ENCODING 10101 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +60 +30 +30 +30 +18 +30 +30 +30 +60 +00 +ENDCHAR +STARTCHAR uni2776 +ENCODING 10102 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +F8 +D8 +98 +D8 +D8 +88 +F8 +70 +00 +00 +ENDCHAR +STARTCHAR uni2777 +ENCODING 10103 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +F8 +D8 +A8 +E8 +D8 +88 +F8 +70 +00 +00 +ENDCHAR +STARTCHAR uni2778 +ENCODING 10104 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +F8 +98 +E8 +D8 +E8 +98 +F8 +70 +00 +00 +ENDCHAR +STARTCHAR uni2779 +ENCODING 10105 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +F8 +B8 +B8 +98 +88 +D8 +F8 +70 +00 +00 +ENDCHAR +STARTCHAR uni277A +ENCODING 10106 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +F8 +88 +B8 +98 +E8 +98 +F8 +70 +00 +00 +ENDCHAR +STARTCHAR uni277B +ENCODING 10107 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +F8 +C8 +B8 +98 +A8 +D8 +F8 +70 +00 +00 +ENDCHAR +STARTCHAR uni277C +ENCODING 10108 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +F8 +88 +E8 +D8 +D8 +D8 +F8 +70 +00 +00 +ENDCHAR +STARTCHAR uni277D +ENCODING 10109 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +F8 +D8 +A8 +D8 +A8 +D8 +F8 +70 +00 +00 +ENDCHAR +STARTCHAR uni277E +ENCODING 10110 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +F8 +D8 +A8 +C8 +E8 +98 +F8 +70 +00 +00 +ENDCHAR +STARTCHAR uni277F +ENCODING 10111 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +FC +AC +94 +94 +94 +AC +FC +78 +00 +00 +ENDCHAR +STARTCHAR uni2780 +ENCODING 10112 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +88 +A8 +E8 +A8 +A8 +F8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2781 +ENCODING 10113 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +88 +A8 +D8 +98 +A8 +F8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2782 +ENCODING 10114 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +88 +E8 +98 +A8 +98 +E8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2783 +ENCODING 10115 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +88 +C8 +C8 +E8 +F8 +A8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2784 +ENCODING 10116 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +88 +F8 +C8 +E8 +98 +E8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2785 +ENCODING 10117 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +88 +B8 +C8 +E8 +D8 +A8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2786 +ENCODING 10118 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +88 +F8 +98 +A8 +A8 +A8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2787 +ENCODING 10119 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +88 +A8 +D8 +A8 +D8 +A8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2788 +ENCODING 10120 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +88 +A8 +D8 +B8 +98 +E8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2789 +ENCODING 10121 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +84 +D4 +EC +EC +EC +D4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni278A +ENCODING 10122 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +F8 +D8 +98 +D8 +D8 +D8 +F8 +70 +00 +00 +ENDCHAR +STARTCHAR uni278B +ENCODING 10123 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +F8 +D8 +A8 +E8 +D8 +88 +F8 +70 +00 +00 +ENDCHAR +STARTCHAR uni278C +ENCODING 10124 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +F8 +98 +E8 +D8 +E8 +98 +F8 +70 +00 +00 +ENDCHAR +STARTCHAR uni278D +ENCODING 10125 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +F8 +B8 +B8 +98 +88 +D8 +F8 +70 +00 +00 +ENDCHAR +STARTCHAR uni278E +ENCODING 10126 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +F8 +88 +B8 +98 +E8 +98 +F8 +70 +00 +00 +ENDCHAR +STARTCHAR uni278F +ENCODING 10127 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +F8 +C8 +B8 +98 +A8 +D8 +F8 +70 +00 +00 +ENDCHAR +STARTCHAR uni2790 +ENCODING 10128 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +F8 +88 +E8 +D8 +D8 +D8 +F8 +70 +00 +00 +ENDCHAR +STARTCHAR uni2791 +ENCODING 10129 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +F8 +D8 +A8 +D8 +A8 +D8 +F8 +70 +00 +00 +ENDCHAR +STARTCHAR uni2792 +ENCODING 10130 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +F8 +D8 +A8 +C8 +E8 +98 +F8 +70 +00 +00 +ENDCHAR +STARTCHAR uni2793 +ENCODING 10131 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +FC +AC +94 +94 +94 +AC +FC +78 +00 +00 +ENDCHAR +STARTCHAR uni2794 +ENCODING 10132 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +18 +FC +18 +30 +00 +00 +00 +ENDCHAR +STARTCHAR uni2798 +ENCODING 10136 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +80 +40 +28 +18 +38 +00 +00 +ENDCHAR +STARTCHAR uni2799 +ENCODING 10137 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +30 +F8 +30 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni279A +ENCODING 10138 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +18 +28 +40 +80 +00 +00 +ENDCHAR +STARTCHAR uni279B +ENCODING 10139 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +40 +30 +FC +30 +40 +00 +00 +00 +ENDCHAR +STARTCHAR uni279C +ENCODING 10140 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +38 +FC +FC +38 +30 +00 +00 +ENDCHAR +STARTCHAR uni279D +ENCODING 10141 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +08 +FC +08 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni279E +ENCODING 10142 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +18 +FC +FC +18 +10 +00 +00 +ENDCHAR +STARTCHAR uni279F +ENCODING 10143 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +08 +BC +08 +00 +00 +00 +ENDCHAR +STARTCHAR uni27A0 +ENCODING 10144 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +18 +BC +BC +18 +10 +00 +00 +ENDCHAR +STARTCHAR uni27A1 +ENCODING 10145 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +F8 +FC +F8 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni27A2 +ENCODING 10146 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +C0 +B0 +48 +3C +78 +F0 +C0 +00 +00 +ENDCHAR +STARTCHAR uni27A3 +ENCODING 10147 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +C0 +F0 +78 +3C +48 +B0 +C0 +00 +00 +ENDCHAR +STARTCHAR uni27A4 +ENCODING 10148 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +E0 +78 +3C +78 +E0 +00 +00 +00 +ENDCHAR +STARTCHAR uni27A5 +ENCODING 10149 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +90 +F8 +FC +78 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni27A6 +ENCODING 10150 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +78 +FC +F8 +90 +80 +00 +00 +ENDCHAR +STARTCHAR uni27A7 +ENCODING 10151 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +F0 +F8 +FC +F8 +F0 +20 +00 +00 +ENDCHAR +STARTCHAR uni27A8 +ENCODING 10152 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +F0 +FC +F0 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni27A9 +ENCODING 10153 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +E8 +84 +E8 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni27AA +ENCODING 10154 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +E8 +84 +E8 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni27AB +ENCODING 10155 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +E8 +84 +E8 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni27AC +ENCODING 10156 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +E8 +84 +E8 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni27AD +ENCODING 10157 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +E8 +84 +84 +E8 +10 +00 +00 +ENDCHAR +STARTCHAR uni27AE +ENCODING 10158 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +E8 +84 +84 +E8 +10 +00 +00 +ENDCHAR +STARTCHAR uni27AF +ENCODING 10159 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +E8 +84 +E8 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni27B1 +ENCODING 10161 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +E8 +84 +E8 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni27B2 +ENCODING 10162 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +DC +0C +04 +0C +DC +78 +00 +00 +ENDCHAR +STARTCHAR uni27B3 +ENCODING 10163 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +E8 +7C +E8 +00 +00 +00 +ENDCHAR +STARTCHAR uni27B4 +ENCODING 10164 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +40 +E0 +60 +10 +0C +0C +00 +00 +ENDCHAR +STARTCHAR uni27B5 +ENCODING 10165 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +E8 +7C +E8 +00 +00 +00 +ENDCHAR +STARTCHAR uni27B6 +ENCODING 10166 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +0C +0C +10 +60 +E0 +40 +00 +00 +ENDCHAR +STARTCHAR uni27B7 +ENCODING 10167 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +60 +E0 +E0 +14 +0C +1C +00 +00 +ENDCHAR +STARTCHAR uni27B8 +ENCODING 10168 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +C0 +E8 +7C +E8 +C0 +00 +00 +ENDCHAR +STARTCHAR uni27B9 +ENCODING 10169 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +1C +0C +14 +E0 +E0 +60 +00 +00 +ENDCHAR +STARTCHAR uni27BA +ENCODING 10170 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +C8 +FC +C8 +10 +00 +00 +ENDCHAR +STARTCHAR uni27BB +ENCODING 10171 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +C8 +FC +C8 +10 +00 +00 +ENDCHAR +STARTCHAR uni27BC +ENCODING 10172 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +E8 +7C +E8 +00 +00 +00 +ENDCHAR +STARTCHAR uni27BD +ENCODING 10173 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +E8 +FC +FC +E8 +00 +00 +00 +ENDCHAR +STARTCHAR uni27BE +ENCODING 10174 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +50 +E8 +04 +E8 +50 +00 +00 +ENDCHAR +STARTCHAR uni27C0 +ENCODING 10176 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +90 +A0 +C0 +F8 +00 +00 +ENDCHAR +STARTCHAR uni27C1 +ENCODING 10177 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +20 +50 +70 +A8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni27C2 +ENCODING 10178 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +20 +20 +20 +20 +F8 +00 +00 +ENDCHAR +STARTCHAR uni27C3 +ENCODING 10179 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +80 +90 +A8 +90 +80 +78 +00 +00 +ENDCHAR +STARTCHAR uni27C4 +ENCODING 10180 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +08 +48 +A8 +48 +08 +F0 +00 +00 +ENDCHAR +STARTCHAR uni27C5 +ENCODING 10181 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +50 +50 +10 +10 +20 +20 +20 +18 +00 +00 +ENDCHAR +STARTCHAR uni27C6 +ENCODING 10182 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +28 +28 +20 +20 +10 +10 +10 +60 +00 +00 +ENDCHAR +STARTCHAR uni27C7 +ENCODING 10183 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +A8 +88 +50 +50 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni27C8 +ENCODING 10184 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +80 +9C +A0 +A0 +A0 +5C +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni27C9 +ENCODING 10185 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +04 +E4 +14 +14 +14 +E8 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni27CA +ENCODING 10186 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +20 +70 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni27CC +ENCODING 10188 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +FC +40 +20 +20 +20 +20 +40 +00 +00 +ENDCHAR +STARTCHAR uni27D0 +ENCODING 10192 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +50 +A8 +50 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni27D1 +ENCODING 10193 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +50 +50 +88 +A8 +88 +00 +00 +ENDCHAR +STARTCHAR uni27D2 +ENCODING 10194 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +A8 +A8 +A8 +A8 +A8 +70 +00 +00 +ENDCHAR +STARTCHAR uni27D3 +ENCODING 10195 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +08 +08 +28 +08 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni27D4 +ENCODING 10196 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +80 +A0 +80 +80 +00 +00 +00 +ENDCHAR +STARTCHAR uni27D5 +ENCODING 10197 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +C4 +6C +54 +6C +C4 +00 +00 +00 +ENDCHAR +STARTCHAR uni27D6 +ENCODING 10198 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +8C +D8 +A8 +D8 +8C +00 +00 +00 +ENDCHAR +STARTCHAR uni27D7 +ENCODING 10199 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +CC +78 +48 +78 +CC +00 +00 +ENDCHAR +STARTCHAR uni27D8 +ENCODING 10200 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +20 +20 +20 +20 +F8 +00 +00 +ENDCHAR +STARTCHAR uni27D9 +ENCODING 10201 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +20 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni27DA +ENCODING 10202 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +50 +D8 +50 +D8 +50 +00 +00 +00 +ENDCHAR +STARTCHAR uni27DB +ENCODING 10203 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +50 +50 +D8 +50 +50 +00 +00 +00 +ENDCHAR +STARTCHAR uni27DC +ENCODING 10204 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +40 +BC +40 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni27DD +ENCODING 10205 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +80 +FC +80 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni27DE +ENCODING 10206 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +04 +FC +04 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni27DF +ENCODING 10207 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +50 +20 +20 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni27E0 +ENCODING 10208 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +50 +F8 +50 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni27E1 +ENCODING 10209 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +50 +88 +50 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni27E2 +ENCODING 10210 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +28 +C4 +28 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni27E3 +ENCODING 10211 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +50 +8C +50 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni27E4 +ENCODING 10212 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +7C +44 +C4 +44 +7C +00 +00 +00 +ENDCHAR +STARTCHAR uni27E5 +ENCODING 10213 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +88 +8C +88 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni27E6 +ENCODING 10214 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +F8 +00 +ENDCHAR +STARTCHAR uni27E7 +ENCODING 10215 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +28 +28 +28 +28 +28 +28 +28 +28 +F8 +00 +ENDCHAR +STARTCHAR uni27E8 +ENCODING 10216 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +10 +20 +20 +40 +20 +20 +10 +10 +00 +ENDCHAR +STARTCHAR uni27E9 +ENCODING 10217 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +40 +20 +20 +10 +20 +20 +40 +40 +00 +ENDCHAR +STARTCHAR uni27EA +ENCODING 10218 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +14 +28 +28 +50 +50 +A0 +50 +50 +28 +28 +14 +ENDCHAR +STARTCHAR uni27EB +ENCODING 10219 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +A0 +50 +50 +28 +28 +14 +28 +28 +50 +50 +A0 +ENDCHAR +STARTCHAR uni27EC +ENCODING 10220 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +08 +10 +30 +50 +50 +50 +50 +50 +30 +10 +08 +ENDCHAR +STARTCHAR uni27ED +ENCODING 10221 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +20 +30 +28 +28 +28 +28 +28 +28 +30 +20 +40 +ENDCHAR +STARTCHAR uni27EE +ENCODING 10222 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +20 +20 +20 +20 +20 +20 +20 +40 +00 +ENDCHAR +STARTCHAR uni27EF +ENCODING 10223 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +40 +40 +40 +40 +40 +40 +40 +20 +00 +ENDCHAR +STARTCHAR uni27F0 +ENCODING 10224 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +70 +A8 +A8 +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni27F1 +ENCODING 10225 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +A8 +A8 +A8 +A8 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni27F2 +ENCODING 10226 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +38 +44 +E4 +44 +04 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni27F3 +ENCODING 10227 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +9C +88 +80 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni27F4 +ENCODING 10228 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +68 +FC +68 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni27F5 +ENCODING 10229 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +40 +FC +40 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni27F6 +ENCODING 10230 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +08 +FC +08 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni27F7 +ENCODING 10231 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +48 +FC +48 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni27F8 +ENCODING 10232 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +20 +7C +80 +7C +20 +10 +00 +00 +ENDCHAR +STARTCHAR uni27F9 +ENCODING 10233 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +10 +F8 +04 +F8 +10 +20 +00 +00 +ENDCHAR +STARTCHAR uni27FA +ENCODING 10234 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +48 +FC +84 +FC +48 +00 +00 +00 +ENDCHAR +STARTCHAR uni27FB +ENCODING 10235 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +24 +44 +FC +44 +24 +00 +00 +00 +ENDCHAR +STARTCHAR uni27FC +ENCODING 10236 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +90 +88 +FC +88 +90 +00 +00 +00 +ENDCHAR +STARTCHAR uni27FD +ENCODING 10237 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +14 +24 +7C +84 +7C +24 +14 +00 +00 +ENDCHAR +STARTCHAR uni27FE +ENCODING 10238 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A0 +90 +F8 +84 +F8 +90 +A0 +00 +00 +ENDCHAR +STARTCHAR uni27FF +ENCODING 10239 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +08 +5C +AC +08 +00 +00 +00 +ENDCHAR +STARTCHAR uni2800 +ENCODING 10240 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2801 +ENCODING 10241 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2802 +ENCODING 10242 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +C0 +C0 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2803 +ENCODING 10243 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +C0 +C0 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2804 +ENCODING 10244 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +C0 +C0 +00 +00 +00 +ENDCHAR +STARTCHAR uni2805 +ENCODING 10245 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +00 +00 +00 +C0 +C0 +00 +00 +00 +ENDCHAR +STARTCHAR uni2806 +ENCODING 10246 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +C0 +C0 +00 +C0 +C0 +00 +00 +00 +ENDCHAR +STARTCHAR uni2807 +ENCODING 10247 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +C0 +C0 +00 +C0 +C0 +00 +00 +00 +ENDCHAR +STARTCHAR uni2808 +ENCODING 10248 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2809 +ENCODING 10249 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni280A +ENCODING 10250 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +C0 +C0 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni280B +ENCODING 10251 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +C0 +C0 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni280C +ENCODING 10252 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +00 +00 +00 +C0 +C0 +00 +00 +00 +ENDCHAR +STARTCHAR uni280D +ENCODING 10253 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +00 +00 +00 +C0 +C0 +00 +00 +00 +ENDCHAR +STARTCHAR uni280E +ENCODING 10254 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +C0 +C0 +00 +C0 +C0 +00 +00 +00 +ENDCHAR +STARTCHAR uni280F +ENCODING 10255 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +C0 +C0 +00 +C0 +C0 +00 +00 +00 +ENDCHAR +STARTCHAR uni2810 +ENCODING 10256 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +18 +18 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2811 +ENCODING 10257 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +18 +18 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2812 +ENCODING 10258 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +D8 +D8 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2813 +ENCODING 10259 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +D8 +D8 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2814 +ENCODING 10260 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +18 +18 +00 +C0 +C0 +00 +00 +00 +ENDCHAR +STARTCHAR uni2815 +ENCODING 10261 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +18 +18 +00 +C0 +C0 +00 +00 +00 +ENDCHAR +STARTCHAR uni2816 +ENCODING 10262 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +D8 +D8 +00 +C0 +C0 +00 +00 +00 +ENDCHAR +STARTCHAR uni2817 +ENCODING 10263 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +D8 +D8 +00 +C0 +C0 +00 +00 +00 +ENDCHAR +STARTCHAR uni2818 +ENCODING 10264 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +18 +18 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2819 +ENCODING 10265 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +18 +18 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni281A +ENCODING 10266 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +D8 +D8 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni281B +ENCODING 10267 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +D8 +D8 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni281C +ENCODING 10268 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +18 +18 +00 +C0 +C0 +00 +00 +00 +ENDCHAR +STARTCHAR uni281D +ENCODING 10269 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +18 +18 +00 +C0 +C0 +00 +00 +00 +ENDCHAR +STARTCHAR uni281E +ENCODING 10270 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +D8 +D8 +00 +C0 +C0 +00 +00 +00 +ENDCHAR +STARTCHAR uni281F +ENCODING 10271 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +D8 +D8 +00 +C0 +C0 +00 +00 +00 +ENDCHAR +STARTCHAR uni2820 +ENCODING 10272 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +18 +18 +00 +00 +00 +ENDCHAR +STARTCHAR uni2821 +ENCODING 10273 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +00 +00 +00 +18 +18 +00 +00 +00 +ENDCHAR +STARTCHAR uni2822 +ENCODING 10274 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +C0 +C0 +00 +18 +18 +00 +00 +00 +ENDCHAR +STARTCHAR uni2823 +ENCODING 10275 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +C0 +C0 +00 +18 +18 +00 +00 +00 +ENDCHAR +STARTCHAR uni2824 +ENCODING 10276 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +D8 +D8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2825 +ENCODING 10277 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +00 +00 +00 +D8 +D8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2826 +ENCODING 10278 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +C0 +C0 +00 +D8 +D8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2827 +ENCODING 10279 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +C0 +C0 +00 +D8 +D8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2828 +ENCODING 10280 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +00 +00 +00 +18 +18 +00 +00 +00 +ENDCHAR +STARTCHAR uni2829 +ENCODING 10281 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +00 +00 +00 +18 +18 +00 +00 +00 +ENDCHAR +STARTCHAR uni282A +ENCODING 10282 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +C0 +C0 +00 +18 +18 +00 +00 +00 +ENDCHAR +STARTCHAR uni282B +ENCODING 10283 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +C0 +C0 +00 +18 +18 +00 +00 +00 +ENDCHAR +STARTCHAR uni282C +ENCODING 10284 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +00 +00 +00 +D8 +D8 +00 +00 +00 +ENDCHAR +STARTCHAR uni282D +ENCODING 10285 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +00 +00 +00 +D8 +D8 +00 +00 +00 +ENDCHAR +STARTCHAR uni282E +ENCODING 10286 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +C0 +C0 +00 +D8 +D8 +00 +00 +00 +ENDCHAR +STARTCHAR uni282F +ENCODING 10287 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +C0 +C0 +00 +D8 +D8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2830 +ENCODING 10288 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +18 +18 +00 +18 +18 +00 +00 +00 +ENDCHAR +STARTCHAR uni2831 +ENCODING 10289 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +18 +18 +00 +18 +18 +00 +00 +00 +ENDCHAR +STARTCHAR uni2832 +ENCODING 10290 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +D8 +D8 +00 +18 +18 +00 +00 +00 +ENDCHAR +STARTCHAR uni2833 +ENCODING 10291 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +D8 +D8 +00 +18 +18 +00 +00 +00 +ENDCHAR +STARTCHAR uni2834 +ENCODING 10292 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +18 +18 +00 +D8 +D8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2835 +ENCODING 10293 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +18 +18 +00 +D8 +D8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2836 +ENCODING 10294 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +D8 +D8 +00 +D8 +D8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2837 +ENCODING 10295 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +D8 +D8 +00 +D8 +D8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2838 +ENCODING 10296 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +18 +18 +00 +18 +18 +00 +00 +00 +ENDCHAR +STARTCHAR uni2839 +ENCODING 10297 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +18 +18 +00 +18 +18 +00 +00 +00 +ENDCHAR +STARTCHAR uni283A +ENCODING 10298 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +D8 +D8 +00 +18 +18 +00 +00 +00 +ENDCHAR +STARTCHAR uni283B +ENCODING 10299 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +D8 +D8 +00 +18 +18 +00 +00 +00 +ENDCHAR +STARTCHAR uni283C +ENCODING 10300 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +18 +18 +00 +D8 +D8 +00 +00 +00 +ENDCHAR +STARTCHAR uni283D +ENCODING 10301 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +18 +18 +00 +D8 +D8 +00 +00 +00 +ENDCHAR +STARTCHAR uni283E +ENCODING 10302 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +D8 +D8 +00 +D8 +D8 +00 +00 +00 +ENDCHAR +STARTCHAR uni283F +ENCODING 10303 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +D8 +D8 +00 +D8 +D8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2840 +ENCODING 10304 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2841 +ENCODING 10305 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +00 +00 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2842 +ENCODING 10306 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +C0 +C0 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2843 +ENCODING 10307 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +C0 +C0 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2844 +ENCODING 10308 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +C0 +C0 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2845 +ENCODING 10309 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +00 +00 +00 +C0 +C0 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2846 +ENCODING 10310 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +C0 +C0 +00 +C0 +C0 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2847 +ENCODING 10311 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +C0 +C0 +00 +C0 +C0 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2848 +ENCODING 10312 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +00 +00 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2849 +ENCODING 10313 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +00 +00 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni284A +ENCODING 10314 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +C0 +C0 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni284B +ENCODING 10315 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +C0 +C0 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni284C +ENCODING 10316 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +00 +00 +00 +C0 +C0 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni284D +ENCODING 10317 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +00 +00 +00 +C0 +C0 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni284E +ENCODING 10318 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +C0 +C0 +00 +C0 +C0 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni284F +ENCODING 10319 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +C0 +C0 +00 +C0 +C0 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2850 +ENCODING 10320 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +18 +18 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2851 +ENCODING 10321 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +18 +18 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2852 +ENCODING 10322 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +D8 +D8 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2853 +ENCODING 10323 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +D8 +D8 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2854 +ENCODING 10324 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +18 +18 +00 +C0 +C0 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2855 +ENCODING 10325 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +18 +18 +00 +C0 +C0 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2856 +ENCODING 10326 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +D8 +D8 +00 +C0 +C0 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2857 +ENCODING 10327 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +D8 +D8 +00 +C0 +C0 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2858 +ENCODING 10328 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +18 +18 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2859 +ENCODING 10329 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +18 +18 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni285A +ENCODING 10330 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +D8 +D8 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni285B +ENCODING 10331 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +D8 +D8 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni285C +ENCODING 10332 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +18 +18 +00 +C0 +C0 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni285D +ENCODING 10333 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +18 +18 +00 +C0 +C0 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni285E +ENCODING 10334 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +D8 +D8 +00 +C0 +C0 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni285F +ENCODING 10335 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +D8 +D8 +00 +C0 +C0 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2860 +ENCODING 10336 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +18 +18 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2861 +ENCODING 10337 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +00 +00 +00 +18 +18 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2862 +ENCODING 10338 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +C0 +C0 +00 +18 +18 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2863 +ENCODING 10339 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +C0 +C0 +00 +18 +18 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2864 +ENCODING 10340 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +D8 +D8 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2865 +ENCODING 10341 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +00 +00 +00 +D8 +D8 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2866 +ENCODING 10342 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +C0 +C0 +00 +D8 +D8 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2867 +ENCODING 10343 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +C0 +C0 +00 +D8 +D8 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2868 +ENCODING 10344 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +00 +00 +00 +18 +18 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2869 +ENCODING 10345 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +00 +00 +00 +18 +18 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni286A +ENCODING 10346 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +C0 +C0 +00 +18 +18 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni286B +ENCODING 10347 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +C0 +C0 +00 +18 +18 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni286C +ENCODING 10348 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +00 +00 +00 +D8 +D8 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni286D +ENCODING 10349 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +00 +00 +00 +D8 +D8 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni286E +ENCODING 10350 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +C0 +C0 +00 +D8 +D8 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni286F +ENCODING 10351 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +C0 +C0 +00 +D8 +D8 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2870 +ENCODING 10352 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +18 +18 +00 +18 +18 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2871 +ENCODING 10353 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +18 +18 +00 +18 +18 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2872 +ENCODING 10354 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +D8 +D8 +00 +18 +18 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2873 +ENCODING 10355 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +D8 +D8 +00 +18 +18 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2874 +ENCODING 10356 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +18 +18 +00 +D8 +D8 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2875 +ENCODING 10357 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +18 +18 +00 +D8 +D8 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2876 +ENCODING 10358 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +D8 +D8 +00 +D8 +D8 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2877 +ENCODING 10359 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +D8 +D8 +00 +D8 +D8 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2878 +ENCODING 10360 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +18 +18 +00 +18 +18 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2879 +ENCODING 10361 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +18 +18 +00 +18 +18 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni287A +ENCODING 10362 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +D8 +D8 +00 +18 +18 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni287B +ENCODING 10363 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +D8 +D8 +00 +18 +18 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni287C +ENCODING 10364 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +18 +18 +00 +D8 +D8 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni287D +ENCODING 10365 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +18 +18 +00 +D8 +D8 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni287E +ENCODING 10366 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +D8 +D8 +00 +D8 +D8 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni287F +ENCODING 10367 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +D8 +D8 +00 +D8 +D8 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2880 +ENCODING 10368 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +18 +ENDCHAR +STARTCHAR uni2881 +ENCODING 10369 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +00 +00 +00 +00 +00 +00 +18 +18 +ENDCHAR +STARTCHAR uni2882 +ENCODING 10370 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +C0 +C0 +00 +00 +00 +00 +18 +18 +ENDCHAR +STARTCHAR uni2883 +ENCODING 10371 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +C0 +C0 +00 +00 +00 +00 +18 +18 +ENDCHAR +STARTCHAR uni2884 +ENCODING 10372 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +C0 +C0 +00 +18 +18 +ENDCHAR +STARTCHAR uni2885 +ENCODING 10373 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +00 +00 +00 +C0 +C0 +00 +18 +18 +ENDCHAR +STARTCHAR uni2886 +ENCODING 10374 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +C0 +C0 +00 +C0 +C0 +00 +18 +18 +ENDCHAR +STARTCHAR uni2887 +ENCODING 10375 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +C0 +C0 +00 +C0 +C0 +00 +18 +18 +ENDCHAR +STARTCHAR uni2888 +ENCODING 10376 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +00 +00 +00 +00 +00 +00 +18 +18 +ENDCHAR +STARTCHAR uni2889 +ENCODING 10377 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +00 +00 +00 +00 +00 +00 +18 +18 +ENDCHAR +STARTCHAR uni288A +ENCODING 10378 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +C0 +C0 +00 +00 +00 +00 +18 +18 +ENDCHAR +STARTCHAR uni288B +ENCODING 10379 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +C0 +C0 +00 +00 +00 +00 +18 +18 +ENDCHAR +STARTCHAR uni288C +ENCODING 10380 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +00 +00 +00 +C0 +C0 +00 +18 +18 +ENDCHAR +STARTCHAR uni288D +ENCODING 10381 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +00 +00 +00 +C0 +C0 +00 +18 +18 +ENDCHAR +STARTCHAR uni288E +ENCODING 10382 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +C0 +C0 +00 +C0 +C0 +00 +18 +18 +ENDCHAR +STARTCHAR uni288F +ENCODING 10383 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +C0 +C0 +00 +C0 +C0 +00 +18 +18 +ENDCHAR +STARTCHAR uni2890 +ENCODING 10384 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +18 +18 +00 +00 +00 +00 +18 +18 +ENDCHAR +STARTCHAR uni2891 +ENCODING 10385 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +18 +18 +00 +00 +00 +00 +18 +18 +ENDCHAR +STARTCHAR uni2892 +ENCODING 10386 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +D8 +D8 +00 +00 +00 +00 +18 +18 +ENDCHAR +STARTCHAR uni2893 +ENCODING 10387 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +D8 +D8 +00 +00 +00 +00 +18 +18 +ENDCHAR +STARTCHAR uni2894 +ENCODING 10388 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +18 +18 +00 +C0 +C0 +00 +18 +18 +ENDCHAR +STARTCHAR uni2895 +ENCODING 10389 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +18 +18 +00 +C0 +C0 +00 +18 +18 +ENDCHAR +STARTCHAR uni2896 +ENCODING 10390 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +D8 +D8 +00 +C0 +C0 +00 +18 +18 +ENDCHAR +STARTCHAR uni2897 +ENCODING 10391 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +D8 +D8 +00 +C0 +C0 +00 +18 +18 +ENDCHAR +STARTCHAR uni2898 +ENCODING 10392 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +18 +18 +00 +00 +00 +00 +18 +18 +ENDCHAR +STARTCHAR uni2899 +ENCODING 10393 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +18 +18 +00 +00 +00 +00 +18 +18 +ENDCHAR +STARTCHAR uni289A +ENCODING 10394 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +D8 +D8 +00 +00 +00 +00 +18 +18 +ENDCHAR +STARTCHAR uni289B +ENCODING 10395 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +D8 +D8 +00 +00 +00 +00 +18 +18 +ENDCHAR +STARTCHAR uni289C +ENCODING 10396 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +18 +18 +00 +C0 +C0 +00 +18 +18 +ENDCHAR +STARTCHAR uni289D +ENCODING 10397 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +18 +18 +00 +C0 +C0 +00 +18 +18 +ENDCHAR +STARTCHAR uni289E +ENCODING 10398 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +D8 +D8 +00 +C0 +C0 +00 +18 +18 +ENDCHAR +STARTCHAR uni289F +ENCODING 10399 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +D8 +D8 +00 +C0 +C0 +00 +18 +18 +ENDCHAR +STARTCHAR uni28A0 +ENCODING 10400 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +18 +18 +00 +18 +18 +ENDCHAR +STARTCHAR uni28A1 +ENCODING 10401 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +00 +00 +00 +18 +18 +00 +18 +18 +ENDCHAR +STARTCHAR uni28A2 +ENCODING 10402 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +C0 +C0 +00 +18 +18 +00 +18 +18 +ENDCHAR +STARTCHAR uni28A3 +ENCODING 10403 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +C0 +C0 +00 +18 +18 +00 +18 +18 +ENDCHAR +STARTCHAR uni28A4 +ENCODING 10404 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +D8 +D8 +00 +18 +18 +ENDCHAR +STARTCHAR uni28A5 +ENCODING 10405 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +00 +00 +00 +D8 +D8 +00 +18 +18 +ENDCHAR +STARTCHAR uni28A6 +ENCODING 10406 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +C0 +C0 +00 +D8 +D8 +00 +18 +18 +ENDCHAR +STARTCHAR uni28A7 +ENCODING 10407 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +C0 +C0 +00 +D8 +D8 +00 +18 +18 +ENDCHAR +STARTCHAR uni28A8 +ENCODING 10408 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +00 +00 +00 +18 +18 +00 +18 +18 +ENDCHAR +STARTCHAR uni28A9 +ENCODING 10409 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +00 +00 +00 +18 +18 +00 +18 +18 +ENDCHAR +STARTCHAR uni28AA +ENCODING 10410 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +C0 +C0 +00 +18 +18 +00 +18 +18 +ENDCHAR +STARTCHAR uni28AB +ENCODING 10411 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +C0 +C0 +00 +18 +18 +00 +18 +18 +ENDCHAR +STARTCHAR uni28AC +ENCODING 10412 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +00 +00 +00 +D8 +D8 +00 +18 +18 +ENDCHAR +STARTCHAR uni28AD +ENCODING 10413 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +00 +00 +00 +D8 +D8 +00 +18 +18 +ENDCHAR +STARTCHAR uni28AE +ENCODING 10414 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +C0 +C0 +00 +D8 +D8 +00 +18 +18 +ENDCHAR +STARTCHAR uni28AF +ENCODING 10415 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +C0 +C0 +00 +D8 +D8 +00 +18 +18 +ENDCHAR +STARTCHAR uni28B0 +ENCODING 10416 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +18 +18 +00 +18 +18 +00 +18 +18 +ENDCHAR +STARTCHAR uni28B1 +ENCODING 10417 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +18 +18 +00 +18 +18 +00 +18 +18 +ENDCHAR +STARTCHAR uni28B2 +ENCODING 10418 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +D8 +D8 +00 +18 +18 +00 +18 +18 +ENDCHAR +STARTCHAR uni28B3 +ENCODING 10419 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +D8 +D8 +00 +18 +18 +00 +18 +18 +ENDCHAR +STARTCHAR uni28B4 +ENCODING 10420 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +18 +18 +00 +D8 +D8 +00 +18 +18 +ENDCHAR +STARTCHAR uni28B5 +ENCODING 10421 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +18 +18 +00 +D8 +D8 +00 +18 +18 +ENDCHAR +STARTCHAR uni28B6 +ENCODING 10422 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +D8 +D8 +00 +D8 +D8 +00 +18 +18 +ENDCHAR +STARTCHAR uni28B7 +ENCODING 10423 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +D8 +D8 +00 +D8 +D8 +00 +18 +18 +ENDCHAR +STARTCHAR uni28B8 +ENCODING 10424 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +18 +18 +00 +18 +18 +00 +18 +18 +ENDCHAR +STARTCHAR uni28B9 +ENCODING 10425 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +18 +18 +00 +18 +18 +00 +18 +18 +ENDCHAR +STARTCHAR uni28BA +ENCODING 10426 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +D8 +D8 +00 +18 +18 +00 +18 +18 +ENDCHAR +STARTCHAR uni28BB +ENCODING 10427 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +D8 +D8 +00 +18 +18 +00 +18 +18 +ENDCHAR +STARTCHAR uni28BC +ENCODING 10428 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +18 +18 +00 +D8 +D8 +00 +18 +18 +ENDCHAR +STARTCHAR uni28BD +ENCODING 10429 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +18 +18 +00 +D8 +D8 +00 +18 +18 +ENDCHAR +STARTCHAR uni28BE +ENCODING 10430 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +D8 +D8 +00 +D8 +D8 +00 +18 +18 +ENDCHAR +STARTCHAR uni28BF +ENCODING 10431 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +D8 +D8 +00 +D8 +D8 +00 +18 +18 +ENDCHAR +STARTCHAR uni28C0 +ENCODING 10432 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28C1 +ENCODING 10433 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +00 +00 +00 +00 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28C2 +ENCODING 10434 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +C0 +C0 +00 +00 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28C3 +ENCODING 10435 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +C0 +C0 +00 +00 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28C4 +ENCODING 10436 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +C0 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28C5 +ENCODING 10437 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +00 +00 +00 +C0 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28C6 +ENCODING 10438 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +C0 +C0 +00 +C0 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28C7 +ENCODING 10439 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +C0 +C0 +00 +C0 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28C8 +ENCODING 10440 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +00 +00 +00 +00 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28C9 +ENCODING 10441 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +00 +00 +00 +00 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28CA +ENCODING 10442 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +C0 +C0 +00 +00 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28CB +ENCODING 10443 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +C0 +C0 +00 +00 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28CC +ENCODING 10444 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +00 +00 +00 +C0 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28CD +ENCODING 10445 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +00 +00 +00 +C0 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28CE +ENCODING 10446 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +C0 +C0 +00 +C0 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28CF +ENCODING 10447 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +C0 +C0 +00 +C0 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28D0 +ENCODING 10448 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +18 +18 +00 +00 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28D1 +ENCODING 10449 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +18 +18 +00 +00 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28D2 +ENCODING 10450 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +D8 +D8 +00 +00 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28D3 +ENCODING 10451 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +D8 +D8 +00 +00 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28D4 +ENCODING 10452 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +18 +18 +00 +C0 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28D5 +ENCODING 10453 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +18 +18 +00 +C0 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28D6 +ENCODING 10454 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +D8 +D8 +00 +C0 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28D7 +ENCODING 10455 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +D8 +D8 +00 +C0 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28D8 +ENCODING 10456 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +18 +18 +00 +00 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28D9 +ENCODING 10457 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +18 +18 +00 +00 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28DA +ENCODING 10458 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +D8 +D8 +00 +00 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28DB +ENCODING 10459 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +D8 +D8 +00 +00 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28DC +ENCODING 10460 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +18 +18 +00 +C0 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28DD +ENCODING 10461 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +18 +18 +00 +C0 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28DE +ENCODING 10462 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +D8 +D8 +00 +C0 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28DF +ENCODING 10463 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +D8 +D8 +00 +C0 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28E0 +ENCODING 10464 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +18 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28E1 +ENCODING 10465 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +00 +00 +00 +18 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28E2 +ENCODING 10466 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +C0 +C0 +00 +18 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28E3 +ENCODING 10467 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +C0 +C0 +00 +18 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28E4 +ENCODING 10468 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28E5 +ENCODING 10469 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +00 +00 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28E6 +ENCODING 10470 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +C0 +C0 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28E7 +ENCODING 10471 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +C0 +C0 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28E8 +ENCODING 10472 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +00 +00 +00 +18 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28E9 +ENCODING 10473 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +00 +00 +00 +18 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28EA +ENCODING 10474 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +C0 +C0 +00 +18 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28EB +ENCODING 10475 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +C0 +C0 +00 +18 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28EC +ENCODING 10476 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +00 +00 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28ED +ENCODING 10477 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +00 +00 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28EE +ENCODING 10478 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +C0 +C0 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28EF +ENCODING 10479 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +C0 +C0 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28F0 +ENCODING 10480 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +18 +18 +00 +18 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28F1 +ENCODING 10481 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +18 +18 +00 +18 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28F2 +ENCODING 10482 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +D8 +D8 +00 +18 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28F3 +ENCODING 10483 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +D8 +D8 +00 +18 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28F4 +ENCODING 10484 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +18 +18 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28F5 +ENCODING 10485 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +18 +18 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28F6 +ENCODING 10486 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +D8 +D8 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28F7 +ENCODING 10487 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +C0 +00 +D8 +D8 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28F8 +ENCODING 10488 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +18 +18 +00 +18 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28F9 +ENCODING 10489 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +18 +18 +00 +18 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28FA +ENCODING 10490 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +D8 +D8 +00 +18 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28FB +ENCODING 10491 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +D8 +D8 +00 +18 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28FC +ENCODING 10492 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +18 +18 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28FD +ENCODING 10493 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +18 +18 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28FE +ENCODING 10494 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +18 +18 +00 +D8 +D8 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28FF +ENCODING 10495 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +D8 +D8 +00 +D8 +D8 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni2900 +ENCODING 10496 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +40 +58 +FC +58 +40 +00 +00 +00 +ENDCHAR +STARTCHAR uni2901 +ENCODING 10497 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +60 +68 +FC +68 +60 +00 +00 +00 +ENDCHAR +STARTCHAR uni2902 +ENCODING 10498 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +28 +7C +88 +7C +28 +00 +00 +00 +ENDCHAR +STARTCHAR uni2903 +ENCODING 10499 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +50 +F8 +44 +F8 +50 +00 +00 +00 +ENDCHAR +STARTCHAR uni2904 +ENCODING 10500 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +78 +A4 +78 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni2905 +ENCODING 10501 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +98 +FC +98 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2906 +ENCODING 10502 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +14 +24 +7C +84 +7C +24 +14 +00 +00 +ENDCHAR +STARTCHAR uni2907 +ENCODING 10503 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A0 +90 +F8 +84 +F8 +90 +A0 +00 +00 +ENDCHAR +STARTCHAR uni2908 +ENCODING 10504 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +F8 +20 +A8 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni2909 +ENCODING 10505 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +70 +A8 +20 +F8 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni290A +ENCODING 10506 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +70 +A8 +A8 +A8 +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni290B +ENCODING 10507 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +A8 +A8 +A8 +A8 +A8 +A8 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni290C +ENCODING 10508 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +40 +EC +40 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni290D +ENCODING 10509 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +08 +DC +08 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni290E +ENCODING 10510 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +40 +D4 +40 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni290F +ENCODING 10511 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +08 +AC +08 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni2910 +ENCODING 10512 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +98 +6C +98 +00 +00 +00 +ENDCHAR +STARTCHAR uni2911 +ENCODING 10513 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +10 +A8 +10 +20 +00 +00 +ENDCHAR +STARTCHAR uni2912 +ENCODING 10514 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +20 +70 +A8 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2913 +ENCODING 10515 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +20 +A8 +70 +20 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2914 +ENCODING 10516 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +A8 +7C +A8 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni2915 +ENCODING 10517 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +B8 +7C +B8 +30 +00 +00 +00 +ENDCHAR +STARTCHAR uni2916 +ENCODING 10518 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +98 +7C +98 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2917 +ENCODING 10519 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +B8 +7C +B8 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni2918 +ENCODING 10520 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +60 +F8 +7C +F8 +60 +00 +00 +00 +ENDCHAR +STARTCHAR uni2919 +ENCODING 10521 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +08 +10 +E0 +10 +08 +00 +00 +ENDCHAR +STARTCHAR uni291A +ENCODING 10522 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +80 +40 +3C +40 +80 +00 +00 +ENDCHAR +STARTCHAR uni291B +ENCODING 10523 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +28 +50 +F0 +50 +28 +00 +00 +ENDCHAR +STARTCHAR uni291C +ENCODING 10524 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A0 +50 +3C +50 +A0 +00 +00 +ENDCHAR +STARTCHAR uni291D +ENCODING 10525 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +10 +BC +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni291E +ENCODING 10526 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +20 +F4 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni291F +ENCODING 10527 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +14 +BC +14 +00 +00 +00 +ENDCHAR +STARTCHAR uni2920 +ENCODING 10528 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +A0 +F4 +A0 +00 +00 +00 +ENDCHAR +STARTCHAR uni2921 +ENCODING 10529 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +E0 +C0 +A8 +18 +38 +00 +00 +ENDCHAR +STARTCHAR uni2922 +ENCODING 10530 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +18 +A8 +C0 +E0 +00 +00 +ENDCHAR +STARTCHAR uni2923 +ENCODING 10531 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +E0 +C0 +A0 +10 +08 +18 +00 +00 +ENDCHAR +STARTCHAR uni2924 +ENCODING 10532 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +38 +18 +28 +40 +80 +C0 +00 +00 +ENDCHAR +STARTCHAR uni2925 +ENCODING 10533 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +C0 +80 +40 +28 +18 +38 +00 +00 +ENDCHAR +STARTCHAR uni2926 +ENCODING 10534 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +18 +08 +10 +A0 +C0 +E0 +00 +00 +ENDCHAR +STARTCHAR uni2927 +ENCODING 10535 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +D8 +D8 +20 +50 +88 +00 +00 +ENDCHAR +STARTCHAR uni2928 +ENCODING 10536 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +98 +58 +20 +58 +98 +00 +00 +ENDCHAR +STARTCHAR uni2929 +ENCODING 10537 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +50 +20 +D8 +D8 +00 +00 +ENDCHAR +STARTCHAR uni292A +ENCODING 10538 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +C8 +D0 +20 +D0 +C8 +00 +00 +ENDCHAR +STARTCHAR uni292B +ENCODING 10539 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +50 +20 +50 +88 +00 +00 +ENDCHAR +STARTCHAR uni292C +ENCODING 10540 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +50 +20 +50 +88 +00 +00 +ENDCHAR +STARTCHAR uni292D +ENCODING 10541 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +98 +58 +20 +58 +98 +00 +00 +ENDCHAR +STARTCHAR uni292E +ENCODING 10542 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +98 +58 +20 +58 +98 +00 +00 +ENDCHAR +STARTCHAR uni292F +ENCODING 10543 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +98 +58 +20 +50 +88 +00 +00 +ENDCHAR +STARTCHAR uni2930 +ENCODING 10544 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +50 +20 +58 +98 +00 +00 +ENDCHAR +STARTCHAR uni2931 +ENCODING 10545 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +D8 +D8 +20 +50 +88 +00 +00 +ENDCHAR +STARTCHAR uni2932 +ENCODING 10546 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +D8 +D8 +20 +50 +88 +00 +00 +ENDCHAR +STARTCHAR uni2933 +ENCODING 10547 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +48 +BC +08 +00 +00 +00 +ENDCHAR +STARTCHAR uni2934 +ENCODING 10548 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +70 +A8 +20 +C0 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2935 +ENCODING 10549 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +C0 +20 +A8 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni2936 +ENCODING 10550 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +08 +28 +48 +F0 +40 +20 +00 +00 +ENDCHAR +STARTCHAR uni2937 +ENCODING 10551 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +A0 +90 +78 +10 +20 +00 +00 +ENDCHAR +STARTCHAR uni2938 +ENCODING 10552 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +10 +08 +08 +08 +50 +60 +70 +00 +00 +ENDCHAR +STARTCHAR uni2939 +ENCODING 10553 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +40 +40 +40 +28 +18 +38 +00 +00 +ENDCHAR +STARTCHAR uni293A +ENCODING 10554 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +B0 +C8 +E0 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni293B +ENCODING 10555 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +98 +68 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni293C +ENCODING 10556 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +68 +98 +38 +00 +F8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni293D +ENCODING 10557 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +B0 +C8 +E0 +00 +20 +20 +F8 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni293E +ENCODING 10558 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +08 +E8 +C8 +B0 +00 +00 +00 +ENDCHAR +STARTCHAR uni293F +ENCODING 10559 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +40 +80 +B8 +98 +68 +00 +00 +00 +ENDCHAR +STARTCHAR uni2940 +ENCODING 10560 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +78 +A4 +94 +84 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni2941 +ENCODING 10561 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +10 +78 +94 +A4 +84 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni2942 +ENCODING 10562 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +08 +FC +08 +10 +00 +40 +F0 +40 +00 +00 +ENDCHAR +STARTCHAR uni2943 +ENCODING 10563 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +40 +FC +40 +20 +08 +3C +08 +00 +00 +ENDCHAR +STARTCHAR uni2944 +ENCODING 10564 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +3C +08 +20 +40 +FC +40 +20 +00 +00 +ENDCHAR +STARTCHAR uni2945 +ENCODING 10565 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +F8 +10 +40 +E0 +40 +00 +00 +ENDCHAR +STARTCHAR uni2946 +ENCODING 10566 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +40 +F8 +40 +10 +38 +10 +00 +00 +ENDCHAR +STARTCHAR uni2947 +ENCODING 10567 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +68 +FC +68 +00 +00 +00 +ENDCHAR +STARTCHAR uni2948 +ENCODING 10568 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +78 +FC +78 +00 +00 +00 +ENDCHAR +STARTCHAR uni2949 +ENCODING 10569 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +70 +A8 +70 +A8 +20 +20 +20 +50 +20 +00 +ENDCHAR +STARTCHAR uni294A +ENCODING 10570 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +40 +F8 +10 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni294B +ENCODING 10571 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +F8 +40 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni294C +ENCODING 10572 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +30 +28 +20 +20 +20 +A0 +60 +20 +00 +ENDCHAR +STARTCHAR uni294D +ENCODING 10573 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +60 +A0 +20 +20 +20 +28 +30 +20 +00 +ENDCHAR +STARTCHAR uni294E +ENCODING 10574 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +50 +F8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni294F +ENCODING 10575 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +30 +28 +20 +20 +20 +28 +30 +20 +00 +ENDCHAR +STARTCHAR uni2950 +ENCODING 10576 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +F8 +50 +00 +00 +00 +ENDCHAR +STARTCHAR uni2951 +ENCODING 10577 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +30 +50 +10 +10 +10 +50 +30 +10 +00 +ENDCHAR +STARTCHAR uni2952 +ENCODING 10578 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +90 +A0 +FC +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni2953 +ENCODING 10579 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +24 +14 +FC +04 +04 +00 +00 +ENDCHAR +STARTCHAR uni2954 +ENCODING 10580 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +20 +30 +28 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2955 +ENCODING 10581 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +20 +28 +30 +20 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2956 +ENCODING 10582 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +80 +80 +FC +A0 +90 +00 +00 +ENDCHAR +STARTCHAR uni2957 +ENCODING 10583 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +04 +04 +FC +14 +24 +00 +00 +ENDCHAR +STARTCHAR uni2958 +ENCODING 10584 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +20 +60 +A0 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2959 +ENCODING 10585 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +20 +A0 +60 +20 +F8 +00 +00 +ENDCHAR +STARTCHAR uni295A +ENCODING 10586 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +48 +F8 +08 +00 +00 +00 +ENDCHAR +STARTCHAR uni295B +ENCODING 10587 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +90 +F8 +80 +00 +00 +00 +ENDCHAR +STARTCHAR uni295C +ENCODING 10588 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +30 +28 +20 +20 +20 +F8 +00 +00 +ENDCHAR +STARTCHAR uni295D +ENCODING 10589 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +20 +20 +20 +28 +30 +20 +00 +00 +ENDCHAR +STARTCHAR uni295E +ENCODING 10590 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +08 +F8 +48 +00 +00 +00 +ENDCHAR +STARTCHAR uni295F +ENCODING 10591 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +80 +F8 +90 +00 +00 +00 +ENDCHAR +STARTCHAR uni2960 +ENCODING 10592 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +60 +A0 +20 +20 +20 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2961 +ENCODING 10593 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +20 +20 +20 +A0 +60 +20 +00 +00 +ENDCHAR +STARTCHAR uni2962 +ENCODING 10594 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +40 +F8 +00 +F8 +40 +00 +00 +ENDCHAR +STARTCHAR uni2963 +ENCODING 10595 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +D8 +50 +50 +50 +50 +50 +00 +00 +ENDCHAR +STARTCHAR uni2964 +ENCODING 10596 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +F8 +00 +F8 +10 +00 +00 +ENDCHAR +STARTCHAR uni2965 +ENCODING 10597 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +50 +50 +50 +50 +D8 +50 +00 +00 +ENDCHAR +STARTCHAR uni2966 +ENCODING 10598 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +40 +F8 +00 +10 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2967 +ENCODING 10599 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +40 +00 +F8 +10 +00 +00 +ENDCHAR +STARTCHAR uni2968 +ENCODING 10600 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +F8 +00 +40 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2969 +ENCODING 10601 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +10 +00 +F8 +40 +00 +00 +ENDCHAR +STARTCHAR uni296A +ENCODING 10602 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +40 +F8 +00 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni296B +ENCODING 10603 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +F8 +00 +F8 +40 +00 +00 +ENDCHAR +STARTCHAR uni296C +ENCODING 10604 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +F8 +00 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni296D +ENCODING 10605 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +F8 +00 +F8 +10 +00 +00 +ENDCHAR +STARTCHAR uni296E +ENCODING 10606 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +D0 +50 +50 +50 +58 +50 +00 +00 +ENDCHAR +STARTCHAR uni296F +ENCODING 10607 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +58 +50 +50 +50 +D0 +50 +00 +00 +ENDCHAR +STARTCHAR uni2970 +ENCODING 10608 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +F0 +08 +F0 +00 +00 +00 +ENDCHAR +STARTCHAR uni2971 +ENCODING 10609 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +E0 +00 +E0 +00 +10 +F8 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni2972 +ENCODING 10610 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +68 +B0 +00 +10 +F8 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni2973 +ENCODING 10611 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +40 +F8 +40 +00 +68 +B0 +00 +00 +ENDCHAR +STARTCHAR uni2974 +ENCODING 10612 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +F8 +10 +00 +68 +B0 +00 +00 +ENDCHAR +STARTCHAR uni2975 +ENCODING 10613 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +F8 +10 +00 +68 +B0 +00 +68 +B0 +00 +ENDCHAR +STARTCHAR uni2976 +ENCODING 10614 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +18 +60 +80 +60 +18 +00 +40 +F8 +40 +00 +ENDCHAR +STARTCHAR uni2977 +ENCODING 10615 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +08 +50 +F8 +50 +08 +00 +00 +ENDCHAR +STARTCHAR uni2978 +ENCODING 10616 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +C0 +30 +08 +30 +C0 +10 +F8 +10 +00 +00 +ENDCHAR +STARTCHAR uni2979 +ENCODING 10617 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +78 +80 +80 +78 +00 +10 +F8 +10 +00 +00 +ENDCHAR +STARTCHAR uni297A +ENCODING 10618 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +0C +50 +F8 +50 +0C +00 +00 +ENDCHAR +STARTCHAR uni297B +ENCODING 10619 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F0 +08 +08 +F0 +00 +40 +F8 +40 +00 +00 +ENDCHAR +STARTCHAR uni297C +ENCODING 10620 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +40 +80 +78 +80 +40 +00 +00 +ENDCHAR +STARTCHAR uni297D +ENCODING 10621 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +08 +F0 +08 +10 +00 +00 +ENDCHAR +STARTCHAR uni297E +ENCODING 10622 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +50 +A8 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni297F +ENCODING 10623 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +20 +20 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni2980 +ENCODING 10624 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni2981 +ENCODING 10625 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +30 +78 +78 +30 +00 +00 +00 +ENDCHAR +STARTCHAR uni2982 +ENCODING 10626 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +50 +20 +00 +20 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni2983 +ENCODING 10627 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +38 +50 +50 +50 +90 +50 +50 +50 +38 +00 +ENDCHAR +STARTCHAR uni2984 +ENCODING 10628 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +E0 +50 +50 +50 +48 +50 +50 +50 +E0 +00 +ENDCHAR +STARTCHAR uni2985 +ENCODING 10629 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +08 +10 +30 +30 +50 +50 +30 +30 +10 +08 +00 +ENDCHAR +STARTCHAR uni2986 +ENCODING 10630 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +40 +20 +30 +30 +28 +28 +30 +30 +20 +40 +00 +ENDCHAR +STARTCHAR uni2987 +ENCODING 10631 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +30 +30 +50 +50 +50 +50 +30 +30 +10 +00 +ENDCHAR +STARTCHAR uni2988 +ENCODING 10632 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +40 +60 +60 +50 +50 +50 +50 +60 +60 +40 +00 +ENDCHAR +STARTCHAR uni2989 +ENCODING 10633 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +08 +18 +18 +28 +28 +48 +28 +28 +18 +18 +08 +ENDCHAR +STARTCHAR uni298A +ENCODING 10634 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +40 +60 +60 +50 +50 +48 +50 +50 +60 +60 +40 +ENDCHAR +STARTCHAR uni298B +ENCODING 10635 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +40 +40 +40 +40 +40 +40 +40 +70 +00 +70 +ENDCHAR +STARTCHAR uni298C +ENCODING 10636 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +10 +10 +10 +10 +10 +10 +10 +70 +00 +70 +ENDCHAR +STARTCHAR uni298D +ENCODING 10637 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +60 +50 +40 +40 +40 +40 +40 +40 +70 +00 +ENDCHAR +STARTCHAR uni298E +ENCODING 10638 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +10 +10 +10 +10 +10 +10 +50 +30 +70 +00 +ENDCHAR +STARTCHAR uni298F +ENCODING 10639 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +40 +40 +40 +40 +40 +40 +50 +60 +70 +00 +ENDCHAR +STARTCHAR uni2990 +ENCODING 10640 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +30 +50 +10 +10 +10 +10 +10 +10 +70 +00 +ENDCHAR +STARTCHAR uni2991 +ENCODING 10641 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +08 +10 +10 +20 +20 +48 +20 +20 +10 +10 +08 +ENDCHAR +STARTCHAR uni2992 +ENCODING 10642 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +40 +20 +20 +10 +10 +48 +10 +10 +20 +20 +40 +ENDCHAR +STARTCHAR uni2993 +ENCODING 10643 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +20 +38 +60 +A0 +60 +38 +20 +10 +00 +ENDCHAR +STARTCHAR uni2994 +ENCODING 10644 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +20 +E0 +30 +28 +30 +E0 +20 +40 +00 +ENDCHAR +STARTCHAR uni2995 +ENCODING 10645 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +28 +50 +D0 +70 +58 +70 +D0 +50 +28 +00 +ENDCHAR +STARTCHAR uni2996 +ENCODING 10646 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +A0 +50 +58 +70 +D0 +70 +58 +50 +A0 +00 +ENDCHAR +STARTCHAR uni2997 +ENCODING 10647 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +20 +60 +60 +60 +60 +60 +60 +20 +10 +00 +ENDCHAR +STARTCHAR uni2998 +ENCODING 10648 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +40 +20 +30 +30 +30 +30 +30 +30 +20 +40 +00 +ENDCHAR +STARTCHAR uni2999 +ENCODING 10649 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +20 +00 +20 +00 +20 +00 +00 +ENDCHAR +STARTCHAR uni299A +ENCODING 10650 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +20 +40 +20 +40 +20 +40 +20 +00 +00 +ENDCHAR +STARTCHAR uni299B +ENCODING 10651 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +40 +20 +10 +28 +FC +00 +00 +00 +ENDCHAR +STARTCHAR uni299C +ENCODING 10652 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +80 +80 +80 +E0 +A0 +F8 +00 +00 +ENDCHAR +STARTCHAR uni299D +ENCODING 10653 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +E0 +90 +A8 +88 +FC +00 +00 +ENDCHAR +STARTCHAR uni299E +ENCODING 10654 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +10 +20 +2C +48 +44 +8C +80 +FC +00 +00 +ENDCHAR +STARTCHAR uni299F +ENCODING 10655 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +04 +18 +60 +FC +00 +00 +ENDCHAR +STARTCHAR uni29A0 +ENCODING 10656 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +90 +60 +38 +24 +38 +60 +90 +00 +00 +ENDCHAR +STARTCHAR uni29A1 +ENCODING 10657 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +70 +D8 +20 +00 +00 +ENDCHAR +STARTCHAR uni29A2 +ENCODING 10658 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +FC +08 +10 +20 +40 +00 +00 +ENDCHAR +STARTCHAR uni29A3 +ENCODING 10659 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +40 +20 +10 +08 +FC +00 +00 +00 +ENDCHAR +STARTCHAR uni29A4 +ENCODING 10660 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +10 +20 +40 +FC +00 +FC +00 +00 +ENDCHAR +STARTCHAR uni29A5 +ENCODING 10661 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +20 +10 +08 +FC +00 +FC +00 +00 +ENDCHAR +STARTCHAR uni29A6 +ENCODING 10662 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +80 +40 +38 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni29A7 +ENCODING 10663 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +38 +40 +80 +00 +00 +00 +ENDCHAR +STARTCHAR uni29A8 +ENCODING 10664 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +18 +18 +20 +50 +FC +00 +00 +00 +ENDCHAR +STARTCHAR uni29A9 +ENCODING 10665 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +60 +60 +10 +28 +FC +00 +00 +00 +ENDCHAR +STARTCHAR uni29AA +ENCODING 10666 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +FC +50 +20 +18 +18 +00 +00 +00 +ENDCHAR +STARTCHAR uni29AB +ENCODING 10667 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +FC +28 +10 +60 +60 +00 +00 +00 +ENDCHAR +STARTCHAR uni29AC +ENCODING 10668 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +80 +98 +D8 +A0 +C0 +80 +00 +00 +ENDCHAR +STARTCHAR uni29AD +ENCODING 10669 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +08 +C8 +D8 +28 +18 +08 +00 +00 +ENDCHAR +STARTCHAR uni29AE +ENCODING 10670 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +80 +C0 +A0 +D8 +98 +80 +00 +00 +ENDCHAR +STARTCHAR uni29AF +ENCODING 10671 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +08 +18 +28 +D8 +C8 +08 +00 +00 +ENDCHAR +STARTCHAR uni29B0 +ENCODING 10672 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +80 +70 +68 +58 +38 +04 +00 +00 +ENDCHAR +STARTCHAR uni29B1 +ENCODING 10673 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +78 +00 +04 +38 +58 +68 +70 +80 +00 +00 +ENDCHAR +STARTCHAR uni29B2 +ENCODING 10674 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +50 +20 +04 +38 +58 +68 +70 +80 +00 +00 +ENDCHAR +STARTCHAR uni29B3 +ENCODING 10675 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +10 +78 +10 +04 +38 +58 +68 +70 +80 +00 +00 +ENDCHAR +STARTCHAR uni29B4 +ENCODING 10676 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +78 +20 +04 +38 +58 +68 +70 +80 +00 +00 +ENDCHAR +STARTCHAR uni29B5 +ENCODING 10677 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +F8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni29B6 +ENCODING 10678 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +A8 +A8 +A8 +70 +00 +00 +ENDCHAR +STARTCHAR uni29B7 +ENCODING 10679 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +78 +B4 +B4 +B4 +B4 +78 +00 +00 +ENDCHAR +STARTCHAR uni29B8 +ENCODING 10680 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +C8 +A8 +98 +70 +00 +00 +ENDCHAR +STARTCHAR uni29B9 +ENCODING 10681 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +A8 +A8 +F8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni29BA +ENCODING 10682 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +A8 +F8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni29BB +ENCODING 10683 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +D8 +A8 +D8 +70 +00 +00 +ENDCHAR +STARTCHAR uni29BC +ENCODING 10684 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +78 +CC +94 +A4 +CC +78 +00 +00 +ENDCHAR +STARTCHAR uni29BD +ENCODING 10685 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +70 +20 +70 +A8 +A8 +A8 +70 +20 +00 +ENDCHAR +STARTCHAR uni29BE +ENCODING 10686 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +78 +84 +B4 +94 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni29BF +ENCODING 10687 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +78 +84 +B4 +B4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni29C0 +ENCODING 10688 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +84 +A4 +94 +A4 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni29C1 +ENCODING 10689 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +84 +94 +A4 +94 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni29C2 +ENCODING 10690 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +60 +98 +94 +98 +60 +00 +00 +ENDCHAR +STARTCHAR uni29C3 +ENCODING 10691 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +60 +9C +90 +9C +60 +00 +00 +ENDCHAR +STARTCHAR uni29C4 +ENCODING 10692 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +98 +A8 +C8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni29C5 +ENCODING 10693 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +C8 +A8 +98 +F8 +00 +00 +ENDCHAR +STARTCHAR uni29C6 +ENCODING 10694 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +FC +84 +A4 +F4 +A4 +84 +FC +00 +00 +ENDCHAR +STARTCHAR uni29C7 +ENCODING 10695 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +FC +84 +A4 +D4 +A4 +84 +FC +00 +00 +ENDCHAR +STARTCHAR uni29C8 +ENCODING 10696 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +FC +FC +CC +CC +FC +FC +00 +00 +ENDCHAR +STARTCHAR uni29C9 +ENCODING 10697 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F0 +90 +BC +E4 +24 +3C +00 +00 +ENDCHAR +STARTCHAR uni29CA +ENCODING 10698 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +20 +50 +50 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni29CB +ENCODING 10699 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +50 +50 +88 +F8 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni29CC +ENCODING 10700 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +30 +48 +B4 +A4 +94 +B4 +84 +FC +00 +00 +ENDCHAR +STARTCHAR uni29CD +ENCODING 10701 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +50 +50 +88 +88 +FC +00 +00 +ENDCHAR +STARTCHAR uni29CE +ENCODING 10702 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +C0 +B0 +88 +B0 +C0 +18 +68 +88 +68 +18 +00 +ENDCHAR +STARTCHAR uni29CF +ENCODING 10703 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +14 +34 +54 +94 +54 +34 +14 +00 +00 +ENDCHAR +STARTCHAR uni29D0 +ENCODING 10704 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A0 +B0 +A8 +A4 +A8 +B0 +A0 +00 +00 +ENDCHAR +STARTCHAR uni29D1 +ENCODING 10705 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +D8 +E8 +D8 +88 +00 +00 +ENDCHAR +STARTCHAR uni29D2 +ENCODING 10706 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +D8 +B8 +D8 +88 +00 +00 +ENDCHAR +STARTCHAR uni29D3 +ENCODING 10707 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +D8 +F8 +D8 +88 +00 +00 +ENDCHAR +STARTCHAR uni29D4 +ENCODING 10708 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +D0 +E0 +D0 +88 +00 +00 +ENDCHAR +STARTCHAR uni29D5 +ENCODING 10709 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +58 +38 +58 +88 +00 +00 +ENDCHAR +STARTCHAR uni29D6 +ENCODING 10710 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +50 +20 +50 +F8 +00 +00 +ENDCHAR +STARTCHAR uni29D7 +ENCODING 10711 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +70 +20 +70 +F8 +00 +00 +ENDCHAR +STARTCHAR uni29D8 +ENCODING 10712 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +10 +20 +10 +20 +10 +20 +00 +00 +ENDCHAR +STARTCHAR uni29D9 +ENCODING 10713 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +20 +10 +20 +10 +20 +10 +00 +00 +ENDCHAR +STARTCHAR uni29DA +ENCODING 10714 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +90 +48 +90 +48 +90 +48 +90 +00 +00 +ENDCHAR +STARTCHAR uni29DB +ENCODING 10715 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +48 +90 +48 +90 +48 +90 +48 +00 +00 +ENDCHAR +STARTCHAR uni29DC +ENCODING 10716 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +40 +A8 +50 +00 +00 +00 +ENDCHAR +STARTCHAR uni29DD +ENCODING 10717 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +50 +A8 +50 +00 +00 +00 +ENDCHAR +STARTCHAR uni29DE +ENCODING 10718 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +70 +A8 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni29DF +ENCODING 10719 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +48 +B4 +48 +00 +00 +00 +ENDCHAR +STARTCHAR uni29E0 +ENCODING 10720 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F0 +F8 +C8 +C8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni29E1 +ENCODING 10721 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +18 +28 +48 +F8 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni29E2 +ENCODING 10722 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +A8 +A8 +A8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni29E3 +ENCODING 10723 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +F8 +20 +F8 +40 +00 +00 +ENDCHAR +STARTCHAR uni29E4 +ENCODING 10724 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +68 +B0 +00 +10 +F8 +20 +F8 +40 +00 +00 +ENDCHAR +STARTCHAR uni29E5 +ENCODING 10725 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +10 +F8 +20 +F8 +20 +F8 +40 +40 +00 +ENDCHAR +STARTCHAR uni29E6 +ENCODING 10726 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +F8 +88 +F8 +88 +00 +00 +ENDCHAR +STARTCHAR uni29E7 +ENCODING 10727 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +70 +20 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni29E8 +ENCODING 10728 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +F8 +C8 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni29E9 +ENCODING 10729 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +F8 +98 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni29EA +ENCODING 10730 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +70 +F8 +70 +20 +20 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni29EB +ENCODING 10731 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +70 +70 +F8 +70 +70 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni29EC +ENCODING 10732 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +88 +70 +20 +A8 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni29ED +ENCODING 10733 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +F8 +F8 +70 +20 +A8 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni29EE +ENCODING 10734 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +20 +70 +50 +70 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni29EF +ENCODING 10735 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +20 +70 +70 +70 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni29F0 +ENCODING 10736 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +20 +20 +50 +88 +50 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni29F1 +ENCODING 10737 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +20 +20 +70 +F8 +70 +20 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni29F2 +ENCODING 10738 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +20 +70 +88 +88 +70 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni29F3 +ENCODING 10739 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +20 +70 +F8 +F8 +70 +20 +70 +00 +00 +ENDCHAR +STARTCHAR uni29F4 +ENCODING 10740 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A0 +10 +F8 +10 +A0 +00 +00 +ENDCHAR +STARTCHAR uni29F5 +ENCODING 10741 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +40 +20 +20 +10 +10 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni29F6 +ENCODING 10742 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +00 +08 +08 +10 +10 +20 +20 +40 +40 +00 +ENDCHAR +STARTCHAR uni29F7 +ENCODING 10743 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +40 +20 +78 +10 +10 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni29F8 +ENCODING 10744 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +08 +10 +10 +20 +20 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni29F9 +ENCODING 10745 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +40 +20 +20 +10 +10 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni29FA +ENCODING 10746 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +50 +50 +F8 +50 +50 +00 +00 +ENDCHAR +STARTCHAR uni29FB +ENCODING 10747 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +54 +54 +FC +54 +54 +00 +00 +ENDCHAR +STARTCHAR uni29FC +ENCODING 10748 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +10 +20 +20 +40 +20 +20 +10 +10 +00 +ENDCHAR +STARTCHAR uni29FD +ENCODING 10749 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +40 +20 +20 +10 +20 +20 +40 +40 +00 +ENDCHAR +STARTCHAR uni29FE +ENCODING 10750 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +20 +F8 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni29FF +ENCODING 10751 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +F8 +88 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2A00 +ENCODING 10752 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +88 +A8 +88 +70 +00 +00 +00 +ENDCHAR +STARTCHAR uni2A01 +ENCODING 10753 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +A8 +F8 +A8 +70 +00 +00 +00 +ENDCHAR +STARTCHAR uni2A02 +ENCODING 10754 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +D8 +A8 +D8 +70 +00 +00 +00 +ENDCHAR +STARTCHAR uni2A03 +ENCODING 10755 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +88 +88 +A8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2A04 +ENCODING 10756 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +A8 +F8 +A8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2A05 +ENCODING 10757 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +88 +88 +88 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni2A06 +ENCODING 10758 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +88 +88 +88 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2A07 +ENCODING 10759 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +30 +78 +78 +CC +CC +00 +00 +ENDCHAR +STARTCHAR uni2A08 +ENCODING 10760 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +CC +CC +78 +78 +30 +30 +00 +00 +ENDCHAR +STARTCHAR uni2A09 +ENCODING 10761 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +88 +50 +20 +50 +88 +00 +00 +00 +ENDCHAR +STARTCHAR uni2A0A +ENCODING 10762 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +80 +60 +50 +60 +80 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2A0B +ENCODING 10763 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +28 +20 +20 +F8 +60 +20 +60 +F8 +20 +A0 +40 +ENDCHAR +STARTCHAR uni2A0C +ENCODING 10764 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +38 +7C +78 +78 +78 +78 +78 +78 +F8 +70 +00 +ENDCHAR +STARTCHAR uni2A0D +ENCODING 10765 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +28 +20 +20 +20 +70 +20 +20 +20 +20 +A0 +40 +ENDCHAR +STARTCHAR uni2A0E +ENCODING 10766 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +28 +20 +20 +20 +70 +20 +70 +20 +20 +A0 +40 +ENDCHAR +STARTCHAR uni2A0F +ENCODING 10767 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +28 +20 +20 +28 +30 +60 +A0 +20 +20 +A0 +40 +ENDCHAR +STARTCHAR uni2A10 +ENCODING 10768 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +28 +20 +20 +70 +A0 +A0 +A0 +60 +20 +A0 +40 +ENDCHAR +STARTCHAR uni2A11 +ENCODING 10769 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +28 +20 +20 +20 +3C +AC +74 +20 +20 +A0 +40 +ENDCHAR +STARTCHAR uni2A12 +ENCODING 10770 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +28 +20 +20 +38 +08 +28 +08 +38 +20 +A0 +40 +ENDCHAR +STARTCHAR uni2A13 +ENCODING 10771 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +28 +20 +20 +30 +08 +28 +08 +30 +20 +A0 +40 +ENDCHAR +STARTCHAR uni2A14 +ENCODING 10772 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +28 +20 +20 +38 +04 +14 +04 +38 +20 +A0 +40 +ENDCHAR +STARTCHAR uni2A15 +ENCODING 10773 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +28 +20 +20 +70 +88 +A8 +88 +70 +20 +A0 +40 +ENDCHAR +STARTCHAR uni2A16 +ENCODING 10774 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +28 +20 +20 +F8 +A8 +A8 +F8 +20 +20 +A0 +40 +ENDCHAR +STARTCHAR uni2A17 +ENCODING 10775 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +08 +14 +10 +10 +50 +FC +54 +10 +10 +10 +50 +20 +ENDCHAR +STARTCHAR uni2A18 +ENCODING 10776 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +28 +20 +A8 +70 +20 +70 +A8 +20 +20 +A0 +40 +ENDCHAR +STARTCHAR uni2A19 +ENCODING 10777 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +28 +20 +20 +70 +A8 +A8 +A8 +20 +20 +A0 +40 +ENDCHAR +STARTCHAR uni2A1A +ENCODING 10778 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +28 +20 +20 +A8 +A8 +A8 +70 +20 +20 +A0 +40 +ENDCHAR +STARTCHAR uni2A1B +ENCODING 10779 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +78 +00 +10 +28 +20 +20 +20 +20 +20 +20 +A0 +40 +ENDCHAR +STARTCHAR uni2A1C +ENCODING 10780 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +10 +28 +20 +20 +20 +20 +20 +20 +A0 +40 +00 +F8 +ENDCHAR +STARTCHAR uni2A1D +ENCODING 10781 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +84 +CC +B4 +B4 +B4 +CC +84 +00 +00 +ENDCHAR +STARTCHAR uni2A1E +ENCODING 10782 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +30 +50 +90 +50 +30 +10 +00 +00 +ENDCHAR +STARTCHAR uni2A1F +ENCODING 10783 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +50 +20 +00 +20 +50 +20 +40 +00 +ENDCHAR +STARTCHAR uni2A20 +ENCODING 10784 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +90 +48 +24 +48 +90 +00 +00 +00 +ENDCHAR +STARTCHAR uni2A21 +ENCODING 10785 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +60 +50 +40 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni2A22 +ENCODING 10786 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +50 +20 +00 +20 +20 +F8 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2A23 +ENCODING 10787 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +00 +20 +20 +F8 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2A24 +ENCODING 10788 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +68 +B0 +00 +20 +20 +F8 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2A25 +ENCODING 10789 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +F8 +20 +20 +00 +20 +00 +00 +ENDCHAR +STARTCHAR uni2A26 +ENCODING 10790 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +F8 +20 +20 +00 +68 +B0 +00 +ENDCHAR +STARTCHAR uni2A27 +ENCODING 10791 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +F8 +20 +2C +04 +08 +1C +00 +ENDCHAR +STARTCHAR uni2A28 +ENCODING 10792 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +20 +F8 +20 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni2A29 +ENCODING 10793 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +30 +30 +10 +20 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2A2A +ENCODING 10794 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +F8 +00 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni2A2B +ENCODING 10795 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +40 +00 +F8 +00 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni2A2C +ENCODING 10796 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +00 +F8 +00 +40 +00 +00 +00 +ENDCHAR +STARTCHAR uni2A2D +ENCODING 10797 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +38 +40 +90 +B8 +90 +40 +38 +00 +00 +ENDCHAR +STARTCHAR uni2A2E +ENCODING 10798 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +60 +10 +48 +E8 +48 +10 +60 +00 +00 +ENDCHAR +STARTCHAR uni2A2F +ENCODING 10799 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +50 +20 +50 +88 +00 +00 +ENDCHAR +STARTCHAR uni2A30 +ENCODING 10800 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +88 +50 +20 +50 +88 +00 +00 +ENDCHAR +STARTCHAR uni2A31 +ENCODING 10801 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +50 +20 +50 +88 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2A32 +ENCODING 10802 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +50 +20 +50 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2A33 +ENCODING 10803 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +CC +78 +30 +78 +CC +00 +00 +ENDCHAR +STARTCHAR uni2A34 +ENCODING 10804 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +80 +A8 +90 +A8 +80 +70 +00 +00 +ENDCHAR +STARTCHAR uni2A35 +ENCODING 10805 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +08 +A8 +48 +A8 +08 +70 +00 +00 +ENDCHAR +STARTCHAR uni2A36 +ENCODING 10806 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +00 +70 +88 +D8 +A8 +D8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2A37 +ENCODING 10807 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +D8 +A8 +D8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2A38 +ENCODING 10808 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +88 +A8 +88 +F8 +88 +A8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2A39 +ENCODING 10809 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +48 +48 +78 +B4 +84 +FC +00 +00 +ENDCHAR +STARTCHAR uni2A3A +ENCODING 10810 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +48 +48 +48 +B4 +84 +FC +00 +00 +ENDCHAR +STARTCHAR uni2A3B +ENCODING 10811 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +48 +48 +78 +B4 +84 +FC +00 +00 +ENDCHAR +STARTCHAR uni2A3C +ENCODING 10812 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +08 +08 +F8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2A3D +ENCODING 10813 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +80 +80 +F8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2A3E +ENCODING 10814 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +20 +00 +20 +50 +30 +10 +20 +00 +ENDCHAR +STARTCHAR uni2A3F +ENCODING 10815 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +DC +88 +88 +88 +88 +88 +FC +00 +00 +ENDCHAR +STARTCHAR uni2A40 +ENCODING 10816 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +A8 +88 +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni2A41 +ENCODING 10817 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +88 +F8 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2A42 +ENCODING 10818 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +00 +88 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2A43 +ENCODING 10819 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +88 +88 +88 +88 +88 +88 +00 +F8 +00 +ENDCHAR +STARTCHAR uni2A44 +ENCODING 10820 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +88 +88 +A8 +D8 +00 +00 +ENDCHAR +STARTCHAR uni2A45 +ENCODING 10821 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +D8 +A8 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2A46 +ENCODING 10822 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +90 +90 +60 +00 +60 +90 +90 +00 +00 +ENDCHAR +STARTCHAR uni2A47 +ENCODING 10823 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +60 +90 +90 +00 +90 +90 +60 +00 +00 +ENDCHAR +STARTCHAR uni2A48 +ENCODING 10824 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +90 +90 +60 +00 +F0 +00 +60 +90 +90 +00 +ENDCHAR +STARTCHAR uni2A49 +ENCODING 10825 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +60 +90 +90 +00 +F0 +00 +90 +90 +60 +00 +ENDCHAR +STARTCHAR uni2A4A +ENCODING 10826 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +A8 +A8 +50 +00 +00 +00 +ENDCHAR +STARTCHAR uni2A4B +ENCODING 10827 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +50 +A8 +A8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2A4C +ENCODING 10828 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +FC +48 +48 +48 +48 +48 +30 +00 +00 +ENDCHAR +STARTCHAR uni2A4D +ENCODING 10829 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +48 +48 +48 +48 +48 +FC +00 +00 +ENDCHAR +STARTCHAR uni2A4E +ENCODING 10830 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +F8 +D8 +D8 +D8 +D8 +D8 +00 +00 +ENDCHAR +STARTCHAR uni2A4F +ENCODING 10831 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +D8 +D8 +D8 +D8 +D8 +F8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2A50 +ENCODING 10832 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +88 +D8 +A8 +D8 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2A51 +ENCODING 10833 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +00 +20 +20 +50 +50 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni2A52 +ENCODING 10834 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +88 +88 +50 +50 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2A53 +ENCODING 10835 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +50 +50 +20 +A8 +88 +50 +50 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2A54 +ENCODING 10836 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +50 +50 +88 +A8 +20 +50 +50 +00 +00 +ENDCHAR +STARTCHAR uni2A55 +ENCODING 10837 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +30 +78 +78 +78 +CC +CC +00 +00 +ENDCHAR +STARTCHAR uni2A56 +ENCODING 10838 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +CC +CC +78 +78 +78 +30 +30 +00 +00 +ENDCHAR +STARTCHAR uni2A57 +ENCODING 10839 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +84 +88 +90 +A0 +C0 +80 +00 +00 +ENDCHAR +STARTCHAR uni2A58 +ENCODING 10840 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +04 +0C +14 +24 +44 +84 +00 +00 +ENDCHAR +STARTCHAR uni2A59 +ENCODING 10841 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +A8 +70 +50 +70 +A8 +88 +00 +00 +ENDCHAR +STARTCHAR uni2A5A +ENCODING 10842 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +20 +70 +70 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni2A5B +ENCODING 10843 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +A8 +A8 +70 +70 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2A5C +ENCODING 10844 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +50 +F8 +50 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni2A5D +ENCODING 10845 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +50 +F8 +50 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2A5E +ENCODING 10846 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +00 +F8 +00 +20 +20 +50 +50 +88 +88 +00 +ENDCHAR +STARTCHAR uni2A5F +ENCODING 10847 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +50 +50 +88 +88 +00 +F8 +00 +ENDCHAR +STARTCHAR uni2A60 +ENCODING 10848 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +20 +20 +50 +50 +88 +88 +00 +F8 +00 +F8 +00 +ENDCHAR +STARTCHAR uni2A61 +ENCODING 10849 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +50 +20 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2A62 +ENCODING 10850 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F8 +00 +F8 +00 +88 +88 +50 +50 +20 +20 +00 +ENDCHAR +STARTCHAR uni2A63 +ENCODING 10851 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +88 +88 +50 +50 +20 +20 +00 +F8 +00 +F8 +00 +ENDCHAR +STARTCHAR uni2A64 +ENCODING 10852 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +18 +28 +48 +F8 +48 +28 +18 +08 +00 +ENDCHAR +STARTCHAR uni2A65 +ENCODING 10853 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +80 +C0 +A0 +90 +F8 +90 +A0 +C0 +80 +00 +ENDCHAR +STARTCHAR uni2A66 +ENCODING 10854 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +00 +F8 +00 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni2A67 +ENCODING 10855 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +00 +F8 +00 +F8 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2A68 +ENCODING 10856 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +F8 +50 +F8 +50 +F8 +50 +00 +00 +ENDCHAR +STARTCHAR uni2A69 +ENCODING 10857 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +FC +A8 +FC +A8 +FC +A8 +00 +00 +ENDCHAR +STARTCHAR uni2A6A +ENCODING 10858 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +00 +68 +B0 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2A6B +ENCODING 10859 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +00 +68 +B0 +00 +40 +00 +00 +ENDCHAR +STARTCHAR uni2A6C +ENCODING 10860 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +68 +B0 +00 +F8 +00 +68 +B0 +00 +00 +ENDCHAR +STARTCHAR uni2A6D +ENCODING 10861 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +00 +68 +B0 +00 +F8 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2A6E +ENCODING 10862 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +A8 +70 +F8 +70 +A8 +00 +F8 +00 +F8 +00 +ENDCHAR +STARTCHAR uni2A6F +ENCODING 10863 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +50 +00 +68 +B0 +00 +68 +B0 +00 +00 +ENDCHAR +STARTCHAR uni2A70 +ENCODING 10864 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +68 +B0 +00 +68 +B0 +00 +F8 +00 +F8 +00 +ENDCHAR +STARTCHAR uni2A71 +ENCODING 10865 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F8 +00 +F8 +00 +20 +20 +F8 +20 +20 +00 +ENDCHAR +STARTCHAR uni2A72 +ENCODING 10866 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +20 +F8 +20 +20 +00 +F8 +00 +F8 +00 +ENDCHAR +STARTCHAR uni2A73 +ENCODING 10867 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +00 +F8 +00 +68 +B0 +00 +00 +ENDCHAR +STARTCHAR uni2A74 +ENCODING 10868 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +AC +00 +AC +00 +00 +00 +ENDCHAR +STARTCHAR uni2A75 +ENCODING 10869 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +D8 +00 +D8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2A76 +ENCODING 10870 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +A8 +00 +A8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2A77 +ENCODING 10871 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +00 +F8 +00 +F8 +00 +50 +00 +00 +ENDCHAR +STARTCHAR uni2A78 +ENCODING 10872 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +00 +F8 +00 +F8 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2A79 +ENCODING 10873 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +20 +48 +94 +48 +20 +10 +00 +00 +ENDCHAR +STARTCHAR uni2A7A +ENCODING 10874 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +10 +48 +A4 +48 +10 +20 +00 +00 +ENDCHAR +STARTCHAR uni2A7B +ENCODING 10875 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +20 +40 +00 +40 +0C +30 +C0 +30 +0C +00 +00 +ENDCHAR +STARTCHAR uni2A7C +ENCODING 10876 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +18 +04 +08 +00 +08 +C0 +30 +0C +30 +C0 +00 +00 +ENDCHAR +STARTCHAR uni2A7D +ENCODING 10877 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +0C +30 +C0 +30 +CC +30 +0C +00 +00 +ENDCHAR +STARTCHAR uni2A7E +ENCODING 10878 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +C0 +30 +0C +30 +CC +30 +C0 +00 +00 +ENDCHAR +STARTCHAR uni2A7F +ENCODING 10879 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +0C +30 +C4 +30 +CC +30 +0C +00 +00 +ENDCHAR +STARTCHAR uni2A80 +ENCODING 10880 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +C0 +30 +8C +30 +CC +30 +C0 +00 +00 +ENDCHAR +STARTCHAR uni2A81 +ENCODING 10881 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +0C +30 +C0 +30 +CC +30 +0C +00 +00 +ENDCHAR +STARTCHAR uni2A82 +ENCODING 10882 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +C0 +30 +0C +30 +CC +30 +C0 +00 +00 +ENDCHAR +STARTCHAR uni2A83 +ENCODING 10883 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +04 +00 +0C +30 +C0 +30 +CC +30 +0C +00 +00 +ENDCHAR +STARTCHAR uni2A84 +ENCODING 10884 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +80 +00 +C0 +30 +0C +30 +CC +30 +C0 +00 +00 +ENDCHAR +STARTCHAR uni2A85 +ENCODING 10885 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +38 +C0 +38 +00 +68 +B0 +00 +68 +B0 +00 +ENDCHAR +STARTCHAR uni2A86 +ENCODING 10886 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +E0 +18 +E0 +00 +68 +B0 +00 +68 +B0 +00 +00 +ENDCHAR +STARTCHAR uni2A87 +ENCODING 10887 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +0C +30 +C0 +30 +0C +00 +10 +FC +40 +00 +ENDCHAR +STARTCHAR uni2A88 +ENCODING 10888 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +C0 +30 +0C +30 +C0 +00 +10 +FC +40 +00 +ENDCHAR +STARTCHAR uni2A89 +ENCODING 10889 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +38 +C0 +38 +00 +10 +78 +B0 +20 +68 +F0 +40 +ENDCHAR +STARTCHAR uni2A8A +ENCODING 10890 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +E0 +18 +E0 +00 +10 +78 +B0 +20 +68 +F0 +40 +ENDCHAR +STARTCHAR uni2A8B +ENCODING 10891 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +38 +C0 +38 +00 +F8 +00 +F8 +00 +E0 +18 +E0 +ENDCHAR +STARTCHAR uni2A8C +ENCODING 10892 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +E0 +18 +E0 +00 +F8 +00 +F8 +00 +38 +C0 +38 +ENDCHAR +STARTCHAR uni2A8D +ENCODING 10893 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +38 +C0 +38 +00 +68 +B0 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2A8E +ENCODING 10894 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +E0 +18 +E0 +00 +68 +B0 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2A8F +ENCODING 10895 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +38 +C0 +38 +00 +68 +B0 +00 +E0 +18 +E0 +00 +ENDCHAR +STARTCHAR uni2A90 +ENCODING 10896 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +E0 +18 +E0 +00 +68 +B0 +00 +38 +C0 +38 +00 +ENDCHAR +STARTCHAR uni2A91 +ENCODING 10897 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +38 +C0 +38 +E0 +18 +E0 +00 +F8 +00 +F8 +00 +ENDCHAR +STARTCHAR uni2A92 +ENCODING 10898 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +E0 +18 +E0 +38 +C0 +38 +00 +F8 +00 +F8 +00 +ENDCHAR +STARTCHAR uni2A93 +ENCODING 10899 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +1C +E0 +1C +E0 +1C +E0 +1C +E0 +1C +E0 +00 +ENDCHAR +STARTCHAR uni2A94 +ENCODING 10900 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +E0 +1C +E0 +1C +E0 +1C +E0 +1C +E0 +1C +00 +ENDCHAR +STARTCHAR uni2A95 +ENCODING 10901 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +0C +30 +CC +30 +C0 +30 +0C +00 +00 +ENDCHAR +STARTCHAR uni2A96 +ENCODING 10902 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +C0 +30 +CC +30 +0C +30 +C0 +00 +00 +ENDCHAR +STARTCHAR uni2A97 +ENCODING 10903 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +0C +30 +CC +30 +C4 +30 +0C +00 +00 +ENDCHAR +STARTCHAR uni2A98 +ENCODING 10904 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +C0 +30 +CC +30 +8C +30 +C0 +00 +00 +ENDCHAR +STARTCHAR uni2A99 +ENCODING 10905 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +00 +F8 +00 +E0 +18 +E0 +00 +00 +ENDCHAR +STARTCHAR uni2A9A +ENCODING 10906 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +00 +F8 +00 +E0 +18 +E0 +00 +00 +ENDCHAR +STARTCHAR uni2A9B +ENCODING 10907 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +0C +30 +CC +30 +CC +30 +C0 +30 +0C +00 +ENDCHAR +STARTCHAR uni2A9C +ENCODING 10908 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +C0 +30 +CC +30 +CC +30 +0C +30 +C0 +00 +ENDCHAR +STARTCHAR uni2A9D +ENCODING 10909 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +68 +B0 +00 +38 +C0 +38 +00 +00 +ENDCHAR +STARTCHAR uni2A9E +ENCODING 10910 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +68 +B0 +00 +E0 +18 +E0 +00 +00 +ENDCHAR +STARTCHAR uni2A9F +ENCODING 10911 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +68 +B0 +00 +38 +C0 +38 +00 +F8 +00 +F8 +00 +ENDCHAR +STARTCHAR uni2AA0 +ENCODING 10912 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +68 +B0 +00 +E0 +18 +E0 +00 +F8 +00 +F8 +00 +ENDCHAR +STARTCHAR uni2AA1 +ENCODING 10913 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +20 +48 +90 +48 +20 +10 +00 +00 +ENDCHAR +STARTCHAR uni2AA2 +ENCODING 10914 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +20 +90 +48 +90 +20 +40 +00 +00 +ENDCHAR +STARTCHAR uni2AA3 +ENCODING 10915 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +24 +48 +90 +48 +24 +00 +FC +00 +00 +ENDCHAR +STARTCHAR uni2AA4 +ENCODING 10916 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +CC +30 +48 +30 +CC +00 +00 +00 +ENDCHAR +STARTCHAR uni2AA5 +ENCODING 10917 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +84 +48 +30 +48 +84 +00 +00 +00 +ENDCHAR +STARTCHAR uni2AA6 +ENCODING 10918 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +08 +34 +C4 +34 +08 +00 +00 +00 +ENDCHAR +STARTCHAR uni2AA7 +ENCODING 10919 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +40 +B0 +8C +B0 +40 +00 +00 +00 +ENDCHAR +STARTCHAR uni2AA8 +ENCODING 10920 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +34 +C4 +34 +C8 +30 +0C +00 +00 +ENDCHAR +STARTCHAR uni2AA9 +ENCODING 10921 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +B0 +8C +B0 +4C +30 +C0 +00 +00 +ENDCHAR +STARTCHAR uni2AAA +ENCODING 10922 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +0C +30 +FC +30 +0C +00 +00 +00 +ENDCHAR +STARTCHAR uni2AAB +ENCODING 10923 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +C0 +30 +FC +30 +C0 +00 +00 +00 +ENDCHAR +STARTCHAR uni2AAC +ENCODING 10924 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +0C +30 +FC +30 +0C +00 +FC +00 +00 +ENDCHAR +STARTCHAR uni2AAD +ENCODING 10925 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +C0 +30 +FC +30 +C0 +00 +FC +00 +00 +ENDCHAR +STARTCHAR uni2AAE +ENCODING 10926 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +D8 +00 +F8 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2AAF +ENCODING 10927 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +30 +C0 +30 +08 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2AB0 +ENCODING 10928 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +60 +18 +60 +80 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2AB1 +ENCODING 10929 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +30 +C0 +30 +08 +10 +F8 +40 +00 +ENDCHAR +STARTCHAR uni2AB2 +ENCODING 10930 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +60 +18 +60 +80 +10 +F8 +40 +00 +ENDCHAR +STARTCHAR uni2AB3 +ENCODING 10931 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +08 +30 +C0 +30 +08 +00 +F8 +00 +F8 +00 +ENDCHAR +STARTCHAR uni2AB4 +ENCODING 10932 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +80 +60 +18 +60 +80 +00 +F8 +00 +F8 +00 +ENDCHAR +STARTCHAR uni2AB5 +ENCODING 10933 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +08 +30 +C0 +30 +08 +10 +F8 +20 +F8 +40 +00 +ENDCHAR +STARTCHAR uni2AB6 +ENCODING 10934 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +80 +60 +18 +60 +80 +10 +F8 +20 +F8 +40 +00 +ENDCHAR +STARTCHAR uni2AB7 +ENCODING 10935 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +08 +30 +C0 +30 +08 +00 +68 +B0 +00 +68 +B0 +00 +ENDCHAR +STARTCHAR uni2AB8 +ENCODING 10936 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +80 +60 +18 +60 +80 +00 +B0 +68 +00 +B0 +68 +00 +ENDCHAR +STARTCHAR uni2AB9 +ENCODING 10937 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +08 +30 +C0 +30 +08 +10 +78 +B0 +20 +68 +F0 +40 +ENDCHAR +STARTCHAR uni2ABA +ENCODING 10938 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +80 +60 +18 +60 +80 +10 +78 +B0 +20 +68 +F0 +40 +ENDCHAR +STARTCHAR uni2ABB +ENCODING 10939 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +28 +28 +50 +A0 +50 +28 +28 +00 +00 +ENDCHAR +STARTCHAR uni2ABC +ENCODING 10940 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A0 +A0 +50 +28 +50 +A0 +A0 +00 +00 +ENDCHAR +STARTCHAR uni2ABD +ENCODING 10941 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +78 +80 +A0 +80 +78 +00 +00 +00 +ENDCHAR +STARTCHAR uni2ABE +ENCODING 10942 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F0 +08 +28 +08 +F0 +00 +00 +00 +ENDCHAR +STARTCHAR uni2ABF +ENCODING 10943 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +78 +80 +80 +78 +00 +20 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni2AC0 +ENCODING 10944 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F0 +08 +08 +F0 +00 +20 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni2AC1 +ENCODING 10945 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +78 +80 +80 +78 +00 +50 +20 +50 +00 +00 +ENDCHAR +STARTCHAR uni2AC2 +ENCODING 10946 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F0 +08 +08 +F0 +00 +50 +20 +50 +00 +00 +ENDCHAR +STARTCHAR uni2AC3 +ENCODING 10947 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +00 +78 +80 +80 +78 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2AC4 +ENCODING 10948 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +20 +00 +F0 +08 +08 +F0 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2AC5 +ENCODING 10949 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +78 +80 +80 +78 +00 +F8 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2AC6 +ENCODING 10950 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F0 +08 +08 +F0 +00 +F8 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2AC7 +ENCODING 10951 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +80 +80 +78 +00 +68 +B0 +00 +00 +ENDCHAR +STARTCHAR uni2AC8 +ENCODING 10952 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +08 +08 +F0 +00 +68 +B0 +00 +00 +ENDCHAR +STARTCHAR uni2AC9 +ENCODING 10953 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +80 +80 +78 +00 +68 +B0 +00 +68 +B0 +00 +ENDCHAR +STARTCHAR uni2ACA +ENCODING 10954 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F0 +08 +08 +F0 +00 +68 +B0 +00 +68 +B0 +00 +ENDCHAR +STARTCHAR uni2ACB +ENCODING 10955 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +78 +80 +80 +78 +00 +10 +F8 +20 +F8 +40 +00 +ENDCHAR +STARTCHAR uni2ACC +ENCODING 10956 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +F0 +08 +08 +F0 +00 +10 +F8 +20 +F8 +40 +00 +ENDCHAR +STARTCHAR uni2ACD +ENCODING 10957 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +FC +80 +80 +F0 +00 +00 +00 +ENDCHAR +STARTCHAR uni2ACE +ENCODING 10958 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +FC +04 +04 +3C +00 +00 +00 +ENDCHAR +STARTCHAR uni2ACF +ENCODING 10959 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +38 +48 +88 +88 +88 +48 +38 +00 +00 +ENDCHAR +STARTCHAR uni2AD0 +ENCODING 10960 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +E0 +90 +88 +88 +88 +90 +E0 +00 +00 +ENDCHAR +STARTCHAR uni2AD1 +ENCODING 10961 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +38 +48 +88 +88 +88 +48 +38 +00 +F8 +00 +ENDCHAR +STARTCHAR uni2AD2 +ENCODING 10962 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +E0 +90 +88 +88 +88 +90 +E0 +00 +F8 +00 +ENDCHAR +STARTCHAR uni2AD3 +ENCODING 10963 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +78 +80 +80 +78 +00 +F0 +08 +08 +F0 +00 +ENDCHAR +STARTCHAR uni2AD4 +ENCODING 10964 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F0 +08 +08 +F0 +00 +78 +80 +80 +78 +00 +ENDCHAR +STARTCHAR uni2AD5 +ENCODING 10965 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +78 +80 +80 +78 +00 +78 +80 +80 +78 +00 +ENDCHAR +STARTCHAR uni2AD6 +ENCODING 10966 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +F0 +08 +08 +F0 +00 +F0 +08 +08 +F0 +00 +ENDCHAR +STARTCHAR uni2AD7 +ENCODING 10967 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +CC +30 +30 +CC +00 +00 +00 +ENDCHAR +STARTCHAR uni2AD8 +ENCODING 10968 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +CC +30 +78 +30 +CC +00 +00 +00 +ENDCHAR +STARTCHAR uni2AD9 +ENCODING 10969 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +A8 +A8 +A8 +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni2ADA +ENCODING 10970 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +20 +70 +A8 +A8 +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni2ADB +ENCODING 10971 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +70 +A8 +A8 +A8 +A8 +20 +00 +00 +ENDCHAR +STARTCHAR uni2ADC +ENCODING 10972 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +28 +30 +A8 +E8 +F0 +00 +00 +ENDCHAR +STARTCHAR uni2ADD +ENCODING 10973 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +20 +20 +A8 +A8 +70 +00 +00 +ENDCHAR +STARTCHAR uni2ADE +ENCODING 10974 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +10 +10 +F0 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni2ADF +ENCODING 10975 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +20 +20 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni2AE0 +ENCODING 10976 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +20 +20 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2AE1 +ENCODING 10977 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +24 +28 +24 +28 +20 +FC +00 +00 +ENDCHAR +STARTCHAR uni2AE2 +ENCODING 10978 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +F8 +80 +F8 +80 +F8 +80 +00 +00 +ENDCHAR +STARTCHAR uni2AE3 +ENCODING 10979 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +28 +28 +28 +E8 +28 +28 +28 +00 +00 +ENDCHAR +STARTCHAR uni2AE4 +ENCODING 10980 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +08 +F8 +08 +F8 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni2AE5 +ENCODING 10981 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +28 +28 +E8 +28 +E8 +28 +28 +00 +00 +ENDCHAR +STARTCHAR uni2AE6 +ENCODING 10982 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A0 +A0 +A0 +F8 +A0 +A0 +A0 +00 +00 +ENDCHAR +STARTCHAR uni2AE7 +ENCODING 10983 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +00 +F8 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2AE8 +ENCODING 10984 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +20 +20 +F8 +00 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2AE9 +ENCODING 10985 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +F8 +00 +F8 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2AEA +ENCODING 10986 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +50 +50 +50 +50 +50 +50 +00 +00 +ENDCHAR +STARTCHAR uni2AEB +ENCODING 10987 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +50 +50 +50 +50 +50 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2AEC +ENCODING 10988 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +08 +F8 +08 +00 +00 +00 +ENDCHAR +STARTCHAR uni2AED +ENCODING 10989 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +7C +40 +7C +40 +00 +00 +00 +ENDCHAR +STARTCHAR uni2AEE +ENCODING 10990 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +60 +20 +30 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2AEF +ENCODING 10991 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +50 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2AF0 +ENCODING 10992 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +20 +20 +20 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni2AF1 +ENCODING 10993 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +20 +20 +20 +20 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni2AF2 +ENCODING 10994 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +50 +50 +F8 +50 +50 +50 +00 +00 +ENDCHAR +STARTCHAR uni2AF3 +ENCODING 10995 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +50 +50 +78 +F0 +50 +50 +50 +00 +00 +ENDCHAR +STARTCHAR uni2AF4 +ENCODING 10996 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni2AF5 +ENCODING 10997 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +A8 +A8 +A8 +FC +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni2AF6 +ENCODING 10998 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +00 +20 +00 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni2AF7 +ENCODING 10999 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +54 +A8 +54 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2AF8 +ENCODING 11000 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A8 +54 +A8 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2AF9 +ENCODING 11001 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +0C +30 +C0 +30 +CC +30 +CC +30 +0C +00 +ENDCHAR +STARTCHAR uni2AFA +ENCODING 11002 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +C0 +30 +0C +30 +CC +30 +CC +30 +C0 +00 +ENDCHAR +STARTCHAR uni2AFB +ENCODING 11003 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +54 +54 +54 +54 +A8 +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni2AFC +ENCODING 11004 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uni2AFD +ENCODING 11005 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +48 +48 +48 +48 +90 +90 +90 +90 +00 +00 +ENDCHAR +STARTCHAR uni2AFE +ENCODING 11006 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +70 +50 +50 +50 +50 +70 +00 +00 +ENDCHAR +STARTCHAR uni2AFF +ENCODING 11007 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +70 +50 +50 +50 +50 +50 +50 +50 +70 +00 +00 +ENDCHAR +STARTCHAR uni2B00 +ENCODING 11008 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +1C +14 +2C +50 +A0 +40 +00 +00 +ENDCHAR +STARTCHAR uni2B01 +ENCODING 11009 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +E0 +A0 +D0 +28 +14 +08 +00 +00 +ENDCHAR +STARTCHAR uni2B02 +ENCODING 11010 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +40 +A0 +50 +2C +14 +1C +00 +00 +ENDCHAR +STARTCHAR uni2B03 +ENCODING 11011 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +08 +14 +28 +D0 +A0 +E0 +00 +00 +ENDCHAR +STARTCHAR uni2B04 +ENCODING 11012 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +48 +B4 +84 +B4 +48 +00 +00 +ENDCHAR +STARTCHAR uni2B05 +ENCODING 11013 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +60 +F8 +F8 +60 +20 +00 +00 +ENDCHAR +STARTCHAR uni2B06 +ENCODING 11014 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +78 +FC +30 +30 +30 +30 +00 +00 +ENDCHAR +STARTCHAR uni2B07 +ENCODING 11015 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +30 +30 +30 +FC +78 +30 +00 +00 +ENDCHAR +STARTCHAR uni2B08 +ENCODING 11016 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +1C +1C +3C +70 +E0 +40 +00 +00 +ENDCHAR +STARTCHAR uni2B09 +ENCODING 11017 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +E0 +E0 +F0 +38 +1C +08 +00 +00 +ENDCHAR +STARTCHAR uni2B0A +ENCODING 11018 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +40 +E0 +70 +3C +1C +1C +00 +00 +ENDCHAR +STARTCHAR uni2B0B +ENCODING 11019 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +08 +1C +38 +F0 +E0 +E0 +00 +00 +ENDCHAR +STARTCHAR uni2B0C +ENCODING 11020 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +48 +FC +48 +00 +00 +00 +ENDCHAR +STARTCHAR uni2B0D +ENCODING 11021 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +30 +78 +FC +30 +30 +30 +FC +78 +30 +00 +ENDCHAR +STARTCHAR uni2B0E +ENCODING 11022 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +E0 +20 +20 +A8 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni2B0F +ENCODING 11023 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +70 +A8 +20 +20 +E0 +00 +00 +ENDCHAR +STARTCHAR uni2B10 +ENCODING 11024 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +38 +20 +20 +A8 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni2B11 +ENCODING 11025 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +70 +A8 +20 +20 +38 +00 +00 +ENDCHAR +STARTCHAR uni2B12 +ENCODING 11026 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +F8 +F8 +88 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2B13 +ENCODING 11027 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +F8 +88 +88 +F8 +F8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2B14 +ENCODING 11028 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +B8 +98 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2B15 +ENCODING 11029 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +88 +C8 +E8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2B16 +ENCODING 11030 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +30 +68 +EC +68 +30 +00 +00 +ENDCHAR +STARTCHAR uni2B17 +ENCODING 11031 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +30 +58 +9C +58 +30 +00 +00 +ENDCHAR +STARTCHAR uni2B18 +ENCODING 11032 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +70 +F8 +88 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni2B19 +ENCODING 11033 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +50 +88 +F8 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni2B1A +ENCODING 11034 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +A8 +00 +88 +00 +A8 +00 +00 +ENDCHAR +STARTCHAR uni2B1B +ENCODING 11035 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +F8 +F8 +F8 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2B1C +ENCODING 11036 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +88 +88 +88 +F8 +00 +00 +ENDCHAR +STARTCHAR uni2B1D +ENCODING 11037 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +30 +30 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2B1E +ENCODING 11038 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +70 +50 +70 +00 +00 +00 +ENDCHAR +STARTCHAR uni2B1F +ENCODING 11039 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +70 +F8 +F8 +70 +70 +00 +00 +ENDCHAR +STARTCHAR uni2B20 +ENCODING 11040 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +50 +88 +88 +50 +70 +00 +00 +ENDCHAR +STARTCHAR uni2B21 +ENCODING 11041 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +50 +88 +88 +88 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni2B22 +ENCODING 11042 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +70 +F8 +F8 +F8 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni2B23 +ENCODING 11043 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +70 +F8 +70 +00 +00 +00 +ENDCHAR +STARTCHAR uni2B24 +ENCODING 11044 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +78 +FC +FC +FC +FC +78 +00 +00 +ENDCHAR +STARTCHAR uni2B25 +ENCODING 11045 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +70 +F8 +70 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni2B26 +ENCODING 11046 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +50 +88 +50 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni2B27 +ENCODING 11047 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +20 +70 +70 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni2B28 +ENCODING 11048 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +50 +50 +88 +88 +50 +50 +20 +00 +ENDCHAR +STARTCHAR uni2B29 +ENCODING 11049 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +70 +F8 +70 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni2B2A +ENCODING 11050 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +20 +70 +20 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni2B2B +ENCODING 11051 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +50 +50 +88 +50 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni2B2C +ENCODING 11052 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +F8 +F8 +70 +00 +00 +00 +ENDCHAR +STARTCHAR uni2B2D +ENCODING 11053 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +88 +70 +00 +00 +00 +ENDCHAR +STARTCHAR uni2B2E +ENCODING 11054 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +F8 +F8 +F8 +F8 +F8 +70 +00 +00 +ENDCHAR +STARTCHAR uni2B2F +ENCODING 11055 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2B30 +ENCODING 11056 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +58 +FC +58 +00 +00 +00 +ENDCHAR +STARTCHAR uni2B31 +ENCODING 11057 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +F8 +40 +00 +40 +F8 +40 +00 +40 +F8 +40 +00 +ENDCHAR +STARTCHAR uni2B32 +ENCODING 11058 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +58 +FC +58 +00 +00 +00 +ENDCHAR +STARTCHAR uni2B33 +ENCODING 11059 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +54 +E8 +40 +00 +00 +00 +ENDCHAR +STARTCHAR uni2B34 +ENCODING 11060 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +08 +68 +FC +68 +08 +00 +00 +ENDCHAR +STARTCHAR uni2B35 +ENCODING 11061 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +18 +78 +FC +78 +18 +00 +00 +ENDCHAR +STARTCHAR uni2B36 +ENCODING 11062 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +08 +68 +F8 +68 +08 +00 +00 +ENDCHAR +STARTCHAR uni2B37 +ENCODING 11063 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +64 +D8 +64 +00 +00 +00 +ENDCHAR +STARTCHAR uni2B38 +ENCODING 11064 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +40 +A8 +40 +20 +00 +00 +ENDCHAR +STARTCHAR uni2B39 +ENCODING 11065 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +54 +F8 +54 +10 +00 +00 +ENDCHAR +STARTCHAR uni2B3A +ENCODING 11066 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +30 +74 +F8 +74 +30 +00 +00 +ENDCHAR +STARTCHAR uni2B3B +ENCODING 11067 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +64 +F8 +64 +00 +00 +00 +ENDCHAR +STARTCHAR uni2B3C +ENCODING 11068 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +74 +F8 +74 +10 +00 +00 +ENDCHAR +STARTCHAR uni2B3D +ENCODING 11069 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +18 +7C +F8 +7C +18 +00 +00 +ENDCHAR +STARTCHAR uni2B3E +ENCODING 11070 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +58 +FC +58 +00 +00 +00 +ENDCHAR +STARTCHAR uni2B3F +ENCODING 11071 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +48 +F4 +40 +00 +00 +00 +ENDCHAR +STARTCHAR uni2B40 +ENCODING 11072 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +38 +00 +38 +00 +40 +F8 +40 +00 +00 +00 +ENDCHAR +STARTCHAR uni2B41 +ENCODING 11073 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +68 +B0 +00 +40 +F8 +40 +00 +00 +00 +ENDCHAR +STARTCHAR uni2B42 +ENCODING 11074 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +F8 +40 +00 +68 +B0 +00 +68 +B0 +00 +ENDCHAR +STARTCHAR uni2B43 +ENCODING 11075 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +80 +40 +28 +FC +28 +40 +80 +00 +ENDCHAR +STARTCHAR uni2B44 +ENCODING 11076 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +C0 +28 +FC +28 +C0 +00 +00 +ENDCHAR +STARTCHAR uni2B45 +ENCODING 11077 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +10 +3C +40 +FC +40 +3C +10 +00 +00 +ENDCHAR +STARTCHAR uni2B46 +ENCODING 11078 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +F0 +08 +FC +08 +F0 +20 +00 +00 +ENDCHAR +STARTCHAR uni2B47 +ENCODING 11079 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +68 +B0 +00 +10 +F8 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni2B48 +ENCODING 11080 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +10 +F8 +10 +00 +68 +B0 +00 +68 +B0 +00 +ENDCHAR +STARTCHAR uni2B49 +ENCODING 11081 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +68 +B0 +00 +40 +F8 +40 +00 +00 +00 +ENDCHAR +STARTCHAR uni2B4A +ENCODING 11082 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +40 +F8 +40 +00 +68 +B0 +00 +68 +B0 +00 +ENDCHAR +STARTCHAR uni2B4B +ENCODING 11083 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +40 +F8 +40 +00 +68 +B0 +00 +00 +ENDCHAR +STARTCHAR uni2B4C +ENCODING 11084 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +10 +F8 +10 +00 +68 +B0 +00 +00 +ENDCHAR +STARTCHAR uni2C60 +ENCODING 11360 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +40 +40 +E0 +40 +E0 +40 +78 +00 +00 +ENDCHAR +STARTCHAR uni2C61 +ENCODING 11361 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +60 +20 +70 +20 +70 +20 +00 +00 +ENDCHAR +STARTCHAR uni2C62 +ENCODING 11362 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +20 +68 +B0 +20 +20 +38 +00 +00 +ENDCHAR +STARTCHAR uni2C63 +ENCODING 11363 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +48 +E8 +48 +70 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni2C64 +ENCODING 11364 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F0 +88 +88 +F0 +A0 +90 +88 +A0 +40 +ENDCHAR +STARTCHAR uni2C65 +ENCODING 11365 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +08 +08 +70 +18 +78 +A8 +78 +40 +00 +ENDCHAR +STARTCHAR uni2C66 +ENCODING 11366 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +28 +28 +F8 +30 +20 +20 +58 +40 +00 +ENDCHAR +STARTCHAR uni2C67 +ENCODING 11367 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +88 +F8 +88 +88 +8C +04 +00 +ENDCHAR +STARTCHAR uni2C68 +ENCODING 11368 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +F0 +88 +88 +88 +8C +04 +00 +ENDCHAR +STARTCHAR uni2C69 +ENCODING 11369 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +90 +A0 +C0 +A0 +90 +8C +04 +00 +ENDCHAR +STARTCHAR uni2C6A +ENCODING 11370 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +88 +90 +E0 +90 +8C +04 +00 +ENDCHAR +STARTCHAR uni2C6B +ENCODING 11371 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +F8 +08 +10 +20 +40 +80 +FC +04 +00 +ENDCHAR +STARTCHAR uni2C6C +ENCODING 11372 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +10 +20 +40 +FC +04 +00 +ENDCHAR +STARTCHAR uni2C6D +ENCODING 11373 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +68 +98 +88 +88 +88 +88 +74 +00 +00 +ENDCHAR +STARTCHAR uni2C6E +ENCODING 11374 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +D8 +A8 +88 +88 +88 +88 +28 +10 +ENDCHAR +STARTCHAR uni2C6F +ENCODING 11375 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +88 +88 +88 +F8 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2C71 +ENCODING 11377 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +84 +88 +88 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni2C72 +ENCODING 11378 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +84 +88 +88 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni2C73 +ENCODING 11379 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +84 +88 +A8 +A8 +50 +00 +00 +ENDCHAR +STARTCHAR uni2C74 +ENCODING 11380 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +48 +A8 +C8 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni2C75 +ENCODING 11381 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +80 +80 +80 +F0 +80 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni2C76 +ENCODING 11382 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +40 +40 +70 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni2C77 +ENCODING 11383 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +A8 +A8 +A8 +70 +00 +00 +ENDCHAR +STARTCHAR uni2C78 +ENCODING 11384 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +F0 +80 +74 +18 +00 +ENDCHAR +STARTCHAR uni2C79 +ENCODING 11385 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +10 +10 +10 +30 +00 +00 +ENDCHAR +STARTCHAR uni2C7A +ENCODING 11386 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +88 +A8 +D8 +70 +00 +00 +ENDCHAR +STARTCHAR uni2C7B +ENCODING 11387 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +08 +38 +08 +78 +00 +00 +ENDCHAR +STARTCHAR uni2C7C +ENCODING 11388 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +00 +20 +00 +60 +20 +20 +20 +A0 +40 +ENDCHAR +STARTCHAR uni2C7D +ENCODING 11389 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +88 +88 +88 +50 +20 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DE0 +ENCODING 11744 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +60 +C0 +A0 +A0 +40 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DE1 +ENCODING 11745 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +A0 +C0 +A0 +C0 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DE2 +ENCODING 11746 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +E0 +80 +80 +80 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DE3 +ENCODING 11747 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +50 +50 +F0 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DE4 +ENCODING 11748 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +A8 +70 +A8 +A8 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DE5 +ENCODING 11749 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +20 +40 +20 +C0 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DE6 +ENCODING 11750 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +A0 +C0 +A0 +A0 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DE7 +ENCODING 11751 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +70 +50 +50 +90 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DE8 +ENCODING 11752 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +A0 +E0 +A0 +A0 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DE9 +ENCODING 11753 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +90 +F0 +90 +90 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DEA +ENCODING 11754 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +60 +90 +90 +60 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DEB +ENCODING 11755 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +A0 +A0 +A0 +A0 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DEC +ENCODING 11756 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +A0 +C0 +80 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DED +ENCODING 11757 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +60 +80 +80 +60 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DEE +ENCODING 11758 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +E0 +40 +40 +40 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DEF +ENCODING 11759 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +A0 +40 +A0 +A0 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DF0 +ENCODING 11760 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +A0 +A0 +A0 +B0 +10 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DF1 +ENCODING 11761 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +A0 +60 +20 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DF2 +ENCODING 11762 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +A8 +A8 +A8 +A8 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DF3 +ENCODING 11763 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +A8 +A8 +A8 +AC +04 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DF4 +ENCODING 11764 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +60 +D0 +B0 +60 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DF5 +ENCODING 11765 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +7C +88 +88 +68 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DF6 +ENCODING 11766 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +C0 +60 +A0 +60 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DF7 +ENCODING 11767 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +60 +A0 +C0 +E0 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DF8 +ENCODING 11768 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +E0 +40 +A0 +A0 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DF9 +ENCODING 11769 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +A0 +A0 +40 +A0 +40 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DFA +ENCODING 11770 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +40 +E0 +40 +60 +50 +60 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DFB +ENCODING 11771 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +98 +A4 +E4 +A4 +98 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DFC +ENCODING 11772 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +B0 +88 +F8 +A8 +98 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DFD +ENCODING 11773 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +20 +50 +F8 +A8 +A8 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DFE +ENCODING 11774 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +F8 +50 +70 +A8 +A8 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2DFF +ENCODING 11775 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +FC +A8 +B8 +D4 +D4 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR ff +ENCODING 64256 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +38 +50 +50 +F8 +50 +50 +50 +00 +00 +ENDCHAR +STARTCHAR fi +ENCODING 64257 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +48 +40 +F8 +48 +48 +48 +00 +00 +ENDCHAR +STARTCHAR fl +ENCODING 64258 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +38 +48 +48 +F8 +48 +48 +48 +00 +00 +ENDCHAR +STARTCHAR ffi +ENCODING 64259 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +70 +A8 +A0 +F8 +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR ffl +ENCODING 64260 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +78 +A8 +A8 +F8 +A8 +A8 +A8 +00 +00 +ENDCHAR +STARTCHAR uniFB05 +ENCODING 64261 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +20 +50 +78 +D0 +50 +50 +48 +00 +00 +ENDCHAR +STARTCHAR uniFB06 +ENCODING 64262 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +00 +30 +50 +78 +90 +50 +50 +88 +00 +00 +ENDCHAR +STARTCHAR uniFE20 +ENCODING 65056 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +1C +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uniFE21 +ENCODING 65057 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +E0 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uniFE22 +ENCODING 65058 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +7C +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uniFE23 +ENCODING 65059 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +08 +F0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uniFFFD +ENCODING 65533 +SWIDTH 480 0 +DWIDTH 6 0 +BBX 6 12 0 -2 +BITMAP +00 +00 +70 +D8 +A8 +E8 +D8 +D8 +F8 +D8 +70 +00 +ENDCHAR +ENDFONT diff --git a/crates/pi-natives/src/fonts/8x13.bdf b/crates/pi-natives/src/fonts/8x13.bdf new file mode 100644 index 000000000..a95b7183a --- /dev/null +++ b/crates/pi-natives/src/fonts/8x13.bdf @@ -0,0 +1,74092 @@ +STARTFONT 2.1 +COMMENT "$ucs-fonts: 8x13.bdf,v 1.57 2006-01-05 20:24:11+00 mgk25 Rel $" +COMMENT "Send bug reports to Markus Kuhn " +FONT -Misc-Fixed-Medium-R-Normal--13-120-75-75-C-80-ISO10646-1 +SIZE 13 78 78 +FONTBOUNDINGBOX 8 13 0 -2 +STARTPROPERTIES 22 +FONTNAME_REGISTRY "" +FOUNDRY "Misc" +FAMILY_NAME "Fixed" +WEIGHT_NAME "Medium" +SLANT "R" +SETWIDTH_NAME "Normal" +ADD_STYLE_NAME "" +PIXEL_SIZE 13 +POINT_SIZE 120 +RESOLUTION_X 75 +RESOLUTION_Y 75 +SPACING "C" +AVERAGE_WIDTH 80 +CHARSET_REGISTRY "ISO10646" +CHARSET_ENCODING "1" +DEFAULT_CHAR 0 +FONT_DESCENT 2 +FONT_ASCENT 11 +COPYRIGHT "Public domain font. Share and enjoy." +_XMBDFED_INFO "Edited with xmbdfed 4.5." +CAP_HEIGHT 9 +X_HEIGHT 6 +ENDPROPERTIES +CHARS 3703 +STARTCHAR char0 +ENCODING 0 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +AA +00 +82 +00 +82 +00 +82 +00 +AA +00 +00 +ENDCHAR +STARTCHAR space +ENCODING 32 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR exclam +ENCODING 33 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +10 +10 +10 +10 +00 +10 +00 +00 +ENDCHAR +STARTCHAR quotedbl +ENCODING 34 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +24 +24 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR numbersign +ENCODING 35 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +24 +24 +7E +24 +7E +24 +24 +00 +00 +00 +ENDCHAR +STARTCHAR dollar +ENCODING 36 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +3C +50 +50 +38 +14 +14 +78 +10 +00 +00 +ENDCHAR +STARTCHAR percent +ENCODING 37 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +22 +52 +24 +08 +08 +10 +24 +2A +44 +00 +00 +ENDCHAR +STARTCHAR ampersand +ENCODING 38 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +30 +48 +48 +30 +4A +44 +3A +00 +00 +ENDCHAR +STARTCHAR quotesingle +ENCODING 39 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR parenleft +ENCODING 40 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +08 +08 +10 +10 +10 +08 +08 +04 +00 +00 +ENDCHAR +STARTCHAR parenright +ENCODING 41 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +10 +10 +08 +08 +08 +10 +10 +20 +00 +00 +ENDCHAR +STARTCHAR asterisk +ENCODING 42 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +18 +7E +18 +24 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR plus +ENCODING 43 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +10 +7C +10 +10 +00 +00 +00 +00 +ENDCHAR +STARTCHAR comma +ENCODING 44 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +38 +30 +40 +00 +ENDCHAR +STARTCHAR hyphen +ENCODING 45 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +7C +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR period +ENCODING 46 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +38 +10 +00 +ENDCHAR +STARTCHAR slash +ENCODING 47 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +02 +04 +08 +10 +20 +40 +80 +80 +00 +00 +ENDCHAR +STARTCHAR zero +ENCODING 48 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +42 +42 +42 +42 +42 +24 +18 +00 +00 +ENDCHAR +STARTCHAR one +ENCODING 49 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +30 +50 +10 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR two +ENCODING 50 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +02 +04 +18 +20 +40 +7E +00 +00 +ENDCHAR +STARTCHAR three +ENCODING 51 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +02 +04 +08 +1C +02 +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR four +ENCODING 52 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +0C +14 +24 +44 +44 +7E +04 +04 +00 +00 +ENDCHAR +STARTCHAR five +ENCODING 53 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +40 +40 +5C +62 +02 +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR six +ENCODING 54 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1C +20 +40 +40 +5C +62 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR seven +ENCODING 55 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +02 +04 +08 +08 +10 +10 +20 +20 +00 +00 +ENDCHAR +STARTCHAR eight +ENCODING 56 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +42 +3C +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR nine +ENCODING 57 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +46 +3A +02 +02 +04 +38 +00 +00 +ENDCHAR +STARTCHAR colon +ENCODING 58 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +38 +10 +00 +00 +10 +38 +10 +00 +ENDCHAR +STARTCHAR semicolon +ENCODING 59 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +38 +10 +00 +00 +38 +30 +40 +00 +ENDCHAR +STARTCHAR less +ENCODING 60 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +04 +08 +10 +20 +10 +08 +04 +02 +00 +00 +ENDCHAR +STARTCHAR equal +ENCODING 61 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +00 +00 +7E +00 +00 +00 +00 +ENDCHAR +STARTCHAR greater +ENCODING 62 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +20 +10 +08 +04 +08 +10 +20 +40 +00 +00 +ENDCHAR +STARTCHAR question +ENCODING 63 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +02 +04 +08 +08 +00 +08 +00 +00 +ENDCHAR +STARTCHAR at +ENCODING 64 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +4E +52 +56 +4A +40 +3C +00 +00 +ENDCHAR +STARTCHAR A +ENCODING 65 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +42 +42 +42 +7E +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR B +ENCODING 66 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +78 +44 +42 +44 +78 +44 +42 +44 +78 +00 +00 +ENDCHAR +STARTCHAR C +ENCODING 67 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +40 +40 +40 +40 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR D +ENCODING 68 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +78 +44 +42 +42 +42 +42 +42 +44 +78 +00 +00 +ENDCHAR +STARTCHAR E +ENCODING 69 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +40 +40 +40 +78 +40 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR F +ENCODING 70 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +40 +40 +40 +78 +40 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR G +ENCODING 71 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +40 +40 +40 +4E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR H +ENCODING 72 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +42 +42 +7E +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR I +ENCODING 73 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +10 +10 +10 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR J +ENCODING 74 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1F +04 +04 +04 +04 +04 +04 +44 +38 +00 +00 +ENDCHAR +STARTCHAR K +ENCODING 75 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +44 +48 +50 +60 +50 +48 +44 +42 +00 +00 +ENDCHAR +STARTCHAR L +ENCODING 76 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +40 +40 +40 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR M +ENCODING 77 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +82 +C6 +AA +92 +92 +82 +82 +82 +00 +00 +ENDCHAR +STARTCHAR N +ENCODING 78 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +62 +52 +4A +46 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR O +ENCODING 79 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR P +ENCODING 80 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +42 +42 +42 +7C +40 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR Q +ENCODING 81 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +42 +42 +42 +52 +4A +3C +02 +00 +ENDCHAR +STARTCHAR R +ENCODING 82 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +42 +42 +42 +7C +50 +48 +44 +42 +00 +00 +ENDCHAR +STARTCHAR S +ENCODING 83 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +40 +40 +3C +02 +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR T +ENCODING 84 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +10 +10 +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR U +ENCODING 85 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +42 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR V +ENCODING 86 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +82 +44 +44 +44 +28 +28 +28 +10 +00 +00 +ENDCHAR +STARTCHAR W +ENCODING 87 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +82 +82 +82 +92 +92 +92 +AA +44 +00 +00 +ENDCHAR +STARTCHAR X +ENCODING 88 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +82 +44 +28 +10 +28 +44 +82 +82 +00 +00 +ENDCHAR +STARTCHAR Y +ENCODING 89 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +82 +44 +28 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR Z +ENCODING 90 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +02 +04 +08 +10 +20 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR bracketleft +ENCODING 91 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +20 +20 +20 +20 +20 +20 +20 +3C +00 +00 +ENDCHAR +STARTCHAR backslash +ENCODING 92 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +80 +80 +40 +20 +10 +08 +04 +02 +02 +00 +00 +ENDCHAR +STARTCHAR bracketright +ENCODING 93 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +78 +08 +08 +08 +08 +08 +08 +08 +78 +00 +00 +ENDCHAR +STARTCHAR asciicircum +ENCODING 94 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +28 +44 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR underscore +ENCODING 95 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +FE +00 +ENDCHAR +STARTCHAR grave +ENCODING 96 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR a +ENCODING 97 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +02 +3E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR b +ENCODING 98 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +5C +62 +42 +42 +62 +5C +00 +00 +ENDCHAR +STARTCHAR c +ENCODING 99 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +40 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR d +ENCODING 100 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +02 +02 +3A +46 +42 +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR e +ENCODING 101 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +7E +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR f +ENCODING 102 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1C +22 +20 +20 +7C +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR g +ENCODING 103 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3A +44 +44 +38 +40 +3C +42 +3C +ENDCHAR +STARTCHAR h +ENCODING 104 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +5C +62 +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR i +ENCODING 105 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +00 +30 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR j +ENCODING 106 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +04 +00 +0C +04 +04 +04 +04 +44 +44 +38 +ENDCHAR +STARTCHAR k +ENCODING 107 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +44 +48 +70 +48 +44 +42 +00 +00 +ENDCHAR +STARTCHAR l +ENCODING 108 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +10 +10 +10 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR m +ENCODING 109 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +EC +92 +92 +92 +92 +82 +00 +00 +ENDCHAR +STARTCHAR n +ENCODING 110 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +5C +62 +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR o +ENCODING 111 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR p +ENCODING 112 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +5C +62 +42 +62 +5C +40 +40 +40 +ENDCHAR +STARTCHAR q +ENCODING 113 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3A +46 +42 +46 +3A +02 +02 +02 +ENDCHAR +STARTCHAR r +ENCODING 114 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +5C +22 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR s +ENCODING 115 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +30 +0C +42 +3C +00 +00 +ENDCHAR +STARTCHAR t +ENCODING 116 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +20 +20 +7C +20 +20 +20 +22 +1C +00 +00 +ENDCHAR +STARTCHAR u +ENCODING 117 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +44 +44 +44 +44 +3A +00 +00 +ENDCHAR +STARTCHAR v +ENCODING 118 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +44 +44 +28 +28 +10 +00 +00 +ENDCHAR +STARTCHAR w +ENCODING 119 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +82 +82 +92 +92 +AA +44 +00 +00 +ENDCHAR +STARTCHAR x +ENCODING 120 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +24 +18 +18 +24 +42 +00 +00 +ENDCHAR +STARTCHAR y +ENCODING 121 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +42 +42 +46 +3A +02 +42 +3C +ENDCHAR +STARTCHAR z +ENCODING 122 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +04 +08 +10 +20 +7E +00 +00 +ENDCHAR +STARTCHAR braceleft +ENCODING 123 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +0E +10 +10 +08 +30 +08 +10 +10 +0E +00 +00 +ENDCHAR +STARTCHAR bar +ENCODING 124 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR braceright +ENCODING 125 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +70 +08 +08 +10 +0C +10 +08 +08 +70 +00 +00 +ENDCHAR +STARTCHAR asciitilde +ENCODING 126 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +54 +48 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR space +ENCODING 160 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR exclamdown +ENCODING 161 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +00 +10 +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR cent +ENCODING 162 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +38 +54 +50 +50 +54 +38 +10 +00 +00 +00 +ENDCHAR +STARTCHAR sterling +ENCODING 163 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1C +22 +20 +70 +20 +20 +20 +62 +DC +00 +00 +ENDCHAR +STARTCHAR currency +ENCODING 164 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +42 +3C +24 +24 +3C +42 +00 +00 +00 +ENDCHAR +STARTCHAR yen +ENCODING 165 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +82 +44 +28 +7C +10 +7C +10 +10 +00 +00 +ENDCHAR +STARTCHAR brokenbar +ENCODING 166 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +10 +00 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR section +ENCODING 167 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +24 +20 +18 +24 +24 +18 +04 +24 +18 +00 +00 +ENDCHAR +STARTCHAR dieresis +ENCODING 168 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +24 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR copyright +ENCODING 169 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +38 +44 +92 +AA +A2 +AA +92 +44 +38 +00 +00 +00 +ENDCHAR +STARTCHAR ordfeminine +ENCODING 170 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +04 +3C +44 +3C +00 +7C +00 +00 +00 +00 +ENDCHAR +STARTCHAR guillemotleft +ENCODING 171 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +12 +24 +48 +90 +48 +24 +12 +00 +00 +00 +ENDCHAR +STARTCHAR logicalnot +ENCODING 172 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +7E +02 +02 +02 +00 +00 +00 +ENDCHAR +STARTCHAR hyphen +ENCODING 173 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +3C +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR registered +ENCODING 174 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +38 +44 +92 +AA +AA +B2 +AA +44 +38 +00 +00 +00 +ENDCHAR +STARTCHAR macron +ENCODING 175 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR degree +ENCODING 176 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +24 +18 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR plusminus +ENCODING 177 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +10 +7C +10 +10 +00 +7C +00 +00 +00 +ENDCHAR +STARTCHAR twosuperior +ENCODING 178 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +30 +48 +08 +30 +40 +78 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR threesuperior +ENCODING 179 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +30 +48 +10 +08 +48 +30 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR acute +ENCODING 180 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR mu +ENCODING 181 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +42 +42 +42 +66 +5A +40 +00 +ENDCHAR +STARTCHAR paragraph +ENCODING 182 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3E +74 +74 +74 +34 +14 +14 +14 +14 +00 +00 +ENDCHAR +STARTCHAR periodcentered +ENCODING 183 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR cedilla +ENCODING 184 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +18 +ENDCHAR +STARTCHAR onesuperior +ENCODING 185 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +20 +60 +20 +20 +20 +70 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR ordmasculine +ENCODING 186 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +48 +48 +30 +00 +78 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR guillemotright +ENCODING 187 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +90 +48 +24 +12 +24 +48 +90 +00 +00 +00 +ENDCHAR +STARTCHAR onequarter +ENCODING 188 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +40 +C0 +40 +40 +42 +E6 +0A +12 +1A +06 +00 +00 +ENDCHAR +STARTCHAR onehalf +ENCODING 189 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +40 +C0 +40 +40 +4C +F2 +02 +0C +10 +1E +00 +00 +ENDCHAR +STARTCHAR threequarters +ENCODING 190 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +90 +20 +10 +92 +66 +0A +12 +1A +06 +00 +00 +ENDCHAR +STARTCHAR questiondown +ENCODING 191 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +00 +10 +10 +20 +40 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR Agrave +ENCODING 192 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +08 +00 +18 +24 +42 +42 +7E +42 +42 +00 +00 +ENDCHAR +STARTCHAR Aacute +ENCODING 193 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +00 +18 +24 +42 +42 +7E +42 +42 +00 +00 +ENDCHAR +STARTCHAR Acircumflex +ENCODING 194 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +24 +00 +18 +24 +42 +42 +7E +42 +42 +00 +00 +ENDCHAR +STARTCHAR Atilde +ENCODING 195 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +32 +4C +00 +18 +24 +42 +42 +7E +42 +42 +00 +00 +ENDCHAR +STARTCHAR Adieresis +ENCODING 196 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +24 +00 +18 +24 +42 +42 +7E +42 +42 +00 +00 +ENDCHAR +STARTCHAR Aring +ENCODING 197 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +24 +18 +18 +24 +42 +42 +7E +42 +42 +00 +00 +ENDCHAR +STARTCHAR AE +ENCODING 198 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +6E +90 +90 +90 +9C +F0 +90 +90 +9E +00 +00 +ENDCHAR +STARTCHAR Ccedilla +ENCODING 199 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +40 +40 +40 +40 +40 +42 +3C +08 +10 +ENDCHAR +STARTCHAR Egrave +ENCODING 200 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +08 +00 +7E +40 +40 +78 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR Eacute +ENCODING 201 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +00 +7E +40 +40 +78 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR Ecircumflex +ENCODING 202 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +24 +00 +7E +40 +40 +78 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR Edieresis +ENCODING 203 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +24 +00 +7E +40 +40 +78 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR Igrave +ENCODING 204 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +20 +10 +00 +7C +10 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR Iacute +ENCODING 205 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +00 +7C +10 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR Icircumflex +ENCODING 206 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +24 +00 +7C +10 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR Idieresis +ENCODING 207 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +44 +44 +00 +7C +10 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR Eth +ENCODING 208 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +78 +44 +42 +42 +E2 +42 +42 +44 +78 +00 +00 +ENDCHAR +STARTCHAR Ntilde +ENCODING 209 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +64 +98 +00 +82 +C2 +A2 +92 +8A +86 +82 +00 +00 +ENDCHAR +STARTCHAR Ograve +ENCODING 210 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +20 +10 +00 +7C +82 +82 +82 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR Oacute +ENCODING 211 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +00 +7C +82 +82 +82 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR Ocircumflex +ENCODING 212 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +24 +00 +7C +82 +82 +82 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR Otilde +ENCODING 213 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +64 +98 +00 +7C +82 +82 +82 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR Odieresis +ENCODING 214 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +44 +44 +00 +7C +82 +82 +82 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR multiply +ENCODING 215 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +42 +24 +18 +18 +24 +42 +00 +00 +00 +ENDCHAR +STARTCHAR Oslash +ENCODING 216 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +02 +3C +46 +4A +4A +52 +52 +52 +62 +3C +40 +00 +ENDCHAR +STARTCHAR Ugrave +ENCODING 217 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +20 +10 +00 +42 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR Uacute +ENCODING 218 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +00 +42 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR Ucircumflex +ENCODING 219 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +24 +00 +42 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR Udieresis +ENCODING 220 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +24 +00 +42 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR Yacute +ENCODING 221 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +00 +44 +44 +28 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR Thorn +ENCODING 222 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +7C +42 +42 +42 +7C +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR germandbls +ENCODING 223 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +44 +44 +48 +50 +4C +42 +42 +5C +00 +00 +ENDCHAR +STARTCHAR agrave +ENCODING 224 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +08 +00 +3C +02 +3E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR aacute +ENCODING 225 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +08 +00 +3C +02 +3E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR acircumflex +ENCODING 226 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +00 +3C +02 +3E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR atilde +ENCODING 227 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +32 +4C +00 +3C +02 +3E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR adieresis +ENCODING 228 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +24 +00 +3C +02 +3E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR aring +ENCODING 229 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +24 +18 +00 +3C +02 +3E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR ae +ENCODING 230 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +6C +12 +7C +90 +92 +6C +00 +00 +ENDCHAR +STARTCHAR ccedilla +ENCODING 231 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +40 +40 +42 +3C +08 +10 +ENDCHAR +STARTCHAR egrave +ENCODING 232 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +08 +00 +3C +42 +7E +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR eacute +ENCODING 233 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +3C +42 +7E +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR ecircumflex +ENCODING 234 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +00 +3C +42 +7E +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR edieresis +ENCODING 235 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +24 +00 +3C +42 +7E +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR igrave +ENCODING 236 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +10 +00 +30 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR iacute +ENCODING 237 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +20 +00 +30 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR icircumflex +ENCODING 238 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +48 +00 +30 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR idieresis +ENCODING 239 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +48 +48 +00 +30 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR eth +ENCODING 240 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +18 +28 +04 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR ntilde +ENCODING 241 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +32 +4C +00 +5C +62 +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR ograve +ENCODING 242 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +10 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR oacute +ENCODING 243 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR ocircumflex +ENCODING 244 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR otilde +ENCODING 245 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +32 +4C +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR odieresis +ENCODING 246 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +24 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR divide +ENCODING 247 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +10 +00 +7C +00 +10 +10 +00 +00 +00 +ENDCHAR +STARTCHAR oslash +ENCODING 248 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +02 +3C +46 +4A +52 +62 +3C +40 +00 +ENDCHAR +STARTCHAR ugrave +ENCODING 249 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +10 +00 +44 +44 +44 +44 +44 +3A +00 +00 +ENDCHAR +STARTCHAR uacute +ENCODING 250 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +44 +44 +44 +44 +44 +3A +00 +00 +ENDCHAR +STARTCHAR ucircumflex +ENCODING 251 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +00 +44 +44 +44 +44 +44 +3A +00 +00 +ENDCHAR +STARTCHAR udieresis +ENCODING 252 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +28 +28 +00 +44 +44 +44 +44 +44 +3A +00 +00 +ENDCHAR +STARTCHAR yacute +ENCODING 253 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +42 +42 +42 +46 +3A +02 +42 +3C +ENDCHAR +STARTCHAR thorn +ENCODING 254 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +40 +40 +5C +62 +42 +42 +62 +5C +40 +40 +ENDCHAR +STARTCHAR ydieresis +ENCODING 255 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +24 +00 +42 +42 +42 +46 +3A +02 +42 +3C +ENDCHAR +STARTCHAR Amacron +ENCODING 256 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +7E +00 +18 +24 +42 +42 +7E +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR amacron +ENCODING 257 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +7E +00 +3C +02 +3E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR Abreve +ENCODING 258 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +42 +3C +00 +18 +24 +42 +42 +7E +42 +42 +00 +00 +ENDCHAR +STARTCHAR abreve +ENCODING 259 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +3C +00 +3C +02 +3E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR Aogonek +ENCODING 260 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +42 +42 +42 +7E +42 +42 +42 +04 +03 +ENDCHAR +STARTCHAR aogonek +ENCODING 261 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +02 +3E +42 +46 +3A +04 +03 +ENDCHAR +STARTCHAR Cacute +ENCODING 262 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +00 +3C +42 +40 +40 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR cacute +ENCODING 263 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +3C +42 +40 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR Ccircumflex +ENCODING 264 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +24 +00 +3C +42 +40 +40 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR ccircumflex +ENCODING 265 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +00 +3C +42 +40 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR Cdotaccent +ENCODING 266 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +00 +3C +42 +40 +40 +40 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR cdotaccent +ENCODING 267 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +18 +00 +3C +42 +40 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR Ccaron +ENCODING 268 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +18 +00 +3C +42 +40 +40 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR ccaron +ENCODING 269 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +18 +00 +3C +42 +40 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR Dcaron +ENCODING 270 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +18 +00 +78 +44 +42 +42 +42 +44 +78 +00 +00 +ENDCHAR +STARTCHAR dcaron +ENCODING 271 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +18 +02 +02 +3A +46 +42 +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR Dcroat +ENCODING 272 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +78 +44 +42 +42 +F2 +42 +42 +44 +78 +00 +00 +ENDCHAR +STARTCHAR dcroat +ENCODING 273 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +1E +04 +74 +8C +84 +84 +8C +74 +00 +00 +ENDCHAR +STARTCHAR Emacron +ENCODING 274 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +7E +00 +7E +40 +40 +78 +40 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR emacron +ENCODING 275 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +7E +00 +3C +42 +7E +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR Ebreve +ENCODING 276 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +42 +3C +00 +7E +40 +40 +78 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR ebreve +ENCODING 277 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +3C +00 +3C +42 +7E +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR Edotaccent +ENCODING 278 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +00 +7E +40 +40 +78 +40 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR edotaccent +ENCODING 279 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +18 +00 +3C +42 +7E +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR Eogonek +ENCODING 280 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +40 +40 +40 +78 +40 +40 +40 +7E +10 +1C +ENDCHAR +STARTCHAR eogonek +ENCODING 281 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +7E +40 +42 +3C +10 +1C +ENDCHAR +STARTCHAR Ecaron +ENCODING 282 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +18 +00 +7E +40 +40 +78 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR ecaron +ENCODING 283 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +18 +00 +3C +42 +7E +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR Gcircumflex +ENCODING 284 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +24 +00 +3C +42 +40 +4E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR gcircumflex +ENCODING 285 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +00 +3A +44 +44 +38 +40 +3C +42 +3C +ENDCHAR +STARTCHAR Gbreve +ENCODING 286 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +42 +3C +00 +3C +42 +40 +4E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR gbreve +ENCODING 287 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +3C +00 +3A +44 +44 +38 +40 +3C +42 +3C +ENDCHAR +STARTCHAR Gdotaccent +ENCODING 288 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +00 +3C +42 +40 +40 +4E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR gdotaccent +ENCODING 289 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +18 +00 +3A +44 +44 +38 +40 +3C +42 +3C +ENDCHAR +STARTCHAR Gcommaaccent +ENCODING 290 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +40 +40 +40 +4E +42 +46 +3A +08 +10 +ENDCHAR +STARTCHAR gcommaaccent +ENCODING 291 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +18 +00 +3A +44 +44 +38 +40 +3C +42 +3C +ENDCHAR +STARTCHAR Hcircumflex +ENCODING 292 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +24 +00 +42 +42 +42 +7E +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR hcircumflex +ENCODING 293 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +0C +12 +40 +40 +40 +5C +62 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR Hbar +ENCODING 294 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +FF +42 +7E +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR hbar +ENCODING 295 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +F8 +40 +5C +62 +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR Itilde +ENCODING 296 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +64 +98 +00 +7C +10 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR itilde +ENCODING 297 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +64 +98 +00 +30 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR Imacron +ENCODING 298 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +7C +00 +7C +10 +10 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR imacron +ENCODING 299 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +7C +00 +30 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR Ibreve +ENCODING 300 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +44 +38 +00 +7C +10 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR ibreve +ENCODING 301 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +38 +00 +30 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR Iogonek +ENCODING 302 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +10 +10 +10 +10 +10 +10 +10 +7C +10 +18 +ENDCHAR +STARTCHAR iogonek +ENCODING 303 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +30 +00 +30 +10 +10 +10 +10 +7C +10 +18 +ENDCHAR +STARTCHAR Idotaccent +ENCODING 304 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +00 +7C +10 +10 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR dotlessi +ENCODING 305 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +30 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR IJ +ENCODING 306 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +EE +42 +42 +42 +42 +42 +42 +52 +EC +00 +00 +ENDCHAR +STARTCHAR ij +ENCODING 307 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +42 +00 +C6 +42 +42 +42 +42 +F2 +12 +0C +ENDCHAR +STARTCHAR Jcircumflex +ENCODING 308 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +0C +12 +00 +1E +04 +04 +04 +04 +44 +38 +00 +00 +ENDCHAR +STARTCHAR jcircumflex +ENCODING 309 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +0C +12 +00 +0C +04 +04 +04 +04 +44 +44 +38 +ENDCHAR +STARTCHAR Kcommaaccent +ENCODING 310 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +44 +48 +50 +60 +50 +48 +44 +42 +20 +C0 +ENDCHAR +STARTCHAR kcommaaccent +ENCODING 311 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +44 +48 +70 +48 +44 +42 +20 +C0 +ENDCHAR +STARTCHAR kgreenlandic +ENCODING 312 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +44 +78 +44 +42 +42 +00 +00 +ENDCHAR +STARTCHAR Lacute +ENCODING 313 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +40 +40 +40 +40 +40 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR lacute +ENCODING 314 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +08 +10 +00 +30 +10 +10 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR Lcommaaccent +ENCODING 315 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +40 +40 +40 +40 +40 +7E +08 +10 +ENDCHAR +STARTCHAR lcommaaccent +ENCODING 316 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +10 +10 +10 +10 +10 +10 +10 +7C +10 +20 +ENDCHAR +STARTCHAR Lcaron +ENCODING 317 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +48 +30 +00 +40 +40 +40 +40 +40 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR lcaron +ENCODING 318 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +48 +30 +00 +30 +10 +10 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR Ldot +ENCODING 319 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +48 +48 +40 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR ldot +ENCODING 320 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +10 +10 +12 +12 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR Lslash +ENCODING 321 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +60 +C0 +40 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR lslash +ENCODING 322 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +10 +10 +18 +30 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR Nacute +ENCODING 323 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +42 +42 +62 +52 +4A +46 +42 +42 +00 +00 +ENDCHAR +STARTCHAR nacute +ENCODING 324 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +5C +62 +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR Ncommaaccent +ENCODING 325 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +62 +52 +4A +46 +42 +42 +42 +20 +40 +ENDCHAR +STARTCHAR ncommaaccent +ENCODING 326 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +5C +62 +42 +42 +42 +42 +20 +40 +ENDCHAR +STARTCHAR Ncaron +ENCODING 327 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +18 +42 +42 +62 +52 +4A +46 +42 +42 +00 +00 +ENDCHAR +STARTCHAR ncaron +ENCODING 328 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +18 +00 +5C +62 +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR napostrophe +ENCODING 329 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +C0 +40 +80 +00 +5C +62 +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR Eng +ENCODING 330 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +62 +52 +4A +46 +42 +42 +42 +02 +0C +ENDCHAR +STARTCHAR eng +ENCODING 331 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +5C +62 +42 +42 +42 +42 +02 +0C +ENDCHAR +STARTCHAR Omacron +ENCODING 332 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +00 +7C +82 +82 +82 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR omacron +ENCODING 333 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +7E +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR Obreve +ENCODING 334 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +44 +38 +00 +7C +82 +82 +82 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR obreve +ENCODING 335 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +3C +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR Ohungarumlaut +ENCODING 336 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +48 +00 +7C +82 +82 +82 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR ohungarumlaut +ENCODING 337 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +12 +24 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR OE +ENCODING 338 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +90 +90 +90 +9C +90 +90 +90 +7E +00 +00 +ENDCHAR +STARTCHAR oe +ENCODING 339 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +6C +92 +9C +90 +92 +6C +00 +00 +ENDCHAR +STARTCHAR Racute +ENCODING 340 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +00 +7C +42 +42 +7C +48 +44 +42 +00 +00 +ENDCHAR +STARTCHAR racute +ENCODING 341 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +5C +22 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR Rcommaaccent +ENCODING 342 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +42 +42 +42 +7C +50 +48 +44 +42 +20 +40 +ENDCHAR +STARTCHAR rcommaaccent +ENCODING 343 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +5C +22 +20 +20 +20 +20 +10 +20 +ENDCHAR +STARTCHAR Rcaron +ENCODING 344 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +18 +00 +7C +42 +42 +7C +48 +44 +42 +00 +00 +ENDCHAR +STARTCHAR rcaron +ENCODING 345 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +18 +00 +5C +22 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR Sacute +ENCODING 346 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +00 +3C +42 +40 +3C +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR sacute +ENCODING 347 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +3C +42 +30 +0C +42 +3C +00 +00 +ENDCHAR +STARTCHAR Scircumflex +ENCODING 348 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +24 +00 +3C +42 +40 +3C +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR scircumflex +ENCODING 349 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +00 +3C +42 +30 +0C +42 +3C +00 +00 +ENDCHAR +STARTCHAR Scedilla +ENCODING 350 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +40 +40 +3C +02 +02 +42 +3C +08 +10 +ENDCHAR +STARTCHAR scedilla +ENCODING 351 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +30 +0C +42 +3C +08 +10 +ENDCHAR +STARTCHAR Scaron +ENCODING 352 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +18 +00 +3C +42 +40 +3C +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR scaron +ENCODING 353 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +18 +00 +3C +42 +30 +0C +42 +3C +00 +00 +ENDCHAR +STARTCHAR Tcommaaccent +ENCODING 354 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +10 +10 +10 +10 +10 +10 +10 +10 +08 +10 +ENDCHAR +STARTCHAR tcommaaccent +ENCODING 355 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +20 +20 +7C +20 +20 +20 +22 +1C +08 +10 +ENDCHAR +STARTCHAR Tcaron +ENCODING 356 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +28 +10 +00 +FE +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR tcaron +ENCODING 357 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +48 +30 +00 +20 +20 +7C +20 +20 +22 +1C +00 +00 +ENDCHAR +STARTCHAR Tbar +ENCODING 358 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +10 +10 +7C +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR tbar +ENCODING 359 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +20 +7C +20 +7C +20 +20 +22 +1C +00 +00 +ENDCHAR +STARTCHAR Utilde +ENCODING 360 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +32 +4C +00 +42 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR utilde +ENCODING 361 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +32 +4C +00 +44 +44 +44 +44 +44 +3A +00 +00 +ENDCHAR +STARTCHAR Umacron +ENCODING 362 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +7E +00 +42 +42 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR umacron +ENCODING 363 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +7C +00 +44 +44 +44 +44 +44 +3A +00 +00 +ENDCHAR +STARTCHAR Ubreve +ENCODING 364 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +42 +3C +00 +42 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR ubreve +ENCODING 365 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +38 +00 +44 +44 +44 +44 +44 +3A +00 +00 +ENDCHAR +STARTCHAR Uring +ENCODING 366 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +24 +18 +42 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uring +ENCODING 367 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +24 +18 +00 +44 +44 +44 +44 +44 +3A +00 +00 +ENDCHAR +STARTCHAR Uhungarumlaut +ENCODING 368 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +12 +24 +00 +42 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uhungarumlaut +ENCODING 369 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +12 +24 +00 +44 +44 +44 +44 +44 +3A +00 +00 +ENDCHAR +STARTCHAR Uogonek +ENCODING 370 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +42 +42 +42 +42 +42 +42 +3C +08 +0C +ENDCHAR +STARTCHAR uogonek +ENCODING 371 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +44 +44 +44 +44 +3A +08 +0C +ENDCHAR +STARTCHAR Wcircumflex +ENCODING 372 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +28 +00 +82 +82 +92 +92 +92 +AA +44 +00 +00 +ENDCHAR +STARTCHAR wcircumflex +ENCODING 373 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +28 +00 +82 +82 +92 +92 +AA +44 +00 +00 +ENDCHAR +STARTCHAR Ycircumflex +ENCODING 374 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +24 +00 +82 +44 +28 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR ycircumflex +ENCODING 375 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +00 +42 +42 +42 +46 +3A +02 +42 +3C +ENDCHAR +STARTCHAR Ydieresis +ENCODING 376 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +44 +44 +00 +82 +44 +28 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR Zacute +ENCODING 377 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +00 +7E +04 +08 +10 +20 +40 +7E +00 +00 +ENDCHAR +STARTCHAR zacute +ENCODING 378 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +7E +04 +08 +10 +20 +7E +00 +00 +ENDCHAR +STARTCHAR Zdotaccent +ENCODING 379 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +00 +7E +02 +04 +08 +10 +20 +40 +7E +00 +00 +ENDCHAR +STARTCHAR zdotaccent +ENCODING 380 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +18 +00 +7E +04 +08 +10 +20 +7E +00 +00 +ENDCHAR +STARTCHAR Zcaron +ENCODING 381 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +18 +00 +7E +04 +08 +10 +20 +40 +7E +00 +00 +ENDCHAR +STARTCHAR zcaron +ENCODING 382 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +18 +00 +7E +04 +08 +10 +20 +7E +00 +00 +ENDCHAR +STARTCHAR longs +ENCODING 383 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +20 +20 +60 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni0180 +ENCODING 384 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +F0 +40 +5C +62 +42 +42 +62 +5C +00 +00 +ENDCHAR +STARTCHAR uni0181 +ENCODING 385 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FC +A2 +22 +22 +3C +22 +22 +22 +3C +00 +00 +ENDCHAR +STARTCHAR uni0182 +ENCODING 386 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FC +40 +40 +40 +7C +42 +42 +42 +FC +00 +00 +ENDCHAR +STARTCHAR uni0183 +ENCODING 387 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +40 +40 +5C +62 +42 +42 +62 +5C +00 +00 +ENDCHAR +STARTCHAR uni0184 +ENCODING 388 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +60 +20 +2C +32 +22 +22 +32 +2C +00 +00 +ENDCHAR +STARTCHAR uni0185 +ENCODING 389 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +60 +20 +3C +22 +22 +22 +22 +1C +00 +00 +ENDCHAR +STARTCHAR uni0186 +ENCODING 390 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +02 +02 +02 +02 +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni0187 +ENCODING 391 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +02 +3C +44 +40 +40 +40 +40 +40 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni0188 +ENCODING 392 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3A +44 +40 +40 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni0189 +ENCODING 393 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +78 +44 +42 +42 +F2 +42 +42 +44 +78 +00 +00 +ENDCHAR +STARTCHAR uni018A +ENCODING 394 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +A2 +22 +22 +22 +22 +22 +22 +3C +00 +00 +ENDCHAR +STARTCHAR uni018B +ENCODING 395 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3E +02 +02 +3A +46 +42 +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR uni018C +ENCODING 396 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +78 +08 +08 +28 +58 +48 +48 +58 +28 +00 +00 +ENDCHAR +STARTCHAR uni018D +ENCODING 397 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +42 +42 +24 +18 +04 +38 +ENDCHAR +STARTCHAR uni018E +ENCODING 398 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +02 +02 +02 +1E +02 +02 +02 +7E +00 +00 +ENDCHAR +STARTCHAR uni018F +ENCODING 399 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +02 +02 +02 +7E +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni0190 +ENCODING 400 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +40 +40 +38 +40 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni0191 +ENCODING 401 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3E +20 +20 +20 +3C +20 +20 +20 +A0 +40 +00 +ENDCHAR +STARTCHAR florin +ENCODING 402 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +0C +12 +10 +10 +3C +10 +10 +10 +10 +90 +60 +ENDCHAR +STARTCHAR uni0193 +ENCODING 403 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +01 +02 +3E +42 +40 +40 +40 +4E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR uni0194 +ENCODING 404 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +82 +44 +44 +28 +28 +10 +28 +28 +10 +00 +ENDCHAR +STARTCHAR uni0195 +ENCODING 405 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +52 +6A +4A +4A +4A +44 +00 +00 +ENDCHAR +STARTCHAR uni0196 +ENCODING 406 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +10 +10 +10 +10 +10 +10 +10 +0C +00 +00 +ENDCHAR +STARTCHAR uni0197 +ENCODING 407 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +10 +10 +10 +38 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR uni0198 +ENCODING 408 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +4A +50 +60 +60 +50 +48 +44 +42 +00 +00 +ENDCHAR +STARTCHAR uni0199 +ENCODING 409 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +48 +40 +44 +48 +70 +48 +44 +42 +00 +00 +ENDCHAR +STARTCHAR uni019A +ENCODING 410 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +10 +10 +38 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR uni019B +ENCODING 411 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +58 +30 +50 +10 +28 +28 +4A +44 +00 +00 +ENDCHAR +STARTCHAR uni019C +ENCODING 412 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +92 +92 +92 +92 +92 +92 +92 +92 +6E +00 +00 +ENDCHAR +STARTCHAR uni019D +ENCODING 413 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +62 +52 +4A +46 +42 +42 +42 +40 +80 +ENDCHAR +STARTCHAR uni019E +ENCODING 414 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +5C +62 +42 +42 +42 +42 +02 +02 +ENDCHAR +STARTCHAR uni019F +ENCODING 415 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +42 +7E +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR Ohorn +ENCODING 416 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +01 +3D +42 +42 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR ohorn +ENCODING 417 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +01 +3D +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni01A2 +ENCODING 418 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +36 +4A +4A +4A +4A +4A +4A +4A +32 +02 +00 +ENDCHAR +STARTCHAR uni01A3 +ENCODING 419 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +36 +4A +4A +4A +4A +32 +02 +00 +ENDCHAR +STARTCHAR uni01A4 +ENCODING 420 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +A2 +A2 +22 +3C +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni01A5 +ENCODING 421 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +30 +40 +58 +64 +44 +44 +64 +58 +40 +40 +ENDCHAR +STARTCHAR uni01A6 +ENCODING 422 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +7C +42 +42 +7C +48 +44 +44 +04 +02 +ENDCHAR +STARTCHAR uni01A7 +ENCODING 423 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +02 +02 +3C +40 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni01A8 +ENCODING 424 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +0C +30 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni01A9 +ENCODING 425 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +20 +10 +08 +04 +08 +10 +20 +7E +00 +00 +ENDCHAR +STARTCHAR uni01AA +ENCODING 426 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +48 +48 +38 +08 +08 +08 +08 +08 +0A +04 +ENDCHAR +STARTCHAR uni01AB +ENCODING 427 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +20 +20 +7C +20 +20 +20 +24 +1A +02 +0C +ENDCHAR +STARTCHAR uni01AC +ENCODING 428 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +90 +90 +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni01AD +ENCODING 429 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +1C +22 +20 +20 +7C +20 +20 +20 +22 +1C +00 +00 +ENDCHAR +STARTCHAR uni01AE +ENCODING 430 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +10 +10 +10 +10 +10 +10 +10 +10 +12 +0C +ENDCHAR +STARTCHAR Uhorn +ENCODING 431 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +02 +02 +44 +44 +44 +44 +44 +44 +44 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uhorn +ENCODING 432 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +02 +02 +44 +44 +44 +44 +44 +3A +00 +00 +ENDCHAR +STARTCHAR uni01B1 +ENCODING 433 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +24 +24 +42 +42 +42 +42 +24 +18 +00 +00 +ENDCHAR +STARTCHAR uni01B2 +ENCODING 434 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +48 +44 +44 +42 +42 +42 +42 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni01B3 +ENCODING 435 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +C2 +22 +14 +14 +08 +08 +08 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni01B4 +ENCODING 436 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +05 +04 +44 +44 +44 +4C +34 +04 +44 +38 +ENDCHAR +STARTCHAR uni01B5 +ENCODING 437 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +02 +04 +08 +7E +20 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR uni01B6 +ENCODING 438 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +04 +7E +10 +20 +7E +00 +00 +ENDCHAR +STARTCHAR uni01B7 +ENCODING 439 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +02 +04 +08 +1C +02 +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni01B8 +ENCODING 440 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +40 +20 +10 +38 +40 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni01B9 +ENCODING 441 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +40 +20 +10 +38 +40 +40 +42 +3C +ENDCHAR +STARTCHAR uni01BA +ENCODING 442 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +02 +04 +08 +1C +02 +0C +30 +42 +3C +00 +ENDCHAR +STARTCHAR uni01BB +ENCODING 443 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +02 +04 +7E +20 +40 +7E +00 +00 +ENDCHAR +STARTCHAR uni01BC +ENCODING 444 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +42 +78 +04 +02 +02 +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni01BD +ENCODING 445 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +40 +70 +08 +48 +70 +00 +00 +ENDCHAR +STARTCHAR uni01BE +ENCODING 446 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +7C +10 +18 +04 +04 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni01BF +ENCODING 447 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +58 +64 +44 +48 +50 +60 +40 +40 +ENDCHAR +STARTCHAR uni01C0 +ENCODING 448 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni01C1 +ENCODING 449 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +28 +28 +28 +28 +28 +28 +28 +28 +28 +00 +00 +ENDCHAR +STARTCHAR uni01C2 +ENCODING 450 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +7C +10 +7C +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni01C3 +ENCODING 451 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +10 +10 +10 +10 +00 +10 +00 +00 +ENDCHAR +STARTCHAR uni01C4 +ENCODING 452 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +0A +04 +C0 +AE +A2 +A2 +A4 +A4 +A8 +A8 +CE +00 +00 +ENDCHAR +STARTCHAR uni01C5 +ENCODING 453 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CA +A4 +A0 +AE +A2 +A4 +A8 +A8 +CE +00 +00 +ENDCHAR +STARTCHAR uni01C6 +ENCODING 454 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +2A +24 +20 +6E +A2 +A4 +A8 +A8 +6E +00 +00 +ENDCHAR +STARTCHAR uni01C7 +ENCODING 455 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +8E +82 +82 +82 +82 +82 +82 +92 +EC +00 +00 +ENDCHAR +STARTCHAR uni01C8 +ENCODING 456 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +80 +82 +80 +86 +82 +82 +82 +82 +EA +0A +04 +ENDCHAR +STARTCHAR uni01C9 +ENCODING 457 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +80 +82 +80 +86 +82 +82 +82 +82 +6A +0A +04 +ENDCHAR +STARTCHAR uni01CA +ENCODING 458 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +97 +91 +D1 +B1 +91 +91 +91 +95 +92 +00 +00 +ENDCHAR +STARTCHAR uni01CB +ENCODING 459 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +90 +91 +D0 +B3 +91 +91 +91 +91 +95 +05 +02 +ENDCHAR +STARTCHAR uni01CC +ENCODING 460 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +01 +00 +E3 +91 +91 +91 +91 +95 +05 +02 +ENDCHAR +STARTCHAR uni01CD +ENCODING 461 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +18 +00 +18 +24 +42 +42 +7E +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni01CE +ENCODING 462 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +18 +00 +3C +02 +3E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR uni01CF +ENCODING 463 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +18 +00 +7C +10 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR uni01D0 +ENCODING 464 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +48 +30 +00 +30 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR uni01D1 +ENCODING 465 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +18 +00 +7C +82 +82 +82 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR uni01D2 +ENCODING 466 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +18 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni01D3 +ENCODING 467 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +18 +00 +42 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni01D4 +ENCODING 468 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +18 +00 +44 +44 +44 +44 +44 +3A +00 +00 +ENDCHAR +STARTCHAR uni01D5 +ENCODING 469 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +3C +00 +24 +00 +42 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni01D6 +ENCODING 470 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +3C +00 +24 +00 +44 +44 +44 +44 +44 +3A +00 +00 +ENDCHAR +STARTCHAR uni01D7 +ENCODING 471 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +04 +08 +22 +00 +42 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni01D8 +ENCODING 472 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +44 +00 +44 +44 +44 +44 +44 +3A +00 +00 +ENDCHAR +STARTCHAR uni01D9 +ENCODING 473 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +14 +08 +22 +00 +42 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni01DA +ENCODING 474 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +28 +10 +44 +00 +44 +44 +44 +44 +44 +3A +00 +00 +ENDCHAR +STARTCHAR uni01DB +ENCODING 475 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +08 +22 +00 +42 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni01DC +ENCODING 476 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +20 +10 +44 +00 +44 +44 +44 +44 +44 +3A +00 +00 +ENDCHAR +STARTCHAR uni01DD +ENCODING 477 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +02 +7E +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni01DE +ENCODING 478 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +3C +00 +24 +00 +18 +24 +42 +42 +7E +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni01DF +ENCODING 479 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +3C +00 +24 +00 +3C +02 +3E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR uni01E0 +ENCODING 480 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +3C +00 +18 +00 +18 +24 +42 +42 +7E +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni01E1 +ENCODING 481 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +3C +00 +18 +00 +3C +02 +3E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR uni01E2 +ENCODING 482 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +00 +7E +90 +90 +FC +90 +90 +9E +00 +00 +ENDCHAR +STARTCHAR uni01E3 +ENCODING 483 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3C +00 +6C +12 +7C +90 +92 +6C +00 +00 +ENDCHAR +STARTCHAR uni01E4 +ENCODING 484 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +40 +40 +4E +42 +47 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni01E5 +ENCODING 485 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3A +44 +44 +38 +40 +3C +47 +3C +ENDCHAR +STARTCHAR Gcaron +ENCODING 486 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +18 +00 +3C +42 +40 +4E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR gcaron +ENCODING 487 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +18 +00 +3A +44 +44 +38 +40 +3C +42 +3C +ENDCHAR +STARTCHAR uni01E8 +ENCODING 488 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +18 +00 +44 +48 +50 +60 +50 +48 +44 +00 +00 +ENDCHAR +STARTCHAR uni01E9 +ENCODING 489 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +18 +40 +40 +44 +48 +70 +48 +44 +42 +00 +00 +ENDCHAR +STARTCHAR uni01EA +ENCODING 490 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +42 +42 +42 +42 +42 +3C +10 +08 +ENDCHAR +STARTCHAR uni01EB +ENCODING 491 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +42 +42 +42 +3C +10 +08 +ENDCHAR +STARTCHAR uni01EC +ENCODING 492 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +00 +3C +42 +42 +42 +42 +42 +3C +10 +08 +ENDCHAR +STARTCHAR uni01ED +ENCODING 493 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3C +00 +3C +42 +42 +42 +42 +3C +10 +08 +ENDCHAR +STARTCHAR uni01EE +ENCODING 494 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +24 +18 +00 +7E +04 +08 +1C +02 +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni01EF +ENCODING 495 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +18 +00 +7E +02 +04 +08 +1C +02 +02 +42 +3C +ENDCHAR +STARTCHAR uni01F0 +ENCODING 496 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +12 +0C +00 +0C +04 +04 +04 +04 +44 +44 +38 +ENDCHAR +STARTCHAR uni01F1 +ENCODING 497 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CE +A2 +A2 +A4 +A4 +A4 +A8 +A8 +CE +00 +00 +ENDCHAR +STARTCHAR uni01F2 +ENCODING 498 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +C0 +A0 +A0 +AE +A2 +A4 +A8 +A8 +CE +00 +00 +ENDCHAR +STARTCHAR uni01F3 +ENCODING 499 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +20 +20 +6E +A2 +A4 +A8 +A8 +6E +00 +00 +ENDCHAR +STARTCHAR uni01F4 +ENCODING 500 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +00 +3C +42 +40 +4E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR uni01F5 +ENCODING 501 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +3A +44 +44 +38 +40 +3C +42 +3C +ENDCHAR +STARTCHAR uni01F6 +ENCODING 502 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +48 +48 +48 +4A +7A +4A +4A +4A +44 +00 +00 +ENDCHAR +STARTCHAR uni01F7 +ENCODING 503 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +5C +62 +42 +44 +48 +50 +60 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni01F8 +ENCODING 504 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +08 +42 +42 +62 +52 +4A +46 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni01F9 +ENCODING 505 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +08 +00 +5C +62 +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR Aringacute +ENCODING 506 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +08 +10 +00 +18 +24 +18 +24 +42 +7E +42 +42 +00 +00 +ENDCHAR +STARTCHAR aringacute +ENCODING 507 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +08 +10 +18 +24 +18 +3C +02 +3E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR AEacute +ENCODING 508 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +00 +7E +90 +90 +FC +90 +90 +9E +00 +00 +ENDCHAR +STARTCHAR aeacute +ENCODING 509 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +6C +12 +7C +90 +92 +6C +00 +00 +ENDCHAR +STARTCHAR Oslashacute +ENCODING 510 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +02 +3C +46 +4A +52 +52 +62 +3C +40 +00 +ENDCHAR +STARTCHAR oslashacute +ENCODING 511 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +02 +3C +46 +4A +52 +62 +3C +40 +00 +ENDCHAR +STARTCHAR uni0200 +ENCODING 512 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +48 +24 +00 +18 +24 +42 +42 +7E +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni0201 +ENCODING 513 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +48 +24 +00 +3C +02 +3E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR uni0202 +ENCODING 514 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +3C +42 +00 +18 +24 +42 +42 +7E +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni0203 +ENCODING 515 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +00 +3C +02 +3E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR uni0204 +ENCODING 516 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +48 +24 +00 +7E +40 +40 +78 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR uni0205 +ENCODING 517 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +48 +24 +00 +3C +42 +7E +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni0206 +ENCODING 518 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +3C +42 +00 +7E +40 +40 +78 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR uni0207 +ENCODING 519 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +00 +3C +42 +7E +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni0208 +ENCODING 520 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +48 +24 +00 +7C +10 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR uni0209 +ENCODING 521 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +48 +24 +00 +18 +08 +08 +08 +08 +3E +00 +00 +ENDCHAR +STARTCHAR uni020A +ENCODING 522 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +38 +44 +00 +7C +10 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR uni020B +ENCODING 523 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +44 +00 +30 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR uni020C +ENCODING 524 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +90 +48 +00 +7C +82 +82 +82 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR uni020D +ENCODING 525 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +48 +24 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni020E +ENCODING 526 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +38 +44 +00 +7C +82 +82 +82 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR uni020F +ENCODING 527 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni0210 +ENCODING 528 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +48 +24 +00 +7C +42 +42 +7C +48 +44 +42 +00 +00 +ENDCHAR +STARTCHAR uni0211 +ENCODING 529 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +48 +24 +00 +5C +22 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni0212 +ENCODING 530 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +3C +42 +00 +7C +42 +42 +7C +48 +44 +42 +00 +00 +ENDCHAR +STARTCHAR uni0213 +ENCODING 531 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +00 +5C +22 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni0214 +ENCODING 532 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +48 +24 +00 +42 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni0215 +ENCODING 533 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +48 +24 +00 +44 +44 +44 +44 +44 +3A +00 +00 +ENDCHAR +STARTCHAR uni0216 +ENCODING 534 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +3C +42 +00 +42 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni0217 +ENCODING 535 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +44 +00 +44 +44 +44 +44 +44 +3A +00 +00 +ENDCHAR +STARTCHAR Scommaaccent +ENCODING 536 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +40 +40 +3C +02 +02 +42 +3C +08 +10 +ENDCHAR +STARTCHAR scommaaccent +ENCODING 537 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +30 +0C +42 +3C +08 +10 +ENDCHAR +STARTCHAR Tcommaaccent +ENCODING 538 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +10 +10 +10 +10 +10 +10 +10 +10 +08 +10 +ENDCHAR +STARTCHAR tcommaaccent +ENCODING 539 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +20 +20 +7C +20 +20 +20 +22 +1C +08 +10 +ENDCHAR +STARTCHAR uni021C +ENCODING 540 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +02 +04 +08 +1C +02 +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni021D +ENCODING 541 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +02 +04 +08 +1C +02 +02 +42 +3C +ENDCHAR +STARTCHAR uni021E +ENCODING 542 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +18 +42 +42 +42 +7E +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni021F +ENCODING 543 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +18 +40 +40 +5C +62 +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni0220 +ENCODING 544 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +5C +62 +42 +42 +42 +42 +42 +42 +42 +02 +02 +ENDCHAR +STARTCHAR uni0222 +ENCODING 546 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +42 +42 +42 +3C +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni0223 +ENCODING 547 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +14 +22 +22 +22 +1C +22 +22 +22 +1C +00 +00 +ENDCHAR +STARTCHAR uni0224 +ENCODING 548 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +02 +04 +08 +10 +20 +40 +40 +7E +02 +0C +ENDCHAR +STARTCHAR uni0225 +ENCODING 549 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +04 +08 +10 +20 +7E +02 +0C +ENDCHAR +STARTCHAR uni0226 +ENCODING 550 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +00 +18 +24 +42 +42 +7E +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni0227 +ENCODING 551 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +18 +00 +3C +02 +3E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR uni0228 +ENCODING 552 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +40 +40 +40 +78 +40 +40 +40 +7E +02 +0C +ENDCHAR +STARTCHAR uni0229 +ENCODING 553 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +7E +40 +42 +3E +02 +0C +ENDCHAR +STARTCHAR uni022A +ENCODING 554 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +7C +00 +28 +00 +7C +82 +82 +82 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR uni022B +ENCODING 555 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +7E +00 +24 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni022C +ENCODING 556 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +7C +34 +58 +00 +7C +82 +82 +82 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR uni022D +ENCODING 557 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +7E +00 +14 +28 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni022E +ENCODING 558 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +00 +7C +82 +82 +82 +82 +82 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR uni022F +ENCODING 559 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +18 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni0230 +ENCODING 560 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +7C +00 +10 +00 +7C +82 +82 +82 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR uni0231 +ENCODING 561 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +7E +00 +18 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni0232 +ENCODING 562 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +7C +00 +82 +44 +28 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni0233 +ENCODING 563 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3C +00 +42 +42 +42 +46 +3A +02 +42 +3C +ENDCHAR +STARTCHAR uni0250 +ENCODING 592 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +5C +62 +42 +7C +40 +3C +00 +00 +ENDCHAR +STARTCHAR uni0251 +ENCODING 593 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3A +46 +42 +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR uni0252 +ENCODING 594 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +5C +62 +42 +42 +62 +5C +00 +00 +ENDCHAR +STARTCHAR uni0253 +ENCODING 595 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +38 +44 +40 +40 +5C +62 +42 +42 +62 +5C +00 +00 +ENDCHAR +STARTCHAR uni0254 +ENCODING 596 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +02 +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni0255 +ENCODING 597 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +40 +44 +4A +3C +10 +00 +ENDCHAR +STARTCHAR uni0256 +ENCODING 598 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +04 +04 +34 +4C +44 +44 +4C +34 +04 +02 +ENDCHAR +STARTCHAR uni0257 +ENCODING 599 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +02 +05 +04 +04 +34 +4C +44 +44 +4C +34 +00 +00 +ENDCHAR +STARTCHAR uni0258 +ENCODING 600 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +7E +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni0259 +ENCODING 601 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +02 +7E +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni025A +ENCODING 602 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +44 +06 +7D +45 +38 +00 +00 +ENDCHAR +STARTCHAR uni025B +ENCODING 603 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +38 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni025C +ENCODING 604 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +1C +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni025D +ENCODING 605 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +46 +19 +04 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni025E +ENCODING 606 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +5C +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni025F +ENCODING 607 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +04 +04 +04 +3E +04 +04 +44 +38 +ENDCHAR +STARTCHAR uni0260 +ENCODING 608 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +03 +34 +4C +44 +4C +34 +04 +44 +38 +ENDCHAR +STARTCHAR uni0261 +ENCODING 609 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3A +46 +42 +46 +3A +02 +42 +3C +ENDCHAR +STARTCHAR uni0262 +ENCODING 610 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +40 +46 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni0263 +ENCODING 611 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +44 +28 +28 +10 +28 +10 +00 +ENDCHAR +STARTCHAR uni0264 +ENCODING 612 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +22 +55 +08 +08 +14 +08 +00 +00 +ENDCHAR +STARTCHAR uni0265 +ENCODING 613 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +42 +42 +42 +46 +3A +02 +02 +ENDCHAR +STARTCHAR uni0266 +ENCODING 614 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +3C +40 +40 +40 +5C +62 +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni0267 +ENCODING 615 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +3C +40 +40 +40 +5C +62 +42 +42 +42 +42 +12 +0C +ENDCHAR +STARTCHAR uni0268 +ENCODING 616 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +00 +30 +10 +7C +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR uni0269 +ENCODING 617 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +30 +10 +10 +10 +10 +0C +00 +00 +ENDCHAR +STARTCHAR uni026A +ENCODING 618 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7C +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR uni026B +ENCODING 619 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +10 +10 +34 +58 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR uni026C +ENCODING 620 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +10 +10 +30 +50 +3C +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR uni026D +ENCODING 621 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +10 +10 +10 +10 +10 +10 +10 +10 +10 +0C +ENDCHAR +STARTCHAR uni026E +ENCODING 622 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +60 +20 +20 +3E +22 +24 +2C +22 +72 +02 +1C +ENDCHAR +STARTCHAR uni026F +ENCODING 623 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +82 +92 +92 +92 +92 +6E +00 +00 +ENDCHAR +STARTCHAR uni0270 +ENCODING 624 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +82 +92 +92 +92 +92 +6E +02 +02 +ENDCHAR +STARTCHAR uni0271 +ENCODING 625 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +EC +92 +92 +92 +92 +82 +02 +0C +ENDCHAR +STARTCHAR uni0272 +ENCODING 626 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +2C +32 +22 +22 +22 +22 +20 +C0 +ENDCHAR +STARTCHAR uni0273 +ENCODING 627 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +58 +64 +44 +44 +44 +45 +02 +00 +ENDCHAR +STARTCHAR uni0274 +ENCODING 628 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +62 +52 +4A +46 +42 +00 +00 +ENDCHAR +STARTCHAR uni0275 +ENCODING 629 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +7E +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni0276 +ENCODING 630 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3E +48 +4E +48 +48 +3E +00 +00 +ENDCHAR +STARTCHAR uni0277 +ENCODING 631 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7C +82 +92 +92 +92 +6C +00 +00 +ENDCHAR +STARTCHAR uni0278 +ENCODING 632 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +10 +7C +92 +92 +92 +92 +7C +10 +10 +ENDCHAR +STARTCHAR uni0279 +ENCODING 633 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +04 +04 +04 +04 +44 +3A +00 +00 +ENDCHAR +STARTCHAR uni027A +ENCODING 634 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +04 +04 +04 +04 +04 +04 +44 +3A +00 +00 +ENDCHAR +STARTCHAR uni027B +ENCODING 635 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +08 +08 +08 +08 +48 +38 +08 +06 +ENDCHAR +STARTCHAR uni027C +ENCODING 636 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +5C +22 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni027D +ENCODING 637 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +5C +22 +20 +20 +20 +20 +24 +18 +ENDCHAR +STARTCHAR uni027E +ENCODING 638 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +1C +22 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni027F +ENCODING 639 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +1C +22 +02 +02 +02 +02 +00 +00 +ENDCHAR +STARTCHAR uni0280 +ENCODING 640 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7C +42 +42 +7C +44 +42 +00 +00 +ENDCHAR +STARTCHAR uni0281 +ENCODING 641 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +44 +7C +42 +42 +7C +00 +00 +ENDCHAR +STARTCHAR uni0282 +ENCODING 642 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +30 +0C +02 +3C +40 +30 +ENDCHAR +STARTCHAR uni0283 +ENCODING 643 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +04 +0A +08 +08 +08 +08 +08 +08 +08 +28 +10 +00 +ENDCHAR +STARTCHAR uni0284 +ENCODING 644 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +04 +0A +08 +08 +08 +08 +1C +08 +08 +28 +10 +00 +ENDCHAR +STARTCHAR uni0285 +ENCODING 645 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +28 +08 +08 +08 +08 +08 +08 +08 +0A +04 +00 +ENDCHAR +STARTCHAR uni0286 +ENCODING 646 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +04 +0A +08 +08 +08 +08 +08 +1C +2A +28 +10 +00 +ENDCHAR +STARTCHAR uni0287 +ENCODING 647 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +44 +04 +04 +04 +3E +04 +04 +ENDCHAR +STARTCHAR uni0288 +ENCODING 648 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +20 +20 +7C +20 +20 +20 +20 +20 +22 +1C +ENDCHAR +STARTCHAR uni0289 +ENCODING 649 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +44 +FE +44 +44 +3A +00 +00 +ENDCHAR +STARTCHAR uni028A +ENCODING 650 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +66 +24 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni028B +ENCODING 651 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +42 +42 +42 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni028C +ENCODING 652 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +28 +28 +44 +44 +44 +00 +00 +ENDCHAR +STARTCHAR uni028D +ENCODING 653 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +AA +92 +92 +82 +82 +00 +00 +ENDCHAR +STARTCHAR uni028E +ENCODING 654 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +0A +08 +10 +10 +28 +28 +44 +44 +00 +00 +ENDCHAR +STARTCHAR uni028F +ENCODING 655 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +82 +44 +28 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni0290 +ENCODING 656 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +04 +08 +10 +20 +7C +04 +03 +ENDCHAR +STARTCHAR uni0291 +ENCODING 657 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +04 +08 +12 +25 +7E +08 +00 +ENDCHAR +STARTCHAR uni0292 +ENCODING 658 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +02 +04 +08 +1C +02 +02 +42 +3C +ENDCHAR +STARTCHAR uni0293 +ENCODING 659 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +02 +04 +08 +1C +02 +3E +43 +3C +ENDCHAR +STARTCHAR uni0294 +ENCODING 660 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1C +22 +02 +02 +02 +0C +08 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni0295 +ENCODING 661 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1C +22 +20 +20 +20 +18 +08 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni0296 +ENCODING 662 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +08 +08 +0C +02 +02 +02 +22 +1C +00 +00 +ENDCHAR +STARTCHAR uni0297 +ENCODING 663 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +40 +40 +40 +40 +42 +3C +ENDCHAR +STARTCHAR uni0298 +ENCODING 664 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +5A +5A +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni0299 +ENCODING 665 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7C +42 +7C +42 +42 +7C +00 +00 +ENDCHAR +STARTCHAR uni029A +ENCODING 666 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +38 +44 +42 +3A +42 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni029B +ENCODING 667 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +01 +02 +3C +42 +40 +46 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni029C +ENCODING 668 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +42 +7E +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni029D +ENCODING 669 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +04 +00 +0C +04 +04 +07 +0C +14 +24 +18 +ENDCHAR +STARTCHAR uni029E +ENCODING 670 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +22 +12 +0E +12 +22 +02 +02 +ENDCHAR +STARTCHAR uni029F +ENCODING 671 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +40 +40 +40 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR uni02A0 +ENCODING 672 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +03 +04 +04 +34 +4C +44 +4C +34 +04 +04 +04 +ENDCHAR +STARTCHAR uni02A1 +ENCODING 673 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1C +22 +02 +02 +02 +0C +08 +1C +08 +08 +00 +ENDCHAR +STARTCHAR uni02A2 +ENCODING 674 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1C +22 +20 +20 +20 +18 +08 +1C +08 +08 +00 +ENDCHAR +STARTCHAR uni02A3 +ENCODING 675 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +57 +B1 +92 +92 +B4 +57 +00 +00 +ENDCHAR +STARTCHAR uni02A4 +ENCODING 676 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +57 +B1 +92 +96 +B1 +51 +06 +00 +ENDCHAR +STARTCHAR uni02A5 +ENCODING 677 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +57 +B1 +92 +92 +B5 +57 +02 +02 +ENDCHAR +STARTCHAR uni02A6 +ENCODING 678 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +F3 +44 +42 +41 +41 +36 +00 +00 +ENDCHAR +STARTCHAR uni02A7 +ENCODING 679 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +02 +45 +44 +44 +F4 +44 +44 +44 +44 +24 +14 +08 +ENDCHAR +STARTCHAR uni02A8 +ENCODING 680 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +F6 +49 +48 +4A +4D +36 +04 +00 +ENDCHAR +STARTCHAR uni02A9 +ENCODING 681 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +44 +40 +40 +F4 +5A +52 +52 +52 +02 +0C +ENDCHAR +STARTCHAR uni02AA +ENCODING 682 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +60 +20 +20 +2C +32 +28 +24 +32 +7C +00 +00 +ENDCHAR +STARTCHAR uni02AB +ENCODING 683 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +60 +20 +20 +3E +22 +24 +28 +30 +7E +00 +00 +ENDCHAR +STARTCHAR uni02AC +ENCODING 684 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +54 +54 +28 +28 +00 +54 +54 +28 +28 +00 +00 +ENDCHAR +STARTCHAR uni02AD +ENCODING 685 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +42 +00 +7E +42 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02B0 +ENCODING 688 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +28 +34 +24 +24 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02B1 +ENCODING 689 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +20 +28 +34 +24 +24 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02B2 +ENCODING 690 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +00 +08 +08 +28 +10 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02B3 +ENCODING 691 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +28 +34 +20 +20 +20 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02B4 +ENCODING 692 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +08 +08 +58 +28 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02B5 +ENCODING 693 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +08 +08 +58 +2A +04 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02B6 +ENCODING 694 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +48 +70 +48 +70 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02B7 +ENCODING 695 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +92 +92 +6C +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02B8 +ENCODING 696 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +28 +10 +20 +40 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02B9 +ENCODING 697 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02BA +ENCODING 698 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +14 +14 +28 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02BB +ENCODING 699 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +18 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR afii57929 +ENCODING 700 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +08 +10 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR afii64937 +ENCODING 701 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +10 +08 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02BE +ENCODING 702 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +08 +08 +10 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02BF +ENCODING 703 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +10 +08 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02C0 +ENCODING 704 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +28 +08 +10 +10 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02C1 +ENCODING 705 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +28 +20 +10 +10 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02C2 +ENCODING 706 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +20 +10 +08 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02C3 +ENCODING 707 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +20 +10 +08 +10 +20 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02C4 +ENCODING 708 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +28 +44 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02C5 +ENCODING 709 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +44 +28 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR circumflex +ENCODING 710 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +24 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR caron +ENCODING 711 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02C8 +ENCODING 712 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR macron +ENCODING 713 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02CA +ENCODING 714 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02CB +ENCODING 715 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02CC +ENCODING 716 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni02CD +ENCODING 717 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +38 +ENDCHAR +STARTCHAR uni02CE +ENCODING 718 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +08 +ENDCHAR +STARTCHAR uni02CF +ENCODING 719 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +20 +ENDCHAR +STARTCHAR uni02D0 +ENCODING 720 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +10 +00 +00 +10 +38 +00 +00 +ENDCHAR +STARTCHAR uni02D1 +ENCODING 721 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +10 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02D2 +ENCODING 722 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +08 +08 +10 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02D3 +ENCODING 723 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +20 +20 +10 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02D4 +ENCODING 724 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +10 +7C +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02D5 +ENCODING 725 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +7C +10 +10 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02D6 +ENCODING 726 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +10 +7C +10 +10 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02D7 +ENCODING 727 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +7C +44 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR breve +ENCODING 728 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +42 +3C +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR dotaccent +ENCODING 729 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR ring +ENCODING 730 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +24 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR ogonek +ENCODING 731 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +1C +ENDCHAR +STARTCHAR tilde +ENCODING 732 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +14 +28 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR hungarumlaut +ENCODING 733 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +22 +44 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02DE +ENCODING 734 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +60 +92 +0C +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02DF +ENCODING 735 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +28 +10 +28 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02E0 +ENCODING 736 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +28 +10 +28 +10 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02E1 +ENCODING 737 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +30 +10 +10 +10 +38 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02E2 +ENCODING 738 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +20 +10 +08 +30 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02E3 +ENCODING 739 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +18 +18 +24 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02E4 +ENCODING 740 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +44 +40 +40 +30 +10 +10 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02E5 +ENCODING 741 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +78 +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni02E6 +ENCODING 742 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +08 +78 +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni02E7 +ENCODING 743 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +08 +08 +08 +08 +78 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni02E8 +ENCODING 744 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +08 +08 +08 +08 +08 +08 +08 +78 +08 +08 +ENDCHAR +STARTCHAR uni02E9 +ENCODING 745 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +78 +ENDCHAR +STARTCHAR uni02EA +ENCODING 746 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +40 +40 +40 +78 +00 +00 +ENDCHAR +STARTCHAR uni02EB +ENCODING 747 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +20 +20 +20 +3C +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni02EC +ENCODING 748 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +44 +28 +10 +ENDCHAR +STARTCHAR uni02ED +ENCODING 749 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +00 +7E +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni02EE +ENCODING 750 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +66 +22 +44 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR gravecomb +ENCODING 768 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR acutecomb +ENCODING 769 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0302 +ENCODING 770 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +24 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR tildecomb +ENCODING 771 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +32 +4C +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0304 +ENCODING 772 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0305 +ENCODING 773 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0306 +ENCODING 774 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +42 +3C +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0307 +ENCODING 775 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0308 +ENCODING 776 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +24 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR hookabovecomb +ENCODING 777 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +24 +04 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni030A +ENCODING 778 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +24 +24 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni030B +ENCODING 779 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +48 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni030C +ENCODING 780 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni030D +ENCODING 781 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni030E +ENCODING 782 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +28 +28 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni030F +ENCODING 783 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +48 +24 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0310 +ENCODING 784 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +42 +3C +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0311 +ENCODING 785 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +3C +42 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0312 +ENCODING 786 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0313 +ENCODING 787 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +08 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0314 +ENCODING 788 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +10 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0315 +ENCODING 789 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +02 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0316 +ENCODING 790 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +08 +ENDCHAR +STARTCHAR uni0317 +ENCODING 791 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +10 +ENDCHAR +STARTCHAR uni0318 +ENCODING 792 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +3C +04 +ENDCHAR +STARTCHAR uni0319 +ENCODING 793 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +3C +20 +ENDCHAR +STARTCHAR uni031A +ENCODING 794 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +07 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni031B +ENCODING 795 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +01 +01 +02 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni031C +ENCODING 796 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +20 +18 +ENDCHAR +STARTCHAR uni031D +ENCODING 797 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +10 +7C +ENDCHAR +STARTCHAR uni031E +ENCODING 798 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7C +10 +10 +ENDCHAR +STARTCHAR uni031F +ENCODING 799 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +38 +10 +ENDCHAR +STARTCHAR uni0320 +ENCODING 800 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7C +00 +ENDCHAR +STARTCHAR uni0321 +ENCODING 801 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +0C +ENDCHAR +STARTCHAR uni0322 +ENCODING 802 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +02 +01 +ENDCHAR +STARTCHAR dotbelowcomb +ENCODING 803 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +ENDCHAR +STARTCHAR uni0324 +ENCODING 804 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +28 +ENDCHAR +STARTCHAR uni0325 +ENCODING 805 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +28 +10 +ENDCHAR +STARTCHAR uni0326 +ENCODING 806 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +08 +10 +ENDCHAR +STARTCHAR uni0327 +ENCODING 807 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +48 +30 +ENDCHAR +STARTCHAR uni0328 +ENCODING 808 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +40 +30 +ENDCHAR +STARTCHAR uni0329 +ENCODING 809 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +10 +ENDCHAR +STARTCHAR uni032A +ENCODING 810 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7C +44 +00 +ENDCHAR +STARTCHAR uni032B +ENCODING 811 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +44 +54 +28 +ENDCHAR +STARTCHAR uni032C +ENCODING 812 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +28 +10 +ENDCHAR +STARTCHAR uni032D +ENCODING 813 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +28 +ENDCHAR +STARTCHAR uni032E +ENCODING 814 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +44 +38 +ENDCHAR +STARTCHAR uni032F +ENCODING 815 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +38 +44 +ENDCHAR +STARTCHAR uni0330 +ENCODING 816 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +34 +58 +ENDCHAR +STARTCHAR uni0331 +ENCODING 817 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7C +00 +ENDCHAR +STARTCHAR uni0332 +ENCODING 818 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7C +ENDCHAR +STARTCHAR uni0333 +ENCODING 819 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7C +00 +7C +ENDCHAR +STARTCHAR uni0334 +ENCODING 820 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +34 +58 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0335 +ENCODING 821 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +38 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0336 +ENCODING 822 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +7C +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0337 +ENCODING 823 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +04 +08 +10 +20 +40 +00 +00 +00 +ENDCHAR +STARTCHAR uni0338 +ENCODING 824 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +02 +02 +04 +08 +08 +10 +20 +20 +40 +80 +80 +00 +00 +ENDCHAR +STARTCHAR uni0339 +ENCODING 825 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +08 +10 +ENDCHAR +STARTCHAR uni033A +ENCODING 826 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +44 +7C +00 +ENDCHAR +STARTCHAR uni033B +ENCODING 827 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +38 +28 +38 +00 +ENDCHAR +STARTCHAR uni033C +ENCODING 828 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +28 +54 +ENDCHAR +STARTCHAR uni033D +ENCODING 829 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +6C +10 +6C +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni033E +ENCODING 830 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +20 +10 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni033F +ENCODING 831 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +7C +00 +7C +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0340 +ENCODING 832 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +40 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0341 +ENCODING 833 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +02 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0342 +ENCODING 834 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +34 +58 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0343 +ENCODING 835 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +30 +10 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0344 +ENCODING 836 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +08 +10 +00 +28 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0345 +ENCODING 837 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +18 +ENDCHAR +STARTCHAR uni0346 +ENCODING 838 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +7C +44 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0347 +ENCODING 839 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3C +00 +3C +ENDCHAR +STARTCHAR uni0348 +ENCODING 840 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +28 +28 +28 +ENDCHAR +STARTCHAR uni0349 +ENCODING 841 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +38 +08 +ENDCHAR +STARTCHAR uni034A +ENCODING 842 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +08 +34 +58 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni034B +ENCODING 843 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +04 +71 +8E +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni034C +ENCODING 844 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +32 +4C +32 +4C +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni034D +ENCODING 845 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +24 +7E +24 +ENDCHAR +STARTCHAR uni034E +ENCODING 846 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +38 +10 +10 +ENDCHAR +STARTCHAR uni034F +ENCODING 847 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0360 +ENCODING 864 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +19 +26 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0361 +ENCODING 865 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +1E +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0362 +ENCODING 866 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +1F +02 +ENDCHAR +STARTCHAR uni0363 +ENCODING 867 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +08 +18 +28 +18 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0364 +ENCODING 868 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +28 +38 +20 +18 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0365 +ENCODING 869 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +00 +10 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0366 +ENCODING 870 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +24 +24 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0367 +ENCODING 871 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +28 +28 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0368 +ENCODING 872 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +20 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0369 +ENCODING 873 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +08 +18 +28 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni036A +ENCODING 874 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +20 +30 +28 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni036B +ENCODING 875 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +68 +54 +54 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni036C +ENCODING 876 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +28 +30 +20 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni036D +ENCODING 877 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +38 +10 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni036E +ENCODING 878 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +28 +28 +10 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni036F +ENCODING 879 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +28 +10 +28 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0374 +ENCODING 884 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0375 +ENCODING 885 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +10 +ENDCHAR +STARTCHAR uni037A +ENCODING 890 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +18 +ENDCHAR +STARTCHAR uni037E +ENCODING 894 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +38 +10 +00 +00 +38 +30 +40 +00 +ENDCHAR +STARTCHAR tonos +ENCODING 900 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR dieresistonos +ENCODING 901 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +52 +42 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR Alphatonos +ENCODING 902 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +4C +92 +12 +12 +12 +1E +12 +12 +12 +00 +00 +ENDCHAR +STARTCHAR anoteleia +ENCODING 903 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR Epsilontonos +ENCODING 904 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +5E +90 +10 +10 +1C +10 +10 +10 +1E +00 +00 +ENDCHAR +STARTCHAR Etatonos +ENCODING 905 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +52 +92 +12 +12 +1E +12 +12 +12 +12 +00 +00 +ENDCHAR +STARTCHAR Iotatonos +ENCODING 906 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +2E +44 +04 +04 +04 +04 +04 +04 +0E +00 +00 +ENDCHAR +STARTCHAR Omicrontonos +ENCODING 908 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +4C +92 +12 +12 +12 +12 +12 +12 +0C +00 +00 +ENDCHAR +STARTCHAR Upsilontonos +ENCODING 910 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +2A +4A +0A +04 +04 +04 +04 +04 +04 +00 +00 +ENDCHAR +STARTCHAR Omegatonos +ENCODING 911 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +4C +92 +12 +12 +12 +12 +0C +0C +12 +00 +00 +ENDCHAR +STARTCHAR iotadieresistonos +ENCODING 912 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +52 +42 +00 +10 +10 +10 +10 +12 +0C +00 +00 +ENDCHAR +STARTCHAR Alpha +ENCODING 913 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +42 +42 +42 +7E +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR Beta +ENCODING 914 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +42 +42 +42 +7C +42 +42 +42 +7C +00 +00 +ENDCHAR +STARTCHAR Gamma +ENCODING 915 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +40 +40 +40 +40 +40 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR Delta +ENCODING 916 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +28 +28 +28 +44 +44 +44 +82 +FE +00 +00 +ENDCHAR +STARTCHAR Epsilon +ENCODING 917 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +40 +40 +40 +78 +40 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR Zeta +ENCODING 918 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +02 +04 +08 +10 +20 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR Eta +ENCODING 919 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +42 +42 +7E +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR Theta +ENCODING 920 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +42 +7E +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR Iota +ENCODING 921 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +10 +10 +10 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR Kappa +ENCODING 922 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +44 +48 +50 +60 +50 +48 +44 +42 +00 +00 +ENDCHAR +STARTCHAR Lambda +ENCODING 923 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +28 +28 +28 +44 +44 +44 +82 +82 +00 +00 +ENDCHAR +STARTCHAR Mu +ENCODING 924 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +82 +C6 +AA +92 +92 +82 +82 +82 +00 +00 +ENDCHAR +STARTCHAR Nu +ENCODING 925 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +62 +52 +4A +46 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR Xi +ENCODING 926 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +00 +00 +00 +3C +00 +00 +00 +7E +00 +00 +ENDCHAR +STARTCHAR Omicron +ENCODING 927 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR Pi +ENCODING 928 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +44 +44 +44 +44 +44 +44 +44 +44 +00 +00 +ENDCHAR +STARTCHAR Rho +ENCODING 929 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +42 +42 +42 +7C +40 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR Sigma +ENCODING 931 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +40 +20 +10 +08 +10 +20 +40 +7E +00 +00 +ENDCHAR +STARTCHAR Tau +ENCODING 932 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +10 +10 +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR Upsilon +ENCODING 933 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +82 +44 +28 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR Phi +ENCODING 934 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +7C +92 +92 +92 +92 +92 +7C +10 +00 +00 +ENDCHAR +STARTCHAR Chi +ENCODING 935 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +82 +44 +28 +10 +28 +44 +82 +82 +00 +00 +ENDCHAR +STARTCHAR Psi +ENCODING 936 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +92 +92 +92 +92 +92 +7C +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR Omega +ENCODING 937 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +82 +82 +82 +82 +82 +6C +28 +EE +00 +00 +ENDCHAR +STARTCHAR Iotadieresis +ENCODING 938 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +44 +44 +00 +7C +10 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR Upsilondieresis +ENCODING 939 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +44 +44 +00 +44 +44 +28 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR alphatonos +ENCODING 940 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +04 +08 +00 +00 +3A +46 +42 +46 +4A +32 +00 +00 +ENDCHAR +STARTCHAR epsilontonos +ENCODING 941 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +04 +08 +00 +00 +3C +42 +38 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR etatonos +ENCODING 942 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +04 +08 +00 +00 +5C +62 +42 +42 +42 +42 +02 +02 +ENDCHAR +STARTCHAR iotatonos +ENCODING 943 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +20 +00 +00 +20 +20 +20 +20 +24 +18 +00 +00 +ENDCHAR +STARTCHAR upsilondieresistonos +ENCODING 944 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +52 +42 +00 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR alpha +ENCODING 945 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3A +46 +42 +46 +4A +32 +00 +00 +ENDCHAR +STARTCHAR beta +ENCODING 946 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +44 +44 +7C +42 +42 +42 +62 +5C +40 +40 +ENDCHAR +STARTCHAR gamma +ENCODING 947 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +44 +44 +28 +28 +10 +10 +10 +ENDCHAR +STARTCHAR delta +ENCODING 948 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +20 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR epsilon +ENCODING 949 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +38 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR zeta +ENCODING 950 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +10 +20 +20 +40 +40 +40 +40 +3C +02 +0C +ENDCHAR +STARTCHAR eta +ENCODING 951 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +5C +62 +42 +42 +42 +42 +02 +02 +ENDCHAR +STARTCHAR theta +ENCODING 952 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +44 +44 +44 +7C +44 +44 +44 +38 +00 +00 +ENDCHAR +STARTCHAR iota +ENCODING 953 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +20 +20 +20 +24 +18 +00 +00 +ENDCHAR +STARTCHAR kappa +ENCODING 954 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +48 +50 +70 +48 +44 +00 +00 +ENDCHAR +STARTCHAR lambda +ENCODING 955 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +02 +3A +46 +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR mu +ENCODING 956 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +42 +42 +42 +66 +5A +40 +40 +ENDCHAR +STARTCHAR nu +ENCODING 957 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +44 +44 +28 +28 +10 +00 +00 +ENDCHAR +STARTCHAR xi +ENCODING 958 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +10 +20 +20 +1C +20 +40 +40 +3C +02 +0C +ENDCHAR +STARTCHAR omicron +ENCODING 959 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR pi +ENCODING 960 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +FE +44 +44 +44 +44 +44 +00 +00 +ENDCHAR +STARTCHAR rho +ENCODING 961 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +42 +42 +62 +5C +40 +40 +ENDCHAR +STARTCHAR sigma1 +ENCODING 962 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +40 +40 +40 +3C +02 +0C +ENDCHAR +STARTCHAR sigma +ENCODING 963 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3E +48 +44 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR tau +ENCODING 964 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +10 +10 +10 +12 +0C +00 +00 +ENDCHAR +STARTCHAR upsilon +ENCODING 965 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR phi +ENCODING 966 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +4C +92 +92 +92 +92 +7C +10 +10 +ENDCHAR +STARTCHAR chi +ENCODING 967 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +42 +24 +18 +18 +24 +42 +42 +ENDCHAR +STARTCHAR psi +ENCODING 968 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +92 +92 +92 +92 +92 +7C +10 +10 +ENDCHAR +STARTCHAR omega +ENCODING 969 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +82 +92 +92 +92 +92 +6C +00 +00 +ENDCHAR +STARTCHAR iotadieresis +ENCODING 970 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +00 +10 +10 +10 +10 +12 +0C +00 +00 +ENDCHAR +STARTCHAR upsilondieresis +ENCODING 971 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +00 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR omicrontonos +ENCODING 972 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +04 +08 +00 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR upsilontonos +ENCODING 973 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +04 +08 +00 +00 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR omegatonos +ENCODING 974 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +00 +00 +82 +92 +92 +92 +92 +6C +00 +00 +ENDCHAR +STARTCHAR uni03D0 +ENCODING 976 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +44 +48 +5C +62 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR theta1 +ENCODING 977 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +44 +44 +3E +04 +44 +44 +44 +38 +00 +00 +ENDCHAR +STARTCHAR Upsilon1 +ENCODING 978 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +AA +28 +28 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni03D3 +ENCODING 979 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +A4 +AA +28 +28 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni03D4 +ENCODING 980 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +44 +44 +00 +44 +AA +28 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR phi1 +ENCODING 981 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +10 +7C +92 +92 +92 +92 +7C +10 +10 +ENDCHAR +STARTCHAR omega1 +ENCODING 982 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +FE +82 +92 +92 +92 +6C +00 +00 +ENDCHAR +STARTCHAR uni03D7 +ENCODING 983 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +08 +00 +00 +42 +24 +28 +38 +24 +42 +02 +1C +ENDCHAR +STARTCHAR uni03D8 +ENCODING 984 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +42 +42 +42 +42 +42 +3C +18 +18 +ENDCHAR +STARTCHAR uni03D9 +ENCODING 985 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +42 +42 +42 +3C +18 +18 +ENDCHAR +STARTCHAR uni03DA +ENCODING 986 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1C +22 +40 +40 +40 +40 +40 +3C +02 +04 +00 +ENDCHAR +STARTCHAR uni03DB +ENCODING 987 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +02 +3C +40 +40 +40 +40 +3C +02 +0C +ENDCHAR +STARTCHAR uni03DC +ENCODING 988 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +40 +40 +40 +78 +40 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni03DD +ENCODING 989 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7C +40 +40 +78 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni03DE +ENCODING 990 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +80 +40 +44 +4C +54 +64 +44 +04 +02 +00 +00 +ENDCHAR +STARTCHAR uni03DF +ENCODING 991 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +20 +20 +40 +7E +02 +04 +04 +08 +08 +ENDCHAR +STARTCHAR uni03E0 +ENCODING 992 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +28 +28 +28 +44 +4C +4C +92 +92 +00 +00 +ENDCHAR +STARTCHAR uni03E1 +ENCODING 993 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +60 +10 +08 +0C +14 +26 +0A +12 +02 +02 +02 +ENDCHAR +STARTCHAR uni03E2 +ENCODING 994 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +92 +92 +92 +92 +92 +6E +02 +7C +00 +00 +ENDCHAR +STARTCHAR uni03E3 +ENCODING 995 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +92 +92 +92 +92 +92 +6E +02 +7C +ENDCHAR +STARTCHAR uni03E4 +ENCODING 996 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +32 +42 +42 +42 +3E +02 +02 +02 +02 +00 +00 +ENDCHAR +STARTCHAR uni03E5 +ENCODING 997 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +28 +48 +48 +48 +38 +08 +08 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni03E6 +ENCODING 998 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +70 +20 +20 +3C +22 +22 +22 +22 +72 +02 +0C +ENDCHAR +STARTCHAR uni03E7 +ENCODING 999 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +20 +10 +3C +52 +22 +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni03E8 +ENCODING 1000 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +04 +18 +20 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni03E9 +ENCODING 1001 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3C +42 +42 +24 +18 +20 +40 +3E +00 +00 +ENDCHAR +STARTCHAR uni03EA +ENCODING 1002 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +6C +10 +10 +28 +28 +44 +44 +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni03EB +ENCODING 1003 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +6C +10 +28 +28 +44 +7C +00 +00 +ENDCHAR +STARTCHAR uni03EC +ENCODING 1004 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +40 +7C +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni03ED +ENCODING 1005 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +3C +40 +5C +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni03EE +ENCODING 1006 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +10 +7C +54 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni03EF +ENCODING 1007 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +14 +7C +50 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni03F0 +ENCODING 1008 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +24 +28 +38 +24 +42 +00 +00 +ENDCHAR +STARTCHAR uni03F1 +ENCODING 1009 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +42 +42 +62 +5C +40 +3C +ENDCHAR +STARTCHAR uni03F2 +ENCODING 1010 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +40 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni03F3 +ENCODING 1011 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +04 +00 +0C +04 +04 +04 +04 +44 +44 +38 +ENDCHAR +STARTCHAR uni03F4 +ENCODING 1012 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +42 +7E +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni03F5 +ENCODING 1013 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +40 +78 +40 +40 +3C +00 +00 +ENDCHAR +STARTCHAR uni03F6 +ENCODING 1014 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +04 +3C +04 +04 +78 +00 +00 +ENDCHAR +STARTCHAR uni0400 +ENCODING 1024 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +08 +00 +7E +40 +40 +7C +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR afii10023 +ENCODING 1025 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +24 +00 +7E +40 +40 +7C +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR afii10051 +ENCODING 1026 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FC +20 +20 +3C +22 +22 +22 +22 +22 +02 +0C +ENDCHAR +STARTCHAR afii10052 +ENCODING 1027 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +00 +7E +42 +40 +40 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR afii10053 +ENCODING 1028 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1E +22 +40 +40 +7C +40 +40 +22 +1C +00 +00 +ENDCHAR +STARTCHAR afii10054 +ENCODING 1029 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +40 +40 +3C +02 +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR afii10055 +ENCODING 1030 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +10 +10 +10 +10 +10 +10 +10 +38 +00 +00 +ENDCHAR +STARTCHAR afii10056 +ENCODING 1031 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +44 +44 +00 +7C +10 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR afii10057 +ENCODING 1032 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +0E +04 +04 +04 +04 +04 +04 +44 +38 +00 +00 +ENDCHAR +STARTCHAR afii10058 +ENCODING 1033 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +70 +90 +90 +90 +9C +92 +92 +92 +9C +00 +00 +ENDCHAR +STARTCHAR afii10059 +ENCODING 1034 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +90 +90 +90 +90 +FC +92 +92 +92 +9C +00 +00 +ENDCHAR +STARTCHAR afii10060 +ENCODING 1035 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FC +20 +20 +2C +32 +22 +22 +22 +22 +00 +00 +ENDCHAR +STARTCHAR afii10061 +ENCODING 1036 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +08 +10 +00 +44 +48 +50 +60 +50 +48 +44 +44 +00 +00 +ENDCHAR +STARTCHAR uni040D +ENCODING 1037 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +08 +42 +46 +46 +4A +52 +62 +62 +42 +00 +00 +ENDCHAR +STARTCHAR afii10062 +ENCODING 1038 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +42 +3C +00 +42 +42 +42 +3E +02 +02 +3C +00 +00 +ENDCHAR +STARTCHAR afii10145 +ENCODING 1039 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +44 +44 +44 +44 +44 +44 +44 +7C +10 +10 +ENDCHAR +STARTCHAR afii10017 +ENCODING 1040 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +42 +42 +42 +7E +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR afii10018 +ENCODING 1041 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +40 +40 +40 +7C +42 +42 +42 +7C +00 +00 +ENDCHAR +STARTCHAR afii10019 +ENCODING 1042 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +42 +42 +42 +7C +42 +42 +42 +7C +00 +00 +ENDCHAR +STARTCHAR afii10020 +ENCODING 1043 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +42 +40 +40 +40 +40 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR afii10021 +ENCODING 1044 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +24 +24 +24 +44 +44 +44 +44 +FE +82 +00 +ENDCHAR +STARTCHAR afii10022 +ENCODING 1045 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +40 +40 +40 +7C +40 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR afii10024 +ENCODING 1046 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +92 +92 +54 +38 +54 +92 +92 +92 +92 +00 +00 +ENDCHAR +STARTCHAR afii10025 +ENCODING 1047 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +02 +02 +0C +02 +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR afii10026 +ENCODING 1048 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +46 +46 +4A +4A +52 +52 +62 +42 +00 +00 +ENDCHAR +STARTCHAR afii10027 +ENCODING 1049 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +42 +3C +42 +46 +46 +4A +52 +62 +62 +42 +00 +00 +ENDCHAR +STARTCHAR afii10028 +ENCODING 1050 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +44 +48 +50 +60 +50 +48 +44 +42 +00 +00 +ENDCHAR +STARTCHAR afii10029 +ENCODING 1051 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1E +22 +22 +22 +22 +22 +22 +42 +42 +00 +00 +ENDCHAR +STARTCHAR afii10030 +ENCODING 1052 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +82 +C6 +AA +92 +92 +82 +82 +82 +00 +00 +ENDCHAR +STARTCHAR afii10031 +ENCODING 1053 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +42 +42 +7E +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR afii10032 +ENCODING 1054 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR afii10033 +ENCODING 1055 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +42 +42 +42 +42 +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR afii10034 +ENCODING 1056 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +42 +42 +42 +42 +7C +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR afii10035 +ENCODING 1057 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +40 +40 +40 +40 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR afii10036 +ENCODING 1058 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +10 +10 +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR afii10037 +ENCODING 1059 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +42 +42 +24 +18 +10 +20 +40 +00 +00 +ENDCHAR +STARTCHAR afii10038 +ENCODING 1060 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +7C +92 +92 +92 +92 +7C +10 +10 +00 +00 +ENDCHAR +STARTCHAR afii10039 +ENCODING 1061 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +44 +28 +28 +10 +28 +28 +44 +44 +00 +00 +ENDCHAR +STARTCHAR afii10040 +ENCODING 1062 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +84 +84 +84 +84 +84 +84 +84 +84 +FE +02 +02 +ENDCHAR +STARTCHAR afii10041 +ENCODING 1063 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +42 +42 +3E +02 +02 +02 +02 +00 +00 +ENDCHAR +STARTCHAR afii10042 +ENCODING 1064 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +92 +92 +92 +92 +92 +92 +92 +92 +FE +00 +00 +ENDCHAR +STARTCHAR afii10043 +ENCODING 1065 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +92 +92 +92 +92 +92 +92 +92 +92 +FE +02 +02 +ENDCHAR +STARTCHAR afii10044 +ENCODING 1066 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +E0 +20 +20 +20 +3C +22 +22 +22 +3C +00 +00 +ENDCHAR +STARTCHAR afii10045 +ENCODING 1067 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +42 +72 +4A +4A +4A +4A +72 +00 +00 +ENDCHAR +STARTCHAR afii10046 +ENCODING 1068 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +40 +7C +42 +42 +42 +7C +00 +00 +ENDCHAR +STARTCHAR afii10047 +ENCODING 1069 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +78 +04 +02 +02 +3E +02 +02 +04 +78 +00 +00 +ENDCHAR +STARTCHAR afii10048 +ENCODING 1070 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +8C +92 +92 +92 +F2 +92 +92 +92 +8C +00 +00 +ENDCHAR +STARTCHAR afii10049 +ENCODING 1071 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +44 +44 +44 +3C +14 +24 +44 +44 +00 +00 +ENDCHAR +STARTCHAR afii10065 +ENCODING 1072 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +02 +3E +42 +42 +3E +00 +00 +ENDCHAR +STARTCHAR afii10066 +ENCODING 1073 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +3C +40 +7C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR afii10067 +ENCODING 1074 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7C +42 +7C +42 +42 +7C +00 +00 +ENDCHAR +STARTCHAR afii10068 +ENCODING 1075 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +42 +40 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR afii10069 +ENCODING 1076 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +1C +24 +24 +24 +24 +7E +42 +00 +ENDCHAR +STARTCHAR afii10070 +ENCODING 1077 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +7E +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR afii10072 +ENCODING 1078 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +92 +92 +7C +54 +92 +92 +00 +00 +ENDCHAR +STARTCHAR afii10073 +ENCODING 1079 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +1C +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR afii10074 +ENCODING 1080 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +46 +4A +52 +62 +42 +00 +00 +ENDCHAR +STARTCHAR afii10075 +ENCODING 1081 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +3C +00 +42 +46 +4A +52 +62 +42 +00 +00 +ENDCHAR +STARTCHAR afii10076 +ENCODING 1082 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +48 +70 +48 +44 +44 +00 +00 +ENDCHAR +STARTCHAR afii10077 +ENCODING 1083 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +1E +22 +22 +22 +22 +42 +00 +00 +ENDCHAR +STARTCHAR afii10078 +ENCODING 1084 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +6C +54 +54 +44 +44 +00 +00 +ENDCHAR +STARTCHAR afii10079 +ENCODING 1085 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +42 +7E +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR afii10080 +ENCODING 1086 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR afii10081 +ENCODING 1087 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +42 +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR afii10082 +ENCODING 1088 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +5C +62 +42 +42 +62 +5C +40 +40 +ENDCHAR +STARTCHAR afii10083 +ENCODING 1089 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +40 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR afii10084 +ENCODING 1090 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7C +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR afii10085 +ENCODING 1091 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +42 +42 +46 +3A +02 +42 +3C +ENDCHAR +STARTCHAR afii10086 +ENCODING 1092 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +7C +92 +92 +92 +92 +7C +10 +10 +ENDCHAR +STARTCHAR afii10087 +ENCODING 1093 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +24 +18 +18 +24 +42 +00 +00 +ENDCHAR +STARTCHAR afii10088 +ENCODING 1094 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +44 +44 +44 +44 +7E +02 +02 +ENDCHAR +STARTCHAR afii10089 +ENCODING 1095 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +42 +46 +3A +02 +02 +00 +00 +ENDCHAR +STARTCHAR afii10090 +ENCODING 1096 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +92 +92 +92 +92 +92 +FE +00 +00 +ENDCHAR +STARTCHAR afii10091 +ENCODING 1097 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +92 +92 +92 +92 +92 +FE +02 +02 +ENDCHAR +STARTCHAR afii10092 +ENCODING 1098 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +E0 +20 +3C +22 +22 +3C +00 +00 +ENDCHAR +STARTCHAR afii10093 +ENCODING 1099 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +42 +72 +4A +4A +72 +00 +00 +ENDCHAR +STARTCHAR afii10094 +ENCODING 1100 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +20 +3C +22 +22 +3C +00 +00 +ENDCHAR +STARTCHAR afii10095 +ENCODING 1101 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +02 +0E +02 +02 +3C +00 +00 +ENDCHAR +STARTCHAR afii10096 +ENCODING 1102 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +8C +92 +92 +F2 +92 +8C +00 +00 +ENDCHAR +STARTCHAR afii10097 +ENCODING 1103 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3E +42 +42 +3E +22 +42 +00 +00 +ENDCHAR +STARTCHAR uni0450 +ENCODING 1104 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +08 +00 +3C +42 +7E +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR afii10071 +ENCODING 1105 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +24 +00 +3C +42 +7E +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR afii10099 +ENCODING 1106 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +7C +20 +2C +32 +22 +22 +22 +22 +02 +04 +ENDCHAR +STARTCHAR afii10100 +ENCODING 1107 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +7E +42 +40 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR afii10101 +ENCODING 1108 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3E +40 +78 +40 +40 +3E +00 +00 +ENDCHAR +STARTCHAR afii10102 +ENCODING 1109 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +30 +0C +42 +3C +00 +00 +ENDCHAR +STARTCHAR afii10103 +ENCODING 1110 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +00 +30 +10 +10 +10 +10 +38 +00 +00 +ENDCHAR +STARTCHAR afii10104 +ENCODING 1111 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +48 +48 +00 +30 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR afii10105 +ENCODING 1112 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +04 +00 +0C +04 +04 +04 +04 +24 +24 +18 +ENDCHAR +STARTCHAR afii10106 +ENCODING 1113 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +90 +9C +92 +92 +9C +00 +00 +ENDCHAR +STARTCHAR afii10107 +ENCODING 1114 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +90 +90 +FC +92 +92 +9C +00 +00 +ENDCHAR +STARTCHAR afii10108 +ENCODING 1115 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +7C +20 +2C +32 +22 +22 +22 +22 +00 +00 +ENDCHAR +STARTCHAR afii10109 +ENCODING 1116 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +20 +00 +44 +48 +70 +48 +44 +44 +00 +00 +ENDCHAR +STARTCHAR uni045D +ENCODING 1117 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +08 +00 +42 +46 +4A +52 +62 +42 +00 +00 +ENDCHAR +STARTCHAR afii10110 +ENCODING 1118 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +3C +00 +42 +42 +42 +46 +3A +02 +42 +3C +ENDCHAR +STARTCHAR afii10193 +ENCODING 1119 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +44 +44 +44 +44 +7C +10 +10 +ENDCHAR +STARTCHAR uni0460 +ENCODING 1120 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +6C +82 +82 +82 +82 +92 +92 +92 +6C +00 +00 +ENDCHAR +STARTCHAR uni0461 +ENCODING 1121 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +92 +92 +92 +92 +6C +00 +00 +ENDCHAR +STARTCHAR afii10146 +ENCODING 1122 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +F8 +20 +20 +3C +22 +22 +22 +3C +00 +00 +ENDCHAR +STARTCHAR afii10194 +ENCODING 1123 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +20 +20 +F8 +20 +3C +22 +22 +3C +00 +00 +ENDCHAR +STARTCHAR uni0464 +ENCODING 1124 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +8E +90 +90 +90 +FC +90 +90 +90 +8E +00 +00 +ENDCHAR +STARTCHAR uni0465 +ENCODING 1125 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +8E +90 +FC +90 +90 +8E +00 +00 +ENDCHAR +STARTCHAR uni0466 +ENCODING 1126 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +28 +28 +44 +44 +6C +92 +92 +92 +00 +00 +ENDCHAR +STARTCHAR uni0467 +ENCODING 1127 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +28 +44 +6C +92 +92 +00 +00 +ENDCHAR +STARTCHAR uni0468 +ENCODING 1128 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +90 +90 +A8 +A8 +A8 +C4 +D4 +92 +92 +00 +00 +ENDCHAR +STARTCHAR uni0469 +ENCODING 1129 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +48 +54 +54 +62 +6A +4A +00 +00 +ENDCHAR +STARTCHAR uni046A +ENCODING 1130 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +44 +44 +28 +38 +54 +92 +92 +92 +00 +00 +ENDCHAR +STARTCHAR uni046B +ENCODING 1131 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +28 +28 +7C +92 +92 +00 +00 +ENDCHAR +STARTCHAR uni046C +ENCODING 1132 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +BE +A2 +A2 +94 +F8 +9C +AA +AA +AA +00 +00 +ENDCHAR +STARTCHAR uni046D +ENCODING 1133 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +9C +94 +F8 +9C +AA +AA +00 +00 +ENDCHAR +STARTCHAR uni046E +ENCODING 1134 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +22 +1C +00 +3C +42 +02 +1C +02 +02 +3C +40 +38 +ENDCHAR +STARTCHAR uni046F +ENCODING 1135 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +22 +1C +00 +00 +3C +42 +1C +02 +02 +3C +40 +38 +ENDCHAR +STARTCHAR uni0470 +ENCODING 1136 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +92 +92 +92 +92 +92 +7C +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni0471 +ENCODING 1137 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +92 +92 +92 +92 +92 +7C +10 +10 +ENDCHAR +STARTCHAR afii10147 +ENCODING 1138 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +42 +7E +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR afii10195 +ENCODING 1139 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +7E +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR afii10148 +ENCODING 1140 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +44 +44 +48 +28 +28 +28 +10 +10 +00 +00 +ENDCHAR +STARTCHAR afii10196 +ENCODING 1141 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +44 +48 +28 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni0476 +ENCODING 1142 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +48 +24 +00 +42 +44 +48 +28 +28 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni0477 +ENCODING 1143 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +48 +24 +00 +42 +44 +48 +28 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni0478 +ENCODING 1144 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +A0 +A0 +AA +AA +AA +AA +AA +46 +02 +0C +ENDCHAR +STARTCHAR uni0479 +ENCODING 1145 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +4A +AA +AA +AA +AA +46 +02 +0C +ENDCHAR +STARTCHAR uni047A +ENCODING 1146 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +7C +92 +82 +82 +82 +82 +82 +92 +7C +10 +00 +ENDCHAR +STARTCHAR uni047B +ENCODING 1147 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +7C +92 +82 +82 +92 +7C +10 +00 +ENDCHAR +STARTCHAR uni047C +ENCODING 1148 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +04 +7C +40 +00 +6C +82 +92 +92 +92 +92 +6C +00 +00 +ENDCHAR +STARTCHAR uni047D +ENCODING 1149 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +04 +7C +40 +00 +00 +6C +82 +92 +92 +92 +6C +00 +00 +ENDCHAR +STARTCHAR uni047E +ENCODING 1150 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +7C +10 +00 +6C +82 +92 +92 +92 +92 +6C +00 +00 +ENDCHAR +STARTCHAR uni047F +ENCODING 1151 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +7C +10 +00 +00 +92 +92 +92 +54 +54 +28 +00 +00 +ENDCHAR +STARTCHAR uni0480 +ENCODING 1152 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +40 +40 +40 +40 +40 +3C +04 +0E +ENDCHAR +STARTCHAR uni0481 +ENCODING 1153 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +40 +40 +3C +04 +04 +00 +ENDCHAR +STARTCHAR uni0482 +ENCODING 1154 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +14 +08 +54 +20 +50 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0483 +ENCODING 1155 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +02 +7E +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0484 +ENCODING 1156 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +38 +46 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0485 +ENCODING 1157 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +78 +66 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0486 +ENCODING 1158 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +1E +66 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0488 +ENCODING 1160 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +40 +A4 +0A +00 +00 +00 +00 +00 +00 +00 +40 +A4 +0A +ENDCHAR +STARTCHAR uni0489 +ENCODING 1161 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +24 +48 +6C +00 +00 +00 +00 +00 +00 +20 +44 +68 +0C +ENDCHAR +STARTCHAR uni048A +ENCODING 1162 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +84 +78 +00 +84 +8C +94 +A4 +C4 +84 +86 +02 +04 +ENDCHAR +STARTCHAR uni048B +ENCODING 1163 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +84 +78 +00 +84 +8C +94 +A4 +C4 +86 +02 +04 +ENDCHAR +STARTCHAR uni048C +ENCODING 1164 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +78 +20 +20 +3C +22 +22 +22 +3C +00 +00 +ENDCHAR +STARTCHAR uni048D +ENCODING 1165 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +78 +20 +3C +22 +3C +00 +00 +ENDCHAR +STARTCHAR uni048E +ENCODING 1166 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +42 +42 +4A +44 +7A +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni048F +ENCODING 1167 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7C +42 +4A +44 +7A +40 +40 +40 +ENDCHAR +STARTCHAR afii10050 +ENCODING 1168 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +02 +7E +40 +40 +40 +40 +40 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR afii10098 +ENCODING 1169 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +02 +7E +40 +40 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni0492 +ENCODING 1170 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3E +22 +20 +20 +70 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni0493 +ENCODING 1171 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3E +22 +70 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni0494 +ENCODING 1172 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +40 +40 +40 +7C +42 +42 +42 +E2 +0C +00 +ENDCHAR +STARTCHAR uni0495 +ENCODING 1173 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +40 +7C +42 +42 +E2 +0C +00 +ENDCHAR +STARTCHAR uni0496 +ENCODING 1174 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +92 +92 +54 +38 +54 +92 +92 +92 +93 +01 +01 +ENDCHAR +STARTCHAR uni0497 +ENCODING 1175 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +92 +92 +7C +54 +92 +93 +01 +01 +ENDCHAR +STARTCHAR uni0498 +ENCODING 1176 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +02 +02 +1C +02 +02 +42 +3C +10 +20 +ENDCHAR +STARTCHAR uni0499 +ENCODING 1177 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +1C +02 +42 +3C +10 +20 +ENDCHAR +STARTCHAR uni049A +ENCODING 1178 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +44 +48 +50 +60 +50 +48 +44 +42 +02 +02 +ENDCHAR +STARTCHAR uni049B +ENCODING 1179 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +48 +50 +60 +50 +48 +44 +04 +04 +ENDCHAR +STARTCHAR uni049C +ENCODING 1180 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +54 +54 +78 +54 +54 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni049D +ENCODING 1181 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +54 +78 +54 +44 +42 +00 +00 +ENDCHAR +STARTCHAR uni049E +ENCODING 1182 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +22 +74 +28 +30 +30 +30 +28 +24 +22 +00 +00 +ENDCHAR +STARTCHAR uni049F +ENCODING 1183 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +20 +72 +24 +28 +30 +28 +24 +22 +00 +00 +ENDCHAR +STARTCHAR uni04A0 +ENCODING 1184 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +62 +24 +28 +30 +30 +30 +28 +24 +22 +00 +00 +ENDCHAR +STARTCHAR uni04A1 +ENCODING 1185 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +64 +28 +30 +28 +24 +22 +00 +00 +ENDCHAR +STARTCHAR uni04A2 +ENCODING 1186 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +44 +44 +44 +7C +44 +44 +44 +46 +02 +02 +ENDCHAR +STARTCHAR uni04A3 +ENCODING 1187 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +44 +7C +44 +44 +46 +02 +02 +ENDCHAR +STARTCHAR uni04A4 +ENCODING 1188 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +4E +48 +48 +48 +78 +48 +48 +48 +48 +00 +00 +ENDCHAR +STARTCHAR uni04A5 +ENCODING 1189 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +4E +48 +78 +48 +48 +48 +00 +00 +ENDCHAR +STARTCHAR uni04A6 +ENCODING 1190 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +F0 +90 +90 +90 +9C +92 +92 +92 +92 +02 +0C +ENDCHAR +STARTCHAR uni04A7 +ENCODING 1191 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +F0 +90 +9C +92 +92 +92 +02 +0C +ENDCHAR +STARTCHAR uni04A8 +ENCODING 1192 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +40 +4C +52 +52 +52 +3C +10 +0E +00 +ENDCHAR +STARTCHAR uni04A9 +ENCODING 1193 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +40 +4C +52 +3C +10 +0E +00 +ENDCHAR +STARTCHAR uni04AA +ENCODING 1194 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +40 +40 +40 +40 +40 +42 +3C +10 +18 +ENDCHAR +STARTCHAR uni04AB +ENCODING 1195 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +40 +40 +42 +3C +10 +18 +ENDCHAR +STARTCHAR uni04AC +ENCODING 1196 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +10 +10 +10 +10 +10 +10 +10 +18 +08 +08 +ENDCHAR +STARTCHAR uni04AD +ENCODING 1197 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +FE +92 +10 +10 +10 +18 +08 +08 +ENDCHAR +STARTCHAR uni04AE +ENCODING 1198 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +82 +44 +28 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni04AF +ENCODING 1199 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +82 +82 +44 +28 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni04B0 +ENCODING 1200 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +82 +44 +28 +10 +7C +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni04B1 +ENCODING 1201 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +82 +82 +44 +28 +10 +7C +10 +10 +ENDCHAR +STARTCHAR uni04B2 +ENCODING 1202 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +44 +28 +28 +10 +28 +28 +44 +46 +02 +02 +ENDCHAR +STARTCHAR uni04B3 +ENCODING 1203 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +28 +10 +28 +44 +46 +02 +02 +ENDCHAR +STARTCHAR uni04B4 +ENCODING 1204 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +72 +22 +22 +22 +22 +22 +22 +22 +3E +02 +02 +ENDCHAR +STARTCHAR uni04B5 +ENCODING 1205 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +72 +22 +22 +22 +22 +3E +02 +02 +ENDCHAR +STARTCHAR uni04B6 +ENCODING 1206 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +44 +44 +44 +4C +34 +04 +04 +06 +02 +02 +ENDCHAR +STARTCHAR uni04B7 +ENCODING 1207 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +44 +4C +34 +04 +06 +02 +02 +ENDCHAR +STARTCHAR uni04B8 +ENCODING 1208 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +42 +52 +56 +3A +12 +12 +02 +00 +00 +ENDCHAR +STARTCHAR uni04B9 +ENCODING 1209 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +42 +56 +3A +12 +02 +00 +00 +ENDCHAR +STARTCHAR uni04BA +ENCODING 1210 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +5C +62 +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni04BB +ENCODING 1211 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +20 +20 +20 +2C +32 +22 +22 +22 +00 +00 +ENDCHAR +STARTCHAR uni04BC +ENCODING 1212 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1C +22 +A2 +A2 +7E +20 +20 +22 +1C +00 +00 +ENDCHAR +STARTCHAR uni04BD +ENCODING 1213 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +9C +A2 +7E +20 +22 +1C +00 +00 +ENDCHAR +STARTCHAR uni04BE +ENCODING 1214 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1C +22 +A2 +A2 +7E +20 +20 +22 +1C +08 +0C +ENDCHAR +STARTCHAR uni04BF +ENCODING 1215 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +9C +A2 +7E +20 +22 +1C +08 +0C +ENDCHAR +STARTCHAR uni04C0 +ENCODING 1216 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1C +08 +08 +08 +08 +08 +08 +08 +1C +00 +00 +ENDCHAR +STARTCHAR uni04C1 +ENCODING 1217 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +44 +38 +00 +92 +92 +54 +38 +54 +92 +92 +92 +00 +00 +ENDCHAR +STARTCHAR uni04C2 +ENCODING 1218 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +38 +00 +92 +92 +7C +54 +92 +92 +00 +00 +ENDCHAR +STARTCHAR uni04C3 +ENCODING 1219 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +44 +48 +50 +60 +50 +48 +44 +42 +02 +1C +ENDCHAR +STARTCHAR uni04C4 +ENCODING 1220 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +48 +70 +48 +44 +44 +04 +18 +ENDCHAR +STARTCHAR uni04C5 +ENCODING 1221 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +44 +44 +44 +44 +44 +44 +84 +86 +02 +04 +ENDCHAR +STARTCHAR uni04C6 +ENCODING 1222 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +44 +44 +44 +44 +86 +02 +04 +ENDCHAR +STARTCHAR uni04C7 +ENCODING 1223 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +42 +42 +7E +42 +42 +42 +42 +02 +1C +ENDCHAR +STARTCHAR uni04C8 +ENCODING 1224 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +42 +7E +42 +42 +42 +02 +1C +ENDCHAR +STARTCHAR uni04C9 +ENCODING 1225 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +84 +84 +84 +84 +FC +84 +84 +84 +86 +02 +04 +ENDCHAR +STARTCHAR uni04CA +ENCODING 1226 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +84 +84 +FC +84 +84 +86 +02 +04 +ENDCHAR +STARTCHAR uni04CB +ENCODING 1227 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +42 +42 +46 +3A +02 +02 +06 +04 +04 +ENDCHAR +STARTCHAR uni04CC +ENCODING 1228 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +42 +46 +3A +02 +06 +04 +04 +ENDCHAR +STARTCHAR uni04CD +ENCODING 1229 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +82 +C6 +AA +92 +92 +82 +82 +83 +01 +02 +ENDCHAR +STARTCHAR uni04CE +ENCODING 1230 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +6C +54 +54 +44 +46 +02 +04 +ENDCHAR +STARTCHAR uni04D0 +ENCODING 1232 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +42 +3C +00 +18 +24 +42 +42 +7E +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni04D1 +ENCODING 1233 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +3C +00 +3C +02 +3E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR uni04D2 +ENCODING 1234 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +24 +00 +18 +24 +42 +42 +7E +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni04D3 +ENCODING 1235 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +24 +00 +1C +02 +3E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR uni04D4 +ENCODING 1236 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +6E +90 +90 +90 +9C +F0 +90 +90 +9E +00 +00 +ENDCHAR +STARTCHAR uni04D5 +ENCODING 1237 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7C +12 +7C +90 +92 +6C +00 +00 +ENDCHAR +STARTCHAR uni04D6 +ENCODING 1238 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +42 +3C +00 +7E +40 +40 +7C +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR uni04D7 +ENCODING 1239 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +3C +00 +3C +42 +7E +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni04D8 +ENCODING 1240 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +02 +02 +7E +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR afii10846 +ENCODING 1241 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +02 +7E +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni04DA +ENCODING 1242 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +24 +00 +3C +42 +02 +7E +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni04DB +ENCODING 1243 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +24 +00 +3C +42 +02 +7E +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni04DC +ENCODING 1244 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +28 +28 +00 +92 +92 +54 +38 +54 +92 +92 +92 +00 +00 +ENDCHAR +STARTCHAR uni04DD +ENCODING 1245 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +28 +28 +00 +92 +92 +7C +54 +92 +92 +00 +00 +ENDCHAR +STARTCHAR uni04DE +ENCODING 1246 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +24 +00 +3C +42 +02 +1C +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni04DF +ENCODING 1247 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +24 +00 +3C +42 +1C +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni04E0 +ENCODING 1248 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +02 +04 +08 +1C +02 +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni04E1 +ENCODING 1249 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +04 +08 +1C +02 +02 +42 +3C +ENDCHAR +STARTCHAR uni04E2 +ENCODING 1250 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +00 +42 +46 +4A +52 +62 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni04E3 +ENCODING 1251 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +7E +00 +42 +46 +4A +52 +62 +42 +00 +00 +ENDCHAR +STARTCHAR uni04E4 +ENCODING 1252 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +24 +00 +42 +46 +4A +52 +62 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni04E5 +ENCODING 1253 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +24 +00 +42 +46 +4A +52 +62 +42 +00 +00 +ENDCHAR +STARTCHAR uni04E6 +ENCODING 1254 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +24 +00 +3C +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni04E7 +ENCODING 1255 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +24 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni04E8 +ENCODING 1256 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +42 +7E +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni04E9 +ENCODING 1257 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +7E +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni04EA +ENCODING 1258 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +24 +00 +3C +42 +42 +7E +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni04EB +ENCODING 1259 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +24 +00 +3C +42 +7E +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni04EC +ENCODING 1260 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +28 +00 +78 +04 +02 +02 +3E +02 +02 +04 +78 +00 +00 +ENDCHAR +STARTCHAR uni04ED +ENCODING 1261 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +14 +00 +3C +02 +0E +02 +02 +3C +00 +00 +ENDCHAR +STARTCHAR uni04EE +ENCODING 1262 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +00 +42 +42 +46 +3A +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni04EF +ENCODING 1263 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +7E +00 +42 +42 +42 +46 +3A +02 +42 +3C +ENDCHAR +STARTCHAR uni04F0 +ENCODING 1264 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +24 +00 +42 +42 +46 +3A +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni04F1 +ENCODING 1265 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +24 +00 +42 +42 +42 +46 +3A +02 +42 +3C +ENDCHAR +STARTCHAR uni04F2 +ENCODING 1266 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +12 +24 +00 +42 +42 +46 +3A +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni04F3 +ENCODING 1267 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +12 +24 +00 +42 +42 +42 +46 +3A +02 +42 +3C +ENDCHAR +STARTCHAR uni04F4 +ENCODING 1268 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +24 +00 +42 +42 +46 +3A +02 +02 +02 +00 +00 +ENDCHAR +STARTCHAR uni04F5 +ENCODING 1269 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +24 +00 +42 +42 +46 +3A +02 +02 +00 +00 +ENDCHAR +STARTCHAR uni04F8 +ENCODING 1272 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +24 +00 +42 +42 +72 +4A +4A +4A +72 +00 +00 +ENDCHAR +STARTCHAR uni04F9 +ENCODING 1273 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +24 +00 +42 +42 +72 +4A +4A +72 +00 +00 +ENDCHAR +STARTCHAR uni0500 +ENCODING 1280 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +02 +02 +3E +42 +42 +42 +42 +3E +00 +00 +ENDCHAR +STARTCHAR uni0501 +ENCODING 1281 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +04 +04 +3C +44 +44 +44 +44 +3C +00 +00 +ENDCHAR +STARTCHAR uni0502 +ENCODING 1282 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +08 +08 +78 +88 +8A +8A +8A +7C +00 +00 +ENDCHAR +STARTCHAR uni0503 +ENCODING 1283 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +08 +08 +38 +48 +48 +4A +4A +3C +00 +00 +ENDCHAR +STARTCHAR uni0504 +ENCODING 1284 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +70 +88 +08 +08 +30 +0A +0A +0A +04 +00 +00 +ENDCHAR +STARTCHAR uni0505 +ENCODING 1285 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +30 +48 +08 +32 +0A +04 +00 +00 +ENDCHAR +STARTCHAR uni0506 +ENCODING 1286 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +44 +04 +04 +04 +18 +04 +04 +06 +02 +04 +ENDCHAR +STARTCHAR uni0507 +ENCODING 1287 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +44 +04 +18 +04 +06 +02 +04 +ENDCHAR +STARTCHAR uni0508 +ENCODING 1288 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +48 +48 +48 +48 +4A +4A +4A +84 +00 +00 +ENDCHAR +STARTCHAR uni0509 +ENCODING 1289 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +48 +48 +4A +4A +84 +00 +00 +ENDCHAR +STARTCHAR uni050A +ENCODING 1290 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +88 +88 +88 +88 +F8 +8A +8A +8A +84 +00 +00 +ENDCHAR +STARTCHAR uni050B +ENCODING 1291 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +88 +88 +F8 +8A +8A +84 +00 +00 +ENDCHAR +STARTCHAR uni050C +ENCODING 1292 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1C +22 +40 +40 +40 +46 +42 +22 +1C +00 +00 +ENDCHAR +STARTCHAR uni050D +ENCODING 1293 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +40 +46 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni050E +ENCODING 1294 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +10 +10 +10 +10 +14 +14 +14 +08 +00 +00 +ENDCHAR +STARTCHAR uni050F +ENCODING 1295 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7C +10 +10 +14 +14 +08 +00 +00 +ENDCHAR +STARTCHAR uni0531 +ENCODING 1329 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +88 +88 +88 +88 +88 +88 +9C +8A +72 +00 +00 +ENDCHAR +STARTCHAR uni0532 +ENCODING 1330 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +40 +40 +7C +42 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni0533 +ENCODING 1331 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +70 +88 +88 +88 +88 +7C +0A +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni0534 +ENCODING 1332 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +70 +88 +88 +08 +0C +0A +08 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni0535 +ENCODING 1333 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +7C +42 +40 +40 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni0536 +ENCODING 1334 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +42 +3C +04 +08 +7C +42 +00 +00 +ENDCHAR +STARTCHAR uni0537 +ENCODING 1335 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +7C +42 +40 +40 +40 +7C +02 +00 +ENDCHAR +STARTCHAR uni0538 +ENCODING 1336 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +42 +40 +40 +40 +40 +7C +02 +00 +ENDCHAR +STARTCHAR uni0539 +ENCODING 1337 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +78 +84 +84 +84 +9E +A4 +A4 +A4 +98 +00 +00 +ENDCHAR +STARTCHAR uni053A +ENCODING 1338 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +04 +04 +7E +84 +84 +84 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni053B +ENCODING 1339 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +7C +42 +42 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni053C +ENCODING 1340 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +40 +40 +40 +40 +40 +7C +02 +04 +ENDCHAR +STARTCHAR uni053D +ENCODING 1341 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +80 +80 +80 +F2 +92 +92 +92 +92 +8C +00 +00 +ENDCHAR +STARTCHAR uni053E +ENCODING 1342 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +18 +24 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni053F +ENCODING 1343 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +42 +42 +42 +46 +3A +02 +02 +00 +00 +ENDCHAR +STARTCHAR uni0540 +ENCODING 1344 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +08 +10 +20 +40 +60 +18 +06 +00 +00 +ENDCHAR +STARTCHAR uni0541 +ENCODING 1345 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +42 +02 +02 +3C +44 +3A +00 +00 +ENDCHAR +STARTCHAR uni0542 +ENCODING 1346 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +70 +88 +88 +88 +08 +08 +08 +08 +0C +02 +00 +ENDCHAR +STARTCHAR uni0543 +ENCODING 1347 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +32 +10 +28 +44 +44 +82 +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni0544 +ENCODING 1348 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +8C +8A +8A +88 +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni0545 +ENCODING 1349 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +44 +04 +78 +84 +02 +02 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni0546 +ENCODING 1350 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +E0 +20 +20 +20 +20 +22 +22 +22 +1C +00 +00 +ENDCHAR +STARTCHAR uni0547 +ENCODING 1351 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +60 +18 +26 +40 +40 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni0548 +ENCODING 1352 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +42 +42 +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni0549 +ENCODING 1353 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +42 +02 +02 +64 +18 +06 +00 +00 +ENDCHAR +STARTCHAR uni054A +ENCODING 1354 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +92 +92 +92 +12 +12 +02 +02 +02 +00 +00 +ENDCHAR +STARTCHAR uni054B +ENCODING 1355 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +44 +42 +22 +12 +0C +08 +7C +22 +00 +00 +ENDCHAR +STARTCHAR uni054C +ENCODING 1356 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +70 +88 +88 +8C +8A +8A +88 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni054D +ENCODING 1357 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +42 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni054E +ENCODING 1358 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +08 +88 +88 +88 +78 +08 +08 +0C +02 +02 +ENDCHAR +STARTCHAR uni054F +ENCODING 1359 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +40 +40 +3C +02 +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni0550 +ENCODING 1360 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +40 +40 +40 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni0551 +ENCODING 1361 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +44 +44 +38 +C4 +02 +02 +82 +7C +00 +00 +ENDCHAR +STARTCHAR uni0552 +ENCODING 1362 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +78 +44 +40 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni0553 +ENCODING 1363 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +7C +92 +92 +92 +92 +92 +7C +10 +00 +00 +ENDCHAR +STARTCHAR uni0554 +ENCODING 1364 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1C +22 +22 +22 +22 +3C +A0 +7C +22 +00 +00 +ENDCHAR +STARTCHAR uni0555 +ENCODING 1365 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +44 +82 +82 +82 +82 +82 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni0556 +ENCODING 1366 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +60 +90 +90 +7C +12 +12 +92 +92 +7C +00 +00 +ENDCHAR +STARTCHAR uni0559 +ENCODING 1369 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +20 +40 +40 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni055A +ENCODING 1370 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +20 +10 +10 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni055B +ENCODING 1371 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni055C +ENCODING 1372 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +04 +38 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni055D +ENCODING 1373 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni055E +ENCODING 1374 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +44 +54 +48 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni055F +ENCODING 1375 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +60 +44 +38 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0561 +ENCODING 1377 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +82 +92 +92 +92 +92 +6E +00 +00 +ENDCHAR +STARTCHAR uni0562 +ENCODING 1378 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +42 +42 +40 +7E +40 +40 +ENDCHAR +STARTCHAR uni0563 +ENCODING 1379 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +34 +4C +44 +44 +44 +3E +04 +04 +ENDCHAR +STARTCHAR uni0564 +ENCODING 1380 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +58 +64 +44 +44 +44 +46 +04 +04 +ENDCHAR +STARTCHAR uni0565 +ENCODING 1381 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +7E +40 +42 +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR uni0566 +ENCODING 1382 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +34 +4C +44 +44 +4C +34 +04 +06 +ENDCHAR +STARTCHAR uni0567 +ENCODING 1383 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +7C +40 +40 +40 +40 +40 +3C +02 +04 +ENDCHAR +STARTCHAR uni0568 +ENCODING 1384 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +5C +62 +42 +42 +42 +42 +40 +7E +ENDCHAR +STARTCHAR uni0569 +ENCODING 1385 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +58 +64 +44 +4E +54 +48 +40 +40 +ENDCHAR +STARTCHAR uni056A +ENCODING 1386 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +04 +04 +3E +44 +44 +44 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni056B +ENCODING 1387 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +58 +64 +44 +44 +44 +44 +40 +40 +ENDCHAR +STARTCHAR uni056C +ENCODING 1388 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +30 +10 +10 +10 +10 +10 +10 +0C +ENDCHAR +STARTCHAR uni056D +ENCODING 1389 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +40 +72 +52 +52 +52 +4E +40 +40 +ENDCHAR +STARTCHAR uni056E +ENCODING 1390 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +70 +08 +04 +3E +44 +44 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni056F +ENCODING 1391 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +40 +42 +42 +42 +46 +3A +02 +02 +ENDCHAR +STARTCHAR uni0570 +ENCODING 1392 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +5C +62 +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni0571 +ENCODING 1393 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +08 +3C +42 +42 +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR uni0572 +ENCODING 1394 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +58 +64 +44 +44 +44 +44 +04 +06 +ENDCHAR +STARTCHAR uni0573 +ENCODING 1395 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1C +22 +20 +7C +22 +22 +22 +26 +3A +00 +00 +ENDCHAR +STARTCHAR uni0574 +ENCODING 1396 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +0A +08 +44 +44 +44 +44 +4C +34 +00 +00 +ENDCHAR +STARTCHAR uni0575 +ENCODING 1397 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +0C +04 +04 +04 +04 +04 +04 +38 +ENDCHAR +STARTCHAR uni0576 +ENCODING 1398 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +40 +40 +22 +22 +22 +22 +26 +1A +00 +00 +ENDCHAR +STARTCHAR uni0577 +ENCODING 1399 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +44 +04 +08 +10 +20 +40 +3C +ENDCHAR +STARTCHAR uni0578 +ENCODING 1400 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +5C +62 +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni0579 +ENCODING 1401 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +20 +10 +08 +10 +20 +40 +40 +3E +ENDCHAR +STARTCHAR uni057A +ENCODING 1402 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +82 +92 +92 +92 +92 +6E +02 +02 +ENDCHAR +STARTCHAR uni057B +ENCODING 1403 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +42 +42 +34 +08 +10 +1E +ENDCHAR +STARTCHAR uni057C +ENCODING 1404 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +5C +62 +42 +44 +48 +5C +00 +00 +ENDCHAR +STARTCHAR uni057D +ENCODING 1405 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +42 +42 +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR uni057E +ENCODING 1406 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +04 +04 +44 +44 +44 +44 +4C +34 +04 +06 +ENDCHAR +STARTCHAR uni057F +ENCODING 1407 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +94 +9A +92 +92 +B2 +52 +10 +10 +ENDCHAR +STARTCHAR uni0580 +ENCODING 1408 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +5C +62 +42 +42 +42 +42 +42 +40 +40 +ENDCHAR +STARTCHAR uni0581 +ENCODING 1409 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +42 +42 +3E +02 +42 +3C +ENDCHAR +STARTCHAR uni0582 +ENCODING 1410 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +30 +10 +10 +10 +10 +0C +00 +00 +ENDCHAR +STARTCHAR uni0583 +ENCODING 1411 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +94 +9A +92 +92 +B2 +52 +10 +10 +ENDCHAR +STARTCHAR uni0584 +ENCODING 1412 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1C +22 +20 +20 +7C +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni0585 +ENCODING 1413 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni0586 +ENCODING 1414 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +70 +90 +90 +7C +12 +92 +92 +92 +7C +10 +10 +ENDCHAR +STARTCHAR uni0587 +ENCODING 1415 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +44 +44 +44 +44 +44 +3A +00 +00 +ENDCHAR +STARTCHAR uni0589 +ENCODING 1417 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +18 +18 +00 +18 +18 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni058A +ENCODING 1418 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +60 +44 +38 +00 +00 +00 +00 +ENDCHAR +STARTCHAR afii57799 +ENCODING 1456 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +10 +ENDCHAR +STARTCHAR afii57801 +ENCODING 1457 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +DB +00 +33 +ENDCHAR +STARTCHAR afii57800 +ENCODING 1458 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +76 +00 +06 +ENDCHAR +STARTCHAR afii57802 +ENCODING 1459 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +76 +20 +26 +ENDCHAR +STARTCHAR afii57793 +ENCODING 1460 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +00 +ENDCHAR +STARTCHAR afii57794 +ENCODING 1461 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6C +00 +ENDCHAR +STARTCHAR afii57795 +ENCODING 1462 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +CC +00 +30 +ENDCHAR +STARTCHAR afii57798 +ENCODING 1463 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +78 +00 +ENDCHAR +STARTCHAR afii57797 +ENCODING 1464 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7C +10 +10 +ENDCHAR +STARTCHAR afii57806 +ENCODING 1465 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR afii57796 +ENCODING 1467 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +10 +04 +ENDCHAR +STARTCHAR afii57807 +ENCODING 1468 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR afii57839 +ENCODING 1469 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +10 +ENDCHAR +STARTCHAR afii57645 +ENCODING 1470 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3E +7C +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR afii57841 +ENCODING 1471 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +3C +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR afii57842 +ENCODING 1472 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR afii57804 +ENCODING 1473 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +0C +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR afii57803 +ENCODING 1474 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR afii57658 +ENCODING 1475 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +10 +00 +00 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni05C4 +ENCODING 1476 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR afii57664 +ENCODING 1488 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +44 +22 +12 +2C +44 +42 +62 +00 +00 +ENDCHAR +STARTCHAR afii57665 +ENCODING 1489 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7C +04 +04 +04 +04 +04 +7E +00 +00 +ENDCHAR +STARTCHAR afii57666 +ENCODING 1490 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +30 +08 +08 +04 +0C +12 +62 +00 +00 +ENDCHAR +STARTCHAR afii57667 +ENCODING 1491 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +04 +04 +04 +04 +04 +04 +00 +00 +ENDCHAR +STARTCHAR afii57668 +ENCODING 1492 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +02 +02 +22 +22 +22 +22 +00 +00 +ENDCHAR +STARTCHAR afii57669 +ENCODING 1493 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +18 +08 +08 +08 +08 +08 +08 +00 +00 +ENDCHAR +STARTCHAR afii57670 +ENCODING 1494 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7C +10 +10 +08 +08 +08 +08 +00 +00 +ENDCHAR +STARTCHAR afii57671 +ENCODING 1495 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +22 +22 +22 +22 +22 +22 +00 +00 +ENDCHAR +STARTCHAR afii57672 +ENCODING 1496 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +46 +4A +42 +42 +42 +44 +78 +00 +00 +ENDCHAR +STARTCHAR afii57673 +ENCODING 1497 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +18 +08 +08 +08 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR afii57674 +ENCODING 1498 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +02 +02 +02 +02 +02 +02 +02 +02 +ENDCHAR +STARTCHAR afii57675 +ENCODING 1499 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +02 +02 +02 +02 +04 +78 +00 +00 +ENDCHAR +STARTCHAR afii57676 +ENCODING 1500 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +7E +02 +02 +02 +04 +08 +30 +00 +00 +ENDCHAR +STARTCHAR afii57677 +ENCODING 1501 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +22 +22 +22 +22 +22 +3E +00 +00 +ENDCHAR +STARTCHAR afii57678 +ENCODING 1502 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +4C +52 +22 +42 +42 +42 +5E +00 +00 +ENDCHAR +STARTCHAR afii57679 +ENCODING 1503 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +18 +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR afii57680 +ENCODING 1504 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +06 +02 +02 +02 +02 +02 +3E +00 +00 +ENDCHAR +STARTCHAR afii57681 +ENCODING 1505 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +22 +22 +22 +22 +24 +38 +00 +00 +ENDCHAR +STARTCHAR afii57682 +ENCODING 1506 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +66 +22 +22 +22 +22 +24 +78 +00 +00 +ENDCHAR +STARTCHAR afii57683 +ENCODING 1507 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +22 +22 +22 +02 +02 +02 +02 +02 +ENDCHAR +STARTCHAR afii57684 +ENCODING 1508 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +22 +22 +22 +02 +04 +78 +00 +00 +ENDCHAR +STARTCHAR afii57685 +ENCODING 1509 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +44 +22 +22 +22 +24 +38 +20 +20 +20 +ENDCHAR +STARTCHAR afii57686 +ENCODING 1510 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +44 +22 +12 +0C +04 +02 +7E +00 +00 +ENDCHAR +STARTCHAR afii57687 +ENCODING 1511 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +02 +02 +42 +42 +44 +58 +40 +40 +ENDCHAR +STARTCHAR afii57688 +ENCODING 1512 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +02 +02 +02 +02 +02 +02 +00 +00 +ENDCHAR +STARTCHAR afii57689 +ENCODING 1513 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +49 +49 +49 +49 +71 +42 +7C +00 +00 +ENDCHAR +STARTCHAR afii57690 +ENCODING 1514 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +22 +22 +22 +22 +22 +62 +00 +00 +ENDCHAR +STARTCHAR afii57716 +ENCODING 1520 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +66 +22 +22 +22 +22 +22 +22 +00 +00 +ENDCHAR +STARTCHAR afii57717 +ENCODING 1521 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +66 +22 +22 +02 +02 +02 +02 +00 +00 +ENDCHAR +STARTCHAR afii57718 +ENCODING 1522 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +66 +22 +22 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni05F3 +ENCODING 1523 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +08 +10 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni05F4 +ENCODING 1524 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +24 +48 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0E01 +ENCODING 3585 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +62 +22 +22 +22 +00 +00 +ENDCHAR +STARTCHAR uni0E02 +ENCODING 3586 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +74 +74 +14 +64 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni0E03 +ENCODING 3587 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +4A +7A +0A +32 +22 +1C +00 +00 +ENDCHAR +STARTCHAR uni0E04 +ENCODING 3588 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +5A +5A +52 +32 +00 +00 +ENDCHAR +STARTCHAR uni0E05 +ENCODING 3589 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +34 +4A +5A +5A +52 +32 +00 +00 +ENDCHAR +STARTCHAR uni0E06 +ENCODING 3590 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +52 +72 +12 +22 +72 +6C +00 +00 +ENDCHAR +STARTCHAR uni0E07 +ENCODING 3591 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +0C +0C +44 +24 +24 +1C +00 +00 +ENDCHAR +STARTCHAR uni0E08 +ENCODING 3592 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +1A +1A +0A +0C +00 +00 +ENDCHAR +STARTCHAR uni0E09 +ENCODING 3593 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +04 +64 +64 +2E +36 +00 +00 +ENDCHAR +STARTCHAR uni0E0A +ENCODING 3594 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +04 +64 +68 +24 +44 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni0E0B +ENCODING 3595 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +02 +52 +74 +12 +22 +22 +1C +00 +00 +ENDCHAR +STARTCHAR uni0E0C +ENCODING 3596 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +39 +45 +25 +45 +6F +6D +00 +00 +ENDCHAR +STARTCHAR uni0E0D +ENCODING 3597 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +32 +4A +2A +4E +68 +6E +00 +00 +ENDCHAR +STARTCHAR uni0E0E +ENCODING 3598 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +22 +22 +62 +6A +12 +2E +ENDCHAR +STARTCHAR uni0E0F +ENCODING 3599 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +22 +22 +62 +6A +1E +2A +ENDCHAR +STARTCHAR uni0E10 +ENCODING 3600 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3E +40 +3C +32 +32 +0C +2A +56 +ENDCHAR +STARTCHAR uni0E11 +ENCODING 3601 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +54 +7A +12 +22 +22 +22 +00 +00 +ENDCHAR +STARTCHAR uni0E12 +ENCODING 3602 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +29 +55 +45 +75 +5F +6D +00 +00 +ENDCHAR +STARTCHAR uni0E13 +ENCODING 3603 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +32 +4A +2A +4A +6F +6B +00 +00 +ENDCHAR +STARTCHAR uni0E14 +ENCODING 3604 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +5A +5A +4A +32 +00 +00 +ENDCHAR +STARTCHAR uni0E15 +ENCODING 3605 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +34 +4A +5A +5A +4A +32 +00 +00 +ENDCHAR +STARTCHAR uni0E16 +ENCODING 3606 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +62 +22 +32 +32 +00 +00 +ENDCHAR +STARTCHAR uni0E17 +ENCODING 3607 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +64 +6A +32 +22 +22 +22 +00 +00 +ENDCHAR +STARTCHAR uni0E18 +ENCODING 3608 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3E +40 +7C +22 +22 +1C +00 +00 +ENDCHAR +STARTCHAR uni0E19 +ENCODING 3609 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +64 +64 +24 +44 +4E +36 +00 +00 +ENDCHAR +STARTCHAR uni0E1A +ENCODING 3610 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +62 +62 +22 +22 +22 +1C +00 +00 +ENDCHAR +STARTCHAR uni0E1B +ENCODING 3611 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +02 +02 +62 +62 +22 +22 +22 +1C +00 +00 +ENDCHAR +STARTCHAR uni0E1C +ENCODING 3612 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +62 +62 +42 +4A +4A +34 +00 +00 +ENDCHAR +STARTCHAR uni0E1D +ENCODING 3613 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +02 +02 +62 +62 +42 +4A +4A +34 +00 +00 +ENDCHAR +STARTCHAR uni0E1E +ENCODING 3614 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +6A +6A +2A +2A +2A +14 +00 +00 +ENDCHAR +STARTCHAR uni0E1F +ENCODING 3615 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +02 +02 +6A +6A +2A +2A +2A +14 +00 +00 +ENDCHAR +STARTCHAR uni0E20 +ENCODING 3616 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +62 +22 +62 +62 +00 +00 +ENDCHAR +STARTCHAR uni0E21 +ENCODING 3617 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +62 +62 +22 +22 +72 +6C +00 +00 +ENDCHAR +STARTCHAR uni0E22 +ENCODING 3618 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +62 +62 +42 +32 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni0E23 +ENCODING 3619 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +78 +04 +0C +0C +00 +00 +ENDCHAR +STARTCHAR uni0E24 +ENCODING 3620 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +62 +22 +32 +32 +02 +02 +ENDCHAR +STARTCHAR uni0E25 +ENCODING 3621 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +1A +26 +32 +32 +00 +00 +ENDCHAR +STARTCHAR uni0E26 +ENCODING 3622 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +62 +22 +62 +62 +02 +02 +ENDCHAR +STARTCHAR uni0E27 +ENCODING 3623 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +02 +02 +06 +06 +00 +00 +ENDCHAR +STARTCHAR uni0E28 +ENCODING 3624 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +02 +02 +3C +42 +5A +5A +52 +32 +00 +00 +ENDCHAR +STARTCHAR uni0E29 +ENCODING 3625 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +62 +62 +2A +2E +22 +1C +00 +00 +ENDCHAR +STARTCHAR uni0E2A +ENCODING 3626 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +02 +02 +3C +42 +1A +26 +32 +32 +00 +00 +ENDCHAR +STARTCHAR uni0E2B +ENCODING 3627 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +66 +66 +24 +2A +32 +22 +00 +00 +ENDCHAR +STARTCHAR uni0E2C +ENCODING 3628 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +02 +02 +6C +62 +2A +2A +2A +14 +00 +00 +ENDCHAR +STARTCHAR uni0E2D +ENCODING 3629 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +32 +32 +22 +1C +00 +00 +ENDCHAR +STARTCHAR uni0E2E +ENCODING 3630 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +02 +02 +3C +7A +32 +32 +22 +1C +00 +00 +ENDCHAR +STARTCHAR uni0E2F +ENCODING 3631 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +66 +7A +02 +02 +02 +04 +00 +00 +ENDCHAR +STARTCHAR uni0E30 +ENCODING 3632 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +64 +78 +00 +64 +78 +00 +00 +ENDCHAR +STARTCHAR uni0E31 +ENCODING 3633 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +7C +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0E32 +ENCODING 3634 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +02 +02 +02 +02 +00 +00 +ENDCHAR +STARTCHAR uni0E33 +ENCODING 3635 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +60 +60 +1C +22 +02 +02 +02 +02 +00 +00 +ENDCHAR +STARTCHAR uni0E34 +ENCODING 3636 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +7E +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0E35 +ENCODING 3637 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +7E +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0E36 +ENCODING 3638 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +06 +7E +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0E37 +ENCODING 3639 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +0A +7E +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0E38 +ENCODING 3640 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +02 +ENDCHAR +STARTCHAR uni0E39 +ENCODING 3641 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1A +0E +ENDCHAR +STARTCHAR uni0E3A +ENCODING 3642 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0C +0C +ENDCHAR +STARTCHAR uni0E3F +ENCODING 3647 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +14 +7C +56 +56 +7C +56 +56 +7C +14 +00 +ENDCHAR +STARTCHAR uni0E40 +ENCODING 3648 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +10 +10 +10 +18 +18 +00 +00 +ENDCHAR +STARTCHAR uni0E41 +ENCODING 3649 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +24 +24 +24 +24 +36 +36 +00 +00 +ENDCHAR +STARTCHAR uni0E42 +ENCODING 3650 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3E +40 +7C +04 +04 +04 +06 +06 +00 +00 +ENDCHAR +STARTCHAR uni0E43 +ENCODING 3651 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +38 +44 +54 +34 +04 +04 +06 +06 +00 +00 +ENDCHAR +STARTCHAR uni0E44 +ENCODING 3652 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +6C +14 +04 +04 +04 +04 +06 +06 +00 +00 +ENDCHAR +STARTCHAR uni0E45 +ENCODING 3653 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +02 +02 +02 +02 +02 +02 +ENDCHAR +STARTCHAR uni0E46 +ENCODING 3654 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +74 +6A +02 +02 +02 +02 +04 +08 +ENDCHAR +STARTCHAR uni0E47 +ENCODING 3655 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +02 +3C +54 +2C +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0E48 +ENCODING 3656 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +02 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0E49 +ENCODING 3657 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +34 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0E4A +ENCODING 3658 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +2A +3C +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0E4B +ENCODING 3659 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +02 +07 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0E4C +ENCODING 3660 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +06 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0E4D +ENCODING 3661 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +06 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0E4E +ENCODING 3662 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +07 +04 +08 +0C +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni0E4F +ENCODING 3663 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +38 +44 +54 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni0E50 +ENCODING 3664 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +3C +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni0E51 +ENCODING 3665 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +3C +5A +3A +02 +3C +00 +00 +ENDCHAR +STARTCHAR uni0E52 +ENCODING 3666 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +40 +40 +4A +56 +5A +5A +3C +00 +00 +ENDCHAR +STARTCHAR uni0E53 +ENCODING 3667 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +34 +4A +4A +6A +6A +00 +00 +ENDCHAR +STARTCHAR uni0E54 +ENCODING 3668 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +02 +02 +3C +40 +4C +4C +3E +00 +00 +ENDCHAR +STARTCHAR uni0E55 +ENCODING 3669 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +02 +1A +3C +40 +4C +4C +3E +00 +00 +ENDCHAR +STARTCHAR uni0E56 +ENCODING 3670 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +40 +2C +12 +02 +1A +1C +00 +00 +ENDCHAR +STARTCHAR uni0E57 +ENCODING 3671 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +02 +02 +2A +5A +4A +4A +64 +00 +00 +ENDCHAR +STARTCHAR uni0E58 +ENCODING 3672 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +02 +3C +40 +46 +76 +2C +00 +00 +ENDCHAR +STARTCHAR uni0E59 +ENCODING 3673 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +02 +02 +0C +38 +48 +74 +32 +00 +00 +ENDCHAR +STARTCHAR uni0E5A +ENCODING 3674 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +6A +7A +0A +0A +0A +14 +00 +00 +ENDCHAR +STARTCHAR uni0E5B +ENCODING 3675 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +60 +60 +56 +58 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni10A0 +ENCODING 4256 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +10 +20 +40 +40 +40 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni10A1 +ENCODING 4257 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +88 +88 +88 +98 +68 +08 +08 +08 +0E +00 +00 +ENDCHAR +STARTCHAR uni10A2 +ENCODING 4258 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +F8 +88 +88 +88 +08 +08 +08 +08 +08 +0E +02 +02 +ENDCHAR +STARTCHAR uni10A3 +ENCODING 4259 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +10 +6C +82 +82 +82 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR uni10A4 +ENCODING 4260 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +42 +42 +02 +02 +02 +02 +02 +02 +00 +00 +ENDCHAR +STARTCHAR uni10A5 +ENCODING 4261 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +F8 +88 +88 +0E +0A +0A +08 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni10A6 +ENCODING 4262 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +E0 +20 +20 +2C +32 +22 +22 +22 +1C +00 +00 +ENDCHAR +STARTCHAR uni10A7 +ENCODING 4263 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +48 +88 +8E +8A +8A +88 +48 +38 +00 +00 +ENDCHAR +STARTCHAR uni10A8 +ENCODING 4264 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +02 +02 +02 +02 +02 +02 +02 +02 +00 +00 +ENDCHAR +STARTCHAR uni10A9 +ENCODING 4265 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +58 +64 +42 +26 +1A +02 +02 +00 +00 +ENDCHAR +STARTCHAR uni10AA +ENCODING 4266 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +E0 +A0 +A0 +2C +32 +22 +22 +22 +1C +00 +00 +ENDCHAR +STARTCHAR uni10AB +ENCODING 4267 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +F8 +08 +08 +7E +88 +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni10AC +ENCODING 4268 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +40 +40 +40 +7E +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni10AD +ENCODING 4269 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +60 +90 +90 +90 +90 +90 +90 +92 +6E +00 +00 +ENDCHAR +STARTCHAR uni10AE +ENCODING 4270 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +E2 +22 +22 +22 +22 +22 +22 +22 +1C +00 +00 +ENDCHAR +STARTCHAR uni10AF +ENCODING 4271 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +E2 +22 +22 +22 +26 +1A +02 +02 +02 +00 +00 +ENDCHAR +STARTCHAR uni10B0 +ENCODING 4272 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +08 +08 +0E +0A +8A +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni10B1 +ENCODING 4273 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +40 +40 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni10B2 +ENCODING 4274 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +42 +42 +42 +7C +40 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR uni10B3 +ENCODING 4275 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +90 +90 +90 +90 +90 +90 +94 +9A +62 +00 +00 +ENDCHAR +STARTCHAR uni10B4 +ENCODING 4276 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +92 +92 +92 +7C +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni10B5 +ENCODING 4277 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +90 +90 +FE +12 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni10B6 +ENCODING 4278 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +42 +42 +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni10B7 +ENCODING 4279 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +22 +42 +42 +46 +3A +02 +02 +02 +02 +00 +00 +ENDCHAR +STARTCHAR uni10B8 +ENCODING 4280 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +22 +42 +42 +46 +3A +02 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni10B9 +ENCODING 4281 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +7E +42 +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni10BA +ENCODING 4282 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +40 +40 +40 +40 +40 +42 +3C +04 +04 +ENDCHAR +STARTCHAR uni10BB +ENCODING 4283 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +08 +08 +3E +4A +4A +48 +48 +30 +00 +00 +ENDCHAR +STARTCHAR uni10BC +ENCODING 4284 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +42 +42 +7C +40 +78 +48 +48 +40 +00 +00 +ENDCHAR +STARTCHAR uni10BD +ENCODING 4285 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +40 +40 +3C +02 +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni10BE +ENCODING 4286 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +42 +42 +7E +40 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR uni10BF +ENCODING 4287 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +42 +22 +14 +08 +14 +22 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni10C0 +ENCODING 4288 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +E0 +A0 +A0 +20 +20 +22 +22 +22 +1C +00 +00 +ENDCHAR +STARTCHAR uni10C1 +ENCODING 4289 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +78 +46 +40 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni10C2 +ENCODING 4290 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +40 +40 +3C +02 +02 +42 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni10C3 +ENCODING 4291 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +22 +42 +46 +3A +02 +02 +02 +02 +00 +00 +ENDCHAR +STARTCHAR uni10C4 +ENCODING 4292 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +82 +82 +82 +7C +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni10C5 +ENCODING 4293 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1C +12 +1C +10 +7C +92 +90 +90 +60 +00 +00 +ENDCHAR +STARTCHAR uni10D0 +ENCODING 4304 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +10 +0C +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni10D1 +ENCODING 4305 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +30 +10 +10 +38 +44 +44 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni10D2 +ENCODING 4306 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +30 +48 +48 +08 +3C +42 +42 +42 +3C +ENDCHAR +STARTCHAR uni10D3 +ENCODING 4307 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +3C +52 +52 +4C +40 +38 +04 +ENDCHAR +STARTCHAR uni10D4 +ENCODING 4308 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +3C +42 +42 +02 +02 +02 +42 +42 +3C +ENDCHAR +STARTCHAR uni10D5 +ENCODING 4309 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +3C +42 +42 +1C +02 +02 +42 +42 +3C +ENDCHAR +STARTCHAR uni10D6 +ENCODING 4310 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +50 +54 +38 +1C +12 +12 +12 +0C +00 +00 +ENDCHAR +STARTCHAR uni10D7 +ENCODING 4311 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +34 +4A +4A +4A +32 +00 +00 +ENDCHAR +STARTCHAR uni10D8 +ENCODING 4312 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +3C +42 +42 +42 +24 +00 +00 +ENDCHAR +STARTCHAR uni10D9 +ENCODING 4313 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +0C +02 +02 +1C +02 +02 +42 +42 +3C +ENDCHAR +STARTCHAR uni10DA +ENCODING 4314 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +54 +AA +AA +82 +84 +70 +08 +ENDCHAR +STARTCHAR uni10DB +ENCODING 4315 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +02 +3E +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni10DC +ENCODING 4316 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3E +40 +40 +40 +7C +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni10DD +ENCODING 4317 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +28 +54 +54 +54 +44 +00 +00 +ENDCHAR +STARTCHAR uni10DE +ENCODING 4318 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +0C +02 +02 +1C +02 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni10DF +ENCODING 4319 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +06 +0A +52 +52 +22 +02 +22 +1C +ENDCHAR +STARTCHAR uni10E0 +ENCODING 4320 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +04 +38 +40 +68 +54 +54 +54 +44 +00 +00 +ENDCHAR +STARTCHAR uni10E1 +ENCODING 4321 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +48 +50 +48 +44 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni10E2 +ENCODING 4322 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +24 +3C +66 +66 +5A +42 +42 +42 +3C +ENDCHAR +STARTCHAR uni10E3 +ENCODING 4323 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +6C +12 +12 +02 +02 +02 +22 +22 +1C +ENDCHAR +STARTCHAR uni10E4 +ENCODING 4324 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +34 +4A +4A +34 +02 +12 +0C +ENDCHAR +STARTCHAR uni10E5 +ENCODING 4325 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +0C +04 +04 +1C +24 +04 +04 +04 +44 +38 +ENDCHAR +STARTCHAR uni10E6 +ENCODING 4326 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +28 +54 +54 +44 +40 +38 +04 +ENDCHAR +STARTCHAR uni10E7 +ENCODING 4327 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +22 +42 +46 +3A +02 +42 +3C +ENDCHAR +STARTCHAR uni10E8 +ENCODING 4328 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +28 +54 +54 +54 +44 +1C +24 +24 +18 +00 +00 +ENDCHAR +STARTCHAR uni10E9 +ENCODING 4329 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +48 +48 +70 +40 +5C +62 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni10EA +ENCODING 4330 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +4C +42 +42 +5C +42 +42 +42 +42 +3C +ENDCHAR +STARTCHAR uni10EB +ENCODING 4331 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +0C +02 +02 +02 +3E +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni10EC +ENCODING 4332 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +28 +54 +54 +40 +40 +7C +44 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uni10ED +ENCODING 4333 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +18 +28 +08 +2A +5C +2A +08 +08 +48 +30 +ENDCHAR +STARTCHAR uni10EE +ENCODING 4334 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +48 +50 +78 +44 +44 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni10EF +ENCODING 4335 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +44 +28 +10 +28 +44 +20 +40 +ENDCHAR +STARTCHAR uni10F0 +ENCODING 4336 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +20 +1C +02 +1C +02 +02 +1C +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni10F1 +ENCODING 4337 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +58 +44 +42 +5C +42 +42 +5C +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni10F2 +ENCODING 4338 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +42 +42 +24 +7E +00 +00 +ENDCHAR +STARTCHAR uni10F3 +ENCODING 4339 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +04 +08 +1C +02 +02 +42 +3C +ENDCHAR +STARTCHAR uni10F4 +ENCODING 4340 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +20 +1C +02 +02 +1C +02 +02 +42 +42 +3C +ENDCHAR +STARTCHAR uni10F5 +ENCODING 4341 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +44 +44 +3E +04 +3E +44 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni10F6 +ENCODING 4342 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +20 +10 +10 +38 +54 +54 +38 +10 +10 +08 +ENDCHAR +STARTCHAR uni10F7 +ENCODING 4343 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1C +22 +02 +0C +30 +40 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni10F8 +ENCODING 4344 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +42 +7C +40 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni10FB +ENCODING 4347 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +60 +60 +0C +0C +60 +60 +00 +00 +00 +ENDCHAR +STARTCHAR uni16A0 +ENCODING 5792 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +12 +14 +18 +12 +14 +18 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni16A1 +ENCODING 5793 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +04 +00 +12 +14 +18 +12 +14 +18 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni16A2 +ENCODING 5794 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +70 +48 +44 +44 +42 +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni16A3 +ENCODING 5795 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +60 +50 +48 +44 +54 +54 +54 +54 +54 +00 +00 +ENDCHAR +STARTCHAR uni16A4 +ENCODING 5796 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +70 +48 +44 +44 +52 +52 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni16A5 +ENCODING 5797 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +70 +48 +44 +64 +52 +4A +4A +4A +4A +00 +00 +ENDCHAR +STARTCHAR uni16A6 +ENCODING 5798 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +1C +12 +12 +12 +1C +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni16A7 +ENCODING 5799 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +20 +3C +22 +2A +22 +3C +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16A8 +ENCODING 5800 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +28 +24 +30 +28 +24 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16A9 +ENCODING 5801 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +68 +50 +44 +68 +50 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni16AA +ENCODING 5802 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +68 +50 +40 +60 +50 +48 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni16AB +ENCODING 5803 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +60 +50 +48 +60 +50 +48 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni16AC +ENCODING 5804 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +50 +30 +18 +54 +30 +18 +14 +10 +00 +00 +ENDCHAR +STARTCHAR uni16AD +ENCODING 5805 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +20 +30 +28 +24 +30 +28 +24 +20 +00 +00 +ENDCHAR +STARTCHAR uni16AE +ENCODING 5806 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +04 +0C +14 +24 +0C +14 +24 +04 +00 +00 +ENDCHAR +STARTCHAR uni16AF +ENCODING 5807 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +14 +18 +30 +54 +18 +30 +50 +10 +00 +00 +ENDCHAR +STARTCHAR uni16B0 +ENCODING 5808 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +14 +18 +30 +50 +10 +30 +50 +10 +00 +00 +ENDCHAR +STARTCHAR uni16B1 +ENCODING 5809 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +28 +24 +28 +30 +28 +24 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16B2 +ENCODING 5810 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +08 +10 +20 +10 +08 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni16B3 +ENCODING 5811 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +20 +20 +20 +20 +20 +30 +28 +24 +00 +00 +ENDCHAR +STARTCHAR uni16B4 +ENCODING 5812 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +22 +22 +22 +24 +38 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16B5 +ENCODING 5813 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +2A +2A +22 +24 +38 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16B6 +ENCODING 5814 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +22 +22 +22 +74 +78 +70 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16B7 +ENCODING 5815 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +44 +28 +28 +10 +28 +28 +44 +44 +00 +00 +ENDCHAR +STARTCHAR uni16B8 +ENCODING 5816 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +44 +38 +28 +54 +28 +38 +44 +44 +00 +00 +ENDCHAR +STARTCHAR uni16B9 +ENCODING 5817 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +60 +50 +48 +50 +60 +40 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni16BA +ENCODING 5818 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +44 +44 +64 +54 +4C +44 +44 +44 +00 +00 +ENDCHAR +STARTCHAR uni16BB +ENCODING 5819 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +44 +64 +54 +4C +64 +54 +4C +44 +00 +00 +ENDCHAR +STARTCHAR uni16BC +ENCODING 5820 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +54 +38 +10 +38 +54 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni16BD +ENCODING 5821 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +38 +38 +38 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni16BE +ENCODING 5822 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +50 +30 +10 +18 +14 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni16BF +ENCODING 5823 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +10 +18 +14 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni16C0 +ENCODING 5824 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +50 +38 +38 +38 +14 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni16C1 +ENCODING 5825 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni16C2 +ENCODING 5826 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +38 +38 +38 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni16C3 +ENCODING 5827 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +20 +48 +24 +12 +04 +08 +00 +00 +00 +ENDCHAR +STARTCHAR uni16C4 +ENCODING 5828 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +38 +54 +92 +54 +38 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni16C5 +ENCODING 5829 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +14 +18 +10 +30 +50 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni16C6 +ENCODING 5830 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +08 +08 +08 +18 +28 +48 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni16C7 +ENCODING 5831 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +18 +14 +12 +10 +90 +50 +30 +10 +00 +00 +ENDCHAR +STARTCHAR uni16C8 +ENCODING 5832 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +68 +50 +40 +40 +40 +50 +68 +44 +00 +00 +ENDCHAR +STARTCHAR uni16C9 +ENCODING 5833 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +92 +54 +38 +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni16CA +ENCODING 5834 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +20 +10 +08 +10 +20 +10 +08 +00 +00 +ENDCHAR +STARTCHAR uni16CB +ENCODING 5835 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +44 +4C +54 +64 +44 +04 +04 +00 +00 +ENDCHAR +STARTCHAR uni16CC +ENCODING 5836 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +10 +10 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni16CD +ENCODING 5837 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +10 +38 +38 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni16CE +ENCODING 5838 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +54 +38 +10 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni16CF +ENCODING 5839 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +38 +54 +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni16D0 +ENCODING 5840 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +0C +14 +24 +04 +04 +04 +04 +04 +00 +00 +ENDCHAR +STARTCHAR uni16D1 +ENCODING 5841 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +0C +14 +24 +0E +0E +04 +04 +04 +00 +00 +ENDCHAR +STARTCHAR uni16D2 +ENCODING 5842 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +60 +50 +48 +50 +60 +50 +48 +50 +60 +00 +00 +ENDCHAR +STARTCHAR uni16D3 +ENCODING 5843 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +24 +28 +30 +24 +28 +30 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16D4 +ENCODING 5844 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +78 +44 +54 +44 +78 +44 +54 +44 +78 +00 +00 +ENDCHAR +STARTCHAR uni16D5 +ENCODING 5845 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +44 +48 +50 +60 +50 +48 +44 +42 +00 +00 +ENDCHAR +STARTCHAR uni16D6 +ENCODING 5846 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +C6 +AA +92 +82 +82 +82 +82 +82 +00 +00 +ENDCHAR +STARTCHAR uni16D7 +ENCODING 5847 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +C6 +AA +92 +AA +C6 +82 +82 +82 +00 +00 +ENDCHAR +STARTCHAR uni16D8 +ENCODING 5848 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +92 +92 +92 +7C +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni16D9 +ENCODING 5849 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +38 +10 +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni16DA +ENCODING 5850 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +30 +28 +24 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16DB +ENCODING 5851 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +30 +28 +24 +70 +70 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni16DC +ENCODING 5852 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +28 +44 +28 +10 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni16DD +ENCODING 5853 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +28 +10 +28 +44 +28 +10 +28 +44 +00 +00 +ENDCHAR +STARTCHAR uni16DE +ENCODING 5854 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +82 +C6 +AA +92 +AA +C6 +82 +82 +00 +00 +ENDCHAR +STARTCHAR uni16DF +ENCODING 5855 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +28 +44 +28 +10 +28 +44 +44 +44 +00 +00 +ENDCHAR +STARTCHAR uni16E0 +ENCODING 5856 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +92 +BA +54 +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni16E1 +ENCODING 5857 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +92 +54 +38 +10 +38 +54 +92 +10 +00 +00 +ENDCHAR +STARTCHAR uni16E2 +ENCODING 5858 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1A +14 +10 +10 +10 +10 +10 +50 +B0 +00 +00 +ENDCHAR +STARTCHAR uni16E3 +ENCODING 5859 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +10 +10 +10 +38 +54 +92 +00 +00 +ENDCHAR +STARTCHAR uni16E4 +ENCODING 5860 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +92 +92 +54 +38 +54 +38 +54 +92 +92 +00 +00 +ENDCHAR +STARTCHAR uni16E5 +ENCODING 5861 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +6C +54 +6C +44 +6C +54 +6C +44 +00 +00 +ENDCHAR +STARTCHAR uni16E6 +ENCODING 5862 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +10 +10 +7C +92 +92 +92 +00 +00 +ENDCHAR +STARTCHAR uni16E7 +ENCODING 5863 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni16E8 +ENCODING 5864 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +38 +54 +10 +10 +10 +54 +38 +10 +00 +00 +ENDCHAR +STARTCHAR uni16E9 +ENCODING 5865 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +28 +48 +28 +18 +08 +08 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni16EA +ENCODING 5866 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +E0 +44 +4C +54 +64 +44 +0E +04 +00 +00 +ENDCHAR +STARTCHAR uni16EB +ENCODING 5867 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni16EC +ENCODING 5868 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +00 +10 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni16ED +ENCODING 5869 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +38 +10 +54 +7C +54 +10 +38 +00 +00 +00 +ENDCHAR +STARTCHAR uni16EE +ENCODING 5870 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +18 +14 +10 +30 +50 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni16EF +ENCODING 5871 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +92 +92 +92 +7C +10 +7C +92 +92 +92 +00 +00 +ENDCHAR +STARTCHAR uni16F0 +ENCODING 5872 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +7C +92 +92 +92 +7C +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni1E00 +ENCODING 7680 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +42 +42 +42 +7E +42 +42 +18 +24 +18 +ENDCHAR +STARTCHAR uni1E01 +ENCODING 7681 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +3C +02 +3E +42 +46 +3A +18 +24 +18 +ENDCHAR +STARTCHAR uni1E02 +ENCODING 7682 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +00 +7C +42 +42 +7C +42 +42 +42 +7C +00 +00 +ENDCHAR +STARTCHAR uni1E03 +ENCODING 7683 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +40 +40 +40 +5C +62 +42 +42 +62 +5C +00 +00 +ENDCHAR +STARTCHAR uni1E04 +ENCODING 7684 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +78 +44 +42 +44 +78 +44 +42 +44 +78 +00 +18 +ENDCHAR +STARTCHAR uni1E05 +ENCODING 7685 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +5C +62 +42 +42 +62 +5C +00 +18 +ENDCHAR +STARTCHAR uni1E06 +ENCODING 7686 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +78 +44 +42 +44 +78 +44 +42 +44 +78 +00 +7C +ENDCHAR +STARTCHAR uni1E07 +ENCODING 7687 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +5C +62 +42 +42 +62 +5C +00 +7E +ENDCHAR +STARTCHAR uni1E08 +ENCODING 7688 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +00 +3C +42 +40 +40 +40 +42 +3C +08 +10 +ENDCHAR +STARTCHAR uni1E09 +ENCODING 7689 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +3C +42 +40 +40 +42 +3C +08 +10 +ENDCHAR +STARTCHAR uni1E0A +ENCODING 7690 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +00 +78 +44 +42 +42 +42 +42 +44 +78 +00 +00 +ENDCHAR +STARTCHAR uni1E0B +ENCODING 7691 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +02 +02 +02 +3A +46 +42 +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR uni1E0C +ENCODING 7692 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +78 +44 +42 +42 +42 +42 +42 +44 +78 +00 +18 +ENDCHAR +STARTCHAR uni1E0D +ENCODING 7693 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +02 +02 +3A +46 +42 +42 +46 +3A +00 +18 +ENDCHAR +STARTCHAR uni1E0E +ENCODING 7694 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +78 +44 +42 +42 +42 +42 +42 +44 +78 +00 +7C +ENDCHAR +STARTCHAR uni1E0F +ENCODING 7695 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +02 +02 +3A +46 +42 +42 +46 +3A +00 +7E +ENDCHAR +STARTCHAR uni1E10 +ENCODING 7696 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +78 +44 +42 +42 +42 +42 +42 +44 +78 +08 +10 +ENDCHAR +STARTCHAR uni1E11 +ENCODING 7697 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +02 +02 +3A +46 +42 +42 +46 +3A +08 +10 +ENDCHAR +STARTCHAR uni1E12 +ENCODING 7698 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +78 +44 +42 +42 +42 +42 +42 +44 +78 +18 +24 +ENDCHAR +STARTCHAR uni1E13 +ENCODING 7699 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +02 +3A +46 +42 +42 +46 +3A +00 +18 +24 +ENDCHAR +STARTCHAR uni1E14 +ENCODING 7700 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +08 +3C +00 +7E +40 +40 +78 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR uni1E15 +ENCODING 7701 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +08 +00 +3C +00 +3C +42 +7E +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1E16 +ENCODING 7702 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +08 +10 +3C +00 +7E +40 +40 +78 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR uni1E17 +ENCODING 7703 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +08 +10 +00 +3C +00 +3C +42 +7E +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1E18 +ENCODING 7704 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +40 +40 +78 +40 +40 +40 +7E +00 +18 +24 +ENDCHAR +STARTCHAR uni1E19 +ENCODING 7705 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +3C +42 +7E +40 +42 +3C +00 +18 +24 +ENDCHAR +STARTCHAR uni1E1A +ENCODING 7706 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +40 +40 +78 +40 +40 +40 +7E +00 +32 +4C +ENDCHAR +STARTCHAR uni1E1B +ENCODING 7707 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +3C +42 +7E +40 +42 +3C +00 +32 +4C +ENDCHAR +STARTCHAR uni1E1C +ENCODING 7708 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +42 +3C +00 +7E +40 +40 +78 +40 +40 +7E +08 +10 +ENDCHAR +STARTCHAR uni1E1D +ENCODING 7709 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +3C +00 +3C +42 +7E +40 +42 +3C +08 +10 +ENDCHAR +STARTCHAR uni1E1E +ENCODING 7710 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +00 +7E +40 +40 +78 +40 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni1E1F +ENCODING 7711 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +00 +1C +22 +20 +7C +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni1E20 +ENCODING 7712 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +7E +00 +3C +42 +40 +40 +4E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR uni1E21 +ENCODING 7713 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +7E +00 +3A +44 +44 +38 +40 +3C +42 +3C +ENDCHAR +STARTCHAR uni1E22 +ENCODING 7714 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +00 +42 +42 +42 +7E +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni1E23 +ENCODING 7715 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +40 +40 +40 +5C +62 +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni1E24 +ENCODING 7716 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +42 +42 +7E +42 +42 +42 +42 +00 +18 +ENDCHAR +STARTCHAR uni1E25 +ENCODING 7717 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +5C +62 +42 +42 +42 +42 +00 +18 +ENDCHAR +STARTCHAR uni1E26 +ENCODING 7718 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +24 +00 +42 +42 +42 +7E +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni1E27 +ENCODING 7719 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +24 +00 +40 +40 +5C +62 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni1E28 +ENCODING 7720 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +42 +42 +7E +42 +42 +42 +42 +04 +08 +ENDCHAR +STARTCHAR uni1E29 +ENCODING 7721 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +5C +62 +42 +42 +42 +42 +04 +08 +ENDCHAR +STARTCHAR uni1E2A +ENCODING 7722 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +42 +7E +42 +42 +42 +42 +00 +42 +3C +ENDCHAR +STARTCHAR uni1E2B +ENCODING 7723 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +5C +62 +42 +42 +42 +00 +42 +3C +ENDCHAR +STARTCHAR uni1E2C +ENCODING 7724 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3E +08 +08 +08 +08 +08 +08 +3E +00 +32 +4C +ENDCHAR +STARTCHAR uni1E2D +ENCODING 7725 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +18 +00 +18 +08 +08 +08 +3E +00 +32 +4C +ENDCHAR +STARTCHAR uni1E2E +ENCODING 7726 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +08 +10 +44 +00 +7C +10 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR uni1E2F +ENCODING 7727 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +08 +10 +00 +48 +00 +30 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR uni1E30 +ENCODING 7728 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +08 +10 +42 +44 +48 +50 +60 +50 +48 +44 +42 +00 +00 +ENDCHAR +STARTCHAR uni1E31 +ENCODING 7729 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +04 +48 +40 +40 +44 +48 +70 +48 +44 +42 +00 +00 +ENDCHAR +STARTCHAR uni1E32 +ENCODING 7730 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +44 +48 +50 +60 +50 +48 +44 +42 +00 +18 +ENDCHAR +STARTCHAR uni1E33 +ENCODING 7731 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +44 +48 +70 +48 +44 +42 +00 +18 +ENDCHAR +STARTCHAR uni1E34 +ENCODING 7732 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +44 +48 +50 +60 +50 +48 +44 +42 +00 +7E +ENDCHAR +STARTCHAR uni1E35 +ENCODING 7733 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +44 +48 +70 +48 +44 +42 +00 +7E +ENDCHAR +STARTCHAR uni1E36 +ENCODING 7734 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +40 +40 +40 +40 +40 +7E +00 +18 +ENDCHAR +STARTCHAR uni1E37 +ENCODING 7735 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +10 +10 +10 +10 +10 +10 +10 +7C +00 +18 +ENDCHAR +STARTCHAR uni1E38 +ENCODING 7736 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +7E +00 +40 +40 +40 +40 +40 +40 +40 +7E +00 +18 +ENDCHAR +STARTCHAR uni1E39 +ENCODING 7737 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +7C +00 +30 +10 +10 +10 +10 +10 +10 +7C +00 +18 +ENDCHAR +STARTCHAR uni1E3A +ENCODING 7738 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +40 +40 +40 +40 +40 +7E +00 +7E +ENDCHAR +STARTCHAR uni1E3B +ENCODING 7739 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +10 +10 +10 +10 +10 +10 +10 +7C +00 +7C +ENDCHAR +STARTCHAR uni1E3C +ENCODING 7740 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +40 +40 +40 +40 +7E +00 +18 +24 +ENDCHAR +STARTCHAR uni1E3D +ENCODING 7741 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +10 +10 +10 +10 +10 +10 +7C +00 +10 +28 +ENDCHAR +STARTCHAR uni1E3E +ENCODING 7742 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +82 +C6 +AA +92 +92 +82 +82 +82 +00 +00 +ENDCHAR +STARTCHAR uni1E3F +ENCODING 7743 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +EC +92 +92 +92 +92 +82 +00 +00 +ENDCHAR +STARTCHAR uni1E40 +ENCODING 7744 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +30 +00 +82 +C6 +AA +92 +82 +82 +82 +82 +00 +00 +ENDCHAR +STARTCHAR uni1E41 +ENCODING 7745 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +00 +EC +92 +92 +92 +92 +82 +00 +00 +ENDCHAR +STARTCHAR uni1E42 +ENCODING 7746 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +82 +C6 +AA +92 +92 +82 +82 +82 +10 +10 +ENDCHAR +STARTCHAR uni1E43 +ENCODING 7747 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +EC +92 +92 +92 +92 +82 +10 +10 +ENDCHAR +STARTCHAR uni1E44 +ENCODING 7748 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +00 +42 +42 +62 +52 +4A +46 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni1E45 +ENCODING 7749 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +18 +00 +5C +62 +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni1E46 +ENCODING 7750 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +62 +52 +4A +46 +42 +42 +42 +00 +18 +ENDCHAR +STARTCHAR uni1E47 +ENCODING 7751 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +5C +62 +42 +42 +42 +42 +00 +18 +ENDCHAR +STARTCHAR uni1E48 +ENCODING 7752 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +62 +52 +4A +46 +42 +42 +42 +00 +7E +ENDCHAR +STARTCHAR uni1E49 +ENCODING 7753 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +5C +62 +42 +42 +42 +42 +00 +7E +ENDCHAR +STARTCHAR uni1E4A +ENCODING 7754 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +62 +52 +4A +46 +42 +42 +00 +18 +24 +ENDCHAR +STARTCHAR uni1E4B +ENCODING 7755 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +5C +62 +42 +42 +42 +42 +18 +24 +ENDCHAR +STARTCHAR uni1E4C +ENCODING 7756 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +04 +08 +32 +4C +00 +7C +82 +82 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR uni1E4D +ENCODING 7757 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +04 +08 +00 +32 +4C +00 +3C +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1E4E +ENCODING 7758 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +24 +00 +32 +4C +00 +7C +82 +82 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR uni1E4F +ENCODING 7759 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +00 +32 +4C +00 +3C +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1E50 +ENCODING 7760 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +20 +10 +7C +00 +7C +82 +82 +82 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR uni1E51 +ENCODING 7761 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +20 +10 +00 +3C +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1E52 +ENCODING 7762 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +08 +10 +7C +00 +7C +82 +82 +82 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR uni1E53 +ENCODING 7763 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +04 +08 +00 +3C +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1E54 +ENCODING 7764 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +00 +7C +42 +42 +7C +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni1E55 +ENCODING 7765 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +5C +62 +42 +62 +5C +40 +40 +40 +ENDCHAR +STARTCHAR uni1E56 +ENCODING 7766 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +00 +7C +42 +42 +7C +40 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni1E57 +ENCODING 7767 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +18 +00 +5C +62 +42 +62 +5C +40 +40 +40 +ENDCHAR +STARTCHAR uni1E58 +ENCODING 7768 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +00 +7C +42 +42 +7C +50 +48 +44 +42 +00 +00 +ENDCHAR +STARTCHAR uni1E59 +ENCODING 7769 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +18 +00 +5C +22 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni1E5A +ENCODING 7770 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +42 +42 +42 +7C +50 +48 +44 +42 +00 +18 +ENDCHAR +STARTCHAR uni1E5B +ENCODING 7771 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +5C +22 +20 +20 +20 +20 +00 +18 +ENDCHAR +STARTCHAR uni1E5C +ENCODING 7772 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +3C +00 +7C +42 +42 +7C +50 +48 +44 +42 +00 +18 +ENDCHAR +STARTCHAR uni1E5D +ENCODING 7773 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3C +00 +5C +22 +20 +20 +20 +20 +00 +18 +ENDCHAR +STARTCHAR uni1E5E +ENCODING 7774 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +42 +42 +42 +7C +50 +48 +44 +42 +00 +7E +ENDCHAR +STARTCHAR uni1E5F +ENCODING 7775 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +5C +22 +20 +20 +20 +20 +00 +7E +ENDCHAR +STARTCHAR uni1E60 +ENCODING 7776 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +00 +3C +42 +40 +3C +02 +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1E61 +ENCODING 7777 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +18 +00 +3C +42 +30 +0C +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1E62 +ENCODING 7778 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +40 +40 +3C +02 +02 +42 +3C +00 +18 +ENDCHAR +STARTCHAR uni1E63 +ENCODING 7779 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +30 +0C +42 +3C +00 +18 +ENDCHAR +STARTCHAR uni1E64 +ENCODING 7780 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +20 +08 +10 +00 +3C +42 +40 +3C +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1E65 +ENCODING 7781 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +20 +08 +10 +00 +3C +42 +30 +0C +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1E66 +ENCODING 7782 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +00 +24 +18 +3C +42 +40 +3C +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1E67 +ENCODING 7783 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +00 +24 +18 +00 +3C +42 +30 +0C +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1E68 +ENCODING 7784 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +00 +3C +42 +40 +3C +02 +02 +42 +3C +00 +18 +ENDCHAR +STARTCHAR uni1E69 +ENCODING 7785 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +18 +00 +3C +42 +30 +0C +42 +3C +00 +18 +ENDCHAR +STARTCHAR uni1E6A +ENCODING 7786 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +00 +FE +10 +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni1E6B +ENCODING 7787 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +30 +00 +20 +20 +7C +20 +20 +20 +22 +1C +00 +00 +ENDCHAR +STARTCHAR uni1E6C +ENCODING 7788 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +10 +10 +10 +10 +10 +10 +10 +10 +00 +10 +ENDCHAR +STARTCHAR uni1E6D +ENCODING 7789 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +20 +20 +7C +20 +20 +20 +22 +1C +00 +18 +ENDCHAR +STARTCHAR uni1E6E +ENCODING 7790 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +10 +10 +10 +10 +10 +10 +10 +10 +00 +FE +ENDCHAR +STARTCHAR uni1E6F +ENCODING 7791 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +20 +20 +7C +20 +20 +20 +22 +1C +00 +7E +ENDCHAR +STARTCHAR uni1E70 +ENCODING 7792 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +10 +10 +10 +10 +10 +10 +10 +00 +10 +28 +ENDCHAR +STARTCHAR uni1E71 +ENCODING 7793 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +20 +20 +7C +20 +20 +22 +1C +00 +18 +24 +ENDCHAR +STARTCHAR uni1E72 +ENCODING 7794 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +42 +42 +42 +42 +42 +42 +3C +00 +66 +ENDCHAR +STARTCHAR uni1E73 +ENCODING 7795 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +44 +44 +44 +44 +3A +00 +6C +ENDCHAR +STARTCHAR uni1E74 +ENCODING 7796 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +42 +42 +42 +42 +42 +3C +00 +32 +4C +ENDCHAR +STARTCHAR uni1E75 +ENCODING 7797 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +44 +44 +44 +3A +00 +32 +4C +ENDCHAR +STARTCHAR uni1E76 +ENCODING 7798 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +42 +42 +42 +42 +42 +3C +00 +18 +24 +ENDCHAR +STARTCHAR uni1E77 +ENCODING 7799 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +44 +44 +44 +3A +00 +18 +24 +ENDCHAR +STARTCHAR uni1E78 +ENCODING 7800 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +04 +08 +32 +4C +00 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1E79 +ENCODING 7801 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +04 +08 +00 +32 +4C +00 +44 +44 +44 +44 +3A +00 +00 +ENDCHAR +STARTCHAR uni1E7A +ENCODING 7802 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +24 +00 +3C +00 +42 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1E7B +ENCODING 7803 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +44 +00 +7C +00 +44 +44 +44 +44 +44 +3A +00 +00 +ENDCHAR +STARTCHAR uni1E7C +ENCODING 7804 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +32 +4C +00 +82 +82 +44 +44 +28 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni1E7D +ENCODING 7805 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +32 +4C +00 +22 +22 +22 +14 +14 +08 +00 +00 +ENDCHAR +STARTCHAR uni1E7E +ENCODING 7806 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +82 +44 +44 +44 +28 +28 +28 +10 +00 +10 +ENDCHAR +STARTCHAR uni1E7F +ENCODING 7807 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +44 +44 +28 +28 +10 +00 +10 +ENDCHAR +STARTCHAR Wgrave +ENCODING 7808 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +20 +10 +00 +82 +82 +92 +92 +92 +AA +44 +00 +00 +ENDCHAR +STARTCHAR wgrave +ENCODING 7809 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +10 +00 +82 +82 +92 +92 +AA +44 +00 +00 +ENDCHAR +STARTCHAR Wacute +ENCODING 7810 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +00 +82 +82 +92 +92 +92 +AA +44 +00 +00 +ENDCHAR +STARTCHAR wacute +ENCODING 7811 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +82 +82 +92 +92 +AA +44 +00 +00 +ENDCHAR +STARTCHAR Wdieresis +ENCODING 7812 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +44 +44 +00 +82 +82 +92 +92 +92 +AA +44 +00 +00 +ENDCHAR +STARTCHAR wdieresis +ENCODING 7813 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +44 +00 +82 +82 +92 +92 +AA +44 +00 +00 +ENDCHAR +STARTCHAR uni1E86 +ENCODING 7814 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +10 +82 +82 +82 +92 +92 +92 +AA +44 +00 +00 +ENDCHAR +STARTCHAR uni1E87 +ENCODING 7815 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +00 +82 +82 +92 +92 +AA +44 +00 +00 +ENDCHAR +STARTCHAR uni1E88 +ENCODING 7816 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +82 +82 +82 +92 +92 +92 +AA +44 +10 +10 +ENDCHAR +STARTCHAR uni1E89 +ENCODING 7817 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +82 +82 +92 +92 +AA +44 +10 +10 +ENDCHAR +STARTCHAR uni1E8A +ENCODING 7818 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +10 +00 +82 +44 +28 +10 +28 +44 +82 +00 +00 +ENDCHAR +STARTCHAR uni1E8B +ENCODING 7819 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +18 +00 +42 +24 +18 +18 +24 +42 +00 +00 +ENDCHAR +STARTCHAR uni1E8C +ENCODING 7820 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +44 +44 +00 +82 +44 +28 +10 +28 +44 +82 +00 +00 +ENDCHAR +STARTCHAR uni1E8D +ENCODING 7821 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +24 +00 +42 +24 +18 +18 +24 +42 +00 +00 +ENDCHAR +STARTCHAR uni1E8E +ENCODING 7822 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +10 +82 +82 +44 +28 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni1E8F +ENCODING 7823 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +18 +00 +42 +42 +42 +46 +3A +02 +42 +3C +ENDCHAR +STARTCHAR uni1E90 +ENCODING 7824 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +24 +00 +7E +02 +04 +08 +10 +20 +7E +00 +00 +ENDCHAR +STARTCHAR uni1E91 +ENCODING 7825 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +00 +7E +04 +08 +10 +20 +7E +00 +00 +ENDCHAR +STARTCHAR uni1E92 +ENCODING 7826 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +02 +04 +08 +10 +20 +40 +40 +7E +00 +18 +ENDCHAR +STARTCHAR uni1E93 +ENCODING 7827 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +04 +08 +10 +20 +7E +00 +18 +ENDCHAR +STARTCHAR uni1E94 +ENCODING 7828 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +02 +04 +08 +10 +20 +40 +40 +7E +00 +3C +ENDCHAR +STARTCHAR uni1E95 +ENCODING 7829 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +04 +08 +10 +20 +7E +00 +3C +ENDCHAR +STARTCHAR uni1E96 +ENCODING 7830 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +5C +62 +42 +42 +42 +42 +00 +3C +ENDCHAR +STARTCHAR uni1E97 +ENCODING 7831 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +12 +12 +00 +20 +20 +7C +20 +20 +22 +1C +00 +00 +ENDCHAR +STARTCHAR uni1E98 +ENCODING 7832 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +48 +30 +82 +82 +92 +92 +AA +44 +00 +00 +ENDCHAR +STARTCHAR uni1E99 +ENCODING 7833 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +18 +42 +42 +42 +46 +3A +02 +42 +3C +ENDCHAR +STARTCHAR uni1E9A +ENCODING 7834 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +04 +02 +02 +04 +00 +3C +02 +3E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR uni1E9B +ENCODING 7835 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +00 +18 +24 +20 +20 +60 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uni1EA0 +ENCODING 7840 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +42 +42 +42 +7E +42 +42 +42 +00 +18 +ENDCHAR +STARTCHAR uni1EA1 +ENCODING 7841 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +02 +3E +42 +46 +3A +00 +18 +ENDCHAR +STARTCHAR uni1EA2 +ENCODING 7842 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +24 +04 +08 +18 +24 +42 +42 +7E +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni1EA3 +ENCODING 7843 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +24 +04 +08 +3C +02 +3E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR uni1EA4 +ENCODING 7844 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +21 +52 +00 +18 +24 +42 +42 +7E +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni1EA5 +ENCODING 7845 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +A4 +00 +78 +04 +7C +84 +8C +74 +00 +00 +ENDCHAR +STARTCHAR uni1EA6 +ENCODING 7846 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +84 +4A +00 +18 +24 +42 +42 +7E +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni1EA7 +ENCODING 7847 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +84 +4A +00 +78 +04 +7C +84 +8C +74 +00 +00 +ENDCHAR +STARTCHAR uni1EA8 +ENCODING 7848 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +04 +4A +22 +04 +1C +24 +42 +42 +7E +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni1EA9 +ENCODING 7849 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +04 +4A +22 +04 +3C +02 +3E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR uni1EAA +ENCODING 7850 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +32 +4C +10 +28 +00 +18 +24 +42 +7E +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni1EAB +ENCODING 7851 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +32 +4C +10 +28 +00 +3C +02 +3E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR uni1EAC +ENCODING 7852 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +24 +00 +18 +24 +42 +42 +7E +42 +42 +00 +18 +ENDCHAR +STARTCHAR uni1EAD +ENCODING 7853 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +00 +3C +02 +3E +42 +46 +3A +00 +18 +ENDCHAR +STARTCHAR uni1EAE +ENCODING 7854 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +08 +52 +3C +00 +18 +24 +42 +42 +7E +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni1EAF +ENCODING 7855 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +04 +08 +42 +3C +00 +3C +02 +3E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR uni1EB0 +ENCODING 7856 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +20 +10 +42 +3C +00 +18 +24 +42 +7E +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni1EB1 +ENCODING 7857 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +20 +10 +42 +3C +00 +3C +02 +3E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR uni1EB2 +ENCODING 7858 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +08 +52 +3C +00 +18 +24 +42 +42 +7E +42 +00 +00 +ENDCHAR +STARTCHAR uni1EB3 +ENCODING 7859 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +08 +52 +3C +00 +3C +02 +3E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR uni1EB4 +ENCODING 7860 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +32 +4C +42 +3C +00 +18 +24 +42 +7E +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni1EB5 +ENCODING 7861 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +32 +4C +42 +3C +00 +3C +02 +3E +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR uni1EB6 +ENCODING 7862 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +42 +3C +00 +18 +24 +42 +42 +7E +42 +42 +00 +18 +ENDCHAR +STARTCHAR uni1EB7 +ENCODING 7863 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +3C +00 +3C +02 +3E +42 +46 +3A +00 +18 +ENDCHAR +STARTCHAR uni1EB8 +ENCODING 7864 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +40 +40 +40 +78 +40 +40 +40 +7E +00 +18 +ENDCHAR +STARTCHAR uni1EB9 +ENCODING 7865 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +7E +40 +42 +3C +00 +18 +ENDCHAR +STARTCHAR uni1EBA +ENCODING 7866 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +24 +04 +08 +7E +40 +40 +78 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR uni1EBB +ENCODING 7867 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +24 +04 +08 +08 +3C +42 +7E +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1EBC +ENCODING 7868 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +32 +4C +00 +7E +40 +40 +78 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR uni1EBD +ENCODING 7869 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +32 +4C +00 +3C +42 +7E +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1EBE +ENCODING 7870 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +42 +A4 +00 +FC +80 +80 +F0 +80 +80 +FC +00 +00 +ENDCHAR +STARTCHAR uni1EBF +ENCODING 7871 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +A4 +00 +78 +84 +FC +80 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni1EC0 +ENCODING 7872 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +84 +4A +00 +7E +40 +40 +78 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR uni1EC1 +ENCODING 7873 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +84 +4A +00 +3C +42 +7E +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1EC2 +ENCODING 7874 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +04 +4A +A2 +04 +7E +40 +40 +78 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR uni1EC3 +ENCODING 7875 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +04 +0A +22 +54 +04 +3C +42 +7E +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1EC4 +ENCODING 7876 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +32 +4C +10 +28 +00 +7E +40 +78 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR uni1EC5 +ENCODING 7877 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +32 +4C +10 +28 +00 +3C +42 +7E +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1EC6 +ENCODING 7878 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +24 +00 +7E +40 +40 +78 +40 +40 +7E +00 +18 +ENDCHAR +STARTCHAR uni1EC7 +ENCODING 7879 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +00 +3C +42 +7E +40 +42 +3C +00 +18 +ENDCHAR +STARTCHAR uni1EC8 +ENCODING 7880 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +28 +08 +10 +7C +10 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR uni1EC9 +ENCODING 7881 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +28 +08 +10 +00 +30 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR uni1ECA +ENCODING 7882 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +10 +10 +10 +10 +10 +10 +10 +7C +00 +30 +ENDCHAR +STARTCHAR uni1ECB +ENCODING 7883 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +00 +30 +10 +10 +10 +10 +7C +00 +30 +ENDCHAR +STARTCHAR uni1ECC +ENCODING 7884 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +42 +42 +42 +42 +42 +3C +00 +18 +ENDCHAR +STARTCHAR uni1ECD +ENCODING 7885 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +42 +42 +42 +3C +00 +18 +ENDCHAR +STARTCHAR uni1ECE +ENCODING 7886 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +30 +48 +08 +10 +7C +82 +82 +82 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR uni1ECF +ENCODING 7887 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +24 +04 +08 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1ED0 +ENCODING 7888 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +42 +A4 +00 +7C +82 +82 +82 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR uni1ED1 +ENCODING 7889 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +22 +54 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1ED2 +ENCODING 7890 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +84 +4A +00 +7C +82 +82 +82 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR uni1ED3 +ENCODING 7891 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +2A +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1ED4 +ENCODING 7892 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +04 +4A +A2 +04 +7C +82 +82 +82 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR uni1ED5 +ENCODING 7893 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +04 +4A +A2 +04 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1ED6 +ENCODING 7894 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +32 +4C +10 +28 +00 +7C +82 +82 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR uni1ED7 +ENCODING 7895 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +32 +4C +00 +18 +24 +00 +3C +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1ED8 +ENCODING 7896 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +24 +00 +7C +82 +82 +82 +82 +82 +7C +00 +18 +ENDCHAR +STARTCHAR uni1ED9 +ENCODING 7897 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +00 +3C +42 +42 +42 +42 +3C +00 +18 +ENDCHAR +STARTCHAR uni1EDA +ENCODING 7898 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +00 +79 +85 +86 +84 +84 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni1EDB +ENCODING 7899 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +79 +85 +86 +84 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni1EDC +ENCODING 7900 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +00 +79 +85 +86 +84 +84 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni1EDD +ENCODING 7901 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +10 +00 +79 +85 +86 +84 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni1EDE +ENCODING 7902 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +30 +48 +08 +10 +79 +85 +86 +84 +84 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni1EDF +ENCODING 7903 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +30 +48 +08 +10 +79 +85 +86 +84 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni1EE0 +ENCODING 7904 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +32 +4C +00 +79 +85 +86 +84 +84 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni1EE1 +ENCODING 7905 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +32 +4C +00 +79 +85 +86 +84 +84 +78 +00 +00 +ENDCHAR +STARTCHAR uni1EE2 +ENCODING 7906 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +79 +85 +86 +84 +84 +84 +84 +84 +78 +00 +30 +ENDCHAR +STARTCHAR uni1EE3 +ENCODING 7907 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +79 +85 +86 +84 +84 +78 +00 +30 +ENDCHAR +STARTCHAR uni1EE4 +ENCODING 7908 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +42 +42 +42 +42 +42 +42 +3C +00 +18 +ENDCHAR +STARTCHAR uni1EE5 +ENCODING 7909 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +44 +44 +44 +44 +3A +00 +18 +ENDCHAR +STARTCHAR uni1EE6 +ENCODING 7910 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +24 +04 +08 +4A +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1EE7 +ENCODING 7911 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +30 +48 +08 +10 +10 +44 +44 +44 +44 +44 +3A +00 +00 +ENDCHAR +STARTCHAR uni1EE8 +ENCODING 7912 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +20 +00 +8A +8A +8C +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1EE9 +ENCODING 7913 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +20 +00 +8A +8A +8C +88 +88 +74 +00 +00 +ENDCHAR +STARTCHAR uni1EEA +ENCODING 7914 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +40 +20 +00 +8A +8A +8C +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1EEB +ENCODING 7915 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +20 +00 +8A +8A +8C +88 +88 +74 +00 +00 +ENDCHAR +STARTCHAR uni1EEC +ENCODING 7916 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +20 +50 +10 +20 +AA +8A +8C +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1EED +ENCODING 7917 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +20 +50 +10 +20 +20 +8A +8A +8C +88 +88 +74 +00 +00 +ENDCHAR +STARTCHAR uni1EEE +ENCODING 7918 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +64 +98 +00 +8A +8A +8C +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni1EEF +ENCODING 7919 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +64 +98 +00 +8A +8A +8C +88 +88 +74 +00 +00 +ENDCHAR +STARTCHAR uni1EF0 +ENCODING 7920 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +8A +8A +8C +88 +88 +88 +88 +88 +70 +00 +30 +ENDCHAR +STARTCHAR uni1EF1 +ENCODING 7921 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +8A +8A +8C +88 +88 +74 +00 +30 +ENDCHAR +STARTCHAR Ygrave +ENCODING 7922 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +20 +10 +00 +82 +44 +28 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR ygrave +ENCODING 7923 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +08 +00 +42 +42 +42 +46 +3A +02 +42 +3C +ENDCHAR +STARTCHAR uni1EF4 +ENCODING 7924 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +82 +44 +28 +10 +10 +10 +10 +10 +00 +18 +ENDCHAR +STARTCHAR uni1EF5 +ENCODING 7925 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +42 +42 +46 +3A +02 +42 +3C +00 +18 +ENDCHAR +STARTCHAR uni1EF6 +ENCODING 7926 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +30 +48 +08 +10 +92 +44 +28 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni1EF7 +ENCODING 7927 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +24 +04 +08 +08 +42 +42 +42 +46 +3A +02 +42 +3C +ENDCHAR +STARTCHAR uni1EF8 +ENCODING 7928 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +32 +4C +00 +82 +44 +28 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni1EF9 +ENCODING 7929 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +32 +4C +00 +42 +42 +42 +46 +3A +02 +42 +3C +ENDCHAR +STARTCHAR uni1F00 +ENCODING 7936 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +08 +10 +00 +3A +46 +42 +46 +4A +32 +00 +00 +ENDCHAR +STARTCHAR uni1F01 +ENCODING 7937 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +10 +08 +00 +3A +46 +42 +46 +4A +32 +00 +00 +ENDCHAR +STARTCHAR uni1F02 +ENCODING 7938 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +34 +12 +20 +00 +3A +46 +42 +46 +4A +32 +00 +00 +ENDCHAR +STARTCHAR uni1F03 +ENCODING 7939 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +34 +22 +10 +00 +3A +46 +42 +46 +4A +32 +00 +00 +ENDCHAR +STARTCHAR uni1F04 +ENCODING 7940 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +32 +14 +20 +00 +3A +46 +42 +46 +4A +32 +00 +00 +ENDCHAR +STARTCHAR uni1F05 +ENCODING 7941 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +32 +24 +10 +00 +3A +46 +42 +46 +4A +32 +00 +00 +ENDCHAR +STARTCHAR uni1F06 +ENCODING 7942 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +34 +58 +08 +10 +00 +3A +46 +42 +46 +4A +32 +00 +00 +ENDCHAR +STARTCHAR uni1F07 +ENCODING 7943 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +34 +58 +10 +08 +00 +3A +46 +42 +46 +4A +32 +00 +00 +ENDCHAR +STARTCHAR uni1F08 +ENCODING 7944 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +52 +92 +12 +12 +1E +12 +12 +12 +00 +00 +ENDCHAR +STARTCHAR uni1F09 +ENCODING 7945 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +92 +52 +12 +12 +1E +12 +12 +12 +00 +00 +ENDCHAR +STARTCHAR uni1F0A +ENCODING 7946 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +52 +92 +92 +52 +1E +12 +12 +12 +00 +00 +ENDCHAR +STARTCHAR uni1F0B +ENCODING 7947 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +92 +52 +92 +52 +1E +12 +12 +12 +00 +00 +ENDCHAR +STARTCHAR uni1F0C +ENCODING 7948 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +52 +92 +52 +92 +1E +12 +12 +12 +00 +00 +ENDCHAR +STARTCHAR uni1F0D +ENCODING 7949 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +92 +52 +52 +92 +1E +12 +12 +12 +00 +00 +ENDCHAR +STARTCHAR uni1F0E +ENCODING 7950 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +12 +D2 +52 +92 +1E +12 +12 +12 +00 +00 +ENDCHAR +STARTCHAR uni1F0F +ENCODING 7951 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +12 +D2 +92 +52 +1E +12 +12 +12 +00 +00 +ENDCHAR +STARTCHAR uni1F10 +ENCODING 7952 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +08 +10 +00 +3C +42 +38 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1F11 +ENCODING 7953 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +10 +08 +00 +3C +42 +38 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1F12 +ENCODING 7954 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +34 +12 +20 +00 +3C +42 +38 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1F13 +ENCODING 7955 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +34 +22 +10 +00 +3C +42 +38 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1F14 +ENCODING 7956 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +32 +14 +20 +00 +3C +42 +38 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1F15 +ENCODING 7957 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +32 +24 +10 +00 +3C +42 +38 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1F18 +ENCODING 7960 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +DE +50 +90 +10 +1C +10 +10 +10 +1E +00 +00 +ENDCHAR +STARTCHAR uni1F19 +ENCODING 7961 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +DE +90 +50 +10 +1C +10 +10 +10 +1E +00 +00 +ENDCHAR +STARTCHAR uni1F1A +ENCODING 7962 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +DE +50 +90 +90 +5C +10 +10 +10 +1E +00 +00 +ENDCHAR +STARTCHAR uni1F1B +ENCODING 7963 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +DE +90 +50 +90 +5C +10 +10 +10 +1E +00 +00 +ENDCHAR +STARTCHAR uni1F1C +ENCODING 7964 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +DE +50 +90 +50 +9C +10 +10 +10 +1E +00 +00 +ENDCHAR +STARTCHAR uni1F1D +ENCODING 7965 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +DE +90 +50 +50 +9C +10 +10 +10 +1E +00 +00 +ENDCHAR +STARTCHAR uni1F20 +ENCODING 7968 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +08 +10 +00 +5C +62 +42 +42 +42 +42 +02 +02 +ENDCHAR +STARTCHAR uni1F21 +ENCODING 7969 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +10 +08 +00 +5C +62 +42 +42 +42 +42 +02 +02 +ENDCHAR +STARTCHAR uni1F22 +ENCODING 7970 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +34 +12 +20 +00 +5C +62 +42 +42 +42 +42 +02 +02 +ENDCHAR +STARTCHAR uni1F23 +ENCODING 7971 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +34 +22 +10 +00 +5C +62 +42 +42 +42 +42 +02 +02 +ENDCHAR +STARTCHAR uni1F24 +ENCODING 7972 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +32 +14 +20 +00 +5C +62 +42 +42 +42 +42 +02 +02 +ENDCHAR +STARTCHAR uni1F25 +ENCODING 7973 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +32 +24 +10 +00 +5C +62 +42 +42 +42 +42 +02 +02 +ENDCHAR +STARTCHAR uni1F26 +ENCODING 7974 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +34 +58 +08 +10 +00 +5C +62 +42 +42 +42 +42 +02 +02 +ENDCHAR +STARTCHAR uni1F27 +ENCODING 7975 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +34 +58 +10 +08 +00 +5C +62 +42 +42 +42 +42 +02 +02 +ENDCHAR +STARTCHAR uni1F28 +ENCODING 7976 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +D2 +52 +92 +12 +1E +12 +12 +12 +12 +00 +00 +ENDCHAR +STARTCHAR uni1F29 +ENCODING 7977 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +D2 +92 +52 +12 +1E +12 +12 +12 +12 +00 +00 +ENDCHAR +STARTCHAR uni1F2A +ENCODING 7978 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +D2 +52 +92 +92 +5E +12 +12 +12 +12 +00 +00 +ENDCHAR +STARTCHAR uni1F2B +ENCODING 7979 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +D2 +92 +52 +92 +5E +12 +12 +12 +12 +00 +00 +ENDCHAR +STARTCHAR uni1F2C +ENCODING 7980 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +D2 +52 +92 +52 +9E +12 +12 +12 +12 +00 +00 +ENDCHAR +STARTCHAR uni1F2D +ENCODING 7981 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +D2 +92 +52 +52 +9E +12 +12 +12 +12 +00 +00 +ENDCHAR +STARTCHAR uni1F2E +ENCODING 7982 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +D2 +12 +D2 +52 +9E +12 +12 +12 +12 +00 +00 +ENDCHAR +STARTCHAR uni1F2F +ENCODING 7983 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +D2 +12 +D2 +92 +5E +12 +12 +12 +12 +00 +00 +ENDCHAR +STARTCHAR uni1F30 +ENCODING 7984 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +30 +10 +20 +00 +20 +20 +20 +20 +24 +18 +00 +00 +ENDCHAR +STARTCHAR uni1F31 +ENCODING 7985 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +30 +20 +10 +00 +20 +20 +20 +20 +24 +18 +00 +00 +ENDCHAR +STARTCHAR uni1F32 +ENCODING 7986 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +68 +24 +40 +00 +10 +10 +10 +10 +12 +0C +00 +00 +ENDCHAR +STARTCHAR uni1F33 +ENCODING 7987 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +68 +44 +20 +00 +10 +10 +10 +10 +12 +0C +00 +00 +ENDCHAR +STARTCHAR uni1F34 +ENCODING 7988 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +64 +28 +40 +00 +10 +10 +10 +10 +12 +0C +00 +00 +ENDCHAR +STARTCHAR uni1F35 +ENCODING 7989 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +64 +48 +20 +00 +10 +10 +10 +10 +12 +0C +00 +00 +ENDCHAR +STARTCHAR uni1F36 +ENCODING 7990 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +34 +58 +08 +10 +00 +10 +10 +10 +10 +12 +0C +00 +00 +ENDCHAR +STARTCHAR uni1F37 +ENCODING 7991 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +34 +58 +10 +08 +00 +10 +10 +10 +10 +12 +0C +00 +00 +ENDCHAR +STARTCHAR uni1F38 +ENCODING 7992 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +6E +24 +44 +04 +04 +04 +04 +04 +0E +00 +00 +ENDCHAR +STARTCHAR uni1F39 +ENCODING 7993 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +6E +44 +24 +04 +04 +04 +04 +04 +0E +00 +00 +ENDCHAR +STARTCHAR uni1F3A +ENCODING 7994 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +6E +24 +44 +44 +24 +04 +04 +04 +0E +00 +00 +ENDCHAR +STARTCHAR uni1F3B +ENCODING 7995 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +6E +44 +24 +44 +24 +04 +04 +04 +0E +00 +00 +ENDCHAR +STARTCHAR uni1F3C +ENCODING 7996 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +6E +24 +44 +24 +44 +04 +04 +04 +0E +00 +00 +ENDCHAR +STARTCHAR uni1F3D +ENCODING 7997 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +6E +44 +24 +24 +44 +04 +04 +04 +0E +00 +00 +ENDCHAR +STARTCHAR uni1F3E +ENCODING 7998 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +6E +04 +64 +24 +44 +04 +04 +04 +0E +00 +00 +ENDCHAR +STARTCHAR uni1F3F +ENCODING 7999 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +6E +04 +64 +44 +24 +04 +04 +04 +0E +00 +00 +ENDCHAR +STARTCHAR uni1F40 +ENCODING 8000 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +08 +10 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1F41 +ENCODING 8001 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +10 +08 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1F42 +ENCODING 8002 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +34 +12 +20 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1F43 +ENCODING 8003 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +34 +22 +10 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1F44 +ENCODING 8004 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +32 +14 +20 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1F45 +ENCODING 8005 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +32 +24 +10 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1F48 +ENCODING 8008 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +52 +92 +12 +12 +12 +12 +12 +0C +00 +00 +ENDCHAR +STARTCHAR uni1F49 +ENCODING 8009 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +92 +52 +12 +12 +12 +12 +12 +0C +00 +00 +ENDCHAR +STARTCHAR uni1F4A +ENCODING 8010 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +52 +92 +92 +52 +12 +12 +12 +0C +00 +00 +ENDCHAR +STARTCHAR uni1F4B +ENCODING 8011 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +92 +52 +92 +52 +12 +12 +12 +0C +00 +00 +ENDCHAR +STARTCHAR uni1F4C +ENCODING 8012 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +52 +92 +52 +92 +12 +12 +12 +0C +00 +00 +ENDCHAR +STARTCHAR uni1F4D +ENCODING 8013 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +92 +52 +52 +92 +12 +12 +12 +0C +00 +00 +ENDCHAR +STARTCHAR uni1F50 +ENCODING 8016 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +08 +10 +00 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1F51 +ENCODING 8017 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +10 +08 +00 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1F52 +ENCODING 8018 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +34 +12 +20 +00 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1F53 +ENCODING 8019 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +34 +22 +10 +00 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1F54 +ENCODING 8020 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +32 +14 +20 +00 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1F55 +ENCODING 8021 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +32 +24 +10 +00 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1F56 +ENCODING 8022 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +34 +58 +18 +08 +10 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1F57 +ENCODING 8023 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +34 +58 +18 +10 +08 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1F59 +ENCODING 8025 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +6A +4A +2A +04 +04 +04 +04 +04 +04 +00 +00 +ENDCHAR +STARTCHAR uni1F5B +ENCODING 8027 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +6A +4A +2A +44 +24 +04 +04 +04 +04 +00 +00 +ENDCHAR +STARTCHAR uni1F5D +ENCODING 8029 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +6A +4A +2A +24 +44 +04 +04 +04 +04 +00 +00 +ENDCHAR +STARTCHAR uni1F5F +ENCODING 8031 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +6A +0A +6A +44 +24 +04 +04 +04 +04 +00 +00 +ENDCHAR +STARTCHAR uni1F60 +ENCODING 8032 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +08 +10 +00 +82 +92 +92 +92 +92 +6C +00 +00 +ENDCHAR +STARTCHAR uni1F61 +ENCODING 8033 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +10 +08 +00 +82 +92 +92 +92 +92 +6C +00 +00 +ENDCHAR +STARTCHAR uni1F62 +ENCODING 8034 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +68 +24 +40 +00 +82 +92 +92 +92 +92 +6C +00 +00 +ENDCHAR +STARTCHAR uni1F63 +ENCODING 8035 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +68 +44 +20 +00 +82 +92 +92 +92 +92 +6C +00 +00 +ENDCHAR +STARTCHAR uni1F64 +ENCODING 8036 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +64 +28 +40 +00 +82 +92 +92 +92 +92 +6C +00 +00 +ENDCHAR +STARTCHAR uni1F65 +ENCODING 8037 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +64 +48 +20 +00 +82 +92 +92 +92 +92 +6C +00 +00 +ENDCHAR +STARTCHAR uni1F66 +ENCODING 8038 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +34 +58 +18 +08 +10 +82 +92 +92 +92 +92 +6C +00 +00 +ENDCHAR +STARTCHAR uni1F67 +ENCODING 8039 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +34 +58 +18 +10 +08 +82 +92 +92 +92 +92 +6C +00 +00 +ENDCHAR +STARTCHAR uni1F68 +ENCODING 8040 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +52 +92 +12 +12 +12 +0C +0C +12 +00 +00 +ENDCHAR +STARTCHAR uni1F69 +ENCODING 8041 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +92 +52 +12 +12 +12 +0C +0C +12 +00 +00 +ENDCHAR +STARTCHAR uni1F6A +ENCODING 8042 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +52 +92 +92 +52 +12 +0C +0C +12 +00 +00 +ENDCHAR +STARTCHAR uni1F6B +ENCODING 8043 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +92 +52 +92 +52 +12 +0C +0C +12 +00 +00 +ENDCHAR +STARTCHAR uni1F6C +ENCODING 8044 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +52 +92 +52 +92 +12 +0C +0C +12 +00 +00 +ENDCHAR +STARTCHAR uni1F6D +ENCODING 8045 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +92 +52 +52 +92 +12 +0C +0C +12 +00 +00 +ENDCHAR +STARTCHAR uni1F6E +ENCODING 8046 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +12 +D2 +52 +92 +12 +0C +0C +12 +00 +00 +ENDCHAR +STARTCHAR uni1F6F +ENCODING 8047 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +12 +D2 +92 +52 +12 +0C +0C +12 +00 +00 +ENDCHAR +STARTCHAR uni1F70 +ENCODING 8048 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +08 +00 +3A +46 +42 +46 +4A +32 +00 +00 +ENDCHAR +STARTCHAR uni1F71 +ENCODING 8049 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +3A +46 +42 +46 +4A +32 +00 +00 +ENDCHAR +STARTCHAR uni1F72 +ENCODING 8050 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +08 +00 +3C +42 +38 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1F73 +ENCODING 8051 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +3C +42 +38 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1F74 +ENCODING 8052 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +08 +00 +5C +62 +42 +42 +42 +42 +02 +02 +ENDCHAR +STARTCHAR uni1F75 +ENCODING 8053 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +5C +62 +42 +42 +42 +42 +02 +02 +ENDCHAR +STARTCHAR uni1F76 +ENCODING 8054 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +20 +00 +20 +20 +20 +20 +24 +18 +00 +00 +ENDCHAR +STARTCHAR uni1F77 +ENCODING 8055 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +20 +00 +20 +20 +20 +20 +24 +18 +00 +00 +ENDCHAR +STARTCHAR uni1F78 +ENCODING 8056 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +08 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1F79 +ENCODING 8057 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +3C +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1F7A +ENCODING 8058 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +08 +00 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1F7B +ENCODING 8059 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1F7C +ENCODING 8060 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +10 +00 +82 +92 +92 +92 +92 +6C +00 +00 +ENDCHAR +STARTCHAR uni1F7D +ENCODING 8061 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +82 +92 +92 +92 +92 +6C +00 +00 +ENDCHAR +STARTCHAR uni1F80 +ENCODING 8064 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +08 +10 +00 +3A +46 +42 +46 +4A +32 +00 +10 +ENDCHAR +STARTCHAR uni1F81 +ENCODING 8065 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +10 +08 +00 +3A +46 +42 +46 +4A +32 +00 +10 +ENDCHAR +STARTCHAR uni1F82 +ENCODING 8066 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +34 +12 +20 +00 +3A +46 +42 +46 +4A +32 +00 +10 +ENDCHAR +STARTCHAR uni1F83 +ENCODING 8067 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +34 +22 +10 +00 +3A +46 +42 +46 +4A +32 +00 +10 +ENDCHAR +STARTCHAR uni1F84 +ENCODING 8068 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +32 +14 +20 +00 +3A +46 +42 +46 +4A +32 +00 +10 +ENDCHAR +STARTCHAR uni1F85 +ENCODING 8069 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +32 +24 +10 +00 +3A +46 +42 +46 +4A +32 +00 +10 +ENDCHAR +STARTCHAR uni1F86 +ENCODING 8070 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +34 +58 +08 +10 +00 +3A +46 +42 +46 +4A +32 +00 +10 +ENDCHAR +STARTCHAR uni1F87 +ENCODING 8071 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +34 +58 +10 +08 +00 +3A +46 +42 +46 +4A +32 +00 +10 +ENDCHAR +STARTCHAR uni1F88 +ENCODING 8072 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +52 +92 +12 +12 +1E +12 +12 +12 +00 +08 +ENDCHAR +STARTCHAR uni1F89 +ENCODING 8073 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +92 +52 +12 +12 +1E +12 +12 +12 +00 +08 +ENDCHAR +STARTCHAR uni1F8A +ENCODING 8074 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +52 +92 +92 +52 +1E +12 +12 +12 +00 +08 +ENDCHAR +STARTCHAR uni1F8B +ENCODING 8075 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +92 +52 +92 +52 +1E +12 +12 +12 +00 +08 +ENDCHAR +STARTCHAR uni1F8C +ENCODING 8076 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +52 +92 +52 +92 +1E +12 +12 +12 +00 +08 +ENDCHAR +STARTCHAR uni1F8D +ENCODING 8077 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +92 +52 +52 +92 +1E +12 +12 +12 +00 +08 +ENDCHAR +STARTCHAR uni1F8E +ENCODING 8078 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +12 +D2 +52 +92 +1E +12 +12 +12 +00 +08 +ENDCHAR +STARTCHAR uni1F8F +ENCODING 8079 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +12 +D2 +92 +52 +1E +12 +12 +12 +00 +08 +ENDCHAR +STARTCHAR uni1F90 +ENCODING 8080 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +08 +10 +00 +5C +62 +42 +42 +42 +42 +02 +42 +ENDCHAR +STARTCHAR uni1F91 +ENCODING 8081 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +10 +08 +00 +5C +62 +42 +42 +42 +42 +02 +42 +ENDCHAR +STARTCHAR uni1F92 +ENCODING 8082 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +34 +12 +20 +00 +5C +62 +42 +42 +42 +42 +02 +42 +ENDCHAR +STARTCHAR uni1F93 +ENCODING 8083 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +34 +22 +10 +00 +5C +62 +42 +42 +42 +42 +02 +42 +ENDCHAR +STARTCHAR uni1F94 +ENCODING 8084 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +32 +14 +20 +00 +5C +62 +42 +42 +42 +42 +02 +42 +ENDCHAR +STARTCHAR uni1F95 +ENCODING 8085 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +32 +24 +10 +00 +5C +62 +42 +42 +42 +42 +02 +42 +ENDCHAR +STARTCHAR uni1F96 +ENCODING 8086 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +34 +58 +08 +10 +00 +5C +62 +42 +42 +42 +42 +02 +42 +ENDCHAR +STARTCHAR uni1F97 +ENCODING 8087 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +34 +58 +10 +08 +00 +5C +62 +42 +42 +42 +42 +02 +42 +ENDCHAR +STARTCHAR uni1F98 +ENCODING 8088 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +D2 +52 +92 +12 +1E +12 +12 +12 +12 +00 +08 +ENDCHAR +STARTCHAR uni1F99 +ENCODING 8089 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +D2 +92 +52 +12 +1E +12 +12 +12 +12 +00 +08 +ENDCHAR +STARTCHAR uni1F9A +ENCODING 8090 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +D2 +52 +92 +92 +5E +12 +12 +12 +12 +00 +08 +ENDCHAR +STARTCHAR uni1F9B +ENCODING 8091 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +D2 +92 +52 +92 +5E +12 +12 +12 +12 +00 +08 +ENDCHAR +STARTCHAR uni1F9C +ENCODING 8092 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +D2 +52 +92 +52 +9E +12 +12 +12 +12 +00 +08 +ENDCHAR +STARTCHAR uni1F9D +ENCODING 8093 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +D2 +92 +52 +52 +9E +12 +12 +12 +12 +00 +08 +ENDCHAR +STARTCHAR uni1F9E +ENCODING 8094 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +D2 +12 +D2 +52 +9E +12 +12 +12 +12 +00 +08 +ENDCHAR +STARTCHAR uni1F9F +ENCODING 8095 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +D2 +12 +D2 +92 +5E +12 +12 +12 +12 +00 +08 +ENDCHAR +STARTCHAR uni1FA0 +ENCODING 8096 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +08 +10 +00 +82 +92 +92 +92 +92 +6C +00 +10 +ENDCHAR +STARTCHAR uni1FA1 +ENCODING 8097 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +10 +08 +00 +82 +92 +92 +92 +92 +6C +00 +10 +ENDCHAR +STARTCHAR uni1FA2 +ENCODING 8098 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +68 +24 +40 +00 +82 +92 +92 +92 +92 +6C +00 +10 +ENDCHAR +STARTCHAR uni1FA3 +ENCODING 8099 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +68 +44 +20 +00 +82 +92 +92 +92 +92 +6C +00 +10 +ENDCHAR +STARTCHAR uni1FA4 +ENCODING 8100 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +64 +28 +40 +00 +82 +92 +92 +92 +92 +6C +00 +10 +ENDCHAR +STARTCHAR uni1FA5 +ENCODING 8101 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +64 +48 +20 +00 +82 +92 +92 +92 +92 +6C +00 +10 +ENDCHAR +STARTCHAR uni1FA6 +ENCODING 8102 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +34 +58 +08 +10 +00 +82 +92 +92 +92 +92 +6C +00 +10 +ENDCHAR +STARTCHAR uni1FA7 +ENCODING 8103 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +34 +58 +10 +08 +00 +82 +92 +92 +92 +92 +6C +00 +10 +ENDCHAR +STARTCHAR uni1FA8 +ENCODING 8104 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +52 +92 +12 +12 +12 +0C +0C +12 +00 +08 +ENDCHAR +STARTCHAR uni1FA9 +ENCODING 8105 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +92 +52 +12 +12 +12 +0C +0C +12 +00 +08 +ENDCHAR +STARTCHAR uni1FAA +ENCODING 8106 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +52 +92 +92 +52 +12 +0C +0C +12 +00 +08 +ENDCHAR +STARTCHAR uni1FAB +ENCODING 8107 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +92 +52 +92 +52 +12 +0C +0C +12 +00 +08 +ENDCHAR +STARTCHAR uni1FAC +ENCODING 8108 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +52 +92 +52 +92 +12 +0C +0C +12 +00 +08 +ENDCHAR +STARTCHAR uni1FAD +ENCODING 8109 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +92 +52 +52 +92 +12 +0C +0C +12 +00 +08 +ENDCHAR +STARTCHAR uni1FAE +ENCODING 8110 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +12 +D2 +52 +92 +12 +0C +0C +12 +00 +08 +ENDCHAR +STARTCHAR uni1FAF +ENCODING 8111 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +CC +12 +D2 +92 +52 +12 +0C +0C +12 +00 +08 +ENDCHAR +STARTCHAR uni1FB0 +ENCODING 8112 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +3C +00 +3A +46 +42 +46 +4A +32 +00 +00 +ENDCHAR +STARTCHAR uni1FB1 +ENCODING 8113 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +7E +00 +3A +46 +42 +46 +4A +32 +00 +00 +ENDCHAR +STARTCHAR uni1FB2 +ENCODING 8114 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +08 +00 +3A +46 +42 +46 +4A +32 +00 +10 +ENDCHAR +STARTCHAR uni1FB3 +ENCODING 8115 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3A +46 +42 +46 +4A +32 +00 +10 +ENDCHAR +STARTCHAR uni1FB4 +ENCODING 8116 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +3A +46 +42 +46 +4A +32 +00 +10 +ENDCHAR +STARTCHAR uni1FB6 +ENCODING 8118 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1A +2C +00 +3A +46 +42 +46 +4A +32 +00 +00 +ENDCHAR +STARTCHAR uni1FB7 +ENCODING 8119 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1A +2C +00 +3A +46 +42 +46 +4A +32 +00 +10 +ENDCHAR +STARTCHAR uni1FB8 +ENCODING 8120 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +42 +3C +00 +18 +24 +42 +42 +7E +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni1FB9 +ENCODING 8121 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +7E +00 +18 +24 +42 +42 +7E +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni1FBA +ENCODING 8122 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +8C +52 +12 +12 +12 +1E +12 +12 +12 +00 +00 +ENDCHAR +STARTCHAR uni1FBB +ENCODING 8123 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +4C +92 +12 +12 +12 +1E +12 +12 +12 +00 +00 +ENDCHAR +STARTCHAR uni1FBC +ENCODING 8124 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +42 +42 +42 +7E +42 +42 +42 +10 +18 +ENDCHAR +STARTCHAR uni1FBD +ENCODING 8125 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +08 +10 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FBE +ENCODING 8126 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +10 +10 +10 +08 +00 +00 +ENDCHAR +STARTCHAR uni1FBF +ENCODING 8127 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +08 +10 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FC0 +ENCODING 8128 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1A +2C +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FC1 +ENCODING 8129 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +1A +2C +00 +36 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FC2 +ENCODING 8130 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +08 +00 +5C +62 +42 +42 +42 +42 +02 +42 +ENDCHAR +STARTCHAR uni1FC3 +ENCODING 8131 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +5C +62 +42 +42 +42 +42 +02 +42 +ENDCHAR +STARTCHAR uni1FC4 +ENCODING 8132 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +08 +00 +5C +62 +42 +42 +42 +42 +02 +42 +ENDCHAR +STARTCHAR uni1FC6 +ENCODING 8134 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1A +2C +00 +5C +62 +42 +42 +42 +42 +02 +02 +ENDCHAR +STARTCHAR uni1FC7 +ENCODING 8135 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1A +2C +00 +5C +62 +42 +42 +42 +42 +02 +42 +ENDCHAR +STARTCHAR uni1FC8 +ENCODING 8136 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +9E +50 +10 +10 +1C +10 +10 +10 +1E +00 +00 +ENDCHAR +STARTCHAR uni1FC9 +ENCODING 8137 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +5E +90 +10 +10 +1C +10 +10 +10 +1E +00 +00 +ENDCHAR +STARTCHAR uni1FCA +ENCODING 8138 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +92 +52 +12 +12 +1E +12 +12 +12 +12 +00 +00 +ENDCHAR +STARTCHAR uni1FCB +ENCODING 8139 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +52 +92 +12 +12 +1E +12 +12 +12 +12 +00 +00 +ENDCHAR +STARTCHAR uni1FCC +ENCODING 8140 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +42 +42 +7E +42 +42 +42 +42 +10 +18 +ENDCHAR +STARTCHAR uni1FCD +ENCODING 8141 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +34 +12 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FCE +ENCODING 8142 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +32 +14 +20 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FCF +ENCODING 8143 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1A +2C +04 +08 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FD0 +ENCODING 8144 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +3C +00 +10 +10 +10 +10 +12 +0C +00 +00 +ENDCHAR +STARTCHAR uni1FD1 +ENCODING 8145 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +7E +00 +10 +10 +10 +10 +12 +0C +00 +00 +ENDCHAR +STARTCHAR uni1FD2 +ENCODING 8146 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +4A +42 +00 +10 +10 +10 +10 +12 +0C +00 +00 +ENDCHAR +STARTCHAR uni1FD3 +ENCODING 8147 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +52 +42 +00 +10 +10 +10 +10 +12 +0C +00 +00 +ENDCHAR +STARTCHAR uni1FD6 +ENCODING 8150 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +34 +58 +00 +10 +10 +10 +10 +12 +0C +00 +00 +ENDCHAR +STARTCHAR uni1FD7 +ENCODING 8151 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +34 +58 +00 +6C +00 +10 +10 +10 +10 +12 +0C +00 +00 +ENDCHAR +STARTCHAR uni1FD8 +ENCODING 8152 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +84 +78 +00 +7C +10 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR uni1FD9 +ENCODING 8153 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +7C +00 +7C +10 +10 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR uni1FDA +ENCODING 8154 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +4E +24 +04 +04 +04 +04 +04 +04 +0E +00 +00 +ENDCHAR +STARTCHAR uni1FDB +ENCODING 8155 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +2E +44 +04 +04 +04 +04 +04 +04 +0E +00 +00 +ENDCHAR +STARTCHAR uni1FDD +ENCODING 8157 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +34 +22 +10 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FDE +ENCODING 8158 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +32 +24 +10 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FDF +ENCODING 8159 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1A +2C +08 +04 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FE0 +ENCODING 8160 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +3C +00 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1FE1 +ENCODING 8161 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +7E +00 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1FE2 +ENCODING 8162 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +4A +42 +00 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1FE3 +ENCODING 8163 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +52 +42 +00 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1FE4 +ENCODING 8164 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +08 +10 +00 +3C +42 +42 +42 +62 +5C +40 +40 +ENDCHAR +STARTCHAR uni1FE5 +ENCODING 8165 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +10 +08 +00 +3C +42 +42 +42 +62 +5C +40 +40 +ENDCHAR +STARTCHAR uni1FE6 +ENCODING 8166 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1A +2C +00 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1FE7 +ENCODING 8167 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +32 +5C +00 +66 +00 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni1FE8 +ENCODING 8168 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +84 +78 +00 +82 +44 +28 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni1FE9 +ENCODING 8169 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +7C +00 +82 +82 +44 +28 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni1FEA +ENCODING 8170 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +4A +2A +0A +04 +04 +04 +04 +04 +04 +00 +00 +ENDCHAR +STARTCHAR uni1FEB +ENCODING 8171 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +2A +4A +0A +04 +04 +04 +04 +04 +04 +00 +00 +ENDCHAR +STARTCHAR uni1FEC +ENCODING 8172 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +DC +92 +52 +12 +1C +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni1FED +ENCODING 8173 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +4A +42 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FEE +ENCODING 8174 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +52 +42 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FEF +ENCODING 8175 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FF2 +ENCODING 8178 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +10 +00 +82 +92 +92 +92 +92 +6C +00 +10 +ENDCHAR +STARTCHAR uni1FF3 +ENCODING 8179 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +82 +92 +92 +92 +92 +6C +00 +10 +ENDCHAR +STARTCHAR uni1FF4 +ENCODING 8180 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +82 +92 +92 +92 +92 +6C +00 +10 +ENDCHAR +STARTCHAR uni1FF6 +ENCODING 8182 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +34 +58 +00 +82 +92 +92 +92 +92 +6C +00 +00 +ENDCHAR +STARTCHAR uni1FF7 +ENCODING 8183 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +34 +58 +00 +82 +92 +92 +92 +92 +6C +00 +10 +ENDCHAR +STARTCHAR uni1FF8 +ENCODING 8184 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +8C +52 +12 +12 +12 +12 +12 +12 +0C +00 +00 +ENDCHAR +STARTCHAR uni1FF9 +ENCODING 8185 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +4C +92 +12 +12 +12 +12 +12 +12 +0C +00 +00 +ENDCHAR +STARTCHAR uni1FFA +ENCODING 8186 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +8C +52 +12 +12 +12 +12 +0C +0C +12 +00 +00 +ENDCHAR +STARTCHAR uni1FFB +ENCODING 8187 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +4C +92 +12 +12 +12 +12 +0C +0C +12 +00 +00 +ENDCHAR +STARTCHAR uni1FFC +ENCODING 8188 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +82 +82 +82 +82 +82 +6C +28 +EE +10 +18 +ENDCHAR +STARTCHAR uni1FFD +ENCODING 8189 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni1FFE +ENCODING 8190 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +10 +08 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2000 +ENCODING 8192 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2001 +ENCODING 8193 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2002 +ENCODING 8194 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2003 +ENCODING 8195 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2004 +ENCODING 8196 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2005 +ENCODING 8197 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2006 +ENCODING 8198 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2007 +ENCODING 8199 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2008 +ENCODING 8200 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2009 +ENCODING 8201 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni200A +ENCODING 8202 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2010 +ENCODING 8208 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +3C +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2011 +ENCODING 8209 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +3C +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR figuredash +ENCODING 8210 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +7E +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR endash +ENCODING 8211 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +7E +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR emdash +ENCODING 8212 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FF +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR afii00208 +ENCODING 8213 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FF +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2016 +ENCODING 8214 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +28 +28 +28 +28 +28 +28 +28 +28 +28 +00 +00 +ENDCHAR +STARTCHAR underscoredbl +ENCODING 8215 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +FE +00 +FE +ENDCHAR +STARTCHAR quoteleft +ENCODING 8216 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +10 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR quoteright +ENCODING 8217 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +08 +10 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR quotesinglbase +ENCODING 8218 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +08 +10 +00 +ENDCHAR +STARTCHAR quotereversed +ENCODING 8219 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +10 +08 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR quotedblleft +ENCODING 8220 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +48 +6C +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR quotedblright +ENCODING 8221 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +6C +24 +48 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR quotedblbase +ENCODING 8222 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +6C +24 +48 +00 +ENDCHAR +STARTCHAR uni201F +ENCODING 8223 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +6C +48 +24 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR dagger +ENCODING 8224 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +7C +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR daggerdbl +ENCODING 8225 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +7C +10 +10 +10 +7C +10 +10 +00 +00 +ENDCHAR +STARTCHAR bullet +ENCODING 8226 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +38 +7C +7C +7C +38 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2023 +ENCODING 8227 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +20 +30 +38 +3C +38 +30 +20 +00 +00 +00 +ENDCHAR +STARTCHAR onedotenleader +ENCODING 8228 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +ENDCHAR +STARTCHAR twodotenleader +ENCODING 8229 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +28 +00 +00 +ENDCHAR +STARTCHAR ellipsis +ENCODING 8230 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +54 +00 +00 +ENDCHAR +STARTCHAR uni2027 +ENCODING 8231 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni202F +ENCODING 8239 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR perthousand +ENCODING 8240 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +A4 +48 +10 +10 +20 +4A +55 +8A +00 +00 +ENDCHAR +STARTCHAR uni2031 +ENCODING 8241 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +A4 +48 +10 +20 +40 +6A +D5 +AA +00 +00 +ENDCHAR +STARTCHAR minute +ENCODING 8242 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +08 +10 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR second +ENCODING 8243 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +24 +48 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2034 +ENCODING 8244 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +49 +49 +92 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2035 +ENCODING 8245 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +08 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2036 +ENCODING 8246 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +48 +48 +24 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2037 +ENCODING 8247 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +92 +92 +49 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2038 +ENCODING 8248 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +28 +44 +ENDCHAR +STARTCHAR guilsinglleft +ENCODING 8249 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +04 +08 +10 +20 +10 +08 +04 +00 +00 +00 +ENDCHAR +STARTCHAR guilsinglright +ENCODING 8250 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +20 +10 +08 +04 +08 +10 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni203B +ENCODING 8251 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +92 +44 +28 +10 +54 +10 +28 +44 +92 +00 +00 +ENDCHAR +STARTCHAR exclamdbl +ENCODING 8252 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +24 +24 +24 +24 +24 +24 +00 +24 +00 +00 +ENDCHAR +STARTCHAR uni203D +ENCODING 8253 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +4A +0A +0A +0C +08 +08 +00 +08 +00 +00 +ENDCHAR +STARTCHAR uni203E +ENCODING 8254 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +7E +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni203F +ENCODING 8255 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +42 +3C +ENDCHAR +STARTCHAR uni2040 +ENCODING 8256 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +3C +42 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2041 +ENCODING 8257 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +04 +04 +08 +08 +10 +10 +28 +28 +ENDCHAR +STARTCHAR uni2042 +ENCODING 8258 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +38 +10 +44 +EE +44 +00 +00 +00 +ENDCHAR +STARTCHAR uni2043 +ENCODING 8259 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +3C +3C +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR fraction +ENCODING 8260 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +08 +08 +10 +10 +20 +20 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni2045 +ENCODING 8261 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +20 +20 +20 +38 +20 +20 +20 +38 +00 +00 +ENDCHAR +STARTCHAR uni2046 +ENCODING 8262 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +08 +08 +08 +38 +08 +08 +08 +38 +00 +00 +ENDCHAR +STARTCHAR uni2047 +ENCODING 8263 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +AA +AA +22 +44 +44 +44 +00 +44 +00 +00 +ENDCHAR +STARTCHAR uni2048 +ENCODING 8264 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +72 +8A +8A +0A +12 +22 +22 +00 +22 +00 +00 +ENDCHAR +STARTCHAR uni2049 +ENCODING 8265 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +9C +A2 +A2 +82 +84 +88 +88 +00 +88 +00 +00 +ENDCHAR +STARTCHAR uni204A +ENCODING 8266 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +7C +04 +04 +04 +04 +00 +00 +ENDCHAR +STARTCHAR uni204B +ENCODING 8267 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +2E +2E +2E +2C +28 +28 +28 +28 +00 +00 +ENDCHAR +STARTCHAR uni204C +ENCODING 8268 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +3C +74 +74 +74 +3C +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni204D +ENCODING 8269 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +78 +5C +5C +5C +78 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni204E +ENCODING 8270 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +24 +18 +7E +18 +24 +00 +00 +ENDCHAR +STARTCHAR uni204F +ENCODING 8271 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +38 +10 +00 +00 +38 +18 +04 +00 +ENDCHAR +STARTCHAR uni2050 +ENCODING 8272 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3C +42 +00 +00 +00 +42 +3C +00 +00 +00 +ENDCHAR +STARTCHAR uni2051 +ENCODING 8273 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +18 +7E +18 +24 +18 +7E +18 +24 +00 +00 +ENDCHAR +STARTCHAR uni2052 +ENCODING 8274 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +62 +62 +04 +08 +08 +10 +20 +26 +46 +00 +00 +ENDCHAR +STARTCHAR uni2057 +ENCODING 8279 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +55 +55 +AA +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni205F +ENCODING 8287 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2060 +ENCODING 8288 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2061 +ENCODING 8289 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2062 +ENCODING 8290 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2063 +ENCODING 8291 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni206A +ENCODING 8298 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +E0 +40 +40 +E0 +00 +77 +88 +66 +11 +EE +00 +00 +ENDCHAR +STARTCHAR uni206B +ENCODING 8299 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +90 +F0 +90 +00 +77 +88 +66 +11 +EE +00 +00 +ENDCHAR +STARTCHAR uni206C +ENCODING 8300 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +E6 +49 +4F +E9 +00 +77 +88 +66 +11 +EE +00 +00 +ENDCHAR +STARTCHAR uni206D +ENCODING 8301 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +22 +55 +77 +55 +00 +77 +88 +66 +11 +EE +00 +00 +ENDCHAR +STARTCHAR uni206E +ENCODING 8302 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +92 +D5 +B7 +95 +00 +77 +88 +66 +11 +EE +00 +00 +ENDCHAR +STARTCHAR uni206F +ENCODING 8303 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +92 +D5 +B5 +92 +00 +77 +88 +66 +11 +EE +00 +00 +ENDCHAR +STARTCHAR zerosuperior +ENCODING 8304 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +30 +48 +48 +48 +48 +30 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2071 +ENCODING 8305 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +20 +00 +60 +20 +20 +20 +70 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR foursuperior +ENCODING 8308 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +30 +30 +50 +78 +10 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR fivesuperior +ENCODING 8309 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +78 +40 +70 +08 +08 +70 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR sixsuperior +ENCODING 8310 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +38 +40 +70 +48 +48 +30 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR sevensuperior +ENCODING 8311 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +78 +08 +10 +10 +20 +20 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR eightsuperior +ENCODING 8312 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +30 +48 +30 +48 +48 +30 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR ninesuperior +ENCODING 8313 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +30 +48 +48 +38 +08 +30 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni207A +ENCODING 8314 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +7C +10 +10 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni207B +ENCODING 8315 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7C +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni207C +ENCODING 8316 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +7C +00 +7C +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR parenleftsuperior +ENCODING 8317 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +20 +40 +40 +40 +40 +20 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR parenrightsuperior +ENCODING 8318 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +20 +10 +10 +10 +10 +20 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR nsuperior +ENCODING 8319 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +38 +24 +24 +24 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR zeroinferior +ENCODING 8320 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +30 +48 +48 +48 +48 +30 +00 +ENDCHAR +STARTCHAR oneinferior +ENCODING 8321 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +20 +60 +20 +20 +20 +70 +00 +ENDCHAR +STARTCHAR twoinferior +ENCODING 8322 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +30 +48 +08 +30 +40 +78 +00 +ENDCHAR +STARTCHAR threeinferior +ENCODING 8323 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +30 +48 +10 +08 +48 +30 +00 +ENDCHAR +STARTCHAR fourinferior +ENCODING 8324 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +10 +30 +30 +50 +78 +10 +00 +ENDCHAR +STARTCHAR fiveinferior +ENCODING 8325 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +78 +40 +70 +08 +08 +70 +00 +ENDCHAR +STARTCHAR sixinferior +ENCODING 8326 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +38 +40 +70 +48 +48 +30 +00 +ENDCHAR +STARTCHAR seveninferior +ENCODING 8327 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +78 +08 +10 +10 +20 +20 +00 +ENDCHAR +STARTCHAR eightinferior +ENCODING 8328 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +30 +48 +30 +48 +48 +30 +00 +ENDCHAR +STARTCHAR nineinferior +ENCODING 8329 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +30 +48 +48 +38 +08 +30 +00 +ENDCHAR +STARTCHAR uni208A +ENCODING 8330 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +10 +10 +7C +10 +10 +00 +ENDCHAR +STARTCHAR uni208B +ENCODING 8331 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +7C +00 +00 +00 +ENDCHAR +STARTCHAR uni208C +ENCODING 8332 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +7C +00 +7C +00 +00 +ENDCHAR +STARTCHAR parenleftinferior +ENCODING 8333 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +20 +40 +40 +40 +40 +20 +00 +ENDCHAR +STARTCHAR parenrightinferior +ENCODING 8334 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +20 +10 +10 +10 +10 +20 +00 +ENDCHAR +STARTCHAR uni20A0 +ENCODING 8352 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +30 +40 +40 +5C +50 +38 +10 +1C +00 +00 +ENDCHAR +STARTCHAR colonmonetary +ENCODING 8353 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +0A +3E +4A +4A +54 +54 +68 +68 +52 +7C +50 +00 +ENDCHAR +STARTCHAR uni20A2 +ENCODING 8354 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +40 +40 +56 +58 +50 +52 +3C +00 +00 +ENDCHAR +STARTCHAR franc +ENCODING 8355 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +40 +40 +40 +76 +58 +50 +50 +50 +00 +00 +ENDCHAR +STARTCHAR lira +ENCODING 8356 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1C +22 +20 +70 +20 +70 +20 +22 +5C +00 +00 +ENDCHAR +STARTCHAR uni20A5 +ENCODING 8357 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +01 +76 +4D +49 +59 +69 +41 +80 +00 +ENDCHAR +STARTCHAR uni20A6 +ENCODING 8358 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +44 +64 +FE +54 +FE +4C +4C +44 +00 +00 +ENDCHAR +STARTCHAR peseta +ENCODING 8359 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +42 +FF +42 +7C +40 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni20A8 +ENCODING 8360 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +E0 +90 +90 +96 +E8 +A8 +A4 +92 +8C +00 +00 +ENDCHAR +STARTCHAR uni20A9 +ENCODING 8361 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +44 +FE +44 +FE +44 +54 +6C +44 +00 +00 +ENDCHAR +STARTCHAR afii57636 +ENCODING 8362 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +72 +8A +AA +AA +AA +AA +AA +A2 +9C +00 +00 +ENDCHAR +STARTCHAR dong +ENCODING 8363 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +3E +02 +3A +46 +42 +42 +46 +3A +00 +3C +ENDCHAR +STARTCHAR Euro +ENCODING 8364 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +40 +F8 +40 +F8 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni20AD +ENCODING 8365 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +44 +48 +50 +FC +50 +48 +44 +42 +00 +00 +ENDCHAR +STARTCHAR uni20AE +ENCODING 8366 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +10 +18 +30 +10 +18 +30 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni20AF +ENCODING 8367 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +38 +64 +22 +22 +22 +22 +72 +6C +00 +00 +ENDCHAR +STARTCHAR uni20B0 +ENCODING 8368 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +14 +08 +0C +52 +52 +A2 +A2 +04 +08 +ENDCHAR +STARTCHAR uni20B1 +ENCODING 8369 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +42 +FF +42 +FF +42 +7C +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni20D0 +ENCODING 8400 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +20 +7E +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni20D1 +ENCODING 8401 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +04 +7E +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni20D2 +ENCODING 8402 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +00 +ENDCHAR +STARTCHAR uni20D3 +ENCODING 8403 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +10 +10 +10 +10 +10 +10 +10 +10 +00 +ENDCHAR +STARTCHAR uni20D4 +ENCODING 8404 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +5C +62 +70 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni20D5 +ENCODING 8405 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +3A +46 +0E +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni20D6 +ENCODING 8406 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +20 +7E +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni20D7 +ENCODING 8407 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +04 +7E +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni20D8 +ENCODING 8408 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +38 +44 +44 +44 +38 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni20D9 +ENCODING 8409 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3C +42 +42 +4A +52 +3C +10 +08 +00 +00 +ENDCHAR +STARTCHAR uni20DA +ENCODING 8410 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3C +42 +42 +52 +4A +3C +08 +10 +00 +00 +ENDCHAR +STARTCHAR uni20DB +ENCODING 8411 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +54 +54 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni20DC +ENCODING 8412 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +AA +AA +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni20DD +ENCODING 8413 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +24 +42 +42 +81 +81 +81 +81 +81 +42 +42 +24 +18 +ENDCHAR +STARTCHAR uni20DE +ENCODING 8414 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +FF +81 +81 +81 +81 +81 +81 +81 +81 +81 +81 +81 +FF +ENDCHAR +STARTCHAR uni20DF +ENCODING 8415 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +24 +24 +42 +42 +81 +81 +81 +42 +42 +24 +24 +18 +ENDCHAR +STARTCHAR uni20E0 +ENCODING 8416 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +24 +42 +42 +A1 +91 +99 +89 +85 +42 +42 +24 +18 +ENDCHAR +STARTCHAR uni20E1 +ENCODING 8417 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +7E +24 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni20E2 +ENCODING 8418 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +7E +81 +81 +81 +81 +81 +81 +81 +81 +81 +7E +00 +ENDCHAR +STARTCHAR uni20E3 +ENCODING 8419 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +7E +81 +81 +81 +81 +81 +81 +81 +81 +81 +81 +81 +7E +ENDCHAR +STARTCHAR uni20E4 +ENCODING 8420 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +24 +24 +42 +42 +81 +81 +81 +81 +81 +81 +81 +7E +ENDCHAR +STARTCHAR uni20E5 +ENCODING 8421 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +40 +40 +20 +20 +10 +10 +10 +08 +08 +04 +04 +00 +ENDCHAR +STARTCHAR uni20E6 +ENCODING 8422 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +28 +28 +28 +28 +28 +28 +28 +28 +28 +28 +28 +00 +ENDCHAR +STARTCHAR uni20E7 +ENCODING 8423 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +FF +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +00 +00 +ENDCHAR +STARTCHAR uni20E8 +ENCODING 8424 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +54 +54 +ENDCHAR +STARTCHAR uni20E9 +ENCODING 8425 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +FF +81 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni20EA +ENCODING 8426 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +40 +FF +40 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2100 +ENCODING 8448 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +64 +A4 +A4 +68 +10 +26 +48 +48 +46 +00 +00 +ENDCHAR +STARTCHAR uni2101 +ENCODING 8449 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +64 +A4 +A4 +68 +16 +28 +44 +42 +4C +00 +00 +ENDCHAR +STARTCHAR uni2102 +ENCODING 8450 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +52 +50 +50 +50 +50 +50 +52 +3C +00 +00 +ENDCHAR +STARTCHAR uni2103 +ENCODING 8451 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +40 +AC +52 +10 +10 +10 +10 +10 +12 +0C +00 +00 +ENDCHAR +STARTCHAR uni2104 +ENCODING 8452 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +38 +50 +50 +50 +38 +10 +1C +00 +00 +ENDCHAR +STARTCHAR afii61248 +ENCODING 8453 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +64 +84 +88 +68 +10 +24 +2A +4A +44 +00 +00 +ENDCHAR +STARTCHAR uni2106 +ENCODING 8454 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +64 +84 +88 +68 +10 +2A +2A +4A +46 +00 +00 +ENDCHAR +STARTCHAR uni2107 +ENCODING 8455 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3E +42 +40 +40 +38 +40 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni2108 +ENCODING 8456 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +44 +02 +12 +1E +12 +02 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni2109 +ENCODING 8457 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +20 +50 +20 +1E +10 +10 +1C +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni210A +ENCODING 8458 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +1C +22 +42 +42 +3C +04 +44 +38 +ENDCHAR +STARTCHAR uni210B +ENCODING 8459 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +62 +22 +22 +22 +3E +44 +44 +44 +46 +00 +00 +ENDCHAR +STARTCHAR uni210C +ENCODING 8460 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +68 +90 +80 +B0 +C8 +48 +28 +A8 +48 +10 +20 +ENDCHAR +STARTCHAR uni210D +ENCODING 8461 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +A2 +A2 +A2 +A2 +BE +A2 +A2 +A2 +A2 +00 +00 +ENDCHAR +STARTCHAR uni210E +ENCODING 8462 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +20 +3C +22 +22 +44 +44 +00 +00 +ENDCHAR +STARTCHAR uni210F +ENCODING 8463 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +1C +70 +20 +3C +22 +22 +44 +44 +00 +00 +ENDCHAR +STARTCHAR uni2110 +ENCODING 8464 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1C +04 +04 +08 +08 +08 +10 +50 +20 +00 +00 +ENDCHAR +STARTCHAR Ifraktur +ENCODING 8465 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +42 +22 +02 +04 +04 +02 +62 +1C +00 +00 +ENDCHAR +STARTCHAR uni2112 +ENCODING 8466 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +54 +38 +10 +10 +20 +70 +A8 +46 +00 +00 +ENDCHAR +STARTCHAR afii61289 +ENCODING 8467 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +28 +28 +28 +28 +28 +10 +30 +4C +00 +00 +ENDCHAR +STARTCHAR uni2114 +ENCODING 8468 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +90 +FC +90 +94 +9A +92 +92 +B2 +4C +00 +00 +ENDCHAR +STARTCHAR uni2115 +ENCODING 8469 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +E2 +B2 +B2 +AA +AA +A6 +A6 +A2 +A2 +00 +00 +ENDCHAR +STARTCHAR afii61352 +ENCODING 8470 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +90 +94 +9A +D4 +D0 +BE +B0 +90 +90 +00 +00 +ENDCHAR +STARTCHAR uni2117 +ENCODING 8471 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +82 +B2 +AA +B2 +A2 +A2 +82 +7C +00 +00 +ENDCHAR +STARTCHAR weierstrass +ENCODING 8472 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +40 +9C +A2 +42 +42 +B2 +AC +A0 +40 +ENDCHAR +STARTCHAR uni2119 +ENCODING 8473 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +52 +52 +52 +52 +5C +50 +50 +50 +00 +00 +ENDCHAR +STARTCHAR uni211A +ENCODING 8474 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +A2 +A2 +A2 +A2 +A2 +A2 +A2 +7C +02 +00 +ENDCHAR +STARTCHAR uni211B +ENCODING 8475 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +22 +22 +22 +3C +48 +44 +44 +44 +00 +00 +ENDCHAR +STARTCHAR Rfraktur +ENCODING 8476 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +52 +32 +12 +1C +14 +52 +52 +22 +00 +00 +ENDCHAR +STARTCHAR uni211D +ENCODING 8477 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +52 +52 +52 +5C +52 +52 +52 +52 +00 +00 +ENDCHAR +STARTCHAR prescription +ENCODING 8478 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +42 +42 +42 +7C +4A +44 +4A +42 +00 +00 +ENDCHAR +STARTCHAR uni211F +ENCODING 8479 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +30 +10 +7C +52 +52 +52 +7C +58 +54 +52 +52 +10 +00 +ENDCHAR +STARTCHAR uni2120 +ENCODING 8480 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +34 +5C +34 +54 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2121 +ENCODING 8481 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +E0 +40 +78 +60 +70 +24 +3C +04 +04 +07 +00 +00 +ENDCHAR +STARTCHAR trademark +ENCODING 8482 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +EA +4E +4A +4A +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2123 +ENCODING 8483 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +30 +10 +92 +92 +92 +92 +54 +54 +38 +10 +10 +10 +00 +ENDCHAR +STARTCHAR uni2124 +ENCODING 8484 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +0A +14 +14 +28 +50 +50 +A0 +FE +00 +00 +ENDCHAR +STARTCHAR uni2125 +ENCODING 8485 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1E +04 +08 +1E +04 +08 +1C +02 +02 +22 +1C +ENDCHAR +STARTCHAR Omega +ENCODING 8486 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +82 +82 +82 +82 +82 +6C +28 +EE +00 +00 +ENDCHAR +STARTCHAR uni2127 +ENCODING 8487 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +66 +24 +24 +42 +42 +42 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni2128 +ENCODING 8488 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +02 +12 +0C +12 +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni2129 +ENCODING 8489 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +30 +08 +08 +08 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni212A +ENCODING 8490 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +44 +48 +50 +60 +50 +48 +44 +42 +00 +00 +ENDCHAR +STARTCHAR uni212B +ENCODING 8491 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +28 +10 +10 +28 +44 +44 +7C +44 +44 +00 +00 +ENDCHAR +STARTCHAR uni212C +ENCODING 8492 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +22 +22 +22 +3C +44 +44 +44 +78 +00 +00 +ENDCHAR +STARTCHAR uni212D +ENCODING 8493 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1E +28 +48 +44 +54 +48 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR estimated +ENCODING 8494 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +3C +66 +66 +7E +60 +62 +3C +00 +00 +ENDCHAR +STARTCHAR uni212F +ENCODING 8495 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +1E +22 +3E +40 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni2130 +ENCODING 8496 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +40 +38 +40 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni2131 +ENCODING 8497 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +90 +10 +10 +7C +20 +20 +A0 +40 +00 +00 +ENDCHAR +STARTCHAR uni2132 +ENCODING 8498 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +02 +02 +02 +3E +02 +02 +02 +7E +00 +00 +ENDCHAR +STARTCHAR uni2133 +ENCODING 8499 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +28 +28 +28 +54 +54 +44 +44 +44 +88 +00 +00 +ENDCHAR +STARTCHAR uni2134 +ENCODING 8500 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +1E +22 +22 +44 +44 +78 +00 +00 +ENDCHAR +STARTCHAR aleph +ENCODING 8501 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +48 +24 +34 +48 +44 +64 +00 +00 +ENDCHAR +STARTCHAR uni2136 +ENCODING 8502 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7C +04 +04 +04 +04 +7E +00 +00 +ENDCHAR +STARTCHAR uni2137 +ENCODING 8503 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +30 +08 +04 +04 +0A +32 +00 +00 +ENDCHAR +STARTCHAR uni2138 +ENCODING 8504 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +04 +04 +04 +04 +04 +00 +00 +ENDCHAR +STARTCHAR uni2139 +ENCODING 8505 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +38 +38 +00 +38 +38 +38 +38 +7C +00 +00 +ENDCHAR +STARTCHAR uni213A +ENCODING 8506 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +01 +3E +46 +4A +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni213D +ENCODING 8509 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +A2 +A2 +A2 +54 +54 +28 +28 +50 +ENDCHAR +STARTCHAR uni213E +ENCODING 8510 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +52 +52 +50 +50 +50 +50 +50 +50 +00 +00 +ENDCHAR +STARTCHAR uni213F +ENCODING 8511 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FF +52 +52 +52 +52 +52 +52 +52 +52 +00 +00 +ENDCHAR +STARTCHAR uni2140 +ENCODING 8512 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +A2 +50 +50 +28 +50 +50 +A2 +FE +00 +00 +ENDCHAR +STARTCHAR uni2141 +ENCODING 8513 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +72 +02 +02 +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni2142 +ENCODING 8514 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +02 +02 +02 +02 +02 +02 +02 +02 +00 +00 +ENDCHAR +STARTCHAR uni2143 +ENCODING 8515 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +02 +02 +02 +02 +02 +02 +02 +7E +00 +00 +ENDCHAR +STARTCHAR uni2144 +ENCODING 8516 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +10 +10 +28 +44 +82 +82 +00 +00 +ENDCHAR +STARTCHAR uni2145 +ENCODING 8517 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +51 +51 +51 +A2 +A2 +A2 +A2 +FC +00 +00 +ENDCHAR +STARTCHAR uni2146 +ENCODING 8518 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +05 +05 +05 +3D +4A +8A +8A +8A +7A +00 +00 +ENDCHAR +STARTCHAR uni2147 +ENCODING 8519 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3E +51 +5E +A0 +A0 +7C +00 +00 +ENDCHAR +STARTCHAR uni2148 +ENCODING 8520 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +0C +0C +00 +3C +14 +14 +28 +28 +7C +00 +00 +ENDCHAR +STARTCHAR uni2149 +ENCODING 8521 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +06 +06 +00 +1E +0A +0A +14 +14 +14 +28 +70 +ENDCHAR +STARTCHAR uni214A +ENCODING 8522 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +20 +FC +A2 +A2 +BC +A0 +20 +3E +00 +00 +ENDCHAR +STARTCHAR uni214B +ENCODING 8523 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +5C +22 +52 +0C +12 +12 +0C +00 +00 +ENDCHAR +STARTCHAR onethird +ENCODING 8531 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +40 +48 +14 +08 +04 +18 +00 +00 +ENDCHAR +STARTCHAR twothirds +ENCODING 8532 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +50 +20 +40 +7C +02 +04 +02 +0C +00 +00 +ENDCHAR +STARTCHAR uni2155 +ENCODING 8533 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +40 +5C +10 +18 +04 +18 +00 +00 +ENDCHAR +STARTCHAR uni2156 +ENCODING 8534 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +20 +50 +20 +40 +70 +0E +08 +0C +02 +0C +00 +00 +ENDCHAR +STARTCHAR uni2157 +ENCODING 8535 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +20 +50 +20 +10 +60 +0E +08 +0C +02 +0C +00 +00 +ENDCHAR +STARTCHAR uni2158 +ENCODING 8536 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +50 +70 +10 +0E +08 +0C +02 +0C +00 +00 +ENDCHAR +STARTCHAR uni2159 +ENCODING 8537 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +40 +4C +10 +18 +14 +08 +00 +00 +ENDCHAR +STARTCHAR uni215A +ENCODING 8538 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +70 +40 +60 +10 +6E +08 +0C +0A +04 +00 +00 +ENDCHAR +STARTCHAR oneeighth +ENCODING 8539 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +40 +C0 +40 +40 +4C +F2 +0C +12 +12 +0C +00 +00 +ENDCHAR +STARTCHAR threeeighths +ENCODING 8540 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +C0 +20 +C0 +20 +2C +D2 +0C +12 +12 +0C +00 +00 +ENDCHAR +STARTCHAR fiveeighths +ENCODING 8541 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +E0 +80 +C0 +20 +2C +D2 +0C +12 +12 +0C +00 +00 +ENDCHAR +STARTCHAR seveneighths +ENCODING 8542 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +E0 +20 +20 +40 +4C +52 +0C +12 +12 +0C +00 +00 +ENDCHAR +STARTCHAR uni215F +ENCODING 8543 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +40 +40 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2160 +ENCODING 8544 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni2161 +ENCODING 8545 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +24 +24 +24 +24 +24 +24 +24 +24 +00 +00 +ENDCHAR +STARTCHAR uni2162 +ENCODING 8546 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +54 +54 +54 +54 +54 +54 +54 +54 +54 +00 +00 +ENDCHAR +STARTCHAR uni2163 +ENCODING 8547 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +A2 +A2 +A2 +A2 +94 +94 +94 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni2164 +ENCODING 8548 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +44 +44 +44 +28 +28 +28 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni2165 +ENCODING 8549 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +8A +8A +8A +8A +52 +52 +52 +22 +22 +00 +00 +ENDCHAR +STARTCHAR uni2166 +ENCODING 8550 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +AA +AA +AA +AA +AA +AA +AA +4A +4A +00 +00 +ENDCHAR +STARTCHAR uni2167 +ENCODING 8551 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +AD +AD +AD +AD +AD +AD +AD +4D +4D +00 +00 +ENDCHAR +STARTCHAR uni2168 +ENCODING 8552 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +A2 +A2 +94 +94 +88 +94 +94 +A2 +A2 +00 +00 +ENDCHAR +STARTCHAR uni2169 +ENCODING 8553 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +88 +88 +50 +50 +20 +50 +50 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni216A +ENCODING 8554 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +8A +8A +52 +52 +22 +52 +52 +8A +8A +00 +00 +ENDCHAR +STARTCHAR uni216B +ENCODING 8555 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +AA +AA +AA +4A +4A +4A +AA +AA +AA +00 +00 +ENDCHAR +STARTCHAR uni216C +ENCODING 8556 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +40 +40 +40 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR uni216D +ENCODING 8557 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +40 +40 +40 +40 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni216E +ENCODING 8558 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +22 +22 +22 +22 +22 +22 +22 +7C +00 +00 +ENDCHAR +STARTCHAR uni216F +ENCODING 8559 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +C6 +AA +92 +92 +82 +82 +82 +82 +00 +00 +ENDCHAR +STARTCHAR uni2170 +ENCODING 8560 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +00 +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni2171 +ENCODING 8561 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +24 +00 +24 +24 +24 +24 +24 +24 +00 +00 +ENDCHAR +STARTCHAR uni2172 +ENCODING 8562 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +54 +00 +54 +54 +54 +54 +54 +54 +00 +00 +ENDCHAR +STARTCHAR uni2173 +ENCODING 8563 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +80 +00 +A2 +A2 +94 +94 +88 +88 +00 +00 +ENDCHAR +STARTCHAR uni2174 +ENCODING 8564 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +44 +44 +28 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni2175 +ENCODING 8565 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +02 +00 +8A +8A +52 +52 +22 +22 +00 +00 +ENDCHAR +STARTCHAR uni2176 +ENCODING 8566 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +0A +00 +AA +AA +AA +AA +4A +4A +00 +00 +ENDCHAR +STARTCHAR uni2177 +ENCODING 8567 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +0D +00 +AD +AD +AD +AD +4D +4D +00 +00 +ENDCHAR +STARTCHAR uni2178 +ENCODING 8568 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +80 +00 +A2 +94 +88 +88 +94 +A2 +00 +00 +ENDCHAR +STARTCHAR uni2179 +ENCODING 8569 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +28 +10 +10 +28 +44 +00 +00 +ENDCHAR +STARTCHAR uni217A +ENCODING 8570 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +02 +00 +8A +52 +22 +22 +52 +8A +00 +00 +ENDCHAR +STARTCHAR uni217B +ENCODING 8571 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +0A +00 +AA +AA +4A +4A +AA +AA +00 +00 +ENDCHAR +STARTCHAR uni217C +ENCODING 8572 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +10 +10 +10 +10 +10 +10 +10 +38 +00 +00 +ENDCHAR +STARTCHAR uni217D +ENCODING 8573 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +40 +40 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni217E +ENCODING 8574 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +02 +02 +3E +42 +42 +42 +42 +3E +00 +00 +ENDCHAR +STARTCHAR uni217F +ENCODING 8575 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +EC +92 +92 +92 +92 +82 +00 +00 +ENDCHAR +STARTCHAR uni2180 +ENCODING 8576 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +92 +92 +92 +92 +92 +92 +92 +7C +00 +00 +ENDCHAR +STARTCHAR uni2181 +ENCODING 8577 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +42 +72 +52 +52 +52 +72 +42 +7C +00 +00 +ENDCHAR +STARTCHAR uni2182 +ENCODING 8578 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +92 +BA +AA +AA +AA +BA +92 +7C +00 +00 +ENDCHAR +STARTCHAR uni2183 +ENCODING 8579 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +02 +02 +02 +02 +02 +42 +3C +00 +00 +ENDCHAR +STARTCHAR arrowleft +ENCODING 8592 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +20 +40 +FE +40 +20 +00 +00 +00 +00 +ENDCHAR +STARTCHAR arrowup +ENCODING 8593 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +38 +54 +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR arrowright +ENCODING 8594 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +04 +02 +7F +02 +04 +00 +00 +00 +00 +ENDCHAR +STARTCHAR arrowdown +ENCODING 8595 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +10 +10 +10 +54 +38 +10 +00 +00 +ENDCHAR +STARTCHAR arrowboth +ENCODING 8596 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +24 +42 +FF +42 +24 +00 +00 +00 +00 +ENDCHAR +STARTCHAR arrowupdn +ENCODING 8597 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +38 +54 +10 +10 +54 +38 +10 +00 +00 +ENDCHAR +STARTCHAR uni2196 +ENCODING 8598 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +70 +60 +50 +08 +04 +02 +00 +00 +ENDCHAR +STARTCHAR uni2197 +ENCODING 8599 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +0E +06 +0A +10 +20 +40 +00 +00 +ENDCHAR +STARTCHAR uni2198 +ENCODING 8600 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +40 +20 +10 +0A +06 +0E +00 +00 +ENDCHAR +STARTCHAR uni2199 +ENCODING 8601 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +02 +04 +08 +50 +60 +70 +00 +00 +ENDCHAR +STARTCHAR uni219A +ENCODING 8602 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +22 +42 +FF +44 +24 +00 +00 +00 +ENDCHAR +STARTCHAR uni219B +ENCODING 8603 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +24 +22 +FF +42 +44 +00 +00 +00 +ENDCHAR +STARTCHAR uni219C +ENCODING 8604 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +42 +F5 +48 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni219D +ENCODING 8605 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +04 +42 +AF +12 +04 +00 +00 +00 +ENDCHAR +STARTCHAR uni219E +ENCODING 8606 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +24 +48 +FF +48 +24 +00 +00 +00 +ENDCHAR +STARTCHAR uni219F +ENCODING 8607 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +38 +54 +10 +38 +54 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni21A0 +ENCODING 8608 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +24 +12 +FF +12 +24 +00 +00 +00 +ENDCHAR +STARTCHAR uni21A1 +ENCODING 8609 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +10 +54 +38 +10 +54 +38 +10 +00 +00 +ENDCHAR +STARTCHAR uni21A2 +ENCODING 8610 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +22 +44 +F8 +44 +22 +10 +00 +00 +ENDCHAR +STARTCHAR uni21A3 +ENCODING 8611 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +08 +44 +22 +1F +22 +44 +08 +00 +00 +ENDCHAR +STARTCHAR uni21A4 +ENCODING 8612 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +41 +FF +41 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni21A5 +ENCODING 8613 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +38 +54 +10 +10 +10 +10 +10 +38 +00 +00 +ENDCHAR +STARTCHAR uni21A6 +ENCODING 8614 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +04 +82 +FF +82 +04 +00 +00 +00 +ENDCHAR +STARTCHAR uni21A7 +ENCODING 8615 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +10 +10 +10 +10 +10 +54 +38 +10 +00 +00 +ENDCHAR +STARTCHAR arrowupdnbse +ENCODING 8616 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +38 +54 +10 +10 +10 +54 +38 +10 +FE +00 +00 +ENDCHAR +STARTCHAR uni21A9 +ENCODING 8617 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +22 +41 +FE +40 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni21AA +ENCODING 8618 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +82 +7F +02 +04 +00 +00 +00 +ENDCHAR +STARTCHAR uni21AB +ENCODING 8619 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +22 +45 +FE +44 +24 +00 +00 +00 +ENDCHAR +STARTCHAR uni21AC +ENCODING 8620 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +A2 +7F +22 +24 +00 +00 +00 +ENDCHAR +STARTCHAR uni21AD +ENCODING 8621 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +24 +5A +E7 +42 +24 +00 +00 +00 +ENDCHAR +STARTCHAR uni21AE +ENCODING 8622 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +24 +52 +FF +52 +24 +00 +00 +00 +ENDCHAR +STARTCHAR uni21AF +ENCODING 8623 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +20 +20 +40 +4C +34 +04 +08 +2A +1C +08 +00 +00 +ENDCHAR +STARTCHAR uni21B0 +ENCODING 8624 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +20 +7E +22 +12 +02 +02 +02 +02 +02 +00 +00 +ENDCHAR +STARTCHAR uni21B1 +ENCODING 8625 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +04 +7E +44 +48 +40 +40 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni21B2 +ENCODING 8626 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +02 +02 +02 +02 +02 +12 +22 +7E +20 +10 +00 +00 +ENDCHAR +STARTCHAR uni21B3 +ENCODING 8627 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +40 +40 +40 +40 +40 +48 +44 +7E +04 +08 +00 +00 +ENDCHAR +STARTCHAR uni21B4 +ENCODING 8628 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +78 +08 +08 +08 +08 +2A +1C +08 +00 +00 +ENDCHAR +STARTCHAR carriagereturn +ENCODING 8629 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +04 +04 +04 +04 +04 +14 +24 +7C +20 +10 +00 +00 +ENDCHAR +STARTCHAR uni21B6 +ENCODING 8630 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +0C +12 +21 +21 +A9 +70 +20 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni21B7 +ENCODING 8631 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +48 +84 +84 +95 +0E +04 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni21B8 +ENCODING 8632 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +FF +00 +70 +60 +50 +08 +04 +02 +00 +00 +ENDCHAR +STARTCHAR uni21B9 +ENCODING 8633 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +88 +90 +BE +90 +09 +7D +09 +11 +00 +00 +ENDCHAR +STARTCHAR uni21BA +ENCODING 8634 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +64 +8E +95 +84 +84 +48 +30 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni21BB +ENCODING 8635 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +26 +71 +A9 +21 +21 +12 +0C +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni21BC +ENCODING 8636 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +40 +FF +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni21BD +ENCODING 8637 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +FF +40 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni21BE +ENCODING 8638 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +18 +14 +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni21BF +ENCODING 8639 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +18 +28 +08 +08 +08 +08 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni21C0 +ENCODING 8640 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +04 +02 +FF +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni21C1 +ENCODING 8641 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +FF +02 +04 +00 +00 +00 +ENDCHAR +STARTCHAR uni21C2 +ENCODING 8642 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +10 +10 +10 +14 +18 +10 +00 +00 +ENDCHAR +STARTCHAR uni21C3 +ENCODING 8643 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +08 +08 +08 +08 +08 +28 +18 +08 +00 +00 +ENDCHAR +STARTCHAR uni21C4 +ENCODING 8644 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +04 +FE +04 +28 +40 +FE +40 +20 +00 +00 +ENDCHAR +STARTCHAR uni21C5 +ENCODING 8645 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +74 +AC +24 +24 +24 +24 +35 +2E +24 +00 +00 +ENDCHAR +STARTCHAR uni21C6 +ENCODING 8646 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +40 +FE +40 +28 +04 +FE +04 +08 +00 +00 +ENDCHAR +STARTCHAR uni21C7 +ENCODING 8647 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +20 +40 +FF +40 +20 +00 +20 +40 +FF +40 +20 +00 +00 +ENDCHAR +STARTCHAR uni21C8 +ENCODING 8648 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +44 +EE +44 +44 +44 +44 +44 +44 +44 +44 +00 +00 +ENDCHAR +STARTCHAR uni21C9 +ENCODING 8649 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +04 +02 +FF +02 +04 +00 +04 +02 +FF +02 +04 +00 +00 +ENDCHAR +STARTCHAR uni21CA +ENCODING 8650 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +44 +44 +44 +44 +44 +44 +44 +44 +EE +44 +00 +00 +ENDCHAR +STARTCHAR uni21CB +ENCODING 8651 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +20 +40 +FE +00 +FE +04 +08 +00 +00 +ENDCHAR +STARTCHAR uni21CC +ENCODING 8652 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +08 +04 +FE +00 +FE +40 +20 +00 +00 +ENDCHAR +STARTCHAR uni21CD +ENCODING 8653 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +21 +7F +82 +7F +24 +10 +00 +00 +ENDCHAR +STARTCHAR uni21CE +ENCODING 8654 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +24 +7E +99 +7E +24 +00 +00 +00 +ENDCHAR +STARTCHAR uni21CF +ENCODING 8655 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +08 +24 +FE +41 +FE +84 +08 +00 +00 +ENDCHAR +STARTCHAR arrowdblleft +ENCODING 8656 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +20 +7F +80 +7F +20 +10 +00 +00 +ENDCHAR +STARTCHAR arrowdblup +ENCODING 8657 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +14 +36 +55 +14 +14 +14 +14 +14 +00 +00 +ENDCHAR +STARTCHAR arrowdblright +ENCODING 8658 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +08 +04 +FE +01 +FE +04 +08 +00 +00 +ENDCHAR +STARTCHAR arrowdbldown +ENCODING 8659 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +28 +28 +28 +28 +28 +AA +6C +28 +10 +00 +00 +ENDCHAR +STARTCHAR arrowdblboth +ENCODING 8660 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +24 +7E +81 +7E +24 +00 +00 +00 +ENDCHAR +STARTCHAR uni21D5 +ENCODING 8661 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +28 +6C +AA +28 +28 +28 +AA +6C +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni21D6 +ENCODING 8662 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +FC +90 +88 +C4 +A2 +90 +08 +00 +00 +ENDCHAR +STARTCHAR uni21D7 +ENCODING 8663 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +3F +09 +11 +23 +45 +09 +10 +00 +00 +ENDCHAR +STARTCHAR uni21D8 +ENCODING 8664 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +09 +45 +23 +11 +09 +3F +00 +00 +ENDCHAR +STARTCHAR uni21D9 +ENCODING 8665 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +08 +90 +A2 +C4 +88 +90 +FC +00 +00 +ENDCHAR +STARTCHAR uni21DA +ENCODING 8666 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +10 +3F +40 +FF +40 +3F +10 +08 +00 +00 +ENDCHAR +STARTCHAR uni21DB +ENCODING 8667 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +08 +FC +02 +FF +02 +FC +08 +10 +00 +00 +ENDCHAR +STARTCHAR uni21DC +ENCODING 8668 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +20 +48 +F5 +42 +20 +10 +00 +00 +ENDCHAR +STARTCHAR uni21DD +ENCODING 8669 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +08 +04 +12 +AF +42 +04 +08 +00 +00 +ENDCHAR +STARTCHAR uni21DE +ENCODING 8670 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +38 +54 +92 +10 +7C +10 +7C +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni21DF +ENCODING 8671 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +10 +7C +10 +7C +10 +92 +54 +38 +10 +00 +00 +ENDCHAR +STARTCHAR uni21E0 +ENCODING 8672 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +20 +40 +B6 +40 +20 +10 +00 +00 +ENDCHAR +STARTCHAR uni21E1 +ENCODING 8673 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +28 +54 +92 +00 +10 +10 +00 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni21E2 +ENCODING 8674 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +08 +04 +02 +6D +02 +04 +08 +00 +00 +ENDCHAR +STARTCHAR uni21E3 +ENCODING 8675 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +10 +00 +10 +10 +00 +92 +54 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni21E4 +ENCODING 8676 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +90 +A0 +FE +A0 +90 +00 +00 +00 +ENDCHAR +STARTCHAR uni21E5 +ENCODING 8677 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +09 +05 +7F +05 +09 +00 +00 +00 +ENDCHAR +STARTCHAR uni21E6 +ENCODING 8678 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +30 +5F +81 +5F +30 +10 +00 +00 +ENDCHAR +STARTCHAR uni21E7 +ENCODING 8679 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +28 +44 +EE +28 +28 +28 +28 +38 +00 +00 +ENDCHAR +STARTCHAR uni21E8 +ENCODING 8680 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +08 +0C +FA +81 +FA +0C +08 +00 +00 +ENDCHAR +STARTCHAR uni21E9 +ENCODING 8681 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +28 +28 +28 +28 +EE +44 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni21EA +ENCODING 8682 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +28 +44 +EE +28 +28 +38 +00 +38 +28 +38 +00 +ENDCHAR +STARTCHAR uni21EB +ENCODING 8683 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +28 +44 +EE +28 +28 +28 +6C +44 +7C +00 +ENDCHAR +STARTCHAR uni21EC +ENCODING 8684 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +28 +44 +FE +28 +28 +28 +6C +44 +7C +00 +ENDCHAR +STARTCHAR uni21ED +ENCODING 8685 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +28 +44 +FE +38 +38 +38 +7C +44 +7C +00 +ENDCHAR +STARTCHAR uni21EE +ENCODING 8686 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +28 +44 +EE +44 +EE +28 +28 +38 +00 +00 +ENDCHAR +STARTCHAR uni21EF +ENCODING 8687 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +28 +44 +EE +44 +EE +28 +6C +44 +7C +00 +ENDCHAR +STARTCHAR uni21F0 +ENCODING 8688 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +88 +8C +FA +81 +FA +8C +88 +00 +00 +ENDCHAR +STARTCHAR uni21F1 +ENCODING 8689 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +FE +80 +BC +B0 +A8 +A4 +82 +00 +00 +ENDCHAR +STARTCHAR uni21F2 +ENCODING 8690 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +82 +4A +2A +1A +7A +02 +FE +00 +00 +ENDCHAR +STARTCHAR uni21F3 +ENCODING 8691 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +28 +44 +EE +28 +EE +44 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni21F4 +ENCODING 8692 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +24 +52 +FF +52 +24 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni21F5 +ENCODING 8693 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +24 +2E +35 +24 +24 +24 +24 +AC +74 +24 +00 +00 +ENDCHAR +STARTCHAR uni21F6 +ENCODING 8694 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +04 +02 +FF +02 +04 +02 +FF +02 +04 +02 +FF +02 +04 +ENDCHAR +STARTCHAR uni21F7 +ENCODING 8695 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +28 +48 +FE +48 +28 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni21F8 +ENCODING 8696 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +14 +12 +7F +12 +14 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni21F9 +ENCODING 8697 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +54 +FE +54 +10 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni21FA +ENCODING 8698 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +2A +4A +FF +4A +2A +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni21FB +ENCODING 8699 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +54 +52 +FF +52 +54 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni21FC +ENCODING 8700 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +18 +5A +FF +5A +18 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni21FD +ENCODING 8701 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +30 +50 +9F +50 +30 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni21FE +ENCODING 8702 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +08 +0C +0A +F9 +0A +0C +08 +00 +00 +00 +ENDCHAR +STARTCHAR uni21FF +ENCODING 8703 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +24 +66 +BD +66 +24 +00 +00 +00 +00 +ENDCHAR +STARTCHAR universal +ENCODING 8704 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +42 +7E +42 +42 +42 +24 +18 +00 +00 +ENDCHAR +STARTCHAR uni2201 +ENCODING 8705 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +48 +40 +40 +40 +40 +40 +48 +30 +00 +00 +ENDCHAR +STARTCHAR partialdiff +ENCODING 8706 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +38 +44 +04 +3C +44 +44 +48 +30 +00 +00 +ENDCHAR +STARTCHAR existential +ENCODING 8707 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +02 +02 +02 +3E +02 +02 +02 +7E +00 +00 +ENDCHAR +STARTCHAR uni2204 +ENCODING 8708 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +04 +04 +FE +0A +0A +12 +7E +12 +22 +22 +FE +40 +40 +ENDCHAR +STARTCHAR emptyset +ENCODING 8709 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +02 +02 +3C +46 +4A +4A +52 +62 +3C +40 +40 +00 +ENDCHAR +STARTCHAR Delta +ENCODING 8710 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +28 +28 +44 +44 +82 +82 +FE +00 +00 +ENDCHAR +STARTCHAR gradient +ENCODING 8711 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +82 +44 +44 +28 +28 +10 +10 +00 +00 +ENDCHAR +STARTCHAR element +ENCODING 8712 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +1E +20 +40 +7E +40 +20 +1E +00 +00 +ENDCHAR +STARTCHAR notelement +ENCODING 8713 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +08 +1E +28 +48 +7E +48 +28 +1E +08 +08 +ENDCHAR +STARTCHAR uni220A +ENCODING 8714 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +1C +20 +3C +20 +1C +00 +00 +00 +ENDCHAR +STARTCHAR suchthat +ENCODING 8715 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +78 +04 +02 +7E +02 +04 +78 +00 +00 +ENDCHAR +STARTCHAR uni220C +ENCODING 8716 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +78 +14 +12 +7E +12 +14 +78 +10 +10 +ENDCHAR +STARTCHAR uni220D +ENCODING 8717 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +04 +3C +04 +38 +00 +00 +00 +ENDCHAR +STARTCHAR uni220E +ENCODING 8718 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +7E +7E +7E +7E +7E +7E +7E +00 +00 +00 +ENDCHAR +STARTCHAR product +ENCODING 8719 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +7E +24 +24 +24 +24 +24 +24 +24 +24 +24 +76 +00 +ENDCHAR +STARTCHAR uni2210 +ENCODING 8720 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +76 +24 +24 +24 +24 +24 +24 +24 +24 +24 +7E +00 +ENDCHAR +STARTCHAR summation +ENCODING 8721 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +7E +40 +20 +10 +08 +04 +08 +10 +20 +40 +7E +00 +ENDCHAR +STARTCHAR minus +ENCODING 8722 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +7C +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2213 +ENCODING 8723 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +7C +00 +10 +10 +7C +10 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni2214 +ENCODING 8724 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +00 +10 +10 +7C +10 +10 +00 +00 +00 +ENDCHAR +STARTCHAR fraction +ENCODING 8725 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +04 +08 +08 +10 +10 +20 +20 +40 +00 +00 +ENDCHAR +STARTCHAR uni2216 +ENCODING 8726 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +40 +20 +20 +10 +10 +08 +08 +04 +00 +00 +ENDCHAR +STARTCHAR asteriskmath +ENCODING 8727 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +54 +38 +7C +38 +54 +00 +00 +00 +ENDCHAR +STARTCHAR uni2218 +ENCODING 8728 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +18 +24 +24 +18 +00 +00 +00 +00 +ENDCHAR +STARTCHAR periodcentered +ENCODING 8729 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +18 +3C +3C +18 +00 +00 +00 +00 +ENDCHAR +STARTCHAR radical +ENCODING 8730 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +02 +04 +04 +08 +08 +90 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni221B +ENCODING 8731 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +C2 +22 +44 +24 +C8 +08 +90 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni221C +ENCODING 8732 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +82 +A4 +E4 +28 +08 +90 +50 +20 +00 +00 +ENDCHAR +STARTCHAR proportional +ENCODING 8733 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +34 +48 +48 +34 +00 +00 +00 +00 +ENDCHAR +STARTCHAR infinity +ENCODING 8734 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +6C +92 +92 +6C +00 +00 +00 +00 +ENDCHAR +STARTCHAR orthogonal +ENCODING 8735 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +40 +40 +40 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR angle +ENCODING 8736 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +02 +04 +08 +10 +20 +40 +7E +00 +00 +00 +ENDCHAR +STARTCHAR uni2221 +ENCODING 8737 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +02 +44 +28 +10 +28 +48 +7E +08 +00 +00 +ENDCHAR +STARTCHAR uni2222 +ENCODING 8738 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +28 +10 +28 +48 +28 +10 +28 +04 +00 +00 +ENDCHAR +STARTCHAR uni2223 +ENCODING 8739 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni2224 +ENCODING 8740 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +14 +18 +10 +30 +50 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni2225 +ENCODING 8741 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +28 +28 +28 +28 +28 +28 +28 +28 +28 +00 +00 +ENDCHAR +STARTCHAR uni2226 +ENCODING 8742 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +28 +2A +2C +28 +38 +28 +68 +A8 +28 +00 +00 +ENDCHAR +STARTCHAR logicaland +ENCODING 8743 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +28 +28 +44 +44 +82 +00 +00 +ENDCHAR +STARTCHAR logicalor +ENCODING 8744 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +82 +44 +44 +28 +28 +10 +00 +00 +ENDCHAR +STARTCHAR intersection +ENCODING 8745 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +18 +24 +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR union +ENCODING 8746 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +42 +42 +42 +24 +18 +00 +00 +ENDCHAR +STARTCHAR integral +ENCODING 8747 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +08 +14 +10 +10 +10 +10 +10 +10 +10 +10 +10 +50 +20 +ENDCHAR +STARTCHAR uni222C +ENCODING 8748 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +12 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +48 +ENDCHAR +STARTCHAR uni222D +ENCODING 8749 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +2A +54 +54 +54 +54 +54 +54 +54 +54 +54 +54 +68 +ENDCHAR +STARTCHAR uni222E +ENCODING 8750 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +08 +14 +10 +10 +38 +54 +54 +54 +38 +10 +10 +50 +20 +ENDCHAR +STARTCHAR uni222F +ENCODING 8751 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +12 +24 +24 +7E +A5 +A5 +A5 +7E +24 +24 +24 +48 +ENDCHAR +STARTCHAR uni2230 +ENCODING 8752 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +2A +54 +54 +7E +D5 +D5 +D5 +7E +54 +54 +54 +A8 +ENDCHAR +STARTCHAR uni2231 +ENCODING 8753 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +28 +20 +20 +20 +7A +A6 +2E +20 +20 +20 +A0 +40 +ENDCHAR +STARTCHAR uni2232 +ENCODING 8754 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +28 +20 +20 +74 +AC +BC +A8 +70 +20 +20 +A0 +40 +ENDCHAR +STARTCHAR uni2233 +ENCODING 8755 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +28 +20 +20 +70 +A8 +BC +AC +74 +20 +20 +A0 +40 +ENDCHAR +STARTCHAR therefore +ENCODING 8756 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +10 +00 +00 +44 +00 +00 +00 +ENDCHAR +STARTCHAR uni2235 +ENCODING 8757 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +44 +00 +00 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni2236 +ENCODING 8758 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +10 +00 +00 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni2237 +ENCODING 8759 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +24 +00 +00 +24 +00 +00 +00 +ENDCHAR +STARTCHAR uni2238 +ENCODING 8760 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +10 +00 +7C +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2239 +ENCODING 8761 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +04 +00 +F0 +00 +04 +00 +00 +00 +ENDCHAR +STARTCHAR uni223A +ENCODING 8762 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +00 +7C +00 +44 +00 +00 +00 +ENDCHAR +STARTCHAR uni223B +ENCODING 8763 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +04 +60 +92 +92 +0C +40 +00 +00 +ENDCHAR +STARTCHAR similar +ENCODING 8764 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +60 +92 +92 +0C +00 +00 +00 +ENDCHAR +STARTCHAR uni223D +ENCODING 8765 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +0C +92 +92 +60 +00 +00 +00 +ENDCHAR +STARTCHAR uni223E +ENCODING 8766 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +62 +91 +89 +46 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni223F +ENCODING 8767 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +60 +90 +90 +90 +12 +12 +12 +0C +00 +00 +ENDCHAR +STARTCHAR uni2240 +ENCODING 8768 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +08 +08 +08 +10 +20 +20 +20 +18 +00 +00 +ENDCHAR +STARTCHAR uni2241 +ENCODING 8769 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +10 +72 +92 +9C +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni2242 +ENCODING 8770 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +FE +00 +62 +92 +8C +00 +00 +00 +ENDCHAR +STARTCHAR uni2243 +ENCODING 8771 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +62 +92 +8C +00 +FE +00 +00 +00 +ENDCHAR +STARTCHAR uni2244 +ENCODING 8772 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +10 +72 +92 +9C +10 +FE +10 +00 +00 +ENDCHAR +STARTCHAR congruent +ENCODING 8773 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +62 +92 +8C +00 +FE +00 +FE +00 +00 +00 +ENDCHAR +STARTCHAR uni2246 +ENCODING 8774 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +62 +92 +8C +10 +FE +10 +FE +10 +00 +00 +ENDCHAR +STARTCHAR uni2247 +ENCODING 8775 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +72 +92 +9C +10 +FE +10 +FE +10 +00 +00 +ENDCHAR +STARTCHAR approxequal +ENCODING 8776 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +60 +92 +0C +60 +92 +0C +00 +00 +00 +ENDCHAR +STARTCHAR uni2249 +ENCODING 8777 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +72 +92 +9C +72 +92 +9C +10 +10 +00 +ENDCHAR +STARTCHAR uni224A +ENCODING 8778 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +62 +92 +8C +62 +92 +8C +00 +7C +00 +00 +ENDCHAR +STARTCHAR uni224B +ENCODING 8779 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +62 +92 +8C +62 +92 +8C +62 +92 +8C +00 +00 +ENDCHAR +STARTCHAR uni224C +ENCODING 8780 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +8C +92 +62 +00 +FE +00 +FE +00 +00 +00 +ENDCHAR +STARTCHAR uni224D +ENCODING 8781 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +3C +00 +3C +42 +00 +00 +00 +ENDCHAR +STARTCHAR uni224E +ENCODING 8782 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +18 +66 +00 +66 +18 +00 +00 +00 +ENDCHAR +STARTCHAR uni224F +ENCODING 8783 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +18 +66 +00 +7E +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2250 +ENCODING 8784 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +00 +7C +00 +7C +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2251 +ENCODING 8785 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +00 +7C +00 +7C +00 +10 +00 +00 +ENDCHAR +STARTCHAR uni2252 +ENCODING 8786 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +40 +00 +7C +00 +7C +00 +04 +00 +00 +ENDCHAR +STARTCHAR uni2253 +ENCODING 8787 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +04 +00 +7C +00 +7C +00 +40 +00 +00 +ENDCHAR +STARTCHAR uni2254 +ENCODING 8788 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +4E +00 +4E +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2255 +ENCODING 8789 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +72 +00 +72 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2256 +ENCODING 8790 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +7E +24 +7E +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2257 +ENCODING 8791 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +28 +10 +00 +7C +00 +7C +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2258 +ENCODING 8792 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +38 +44 +00 +7C +00 +7C +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2259 +ENCODING 8793 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +28 +00 +7C +00 +7C +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni225A +ENCODING 8794 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +28 +10 +00 +7C +00 +7C +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni225B +ENCODING 8795 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +54 +38 +7C +38 +54 +00 +7C +00 +7C +00 +00 +ENDCHAR +STARTCHAR uni225C +ENCODING 8796 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +28 +28 +44 +7C +00 +7C +00 +7C +00 +00 +ENDCHAR +STARTCHAR uni225D +ENCODING 8797 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +26 +6C +64 +00 +7E +00 +7E +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni225E +ENCODING 8798 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +68 +54 +54 +54 +00 +7C +00 +7C +00 +00 +00 +ENDCHAR +STARTCHAR uni225F +ENCODING 8799 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +28 +08 +10 +00 +10 +7C +00 +7C +00 +00 +00 +00 +ENDCHAR +STARTCHAR notequal +ENCODING 8800 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +04 +04 +7E +08 +10 +7E +20 +20 +00 +00 +ENDCHAR +STARTCHAR equivalence +ENCODING 8801 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +00 +7E +00 +7E +00 +00 +00 +ENDCHAR +STARTCHAR uni2262 +ENCODING 8802 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +04 +04 +7E +08 +7E +10 +7E +20 +20 +00 +ENDCHAR +STARTCHAR uni2263 +ENCODING 8803 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +00 +7E +00 +7E +00 +7E +00 +00 +ENDCHAR +STARTCHAR lessequal +ENCODING 8804 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +0E +30 +C0 +30 +0E +00 +FE +00 +00 +ENDCHAR +STARTCHAR greaterequal +ENCODING 8805 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +E0 +18 +06 +18 +E0 +00 +FE +00 +00 +ENDCHAR +STARTCHAR uni2266 +ENCODING 8806 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +0E +30 +C0 +30 +0E +00 +FE +00 +FE +00 +00 +ENDCHAR +STARTCHAR uni2267 +ENCODING 8807 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +E0 +18 +06 +18 +E0 +00 +FE +00 +FE +00 +00 +ENDCHAR +STARTCHAR uni2268 +ENCODING 8808 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +0E +30 +C0 +30 +0E +10 +FE +10 +FE +10 +00 +ENDCHAR +STARTCHAR uni2269 +ENCODING 8809 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +E0 +18 +06 +18 +E0 +10 +FE +10 +FE +10 +00 +ENDCHAR +STARTCHAR uni226A +ENCODING 8810 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +12 +24 +48 +90 +48 +24 +12 +00 +00 +00 +ENDCHAR +STARTCHAR uni226B +ENCODING 8811 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +90 +48 +24 +12 +24 +48 +90 +00 +00 +00 +ENDCHAR +STARTCHAR uni226C +ENCODING 8812 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +18 +24 +24 +24 +24 +24 +18 +24 +00 +00 +ENDCHAR +STARTCHAR uni226D +ENCODING 8813 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +54 +38 +10 +38 +54 +10 +00 +00 +ENDCHAR +STARTCHAR uni226E +ENCODING 8814 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +14 +18 +10 +30 +50 +30 +10 +18 +14 +10 +00 +ENDCHAR +STARTCHAR uni226F +ENCODING 8815 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +50 +30 +10 +18 +14 +18 +10 +30 +50 +10 +00 +ENDCHAR +STARTCHAR uni2270 +ENCODING 8816 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +10 +1C +30 +50 +30 +1C +10 +7C +10 +10 +00 +ENDCHAR +STARTCHAR uni2271 +ENCODING 8817 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +10 +70 +18 +14 +18 +70 +10 +7C +10 +10 +00 +ENDCHAR +STARTCHAR uni2272 +ENCODING 8818 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +0C +30 +40 +30 +0C +00 +24 +54 +48 +00 +00 +ENDCHAR +STARTCHAR uni2273 +ENCODING 8819 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +60 +18 +04 +18 +60 +00 +24 +54 +48 +00 +00 +ENDCHAR +STARTCHAR uni2274 +ENCODING 8820 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +1C +30 +50 +30 +1C +10 +34 +54 +58 +10 +00 +ENDCHAR +STARTCHAR uni2275 +ENCODING 8821 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +70 +18 +14 +18 +70 +10 +34 +54 +58 +10 +00 +ENDCHAR +STARTCHAR uni2276 +ENCODING 8822 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +0E +30 +C0 +30 +0E +E0 +18 +06 +18 +E0 +00 +00 +ENDCHAR +STARTCHAR uni2277 +ENCODING 8823 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +E0 +18 +06 +18 +E0 +0E +30 +C0 +30 +0E +00 +00 +ENDCHAR +STARTCHAR uni2278 +ENCODING 8824 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +1E +30 +D0 +30 +1E +F0 +18 +16 +18 +F0 +10 +00 +ENDCHAR +STARTCHAR uni2279 +ENCODING 8825 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +F0 +18 +16 +18 +F0 +1E +30 +D0 +30 +1E +10 +00 +ENDCHAR +STARTCHAR uni227A +ENCODING 8826 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +02 +04 +08 +70 +08 +04 +02 +00 +00 +00 +ENDCHAR +STARTCHAR uni227B +ENCODING 8827 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +40 +20 +10 +0E +10 +20 +40 +00 +00 +00 +ENDCHAR +STARTCHAR uni227C +ENCODING 8828 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +02 +04 +08 +70 +08 +74 +0A +04 +02 +00 +ENDCHAR +STARTCHAR uni227D +ENCODING 8829 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +40 +20 +10 +0E +10 +2E +50 +20 +40 +00 +ENDCHAR +STARTCHAR uni227E +ENCODING 8830 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +08 +70 +08 +04 +00 +24 +54 +48 +00 +00 +ENDCHAR +STARTCHAR uni227F +ENCODING 8831 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +20 +1C +20 +40 +00 +24 +54 +48 +00 +00 +ENDCHAR +STARTCHAR uni2280 +ENCODING 8832 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +12 +14 +18 +70 +18 +14 +12 +10 +00 +00 +ENDCHAR +STARTCHAR uni2281 +ENCODING 8833 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +48 +28 +18 +0E +18 +28 +48 +08 +00 +00 +ENDCHAR +STARTCHAR propersubset +ENCODING 8834 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3E +40 +40 +40 +3E +00 +00 +00 +ENDCHAR +STARTCHAR propersuperset +ENCODING 8835 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7C +02 +02 +02 +7C +00 +00 +00 +ENDCHAR +STARTCHAR notsubset +ENCODING 8836 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +08 +08 +3E +48 +48 +48 +3E +08 +08 +00 +ENDCHAR +STARTCHAR uni2285 +ENCODING 8837 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +10 +7C +12 +12 +12 +7C +10 +10 +00 +ENDCHAR +STARTCHAR reflexsubset +ENCODING 8838 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3E +40 +40 +40 +3E +00 +7E +00 +00 +00 +ENDCHAR +STARTCHAR reflexsuperset +ENCODING 8839 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +7C +02 +02 +02 +7C +00 +7E +00 +00 +00 +ENDCHAR +STARTCHAR uni2288 +ENCODING 8840 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +08 +3E +48 +48 +48 +3E +08 +7E +08 +08 +00 +ENDCHAR +STARTCHAR uni2289 +ENCODING 8841 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +10 +7C +12 +12 +12 +7C +10 +7E +10 +10 +00 +ENDCHAR +STARTCHAR uni228A +ENCODING 8842 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3E +40 +40 +40 +3E +08 +7E +10 +00 +00 +ENDCHAR +STARTCHAR uni228B +ENCODING 8843 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +7C +02 +02 +02 +7C +08 +7E +10 +00 +00 +ENDCHAR +STARTCHAR uni228C +ENCODING 8844 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +42 +4A +52 +7E +52 +4A +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni228D +ENCODING 8845 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +42 +42 +42 +5A +5A +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni228E +ENCODING 8846 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +42 +52 +52 +7A +52 +52 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni228F +ENCODING 8847 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +40 +40 +40 +7E +00 +00 +00 +ENDCHAR +STARTCHAR uni2290 +ENCODING 8848 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +02 +02 +02 +7E +00 +00 +00 +ENDCHAR +STARTCHAR uni2291 +ENCODING 8849 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +7E +40 +40 +40 +7E +00 +7E +00 +00 +00 +ENDCHAR +STARTCHAR uni2292 +ENCODING 8850 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +7E +02 +02 +02 +7E +00 +7E +00 +00 +00 +ENDCHAR +STARTCHAR uni2293 +ENCODING 8851 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +42 +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni2294 +ENCODING 8852 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +42 +42 +42 +42 +42 +7E +00 +00 +ENDCHAR +STARTCHAR circleplus +ENCODING 8853 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +38 +54 +7C +54 +38 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2296 +ENCODING 8854 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +38 +44 +7C +44 +38 +00 +00 +00 +00 +ENDCHAR +STARTCHAR circlemultiply +ENCODING 8855 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +38 +6C +54 +6C +38 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2298 +ENCODING 8856 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +38 +4C +54 +64 +38 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2299 +ENCODING 8857 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +38 +44 +54 +44 +38 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni229A +ENCODING 8858 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +38 +44 +54 +6C +54 +44 +38 +00 +00 +00 +ENDCHAR +STARTCHAR uni229B +ENCODING 8859 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +38 +44 +6C +54 +6C +44 +38 +00 +00 +00 +ENDCHAR +STARTCHAR uni229C +ENCODING 8860 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +38 +44 +7C +44 +7C +44 +38 +00 +00 +00 +ENDCHAR +STARTCHAR uni229D +ENCODING 8861 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +38 +44 +44 +7C +44 +44 +38 +00 +00 +00 +ENDCHAR +STARTCHAR uni229E +ENCODING 8862 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7C +54 +7C +54 +7C +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni229F +ENCODING 8863 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7C +44 +7C +44 +7C +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni22A0 +ENCODING 8864 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7C +6C +54 +6C +7C +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni22A1 +ENCODING 8865 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7C +44 +54 +44 +7C +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni22A2 +ENCODING 8866 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +40 +7C +40 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni22A3 +ENCODING 8867 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +04 +04 +04 +7C +04 +04 +04 +04 +00 +00 +ENDCHAR +STARTCHAR uni22A4 +ENCODING 8868 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +7C +10 +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR perpendicular +ENCODING 8869 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +10 +10 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR uni22A6 +ENCODING 8870 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +40 +78 +40 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni22A7 +ENCODING 8871 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +78 +40 +78 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni22A8 +ENCODING 8872 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +7C +40 +7C +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni22A9 +ENCODING 8873 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +50 +50 +50 +50 +5C +50 +50 +50 +50 +00 +00 +ENDCHAR +STARTCHAR uni22AA +ENCODING 8874 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +54 +54 +54 +54 +56 +54 +54 +54 +54 +00 +00 +ENDCHAR +STARTCHAR uni22AB +ENCODING 8875 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +50 +50 +50 +5C +50 +5C +50 +50 +50 +00 +00 +ENDCHAR +STARTCHAR uni22AC +ENCODING 8876 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +48 +48 +7C +50 +50 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni22AD +ENCODING 8877 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +44 +44 +7C +48 +7C +50 +50 +40 +00 +00 +ENDCHAR +STARTCHAR uni22AE +ENCODING 8878 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +A0 +A0 +A4 +A4 +BE +A8 +A8 +A0 +A0 +00 +00 +ENDCHAR +STARTCHAR uni22AF +ENCODING 8879 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +A0 +A2 +A2 +BE +A4 +BE +A8 +A8 +A0 +00 +00 +ENDCHAR +STARTCHAR uni22B0 +ENCODING 8880 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +0C +02 +04 +78 +04 +02 +0C +00 +00 +00 +ENDCHAR +STARTCHAR uni22B1 +ENCODING 8881 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +30 +40 +20 +1E +20 +40 +30 +00 +00 +00 +ENDCHAR +STARTCHAR uni22B2 +ENCODING 8882 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +06 +1A +62 +1A +06 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni22B3 +ENCODING 8883 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +60 +58 +46 +58 +60 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni22B4 +ENCODING 8884 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +06 +1A +62 +1A +06 +00 +7E +00 +00 +00 +ENDCHAR +STARTCHAR uni22B5 +ENCODING 8885 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +60 +58 +46 +58 +60 +00 +7E +00 +00 +00 +ENDCHAR +STARTCHAR uni22B6 +ENCODING 8886 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +24 +5E +24 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni22B7 +ENCODING 8887 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +24 +7A +24 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni22B8 +ENCODING 8888 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +04 +7A +04 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni22B9 +ENCODING 8889 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +10 +6C +10 +10 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni22BA +ENCODING 8890 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni22BB +ENCODING 8891 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +44 +44 +28 +28 +10 +10 +00 +7C +00 +00 +ENDCHAR +STARTCHAR uni22BC +ENCODING 8892 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +7C +00 +10 +10 +28 +28 +44 +44 +00 +00 +ENDCHAR +STARTCHAR uni22BD +ENCODING 8893 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +7C +00 +44 +44 +28 +28 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni22BE +ENCODING 8894 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +40 +40 +40 +60 +50 +7C +00 +00 +ENDCHAR +STARTCHAR uni22BF +ENCODING 8895 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +02 +06 +0A +12 +22 +7E +00 +00 +ENDCHAR +STARTCHAR uni22C0 +ENCODING 8896 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +10 +28 +28 +44 +44 +44 +82 +82 +82 +82 +00 +ENDCHAR +STARTCHAR uni22C1 +ENCODING 8897 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +82 +82 +82 +82 +44 +44 +44 +28 +28 +10 +10 +00 +ENDCHAR +STARTCHAR uni22C2 +ENCODING 8898 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +38 +44 +82 +82 +82 +82 +82 +82 +82 +82 +82 +00 +ENDCHAR +STARTCHAR uni22C3 +ENCODING 8899 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +82 +82 +82 +82 +82 +82 +82 +82 +82 +44 +38 +00 +ENDCHAR +STARTCHAR uni22C4 +ENCODING 8900 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +10 +28 +44 +28 +10 +10 +00 +00 +00 +ENDCHAR +STARTCHAR dotmath +ENCODING 8901 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +18 +18 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni22C6 +ENCODING 8902 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +10 +7C +38 +38 +44 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni22C7 +ENCODING 8903 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +44 +28 +7C +28 +44 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni22C8 +ENCODING 8904 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +44 +6C +54 +6C +44 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni22C9 +ENCODING 8905 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +44 +68 +50 +68 +44 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni22CA +ENCODING 8906 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +44 +2C +14 +2C +44 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni22CB +ENCODING 8907 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +40 +20 +10 +28 +44 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni22CC +ENCODING 8908 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +04 +08 +10 +28 +44 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni22CD +ENCODING 8909 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +48 +54 +24 +00 +7C +00 +00 +00 +ENDCHAR +STARTCHAR uni22CE +ENCODING 8910 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +82 +44 +44 +28 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni22CF +ENCODING 8911 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +28 +28 +44 +44 +82 +00 +00 +ENDCHAR +STARTCHAR uni22D0 +ENCODING 8912 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +1E +20 +4E +50 +4E +20 +1E +00 +00 +ENDCHAR +STARTCHAR uni22D1 +ENCODING 8913 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +78 +04 +72 +0A +72 +04 +78 +00 +00 +ENDCHAR +STARTCHAR uni22D2 +ENCODING 8914 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +38 +44 +54 +54 +54 +54 +54 +00 +00 +ENDCHAR +STARTCHAR uni22D3 +ENCODING 8915 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +54 +54 +54 +54 +54 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni22D4 +ENCODING 8916 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +10 +38 +54 +54 +54 +54 +54 +00 +00 +ENDCHAR +STARTCHAR uni22D5 +ENCODING 8917 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +28 +28 +28 +7C +28 +28 +7C +28 +28 +00 +00 +ENDCHAR +STARTCHAR uni22D6 +ENCODING 8918 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +08 +10 +20 +44 +20 +10 +08 +04 +00 +00 +ENDCHAR +STARTCHAR uni22D7 +ENCODING 8919 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +20 +10 +08 +44 +08 +10 +20 +40 +00 +00 +ENDCHAR +STARTCHAR uni22D8 +ENCODING 8920 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +12 +24 +48 +90 +48 +24 +12 +00 +00 +ENDCHAR +STARTCHAR uni22D9 +ENCODING 8921 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +90 +48 +24 +12 +24 +48 +90 +00 +00 +ENDCHAR +STARTCHAR uni22DA +ENCODING 8922 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +0E +30 +C0 +30 +0E +00 +FE +00 +E0 +18 +06 +18 +E0 +ENDCHAR +STARTCHAR uni22DB +ENCODING 8923 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +E0 +18 +06 +18 +E0 +00 +FE +00 +0E +30 +C0 +30 +0E +ENDCHAR +STARTCHAR uni22DC +ENCODING 8924 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +FE +00 +0E +30 +C0 +30 +0E +00 +00 +00 +ENDCHAR +STARTCHAR uni22DD +ENCODING 8925 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +FE +00 +E0 +18 +06 +18 +E0 +00 +00 +00 +ENDCHAR +STARTCHAR uni22DE +ENCODING 8926 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +04 +0A +74 +08 +70 +08 +04 +02 +00 +00 +ENDCHAR +STARTCHAR uni22DF +ENCODING 8927 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +20 +50 +2E +10 +0E +10 +20 +40 +00 +00 +ENDCHAR +STARTCHAR uni22E0 +ENCODING 8928 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +12 +14 +18 +70 +18 +74 +1A +14 +12 +00 +ENDCHAR +STARTCHAR uni22E1 +ENCODING 8929 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +48 +28 +18 +0E +18 +2E +58 +28 +48 +00 +ENDCHAR +STARTCHAR uni22E2 +ENCODING 8930 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +08 +7E +48 +48 +48 +7E +08 +7E +08 +08 +00 +ENDCHAR +STARTCHAR uni22E3 +ENCODING 8931 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +10 +7E +12 +12 +12 +7E +10 +7E +10 +10 +00 +ENDCHAR +STARTCHAR uni22E4 +ENCODING 8932 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +7E +40 +40 +40 +7E +08 +7E +10 +00 +00 +ENDCHAR +STARTCHAR uni22E5 +ENCODING 8933 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +7E +02 +02 +02 +7E +08 +7E +10 +00 +00 +ENDCHAR +STARTCHAR uni22E6 +ENCODING 8934 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +0E +30 +C0 +30 +1E +10 +72 +92 +9C +10 +10 +ENDCHAR +STARTCHAR uni22E7 +ENCODING 8935 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +E0 +18 +06 +18 +F0 +10 +72 +92 +9C +10 +10 +ENDCHAR +STARTCHAR uni22E8 +ENCODING 8936 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +04 +F8 +04 +12 +10 +72 +92 +9C +10 +10 +ENDCHAR +STARTCHAR uni22E9 +ENCODING 8937 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +80 +40 +3E +40 +90 +10 +72 +92 +9C +10 +10 +ENDCHAR +STARTCHAR uni22EA +ENCODING 8938 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +08 +1E +2A +4A +2A +1E +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni22EB +ENCODING 8939 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +78 +54 +52 +54 +78 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni22EC +ENCODING 8940 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +10 +3C +54 +94 +54 +3C +10 +7C +10 +10 +00 +ENDCHAR +STARTCHAR uni22ED +ENCODING 8941 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +10 +78 +54 +52 +54 +78 +10 +7C +10 +10 +00 +ENDCHAR +STARTCHAR uni22EE +ENCODING 8942 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +00 +00 +00 +10 +00 +00 +00 +10 +00 +00 +ENDCHAR +STARTCHAR uni22EF +ENCODING 8943 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +92 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni22F0 +ENCODING 8944 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +40 +00 +00 +ENDCHAR +STARTCHAR uni22F1 +ENCODING 8945 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +00 +00 +00 +10 +00 +00 +00 +04 +00 +00 +ENDCHAR +STARTCHAR uni22F2 +ENCODING 8946 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +1E +20 +20 +FE +20 +20 +1E +00 +00 +ENDCHAR +STARTCHAR uni22F3 +ENCODING 8947 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +1E +20 +42 +7E +42 +20 +1E +00 +00 +ENDCHAR +STARTCHAR uni22F4 +ENCODING 8948 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +1C +20 +24 +3C +24 +20 +1C +00 +00 +ENDCHAR +STARTCHAR uni22F5 +ENCODING 8949 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +08 +00 +1E +20 +40 +7E +40 +20 +1E +00 +00 +ENDCHAR +STARTCHAR uni22F6 +ENCODING 8950 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +00 +1E +20 +40 +7E +40 +20 +1E +00 +00 +ENDCHAR +STARTCHAR uni22F7 +ENCODING 8951 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3C +00 +1C +20 +3C +20 +1C +00 +00 +00 +ENDCHAR +STARTCHAR uni22F8 +ENCODING 8952 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +1E +20 +40 +7E +40 +20 +1E +00 +7E +ENDCHAR +STARTCHAR uni22F9 +ENCODING 8953 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1E +20 +40 +7E +40 +7E +40 +20 +1E +00 +00 +ENDCHAR +STARTCHAR uni22FA +ENCODING 8954 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +F0 +08 +08 +FE +08 +08 +F0 +00 +00 +ENDCHAR +STARTCHAR uni22FB +ENCODING 8955 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +78 +04 +42 +7E +42 +04 +78 +00 +00 +ENDCHAR +STARTCHAR uni22FC +ENCODING 8956 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +38 +04 +24 +3C +24 +04 +38 +00 +00 +ENDCHAR +STARTCHAR uni22FD +ENCODING 8957 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +00 +78 +04 +02 +7E +02 +04 +78 +00 +00 +ENDCHAR +STARTCHAR uni22FE +ENCODING 8958 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3C +00 +38 +04 +3C +04 +38 +00 +00 +00 +ENDCHAR +STARTCHAR uni22FF +ENCODING 8959 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +80 +80 +80 +FE +80 +80 +80 +FE +00 +00 +ENDCHAR +STARTCHAR uni2300 +ENCODING 8960 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +3A +44 +8A +92 +A2 +44 +B8 +00 +00 +ENDCHAR +STARTCHAR uni2301 +ENCODING 8961 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +98 +54 +32 +10 +00 +00 +00 +00 +ENDCHAR +STARTCHAR house +ENCODING 8962 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +18 +24 +42 +42 +42 +42 +7E +00 +00 +ENDCHAR +STARTCHAR uni2303 +ENCODING 8963 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +38 +6C +C6 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2304 +ENCODING 8964 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +C6 +6C +38 +10 +00 +00 +ENDCHAR +STARTCHAR uni2305 +ENCODING 8965 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +FE +00 +10 +38 +6C +C6 +00 +00 +ENDCHAR +STARTCHAR uni2306 +ENCODING 8966 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +FE +00 +FE +00 +10 +38 +6C +C6 +00 +00 +ENDCHAR +STARTCHAR uni2307 +ENCODING 8967 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +20 +10 +08 +10 +20 +10 +08 +10 +20 +10 +08 +00 +ENDCHAR +STARTCHAR uni2308 +ENCODING 8968 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +3C +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +00 +ENDCHAR +STARTCHAR uni2309 +ENCODING 8969 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +3C +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +00 +ENDCHAR +STARTCHAR uni230A +ENCODING 8970 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +3C +00 +ENDCHAR +STARTCHAR uni230B +ENCODING 8971 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +3C +00 +ENDCHAR +STARTCHAR uni230C +ENCODING 8972 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +07 +00 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni230D +ENCODING 8973 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +E0 +00 +08 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni230E +ENCODING 8974 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +00 +07 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni230F +ENCODING 8975 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +08 +08 +00 +E0 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR revlogicalnot +ENCODING 8976 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +7E +40 +40 +40 +00 +00 +00 +ENDCHAR +STARTCHAR uni2311 +ENCODING 8977 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +42 +3C +24 +24 +24 +3C +42 +00 +00 +00 +ENDCHAR +STARTCHAR uni2312 +ENCODING 8978 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +44 +82 +82 +82 +00 +00 +00 +ENDCHAR +STARTCHAR uni2313 +ENCODING 8979 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +44 +82 +82 +FE +00 +00 +00 +ENDCHAR +STARTCHAR uni2314 +ENCODING 8980 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +38 +44 +82 +44 +28 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni2315 +ENCODING 8981 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +38 +44 +82 +82 +A2 +44 +B8 +00 +00 +ENDCHAR +STARTCHAR uni2316 +ENCODING 8982 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +38 +54 +FE +54 +38 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni2317 +ENCODING 8983 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +24 +FF +24 +24 +24 +FF +24 +24 +00 +00 +ENDCHAR +STARTCHAR uni2318 +ENCODING 8984 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +AA +AA +7C +28 +7C +AA +AA +44 +00 +00 +ENDCHAR +STARTCHAR uni2319 +ENCODING 8985 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +40 +40 +7E +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni231A +ENCODING 8986 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +38 +28 +38 +44 +92 +92 +B2 +82 +44 +38 +28 +38 +ENDCHAR +STARTCHAR uni231B +ENCODING 8987 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +44 +38 +10 +28 +54 +AA +FE +00 +00 +ENDCHAR +STARTCHAR uni231C +ENCODING 8988 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +7C +40 +40 +40 +40 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni231D +ENCODING 8989 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +3E +02 +02 +02 +02 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni231E +ENCODING 8990 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +40 +40 +40 +40 +7C +00 +00 +ENDCHAR +STARTCHAR uni231F +ENCODING 8991 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +02 +02 +02 +02 +3E +00 +00 +ENDCHAR +STARTCHAR integraltp +ENCODING 8992 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +0C +12 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR integralbt +ENCODING 8993 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +90 +60 +00 +ENDCHAR +STARTCHAR uni2322 +ENCODING 8994 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7C +82 +82 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2323 +ENCODING 8995 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +82 +82 +7C +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2324 +ENCODING 8996 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +D6 +38 +6C +C6 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2325 +ENCODING 8997 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +CE +20 +10 +0E +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2326 +ENCODING 8998 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +F8 +CC +B2 +B2 +CC +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2327 +ENCODING 8999 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +FF +A5 +99 +99 +A5 +FF +00 +00 +00 +ENDCHAR +STARTCHAR uni2328 +ENCODING 9000 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +FF +81 +AB +81 +AB +81 +FF +00 +00 +00 +ENDCHAR +STARTCHAR uni232B +ENCODING 9003 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +3E +66 +9A +9A +66 +3E +00 +00 +00 +ENDCHAR +STARTCHAR uni232C +ENCODING 9004 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +38 +4C +C6 +C2 +46 +2C +18 +00 +00 +ENDCHAR +STARTCHAR uni232D +ENCODING 9005 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +08 +10 +28 +46 +C4 +28 +10 +20 +00 +00 +ENDCHAR +STARTCHAR uni232E +ENCODING 9006 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +18 +24 +7E +A4 +18 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni232F +ENCODING 9007 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +18 +00 +7E +00 +18 +00 +00 +00 +ENDCHAR +STARTCHAR uni2330 +ENCODING 9008 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +22 +22 +44 +44 +44 +88 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni2331 +ENCODING 9009 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +38 +54 +96 +9F +96 +54 +38 +10 +00 +00 +ENDCHAR +STARTCHAR uni2332 +ENCODING 9010 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +C0 +B0 +88 +FE +88 +B0 +C0 +00 +00 +00 +ENDCHAR +STARTCHAR uni2333 +ENCODING 9011 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +C0 +B0 +8C +FE +00 +00 +00 +ENDCHAR +STARTCHAR uni2334 +ENCODING 9012 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +42 +42 +42 +7E +00 +00 +00 +ENDCHAR +STARTCHAR uni2335 +ENCODING 9013 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +82 +44 +28 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni2336 +ENCODING 9014 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +FE +10 +10 +10 +10 +10 +10 +10 +10 +FE +00 +00 +ENDCHAR +STARTCHAR uni2337 +ENCODING 9015 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +44 +44 +44 +44 +44 +44 +44 +7C +00 +00 +ENDCHAR +STARTCHAR uni2338 +ENCODING 9016 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +82 +FE +82 +FE +82 +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni2339 +ENCODING 9017 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +92 +82 +FE +82 +92 +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni233A +ENCODING 9018 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +92 +AA +AA +C6 +AA +AA +92 +FE +00 +00 +ENDCHAR +STARTCHAR uni233B +ENCODING 9019 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +82 +92 +AA +92 +82 +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni233C +ENCODING 9020 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +BA +C6 +82 +C6 +BA +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni233D +ENCODING 9021 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +38 +54 +92 +92 +54 +38 +10 +10 +00 +ENDCHAR +STARTCHAR uni233E +ENCODING 9022 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +38 +44 +92 +AA +92 +44 +38 +00 +00 +00 +ENDCHAR +STARTCHAR uni233F +ENCODING 9023 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +04 +08 +08 +FE +20 +20 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni2340 +ENCODING 9024 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +20 +20 +FE +08 +08 +04 +04 +00 +00 +ENDCHAR +STARTCHAR uni2341 +ENCODING 9025 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +86 +8A +8A +92 +A2 +A2 +C2 +FE +00 +00 +ENDCHAR +STARTCHAR uni2342 +ENCODING 9026 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +C2 +A2 +A2 +92 +8A +8A +86 +FE +00 +00 +ENDCHAR +STARTCHAR uni2343 +ENCODING 9027 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +8E +B2 +C2 +B2 +8E +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni2344 +ENCODING 9028 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +E2 +9A +86 +9A +E2 +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni2345 +ENCODING 9029 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +50 +FE +50 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni2346 +ENCODING 9030 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +14 +FE +14 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni2347 +ENCODING 9031 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +82 +A2 +FE +A2 +82 +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni2348 +ENCODING 9032 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +82 +8A +FE +8A +82 +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni2349 +ENCODING 9033 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +B8 +44 +A2 +92 +8A +44 +3A +00 +00 +ENDCHAR +STARTCHAR uni234A +ENCODING 9034 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +10 +10 +10 +FE +00 +FE +00 +00 +ENDCHAR +STARTCHAR uni234B +ENCODING 9035 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +10 +10 +38 +38 +54 +54 +92 +92 +FE +10 +10 +ENDCHAR +STARTCHAR uni234C +ENCODING 9036 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +C6 +C6 +AA +AA +92 +92 +FE +00 +00 +ENDCHAR +STARTCHAR uni234D +ENCODING 9037 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +92 +AA +AA +C6 +FE +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni234E +ENCODING 9038 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +38 +54 +54 +38 +10 +10 +FE +00 +00 +ENDCHAR +STARTCHAR uni234F +ENCODING 9039 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +38 +54 +10 +FE +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni2350 +ENCODING 9040 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +92 +BA +D6 +92 +92 +92 +92 +FE +00 +00 +ENDCHAR +STARTCHAR uni2351 +ENCODING 9041 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +00 +FE +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni2352 +ENCODING 9042 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +10 +FE +92 +92 +54 +54 +38 +38 +10 +10 +10 +ENDCHAR +STARTCHAR uni2353 +ENCODING 9043 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +92 +92 +AA +AA +C6 +C6 +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni2354 +ENCODING 9044 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +FE +C6 +AA +AA +92 +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni2355 +ENCODING 9045 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +10 +10 +38 +54 +54 +38 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni2356 +ENCODING 9046 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +10 +FE +10 +54 +38 +10 +00 +00 +ENDCHAR +STARTCHAR uni2357 +ENCODING 9047 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +92 +92 +92 +92 +D6 +BA +92 +FE +00 +00 +ENDCHAR +STARTCHAR uni2358 +ENCODING 9048 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +00 +00 +00 +00 +00 +FE +00 +00 +ENDCHAR +STARTCHAR uni2359 +ENCODING 9049 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +28 +28 +44 +44 +82 +FE +00 +FE +00 +00 +ENDCHAR +STARTCHAR uni235A +ENCODING 9050 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +28 +44 +82 +44 +28 +10 +00 +FE +00 +00 +ENDCHAR +STARTCHAR uni235B +ENCODING 9051 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +38 +44 +44 +44 +38 +00 +00 +FE +00 +00 +ENDCHAR +STARTCHAR uni235C +ENCODING 9052 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +44 +82 +82 +82 +44 +38 +00 +FE +00 +00 +ENDCHAR +STARTCHAR uni235D +ENCODING 9053 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +82 +82 +BA +C6 +C6 +C6 +BA +82 +00 +00 +ENDCHAR +STARTCHAR uni235E +ENCODING 9054 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +92 +92 +92 +82 +82 +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni235F +ENCODING 9055 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +38 +54 +BA +92 +AA +44 +38 +00 +00 +00 +ENDCHAR +STARTCHAR uni2360 +ENCODING 9056 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +92 +92 +82 +92 +92 +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni2361 +ENCODING 9057 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +44 +44 +00 +FE +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni2362 +ENCODING 9058 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +44 +44 +00 +FE +82 +44 +44 +28 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni2363 +ENCODING 9059 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +44 +00 +10 +10 +7C +38 +38 +44 +00 +00 +ENDCHAR +STARTCHAR uni2364 +ENCODING 9060 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +44 +00 +38 +44 +44 +44 +38 +00 +00 +00 +ENDCHAR +STARTCHAR uni2365 +ENCODING 9061 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +44 +44 +00 +38 +44 +82 +82 +82 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni2366 +ENCODING 9062 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +92 +92 +92 +92 +92 +54 +38 +10 +10 +ENDCHAR +STARTCHAR uni2367 +ENCODING 9063 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +3E +50 +90 +90 +90 +50 +3E +10 +10 +ENDCHAR +STARTCHAR uni2368 +ENCODING 9064 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +44 +44 +00 +60 +92 +0C +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2369 +ENCODING 9065 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +24 +00 +60 +18 +06 +18 +60 +00 +00 +00 +ENDCHAR +STARTCHAR uni236A +ENCODING 9066 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +7E +00 +18 +08 +10 +00 +00 +ENDCHAR +STARTCHAR uni236B +ENCODING 9067 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +82 +72 +DC +24 +28 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni236C +ENCODING 9068 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +44 +82 +E2 +92 +8E +82 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni236D +ENCODING 9069 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +72 +9C +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni236E +ENCODING 9070 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +18 +18 +00 +18 +7E +08 +10 +00 +ENDCHAR +STARTCHAR uni236F +ENCODING 9071 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +8A +FE +92 +FE +A2 +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni2370 +ENCODING 9072 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +B2 +8A +92 +82 +92 +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni2371 +ENCODING 9073 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +82 +82 +44 +76 +BC +28 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni2372 +ENCODING 9074 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +10 +28 +28 +76 +DC +82 +82 +00 +00 +ENDCHAR +STARTCHAR uni2373 +ENCODING 9075 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +30 +10 +10 +10 +14 +08 +00 +00 +ENDCHAR +STARTCHAR uni2374 +ENCODING 9076 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +42 +42 +42 +62 +5C +40 +40 +ENDCHAR +STARTCHAR uni2375 +ENCODING 9077 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +82 +92 +92 +92 +6C +00 +00 +ENDCHAR +STARTCHAR uni2376 +ENCODING 9078 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3A +46 +42 +42 +46 +3A +00 +7E +ENDCHAR +STARTCHAR uni2377 +ENCODING 9079 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +1E +20 +40 +78 +40 +20 +1E +00 +7E +ENDCHAR +STARTCHAR uni2378 +ENCODING 9080 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +30 +10 +10 +10 +14 +08 +00 +7E +ENDCHAR +STARTCHAR uni2379 +ENCODING 9081 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +82 +92 +92 +92 +6C +00 +FE +ENDCHAR +STARTCHAR uni237A +ENCODING 9082 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3A +46 +42 +42 +46 +3A +00 +00 +ENDCHAR +STARTCHAR uni237B +ENCODING 9083 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +04 +04 +3E +08 +90 +50 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni237C +ENCODING 9084 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +28 +30 +20 +60 +20 +30 +28 +30 +BE +C0 +E0 +ENDCHAR +STARTCHAR uni237D +ENCODING 9085 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +EE +28 +38 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni237E +ENCODING 9086 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +38 +44 +82 +FE +28 +28 +EE +00 +00 +ENDCHAR +STARTCHAR uni237F +ENCODING 9087 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +38 +7C +7C +7C +38 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni2380 +ENCODING 9088 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +38 +04 +3C +44 +4C +34 +82 +44 +28 +10 +ENDCHAR +STARTCHAR uni2381 +ENCODING 9089 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +60 +10 +70 +90 +B0 +55 +00 +FF +ENDCHAR +STARTCHAR uni2382 +ENCODING 9090 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +66 +11 +77 +99 +BB +55 +00 +77 +ENDCHAR +STARTCHAR uni2383 +ENCODING 9091 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +81 +5A +04 +DF +24 +6E +95 +00 +00 +ENDCHAR +STARTCHAR uni2384 +ENCODING 9092 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +F8 +9C +AA +AA +AA +AA +AA +9C +F8 +00 +00 +ENDCHAR +STARTCHAR uni2385 +ENCODING 9093 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +10 +FE +92 +92 +92 +92 +92 +FE +10 +10 +00 +ENDCHAR +STARTCHAR uni2386 +ENCODING 9094 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +50 +88 +24 +F2 +24 +88 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni2387 +ENCODING 9095 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +0C +1A +2C +20 +DE +00 +00 +00 +ENDCHAR +STARTCHAR uni2388 +ENCODING 9096 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +10 +38 +D6 +7C +54 +7C +D6 +38 +10 +10 +00 +ENDCHAR +STARTCHAR uni2389 +ENCODING 9097 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +44 +82 +82 +C6 +AA +92 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni238A +ENCODING 9098 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +44 +FE +C6 +AA +AA +92 +54 +38 +00 +00 +ENDCHAR +STARTCHAR uni238B +ENCODING 9099 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +F0 +A4 +E2 +92 +12 +4A +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni238C +ENCODING 9100 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +58 +64 +74 +44 +AA +AA +44 +00 +00 +00 +ENDCHAR +STARTCHAR uni238D +ENCODING 9101 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7C +44 +44 +44 +C6 +00 +00 +00 +ENDCHAR +STARTCHAR uni238E +ENCODING 9102 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3E +28 +28 +28 +F8 +00 +00 +00 +ENDCHAR +STARTCHAR uni238F +ENCODING 9103 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +FE +10 +28 +44 +82 +44 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni2390 +ENCODING 9104 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +28 +44 +82 +44 +28 +10 +FE +00 +00 +ENDCHAR +STARTCHAR uni2391 +ENCODING 9105 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +FE +10 +28 +44 +FE +44 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni2392 +ENCODING 9106 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +28 +44 +FE +44 +28 +10 +FE +00 +00 +ENDCHAR +STARTCHAR uni2393 +ENCODING 9107 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +7C +00 +54 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2394 +ENCODING 9108 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +38 +44 +82 +44 +38 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2395 +ENCODING 9109 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +82 +82 +82 +82 +82 +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni2396 +ENCODING 9110 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +38 +38 +30 +30 +20 +20 +00 +00 +00 +ENDCHAR +STARTCHAR uni2397 +ENCODING 9111 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +A8 +00 +BE +22 +8A +12 +BE +12 +8A +22 +3E +00 +00 +ENDCHAR +STARTCHAR uni2398 +ENCODING 9112 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +F8 +88 +AA +80 +92 +88 +FE +88 +D2 +00 +2A +00 +00 +ENDCHAR +STARTCHAR uni2399 +ENCODING 9113 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +38 +28 +6C +AA +AA +BA +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR uni239A +ENCODING 9114 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +7C +96 +AA +D6 +AA +D2 +7C +00 +00 +00 +ENDCHAR +STARTCHAR uni239B +ENCODING 9115 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +04 +08 +08 +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni239C +ENCODING 9116 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni239D +ENCODING 9117 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +10 +08 +08 +04 +00 +ENDCHAR +STARTCHAR uni239E +ENCODING 9118 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +20 +10 +10 +08 +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni239F +ENCODING 9119 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni23A0 +ENCODING 9120 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +08 +08 +08 +08 +08 +08 +08 +08 +08 +10 +10 +20 +00 +ENDCHAR +STARTCHAR uni23A1 +ENCODING 9121 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +3C +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni23A2 +ENCODING 9122 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni23A3 +ENCODING 9123 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +3C +00 +ENDCHAR +STARTCHAR uni23A4 +ENCODING 9124 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +78 +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni23A5 +ENCODING 9125 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni23A6 +ENCODING 9126 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +78 +00 +ENDCHAR +STARTCHAR uni23A7 +ENCODING 9127 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +0E +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni23A8 +ENCODING 9128 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +10 +60 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni23A9 +ENCODING 9129 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +0E +00 +ENDCHAR +STARTCHAR uni23AA +ENCODING 9130 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni23AB +ENCODING 9131 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +E0 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni23AC +ENCODING 9132 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +10 +0C +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni23AD +ENCODING 9133 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +E0 +00 +ENDCHAR +STARTCHAR uni23AE +ENCODING 9134 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni23AF +ENCODING 9135 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FF +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni23B0 +ENCODING 9136 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +0C +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +60 +ENDCHAR +STARTCHAR uni23B1 +ENCODING 9137 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +60 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +0C +ENDCHAR +STARTCHAR uni23B2 +ENCODING 9138 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +82 +40 +40 +40 +20 +20 +20 +10 +10 +ENDCHAR +STARTCHAR uni23B3 +ENCODING 9139 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +20 +20 +20 +40 +40 +40 +82 +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni23B4 +ENCODING 9140 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +42 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni23B5 +ENCODING 9141 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +42 +7E +00 +00 +ENDCHAR +STARTCHAR uni23B6 +ENCODING 9142 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +42 +7E +00 +00 +00 +7E +42 +00 +00 +00 +ENDCHAR +STARTCHAR uni23B7 +ENCODING 9143 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +90 +50 +50 +30 +30 +10 +10 +00 +ENDCHAR +STARTCHAR uni23B8 +ENCODING 9144 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni23B9 +ENCODING 9145 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +ENDCHAR +STARTCHAR uni23BA +ENCODING 9146 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +FF +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni23BB +ENCODING 9147 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +FF +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni23BC +ENCODING 9148 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +FF +00 +00 +00 +ENDCHAR +STARTCHAR uni23BD +ENCODING 9149 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +FF +ENDCHAR +STARTCHAR uni23BE +ENCODING 9150 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +40 +40 +40 +40 +40 +40 +40 +40 +00 +00 +ENDCHAR +STARTCHAR uni23BF +ENCODING 9151 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +40 +40 +40 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR uni23C0 +ENCODING 9152 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +7C +92 +92 +92 +7C +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni23C1 +ENCODING 9153 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +10 +7C +92 +92 +92 +7C +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni23C2 +ENCODING 9154 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +7C +92 +92 +92 +7C +10 +FE +00 +00 +ENDCHAR +STARTCHAR uni23C3 +ENCODING 9155 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +38 +54 +54 +92 +FE +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni23C4 +ENCODING 9156 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +10 +10 +38 +54 +54 +92 +FE +10 +00 +00 +ENDCHAR +STARTCHAR uni23C5 +ENCODING 9157 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +38 +54 +54 +92 +FE +10 +FE +00 +00 +ENDCHAR +STARTCHAR uni23C6 +ENCODING 9158 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +10 +72 +9C +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni23C7 +ENCODING 9159 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +10 +10 +10 +72 +9C +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni23C8 +ENCODING 9160 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +10 +72 +9C +10 +10 +FE +00 +00 +ENDCHAR +STARTCHAR uni23C9 +ENCODING 9161 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +10 +10 +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni23CA +ENCODING 9162 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +10 +10 +10 +10 +10 +FE +00 +00 +ENDCHAR +STARTCHAR uni23CB +ENCODING 9163 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +02 +02 +02 +02 +02 +02 +02 +02 +00 +00 +ENDCHAR +STARTCHAR uni23CC +ENCODING 9164 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +02 +02 +02 +02 +02 +02 +02 +7E +00 +00 +ENDCHAR +STARTCHAR uni23CD +ENCODING 9165 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +4A +52 +42 +42 +42 +42 +42 +7E +00 +00 +ENDCHAR +STARTCHAR uni23CE +ENCODING 9166 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +0E +0A +0A +0A +2A +5A +82 +5C +20 +00 +00 +ENDCHAR +STARTCHAR uni2400 +ENCODING 9216 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +C0 +A0 +B4 +B4 +B6 +16 +0A +02 +03 +00 +00 +ENDCHAR +STARTCHAR uni2401 +ENCODING 9217 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +80 +50 +68 +AD +2D +17 +05 +05 +00 +00 +ENDCHAR +STARTCHAR uni2402 +ENCODING 9218 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +80 +78 +50 +95 +15 +12 +05 +05 +00 +00 +ENDCHAR +STARTCHAR uni2403 +ENCODING 9219 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +C0 +80 +F8 +90 +D5 +15 +12 +05 +05 +00 +00 +ENDCHAR +STARTCHAR uni2404 +ENCODING 9220 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +C0 +80 +D0 +A8 +EF +2A +12 +02 +02 +00 +00 +ENDCHAR +STARTCHAR uni2405 +ENCODING 9221 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +C0 +80 +F0 +A8 +EA +2D +2D +07 +03 +00 +00 +ENDCHAR +STARTCHAR uni2406 +ENCODING 9222 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +A0 +E8 +B0 +B5 +15 +0E +05 +05 +00 +00 +ENDCHAR +STARTCHAR uni2407 +ENCODING 9223 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +C0 +A0 +D8 +B0 +DC +14 +1C +04 +07 +00 +00 +ENDCHAR +STARTCHAR uni2408 +ENCODING 9224 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +E0 +90 +E0 +90 +E6 +08 +04 +02 +0C +00 +00 +ENDCHAR +STARTCHAR uni2409 +ENCODING 9225 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +A0 +A0 +E0 +A0 +AE +04 +04 +04 +04 +00 +00 +ENDCHAR +STARTCHAR uni240A +ENCODING 9226 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +80 +80 +80 +80 +EE +08 +0C +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni240B +ENCODING 9227 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +88 +88 +50 +50 +2E +04 +04 +04 +04 +00 +00 +ENDCHAR +STARTCHAR uni240C +ENCODING 9228 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +E0 +80 +C0 +80 +8E +08 +0C +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni240D +ENCODING 9229 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +60 +80 +80 +80 +6C +0A +0C +0A +0A +00 +00 +ENDCHAR +STARTCHAR uni240E +ENCODING 9230 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +60 +80 +40 +20 +C4 +0A +0A +0A +04 +00 +00 +ENDCHAR +STARTCHAR uni240F +ENCODING 9231 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +60 +80 +40 +20 +CE +04 +04 +04 +0E +00 +00 +ENDCHAR +STARTCHAR uni2410 +ENCODING 9232 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +C0 +A0 +B0 +B0 +D3 +12 +1F +02 +03 +00 +00 +ENDCHAR +STARTCHAR uni2411 +ENCODING 9233 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +C0 +A0 +A8 +B0 +D2 +12 +0A +02 +02 +00 +00 +ENDCHAR +STARTCHAR uni2412 +ENCODING 9234 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +C0 +A0 +A8 +B0 +D6 +11 +0A +04 +07 +00 +00 +ENDCHAR +STARTCHAR uni2413 +ENCODING 9235 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +C0 +A0 +A8 +B0 +D6 +11 +0A +01 +06 +00 +00 +ENDCHAR +STARTCHAR uni2414 +ENCODING 9236 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +C0 +A0 +A8 +B0 +D1 +13 +0D +07 +01 +00 +00 +ENDCHAR +STARTCHAR uni2415 +ENCODING 9237 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +C0 +A0 +B0 +A8 +BD +2D +2E +05 +05 +00 +00 +ENDCHAR +STARTCHAR uni2416 +ENCODING 9238 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +80 +68 +68 +96 +15 +15 +05 +05 +00 +00 +ENDCHAR +STARTCHAR uni2417 +ENCODING 9239 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +C0 +80 +F8 +90 +D6 +15 +16 +05 +06 +00 +00 +ENDCHAR +STARTCHAR uni2418 +ENCODING 9240 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +80 +90 +A8 +7E +2D +2D +05 +05 +00 +00 +ENDCHAR +STARTCHAR uni2419 +ENCODING 9241 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +C0 +80 +C0 +80 +D1 +1B +15 +15 +11 +00 +00 +ENDCHAR +STARTCHAR uni241A +ENCODING 9242 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +80 +68 +68 +AE +2D +16 +05 +06 +00 +00 +ENDCHAR +STARTCHAR uni241B +ENCODING 9243 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +E0 +80 +CC +90 +E9 +06 +1A +02 +01 +00 +00 +ENDCHAR +STARTCHAR uni241C +ENCODING 9244 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +70 +40 +60 +40 +46 +08 +04 +02 +0C +00 +00 +ENDCHAR +STARTCHAR uni241D +ENCODING 9245 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +70 +80 +B0 +90 +66 +08 +04 +02 +0C +00 +00 +ENDCHAR +STARTCHAR uni241E +ENCODING 9246 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +E0 +90 +E0 +90 +96 +08 +04 +02 +0C +00 +00 +ENDCHAR +STARTCHAR uni241F +ENCODING 9247 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +90 +90 +90 +90 +66 +08 +04 +02 +0C +00 +00 +ENDCHAR +STARTCHAR uni2420 +ENCODING 9248 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +60 +80 +40 +20 +CC +0A +0C +08 +08 +00 +00 +ENDCHAR +STARTCHAR uni2421 +ENCODING 9249 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +C0 +A0 +B8 +B0 +DC +14 +1C +04 +07 +00 +00 +ENDCHAR +STARTCHAR uni2422 +ENCODING 9250 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +50 +60 +40 +DC +62 +42 +42 +62 +5C +00 +00 +ENDCHAR +STARTCHAR uni2423 +ENCODING 9251 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +42 +7E +00 +00 +ENDCHAR +STARTCHAR uni2424 +ENCODING 9252 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +C0 +A0 +A0 +A0 +A8 +08 +08 +08 +0E +00 +00 +ENDCHAR +STARTCHAR uni2425 +ENCODING 9253 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +24 +24 +48 +48 +12 +12 +24 +24 +00 +00 +ENDCHAR +STARTCHAR uni2426 +ENCODING 9254 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +3C +42 +42 +40 +20 +10 +10 +00 +10 +00 +00 +ENDCHAR +STARTCHAR uni2440 +ENCODING 9280 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1E +12 +12 +12 +10 +90 +90 +90 +F0 +00 +00 +ENDCHAR +STARTCHAR uni2441 +ENCODING 9281 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +02 +02 +02 +7E +42 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uni2442 +ENCODING 9282 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +82 +82 +82 +FE +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni2443 +ENCODING 9283 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +10 +FE +82 +82 +82 +82 +00 +00 +ENDCHAR +STARTCHAR uni2444 +ENCODING 9284 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +92 +92 +10 +10 +10 +92 +92 +FE +00 +00 +ENDCHAR +STARTCHAR uni2445 +ENCODING 9285 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +C6 +AA +92 +AA +C6 +82 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2446 +ENCODING 9286 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +06 +06 +66 +60 +60 +66 +06 +06 +00 +00 +ENDCHAR +STARTCHAR uni2447 +ENCODING 9287 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +06 +06 +06 +10 +10 +10 +C0 +C0 +C0 +00 +00 +ENDCHAR +STARTCHAR uni2448 +ENCODING 9288 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +06 +56 +56 +56 +50 +50 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2449 +ENCODING 9289 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +92 +92 +92 +92 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni244A +ENCODING 9290 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +48 +48 +48 +24 +24 +12 +12 +12 +00 +00 +ENDCHAR +STARTCHAR SF100000 +ENCODING 9472 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FF +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2501 +ENCODING 9473 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +FF +FF +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF110000 +ENCODING 9474 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2503 +ENCODING 9475 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2504 +ENCODING 9476 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +DB +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2505 +ENCODING 9477 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +DB +DB +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2506 +ENCODING 9478 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +00 +10 +10 +10 +00 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2507 +ENCODING 9479 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +00 +18 +18 +18 +00 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2508 +ENCODING 9480 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +A5 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2509 +ENCODING 9481 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +A5 +A5 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni250A +ENCODING 9482 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +00 +10 +10 +10 +00 +10 +10 +10 +00 +10 +10 +ENDCHAR +STARTCHAR uni250B +ENCODING 9483 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +00 +18 +18 +18 +00 +18 +18 +18 +00 +18 +18 +ENDCHAR +STARTCHAR SF010000 +ENCODING 9484 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +1F +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni250D +ENCODING 9485 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +1F +1F +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni250E +ENCODING 9486 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +1F +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni250F +ENCODING 9487 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +1F +1F +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR SF030000 +ENCODING 9488 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +F0 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2511 +ENCODING 9489 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +F0 +F0 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2512 +ENCODING 9490 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +F8 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2513 +ENCODING 9491 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +F8 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR SF020000 +ENCODING 9492 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +10 +1F +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2515 +ENCODING 9493 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +1F +1F +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2516 +ENCODING 9494 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +1F +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2517 +ENCODING 9495 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +1F +1F +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF040000 +ENCODING 9496 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +10 +F0 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2519 +ENCODING 9497 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +F0 +F0 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni251A +ENCODING 9498 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +F8 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni251B +ENCODING 9499 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +F8 +F8 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF080000 +ENCODING 9500 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +10 +1F +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni251D +ENCODING 9501 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +1F +1F +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni251E +ENCODING 9502 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +1F +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni251F +ENCODING 9503 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +10 +1F +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2520 +ENCODING 9504 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +1F +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2521 +ENCODING 9505 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +1F +1F +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2522 +ENCODING 9506 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +1F +1F +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2523 +ENCODING 9507 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +1F +1F +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR SF090000 +ENCODING 9508 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +10 +F0 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2525 +ENCODING 9509 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +F0 +F0 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2526 +ENCODING 9510 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +F0 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2527 +ENCODING 9511 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +10 +F8 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2528 +ENCODING 9512 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +F8 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2529 +ENCODING 9513 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +F8 +F0 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni252A +ENCODING 9514 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +F0 +F8 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni252B +ENCODING 9515 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +F8 +F8 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR SF060000 +ENCODING 9516 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FF +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni252D +ENCODING 9517 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +F0 +FF +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni252E +ENCODING 9518 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +0F +FF +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni252F +ENCODING 9519 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +FF +FF +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2530 +ENCODING 9520 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FF +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2531 +ENCODING 9521 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +F0 +FF +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2532 +ENCODING 9522 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +0F +FF +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2533 +ENCODING 9523 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +FF +FF +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR SF070000 +ENCODING 9524 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +10 +FF +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2535 +ENCODING 9525 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +F0 +FF +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2536 +ENCODING 9526 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +1F +FF +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2537 +ENCODING 9527 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +FF +FF +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2538 +ENCODING 9528 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +FF +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2539 +ENCODING 9529 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +F8 +FF +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni253A +ENCODING 9530 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +1F +FF +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni253B +ENCODING 9531 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +FF +FF +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF050000 +ENCODING 9532 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +10 +FF +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni253D +ENCODING 9533 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +F0 +FF +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni253E +ENCODING 9534 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +1F +FF +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni253F +ENCODING 9535 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +FF +FF +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2540 +ENCODING 9536 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +FF +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2541 +ENCODING 9537 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +10 +FF +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2542 +ENCODING 9538 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +FF +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2543 +ENCODING 9539 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +F8 +FF +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2544 +ENCODING 9540 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +1F +FF +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2545 +ENCODING 9541 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +F0 +FF +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2546 +ENCODING 9542 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +1F +FF +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2547 +ENCODING 9543 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +FF +FF +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2548 +ENCODING 9544 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +FF +FF +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2549 +ENCODING 9545 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +F8 +FF +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni254A +ENCODING 9546 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +1F +FF +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni254B +ENCODING 9547 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +FF +FF +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni254C +ENCODING 9548 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +F7 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni254D +ENCODING 9549 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +F7 +F7 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni254E +ENCODING 9550 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +10 +00 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni254F +ENCODING 9551 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +00 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR SF430000 +ENCODING 9552 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +FF +00 +FF +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF240000 +ENCODING 9553 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +28 +28 +28 +28 +28 +28 +28 +28 +28 +28 +28 +28 +28 +ENDCHAR +STARTCHAR SF510000 +ENCODING 9554 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +1F +10 +1F +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR SF520000 +ENCODING 9555 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +3F +28 +28 +28 +28 +28 +28 +ENDCHAR +STARTCHAR SF390000 +ENCODING 9556 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3F +20 +2F +28 +28 +28 +28 +28 +ENDCHAR +STARTCHAR SF220000 +ENCODING 9557 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +F0 +10 +F0 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR SF210000 +ENCODING 9558 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +F8 +28 +28 +28 +28 +28 +28 +ENDCHAR +STARTCHAR SF250000 +ENCODING 9559 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +F8 +08 +E8 +28 +28 +28 +28 +28 +ENDCHAR +STARTCHAR SF500000 +ENCODING 9560 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +1F +10 +1F +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF490000 +ENCODING 9561 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +28 +28 +28 +28 +28 +28 +3F +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF380000 +ENCODING 9562 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +28 +28 +28 +28 +28 +2F +20 +3F +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF280000 +ENCODING 9563 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +F0 +10 +F0 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF270000 +ENCODING 9564 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +28 +28 +28 +28 +28 +28 +F8 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF260000 +ENCODING 9565 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +28 +28 +28 +28 +28 +E8 +08 +F8 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF360000 +ENCODING 9566 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +1F +10 +1F +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR SF370000 +ENCODING 9567 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +28 +28 +28 +28 +28 +28 +2F +28 +28 +28 +28 +28 +28 +ENDCHAR +STARTCHAR SF420000 +ENCODING 9568 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +28 +28 +28 +28 +28 +2F +20 +2F +28 +28 +28 +28 +28 +ENDCHAR +STARTCHAR SF190000 +ENCODING 9569 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +F0 +10 +F0 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR SF200000 +ENCODING 9570 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +28 +28 +28 +28 +28 +28 +E8 +28 +28 +28 +28 +28 +28 +ENDCHAR +STARTCHAR SF230000 +ENCODING 9571 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +28 +28 +28 +28 +28 +E8 +08 +E8 +28 +28 +28 +28 +28 +ENDCHAR +STARTCHAR SF470000 +ENCODING 9572 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +FF +00 +FF +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR SF480000 +ENCODING 9573 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FF +28 +28 +28 +28 +28 +28 +ENDCHAR +STARTCHAR SF410000 +ENCODING 9574 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +FF +00 +EF +28 +28 +28 +28 +28 +ENDCHAR +STARTCHAR SF450000 +ENCODING 9575 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +FF +00 +FF +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF460000 +ENCODING 9576 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +28 +28 +28 +28 +28 +28 +FF +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF400000 +ENCODING 9577 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +28 +28 +28 +28 +28 +EF +00 +FF +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR SF540000 +ENCODING 9578 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +FF +10 +FF +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR SF530000 +ENCODING 9579 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +28 +28 +28 +28 +28 +28 +FF +28 +28 +28 +28 +28 +28 +ENDCHAR +STARTCHAR SF440000 +ENCODING 9580 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +28 +28 +28 +28 +28 +EF +00 +EF +28 +28 +28 +28 +28 +ENDCHAR +STARTCHAR uni256D +ENCODING 9581 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +07 +08 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni256E +ENCODING 9582 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +C0 +20 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni256F +ENCODING 9583 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +20 +C0 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2570 +ENCODING 9584 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +08 +07 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2571 +ENCODING 9585 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +01 +02 +02 +04 +04 +08 +10 +10 +20 +20 +40 +40 +80 +ENDCHAR +STARTCHAR uni2572 +ENCODING 9586 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +80 +40 +40 +20 +20 +10 +08 +08 +04 +04 +02 +02 +01 +ENDCHAR +STARTCHAR uni2573 +ENCODING 9587 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +81 +42 +42 +24 +24 +18 +18 +18 +24 +24 +42 +42 +81 +ENDCHAR +STARTCHAR uni2574 +ENCODING 9588 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +F0 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2575 +ENCODING 9589 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +10 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2576 +ENCODING 9590 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +0F +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2577 +ENCODING 9591 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2578 +ENCODING 9592 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +F0 +F0 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2579 +ENCODING 9593 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni257A +ENCODING 9594 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +0F +0F +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni257B +ENCODING 9595 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni257C +ENCODING 9596 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +0F +FF +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni257D +ENCODING 9597 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +10 +10 +10 +10 +10 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni257E +ENCODING 9598 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +F0 +FF +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni257F +ENCODING 9599 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR upblock +ENCODING 9600 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +FF +FF +FF +FF +FF +FF +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2581 +ENCODING 9601 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +FF +FF +ENDCHAR +STARTCHAR uni2582 +ENCODING 9602 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +FF +FF +FF +ENDCHAR +STARTCHAR uni2583 +ENCODING 9603 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +FF +FF +FF +FF +FF +ENDCHAR +STARTCHAR dnblock +ENCODING 9604 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FF +FF +FF +FF +FF +FF +FF +ENDCHAR +STARTCHAR uni2585 +ENCODING 9605 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +FF +FF +FF +FF +FF +FF +FF +FF +ENDCHAR +STARTCHAR uni2586 +ENCODING 9606 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +ENDCHAR +STARTCHAR uni2587 +ENCODING 9607 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +ENDCHAR +STARTCHAR block +ENCODING 9608 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +ENDCHAR +STARTCHAR uni2589 +ENCODING 9609 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +FE +FE +FE +FE +FE +FE +FE +FE +FE +FE +FE +FE +FE +ENDCHAR +STARTCHAR uni258A +ENCODING 9610 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +ENDCHAR +STARTCHAR uni258B +ENCODING 9611 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +F8 +F8 +F8 +F8 +F8 +F8 +F8 +F8 +F8 +F8 +F8 +F8 +F8 +ENDCHAR +STARTCHAR lfblock +ENCODING 9612 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +ENDCHAR +STARTCHAR uni258D +ENCODING 9613 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +ENDCHAR +STARTCHAR uni258E +ENCODING 9614 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni258F +ENCODING 9615 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR rtblock +ENCODING 9616 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +0F +0F +0F +0F +0F +0F +0F +0F +0F +0F +0F +0F +0F +ENDCHAR +STARTCHAR ltshade +ENCODING 9617 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +55 +00 +AA +00 +55 +00 +AA +00 +55 +00 +AA +00 +ENDCHAR +STARTCHAR shade +ENCODING 9618 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +AA +55 +AA +55 +AA +55 +AA +55 +AA +55 +AA +55 +AA +ENDCHAR +STARTCHAR dkshade +ENCODING 9619 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +FF +55 +FF +AA +FF +55 +FF +AA +FF +55 +FF +AA +FF +ENDCHAR +STARTCHAR uni2594 +ENCODING 9620 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +FF +FF +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2595 +ENCODING 9621 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +ENDCHAR +STARTCHAR uni2596 +ENCODING 9622 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +ENDCHAR +STARTCHAR uni2597 +ENCODING 9623 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +0F +0F +0F +0F +0F +0F +0F +ENDCHAR +STARTCHAR uni2598 +ENCODING 9624 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +F0 +F0 +F0 +F0 +F0 +F0 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2599 +ENCODING 9625 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +F0 +F0 +F0 +F0 +F0 +F0 +FF +FF +FF +FF +FF +FF +FF +ENDCHAR +STARTCHAR uni259A +ENCODING 9626 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +F0 +F0 +F0 +F0 +F0 +F0 +0F +0F +0F +0F +0F +0F +0F +ENDCHAR +STARTCHAR uni259B +ENCODING 9627 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +FF +FF +FF +FF +FF +FF +F0 +F0 +F0 +F0 +F0 +F0 +F0 +ENDCHAR +STARTCHAR uni259C +ENCODING 9628 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +FF +FF +FF +FF +FF +FF +0F +0F +0F +0F +0F +0F +0F +ENDCHAR +STARTCHAR uni259D +ENCODING 9629 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +0F +0F +0F +0F +0F +0F +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni259E +ENCODING 9630 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +0F +0F +0F +0F +0F +0F +F0 +F0 +F0 +F0 +F0 +F0 +F0 +ENDCHAR +STARTCHAR uni259F +ENCODING 9631 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +0F +0F +0F +0F +0F +0F +FF +FF +FF +FF +FF +FF +FF +ENDCHAR +STARTCHAR filledbox +ENCODING 9632 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +FE +FE +FE +FE +FE +FE +FE +00 +00 +ENDCHAR +STARTCHAR H22073 +ENCODING 9633 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +FE +82 +82 +82 +82 +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni25A2 +ENCODING 9634 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7C +82 +82 +82 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR uni25A3 +ENCODING 9635 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +FE +82 +BA +BA +BA +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni25A4 +ENCODING 9636 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +FE +82 +FE +82 +FE +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni25A5 +ENCODING 9637 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +FE +AA +AA +AA +AA +AA +FE +00 +00 +ENDCHAR +STARTCHAR uni25A6 +ENCODING 9638 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +FE +AA +FE +AA +FE +AA +FE +00 +00 +ENDCHAR +STARTCHAR uni25A7 +ENCODING 9639 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +FE +92 +8A +C6 +A2 +92 +FE +00 +00 +ENDCHAR +STARTCHAR uni25A8 +ENCODING 9640 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +FE +92 +A2 +C6 +8A +92 +FE +00 +00 +ENDCHAR +STARTCHAR uni25A9 +ENCODING 9641 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +FE +D6 +AA +D6 +AA +D6 +FE +00 +00 +ENDCHAR +STARTCHAR H18543 +ENCODING 9642 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +38 +38 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR H18551 +ENCODING 9643 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +28 +38 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR filledrect +ENCODING 9644 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +7E +7E +7E +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni25AD +ENCODING 9645 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +42 +42 +7E +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni25AE +ENCODING 9646 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +7C +7C +7C +7C +7C +7C +7C +7C +00 +00 +ENDCHAR +STARTCHAR uni25AF +ENCODING 9647 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +44 +44 +44 +44 +44 +44 +44 +7C +00 +00 +ENDCHAR +STARTCHAR uni25B0 +ENCODING 9648 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +1F +3E +7C +F8 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni25B1 +ENCODING 9649 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +1F +22 +44 +F8 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR triagup +ENCODING 9650 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +18 +18 +3C +3C +7E +7E +FF +FF +00 +00 +ENDCHAR +STARTCHAR uni25B3 +ENCODING 9651 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +18 +18 +24 +24 +42 +42 +81 +FF +00 +00 +ENDCHAR +STARTCHAR uni25B4 +ENCODING 9652 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +18 +18 +3C +3C +7E +7E +00 +00 +ENDCHAR +STARTCHAR uni25B5 +ENCODING 9653 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +18 +18 +24 +24 +42 +7E +00 +00 +ENDCHAR +STARTCHAR uni25B6 +ENCODING 9654 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +40 +60 +70 +78 +7C +7E +7C +78 +70 +60 +40 +00 +00 +ENDCHAR +STARTCHAR uni25B7 +ENCODING 9655 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +40 +60 +50 +48 +44 +42 +44 +48 +50 +60 +40 +00 +00 +ENDCHAR +STARTCHAR uni25B8 +ENCODING 9656 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +60 +78 +7E +78 +60 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni25B9 +ENCODING 9657 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +60 +58 +46 +58 +60 +00 +00 +00 +00 +ENDCHAR +STARTCHAR triagrt +ENCODING 9658 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +80 +E0 +F8 +FE +F8 +E0 +80 +00 +00 +00 +ENDCHAR +STARTCHAR uni25BB +ENCODING 9659 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +80 +E0 +98 +86 +98 +E0 +80 +00 +00 +00 +ENDCHAR +STARTCHAR triagdn +ENCODING 9660 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +FF +FF +7E +7E +3C +3C +18 +18 +00 +00 +ENDCHAR +STARTCHAR uni25BD +ENCODING 9661 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +FF +81 +42 +42 +24 +24 +18 +18 +00 +00 +ENDCHAR +STARTCHAR uni25BE +ENCODING 9662 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +7E +3C +3C +18 +18 +00 +00 +ENDCHAR +STARTCHAR uni25BF +ENCODING 9663 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +42 +24 +24 +18 +18 +00 +00 +ENDCHAR +STARTCHAR uni25C0 +ENCODING 9664 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +02 +06 +0E +1E +3E +7E +3E +1E +0E +06 +02 +00 +00 +ENDCHAR +STARTCHAR uni25C1 +ENCODING 9665 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +02 +06 +0A +12 +22 +42 +22 +12 +0A +06 +02 +00 +00 +ENDCHAR +STARTCHAR uni25C2 +ENCODING 9666 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +06 +1E +7E +1E +06 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni25C3 +ENCODING 9667 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +06 +1A +62 +1A +06 +00 +00 +00 +00 +ENDCHAR +STARTCHAR triaglf +ENCODING 9668 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +02 +0E +3E +FE +3E +0E +02 +00 +00 +00 +ENDCHAR +STARTCHAR uni25C5 +ENCODING 9669 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +02 +0E +32 +C2 +32 +0E +02 +00 +00 +00 +ENDCHAR +STARTCHAR uni25C6 +ENCODING 9670 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +38 +7C +FE +7C +38 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni25C7 +ENCODING 9671 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +28 +44 +82 +44 +28 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni25C8 +ENCODING 9672 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +28 +54 +BA +54 +28 +10 +00 +00 +00 +ENDCHAR +STARTCHAR uni25C9 +ENCODING 9673 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +38 +44 +92 +BA +92 +44 +38 +00 +00 +00 +ENDCHAR +STARTCHAR lozenge +ENCODING 9674 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +18 +24 +24 +42 +24 +24 +18 +18 +00 +00 +ENDCHAR +STARTCHAR circle +ENCODING 9675 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3C +42 +81 +81 +81 +81 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni25CC +ENCODING 9676 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +18 +42 +00 +81 +81 +00 +42 +18 +00 +00 +ENDCHAR +STARTCHAR uni25CD +ENCODING 9677 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3C +6A +AB +AB +AB +AB +6A +3C +00 +00 +ENDCHAR +STARTCHAR uni25CE +ENCODING 9678 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3C +42 +99 +A5 +A5 +99 +42 +3C +00 +00 +ENDCHAR +STARTCHAR H18533 +ENCODING 9679 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3C +7E +FF +FF +FF +FF +7E +3C +00 +00 +ENDCHAR +STARTCHAR uni25D0 +ENCODING 9680 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3C +72 +F1 +F1 +F1 +F1 +72 +3C +00 +00 +ENDCHAR +STARTCHAR uni25D1 +ENCODING 9681 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3C +4E +8F +8F +8F +8F +4E +3C +00 +00 +ENDCHAR +STARTCHAR uni25D2 +ENCODING 9682 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3C +42 +81 +81 +FF +FF +7E +3C +00 +00 +ENDCHAR +STARTCHAR uni25D3 +ENCODING 9683 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3C +7E +FF +FF +81 +81 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni25D4 +ENCODING 9684 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3C +4E +8F +8F +81 +81 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni25D5 +ENCODING 9685 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3C +4E +8F +8F +FF +FF +7E +3C +00 +00 +ENDCHAR +STARTCHAR uni25D6 +ENCODING 9686 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +30 +70 +F0 +F0 +F0 +F0 +70 +30 +00 +00 +ENDCHAR +STARTCHAR uni25D7 +ENCODING 9687 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +0C +0E +0F +0F +0F +0F +0E +0C +00 +00 +ENDCHAR +STARTCHAR invbullet +ENCODING 9688 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +FF +FF +FF +FF +C3 +81 +81 +81 +81 +C3 +FF +FF +FF +ENDCHAR +STARTCHAR invcircle +ENCODING 9689 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +FF +FF +FF +FF +C3 +99 +BD +BD +99 +C3 +FF +FF +FF +ENDCHAR +STARTCHAR uni25DA +ENCODING 9690 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +FF +FF +FF +FF +C3 +99 +BD +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni25DB +ENCODING 9691 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +BD +99 +C3 +FF +FF +FF +ENDCHAR +STARTCHAR uni25DC +ENCODING 9692 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +30 +40 +80 +80 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni25DD +ENCODING 9693 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +0C +02 +01 +01 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni25DE +ENCODING 9694 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +01 +01 +02 +0C +00 +00 +ENDCHAR +STARTCHAR uni25DF +ENCODING 9695 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +80 +80 +40 +30 +00 +00 +ENDCHAR +STARTCHAR uni25E0 +ENCODING 9696 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3C +42 +81 +81 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni25E1 +ENCODING 9697 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +81 +81 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni25E2 +ENCODING 9698 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +01 +03 +07 +0F +1F +3F +7F +FF +00 +00 +ENDCHAR +STARTCHAR uni25E3 +ENCODING 9699 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +80 +C0 +E0 +F0 +F8 +FC +FE +FF +00 +00 +ENDCHAR +STARTCHAR uni25E4 +ENCODING 9700 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +FF +FE +FC +F8 +F0 +E0 +C0 +80 +00 +00 +ENDCHAR +STARTCHAR uni25E5 +ENCODING 9701 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +FF +7F +3F +1F +0F +07 +03 +01 +00 +00 +ENDCHAR +STARTCHAR openbullet +ENCODING 9702 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +38 +44 +44 +44 +38 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni25E7 +ENCODING 9703 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +FE +E2 +E2 +E2 +E2 +E2 +E2 +FE +00 +00 +ENDCHAR +STARTCHAR uni25E8 +ENCODING 9704 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +FE +8E +8E +8E +8E +8E +8E +FE +00 +00 +ENDCHAR +STARTCHAR uni25E9 +ENCODING 9705 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +FE +FE +FA +F2 +E2 +C2 +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni25EA +ENCODING 9706 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +FE +82 +86 +8E +9E +BE +FE +FE +00 +00 +ENDCHAR +STARTCHAR uni25EB +ENCODING 9707 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +FE +92 +92 +92 +92 +92 +92 +FE +00 +00 +ENDCHAR +STARTCHAR uni25EC +ENCODING 9708 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +10 +28 +28 +44 +54 +7C +92 +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni25ED +ENCODING 9709 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +10 +38 +38 +74 +74 +74 +F2 +F2 +FE +00 +00 +ENDCHAR +STARTCHAR uni25EE +ENCODING 9710 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +10 +38 +38 +5C +5C +5C +9E +9E +FE +00 +00 +ENDCHAR +STARTCHAR uni25EF +ENCODING 9711 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3C +42 +81 +81 +81 +81 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni25F0 +ENCODING 9712 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +FE +92 +92 +F2 +82 +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni25F1 +ENCODING 9713 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +FE +82 +82 +F2 +92 +92 +FE +00 +00 +ENDCHAR +STARTCHAR uni25F2 +ENCODING 9714 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +FE +82 +82 +9E +92 +92 +FE +00 +00 +ENDCHAR +STARTCHAR uni25F3 +ENCODING 9715 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +FE +92 +92 +9E +82 +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni25F4 +ENCODING 9716 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7C +92 +92 +F2 +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR uni25F5 +ENCODING 9717 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7C +82 +82 +F2 +92 +92 +7C +00 +00 +ENDCHAR +STARTCHAR uni25F6 +ENCODING 9718 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7C +82 +82 +9E +92 +92 +7C +00 +00 +ENDCHAR +STARTCHAR uni25F7 +ENCODING 9719 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7C +92 +92 +9E +82 +82 +7C +00 +00 +ENDCHAR +STARTCHAR uni25F8 +ENCODING 9720 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +44 +48 +50 +60 +40 +00 +00 +00 +ENDCHAR +STARTCHAR uni25F9 +ENCODING 9721 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +22 +12 +0A +06 +02 +00 +00 +00 +ENDCHAR +STARTCHAR uni25FA +ENCODING 9722 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +40 +60 +50 +48 +44 +7E +00 +00 +00 +ENDCHAR +STARTCHAR uni25FB +ENCODING 9723 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +42 +42 +42 +42 +7E +00 +00 +00 +ENDCHAR +STARTCHAR uni25FC +ENCODING 9724 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +7E +7E +7E +7E +7E +00 +00 +00 +ENDCHAR +STARTCHAR uni25FD +ENCODING 9725 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +3C +24 +24 +3C +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni25FE +ENCODING 9726 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +3C +3C +3C +3C +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni25FF +ENCODING 9727 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +02 +06 +0A +12 +22 +7E +00 +00 +00 +ENDCHAR +STARTCHAR uni2600 +ENCODING 9728 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +92 +44 +10 +38 +10 +44 +92 +10 +00 +00 +ENDCHAR +STARTCHAR uni2601 +ENCODING 9729 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +40 +E6 +FF +7E +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2602 +ENCODING 9730 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +38 +FE +10 +10 +10 +10 +50 +20 +00 +00 +ENDCHAR +STARTCHAR uni2603 +ENCODING 9731 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +82 +38 +7C +29 +54 +AA +7C +82 +92 +82 +7C +01 +40 +ENDCHAR +STARTCHAR uni2604 +ENCODING 9732 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +48 +50 +52 +44 +08 +60 +90 +90 +60 +00 +00 +ENDCHAR +STARTCHAR uni2605 +ENCODING 9733 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +10 +FE +38 +28 +44 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2606 +ENCODING 9734 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +10 +FE +28 +38 +44 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2607 +ENCODING 9735 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +08 +10 +20 +40 +20 +14 +0C +1C +00 +00 +ENDCHAR +STARTCHAR uni2608 +ENCODING 9736 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +42 +44 +48 +50 +50 +4A +46 +4E +00 +00 +ENDCHAR +STARTCHAR uni2609 +ENCODING 9737 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +44 +54 +44 +38 +00 +00 +00 +ENDCHAR +STARTCHAR uni260A +ENCODING 9738 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +3C +42 +42 +24 +24 +5A +24 +00 +00 +ENDCHAR +STARTCHAR uni260B +ENCODING 9739 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +24 +5A +24 +24 +42 +42 +3C +00 +00 +ENDCHAR +STARTCHAR uni260C +ENCODING 9740 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +04 +08 +30 +48 +48 +30 +00 +00 +ENDCHAR +STARTCHAR uni260D +ENCODING 9741 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +0C +12 +12 +0C +10 +30 +48 +48 +30 +00 +00 +ENDCHAR +STARTCHAR uni260E +ENCODING 9742 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7C +FE +92 +38 +EE +EE +FE +00 +00 +ENDCHAR +STARTCHAR uni260F +ENCODING 9743 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7C +92 +92 +7C +BA +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni2610 +ENCODING 9744 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +82 +82 +82 +82 +82 +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni2611 +ENCODING 9745 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +86 +86 +8A +8A +92 +D2 +A2 +FE +00 +00 +ENDCHAR +STARTCHAR uni2612 +ENCODING 9746 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +AA +AA +92 +AA +AA +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni2613 +ENCODING 9747 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +82 +44 +28 +10 +28 +44 +82 +82 +00 +00 +ENDCHAR +STARTCHAR uni2616 +ENCODING 9750 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +28 +44 +82 +82 +82 +82 +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni2617 +ENCODING 9751 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +38 +7C +FE +FE +FE +FE +FE +FE +00 +00 +ENDCHAR +STARTCHAR uni2619 +ENCODING 9753 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +04 +12 +3A +7C +74 +7A +3A +14 +00 +00 +ENDCHAR +STARTCHAR uni261A +ENCODING 9754 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FF +3D +1D +1D +0F +00 +00 +ENDCHAR +STARTCHAR uni261B +ENCODING 9755 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FF +BC +B8 +B8 +F0 +00 +00 +ENDCHAR +STARTCHAR uni261C +ENCODING 9756 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FF +21 +11 +11 +0F +00 +00 +ENDCHAR +STARTCHAR uni261D +ENCODING 9757 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +02 +02 +06 +1A +22 +22 +22 +3E +00 +00 +ENDCHAR +STARTCHAR uni261E +ENCODING 9758 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +FF +84 +88 +88 +F0 +00 +00 +ENDCHAR +STARTCHAR uni261F +ENCODING 9759 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3E +22 +22 +22 +1A +06 +02 +02 +00 +00 +ENDCHAR +STARTCHAR uni2620 +ENCODING 9760 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +7C +82 +AA +44 +38 +92 +C6 +AA +10 +AA +C6 +82 +ENDCHAR +STARTCHAR uni2621 +ENCODING 9761 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +7C +02 +02 +04 +08 +10 +20 +40 +40 +3E +00 +00 +ENDCHAR +STARTCHAR uni2622 +ENCODING 9762 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +44 +EE +FE +92 +BA +7C +38 +00 +00 +00 +ENDCHAR +STARTCHAR uni2623 +ENCODING 9763 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +28 +44 +BA +28 +28 +10 +10 +38 +00 +00 +ENDCHAR +STARTCHAR uni2624 +ENCODING 9764 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +10 +38 +FE +92 +7C +92 +7C +92 +7C +54 +38 +00 +00 +ENDCHAR +STARTCHAR uni2625 +ENCODING 9765 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +38 +44 +44 +28 +10 +7C +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni2626 +ENCODING 9766 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +38 +10 +FE +10 +50 +30 +18 +14 +10 +00 +00 +ENDCHAR +STARTCHAR uni2627 +ENCODING 9767 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +1C +12 +12 +1C +10 +92 +54 +38 +54 +92 +00 +00 +ENDCHAR +STARTCHAR uni2628 +ENCODING 9768 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +38 +10 +FE +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni2629 +ENCODING 9769 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +38 +10 +92 +FE +92 +10 +38 +00 +00 +ENDCHAR +STARTCHAR uni262A +ENCODING 9770 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +E2 +C8 +DC +C8 +D4 +C0 +E2 +7C +00 +00 +ENDCHAR +STARTCHAR uni262B +ENCODING 9771 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +54 +28 +00 +BA +BA +BA +BA +BA +92 +92 +7C +10 +00 +ENDCHAR +STARTCHAR uni262C +ENCODING 9772 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +BA +92 +AA +AA +92 +D2 +FE +FE +92 +BA +54 +ENDCHAR +STARTCHAR uni262D +ENCODING 9773 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +78 +84 +14 +34 +64 +54 +0C +44 +BA +00 +00 +ENDCHAR +STARTCHAR uni262E +ENCODING 9774 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +38 +54 +92 +92 +BA +D6 +54 +38 +00 +00 +ENDCHAR +STARTCHAR uni262F +ENCODING 9775 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +38 +44 +EA +F2 +DE +7C +38 +00 +00 +00 +ENDCHAR +STARTCHAR uni2630 +ENCODING 9776 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +FE +FE +00 +FE +FE +00 +FE +FE +00 +00 +ENDCHAR +STARTCHAR uni2631 +ENCODING 9777 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +EE +EE +00 +FE +FE +00 +FE +FE +00 +00 +ENDCHAR +STARTCHAR uni2632 +ENCODING 9778 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +FE +FE +00 +EE +EE +00 +FE +FE +00 +00 +ENDCHAR +STARTCHAR uni2633 +ENCODING 9779 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +EE +EE +00 +EE +EE +00 +FE +FE +00 +00 +ENDCHAR +STARTCHAR uni2634 +ENCODING 9780 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +FE +FE +00 +FE +FE +00 +EE +EE +00 +00 +ENDCHAR +STARTCHAR uni2635 +ENCODING 9781 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +EE +EE +00 +FE +FE +00 +EE +EE +00 +00 +ENDCHAR +STARTCHAR uni2636 +ENCODING 9782 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +FE +FE +00 +EE +EE +00 +EE +EE +00 +00 +ENDCHAR +STARTCHAR uni2637 +ENCODING 9783 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +EE +EE +00 +EE +EE +00 +EE +EE +00 +00 +ENDCHAR +STARTCHAR uni2638 +ENCODING 9784 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +BA +54 +BA +FE +BA +54 +BA +00 +00 +ENDCHAR +STARTCHAR uni2639 +ENCODING 9785 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +3C +42 +A5 +81 +99 +81 +99 +A5 +42 +3C +00 +00 +ENDCHAR +STARTCHAR smileface +ENCODING 9786 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +3C +42 +A5 +81 +99 +81 +A5 +99 +42 +3C +00 +00 +ENDCHAR +STARTCHAR invsmileface +ENCODING 9787 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +3C +7E +DB +FF +E7 +FF +DB +E7 +7E +3C +00 +00 +ENDCHAR +STARTCHAR sun +ENCODING 9788 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +92 +44 +10 +28 +10 +44 +92 +10 +00 +00 +ENDCHAR +STARTCHAR uni263D +ENCODING 9789 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +64 +12 +12 +12 +12 +12 +64 +38 +00 +00 +ENDCHAR +STARTCHAR uni263E +ENCODING 9790 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1C +26 +48 +48 +48 +48 +48 +26 +1C +00 +00 +ENDCHAR +STARTCHAR uni263F +ENCODING 9791 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +38 +44 +44 +44 +38 +10 +38 +10 +00 +00 +ENDCHAR +STARTCHAR female +ENCODING 9792 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +38 +44 +44 +44 +38 +10 +38 +10 +00 +00 +ENDCHAR +STARTCHAR uni2641 +ENCODING 9793 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +38 +10 +38 +44 +44 +44 +38 +00 +00 +ENDCHAR +STARTCHAR male +ENCODING 9794 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +0E +06 +7A +88 +88 +88 +70 +00 +00 +ENDCHAR +STARTCHAR uni2643 +ENCODING 9795 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +32 +4A +0A +0A +12 +7E +02 +02 +00 +00 +ENDCHAR +STARTCHAR uni2644 +ENCODING 9796 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +70 +20 +2C +32 +22 +22 +24 +24 +00 +00 +ENDCHAR +STARTCHAR uni2645 +ENCODING 9797 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +92 +92 +FE +92 +92 +92 +10 +28 +10 +00 +ENDCHAR +STARTCHAR uni2646 +ENCODING 9798 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +54 +7E +54 +54 +54 +38 +10 +38 +10 +00 +00 +ENDCHAR +STARTCHAR uni2647 +ENCODING 9799 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +42 +42 +42 +7C +40 +40 +40 +7E +00 +00 +ENDCHAR +STARTCHAR uni2648 +ENCODING 9800 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +6C +92 +92 +10 +10 +10 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni2649 +ENCODING 9801 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +42 +42 +24 +18 +24 +24 +18 +00 +00 +ENDCHAR +STARTCHAR uni264A +ENCODING 9802 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +7E +24 +24 +24 +24 +24 +24 +7E +00 +00 +ENDCHAR +STARTCHAR uni264B +ENCODING 9803 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +1C +22 +50 +20 +04 +0A +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni264C +ENCODING 9804 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +44 +44 +24 +14 +34 +54 +54 +24 +02 +00 +ENDCHAR +STARTCHAR uni264D +ENCODING 9805 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +A8 +F8 +AA +AE +AA +AA +AA +AA +AC +18 +28 +ENDCHAR +STARTCHAR uni264E +ENCODING 9806 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +3C +42 +42 +24 +66 +00 +7E +00 +00 +ENDCHAR +STARTCHAR uni264F +ENCODING 9807 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +54 +7C +54 +54 +54 +54 +54 +54 +54 +03 +00 +ENDCHAR +STARTCHAR uni2650 +ENCODING 9808 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1C +02 +05 +89 +51 +20 +50 +88 +00 +00 +00 +ENDCHAR +STARTCHAR uni2651 +ENCODING 9809 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +80 +50 +68 +48 +48 +4A +4D +4A +08 +30 +ENDCHAR +STARTCHAR uni2652 +ENCODING 9810 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +2A +54 +00 +00 +2A +54 +00 +00 +ENDCHAR +STARTCHAR uni2653 +ENCODING 9811 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +82 +44 +28 +28 +FE +28 +28 +44 +82 +00 +00 +ENDCHAR +STARTCHAR uni2654 +ENCODING 9812 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +5A +66 +42 +42 +24 +24 +24 +42 +7E +00 +00 +ENDCHAR +STARTCHAR uni2655 +ENCODING 9813 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +66 +42 +42 +42 +24 +24 +24 +42 +7E +00 +00 +ENDCHAR +STARTCHAR uni2656 +ENCODING 9814 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +5A +7E +42 +24 +24 +24 +24 +42 +7E +00 +00 +ENDCHAR +STARTCHAR uni2657 +ENCODING 9815 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +24 +24 +24 +18 +24 +42 +7E +00 +00 +ENDCHAR +STARTCHAR uni2658 +ENCODING 9816 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +3A +42 +42 +32 +12 +22 +42 +7E +00 +00 +ENDCHAR +STARTCHAR uni2659 +ENCODING 9817 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +18 +24 +24 +18 +24 +24 +42 +7E +00 +00 +ENDCHAR +STARTCHAR uni265A +ENCODING 9818 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +5A +7E +7E +7E +3C +3C +3C +7E +7E +00 +00 +ENDCHAR +STARTCHAR uni265B +ENCODING 9819 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +18 +7E +5A +7E +7E +3C +3C +3C +7E +7E +00 +00 +ENDCHAR +STARTCHAR uni265C +ENCODING 9820 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +5A +7E +7E +3C +3C +3C +3C +7E +7E +00 +00 +ENDCHAR +STARTCHAR uni265D +ENCODING 9821 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +34 +34 +3C +3C +18 +3C +7E +7E +00 +00 +ENDCHAR +STARTCHAR uni265E +ENCODING 9822 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +3E +76 +7E +3E +1E +3E +7E +7E +00 +00 +ENDCHAR +STARTCHAR uni265F +ENCODING 9823 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +18 +3C +3C +18 +3C +3C +7E +7E +00 +00 +ENDCHAR +STARTCHAR spade +ENCODING 9824 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +38 +7C +FE +FE +7C +10 +38 +00 +00 +ENDCHAR +STARTCHAR uni2661 +ENCODING 9825 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +6C +92 +92 +82 +44 +28 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uni2662 +ENCODING 9826 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +28 +44 +82 +44 +28 +10 +00 +00 +ENDCHAR +STARTCHAR club +ENCODING 9827 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +38 +7C +10 +54 +FE +FE +54 +10 +38 +00 +00 +ENDCHAR +STARTCHAR uni2664 +ENCODING 9828 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +10 +28 +44 +82 +7C +10 +38 +00 +00 +ENDCHAR +STARTCHAR heart +ENCODING 9829 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +6C +FE +FE +FE +7C +38 +10 +10 +00 +00 +ENDCHAR +STARTCHAR diamond +ENCODING 9830 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +38 +7C +FE +7C +38 +10 +00 +00 +ENDCHAR +STARTCHAR uni2667 +ENCODING 9831 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +28 +6C +28 +6C +82 +AA +54 +10 +38 +00 +00 +ENDCHAR +STARTCHAR uni2668 +ENCODING 9832 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +24 +48 +24 +48 +24 +00 +7E +3C +00 +00 +ENDCHAR +STARTCHAR uni2669 +ENCODING 9833 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +04 +04 +04 +04 +04 +1C +3C +3C +18 +00 +00 +ENDCHAR +STARTCHAR musicalnote +ENCODING 9834 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +16 +10 +10 +10 +70 +F0 +F0 +60 +00 +00 +ENDCHAR +STARTCHAR musicalnotedbl +ENCODING 9835 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +20 +30 +28 +24 +22 +62 +E2 +46 +0E +04 +00 +00 +ENDCHAR +STARTCHAR uni266C +ENCODING 9836 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +20 +30 +28 +34 +2A +66 +E2 +46 +0E +04 +00 +00 +ENDCHAR +STARTCHAR uni266D +ENCODING 9837 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +40 +40 +40 +58 +64 +44 +44 +48 +50 +60 +00 +00 +ENDCHAR +STARTCHAR uni266E +ENCODING 9838 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +40 +42 +46 +4A +52 +66 +4A +52 +62 +42 +02 +00 +ENDCHAR +STARTCHAR uni266F +ENCODING 9839 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +04 +26 +2C +34 +64 +24 +2E +34 +64 +20 +00 +00 +ENDCHAR +STARTCHAR uni2670 +ENCODING 9840 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +28 +10 +54 +38 +54 +10 +10 +10 +28 +00 +00 +ENDCHAR +STARTCHAR uni2671 +ENCODING 9841 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +28 +10 +54 +7C +54 +10 +10 +28 +10 +00 +ENDCHAR +STARTCHAR uni2672 +ENCODING 9842 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +18 +07 +E5 +A7 +E0 +8A +54 +08 +00 +00 +ENDCHAR +STARTCHAR uni2673 +ENCODING 9843 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +04 +C2 +D6 +96 +90 +92 +92 +8A +1C +08 +00 +ENDCHAR +STARTCHAR uni2674 +ENCODING 9844 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +04 +C2 +D6 +AE +88 +92 +BA +8A +1C +08 +00 +ENDCHAR +STARTCHAR uni2675 +ENCODING 9845 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +04 +C2 +D6 +AE +98 +8A +B2 +8A +1C +08 +00 +ENDCHAR +STARTCHAR uni2676 +ENCODING 9846 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +04 +C2 +E6 +A6 +B0 +BA +92 +8A +1C +08 +00 +ENDCHAR +STARTCHAR uni2677 +ENCODING 9847 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +04 +C2 +FE +A6 +B0 +8A +B2 +8A +1C +08 +00 +ENDCHAR +STARTCHAR uni2678 +ENCODING 9848 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +04 +C2 +D6 +A6 +B0 +AA +92 +8A +1C +08 +00 +ENDCHAR +STARTCHAR uni2679 +ENCODING 9849 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +04 +C2 +FE +8E +90 +92 +92 +8A +1C +08 +00 +ENDCHAR +STARTCHAR uni267A +ENCODING 9850 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +08 +04 +C2 +C6 +86 +80 +82 +82 +8A +1C +08 +00 +ENDCHAR +STARTCHAR uni267B +ENCODING 9851 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +18 +04 +66 +66 +80 +8A +5C +08 +00 +00 +ENDCHAR +STARTCHAR uni267C +ENCODING 9852 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +3C +7E +E7 +EB +99 +99 +BF +B5 +A3 +F7 +7E +3C +ENDCHAR +STARTCHAR uni267D +ENCODING 9853 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +3C +42 +99 +95 +E7 +E7 +C1 +CB +DD +89 +42 +3C +ENDCHAR +STARTCHAR uni2680 +ENCODING 9856 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +82 +82 +92 +82 +82 +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni2681 +ENCODING 9857 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +A2 +82 +82 +82 +8A +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni2682 +ENCODING 9858 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +A2 +82 +92 +82 +8A +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni2683 +ENCODING 9859 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +AA +82 +82 +82 +AA +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni2684 +ENCODING 9860 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +AA +82 +92 +82 +AA +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni2685 +ENCODING 9861 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +82 +AA +82 +AA +82 +AA +82 +FE +00 +00 +ENDCHAR +STARTCHAR uni2686 +ENCODING 9862 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +38 +44 +82 +8A +8A +82 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni2687 +ENCODING 9863 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +38 +44 +82 +AA +AA +82 +44 +38 +00 +00 +ENDCHAR +STARTCHAR uni2688 +ENCODING 9864 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +38 +7C +FE +F6 +F6 +FE +7C +38 +00 +00 +ENDCHAR +STARTCHAR uni2689 +ENCODING 9865 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +38 +7C +FE +D6 +D6 +FE +7C +38 +00 +00 +ENDCHAR +STARTCHAR uni27D5 +ENCODING 10197 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +E2 +36 +36 +2A +2A +2A +36 +36 +E2 +00 +00 +ENDCHAR +STARTCHAR uni27D6 +ENCODING 10198 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +8E +D8 +D8 +A8 +A8 +A8 +D8 +D8 +8E +00 +00 +ENDCHAR +STARTCHAR uni27D7 +ENCODING 10199 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +C6 +6C +6C +54 +54 +54 +6C +6C +C6 +00 +00 +ENDCHAR +STARTCHAR uni27E6 +ENCODING 10214 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +50 +50 +50 +50 +50 +50 +50 +7C +00 +00 +ENDCHAR +STARTCHAR uni27E7 +ENCODING 10215 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +14 +14 +14 +14 +14 +14 +14 +7C +00 +00 +ENDCHAR +STARTCHAR uni27E8 +ENCODING 10216 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +04 +08 +08 +10 +10 +20 +10 +10 +08 +08 +04 +00 +ENDCHAR +STARTCHAR uni27E9 +ENCODING 10217 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +20 +10 +10 +08 +08 +04 +08 +08 +10 +10 +20 +00 +ENDCHAR +STARTCHAR uni27EA +ENCODING 10218 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +0A +14 +14 +28 +28 +50 +28 +28 +14 +14 +0A +00 +ENDCHAR +STARTCHAR uni27EB +ENCODING 10219 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +50 +28 +28 +14 +14 +0A +14 +14 +28 +28 +50 +00 +ENDCHAR +STARTCHAR uni27F0 +ENCODING 10224 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +28 +6C +AA +AB +AA +AA +AA +AA +00 +00 +ENDCHAR +STARTCHAR uni27F1 +ENCODING 10225 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +AA +AA +AA +AA +AB +AA +6C +28 +10 +00 +00 +ENDCHAR +STARTCHAR uni27F5 +ENCODING 10229 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +20 +40 +FF +40 +20 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni27F6 +ENCODING 10230 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +04 +02 +FF +02 +04 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni27F7 +ENCODING 10231 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +24 +42 +FF +42 +24 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni27F8 +ENCODING 10232 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +10 +20 +7F +80 +7F +20 +10 +00 +00 +ENDCHAR +STARTCHAR uni27F9 +ENCODING 10233 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +08 +04 +FE +01 +FE +04 +08 +00 +00 +ENDCHAR +STARTCHAR uni27FA +ENCODING 10234 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +24 +7E +81 +7E +24 +00 +00 +00 +ENDCHAR +STARTCHAR uni27FB +ENCODING 10235 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +21 +41 +FF +41 +21 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni27FC +ENCODING 10236 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +84 +82 +FF +82 +84 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni27FD +ENCODING 10237 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +11 +21 +7F +81 +7F +21 +11 +00 +00 +ENDCHAR +STARTCHAR uni27FE +ENCODING 10238 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +88 +84 +FE +81 +FE +84 +88 +00 +00 +ENDCHAR +STARTCHAR uni27FF +ENCODING 10239 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +04 +AA +AF +52 +54 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2800 +ENCODING 10240 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2801 +ENCODING 10241 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2802 +ENCODING 10242 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +60 +60 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2803 +ENCODING 10243 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +60 +60 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2804 +ENCODING 10244 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +60 +60 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2805 +ENCODING 10245 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +00 +00 +00 +60 +60 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2806 +ENCODING 10246 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +60 +60 +00 +60 +60 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2807 +ENCODING 10247 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +60 +60 +00 +60 +60 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2808 +ENCODING 10248 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2809 +ENCODING 10249 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni280A +ENCODING 10250 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +60 +60 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni280B +ENCODING 10251 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +60 +60 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni280C +ENCODING 10252 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +00 +00 +00 +60 +60 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni280D +ENCODING 10253 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +00 +00 +00 +60 +60 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni280E +ENCODING 10254 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +60 +60 +00 +60 +60 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni280F +ENCODING 10255 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +60 +60 +00 +60 +60 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2810 +ENCODING 10256 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +06 +06 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2811 +ENCODING 10257 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +06 +06 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2812 +ENCODING 10258 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +66 +66 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2813 +ENCODING 10259 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +66 +66 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2814 +ENCODING 10260 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +06 +06 +00 +60 +60 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2815 +ENCODING 10261 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +06 +06 +00 +60 +60 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2816 +ENCODING 10262 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +66 +66 +00 +60 +60 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2817 +ENCODING 10263 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +66 +66 +00 +60 +60 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2818 +ENCODING 10264 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +06 +06 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2819 +ENCODING 10265 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +06 +06 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni281A +ENCODING 10266 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +66 +66 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni281B +ENCODING 10267 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +66 +66 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni281C +ENCODING 10268 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +06 +06 +00 +60 +60 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni281D +ENCODING 10269 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +06 +06 +00 +60 +60 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni281E +ENCODING 10270 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +66 +66 +00 +60 +60 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni281F +ENCODING 10271 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +66 +66 +00 +60 +60 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2820 +ENCODING 10272 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +06 +06 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2821 +ENCODING 10273 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +00 +00 +00 +06 +06 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2822 +ENCODING 10274 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +60 +60 +00 +06 +06 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2823 +ENCODING 10275 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +60 +60 +00 +06 +06 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2824 +ENCODING 10276 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +66 +66 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2825 +ENCODING 10277 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +00 +00 +00 +66 +66 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2826 +ENCODING 10278 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +60 +60 +00 +66 +66 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2827 +ENCODING 10279 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +60 +60 +00 +66 +66 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2828 +ENCODING 10280 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +00 +00 +00 +06 +06 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2829 +ENCODING 10281 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +00 +00 +00 +06 +06 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni282A +ENCODING 10282 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +60 +60 +00 +06 +06 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni282B +ENCODING 10283 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +60 +60 +00 +06 +06 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni282C +ENCODING 10284 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +00 +00 +00 +66 +66 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni282D +ENCODING 10285 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +00 +00 +00 +66 +66 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni282E +ENCODING 10286 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +60 +60 +00 +66 +66 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni282F +ENCODING 10287 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +60 +60 +00 +66 +66 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2830 +ENCODING 10288 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +06 +06 +00 +06 +06 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2831 +ENCODING 10289 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +06 +06 +00 +06 +06 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2832 +ENCODING 10290 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +66 +66 +00 +06 +06 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2833 +ENCODING 10291 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +66 +66 +00 +06 +06 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2834 +ENCODING 10292 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +06 +06 +00 +66 +66 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2835 +ENCODING 10293 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +06 +06 +00 +66 +66 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2836 +ENCODING 10294 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +66 +66 +00 +66 +66 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2837 +ENCODING 10295 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +66 +66 +00 +66 +66 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2838 +ENCODING 10296 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +06 +06 +00 +06 +06 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2839 +ENCODING 10297 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +06 +06 +00 +06 +06 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni283A +ENCODING 10298 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +66 +66 +00 +06 +06 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni283B +ENCODING 10299 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +66 +66 +00 +06 +06 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni283C +ENCODING 10300 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +06 +06 +00 +66 +66 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni283D +ENCODING 10301 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +06 +06 +00 +66 +66 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni283E +ENCODING 10302 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +66 +66 +00 +66 +66 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni283F +ENCODING 10303 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +66 +66 +00 +66 +66 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uni2840 +ENCODING 10304 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2841 +ENCODING 10305 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +00 +00 +00 +00 +00 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2842 +ENCODING 10306 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +60 +60 +00 +00 +00 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2843 +ENCODING 10307 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +60 +60 +00 +00 +00 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2844 +ENCODING 10308 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +60 +60 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2845 +ENCODING 10309 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +00 +00 +00 +60 +60 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2846 +ENCODING 10310 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +60 +60 +00 +60 +60 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2847 +ENCODING 10311 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +60 +60 +00 +60 +60 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2848 +ENCODING 10312 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +00 +00 +00 +00 +00 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2849 +ENCODING 10313 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +00 +00 +00 +00 +00 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni284A +ENCODING 10314 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +60 +60 +00 +00 +00 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni284B +ENCODING 10315 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +60 +60 +00 +00 +00 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni284C +ENCODING 10316 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +00 +00 +00 +60 +60 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni284D +ENCODING 10317 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +00 +00 +00 +60 +60 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni284E +ENCODING 10318 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +60 +60 +00 +60 +60 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni284F +ENCODING 10319 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +60 +60 +00 +60 +60 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2850 +ENCODING 10320 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +06 +06 +00 +00 +00 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2851 +ENCODING 10321 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +06 +06 +00 +00 +00 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2852 +ENCODING 10322 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +66 +66 +00 +00 +00 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2853 +ENCODING 10323 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +66 +66 +00 +00 +00 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2854 +ENCODING 10324 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +06 +06 +00 +60 +60 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2855 +ENCODING 10325 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +06 +06 +00 +60 +60 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2856 +ENCODING 10326 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +66 +66 +00 +60 +60 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2857 +ENCODING 10327 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +66 +66 +00 +60 +60 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2858 +ENCODING 10328 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +06 +06 +00 +00 +00 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2859 +ENCODING 10329 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +06 +06 +00 +00 +00 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni285A +ENCODING 10330 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +66 +66 +00 +00 +00 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni285B +ENCODING 10331 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +66 +66 +00 +00 +00 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni285C +ENCODING 10332 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +06 +06 +00 +60 +60 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni285D +ENCODING 10333 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +06 +06 +00 +60 +60 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni285E +ENCODING 10334 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +66 +66 +00 +60 +60 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni285F +ENCODING 10335 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +66 +66 +00 +60 +60 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2860 +ENCODING 10336 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +06 +06 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2861 +ENCODING 10337 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +00 +00 +00 +06 +06 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2862 +ENCODING 10338 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +60 +60 +00 +06 +06 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2863 +ENCODING 10339 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +60 +60 +00 +06 +06 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2864 +ENCODING 10340 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +66 +66 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2865 +ENCODING 10341 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +00 +00 +00 +66 +66 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2866 +ENCODING 10342 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +60 +60 +00 +66 +66 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2867 +ENCODING 10343 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +60 +60 +00 +66 +66 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2868 +ENCODING 10344 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +00 +00 +00 +06 +06 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2869 +ENCODING 10345 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +00 +00 +00 +06 +06 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni286A +ENCODING 10346 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +60 +60 +00 +06 +06 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni286B +ENCODING 10347 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +60 +60 +00 +06 +06 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni286C +ENCODING 10348 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +00 +00 +00 +66 +66 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni286D +ENCODING 10349 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +00 +00 +00 +66 +66 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni286E +ENCODING 10350 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +60 +60 +00 +66 +66 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni286F +ENCODING 10351 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +60 +60 +00 +66 +66 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2870 +ENCODING 10352 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +06 +06 +00 +06 +06 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2871 +ENCODING 10353 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +06 +06 +00 +06 +06 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2872 +ENCODING 10354 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +66 +66 +00 +06 +06 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2873 +ENCODING 10355 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +66 +66 +00 +06 +06 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2874 +ENCODING 10356 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +06 +06 +00 +66 +66 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2875 +ENCODING 10357 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +06 +06 +00 +66 +66 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2876 +ENCODING 10358 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +66 +66 +00 +66 +66 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2877 +ENCODING 10359 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +66 +66 +00 +66 +66 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2878 +ENCODING 10360 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +06 +06 +00 +06 +06 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2879 +ENCODING 10361 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +06 +06 +00 +06 +06 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni287A +ENCODING 10362 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +66 +66 +00 +06 +06 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni287B +ENCODING 10363 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +66 +66 +00 +06 +06 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni287C +ENCODING 10364 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +06 +06 +00 +66 +66 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni287D +ENCODING 10365 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +06 +06 +00 +66 +66 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni287E +ENCODING 10366 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +66 +66 +00 +66 +66 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni287F +ENCODING 10367 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +66 +66 +00 +66 +66 +00 +60 +60 +00 +ENDCHAR +STARTCHAR uni2880 +ENCODING 10368 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni2881 +ENCODING 10369 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +00 +00 +00 +00 +00 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni2882 +ENCODING 10370 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +60 +60 +00 +00 +00 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni2883 +ENCODING 10371 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +60 +60 +00 +00 +00 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni2884 +ENCODING 10372 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +60 +60 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni2885 +ENCODING 10373 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +00 +00 +00 +60 +60 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni2886 +ENCODING 10374 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +60 +60 +00 +60 +60 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni2887 +ENCODING 10375 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +60 +60 +00 +60 +60 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni2888 +ENCODING 10376 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +00 +00 +00 +00 +00 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni2889 +ENCODING 10377 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +00 +00 +00 +00 +00 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni288A +ENCODING 10378 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +60 +60 +00 +00 +00 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni288B +ENCODING 10379 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +60 +60 +00 +00 +00 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni288C +ENCODING 10380 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +00 +00 +00 +60 +60 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni288D +ENCODING 10381 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +00 +00 +00 +60 +60 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni288E +ENCODING 10382 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +60 +60 +00 +60 +60 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni288F +ENCODING 10383 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +60 +60 +00 +60 +60 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni2890 +ENCODING 10384 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +06 +06 +00 +00 +00 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni2891 +ENCODING 10385 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +06 +06 +00 +00 +00 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni2892 +ENCODING 10386 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +66 +66 +00 +00 +00 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni2893 +ENCODING 10387 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +66 +66 +00 +00 +00 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni2894 +ENCODING 10388 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +06 +06 +00 +60 +60 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni2895 +ENCODING 10389 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +06 +06 +00 +60 +60 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni2896 +ENCODING 10390 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +66 +66 +00 +60 +60 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni2897 +ENCODING 10391 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +66 +66 +00 +60 +60 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni2898 +ENCODING 10392 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +06 +06 +00 +00 +00 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni2899 +ENCODING 10393 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +06 +06 +00 +00 +00 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni289A +ENCODING 10394 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +66 +66 +00 +00 +00 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni289B +ENCODING 10395 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +66 +66 +00 +00 +00 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni289C +ENCODING 10396 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +06 +06 +00 +60 +60 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni289D +ENCODING 10397 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +06 +06 +00 +60 +60 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni289E +ENCODING 10398 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +66 +66 +00 +60 +60 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni289F +ENCODING 10399 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +66 +66 +00 +60 +60 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28A0 +ENCODING 10400 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +06 +06 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28A1 +ENCODING 10401 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +00 +00 +00 +06 +06 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28A2 +ENCODING 10402 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +60 +60 +00 +06 +06 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28A3 +ENCODING 10403 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +60 +60 +00 +06 +06 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28A4 +ENCODING 10404 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +66 +66 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28A5 +ENCODING 10405 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +00 +00 +00 +66 +66 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28A6 +ENCODING 10406 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +60 +60 +00 +66 +66 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28A7 +ENCODING 10407 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +60 +60 +00 +66 +66 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28A8 +ENCODING 10408 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +00 +00 +00 +06 +06 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28A9 +ENCODING 10409 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +00 +00 +00 +06 +06 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28AA +ENCODING 10410 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +60 +60 +00 +06 +06 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28AB +ENCODING 10411 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +60 +60 +00 +06 +06 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28AC +ENCODING 10412 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +00 +00 +00 +66 +66 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28AD +ENCODING 10413 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +00 +00 +00 +66 +66 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28AE +ENCODING 10414 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +60 +60 +00 +66 +66 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28AF +ENCODING 10415 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +60 +60 +00 +66 +66 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28B0 +ENCODING 10416 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +06 +06 +00 +06 +06 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28B1 +ENCODING 10417 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +06 +06 +00 +06 +06 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28B2 +ENCODING 10418 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +66 +66 +00 +06 +06 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28B3 +ENCODING 10419 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +66 +66 +00 +06 +06 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28B4 +ENCODING 10420 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +06 +06 +00 +66 +66 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28B5 +ENCODING 10421 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +06 +06 +00 +66 +66 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28B6 +ENCODING 10422 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +66 +66 +00 +66 +66 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28B7 +ENCODING 10423 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +66 +66 +00 +66 +66 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28B8 +ENCODING 10424 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +06 +06 +00 +06 +06 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28B9 +ENCODING 10425 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +06 +06 +00 +06 +06 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28BA +ENCODING 10426 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +66 +66 +00 +06 +06 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28BB +ENCODING 10427 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +66 +66 +00 +06 +06 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28BC +ENCODING 10428 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +06 +06 +00 +66 +66 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28BD +ENCODING 10429 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +06 +06 +00 +66 +66 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28BE +ENCODING 10430 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +66 +66 +00 +66 +66 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28BF +ENCODING 10431 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +66 +66 +00 +66 +66 +00 +06 +06 +00 +ENDCHAR +STARTCHAR uni28C0 +ENCODING 10432 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28C1 +ENCODING 10433 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +00 +00 +00 +00 +00 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28C2 +ENCODING 10434 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +60 +60 +00 +00 +00 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28C3 +ENCODING 10435 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +60 +60 +00 +00 +00 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28C4 +ENCODING 10436 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +60 +60 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28C5 +ENCODING 10437 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +00 +00 +00 +60 +60 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28C6 +ENCODING 10438 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +60 +60 +00 +60 +60 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28C7 +ENCODING 10439 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +60 +60 +00 +60 +60 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28C8 +ENCODING 10440 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +00 +00 +00 +00 +00 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28C9 +ENCODING 10441 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +00 +00 +00 +00 +00 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28CA +ENCODING 10442 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +60 +60 +00 +00 +00 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28CB +ENCODING 10443 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +60 +60 +00 +00 +00 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28CC +ENCODING 10444 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +00 +00 +00 +60 +60 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28CD +ENCODING 10445 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +00 +00 +00 +60 +60 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28CE +ENCODING 10446 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +60 +60 +00 +60 +60 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28CF +ENCODING 10447 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +60 +60 +00 +60 +60 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28D0 +ENCODING 10448 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +06 +06 +00 +00 +00 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28D1 +ENCODING 10449 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +06 +06 +00 +00 +00 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28D2 +ENCODING 10450 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +66 +66 +00 +00 +00 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28D3 +ENCODING 10451 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +66 +66 +00 +00 +00 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28D4 +ENCODING 10452 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +06 +06 +00 +60 +60 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28D5 +ENCODING 10453 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +06 +06 +00 +60 +60 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28D6 +ENCODING 10454 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +66 +66 +00 +60 +60 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28D7 +ENCODING 10455 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +66 +66 +00 +60 +60 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28D8 +ENCODING 10456 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +06 +06 +00 +00 +00 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28D9 +ENCODING 10457 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +06 +06 +00 +00 +00 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28DA +ENCODING 10458 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +66 +66 +00 +00 +00 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28DB +ENCODING 10459 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +66 +66 +00 +00 +00 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28DC +ENCODING 10460 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +06 +06 +00 +60 +60 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28DD +ENCODING 10461 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +06 +06 +00 +60 +60 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28DE +ENCODING 10462 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +66 +66 +00 +60 +60 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28DF +ENCODING 10463 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +66 +66 +00 +60 +60 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28E0 +ENCODING 10464 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +06 +06 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28E1 +ENCODING 10465 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +00 +00 +00 +06 +06 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28E2 +ENCODING 10466 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +60 +60 +00 +06 +06 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28E3 +ENCODING 10467 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +60 +60 +00 +06 +06 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28E4 +ENCODING 10468 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +66 +66 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28E5 +ENCODING 10469 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +00 +00 +00 +66 +66 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28E6 +ENCODING 10470 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +60 +60 +00 +66 +66 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28E7 +ENCODING 10471 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +60 +60 +00 +66 +66 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28E8 +ENCODING 10472 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +00 +00 +00 +06 +06 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28E9 +ENCODING 10473 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +00 +00 +00 +06 +06 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28EA +ENCODING 10474 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +60 +60 +00 +06 +06 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28EB +ENCODING 10475 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +60 +60 +00 +06 +06 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28EC +ENCODING 10476 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +00 +00 +00 +66 +66 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28ED +ENCODING 10477 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +00 +00 +00 +66 +66 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28EE +ENCODING 10478 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +60 +60 +00 +66 +66 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28EF +ENCODING 10479 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +60 +60 +00 +66 +66 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28F0 +ENCODING 10480 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +06 +06 +00 +06 +06 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28F1 +ENCODING 10481 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +06 +06 +00 +06 +06 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28F2 +ENCODING 10482 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +66 +66 +00 +06 +06 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28F3 +ENCODING 10483 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +66 +66 +00 +06 +06 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28F4 +ENCODING 10484 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +06 +06 +00 +66 +66 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28F5 +ENCODING 10485 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +06 +06 +00 +66 +66 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28F6 +ENCODING 10486 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +66 +66 +00 +66 +66 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28F7 +ENCODING 10487 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +60 +60 +00 +66 +66 +00 +66 +66 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28F8 +ENCODING 10488 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +06 +06 +00 +06 +06 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28F9 +ENCODING 10489 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +06 +06 +00 +06 +06 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28FA +ENCODING 10490 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +66 +66 +00 +06 +06 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28FB +ENCODING 10491 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +66 +66 +00 +06 +06 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28FC +ENCODING 10492 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +06 +06 +00 +66 +66 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28FD +ENCODING 10493 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +06 +06 +00 +66 +66 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28FE +ENCODING 10494 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +06 +06 +00 +66 +66 +00 +66 +66 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni28FF +ENCODING 10495 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +66 +66 +00 +66 +66 +00 +66 +66 +00 +66 +66 +00 +ENDCHAR +STARTCHAR uni2A00 +ENCODING 10752 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +38 +44 +82 +82 +92 +BA +92 +82 +82 +44 +38 +00 +ENDCHAR +STARTCHAR uni2A01 +ENCODING 10753 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +38 +54 +92 +92 +92 +FE +92 +92 +92 +54 +38 +00 +ENDCHAR +STARTCHAR uni2A02 +ENCODING 10754 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +38 +44 +AA +AA +92 +92 +92 +AA +AA +44 +38 +00 +ENDCHAR +STARTCHAR uni2A03 +ENCODING 10755 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +82 +82 +82 +82 +92 +BA +92 +82 +82 +44 +38 +00 +ENDCHAR +STARTCHAR uni2A04 +ENCODING 10756 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +82 +82 +92 +92 +92 +FE +92 +92 +92 +44 +38 +00 +ENDCHAR +STARTCHAR uni2A05 +ENCODING 10757 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +FE +82 +82 +82 +82 +82 +82 +82 +82 +82 +82 +00 +ENDCHAR +STARTCHAR uni2A06 +ENCODING 10758 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +82 +82 +82 +82 +82 +82 +82 +82 +82 +82 +FE +00 +ENDCHAR +STARTCHAR uni2A07 +ENCODING 10759 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +28 +28 +28 +54 +54 +54 +54 +AA +AA +AA +AA +00 +ENDCHAR +STARTCHAR uni2A08 +ENCODING 10760 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +AA +AA +AA +AA +54 +54 +54 +54 +28 +28 +28 +00 +ENDCHAR +STARTCHAR uni2A09 +ENCODING 10761 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +82 +44 +44 +28 +28 +10 +28 +28 +44 +44 +82 +00 +ENDCHAR +STARTCHAR uni2A1D +ENCODING 10781 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +44 +6C +6C +54 +54 +54 +6C +6C +44 +00 +00 +ENDCHAR +STARTCHAR uni2A3F +ENCODING 10815 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +76 +24 +24 +24 +24 +24 +7E +00 +00 +ENDCHAR +STARTCHAR uni303F +ENCODING 12351 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +FE +C6 +AA +AA +92 +AA +AA +C6 +FE +00 +00 +ENDCHAR +STARTCHAR ff +ENCODING 64256 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +5A +48 +48 +FC +48 +48 +48 +48 +00 +00 +ENDCHAR +STARTCHAR fi +ENCODING 64257 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +24 +20 +24 +7C +24 +24 +24 +24 +00 +00 +ENDCHAR +STARTCHAR fl +ENCODING 64258 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +1A +26 +22 +22 +7E +22 +22 +22 +22 +00 +00 +ENDCHAR +STARTCHAR ffi +ENCODING 64259 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +34 +4A +48 +48 +FF +49 +49 +49 +49 +00 +00 +ENDCHAR +STARTCHAR ffl +ENCODING 64260 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +36 +49 +49 +49 +FF +49 +49 +49 +49 +00 +00 +ENDCHAR +STARTCHAR uniFB05 +ENCODING 64261 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +48 +48 +48 +DE +48 +48 +4A +44 +00 +00 +ENDCHAR +STARTCHAR uniFB06 +ENCODING 64262 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +28 +28 +6E +88 +48 +28 +2A +C4 +00 +00 +ENDCHAR +STARTCHAR uniFB13 +ENCODING 64275 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +28 +20 +BA +AA +AA +AA +AA +66 +00 +00 +ENDCHAR +STARTCHAR uniFB14 +ENCODING 64276 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +28 +28 +AE +A8 +AA +AA +AA +66 +00 +00 +ENDCHAR +STARTCHAR uniFB15 +ENCODING 64277 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +18 +28 +28 +AC +AA +AA +AA +AA +6A +08 +08 +ENDCHAR +STARTCHAR uniFB16 +ENCODING 64278 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +A0 +60 +20 +BA +AA +AA +AA +AA +66 +20 +30 +ENDCHAR +STARTCHAR uniFB17 +ENCODING 64279 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +50 +50 +DA +D6 +D6 +D6 +D6 +D6 +10 +10 +ENDCHAR +STARTCHAR uniFB1D +ENCODING 64285 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +18 +08 +08 +08 +00 +08 +00 +00 +00 +ENDCHAR +STARTCHAR uniFB1E +ENCODING 64286 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +48 +48 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR afii57705 +ENCODING 64287 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +6C +24 +24 +00 +7C +00 +00 +00 +ENDCHAR +STARTCHAR uniFB20 +ENCODING 64288 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +46 +22 +22 +12 +14 +78 +00 +00 +ENDCHAR +STARTCHAR uniFB21 +ENCODING 64289 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +22 +3C +44 +42 +62 +00 +00 +ENDCHAR +STARTCHAR uniFB22 +ENCODING 64290 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +04 +04 +04 +04 +04 +00 +00 +ENDCHAR +STARTCHAR uniFB23 +ENCODING 64291 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +02 +02 +42 +42 +42 +00 +00 +ENDCHAR +STARTCHAR uniFB24 +ENCODING 64292 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +02 +02 +02 +02 +7C +00 +00 +ENDCHAR +STARTCHAR uniFB25 +ENCODING 64293 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +7E +02 +02 +02 +04 +38 +00 +00 +ENDCHAR +STARTCHAR uniFB26 +ENCODING 64294 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +22 +22 +22 +22 +22 +3E +00 +00 +ENDCHAR +STARTCHAR uniFB27 +ENCODING 64295 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +02 +02 +02 +02 +02 +02 +00 +00 +ENDCHAR +STARTCHAR uniFB28 +ENCODING 64296 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +7E +22 +22 +22 +22 +22 +62 +00 +00 +ENDCHAR +STARTCHAR uniFB29 +ENCODING 64297 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR afii57694 +ENCODING 64298 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +04 +00 +92 +92 +92 +E2 +84 +F8 +00 +00 +ENDCHAR +STARTCHAR afii57695 +ENCODING 64299 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +20 +00 +92 +92 +92 +E2 +84 +F8 +00 +00 +ENDCHAR +STARTCHAR uniFB2C +ENCODING 64300 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +04 +00 +92 +92 +A2 +D2 +84 +F8 +00 +00 +ENDCHAR +STARTCHAR uniFB2D +ENCODING 64301 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +40 +00 +92 +92 +A2 +D2 +84 +F8 +00 +00 +ENDCHAR +STARTCHAR uniFB2E +ENCODING 64302 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +44 +22 +3C +44 +42 +62 +00 +3C +00 +ENDCHAR +STARTCHAR uniFB2F +ENCODING 64303 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +44 +22 +3C +44 +42 +62 +00 +1C +08 +ENDCHAR +STARTCHAR uniFB30 +ENCODING 64304 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +44 +22 +3C +44 +42 +62 +08 +00 +ENDCHAR +STARTCHAR uniFB31 +ENCODING 64305 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7C +04 +24 +04 +04 +7E +00 +00 +ENDCHAR +STARTCHAR uniFB32 +ENCODING 64306 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +30 +08 +04 +24 +0C +12 +62 +00 +00 +ENDCHAR +STARTCHAR uniFB33 +ENCODING 64307 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +04 +04 +24 +04 +04 +00 +00 +ENDCHAR +STARTCHAR uniFB34 +ENCODING 64308 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +02 +02 +52 +42 +42 +00 +00 +ENDCHAR +STARTCHAR afii57723 +ENCODING 64309 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +0C +04 +04 +14 +04 +04 +00 +00 +ENDCHAR +STARTCHAR uniFB36 +ENCODING 64310 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +08 +08 +04 +24 +04 +00 +00 +ENDCHAR +STARTCHAR uniFB38 +ENCODING 64312 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +46 +42 +52 +42 +42 +7E +00 +00 +ENDCHAR +STARTCHAR uniFB39 +ENCODING 64313 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +0C +04 +24 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uniFB3A +ENCODING 64314 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +02 +02 +12 +02 +02 +02 +02 +ENDCHAR +STARTCHAR uniFB3B +ENCODING 64315 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +02 +12 +02 +02 +7C +00 +00 +ENDCHAR +STARTCHAR uniFB3C +ENCODING 64316 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +40 +7E +02 +12 +02 +04 +38 +00 +00 +ENDCHAR +STARTCHAR uniFB3E +ENCODING 64318 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +5C +22 +42 +4A +42 +5E +00 +00 +ENDCHAR +STARTCHAR uniFB40 +ENCODING 64320 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +0C +04 +24 +04 +04 +3C +00 +00 +ENDCHAR +STARTCHAR uniFB41 +ENCODING 64321 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +42 +52 +42 +44 +78 +00 +00 +ENDCHAR +STARTCHAR uniFB43 +ENCODING 64323 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3E +42 +42 +12 +02 +02 +02 +02 +ENDCHAR +STARTCHAR uniFB44 +ENCODING 64324 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3E +42 +52 +02 +02 +7C +00 +00 +ENDCHAR +STARTCHAR uniFB46 +ENCODING 64326 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +62 +12 +0C +44 +02 +7E +00 +00 +ENDCHAR +STARTCHAR uniFB47 +ENCODING 64327 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +02 +52 +42 +42 +5C +40 +40 +ENDCHAR +STARTCHAR uniFB48 +ENCODING 64328 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7C +02 +12 +02 +02 +02 +00 +00 +ENDCHAR +STARTCHAR uniFB49 +ENCODING 64329 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +92 +92 +A2 +D2 +82 +FC +00 +00 +ENDCHAR +STARTCHAR uniFB4A +ENCODING 64330 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7E +22 +2A +22 +22 +62 +00 +00 +ENDCHAR +STARTCHAR afii57700 +ENCODING 64331 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +10 +00 +18 +08 +08 +08 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uniFB4C +ENCODING 64332 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +38 +00 +7C +04 +04 +04 +04 +7E +00 +00 +ENDCHAR +STARTCHAR uniFB4D +ENCODING 64333 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3C +00 +7E +02 +02 +02 +02 +7C +00 +00 +ENDCHAR +STARTCHAR uniFB4E +ENCODING 64334 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +3C +00 +3E +42 +42 +02 +02 +7C +00 +00 +ENDCHAR +STARTCHAR uniFB4F +ENCODING 64335 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +40 +44 +22 +12 +2C +44 +42 +62 +00 +00 +ENDCHAR +STARTCHAR uniFE20 +ENCODING 65056 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +1F +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uniFE21 +ENCODING 65057 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +F8 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uniFE22 +ENCODING 65058 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +1F +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uniFE23 +ENCODING 65059 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +06 +F8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uniFF61 +ENCODING 65377 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +10 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uniFF62 +ENCODING 65378 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +30 +20 +20 +20 +20 +20 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uniFF63 +ENCODING 65379 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +10 +10 +10 +10 +10 +10 +30 +00 +00 +ENDCHAR +STARTCHAR uniFF64 +ENCODING 65380 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +30 +20 +10 +00 +00 +ENDCHAR +STARTCHAR uniFF65 +ENCODING 65381 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +10 +38 +10 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uniFF66 +ENCODING 65382 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +02 +02 +7C +04 +08 +10 +20 +40 +00 +00 +ENDCHAR +STARTCHAR uniFF67 +ENCODING 65383 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +7C +04 +28 +30 +20 +40 +00 +00 +ENDCHAR +STARTCHAR uniFF68 +ENCODING 65384 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +04 +18 +30 +50 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uniFF69 +ENCODING 65385 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +7C +44 +04 +08 +10 +00 +00 +ENDCHAR +STARTCHAR uniFF6A +ENCODING 65386 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +38 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR uniFF6B +ENCODING 65387 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +7C +30 +50 +10 +20 +00 +00 +ENDCHAR +STARTCHAR uniFF6C +ENCODING 65388 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +20 +7C +24 +28 +20 +10 +00 +00 +ENDCHAR +STARTCHAR uniFF6D +ENCODING 65389 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +78 +08 +08 +08 +08 +7C +00 +00 +ENDCHAR +STARTCHAR uniFF6E +ENCODING 65390 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +04 +3C +04 +04 +3C +00 +00 +ENDCHAR +STARTCHAR uniFF6F +ENCODING 65391 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +22 +92 +44 +08 +10 +20 +00 +00 +ENDCHAR +STARTCHAR uniFF70 +ENCODING 65392 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +7E +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uniFF71 +ENCODING 65393 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +7E +02 +02 +14 +18 +10 +10 +10 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uniFF72 +ENCODING 65394 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +04 +08 +18 +28 +48 +08 +08 +08 +00 +00 +ENDCHAR +STARTCHAR uniFF73 +ENCODING 65395 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +10 +7E +42 +42 +04 +04 +08 +10 +20 +00 +00 +ENDCHAR +STARTCHAR uniFF74 +ENCODING 65396 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +10 +10 +10 +10 +10 +10 +10 +7C +00 +00 +ENDCHAR +STARTCHAR uniFF75 +ENCODING 65397 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +08 +7E +18 +28 +48 +08 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uniFF76 +ENCODING 65398 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +20 +7E +22 +22 +22 +42 +42 +84 +00 +00 +ENDCHAR +STARTCHAR uniFF77 +ENCODING 65399 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +1C +70 +10 +1E +F0 +10 +10 +10 +00 +00 +ENDCHAR +STARTCHAR uniFF78 +ENCODING 65400 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +10 +1E +22 +42 +04 +04 +08 +10 +20 +00 +00 +ENDCHAR +STARTCHAR uniFF79 +ENCODING 65401 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +20 +20 +3E +48 +88 +08 +08 +10 +10 +20 +00 +00 +ENDCHAR +STARTCHAR uniFF7A +ENCODING 65402 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +04 +04 +04 +04 +04 +04 +04 +7C +00 +00 +ENDCHAR +STARTCHAR uniFF7B +ENCODING 65403 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +24 +24 +7E +24 +24 +08 +08 +10 +20 +00 +00 +ENDCHAR +STARTCHAR uniFF7C +ENCODING 65404 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +22 +12 +42 +24 +04 +08 +10 +20 +40 +00 +00 +ENDCHAR +STARTCHAR uniFF7D +ENCODING 65405 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +02 +02 +04 +04 +08 +14 +22 +42 +00 +00 +ENDCHAR +STARTCHAR uniFF7E +ENCODING 65406 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +20 +7C +24 +28 +20 +20 +28 +10 +00 +00 +ENDCHAR +STARTCHAR uniFF7F +ENCODING 65407 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +22 +04 +04 +08 +10 +20 +40 +00 +00 +ENDCHAR +STARTCHAR uniFF80 +ENCODING 65408 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +10 +10 +1E +22 +52 +0C +04 +08 +10 +20 +00 +00 +ENDCHAR +STARTCHAR uniFF81 +ENCODING 65409 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +10 +10 +7C +10 +10 +20 +20 +40 +00 +00 +ENDCHAR +STARTCHAR uniFF82 +ENCODING 65410 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +12 +52 +42 +04 +04 +08 +10 +20 +40 +00 +00 +ENDCHAR +STARTCHAR uniFF83 +ENCODING 65411 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +00 +7C +10 +10 +10 +10 +20 +40 +00 +00 +ENDCHAR +STARTCHAR uniFF84 +ENCODING 65412 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +20 +20 +20 +30 +28 +24 +20 +20 +20 +00 +00 +ENDCHAR +STARTCHAR uniFF85 +ENCODING 65413 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +7C +10 +10 +10 +10 +20 +40 +00 +00 +ENDCHAR +STARTCHAR uniFF86 +ENCODING 65414 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +3C +00 +00 +00 +7E +00 +00 +00 +ENDCHAR +STARTCHAR uniFF87 +ENCODING 65415 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +02 +02 +24 +14 +08 +14 +22 +42 +00 +00 +ENDCHAR +STARTCHAR uniFF88 +ENCODING 65416 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +02 +02 +04 +08 +14 +6A +08 +08 +00 +00 +ENDCHAR +STARTCHAR uniFF89 +ENCODING 65417 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +02 +02 +04 +04 +08 +10 +20 +40 +00 +00 +ENDCHAR +STARTCHAR uniFF8A +ENCODING 65418 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +28 +28 +24 +24 +22 +42 +42 +42 +82 +00 +00 +ENDCHAR +STARTCHAR uniFF8B +ENCODING 65419 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +40 +44 +48 +50 +60 +44 +48 +50 +60 +00 +00 +ENDCHAR +STARTCHAR uniFF8C +ENCODING 65420 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +02 +02 +04 +04 +08 +10 +20 +40 +00 +00 +ENDCHAR +STARTCHAR uniFF8D +ENCODING 65421 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +00 +00 +00 +10 +28 +24 +44 +42 +82 +00 +00 +ENDCHAR +STARTCHAR uniFF8E +ENCODING 65422 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +7C +10 +54 +54 +92 +10 +20 +00 +00 +ENDCHAR +STARTCHAR uniFF8F +ENCODING 65423 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +02 +02 +24 +14 +08 +04 +02 +02 +00 +00 +ENDCHAR +STARTCHAR uniFF90 +ENCODING 65424 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +60 +18 +04 +60 +18 +04 +60 +18 +06 +00 +00 +ENDCHAR +STARTCHAR uniFF91 +ENCODING 65425 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +04 +08 +10 +24 +24 +42 +7E +42 +00 +00 +ENDCHAR +STARTCHAR uniFF92 +ENCODING 65426 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +02 +02 +42 +24 +14 +08 +14 +22 +42 +00 +00 +ENDCHAR +STARTCHAR uniFF93 +ENCODING 65427 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +38 +10 +10 +7C +10 +10 +10 +12 +0C +00 +00 +ENDCHAR +STARTCHAR uniFF94 +ENCODING 65428 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +10 +7E +12 +14 +10 +10 +08 +04 +00 +00 +ENDCHAR +STARTCHAR uniFF95 +ENCODING 65429 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +78 +08 +08 +08 +08 +08 +08 +08 +7E +00 +00 +ENDCHAR +STARTCHAR uniFF96 +ENCODING 65430 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +02 +02 +02 +7E +02 +02 +02 +7E +02 +00 +ENDCHAR +STARTCHAR uniFF97 +ENCODING 65431 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +00 +7C +04 +08 +08 +10 +20 +40 +00 +00 +ENDCHAR +STARTCHAR uniFF98 +ENCODING 65432 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +42 +42 +44 +04 +08 +10 +20 +40 +00 +00 +ENDCHAR +STARTCHAR uniFF99 +ENCODING 65433 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +50 +50 +50 +50 +52 +52 +54 +58 +90 +00 +00 +ENDCHAR +STARTCHAR uniFF9A +ENCODING 65434 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +40 +40 +40 +40 +40 +44 +44 +48 +50 +60 +00 +00 +ENDCHAR +STARTCHAR uniFF9B +ENCODING 65435 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +42 +42 +42 +42 +42 +42 +7E +42 +00 +00 +ENDCHAR +STARTCHAR uniFF9C +ENCODING 65436 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7E +42 +42 +04 +04 +08 +10 +20 +40 +00 +00 +ENDCHAR +STARTCHAR uniFF9D +ENCODING 65437 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +42 +32 +02 +04 +04 +08 +10 +60 +40 +00 +00 +ENDCHAR +STARTCHAR uniFF9E +ENCODING 65438 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +08 +0C +30 +10 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uniFF9F +ENCODING 65439 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +10 +28 +10 +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR uniFFFD +ENCODING 65533 +SWIDTH 568 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +00 +00 +7C +C6 +BA +F6 +EE +EE +FE +EE +7C +00 +00 +ENDCHAR +ENDFONT diff --git a/crates/pi-natives/src/lib.rs b/crates/pi-natives/src/lib.rs index 993c36dfc..e0ee827da 100644 --- a/crates/pi-natives/src/lib.rs +++ b/crates/pi-natives/src/lib.rs @@ -53,8 +53,109 @@ pub mod tokens; pub(crate) mod utils; pub mod workspace; +#[cfg(target_os = "windows")] +use std::sync::{ + Arc, + atomic::{AtomicBool, Ordering}, +}; + +#[cfg(target_os = "windows")] +use napi::bindgen_prelude::create_custom_tokio_runtime; use napi_derive::{module_init, napi}; +/// Upper bound on Windows Tokio *scheduler* workers. These only drive async I/O +/// futures (shell/process/PTY/ISO) and light glue tasks; all CPU-heavy and +/// blocking native work runs elsewhere — libuv tasks (`task::blocking`), Rayon, +/// or Tokio's separate blocking pool via `spawn_blocking` — so a handful of +/// async workers is plenty regardless of core count. +#[cfg(target_os = "windows")] +const NAPI_TOKIO_MAX_WORKER_THREADS: usize = 4; +/// Cap on Tokio's lazily-grown blocking pool (used by `spawn_blocking` offloads +/// such as `iso_start`/`iso_stop`/`pty.start`/`walk_diff`). Threads here are +/// created on demand, not at load, so this only bounds peak fan-out. +#[cfg(target_os = "windows")] +const NAPI_TOKIO_MAX_BLOCKING_THREADS: usize = 8; + +/// Windows worker count we'd *like*, before checking what the OS will actually +/// grant: the Tokio default (one per core) clamped to +/// [`NAPI_TOKIO_MAX_WORKER_THREADS`]. +#[cfg(target_os = "windows")] +fn desired_worker_threads() -> usize { + std::thread::available_parallelism() + .map_or(1, |threads| threads.get()) + .clamp(1, NAPI_TOKIO_MAX_WORKER_THREADS) +} + +/// Probe how many worker threads Windows will let us hold alive +/// *simultaneously*, up to `target`. Returns the count actually spawned (0 when +/// not even one extra thread is possible). +/// +/// `Builder::build()` for a multi-thread runtime spawns every worker eagerly +/// and **panics** (not `Err`) when Windows refuses one — on a +/// memory-constrained host (tiny pagefile / commit limit, `os error 1455`) that +/// aborts the whole process at addon load before any JS error can surface. The +/// release profile is `panic = "abort"`, so the panic can't even be caught. We +/// instead pre-flight with `std::thread::Builder::spawn`, which returns an +/// `io::Result`, holding each probe thread alive (so their stacks are committed +/// concurrently, matching how real workers coexist) until we know the safe +/// count. Probe threads use the std default stack, exactly like Tokio's workers +/// (it leaves `thread_stack_size` unset), so the probe is representative. +/// +/// Keep this Windows-only. On Linux, spawning probe threads from `module_init` +/// can deadlock while Bun is loading the `.node`; napi-rs's default runtime +/// loads cleanly there and avoids any custom loader-time thread probe. +#[cfg(target_os = "windows")] +fn probe_spawnable_workers(target: usize) -> usize { + let keep_running = Arc::new(AtomicBool::new(true)); + let mut handles = Vec::with_capacity(target); + for _ in 0..target { + let keep = Arc::clone(&keep_running); + match std::thread::Builder::new().spawn(move || { + while keep.load(Ordering::Relaxed) { + std::thread::park_timeout(std::time::Duration::from_millis(1)); + } + }) { + Ok(handle) => handles.push(handle), + Err(_) => break, + } + } + let spawned = handles.len(); + keep_running.store(false, Ordering::Relaxed); + for handle in handles { + handle.thread().unpark(); + let _ = handle.join(); + } + spawned +} + +/// Build the custom Tokio runtime napi-rs uses on Windows, sized to what the +/// host can actually spawn. Never panics: backs off from +/// [`desired_worker_threads`] to whatever the probe allows, and falls back to a +/// current-thread runtime (which spawns no workers at build time, so it can't +/// abort under commit-limit pressure) when not even one worker is available. +/// Returns `None` only if even that fails, in which case we leave napi-rs to +/// construct its own default. +#[cfg(target_os = "windows")] +fn create_windows_napi_tokio_runtime() -> Option { + let workers = probe_spawnable_workers(desired_worker_threads()); + let multi_thread = (workers > 0) + .then(|| { + tokio::runtime::Builder::new_multi_thread() + .worker_threads(workers) + .max_blocking_threads(NAPI_TOKIO_MAX_BLOCKING_THREADS) + .enable_all() + .build() + .ok() + }) + .flatten(); + multi_thread.or_else(|| { + tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .ok() + }) +} + /// Version sentinel — exists solely so the JS loader can prove at load time /// that the `.node` file on disk is from the same package release as the /// `index.js` ESM wrapper invoking it. @@ -71,12 +172,54 @@ use napi_derive::{module_init, napi}; /// MUST stay in sync with `VERSION_SENTINEL_EXPORT` in /// `packages/natives/native/index.js` (which derives the name from /// `package.json#version`). -#[napi(js_name = "__piNativesV15_11_2")] +#[napi(js_name = "__piNativesV15_12_6")] pub const fn pi_natives_version_sentinel() {} /// Native module entry point: install crash diagnostics before any tool can -/// invoke a panicking or allocating native call. Runs once at `.node` load. +/// invoke a panicking or allocating native call. This runs during `.node` +/// load, while the dynamic-loader lock is held, so it MUST NOT spawn threads — +/// the Tokio runtime is installed afterwards on Windows by +/// [`omp_install_tokio_runtime`], which the JS loader calls once `dlopen` has +/// returned. +/// +/// On Windows, the custom Tokio runtime is host-sized to prevent aborts under +/// memory limits (see [`create_windows_napi_tokio_runtime`]). Non-Windows +/// builds intentionally use napi-rs's default path. Linux source builds can +/// deadlock if this module initializer or post-load setup performs its own +/// thread probe, so we keep the probe and custom runtime Windows-only. #[module_init] fn install_native_crash_handler() { crash_handler::install(); } + +/// Guards [`omp_install_tokio_runtime`] so the runtime is built at most once +/// per process even if the loader invokes it more than once. +#[cfg(target_os = "windows")] +static TOKIO_RUNTIME_INSTALLED: AtomicBool = AtomicBool::new(false); + +/// Install the bounded Tokio runtime napi-rs adopts for async exports. +/// +/// The JS loader calls this exactly once, synchronously, right *after* `dlopen` +/// returns and *before* any async native runs — never from `#[module_init]`. +/// Building a multi-thread runtime eagerly spawns worker threads, and doing +/// that during module init (while the dynamic-loader lock is held) deadlocks on +/// some hosts: a fresh worker blocks acquiring the loader lock that the init +/// thread still owns. napi-rs only materializes its runtime on the first async +/// call (`RT` is a `LazyLock`) and `create_custom_tokio_runtime` merely records +/// the runtime in a `OnceLock`, so installing it post-load is still honored. +/// Without it napi builds its own default (one worker per CPU, spawned eagerly) +/// which aborts the process (`os error 1455`) on a memory-constrained Windows +/// host before any JS error can surface; [`create_windows_napi_tokio_runtime`] +/// pre-flights the spawn instead. If no runtime can be built we leave napi-rs +/// to its default. Idempotent. +#[napi(js_name = "__ompInstallTokioRuntime")] +pub const fn omp_install_tokio_runtime() { + #[cfg(target_os = "windows")] + if TOKIO_RUNTIME_INSTALLED.swap(true, Ordering::SeqCst) { + return; + } + #[cfg(target_os = "windows")] + if let Some(runtime) = create_windows_napi_tokio_runtime() { + create_custom_tokio_runtime(runtime); + } +} diff --git a/crates/pi-natives/src/snapcompact.rs b/crates/pi-natives/src/snapcompact.rs index 368223896..e7966f88f 100644 --- a/crates/pi-natives/src/snapcompact.rs +++ b/crates/pi-natives/src/snapcompact.rs @@ -1,11 +1,13 @@ //! Snapcompact frame rendering. //! -//! Rasterizes pre-normalized conversation text onto a square bitmap using one -//! of the bundled public-domain pixel fonts, then encodes it as PNG: +//! Rasterizes pre-normalized conversation text onto a `size`-wide bitmap +//! (height hugs the rows the text actually needs) using one of the bundled +//! public-domain pixel fonts, then encodes it as PNG: //! //! - `5x8` — X.org BDF font (legacy shape). //! - `8x8` — unscii-8 hex font (Latin-1 subset), the square cell that won the //! snapcompact `SQuAD` evals. +//! - `6x12` / `8x13` — X.org misc BDF fonts (higher-density eval winners). //! //! Shape controls, all eval-validated in `packages/snapcompact`: //! @@ -18,9 +20,19 @@ //! font's natural cell, glyphs are rasterized at native size and the canvas //! is Lanczos3-resampled to the target (anisotropic stretch, e.g. the //! OpenAI-optimal "6x6u" shape), producing an anti-aliased RGB frame. +//! - **stretch** — `false` disables resampling: glyphs print at natural size on +//! the requested cell box while staying indexed (e.g. 8x13 glyphs on an 8x16 +//! pitch, the "8on16" shapes). `true`/unset keeps the auto rule above. +//! - **columns** — `2` flows pre-wrapped `\n`-separated lines down two +//! newspaper columns (the "doc" shapes); word wrap and pagination happen in +//! the TypeScript caller. //! - **dim spans** — `U+000E`/`U+000F` in the text toggle dim gray ink on/off //! without occupying a cell; the TypeScript serializer wraps tool output in //! them so archived conversation reads louder than archived tool noise. +//! - **line breaks** — `U+2588` (FULL BLOCK) fills its entire cell with pitch +//! black ink regardless of variant or dim state; the TypeScript normalizer +//! folds newline runs to it so line structure survives whitespace collapse at +//! a one-cell cost. //! //! Text normalization, frame chunking, provider shape selection, and archive //! management live in `packages/snapcompact/src/snapcompact.ts`; this module @@ -59,9 +71,17 @@ const INK_DIM: u8 = 9; /// Zero-width ink toggles embedded in the text stream (shift-out/shift-in). const DIM_ON: u32 = 0x0e; const DIM_OFF: u32 = 0x0f; +/// FULL BLOCK: fills its entire cell box with pitch-black ink (`INK_BLACK`, +/// ignoring sentence hue and dim state). The TypeScript normalizer folds +/// newline runs to it. +const FULL_BLOCK: u32 = 0x2588; static FONT_5X8: LazyLock = LazyLock::new(|| parse_bdf(include_str!("fonts/5x8.bdf"), 5, 8)); static FONT_8X8: LazyLock = LazyLock::new(|| parse_hex(include_str!("fonts/unscii-8.hex"))); +static FONT_6X12: LazyLock = + LazyLock::new(|| parse_bdf(include_str!("fonts/6x12.bdf"), 6, 12)); +static FONT_8X13: LazyLock = + LazyLock::new(|| parse_bdf(include_str!("fonts/8x13.bdf"), 8, 13)); struct Glyph { /// Glyph width in pixels (≤ 8 for the bundled fonts). @@ -150,25 +170,124 @@ fn resolve_font(name: &str) -> Option<&'static Font> { match name { "5x8" => Some(&FONT_5X8), "8x8" => Some(&FONT_8X8), + "6x12" => Some(&FONT_6X12), + "8x13" => Some(&FONT_8X13), _ => None, } } -/// Frame grid geometry shared with the TypeScript caller. +/// Frame grid geometry shared with the TypeScript caller. The cell box +/// (`cell_w` x `cell_h`) is the advance/pitch glyphs are laid out on; it may +/// differ from the font's natural cell (e.g. 8x13 glyphs on an 8x16 pitch). struct Grid { cols: usize, rows: usize, repeat: usize, + /// Cell advance (x) in pixels. + cell_w: usize, + /// Cell pitch (y) in pixels. + cell_h: usize, } -/// Rasterize `text` onto a `width` x `height` palette-indexed bitmap at the -/// font's natural cell size, row-major with no word wrap. Each text line is -/// printed `grid.repeat` times; copies after the first sit on the highlight -/// band. Ink cycles through six hues at sentence boundaries (terminator in -/// `.!?` followed by a space) unless `black_ink` pins it to black; `U+000E`/ -/// `U+000F` toggle dim gray ink without occupying a cell, and dim wins over -/// both variants. Characters beyond `cols * rows` are ignored; code points -/// missing from the font leave their cell blank. +/// Grid rows the text actually occupies, so the canvas height hugs the +/// content instead of padding the frame to a full square. Mirrors the +/// renderers' cell accounting: dim toggles are zero-width, every other code +/// point (including `U+2588` and glyphs missing from the font) consumes one +/// cell; doc layout fills one row per `\n`-separated line down the first +/// column before spilling into the second. +fn used_rows(text: &str, grid: &Grid, doc: bool) -> usize { + let rows = if doc { + text.split('\n').count() + } else { + let cells = text + .chars() + .filter(|&ch| !matches!(ch as u32, DIM_ON | DIM_OFF)) + .count(); + cells.div_ceil(grid.cols) + }; + rows.clamp(1, grid.rows) +} + +/// Paint the pale highlight bands behind line copies after the first. +fn fill_repeat_bands(pixels: &mut [u8], width: usize, height: usize, grid: &Grid) { + if grid.repeat <= 1 { + return; + } + for row in 0..grid.rows { + for copy in 1..grid.repeat { + let band_top = (row * grid.repeat + copy) * grid.cell_h; + for y in band_top..(band_top + grid.cell_h).min(height) { + pixels[y * width..y * width + width].fill(BG_REPEAT); + } + } + } +} + +/// Blit one glyph's bitmask rows at (`left`, `top`), clipped to the canvas. +fn blit_glyph( + pixels: &mut [u8], + width: usize, + height: usize, + glyph: &Glyph, + left: i32, + top: i32, + ink: u8, +) { + for (r, &bits) in glyph.rows.iter().enumerate() { + if bits == 0 { + continue; + } + let y = top + r as i32; + if y < 0 || y >= height as i32 { + continue; + } + let row_base = y as usize * width; + for b in 0..glyph.w { + if bits & (0x80u8 >> b) != 0 { + let x = left + i32::from(b); + if x >= 0 && (x as usize) < width { + pixels[row_base + x as usize] = ink; + } + } + } + } +} + +/// Fill one cell box (every repeat copy) with solid ink, clipped to canvas. +fn fill_cell( + pixels: &mut [u8], + width: usize, + height: usize, + grid: &Grid, + x_origin: usize, + row: usize, + ink: u8, +) { + let x0 = x_origin.min(width); + let x1 = (x_origin + grid.cell_w).min(width); + if x0 >= x1 { + return; + } + for copy in 0..grid.repeat { + let top = (row * grid.repeat + copy) * grid.cell_h; + for y in top..(top + grid.cell_h).min(height) { + pixels[y * width + x0..y * width + x1].fill(ink); + } + } +} + +/// Rasterize `text` onto a `width` x `height` palette-indexed bitmap on the +/// grid's cell box, row-major with no word wrap. Glyphs keep their natural +/// size with the baseline at the font's ascent from the cell top, so a cell +/// taller than the font pads below the baseline (the "8on16" shapes). Each +/// text line is printed `grid.repeat` times; copies after the first sit on +/// the highlight band. Ink cycles through six hues at sentence boundaries +/// (terminator in `.!?` followed by a space or full block) unless `black_ink` +/// pins it to black; `U+000E`/`U+000F` toggle dim gray ink without occupying a +/// cell, and dim wins over both variants. `U+2588` fills its whole cell with +/// pitch-black ink, ignoring hue and dim state. Characters beyond +/// `cols * rows` are ignored; code points missing from the font leave their +/// cell blank. fn render_bitmap( text: &str, width: usize, @@ -182,16 +301,7 @@ fn render_bitmap( if capacity == 0 { return pixels; } - if grid.repeat > 1 { - for row in 0..grid.rows { - for copy in 1..grid.repeat { - let band_top = (row * grid.repeat + copy) * font.cell_h; - for y in band_top..(band_top + font.cell_h).min(height) { - pixels[y * width..y * width + width].fill(BG_REPEAT); - } - } - } - } + fill_repeat_bands(&mut pixels, width, height, grid); let codes: Vec = text.chars().map(|ch| ch as u32).collect(); let mut sentence = 0usize; let mut dim = false; @@ -219,40 +329,125 @@ fn render_bitmap( } else { (1 + sentence % INK_COLORS) as u8 }; - if matches!(code, 0x2e | 0x21 | 0x3f) && codes.get(i + 1) == Some(&0x20) { + if matches!(code, 0x2e | 0x21 | 0x3f) + && matches!(codes.get(i + 1), Some(&(0x20 | FULL_BLOCK))) + { sentence += 1; } let row = cell / grid.cols; let col = cell - row * grid.cols; cell += 1; + if code == FULL_BLOCK { + fill_cell(&mut pixels, width, height, grid, col * grid.cell_w, row, INK_BLACK); + continue; + } let Some(glyph) = font.glyphs.get(&code) else { continue; }; if glyph.rows.is_empty() { continue; } - let left = (col * font.cell_w) as i32 + glyph.xoff; + let left = (col * grid.cell_w) as i32 + glyph.xoff; for copy in 0..grid.repeat { - let cell_top = ((row * grid.repeat + copy) * font.cell_h) as i32; + let cell_top = ((row * grid.repeat + copy) * grid.cell_h) as i32; let top = cell_top + font.ascent - glyph.h - glyph.yoff; - for (r, &bits) in glyph.rows.iter().enumerate() { - if bits == 0 { - continue; + blit_glyph(&mut pixels, width, height, glyph, left, top, ink); + } + } + pixels +} + +/// Character cells between the two doc columns (eval `exp14` layout). +const GUTTER: usize = 3; + +/// Rasterize pre-wrapped text as a two-column "doc" page onto a `width` x +/// `height` palette-indexed bitmap. Input splits on `'\n'` (zero-width): line +/// `li` lands at column `li / rows`, row `li % rows`; each column is +/// `(cols - GUTTER) / 2` cells wide, the second starts `col_w + GUTTER` cells +/// in, and no rule is drawn between them. Lines longer than the column width +/// are clipped (the TypeScript caller pre-wraps; clipping is the overflow +/// guard) and lines past the second column are ignored. Sentence hues advance +/// on a terminator in `.!?` followed by a space, newline, *or* full block; +/// dim toggles, repeat bands, and the `U+2588` black cell fill behave exactly +/// as in the grid renderer. +fn render_doc_bitmap( + text: &str, + width: usize, + height: usize, + font: &Font, + grid: &Grid, + black_ink: bool, +) -> Vec { + let mut pixels = vec![0u8; width * height]; // 0 = white background + let col_w = grid.cols.saturating_sub(GUTTER) / 2; + if col_w == 0 || grid.rows == 0 { + return pixels; + } + fill_repeat_bands(&mut pixels, width, height, grid); + let codes: Vec = text.chars().map(|ch| ch as u32).collect(); + let mut sentence = 0usize; + let mut dim = false; + let mut line = 0usize; + let mut col = 0usize; + for i in 0..codes.len() { + let code = codes[i]; + match code { + DIM_ON => { + dim = true; + continue; + }, + DIM_OFF => { + dim = false; + continue; + }, + 0x0a => { + line += 1; + col = 0; + if line >= grid.rows * 2 { + break; // past the second column; the caller paginates } - let y = top + r as i32; - if y < 0 || y >= height as i32 { - continue; - } - let row_base = y as usize * width; - for b in 0..glyph.w { - if bits & (0x80u8 >> b) != 0 { - let x = left + i32::from(b); - if x >= 0 && (x as usize) < width { - pixels[row_base + x as usize] = ink; - } - } - } - } + continue; + }, + _ => {}, + } + let ink = if dim { + INK_DIM + } else if black_ink { + INK_BLACK + } else { + (1 + sentence % INK_COLORS) as u8 + }; + if matches!(code, 0x2e | 0x21 | 0x3f) + && matches!(codes.get(i + 1), Some(&(0x20 | 0x0a | FULL_BLOCK))) + { + sentence += 1; + } + let cell = col; + col += 1; + if cell >= col_w { + continue; // clip past the column width + } + if code == FULL_BLOCK { + let column = line / grid.rows; + let row = line - column * grid.rows; + let x_origin = (column * (col_w + GUTTER) + cell) * grid.cell_w; + fill_cell(&mut pixels, width, height, grid, x_origin, row, INK_BLACK); + continue; + } + let Some(glyph) = font.glyphs.get(&code) else { + continue; + }; + if glyph.rows.is_empty() { + continue; + } + let column = line / grid.rows; + let row = line - column * grid.rows; + let x_origin = column * (col_w + GUTTER) * grid.cell_w; + let left = (x_origin + cell * grid.cell_w) as i32 + glyph.xoff; + for copy in 0..grid.repeat { + let cell_top = ((row * grid.repeat + copy) * grid.cell_h) as i32; + let top = cell_top + font.ascent - glyph.h - glyph.yoff; + blit_glyph(&mut pixels, width, height, glyph, left, top, ink); } } pixels @@ -339,48 +534,76 @@ fn resize_rgb(src: &[f32], sw: usize, sh: usize, dw: usize, dh: usize) -> Vec Vec { - let row_bytes = size.div_ceil(2); - let mut packed = vec![0u8; row_bytes * size]; - for y in 0..size { - let src = &pixels[y * size..(y + 1) * size]; +/// Pack one-byte-per-pixel palette indices into `bits`-per-pixel PNG +/// scanline data (big-endian within each byte), remapping each global +/// palette index through `remap` to its per-frame slot on the way. +fn pack_bits( + pixels: &[u8], + width: usize, + height: usize, + bits: usize, + remap: &[u8; PALETTE.len()], +) -> Vec { + let per = 8 / bits; + let row_bytes = width.div_ceil(per); + let mut packed = vec![0u8; row_bytes * height]; + for y in 0..height { + let src = &pixels[y * width..(y + 1) * width]; let dst = &mut packed[y * row_bytes..(y + 1) * row_bytes]; for (x, &px) in src.iter().enumerate() { - dst[x / 2] |= px << (4 * (1 - x % 2)); + dst[x / per] |= remap[px as usize] << (bits * (per - 1 - x % per)); } } packed } -/// Encode a palette-indexed bitmap as a 4-bit indexed PNG with `None` row +/// Encode a palette-indexed bitmap as an indexed PNG with `None` row /// filtering (the glyph bitmap is already minimal-entropy; filtering costs /// encode time without helping deflate). +/// +/// The palette is narrowed to the colors the frame actually uses and the bit +/// depth follows: a plain `bw` frame (background + ink) packs 1-bit rows, a +/// dim/banded frame 2-bit, sentence-hue frames 4-bit — bw frames shed +/// another ~half of the pre-deflate stream vs the fixed 4-bit layout. fn encode_indexed_png( pixels: &[u8], - size: usize, + width: usize, + height: usize, compression: png::Compression, ) -> Result> { - let mut palette = Vec::with_capacity(PALETTE.len() * 3); - for rgb in PALETTE { - palette.extend_from_slice(&rgb); + let mut used = [false; PALETTE.len()]; + for &px in pixels { + used[px as usize] = true; } + let mut remap = [0u8; PALETTE.len()]; + let mut palette = Vec::with_capacity(PALETTE.len() * 3); + let mut count = 0u8; + for (global, &is_used) in used.iter().enumerate() { + if is_used { + remap[global] = count; + count += 1; + palette.extend_from_slice(&PALETTE[global]); + } + } + let (depth, bits) = match count { + 0..=2 => (png::BitDepth::One, 1), + 3..=4 => (png::BitDepth::Two, 2), + _ => (png::BitDepth::Four, 4), + }; let mut out = Vec::new(); - let mut encoder = png::Encoder::new(&mut out, size as u32, size as u32); + let mut encoder = png::Encoder::new(&mut out, width as u32, height as u32); encoder.set_color(png::ColorType::Indexed); - encoder.set_depth(png::BitDepth::Four); + encoder.set_depth(depth); encoder.set_palette(Cow::Owned(palette)); encoder.set_compression(compression); // MUST come after `set_compression`, which resets the filter to the - // compression level's default (`Adaptive` for `Balanced`). + // compression level's default (`Adaptive` for `Balanced`/`High`). encoder.set_filter(png::Filter::NoFilter); let mut writer = encoder .write_header() .map_err(|err| Error::from_reason(format!("Failed to write PNG header: {err}")))?; writer - .write_image_data(&pack_nibbles(pixels, size)) + .write_image_data(&pack_bits(pixels, width, height, bits, &remap)) .map_err(|err| Error::from_reason(format!("Failed to write PNG data: {err}")))?; writer .finish() @@ -390,9 +613,14 @@ fn encode_indexed_png( /// Encode an interleaved RGB8 buffer as PNG. Stretched frames are /// continuous-tone, so adaptive filtering (the `Balanced` default) helps. -fn encode_rgb_png(pixels: &[u8], size: usize, compression: png::Compression) -> Result> { +fn encode_rgb_png( + pixels: &[u8], + width: usize, + height: usize, + compression: png::Compression, +) -> Result> { let mut out = Vec::new(); - let mut encoder = png::Encoder::new(&mut out, size as u32, size as u32); + let mut encoder = png::Encoder::new(&mut out, width as u32, height as u32); encoder.set_color(png::ColorType::Rgb); encoder.set_depth(png::BitDepth::Eight); encoder.set_compression(compression); @@ -416,9 +644,12 @@ fn encode_rgb_png(pixels: &[u8], size: usize, compression: png::Compression) -> #[napi(object)] #[derive(Default)] pub struct SnapcompactRenderOptions { - /// Frame edge in pixels. + /// Frame width in pixels; also bounds the grid rows + /// (`floor(size/cellHeight/lineRepeat)`). Output height hugs the rows the + /// text actually uses instead of padding to a square. pub size: u32, - /// Bundled font: `"5x8"` (X.org BDF) or `"8x8"` (unscii-8). Default `"5x8"`. + /// Bundled font: `"5x8"`, `"6x12"`, `"8x13"` (X.org BDF) or `"8x8"` + /// (unscii-8). Default `"5x8"`. pub font: Option, /// Target cell advance in pixels. Differing from the font's natural cell /// triggers the Lanczos stretch path. Default: font natural width. @@ -431,17 +662,30 @@ pub struct SnapcompactRenderOptions { /// Print each text line this many times; copies after the first sit on a /// pale highlight band. Default 1. pub line_repeat: Option, + /// Stretch behavior. Unset: auto — Lanczos-stretch whenever the target + /// cell differs from the font's natural cell. `false`: never stretch — + /// render indexed with glyphs at natural size on the requested cell box + /// (e.g. 8x13 glyphs on an 8x16 pitch, the "8on16" shapes). `true`: force + /// the stretch path (identical to auto; natural cells render indexed). + pub stretch: Option, + /// Layout columns: `1` (default) row-major grid; `2` two newspaper "doc" + /// columns of pre-wrapped newline-separated lines. + pub columns: Option, } -/// Render one snapcompact frame: print pre-normalized text onto a square -/// bitmap and encode it as PNG. +/// Render one snapcompact frame: print pre-normalized text onto a +/// `size`-wide bitmap and encode it as PNG. /// -/// The glyph grid holds `floor(size/cellWidth) * +/// The bitmap height hugs the rows the text actually occupies +/// (`usedRows * lineRepeat * cellHeight`), so a partially filled frame never +/// pays for blank padding rows. The glyph grid holds `floor(size/cellWidth) * /// floor(size/cellHeight/lineRepeat)` characters; input beyond that is ignored /// (the caller chunks text to capacity). Native-cell shapes encode as 4-bit /// indexed PNG; stretched shapes (target cell != font cell) encode as RGB. -/// `U+000E`/`U+000F` in `text` toggle dim-gray ink spans without occupying a -/// cell. +/// `stretch: false` pins the indexed path, printing natural-size glyphs on the +/// requested cell box; `columns: 2` flows pre-wrapped newline-separated lines +/// down two newspaper columns. `U+000E`/`U+000F` in `text` toggle dim-gray ink +/// spans without occupying a cell. /// Returns the PNG encoded as base64, created as a one-byte (Latin-1) JS /// string straight from native code — no `Uint8Array` hop or JS-side /// re-encode. @@ -459,7 +703,7 @@ pub fn render_snapcompact_png( let font_name = options.font.as_deref().unwrap_or("5x8"); let font = resolve_font(font_name).ok_or_else(|| { Error::from_reason(format!( - "Unknown snapcompact font {font_name:?}: expected \"5x8\" or \"8x8\"" + "Unknown snapcompact font {font_name:?}: expected \"5x8\", \"8x8\", \"6x12\", or \"8x13\"" )) })?; let black_ink = match options.variant.as_deref().unwrap_or("sent") { @@ -474,29 +718,60 @@ pub fn render_snapcompact_png( let target_w = options.cell_width.unwrap_or(font.cell_w as u32).max(1) as usize; let target_h = options.cell_height.unwrap_or(font.cell_h as u32).max(1) as usize; let repeat = options.line_repeat.unwrap_or(1).max(1) as usize; + let columns = options.columns.unwrap_or(1); + if !matches!(columns, 1 | 2) { + return Err(Error::from_reason(format!( + "Invalid snapcompact columns {columns}: expected 1 or 2" + ))); + } + let doc = columns == 2; let size = size as usize; - let grid = Grid { cols: size / target_w, rows: size / target_h / repeat, repeat }; + let grid = Grid { + cols: size / target_w, + rows: size / target_h / repeat, + repeat, + cell_w: target_w, + cell_h: target_h, + }; if grid.cols == 0 || grid.rows == 0 { return Err(Error::from_reason(format!( "Frame size {size} cannot fit a {target_w}x{target_h} cell grid (repeat {repeat})" ))); } + // Tight canvas: width stays the frame edge (the reading geometry the + // caller derives cols from), height hugs the rows the text needs. + let used = used_rows(&text, &grid, doc); + let height = used * grid.repeat * grid.cell_h; - if (target_w, target_h) == (font.cell_w, font.cell_h) { - // Native cell: rasterize straight onto the frame, indexed. - let pixels = render_bitmap(&text, size, size, font, &grid, black_ink); + let stretch = + options.stretch != Some(false) && (target_w, target_h) != (font.cell_w, font.cell_h); + if !stretch { + // Indexed path: rasterize straight onto the frame at the requested + // cell box (the natural cell, or natural glyphs on a padded pitch + // when `stretch: false`). + let pixels = if doc { + render_doc_bitmap(&text, size, height, font, &grid, black_ink) + } else { + render_bitmap(&text, size, height, font, &grid, black_ink) + }; return Ok(STANDARD - .encode(encode_indexed_png(&pixels, size, png::Compression::Balanced)?) + .encode(encode_indexed_png(&pixels, size, height, png::Compression::High)?) .into()); } - // Stretch shape: rasterize at the font's natural cell on a tight canvas, - // Lanczos3-resample to the target cell, paste onto the white frame. + // Stretch shape: rasterize at the font's natural cell on a tight canvas + // (layout stays in character cells from the target grid), Lanczos3- + // resample to the target cell, paste onto the white frame. + let native = Grid { cell_w: font.cell_w, cell_h: font.cell_h, ..grid }; let src_w = grid.cols * font.cell_w; - let src_h = grid.rows * grid.repeat * font.cell_h; + let src_h = used * grid.repeat * font.cell_h; let dst_w = grid.cols * target_w; - let dst_h = grid.rows * grid.repeat * target_h; - let indexed = render_bitmap(&text, src_w, src_h, font, &grid, black_ink); + let dst_h = used * grid.repeat * target_h; + let indexed = if doc { + render_doc_bitmap(&text, src_w, src_h, font, &native, black_ink) + } else { + render_bitmap(&text, src_w, src_h, font, &native, black_ink) + }; let mut rgb = vec![0f32; src_w * src_h * 3]; for (dst, &idx) in rgb.chunks_exact_mut(3).zip(&indexed) { let [r, g, b] = PALETTE[idx as usize]; @@ -505,8 +780,8 @@ pub fn render_snapcompact_png( dst[2] = f32::from(b); } let resized = resize_rgb(&rgb, src_w, src_h, dst_w, dst_h); - let mut frame = vec![255u8; size * size * 3]; - for y in 0..dst_h.min(size) { + let mut frame = vec![255u8; size * dst_h * 3]; + for y in 0..dst_h { let src_row = &resized[y * dst_w * 3..(y + 1) * dst_w * 3]; let dst_row = &mut frame[y * size * 3..]; for (d, &s) in dst_row[..dst_w.min(size) * 3].iter_mut().zip(src_row) { @@ -514,7 +789,7 @@ pub fn render_snapcompact_png( } } Ok(STANDARD - .encode(encode_rgb_png(&frame, size, png::Compression::Balanced)?) + .encode(encode_rgb_png(&frame, size, dst_h, png::Compression::High)?) .into()) } @@ -540,7 +815,7 @@ mod tests { #[test] fn bitmap_inks_sentences_and_caps_capacity() { // 40px -> 8 cols x 5 rows = 40 cells (5x8 font). - let grid = Grid { cols: 8, rows: 5, repeat: 1 }; + let grid = Grid { cols: 8, rows: 5, repeat: 1, cell_w: 5, cell_h: 8 }; let pixels = render_bitmap("Hi. Ok.", 40, 40, &FONT_5X8, &grid, false); let inks: Vec = pixels.iter().copied().filter(|&p| p != 0).collect(); assert!(inks.contains(&1), "first sentence should use ink 1"); @@ -554,7 +829,7 @@ mod tests { #[test] fn bw_variant_prints_black_only() { - let grid = Grid { cols: 8, rows: 8, repeat: 1 }; + let grid = Grid { cols: 8, rows: 8, repeat: 1, cell_w: 8, cell_h: 8 }; let pixels = render_bitmap("Hi. Ok.", 64, 64, &FONT_8X8, &grid, true); let inks: Vec = pixels.iter().copied().filter(|&p| p != 0).collect(); assert!(!inks.is_empty()); @@ -563,7 +838,7 @@ mod tests { #[test] fn dim_markers_toggle_gray_without_consuming_cells() { - let grid = Grid { cols: 8, rows: 8, repeat: 1 }; + let grid = Grid { cols: 8, rows: 8, repeat: 1, cell_w: 8, cell_h: 8 }; let pixels = render_bitmap("\u{e}AB\u{f}CD", 64, 64, &FONT_8X8, &grid, true); let inks: Vec = pixels.iter().copied().filter(|&p| p != 0).collect(); assert!(inks.contains(&INK_DIM), "dim span must ink gray"); @@ -578,7 +853,7 @@ mod tests { #[test] fn line_repeat_duplicates_rows_on_highlight_bands() { // 64px, 8x8 font, repeat 2 -> 8 cols x 4 unique rows. - let grid = Grid { cols: 8, rows: 4, repeat: 2 }; + let grid = Grid { cols: 8, rows: 4, repeat: 2, cell_w: 8, cell_h: 8 }; let pixels = render_bitmap("ABCDEFGH", 64, 64, &FONT_8X8, &grid, true); // Copy band (rows 8..16) carries the highlight background. assert!(pixels[9 * 64..10 * 64].contains(&BG_REPEAT), "duplicate band must be highlighted"); @@ -593,6 +868,35 @@ mod tests { } } + #[test] + fn full_block_fills_cell_pitch_black() { + let grid = Grid { cols: 8, rows: 4, repeat: 2, cell_w: 8, cell_h: 8 }; + // The block's black fill beats both the dim span and the sent hues. + let pixels = render_bitmap("\u{e}a\u{2588}b\u{f}", 64, 64, &FONT_8X8, &grid, false); + for copy in 0..2 { + for y in copy * 8..(copy + 1) * 8 { + for x in 8..16 { + assert_eq!(pixels[y * 64 + x], INK_BLACK, "block pixel ({x},{y}) must be black"); + } + } + } + assert!(pixels.contains(&INK_DIM), "neighbours keep their dim ink"); + let hued = render_bitmap("Hi.\u{2588}Ok.", 64, 64, &FONT_8X8, &grid, false); + assert!(hued.contains(&2), "block must advance the sentence hue like a space"); + } + + #[test] + fn doc_full_block_fills_cell() { + // col_w = (13 - GUTTER) / 2 = 5; block at line 0, cell 1 -> x 8..16. + let grid = Grid { cols: 13, rows: 2, repeat: 1, cell_w: 8, cell_h: 8 }; + let pixels = render_doc_bitmap("a\u{2588}b\nc", 104, 16, &FONT_8X8, &grid, true); + for y in 0..8 { + for x in 8..16 { + assert_eq!(pixels[y * 104 + x], INK_BLACK, "block pixel ({x},{y}) must be black"); + } + } + } + /// Decode the base64 JS-string payload back to PNG bytes for inspection. fn png_bytes(encoded: Latin1String) -> Vec { STANDARD @@ -631,6 +935,63 @@ mod tests { assert_eq!(legacy[25], 3, "default shape stays the legacy 5x8 indexed path"); } + #[test] + fn indexed_png_narrows_palette_and_bit_depth() { + // IHDR bit depth lives at byte 24; PLTE length is the chunk length + // word 8 bytes after the "PLTE" tag position. + fn depth_and_palette(png: &[u8]) -> (u8, usize) { + let tag = png + .windows(4) + .position(|w| w == b"PLTE") + .expect("PLTE chunk"); + let len = u32::from_be_bytes(png[tag - 4..tag].try_into().unwrap()) as usize; + (png[24], len / 3) + } + + // Plain bw, no dim/band/repeat: background + black ink = 1-bit. + let bw = png_bytes( + render_snapcompact_png("Hello world. Again.".into(), SnapcompactRenderOptions { + size: 128, + font: Some("8x8".into()), + variant: Some("bw".into()), + ..Default::default() + }) + .unwrap(), + ); + assert_eq!(depth_and_palette(&bw), (1, 2)); + + // bw with a dim span and repeat bands: 4 colors = 2-bit. + let dim = png_bytes( + render_snapcompact_png( + "Read \u{e}the dim part\u{f} now.".into(), + SnapcompactRenderOptions { + size: 128, + font: Some("8x8".into()), + variant: Some("bw".into()), + line_repeat: Some(2), + ..Default::default() + }, + ) + .unwrap(), + ); + assert_eq!(depth_and_palette(&dim), (2, 4)); + + // Sentence hues exceed 4 colors: stays 4-bit, palette still narrowed + // to the inks actually printed (bg + 2 hues here). + let sent = png_bytes( + render_snapcompact_png("Hi. Ok.".into(), SnapcompactRenderOptions { + size: 128, + font: Some("8x8".into()), + variant: Some("sent".into()), + ..Default::default() + }) + .unwrap(), + ); + let (sent_depth, sent_colors) = depth_and_palette(&sent); + assert_eq!(sent_depth, 2, "two hues + bg fit 2-bit"); + assert_eq!(sent_colors, 3); + } + #[test] fn rejects_bad_shapes() { assert!(render_snapcompact_png("x".into(), opts(0)).is_err()); @@ -651,4 +1012,183 @@ mod tests { .is_err() ); } + + #[test] + fn xorg_fonts_parse_and_render() { + for (font, ascent, name) in [(&*FONT_6X12, 10, "6x12"), (&*FONT_8X13, 11, "8x13")] { + assert_eq!(font.ascent, ascent, "{name} ascent"); + for cp in 0x20u32..0x7f { + assert!(font.glyphs.contains_key(&cp), "{name} missing glyph U+{cp:04X}"); + } + } + for (name, size) in [("6x12", 60u32), ("8x13", 104u32)] { + let png = png_bytes( + render_snapcompact_png("Hello world. Again!".into(), SnapcompactRenderOptions { + size, + font: Some(name.into()), + ..Default::default() + }) + .unwrap(), + ); + assert_eq!(png[25], 3, "{name} natural cell must encode indexed"); + } + // Non-blank: the raster must carry glyph ink. + let grid = Grid { cols: 10, rows: 5, repeat: 1, cell_w: 6, cell_h: 12 }; + let pixels = render_bitmap("Hello", 60, 60, &FONT_6X12, &grid, true); + assert!(pixels.contains(&INK_BLACK), "6x12 must ink pixels"); + let grid = Grid { cols: 8, rows: 8, repeat: 1, cell_w: 8, cell_h: 13 }; + let pixels = render_bitmap("Hello", 64, 104, &FONT_8X13, &grid, true); + assert!(pixels.contains(&INK_BLACK), "8x13 must ink pixels"); + } + + #[test] + fn stretch_false_renders_natural_glyphs_on_padded_pitch() { + let png = png_bytes( + render_snapcompact_png("Hello there. General Kenobi!".into(), SnapcompactRenderOptions { + size: 128, + font: Some("8x13".into()), + cell_width: Some(8), + cell_height: Some(16), + stretch: Some(false), + variant: Some("bw".into()), + ..Default::default() + }) + .unwrap(), + ); + assert_eq!(png[25], 3, "8on16 must stay indexed"); + // IHDR width/height live at bytes 16..24, big-endian. + let dim = |off: usize| u32::from_be_bytes(png[off..off + 4].try_into().unwrap()); + // "Hello there. General Kenobi!" is 28 chars on a 16-col grid: 2 rows + // of the 16px pitch — the height hugs them instead of padding to 128. + assert_eq!((dim(16), dim(20)), (128, 32), "declared geometry must match"); + + // Glyph ink must sit in the top 13px of every 16px pitch row. + let grid = Grid { cols: 16, rows: 8, repeat: 1, cell_w: 8, cell_h: 16 }; + let pixels = render_bitmap("Hgjpqy. Mixed descenders!", 128, 128, &FONT_8X13, &grid, true); + assert!(pixels.contains(&INK_BLACK)); + for (i, &p) in pixels.iter().enumerate() { + if p == INK_BLACK { + assert!((i / 128) % 16 < 13, "ink leaked into pitch padding at y={}", i / 128); + } + } + } + + #[test] + fn doc_layout_flows_lines_into_second_column() { + // 64px, 8x16 cells -> cols 8, rows 4, col_w = (8 - 3) / 2 = 2. + let grid = Grid { cols: 8, rows: 4, repeat: 1, cell_w: 8, cell_h: 16 }; + let pixels = render_doc_bitmap("A\nB\nC\nD\nE", 64, 64, &FONT_8X13, &grid, true); + // Line 4 (the rows+1-th) lands at the second column's x origin: + // 1 * (col_w + GUTTER) * cell_w = 40, row band 0. + let col2 = (0..13).any(|y| (40..48).any(|x| pixels[y * 64 + x] == INK_BLACK)); + assert!(col2, "fifth line must start at the second column's x origin"); + // '\n' consumes no cell: line 1 starts back at x 0 in row band 1. + let row1 = (16..29).any(|y| (0..8).any(|x| pixels[y * 64 + x] == INK_BLACK)); + assert!(row1, "second line must start at column 0 of the next row band"); + // One-char lines leave the rest of column 0 and the gutter blank. + for y in 0..64 { + for x in 8..40 { + assert_eq!(pixels[y * 64 + x], 0, "gutter must stay blank at ({x},{y})"); + } + } + } + + #[test] + fn doc_sentence_hue_advances_across_newline_boundary() { + // 152px wide: cols 19, col_w = (19 - 3) / 2 = 8. + let grid = Grid { cols: 19, rows: 4, repeat: 1, cell_w: 8, cell_h: 16 }; + let pixels = render_doc_bitmap("Hi.\nOk", 152, 64, &FONT_8X13, &grid, false); + let inks: Vec = pixels.iter().copied().filter(|&p| p != 0).collect(); + assert!(inks.contains(&1), "first sentence must use ink 1"); + assert!(inks.contains(&2), "hue must advance across the newline boundary"); + assert!(!inks.contains(&3), "no third sentence ink expected"); + + // Grid mode keeps the space-only rule: no advance across '\n'. + let gridmode = render_bitmap("Hi.\nOk", 152, 64, &FONT_8X13, &grid, false); + let inks: Vec = gridmode.iter().copied().filter(|&p| p != 0).collect(); + assert!(inks.contains(&1)); + assert!(!inks.contains(&2), "grid mode must not advance hue across newline"); + } + + #[test] + fn frame_height_hugs_used_rows() { + let dims = |png: &[u8]| { + let dim = |off: usize| u32::from_be_bytes(png[off..off + 4].try_into().unwrap()); + (dim(16), dim(20)) + }; + let render = |text: &str, opts: SnapcompactRenderOptions| { + png_bytes(render_snapcompact_png(text.into(), opts).unwrap()) + }; + let opts_8x8 = + || SnapcompactRenderOptions { size: 64, font: Some("8x8".into()), ..Default::default() }; + // 8 cols of 8x8 cells: 10 chars span 2 rows -> 16px tall. + assert_eq!(dims(&render("0123456789", opts_8x8())), (64, 16)); + // Dim toggles are zero-width and must not add a row. + assert_eq!(dims(&render("\u{e}01234567\u{f}", opts_8x8())), (64, 8)); + // Capacity-filling text keeps the full grid height. + assert_eq!(dims(&render(&"x".repeat(64), opts_8x8())), (64, 64)); + // Repeat shapes hug `usedRows * repeat` copy bands. + let repeated = + render("0123456789", SnapcompactRenderOptions { line_repeat: Some(2), ..opts_8x8() }); + assert_eq!(dims(&repeated), (64, 32)); + // Doc layout counts `\n` lines down the first column. + let doc = render("Hello there.\nSecond line", SnapcompactRenderOptions { + size: 256, + font: Some("8x13".into()), + cell_width: Some(8), + cell_height: Some(16), + stretch: Some(false), + columns: Some(2), + ..Default::default() + }); + assert_eq!(dims(&doc), (256, 32)); + // The stretch path hugs too (RGB output, 6x6 target cells). + let stretched = render("0123456789ab", SnapcompactRenderOptions { + size: 60, + font: Some("8x8".into()), + cell_width: Some(6), + cell_height: Some(6), + ..Default::default() + }); + assert_eq!(dims(&stretched), (60, 12)); + } + + #[test] + fn columns_validates_and_renders_doc_frames() { + assert!( + render_snapcompact_png("x".into(), SnapcompactRenderOptions { + size: 64, + columns: Some(3), + ..Default::default() + }) + .is_err() + ); + // Indexed doc frame (stretch: false on a padded pitch). + let doc = png_bytes( + render_snapcompact_png("Hello there.\nSecond line".into(), SnapcompactRenderOptions { + size: 256, + font: Some("8x13".into()), + cell_width: Some(8), + cell_height: Some(16), + stretch: Some(false), + columns: Some(2), + ..Default::default() + }) + .unwrap(), + ); + assert_eq!(doc[25], 3, "8on16 doc frame must encode indexed"); + // Doc layout also applies on the stretch path (RGB output). + let stretched = png_bytes( + render_snapcompact_png("Hello there.\nSecond line".into(), SnapcompactRenderOptions { + size: 256, + font: Some("8x13".into()), + cell_width: Some(6), + cell_height: Some(12), + columns: Some(2), + ..Default::default() + }) + .unwrap(), + ); + assert_eq!(stretched[25], 2, "stretched doc frame must encode RGB"); + } } diff --git a/crates/pi-shell/src/cancel.rs b/crates/pi-shell/src/cancel.rs index b27c05212..233a0784f 100644 --- a/crates/pi-shell/src/cancel.rs +++ b/crates/pi-shell/src/cancel.rs @@ -76,10 +76,12 @@ impl From<()> for CancelToken { } impl CancelToken { + #[must_use] pub fn new(timeout_ms: Option) -> Self { Self::with_timeout(timeout_ms.map(|ms| Duration::from_millis(u64::from(ms)))) } + #[must_use] pub fn with_timeout(timeout: Option) -> Self { Self { deadline: timeout.map(|duration| Instant::now() + duration), flag: None } } @@ -132,6 +134,7 @@ impl CancelToken { AbortToken(Some(Arc::downgrade(self.flag.get_or_insert_default()))) } + #[must_use] pub fn aborted(&self) -> bool { if let Some(flag) = &self.flag && flag.cause().is_some() diff --git a/crates/pi-shell/src/fixup.rs b/crates/pi-shell/src/fixup.rs index f9fe9d70a..958caac1b 100644 --- a/crates/pi-shell/src/fixup.rs +++ b/crates/pi-shell/src/fixup.rs @@ -25,7 +25,13 @@ use std::{io::BufReader, sync::LazyLock}; -use brush_parser::{Parser, ParserOptions, SourceInfo, ast::*}; +use brush_parser::{ + Parser, ParserOptions, SourceInfo, + ast::{ + AndOr, AndOrList, Command, CommandPrefixOrSuffixItem, CompoundListItem, IoFileRedirectKind, + IoFileRedirectTarget, IoRedirect, Pipeline, SourceLocation, + }, +}; use regex::Regex; /// Result of [`apply_bash_fixups`]. @@ -38,6 +44,7 @@ pub struct BashFixupResult { } /// Apply the bash fixups to `cmd`. See module docs for full rules. +#[must_use] pub fn apply_bash_fixups(cmd: &str) -> BashFixupResult { // Multi-line input is out of scope: heredoc/loop bodies can't be safely // rewritten and the agent rarely passes them as bash tool input. Bailing diff --git a/crates/pi-shell/src/minimizer.rs b/crates/pi-shell/src/minimizer.rs index e3a53949e..40d1c1507 100644 --- a/crates/pi-shell/src/minimizer.rs +++ b/crates/pi-shell/src/minimizer.rs @@ -76,6 +76,7 @@ impl MinimizerOutput { /// Transformed output. Caller-supplied `input_bytes` lets the savings /// metric compare pre- and post-filter sizes. + #[must_use] pub const fn transformed(text: String, input_bytes: usize) -> Self { let output_bytes = text.len(); Self { text, changed: true, input_bytes, output_bytes, filter: "", original_text: None } @@ -111,6 +112,7 @@ impl MinimizerOutput { /// Byte count saved by this filter (0 for passthrough). #[allow(dead_code, reason = "test-only API surface")] + #[must_use] pub const fn bytes_saved(&self) -> usize { self.input_bytes.saturating_sub(self.output_bytes) } @@ -141,6 +143,7 @@ pub(crate) fn chain_output( /// Apply the configured filter pipeline to a captured buffer. /// Returns the original text unchanged when minimization is disabled, no /// filter matches, or a filter panics. +#[must_use] pub fn apply( command: &str, captured: &str, diff --git a/crates/pi-shell/src/minimizer/config.rs b/crates/pi-shell/src/minimizer/config.rs index f7c769676..c6bddd123 100644 --- a/crates/pi-shell/src/minimizer/config.rs +++ b/crates/pi-shell/src/minimizer/config.rs @@ -110,6 +110,7 @@ impl Default for MinimizerConfig { impl MinimizerConfig { /// Build a resolved configuration from `MinimizerOptions`, optionally /// merging in a TOML settings file. + #[must_use] pub fn from_options(opts: &MinimizerOptions) -> Self { let mut cfg = Self::default(); if let Some(enabled) = opts.enabled { @@ -185,6 +186,7 @@ impl MinimizerConfig { } /// Whether the engine should attempt to minimize output for `program`. + #[must_use] pub fn is_program_enabled(&self, program: &str) -> bool { if !self.enabled { return false; @@ -200,11 +202,13 @@ impl MinimizerConfig { } /// Fetch a per-command TOML table, if any. + #[must_use] pub fn per_command(&self, program: &str) -> Option<&toml::Value> { self.per_command.get(&program.to_lowercase()) } /// Whether opted-in filters should fall back to pre-PR legacy behavior. + #[must_use] pub const fn legacy_filters_active(&self) -> bool { self.legacy_filters_active } diff --git a/crates/pi-shell/src/minimizer/defs/basedpyright.toml b/crates/pi-shell/src/minimizer/defs/basedpyright.toml deleted file mode 100644 index b82c0a6ff..000000000 --- a/crates/pi-shell/src/minimizer/defs/basedpyright.toml +++ /dev/null @@ -1,50 +0,0 @@ -# Ported from https://github.com/rtk-ai/rtk/blob/master/src/filters/basedpyright.toml -# match_command adapted for the local (program, subcommand) dispatch model. - -[filters.basedpyright] -description = "Compact basedpyright type checker output — strip blank lines, keep errors" -match_command = "^basedpyright$" -strip_ansi = true -strip_lines_matching = [ - "^\\s*$", - "^Searching for source files", - "^Found \\d+ source file", - "^Pyright \\d+\\.\\d+", - "^basedpyright \\d+\\.\\d+", -] -max_lines = 50 -on_empty = "basedpyright: ok" - -[[tests.basedpyright]] -name = "strips noise, keeps errors and summary" -input = """ -basedpyright 1.22.0 -Searching for source files -Found 42 source files - -/home/user/app/main.py - /home/user/app/main.py:10:5 - error: "foo" is not defined (reportUndefinedVariable) - /home/user/app/main.py:25:1 - error: Type "str" is not assignable to type "int" (reportAssignmentType) - -/home/user/app/utils.py - /home/user/app/utils.py:8:9 - warning: Variable "x" is not accessed (reportUnusedVariable) - -3 errors, 1 warning, 0 informations -""" -expected = "/home/user/app/main.py\n /home/user/app/main.py:10:5 - error: \"foo\" is not defined (reportUndefinedVariable)\n /home/user/app/main.py:25:1 - error: Type \"str\" is not assignable to type \"int\" (reportAssignmentType)\n/home/user/app/utils.py\n /home/user/app/utils.py:8:9 - warning: Variable \"x\" is not accessed (reportUnusedVariable)\n3 errors, 1 warning, 0 informations\n" - -[[tests.basedpyright]] -name = "clean output" -input = """ -basedpyright 1.22.0 -Searching for source files -Found 10 source files - -0 errors, 0 warnings, 0 informations -""" -expected = "0 errors, 0 warnings, 0 informations\n" - -[[tests.basedpyright]] -name = "empty input returns on_empty message" -input = "" -expected = "basedpyright: ok" diff --git a/crates/pi-shell/src/minimizer/defs/bundle-install.toml b/crates/pi-shell/src/minimizer/defs/bundle-install.toml deleted file mode 100644 index b8978f050..000000000 --- a/crates/pi-shell/src/minimizer/defs/bundle-install.toml +++ /dev/null @@ -1,65 +0,0 @@ -# Ported from https://github.com/rtk-ai/rtk/blob/master/src/filters/bundle-install.toml -# match_command adapted for the local (program, subcommand) dispatch model. - -[filters.bundle-install] -description = "Compact bundle install/update — strip 'Using' lines, keep installs and errors" -match_command = "^bundle$" -match_subcommand = "^(install|update)$" -strip_ansi = true -strip_lines_matching = [ - "^Using ", - "^\\s*$", - "^Fetching gem metadata", - "^Resolving dependencies", -] -match_output = [ - { pattern = "Bundle complete!", message = "ok bundle: complete" }, - { pattern = "Bundle updated!", message = "ok bundle: updated" }, -] -max_lines = 30 - -[[tests.bundle-install]] -name = "all cached short-circuits" -input = """ -Using bundler 2.5.6 -Using rake 13.1.0 -Using ast 2.4.2 -Using base64 0.2.0 -Using minitest 5.22.2 -Bundle complete! 85 Gemfile dependencies, 200 gems now installed. -Use `bundle info [gemname]` to see where a bundled gem is installed. -""" -expected = "ok bundle: complete" - -[[tests.bundle-install]] -name = "mixed install keeps Fetching and Installing lines" -input = """ -Fetching gem metadata from https://rubygems.org/......... -Resolving dependencies... -Using rake 13.1.0 -Using ast 2.4.2 -Fetching rspec 3.13.0 -Installing rspec 3.13.0 -Using rubocop 1.62.0 -Fetching simplecov 0.22.0 -Installing simplecov 0.22.0 -Bundle complete! 85 Gemfile dependencies, 202 gems now installed. -""" -expected = "ok bundle: complete" - -[[tests.bundle-install]] -name = "update output" -input = """ -Fetching gem metadata from https://rubygems.org/......... -Resolving dependencies... -Using rake 13.1.0 -Fetching rspec 3.14.0 (was 3.13.0) -Installing rspec 3.14.0 (was 3.13.0) -Bundle updated! -""" -expected = "ok bundle: updated" - -[[tests.bundle-install]] -name = "empty output" -input = "" -expected = "" diff --git a/crates/pi-shell/src/minimizer/defs/dotnet-build.toml b/crates/pi-shell/src/minimizer/defs/dotnet-build.toml deleted file mode 100644 index 3a7230533..000000000 --- a/crates/pi-shell/src/minimizer/defs/dotnet-build.toml +++ /dev/null @@ -1,68 +0,0 @@ -# Ported from https://github.com/rtk-ai/rtk/blob/master/src/filters/dotnet-build.toml -# match_command adapted for the local (program, subcommand) dispatch model. - -[filters.dotnet-build] -description = "Compact dotnet build output — short-circuit on success, strip banners" -match_command = "^dotnet$" -match_subcommand = "^build$" -strip_ansi = true -strip_lines_matching = [ - "^\\s*$", - "^Microsoft \\(R\\)", - "^Copyright \\(C\\)", - "^ Determining projects", -] -match_output = [ - { pattern = "0 Warning\\(s\\)\\n\\s+0 Error\\(s\\)", message = "ok (build succeeded)" }, -] -max_lines = 40 - -[[tests.dotnet-build]] -name = "successful build short-circuits to ok" -input = """ -Microsoft (R) Build Engine version 17.8.3+195e7f5a3 -Copyright (C) Microsoft Corporation. All rights reserved. - - Determining projects to restore... - All projects are up-to-date for restore. - MyApp -> /home/user/MyApp/bin/Debug/net8.0/MyApp.dll - -Build succeeded. - 0 Warning(s) - 0 Error(s) - -Time Elapsed 00:00:02.34 -""" -expected = "ok (build succeeded)" - -[[tests.dotnet-build]] -name = "build with warnings not short-circuited" -input = """ -Microsoft (R) Build Engine version 17.8.3+195e7f5a3 -Copyright (C) Microsoft Corporation. All rights reserved. - - Determining projects to restore... - MyApp -> /home/user/MyApp/bin/Debug/net8.0/MyApp.dll - -Build succeeded. - 3 Warning(s) - 0 Error(s) - -Time Elapsed 00:00:01.87 -""" -expected = " MyApp -> /home/user/MyApp/bin/Debug/net8.0/MyApp.dll\nBuild succeeded.\n 3 Warning(s)\n 0 Error(s)\nTime Elapsed 00:00:01.87\n" - -[[tests.dotnet-build]] -name = "build errors pass through" -input = """ -Microsoft (R) Build Engine version 17.8.3+195e7f5a3 -Copyright (C) Microsoft Corporation. All rights reserved. - - Determining projects to restore... -src/Program.cs(10,5): error CS1002: ; expected [/home/user/MyApp/MyApp.csproj] - -Build FAILED. - 0 Warning(s) - 1 Error(s) -""" -expected = "src/Program.cs(10,5): error CS1002: ; expected [/home/user/MyApp/MyApp.csproj]\nBuild FAILED.\n 0 Warning(s)\n 1 Error(s)\n" diff --git a/crates/pi-shell/src/minimizer/defs/gcloud.toml b/crates/pi-shell/src/minimizer/defs/gcloud.toml index 438b5a7b5..90aa321d2 100644 --- a/crates/pi-shell/src/minimizer/defs/gcloud.toml +++ b/crates/pi-shell/src/minimizer/defs/gcloud.toml @@ -12,7 +12,7 @@ strip_lines_matching = [ "^\\s*\\$ gcloud components update", "^Your current Cloud SDK version is:", "^The latest available version is:", - "^WARNING: You do not appear to have access to project", + "^\\s*$", ] truncate_lines_at = 300 max_lines = 120 @@ -27,3 +27,8 @@ expected = "NAME: my-project\nPROJECT_ID: my-project-123\n" name = "empty after stripping update notice" input = "Updates are available for some Google Cloud CLI components.\n" expected = "gcloud: ok" + +[[tests.gcloud]] +name = "blank separator line removed between content" +input = "NAME: my-project\n\nPROJECT_ID: my-project-123\n" +expected = "NAME: my-project\nPROJECT_ID: my-project-123\n" diff --git a/crates/pi-shell/src/minimizer/defs/gradle.toml b/crates/pi-shell/src/minimizer/defs/gradle.toml deleted file mode 100644 index d6a2b9f46..000000000 --- a/crates/pi-shell/src/minimizer/defs/gradle.toml +++ /dev/null @@ -1,39 +0,0 @@ -# Gradle + ./gradlew build output. -# Strip daemon chatter and UP-TO-DATE/NO-SOURCE/FROM-CACHE tasks, keep real -# tasks and errors. - -[filters.gradle] -description = "Compact gradle / gradlew build output" -match_command = "^(gradle|gradlew)$" -strip_ansi = true -strip_lines_matching = [ - "^\\s*$", - "^> Configuring project", - "^> Resolving dependencies", - "^> Transform ", - "^Download(ing)?\\s+http", - "^\\s*<-+>\\s*$", - "^> Task :.*UP-TO-DATE$", - "^> Task :.*NO-SOURCE$", - "^> Task :.*FROM-CACHE$", - "^Starting a Gradle Daemon", - "^Daemon will be stopped", -] -truncate_lines_at = 200 -max_lines = 80 -on_empty = "gradle: ok" - -[[tests.gradle]] -name = "strips UP-TO-DATE and keeps result" -input = "> Configuring project :app\n> Task :app:compileJava UP-TO-DATE\n> Task :app:compileKotlin UP-TO-DATE\n> Task :app:test\n3 tests completed, 1 failed\nBUILD FAILED in 12s" -expected = "> Task :app:test\n3 tests completed, 1 failed\nBUILD FAILED in 12s\n" - -[[tests.gradle]] -name = "clean build untouched" -input = "BUILD SUCCESSFUL in 8s\n7 actionable tasks: 7 executed" -expected = "BUILD SUCCESSFUL in 8s\n7 actionable tasks: 7 executed\n" - -[[tests.gradle]] -name = "empty after stripping" -input = "> Configuring project :app\n" -expected = "gradle: ok" diff --git a/crates/pi-shell/src/minimizer/defs/helm.toml b/crates/pi-shell/src/minimizer/defs/helm.toml index 14b2ec7eb..91fb3fa94 100644 --- a/crates/pi-shell/src/minimizer/defs/helm.toml +++ b/crates/pi-shell/src/minimizer/defs/helm.toml @@ -8,6 +8,8 @@ match_command = "^helm$" match_subcommand = "^(repo|search|list|history)$" strip_ansi = true strip_lines_matching = [ + "^\\s*$", + "^W\\d{4}", "^Hang tight while we grab the latest", "^\\.\\.\\.Successfully got an update from", "^\\.\\.\\.Unable to get an update from", @@ -28,3 +30,8 @@ expected = "NAME\tURL\nbitnami\thttps://charts.bitnami.com/bitnami\n" name = "empty after stripping" input = "Hang tight while we grab the latest from your chart repositories...\n" expected = "helm: ok" + +[[tests.helm]] +name = "strips glog W-prefix warning and blank line keeps table rows" +input = "W0419 10:30:00.123456 1234 warnings.go:70] cannot validate\nNAME\tNAMESPACE\tREVISION\nmy-release\tdefault\t3\n\nother-release\tdefault\t1\n" +expected = "NAME\tNAMESPACE\tREVISION\nmy-release\tdefault\t3\nother-release\tdefault\t1\n" diff --git a/crates/pi-shell/src/minimizer/defs/iptables.toml b/crates/pi-shell/src/minimizer/defs/iptables.toml index 0d1f4fd3c..aba878c41 100644 --- a/crates/pi-shell/src/minimizer/defs/iptables.toml +++ b/crates/pi-shell/src/minimizer/defs/iptables.toml @@ -4,6 +4,11 @@ description = "Compact iptables rule listings" match_command = "^(ip6?tables|iptables-save|ip6tables-save)$" strip_ansi = true +strip_lines_matching = [ + "^Chain DOCKER", + "^Chain BR-", + "^\\s*$", +] truncate_lines_at = 250 head_lines = 40 tail_lines = 20 @@ -14,3 +19,8 @@ on_empty = "iptables: empty" name = "small listing passes through" input = "Chain INPUT (policy ACCEPT 0 packets, 0 bytes)\n pkts bytes target prot opt in out source destination\n" expected = "Chain INPUT (policy ACCEPT 0 packets, 0 bytes)\n pkts bytes target prot opt in out source destination\n" + +[[tests.iptables]] +name = "strips docker/bridge chain headers and blanks, keeps policy and rules" +input = "Chain INPUT (policy ACCEPT)\n1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0\n\nChain DOCKER (1 references)\n DOCKER all -- 0.0.0.0/0 0.0.0.0/0\nChain BR-abcdef (0 references)\n" +expected = "Chain INPUT (policy ACCEPT)\n1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0\n DOCKER all -- 0.0.0.0/0 0.0.0.0/0\n" diff --git a/crates/pi-shell/src/minimizer/defs/jj.toml b/crates/pi-shell/src/minimizer/defs/jj.toml index 0631d25c0..696b9e38f 100644 --- a/crates/pi-shell/src/minimizer/defs/jj.toml +++ b/crates/pi-shell/src/minimizer/defs/jj.toml @@ -6,6 +6,7 @@ match_command = "^jj$" strip_ansi = true strip_lines_matching = [ "^\\s*$", + "^Hint:", ] truncate_lines_at = 200 max_lines = 80 @@ -20,3 +21,8 @@ expected = "Working copy (@) : abc def\nParent commit : xyz 123 main | msg name = "empty becomes sentinel" input = "\n\n" expected = "jj: ok" + +[[tests.jj]] +name = "strips hint keeps working copy update" +input = "Working copy now at: qpvuntsm abc123 feat: add new feature\nHint: use `jj log` to see the full history\n" +expected = "Working copy now at: qpvuntsm abc123 feat: add new feature\n" diff --git a/crates/pi-shell/src/minimizer/defs/liquibase.toml b/crates/pi-shell/src/minimizer/defs/liquibase.toml index 49e1cbfef..71c45fb4d 100644 --- a/crates/pi-shell/src/minimizer/defs/liquibase.toml +++ b/crates/pi-shell/src/minimizer/defs/liquibase.toml @@ -1,4 +1,8 @@ -# Liquibase update / rollback output. +# Liquibase update / rollback / status / --version output. Strip the ASCII-art +# banner (hash border + body rows), the INFO/FINE log chatter, and the startup +# environment dump (Java Home / Libraries / jar list) from --version. The +# Liquibase Version line is the one meaningful line of --version output, so it +# is deliberately kept. [filters.liquibase] description = "Compact liquibase output" @@ -13,21 +17,34 @@ strip_lines_matching = [ "^\\[\\S+\\] INFO ", "^\\[\\S+\\] FINE ", "^Starting Liquibase", - "^Liquibase Version:", - "^Liquibase Community", + "^Liquibase (Community|Open Source)", "^Liquibase Home:", "^Running Changeset:", - "^####+", + "^\\s*##", + "^\\[INFO\\]\\s*#+$", + "^Java Home", + "^Libraries:", + "^\\s*-\\s+\\S+\\.jar", ] truncate_lines_at = 300 max_lines = 80 on_empty = "liquibase: ok" [[tests.liquibase]] -name = "keeps severe" -input = "INFO Parsing changelog\nRunning Changeset: db/changelog.xml::1::author\nSEVERE ChangeSet failed: ORA-00942" +name = "strips banner and info keeps severe" +input = "####################################################\n## _ _ _ _ ##\n####################################################\nINFO Parsing changelog\nRunning Changeset: db/changelog.xml::1::author\nSEVERE ChangeSet failed: ORA-00942\n" expected = "SEVERE ChangeSet failed: ORA-00942\n" +[[tests.liquibase]] +name = "version output reduces to the version line" +input = "####################################################\n## _ _ _ _ ##\n####################################################\nStarting Liquibase at 13:45:24 (version 4.30.0)\nLiquibase Version: 4.30.0\nLiquibase Open Source 4.30.0 by Liquibase\nJava Home C:\\Program Files\\Java\\jdk-17.0.15\nLibraries:\n - internal\\lib\\commons-io.jar: Apache Commons IO\n" +expected = "Liquibase Version: 4.30.0\n" + +[[tests.liquibase]] +name = "status passthrough without changeset line" +input = "Starting Liquibase at 10:00:00 (version 4.30.0)\nLiquibase Version: 4.30.0\nLiquibase Open Source 4.30.0 by Liquibase\nRunning Changeset: filepath::id::author\nHR@jdbc:oracle:thin:@localhost:1523:XE is up to date\nLiquibase command 'status' was executed successfully.\n" +expected = "Liquibase Version: 4.30.0\nHR@jdbc:oracle:thin:@localhost:1523:XE is up to date\nLiquibase command 'status' was executed successfully.\n" + [[tests.liquibase]] name = "info noise collapses" input = "INFO Parsing changelog\nINFO Successful update" diff --git a/crates/pi-shell/src/minimizer/defs/maven.toml b/crates/pi-shell/src/minimizer/defs/maven.toml deleted file mode 100644 index e9c8ae0df..000000000 --- a/crates/pi-shell/src/minimizer/defs/maven.toml +++ /dev/null @@ -1,27 +0,0 @@ -[filters.maven] -description = "Compact Maven build output" -match_command = "^(mvn|mvnw)$" -strip_ansi = true -strip_lines_matching = [ - "^\\[INFO\\] Downloading ", - "^\\[INFO\\] Downloaded ", - "^\\[INFO\\] -+", - "^\\[INFO\\]\\s*$", - "^\\[INFO\\] Building ", - "^\\[INFO\\] Scanning for projects", - "^\\[INFO\\] --- ", - "^Progress ", -] -truncate_lines_at = 200 -max_lines = 80 -on_empty = "maven: ok" - -[[tests.maven]] -name = "keeps build failure" -input = "[INFO] Scanning for projects...\n[INFO] Downloading from central: https://repo.maven.apache.org/foo.jar\n[INFO] -----\n[ERROR] Failed to execute goal\n[INFO] BUILD FAILURE" -expected = "[ERROR] Failed to execute goal\n[INFO] BUILD FAILURE\n" - -[[tests.maven]] -name = "clean success" -input = "[INFO] BUILD SUCCESS" -expected = "[INFO] BUILD SUCCESS\n" diff --git a/crates/pi-shell/src/minimizer/defs/mise.toml b/crates/pi-shell/src/minimizer/defs/mise.toml index ed99770ad..acf99edb0 100644 --- a/crates/pi-shell/src/minimizer/defs/mise.toml +++ b/crates/pi-shell/src/minimizer/defs/mise.toml @@ -9,6 +9,9 @@ strip_lines_matching = [ "^\\s*$", "^mise\\s+hint\\s", "^mise\\s+.*already installed", + "^mise\\s+Downloading\\s", + "^mise\\s+Extracting\\s", + "^mise\\s+(trust|install|upgrade).*✓", ] truncate_lines_at = 250 max_lines = 80 @@ -23,3 +26,13 @@ expected = "mise node@22.0.0 install\nmise node@22.0.0 installed\n" name = "all already installed" input = "mise node@20.0.0 already installed\n" expected = "mise: ok" + +[[tests.mise]] +name = "preserves error output" +input = "mise run lint\nError: biome check failed\nsrc/index.ts:5 — unused variable\n" +expected = "mise run lint\nError: biome check failed\nsrc/index.ts:5 — unused variable\n" + +[[tests.mise]] +name = "strips trust/download/extract noise keeps installed result" +input = "mise trust ~/dev/.mise.toml ✓\nmise Downloading node@22.0.0\nmise Extracting node@22.0.0\nmise node@22.0.0 installed\n" +expected = "mise node@22.0.0 installed\n" diff --git a/crates/pi-shell/src/minimizer/defs/mvn-build.toml b/crates/pi-shell/src/minimizer/defs/mvn-build.toml deleted file mode 100644 index 020d10cc2..000000000 --- a/crates/pi-shell/src/minimizer/defs/mvn-build.toml +++ /dev/null @@ -1,48 +0,0 @@ -# Ported from https://github.com/rtk-ai/rtk/blob/master/src/filters/mvn-build.toml -# match_command adapted for the local (program, subcommand) dispatch model. - -[filters.mvn-build] -description = "Compact Maven build output" -match_command = "^(mvn|mvnw)$" -match_subcommand = "^(compile|package|clean|install)$" -strip_ansi = true -strip_lines_matching = [ - "^\\[INFO\\] ---", - "^\\[INFO\\] Building\\s", - "^\\[INFO\\] Downloading\\s", - "^\\[INFO\\] Downloaded\\s", - "^\\[INFO\\]\\s*$", - "^\\s*$", - "^Downloading:", - "^Downloaded:", - "^Progress", -] -max_lines = 50 -on_empty = "mvn: ok" - -[[tests.mvn-build]] -name = "strips INFO noise, preserves errors and summary" -input = """ -[INFO] --- -[INFO] Building myapp 1.0-SNAPSHOT -[INFO] Downloading org.apache.maven.plugins:maven-compiler-plugin:3.11.0 -[INFO] Downloaded org.apache.maven.plugins:maven-compiler-plugin:3.11.0 -[INFO] -[ERROR] /src/main/java/Main.java:[10,5] cannot find symbol - symbol: method foo() -[INFO] BUILD FAILURE -[INFO] Total time: 2.543 s -""" -expected = "[ERROR] /src/main/java/Main.java:[10,5] cannot find symbol\n symbol: method foo()\n[INFO] BUILD FAILURE\n[INFO] Total time: 2.543 s\n" - -[[tests.mvn-build]] -name = "successful build keeps BUILD SUCCESS line" -input = """ -[INFO] --- -[INFO] Building myapp 1.0-SNAPSHOT -[INFO] -[INFO] BUILD SUCCESS -[INFO] Total time: 4.123 s -[INFO] Finished at: 2024-01-15T10:30:00Z -""" -expected = "[INFO] BUILD SUCCESS\n[INFO] Total time: 4.123 s\n[INFO] Finished at: 2024-01-15T10:30:00Z\n" diff --git a/crates/pi-shell/src/minimizer/defs/npx.toml b/crates/pi-shell/src/minimizer/defs/npx.toml new file mode 100644 index 000000000..fdf0fce16 --- /dev/null +++ b/crates/pi-shell/src/minimizer/defs/npx.toml @@ -0,0 +1,87 @@ +# Ported from snip/filters/npx.yaml (declarative DSL → local TOML schema). +# match_command adapted for the local (program, subcommand) dispatch model. +# +# This def is the catch-all for UNKNOWN `npx ` invocations only. It is NOT +# safe by construction on `match_command` alone: engine.rs reaches a pipeline +# along TWO paths, and a bare `^npx$` with no subcommand gate leaks on both. +# 1. Standalone (apply_identity -> resolve_pipeline): fires when +# filters::supports("npx", sub) is FALSE. `npx nx` lands here, and a bare +# npx def sorts before `nx-wrapped` (npx.toml < nx.toml in build.rs file +# order), so find() would return THIS def first and shadow nx-wrapped's +# NX-banner strip. +# 2. Overlay (apply_pipeline_overlay): fires AFTER the Rust filter when +# filters::supports("npx", sub) is TRUE. `npx eslint`/`npx jest`/... run +# their Rust lint/test filter, then resolve_pipeline re-selects this def +# and re-applies max_lines/strip on top, truncating diagnostics the Rust +# filter intentionally kept. +# match_subcommand below excludes every subcommand owned elsewhere so neither +# path leaks. The excluded set is the SOURCE-OF-TRUTH union of: +# - filters::supports("npx", _) == true (mod.rs npx arm: tsc, eslint, biome, +# jest, vitest, playwright; js_tools NPX_ROUTABLE_TOOLS: tsc, eslint, prisma, +# prettier, next), and +# - nx (claimed by nx-wrapped in nx.toml). +# The pattern is the lookahead-free anchored COMPLEMENT of that word set: the +# `regex` crate is RE2-style with no look-around, so a `(?!...)` negative cannot +# be used and a positive allowlist would match the wrong (excluded) tokens. It +# was machine-generated as the trie-complement and verified against the full +# known set plus prefix/suffix edge cases (e.g. `eslint-config`, `nextfoo`, +# `playwrigh` must still be claimed; `eslint`, `next`, `playwright` must not). +# If a tool is ever added to the npx routing in filters::supports, add it here +# too — the engine regression tests in engine.rs (npx_def_does_not_shadow_*/ +# npx_def_does_not_overlay_*/npx_def_fires_for_unknown_tool) fail loudly on +# desync. +# +# snip's `^Need to install` / `^Ok to proceed` patterns are widened here to the +# full literal npm install-prompt lines so the strip is unambiguous against +# default human output (the JSON-reporter tiers never apply to npx preambles). + +[filters.npx] +description = "Condensed npx output for unknown tools — strip install prompts, npm warn/notice noise, and blank lines" +match_command = "^npx$" +# Anchored complement of {nx, tsc, eslint, biome, jest, vitest, playwright, +# prisma, prettier, next}: matches any npx subcommand EXCEPT those routed/owned +# elsewhere (see header). Lookahead-free for the RE2-style `regex` crate. +match_subcommand = "^(?:|[^bejnptv].*|b(?:|[^i].*|i(?:|[^o].*|o(?:|[^m].*|m(?:|[^e].*|e(?:.+)))))|e(?:|[^s].*|s(?:|[^l].*|l(?:|[^i].*|i(?:|[^n].*|n(?:|[^t].*|t(?:.+))))))|j(?:|[^e].*|e(?:|[^s].*|s(?:|[^t].*|t(?:.+))))|n(?:|[^ex].*|e(?:|[^x].*|x(?:|[^t].*|t(?:.+)))|x(?:.+))|p(?:|[^lr].*|l(?:|[^a].*|a(?:|[^y].*|y(?:|[^w].*|w(?:|[^r].*|r(?:|[^i].*|i(?:|[^g].*|g(?:|[^h].*|h(?:|[^t].*|t(?:.+)))))))))|r(?:|[^ei].*|e(?:|[^t].*|t(?:|[^t].*|t(?:|[^i].*|i(?:|[^e].*|e(?:|[^r].*|r(?:.+))))))|i(?:|[^s].*|s(?:|[^m].*|m(?:|[^a].*|a(?:.+))))))|t(?:|[^s].*|s(?:|[^c].*|c(?:.+)))|v(?:|[^i].*|i(?:|[^t].*|t(?:|[^e].*|e(?:|[^s].*|s(?:|[^t].*|t(?:.+)))))))$" +strip_ansi = true +strip_lines_matching = [ + "^Need to install the following packages", + "^Ok to proceed\\? \\(y\\)", + "^npm warn", + "^npm notice", + "^\\s*$", +] +truncate_lines_at = 120 +max_lines = 50 + +[[tests.npx]] +name = "first-run strips install preamble + npm warn/notice, keeps tool output" +# Exercises every content-strip pattern: the install-prompt header, the +# `Ok to proceed?` line, npm warn/notice noise, and blank lines. snip's port +# does not strip the bare `name@version` package line, so it survives — that +# residue is faithful to the donor and documented here. +input = """ +Need to install the following packages: +cowsay@1.6.0 +Ok to proceed? (y) + +npm warn deprecated foo@1.0.0: use bar instead +npm notice New major version of npm available! + _______ +< Hello > + ------- + \\ ^__^ + \\ (oo)\\_______ + (__)\\ )\\/\\ + ||----w | + || || +""" +expected = """cowsay@1.6.0 + _______ +< Hello > + ------- + \\ ^__^ + \\ (oo)\\_______ + (__)\\ )\\/\\ + ||----w | + || || +""" diff --git a/crates/pi-shell/src/minimizer/defs/nx.toml b/crates/pi-shell/src/minimizer/defs/nx.toml index af079d574..b90fcd22f 100644 --- a/crates/pi-shell/src/minimizer/defs/nx.toml +++ b/crates/pi-shell/src/minimizer/defs/nx.toml @@ -12,6 +12,9 @@ strip_lines_matching = [ "^\\s*>\\s+NX\\s+Cloud", "^\\s*>\\s+NX\\s+Distributed", "^\\s*>\\s+NX\\s+View logs", + "^———————", + "^\\s*>\\s*NX\\s+Nx read the output", + "^\\s+Nx \\(powered by", ] truncate_lines_at = 250 max_lines = 80 @@ -26,3 +29,42 @@ expected = "> nx run app:build\nError: build failed\n > NX Ran target build f name = "all noise becomes ok" input = "\n > NX Successfully ran target build for 3 projects\n\n" expected = "nx: ok" + +[[tests.nx]] +name = "strips separator cache-replay and footer ad" +input = "————————————————————————————————————————\n > NX Nx read the output from the cache instead of running the command\nCompiled successfully.\n Nx (powered by Nx Cloud)\n" +expected = "Compiled successfully.\n" + +# Wrapper invocations: `pnpm nx build`, `npx nx ...`, `yarn nx ...` detect as +# (program=pnpm|npx|yarn, subcommand=nx) and fall through pkg::supports to the +# builtin defs. The bare `nx` entry only matches the program token, so this +# companion claims the wrapped form with the same strip/cap/on_empty rules. +[filters.nx-wrapped] +description = "Compact Nx task runner output (pnpm/npx/yarn wrapper invocations)" +match_command = "^(pnpm|npx|yarn)$" +match_subcommand = "^nx$" +strip_ansi = true +strip_lines_matching = [ + "^\\s*$", + "^\\s*>\\s+NX\\s+Running target", + "^\\s*>\\s+NX\\s+Successfully ran target", + "^\\s*>\\s+NX\\s+Cloud", + "^\\s*>\\s+NX\\s+Distributed", + "^\\s*>\\s+NX\\s+View logs", + "^———————", + "^\\s*>\\s*NX\\s+Nx read the output", + "^\\s+Nx \\(powered by", +] +truncate_lines_at = 250 +max_lines = 80 +on_empty = "nx: ok" + +[[tests.nx-wrapped]] +name = "wrapped pnpm nx strips banner keeps task output" +input = "\n > NX Running target build for 3 projects\n\n> nx run app:build\nError: build failed\n\n > NX Ran target build for 3 projects (2s)\n" +expected = "> nx run app:build\nError: build failed\n > NX Ran target build for 3 projects (2s)\n" + +[[tests.nx-wrapped]] +name = "wrapped all noise becomes ok" +input = "\n > NX Successfully ran target build for 3 projects\n\n" +expected = "nx: ok" diff --git a/crates/pi-shell/src/minimizer/defs/ollama.toml b/crates/pi-shell/src/minimizer/defs/ollama.toml index 80b0dd623..17fadf08d 100644 --- a/crates/pi-shell/src/minimizer/defs/ollama.toml +++ b/crates/pi-shell/src/minimizer/defs/ollama.toml @@ -1,9 +1,16 @@ -# ollama output. Drop pull/download progress spinners and verifying/writing -# chatter, keep the final lines. +# ollama output. For management subcommands (pull/push/list/...), drop +# pull/download progress spinners and verifying/writing chatter, keep the +# final lines, and cap. For `ollama run`, the model response IS the payload, +# so it must pass uncapped — only spinner residue is stripped. +# +# BTreeMap/first-match note: `[filters.ollama]` sorts before +# `[filters.ollama-run]`, but its match_subcommand gate excludes `run`, so the +# run entry is the one that claims `ollama run`. [filters.ollama] -description = "Compact ollama output" +description = "Compact ollama management output" match_command = "^ollama$" +match_subcommand = "^(pull|push|list|ls|rm|cp|show|create|serve|stop|ps)$" strip_ansi = true strip_lines_matching = [ "^\\s*$", @@ -17,6 +24,15 @@ truncate_lines_at = 200 max_lines = 60 on_empty = "ollama: ok" +[filters.ollama-run] +description = "Strip spinner residue from ollama run, keep the full response" +match_command = "^ollama$" +match_subcommand = "^run$" +strip_ansi = true +strip_lines_matching = [ + "^[⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏\\s]*$", +] + [[tests.ollama]] name = "strips pull progress keeps success" input = "pulling manifest\npulling abc123 100%\nverifying sha256 digest\nwriting manifest\nsuccess\n" @@ -26,3 +42,8 @@ expected = "success\n" name = "empty becomes sentinel" input = "pulling manifest\n" expected = "ollama: ok" + +[[tests.ollama-run]] +name = "long run response passes uncapped with spinner residue stripped" +input = "⠋ \n⠙ \nHere is a long answer.\nLine two of the response.\nLine three of the response.\nLine four of the response.\n" +expected = "Here is a long answer.\nLine two of the response.\nLine three of the response.\nLine four of the response.\n" diff --git a/crates/pi-shell/src/minimizer/defs/ping.toml b/crates/pi-shell/src/minimizer/defs/ping.toml index 358ec50f5..8f56114b0 100644 --- a/crates/pi-shell/src/minimizer/defs/ping.toml +++ b/crates/pi-shell/src/minimizer/defs/ping.toml @@ -1,21 +1,52 @@ -# ping: the per-packet lines are rarely useful once a run is over. Keep the -# header, the "--- ... ping statistics ---" separator, the loss line, and the -# rtt summary. Drop everything else. +# ping: runs as an OVERLAY on system.rs compact_ping_output (which already +# strips PING/Pinging headers and per-packet reply lines). The per-packet +# lines are rarely useful once a run is over. Keep the stats separators, the +# loss/rtt summary, and — critically — any error or timeout lines. +# +# Failures must never be masked: gate on exit 0 so nonzero-exit runs (e.g. +# "ping: unknown host") pass the native output through untouched instead of +# collapsing to the on_empty sentinel. [filters.ping] -description = "Keep only ping summary + loss line" +description = "Keep only ping summary + loss/error lines (exit 0 only)" match_command = "^ping6?$" strip_ansi = true +only_on_exit = [0] keep_lines_matching = [ "^PING ", "^--- .* ping statistics ---$", "packet loss", "^rtt min", "^round-trip min", + "timeout", + "[Uu]nreachable", + "^ping:", + "^From ", + "^Ping statistics for", + "Packets: Sent", + "^\\s*Minimum =", + "^Approximate round trip", ] +tail_lines = 6 on_empty = "ping: ok" [[tests.ping]] name = "keeps summary tail drops per-packet lines" input = "PING google.com (1.2.3.4) 56(84) bytes of data.\n64 bytes from a (1.2.3.4): icmp_seq=1 ttl=58 time=12.3 ms\n64 bytes from a (1.2.3.4): icmp_seq=2 ttl=58 time=12.5 ms\n\n--- google.com ping statistics ---\n2 packets transmitted, 2 received, 0% packet loss, time 1001ms\nrtt min/avg/max/mdev = 12.3/12.4/12.5/0.1 ms\n" expected = "PING google.com (1.2.3.4) 56(84) bytes of data.\n--- google.com ping statistics ---\n2 packets transmitted, 2 received, 0% packet loss, time 1001ms\nrtt min/avg/max/mdev = 12.3/12.4/12.5/0.1 ms\n" + +[[tests.ping]] +name = "unknown host on nonzero exit passes through unchanged" +exit = 2 +input = "ping: unknown host\nName or service not known\n" +expected = "ping: unknown host\nName or service not known\n" + +[[tests.ping]] +name = "windows stats block survives" +input = "Pinging 192.0.2.1 with 32 bytes of data:\n\nPing statistics for 192.0.2.1:\n Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),\nApproximate round trip times in milli-seconds:\n Minimum = 13ms, Maximum = 14ms, Average = 13ms\n" +expected = "Ping statistics for 192.0.2.1:\n Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),\nApproximate round trip times in milli-seconds:\n Minimum = 13ms, Maximum = 14ms, Average = 13ms\n" + +[[tests.ping]] +name = "timeout lines survive on exit 0" +input = "Request timeout for icmp_seq 0\nRequest timeout for icmp_seq 1\n\n--- host ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 1001ms\n" +expected = "Request timeout for icmp_seq 0\nRequest timeout for icmp_seq 1\n--- host ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 1001ms\n" diff --git a/crates/pi-shell/src/minimizer/defs/poetry-install.toml b/crates/pi-shell/src/minimizer/defs/poetry-install.toml deleted file mode 100644 index 105f67e8e..000000000 --- a/crates/pi-shell/src/minimizer/defs/poetry-install.toml +++ /dev/null @@ -1,54 +0,0 @@ -# Ported from https://github.com/rtk-ai/rtk/blob/master/src/filters/poetry-install.toml -# match_command adapted for the local (program, subcommand) dispatch model. - -[filters.poetry-install] -description = "Compact poetry install/lock/update output — strip downloads, short-circuit when up-to-date" -match_command = "^poetry$" -match_subcommand = "^(install|lock|update)$" -strip_ansi = true -strip_lines_matching = [ - "^\\s*$", - "^ [-•] Downloading ", - "^ [-•] Installing .* \\(", - "^Creating virtualenv", - "^Using virtualenv", -] -match_output = [ - { pattern = "No dependencies to install or update|No changes\\.", message = "ok (up to date)" }, -] -max_lines = 30 - -[[tests.poetry-install]] -name = "up to date short-circuits" -input = """ -Installing dependencies from lock file - -No dependencies to install or update -""" -expected = "ok (up to date)" - -[[tests.poetry-install]] -name = "poetry 2.x bullet syntax short-circuits to ok" -input = """ -• Installing requests (2.31.0) -• Installing certifi (2023.11.17) - -No changes. -""" -expected = "ok (up to date)" - -[[tests.poetry-install]] -name = "install strips download lines" -input = """ -Installing dependencies from lock file - - - Downloading requests-2.31.0-py3-none-any.whl (62.6 kB) - - Installing certifi (2023.11.17) - - Installing charset-normalizer (3.3.2) - - Installing idna (3.6) - - Installing urllib3 (2.1.0) - - Installing requests (2.31.0) - -Writing lock file -""" -expected = "Installing dependencies from lock file\nWriting lock file\n" diff --git a/crates/pi-shell/src/minimizer/defs/rails-migrate.toml b/crates/pi-shell/src/minimizer/defs/rails-migrate.toml new file mode 100644 index 000000000..0abf010eb --- /dev/null +++ b/crates/pi-shell/src/minimizer/defs/rails-migrate.toml @@ -0,0 +1,90 @@ +# Compact rails db:migrate / db:rollback output. + +[filters.rails-migrate] +description = "Compact rails db:migrate / db:rollback output" +match_command = "^(rails|rake)$" +match_subcommand = "^db:(migrate|rollback)$" +strip_ansi = true +strip_lines_matching = [ + "^\\s*$", + "^\\s*(--|->)", +] +keep_lines_matching = ["(migrating|migrated|aborted|error|Error|reverting|reverted)"] +replace_after = [ + { pattern = "^== \\d+ ([\\w:]+): (?:migrated|reverted).*$", replacement = "✓ $1" }, +] +max_lines = 40 +on_empty = "ok (no pending migrations)" + +[[tests.rails-migrate]] +name = "strips step lines and compacts migrations" +input = """\ +== 20240115123456 CreateUsers: migrating ====================================== +-- create_table(:users) + -> 0.0234s +== 20240115123456 CreateUsers: migrated (0.0235s) ============================= + +== 20240116789012 AddIndexToOrders: migrating ================================= +-- add_index(:orders, :user_id) + -> 0.0123s +== 20240116789012 AddIndexToOrders: migrated (0.0124s) ======================== + +== 20240117111111 CreateProducts: migrating =================================== +-- create_table(:products) + -> 0.0456s +-- add_index(:products, :category_id) + -> 0.0078s +== 20240117111111 CreateProducts: migrated (0.0534s) ========================== +""" +expected = """\ +== 20240115123456 CreateUsers: migrating ====================================== +✓ CreateUsers +== 20240116789012 AddIndexToOrders: migrating ================================= +✓ AddIndexToOrders +== 20240117111111 CreateProducts: migrating =================================== +✓ CreateProducts +""" + +[[tests.rails-migrate]] +name = "rollback keeps revert lines and compacts" +input = """\ +== 20240115123456 CreateUsers: reverting ====================================== +-- drop_table(:users) + -> 0.0234s +== 20240115123456 CreateUsers: reverted (0.0235s) ============================= + +== 20240116789012 AddIndexToOrders: reverting ================================= +-- remove_index(:orders, :user_id) + -> 0.0123s +== 20240116789012 AddIndexToOrders: reverted (0.0124s) ======================== +""" +expected = """\ +== 20240115123456 CreateUsers: reverting ====================================== +✓ CreateUsers +== 20240116789012 AddIndexToOrders: reverting ================================= +✓ AddIndexToOrders +""" + +[[tests.rails-migrate]] +name = "no pending migrations collapses to sentinel" +input = """\ +-- create_table(:users) + -> 0.0234s + +-- add_index(:orders, :user_id) + -> 0.0123s +""" +expected = "ok (no pending migrations)" + +[[tests.rails-migrate]] +name = "namespaced migration name is preserved" +input = """\ +== 20240115123456 Admin::CreateUsers: migrating ================================= +-- create_table(:users) + -> 0.0234s +== 20240115123456 Admin::CreateUsers: migrated (0.0235s) ======================== +""" +expected = """\ +== 20240115123456 Admin::CreateUsers: migrating ================================= +✓ Admin::CreateUsers +""" diff --git a/crates/pi-shell/src/minimizer/defs/rails-routes.toml b/crates/pi-shell/src/minimizer/defs/rails-routes.toml new file mode 100644 index 000000000..9a2160909 --- /dev/null +++ b/crates/pi-shell/src/minimizer/defs/rails-routes.toml @@ -0,0 +1,75 @@ +# Compact rails routes output. + +[filters.rails-routes] +description = "Compact rails routes output" +match_command = "^(rails|rake)$" +match_subcommand = "^routes$" +strip_ansi = true +strip_lines_matching = [ + "^\\s*$", + "^\\s*Prefix\\s+Verb", +] +truncate_lines_at = 160 +max_lines = 40 + +[[tests.rails-routes]] +name = "strips header and truncates long lines" +input = """\ + Prefix Verb URI Pattern Controller#Action + root GET / home#index + users GET /users(.:format) users#index + POST /users(.:format) users#create + new_user GET /users/new(.:format) users#new + edit_user GET /users/:id/edit(.:format) users#edit + user GET /users/:id(.:format) users#show + PATCH /users/:id(.:format) users#update + PUT /users/:id(.:format) users#update + DELETE /users/:id(.:format) users#destroy + orders GET /orders(.:format) orders#index + POST /orders(.:format) orders#create + new_order GET /orders/new(.:format) orders#new + edit_order GET /orders/:id/edit(.:format) orders#edit + order GET /orders/:id(.:format) orders#show + PATCH /orders/:id(.:format) orders#update + PUT /orders/:id(.:format) orders#update + DELETE /orders/:id(.:format) orders#destroy + products GET /products(.:format) products#index + POST /products(.:format) products#create + new_product GET /products/new(.:format) products#new + edit_product GET /products/:id/edit(.:format) products#edit + product GET /products/:id(.:format) products#show + PATCH /products/:id(.:format) products#update + PUT /products/:id(.:format) products#update + DELETE /products/:id(.:format) products#destroy + categories GET /categories(.:format) categories#index + POST /categories(.:format) categories#create +""" +expected = """ + root GET / home#index + users GET /users(.:format) users#index + POST /users(.:format) users#create + new_user GET /users/new(.:format) users#new + edit_user GET /users/:id/edit(.:format) users#edit + user GET /users/:id(.:format) users#show + PATCH /users/:id(.:format) users#update + PUT /users/:id(.:format) users#update + DELETE /users/:id(.:format) users#destroy + orders GET /orders(.:format) orders#index + POST /orders(.:format) orders#create + new_order GET /orders/new(.:format) orders#new + edit_order GET /orders/:id/edit(.:format) orders#edit + order GET /orders/:id(.:format) orders#show + PATCH /orders/:id(.:format) orders#update + PUT /orders/:id(.:format) orders#update + DELETE /orders/:id(.:format) orders#destroy + products GET /products(.:format) products#index + POST /products(.:format) products#creat…[+1] + new_product GET /products/new(.:format) products#new + edit_product GET /products/:id/edit(.:format) products#edit + product GET /products/:id(.:format) products#show + PATCH /products/:id(.:format) products#updat…[+1] + PUT /products/:id(.:format) products#updat…[+1] + DELETE /products/:id(.:format) products#destr…[+2] + categories GET /categories(.:format) categories#ind…[+2] + POST /categories(.:format) categories#cre…[+3] +""" diff --git a/crates/pi-shell/src/minimizer/defs/rsync.toml b/crates/pi-shell/src/minimizer/defs/rsync.toml index 93a187c81..ac6bb1d8d 100644 --- a/crates/pi-shell/src/minimizer/defs/rsync.toml +++ b/crates/pi-shell/src/minimizer/defs/rsync.toml @@ -6,9 +6,14 @@ description = "Compact rsync transfer logs" match_command = "^rsync$" strip_ansi = true strip_lines_matching = [ + "^\\s*$", "^sending incremental file list$", "^receiving incremental file list$", ] +only_on_exit = [0] +match_output = [ + { pattern = "total size is", message = "ok (synced)", unless = "(?i)(error|failed|no such file)" }, +] truncate_lines_at = 250 head_lines = 5 tail_lines = 15 @@ -18,4 +23,19 @@ on_empty = "rsync: ok" [[tests.rsync]] name = "strips incremental banner" input = "sending incremental file list\nfile1\nfile2\nsent 200 bytes received 20 bytes\ntotal size is 1024 speedup is 4.65\n" -expected = "file1\nfile2\nsent 200 bytes received 20 bytes\ntotal size is 1024 speedup is 4.65\n" +expected = "ok (synced)" + +[[tests.rsync]] +name = "successful sync short-circuits to ok (synced)" +input = "sending incremental file list\n./\nfile1.txt\nfile2.txt\n\nsent 1,234 bytes received 42 bytes 2,552.00 bytes/sec\ntotal size is 98,765 speedup is 77.31\n" +expected = "ok (synced)" + +[[tests.rsync]] +name = "errors not swallowed when total size present" +input = "rsync: [sender] error\nerror in rsync protocol data stream (code 12)\nsent 100 bytes received 200 bytes 60.00 bytes/sec\ntotal size is 1000 speedup is 3.33\n" +expected = "rsync: [sender] error\nerror in rsync protocol data stream (code 12)\nsent 100 bytes received 200 bytes 60.00 bytes/sec\ntotal size is 1000 speedup is 3.33\n" + +[[tests.rsync]] +name = "error case-insensitive not swallowed" +input = "sending incremental file list\nERROR: some error\ntotal size is 1024 speedup is 4.65\n" +expected = "ERROR: some error\ntotal size is 1024 speedup is 4.65\n" diff --git a/crates/pi-shell/src/minimizer/defs/rustc.toml b/crates/pi-shell/src/minimizer/defs/rustc.toml new file mode 100644 index 000000000..222f2bc3e --- /dev/null +++ b/crates/pi-shell/src/minimizer/defs/rustc.toml @@ -0,0 +1,87 @@ +# rustc: stateless per-line keep for direct `rustc` invocations (NOT the +# cargo-claimed path — cargo/clippy run through filters/cargo.rs). rustc is not +# Rust-claimed in mod.rs, so a TOML def is the correct home. +# +# Keep diagnostics that carry failure signal: error[E…]/error: headers, warning +# headers, the `-->` source-pointer lines that name file:line:col, the trailing +# "aborting due to" / "For more information" summary, "could not compile" +# trailers, and — critically — ICE/panic lines ("thread '…' panicked", +# "internal compiler error", "panicked at", "rustc running on …"). +# The intervening snippet/caret/label lines (` |`, ` 3 | …`, ` = note:`) are +# dropped: they are recoverable context, not signal, and the kept `-->` pointer +# already localizes the diagnostic. +# +# DELIBERATELY no on_empty: the on_empty stage is NOT exit-gated +# (pipeline.rs:330-335), so a failed compile whose error text happened to miss +# the keep-set would otherwise collapse to a fake "rustc: ok". The engine's +# ensure_success_visible prints "OK" only on exit 0, which is the correct, +# exit-gated success sentinel. + +[filters.rustc] +description = "Compact rustc output — keep diagnostics, ICE/panic, and failure trailers" +match_command = "^rustc$" +strip_ansi = true +keep_lines_matching = [ + "^error", + "^warning", + "^\\s*-->", + "aborting due to", + "For more information", + "could not compile", + "^rustc \\d", + "^thread '", + "internal compiler error", + "panicked at", +] +truncate_lines_at = 300 +max_lines = 80 + +[[tests.rustc]] +name = "borrow error keeps header and source pointer" +input = """ +error[E0382]: borrow of moved value: `s` + --> src/main.rs:4:20 + | +3 | let s = String::from("hi"); + | - move occurs because `s` has type `String`, which does not implement the `Copy` trait +4 | let _t = s; + | - value moved here +5 | println!("{s}"); + | ^^^ value borrowed here after move + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0382`. +""" +expected = "error[E0382]: borrow of moved value: `s`\n --> src/main.rs:4:20\nerror: aborting due to 1 previous error\nFor more information about this error, try `rustc --explain E0382`.\n" + +[[tests.rustc]] +name = "internal compiler error / panic is never collapsed to ok" +input = """ +warning: this is unrelated + +thread 'rustc' panicked at compiler/rustc_middle/src/ty/mod.rs:1234:13: +internal compiler error: unexpected type variable +stack backtrace: + 0: std::panicking::begin_panic + 1: rustc_middle::something +rustc 1.79.0 (129f3b996 2024-06-10) running on x86_64-unknown-linux-gnu +note: compiler flags: --crate-type bin +error: the compiler unexpectedly panicked. this is a bug. +""" +expected = "warning: this is unrelated\nthread 'rustc' panicked at compiler/rustc_middle/src/ty/mod.rs:1234:13:\ninternal compiler error: unexpected type variable\nrustc 1.79.0 (129f3b996 2024-06-10) running on x86_64-unknown-linux-gnu\nerror: the compiler unexpectedly panicked. this is a bug.\n" + +[[tests.rustc]] +name = "warning-only run keeps the warning and pointer" +input = """ +warning: unused variable: `x` + --> src/lib.rs:2:9 + | +2 | let x = 1; + | ^ help: if this is intentional, prefix it with an underscore: `_x` + | + = note: `#[warn(unused_variables)]` on by default + +warning: 1 warning emitted +""" +expected = "warning: unused variable: `x`\n --> src/lib.rs:2:9\nwarning: 1 warning emitted\n" diff --git a/crates/pi-shell/src/minimizer/defs/shopify-theme.toml b/crates/pi-shell/src/minimizer/defs/shopify-theme.toml index f8582040b..e284a038b 100644 --- a/crates/pi-shell/src/minimizer/defs/shopify-theme.toml +++ b/crates/pi-shell/src/minimizer/defs/shopify-theme.toml @@ -11,8 +11,9 @@ strip_lines_matching = [ "^Synced ", "^Uploaded ", "^Downloaded ", + "^\\s*Downloading", "^Fetching ", - "^Uploading ", + "^\\s*Uploading", "^Hashing ", "^Processing ", "^Preview your theme: ", @@ -30,3 +31,8 @@ expected = "Error: Liquid syntax error in templates/product.liquid line 5\n" name = "push success kept" input = "Fetching theme\nUploading assets/foo.js\nTheme pushed successfully" expected = "Theme pushed successfully\n" + +[[tests.shopify-theme]] +name = "strips indented downloading/uploading progress" +input = " Downloading templates/index.liquid\n Uploading assets/app.css\nTheme pulled successfully" +expected = "Theme pulled successfully\n" diff --git a/crates/pi-shell/src/minimizer/defs/skopeo.toml b/crates/pi-shell/src/minimizer/defs/skopeo.toml index 5c094d533..b453b4de5 100644 --- a/crates/pi-shell/src/minimizer/defs/skopeo.toml +++ b/crates/pi-shell/src/minimizer/defs/skopeo.toml @@ -27,3 +27,13 @@ expected = "skopeo: ok" name = "keep fatal errors" input = "Copying blob abc123 done\nFATA[0000] Error parsing image name\n" expected = "FATA[0000] Error parsing image name\n" + +[[tests.skopeo]] +name = "inspect keeps output" +input = "{\n \"Name\": \"docker.io/library/nginx\",\n \"Tag\": \"latest\",\n \"Digest\": \"sha256:abc123\",\n \"RepoTags\": [\"latest\", \"1.25\"],\n \"Created\": \"2026-01-01T00:00:00Z\"\n}\n" +expected = "{\n \"Name\": \"docker.io/library/nginx\",\n \"Tag\": \"latest\",\n \"Digest\": \"sha256:abc123\",\n \"RepoTags\": [\"latest\", \"1.25\"],\n \"Created\": \"2026-01-01T00:00:00Z\"\n}\n" + +[[tests.skopeo]] +name = "empty input returns on_empty message" +input = "" +expected = "skopeo: ok" diff --git a/crates/pi-shell/src/minimizer/defs/ssh.toml b/crates/pi-shell/src/minimizer/defs/ssh.toml index 5ec74a3e6..4da0b5956 100644 --- a/crates/pi-shell/src/minimizer/defs/ssh.toml +++ b/crates/pi-shell/src/minimizer/defs/ssh.toml @@ -6,7 +6,7 @@ description = "Strip ssh login banner and motd" match_command = "^ssh$" strip_ansi = true strip_lines_matching = [ - "^Welcome to ", + "^Welcome to .*(LTS|GNU/Linux|UNIX|Fedora|Debian|CentOS|AlmaLinux|Rocky Linux)", "^Last login:", "^Last failed login:", "^ \\* Documentation:", @@ -15,6 +15,12 @@ strip_lines_matching = [ "^The programs included with ", "^Ubuntu comes with ABSOLUTELY NO WARRANTY", "^This system has been minimized", + "^Warning: Permanently added", + "^Connection to .+ closed", + "^Authenticated to", + "^debug1:", + "^OpenSSH_", + "^Pseudo-terminal", ] max_lines = 200 @@ -27,3 +33,13 @@ expected = "hello from remote\n" name = "pure command output passthrough" input = "hello from remote\n" expected = "hello from remote\n" + +[[tests.ssh]] +name = "strips connection banners retains blank lines" +input = "Warning: Permanently added '192.168.1.10' (ED25519) to the list of known hosts.\n\ntotal 32\ndrwxr-xr-x 4 user user 4096 Mar 10 12:00 app\n-rw-r--r-- 1 user user 1234 Mar 10 11:00 config.yaml\n\nConnection to 192.168.1.10 closed.\n" +expected = "\ntotal 32\ndrwxr-xr-x 4 user user 4096 Mar 10 12:00 app\n-rw-r--r-- 1 user user 1234 Mar 10 11:00 config.yaml\n\n" + +[[tests.ssh]] +name = "verbose debug lines stripped retains blanks" +input = "debug1: Connecting to host.example.com port 22.\ndebug1: Connection established.\nAuthenticated to host.example.com ([1.2.3.4]:22).\nuptime: 12:00:00 up 42 days, load average: 0.10, 0.15, 0.12\nConnection to host.example.com closed.\n" +expected = "uptime: 12:00:00 up 42 days, load average: 0.10, 0.15, 0.12\n" diff --git a/crates/pi-shell/src/minimizer/defs/swift-build.toml b/crates/pi-shell/src/minimizer/defs/swift-build.toml index 4d30207ce..601689829 100644 --- a/crates/pi-shell/src/minimizer/defs/swift-build.toml +++ b/crates/pi-shell/src/minimizer/defs/swift-build.toml @@ -14,9 +14,14 @@ strip_lines_matching = [ "^Resolved source packages", "^Compiling \\S", "^Building for ", + "^Linking ", "^\\[\\d+/\\d+\\] Compiling ", "^\\[\\d+/\\d+\\] Emitting ", "^\\[\\d+/\\d+\\] Write ", + "^\\[\\d+/\\d+\\] Linking ", +] +match_output = [ + { pattern = "Build complete!", message = "ok (build complete)", unless = "warning:|error:|Test Suite|failed" }, ] truncate_lines_at = 300 max_lines = 80 @@ -31,3 +36,13 @@ expected = "Foo.swift:3:5: error: cannot find 'baz' in scope\nBuild failed\n" name = "noise collapses to sentinel" input = "Fetching https://github.com/foo/bar\nResolving foo\nCompiling Foo Bar.swift" expected = "swift: ok" + +[[tests.swift-build]] +name = "warnings not swallowed when Build complete present" +input = "CompileSwift normal x86_64 MyFile.swift\n/path/to/MyFile.swift:42:10: warning: unused variable 'x'\nBuild complete! (with warnings)\n" +expected = "CompileSwift normal x86_64 MyFile.swift\n/path/to/MyFile.swift:42:10: warning: unused variable 'x'\nBuild complete! (with warnings)\n" + +[[tests.swift-build]] +name = "passing swift test not short-circuited" +input = "Building for debugging...\n[1/1] Linking MyAppPackageTests\nBuild complete! (1.23s)\nTest Suite 'All tests' started at 2026-06-10 12:00:00\nTest Suite 'All tests' passed at 2026-06-10 12:00:01\n" +expected = "Build complete! (1.23s)\nTest Suite 'All tests' started at 2026-06-10 12:00:00\nTest Suite 'All tests' passed at 2026-06-10 12:00:01\n" diff --git a/crates/pi-shell/src/minimizer/defs/turbo.toml b/crates/pi-shell/src/minimizer/defs/turbo.toml index 6e6e8db2b..506316604 100644 --- a/crates/pi-shell/src/minimizer/defs/turbo.toml +++ b/crates/pi-shell/src/minimizer/defs/turbo.toml @@ -11,6 +11,8 @@ strip_lines_matching = [ "^•\\s+Running ", "^•\\s+Remote caching", "cache hit, replaying logs", + "cache (miss, executing|bypass, force executing)", + "^\\s*\\d+ packages in scope", ] truncate_lines_at = 250 max_lines = 80 @@ -25,3 +27,8 @@ expected = "app:build: > next build\n Tasks: 1 successful, 1 total\n" name = "preamble only collapses" input = "• Running build in 1 packages\n" expected = "turbo: ok" + +[[tests.turbo]] +name = "strips cache noise keeps task output and summary" +input = "app:build: cache hit, replaying logs abc123\ncache miss, executing abc456\n\n3 packages in scope\n\n> myapp:build\n\nCompiled successfully.\n\nTasks: 2 successful, 2 total (1 cached)\nDuration: 3.2s\n" +expected = "> myapp:build\nCompiled successfully.\nTasks: 2 successful, 2 total (1 cached)\nDuration: 3.2s\n" diff --git a/crates/pi-shell/src/minimizer/defs/ty.toml b/crates/pi-shell/src/minimizer/defs/ty.toml index 5935a6fd7..c89bee987 100644 --- a/crates/pi-shell/src/minimizer/defs/ty.toml +++ b/crates/pi-shell/src/minimizer/defs/ty.toml @@ -7,6 +7,8 @@ match_command = "^ty$" strip_ansi = true strip_lines_matching = [ "^\\s*$", + "^Checking \\d+ file", + "^ty \\d+\\.\\d+", ] truncate_lines_at = 250 max_lines = 80 @@ -26,3 +28,8 @@ expected = "ty: ok" name = "keeps diagnostics" input = "\nerror[invalid-type]: bad type\n --> src/foo.py:10:5\n" expected = "error[invalid-type]: bad type\n --> src/foo.py:10:5\n" + +[[tests.ty]] +name = "strips noise, keeps diagnostics" +input = "ty 0.1.0\nChecking 15 files\n\nerror[unresolved-reference]: Name `foo` used when not defined\n --> app/main.py:10:5\n\nFound 1 error, 0 warnings\n" +expected = "error[unresolved-reference]: Name `foo` used when not defined\n --> app/main.py:10:5\nFound 1 error, 0 warnings\n" diff --git a/crates/pi-shell/src/minimizer/defs/xcodebuild.toml b/crates/pi-shell/src/minimizer/defs/xcodebuild.toml index 82c4705cd..60c22148b 100644 --- a/crates/pi-shell/src/minimizer/defs/xcodebuild.toml +++ b/crates/pi-shell/src/minimizer/defs/xcodebuild.toml @@ -28,6 +28,22 @@ strip_lines_matching = [ "^\\s+cd ", "^\\s+export ", "^\\s+builtin-", + "^CodeSign\\s", + "^Signing Identity:", + "^RegisterWithLaunchServices", + "^Validate\\s", + "^ProcessProductPackaging", + "^GenerateDSYMFile", + "^LinkStoryboards", + "^PBXCp\\s", + "^SetMode\\s", + "^SetOwnerAndGroup\\s", + "^Ditto\\s", + "^CpResource\\s", + "^CpHeader\\s", + "^note: Using new build system", + "^\\s+/Applications/Xcode", + "^\\s+/usr/bin/", ] truncate_lines_at = 300 max_lines = 80 @@ -42,3 +58,13 @@ expected = "/src/Foo.swift:1:1: error: cannot find type 'Bar'\n** BUILD FAILED * name = "clean success" input = "CompileC /tmp/x.o main.m\n** BUILD SUCCEEDED **" expected = "** BUILD SUCCEEDED **\n" + +[[tests.xcodebuild]] +name = "test output keeps test results" +input = "note: Using new build system\nCompileSwift normal arm64 /Users/dev/AppTests/Tests.swift\n cd /Users/dev/App\nTest Suite 'All tests' started at 2026-03-10 12:00:00\nTest Suite 'AppTests' started at 2026-03-10 12:00:00\nTest Case '-[AppTests testExample]' passed (0.001 seconds).\nTest Case '-[AppTests testFailing]' failed (0.002 seconds).\nTest Suite 'AppTests' passed at 2026-03-10 12:00:01\nExecuted 2 tests, with 1 failure in 0.003 seconds" +expected = "Test Suite 'All tests' started at 2026-03-10 12:00:00\nTest Suite 'AppTests' started at 2026-03-10 12:00:00\nTest Case '-[AppTests testExample]' passed (0.001 seconds).\nTest Case '-[AppTests testFailing]' failed (0.002 seconds).\nTest Suite 'AppTests' passed at 2026-03-10 12:00:01\nExecuted 2 tests, with 1 failure in 0.003 seconds\n" + +[[tests.xcodebuild]] +name = "empty input returns on_empty message" +input = "" +expected = "xcodebuild: ok" diff --git a/crates/pi-shell/src/minimizer/detect.rs b/crates/pi-shell/src/minimizer/detect.rs index 90c71ec40..f0b507d48 100644 --- a/crates/pi-shell/src/minimizer/detect.rs +++ b/crates/pi-shell/src/minimizer/detect.rs @@ -12,17 +12,54 @@ pub struct CommandIdentity { /// The detector intentionally handles the common interactive subset instead /// of emulating a full shell parser. Ambiguous commands return `None` and are /// left streaming unchanged. +#[must_use] pub fn detect(command: &str) -> Option { let tokens = tokenize(command); detect_tokens(&tokens) } /// Extract command identity from an already-expanded argv vector. +#[must_use] pub fn detect_tokens(tokens: &[String]) -> Option { let tokens = strip_launch_prefix(tokens)?; let (program, rest) = tokens.split_first()?; let normalized = normalize_program(program)?; - let subcommand = detect_subcommand(&normalized, rest); + let is_docker_compose = program + .rsplit('/') + .next() + .is_some_and(|n| n.eq_ignore_ascii_case("docker-compose")); + let subcommand = if is_docker_compose { + // docker-compose v1 flags that consume a value; skip them so the + // real action (up/down/ps/logs/etc.) is found, matching docker compose + // routing in docker.rs. + first_non_global_arg( + rest, + &[ + "-f", + "--file", + "--profile", + "-p", + "--project-name", + "--env-file", + "--parallel", + "--progress", + "--project-directory", + "--workdir", + "-w", + "--ansi", + "--log-level", + "-H", + "--host", + "--tlscacert", + "--tlscert", + "--tlskey", + ], + &["--compatibility", "--dry-run", "--verbose", "-v", "--no-ansi"], + &[], + ) + } else { + detect_subcommand(&normalized, rest) + }; Some(CommandIdentity { program: normalized, subcommand }) } @@ -87,7 +124,17 @@ fn normalize_program(program: &str) -> Option { if name.is_empty() { return None; } - Some(name.to_lowercase()) + let lowered = name.to_lowercase(); + // Exact-match allowlist for Windows launcher scripts whose `.bat`/`.cmd` + // twin should dispatch identically to the bare wrapper. Kept explicit on + // purpose: a generic `.bat`/`.cmd` strip would over-match unrelated scripts + // (e.g. `foo.bat`, `deploy.cmd`). + Some(match lowered.as_str() { + "gradlew.bat" => "gradlew".to_string(), + "mvnw.cmd" => "mvnw".to_string(), + "docker-compose" => "docker".to_string(), + _ => lowered, + }) } fn skip_env_options(tokens: &[String], mut index: usize) -> Option { @@ -300,6 +347,10 @@ fn detect_subcommand(program: &str, args: &[String]) -> Option { &["--paginate", "--slurp", "--verbose"], &[], ), + // glab's clap-level globals are `-R`/`--repo` and `-g`/`--group` + // (donor rtk/src/cmds/git/glab_cmd.rs + README); both take a value, so + // skip them and their argument to reach the real subcommand. + "glab" => first_non_global_arg(args, &["-R", "--repo", "-g", "--group"], &[], &[]), "gt" => first_non_global_arg( args, &["--repo", "--cwd", "--config", "--debug-context"], @@ -336,7 +387,15 @@ fn detect_subcommand(program: &str, args: &[String]) -> Option { ], &["--yes", "--no", "--no-install", "--quiet", "--silent", "--verbose"], &[], - ), + ) + // Strip npm version qualifier from package specs (jest@latest → jest, + // @scope/pkg@1.0 → @scope/pkg). The idx > 0 guard preserves the leading + // `@` on scoped packages. This keeps version-pinned invocations routed to + // the same filter as their unpinned equivalents. + .map(|s| match s.rfind('@') { + Some(idx) if idx > 0 => s[..idx].to_string(), + _ => s, + }), "pnpm" => first_non_global_arg( args, &["--dir", "-C", "--filter", "-F", "--workspace", "--config", "--store-dir"], @@ -598,6 +657,50 @@ mod tests { assert_eq!(command.subcommand.as_deref(), Some("tsconfig.json")); } + #[test] + fn detects_gradle_and_maven_wrapper_scripts() { + let command = detect("./gradlew build").expect("gradlew command is detected"); + assert_eq!(command.program, "gradlew"); + assert_eq!(command.subcommand.as_deref(), Some("build")); + + let command = detect("gradlew.bat assembleDebug").expect("gradlew.bat normalizes to gradlew"); + assert_eq!(command.program, "gradlew"); + assert_eq!(command.subcommand.as_deref(), Some("assembledebug")); + + let command = detect("mvnw.cmd package").expect("mvnw.cmd normalizes to mvnw"); + assert_eq!(command.program, "mvnw"); + assert_eq!(command.subcommand.as_deref(), Some("package")); + } + + #[test] + fn wrapper_allowlist_does_not_strip_unrelated_bat_or_cmd() { + // The allowlist is exact-match only; arbitrary `.bat`/`.cmd` scripts keep + // their full basename so unrelated tools are not silently re-dispatched. + let command = detect("foo.bat run").expect("foo.bat command is detected"); + assert_eq!(command.program, "foo.bat"); + assert_eq!(command.subcommand.as_deref(), Some("run")); + + let command = detect("deploy.cmd go").expect("deploy.cmd command is detected"); + assert_eq!(command.program, "deploy.cmd"); + assert_eq!(command.subcommand.as_deref(), Some("go")); + } + + #[test] + fn detects_glab_subcommand_past_repo_global() { + let command = detect("glab -R owner/repo mr list").expect("glab command is detected"); + assert_eq!(command.program, "glab"); + assert_eq!(command.subcommand.as_deref(), Some("mr")); + } + + #[test] + fn default_arm_returns_first_positional_for_unknown_program() { + // Regression pin: programs without a dedicated arm fall through to the + // default branch, which returns the first non-flag token verbatim. + let command = detect("rustc main.rs").expect("rustc command is detected"); + assert_eq!(command.program, "rustc"); + assert_eq!(command.subcommand.as_deref(), Some("main.rs")); + } + #[test] fn detects_gt_through_wrappers_and_globals() { let command = detect("env GRAPHITE_TOKEN=x command gt --repo owner/repo submit --stack") @@ -701,4 +804,110 @@ fn npx_workspace_value_is_skipped_in_subcommand_detection() { let command = detect("npx -w my-workspace vitest").expect("npx with workspace is detected"); assert_eq!(command.program, "npx"); assert_eq!(command.subcommand.as_deref(), Some("vitest")); + + // version-qualified package specs are stripped to the bare tool name so + // `npx jest@latest` routes identically to `npx jest` + let command = detect("npx jest@latest --runInBand").expect("version-qualified npx detected"); + assert_eq!(command.program, "npx"); + assert_eq!(command.subcommand.as_deref(), Some("jest"), "jest@latest must normalise to jest"); + + // scoped package leading @ is preserved; only the trailing @version is stripped + let command = detect("npx @scope/pkg@1.0.0 --flag").expect("scoped npx detected"); + assert_eq!( + command.subcommand.as_deref(), + Some("@scope/pkg"), + "@scope/pkg@1.0.0 must normalise to @scope/pkg" + ); + + // unversioned scoped package is unchanged + let command = detect("npx @scope/tool").expect("unversioned scoped npx detected"); + assert_eq!( + command.subcommand.as_deref(), + Some("@scope/tool"), + "unversioned scoped package must be unchanged" + ); +} + +#[test] +fn normalizes_docker_compose_to_docker() { + let command = detect("docker-compose up").expect("docker-compose command is detected"); + assert_eq!(command.program, "docker"); + assert_eq!(command.subcommand.as_deref(), Some("up")); + + let command = detect("/usr/local/bin/docker-compose logs") + .expect("path-prefixed docker-compose is detected"); + assert_eq!(command.program, "docker"); + assert_eq!(command.subcommand.as_deref(), Some("logs")); +} + +#[test] +fn docker_composer_is_not_normalized() { + let command = detect("docker-composer up").expect("docker-composer command is detected"); + assert_eq!(command.program, "docker-composer"); + assert_eq!(command.subcommand.as_deref(), Some("up")); +} + +#[test] +fn docker_compose_with_flags_finds_real_subcommand() { + // Value-taking compose flags must be skipped so the real action is found. + let command = + detect("docker-compose -p myproj up").expect("docker-compose with -p flag is detected"); + assert_eq!(command.program, "docker"); + assert_eq!(command.subcommand.as_deref(), Some("up")); + + let command = detect("docker-compose --profile logs up") + .expect("docker-compose with --profile flag is detected"); + assert_eq!(command.program, "docker"); + assert_eq!(command.subcommand.as_deref(), Some("up")); + + let command = detect("docker-compose -f docker-compose.yml ps") + .expect("docker-compose with -f flag is detected"); + assert_eq!(command.program, "docker"); + assert_eq!(command.subcommand.as_deref(), Some("ps")); +} + +#[test] +fn docker_compose_global_value_flags_skip_correctly() { + // --log-level consumes its value; the next token is the subcommand. + let command = detect("docker-compose --log-level debug up") + .expect("docker-compose --log-level is detected"); + assert_eq!(command.program, "docker"); + assert_eq!(command.subcommand.as_deref(), Some("up")); + + // -H consumes its value. + let command = + detect("docker-compose -H tcp://host:2376 ps").expect("docker-compose -H is detected"); + assert_eq!(command.program, "docker"); + assert_eq!(command.subcommand.as_deref(), Some("ps")); + + // --host=inline also works. + let command = detect("docker-compose --host=tcp://host:2376 logs") + .expect("docker-compose --host= is detected"); + assert_eq!(command.program, "docker"); + assert_eq!(command.subcommand.as_deref(), Some("logs")); + + // --tlscacert consumes its value. + let command = detect("docker-compose --tlscacert /path/ca.pem up") + .expect("docker-compose --tlscacert is detected"); + assert_eq!(command.program, "docker"); + assert_eq!(command.subcommand.as_deref(), Some("up")); + + // --tlscert consumes its value. + let command = detect("docker-compose --tlscert /path/cert.pem ps") + .expect("docker-compose --tlscert is detected"); + assert_eq!(command.program, "docker"); + assert_eq!(command.subcommand.as_deref(), Some("ps")); + + // --tlskey consumes its value. + let command = detect("docker-compose --tlskey /path/key.pem logs") + .expect("docker-compose --tlskey is detected"); + assert_eq!(command.program, "docker"); + assert_eq!(command.subcommand.as_deref(), Some("logs")); +} + +#[test] +fn docker_compose_without_flags_still_works() { + let command = detect("docker-compose up").expect("docker-compose command is detected"); + assert_eq!(command.program, "docker"); + assert_eq!(command.subcommand.as_deref(), Some("up")); } diff --git a/crates/pi-shell/src/minimizer/engine.rs b/crates/pi-shell/src/minimizer/engine.rs index 1dae805db..d228d8d6c 100644 --- a/crates/pi-shell/src/minimizer/engine.rs +++ b/crates/pi-shell/src/minimizer/engine.rs @@ -26,6 +26,7 @@ pub enum MinimizerMode { } /// Return the minimization mode for a command. +#[must_use] pub fn mode_for(command: &str, config: &MinimizerConfig) -> MinimizerMode { match plan::analyze(command) { plan::CommandPlan::Single { .. } => { @@ -62,6 +63,7 @@ pub fn mode_for(command: &str, config: &MinimizerConfig) -> MinimizerMode { /// Return true when the command should be captured for minimization. #[allow(dead_code, reason = "test-only API surface")] +#[must_use] pub fn should_minimize(command: &str, config: &MinimizerConfig) -> bool { !matches!(mode_for(command, config), MinimizerMode::None) } @@ -77,6 +79,7 @@ pub fn should_minimize(command: &str, config: &MinimizerConfig) -> bool { /// `artifact://` reference back into the visible text before showing it /// to the agent. The minimizer itself never formats the reference — ids are /// assigned by the session store, not content-addressed. +#[must_use] pub fn apply( command: &str, captured: &str, @@ -370,6 +373,8 @@ fn program_label(program: &str) -> &'static str { program if filters::cpp::is_gtest_binary_name(program) => "gtest", "golangci-lint" => "golangci-lint", "dotnet" => "dotnet", + "mvn" | "mvnw" | "mvnw.cmd" => "mvn", + "gradle" | "gradlew" | "gradlew.bat" => "gradle", "docker" => "docker", "kubectl" => "kubectl", "helm" => "helm", @@ -508,6 +513,7 @@ fn builtin_pipelines() -> &'static PipelineRegistry { /// Expose the built-in registry's inline tests for the verify CLI surface. #[allow(dead_code, reason = "test-only API surface")] +#[must_use] pub fn verify_builtin_filters() -> Vec { pipeline::run_tests(builtin_pipelines()) } @@ -515,6 +521,7 @@ pub fn verify_builtin_filters() -> Vec { #[cfg(test)] mod tests { use std::{ + fmt::Write as _, fs, sync::atomic::{AtomicUsize, Ordering}, }; @@ -593,6 +600,71 @@ only_on_exit = [0] assert_ne!(failed.filter, "pipeline+builtin"); assert!(failed.text.contains("file changed")); } + + // Regression guards for the builtin npx catch-all def (defs/npx.toml). Its + // `match_subcommand` must exclude every subcommand owned/routed elsewhere so + // it cannot shadow `nx-wrapped` (standalone path) or overlay the Rust + // lint/test filters (overlay path). These tests fail loudly if that + // exclusion set ever desyncs from filters::supports's npx routing. + #[test] + fn npx_def_does_not_shadow_nx_wrapped() { + // `npx nx` is NOT routed by filters::supports, so apply_identity falls to + // the standalone resolve_pipeline branch. nx-wrapped (nx.toml) must win + // and strip the NX banner; the bare npx def must not claim subcommand + // `nx`. + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let input = "\n > NX Running target build for 3 projects\n\n> nx run app:build\nError: \ + build failed\n\n > NX Ran target build for 3 projects (2s)\n"; + let out = apply("npx nx build", input, 0, &cfg); + assert!( + !out.text.contains("NX Running target"), + "npx def shadowed nx-wrapped; NX banner survived: {:?}", + out.text + ); + assert!(out.text.contains("Error: build failed")); + } + #[test] + fn npx_def_does_not_overlay_routed_eslint() { + // `npx eslint` IS routed by filters::supports, so the Rust lint filter + // runs and apply_pipeline_overlay re-selects a matching pipeline. The npx + // def must NOT match subcommand `eslint`, so no overlay re-applies its + // max_lines/strip on top of the lint diagnostics. Output must equal the + // direct `eslint` invocation (same filter label, not "pipeline+builtin"). + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let mut input = String::new(); + for i in 0..120 { + let _ = writeln!(input, "/src/file{i}.ts:{i}:1 error Something is wrong rule/name"); + } + let npx = apply("npx eslint src/", &input, 1, &cfg); + let direct = apply("eslint src/", &input, 1, &cfg); + // Label differs by program token (npx -> "builtin", eslint -> "eslint"), + // but it must NOT be the overlay label and the TEXT must be the un-mutated + // lint output — same lines, no max_lines truncation. + assert_ne!( + npx.filter, "pipeline+builtin", + "npx def overlaid the routed eslint filter output" + ); + assert_eq!( + npx.text, direct.text, + "npx eslint output diverged from direct eslint (overlay mutated it)" + ); + } + #[test] + fn npx_def_fires_for_unknown_tool() { + // The def must still strip the install preamble / npm warn/notice noise + // for genuinely UNKNOWN tools (its whole purpose). cowsay is not routed + // or owned by any other def, so the npx pipeline claims it. + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let input = "Need to install the following packages:\ncowsay@1.6.0\nOk to proceed? \ + (y)\n\nnpm warn deprecated foo@1.0.0: use bar instead\n< Hello >\n"; + let out = apply("npx cowsay hello", input, 0, &cfg); + assert!(out.changed); + assert!(!out.text.contains("Need to install")); + assert!(!out.text.contains("Ok to proceed")); + assert!(!out.text.contains("npm warn")); + assert!(out.text.contains("< Hello >")); + } + #[test] fn enabled_known_filter_minimizes() { let cfg = MinimizerConfig { enabled: true, ..Default::default() }; @@ -951,6 +1023,146 @@ strip_lines_matching = [".*"] assert_eq!(out.text, "hi\n"); assert!(!out.changed); } + + // ── Rails def standalone + bundle exec re-dispatch guards ──────── + + #[test] + fn rails_db_migrate_routes_to_standalone_def() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let input = "== 20240115 CreateUsers: migrating\n-- create_table(:users)\n -> 0.0234s\n== \ + 20240115 CreateUsers: migrated\n\n== 20240116 AddIndexToOrders: migrating\n-- \ + add_index(:orders)\n -> 0.0123s\n== 20240116 AddIndexToOrders: migrated\n"; + let out = apply("rails db:migrate", input, 0, &cfg); + assert!(out.changed); + assert!(out.text.contains("✓ CreateUsers")); + assert!(out.text.contains("✓ AddIndexToOrders")); + assert!(!out.text.contains("-- create_table")); + assert!(!out.text.contains("-> 0.0234s")); + // Must NOT be an overlay label; standalone pipeline gets "pipeline". + assert_eq!(out.filter, "pipeline"); + } + + #[test] + fn rails_routes_routes_to_standalone_def() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let input = " Prefix Verb URI Pattern Controller#Action\n root GET / home#index\n"; + let out = apply("rails routes", input, 0, &cfg); + assert!(out.changed); + assert!(!out.text.contains("Prefix")); + assert!(out.text.contains("root GET")); + assert_eq!(out.filter, "pipeline"); + } + + #[test] + fn rake_routes_regression_unminimized() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let input = " Prefix Verb URI Pattern Controller#Action\n root GET / home#index\n"; + let out = apply("rake routes", input, 0, &cfg); + assert!(out.changed, "rake routes should be minimized by the rails-routes def"); + assert!(!out.text.contains("Prefix")); + assert!(out.text.contains("root GET")); + } + + #[test] + fn bundle_exec_rails_db_migrate_reaches_def() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let input = "== 20240115 CreateUsers: migrating\n-- create_table(:users)\n -> 0.0234s\n== \ + 20240115 CreateUsers: migrated\n"; + let out = apply("bundle exec rails db:migrate", input, 0, &cfg); + assert!(out.changed); + assert!(out.text.contains("CreateUsers")); + assert!(!out.text.contains("-- create_table")); + } + + #[test] + fn bundle_exec_rails_routes_reaches_def() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let input = " Prefix Verb URI Pattern Controller#Action\n root GET / home#index\n"; + let out = apply("bundle exec rails routes", input, 0, &cfg); + assert!(out.changed); + assert!(!out.text.contains("Prefix")); + assert!(out.text.contains("root GET")); + } + + #[test] + fn rails_db_migrate_no_double_truncation() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let mut input = String::new(); + for i in 0..100 { + let _ = write!( + input, + "== 20240115 Migration{i}: migrating\n-- step\n -> 0.0s\n== 20240115 Migration{i}: \ + migrated\n\n" + ); + } + let out = apply("rails db:migrate", &input, 0, &cfg); + assert!(out.changed); + // The def's max_lines=40 produces ONE truncation marker. + // filter_rake's head_tail marker ("lines omitted") must NOT appear. + assert!(!out.text.contains("lines omitted"), "double truncation detected: {:#?}", out.text); + assert!(out.text.contains("lines truncated")); + } + + #[test] + fn rails_db_migrate_keyword_in_name_not_dropped() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let input = "== 20240115 CreateTestResults: migrating\n-- create_table(:test_results)\n \ + -> 0.0234s\n== 20240115 CreateTestResults: migrated\n\n== 20240116 \ + AddIndexToOrders: migrating\n-- add_index(:orders)\n -> 0.0123s\n== 20240116 \ + AddIndexToOrders: migrated\n"; + let out = apply("rails db:migrate", input, 0, &cfg); + assert!(out.changed); + // Both migrations must survive; the old overlay-on-rake would keep only + // lines containing "test" and silently drop AddIndexToOrders. + assert!(out.text.contains("CreateTestResults"), "CreateTestResults was dropped"); + assert!(out.text.contains("AddIndexToOrders"), "AddIndexToOrders was dropped"); + } + + // Regression guards for the builtin rails defs (rails-migrate.toml, + // rails-routes.toml). Their `match_subcommand` scopes are MANDATORY: + // unscoped they would overlay the Rust minitest filter output for + // `rails test` / `rake test` and strip failure-detail lines + // ('Expected: true'). These tests fail loudly if the scope is removed. + #[test] + fn rails_def_does_not_overlay_routed_minitest() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let input = "Run options: --seed 1\n\n# Running:\n\n.F\n\n 1) Failure:\nUserTest#test_name \ + [test/models/user_test.rb:8]:\nExpected: true\n Actual: false\n\n2 runs, 2 \ + assertions, 1 failures, 0 errors, 0 skips\n"; + let rails = apply("rails test", input, 1, &cfg); + let rake = apply("rake test", input, 1, &cfg); + // Must NOT be an overlay label; minitest filter gets its own program label. + assert_ne!( + rails.filter, "pipeline+builtin", + "rails-migrate def overlaid the routed minitest filter output" + ); + assert_ne!( + rake.filter, "pipeline+builtin", + "rails-migrate def overlaid the routed minitest filter output" + ); + // Failure-detail lines must survive — the rails-migrate def's + // keep_lines_matching would drop them. + assert!(rails.text.contains("Expected: true"), "rails test dropped minitest failure detail"); + assert!(rails.text.contains("Actual: false")); + assert!(rake.text.contains("Expected: true"), "rake test dropped minitest failure detail"); + assert!(rake.text.contains("Actual: false")); + } + + #[test] + fn rails_routes_def_does_not_overlay_routed_minitest() { + // Same guard for rails-routes.toml: `match_subcommand = "^routes$"` + // must not leak to `rails test`. + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let input = "Run options: --seed 1\n\n# Running:\n\n.F\n\n 1) Failure:\nUserTest#test_name \ + [test/models/user_test.rb:8]:\nExpected: true\n Actual: false\n\n2 runs, 2 \ + assertions, 1 failures, 0 errors, 0 skips\n"; + let out = apply("rails test", input, 1, &cfg); + assert_ne!( + out.filter, "pipeline+builtin", + "rails-routes def overlaid the routed minitest filter output" + ); + assert!(out.text.contains("Expected: true"), "rails test dropped minitest failure detail"); + } } #[cfg(test)] @@ -979,7 +1191,7 @@ mod pipeline_integration_tests { } #[test] - fn pipeline_matches_gradle_via_apply() { + fn gradle_routes_to_jvm_filter_via_apply() { let cfg = MinimizerConfig::from_options(&MinimizerOptions { enabled: Some(true), ..Default::default() @@ -990,11 +1202,14 @@ mod pipeline_integration_tests { 0, &cfg, ); - assert!(out.changed, "gradle pipeline should transform"); - assert!(!out.text.contains("UP-TO-DATE")); + // gradle.toml is deleted; gradle now dispatches to the Rust jvm Build + // filter, which strips `> Task :…UP-TO-DATE` task-progress noise (the + // carried-over defs/gradle.toml behaviour, now as a Rust filter — NOT a + // TOML pipeline) and keeps the BUILD status. + assert!(out.changed, "gradle build filter strips task-progress noise"); assert!(out.text.contains("BUILD SUCCESSFUL")); - assert_eq!(out.filter, "pipeline"); - assert!(out.bytes_saved() > 0); + assert!(!out.text.contains("> Task :"), "task lines stripped; got:\n{}", out.text); + assert_eq!(out.filter, "gradle", "telemetry label routes through jvm program_label"); } #[test] diff --git a/crates/pi-shell/src/minimizer/filters/binary_tools.rs b/crates/pi-shell/src/minimizer/filters/binary_tools.rs index 8626e3052..b0c1e60e1 100644 --- a/crates/pi-shell/src/minimizer/filters/binary_tools.rs +++ b/crates/pi-shell/src/minimizer/filters/binary_tools.rs @@ -14,10 +14,12 @@ use crate::minimizer::{MinimizerCtx, MinimizerOutput, primitives}; const HEAD_LINES: usize = 50; const TAIL_LINES: usize = 20; +#[must_use] pub fn supports(program: &str, _subcommand: Option<&str>) -> bool { matches!(program, "xxd" | "strings" | "od") } +#[must_use] pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerOutput { // Kill-switch parity (M2): legacy_filters_active=true skips this // filter so callers can rollback without recompile. @@ -44,6 +46,8 @@ pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerO #[cfg(test)] mod tests { + use std::fmt::Write as _; + use super::*; use crate::minimizer::MinimizerConfig; @@ -54,7 +58,7 @@ mod tests { fn build_lines(prefix: &str, count: usize) -> String { let mut s = String::new(); for i in 0..count { - s.push_str(&format!("{prefix}{i:08x}\n")); + let _ = writeln!(s, "{prefix}{i:08x}"); } s } @@ -107,9 +111,8 @@ mod tests { #[test] fn binary_tools_legacy_filters_active_passes_through() { // Kill-switch parity (M2). - let mut cfg = MinimizerConfig::default(); - cfg.enabled = true; - cfg.legacy_filters_active = true; + let cfg = + MinimizerConfig { enabled: true, legacy_filters_active: true, ..Default::default() }; let input = build_lines("00000000: ", 5000); for prog in ["xxd", "strings", "od"] { let context = ctx(prog, "binary-tool", &cfg); diff --git a/crates/pi-shell/src/minimizer/filters/bun.rs b/crates/pi-shell/src/minimizer/filters/bun.rs index d207550e9..af86b5710 100644 --- a/crates/pi-shell/src/minimizer/filters/bun.rs +++ b/crates/pi-shell/src/minimizer/filters/bun.rs @@ -13,6 +13,7 @@ const BUN_TOOL_SUBCOMMANDS: &[&str] = &["tsc", "eslint", "biome", "next", "prettier", "prisma", "jest", "vitest", "playwright"]; const BUN_CPP_TOOL_SUBCOMMANDS: &[&str] = &["cmake", "ctest", "ninja", "gtest", "gtest-parallel"]; +#[must_use] pub fn supports(program: &str, subcommand: Option<&str>) -> bool { match program { "bun" => subcommand.is_some_and(|subcommand| { @@ -30,6 +31,7 @@ pub fn supports(program: &str, subcommand: Option<&str>) -> bool { } } +#[must_use] pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerOutput { let subcommand = ctx.subcommand; if matches!((ctx.program, subcommand), ("bun", Some(subcommand)) if is_non_exec_package_subcommand(subcommand)) diff --git a/crates/pi-shell/src/minimizer/filters/cargo.rs b/crates/pi-shell/src/minimizer/filters/cargo.rs index 894dc7aaa..71bf9dd02 100644 --- a/crates/pi-shell/src/minimizer/filters/cargo.rs +++ b/crates/pi-shell/src/minimizer/filters/cargo.rs @@ -4,6 +4,7 @@ use std::{collections::BTreeMap, fmt::Write as _}; use crate::minimizer::{MinimizerCtx, MinimizerOutput, primitives}; +#[must_use] pub fn supports(subcommand: Option<&str>) -> bool { matches!( subcommand, @@ -22,6 +23,7 @@ pub fn supports(subcommand: Option<&str>) -> bool { ) } +#[must_use] pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerOutput { let cleaned = primitives::strip_ansi(input); let text = match ctx.subcommand { @@ -61,6 +63,21 @@ fn is_compiling_noise(line: &str) -> bool { || trimmed.starts_with("Downloaded ") || trimmed.starts_with("Locking ") || trimmed.starts_with("Updating ") + // `Blocking waiting for file lock on ...` is pure progress noise when a + // concurrent cargo holds the lock (snip strips it in cargo-build/clippy). + || trimmed.starts_with("Blocking ") + || is_generated_warnings_rollup(trimmed) +} + +/// The per-crate rollup line warning: `crate` (lib) generated N warnings. +/// The individual `warning: ...` diagnostic blocks are kept; this redundant +/// tally is dropped. Clippy/install paths already skip it explicitly, so +/// stripping it here only affects build/check/doc/run condensing. +fn is_generated_warnings_rollup(trimmed: &str) -> bool { + let Some(rest) = trimmed.strip_prefix("warning: ") else { + return false; + }; + rest.contains(" generated ") && (rest.ends_with(" warnings") || rest.ends_with(" warning")) } fn failures_only(input: &str, exit_code: i32) -> String { @@ -81,6 +98,12 @@ fn failures_only(input: &str, exit_code: i32) -> String { { keep = true; } + // Passing test lines carry no failure signal — drop them unconditionally, + // even after the keep flag latches, so a later passing suite in a + // multi-suite run does not re-emit its `test ... ok` lines. + if is_passing_test_line(trimmed) { + continue; + } if keep || trimmed.starts_with("running ") { out.push_str(line); out.push('\n'); @@ -228,9 +251,16 @@ fn filter_nextest(input: &str) -> String { let mut in_failure = false; let mut summary = None; let mut canceled = false; + let mut past_summary = false; for line in input.lines() { let trimmed = line.trim(); + // Once the Summary line is seen, nextest re-lists the failing tests as a + // recap (duplicate `FAIL [...]` rows + trailing noise). Drop everything + // after it; the captured Summary line is re-emitted verbatim at the end. + if past_summary { + continue; + } if is_compiling_noise(trimmed) || trimmed.starts_with("PASS ") || trimmed.starts_with("────") @@ -241,6 +271,7 @@ fn filter_nextest(input: &str) -> String { if trimmed.starts_with("Summary [") { summary = Some(trimmed.to_string()); in_failure = false; + past_summary = true; continue; } if trimmed.starts_with("Cancelling") { @@ -418,11 +449,28 @@ fn extract_lint_rule(line: &str) -> Option { return None; } let after_note = line.strip_prefix("= note:")?.trim(); - let rest = after_note + // Attribute form: `#[warn(rule)]` / `#[deny(rule)]` / `#[allow(rule)]`. + if let Some(rest) = after_note .strip_prefix("`#[warn(") .or_else(|| after_note.strip_prefix("`#[deny(")) - .or_else(|| after_note.strip_prefix("`#[allow("))?; - Some(rest.split(")]`").next()?.to_string()) + .or_else(|| after_note.strip_prefix("`#[allow(")) + { + return Some(rest.split(")]`").next()?.to_string()); + } + // CLI form: `requested on the command line with `-W `` (also -D). + // Lints enabled this way carry no `#[warn(...)]` note, so without this + // branch they fall into the ungrouped bucket instead of grouping by rule. + let cli = after_note.strip_prefix("requested on the command line with ")?; + let flag = cli.strip_prefix('`')?.split('`').next()?.trim(); + let rule = flag + .strip_prefix("-W ") + .or_else(|| flag.strip_prefix("-D ")) + .or_else(|| flag.strip_prefix("-A "))? + .trim(); + if rule.is_empty() { + return None; + } + Some(rule.to_string()) } fn format_clippy_grouped(warnings: &[ClippyWarning], exit_code: i32) -> String { @@ -489,6 +537,46 @@ mod tests { assert!(out.text.contains("error: nope")); } + #[test] + fn build_strips_blocking_lock_and_warning_rollup() { + // `Blocking waiting for file lock` is concurrent-cargo progress noise; + // the `warning: \`crate\` (lib) generated N warnings` rollup is a + // redundant tally of the per-warning blocks, which are kept. + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = MinimizerCtx { + program: "cargo", + subcommand: Some("build"), + command: "cargo build", + config: &cfg, + }; + let input = concat!( + " Blocking waiting for file lock on build directory\n", + " Compiling foo v0.1.0\n", + "warning: unused variable: `x`\n", + " --> src/lib.rs:2:9\n", + "warning: `foo` (lib) generated 1 warning\n", + " Finished dev [unoptimized + debuginfo] target(s) in 1.2s\n", + ); + let out = filter(&ctx, input, 0); + assert!( + !out.text.contains("Blocking"), + "blocking lock noise must be stripped: {:?}", + out.text + ); + assert!( + !out.text.contains("generated 1 warning"), + "warning rollup must be stripped: {:?}", + out.text + ); + // Per-warning diagnostic block is kept. + assert!( + out.text.contains("unused variable: `x`"), + "warning block must survive: {:?}", + out.text + ); + assert!(out.text.contains("src/lib.rs:2:9"), "warning location must survive: {:?}", out.text); + } + #[test] fn drops_passing_test_lines_on_success() { let out = @@ -508,14 +596,25 @@ mod tests { #[test] fn supports_nextest_and_keeps_failures_with_summary() { assert!(supports(Some("nextest"))); + // nextest re-lists failing tests as a recap AFTER the Summary line. The + // recap `FAIL [...]` row and `error: test run failed` trailer must be + // dropped (past_summary), while the in-run FAIL block + verbatim Summary + // line survive. let out = filter_nextest( "Starting 3 tests across 1 binary\nPASS crate::ok\nFAIL crate::bad\nstdout text\nSummary \ - [0.2s] 2 tests run: 1 passed, 1 failed\nerror: test run failed\n", + [0.2s] 2 tests run: 1 passed, 1 failed\nFAIL [ 0.011s] crate::bad\nerror: test run \ + failed\n", ); assert!(!out.contains("PASS crate::ok")); assert!(out.contains("FAIL crate::bad")); assert!(out.contains("stdout text")); assert!(out.contains("Summary [0.2s] 2 tests run: 1 passed, 1 failed")); + // Post-Summary recap row and trailing noise are dropped. + assert!(!out.contains("FAIL [ 0.011s]"), "post-Summary recap must be dropped: {out:?}"); + assert!( + !out.contains("error: test run failed"), + "post-Summary trailer must be dropped: {out:?}" + ); } #[test] fn install_strips_noise_keeps_summary() { @@ -649,6 +748,56 @@ mod tests { assert!(unused_pos != clone_pos); } + #[test] + fn clippy_groups_cli_enabled_lint_via_command_line_note() { + // A lint enabled on the command line (`-W clippy::needless_return`) emits + // a `requested on the command line with` note instead of `#[warn(...)]`. + // It must still GROUP under its rule, not fall into the ungrouped bucket. + let input = concat!( + "warning: unneeded `return` statement\n", + " --> src/lib.rs:3:5\n", + " |\n", + "3 | return x;\n", + " | ^^^^^^^^^\n", + " |\n", + " = note: requested on the command line with `-W clippy::needless_return`\n", + "\n", + "warning: `foo` (lib) generated 1 warning\n", + ); + let out = filter_clippy(input, 0); + // Grouped renderer prefixes rule-grouped lines with `clippy: `. + assert!( + out.contains("clippy: clippy::needless_return"), + "CLI-enabled lint must group by rule: {out:?}" + ); + // Not emitted via the ungrouped `clippy warning:` path. + assert!(!out.contains("clippy warning:"), "CLI-enabled lint must not be ungrouped: {out:?}"); + assert!(out.contains("src/lib.rs:3:5"), "location must survive: {out:?}"); + } + + #[test] + fn extract_lint_rule_parses_note_forms() { + assert_eq!( + extract_lint_rule(" = note: `#[warn(unused_variables)]` on by default"), + Some("unused_variables".to_string()) + ); + assert_eq!( + extract_lint_rule( + "= note: requested on the command line with `-W clippy::needless_return`" + ), + Some("clippy::needless_return".to_string()) + ); + assert_eq!( + extract_lint_rule("= note: requested on the command line with `-D warnings`"), + Some("warnings".to_string()) + ); + assert_eq!( + extract_lint_rule("= note: requested on the command line with `-W dead_code`"), + Some("dead_code".to_string()) + ); + assert_eq!(extract_lint_rule("= note: some other note"), None); + } + #[test] fn clippy_compile_error_falls_back_to_build_style() { let input = concat!( @@ -747,6 +896,41 @@ mod tests { assert!(!out.text.contains("test ok_two"), "passing test lines must be stripped"); } + #[test] + fn cargo_test_multi_suite_drops_passing_lines_after_keep_latches() { + // Suite 1 fails, latching the keep flag. Suite 2 passes — its + // `test ... ok` lines must NOT leak through just because keep + // is set. Only failure evidence survives. + let input = concat!( + "running 1 tests\n", + "test suite1_bad ... FAILED\n", + "\n", + "failures:\n", + " suite1_bad\n", + "\n", + "test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured\n", + "running 2 tests\n", + "test suite2_ok_a ... ok\n", + "test suite2_ok_b ... ok\n", + "test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured\n", + ); + + let out = failures_only(input, 101); + + // Failure evidence from suite 1 survives. + assert!(out.contains("suite1_bad"), "failing test name must survive: {out:?}"); + assert!(out.contains("test result: FAILED"), "failed summary must survive: {out:?}"); + // Suite 2's passing lines must be dropped even though keep is latched. + assert!( + !out.contains("test suite2_ok_a"), + "passing line after keep latch must be dropped: {out:?}" + ); + assert!( + !out.contains("test suite2_ok_b"), + "passing line after keep latch must be dropped: {out:?}" + ); + } + #[test] fn cargo_test_success_via_filter_produces_one_line_summary() { // The token-savings contract: a full passing run must collapse to a diff --git a/crates/pi-shell/src/minimizer/filters/cloud.rs b/crates/pi-shell/src/minimizer/filters/cloud.rs index 6ce07eec9..5495585b3 100644 --- a/crates/pi-shell/src/minimizer/filters/cloud.rs +++ b/crates/pi-shell/src/minimizer/filters/cloud.rs @@ -28,10 +28,12 @@ const SENSITIVE_AWS_KEYS: &[&str] = &[ "ResponseMetadata", ]; +#[must_use] pub fn supports(program: &str, _subcommand: Option<&str>) -> bool { matches!(program, "aws" | "curl" | "wget" | "psql") } +#[must_use] pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerOutput { let cleaned = primitives::strip_ansi(input); let text = match ctx.program { @@ -708,7 +710,7 @@ fn compact_aws_cloudwatch_events(events: &[&Value]) -> String { for event in events { let ts = event .get("timestamp") - .and_then(|v| v.as_i64()) + .and_then(serde_json::Value::as_i64) .map_or_else(|| "?".to_string(), epoch_ms_to_iso); let msg = event.get("message").and_then(|v| v.as_str()).unwrap_or("?"); // Truncate long messages @@ -1479,7 +1481,8 @@ mod tests { assert!(out.text.contains("age=42")); assert!(out.text.contains("active=true")); assert!(out.text.contains("tags=[a,b]")); - assert!(out.text.contains("meta={city:Paris}")); + const META_ATTR: &str = "meta={city:Paris}"; + assert!(out.text.contains(META_ATTR)); assert!(out.text.contains("1 item(s)")); } @@ -1656,7 +1659,7 @@ mod tests { fn sensitive_aws_keys_never_leak_from_generic() { let mut fields = String::new(); for key in SENSITIVE_AWS_KEYS { - fields.push_str(&format!(r#""{key}":"LEAK_SENTINEL","#)); + let _ = write!(fields, r#""{key}":"LEAK_SENTINEL","#); } let input = format!(r#"{{"Unknowns":[{{"Name":"safe",{fields}"Status":"ok"}}]}}"#); let cfg = MinimizerConfig { enabled: true, ..Default::default() }; diff --git a/crates/pi-shell/src/minimizer/filters/cpp.rs b/crates/pi-shell/src/minimizer/filters/cpp.rs index a9c0131af..f4b777c11 100644 --- a/crates/pi-shell/src/minimizer/filters/cpp.rs +++ b/crates/pi-shell/src/minimizer/filters/cpp.rs @@ -12,14 +12,17 @@ enum CppTool { GTest, } +#[must_use] pub fn supports(program: &str, _subcommand: Option<&str>) -> bool { direct_tool(program).is_some() } +#[must_use] pub fn supports_invocation(command: &str) -> bool { command_tokens(command).any(|token| token_tool(token).is_some()) } +#[must_use] pub fn is_gtest_binary_name(program: &str) -> bool { matches!(program, "gtest" | "gtest-parallel") || program.ends_with("_test") @@ -31,6 +34,7 @@ pub fn is_gtest_binary_name(program: &str) -> bool { .is_some_and(|ext| ext.eq_ignore_ascii_case("test")) } +#[must_use] pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerOutput { let cleaned = primitives::strip_ansi(input); let tool = direct_tool(ctx.program).or_else(|| invocation_tool(ctx.command)); diff --git a/crates/pi-shell/src/minimizer/filters/docker.rs b/crates/pi-shell/src/minimizer/filters/docker.rs index 8cdffdbca..bc27d7c70 100644 --- a/crates/pi-shell/src/minimizer/filters/docker.rs +++ b/crates/pi-shell/src/minimizer/filters/docker.rs @@ -6,6 +6,7 @@ use serde_json::Value; use crate::minimizer::{MinimizerCtx, MinimizerOutput, primitives}; +#[must_use] pub fn supports(subcommand: Option<&str>) -> bool { matches!( subcommand, @@ -21,11 +22,22 @@ pub fn supports(subcommand: Option<&str>) -> bool { | "install" | "upgrade" | "template" - | "lint" + | "lint" | "apply" + | "delete" + | "rollout" + | "scale" + | "create" + | "wait" | "label" + | "annotate" + | "up" | "down" + | "start" + | "stop" | "restart" + | "rm" ) ) } +#[must_use] pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerOutput { let cleaned = primitives::strip_ansi(input); let text = match ctx.program { @@ -56,6 +68,27 @@ fn filter_docker(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> String input.to_string() }; } + // start/stop/restart/rm output is container names or confirmation messages; + // compact_build_or_progress would strip legitimate lines that happen to + // contain progress substrings (e.g. a container named "my-Downloading-app"). + if is_docker_lifecycle_command(ctx) { + return head_tail_dedup(input); + } + // docker-compose up / docker compose up (attached mode) streams container + // logs, not build progress. Lines like "Downloading", "Waiting", + // "Extracting" that appear here are real application log lines, not + // layer-pull status noise. Route through the log filter so they are + // preserved. + // + // Two detection paths: + // • legacy `docker-compose up` — detect.rs normalises the binary name to + // "docker" and sets subcommand="up" directly. + // • Compose v2 `docker compose up` — subcommand="compose", action found + // by scanning past compose global options (same pattern as the listing + // and lifecycle helpers). + if is_compose_up_command(ctx) { + return filter_docker_logs(input); + } compact_build_or_progress(input) } @@ -87,6 +120,9 @@ fn filter_kubectl(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> String Some("describe") => { primitives::head_tail_lines(&primitives::dedup_consecutive_lines(input), 120, 80) }, + Some("apply" | "delete" | "rollout" | "scale" | "create" | "wait" | "label" | "annotate") => { + head_tail_dedup(input) + }, _ => compact_build_or_progress(input), } } @@ -305,10 +341,17 @@ fn compute_pod_container_stats(status: &Value) -> (usize, usize, i32) { let mut ready = 0usize; let mut restarts = 0i32; for cs in container_statuses { - if cs.get("ready").and_then(|v| v.as_bool()).unwrap_or(false) { + if cs + .get("ready") + .and_then(serde_json::Value::as_bool) + .unwrap_or(false) + { ready += 1; } - restarts += cs.get("restartCount").and_then(|v| v.as_i64()).unwrap_or(0) as i32; + restarts += cs + .get("restartCount") + .and_then(serde_json::Value::as_i64) + .unwrap_or(0) as i32; } (ready, total, restarts) } @@ -374,15 +417,19 @@ fn format_k8s_ports(ports: Option<&Vec>) -> String { .map(|p| { let port = p .get("port") - .and_then(|v| v.as_i64()) + .and_then(serde_json::Value::as_i64) .map_or_else(|| "?".to_string(), |v| v.to_string()); let proto = p.get("protocol").and_then(|v| v.as_str()).unwrap_or("TCP"); - let node_port = p.get("nodePort").and_then(|v| v.as_i64()); + let node_port = p.get("nodePort").and_then(serde_json::Value::as_i64); let target_port = p.get("targetPort"); let target = target_port - .and_then(|v| v.as_i64()) + .and_then(serde_json::Value::as_i64) .map(|v| v.to_string()) - .or_else(|| target_port.and_then(|v| v.as_str()).map(|s| s.to_string())); + .or_else(|| { + target_port + .and_then(|v| v.as_str()) + .map(std::string::ToString::to_string) + }); match (target, node_port) { (Some(t), Some(np)) => format!("{port}/{t}:{np}->{port}/{proto}"), (Some(t), None) => format!("{port}/{t}:{port}/{proto}"), @@ -398,14 +445,65 @@ fn filter_helm(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> String { if exit_code != 0 { return input.to_string(); } + let cleaned = strip_helm_noise(input); match ctx.subcommand { - Some("list" | "ls" | "status") => compact_table(input, 20), - Some("install" | "upgrade" | "lint") => compact_build_or_progress(input), + Some("list" | "ls" | "status") => compact_table(&cleaned, 20), + Some("install" | "upgrade" | "lint") => compact_build_or_progress(&cleaned), Some("template") => input.to_string(), - _ => head_tail_dedup(input), + _ => head_tail_dedup(&cleaned), } } +fn strip_helm_noise(input: &str) -> String { + let mut out = String::new(); + for line in input.lines() { + let trimmed = line.trim_start(); + if is_glog_prefix(trimmed) { + continue; + } + if trimmed.starts_with("WARNING: Kubernetes configuration file is") { + continue; + } + out.push_str(line); + out.push('\n'); + } + out +} + +fn is_glog_prefix(line: &str) -> bool { + let bytes = line.as_bytes(); + if bytes.len() < 6 + || bytes[0] != b'W' + || bytes[5] != b' ' + || !bytes[1..5].iter().all(u8::is_ascii_digit) + { + return false; + } + // Validate month (01-12) and day (01-31) to avoid stripping legitimate + // output that happens to start with W + 4 digits + space. + let month = (bytes[1] - b'0') * 10 + (bytes[2] - b'0'); + let day = (bytes[3] - b'0') * 10 + (bytes[4] - b'0'); + if !(1..=12).contains(&month) || !(1..=31).contains(&day) { + return false; + } + // Require a time stamp (hh:mm...) after the space to distinguish real + // glog lines from space-separated table output where a release name + // happens to match W + MMDD + space. + if bytes.len() < 11 { + return false; + } + if !bytes[6].is_ascii_digit() || !bytes[7].is_ascii_digit() { + return false; + } + if bytes[8] != b':' { + return false; + } + if !bytes[9].is_ascii_digit() || !bytes[10].is_ascii_digit() { + return false; + } + true +} + /// Returns `true` when `tok` is a known docker-compose option that consumes /// the next token as its value (i.e. is space-separated, not `--flag=value`). fn compose_option_consumes_next(tok: &str) -> bool { @@ -419,7 +517,7 @@ fn compose_option_consumes_next(tok: &str) -> bool { | "--progress" | "--project-directory" | "--project-name" - | "--workdir" + | "-p" | "--workdir" | "-w" ) } @@ -501,6 +599,75 @@ fn is_compose_listing_action(command: &str) -> bool { } } +fn is_docker_lifecycle_command(ctx: &MinimizerCtx<'_>) -> bool { + matches!(ctx.subcommand, Some("start" | "stop" | "restart" | "rm")) + || ctx.subcommand == Some("compose") && is_compose_lifecycle_action(ctx.command) +} + +fn is_compose_lifecycle_action(command: &str) -> bool { + let mut tokens = command + .split_whitespace() + .skip_while(|token| *token != "compose"); + if tokens.next() != Some("compose") { + return false; + } + loop { + match tokens.next() { + None => return false, + Some(tok) + if tok.starts_with('-') && !tok.contains('=') && compose_option_consumes_next(tok) => + { + tokens.next(); // skip value + }, + Some(tok) if tok.starts_with('-') => {}, // skip boolean flag + Some(tok) => return matches!(tok, "start" | "stop" | "restart" | "rm"), + } + } +} + +/// Returns `true` when the command is an attached `docker compose up` or +/// legacy `docker-compose up` that streams container log output. +/// +/// Two forms are handled: +/// • `docker-compose up` — detect.rs normalises the binary to "docker" and +/// sets `subcommand="up"` directly; the original command still contains +/// "compose" so we can tell it apart from plain `docker build`. +/// • `docker compose up` — `subcommand="compose"`, action resolved by +/// scanning past compose global options (same logic as the listing / +/// lifecycle helpers). +fn is_compose_up_command(ctx: &MinimizerCtx<'_>) -> bool { + // Legacy docker-compose: subcommand is already the action. + if ctx.subcommand == Some("up") && ctx.command.contains("compose") { + return true; + } + // Compose v2: subcommand is "compose", scan for first non-option action. + if ctx.subcommand == Some("compose") { + return is_compose_up_action(ctx.command); + } + false +} + +fn is_compose_up_action(command: &str) -> bool { + let mut tokens = command + .split_whitespace() + .skip_while(|token| *token != "compose"); + if tokens.next() != Some("compose") { + return false; + } + loop { + match tokens.next() { + None => return false, + Some(tok) + if tok.starts_with('-') && !tok.contains('=') && compose_option_consumes_next(tok) => + { + tokens.next(); // skip value + }, + Some(tok) if tok.starts_with('-') => {}, // skip boolean flag + Some(tok) => return tok == "up", + } + } +} + fn docker_listing_requests_table(command: &str) -> bool { let mut tokens = command.split_whitespace(); while let Some(token) = tokens.next() { @@ -524,58 +691,29 @@ fn docker_format_requests_table(format: &str) -> bool { fn filter_logs(input: &str) -> String { let without_empty_runs = drop_repeated_blank_lines(input); - let deduped = primitives::dedup_consecutive_lines(&without_empty_runs); - primitives::head_tail_lines(&deduped, 120, 80) + crate::minimizer::filters::system::compact_log_lines( + &without_empty_runs, + 120, + 80, + crate::minimizer::filters::system::normalize_log_line, + ) } fn filter_docker_logs(input: &str) -> String { let without_empty_runs = drop_repeated_blank_lines(input); - let deduped = dedup_consecutive_log_lines(&without_empty_runs); - primitives::head_tail_lines(&deduped, 120, 80) + crate::minimizer::filters::system::compact_log_lines(&without_empty_runs, 120, 80, log_dedup_key) } -fn dedup_consecutive_log_lines(input: &str) -> String { - let mut out = String::new(); - let mut previous: Option<&str> = None; - let mut previous_key: Option<&str> = None; - let mut count = 0usize; - - for line in input.lines() { - let key = log_dedup_key(line); - if previous_key == Some(key) { - count += 1; - continue; - } - flush_repeated_log_line(&mut out, previous, count); - previous = Some(line); - previous_key = Some(key); - count = 1; - } - flush_repeated_log_line(&mut out, previous, count); - out -} - -fn flush_repeated_log_line(out: &mut String, line: Option<&str>, count: usize) { - let Some(line) = line else { - return; - }; - out.push_str(line); - if count > 1 { - out.push_str(" (×"); - out.push_str(&count.to_string()); - out.push(')'); - } - out.push('\n'); -} - -fn log_dedup_key(line: &str) -> &str { +fn log_dedup_key(line: &str) -> String { if let Some((service, message)) = line.split_once('|') { let service = service.trim(); if is_compose_log_service(service) { - return message.trim_start(); + let message = message.trim_start(); + let normalized = crate::minimizer::filters::system::normalize_log_line(message); + return format!("{service}|{normalized}"); } } - line + crate::minimizer::filters::system::normalize_log_line(line) } fn is_compose_log_service(value: &str) -> bool { @@ -691,8 +829,11 @@ mod tests { fn dedups_compose_service_prefixed_log_messages() { let input = "api-1 | ready\napi-2 | ready\napi | ready\nworker | busy\n"; let out = filter_docker_logs(input); - assert!(out.contains("api-1 | ready (×3)")); - assert!(out.contains("worker | busy")); + // Different services with the same message must NOT be collapsed together. + assert!(out.contains("api-1 | ready"), "distinct service must be preserved: {out}"); + assert!(out.contains("api-2 | ready"), "distinct service must be preserved: {out}"); + assert!(out.contains("api | ready"), "distinct service must be preserved: {out}"); + assert!(out.contains("worker | busy"), "distinct service must be preserved: {out}"); } #[test] @@ -706,7 +847,10 @@ mod tests { }; let input = "api-1 | ready\napi-2 | ready\napi | ready\n"; let out = filter(&compose_ctx, input, 0).text; - assert!(out.contains("api-1 | ready (×3)")); + // Per-service dedup: same message from different services stays distinct. + assert!(out.contains("api-1 | ready"), "distinct service line must be preserved: {out}"); + assert!(out.contains("api-2 | ready"), "distinct service line must be preserved: {out}"); + assert!(out.contains("api | ready"), "distinct service line must be preserved: {out}"); } #[test] @@ -759,7 +903,7 @@ mod tests { }; let mut input = String::from("NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS\n"); for idx in 0..20 { - input.push_str(&format!("svc-{idx} img command api 1m running 8080/tcp\n")); + let _ = writeln!(input, "svc-{idx} img command api 1m running 8080/tcp"); } let out = filter(&compose_ctx, &input, 0).text; assert!(out.contains("20 rows")); @@ -1079,7 +1223,7 @@ mod tests { let kubectl_ctx = ctx("kubectl", Some("get"), &cfg); let mut input = String::from("NAME STATUS\n"); for i in 0..25 { - input.push_str(&format!("pod-{} running\n", i)); + let _ = writeln!(input, "pod-{i} running"); } let out = filter(&kubectl_ctx, &input, 0).text; // Should use table compaction, not crash @@ -1199,9 +1343,360 @@ mod tests { }; let mut input = String::from("NAME READY STATUS RESTARTS AGE IP NODE\n"); for i in 0..25 { - input.push_str(&format!("pod-{i} 1/1 Running 0 1h 10.0.0.{i} node\n")); + let _ = writeln!(input, "pod-{i} 1/1 Running 0 1h 10.0.0.{i} node"); } let out = filter(&ctx, input.as_str(), 0).text; assert!(out.contains("rows"), "-owide is a table format and must be compacted, got: {out}"); } + + // ── Global normalized log dedup tests ─────────────────────────────── + + #[test] + fn dedups_non_consecutive_log_lines_globally() { + let input = "ready\nstarting\nready\nstarting\nready\ndone\n"; + let out = filter_docker_logs(input); + assert!(out.contains("ready (×3)"), "global dedup should count all occurrences: {out}"); + assert!(out.contains("starting (×2)"), "global dedup should count all occurrences: {out}"); + assert!(out.contains("done"), "global dedup should preserve unique lines: {out}"); + } + + #[test] + fn dedups_compose_service_prefixed_lines_non_consecutive() { + let input = "api-1 | ready\nworker | busy\napi-2 | ready\nworker | busy\n"; + let out = filter_docker_logs(input); + assert!( + out.contains("api-1 | ready"), + "compose service-prefixed lines should dedup per service: {out}" + ); + assert!( + out.contains("api-2 | ready"), + "compose service-prefixed lines should preserve distinct services: {out}" + ); + assert!( + out.contains("worker | busy (×2)"), + "compose same-service lines should dedup globally: {out}" + ); + } + + // ── kubectl uncovered subcommands tests ─────────────────────────────── + + #[test] + fn kubectl_apply_output_condensed() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let kubectl_ctx = ctx("kubectl", Some("apply"), &cfg); + let mut input = String::new(); + for i in 0..250 { + let _ = writeln!(input, "deployment.apps/app-{i} unchanged"); + } + let out = filter(&kubectl_ctx, &input, 0).text; + assert!( + out.contains("lines omitted") || out.contains("lines truncated"), + "kubectl apply output should be head/tail condensed: {out}" + ); + } + + // ── helm glog strip tests ─────────────────────────────────────────── + + #[test] + fn helm_list_strips_glog_warning_lines() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let helm_ctx = ctx("helm", Some("list"), &cfg); + let input = "W0115 10:30:00 warning message from internal\nNAME: my-release\nLAST DEPLOYED: \ + Mon Jan 15 10:30:00 2024\nNAMESPACE: default\nSTATUS: deployed\nREVISION: 3\n"; + let out = filter(&helm_ctx, input, 0).text; + assert!(!out.contains("W0115"), "glog W-prefixed lines should be stripped: {out}"); + assert!(out.contains("NAME: my-release"), "release info should be preserved: {out}"); + assert!(out.contains("STATUS: deployed"), "release info should be preserved: {out}"); + } + + #[test] + fn helm_list_strips_kubernetes_config_warning() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let helm_ctx = ctx("helm", Some("list"), &cfg); + let input = "WARNING: Kubernetes configuration file is group-readable\nNAME: \ + my-release\nSTATUS: deployed\n"; + let out = filter(&helm_ctx, input, 0).text; + assert!( + !out.contains("WARNING: Kubernetes configuration file"), + "Kubernetes config warning should be stripped: {out}" + ); + assert!(out.contains("NAME: my-release"), "release info should be preserved: {out}"); + } + + // ── Blocking-issue regression tests ───────────────────────────────── + + #[test] + fn docker_logs_preserves_blank_lines() { + let input = "a\n\nb\n"; + let out = filter_docker_logs(input); + assert_eq!(out, "a\n\nb\n", "blank lines must not be silently dropped: {out}"); + } + + #[test] + fn docker_logs_preserves_non_consecutive_blank_lines() { + let input = "a\n\nb\n\nc\n"; + let out = filter_docker_logs(input); + assert_eq!( + out, "a\n\nb\n\nc\n", + "non-consecutive blank lines must not be globally deduplicated: {out}" + ); + } + + #[test] + fn docker_logs_dedups_empty_compose_messages_per_service() { + let input = "api | \napi | \napi | \nworker | \nworker | \n"; + let out = filter_docker_logs(input); + assert!(out.contains("api | (×3)"), "same-service empty messages should dedup: {out}"); + assert!(out.contains("worker | (×2)"), "same-service empty messages should dedup: {out}"); + } + + #[test] + fn docker_start_preserves_container_names_with_progress_keywords() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + for sub in &["start", "stop", "restart", "rm"] { + let ctx = MinimizerCtx { + program: "docker", + subcommand: Some(sub), + command: &format!("docker {sub} my-Downloading-app"), + config: &cfg, + }; + let input = "my-Downloading-app\n"; + let out = filter(&ctx, input, 0).text; + assert_eq!( + out, input, + "docker {sub} must not strip container names matching progress heuristics" + ); + } + } + + #[test] + fn docker_compose_start_preserves_container_names_with_progress_keywords() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + for action in &["start", "stop", "restart", "rm"] { + let ctx = MinimizerCtx { + program: "docker", + subcommand: Some("compose"), + command: &format!("docker compose {action} my-Downloading-app"), + config: &cfg, + }; + let input = "my-Downloading-app\n"; + let out = filter(&ctx, input, 0).text; + assert_eq!( + out, input, + "docker compose {action} must not strip container names matching progress heuristics" + ); + } + } + + #[test] + fn helm_list_preserves_release_names_starting_with_w_digit() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let helm_ctx = ctx("helm", Some("list"), &cfg); + let input = "NAME\tNAMESPACE\nW2024-app\tdefault\nmy-app\tdefault\n"; + let out = filter(&helm_ctx, input, 0).text; + assert!( + out.contains("W2024-app"), + "release names starting with W+digits must not be stripped: {out}" + ); + assert!(out.contains("my-app"), "other releases must be preserved: {out}"); + } + + #[test] + fn glog_prefix_requires_trailing_space() { + assert!(is_glog_prefix("W0115 10:30:00 warning")); + assert!(!is_glog_prefix("W2024-app")); + assert!(!is_glog_prefix("W123")); + assert!(!is_glog_prefix("W12345")); + } + + #[test] + fn glog_prefix_rejects_invalid_month_day() { + // W2024 has month=20 (invalid) — must not be treated as glog. + assert!(!is_glog_prefix("W2024 default")); + assert!(!is_glog_prefix("W0015 10:30:00 warning")); + assert!(!is_glog_prefix("W1301 10:30:00 warning")); + assert!(!is_glog_prefix("W1232 10:30:00 warning")); + } + + #[test] + fn glog_prefix_rejects_space_separated_without_time() { + // W1231 looks like a valid glog date, but "default" is not a time stamp. + assert!(!is_glog_prefix("W1231 default")); + // Valid glog with time stamp must still pass. + assert!(is_glog_prefix("W1231 10:30:00 warning")); + } + + #[test] + fn helm_list_preserves_release_names_starting_with_w_digit_space() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let helm_ctx = ctx("helm", Some("list"), &cfg); + // W2024 default looks like a glog prefix but month=20 is invalid. + let input = "NAME\tNAMESPACE\nW2024 default\tdefault\nmy-app\tdefault\n"; + let out = filter(&helm_ctx, input, 0).text; + assert!( + out.contains("W2024 default"), + "release names like 'W2024 default' must not be stripped: {out}" + ); + assert!(out.contains("my-app"), "other releases must be preserved: {out}"); + } + + #[test] + fn helm_list_preserves_space_separated_valid_w_digit_release_names() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let helm_ctx = ctx("helm", Some("list"), &cfg); + // W1231 default has a valid month/day but lacks a time stamp, so it must + // NOT be stripped as a glog line. + let input = "NAME NAMESPACE\nW1231 default\nmy-app default\n"; + let out = filter(&helm_ctx, input, 0).text; + assert!( + out.contains("W1231 default"), + "space-separated release name W1231 must not be stripped: {out}" + ); + assert!(out.contains("my-app default"), "other releases must be preserved: {out}"); + } + + #[test] + fn docker_compose_p_project_name_routes_logs() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = MinimizerCtx { + program: "docker", + subcommand: Some("compose"), + command: "docker compose -p myproj logs api", + config: &cfg, + }; + assert!(is_log_command(&ctx), "docker compose -p myproj logs must be a log command"); + } + + #[test] + fn docker_compose_p_project_name_routes_ps() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = MinimizerCtx { + program: "docker", + subcommand: Some("compose"), + command: "docker compose -p myproj ps", + config: &cfg, + }; + assert!( + is_table_command(&ctx), + "docker compose -p myproj ps must be classified as a table command" + ); + } + + #[test] + fn docker_compose_p_project_name_routes_start() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = MinimizerCtx { + program: "docker", + subcommand: Some("compose"), + command: "docker compose -p myproj start api", + config: &cfg, + }; + assert!( + is_docker_lifecycle_command(&ctx), + "docker compose -p myproj start must be classified as a lifecycle command" + ); + } + + fn make_ctx<'a>( + program: &'a str, + subcommand: Option<&'a str>, + command: &'a str, + cfg: &'a MinimizerConfig, + ) -> MinimizerCtx<'a> { + MinimizerCtx { program, subcommand, command, config: cfg } + } + + // ── docker-compose up / docker compose up log preservation ────────────── + + #[test] + fn test_compose_up_logs_preserved() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + // Legacy docker-compose up: detect.rs sets subcommand="up", command retains + // "docker-compose". + let input = "web_1 | [2024-01-01 00:00:00] INFO Server started\ndb_1 | 2024-01-01 \ + 00:00:01 [Note] mysqld: ready for connections\n"; + let ctx = make_ctx("docker", Some("up"), "docker-compose up", &cfg); + let out = filter(&ctx, input, 0); + // Log output must not be stripped by the build-progress condenser. + assert!( + out.text.contains("Server started"), + "compose up log lines must survive (legacy docker-compose): {}", + out.text + ); + assert!( + out.text.contains("mysqld: ready for connections"), + "compose up db log lines must survive (legacy docker-compose): {}", + out.text + ); + } + + #[test] + fn test_compose_v2_up_logs_preserved() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + // Compose v2: subcommand="compose", action resolved by scanning tokens. + let input = "web_1 | [2024-01-01 00:00:00] INFO Server started\ndb_1 | 2024-01-01 \ + 00:00:01 [Note] mysqld: ready for connections\n"; + let ctx = make_ctx("docker", Some("compose"), "docker compose up", &cfg); + let out = filter(&ctx, input, 0); + assert!( + out.text.contains("Server started"), + "compose up log lines must survive (docker compose v2): {}", + out.text + ); + } + + #[test] + fn test_compose_up_with_global_flags_logs_preserved() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + // docker compose --progress plain up — global option before action. + let input = "app_1 | Downloading something\napp_1 | Waiting for db\n"; + let ctx = make_ctx("docker", Some("compose"), "docker compose --progress plain up", &cfg); + let out = filter(&ctx, input, 0); + assert!( + out.text.contains("Downloading something"), + "'Downloading' log lines must not be stripped by progress condenser: {}", + out.text + ); + assert!( + out.text.contains("Waiting for db"), + "'Waiting' log lines must not be stripped by progress condenser: {}", + out.text + ); + } + + #[test] + fn test_is_compose_up_command_both_forms() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + // Legacy form + assert!(is_compose_up_command(&make_ctx("docker", Some("up"), "docker-compose up", &cfg))); + // v2 form + assert!(is_compose_up_command(&make_ctx( + "docker", + Some("compose"), + "docker compose up", + &cfg + ))); + // v2 with global flags + assert!(is_compose_up_command(&make_ctx( + "docker", + Some("compose"), + "docker compose --progress plain up", + &cfg + ))); + // Must not match other actions + assert!(!is_compose_up_command(&make_ctx( + "docker", + Some("compose"), + "docker compose logs", + &cfg + ))); + assert!(!is_compose_up_command(&make_ctx( + "docker", + Some("compose"), + "docker compose ps", + &cfg + ))); + // Plain docker build must not be classified as compose up + assert!(!is_compose_up_command(&make_ctx("docker", Some("build"), "docker build .", &cfg))); + } } diff --git a/crates/pi-shell/src/minimizer/filters/dotnet.rs b/crates/pi-shell/src/minimizer/filters/dotnet.rs index b49c3db60..51ef76248 100644 --- a/crates/pi-shell/src/minimizer/filters/dotnet.rs +++ b/crates/pi-shell/src/minimizer/filters/dotnet.rs @@ -2,10 +2,12 @@ use crate::minimizer::{MinimizerCtx, MinimizerOutput, primitives}; +#[must_use] pub fn supports(program: &str, subcommand: Option<&str>) -> bool { program == "dotnet" && matches!(subcommand, Some("build" | "test" | "restore" | "format")) } +#[must_use] pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerOutput { let cleaned = primitives::strip_ansi(input); let text = match ctx.subcommand { @@ -27,17 +29,57 @@ fn filter_build_like(label: &str, input: &str, exit_code: i32) -> String { let mut diagnostics = String::new(); let mut summaries = String::new(); + if exit_code == 0 && matches!(label, "dotnet build" | "dotnet restore") { + let lines: Vec<&str> = input.lines().collect(); + // Find the LAST occurrence of "0 Warning(s)" followed by indented "0 Error(s)". + let mut last_match = None; + for i in 0..lines.len().saturating_sub(1) { + if lines[i].trim() == "0 Warning(s)" + && lines[i + 1].trim() == "0 Error(s)" + && lines[i + 1].starts_with(char::is_whitespace) + { + last_match = Some(i); + } + } + if let Some(i) = last_match { + // Only short-circuit if no warnings or errors appear after this pair. + let has_later_issues = lines[i + 2..].iter().any(|line| { + let trimmed = line.trim(); + let lower = trimmed.to_ascii_lowercase(); + let is_count_summary = (lower.ends_with("warning(s)") || lower.ends_with("error(s)")) + && trimmed + .split_whitespace() + .next() + .is_some_and(|first| first.chars().all(|c| c.is_ascii_digit())); + let is_later_failure = lower.starts_with("failed! ") + || lower.starts_with("failed ") + || lower.starts_with("error ") + || lower.starts_with("warning "); + is_count_summary || is_msbuild_diagnostic(trimmed) || is_later_failure + }); + if !has_later_issues { + let noun = if label == "dotnet restore" { + "restore" + } else { + "build" + }; + return format!("ok ({noun} succeeded)\n"); + } + } + } + for line in input.lines() { let trimmed = line.trim(); if trimmed.is_empty() || is_dotnet_boilerplate(trimmed) { continue; } - if is_msbuild_diagnostic(trimmed) || is_failure_line(trimmed) { - diagnostics.push_str(trimmed); - diagnostics.push('\n'); - } else if is_dotnet_summary(trimmed) { - summaries.push_str(trimmed); + let truncated = primitives::truncate_line(trimmed, primitives::CapClass::Errors.lines()); + if is_dotnet_summary(trimmed) { + summaries.push_str(&truncated); summaries.push('\n'); + } else if is_msbuild_diagnostic(trimmed) || is_failure_line(trimmed) { + diagnostics.push_str(&truncated); + diagnostics.push('\n'); } } @@ -65,10 +107,11 @@ fn filter_test(input: &str, exit_code: i32) -> String { if trimmed.is_empty() || is_dotnet_boilerplate(trimmed) { continue; } + let truncated = primitives::truncate_line(trimmed, primitives::CapClass::Errors.lines()); if is_failed_test_start(trimmed) { in_failed_test = true; - out.push_str(trimmed); + out.push_str(&truncated); out.push('\n'); continue; } @@ -77,14 +120,14 @@ fn filter_test(input: &str, exit_code: i32) -> String { if is_test_section_boundary(trimmed) { in_failed_test = false; } else { - out.push_str(trimmed); + out.push_str(&truncated); out.push('\n'); continue; } } if is_msbuild_diagnostic(trimmed) || is_failure_line(trimmed) || is_test_summary(trimmed) { - out.push_str(trimmed); + out.push_str(&truncated); out.push('\n'); } } @@ -110,11 +153,12 @@ fn filter_format(input: &str) -> String { if trimmed.is_empty() || is_dotnet_format_noise(trimmed) { continue; } + let truncated = primitives::truncate_line(trimmed, primitives::CapClass::Errors.lines()); if is_msbuild_diagnostic(trimmed) || looks_like_path(trimmed) || contains_format_signal(trimmed) { - out.push_str(trimmed); + out.push_str(&truncated); out.push('\n'); } } @@ -136,7 +180,7 @@ fn compact_format_json(input: &str) -> Option { let mut out = format!("dotnet format: {} diagnostics\n", rows.len()); for row in rows.iter().take(40) { - out.push_str(row); + out.push_str(&primitives::truncate_line(row, primitives::CapClass::Errors.lines())); out.push('\n'); } if rows.len() > 40 { @@ -215,7 +259,7 @@ fn first_string<'a>( fn first_number(map: &serde_json::Map, keys: &[&str]) -> Option { keys .iter() - .find_map(|key| map.get(*key).and_then(|value| value.as_u64())) + .find_map(|key| map.get(*key).and_then(serde_json::Value::as_u64)) } fn compact_general(input: &str) -> String { @@ -229,9 +273,7 @@ fn is_dotnet_boilerplate(line: &str) -> bool { lower.starts_with("determining projects to restore") || lower.starts_with("all projects are up-to-date for restore") || lower.starts_with("restored ") && !contains_diagnostic_signal(&lower) - || lower.starts_with(" ") && lower.contains(" -> ") || lower.starts_with("build started") - || lower.starts_with("build succeeded") || lower.starts_with("test run for ") || lower.starts_with("starting test execution") || lower.starts_with("a total of ") && lower.contains("test files matched") @@ -282,9 +324,12 @@ fn is_dotnet_summary(line: &str) -> bool { let lower = line.to_ascii_lowercase(); lower.starts_with("build failed") || lower.starts_with("restore failed") + || lower.starts_with("build succeeded") + || lower.starts_with("restore succeeded") || lower.starts_with("time elapsed") || lower.contains(" error(s)") || lower.contains(" warning(s)") + || lower.contains(" -> ") } fn is_test_summary(line: &str) -> bool { @@ -357,4 +402,181 @@ mod tests { assert!(out.contains("src/App.cs:4:9")); assert!(out.contains("IDE0055")); } + + #[test] + fn dotnet_build_success_short_circuits() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = MinimizerCtx { + program: "dotnet", + subcommand: Some("build"), + command: "dotnet build", + config: &cfg, + }; + let input = "Microsoft (R) Build Engine version 17.8.3+195e7f5a3\nCopyright (C) Microsoft \ + Corporation. All rights reserved.\n\nDetermining projects to restore...\nAll \ + projects are up-to-date for restore.\nMyApp -> \ + /home/user/MyApp/bin/Debug/net8.0/MyApp.dll\n\nBuild succeeded.\n 0 \ + Warning(s)\n 0 Error(s)\n\nTime Elapsed 00:00:02.34\n"; + let out = filter(&ctx, input, 0); + assert_eq!(out.text, "ok (build succeeded)\n"); + } + + #[test] + fn dotnet_restore_success_short_circuits() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = MinimizerCtx { + program: "dotnet", + subcommand: Some("restore"), + command: "dotnet restore", + config: &cfg, + }; + let input = "Microsoft (R) Build Engine version 17.8.3+195e7f5a3\nCopyright (C) Microsoft \ + Corporation. All rights reserved.\n\n Determining projects to restore...\n \ + All projects are up-to-date for restore.\n\n 0 Warning(s)\n 0 \ + Error(s)\n\nTime Elapsed 00:00:01.23\n"; + let out = filter(&ctx, input, 0); + assert_eq!(out.text, "ok (restore succeeded)\n"); + } + + #[test] + fn dotnet_build_unindented_summary_not_short_circuited() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = MinimizerCtx { + program: "dotnet", + subcommand: Some("build"), + command: "dotnet build", + config: &cfg, + }; + // Real warnings appear after an early unindented "0 Warning(s)" line; + // the def's regex required consecutive lines with the second indented. + let input = "pre-build validation: 0 Warning(s)\nSome other line\nsrc/Program.cs(1,1): \ + warning CS8600: Converting null literal or possible null value to non-nullable \ + type\nBuild succeeded.\n 1 Warning(s)\n 0 Error(s)\n"; + let out = filter(&ctx, input, 0); + assert!(!out.text.contains("ok (build succeeded)")); + assert!(out.text.contains("1 Warning(s)")); + } + + #[test] + fn dotnet_build_consecutive_unindented_summary_not_short_circuited() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = MinimizerCtx { + program: "dotnet", + subcommand: Some("build"), + command: "dotnet build", + config: &cfg, + }; + // The def's regex required the second line to be indented (\s+); + // consecutive unindented lines must not short-circuit. + let input = "Build succeeded.\n0 Warning(s)\n0 Error(s)\n"; + let out = filter(&ctx, input, 0); + assert!(!out.text.contains("ok (build succeeded)")); + assert!(out.text.contains("0 Warning(s)")); + } + + #[test] + fn dotnet_build_with_warnings_not_short_circuited() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = MinimizerCtx { + program: "dotnet", + subcommand: Some("build"), + command: "dotnet build", + config: &cfg, + }; + let input = "Microsoft (R) Build Engine version 17.8.3+195e7f5a3\nCopyright (C) Microsoft \ + Corporation. All rights reserved.\n\nDetermining projects to restore...\nMyApp \ + -> /home/user/MyApp/bin/Debug/net8.0/MyApp.dll\n\nBuild succeeded.\n3 \ + Warning(s)\n0 Error(s)\n\nTime Elapsed 00:00:01.87\n"; + let out = filter(&ctx, input, 0); + assert_eq!( + out.text, + "MyApp -> /home/user/MyApp/bin/Debug/net8.0/MyApp.dll\nBuild succeeded.\n3 Warning(s)\n0 \ + Error(s)\nTime Elapsed 00:00:01.87\n" + ); + } + + #[test] + fn dotnet_build_errors_preserved() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = MinimizerCtx { + program: "dotnet", + subcommand: Some("build"), + command: "dotnet build", + config: &cfg, + }; + let input = "Microsoft (R) Build Engine version 17.8.3+195e7f5a3\nCopyright (C) Microsoft \ + Corporation. All rights reserved.\n\nDetermining projects to \ + restore...\nsrc/Program.cs(10,5): error CS1002: ; expected \ + [/home/user/MyApp/MyApp.csproj]\n\nBuild FAILED.\n0 Warning(s)\n1 Error(s)\n"; + let out = filter(&ctx, input, 1); + assert_eq!( + out.text, + "dotnet build: failed\nsrc/Program.cs(10,5): error CS1002: ; expected \ + [/home/user/MyApp/MyApp.csproj]\nBuild FAILED.\n0 Warning(s)\n1 Error(s)\n" + ); + } + + #[test] + fn truncates_long_lines_in_build_output() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = MinimizerCtx { + program: "dotnet", + subcommand: Some("build"), + command: "dotnet build", + config: &cfg, + }; + let long_tail = "x".repeat(200); + let input = format!( + "src/Program.cs(1,1): error CS0000: {long_tail}\nBuild FAILED.\n 0 Warning(s)\n 1 \ + Error(s)\n" + ); + let out = filter(&ctx, &input, 1); + let line = out + .text + .lines() + .find(|l| l.starts_with("src/Program.cs")) + .unwrap(); + let prefix_len = "src/Program.cs(1,1): error CS0000: ".chars().count(); + let dropped = (prefix_len + long_tail.chars().count()) + .saturating_sub(primitives::CapClass::Errors.lines()); + assert!(line.ends_with(&format!("…[+{dropped}]"))); + } + + #[test] + fn truncates_long_lines_in_test_output() { + let long_tail = "x".repeat(200); + let input = format!("Failed TestMethod\n Stack trace: {long_tail}\nTotal tests: 1\n"); + let out = filter_test(&input, 1); + let line = out.lines().find(|l| l.starts_with("Stack trace:")).unwrap(); + let prefix_len = "Stack trace: ".chars().count(); + let dropped = (prefix_len + long_tail.chars().count()) + .saturating_sub(primitives::CapClass::Errors.lines()); + assert!(line.ends_with(&format!("…[+{dropped}]"))); + } + + #[test] + fn truncates_long_lines_in_format_text_output() { + let long_tail = "x".repeat(200); + let input = format!("src/Program.cs(1,1): warning CS8600: {long_tail}\n"); + let out = filter_format(&input); + let line = out.lines().next().unwrap(); + let prefix_len = "src/Program.cs(1,1): warning CS8600: ".chars().count(); + let dropped = (prefix_len + long_tail.chars().count()) + .saturating_sub(primitives::CapClass::Errors.lines()); + assert!(line.ends_with(&format!("…[+{dropped}]"))); + } + + #[test] + fn truncates_long_lines_in_format_json_output() { + let long_tail = "x".repeat(200); + let input = format!( + r#"{{"FileName":"src/App.cs","Changes":[{{"DiagnosticId":"IDE0055","LineNumber":4,"CharNumber":9,"FormatDescription":"Fix formatting {long_tail}"}}]}}"# + ); + let out = filter_format(&input); + let line = out.lines().find(|l| l.starts_with("src/App.cs")).unwrap(); + let prefix_len = "src/App.cs:4:9: IDE0055 - Fix formatting ".chars().count(); + let dropped = (prefix_len + long_tail.chars().count()) + .saturating_sub(primitives::CapClass::Errors.lines()); + assert!(line.ends_with(&format!("…[+{dropped}]"))); + } } diff --git a/crates/pi-shell/src/minimizer/filters/fixtures/glab/ci-trace.txt b/crates/pi-shell/src/minimizer/filters/fixtures/glab/ci-trace.txt new file mode 100644 index 000000000..a65fd8123 --- /dev/null +++ b/crates/pi-shell/src/minimizer/filters/fixtures/glab/ci-trace.txt @@ -0,0 +1,54 @@ +section_start:1711234567:prepare_executor[0K +Running with gitlab-runner 16.9.0 (656c1943) + on runner-abc123 system ID: r_defGHI456 +Using Docker executor with image node:20-alpine ... +Preparing the "docker" executor +Using Docker executor with image node:20-alpine ... +Running on runner-abc123-project-42-concurrent-0 via runner-host... +section_end:1711234570:prepare_executor[0K +section_start:1711234570:get_sources[0K +Getting source from Git repository +Fetching changes with git depth set to 20... +Initialized empty Git repository in /builds/acme/toolkit/.git/ +Created fresh repository. +Checking out abc12345 as main... +Skipping Git submodules setup +section_end:1711234575:get_sources[0K +section_start:1711234575:download_artifacts[0K +Downloading artifacts for build (job_id=98765)... +Downloading artifacts from coordinator... ok host=runner-host id=98765 responseStatus=200 OK token=abc123 +section_end:1711234578:download_artifacts[0K +section_start:1711234578:build_script[0K +$ npm ci +added 847 packages in 12s +$ npm run build +> acme-toolkit@3.2.1 build +> tsc && vite build +[36;1mvite v5.2.0[0m building for production... +[32m✓[0m 142 modules transformed. +[33m⚠[0m Some chunks are larger than 500 kB after minification. +dist/index.html 0.45 kB │ gzip: 0.29 kB +dist/assets/main-a1b2c3.js 156.78 kB │ gzip: 48.23 kB +dist/assets/style-d4e5f6.css 12.34 kB │ gzip: 3.45 kB +[32m✓[0m built in 4.56s +$ npm test +> acme-toolkit@3.2.1 test +> vitest run +[32m✓[0m src/utils.test.ts (3 tests) 45ms +[32m✓[0m src/api.test.ts (7 tests) 123ms +[31m✗[0m src/auth.test.ts (2 tests) 67ms + FAIL src/auth.test.ts > validateToken > should reject expired tokens + AssertionError: expected true to be false + at src/auth.test.ts:42:18 +Test Files 1 failed | 2 passed | 3 total +Tests 1 failed | 11 passed | 12 total +Duration 0.89s +section_end:1711234600:build_script[0K +section_start:1711234600:upload_artifacts[0K +Uploading artifacts... +Uploading artifacts as "archive" to coordinator... ok id=98765 responseStatus=201 Created token=abc123 +section_end:1711234605:upload_artifacts[0K +section_start:1711234605:cleanup_file_variables[0K +Cleaning up project directory and file based variables +section_end:1711234606:cleanup_file_variables[0K +[31;1mERROR: Job failed: exit code 1[0m diff --git a/crates/pi-shell/src/minimizer/filters/fixtures/glab/release-list.txt b/crates/pi-shell/src/minimizer/filters/fixtures/glab/release-list.txt new file mode 100644 index 000000000..a919148b1 --- /dev/null +++ b/crates/pi-shell/src/minimizer/filters/fixtures/glab/release-list.txt @@ -0,0 +1,13 @@ +Showing 10 releases on acme/toolkit. + +Name Tag Created +v3.2.1 v3.2.1 about 2 days ago +v3.2.0 v3.2.0 about 1 week ago +v3.1.0 v3.1.0 about 3 weeks ago +v3.0.0 v3.0.0 about 1 month ago +v2.5.0 v2.5.0 about 3 months ago +v2.4.1 v2.4.1 about 5 months ago +v2.4.0 v2.4.0 about 6 months ago +v2.3.0 v2.3.0 about 9 months ago +v2.2.0 v2.2.0 about 1 year ago +v2.1.0 v2.1.0 about 2 years ago diff --git a/crates/pi-shell/src/minimizer/filters/fixtures/glab/release-view.txt b/crates/pi-shell/src/minimizer/filters/fixtures/glab/release-view.txt new file mode 100644 index 000000000..88893ee37 --- /dev/null +++ b/crates/pi-shell/src/minimizer/filters/fixtures/glab/release-view.txt @@ -0,0 +1,30 @@ +Test Release v2.0 +alice_dev released this 3 days ago +abc1234 - v2.0.0 + + ## What's Changed + + - Added widget support + - Fixed authentication bug + + ### Contributors + + @alice_dev @bob_dev + + -------- + + Image: logo → https://example.com/logo.png + + + + +ASSETS +There are no assets for this release +SOURCES +https://gitlab.example.com/acme/toolkit/-/archive/v2.0.0/toolkit-v2.0.0.zip +https://gitlab.example.com/acme/toolkit/-/archive/v2.0.0/toolkit-v2.0.0.tar.gz +https://gitlab.example.com/acme/toolkit/-/archive/v2.0.0/toolkit-v2.0.0.tar.bz2 +https://gitlab.example.com/acme/toolkit/-/archive/v2.0.0/toolkit-v2.0.0.tar + + +View this release on GitLab at https://gitlab.example.com/acme/toolkit/-/releases/v2.0.0 diff --git a/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_compile_error_slice_raw.txt b/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_compile_error_slice_raw.txt new file mode 100644 index 000000000..bffb7bb9f --- /dev/null +++ b/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_compile_error_slice_raw.txt @@ -0,0 +1,33 @@ +[INFO] Scanning for projects... +[INFO] +[INFO] ----------------------< commons-cli:commons-cli >----------------------- +[INFO] Building Apache Commons CLI 1.11.1-SNAPSHOT +[INFO] from pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- compiler:3.15.0:compile (default-compile) @ commons-cli --- +[INFO] Recompiling the module because of changed source code. +[INFO] Compiling 37 source files with javac [debug release 8] to target/classes +[INFO] ------------------------------------------------------------- +[WARNING] COMPILATION WARNING : +[INFO] ------------------------------------------------------------- +[WARNING] source value 8 is obsolete and will be removed in a future release +[WARNING] target value 8 is obsolete and will be removed in a future release +[WARNING] To suppress warnings about obsolete options, use -Xlint:-options. +[INFO] 3 warnings +[INFO] ------------------------------------------------------------- +[INFO] ------------------------------------------------------------- +[ERROR] COMPILATION ERROR : +[INFO] ------------------------------------------------------------- +[ERROR] src/main/java/org/apache/commons/cli/CompileBreaker.java:[21,16] cannot find symbol + symbol: variable bar + location: class org.apache.commons.cli.CompileBreaker +[INFO] 1 error +[INFO] ------------------------------------------------------------- +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD FAILURE +[INFO] ------------------------------------------------------------------------ +[INFO] Total time: 30.631 s +[INFO] Finished at: 2026-05-21T14:59:46Z +[INFO] ------------------------------------------------------------------------ +[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.15.0:compile (default-compile) on project commons-cli: Compilation failure diff --git a/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_install_slice_raw.txt b/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_install_slice_raw.txt new file mode 100644 index 000000000..c4bb76cfd --- /dev/null +++ b/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_install_slice_raw.txt @@ -0,0 +1,44 @@ +[INFO] Scanning for projects... +[INFO] +[INFO] ----------------------< commons-cli:commons-cli >----------------------- +[INFO] Building Apache Commons CLI 1.11.1-SNAPSHOT +[INFO] from pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- compiler:3.15.0:compile (default-compile) @ commons-cli --- +[INFO] Recompiling the module because of changed source code. +[INFO] Compiling 47 source files with javac [debug parameters release 11] to target/classes +[INFO] +[INFO] --- compiler:3.15.0:testCompile (default-testCompile) @ commons-cli --- +[INFO] Recompiling the module because of changed dependency. +[INFO] Compiling 52 source files with javac [debug parameters release 11] to target/test-classes +[INFO] +[INFO] --- surefire:3.5.5:test (default-test) @ commons-cli --- +[INFO] +[INFO] ------------------------------------------------------- +[INFO] T E S T S +[INFO] ------------------------------------------------------- +[INFO] Running org.apache.commons.cli.help.UtilTest +[INFO] Tests run: 34, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.023 s -- in org.apache.commons.cli.help.UtilTest +[INFO] Running org.apache.commons.cli.DefaultParserTest +[WARNING] Tests run: 87, Failures: 0, Errors: 0, Skipped: 2, Time elapsed: 1.023 s -- in org.apache.commons.cli.DefaultParserTest +[INFO] Running org.apache.commons.cli.AlreadySelectedExceptionTest +[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.014 s -- in org.apache.commons.cli.AlreadySelectedExceptionTest +[INFO] +[INFO] Results: +[INFO] +[INFO] Tests run: 977, Failures: 0, Errors: 0, Skipped: 61 +[INFO] +[INFO] --- jar:3.5.0:jar (default-jar) @ commons-cli --- +[INFO] Building jar: target/commons-cli-1.11.1-SNAPSHOT.jar +[INFO] +[INFO] --- install:3.1.4:install (default-install) @ commons-cli --- +[INFO] Installing pom.xml to /root/.m2/repository/commons-cli/commons-cli/1.11.1-SNAPSHOT/commons-cli-1.11.1-SNAPSHOT.pom +[INFO] Installing target/commons-cli-1.11.1-SNAPSHOT.jar to /root/.m2/repository/commons-cli/commons-cli/1.11.1-SNAPSHOT/commons-cli-1.11.1-SNAPSHOT.jar +[INFO] Installing target/commons-cli-1.11.1-SNAPSHOT-sources.jar to /root/.m2/repository/commons-cli/commons-cli/1.11.1-SNAPSHOT/commons-cli-1.11.1-SNAPSHOT-sources.jar +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD SUCCESS +[INFO] ------------------------------------------------------------------------ +[INFO] Total time: 01:29 min +[INFO] Finished at: 2026-05-21T15:13:00Z +[INFO] ------------------------------------------------------------------------ diff --git a/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_locale_fr_raw.txt b/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_locale_fr_raw.txt new file mode 100644 index 000000000..ab6628439 --- /dev/null +++ b/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_locale_fr_raw.txt @@ -0,0 +1,15 @@ +[INFO] Recherche des projets... +[INFO] +[INFO] -----------------------< com.example:myapp >------------------------ +[INFO] Construction de myapp 1.0.0 +[INFO] de pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- clean:3.2.0:clean (default-clean) @ myapp --- +[INFO] Suppression de /path/to/project/target +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD ÉCHEC +[INFO] ------------------------------------------------------------------------ +[INFO] Temps total: 0.713 s +[INFO] Termine a: 2026-01-15T10:30:00Z +[INFO] ------------------------------------------------------------------------ diff --git a/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_no_pom_raw.txt b/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_no_pom_raw.txt new file mode 100644 index 000000000..ae838f4ca --- /dev/null +++ b/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_no_pom_raw.txt @@ -0,0 +1,8 @@ +[INFO] Scanning for projects... +[ERROR] The goal you specified requires a project to execute but there is no POM in this directory (/tmp). Please verify you invoked Maven from the correct directory. -> [Help 1] +[ERROR] +[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. +[ERROR] Re-run Maven using the -X switch to enable full debug logging. +[ERROR] +[ERROR] For more information about the errors and possible solutions, please read the following articles: +[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MissingProjectException diff --git a/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_quiet_fail_raw.txt b/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_quiet_fail_raw.txt new file mode 100644 index 000000000..ef5ecfbaf --- /dev/null +++ b/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_quiet_fail_raw.txt @@ -0,0 +1,27 @@ +[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.069 s <<< FAILURE! -- in x.FailTest +[ERROR] x.FailTest.this_will_fail -- Time elapsed: 0.030 s <<< FAILURE! +org.opentest4j.AssertionFailedError: deliberate failure for rtk -q filter testing ==> expected: <1> but was: <2> + at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151) + at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132) + at org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197) + at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:150) + at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:563) + at x.FailTest.this_will_fail(FailTest.java:9) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) + +[ERROR] Failures: +[ERROR] FailTest.this_will_fail:9 deliberate failure for rtk -q filter testing ==> expected: <1> but was: <2> +[ERROR] Tests run: 6, Failures: 1, Errors: 0, Skipped: 0 +[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:3.5.5:test (default-test) on project mvnq: There are test failures. +[ERROR] +[ERROR] See /tmp/mvnq/target/surefire-reports for the individual test results. +[ERROR] See dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream. +[ERROR] -> [Help 1] +[ERROR] +[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. +[ERROR] Re-run Maven using the -X switch to enable full debug logging. +[ERROR] +[ERROR] For more information about the errors and possible solutions, please read the following articles: +[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException diff --git a/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_reactor_fail_slice_raw.txt b/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_reactor_fail_slice_raw.txt new file mode 100644 index 000000000..f76f94875 --- /dev/null +++ b/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_reactor_fail_slice_raw.txt @@ -0,0 +1,87 @@ +[INFO] Scanning for projects... +[INFO] ------------------------------------------------------------------------ +[INFO] Reactor Build Order: +[INFO] +[INFO] multi-module-skeleton [pom] +[INFO] child-a [jar] +[INFO] child-b [jar] +[INFO] +[INFO] ---------------< com.example.rtk:multi-module-skeleton >---------------- +[INFO] Building multi-module-skeleton 1.0.0-SNAPSHOT [1/3] +[INFO] from pom.xml +[INFO] --------------------------------[ pom ]--------------------------------- +[INFO] +[INFO] --- install:3.1.2:install (default-install) @ multi-module-skeleton --- +[INFO] Installing /tmp/reactor/pom.xml to /home/user/.m2/repository/com/example/rtk/multi-module-skeleton/1.0.0-SNAPSHOT/multi-module-skeleton-1.0.0-SNAPSHOT.pom +[INFO] +[INFO] ----------------------< com.example.rtk:child-a >----------------------- +[INFO] Building child-a 1.0.0-SNAPSHOT [2/3] +[INFO] from child-a/pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- resources:3.3.1:resources (default-resources) @ child-a --- +[INFO] skip non existing resourceDirectory /tmp/reactor/child-a/src/main/resources +[INFO] +[INFO] --- compiler:3.13.0:compile (default-compile) @ child-a --- +[INFO] Nothing to compile - all classes are up to date. +[INFO] +[INFO] --- resources:3.3.1:testResources (default-testResources) @ child-a --- +[INFO] skip non existing resourceDirectory /tmp/reactor/child-a/src/test/resources +[INFO] +[INFO] --- compiler:3.13.0:testCompile (default-testCompile) @ child-a --- +[INFO] No sources to compile +[INFO] +[INFO] --- surefire:2.17:test (default-test) @ child-a --- +[INFO] No tests to run. +[INFO] +[INFO] --- jar:3.1.2:jar (default-jar) @ child-a --- +[INFO] +[INFO] --- install:3.1.2:install (default-install) @ child-a --- +[INFO] Installing /tmp/reactor/child-a/pom.xml to /home/user/.m2/repository/com/example/rtk/child-a/1.0.0-SNAPSHOT/child-a-1.0.0-SNAPSHOT.pom +[INFO] Installing /tmp/reactor/child-a/target/child-a-1.0.0-SNAPSHOT.jar to /home/user/.m2/repository/com/example/rtk/child-a/1.0.0-SNAPSHOT/child-a-1.0.0-SNAPSHOT.jar +[INFO] +[INFO] ----------------------< com.example.rtk:child-b >----------------------- +[INFO] Building child-b 1.0.0-SNAPSHOT [3/3] +[INFO] from child-b/pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- resources:3.3.1:resources (default-resources) @ child-b --- +[INFO] skip non existing resourceDirectory /tmp/reactor/child-b/src/main/resources +[INFO] +[INFO] --- compiler:3.13.0:compile (default-compile) @ child-b --- +[INFO] Recompiling the module because of changed source code. +[INFO] Compiling 1 source file with javac [debug target 21] to target/classes +[INFO] ------------------------------------------------------------- +[ERROR] COMPILATION ERROR : +[INFO] ------------------------------------------------------------- +[ERROR] /tmp/reactor/child-b/src/main/java/Empty.java:[1,22] cannot find symbol + symbol: class BogusType + location: class Empty +[INFO] 1 error +[INFO] ------------------------------------------------------------- +[INFO] ------------------------------------------------------------------------ +[INFO] Reactor Summary for multi-module-skeleton 1.0.0-SNAPSHOT: +[INFO] +[INFO] multi-module-skeleton .............................. SUCCESS [ 0.369 s] +[INFO] child-a ............................................ SUCCESS [ 1.657 s] +[INFO] child-b ............................................ FAILURE [ 0.940 s] +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD FAILURE +[INFO] ------------------------------------------------------------------------ +[INFO] Total time: 3.193 s +[INFO] Finished at: 2026-05-25T12:11:41-03:00 +[INFO] ------------------------------------------------------------------------ +[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.13.0:compile (default-compile) on project child-b: Compilation failure +[ERROR] /tmp/reactor/child-b/src/main/java/Empty.java:[1,22] cannot find symbol +[ERROR] symbol: class BogusType +[ERROR] location: class Empty +[ERROR] -> [Help 1] +[ERROR] +[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. +[ERROR] Re-run Maven using the -X switch to enable full debug logging. +[ERROR] +[ERROR] For more information about the errors and possible solutions, please read the following articles: +[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException +[ERROR] +[ERROR] After correcting the problems, you can resume the build with the command +[ERROR] mvn -rf :child-b diff --git a/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_reactor_pass_slice_raw.txt b/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_reactor_pass_slice_raw.txt new file mode 100644 index 000000000..dee564175 --- /dev/null +++ b/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_reactor_pass_slice_raw.txt @@ -0,0 +1,79 @@ +[INFO] Scanning for projects... +[INFO] ------------------------------------------------------------------------ +[INFO] Reactor Build Order: +[INFO] +[INFO] multi-module-skeleton [pom] +[INFO] child-a [jar] +[INFO] child-b [jar] +[INFO] +[INFO] ---------------< com.example.rtk:multi-module-skeleton >---------------- +[INFO] Building multi-module-skeleton 1.0.0-SNAPSHOT [1/3] +[INFO] from pom.xml +[INFO] --------------------------------[ pom ]--------------------------------- +[INFO] +[INFO] --- install:3.1.2:install (default-install) @ multi-module-skeleton --- +[INFO] Installing /tmp/reactor/pom.xml to /home/user/.m2/repository/com/example/rtk/multi-module-skeleton/1.0.0-SNAPSHOT/multi-module-skeleton-1.0.0-SNAPSHOT.pom +[INFO] +[INFO] ----------------------< com.example.rtk:child-a >----------------------- +[INFO] Building child-a 1.0.0-SNAPSHOT [2/3] +[INFO] from child-a/pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- resources:3.3.1:resources (default-resources) @ child-a --- +[INFO] skip non existing resourceDirectory /tmp/reactor/child-a/src/main/resources +[INFO] +[INFO] --- compiler:3.13.0:compile (default-compile) @ child-a --- +[INFO] Nothing to compile - all classes are up to date. +[INFO] +[INFO] --- resources:3.3.1:testResources (default-testResources) @ child-a --- +[INFO] skip non existing resourceDirectory /tmp/reactor/child-a/src/test/resources +[INFO] +[INFO] --- compiler:3.13.0:testCompile (default-testCompile) @ child-a --- +[INFO] No sources to compile +[INFO] +[INFO] --- surefire:2.17:test (default-test) @ child-a --- +[INFO] No tests to run. +[INFO] +[INFO] --- jar:3.1.2:jar (default-jar) @ child-a --- +[INFO] +[INFO] --- install:3.1.2:install (default-install) @ child-a --- +[INFO] Installing /tmp/reactor/child-a/pom.xml to /home/user/.m2/repository/com/example/rtk/child-a/1.0.0-SNAPSHOT/child-a-1.0.0-SNAPSHOT.pom +[INFO] Installing /tmp/reactor/child-a/target/child-a-1.0.0-SNAPSHOT.jar to /home/user/.m2/repository/com/example/rtk/child-a/1.0.0-SNAPSHOT/child-a-1.0.0-SNAPSHOT.jar +[INFO] +[INFO] ----------------------< com.example.rtk:child-b >----------------------- +[INFO] Building child-b 1.0.0-SNAPSHOT [3/3] +[INFO] from child-b/pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- resources:3.3.1:resources (default-resources) @ child-b --- +[INFO] skip non existing resourceDirectory /tmp/reactor/child-b/src/main/resources +[INFO] +[INFO] --- compiler:3.13.0:compile (default-compile) @ child-b --- +[INFO] Nothing to compile - all classes are up to date. +[INFO] +[INFO] --- resources:3.3.1:testResources (default-testResources) @ child-b --- +[INFO] skip non existing resourceDirectory /tmp/reactor/child-b/src/test/resources +[INFO] +[INFO] --- compiler:3.13.0:testCompile (default-testCompile) @ child-b --- +[INFO] No sources to compile +[INFO] +[INFO] --- surefire:2.17:test (default-test) @ child-b --- +[INFO] No tests to run. +[INFO] +[INFO] --- jar:3.1.2:jar (default-jar) @ child-b --- +[INFO] +[INFO] --- install:3.1.2:install (default-install) @ child-b --- +[INFO] Installing /tmp/reactor/child-b/pom.xml to /home/user/.m2/repository/com/example/rtk/child-b/1.0.0-SNAPSHOT/child-b-1.0.0-SNAPSHOT.pom +[INFO] Installing /tmp/reactor/child-b/target/child-b-1.0.0-SNAPSHOT.jar to /home/user/.m2/repository/com/example/rtk/child-b/1.0.0-SNAPSHOT/child-b-1.0.0-SNAPSHOT.jar +[INFO] ------------------------------------------------------------------------ +[INFO] Reactor Summary for multi-module-skeleton 1.0.0-SNAPSHOT: +[INFO] +[INFO] multi-module-skeleton .............................. SUCCESS [ 0.353 s] +[INFO] child-a ............................................ SUCCESS [ 1.676 s] +[INFO] child-b ............................................ SUCCESS [ 0.069 s] +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD SUCCESS +[INFO] ------------------------------------------------------------------------ +[INFO] Total time: 2.284 s +[INFO] Finished at: 2026-05-25T12:11:31-03:00 +[INFO] ------------------------------------------------------------------------ diff --git a/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_test_compile_fail_slice_raw.txt b/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_test_compile_fail_slice_raw.txt new file mode 100644 index 000000000..148e8cd6c --- /dev/null +++ b/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_test_compile_fail_slice_raw.txt @@ -0,0 +1,29 @@ +[INFO] Scanning for projects... +[INFO] +[INFO] ----------------------< commons-cli:commons-cli >----------------------- +[INFO] Building Apache Commons CLI 1.11.1-SNAPSHOT +[INFO] from pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- compiler:3.15.0:compile (default-compile) @ commons-cli --- +[INFO] Recompiling the module because of changed source code. +[INFO] Compiling 37 source files with javac [debug release 8] to target/classes +[INFO] ------------------------------------------------------------- +[ERROR] COMPILATION ERROR : +[INFO] ------------------------------------------------------------- +[ERROR] src/main/java/org/apache/commons/cli/CompileBreaker.java:[21,16] cannot find symbol + symbol: variable bar + location: class org.apache.commons.cli.CompileBreaker +[INFO] 1 error +[INFO] ------------------------------------------------------------- +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD FAILURE +[INFO] ------------------------------------------------------------------------ +[INFO] Total time: 3.214 s +[INFO] Finished at: 2026-05-21T15:02:31Z +[INFO] ------------------------------------------------------------------------ +[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.15.0:compile (default-compile) on project commons-cli: Compilation failure +[ERROR] /home/user/commons-cli/src/main/java/org/apache/commons/cli/CompileBreaker.java:[21,16] cannot find symbol +[ERROR] symbol: variable bar +[ERROR] location: class org.apache.commons.cli.CompileBreaker +[ERROR] -> [Help 1] diff --git a/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_test_fail_slice_raw.txt b/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_test_fail_slice_raw.txt new file mode 100644 index 000000000..4af9af21a --- /dev/null +++ b/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_test_fail_slice_raw.txt @@ -0,0 +1,46 @@ +[INFO] Scanning for projects... +[INFO] +[INFO] ----------------------< commons-cli:commons-cli >----------------------- +[INFO] Building Apache Commons CLI 1.11.1-SNAPSHOT +[INFO] from pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- surefire:3.5.5:test (default-test) @ commons-cli --- +[INFO] +[INFO] ------------------------------------------------------- +[INFO] T E S T S +[INFO] ------------------------------------------------------- +[INFO] Running org.apache.commons.cli.SolrCliTest +[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 s -- in org.apache.commons.cli.SolrCliTest +[INFO] Running org.apache.commons.cli.RtkInducedFailTest +[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.033 s <<< FAILURE! -- in org.apache.commons.cli.RtkInducedFailTest +[ERROR] org.apache.commons.cli.RtkInducedFailTest.rtkInducedFailure -- Time elapsed: 0.025 s <<< FAILURE! +org.opentest4j.AssertionFailedError: expected: but was: + at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151) + at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132) + at org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197) + at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182) + at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:177) + at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:1145) + at org.apache.commons.cli.RtkInducedFailTest.rtkInducedFailure(RtkInducedFailTest.java:25) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) + +[INFO] Running org.apache.commons.cli.PatternOptionBuilderTest +[INFO] Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.066 s -- in org.apache.commons.cli.PatternOptionBuilderTest +[INFO] +[INFO] Results: +[INFO] +[ERROR] Failures: +[ERROR] RtkInducedFailTest.rtkInducedFailure:25 expected: but was: +[INFO] +[ERROR] Tests run: 978, Failures: 1, Errors: 0, Skipped: 61 +[INFO] +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD FAILURE +[INFO] ------------------------------------------------------------------------ +[INFO] Total time: 01:05 min +[INFO] Finished at: 2026-05-21T14:57:09Z +[INFO] ------------------------------------------------------------------------ +[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:3.5.5:test (default-test) on project commons-cli: There are test failures. diff --git a/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_test_multifail_slice_raw.txt b/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_test_multifail_slice_raw.txt new file mode 100644 index 000000000..05f2c5c9b --- /dev/null +++ b/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_test_multifail_slice_raw.txt @@ -0,0 +1,70 @@ +[INFO] Scanning for projects... +[INFO] +[INFO] -----------------< com.example.rtk:multifail-skeleton >----------------- +[INFO] Building multifail-skeleton 1.0.0-SNAPSHOT +[INFO] from pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- surefire:3.5.5:test (default-test) @ multifail-skeleton --- +[INFO] +[INFO] ------------------------------------------------------- +[INFO] T E S T S +[INFO] ------------------------------------------------------- +[INFO] Running com.example.rtk.CalcTest +[ERROR] Tests run: 3, Failures: 1, Errors: 1, Skipped: 0, Time elapsed: 0.108 s <<< FAILURE! -- in com.example.rtk.CalcTest +[ERROR] com.example.rtk.CalcTest.failOne -- Time elapsed: 0.050 s <<< FAILURE! +org.opentest4j.AssertionFailedError: failOne: addition should equal five ==> expected: <5> but was: <4> + at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151) + at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132) + at org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197) + at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:150) + at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:563) + at com.example.rtk.CalcTest.failOne(CalcTest.java:12) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) + +[ERROR] com.example.rtk.CalcTest.failTwo -- Time elapsed: 0.006 s <<< ERROR! +java.lang.IllegalStateException: failTwo: induced error for fixture capture + at com.example.rtk.CalcTest.failTwo(CalcTest.java:17) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) + +[INFO] Running com.example.rtk.BoomTest +[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.006 s <<< FAILURE! -- in com.example.rtk.BoomTest +[ERROR] com.example.rtk.BoomTest.boom -- Time elapsed: 0.004 s <<< ERROR! +java.lang.IllegalStateException: boom: errors-only class for fixture capture + at com.example.rtk.BoomTest.boom(BoomTest.java:8) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) + +[INFO] +[INFO] Results: +[INFO] +[ERROR] Failures: +[ERROR] CalcTest.failOne:12 failOne: addition should equal five ==> expected: <5> but was: <4> +[ERROR] Errors: +[ERROR] BoomTest.boom:8 IllegalState boom: errors-only class for fixture capture +[ERROR] CalcTest.failTwo:17 IllegalState failTwo: induced error for fixture capture +[INFO] +[ERROR] Tests run: 4, Failures: 1, Errors: 2, Skipped: 0 +[INFO] +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD FAILURE +[INFO] ------------------------------------------------------------------------ +[INFO] Total time: 3.171 s +[INFO] Finished at: 2026-06-06T10:53:18-03:00 +[INFO] ------------------------------------------------------------------------ +[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:3.5.5:test (default-test) on project multifail-skeleton: There are test failures. +[ERROR] +[ERROR] See /home/user/projetos/rtk/tests/fixtures/multifail-skeleton/target/surefire-reports for the individual test results. +[ERROR] See dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream. +[ERROR] -> [Help 1] +[ERROR] +[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. +[ERROR] Re-run Maven using the -X switch to enable full debug logging. +[ERROR] +[ERROR] For more information about the errors and possible solutions, please read the following articles: +[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException diff --git a/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_test_pass_slice_raw.txt b/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_test_pass_slice_raw.txt new file mode 100644 index 000000000..99c782416 --- /dev/null +++ b/crates/pi-shell/src/minimizer/filters/fixtures/jvm/mvn_test_pass_slice_raw.txt @@ -0,0 +1,33 @@ +[INFO] Scanning for projects... +[INFO] +[INFO] ----------------------< commons-cli:commons-cli >----------------------- +[INFO] Building Apache Commons CLI 1.11.1-SNAPSHOT +[INFO] from pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- surefire:3.5.5:test (default-test) @ commons-cli --- +[INFO] +[INFO] ------------------------------------------------------- +[INFO] T E S T S +[INFO] ------------------------------------------------------- +[INFO] Running org.apache.commons.cli.help.UtilTest +[INFO] Tests run: 34, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.023 s -- in org.apache.commons.cli.help.UtilTest +[INFO] Running org.apache.commons.cli.help.TextStyleTest +[INFO] Tests run: 13, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.240 s -- in org.apache.commons.cli.help.TextStyleTest +[INFO] Running org.apache.commons.cli.DefaultParserTest +[WARNING] Tests run: 87, Failures: 0, Errors: 0, Skipped: 2, Time elapsed: 1.023 s -- in org.apache.commons.cli.DefaultParserTest +[INFO] Running org.apache.commons.cli.ConverterTests +[INFO] Tests run: 14, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.204 s -- in org.apache.commons.cli.ConverterTests +[INFO] Running org.apache.commons.cli.AlreadySelectedExceptionTest +[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.014 s -- in org.apache.commons.cli.AlreadySelectedExceptionTest +[INFO] +[INFO] Results: +[INFO] +[INFO] Tests run: 977, Failures: 0, Errors: 0, Skipped: 61 +[INFO] +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD SUCCESS +[INFO] ------------------------------------------------------------------------ +[INFO] Total time: 01:14 min +[INFO] Finished at: 2026-05-21T14:54:30Z +[INFO] ------------------------------------------------------------------------ diff --git a/crates/pi-shell/src/minimizer/filters/generic.rs b/crates/pi-shell/src/minimizer/filters/generic.rs index 92159fef6..0d7893272 100644 --- a/crates/pi-shell/src/minimizer/filters/generic.rs +++ b/crates/pi-shell/src/minimizer/filters/generic.rs @@ -2,6 +2,7 @@ use crate::minimizer::{MinimizerCtx, MinimizerOutput, primitives}; +#[must_use] pub fn filter(_ctx: &MinimizerCtx<'_>, input: &str, _exit_code: i32) -> MinimizerOutput { let stripped = primitives::strip_ansi(input); let deduped = primitives::dedup_consecutive_lines(&stripped); diff --git a/crates/pi-shell/src/minimizer/filters/gh.rs b/crates/pi-shell/src/minimizer/filters/gh.rs index 9a7fa19c2..7ca39e0b3 100644 --- a/crates/pi-shell/src/minimizer/filters/gh.rs +++ b/crates/pi-shell/src/minimizer/filters/gh.rs @@ -1,7 +1,10 @@ //! GitHub CLI output filters. +use std::fmt::Write as _; + use crate::minimizer::{MinimizerCtx, MinimizerOutput, primitives}; +#[must_use] pub fn supports(subcommand: Option<&str>) -> bool { matches!( subcommand, @@ -18,6 +21,7 @@ pub fn supports(subcommand: Option<&str>) -> bool { ) } +#[must_use] pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerOutput { if preserves_raw_mode(ctx) { return MinimizerOutput::passthrough(input); @@ -25,9 +29,15 @@ pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerO let cleaned = primitives::strip_ansi(input); let text = match ctx.subcommand { + Some("pr") if primitives::command_has_ordered_tokens(ctx.command, "pr", "checks") => { + match filter_pr_checks(&cleaned) { + Some(summary) => summary, + None => filter_pr_issue(&cleaned, exit_code), + } + }, Some("pr" | "issue") => filter_pr_issue(&cleaned, exit_code), Some("run" | "workflow") => filter_run(&cleaned, exit_code), - _ => head_tail_dedup(&cleaned), + _ => primitives::head_tail_dedup(&cleaned), }; if text == input { @@ -41,51 +51,122 @@ fn preserves_raw_mode(ctx: &MinimizerCtx<'_>) -> bool { match ctx.subcommand { Some("api") => true, Some("run") => { - command_has_ordered_tokens(ctx.command, "run", "view") - && command_has_any_token(ctx.command, &["--log", "--log-failed", "--json"]) + primitives::command_has_ordered_tokens(ctx.command, "run", "view") + && primitives::command_has_any_token(ctx.command, &["--log", "--log-failed", "--json"]) }, - Some("pr") if command_has_ordered_tokens(ctx.command, "pr", "diff") => true, - Some("pr") if command_has_ordered_tokens(ctx.command, "pr", "status") => { - command_has_any_token(ctx.command, &["--web", "--jq", "--template"]) + Some("pr") if primitives::command_has_ordered_tokens(ctx.command, "pr", "checks") => { + // `--watch` re-renders the whole check table each `--interval`/-i + // (default 10s) until checks finish; the captured buffer is then + // dozens of concatenated frames. `filter_pr_checks` counts one glyph + // per row per frame, so it would report counts x frames and let + // duplicate failed rows exhaust FAILED_ROW_CAP, hiding distinct later + // failures. A watch is an explicit live view -- pass it through raw + // instead of summarizing a multi-frame buffer. (--json/-w break the + // table shape outright.) + primitives::command_has_any_token(ctx.command, &[ + "--json", + "--web", + "-w", + "--jq", + "--template", + "--watch", + "--interval", + "-i", + ]) + }, + Some("pr") if primitives::command_has_ordered_tokens(ctx.command, "pr", "diff") => true, + Some("pr") if primitives::command_has_ordered_tokens(ctx.command, "pr", "status") => { + primitives::command_has_any_token(ctx.command, &["--web", "--jq", "--template"]) }, Some(subcommand @ ("pr" | "issue")) => { - command_has_ordered_tokens(ctx.command, subcommand, "view") - && command_has_any_token(ctx.command, &["--json", "--jq", "--comments"]) + primitives::command_has_ordered_tokens(ctx.command, subcommand, "view") + && primitives::command_has_any_token(ctx.command, &["--json", "--jq", "--comments"]) }, _ => false, } } -fn command_has_ordered_tokens(command: &str, first: &str, second: &str) -> bool { - let mut saw_first = false; - for part in command.split_whitespace() { - if saw_first && part == second { - return true; - } - if part == first { - saw_first = true; - } - } - false -} - -fn command_has_any_token(command: &str, tokens: &[&str]) -> bool { - command.split_whitespace().any(|part| { - tokens.iter().any(|token| { - part == *token - || part - .strip_prefix(*token) - .is_some_and(|suffix| suffix.starts_with('=')) - }) - }) -} - fn filter_pr_issue(input: &str, exit_code: i32) -> String { if exit_code != 0 { - return head_tail_dedup(input); + return primitives::head_tail_dedup(input); } let markdown_filtered = filter_markdown_noise(input); - head_tail_dedup(&markdown_filtered) + primitives::head_tail_dedup(&markdown_filtered) +} + +/// Summarize the DEFAULT (non-JSON) `gh pr checks` table. +/// +/// Default human output is a tab-separated table: +/// `\t\t\t` where the leading status glyph is +/// `✓`/`X`/`*`/`-` (pass/fail/pending/skipping). We re-derive against this real +/// layout — NOT rtk's `[ok]`/`[x]` strings, which only appear on the injected +/// `-F json` path. Failed rows stay verbatim (they carry the actionable URL); +/// passed/pending/skipping collapse to counts. Returns `None` when no +/// recognizable check rows are found so the caller can fall back to the generic +/// path. +fn filter_pr_checks(input: &str) -> Option { + let mut passed = 0usize; + let mut pending = 0usize; + let mut skipping = 0usize; + let mut failed_rows = Vec::new(); + let mut saw_row = false; + + for line in input.lines() { + let trimmed = line.trim_start(); + // A real check row is `\t\t\t`: a status glyph + // followed by at least one TAB-delimited field. Requiring the tab shape + // keyed off the row's first glyph — NOT the leading char alone — rejects + // separators (`---`), blank-glyph lines, and bulleted annotation detail + // (`- ...`, `* ...`) that gh/CI tools emit, any of which would otherwise be + // miscounted as a phantom skipping/pending check and inflate the summary. + if !trimmed.contains('\t') { + continue; + } + let Some(symbol) = trimmed.chars().next() else { + continue; + }; + match symbol { + '✓' => { + saw_row = true; + passed += 1; + }, + 'X' | '✗' | '×' => { + saw_row = true; + failed_rows.push(line.trim_end().to_string()); + }, + '*' => { + saw_row = true; + pending += 1; + }, + '-' => { + saw_row = true; + skipping += 1; + }, + _ => {}, + } + } + + if !saw_row { + return None; + } + + let mut out = String::new(); + let failed = failed_rows.len(); + let _ = write!(out, "checks: {passed} passed, {failed} failed"); + if pending > 0 { + let _ = write!(out, ", {pending} pending"); + } + if skipping > 0 { + let _ = write!(out, ", {skipping} skipping"); + } + out.push('\n'); + // Cap the verbatim failed rows: a PR with hundreds of failing checks would + // otherwise emit one line each, uncapped (this path bypasses head_tail_dedup + // that every sibling arm ends in). Keep the first FAILED_ROW_CAP failures — + // they carry the actionable URLs — and append an omission marker. + const FAILED_ROW_CAP: usize = 40; + out.push_str(&primitives::head_lines_only(&failed_rows.join("\n"), FAILED_ROW_CAP)); + Some(out) } fn filter_run(input: &str, exit_code: i32) -> String { @@ -100,22 +181,32 @@ fn filter_markdown_noise(input: &str) -> String { let mut out = String::new(); let mut in_html_comment = false; let mut previous_blank = false; + let mut comment_lines = 0usize; for line in input.lines() { let trimmed = line.trim(); if in_html_comment { if trimmed.contains("-->") { in_html_comment = false; + comment_lines = 0; + } else { + comment_lines += 1; + if comment_lines > 50 { + in_html_comment = false; + comment_lines = 0; + } } continue; } if trimmed.starts_with("") { in_html_comment = true; + comment_lines = 0; } continue; } - if is_markdown_badge_or_image(trimmed) || is_horizontal_rule(trimmed) { + if primitives::is_markdown_badge_or_image(trimmed) || primitives::is_horizontal_rule(trimmed) + { continue; } if trimmed.is_empty() { @@ -132,14 +223,6 @@ fn filter_markdown_noise(input: &str) -> String { out } -fn is_markdown_badge_or_image(line: &str) -> bool { - line.starts_with("![") || line.starts_with("[![") || line.contains("img.shields.io") -} - -fn is_horizontal_rule(line: &str) -> bool { - line.len() >= 3 && line.chars().all(|ch| matches!(ch, '-' | '*' | '_' | ' ')) -} - fn contains_failure_signal(input: &str) -> bool { input.lines().any(|line| { let lower = line.to_ascii_lowercase(); @@ -150,10 +233,6 @@ fn contains_failure_signal(input: &str) -> bool { }) } -fn head_tail_dedup(input: &str) -> String { - primitives::head_tail_lines(&primitives::dedup_consecutive_lines(input), 120, 80) -} - #[cfg(test)] mod tests { use super::*; @@ -198,6 +277,137 @@ mod tests { assert_eq!(out.text, input); } + #[test] + fn pr_checks_summarizes_default_table_and_keeps_failures() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("pr"), "gh pr checks 123", &cfg); + // DEFAULT `gh pr checks` table: \t\t\t. + let input = "✓\tbuild\t1m2s\thttps://ci.test/build\n\ + X\ttest\t3m4s\thttps://ci.test/test\n\ + *\tlint\t0s\thttps://ci.test/lint\n\ + -\tdocs\t0s\thttps://ci.test/docs\n"; + + let out = filter(&ctx, input, 1); + + assert!(out.changed); + assert!(out.text.contains("checks: 1 passed, 1 failed")); + assert!(out.text.contains("1 pending")); + assert!(out.text.contains("1 skipping")); + // Failed row stays verbatim with its actionable URL. + assert!(out.text.contains("X\ttest\t3m4s\thttps://ci.test/test")); + // Passed/pending/skipping rows collapse to counts only. + assert!(!out.text.contains("https://ci.test/build")); + assert!(!out.text.contains("https://ci.test/lint")); + } + + #[test] + fn pr_checks_caps_unbounded_failed_rows() { + // A PR with hundreds of failing checks must not emit one verbatim line + // each: the failed rows are capped (with an omission marker) like every + // sibling path, not passed through unbounded. + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("pr"), "gh pr checks 123", &cfg); + let mut input = String::new(); + for idx in 0..500 { + let _ = writeln!(input, "X\tcheck{idx}\t1s\thttps://ci.test/{idx}"); + } + + let out = filter(&ctx, &input, 1); + + assert!(out.changed); + assert!(out.text.contains("checks: 0 passed, 500 failed")); + // First failures stay verbatim with their actionable URLs. + assert!(out.text.contains("X\tcheck0\t1s\thttps://ci.test/0")); + // The output is capped, not 501 lines of raw rows. + assert!(out.text.contains("lines omitted")); + assert!(out.text.lines().count() < 60); + assert!(!out.text.contains("https://ci.test/499")); + } + + #[test] + fn pr_checks_web_flag_is_passthrough() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("pr"), "gh pr checks 123 --web", &cfg); + let input = "Opening https://github.com/owner/repo/pull/123/checks in your browser.\n"; + + let out = filter(&ctx, input, 0); + + assert!(!out.changed); + assert_eq!(out.text, input); + } + + #[test] + fn pr_checks_watch_session_is_passthrough() { + // `--watch` re-renders the whole table each interval; the captured buffer + // is many concatenated frames. Summarizing it would count every row once + // per frame (counts x frames) and let duplicate failed rows exhaust the + // FAILED_ROW_CAP, hiding distinct later failures. A watch must pass through + // raw so the live frames survive intact. + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("pr"), "gh pr checks 123 --watch", &cfg); + // Three frames of the same 1-pass/1-fail PR (what a watch concatenates). + let frame = + "\u{2713}\tbuild\t1m2s\thttps://ci.test/build\nX\ttest\t3m4s\thttps://ci.test/test\n"; + let input = format!("{frame}{frame}{frame}"); + + let out = filter(&ctx, &input, 1); + + // Raw passthrough: no summary line, no inflated counts. + assert!(!out.changed); + assert_eq!(out.text, input); + assert!(!out.text.contains("checks:")); + } + + #[test] + fn pr_checks_watch_interval_flags_are_passthrough() { + // `-i`/`--interval` only take effect alongside `--watch`; recognizing + // them (long and short forms, attached or spaced) keeps any watch variant + // on the raw path. + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let input = "\u{2713}\tbuild\t1m2s\thttps://ci.test/build\n"; + for command in ["gh pr checks 123 --watch -i 5", "gh pr checks 123 --watch --interval=5"] { + let ctx = test_ctx(Some("pr"), command, &cfg); + let out = filter(&ctx, input, 0); + assert!(!out.changed, "expected passthrough for {command}"); + assert_eq!(out.text, input); + } + } + + #[test] + fn pr_checks_ignores_non_tab_glyph_lines() { + // Only `\t...` rows count. A separator (`---`) and bulleted CI + // annotation detail (`- ...`, `* ...`) whose first char matches a status + // glyph must NOT be miscounted as phantom skipping/pending checks. + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("pr"), "gh pr checks 123", &cfg); + let input = "✓\tbuild\t1m\thttps://ci.test/build\nX\ttest\t2m\thttps://ci.test/test\n---\n- \ + annotation detail one\n- annotation detail two\n* note about the failure\n"; + + let out = filter(&ctx, input, 1); + + assert!(out.changed); + // Exactly 1 passed + 1 failed; no phantom pending/skipping from the + // separator or the bulleted detail lines. + assert!(out.text.contains("checks: 1 passed, 1 failed")); + assert!(!out.text.contains("pending")); + assert!(!out.text.contains("skipping")); + // The failing row (with its actionable URL) is still kept verbatim. + assert!(out.text.contains("X\ttest\t2m\thttps://ci.test/test")); + } + + #[test] + fn pr_checks_falls_back_when_no_rows() { + // No recognizable glyph rows -> generic pr/issue path, not a bogus summary. + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("pr"), "gh pr checks 123", &cfg); + let input = "no checks reported on this pull request\n"; + + let out = filter(&ctx, input, 0); + + assert!(!out.text.contains("checks: 0 passed")); + assert!(out.text.contains("no checks reported")); + } + #[test] fn pr_diff_preserves_diff() { let cfg = MinimizerConfig { enabled: true, ..Default::default() }; diff --git a/crates/pi-shell/src/minimizer/filters/git.rs b/crates/pi-shell/src/minimizer/filters/git.rs index 9bf5ecf05..3320433fd 100644 --- a/crates/pi-shell/src/minimizer/filters/git.rs +++ b/crates/pi-shell/src/minimizer/filters/git.rs @@ -4,6 +4,7 @@ use std::fmt::Write as _; use crate::minimizer::{MinimizerCtx, MinimizerOutput, primitives}; +#[must_use] pub fn supports(subcommand: Option<&str>) -> bool { matches!( subcommand, @@ -29,6 +30,7 @@ pub fn supports(subcommand: Option<&str>) -> bool { ) } +#[must_use] pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerOutput { if is_show_path_content(ctx.command) || is_stash_patch(ctx.command) { return MinimizerOutput::passthrough(input); @@ -66,7 +68,16 @@ pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerO Some("tag") if is_tag_non_listing(ctx.command) => cleaned, Some("tag") => primitives::compact_listing(&cleaned, 40), Some("stash") => condense_stash(ctx.command, &cleaned, exit_code), - Some("worktree") => cleaned, + Some("worktree") => { + if has_token(ctx.command, "--porcelain") + || has_token(ctx.command, "-z") + || has_token(ctx.command, "--null") + { + cleaned + } else { + condense_worktree(&cleaned) + } + }, Some("push") if has_token(ctx.command, "--porcelain") => cleaned, Some("push") => condense_push(&cleaned, exit_code), Some("pull") => condense_pull(&cleaned, exit_code), @@ -266,7 +277,15 @@ fn condense_status(input: &str) -> String { summary.clean = true; continue; } - if let Some(detected) = detect_status_state(trimmed) { + // Only detect in-progress state headers OUTSIDE the "Untracked files:" + // section. Real `git status` prints these blocks before/after the file + // listings, never as untracked entries; but several progress phrases + // ("Last command done", "Next command to do", "No commands remaining") + // are plausible filenames, so an untracked file so named would otherwise + // be mis-read as `state: rebasing` and swallowed via the `continue` + // below, losing the real untracked count. Gating on `!in_untracked` + // lets such filenames fall through to the untracked path handling. + if !in_untracked && let Some(detected) = detect_status_state(trimmed) { if state.is_none() { state = Some(detected); } @@ -320,7 +339,20 @@ fn condense_status(input: &str) -> String { } } fn detect_status_state(line: &str) -> Option<&str> { - if line.starts_with("You are currently rebasing") { + if line.starts_with("You are currently rebasing") + // Interactive-rebase sub-states all print under the same in-progress + // rebase header in default long-format `git status`; collapse them to + // the single `rebasing` label so an interactive-rebase edit/split is not + // mistaken for a clean tree. "You are currently editing a commit"/"… + // splitting the commit" are the rebase-edit/-split phase lines, and the + // "Last command done"/"Next command to do"/"No commands remaining" + // progress lines accompany them. + || line.starts_with("You are currently editing") + || line.starts_with("You are currently splitting") + || line.starts_with("Last command done") + || line.starts_with("Next command to do") + || line.starts_with("No commands remaining") + { Some("rebasing") } else if line.starts_with("You are currently cherry-picking") { Some("cherry-pick") @@ -332,6 +364,11 @@ fn detect_status_state(line: &str) -> Option<&str> { Some("am") } else if line.starts_with("You are in a sparse checkout") { Some("sparse-checkout") + } else if line.starts_with("All conflicts fixed but you are still merging") { + // Distinct from `merge-conflict`: the merge is staged and ready to + // conclude with `git commit`, so surface a separate "ready to commit" + // label rather than implying unresolved conflicts. + Some("merge (ready to commit)") } else if line == "You have unmerged paths." { Some("merge-conflict") } else { @@ -528,20 +565,33 @@ struct LogEntry { hash: String, subject: String, body: Vec, + /// Body lines dropped past the per-commit body cap, surfaced as an explicit + /// `[+N lines omitted]` marker instead of being silently lost. + omitted: usize, } +/// Soft cap on rendered subject/body line width. Long commit subjects and body +/// lines are truncated through `truncate_line`, which appends a `…[+N]` +/// dropped-char marker so the elision is visible rather than silent. +const LOG_LINE_WIDTH: usize = 160; + fn push_log_entry(out: &mut String, entry: &LogEntry) { out.push_str(&entry.hash); if !entry.subject.is_empty() { out.push(' '); - out.push_str(&entry.subject); + out.push_str(&primitives::truncate_line(&entry.subject, LOG_LINE_WIDTH)); } out.push('\n'); for line in &entry.body { out.push_str(" "); - out.push_str(line); + out.push_str(&primitives::truncate_line(line, LOG_LINE_WIDTH)); out.push('\n'); } + if entry.omitted > 0 { + out.push_str(" [+"); + out.push_str(&entry.omitted.to_string()); + out.push_str(" lines omitted]\n"); + } } fn parse_log_entries(input: &str) -> Vec { @@ -561,6 +611,7 @@ fn parse_log_entries(input: &str) -> Vec { hash: short_hash(hash), subject: subject.to_string(), body: Vec::new(), + omitted: 0, }); continue; } @@ -574,8 +625,15 @@ fn parse_log_entries(input: &str) -> Vec { } if entry.subject.is_empty() { entry.subject = trimmed.to_string(); - } else if entry.body.len() < 3 && !is_git_trailer(trimmed) { - entry.body.push(trimmed.to_string()); + } else if !is_git_trailer(trimmed) { + // Real (non-trailer) body lines past the 3-line cap are tallied so + // `push_log_entry` can emit an explicit `[+N lines omitted]` marker + // rather than dropping them silently. + if entry.body.len() < 3 { + entry.body.push(trimmed.to_string()); + } else { + entry.omitted += 1; + } } } @@ -1051,11 +1109,31 @@ fn condense_noisy_output(input: &str) -> String { fn condense_commit(input: &str, exit_code: i32) -> String { if exit_code == 0 { + let mut hash = None; + let mut stat = None; for line in input.lines() { let trimmed = line.trim(); - if let Some(hash) = parse_commit_hash(trimmed) { - return format!("ok {hash}\n"); + if hash.is_none() + && let Some(found) = parse_commit_hash(trimmed) + { + hash = Some(found); + continue; } + // Default `git commit` success prints a "N files changed, …" stat line + // below the "[branch hash] msg" line; fold it back into the summary so + // the files/insertions signal survives the condense. + if stat.is_none() { + stat = parse_stat_summary(trimmed); + } + } + if let Some(hash) = hash { + return match stat { + Some((files, added, deleted)) => { + format!("ok {hash} ({files} files +{added} -{deleted})\n") + }, + // `--quiet` (or otherwise stat-less) success keeps the bare hash. + None => format!("ok {hash}\n"), + }; } // No commit hash found — likely a `--dry-run` invocation that exits 0 // but prints a status-style listing instead of a "[branch hash]" line. @@ -1435,6 +1513,90 @@ fn stash_subcommand(command: &str) -> &str { "" } +const WORKTREE_LIMIT: usize = 20; + +fn condense_worktree(input: &str) -> String { + // Home is re-derived from the environment (never shelled out) so a leading + // `$HOME` in worktree paths can be abbreviated to `~`. Falls back to no + // abbreviation when `HOME` is unset. + let home = std::env::var("HOME").unwrap_or_default(); + condense_worktree_with_home(input, &home) +} + +/// Condense `git worktree` output, shape-detected from the OUTPUT rather than +/// the args so it covers both `worktree list` and bare confirmations. +/// +/// Listing-shaped lines (` []`, plus the `(bare)` and +/// `(detached HEAD)` variants) get a leading `$HOME` abbreviated to `~` and are +/// capped with an omitted-count marker. Any non-listing output (`add`'s +/// "Preparing worktree…"/"HEAD is now at …" confirmations, errors) is left to +/// `condense_noisy_output`/passthrough so its meaning is preserved. +fn condense_worktree_with_home(input: &str, home: &str) -> String { + let mut entries = Vec::new(); + for line in input.lines() { + if line.trim().is_empty() { + continue; + } + if !is_worktree_listing_line(line) { + // Not a listing: confirmation / error / progress — hand off untouched. + return condense_noisy_output(input); + } + entries.push(abbreviate_worktree_home(line, home)); + } + + if entries.is_empty() { + return input.to_string(); + } + + let mut out = String::new(); + for entry in entries.iter().take(WORKTREE_LIMIT) { + out.push_str(entry); + out.push('\n'); + } + if entries.len() > WORKTREE_LIMIT { + out.push_str("… "); + out.push_str(&(entries.len() - WORKTREE_LIMIT).to_string()); + out.push_str(" worktrees omitted …\n"); + } + out +} + +/// A `git worktree list` row is ` []`, with the +/// trailing column being `(bare)` for a bare repo or `(detached HEAD)` for a +/// detached worktree. The discriminator: an absolute first token followed by a +/// hex hash or the literal `(bare)`. +fn is_worktree_listing_line(line: &str) -> bool { + let mut parts = line.split_whitespace(); + let Some(path) = parts.next() else { + return false; + }; + if !path.starts_with('/') { + return false; + } + let Some(second) = parts.next() else { + return false; + }; + second == "(bare)" || is_short_hex(second) +} + +fn is_short_hex(token: &str) -> bool { + token.len() >= 7 && token.bytes().all(|byte| byte.is_ascii_hexdigit()) +} + +fn abbreviate_worktree_home(line: &str, home: &str) -> String { + if home.is_empty() { + return line.to_string(); + } + // Only abbreviate a leading `$HOME` path prefix; a bare `$HOME` exactly is + // rendered as `~`. Mid-line occurrences are left untouched. + if let Some(rest) = line.strip_prefix(home) + && (rest.is_empty() || rest.starts_with(['/', ' ', '\t'])) + { + return format!("~{rest}"); + } + line.to_string() +} + #[cfg(test)] mod tests { use super::*; @@ -1579,9 +1741,10 @@ mod tests { let cfg = MinimizerConfig { enabled: true, ..Default::default() }; let ctx = test_ctx(Some("tag"), "git tag --format=%(refname:short)|%(taggerdate:short)", &cfg); - let input = (0..45) - .map(|idx| format!("v1.{idx}|2026-06-06\n")) - .collect::(); + let input = (0..45).fold(String::new(), |mut s, idx| { + let _ = writeln!(s, "v1.{idx}|2026-06-06"); + s + }); let out = filter(&ctx, &input, 0); @@ -1593,9 +1756,10 @@ mod tests { fn tag_delete_output_is_passthrough() { let cfg = MinimizerConfig { enabled: true, ..Default::default() }; let ctx = test_ctx(Some("tag"), "git tag -d v1.0 v1.1", &cfg); - let input = (0..45) - .map(|idx| format!("Deleted tag 'v1.{idx}' (was abc1234)\n")) - .collect::(); + let input = (0..45).fold(String::new(), |mut s, idx| { + let _ = writeln!(s, "Deleted tag 'v1.{idx}' (was abc1234)"); + s + }); let out = filter(&ctx, &input, 0); @@ -1607,7 +1771,10 @@ mod tests { fn tag_listing_is_compacted() { let cfg = MinimizerConfig { enabled: true, ..Default::default() }; let ctx = test_ctx(Some("tag"), "git tag --list", &cfg); - let input = (0..45).map(|idx| format!("v1.{idx}\n")).collect::(); + let input = (0..45).fold(String::new(), |mut s, idx| { + let _ = writeln!(s, "v1.{idx}"); + s + }); let out = filter(&ctx, &input, 0); @@ -1796,6 +1963,41 @@ mod tests { assert!(!out.text.contains("Co-authored-by")); } + #[test] + fn log_long_subject_is_truncated_with_dropped_marker() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("log"), "git log", &cfg); + let long_subject = "x".repeat(200); + let input = format!( + "commit abcdef1234567890\nAuthor: A \nDate: today\n\n {long_subject}\n" + ); + let out = filter(&ctx, &input, 0); + // 200 chars → first 160 kept, 40 dropped, surfaced by truncate_line's marker. + assert!( + out.text + .contains(&format!("abcdef1 {}…[+40]", "x".repeat(160))), + "{:?}", + out.text + ); + assert!(!out.text.contains(&long_subject), "full subject must not survive"); + } + + #[test] + fn log_body_over_cap_shows_omitted_marker() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("log"), "git log", &cfg); + // Subject + 5 body lines: 3 kept, 2 past the cap surfaced as a marker. + let input = "commit abcdef1234567890\nAuthor: A \nDate: today\n\n feat: add \ + API\n\n body line one\n body line two\n body line three\n body \ + line four\n body line five\n"; + let out = filter(&ctx, input, 0); + assert!(out.text.contains("abcdef1 feat: add API"), "{:?}", out.text); + assert!(out.text.contains("body line one")); + assert!(out.text.contains("body line three")); + assert!(!out.text.contains("body line four"), "{:?}", out.text); + assert!(out.text.contains("[+2 lines omitted]"), "{:?}", out.text); + } + #[test] fn diff_condenses_unified_patch_to_stat_and_hunk_samples() { let cfg = MinimizerConfig { enabled: true, ..Default::default() }; @@ -1878,10 +2080,8 @@ mod tests { if idx % 3 == 0 { input.push_str(".rs\tnew-"); input.push_str(&idx.to_string()); - input.push_str(".rs\n"); - } else { - input.push_str(".rs\n"); } + input.push_str(".rs\n"); } let out = filter(&ctx, &input, 0); @@ -1965,7 +2165,7 @@ mod tests { } #[test] - fn commit_success_compacts_to_hash_only() { + fn commit_success_compacts_to_hash_with_stat_summary() { let cfg = MinimizerConfig { enabled: true, ..Default::default() }; let ctx = test_ctx(Some("commit"), "git commit -m msg", &cfg); let input = "\ @@ -1976,11 +2176,32 @@ mod tests { "; let out = filter(&ctx, input, 0); - assert_eq!(out.text, "ok 5f490f764\n"); + // Best-of: the change summary from the stat line is folded into `ok `. + assert_eq!(out.text, "ok 5f490f764 (70 files +3081 -403)\n"); assert!(!out.text.contains("files changed")); assert!(!out.text.contains("create mode")); } + #[test] + fn commit_success_with_stat_appends_change_summary() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("commit"), "git commit -m msg", &cfg); + // Default `git commit` success body: "[branch hash] msg" + stat line. + let input = "[main 1a2b3c4] msg\n 3 files changed, 10 insertions(+), 2 deletions(-)\n"; + let out = filter(&ctx, input, 0); + assert_eq!(out.text, "ok 1a2b3c4 (3 files +10 -2)\n"); + } + + #[test] + fn commit_success_without_stat_keeps_bare_hash() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("commit"), "git commit -m msg --quiet", &cfg); + // `--quiet` suppresses the stat line; the bare hash summary is preserved. + let input = "[main 1a2b3c4] msg\n"; + let out = filter(&ctx, input, 0); + assert_eq!(out.text, "ok 1a2b3c4\n"); + } + #[test] fn commit_nothing_to_commit_is_compacted() { let cfg = MinimizerConfig { enabled: true, ..Default::default() }; @@ -2161,6 +2382,39 @@ hint: See the 'Note about fast-forwards' in 'git push --help' for details. assert!(out.text.contains("conflicts 1")); } + #[test] + fn status_detects_interactive_rebase_edit() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("status"), "git status", &cfg); + // Realistic default long-format body for an interactive-rebase `edit` stop. + let input = "On branch feature\n\ninteractive rebase in progress; onto abc1234\nLast \ + command done (1 command done):\n edit abc123 some message\nNo commands \ + remaining.\nYou are currently editing a commit while rebasing branch 'feature' \ + on 'abc1234'.\n (use \"git commit --amend\" to amend the current commit)\n \ + (use \"git rebase --continue\" once you are satisfied with your \ + changes)\n\nnothing to commit, working tree clean\n"; + let out = filter(&ctx, input, 0); + assert!(out.changed); + assert!(out.text.starts_with("state: rebasing\n"), "{:?}", out.text); + assert!(out.text.contains("branch feature")); + } + + #[test] + fn status_detects_merge_all_conflicts_fixed() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("status"), "git status", &cfg); + // Realistic default long-format body after all merge conflicts are resolved. + let input = "On branch main\n\nAll conflicts fixed but you are still merging.\n (use \"git \ + commit\" to conclude merge)\n\nChanges to be committed:\n modified: \ + src/main.rs\n"; + let out = filter(&ctx, input, 0); + assert!(out.changed); + assert!(out.text.starts_with("state: merge (ready to commit)\n"), "{:?}", out.text); + // Distinct from the unresolved-conflict label. + assert!(!out.text.contains("merge-conflict")); + assert!(out.text.contains("M src/main.rs")); + } + #[test] fn status_state_not_emitted_when_no_state() { let cfg = MinimizerConfig { enabled: true, ..Default::default() }; @@ -2173,6 +2427,25 @@ hint: See the 'Note about fast-forwards' in 'git push --help' for details. assert_eq!(out.text, "branch main\nclean\n"); } + #[test] + fn status_untracked_file_named_like_rebase_progress_not_misread_as_state() { + // A clean tree whose only untracked file is named like a rebase + // progress line must NOT be reported as `state: rebasing`, and the + // untracked file must still be counted. Regression for the + // detect_status_state false positive inside the untracked section. + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("status"), "git status", &cfg); + let input = "On branch main\nUntracked files:\n (use \"git add ...\" to include in \ + what will be committed)\n\tNext command to do.md\n"; + let out = filter(&ctx, input, 0); + assert!(out.changed); + // Pre-fix this body was reported as `state: rebasing` with the filename + // swallowed; the fix keeps state detection out of the untracked section. + assert!(!out.text.contains("state:"), "{:?}", out.text); + assert!(out.text.contains("untracked 1"), "{:?}", out.text); + assert!(out.text.contains("?? Next command to do.md"), "{:?}", out.text); + } + // --- Pull summaries --- #[test] @@ -2484,6 +2757,90 @@ error: could not apply abc1234... fix: something\nhint: Resolve all conflicts ma // --- Push porcelain passthrough --- + // --- Worktree condense --- + + #[test] + fn worktree_list_caps_and_abbreviates_home() { + let home = "/home/alice"; + let mut input = String::new(); + // 22 listing entries under $HOME, including a bare and a detached-HEAD row. + input.push_str("/home/alice/repo abc1234 (bare)\n"); + input.push_str("/home/alice/repo-detached def5678 (detached HEAD)\n"); + for idx in 0..20 { + let _ = writeln!( + input, + "/home/alice/wt-{idx:02} aaaaaaa{idx:02} [wt-{idx}]" + ); + } + let out = condense_worktree_with_home(&input, home); + + // Leading $HOME abbreviated to '~'. + assert!(out.starts_with("~/repo "), "{out:?}"); + assert!(out.contains("~/repo-detached ")); + assert!(out.contains("(bare)")); + assert!(out.contains("(detached HEAD)")); + assert!(!out.contains("/home/alice"), "no absolute $HOME paths should survive: {out:?}"); + // 22 entries → capped at 20 with a 2-omitted marker. + assert!(out.contains("… 2 worktrees omitted …"), "{out:?}"); + assert_eq!(out.lines().filter(|l| l.starts_with('~')).count(), 20); + } + + #[test] + fn worktree_add_confirmation_passes_through() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("worktree"), "git worktree add ../wt feature", &cfg); + // `worktree add` confirmation is not listing-shaped; it must survive. + let input = "Preparing worktree (new branch 'feature')\nHEAD is now at abc1234 commit msg\n"; + let out = filter(&ctx, input, 0); + assert!(!out.changed, "{:?}", out.text); + assert_eq!(out.text, input); + } + + #[test] + fn worktree_porcelain_passthrough() { + // `git worktree list --porcelain` emits machine-readable records; + // the minimizer must not insert "… N lines omitted …" markers. + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("worktree"), "git worktree list --porcelain", &cfg); + let input = "worktree /home/user/project\nHEAD abc1234def\nbranch \ + refs/heads/main\n\nworktree /home/user/other\nHEAD 567890ab\nbranch \ + refs/heads/feat\n"; + let out = filter(&ctx, input, 0); + assert!(!out.changed, "porcelain worktree listing must pass through unchanged"); + assert_eq!(out.text, input, "porcelain worktree listing must pass through"); + } + + #[test] + fn worktree_null_passthrough() { + // `git worktree list -z` also produces machine-readable NUL-delimited output. + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("worktree"), "git worktree list -z", &cfg); + let input = "worktree /home/user/project\0HEAD abc1234def\0branch refs/heads/main\0"; + let out = filter(&ctx, input, 0); + assert!(!out.changed, "-z worktree output must pass through unchanged"); + assert_eq!(out.text, input); + } + + #[test] + fn worktree_non_porcelain_still_condensed() { + // Normal (non-porcelain) listing should still go through the condenser. + // Build 22 listing-shaped entries so the cap (20) is exceeded; the condenser + // would insert an "… N worktrees omitted …" marker that a passthrough would + // never emit. + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("worktree"), "git worktree list", &cfg); + let mut input = String::new(); + for idx in 0..22usize { + let _ = writeln!(input, "/repo/wt-{idx:02} aaaaaaa{idx:02} [branch-{idx}]"); + } + let out = filter(&ctx, &input, 0); + assert!( + out.text.contains("worktrees omitted"), + "non-porcelain output over the cap must show omitted marker; got: {:?}", + out.text + ); + } + #[test] fn push_porcelain_output_is_passthrough() { // Scripts that parse `git push --porcelain` rely on the exact byte diff --git a/crates/pi-shell/src/minimizer/filters/glab.rs b/crates/pi-shell/src/minimizer/filters/glab.rs new file mode 100644 index 000000000..7ca413aaa --- /dev/null +++ b/crates/pi-shell/src/minimizer/filters/glab.rs @@ -0,0 +1,683 @@ +//! GitLab CLI (glab) output filters. + +use std::{fmt::Write as _, sync::LazyLock}; + +use regex::Regex; + +use crate::minimizer::{MinimizerCtx, MinimizerOutput, primitives}; + +/// Match GitLab CI section markers: `section_start/end:timestamp:name` followed +/// by bracket code. +static SECTION_MARKER_RE: LazyLock = + LazyLock::new(|| Regex::new(r"section_(?:start|end):\d+:[a-z0-9_]+\[[\d;]*[A-Za-z]").unwrap()); + +/// Match bare bracket ANSI-like codes without ESC prefix: `[0K`, `[0;m`, +/// `[36;1m`, etc. +static BARE_ANSI_RE: LazyLock = LazyLock::new(|| Regex::new(r"\[[\d;]+[A-Za-z]").unwrap()); + +/// Multiple consecutive blank lines (3+ newlines) collapsed to double newline. +static MULTI_BLANK_RE: LazyLock = LazyLock::new(|| Regex::new(r"\n{3,}").unwrap()); + +#[must_use] +pub fn supports(subcommand: Option<&str>) -> bool { + matches!(subcommand, Some("mr" | "issue" | "ci" | "pipeline" | "release")) +} + +#[must_use] +pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerOutput { + if preserves_raw_mode(ctx) { + return MinimizerOutput::passthrough(input); + } + + let cleaned = primitives::strip_ansi(input); + let text = match ctx.subcommand { + Some("ci") if primitives::command_has_ordered_tokens(ctx.command, "ci", "trace") => { + filter_ci_trace(&cleaned) + }, + Some("release") if primitives::command_has_ordered_tokens(ctx.command, "release", "list") => { + match filter_release_list(&cleaned) { + Some(summary) => summary, + None => primitives::head_tail_dedup(&cleaned), + } + }, + Some("release") if primitives::command_has_ordered_tokens(ctx.command, "release", "view") => { + filter_release_view(&cleaned) + }, + Some("mr" | "issue") + if primitives::command_has_ordered_tokens(ctx.command, "mr", "view") + || primitives::command_has_ordered_tokens(ctx.command, "issue", "view") => + { + filter_mr_issue_view(&cleaned, exit_code) + }, + _ => primitives::head_tail_dedup(&cleaned), + }; + + if text == input { + MinimizerOutput::passthrough(input) + } else { + MinimizerOutput::transformed(text, input.len()) + } +} + +/// Check whether the command should be passed through unmodified. +fn preserves_raw_mode(ctx: &MinimizerCtx<'_>) -> bool { + // -F, --output, --json anywhere -> passthrough (user chose output format) + if primitives::command_has_any_token(ctx.command, &["-F", "--output", "--json"]) { + return true; + } + // --web anywhere -> passthrough (opens browser) + if primitives::command_has_any_token(ctx.command, &["--web"]) { + return true; + } + // api subcommand -> passthrough (advanced user) + if ctx.subcommand == Some("api") { + return true; + } + // --comments for mr view / issue view -> passthrough + if primitives::command_has_any_token(ctx.command, &["--comments"]) + && (primitives::command_has_ordered_tokens(ctx.command, "mr", "view") + || primitives::command_has_ordered_tokens(ctx.command, "issue", "view")) + { + return true; + } + // mr diff -> passthrough (raw unified diff must be un-modified) + if primitives::command_has_ordered_tokens(ctx.command, "mr", "diff") { + return true; + } + false +} + +// ── CI trace filter ──────────────────────────────────────────────────── + +/// Filter `glab ci trace` output: strip section markers, bare ANSI codes, +/// and runner boilerplate. Keep warnings, errors, and build output. +fn filter_ci_trace(input: &str) -> String { + // Strip section markers first (they contain bracket codes), then bare ANSI + // codes + let cleaned = SECTION_MARKER_RE.replace_all(input, ""); + let cleaned = BARE_ANSI_RE.replace_all(&cleaned, ""); + + let mut filtered = String::new(); + let mut previous_blank = false; + + for line in cleaned.lines() { + let trimmed = line.trim(); + + if trimmed.is_empty() { + if !previous_blank { + filtered.push('\n'); + } + previous_blank = true; + continue; + } + previous_blank = false; + + // Skip runner boilerplate + if trimmed.starts_with("Running with gitlab-runner") + || (trimmed.starts_with("on ") && trimmed.contains("system ID:")) + || trimmed.starts_with("Using Docker executor") + || trimmed.starts_with("Running on runner-") + || trimmed.starts_with("Preparing the") + || trimmed.starts_with("Preparing environment") + || trimmed.starts_with("Getting source from") + || trimmed.starts_with("Resolving secrets") + || trimmed.starts_with("Cleaning up") + || trimmed.starts_with("Uploading artifacts") + || trimmed.starts_with("Downloading artifacts") + || trimmed.starts_with("Runtime platform") + || trimmed.starts_with("Fetching changes with git") + || trimmed.starts_with("Initialized empty Git") + || trimmed.starts_with("Created fresh repository") + || trimmed.starts_with("Checking out ") + || trimmed.starts_with("Skipping Git submodules") + { + continue; + } + + filtered.push_str(trimmed); + filtered.push('\n'); + } + + primitives::head_tail_lines(&primitives::dedup_consecutive_lines(&filtered), 120, 80) +} + +// ── Release list filter ─────────────────────────────────────────────── + +/// Parse `glab release list` tab-separated output into compact form. +/// Returns `None` if no TAB-separated rows are found (caller falls through +/// to `head_tail_dedup`). +fn filter_release_list(input: &str) -> Option { + let mut lines = input.lines().peekable(); + let mut filtered = String::new(); + + // Skip "Showing N releases..." preamble and blank lines until header. + // Parse the total count from the preamble line if present. + let mut total: Option = None; + while let Some(line) = lines.peek() { + let trimmed = line.trim(); + if trimmed.starts_with("Name\t") || trimmed.starts_with("NAME\t") { + lines.next(); // consume header + break; + } + // Parse "Showing N releases on owner/repo." or similar + if total.is_none() + && let Some(rest) = trimmed.strip_prefix("Showing ") + && let Some(n_str) = rest.split_whitespace().next() + && let Ok(n) = n_str.parse::() + { + total = Some(n); + } + lines.next(); + } + + filtered.push_str("Releases\n"); + + let mut count = 0; + let mut has_more = false; + for line in &mut lines { + let trimmed = line.trim(); + if trimmed.is_empty() { + continue; + } + + let parts: Vec<&str> = trimmed.split('\t').collect(); + if parts.len() < 3 { + continue; + } + + if count >= 20 { + // We've already emitted 20 rows and found a 21st valid row. + has_more = true; + break; + } + + let name = parts[0].trim(); + let tag = parts[1].trim(); + let created = parts[2].trim(); + + if name == tag { + let _ = writeln!(filtered, " {name} ({created})"); + } else { + let _ = writeln!(filtered, " {name} [{tag}] ({created})"); + } + + count += 1; + } + + if count == 0 { + return None; + } + + // Append omission marker when there are more releases than shown. + let omitted = total.map_or(0, |t| t.saturating_sub(count)); + if omitted > 0 { + let _ = writeln!(filtered, "… {omitted} releases omitted …"); + } else if has_more { + // Total not parsed from preamble but a 21st row was observed; signal + // truncation. + filtered.push_str("… releases omitted (showing first 20) …\n"); + } + + Some(filtered) +} + +// ── Release view filter ─────────────────────────────────────────────── + +/// Filter `glab release view` output: strip SOURCES block, image-only lines, +/// `Image: name -> url` lines, HTML comments, horizontal rules, and collapse +/// multiple blank lines. +fn filter_release_view(input: &str) -> String { + let mut filtered = String::new(); + let mut in_sources = false; + + for line in input.lines() { + let trimmed = line.trim(); + + // Strip trailing "View this release on GitLab" link + if trimmed.starts_with("View this release on GitLab") { + continue; + } + + // Strip "ASSETS" / "There are no assets..." section + if trimmed == "ASSETS" { + in_sources = true; // reuse state machine; next non-empty line is "There are no assets..." + continue; + } + + // Strip SOURCES section (archive download URLs) + if trimmed == "SOURCES" { + in_sources = true; + continue; + } + if in_sources { + if trimmed.starts_with("http://") || trimmed.starts_with("https://") || trimmed.is_empty() + { + continue; + } + in_sources = false; + } + + // Strip image-only lines: ![alt](url) + if trimmed.starts_with("![") && trimmed.ends_with(')') && trimmed.contains("](") { + continue; + } + // Strip glab's "Image: name -> url" rendering (Unicode or ASCII arrow) + if trimmed.starts_with("Image:") && (trimmed.contains('\u{2192}') || trimmed.contains(" -> ")) + { + continue; + } + + // Strip single-line HTML comments + if trimmed.starts_with("") { + continue; + } + + // Strip horizontal rules (--- or --------) + if trimmed.len() >= 3 && trimmed.chars().all(|c| c == '-') { + continue; + } + + filtered.push_str(line); + filtered.push('\n'); + } + + // Collapse multiple blank lines + MULTI_BLANK_RE.replace_all(&filtered, "\n\n").to_string() +} + +// ── MR/issue view filter ───────────────────────────────────────────── + +/// On error (non-zero exit), skip markdown filtering to preserve error context. +/// On success, apply markdown body noise filtering. +fn filter_mr_issue_view(input: &str, exit_code: i32) -> String { + if exit_code != 0 { + return primitives::head_tail_dedup(input); + } + filter_markdown_body_view(input) +} + +// ── Markdown body filter (mr view / issue view) ────────────────────── + +/// Filter markdown body noise: HTML comments, badges, image-only lines, +/// horizontal rules. Collapse multiple blank lines. Apply `head_tail_dedup`. +fn filter_markdown_body_view(input: &str) -> String { + let mut out = String::new(); + let mut in_html_comment = false; + let mut previous_blank = false; + let mut comment_lines = 0usize; + + for line in input.lines() { + let trimmed = line.trim(); + if in_html_comment { + if trimmed.contains("-->") { + in_html_comment = false; + comment_lines = 0; + } else { + comment_lines += 1; + // Safety: cap unclosed comment consumption at 50 lines to + // prevent data loss from malformed/truncated markdown. + if comment_lines > 50 { + in_html_comment = false; + comment_lines = 0; + } + } + continue; + } + if trimmed.starts_with("") { + in_html_comment = true; + comment_lines = 0; + } + continue; + } + if primitives::is_markdown_badge_or_image(trimmed) || primitives::is_horizontal_rule(trimmed) + { + continue; + } + if trimmed.is_empty() { + if !previous_blank { + out.push('\n'); + } + previous_blank = true; + continue; + } + previous_blank = false; + out.push_str(line.trim_end()); + out.push('\n'); + } + primitives::head_tail_dedup(&out) +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::minimizer::MinimizerConfig; + + fn test_ctx<'a>( + subcommand: Option<&'a str>, + command: &'a str, + config: &'a MinimizerConfig, + ) -> MinimizerCtx<'a> { + MinimizerCtx { program: "glab", subcommand, command, config } + } + + // ── CI trace tests ────────────────────────────────────────────────── + + #[test] + fn ci_trace_strips_section_markers_and_runner_boilerplate() { + let input = include_str!("fixtures/glab/ci-trace.txt"); + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("ci"), "glab ci trace 123", &cfg); + + let out = filter(&ctx, input, 1); + + assert!(out.changed); + // Section markers stripped + assert!(!out.text.contains("section_start:")); + assert!(!out.text.contains("section_end:")); + // Runner boilerplate stripped + assert!(!out.text.contains("Running with gitlab-runner")); + assert!(!out.text.contains("Using Docker executor")); + assert!(!out.text.contains("Fetching changes with git")); + assert!(!out.text.contains("Checking out")); + assert!(!out.text.contains("Uploading artifacts")); + assert!(!out.text.contains("Downloading artifacts")); + assert!(!out.text.contains("Cleaning up")); + assert!(!out.text.contains("Runtime platform")); + assert!(!out.text.contains("Preparing the")); + assert!(!out.text.contains("Getting source from")); + assert!(!out.text.contains("Resolving secrets")); + // Bare ANSI codes stripped + assert!(!out.text.contains("[0K")); + assert!(!out.text.contains("[36;1m")); + assert!(!out.text.contains("[32m")); + assert!(!out.text.contains("[31m")); + assert!(!out.text.contains("[33m")); + assert!(!out.text.contains("[0m")); + // Build output preserved + assert!(out.text.contains("npm ci")); + assert!(out.text.contains("npm run build")); + assert!(out.text.contains("npm test")); + // Test results preserved + assert!(out.text.contains("FAIL")); + assert!(out.text.contains("AssertionError")); + // Final error line preserved + assert!(out.text.contains("Job failed")); + } + + #[test] + fn ci_trace_preserves_build_errors() { + let input = "\ +section_start:1711234578:build_script[0K +$ npm test +[31mFAIL[0m src/auth.test.ts + Error: expected true to be false +section_end:1711234600:build_script[0K +[31;1mERROR: Job failed: exit code 1[0K +"; + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("ci"), "glab ci trace 456", &cfg); + + let out = filter(&ctx, input, 1); + + assert!(out.changed); + assert!(out.text.contains("$ npm test")); + assert!(out.text.contains("FAIL")); + assert!(out.text.contains("Error: expected true to be false")); + assert!(out.text.contains("ERROR: Job failed: exit code 1")); + // Boilerplate gone + assert!(!out.text.contains("section_start")); + assert!(!out.text.contains("section_end")); + } + + #[test] + fn ci_trace_passthrough_on_web_flag() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("ci"), "glab ci trace 123 --web", &cfg); + let input = "Opening in browser...\n"; + + let out = filter(&ctx, input, 0); + + assert!(!out.changed); + assert_eq!(out.text, input); + } + + // ── Release list tests ────────────────────────────────────────────── + + #[test] + fn release_list_compacts_tab_separated() { + let input = include_str!("fixtures/glab/release-list.txt"); + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("release"), "glab release list", &cfg); + + let out = filter(&ctx, input, 0); + + assert!(out.changed); + assert!(out.text.contains("Releases")); + assert!(out.text.contains("v3.2.1")); + assert!(out.text.contains("about 2 days ago")); + // Preamble stripped + assert!(!out.text.contains("Showing 10 releases")); + // Header stripped + assert!(!out.text.contains("Name\tTag\tCreated")); + } + + #[test] + fn release_list_falls_through_on_no_tabs() { + let input = "No releases available on owner/repo.\n"; + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("release"), "glab release list", &cfg); + + let out = filter(&ctx, input, 0); + + // Falls through to head_tail_dedup; output should still contain the text + assert!(out.text.contains("No releases available")); + } + + // ── Release view tests ────────────────────────────────────────────── + + #[test] + fn release_view_strips_sources_and_noise() { + let input = include_str!("fixtures/glab/release-view.txt"); + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("release"), "glab release view v2.0.0", &cfg); + + let out = filter(&ctx, input, 0); + + assert!(out.changed); + // SOURCES section stripped + assert!(!out.text.contains("SOURCES")); + assert!(!out.text.contains("toolkit-v2.0.0.zip")); + assert!(!out.text.contains("toolkit-v2.0.0.tar.gz")); + // Horizontal rules stripped + assert!(!out.text.contains("--------")); + // Image lines stripped + assert!(!out.text.contains("Image:")); + // HTML comments stripped + assert!(!out.text.contains("", + "# MR Title", + "[![CI](https://img.shields.io/badge-passing-green)](url)", + "## Description", + "Some description here.", + "---", + "More content.", + "![badge](https://img.shields.io/build/passing)", + "", + ] + .join("\n"); + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("mr"), "glab mr view 42", &cfg); + + let out = filter(&ctx, &input, 0); + + assert!(out.changed); + // HTML comments stripped + assert!(!out.text.contains("template comment")); + // Badges stripped + assert!(!out.text.contains("img.shields.io")); + // Horizontal rules stripped + assert!(!out.text.contains("---")); + // Content preserved + assert!(out.text.contains("# MR Title")); + assert!(out.text.contains("## Description")); + assert!(out.text.contains("Some description here.")); + assert!(out.text.contains("More content.")); + } + + // ── Passthrough tests ─────────────────────────────────────────────── + + #[test] + fn mr_list_passthrough_on_json_flag() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("mr"), "glab mr list --json", &cfg); + let input = "[{\"iid\": 1, \"title\": \"test\"}]\n"; + + let out = filter(&ctx, input, 0); + + assert!(!out.changed); + assert_eq!(out.text, input); + } + + #[test] + fn api_subcommand_is_passthrough() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("api"), "glab api projects/1", &cfg); + let input = "{\"id\": 1, \"name\": \"test\"}\n"; + + let out = filter(&ctx, input, 0); + + assert!(!out.changed); + assert_eq!(out.text, input); + } + + // ── Passthrough flag variations ───────────────────────────────────── + + #[test] + fn passthrough_on_output_flag() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("mr"), "glab mr list -F json", &cfg); + let input = "[]\n"; + + let out = filter(&ctx, input, 0); + + assert!(!out.changed); + assert_eq!(out.text, input); + } + + #[test] + fn passthrough_on_web_flag_anywhere() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("release"), "glab release view --web v1.0", &cfg); + let input = "Opening...\n"; + + let out = filter(&ctx, input, 0); + + assert!(!out.changed); + assert_eq!(out.text, input); + } + + #[test] + fn passthrough_on_comments_for_mr_view() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("mr"), "glab mr view 42 --comments", &cfg); + let input = "comments...\n"; + + let out = filter(&ctx, input, 0); + + assert!(!out.changed); + assert_eq!(out.text, input); + } + + // ── Edge cases ────────────────────────────────────────────────────── + + #[test] + fn release_list_name_differs_from_tag() { + let input = "Showing 1 releases\n\nName\tTag\tCreated\nMy Release\tv1.0.0\t2 days ago\n"; + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("release"), "glab release list", &cfg); + + let out = filter(&ctx, input, 0); + + assert!(out.text.contains("My Release [v1.0.0]")); + } + + #[test] + fn ci_trace_empty_input() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("ci"), "glab ci trace 123", &cfg); + let input = ""; + + let out = filter(&ctx, input, 0); + + // Empty input passes through (no change) + assert!(!out.changed); + } + + #[test] + fn release_list_marks_omitted_when_over_cap() { + // Build input with 25 releases so the cap of 20 is exceeded. + let mut input = String::from("Showing 25 releases on owner/repo.\n\nName\tTag\tCreated\n"); + for i in 1..=25 { + let _ = writeln!(input, "Release {i}\tv{i}.0.0\t{i} days ago"); + } + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("release"), "glab release list", &cfg); + + let out = filter(&ctx, &input, 0); + + assert!(out.changed); + // Output must signal that releases were omitted. + assert!(out.text.contains("omitted"), "expected omission marker, got: {}", out.text); + // First release present, 21st not shown verbatim in the list. + assert!(out.text.contains("Release 1")); + assert!(!out.text.contains("Release 21 [")); + } + + #[test] + fn mr_diff_passes_through_unmodified() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("mr"), "glab mr diff 42", &cfg); + let input = + "diff --git a/foo.rs b/foo.rs\n--- a/foo.rs\n+++ b/foo.rs\n@@ -1 +1 @@\n-old\n+new\n"; + + let out = filter(&ctx, input, 0); + + assert!(!out.changed); + assert_eq!(out.text, input); + } +} diff --git a/crates/pi-shell/src/minimizer/filters/go.rs b/crates/pi-shell/src/minimizer/filters/go.rs index 2c4913f29..e1e893cec 100644 --- a/crates/pi-shell/src/minimizer/filters/go.rs +++ b/crates/pi-shell/src/minimizer/filters/go.rs @@ -1,7 +1,10 @@ //! Go toolchain output filters. +use std::fmt::Write as _; + use crate::minimizer::{MinimizerCtx, MinimizerOutput, primitives}; +#[must_use] pub fn supports(program: &str, subcommand: Option<&str>) -> bool { match program { "go" => matches!(subcommand, Some("test" | "build" | "vet" | "tool")), @@ -10,6 +13,7 @@ pub fn supports(program: &str, subcommand: Option<&str>) -> bool { } } +#[must_use] pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerOutput { let cleaned = primitives::strip_ansi(input); let text = if ctx.program == "golangci-lint" || is_go_tool_golangci_lint(ctx) { @@ -49,6 +53,13 @@ fn is_go_tool_golangci_lint(ctx: &MinimizerCtx<'_>) -> bool { } fn filter_go_test(input: &str, exit_code: i32) -> String { + // On success, no per-test/per-package detail carries signal: re-derive rtk's + // aggregation against DEFAULT text (and opportunistic JSON), counting package + // and test markers into a single summary line instead of echoing every PASS/ok. + if exit_code == 0 { + return aggregate_go_test_success(input); + } + let mut out = String::new(); let mut kept = 0usize; let mut keep_next_after_location = false; @@ -87,6 +98,67 @@ fn filter_go_test(input: &str, exit_code: i32) -> String { primitives::head_tail_lines(&primitives::dedup_consecutive_lines(&out), 140, 80) } +/// Success-path aggregation: count package and test markers (re-derived for +/// DEFAULT text, with opportunistic JSON rendering) and emit one summary line. +fn aggregate_go_test_success(input: &str) -> String { + // Benchmark output is signal — don't collapse it into a count. + if input + .lines() + .any(|l| l.trim_start().starts_with("Benchmark")) + { + return primitives::head_tail_lines(input, 140, 80); + } + + let mut packages_ok = 0usize; + let mut no_tests = 0usize; + let mut tests_skipped = 0usize; + + for line in input.lines() { + let trimmed = line.trim(); + if trimmed.is_empty() { + continue; + } + + // Opportunistic JSON: render to the same text shape, then count. + // Also check for JSON-wrapped benchmark output — those lines start with + // "{" so the raw-line guard above misses them. Bail to head_tail + // early so benchmark results are never collapsed into a package count. + if trimmed.starts_with('{') + && let Ok(value) = serde_json::from_str::(trimmed) + && let Some(output) = value.get("Output").and_then(|v| v.as_str()) + && output.trim_start().starts_with("Benchmark") + { + return primitives::head_tail_lines(input, 140, 80); + } + + let candidate = render_go_test_json_line(trimmed); + let line_to_count = candidate.as_deref().unwrap_or(trimmed); + let lower = line_to_count.trim().to_ascii_lowercase(); + + if lower.starts_with("ok\t") || lower.starts_with("ok ") { + packages_ok += 1; + } else if lower.starts_with("?\t") || lower.starts_with("? ") { + no_tests += 1; + } else if lower.starts_with("--- skip") { + tests_skipped += 1; + } + } + + if packages_ok == 0 && no_tests == 0 && tests_skipped == 0 { + return compact_general(input); + } + + let mut summary = format!("go test: {packages_ok} packages ok"); + if no_tests > 0 { + let _ = write!(summary, ", {no_tests} no tests"); + } + if tests_skipped > 0 { + let _ = write!(summary, ", {tests_skipped} tests skipped"); + } + summary.push('\n'); + summary +} + fn render_go_test_json_line(line: &str) -> Option { let value: serde_json::Value = serde_json::from_str(line).ok()?; let action = value @@ -113,7 +185,7 @@ fn render_go_test_json_line(line: &str) -> Option { match action { "fail" if !test.is_empty() => Some(format!("--- FAIL: {test}")), "fail" if !package.is_empty() => Some(format!("FAIL\t{package}")), - "pass" if !package.is_empty() && test.is_empty() => Some(format!("ok\t{package}")), + "pass" if !package.is_empty() && test.is_empty() => None, "skip" if !test.is_empty() => Some(format!("--- SKIP: {test}")), _ => None, } @@ -242,12 +314,12 @@ fn summarize_golangci_json(line: &str) -> Option { let line_no = issue .get("Pos") .and_then(|pos| pos.get("Line")) - .and_then(|v| v.as_u64()) + .and_then(serde_json::Value::as_u64) .map_or(0, |value| value); let col_no = issue .get("Pos") .and_then(|pos| pos.get("Column")) - .and_then(|v| v.as_u64()) + .and_then(serde_json::Value::as_u64) .map_or(0, |value| value); let linter = issue .get("FromLinter") @@ -301,10 +373,16 @@ fn looks_like_go_error(line: &str) -> bool { || lower.starts_with("no required module provides package ") || lower.starts_with("missing go.sum entry") || lower.starts_with("found packages ") + || lower.starts_with("pattern ") + || lower.starts_with("no go files in ") + || lower.starts_with("go: cannot load module ") + || lower.starts_with("go: updates to go.mod needed") + || lower.starts_with("go: inconsistent vendoring") || lower.starts_with("go: ") && (lower.contains("error") || lower.contains("failed") || lower.contains("not found")) || lower.contains("import cycle not allowed") || lower.contains("build constraints exclude all go files") + || lower.contains("function main is undeclared in the main package") } fn is_go_noise(line: &str) -> bool { @@ -318,7 +396,19 @@ fn is_go_noise(line: &str) -> bool { fn is_golangci_noise(line: &str) -> bool { let lower = line.to_ascii_lowercase(); - lower.starts_with("level=") && lower.contains("msg=\"[linters_context]") + // Strip runner-log info/warn chatter (snip strips `^level=` wholesale), but + // DELIBERATELY KEEP `level=error` — those lines carry config/typecheck failures + // that would otherwise vanish silently. + // `level=error` carries config/typecheck failures (incl. the canonical + // `level=error msg="[linters_context]…"` typecheck headline) — never strip it, + // even when it routes through the linters_context component. + if lower.starts_with("level=error") { + return false; + } + lower.starts_with("level=info") + || lower.starts_with("level=warning") + || lower.starts_with("level=warn") + || lower.starts_with("level=") && lower.contains("msg=\"[linters_context]") || lower.starts_with("golangci-lint has version") || lower.starts_with("running ") && lower.contains("linters") } @@ -373,7 +463,7 @@ mod tests { } #[test] - fn go_test_verbose_success_drops_run_and_ginkgo_success_noise() { + fn go_test_verbose_success_aggregates_to_summary() { let cfg = MinimizerConfig { enabled: true, ..Default::default() }; let ctx = MinimizerCtx { program: "go", @@ -386,13 +476,30 @@ mod tests { kubecraft.ai/.../controller 6.610s\n=== RUN TestNewClient\n--- PASS: \ TestNewClient (0.00s)\nPASS\nok kubecraft.ai/.../llm 0.776s\n"; let out = filter(&ctx, input, 0); - assert!(out.text.contains("--- PASS: TestControllers (6.04s)")); - assert!(out.text.contains("ok kubecraft.ai/.../controller 6.610s")); - assert!(out.text.contains("--- PASS: TestNewClient (0.00s)")); + // On success the two `ok` packages collapse to one summary line; the per-test + // PASS lines and `=== RUN`/ginkgo banner noise disappear. + assert!(out.text.contains("go test: 2 packages ok")); + assert!(!out.text.contains("--- PASS")); assert!(!out.text.contains("=== RUN")); assert!(!out.text.contains("SUCCESS!")); } + #[test] + fn go_test_success_default_text_counts_no_tests_and_skips() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = MinimizerCtx { + program: "go", + subcommand: Some("test"), + command: "go test ./...", + config: &cfg, + }; + let input = "ok \texample.com/a\t0.10s\n? \texample.com/b\t[no test files]\nok \ + \texample.com/c\t0.20s\n--- SKIP: TestSkipped (0.00s)\nok \ + \texample.com/d\t0.30s\n"; + let out = filter(&ctx, input, 0); + assert_eq!(out.text.trim(), "go test: 3 packages ok, 1 no tests, 1 tests skipped"); + } + #[test] fn summarizes_golangci_json_issues() { let input = r#"{"Issues":[{"FromLinter":"govet","Text":"unreachable code","Pos":{"Filename":"main.go","Line":7,"Column":2}}]}"#; @@ -416,6 +523,100 @@ mod tests { assert!(out.text.contains("main.go:7:2: bad (govet)")); } + #[test] + fn looks_like_go_error_recognizes_non_location_error_shapes() { + // Ported from rtk go_cmd inline inputs: module/compiler failures that carry + // no file.go:line:col location must still register as errors. + assert!(looks_like_go_error("undefined: missingFunc")); + assert!(looks_like_go_error("cannot find package \"foo/bar\"")); + assert!(looks_like_go_error( + "found packages a (a.go) and b (b.go) in /tmp/rtk-go-build-probe-mix" + )); + assert!(looks_like_go_error("imports example.com/cycle/a: import cycle not allowed")); + assert!(looks_like_go_error( + "package example.com/buildtag: build constraints exclude all Go files in /tmp/x" + )); + assert!(looks_like_go_error("no Go files in /tmp/example")); + assert!(looks_like_go_error( + "go: cannot load module missing listed in go.work file: open missing/go.mod: no such \ + file or directory" + )); + assert!(looks_like_go_error("go: updates to go.mod needed; to update it: go mod tidy")); + assert!(looks_like_go_error( + "go: inconsistent vendoring in /tmp/example: run 'go mod vendor' to sync" + )); + assert!(looks_like_go_error( + "runtime.main_main·f: function main is undeclared in the main package" + )); + assert!(looks_like_go_error( + "pattern ./...: directory prefix . does not contain main module or its selected \ + dependencies" + )); + // go.mod-not-found is already covered via the `go: ... not found` arm. + assert!(looks_like_go_error( + "go: go.mod file not found in current directory or any parent directory; see 'go help \ + modules'" + )); + // NOTE: `go: downloading …/errors …` trips the broad `go: …error…` arm, + // but `is_go_noise` strips those lines upstream in filter_go_build + // before this helper runs, so the build-level test below is the real + // guard. + } + + #[test] + fn go_build_failure_preserves_non_location_error_shapes() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = MinimizerCtx { + program: "go", + subcommand: Some("build"), + command: "go build ./...", + config: &cfg, + }; + let input = "pattern ./...: directory prefix . does not contain main module or its selected \ + dependencies\nno Go files in /tmp/example\ngo: inconsistent vendoring in \ + /tmp/x: run 'go mod vendor'\nruntime.main_main·f: function main is undeclared \ + in the main package\n"; + let out = filter(&ctx, input, 1); + assert!(out.text.contains("does not contain main module")); + assert!(out.text.contains("no Go files in /tmp/example")); + assert!(out.text.contains("inconsistent vendoring")); + assert!( + out.text + .contains("function main is undeclared in the main package") + ); + } + + #[test] + fn golangci_strips_info_warn_but_keeps_level_error() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = MinimizerCtx { + program: "golangci-lint", + subcommand: Some("run"), + command: "golangci-lint run ./...", + config: &cfg, + }; + // Real default (non-json) golangci run: the typecheck headline is emitted by + // the logrus logger in its canonical `level=error msg="[linters_context]…"` + // shape — the exact format that must survive. Surrounding runner chatter + // (incl. a warn-level linters_context line) is stripped. + let input = "level=info Active 5 linters\nlevel=warning The linter 'deadcode' is \ + deprecated\nlevel=warning msg=\"[linters_context] stale cache\"\nlevel=error \ + msg=\"[linters_context] typechecking error: cannot find \ + package\"\nmain.go:10:2: undefined: Foo (typecheck)\n"; + let out = filter(&ctx, input, 1); + assert!(out.text.contains("level=error")); + assert!(out.text.contains("typechecking error")); + // `group_by_file` regroups the per-issue line under a `main.go:` header, + // so assert on the surviving location + linter, not the joined string. + assert!(out.text.contains("main.go")); + assert!(out.text.contains("undefined: Foo (typecheck)")); + assert!(!out.text.contains("level=info")); + assert!(!out.text.contains("level=warning")); + // The warn-level linters_context chatter is still dropped — the keep is + // scoped to error level, not to every linters_context line. + assert!(!out.text.contains("stale cache")); + } + #[test] fn unknown_go_tool_is_passthrough() { let cfg = MinimizerConfig { enabled: true, ..Default::default() }; @@ -430,4 +631,34 @@ mod tests { assert_eq!(out.text, input); assert!(!out.changed); } + + #[test] + fn go_json_no_double_count() { + // A -json stream has both an Output "ok\t{pkg}" line AND a pass event. + // We must count only once. + let json = "{\"Action\":\"output\",\"Package\":\"example/pkg\",\"Output\":\"ok\\texample/\ + pkg\\n\"}\n{\"Action\":\"pass\",\"Package\":\"example/pkg\",\"Elapsed\":0.123}\n"; + let result = aggregate_go_test_success(json); + assert!(result.contains("1 packages ok"), "got: {result}"); + assert!(!result.contains("2 packages ok"), "double-counted: {result}"); + } + + #[test] + fn go_benchmark_preserved_on_success() { + let input = "BenchmarkFoo-8\t1000000\t1234 ns/op\nok\texample/pkg\t1.234s\n"; + let result = filter_go_test(input, 0); + assert!(result.contains("BenchmarkFoo"), "benchmark stripped: {result}"); + } + + #[test] + fn test_json_benchmark_preserved() { + let input = r#"{"Action":"run","Test":"BenchmarkFoo"} +{"Action":"output","Output":"BenchmarkFoo-8 1000 1234 ns/op\n"} +{"Action":"output","Output":"ok example.com/pkg 1.234s\n"} +{"Action":"pass","Elapsed":1.234}"#; + let result = aggregate_go_test_success(input); + // Should NOT produce "packages ok" summary — should return head_tail of input + assert!(!result.contains("packages ok"), "benchmark json run must not be collapsed"); + assert!(result.contains("BenchmarkFoo"), "benchmark lines must survive"); + } } diff --git a/crates/pi-shell/src/minimizer/filters/gt.rs b/crates/pi-shell/src/minimizer/filters/gt.rs index 76b1f4da3..e5d6c5baf 100644 --- a/crates/pi-shell/src/minimizer/filters/gt.rs +++ b/crates/pi-shell/src/minimizer/filters/gt.rs @@ -1,5 +1,7 @@ //! Graphite (`gt`) output filters. +use std::fmt::Write as _; + use super::git; use crate::minimizer::{MinimizerCtx, MinimizerOutput, primitives}; @@ -8,10 +10,12 @@ const GT_SUBCOMMANDS: &[&str] = &[ "fetch", "stash", "worktree", ]; +#[must_use] pub fn supports(program: &str, subcommand: Option<&str>) -> bool { program == "gt" && subcommand.is_some_and(|subcommand| GT_SUBCOMMANDS.contains(&subcommand)) } +#[must_use] pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerOutput { if ctx.subcommand == Some("log") && is_log_short(ctx.command) { return MinimizerOutput::passthrough(input); @@ -21,7 +25,11 @@ pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerO let text = match ctx.subcommand { Some("log") => compact_log(&cleaned), Some("branch") => primitives::compact_listing(&cleaned, 40), - Some("submit" | "sync" | "restack" | "create") => compact_noisy_command(&cleaned, exit_code), + Some("sync") => dense_sync_summary(&cleaned, exit_code) + .unwrap_or_else(|| compact_noisy_command(&cleaned, exit_code)), + Some("restack") => dense_restack_summary(&cleaned, exit_code) + .unwrap_or_else(|| compact_noisy_command(&cleaned, exit_code)), + Some("submit" | "create") => compact_noisy_command(&cleaned, exit_code), Some("diff" | "show" | "add" | "push" | "pull" | "fetch" | "stash" | "worktree") => { let git_ctx = MinimizerCtx { program: "git", @@ -116,6 +124,125 @@ fn compact_noisy_command(input: &str, exit_code: i32) -> String { primitives::head_tail_lines(&candidate, 80, 40) } +/// FAST PATH: collapse a clean `gt sync` to one dense line. +/// +/// Re-derived against DEFAULT `gt sync` output (no injection): `Synced ... +/// branch` lines and `Deleted branch ` lines. Returns `None` (so the +/// caller falls back to `compact_noisy_command`) on a non-zero exit, on any +/// error line, or when nothing recognizable was synced/deleted — error +/// visibility is preserved. +fn dense_sync_summary(input: &str, exit_code: i32) -> Option { + if exit_code != 0 { + return None; + } + + let mut synced = 0usize; + let mut deleted = 0usize; + let mut deleted_names = Vec::new(); + + for raw in input.lines() { + let line = raw.trim(); + if line.is_empty() { + continue; + } + if is_error_line(line) { + return None; + } + // Real `gt sync` emits the top-level confirmation `Synced with remote` + // (no "branch" token); per-branch forms read `Synced ... branch`. Count + // both so a successful sync never reports `0 synced`. + if line.starts_with("Synced with remote") + || (line.contains("Synced") && line.contains("branch")) + { + synced += 1; + } else if let Some(name) = deleted_branch_name(line) { + deleted += 1; + deleted_names.push(name); + } + } + + if synced == 0 && deleted == 0 { + return None; + } + + let mut summary = format!("ok sync: {synced} synced, {deleted} deleted"); + if !deleted_names.is_empty() { + // Cap the inline name list: a long-lived stack cleanup can delete hundreds + // of merged branches at once, and this fast path bypasses the + // head_tail_lines bound that compact_noisy_command (the fallback) applies. + // Without a cap every name lands on one unbounded line, defeating the + // minimizer's bounding guarantee. Show the first DELETED_NAME_CAP names and + // summarize the rest as `+N more` (the count above stays exact). + const DELETED_NAME_CAP: usize = 20; + let shown = deleted_names.len().min(DELETED_NAME_CAP); + let names = deleted_names[..shown].join(", "); + let _ = write!(summary, " ({names}"); + if deleted_names.len() > DELETED_NAME_CAP { + let _ = write!(summary, ", +{} more", deleted_names.len() - DELETED_NAME_CAP); + } + summary.push(')'); + } + summary.push('\n'); + Some(summary) +} + +/// FAST PATH: collapse a clean `gt restack` to one dense line. +/// +/// Re-derived against DEFAULT `gt restack` output: lines reporting a restacked +/// branch. Returns `None` (caller falls back to `compact_noisy_command`) on a +/// non-zero exit, on any error line, or when no branch was restacked. +fn dense_restack_summary(input: &str, exit_code: i32) -> Option { + if exit_code != 0 { + return None; + } + + let mut restacked = 0usize; + for raw in input.lines() { + let line = raw.trim(); + if line.is_empty() { + continue; + } + if is_error_line(line) { + return None; + } + if (line.contains("Restacked") || line.contains("Rebased")) && line.contains("branch") { + restacked += 1; + } + } + + if restacked == 0 { + return None; + } + Some(format!("ok restacked {restacked} branches\n")) +} + +/// Extract the branch name from a `Deleted branch ` / `deleted branch +/// ` line. +fn deleted_branch_name(line: &str) -> Option { + let lower = line.to_ascii_lowercase(); + let marker = "deleted branch "; + let pos = lower.find(marker)?; + let rest = line[pos + marker.len()..].trim_start(); + let name = rest + .split_whitespace() + .next()? + .trim_matches(|ch: char| matches!(ch, '`' | '"' | '\'' | ',')); + if name.is_empty() { + None + } else { + Some(name.to_string()) + } +} + +fn is_error_line(line: &str) -> bool { + let lower = line.to_ascii_lowercase(); + lower.starts_with("error") + || lower.starts_with("fatal") + || lower.starts_with("conflict") + || lower.contains("failed to") + || lower.contains("merge conflict") +} + fn is_graph_node(line: &str) -> bool { let stripped = line .trim_start_matches('│') @@ -279,6 +406,89 @@ mod tests { assert!(!out.text.contains('\x1b')); } + #[test] + fn sync_dense_summary_counts_synced_and_deleted() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("sync"), &cfg); + let input = "Synced branch feat/a with remote\nSynced branch feat/b with remote\nDeleted \ + branch feat/merged-feature\nDeleted branch fix/old-hotfix\n"; + + let out = filter(&ctx, input, 0); + + assert!(out.changed); + assert_eq!(out.text, "ok sync: 2 synced, 2 deleted (feat/merged-feature, fix/old-hotfix)\n"); + } + + #[test] + fn sync_dense_summary_counts_synced_with_remote_form() { + // Donor real-output fixture (gt_cmd.rs): the top-level confirmation is + // `Synced with remote` (no "branch" token), followed by deletions. The + // synced tally must reflect this real form, not report `0 synced`. + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("sync"), &cfg); + let input = + "Synced with remote\nDeleted branch feat/merged-feature\nDeleted branch fix/old-hotfix\n"; + + let out = filter(&ctx, input, 0); + + assert!(out.changed); + assert_eq!(out.text, "ok sync: 1 synced, 2 deleted (feat/merged-feature, fix/old-hotfix)\n"); + } + + #[test] + fn sync_dense_summary_caps_deleted_name_list() { + // A long-lived stack cleanup can delete hundreds of merged branches at + // once. The dense summary must stay bounded: cap the inline name list and + // summarize the remainder as `+N more`, never emit one unbounded line. + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("sync"), &cfg); + let mut input = String::from("Synced with remote\n"); + for idx in 0..500 { + let _ = writeln!(input, "Deleted branch feat/merged-{idx}"); + } + + let out = filter(&ctx, &input, 0); + + assert!(out.changed); + // Exact deleted count is preserved. + assert!(out.text.contains("ok sync: 1 synced, 500 deleted")); + // First names stay visible; the rest collapse to a `+N more` marker. + assert!(out.text.contains("feat/merged-0")); + assert!(out.text.contains("+480 more")); + // Bounded: a single short line, not 500 names concatenated. + assert!(!out.text.contains("feat/merged-499")); + let longest = out.text.lines().map(str::len).max().unwrap_or(0); + assert!(longest < 600, "summary line not bounded: {longest} bytes"); + } + + #[test] + fn restack_dense_summary_counts_branches() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("restack"), &cfg); + let input = "Restacked branch feat/add-auth on main\nRestacked branch feat/add-db on \ + feat/add-auth\nRestacked branch fix/parsing on feat/add-db\n"; + + let out = filter(&ctx, input, 0); + + assert!(out.changed); + assert_eq!(out.text, "ok restacked 3 branches\n"); + } + + #[test] + fn sync_with_error_falls_back_to_compact() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = test_ctx(Some("sync"), &cfg); + let input = "Synced branch feat/a with remote\nerror: failed to rebase feat/b\n"; + + // Error line present -> fast path declines, compact_noisy_command keeps the + // error. + let out = filter(&ctx, input, 0); + + assert!(!out.text.starts_with("ok sync:")); + assert!(out.text.contains("error: failed to rebase feat/b")); + assert!(out.text.contains("Synced branch feat/a with remote")); + } + #[test] fn sync_noise_is_stripped_and_errors_remain() { let cfg = MinimizerConfig { enabled: true, ..Default::default() }; diff --git a/crates/pi-shell/src/minimizer/filters/js_tools.rs b/crates/pi-shell/src/minimizer/filters/js_tools.rs index a5b263f0f..01828f959 100644 --- a/crates/pi-shell/src/minimizer/filters/js_tools.rs +++ b/crates/pi-shell/src/minimizer/filters/js_tools.rs @@ -8,10 +8,12 @@ use crate::minimizer::{MinimizerCtx, MinimizerOutput, primitives}; const SUPPORTED_TOOLS: &[&str] = &["next", "prettier", "prisma"]; const NPX_ROUTABLE_TOOLS: &[&str] = &["tsc", "eslint", "prisma", "prettier", "next"]; +#[must_use] pub fn supports(program: &str, subcommand: Option<&str>) -> bool { effective_tool(program, subcommand).is_some() } +#[must_use] pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerOutput { let cleaned = primitives::strip_ansi(input); let tool = effective_tool(ctx.program, ctx.subcommand) @@ -31,6 +33,7 @@ pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerO } } +#[must_use] pub fn effective_tool<'a>(program: &'a str, subcommand: Option<&'a str>) -> Option<&'a str> { if SUPPORTED_TOOLS.contains(&program) { return Some(program); diff --git a/crates/pi-shell/src/minimizer/filters/jvm.rs b/crates/pi-shell/src/minimizer/filters/jvm.rs new file mode 100644 index 000000000..954c8b443 --- /dev/null +++ b/crates/pi-shell/src/minimizer/filters/jvm.rs @@ -0,0 +1,3117 @@ +//! JVM build-tool output filters (Apache Maven + Gradle). +//! +//! Maven side: Surefire/Failsafe block collapse, compile error/warning dedup, +//! package/install pipeline with quiet-mode toggle and phase detection. Ported +//! from rtk's `src/cmds/jvm/mvn_cmd.rs` — the execution-side concerns +//! (wrapper resolution, tee, exit propagation) do not port; this module filters +//! one already-captured buffer. +//! +//! Gradle side: strip-ansi then task-dispatched filtering. `detect_task` +//! re-tokenises the raw command to route into per-task filters — +//! `Build` / `Test` / `ConnectedTest` / `Lint` / `Dependencies` / +//! `SpringBootRun` — with an `Other` fallback for unrecognised tasks. Each +//! collapses the matching noise +//! (progress redraws, up-to-date task spam, deprecation chatter) while keeping +//! failures, reports, and resolved dependency trees. +//! +//! Replaces the deleted `defs/{maven,gradle,mvn-build}.toml` pipeline filters +//! with a Rust module capable of state-machine parsing (block collapse, +//! continuation tracking, mode toggle) that the TOML DSL cannot express. + +use std::{collections::HashSet, fmt::Write as _, sync::LazyLock}; + +use regex::Regex; + +use crate::minimizer::{ + MinimizerCtx, MinimizerOutput, + primitives::{self, CapClass}, +}; + +/// Cap on emitted failing test-class blocks and `[ERROR] Failures:` summary +/// entries. rtk bound this to `CAP_WARNINGS`; the minimizer's equivalent is +/// [`CapClass::Warnings`] (120). +const fn max_mvn_failing_classes() -> usize { + CapClass::Warnings.lines() +} + +// ── Shared line predicates ────────────────────────────────────────────────── +// +// Pure prefix matches are expressed as `str::starts_with` predicates rather +// than anchored regexes (clippy::trivial_regex, and faster). + +/// `[INFO] Running com.example.app.FooTest` +fn is_running(line: &str) -> bool { + line.starts_with("[INFO] Running ") +} + +/// Reactor summary header opening the per-module pass/fail block. +fn is_reactor_summary(line: &str) -> bool { + line.starts_with("[INFO] Reactor Summary for ") +} + +// ── Shared regex patterns ──────────────────────────────────────────────────── + +/// Surefire/Failsafe per-class close line. Captures `Failures` and `Errors`. +/// Tolerates the optional `<<< FAILURE!` / `<<< ERROR!` marker (3.5.5 emits +/// `<<< FAILURE!` even for errors-only classes; `ERROR!` accepted defensively +/// for other Surefire versions; failure detection is via the captured counts, +/// not the marker). Separator is `-` (Surefire 2.x) or `--` (Surefire 3.x). +/// Prefix INFO/ERROR/WARNING (3.x emits WARNING for classes with only skipped +/// tests). +static CLOSE: LazyLock = LazyLock::new(|| { + Regex::new( + r"^\[(?:INFO|ERROR|WARNING)\] Tests run: \d+, Failures: (\d+), Errors: (\d+), Skipped: \d+, Time elapsed: [^ ]+ s(?:\s+<<<\s*(?:FAILURE|ERROR)!)?\s+--?\s+in (.+)$", + ) + .unwrap() +}); + +/// Final BUILD footer. +static BUILD_FOOT: LazyLock = + LazyLock::new(|| Regex::new(r"^\[(?:INFO|ERROR)\] BUILD (?:SUCCESS|FAILURE)$").unwrap()); + +/// `[INFO] Results:` separator before the aggregate. +static RESULTS: LazyLock = LazyLock::new(|| Regex::new(r"^\[INFO\] Results:\s*$").unwrap()); + +/// Aggregate counts line (no `Time elapsed`, no ` - in `). +static AGG: LazyLock = LazyLock::new(|| { + Regex::new(r"^\[(?:INFO|ERROR)\] Tests run: \d+, Failures: \d+, Errors: \d+, Skipped: \d+\s*$") + .unwrap() +}); + +/// Plugin banner line: `[INFO] --- plugin:goal (id) @ module ---`. +static PLUGIN_BANNER: LazyLock = + LazyLock::new(|| Regex::new(r"^\[INFO\] --- .* @ .* ---$").unwrap()); + +/// Module banner with project name in brackets. +static MODULE_BANNER: LazyLock = + LazyLock::new(|| Regex::new(r"^\[INFO\] -+< .+ >-+$").unwrap()); + +/// Compile-error coordinate substring to strip when deduping warnings/errors. +static FILE_COORD: LazyLock = + LazyLock::new(|| Regex::new(r"/[^:]+\.java:\[\d+,\d+\]").unwrap()); + +// ── Dispatch ───────────────────────────────────────────────────────────────── + +/// True for every Maven/Gradle program token, regardless of subcommand. +/// +/// The active phase is decided inside [`filter`] by re-tokenizing the raw +/// command, never by `ctx.subcommand` (which is the FIRST non-flag arg and so +/// mis-reports the phase for `mvn clean install` — it would say `clean`). +#[must_use] +pub fn supports(program: &str, _subcommand: Option<&str>) -> bool { + is_mvn_family(program) || is_gradle_family(program) +} + +fn is_mvn_family(program: &str) -> bool { + // Defensive `.cmd` arm in case `normalize_program` is bypassed; the + // normalizer already maps `mvnw.cmd` -> `mvnw`. + matches!(program, "mvn" | "mvnw" | "mvnw.cmd") +} + +fn is_gradle_family(program: &str) -> bool { + matches!(program, "gradle" | "gradlew" | "gradlew.bat") +} + +#[must_use] +pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, _exit_code: i32) -> MinimizerOutput { + if is_gradle_family(ctx.program) { + return filter_gradle(ctx, input); + } + + // Maven family. + // + // Verbose flags bypass filtering entirely — the user asked for full output. + if has_verbose_flag(ctx.command) { + return MinimizerOutput::passthrough(input); + } + + let phase = detect_phase(ctx.command); + + // Quiet mode is orthogonal to phase: `mvn -q` suppresses all `[INFO]` lines + // so the footer guard / `Running` markers the standard filters key off can't + // fire. Route any non-passthrough phase to `filter_quiet`. + let text = if phase == MvnPhase::SpringBootRun { + // `mvn spring-boot:run` — application runtime output, not a build. The + // banner/INFO strip + keep-list lives in `filter_spring_boot`, shared with + // the gradle `bootRun` task. + filter_spring_boot(&primitives::strip_ansi(input)) + } else if is_quiet(ctx.command) && phase != MvnPhase::Passthrough { + filter_quiet(input) + } else { + match phase { + MvnPhase::Test => filter_surefire(input), + MvnPhase::Compile => filter_compile(input), + MvnPhase::Package => filter_package(input), + MvnPhase::Passthrough => filter_passthrough(input), + // Unreachable: SpringBootRun handled above. Kept exhaustive. + MvnPhase::SpringBootRun => filter_passthrough(input), + } + }; + + if text == input { + MinimizerOutput::passthrough(input) + } else { + MinimizerOutput::transformed(text, input.len()) + } +} + +// ── Gradle dispatch ────────────────────────────────────────────────────────── + +/// Gradle/`gradlew` entry. Strips ANSI/`\r` progress first (gradle captures +/// carry both), then routes by task. Verbose flags +/// (`--stacktrace`/`--info`/`--debug`/`--full-stacktrace`) bypass filtering — +/// the user explicitly asked for full detail (adopts rtk's +/// `gradlew_cmd.rs::run` user-asked-for-detail rule). +fn filter_gradle(ctx: &MinimizerCtx<'_>, input: &str) -> MinimizerOutput { + if has_gradle_verbose_flag(ctx.command) { + return MinimizerOutput::passthrough(input); + } + + let stripped = primitives::strip_ansi(input); + let text = match detect_task(ctx.command) { + GradleTask::Build => filter_gradle_build(&stripped), + GradleTask::Test => filter_gradle_test(&stripped), + GradleTask::ConnectedTest => filter_gradle_connected(&stripped), + GradleTask::Lint => filter_gradle_lint(&stripped), + GradleTask::Dependencies => filter_gradle_dependencies(&stripped), + GradleTask::SpringBootRun => filter_spring_boot(&stripped), + GradleTask::Other => filter_gradle_other(&stripped), + }; + + if text == input { + MinimizerOutput::passthrough(input) + } else { + MinimizerOutput::transformed(text, input.len()) + } +} + +/// `--stacktrace`/`--info`/`--debug`/`--full-stacktrace` anywhere → full +/// passthrough (rtk `gradlew_cmd.rs::run`). +fn has_gradle_verbose_flag(command: &str) -> bool { + arg_tokens(command) + .any(|a| matches!(a, "--stacktrace" | "--info" | "--debug" | "--full-stacktrace")) +} + +// ── Command-token scans (re-tokenize ctx.command) ──────────────────────────── + +/// Tokens of the raw command with the leading program word dropped, mirroring +/// rtk's `args` slice (which never includes the program). Splitting on +/// whitespace is sufficient for flag/goal detection; quoting subtleties do not +/// affect phase/quiet/verbose decisions. +fn arg_tokens(command: &str) -> impl Iterator { + command.split_whitespace().skip(1) +} + +/// `-X`/`--debug`/`-e`/`--errors` anywhere → full passthrough. +fn has_verbose_flag(command: &str) -> bool { + arg_tokens(command).any(|a| matches!(a, "-X" | "--debug" | "-e" | "--errors")) +} + +/// `mvn -q` / `mvn --quiet` suppresses all `[INFO]` lines. +fn is_quiet(command: &str) -> bool { + arg_tokens(command).any(|a| a == "-q" || a == "--quiet") +} + +// ── Phase detection ───────────────────────────────────────────────────────── + +#[derive(Debug, PartialEq, Eq, Clone, Copy)] +pub enum MvnPhase { + Test, // test, integration-test (Failsafe = Surefire shape) + Compile, // compile, test-compile + Package, // package, install, verify, deploy + SpringBootRun, // spring-boot:run (application runtime, not a build) + Passthrough, // clean, site, plugin goals, version/help, empty +} + +/// Whether `a` is a Maven lifecycle phase or plugin goal we map to a +/// `MvnPhase`. +fn is_recognized_mvn_goal(a: &str) -> bool { + matches!( + a, + "test" + | "integration-test" + | "compile" + | "test-compile" + | "package" + | "install" + | "verify" + | "deploy" + | "clean" + | "site" + | "site-deploy" + | "spring-boot:run" + ) || a.ends_with(":spring-boot-maven-plugin:run") +} + +/// Returns non-flag tokens from the command, skipping the value token that +/// follows each known value-taking option. This prevents option values (e.g. +/// the module name after `-pl`, the project dir after `-p`) from being +/// mistaken for build goals/tasks. +fn jvm_positional_tokens<'a>(command: &'a str, value_flags: &[&str]) -> Vec<&'a str> { + let mut out = Vec::new(); + let mut tokens = command.split_whitespace().skip(1); + while let Some(tok) = tokens.next() { + if tok.starts_with('-') { + let bare = tok.trim_start_matches('-'); + if value_flags + .iter() + .any(|f| f.trim_start_matches('-') == bare) + { + tokens.next(); // consume the value that follows this option + } + } else { + out.push(tok); + } + } + out +} + +/// Scan args left-to-right, skip flags + `-D…` system props, pick the LAST +/// RECOGNIZED lifecycle goal, ignoring unrecognized positional tokens (e.g. the +/// module name after `-pl`). +/// +/// If empty, plugin-form (`:`), or `clean`/`site` → Passthrough. Re-tokenizes +/// the raw command because `ctx.subcommand` is the FIRST non-flag arg and so +/// reports the wrong goal for `mvn clean install`. +#[must_use] +pub fn detect_phase(command: &str) -> MvnPhase { + // Use the last RECOGNIZED lifecycle goal so that option-value tokens + // (e.g. the module name after -pl) are ignored. + let last = jvm_positional_tokens(command, &[ + "-pl", + "--projects", + "-P", + "--activate-profiles", + "-f", + "--file", + "-s", + "--settings", + "-gs", + "--global-settings", + "-t", + "--toolchains", + "-gt", + "--global-toolchains", + "-T", + "--threads", + ]) + .into_iter() + .rfind(|a| is_recognized_mvn_goal(a)) + .unwrap_or(""); + + // `spring-boot:run` is checked BEFORE the generic `:`-plugin-goal guard + // below: it is application runtime output, not a plugin build step, and + // routes to the dedicated banner/keep-list filter. Match the bare goal and + // the fully-qualified `org.springframework.boot:spring-boot-maven-plugin:run` + // form. + if last == "spring-boot:run" || last.ends_with(":spring-boot-maven-plugin:run") { + return MvnPhase::SpringBootRun; + } + + if last.is_empty() || last.contains(':') { + return MvnPhase::Passthrough; + } + match last { + "clean" | "site" | "site-deploy" => MvnPhase::Passthrough, + "test" | "integration-test" => MvnPhase::Test, + "compile" | "test-compile" => MvnPhase::Compile, + "package" | "install" | "verify" | "deploy" => MvnPhase::Package, + _ => MvnPhase::Passthrough, + } +} + +// ── Stack-frame deny-list ──────────────────────────────────────────────────── + +const FRAMEWORK_FRAME_PREFIXES: &[&str] = &[ + "at org.junit.", + "at junit.", + "at org.apache.maven.surefire.", + "at sun.reflect.", + "at jdk.internal.reflect.", + "at jdk.proxy", + "at java.base/", + "at java.lang.reflect.", + "at java.util.", +]; + +fn is_framework_frame(trimmed: &str) -> bool { + FRAMEWORK_FRAME_PREFIXES + .iter() + .any(|p| trimmed.starts_with(p)) +} + +/// Boilerplate `[ERROR]` lines Maven emits after `Failed to execute goal` — +/// pure noise pointing at log files and help URLs, no signal for the user/LLM. +/// Deliberately excludes `[ERROR] After correcting the problems` and +/// `[ERROR] mvn -rf :…` (the resume hint is actionable signal for a +/// multi-module build) and `[ERROR] Failed to execute goal` (signal). +const BOILER_PREFIXES: &[&str] = &[ + "[ERROR] See ", + "[ERROR] -> [Help", + "[ERROR] To see the full stack trace", + "[ERROR] Re-run Maven", + "[ERROR] For more information", + "[ERROR] [Help", +]; + +/// Post-failure help boilerplate, plus the bare `[ERROR]` divider lines Maven +/// emits between boilerplate blocks (same drop rules as `filter_quiet`). +fn is_boilerplate(line: &str) -> bool { + BOILER_PREFIXES.iter().any(|p| line.starts_with(p)) || line.trim_end() == "[ERROR]" +} + +/// `[ERROR] FQN.method -- Time elapsed: 0.030 s <<< FAILURE!` (or `<<< +/// ERROR!`). Distinguished from CLOSE by call position: only consulted when +/// `in_block == false` (CLOSE only occurs while a block is open). +fn is_per_test_subline(line: &str) -> bool { + line.starts_with("[ERROR] ") && (line.contains("<<< FAILURE!") || line.contains("<<< ERROR!")) +} + +// ── English-footer guard ──────────────────────────────────────────────────── + +fn has_english_footer(stripped: &str) -> bool { + stripped.lines().any(|l| { + let t = l.trim(); + t.ends_with(" BUILD SUCCESS") || t.ends_with(" BUILD FAILURE") + }) +} + +// ── Outside-block keep list (shared by surefire + package) ────────────────── + +/// Multi-module reactor summary keeper. Reads `in_reactor_summary` and toggles +/// it on `[INFO] Reactor Summary for …` (enter) and `BUILD SUCCESS`/`BUILD +/// FAILURE` (exit). Returns `true` for every line while the flag is set so the +/// per-module status rows survive. Returns `false` otherwise — the caller's +/// outside-block keep-list still applies. +/// +/// Designed to be called **before** `keep_outside_block` so the `BUILD_FOOT` +/// clears-flag side effect always runs regardless of `||` short-circuit. +fn reactor_summary_keep(line: &str, in_reactor_summary: &mut bool) -> bool { + if is_reactor_summary(line) { + *in_reactor_summary = true; + return true; + } + if BUILD_FOOT.is_match(line) { + *in_reactor_summary = false; + return false; + } + *in_reactor_summary +} + +fn keep_outside_block(line: &str) -> bool { + // Help boilerplate must be rejected before the `[ERROR]` catch-all below. + if is_boilerplate(line) { + return false; + } + RESULTS.is_match(line) + || AGG.is_match(line) + || BUILD_FOOT.is_match(line) + || MODULE_BANNER.is_match(line) + || line.starts_with("[INFO] Total time:") + || line.starts_with("[INFO] Finished at:") + || line.starts_with("[INFO] Building ") + || line.starts_with("[INFO] Scanning ") + || line.starts_with("[INFO] Installing ") + || line.starts_with("[ERROR] Failures:") + || line.starts_with("[ERROR] Errors:") + || (line.starts_with("[ERROR]") && !line.starts_with("[ERROR] Tests run:")) + || line.starts_with("[INFO] Building war:") + || line.starts_with("[INFO] Building jar:") + || line.starts_with("[INFO] Building ear:") +} + +// ── Surefire block filter ─────────────────────────────────────────────────── + +/// Shared state machine driving the inner Surefire block + failure-trail +/// behaviour for `filter_surefire` and `filter_package`. Each filter wraps it +/// with its own outside-block keep logic, applied on the +/// [`SurefireStep::Passthrough`] arm. +struct SurefireBlock<'a> { + block_lines: Vec<&'a str>, + block_running: Option<&'a str>, + in_block: bool, + failure_trail: bool, + /// When set together with `failure_trail`, consumes the trail without + /// writing it to `out`. Used when the caller capped a failing block. + drop_trail: bool, + /// Set when a trail ends at a blank line; holds the `drop_trail` value so + /// the next per-test subline of the same class re-enters the trail with the + /// same keep/drop decision. + trail_rearm: Option, +} + +enum SurefireStep<'a> { + /// Inner machine consumed the line; outer loop should `continue;`. + Consumed, + /// A CLOSE line with `Failures > 0` or `Errors > 0` was reached. + FailingClose { running: Option<&'a str>, lines: Vec<&'a str>, close: &'a str }, + /// Inner machine did not handle the line; outer loop applies its own + /// outside-block keep logic. + Passthrough, +} + +impl<'a> SurefireBlock<'a> { + const fn new() -> Self { + Self { + block_lines: Vec::new(), + block_running: None, + in_block: false, + failure_trail: false, + drop_trail: false, + trail_rearm: None, + } + } + + fn step(&mut self, line: &'a str, out: &mut String) -> SurefireStep<'a> { + if PLUGIN_BANNER.is_match(line) { + return SurefireStep::Consumed; + } + + if is_running(line) { + if self.in_block { + self.flush_open_block_as_keep(out); + } + self.block_lines.clear(); + self.block_running = Some(line); + self.in_block = true; + self.failure_trail = false; + // Load-bearing: a capped multi-failure class followed by a kept + // class must not re-arm into the new class's trail decision. + self.trail_rearm = None; + return SurefireStep::Consumed; + } + + if self.in_block { + if let Some(caps) = CLOSE.captures(line) { + let fail = caps.get(1).is_some_and(|m| m.as_str() != "0"); + let err = caps.get(2).is_some_and(|m| m.as_str() != "0"); + if fail || err { + let lines = std::mem::take(&mut self.block_lines); + let running = self.block_running.take(); + self.in_block = false; + return SurefireStep::FailingClose { running, lines, close: line }; + } + self.block_lines.clear(); + self.block_running = None; + self.in_block = false; + return SurefireStep::Consumed; + } + self.block_lines.push(line); + return SurefireStep::Consumed; + } + + if self.failure_trail { + if line.is_empty() { + if !self.drop_trail { + out.push('\n'); + } + // Arm re-entry: a following per-test subline belongs to the + // same class and must inherit this trail's keep/drop decision. + self.trail_rearm = Some(self.drop_trail); + self.failure_trail = false; + self.drop_trail = false; + return SurefireStep::Consumed; + } + let t = line.trim_start(); + if t.starts_with("at ") && is_framework_frame(t) { + return SurefireStep::Consumed; + } + if self.drop_trail { + return SurefireStep::Consumed; + } + out.push_str(line); + out.push('\n'); + return SurefireStep::Consumed; + } + + if let Some(dropped) = self.trail_rearm { + if line.is_empty() { + // Tolerate extra blanks between per-test blocks: stay armed, + // let the blank fall through (outer keep-lists drop it). + return SurefireStep::Passthrough; + } + self.trail_rearm = None; // disarm unconditionally on non-blank (load-bearing) + if is_per_test_subline(line) { + self.failure_trail = true; + self.drop_trail = dropped; + if !dropped { + out.push_str(line); + out.push('\n'); + } + return SurefireStep::Consumed; + } + // Non-subline: trail is over; already disarmed — fall through. + } + + SurefireStep::Passthrough + } + + /// Mark a `FailingClose` as dropped (cap exceeded). Sets `failure_trail` so + /// the post-close trail is consumed and silently dropped until the next + /// blank line. + const fn drop_failing(&mut self) { + self.failure_trail = true; + self.drop_trail = true; + self.trail_rearm = None; + } + + /// Commit a `FailingClose` to `out`: writes `running`, then `lines` (with + /// framework frames stripped), then `close`. Enables `failure_trail` so the + /// post-close exception/user-frame trail is preserved. + fn commit_failing( + &mut self, + out: &mut String, + running: Option<&str>, + lines: &[&str], + close: &str, + ) { + if let Some(r) = running { + out.push_str(r); + out.push('\n'); + } + for l in lines { + let t = l.trim_start(); + if t.starts_with("at ") && is_framework_frame(t) { + continue; + } + out.push_str(l); + out.push('\n'); + } + out.push_str(close); + out.push('\n'); + self.failure_trail = true; + self.trail_rearm = None; + } + + /// End-of-stream flush: if a block opened and never closed (truncated + /// output), surface what we have rather than dropping it silently. + fn finish(&mut self, out: &mut String) { + if self.in_block { + self.flush_open_block_as_keep(out); + } + } + + fn flush_open_block_as_keep(&mut self, out: &mut String) { + if let Some(r) = self.block_running.take() { + out.push_str(r); + out.push('\n'); + } + for l in self.block_lines.drain(..) { + out.push_str(l); + out.push('\n'); + } + self.in_block = false; + } +} + +/// `[ERROR] Failures:` summary block cap. Maven emits a summary at the end of a +/// failing test run; on builds with hundreds of failures this can be large. Cap +/// entries at [`max_mvn_failing_classes`] and emit `\n… +N more failures\n` +/// immediately before the `Tests run:` aggregate when entries were dropped. +struct FailuresSummaryCap { + cap: usize, + in_summary: bool, + emitted: usize, + dropped: usize, +} + +impl FailuresSummaryCap { + const fn new(cap: usize) -> Self { + Self { cap, in_summary: false, emitted: 0, dropped: 0 } + } + + /// If `line` is an `[ERROR] ` entry inside the failures summary, write it + /// (or count it as dropped) and return `true` so the caller skips its own + /// keep-list. Returns `false` otherwise. + fn handle_entry(&mut self, line: &str, out: &mut String) -> bool { + if !self.in_summary || !line.starts_with("[ERROR] ") { + return false; + } + // Per core cap policy, `0` means summary-only: no entries, tail still counts. + if self.emitted < self.cap { + out.push_str(line); + out.push('\n'); + self.emitted += 1; + } else { + self.dropped += 1; + } + true + } + + /// Detect the `[ERROR] Failures:` header so subsequent `[ERROR] ` lines + /// get capped. Caller writes the header to `out`. + fn handle_header(&mut self, line: &str) { + if line.starts_with("[ERROR] Failures:") { + self.in_summary = true; + self.emitted = 0; + self.dropped = 0; + } + } + + /// Pre-emit the `… +N more failures` tail when the aggregate + /// `[ERROR] Tests run:` line is about to be written, then close the summary. + fn handle_aggregate(&mut self, line: &str, out: &mut String) { + if !self.in_summary || !AGG.is_match(line) { + return; + } + if self.dropped > 0 { + let _ = write!(out, "\n… +{} more failures\n", self.dropped); + } + self.in_summary = false; + self.emitted = 0; + self.dropped = 0; + } + + /// End-of-stream tail emission for cases where the AGG line never arrives. + fn finish(&self, out: &mut String) { + if self.in_summary && self.dropped > 0 { + let _ = write!(out, "\n… +{} more failures\n", self.dropped); + } + } +} + +/// Buffered single-pass filter for `mvn test` / `mvn integration-test`. +/// +/// English-footer guard: if no `BUILD SUCCESS`/`BUILD FAILURE` line is present, +/// return the ANSI-stripped raw input (non-English locale or truncated output). +#[must_use] +pub fn filter_surefire(raw: &str) -> String { + filter_surefire_with_cap(raw, max_mvn_failing_classes()) +} + +fn filter_surefire_with_cap(raw: &str, cap: usize) -> String { + let stripped = primitives::strip_ansi(raw); + if !has_english_footer(&stripped) { + return stripped; + } + + let mut out = String::new(); + let mut block = SurefireBlock::new(); + let mut keep_continuation = false; + let mut in_reactor_summary = false; + let mut emitted_failing: usize = 0; + let mut dropped_failing: usize = 0; + let mut summary = FailuresSummaryCap::new(cap); + + for line in stripped.lines() { + match block.step(line, &mut out) { + SurefireStep::Consumed => continue, + SurefireStep::FailingClose { running, lines, close } => { + if emitted_failing < cap { + block.commit_failing(&mut out, running, &lines, close); + emitted_failing += 1; + } else { + block.drop_failing(); + dropped_failing += 1; + } + keep_continuation = false; + continue; + }, + SurefireStep::Passthrough => {}, + } + + if keep_continuation && (line.starts_with(' ') || line.starts_with('\t')) { + out.push_str(line); + out.push('\n'); + continue; + } + + // Failures-summary cap: gate `[ERROR] ` entries, emit `+N more` tail + // before AGG. The helper consumes only summary entries. + if summary.handle_entry(line, &mut out) { + continue; + } + + // Order matters: call reactor_summary_keep first so its BUILD_FOOT + // clears-flag side effect always runs regardless of `||` short-circuit. + let reactor_keep = reactor_summary_keep(line, &mut in_reactor_summary); + if reactor_keep || keep_outside_block(line) { + summary.handle_aggregate(line, &mut out); + summary.handle_header(line); + out.push_str(line); + out.push('\n'); + keep_continuation = line.starts_with("[ERROR]") + && !line.starts_with("[ERROR] Tests run:") + && !line.starts_with("[ERROR] Failures:") + && !line.starts_with("[ERROR] Errors:"); + continue; + } + // Dropped line: reset so a stale flag can't keep an indented line that + // follows a dropped `[ERROR]` line. + keep_continuation = false; + } + + block.finish(&mut out); + summary.finish(&mut out); + if dropped_failing > 0 { + let _ = write!(out, "\n… +{dropped_failing} more failing test classes\n"); + } + out +} + +// ── Compile filter ────────────────────────────────────────────────────────── + +/// Buffered single-pass filter for `mvn compile` / `test-compile`. +/// +/// Keeps module banners, `[INFO] Building …`, `[INFO] BUILD …`, totals, finish +/// time, scanning line, and `[ERROR]` blocks with indented continuation +/// (`symbol:` / `location:` / caret). Deduplicates `[WARNING]` lines by +/// normalised message (strip file coordinates). +pub fn filter_compile(raw: &str) -> String { + let stripped = primitives::strip_ansi(raw); + if !has_english_footer(&stripped) { + return stripped; + } + + let mut out = String::new(); + let mut keep_continuation = false; + let mut seen_warnings: HashSet = HashSet::new(); + + for line in stripped.lines() { + if MODULE_BANNER.is_match(line) { + out.push_str(line); + out.push('\n'); + keep_continuation = false; + continue; + } + if BUILD_FOOT.is_match(line) + || line.starts_with("[INFO] Building ") + || line.starts_with("[INFO] Total time:") + || line.starts_with("[INFO] Finished at:") + || line.starts_with("[INFO] Scanning ") + { + out.push_str(line); + out.push('\n'); + keep_continuation = false; + continue; + } + // Help boilerplate: drop before the `[ERROR]` catch-all. + if is_boilerplate(line) { + keep_continuation = false; + continue; + } + if line.starts_with("[ERROR]") { + out.push_str(line); + out.push('\n'); + keep_continuation = true; + continue; + } + if keep_continuation && (line.starts_with(' ') || line.starts_with('\t')) { + out.push_str(line); + out.push('\n'); + continue; + } + if line.starts_with("[WARNING]") { + let payload = line.strip_prefix("[WARNING] ").unwrap_or(line); + let norm = FILE_COORD.replace_all(payload, "").to_string(); + if seen_warnings.insert(norm) { + out.push_str(line); + out.push('\n'); + } + keep_continuation = false; + continue; + } + // Drop everything else. + keep_continuation = false; + } + + out +} + +// ── Package filter ────────────────────────────────────────────────────────── + +/// Buffered single-pass filter for `mvn package`/`install`/`verify`/`deploy`. +/// +/// Mode toggle: starts in compile mode, switches to Surefire when a +/// `[INFO] Running …` line is seen (via [`SurefireBlock`]). Outside any +/// Surefire block, applies the unified keep-list (compile keepers + +/// install/artifact lines). +#[must_use] +pub fn filter_package(raw: &str) -> String { + filter_package_with_cap(raw, max_mvn_failing_classes()) +} + +fn filter_package_with_cap(raw: &str, cap: usize) -> String { + let stripped = primitives::strip_ansi(raw); + if !has_english_footer(&stripped) { + return stripped; + } + + let mut out = String::new(); + let mut block = SurefireBlock::new(); + let mut keep_continuation = false; + let mut in_reactor_summary = false; + let mut seen_warnings: HashSet = HashSet::new(); + let mut emitted_failing: usize = 0; + let mut dropped_failing: usize = 0; + let mut summary = FailuresSummaryCap::new(cap); + + for line in stripped.lines() { + match block.step(line, &mut out) { + SurefireStep::Consumed => continue, + SurefireStep::FailingClose { running, lines, close } => { + if emitted_failing < cap { + block.commit_failing(&mut out, running, &lines, close); + emitted_failing += 1; + } else { + block.drop_failing(); + dropped_failing += 1; + } + keep_continuation = false; + continue; + }, + SurefireStep::Passthrough => {}, + } + + if summary.handle_entry(line, &mut out) { + continue; + } + + // Order matters: call reactor_summary_keep first so its BUILD_FOOT + // clears-flag side effect always runs regardless of `||` short-circuit. + let reactor_keep = reactor_summary_keep(line, &mut in_reactor_summary); + // Outside any Surefire block: compile-keep AND surefire-outside-keep merge. + if reactor_keep || MODULE_BANNER.is_match(line) || keep_outside_block(line) { + summary.handle_aggregate(line, &mut out); + summary.handle_header(line); + out.push_str(line); + out.push('\n'); + keep_continuation = line.starts_with("[ERROR]") + && !line.starts_with("[ERROR] Tests run:") + && !line.starts_with("[ERROR] Failures:") + && !line.starts_with("[ERROR] Errors:"); + continue; + } + if keep_continuation && (line.starts_with(' ') || line.starts_with('\t')) { + out.push_str(line); + out.push('\n'); + continue; + } + if line.starts_with("[WARNING]") { + let payload = line.strip_prefix("[WARNING] ").unwrap_or(line); + let norm = FILE_COORD.replace_all(payload, "").to_string(); + if seen_warnings.insert(norm) { + out.push_str(line); + out.push('\n'); + } + keep_continuation = false; + continue; + } + keep_continuation = false; + } + + block.finish(&mut out); + summary.finish(&mut out); + if dropped_failing > 0 { + let _ = write!(out, "\n… +{dropped_failing} more failing test classes\n"); + } + out +} + +// ── Quiet-mode filter ─────────────────────────────────────────────────────── + +/// Filter for `mvn -q` invocations. +/// +/// Under `-q`, Maven 3.x suppresses all `[INFO]` lines, so the standard +/// filters (which key off the English `BUILD SUCCESS` footer and `[INFO] +/// Running` markers) can't fire. This filter handles the residual `-q` shape: +/// green run → empty; failure run keeps the close-line, per-test subline, +/// exception class, user-code frames, failure summary, and the `Failed to +/// execute goal` terminator; drops framework frames and help boilerplate. +pub fn filter_quiet(raw: &str) -> String { + let stripped = primitives::strip_ansi(raw); + if stripped.trim().is_empty() { + return String::new(); + } + + let mut out = String::new(); + let mut failure_trail = false; + + for line in stripped.lines() { + // Surefire close-line for a failed class — keep + enter failure trail. + if CLOSE.is_match(line) { + out.push_str(line); + out.push('\n'); + failure_trail = line.contains("<<< FAILURE!") || line.contains("<<< ERROR!"); + continue; + } + + // Per-test failure subline. + if is_per_test_subline(line) { + out.push_str(line); + out.push('\n'); + failure_trail = true; + continue; + } + + // Failure-trail body: exception class, user-code frames; drop framework frames. + if failure_trail { + if line.trim().is_empty() { + out.push('\n'); + failure_trail = false; + continue; + } + let t = line.trim_start(); + if t.starts_with("at ") && is_framework_frame(t) { + continue; + } + out.push_str(line); + out.push('\n'); + continue; + } + + // Failure summary keepers. + if line.starts_with("[ERROR] Tests run:") + || line.starts_with("[ERROR] Failures:") + || line.starts_with("[ERROR] Errors:") + || line.starts_with("[ERROR] ") + || line.starts_with("[ERROR] Failed to execute goal") + { + out.push_str(line); + out.push('\n'); + continue; + } + + // Drop post-failure help boilerplate and bare `[ERROR]` dividers. + if is_boilerplate(line) { + continue; + } + + // Safety net: keep anything else (unexpected output under `-q` is rare). + out.push_str(line); + out.push('\n'); + } + + out +} + +// ── Passthrough phase (stateless maven.toml-equivalent strip + cap) ────────── + +/// Passthrough phase (`clean`, `site`, plugin goals, `--version`, `--help`). +/// +/// rtk ran these as raw passthrough, but the deleted `maven.toml` overlay used +/// to strip download/progress/banner noise on top. To preserve the minimizer's +/// current advantage we replicate that stateless strip here plus a [`CapClass`] +/// cap. (Verbose `-X`/`--debug`/`-e`/`--errors` already short-circuited to a +/// true passthrough before reaching this function.) +fn filter_passthrough(raw: &str) -> String { + let stripped = primitives::strip_ansi(raw); + let filtered = primitives::strip_lines(&stripped, &[is_passthrough_noise]); + primitives::head_tail_cap(&filtered, CapClass::List) +} + +/// maven.toml's `strip_lines_matching` set, expressed as a predicate: +/// `Downloading`/`Downloaded`/`Progress`, the `[INFO] -+` / `[INFO] --- ` / +/// `[INFO] Building ` / `[INFO] Scanning for projects` banner noise, and bare +/// `[INFO]` lines. +fn is_passthrough_noise(line: &str) -> bool { + line.starts_with("[INFO] Downloading ") + || line.starts_with("[INFO] Downloaded ") + || line.starts_with("[INFO] --- ") + || line.starts_with("[INFO] Building ") + || line.starts_with("[INFO] Scanning for projects") + || line.starts_with("Progress ") + || line.trim_end() == "[INFO]" + || is_info_dash_banner(line) +} + +/// `^\[INFO\] -+` — the all-dashes separator / module-banner shells. +fn is_info_dash_banner(line: &str) -> bool { + let Some(rest) = line.strip_prefix("[INFO] ") else { + return false; + }; + rest.starts_with('-') + && rest + .chars() + .all(|c| c == '-' || c == '<' || c == '>' || c == ' ') + || (rest.starts_with('-') && rest.chars().take_while(|&c| c != ' ').all(|c| c == '-')) +} + +// ═══════════════════════════════════════════════════════════════════════════ +// GRADLE SIDE +// +// Ported from rtk `src/cmds/jvm/gradlew_cmd.rs`. The execution-side `run()` +// dispatcher and `StreamFilter` wrappers drop away: the minimizer filters one +// already-captured buffer, so each rtk per-line `StreamFilter` predicate is +// applied directly over the buffer's lines. Gradle captures carry ANSI colour +// and `\r` progress redraws, so every entry point strips ANSI first. +// ═══════════════════════════════════════════════════════════════════════════ + +// ── Gradle shared patterns ─────────────────────────────────────────────────── + +/// `^> Task :` — gradle task-progress lines. Pure literal-anchored, so a +/// `starts_with` (not a regex) keeps `clippy::trivial_regex` happy and is +/// faster. +fn is_gradle_task_line(line: &str) -> bool { + line.starts_with("> Task :") +} + +/// `^\* Try:|^> Run with --|^> Get more help at` (rtk `TRY_SECTION`). The +/// post-failure help block — pure noise pointing at flags and help URLs. +fn is_gradle_try_section(line: &str) -> bool { + line.starts_with("* Try:") + || line.starts_with("> Run with --") + || line.starts_with("> Get more help at") +} + +/// `^BUILD (SUCCESSFUL|FAILED)` (rtk `BUILD_STATUS`). +fn is_gradle_build_status(line: &str) -> bool { + line.starts_with("BUILD SUCCESSFUL") || line.starts_with("BUILD FAILED") +} + +/// `^\d+ actionable tasks?` (rtk `ACTIONABLE`). +static GRADLE_ACTIONABLE: LazyLock = + LazyLock::new(|| Regex::new(r"^\d+ actionable tasks?").unwrap()); + +// ── Task detection ─────────────────────────────────────────────────────────── + +#[derive(Debug, PartialEq, Eq, Clone, Copy)] +pub enum GradleTask { + Build, + Test, + ConnectedTest, + Lint, + Dependencies, + SpringBootRun, + Other, +} + +/// Pick the filter for a gradle invocation by re-tokenizing `ctx.command`. +/// +/// Ported from rtk `gradlew_cmd.rs::detect_task` (~31-64). Uses the FIRST +/// recognized task token, lowercased — tasks appear before option-value tokens +/// such as `--tests FooSpec`, so `.find()` on recognized tasks avoids matching +/// option-values. Adapted to take the raw command string instead of rtk's +/// `&[String]` args slice (the minimizer never holds a parsed args vector); the +/// leading program word is dropped by [`arg_tokens`], matching rtk's args slice +/// which never includes the program. +/// +/// `bootRun` is checked first so it routes to the dedicated Spring Boot runtime +/// filter (rtk handled `spring-boot:run`/`bootRun` via a separate command). +pub fn detect_task(command: &str) -> GradleTask { + // Use the FIRST recognized task token to ignore option-value tokens that + // follow --tests, --rerun, etc. (e.g. "gradle test --tests FooSpec" → Test). + // When find returns None we need to distinguish two cases: + // • no non-flag non-clean tokens at all → only `clean` was given → Build + // • non-flag non-clean tokens existed but none recognized → unrecognized task + // → Other + let mut non_clean_tokens = jvm_positional_tokens(command, &[ + "-p", + "--project-dir", + "-P", + "--project-prop", + "-g", + "--gradle-user-home", + "--settings-file", + "-b", + "--build-file", + "--init-script", + "-I", + "--max-workers", + "-c", + "--configuration-file", + "--project-cache-dir", + ]) + .into_iter() + .map(str::to_lowercase) + .filter(|a| a != "clean") + .peekable(); + let had_tokens = non_clean_tokens.peek().is_some(); + let task = non_clean_tokens + .find(|a| { + a.contains("bootrun") + || a.contains("connected") + || a.contains("test") + || a.contains("assemble") + || a.contains("build") + || a.contains("bundle") + || a.contains("install") + || a.contains("lint") + || a.contains("ktlint") + || a.contains("detekt") + || a == "check" + || a.contains("dependencies") + }) + .unwrap_or_default(); + + if task.contains("bootrun") { + GradleTask::SpringBootRun + } else if task.contains("connected") { + GradleTask::ConnectedTest + } else if task.contains("test") { + GradleTask::Test + } else if task.contains("assemble") + || task.contains("build") + || task.contains("bundle") + || task.contains("install") + { + GradleTask::Build + } else if task.contains("lint") || task.contains("ktlint") || task.contains("detekt") { + GradleTask::Lint + } else if task == "check" { + GradleTask::Test + } else if task.contains("dependencies") { + GradleTask::Dependencies + } else if had_tokens { + // Non-flag non-clean tokens existed but none were recognized → unrecognized + // task (e.g. `gradlew signingReport`). Rtk parity: fall through to Other. + GradleTask::Other + } else { + // No non-flag non-clean tokens at all — only `clean` was passed (filtered + // out above) → treat as Build to filter task noise (rtk parity). + GradleTask::Build + } +} + +// ── Build filter (rtk gradlew_cmd.rs::filter_build_line ~179-216) ──────────── + +/// Daemon/lifecycle chatter prefixes (rtk `DAEMON_LINE` alternation, expressed +/// as literal prefixes). +const GRADLE_DAEMON_PREFIXES: &[&str] = &[ + "Starting a Gradle Daemon", + "Daemon will be stopped", + "Reusing configuration cache", + "Calculating task graph", + "> Configure project", + "Deprecated Gradle features", + "You can use", + "For more on this", + "Configuration cache entry", +]; + +/// `^\s*\d+%|^Downloading|^Configuring|^Resolving|^\[Incubating\]|^Wrote HTML +/// report|^class \S+ could not|^\[android-` (rtk `PROGRESS`). The +/// percentage-progress and `class … could not` shapes need a regex; kept +/// verbatim from rtk. +static GRADLE_PROGRESS: LazyLock = LazyLock::new(|| { + Regex::new( + r"^\s*\d+%|^Downloading|^Configuring|^Resolving|^\[Incubating\]|^Wrote HTML report|^class \S+ could not|^\[android-", + ) + .unwrap() +}); + +/// `(?i)(^FAILURE:|^\* What went wrong:|^\* Where:|> Could not|e: +/// |error:|^Execution failed|Lint found \d+ error)` (rtk `ERROR_LINE`). +static GRADLE_ERROR_LINE: LazyLock = LazyLock::new(|| { + Regex::new( + r"(?i)(^FAILURE:|^\* What went wrong:|^\* Where:|> Could not|e: |error:|^Execution failed|Lint found \d+ error)", + ) + .unwrap() +}); + +/// `^(w: |warning:|Warning:|WARNING:)` (rtk `WARN_LINE`): kotlinc `w: `, +/// javac/gradle `warning:`/`Warning:`. +static GRADLE_WARN_LINE: LazyLock = + LazyLock::new(|| Regex::new(r"^(w: |warning:|Warning:|WARNING:)").unwrap()); + +/// `gradle\.com/s/|Publishing build scan` (rtk `BUILD_SCAN`). +fn is_gradle_build_scan(line: &str) -> bool { + line.contains("gradle.com/s/") || line.contains("Publishing build scan") +} + +/// Per-line keep predicate for Build mode (rtk `filter_build_line`). +/// +/// Strips daemon/progress/`> Task :`/try-section lines (INCLUDING +/// `> Task :x FAILED` — the `FAILURE:`/`What went wrong` block below carries +/// the signal, a deliberate donor decision), keeps build status / actionable / +/// errors / warnings / build-scan URLs, and preserves blank lines that separate +/// error sections. +fn keep_gradle_build_line(line: &str) -> bool { + // Always strip these. + if is_gradle_task_line(line) + || GRADLE_DAEMON_PREFIXES.iter().any(|p| line.starts_with(p)) + || GRADLE_PROGRESS.is_match(line) + || is_gradle_try_section(line) + { + return false; + } + + // Always keep these. + // + // Beyond rtk's `filter_build_line` keepers, the test-summary and + // `Test result:` lines are also kept: the deleted `defs/gradle.toml` (a + // strip-only filter) and snip's `gradlew-bat.yaml` both surfaced them, and a + // `> Task :test`-only Build invocation otherwise drops its sole failure + // signal. Task-progress `> Task :x FAILED` lines are still dropped — the + // strip guard above runs first, so this broader keep side cannot resurrect + // them (a deliberate donor decision: the `FAILURE:` block carries the + // signal). + is_gradle_build_status(line) + || GRADLE_ACTIONABLE.is_match(line) + || GRADLE_ERROR_LINE.is_match(line) + || GRADLE_WARN_LINE.is_match(line) + || is_gradle_build_scan(line) + || GRADLE_TEST_SUMMARY.is_match(line) + || line.contains("Test result") + || line.trim().is_empty() +} + +fn filter_gradle_build(input: &str) -> String { + let mut out: Vec<&str> = Vec::new(); + for line in input.lines() { + if keep_gradle_build_line(line) { + out.push(line); + } + } + join_lines(&out) +} + +// ── Test filter (rtk gradlew_cmd.rs::filter_test ~230-302) ─────────────────── + +/// `FAILED$| FAILED ` (rtk `FAILED_LINE`). +static GRADLE_FAILED_LINE: LazyLock = + LazyLock::new(|| Regex::new(r"FAILED$| FAILED ").unwrap()); + +/// ` PASSED$| SKIPPED$` (rtk `PASSED_SKIPPED`). +static GRADLE_PASSED_SKIPPED: LazyLock = + LazyLock::new(|| Regex::new(r" PASSED$| SKIPPED$").unwrap()); + +/// `\d+ tests? completed|\d+ tests? failed|There were failing tests|See the +/// report at` (rtk `SUMMARY_LINE`). The "See the report at" arm keeps the +/// actionable HTML-report pointer. +static GRADLE_TEST_SUMMARY: LazyLock = LazyLock::new(|| { + Regex::new(r"\d+ tests? completed|\d+ tests? failed|There were failing tests|See the report at") + .unwrap() +}); + +/// True if an `at …` stack frame belongs to a test framework (`JUnit`, Gradle +/// runner, reflection) rather than user code. Ported from rtk +/// `gradlew_cmd.rs::is_framework_frame` — DISTINCT from the Maven-side +/// [`is_framework_frame`] (gradle includes `org.gradle.`, excludes +/// `org.apache.maven.surefire.`/`java.base/`/`java.util.`). +fn is_gradle_framework_frame(trimmed: &str) -> bool { + trimmed.starts_with("at org.junit.") + || trimmed.starts_with("at junit.") + || trimmed.starts_with("at java.lang.reflect.") + || trimmed.starts_with("at sun.reflect.") + || trimmed.starts_with("at org.gradle.") +} + +/// Test-mode filter (rtk `filter_test`). +/// +/// Keeps failing test lines, the exception class+message, and the FIRST +/// user-code frame only (a deliberate aggressive choice vs the Maven side's +/// all-frames trail — donor behaviour kept). Strips `PASSED`/`SKIPPED` per-test +/// lines, `> Task :`, and the try-section. Empty output emits the rtk hint +/// message rather than an empty buffer the generic OK path can't enrich. +fn filter_gradle_test(input: &str) -> String { + if input.is_empty() { + return String::new(); + } + + let mut result_lines: Vec<&str> = Vec::new(); + let mut in_failure_block = false; + + for line in input.lines() { + // Always-noise lines. + if is_gradle_task_line(line) || is_gradle_try_section(line) { + continue; + } + + // Build summary lines always kept. + if is_gradle_build_status(line) + || GRADLE_ACTIONABLE.is_match(line) + || GRADLE_TEST_SUMMARY.is_match(line) + { + result_lines.push(line); + continue; + } + + // PASSED/SKIPPED per-test lines — strip. + if GRADLE_PASSED_SKIPPED.is_match(line) { + in_failure_block = false; + continue; + } + + // FAILED per-test lines — keep + enter failure block for the stack trace. + if GRADLE_FAILED_LINE.is_match(line) { + in_failure_block = true; + result_lines.push(line); + continue; + } + + // Stack-trace lines following a failure. + if in_failure_block { + let trimmed = line.trim(); + if trimmed.starts_with("at ") { + // Stack frame: skip framework frames, keep first user-code frame then close. + if !is_gradle_framework_frame(trimmed) { + result_lines.push(line); + in_failure_block = false; + } + } else if !trimmed.is_empty() { + // Exception class, message line, or assertion detail — keep it. + // (Covers java.*, kotlin.*, org.opentest4j.*, and message lines.) + result_lines.push(line); + } + // blank lines in failure block: skip (implicit fall-through) + } + } + + let filtered = join_lines(&result_lines); + + // Guarantee non-empty, signal-rich output. + if filtered.trim().is_empty() { + if input.contains("BUILD SUCCESSFUL") { + return "ok ✓ (no test output — add testLogging to build.gradle for details)".to_string(); + } + return input.trim().to_string(); + } + + filtered +} + +// ── Connected / instrumented test filter (rtk ~306-350) ────────────────────── + +/// `^INSTRUMENTATION_STATUS[_CODE]*:` (rtk `INSTRUMENTATION_STATUS` — the +/// character-class form matches `INSTRUMENTATION_STATUS:` and +/// `INSTRUMENTATION_STATUS_CODE:`). +static GRADLE_INSTRUMENTATION_STATUS: LazyLock = + LazyLock::new(|| Regex::new(r"^INSTRUMENTATION_STATUS[_CODE]*:").unwrap()); + +/// `^Starting \d+ tests? on ` (rtk `STARTING_TESTS`). +static GRADLE_STARTING_TESTS: LazyLock = + LazyLock::new(|| Regex::new(r"^Starting \d+ tests? on ").unwrap()); + +/// `ConnectedTest` filter (rtk `filter_connected`). Strips Android +/// instrumentation noise, then delegates the surviving PASSED/FAILED-shaped +/// output to [`filter_gradle_test`]. +fn filter_gradle_connected(input: &str) -> String { + if input.is_empty() { + return String::new(); + } + + // Special case: no device. + if input.contains("No connected devices!") { + return "connectedAndroidTest failed: No connected devices! Start an emulator or connect a \ + device." + .to_string(); + } + + let mut result_lines: Vec<&str> = Vec::new(); + for line in input.lines() { + if GRADLE_INSTRUMENTATION_STATUS.is_match(line) + || line.starts_with("INSTRUMENTATION_RESULT:") + || line.starts_with("INSTRUMENTATION_CODE:") + || GRADLE_STARTING_TESTS.is_match(line) + || line.starts_with("Installing APK") + || is_gradle_task_line(line) + || is_gradle_try_section(line) + { + continue; + } + result_lines.push(line); + } + + // After stripping instrumentation noise, connected output uses the same + // PASSED/FAILED format as unit tests — delegate. + let joined = join_lines(&result_lines); + let filtered = filter_gradle_test(&joined); + + if filtered.trim().is_empty() { + return "ok ✓ (connected tests passed)".to_string(); + } + filtered +} + +// ── Lint filter (rtk ~354-432) ─────────────────────────────────────────────── + +/// `[^:]+:\d+:.*[Ee]rror:.*\[` (rtk `ANDROID_LINT_ERROR`). +static GRADLE_ANDROID_LINT_ERROR: LazyLock = + LazyLock::new(|| Regex::new(r"[^:]+:\d+:.*[Ee]rror:.*\[").unwrap()); + +/// `[^:]+:\d+:.*[Ww]arning:.*\[` (rtk `ANDROID_LINT_WARNING`). +static GRADLE_ANDROID_LINT_WARNING: LazyLock = + LazyLock::new(|| Regex::new(r"[^:]+:\d+:.*[Ww]arning:.*\[").unwrap()); + +/// `[^:]+:\d+:\d+:.*[Ll]int` (rtk `KTLINT_VIOLATION`). +static GRADLE_KTLINT_VIOLATION: LazyLock = + LazyLock::new(|| Regex::new(r"[^:]+:\d+:\d+:.*[Ll]int").unwrap()); + +/// `[^:]+:\d+:\d+:.*error` (rtk `DETEKT_VIOLATION`). +static GRADLE_DETEKT_VIOLATION: LazyLock = + LazyLock::new(|| Regex::new(r"[^:]+:\d+:\d+:.*error").unwrap()); + +/// `\d+ (issues?|errors?|warnings?)` (rtk lint `SUMMARY_LINE`). +static GRADLE_LINT_SUMMARY: LazyLock = + LazyLock::new(|| Regex::new(r"\d+ (issues?|errors?|warnings?)").unwrap()); + +/// `Wrote (HTML|XML|text) report|file://|/build/reports/lint` (rtk +/// `REPORT_LINE`): long report-path lines to strip. +static GRADLE_LINT_REPORT: LazyLock = LazyLock::new(|| { + Regex::new(r"Wrote (HTML|XML|text) report|file://|/build/reports/lint").unwrap() +}); + +/// Lint-mode filter (rtk `filter_lint`). Keeps Android-lint / ktlint / detekt +/// violations and summaries, strips report-path lines and `> Task :`/try +/// noise. Android-lint violations carry a multi-line code-snippet + caret + +/// explanation block, separated from the next violation by a blank line; up to +/// 3 non-empty context lines are kept (cross-line state) so the LLM sees the +/// offending code without opening the file. +fn filter_gradle_lint(input: &str) -> String { + if input.is_empty() { + return String::new(); + } + + const MAX_CONTEXT_LINES: usize = 3; + + let mut result_lines: Vec<&str> = Vec::new(); + let mut context_remaining: usize = 0; + + for line in input.lines() { + if is_gradle_task_line(line) + || is_gradle_try_section(line) + || GRADLE_LINT_REPORT.is_match(line) + { + context_remaining = 0; + continue; + } + + let is_android_lint = + GRADLE_ANDROID_LINT_ERROR.is_match(line) || GRADLE_ANDROID_LINT_WARNING.is_match(line); + + if is_gradle_build_status(line) + || GRADLE_ACTIONABLE.is_match(line) + || GRADLE_LINT_SUMMARY.is_match(line) + || is_android_lint + || GRADLE_KTLINT_VIOLATION.is_match(line) + || GRADLE_DETEKT_VIOLATION.is_match(line) + { + result_lines.push(line); + // Only Android-lint violations carry multi-line context; ktlint/detekt + // /summary lines are single-line. + context_remaining = if is_android_lint { + MAX_CONTEXT_LINES + } else { + 0 + }; + continue; + } + + if context_remaining > 0 { + if line.trim().is_empty() { + // Blank line terminates the context block. + context_remaining = 0; + } else { + result_lines.push(line); + context_remaining -= 1; + } + } + } + + let filtered = join_lines(&result_lines); + + if filtered.trim().is_empty() { + if input.contains("BUILD SUCCESSFUL") { + return "ok ✓ lint passed".to_string(); + } + return input.trim().to_string(); + } + + filtered +} + +// ── Dependencies filter (rtk ~436-526) ─────────────────────────────────────── + +/// Cap on top-level dependencies emitted per configuration. rtk bound this to +/// `CAP_LIST` (20); the minimizer's equivalent is [`CapClass::List`] (80). +const fn max_gradle_deps() -> usize { + CapClass::List.lines() +} + +/// Dependencies-mode filter (rtk `filter_dependencies`). Aggregates the gradle +/// dependency tree into a per-configuration table of TOP-LEVEL deps only +/// (transitive `| +---` / ` \---` rows are dropped), capped at +/// [`max_gradle_deps`]. +fn filter_gradle_dependencies(input: &str) -> String { + if input.is_empty() { + return String::new(); + } + + let mut configs: Vec<(String, Vec)> = Vec::new(); + let mut current_config = String::new(); + let mut current_deps: Vec = Vec::new(); + let mut total_deps = 0usize; + + for line in input.lines() { + let trimmed = line.trim(); + + // Skip noise. + if trimmed.is_empty() + || is_gradle_task_line(trimmed) + || is_gradle_try_section(trimmed) + || is_gradle_build_status(trimmed) + || GRADLE_ACTIONABLE.is_match(trimmed) + || trimmed.starts_with("Downloading") + || trimmed.starts_with("Download ") + || trimmed.starts_with("Starting a Gradle") + || trimmed == "No dependencies" + || trimmed == "(n)" + { + continue; + } + + // Configuration header: "compileClasspath - Compile classpath …". Not + // indented, not a tree line, contains " - ". + if !trimmed.starts_with('+') + && !trimmed.starts_with('|') + && !trimmed.starts_with('\\') + && !trimmed.starts_with(' ') + && trimmed.contains(" - ") + { + if !current_config.is_empty() && !current_deps.is_empty() { + configs.push((current_config.clone(), current_deps.clone())); + } + current_config = trimmed.split(" - ").next().unwrap_or(trimmed).to_string(); + current_deps = Vec::new(); + continue; + } + + // Top-level dependencies only (first level of the tree). Check the + // UNTRIMMED line — top-level deps start at column 0; transitive deps are + // indented (`| +---` or ` \---`). + if (line.starts_with("+---") || line.starts_with("\\---")) && !current_config.is_empty() { + let dep = trimmed + .trim_start_matches("+--- ") + .trim_start_matches("\\--- ") + .to_string(); + current_deps.push(dep); + total_deps += 1; + } + } + + // Flush last config. + if !current_config.is_empty() && !current_deps.is_empty() { + configs.push((current_config, current_deps)); + } + + if configs.is_empty() { + if input.contains("BUILD SUCCESSFUL") { + return "ok ✓ no dependencies".to_string(); + } + return input.trim().to_string(); + } + + let mut result = + format!("{} top-level dependencies across {} configurations\n", total_deps, configs.len()); + + let cap = max_gradle_deps(); + for (config, deps) in &configs { + let _ = write!(result, "\n{} ({}):\n", config, deps.len()); + for dep in deps.iter().take(cap) { + let _ = writeln!(result, " {dep}"); + } + if deps.len() > cap { + let _ = writeln!(result, " ... +{} more", deps.len() - cap); + } + } + + result.trim_end().to_string() +} + +// ── Other-task filter (light Build-style strip) ────────────────────────────── + +/// Filter for gradle tasks that match no specialised category (rtk ran these as +/// raw passthrough). A light Build-style daemon/progress/`> Task :` strip is +/// strictly better than rtk's raw passthrough while keeping every non-noise +/// line — we cannot know which lines carry signal for an unknown task, so the +/// keep side is intentionally permissive: only daemon/progress/task-progress +/// noise is dropped. Verbose flags already short-circuited to passthrough. +fn filter_gradle_other(input: &str) -> String { + let mut out: Vec<&str> = Vec::new(); + for line in input.lines() { + if is_gradle_task_line(line) + || GRADLE_DAEMON_PREFIXES.iter().any(|p| line.starts_with(p)) + || GRADLE_PROGRESS.is_match(line) + { + continue; + } + out.push(line); + } + join_lines(&out) +} + +// ── Carried-over deleted-def: gradle.toml UP-TO-DATE strip +// ──────────────────── +// +// The deleted `defs/gradle.toml` stripped `> Task :…UP-TO-DATE`/`NO-SOURCE` +// /`FROM-CACHE` and daemon chatter. `keep_gradle_build_line` already drops all +// `> Task :` lines (a superset of UP-TO-DATE/NO-SOURCE/FROM-CACHE), the +// Configure/daemon lines, and download progress — so the carried-over behaviour +// is covered by Build mode. The inline tests below pin it. + +// ── Shared helpers ─────────────────────────────────────────────────────────── + +/// Join kept lines with `\n` and a trailing newline when non-empty, mirroring +/// the per-line `format!("{line}\n")` emission of rtk's `StreamFilter`s so the +/// output shape (and token counts) match the donor. +fn join_lines(lines: &[&str]) -> String { + if lines.is_empty() { + return String::new(); + } + let mut out = lines.join("\n"); + out.push('\n'); + out +} + +// ═══════════════════════════════════════════════════════════════════════════ +// SPRING BOOT RUN MODE (shared by `mvn spring-boot:run` and gradle `bootRun`) +// ═══════════════════════════════════════════════════════════════════════════ + +/// `bootRun`/`spring-boot:run` application runtime filter. +/// +/// Rederived (no injected flags) from rtk `src/filters/spring-boot.toml` and +/// `defs/spring-boot.toml`: a keep-list filter that drops the multi-line Spring +/// banner and INFO/DEBUG/TRACE startup chatter (which never match a keeper) and +/// keeps the actionable runtime signals — `Started … in`, `Tomcat started on +/// port`, ERROR/WARN, Exception, `Caused by:`, `Application run failed`, plus +/// surrounding Maven `[ERROR]`/`BUILD` lines and `Tests run:`. bootRun output +/// is unbounded, so a [`CapClass`] head/tail cap bounds the kept set. Input is +/// expected ANSI-stripped by the caller. +fn filter_spring_boot(input: &str) -> String { + let mut out: Vec<&str> = Vec::new(); + for line in input.lines() { + if spring_boot_keep(line) { + out.push(line); + } + } + let kept = join_lines(&out); + primitives::head_tail_cap(&kept, CapClass::List) +} + +/// rtk spring-boot.toml `keep_lines_matching`, plus the defs/spring-boot.toml +/// `[ERROR] …`/`[WARN] …` Maven-line shapes, as a predicate. A line survives if +/// it carries a startup-success or failure signal; everything else (banner, +/// INFO/DEBUG/TRACE bean chatter) is dropped. +fn spring_boot_keep(line: &str) -> bool { + SPRING_STARTED.is_match(line) + || line.contains("Tomcat started on port") + || line.contains("listening on port") + || line.contains("ERROR") + || line.contains("WARN") + || line.contains("Exception") + || line.contains("Caused by:") + || line.contains("Application run failed") + || line.contains("Tests run:") + || line.contains("FAILURE") + || SPRING_BUILD.is_match(line) +} + +/// `Started\s.*\sin\s` (rtk keep-list) — the `Started in s` line. +static SPRING_STARTED: LazyLock = + LazyLock::new(|| Regex::new(r"Started\s.*\sin\s").unwrap()); + +/// `BUILD\s` (rtk keep-list) — `BUILD SUCCESS`/`BUILD FAILURE`/`BUILD FAILED` +/// across both mvn and gradle footer shapes. +static SPRING_BUILD: LazyLock = LazyLock::new(|| Regex::new(r"BUILD\s").unwrap()); + +#[cfg(test)] +mod tests { + use super::*; + use crate::minimizer::MinimizerConfig; + + fn count_tokens(s: &str) -> usize { + s.split_whitespace().count() + } + + /// Percent token savings of `out` vs `raw`. Centralised so the + /// `mul_add`-friendly form lives in one place. + fn savings_pct(raw: &str, out: &str) -> f64 { + (count_tokens(out) as f64 / count_tokens(raw) as f64).mul_add(-100.0, 100.0) + } + + fn ctx<'a>(program: &'a str, command: &'a str, config: &'a MinimizerConfig) -> MinimizerCtx<'a> { + // subcommand mirrors detect's "first non-flag arg"; jvm never reads it + // for phase, so the exact value is irrelevant to these tests. + let subcommand = command.split_whitespace().nth(1); + MinimizerCtx { program, subcommand, command, config } + } + + // ── Phase detection (rtk mvn_cmd.rs ~994-1071, command-string adapted) ──── + + #[test] + fn phase_test() { + assert_eq!(detect_phase("mvn test"), MvnPhase::Test); + } + #[test] + fn phase_integration_test() { + assert_eq!(detect_phase("mvn integration-test"), MvnPhase::Test); + } + #[test] + fn phase_compile() { + assert_eq!(detect_phase("mvn compile"), MvnPhase::Compile); + } + #[test] + fn phase_test_compile() { + assert_eq!(detect_phase("mvn test-compile"), MvnPhase::Compile); + } + #[test] + fn phase_install() { + assert_eq!(detect_phase("mvn install"), MvnPhase::Package); + } + #[test] + fn phase_package() { + assert_eq!(detect_phase("mvn package"), MvnPhase::Package); + } + #[test] + fn phase_verify() { + assert_eq!(detect_phase("mvn verify"), MvnPhase::Package); + } + #[test] + fn phase_deploy() { + assert_eq!(detect_phase("mvn deploy"), MvnPhase::Package); + } + #[test] + fn phase_clean_install_is_pkg() { + // The load-bearing case ctx.subcommand gets wrong ("clean"). + assert_eq!(detect_phase("mvn clean install"), MvnPhase::Package); + } + #[test] + fn phase_flags_before_goal() { + assert_eq!(detect_phase("mvn -B -DskipTests test"), MvnPhase::Test); + } + #[test] + fn phase_clean_only_passthrough() { + assert_eq!(detect_phase("mvn clean"), MvnPhase::Passthrough); + } + #[test] + fn phase_site_passthrough() { + assert_eq!(detect_phase("mvn site"), MvnPhase::Passthrough); + } + #[test] + fn phase_plugin_goal_passthrough() { + assert_eq!(detect_phase("mvn dependency:tree"), MvnPhase::Passthrough); + } + #[test] + fn phase_empty_passthrough() { + assert_eq!(detect_phase("mvn"), MvnPhase::Passthrough); + } + #[test] + fn phase_version_long() { + assert_eq!(detect_phase("mvn --version"), MvnPhase::Passthrough); + } + #[test] + fn phase_version_short() { + assert_eq!(detect_phase("mvn -v"), MvnPhase::Passthrough); + } + #[test] + fn phase_version_java_style() { + assert_eq!(detect_phase("mvn -version"), MvnPhase::Passthrough); + } + #[test] + fn phase_help() { + assert_eq!(detect_phase("mvn --help"), MvnPhase::Passthrough); + } + #[test] + fn detect_phase_ignores_pl_module_value() { + // "-pl module-a" option-value must not shadow the recognized lifecycle goal + assert_eq!(detect_phase("mvn test -pl module-a"), MvnPhase::Test); + assert_eq!(detect_phase("mvn install -pl :sub1,:sub2"), MvnPhase::Package); + } + #[test] + fn detect_phase_skips_value_of_value_taking_options() { + // "-pl test" — "test" is the value of -pl, not a lifecycle goal + assert_eq!(detect_phase("mvn compile -pl test"), MvnPhase::Compile); + // "--projects test" — same, long form + assert_eq!(detect_phase("mvn install --projects test"), MvnPhase::Package); + // "-pl module-a" value is not a recognised goal; recognised goal still wins + assert_eq!(detect_phase("mvn test -pl module-a"), MvnPhase::Test); + } + + // ── Quiet detection (rtk ~1986-2003) ───────────────────────────────────── + + #[test] + fn quiet_detects_short_flag() { + assert!(is_quiet("mvn -q test")); + assert!(is_quiet("mvn test -q")); + assert!(is_quiet("mvn -B -q -DskipFoo install")); + } + #[test] + fn quiet_detects_long_flag() { + assert!(is_quiet("mvn --quiet test")); + } + #[test] + fn quiet_does_not_match_unrelated_flags() { + assert!(!is_quiet("mvn -Q test")); + assert!(!is_quiet("mvn -quiet test")); + assert!(!is_quiet("mvn -B test")); + } + + // ── Verbose bypass ─────────────────────────────────────────────────────── + + #[test] + fn verbose_flags_force_passthrough() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + // `-X` anywhere bypasses filtering even on a Test-phase command. + let i = include_str!("fixtures/jvm/mvn_test_fail_slice_raw.txt"); + let out = filter(&ctx("mvn", "mvn -X test", &cfg), i, 1); + assert_eq!(out.text, i, "verbose bypass returns raw input"); + assert!(!out.changed); + } + + // ── Surefire filter (rtk ~1076-1205) ───────────────────────────────────── + + #[test] + fn filter_surefire_pass_output_compact() { + let i = include_str!("fixtures/jvm/mvn_test_pass_slice_raw.txt"); + let o = filter_surefire(i); + assert!(!o.contains("Running org.apache.commons.cli.help.UtilTest")); + assert!(!o.contains("Time elapsed: 1.023 s -- in")); + let savings = savings_pct(i, &o); + assert!(savings >= 50.0, "pass-fixture savings >=50%, got {savings:.1}%"); + } + + #[test] + fn filter_surefire_fail_keeps_signal() { + let i = include_str!("fixtures/jvm/mvn_test_fail_slice_raw.txt"); + let o = filter_surefire(i); + assert!(o.contains("BUILD FAILURE")); + assert!(o.contains("Failures: 1")); + } + + #[test] + fn surefire_drops_passing_block() { + let i = include_str!("fixtures/jvm/mvn_test_pass_slice_raw.txt"); + let o = filter_surefire(i); + assert!(!o.contains("at org.junit."), "framework frames stripped; got:\n{o}"); + assert!( + !o.contains("Running org.apache.commons.cli.ConverterTests"), + "passing-test Running line dropped; got:\n{o}" + ); + assert!(o.contains("BUILD SUCCESS"), "footer preserved; got:\n{o}"); + assert!(o.contains("Tests run: 977, Failures: 0"), "aggregate preserved; got:\n{o}"); + } + + #[test] + fn surefire_preserves_failing_signal() { + let i = include_str!("fixtures/jvm/mvn_test_fail_slice_raw.txt"); + let o = filter_surefire(i); + assert!(o.contains("Failures: 1"), "failing aggregate preserved; got:\n{o}"); + assert!(o.contains("AssertionFailedError"), "exception class preserved; got:\n{o}"); + assert!( + o.contains("at org.apache.commons.cli.RtkInducedFailTest.rtkInducedFailure"), + "user-code frame preserved; got:\n{o}" + ); + assert!(!o.contains("at org.junit."), "framework frames stripped; got:\n{o}"); + } + + #[test] + fn surefire_matches_legacy_2x_close_line() { + let i = "[INFO] -----< x >-----\n[INFO] Running x.Foo\n[INFO] Tests run: 3, Failures: 0, \ + Errors: 0, Skipped: 0, Time elapsed: 0.123 s - in x.Foo\n[INFO] BUILD SUCCESS\n"; + let o = filter_surefire(i); + assert!(!o.contains("Running x.Foo"), "2.x ` - in ` close-line matched; got:\n{o}"); + assert!(o.contains("BUILD SUCCESS"), "footer preserved; got:\n{o}"); + } + + #[test] + fn surefire_matches_warning_skipped_close_line() { + let i = "[INFO] -----< x >-----\n[INFO] Running x.Skip\n[WARNING] Tests run: 5, Failures: \ + 0, Errors: 0, Skipped: 5, Time elapsed: 0.010 s -- in x.Skip\n[INFO] BUILD \ + SUCCESS\n"; + let o = filter_surefire(i); + assert!(!o.contains("Running x.Skip"), "[WARNING] close-line matched; got:\n{o}"); + } + + #[test] + fn surefire_preserves_3x_failure_trail() { + let i = "[INFO] -----< x >-----\n[INFO] Running x.Foo\n[ERROR] Tests run: 1, Failures: 1, \ + Errors: 0, Skipped: 0, Time elapsed: 0.033 s <<< FAILURE! -- in x.Foo\n[ERROR] \ + x.Foo.bar -- Time elapsed: 0.025 s <<< \ + FAILURE!\norg.opentest4j.AssertionFailedError: expected: but was: \n\tat \ + x.Foo.bar(Foo.java:25)\n\tat \ + org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:1)\n\n[INFO] BUILD \ + FAILURE\n"; + let o = filter_surefire(i); + assert!(o.contains("AssertionFailedError"), "exception preserved; got:\n{o}"); + assert!(o.contains("at x.Foo.bar"), "user frame preserved; got:\n{o}"); + assert!(!o.contains("at org.junit."), "framework frame stripped in trail; got:\n{o}"); + } + + // ── Multi-failure class (trail re-arm) (rtk ~1213-1379) ─────────────────── + + #[test] + fn surefire_keeps_all_failures_in_multi_failure_class() { + let i = include_str!("fixtures/jvm/mvn_test_multifail_slice_raw.txt"); + let o = filter_surefire(i); + assert!( + o.contains("AssertionFailedError: failOne: addition should equal five"), + "first failure message preserved; got:\n{o}" + ); + assert!( + o.contains("IllegalStateException: failTwo: induced error"), + "second failure (ERROR! subline) message preserved; got:\n{o}" + ); + assert!( + o.contains("at com.example.rtk.CalcTest.failOne(CalcTest.java:12)"), + "first user frame preserved; got:\n{o}" + ); + assert!( + o.contains("at com.example.rtk.CalcTest.failTwo(CalcTest.java:17)"), + "second user frame preserved; got:\n{o}" + ); + assert!(!o.contains("at org.junit."), "junit frames stripped; got:\n{o}"); + assert!(!o.contains("at java.base/"), "jdk frames stripped; got:\n{o}"); + } + + #[test] + fn package_keeps_all_failures_in_multi_failure_class() { + let i = include_str!("fixtures/jvm/mvn_test_multifail_slice_raw.txt"); + let o = filter_package(i); + assert!( + o.contains("AssertionFailedError: failOne: addition should equal five"), + "first failure message preserved; got:\n{o}" + ); + assert!( + o.contains("IllegalStateException: failTwo: induced error"), + "second failure message preserved; got:\n{o}" + ); + assert!(!o.contains("at org.junit."), "junit frames stripped; got:\n{o}"); + assert!(!o.contains("at java.base/"), "jdk frames stripped; got:\n{o}"); + } + + #[test] + fn surefire_drop_failing_drops_all_sublines_of_capped_class() { + let i = "[INFO] Scanning for projects...\n[INFO] -----< x >-----\n[INFO] Running \ + x.FailA\n[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: \ + 0.011 s <<< FAILURE! -- in x.FailA\n[ERROR] x.FailA.one -- Time elapsed: 0.010 s \ + <<< FAILURE!\norg.opentest4j.AssertionFailedError: boomA\n\tat \ + x.FailA.one(FailA.java:10)\n\n[INFO] Running x.MultiFail\n[ERROR] Tests run: 2, \ + Failures: 1, Errors: 1, Skipped: 0, Time elapsed: 0.051 s <<< FAILURE! -- in \ + x.MultiFail\n[ERROR] x.MultiFail.first -- Time elapsed: 0.020 s <<< \ + FAILURE!\norg.opentest4j.AssertionFailedError: boomFirst\n\tat \ + x.MultiFail.first(MultiFail.java:20)\n\n[ERROR] x.MultiFail.second -- Time \ + elapsed: 0.030 s <<< ERROR!\njava.lang.IllegalStateException: boomSecond\n\tat \ + x.MultiFail.second(MultiFail.java:30)\n\n[INFO] BUILD FAILURE\n"; + let o = filter_surefire_with_cap(i, 1); + assert!(o.contains("boomA"), "first class kept; got:\n{o}"); + assert!( + !o.contains("Running x.MultiFail") && !o.contains("boomFirst"), + "capped class first block dropped; got:\n{o}" + ); + assert!( + !o.contains("x.MultiFail.second") && !o.contains("boomSecond"), + "capped class second per-test block dropped (re-arm inherits drop); got:\n{o}" + ); + assert!( + o.contains("… +1 more failing test classes"), + "tail counts one class, not one per failure; got:\n{o}" + ); + } + + #[test] + fn surefire_rearm_disarms_at_results_boundary() { + let i = "[INFO] -----< x >-----\n[INFO] Running x.MultiFail\n[ERROR] Tests run: 2, \ + Failures: 2, Errors: 0, Skipped: 0, Time elapsed: 0.051 s <<< FAILURE! -- in \ + x.MultiFail\n[ERROR] x.MultiFail.first -- Time elapsed: 0.020 s <<< \ + FAILURE!\norg.opentest4j.AssertionFailedError: boomFirst\n\n[ERROR] \ + x.MultiFail.second -- Time elapsed: 0.030 s <<< \ + FAILURE!\norg.opentest4j.AssertionFailedError: boomSecond\n\n[INFO] \ + Results:\n[ERROR] Tests run: 2, Failures: 2, Errors: 0, Skipped: 0\n[INFO] BUILD \ + FAILURE\n"; + let o = filter_surefire(i); + assert!(o.contains("boomSecond"), "second block kept; got:\n{o}"); + assert!(o.contains("[INFO] Results:"), "Results boundary disarms re-arm; got:\n{o}"); + assert!(o.contains("[ERROR] Tests run: 2, Failures: 2"), "aggregate kept; got:\n{o}"); + } + + #[test] + fn surefire_tolerates_double_blank_between_failure_blocks() { + let i = "[INFO] -----< x >-----\n[INFO] Running x.MultiFail\n[ERROR] Tests run: 2, \ + Failures: 2, Errors: 0, Skipped: 0, Time elapsed: 0.051 s <<< FAILURE! -- in \ + x.MultiFail\n[ERROR] x.MultiFail.first -- Time elapsed: 0.020 s <<< \ + FAILURE!\norg.opentest4j.AssertionFailedError: boomFirst\n\n\n[ERROR] \ + x.MultiFail.second -- Time elapsed: 0.030 s <<< \ + FAILURE!\norg.opentest4j.AssertionFailedError: boomSecond\n\n[INFO] BUILD FAILURE\n"; + let o = filter_surefire(i); + assert!(o.contains("boomFirst"), "first block kept; got:\n{o}"); + assert!(o.contains("boomSecond"), "second block re-enters trail; got:\n{o}"); + assert!(!o.contains("\n\n\n"), "no spurious blank lines leak; got:\n{o:?}"); + } + + #[test] + fn surefire_single_failure_output_unchanged() { + let i = include_str!("fixtures/jvm/mvn_test_fail_slice_raw.txt"); + let o = filter_surefire(i); + // Built via `concat!` of one `\n`-terminated line per literal so rustfmt + // cannot reflow a `\n` across the soft-wrap boundary (a `\`-continuation + // inside a single literal mangles embedded escapes). + let expected = concat!( + "[INFO] Scanning for projects...\n", + "[INFO] ----------------------< commons-cli:commons-cli >-----------------------\n", + "[INFO] Building Apache Commons CLI 1.11.1-SNAPSHOT\n", + "[INFO] Running org.apache.commons.cli.RtkInducedFailTest\n", + "[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.033 s <<< \ + FAILURE! -- in org.apache.commons.cli.RtkInducedFailTest\n", + "[ERROR] org.apache.commons.cli.RtkInducedFailTest.rtkInducedFailure -- Time elapsed: \ + 0.025 s <<< FAILURE!\n", + "org.opentest4j.AssertionFailedError: expected: but was: \n", + "\tat org.apache.commons.cli.RtkInducedFailTest.rtkInducedFailure(RtkInducedFailTest.\ + java:25)\n", + "\n", + "[INFO] Results:\n", + "[ERROR] Failures:\n", + "[ERROR] RtkInducedFailTest.rtkInducedFailure:25 expected: but was: \ + \n", + "[ERROR] Tests run: 978, Failures: 1, Errors: 0, Skipped: 61\n", + "[INFO] BUILD FAILURE\n", + "[INFO] Total time: 01:05 min\n", + "[INFO] Finished at: 2026-05-21T14:57:09Z\n", + "[ERROR] Failed to execute goal \ + org.apache.maven.plugins:maven-surefire-plugin:3.5.5:test (default-test) on project \ + commons-cli: There are test failures.\n", + ); + assert_eq!(o, expected, "single-failure output must be byte-identical"); + } + + #[test] + fn savings_mvn_test_multifail_slice() { + let i = include_str!("fixtures/jvm/mvn_test_multifail_slice_raw.txt"); + let o = filter_surefire(i); + let savings = savings_pct(i, &o); + assert!(savings >= 30.0, "multifail slice >=30% savings, got {savings:.1}%"); + } + + #[test] + fn surefire_drops_help_boilerplate_in_nonquiet_mode() { + let i = include_str!("fixtures/jvm/mvn_test_multifail_slice_raw.txt"); + let o = filter_surefire(i); + assert!(o.contains("[ERROR] Failed to execute goal"), "goal terminator kept; got:\n{o}"); + assert!(!o.contains("[Help 1]"), "help link stripped; got:\n{o}"); + assert!(!o.contains("Re-run Maven"), "re-run hint stripped; got:\n{o}"); + assert!(!o.contains("To see the full stack trace"), "stack-trace hint stripped; got:\n{o}"); + assert!(!o.contains("See dump files"), "dump-file pointer stripped; got:\n{o}"); + assert!( + !o.lines().any(|l| l.trim_end() == "[ERROR]"), + "bare [ERROR] dividers stripped; got:\n{o}" + ); + } + + #[test] + fn close_line_matches_error_marker() { + let line = "[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.006 s \ + <<< ERROR! -- in com.example.rtk.BoomTest"; + let caps = CLOSE + .captures(line) + .expect("CLOSE must match an ERROR!-marked close line"); + assert_eq!(caps.get(1).expect("failures group").as_str(), "0"); + assert_eq!(caps.get(2).expect("errors group").as_str(), "1"); + } + + #[test] + fn surefire_keeps_compile_continuation_on_test_phase() { + let i = include_str!("fixtures/jvm/mvn_test_compile_fail_slice_raw.txt"); + let o = filter_surefire(i); + assert!(o.contains("cannot find symbol"), "ERROR line preserved; got:\n{o}"); + assert!(o.contains("symbol: variable bar"), "indented `symbol:` preserved; got:\n{o}"); + assert!( + o.contains("location: class org.apache.commons.cli.CompileBreaker"), + "indented `location:` preserved; got:\n{o}" + ); + assert!(o.contains("BUILD FAILURE"), "footer preserved; got:\n{o}"); + } + + #[test] + fn package_still_keeps_compile_error_continuation_after_refactor() { + let i = include_str!("fixtures/jvm/mvn_compile_error_slice_raw.txt"); + let o = filter_package(i); + assert!(o.contains("cannot find symbol"), "ERROR line preserved; got:\n{o}"); + assert!(o.contains("symbol: variable bar"), "indented `symbol:` preserved; got:\n{o}"); + assert!( + o.contains("location: class org.apache.commons.cli.CompileBreaker"), + "indented `location:` preserved; got:\n{o}" + ); + } + + #[test] + fn surefire_keeps_module_banner() { + let i = "[INFO] Scanning for projects...\n[INFO] -----< com.example:myapp >-----\n[INFO] \ + BUILD SUCCESS\n"; + let o = filter_surefire(i); + assert!(o.contains("-----< com.example:myapp >-----")); + } + + #[test] + fn surefire_preserves_real_durations() { + let i = "[INFO] -----< x >-----\n[INFO] Running x.Foo\n[ERROR] Tests run: 1, Failures: 1, \ + Errors: 0, Skipped: 0, Time elapsed: 2.341 s <<< FAILURE! - in x.Foo\n[INFO] BUILD \ + FAILURE\n[INFO] Total time: 4.567 s\n"; + let o = filter_surefire(i); + assert!(o.contains("2.341 s"), "raw close-line duration preserved; got:\n{o}"); + assert!(o.contains("Total time: 4.567 s"), "raw total time preserved; got:\n{o}"); + assert!(!o.contains("Time elapsed: T s"), "no normalisation in production; got:\n{o}"); + } + + // ── English-footer guard (rtk ~1551-1578) ──────────────────────────────── + + #[test] + fn footer_guard_french_passthrough() { + let i = include_str!("fixtures/jvm/mvn_locale_fr_raw.txt"); + let o = filter_surefire(i); + assert!(o.contains("BUILD ÉCHEC"), "footer-guard passes through non-English; got:\n{o}"); + assert_eq!(o.lines().count(), i.lines().count(), "footer-guard returns raw input"); + } + + #[test] + fn footer_guard_no_pom_passthrough() { + let i = include_str!("fixtures/jvm/mvn_no_pom_raw.txt"); + let o = filter_surefire(i); + assert!(o.contains("there is no POM"), "no-pom error preserved; got:\n{o}"); + } + + // ── CRLF line-ending compatibility (rtk ~1589-1615) ────────────────────── + + #[test] + fn surefire_handles_crlf_line_endings() { + let i_lf = include_str!("fixtures/jvm/mvn_test_pass_slice_raw.txt").replace("\r\n", "\n"); + let o_lf = filter_surefire(&i_lf); + let i_crlf = i_lf.replace('\n', "\r\n"); + let o_crlf = filter_surefire(&i_crlf); + assert_eq!( + o_lf, + o_crlf.replace("\r\n", "\n"), + "CRLF filtered output must match LF (modulo line endings)" + ); + } + + #[test] + fn package_handles_crlf_line_endings() { + let i_lf = include_str!("fixtures/jvm/mvn_install_slice_raw.txt").replace("\r\n", "\n"); + let o_lf = filter_package(&i_lf); + let i_crlf = i_lf.replace('\n', "\r\n"); + let o_crlf = filter_package(&i_crlf); + assert_eq!( + o_lf, + o_crlf.replace("\r\n", "\n"), + "CRLF filtered output must match LF (modulo line endings)" + ); + } + + // ── Cap: failing-class blocks (rtk ~1623-1711) ─────────────────────────── + + #[test] + fn surefire_caps_failing_blocks_emits_tail() { + let mut i = String::from("[INFO] Scanning for projects...\n[INFO] -----< x >-----\n"); + for n in 1..=5 { + let _ = write!( + i, + "[INFO] Running x.Fail{n}\n[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, \ + Time elapsed: 0.0{n}1 s <<< FAILURE! -- in x.Fail{n}\n[ERROR] x.Fail{n}.bar -- Time \ + elapsed: 0.0{n}0 s <<< FAILURE!\norg.opentest4j.AssertionFailedError: boom{n}\n\tat \ + x.Fail{n}.bar(Fail{n}.java:25)\n\n" + ); + } + i.push_str("[INFO] BUILD FAILURE\n"); + let o = filter_surefire_with_cap(&i, 3); + for n in 1..=3 { + assert!(o.contains(&format!("Running x.Fail{n}")), "Fail{n} kept; got:\n{o}"); + assert!(o.contains(&format!("in x.Fail{n}")), "Fail{n} close line kept; got:\n{o}"); + } + for n in 4..=5 { + assert!(!o.contains(&format!("Running x.Fail{n}")), "Fail{n} dropped; got:\n{o}"); + assert!( + !o.contains(&format!("AssertionFailedError: boom{n}")), + "Fail{n} exception dropped; got:\n{o}" + ); + } + assert!(o.contains("… +2 more failing test classes"), "tail emitted; got:\n{o}"); + } + + #[test] + fn surefire_cap_zero_emits_summary_only() { + let mut i = String::from("[INFO] Scanning for projects...\n[INFO] -----< x >-----\n"); + for n in 1..=5 { + let _ = write!( + i, + "[INFO] Running x.Fail{n}\n[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, \ + Time elapsed: 0.0{n}1 s <<< FAILURE! -- in x.Fail{n}\n\n" + ); + } + i.push_str("[INFO] BUILD FAILURE\n"); + let o = filter_surefire_with_cap(&i, 0); + for n in 1..=5 { + assert!( + !o.contains(&format!("Running x.Fail{n}")), + "Fail{n} dropped under cap=0; got:\n{o}" + ); + } + assert!(o.contains("+5 more failing test classes"), "tail counts all 5; got:\n{o}"); + } + + #[test] + fn failures_summary_block_is_capped() { + let mut i = + String::from("[INFO] -----< x >-----\n[INFO] Results:\n[INFO]\n[ERROR] Failures:\n"); + for n in 1..=5 { + let _ = writeln!(i, "[ERROR] ClassA.test{n}:25 expected: but was: "); + } + i.push_str( + "[INFO]\n[ERROR] Tests run: 100, Failures: 5, Errors: 0, Skipped: 0\n[INFO] BUILD \ + FAILURE\n", + ); + let o = filter_surefire_with_cap(&i, 3); + for n in 1..=3 { + assert!(o.contains(&format!("ClassA.test{n}:25")), "entry {n} kept; got:\n{o}"); + } + for n in 4..=5 { + assert!(!o.contains(&format!("ClassA.test{n}:25")), "entry {n} dropped; got:\n{o}"); + } + let tail_idx = o.find("… +2 more failures").expect("tail must appear"); + let agg_idx = o + .find("[ERROR] Tests run: 100") + .expect("aggregate must appear"); + assert!(tail_idx < agg_idx, "tail must precede aggregate; got:\n{o}"); + } + + // ── Multi-module reactor summary (rtk ~1777-1848) ──────────────────────── + + #[test] + fn reactor_summary_kept_on_multi_module_pass() { + let i = include_str!("fixtures/jvm/mvn_reactor_pass_slice_raw.txt"); + let o = filter_package(i); + assert!( + o.contains("Reactor Summary for multi-module-skeleton"), + "reactor summary header preserved; got:\n{o}" + ); + assert!( + o.contains("[INFO] child-a ............................................ SUCCESS"), + "per-module SUCCESS row preserved; got:\n{o}" + ); + assert!( + o.contains("[INFO] child-b ............................................ SUCCESS"), + "second per-module SUCCESS row preserved; got:\n{o}" + ); + assert!(o.contains("BUILD SUCCESS"), "footer preserved; got:\n{o}"); + } + + #[test] + fn reactor_summary_kept_on_multi_module_fail() { + let i = include_str!("fixtures/jvm/mvn_reactor_fail_slice_raw.txt"); + let o = filter_package(i); + assert!( + o.contains("Reactor Summary for multi-module-skeleton"), + "reactor summary header preserved; got:\n{o}" + ); + assert!( + o.contains("child-a ............................................ SUCCESS"), + "successful module row preserved; got:\n{o}" + ); + assert!( + o.contains("child-b ............................................ FAILURE"), + "failing module row preserved; got:\n{o}" + ); + assert!(o.contains("BUILD FAILURE"), "footer preserved; got:\n{o}"); + assert!(o.contains("[ERROR] Failed to execute goal"), "goal terminator preserved; got:\n{o}"); + assert!(o.contains("mvn -rf :child-b"), "resume hint preserved; got:\n{o}"); + assert!(!o.contains("[Help 1]"), "help boilerplate stripped; got:\n{o}"); + assert!(!o.contains("Re-run Maven"), "re-run hint stripped; got:\n{o}"); + let savings = savings_pct(i, &o); + assert!(savings >= 30.0, "reactor-fail slice savings >=30%; got {savings:.1}%"); + } + + // ── Compile filter (rtk ~1853-1891) ────────────────────────────────────── + + #[test] + fn filter_compile_error_compact() { + let i = include_str!("fixtures/jvm/mvn_compile_error_slice_raw.txt"); + let o = filter_compile(i); + let savings = savings_pct(i, &o); + assert!(savings >= 30.0, "compile-error fixture small; >=30% savings, got {savings:.1}%"); + } + + #[test] + fn compile_preserves_error_continuation() { + let i = include_str!("fixtures/jvm/mvn_compile_error_slice_raw.txt"); + let o = filter_compile(i); + assert!(o.contains("cannot find symbol"), "ERROR line preserved"); + assert!(o.contains("symbol: variable bar"), "indented continuation preserved"); + assert!(o.contains("BUILD FAILURE"), "footer preserved"); + assert!(!o.contains("[Help 1]"), "help boilerplate stripped; got:\n{o}"); + } + + #[test] + fn compile_dedupes_warnings() { + let i = "[INFO] -----< x >-----\n[WARNING] /a.java:[1,2] uses deprecated API\n[WARNING] \ + /b.java:[3,4] uses deprecated API\n[WARNING] /a.java:[5,6] unchecked cast\n[INFO] \ + BUILD SUCCESS\n"; + let o = filter_compile(i); + let warns = o.matches("[WARNING]").count(); + assert_eq!(warns, 2, "dedup by normalised message; got:\n{o}"); + } + + // ── Package filter (rtk ~1895-1926) ────────────────────────────────────── + + #[test] + fn filter_package_install_compact() { + let i = include_str!("fixtures/jvm/mvn_install_slice_raw.txt"); + let o = filter_package(i); + let savings = savings_pct(i, &o); + assert!(savings >= 50.0, "install-slice savings >=50%, got {savings:.1}%"); + } + + #[test] + fn package_keeps_install_lines() { + let i = include_str!("fixtures/jvm/mvn_install_slice_raw.txt"); + let o = filter_package(i); + assert!(o.contains("Installing"), "install line preserved; got:\n{o}"); + assert!(o.contains("Building jar:"), "jar line preserved; got:\n{o}"); + assert!(!o.contains("at org.junit."), "framework frames stripped; got:\n{o}"); + } + + // ── Quiet mode (`mvn -q`) (rtk ~2005-2108) ─────────────────────────────── + + #[test] + fn quiet_green_run_is_empty() { + assert_eq!(filter_quiet(""), ""); + assert_eq!(filter_quiet(" \n\n \n"), ""); + } + + #[test] + fn quiet_fail_strips_framework_and_boilerplate() { + let i = include_str!("fixtures/jvm/mvn_quiet_fail_raw.txt"); + let o = filter_quiet(i); + assert!( + o.contains("Tests run: 1, Failures: 1, Errors: 0, Skipped: 0"), + "close-line preserved; got:\n{o}" + ); + assert!(o.contains("AssertionFailedError"), "exception class preserved; got:\n{o}"); + assert!(o.contains("at x.FailTest.this_will_fail"), "user-code frame preserved; got:\n{o}"); + assert!(o.contains("[ERROR] Failures:"), "failure summary header preserved; got:\n{o}"); + assert!( + o.contains("[ERROR] Tests run: 6, Failures: 1, Errors: 0, Skipped: 0"), + "aggregate preserved; got:\n{o}" + ); + assert!(o.contains("[ERROR] Failed to execute goal"), "goal terminator preserved; got:\n{o}"); + assert!(!o.contains("at org.junit."), "junit frame stripped; got:\n{o}"); + assert!(!o.contains("at java.base/"), "java.base frame stripped; got:\n{o}"); + assert!(!o.contains("To see the full stack trace"), "help boilerplate stripped; got:\n{o}"); + assert!(!o.contains("[Help 1] http"), "help link stripped; got:\n{o}"); + assert!( + !o.contains("See /tmp/") && !o.contains("See dump files"), + "log-pointer lines stripped; got:\n{o}" + ); + } + + #[test] + fn savings_mvn_quiet_fail() { + let i = include_str!("fixtures/jvm/mvn_quiet_fail_raw.txt"); + let o = filter_quiet(i); + let savings = savings_pct(i, &o); + assert!(savings >= 50.0, "mvn -q fail >=50% savings, got {savings:.1}%"); + } + + #[test] + fn quiet_unknown_error_line_kept_as_safety_net() { + let i = "[ERROR] Some unexpected error output we don't classify\n"; + let o = filter_quiet(i); + assert!( + o.contains("Some unexpected error output"), + "unclassified ERROR line preserved; got:\n{o}" + ); + } + + // ── Dispatch smoke tests ───────────────────────────────────────────────── + + #[test] + fn dispatch_supports_all_jvm_programs() { + assert!(supports("mvn", Some("clean"))); + assert!(supports("mvnw", None)); + assert!(supports("gradle", Some("build"))); + assert!(supports("gradlew", Some("test"))); + assert!(supports("mvnw.cmd", None)); + assert!(supports("gradlew.bat", None)); + assert!(!supports("cargo", Some("test"))); + } + + #[test] + fn gradle_build_strips_tasks_keeps_status() { + // Replaces the former temporary-passthrough pin: gradle now dispatches to + // the real Build filter, which strips `> Task :…UP-TO-DATE` noise and + // keeps the BUILD status (carries over the deleted defs/gradle.toml + // UP-TO-DATE strip as a Rust filter). + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let i = "> Task :app:compileJava UP-TO-DATE\n> Task :app:test\nBUILD SUCCESSFUL in 8s\n"; + let out = filter(&ctx("gradle", "gradle build", &cfg), i, 0); + assert!(out.changed, "build filter strips task-progress noise"); + assert!(out.text.contains("BUILD SUCCESSFUL in 8s"), "status kept; got:\n{}", out.text); + assert!(!out.text.contains("> Task :"), "task lines stripped; got:\n{}", out.text); + } + + #[test] + fn dispatch_clean_install_routes_to_package() { + // End-to-end: `mvn clean install` must route through the Package filter + // (not the `clean`-Passthrough that ctx.subcommand would pick). + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let i = include_str!("fixtures/jvm/mvn_install_slice_raw.txt"); + let out = filter(&ctx("mvn", "mvn clean install", &cfg), i, 0); + assert!(out.changed, "package filter transformed install output"); + assert!(out.text.contains("Building jar:"), "package keepers applied; got:\n{}", out.text); + } + + // ── Carried-over deleted-def test: maven.toml "keeps build failure" ─────── + + /// maven.toml's `[[tests]]` "keeps build failure" — the Passthrough-phase + /// strip (clean/plugin goals) must still surface the BUILD FAILURE + + /// `Failed to execute goal` signal while dropping `Downloading`/banner + /// noise. + #[test] + fn passthrough_keeps_build_failure_drops_download_noise() { + let i = "[INFO] Scanning for projects...\n\ + [INFO] Downloading from central: https://repo.maven.apache.org/foo.jar\n\ + [INFO] -----\n\ + [ERROR] Failed to execute goal\n\ + [INFO] BUILD FAILURE\n"; + let o = filter_passthrough(i); + assert!(o.contains("[ERROR] Failed to execute goal"), "error kept; got:\n{o}"); + assert!(o.contains("[INFO] BUILD FAILURE"), "footer kept; got:\n{o}"); + assert!(!o.contains("Downloading from central"), "download noise dropped; got:\n{o}"); + assert!(!o.contains("[INFO] -----"), "banner dashes dropped; got:\n{o}"); + } + + // ═══════════════════════════════════════════════════════════════════════ + // GRADLE TESTS (ported from rtk gradlew_cmd.rs inline #[test]s) + // ═══════════════════════════════════════════════════════════════════════ + + // ── Task detection (rtk ~541-658) ─────────────────────────────────────── + + #[test] + fn gradle_detect_connected_wins_over_test() { + // connectedAndroidTest contains "test" — ConnectedTest must win. + assert_eq!(detect_task("gradlew connectedDebugAndroidTest"), GradleTask::ConnectedTest); + } + #[test] + fn gradle_detect_assemble_debug() { + assert_eq!(detect_task("gradlew assembleDebug"), GradleTask::Build); + } + #[test] + fn gradle_detect_test_debug_unit_test() { + assert_eq!(detect_task("gradlew testDebugUnitTest"), GradleTask::Test); + } + #[test] + fn gradle_detect_module_prefixed_task() { + assert_eq!(detect_task("gradlew :app:testDebugUnitTest"), GradleTask::Test); + } + #[test] + fn gradle_detect_module_prefixed_assemble() { + assert_eq!(detect_task("gradlew :app:assembleDebug"), GradleTask::Build); + } + #[test] + fn gradle_detect_flag_value_does_not_trigger_test() { + // -Pflavor=testRelease should NOT match Test when the task is assemble. + assert_eq!(detect_task("gradlew assembleRelease -Pflavor=testRelease"), GradleTask::Build); + } + #[test] + fn gradle_detect_multi_task_uses_last() { + // clean assembleDebug → Build (last non-clean task). + assert_eq!(detect_task("gradlew clean assembleDebug"), GradleTask::Build); + } + #[test] + fn gradle_detect_lint() { + assert_eq!(detect_task("gradlew lint"), GradleTask::Lint); + } + #[test] + fn gradle_detect_ktlint() { + assert_eq!(detect_task("gradlew ktlintCheck"), GradleTask::Lint); + } + #[test] + fn gradle_detect_bundle() { + assert_eq!(detect_task("gradlew bundleRelease"), GradleTask::Build); + } + #[test] + fn gradle_detect_unknown_passthrough() { + assert_eq!(detect_task("gradlew signingReport"), GradleTask::Other); + } + #[test] + fn gradle_detect_clean_alone_is_build() { + // "clean" alone → task.is_empty() after filtering → Build. + assert_eq!(detect_task("gradlew clean"), GradleTask::Build); + } + #[test] + fn gradle_detect_install_debug() { + assert_eq!(detect_task("gradlew installDebug"), GradleTask::Build); + } + #[test] + fn gradle_detect_uninstall_debug() { + // "uninstallDebug" contains "install" → Build (rtk parity). + assert_eq!(detect_task("gradlew uninstallDebug"), GradleTask::Build); + } + #[test] + fn gradle_detect_clean_install() { + assert_eq!(detect_task("gradlew clean installDebug"), GradleTask::Build); + } + #[test] + fn gradle_detect_check() { + assert_eq!(detect_task("gradlew check"), GradleTask::Test); + } + #[test] + fn gradle_detect_dependencies() { + assert_eq!(detect_task("gradlew dependencies"), GradleTask::Dependencies); + } + #[test] + fn gradle_detect_dependencies_with_module() { + assert_eq!(detect_task("gradlew :app:dependencies"), GradleTask::Dependencies); + } + #[test] + fn gradle_detect_boot_run_routes_to_spring() { + // `bootRun` routes to the dedicated Spring Boot runtime filter. + assert_eq!(detect_task("gradlew bootRun"), GradleTask::SpringBootRun); + assert_eq!(detect_task("gradlew :app:bootRun"), GradleTask::SpringBootRun); + } + #[test] + fn detect_task_ignores_tests_filter_value() { + // "--tests FooSpec" option-value must not shadow the task + assert_eq!(detect_task("./gradlew test --tests FooSpec"), GradleTask::Test); + assert_eq!(detect_task("./gradlew test --tests com.example.Foo"), GradleTask::Test); + } + #[test] + fn detect_task_skips_value_of_value_taking_options() { + // "-p test build" — "test" is the value of -p (project-dir), not a task name + assert_eq!(detect_task("gradle -p test build"), GradleTask::Build); + // "--project-dir test build" — long form + assert_eq!(detect_task("gradle --project-dir test build"), GradleTask::Build); + } + + // ── Build filter (rtk ~660-744, 1128-1230, 1347-1379) ─────────────────── + + #[test] + fn gradle_build_success_strips_task_lines() { + let input = "> Configure project :app\n> Task :app:preBuild UP-TO-DATE\n> Task \ + :app:compileDebugKotlin UP-TO-DATE\n> Task :app:assembleDebug \ + UP-TO-DATE\n\nBUILD SUCCESSFUL in 1m 23s\n42 actionable tasks: 42 executed"; + let o = filter_gradle_build(input); + // rtk asserts >=70% on its full BUILD fixture; this inlined synthetic + // slice is smaller, so the floor is relaxed (same rationale the mvn + // slice-savings tests in this file use vs rtk's fixture thresholds). + let savings = savings_pct(input, &o); + assert!(savings >= 55.0, "build savings >=55%, got {savings:.1}%"); + assert!(o.contains("BUILD SUCCESSFUL"), "status kept; got:\n{o}"); + assert!(!o.contains("> Task :"), "task lines stripped; got:\n{o}"); + } + + #[test] + fn gradle_build_failure_preserves_errors_strips_try() { + let input = "> Task :app:compileDebugKotlin FAILED\n\nFAILURE: Build failed with an \ + exception.\n\n* What went wrong:\ne: /src/app/MainActivity.kt: (42, 5): \ + Unresolved reference: MyService\n\n* Try:\n> Run with --stacktrace option to \ + get the stack trace.\n> Get more help at https://help.gradle.org\n\nBUILD \ + FAILED in 12s"; + let o = filter_gradle_build(input); + assert!(o.contains("Unresolved reference"), "error kept; got:\n{o}"); + assert!(o.contains("BUILD FAILED"), "status kept; got:\n{o}"); + assert!(!o.contains("Run with --stacktrace"), "try section stripped; got:\n{o}"); + assert!(!o.contains("Get more help at"), "help link stripped; got:\n{o}"); + } + + #[test] + fn gradle_build_filter_never_empty_on_success() { + let input = "> Task :app:assembleDebug UP-TO-DATE\nBUILD SUCCESSFUL in 3s\n1 actionable \ + tasks: 1 up-to-date"; + let o = filter_gradle_build(input); + assert!(!o.trim().is_empty(), "must not be empty on success; got:\n{o}"); + assert!(o.contains("BUILD SUCCESSFUL")); + } + + #[test] + fn gradle_build_daemon_lines_stripped() { + let input = "Starting a Gradle Daemon (subsequent builds will be faster)\nDaemon will be \ + stopped at the end of the build after running out of JVM memory\n> Task \ + :app:assembleDebug\nBUILD SUCCESSFUL in 5s"; + let o = filter_gradle_build(input); + assert!(!o.contains("Daemon"), "daemon lines stripped; got:\n{o}"); + assert!(o.contains("BUILD SUCCESSFUL")); + } + + #[test] + fn gradle_build_scan_url_preserved() { + let input = "> Task :app:assembleDebug\nBUILD SUCCESSFUL in 5s\nPublishing build \ + scan...\nhttps://gradle.com/s/abc123"; + let o = filter_gradle_build(input); + assert!(o.contains("gradle.com/s/"), "build scan URL kept; got:\n{o}"); + } + + #[test] + fn gradle_build_keeps_compiler_warnings() { + let input = "> Task :app:compileDebugKotlin\nw: /src/Foo.kt: (42, 5): Parameter 'unused' is \ + never used\nwarning: [options] bootstrap class path not set\nWarning: Gradle \ + deprecation detected\n\nBUILD SUCCESSFUL in 4s"; + let o = filter_gradle_build(input); + assert!(o.contains("w: "), "kotlinc warnings kept; got:\n{o}"); + assert!(o.contains("warning: [options]"), "javac warnings kept; got:\n{o}"); + assert!(o.contains("Warning: Gradle"), "Gradle warnings kept; got:\n{o}"); + assert!(o.contains("BUILD SUCCESSFUL")); + assert!(!o.contains("> Task :"), "task progress stripped; got:\n{o}"); + } + + #[test] + fn gradle_build_strips_configure_and_dokka_noise() { + // rtk's "check (build filter on mixed output)" test (~1147-1230). + let input = "Calculating task graph as no cached configuration is available for tasks: \ + check\n\n> Configure project :core\nclass \ + org.jetbrains.dokka.gradle.adapters.AndroidExtensionWrapper could not get \ + Android Extension for project :core\n[android-junit5]: Cannot configure Jacoco \ + for this project\n\n> Task :core:preBuild UP-TO-DATE\n> Task :samplev2:lintDebug \ + FAILED\nLint found 8 errors, 21 warnings. First failure:\n\n/src/LogsScreen.kt:\ + 50: Error: Field requires API level 26 [NewApi]\n val uiState = \ + viewModel.uiState.collectAsState()\n\n[Incubating] Problems report is available \ + at: file:///build/reports/problems.html\n\nDeprecated Gradle features were used \ + in this build, making it incompatible with Gradle 10.\n\nYou can use \ + '--warning-mode all' to show the individual deprecation warnings.\n388 \ + actionable tasks: 97 executed\n\nFAILURE: Build failed with an exception.\n\n* \ + What went wrong:\nExecution failed for task ':samplev2:lintDebug'.\n\n* Try:\n> \ + Run with --stacktrace option to get the stack trace.\n\nBUILD FAILED in 3s"; + let o = filter_gradle_build(input); + assert!(o.contains("BUILD FAILED"), "status kept; got:\n{o}"); + assert!(o.contains("FAILURE:"), "FAILURE line kept; got:\n{o}"); + assert!(o.contains("Execution failed"), "Execution failed kept; got:\n{o}"); + assert!(o.contains("Lint found 8 error"), "lint summary kept; got:\n{o}"); + assert!(o.contains("Error: Field requires"), "lint error kept; got:\n{o}"); + assert!(!o.contains("Configure project"), "configure stripped; got:\n{o}"); + assert!(!o.contains("dokka"), "dokka warnings stripped; got:\n{o}"); + assert!(!o.contains("android-junit5"), "plugin warnings stripped; got:\n{o}"); + assert!(!o.contains("> Task :"), "task lines stripped; got:\n{o}"); + assert!(!o.contains("Incubating"), "incubating stripped; got:\n{o}"); + assert!(!o.contains("Deprecated Gradle"), "deprecated stripped; got:\n{o}"); + assert!(!o.contains("Run with --stacktrace"), "try section stripped; got:\n{o}"); + let savings = savings_pct(input, &o); + assert!(savings >= 60.0, "mixed-output savings >=60%, got {savings:.1}%"); + } + + // ── Test filter (rtk ~748-860) ────────────────────────────────────────── + + #[test] + fn gradle_unit_test_failures_preserved_passes_stripped() { + let input = "> Task :app:testDebugUnitTest\ncom.example.FooTest > test1 \ + PASSED\ncom.example.FooTest > test2 PASSED\ncom.example.FooTest > testBar \ + FAILED\n java.lang.AssertionError: expected:<3> but was:<-1>\n at \ + org.junit.Assert.fail(Assert.java:89)\n at \ + org.junit.Assert.assertEquals(Assert.java:197)\n at \ + com.example.FooTest.testBar(FooTest.kt:25)\ncom.example.FooTest > testQux \ + PASSED\n\n10 tests completed, 1 failed"; + let o = filter_gradle_test(input); + assert!(o.contains("testBar FAILED"), "FAILED test kept; got:\n{o}"); + assert!(o.contains("AssertionError"), "exception class kept; got:\n{o}"); + assert!(o.contains("FooTest.testBar"), "user frame kept; got:\n{o}"); + assert!(!o.contains("org.junit.Assert.fail"), "framework frames skipped; got:\n{o}"); + assert!(!o.contains("PASSED"), "PASSED stripped; got:\n{o}"); + assert!(o.contains("10 tests completed, 1 failed"), "summary kept; got:\n{o}"); + // rtk asserts >=60% on its full TEST fixture; this inlined synthetic slice + // is smaller, so the floor is relaxed. + let savings = savings_pct(input, &o); + assert!(savings >= 50.0, "test savings >=50%, got {savings:.1}%"); + } + + #[test] + fn gradle_unit_test_skips_framework_frames() { + // Built via `concat!` of one `\n`-terminated literal per line so rustfmt's + // soft-wrap `\`-continuation cannot mangle the leading-whitespace escapes. + let input = concat!( + "com.example.CalcTest > testAdd FAILED\n", + " java.lang.AssertionError: expected:<5> but was:<3>\n", + " at org.junit.Assert.fail(Assert.java:89)\n", + " at org.junit.Assert.assertEquals(Assert.java:197)\n", + " at java.lang.reflect.Method.invoke(Method.java:498)\n", + " at com.example.CalcTest.testAdd(CalcTest.kt:10)", + ); + let o = filter_gradle_test(input); + assert!(o.contains("com.example.CalcTest.testAdd"), "user frame kept; got:\n{o}"); + assert!(!o.contains("org.junit.Assert"), "JUnit frames skipped; got:\n{o}"); + assert!(!o.contains("java.lang.reflect"), "reflection frames skipped; got:\n{o}"); + } + + #[test] + fn gradle_unit_test_no_testlogging_emits_hint() { + // Gradle default: no per-test lines shown. Empty output → rtk hint message. + let input = "> Task :app:testDebugUnitTest\n\nBUILD SUCCESSFUL in 15s\n3 actionable tasks: \ + 1 executed, 2 up-to-date"; + let o = filter_gradle_test(input); + assert!(!o.is_empty(), "must output something on success; got:\n{o}"); + // The summary regex does not match this output, so the testLogging hint + // fires (richer than the generic OK an empty buffer would produce). + assert!( + o.contains("add testLogging to build.gradle") || o.contains("BUILD SUCCESSFUL"), + "hint or status present; got:\n{o}" + ); + } + + #[test] + fn gradle_test_keeps_testlogging_hint_message() { + // The actionable testLogging hint an 'OK' cannot convey — deliberate. It + // fires only when the run produced NO per-test output AND no standalone + // build-status/summary line survived (a standalone `BUILD SUCCESSFUL` line + // is kept by `is_gradle_build_status`, which would otherwise satisfy the + // non-empty guard). The all-`> Task :` input below strips to empty while + // still containing the `BUILD SUCCESSFUL` substring, exercising the hint. + let input = "> Task :app:testDebugUnitTest\n> Task :app:check BUILD SUCCESSFUL"; + let o = filter_gradle_test(input); + assert!( + o.contains("ok ✓ (no test output — add testLogging to build.gradle for details)"), + "testLogging hint emitted when filtered output is empty; got:\n{o}" + ); + } + + #[test] + fn gradle_unit_test_report_path_preserved() { + let input = "There were failing tests. See the report at: \ + file:///app/build/reports/tests/testDebugUnitTest/index.html\nBUILD FAILED in \ + 20s"; + let o = filter_gradle_test(input); + assert!(o.contains("See the report at"), "report pointer kept; got:\n{o}"); + assert!(o.contains("BUILD FAILED"), "status kept; got:\n{o}"); + } + + #[test] + fn gradle_try_section_stripped_from_test_output() { + let input = "com.example.FooTest > testBar FAILED\n java.lang.AssertionError: expected \ + true\n\n* Try:\n> Run with --stacktrace option to get the stack trace.\n> Get \ + more help at https://help.gradle.org\n\nBUILD FAILED in 5s"; + let o = filter_gradle_test(input); + assert!(!o.contains("Run with --stacktrace"), "try stripped; got:\n{o}"); + assert!(!o.contains("Get more help at"), "help stripped; got:\n{o}"); + assert!(o.contains("BUILD FAILED"), "status kept; got:\n{o}"); + } + + #[test] + fn gradle_failure_keeps_opentest4j_assertion() { + let input = concat!( + "\n", + "> Task :test FAILED\n", + "\n", + "FooTest > myTest FAILED\n", + " org.opentest4j.AssertionFailedError: expected: but was: \n", + " at FooTest.myTest(FooTest.kt:42)\n", + " at \ + org.junit.platform.engine.discovery.DiscoverySelectors.selectMethod(DiscoverySelectors.\ + java:218)\n", + "\n", + "1 test completed, 1 failed\n", + "\n", + "BUILD FAILED in 2s\n", + ); + let out = filter_gradle_test(input); + assert!( + out.contains("AssertionFailedError"), + "assertion error class must be kept; got:\n{out}" + ); + assert!(out.contains("expected: "), "assertion message must be kept; got:\n{out}"); + assert!(out.contains("FooTest.myTest"), "user frame must be kept; got:\n{out}"); + assert!(!out.contains("DiscoverySelectors"), "framework frame must be stripped; got:\n{out}"); + } + + // ── Connected test filter (rtk ~864-893) ──────────────────────────────── + + #[test] + fn gradle_connected_strips_device_noise() { + let input = "Starting 3 tests on Pixel_6_API_33(AVD) - 13\nINSTRUMENTATION_STATUS: \ + numtests=3\nINSTRUMENTATION_STATUS_CODE: 1\ncom.example.MainActivityTest > \ + exampleTest[Pixel_6_API_33] FAILED\n AssertionError: expected \ + true\nINSTRUMENTATION_STATUS_CODE: -2\nTests run: 3, Failures: 1, Errors: 0, \ + Skipped: 0"; + let o = filter_gradle_connected(input); + assert!(o.contains("FAILED"), "FAILED test kept; got:\n{o}"); + assert!(!o.contains("INSTRUMENTATION_STATUS:"), "instrumentation stripped; got:\n{o}"); + assert!(!o.contains("Starting 3 tests"), "starting line stripped; got:\n{o}"); + } + + #[test] + fn gradle_connected_no_device_error() { + let input = "com.android.builder.testing.api.DeviceException: No connected devices!"; + let o = filter_gradle_connected(input); + assert!(o.contains("No connected devices"), "actionable error shown; got:\n{o}"); + } + + // ── Lint filter (rtk ~897-950, 1104-1126) ─────────────────────────────── + + #[test] + fn gradle_lint_preserves_violations() { + let input = "Wrote HTML report to \ + file:/path/app/build/reports/lint-results-debug.html\nsrc/main/java/com/\ + example/MainActivity.kt:45: Error: Format string invalid \ + [StringFormatInvalid]\n String.format(getString(R.string.no_args), arg)\n \ + ^\n0 errors, 4 warnings"; + let o = filter_gradle_lint(input); + assert!(o.contains("StringFormatInvalid"), "violation kept; got:\n{o}"); + assert!(o.contains("0 errors, 4 warnings"), "summary kept; got:\n{o}"); + assert!(!o.contains("Wrote HTML report"), "report path stripped; got:\n{o}"); + } + + #[test] + fn gradle_lint_preserves_warnings_and_context() { + let input = "src/main/java/com/example/Utils.kt:89: Warning: HardcodedText \ + [HardcodedText]\n return \"Hello World\"\n \ + ~~~~~~~~~~~~~\nsrc/main/res/layout/activity_main.xml:15: Warning: Missing \ + contentDescription attribute on image [ContentDescription]\n \ + Task :app:lint\nBUILD SUCCESSFUL in 8s\n3 actionable tasks: 1 executed, 2 up-to-date"; + let o = filter_gradle_lint(input); + assert!(!o.is_empty(), "must output on success; got:\n{o}"); + assert!( + o.contains("ok ✓ lint passed") || o.contains("BUILD SUCCESSFUL"), + "success indicated; got:\n{o}" + ); + } + + // ── Dependencies filter (rtk ~1235-1308) ──────────────────────────────── + + #[test] + fn gradle_dependencies_extracts_top_level() { + let input = + "> Task :app:dependencies\n\\ + n------------------------------------------------------------\nProject \ + ':app'\n------------------------------------------------------------\n\nimplementation \ + - Implementation dependencies for the 'main' feature.\n+--- \ + org.jetbrains.kotlin:kotlin-stdlib:1.9.22\n+--- androidx.core:core-ktx:1.12.0\n+--- \ + androidx.appcompat:appcompat:1.6.1\n| +--- androidx.annotation:annotation:1.3.0\n| \ + +--- androidx.core:core:1.9.0\n| \\--- \ + androidx.cursoradapter:cursoradapter:1.0.0\n+--- \ + com.google.android.material:material:1.11.0\n| +--- \ + androidx.annotation:annotation:1.2.0\n\\--- com.squareup.retrofit2:retrofit:2.9.0\n \ + +--- com.squareup.okhttp3:okhttp:3.14.9\n \\--- \ + com.squareup.okio:okio:1.17.2\n\ntestImplementation - Test dependencies for the 'main' \ + feature.\n+--- junit:junit:4.13.2\n\\--- org.mockito:mockito-core:5.8.0\n\nBUILD \ + SUCCESSFUL in 2s\n1 actionable tasks: 1 executed"; + let o = filter_gradle_dependencies(input); + assert!(o.contains("implementation (5):"), "config with count; got:\n{o}"); + assert!(o.contains("testImplementation (2):"), "test config; got:\n{o}"); + assert!(o.contains("kotlin-stdlib"), "top-level dep; got:\n{o}"); + assert!(!o.contains("cursoradapter"), "transitive deps stripped; got:\n{o}"); + let savings = savings_pct(input, &o); + assert!(savings >= 60.0, "deps savings >=60%, got {savings:.1}%"); + } + + #[test] + fn gradle_dependencies_empty() { + assert_eq!(filter_gradle_dependencies(""), ""); + } + + #[test] + fn gradle_dependencies_no_deps() { + let input = "> Task :app:dependencies\nNo dependencies\n\nBUILD SUCCESSFUL in 1s"; + let o = filter_gradle_dependencies(input); + assert!(o.contains("ok"), "success shown; got:\n{o}"); + } + + // ── Edge cases / shared helpers (rtk ~1312-1399) ──────────────────────── + + #[test] + fn gradle_filter_empty_input() { + assert_eq!(filter_gradle_test(""), ""); + assert_eq!(filter_gradle_connected(""), ""); + assert_eq!(filter_gradle_lint(""), ""); + assert_eq!(filter_gradle_dependencies(""), ""); + } + + #[test] + fn gradle_build_empty_line_preserved() { + // Blank lines that separate error sections must survive the build filter. + assert!(keep_gradle_build_line(""), "empty line passes through"); + assert!(keep_gradle_build_line(" "), "whitespace-only line passes through"); + } + + #[test] + fn gradle_is_framework_frame_classification() { + assert!(is_gradle_framework_frame("at org.junit.Assert.fail(Assert.java:89)")); + assert!(is_gradle_framework_frame("at junit.framework.Assert.fail(Assert.java:50)")); + assert!(is_gradle_framework_frame("at java.lang.reflect.Method.invoke(Method.java:498)")); + assert!(is_gradle_framework_frame( + "at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.\ + processTestClass(SuiteTestClassProcessor.java:51)" + )); + assert!(!is_gradle_framework_frame("at com.example.FooTest.testBar(FooTest.kt:25)")); + assert!(!is_gradle_framework_frame("at com.example.MyApp.doSomething(MyApp.java:100)")); + } + + #[test] + fn gradle_verbose_flag_forces_passthrough() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let i = "> Task :app:compileJava UP-TO-DATE\nBUILD SUCCESSFUL in 5s\n"; + // --info anywhere bypasses filtering even on a Build-task command. + let out = filter(&ctx("gradlew", "gradlew assembleDebug --info", &cfg), i, 0); + assert_eq!(out.text, i, "verbose bypass returns raw input"); + assert!(!out.changed); + } + + #[test] + fn gradle_other_task_light_strip() { + // Unknown task: light Build-style daemon/progress/task strip, keep the rest. + let input = "Starting a Gradle Daemon (subsequent builds will be faster)\n> Task \ + :app:signingReport\nVariant: debug\nSHA1: AA:BB:CC\nBUILD SUCCESSFUL in 1s"; + let o = filter_gradle_other(input); + assert!(o.contains("Variant: debug"), "non-noise kept; got:\n{o}"); + assert!(o.contains("SHA1: AA:BB:CC"), "report data kept; got:\n{o}"); + assert!(!o.contains("Starting a Gradle Daemon"), "daemon stripped; got:\n{o}"); + assert!(!o.contains("> Task :"), "task progress stripped; got:\n{o}"); + } + + // ── Carried-over deleted defs/gradle.toml [[tests]] ───────────────────── + + #[test] + fn gradle_def_strips_up_to_date_and_keeps_result() { + // defs/gradle.toml "strips UP-TO-DATE and keeps result". Build mode drops + // all `> Task :` lines (superset of UP-TO-DATE) + Configure noise; keeps + // the explicit `> Task :app:test` line? rtk gradle.toml kept the bare task + // line, but the Rust Build filter strips ALL `> Task :` lines and relies on + // the summary/status lines for signal. The build result + test summary are + // what carry the signal and they survive. + let input = "> Configure project :app\n> Task :app:compileJava UP-TO-DATE\n> Task \ + :app:compileKotlin UP-TO-DATE\n> Task :app:test\n3 tests completed, 1 \ + failed\nBUILD FAILED in 12s"; + let o = filter_gradle_build(input); + assert!(o.contains("3 tests completed, 1 failed"), "test summary kept; got:\n{o}"); + assert!(o.contains("BUILD FAILED in 12s"), "status kept; got:\n{o}"); + assert!(!o.contains("UP-TO-DATE"), "UP-TO-DATE stripped; got:\n{o}"); + assert!(!o.contains("Configure project"), "configure stripped; got:\n{o}"); + } + + #[test] + fn gradle_def_clean_build_untouched() { + // defs/gradle.toml "clean build untouched": no noise → status + actionable + // survive unchanged. + let input = "BUILD SUCCESSFUL in 8s\n7 actionable tasks: 7 executed"; + let o = filter_gradle_build(input); + assert!(o.contains("BUILD SUCCESSFUL in 8s"), "status kept; got:\n{o}"); + assert!(o.contains("7 actionable tasks: 7 executed"), "actionable kept; got:\n{o}"); + } + + #[test] + fn gradle_def_empty_after_stripping() { + // defs/gradle.toml "empty after stripping": only a Configure line → all + // stripped → empty output (the engine's OK path covers the user-facing msg). + let input = "> Configure project :app\n"; + let o = filter_gradle_build(input); + assert!(o.trim().is_empty(), "all noise stripped to empty; got:\n{o}"); + } + + // ── snip gradlew-bat.yaml [[tests]] ───────────────────────────────────── + + #[test] + fn gradle_snip_build_success() { + let input = "> Task :compileJava\n> Task :processResources\n> Task :classes\n> Task \ + :jar\n\nBUILD SUCCESSFUL in 2s\n5 actionable tasks: 5 executed"; + let o = filter_gradle_build(input); + assert!(o.contains("BUILD SUCCESSFUL in 2s"), "status kept; got:\n{o}"); + assert!(o.contains("5 actionable tasks: 5 executed"), "actionable kept; got:\n{o}"); + assert!(!o.contains("> Task :"), "tasks stripped; got:\n{o}"); + } + + #[test] + fn gradle_snip_build_failure_with_exception() { + let input = "> Task :compileJava FAILED\n> Task :processResources UP-TO-DATE\n\nFAILURE: \ + Build failed with an exception.\n\n* What went wrong:\nExecution failed for \ + task ':compileJava'.\n> Compilation error: package com.example does not \ + exist\n\nBUILD FAILED in 1s"; + let o = filter_gradle_build(input); + assert!(o.contains("FAILURE: Build failed with an exception."), "FAILURE kept; got:\n{o}"); + assert!(o.contains("Compilation error: package com.example"), "error detail kept; got:\n{o}"); + assert!(o.contains("BUILD FAILED in 1s"), "status kept; got:\n{o}"); + assert!(!o.contains("> Task :"), "tasks stripped; got:\n{o}"); + } + + #[test] + fn gradle_snip_download_and_start_noise_removed() { + let input = "Downloading https://services.gradle.org/distributions/gradle-8.5-bin.zip\n.....\ + ..................................................\nStarting a Gradle Daemon \ + (subsequent builds will be faster)\n\n> Task :test\nTest result: FAILURE\n\nBUILD \ + FAILED in 5s"; + let o = filter_gradle_build(input); + assert!(o.contains("Test result: FAILURE"), "test result kept; got:\n{o}"); + assert!(o.contains("BUILD FAILED in 5s"), "status kept; got:\n{o}"); + assert!(!o.contains("Downloading"), "download stripped; got:\n{o}"); + assert!(!o.contains("Starting a Gradle Daemon"), "daemon stripped; got:\n{o}"); + assert!(!o.contains("> Task :"), "tasks stripped; got:\n{o}"); + } + + // ── Gradle dispatch smoke tests ───────────────────────────────────────── + + #[test] + fn gradle_dispatch_test_task_routes_to_test_filter() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let i = "com.example.FooTest > t1 PASSED\ncom.example.FooTest > t2 FAILED\n \ + java.lang.AssertionError: boom\n at \ + com.example.FooTest.t2(FooTest.kt:9)\n10 tests completed, 1 failed\nBUILD FAILED \ + in 3s\n"; + let out = filter(&ctx("gradlew", "gradlew testDebugUnitTest", &cfg), i, 1); + assert!(out.changed, "test filter transformed output"); + assert!(out.text.contains("t2 FAILED"), "failing test kept; got:\n{}", out.text); + assert!(!out.text.contains("PASSED"), "passing stripped; got:\n{}", out.text); + } + + // ═══════════════════════════════════════════════════════════════════════ + // SPRING BOOT RUN TESTS + // ═══════════════════════════════════════════════════════════════════════ + + #[test] + fn spring_boot_keeps_startup_summary_and_errors() { + // rtk spring-boot.toml [[tests]] "keeps startup summary and errors". + let input = " . ____ _ \n /\\\\ / ___'_ __ _ _(_)_ __ \n( ( )\\___ | '_ | '_| \ + | '_ \\ \n \\/ ___)| |_)| | | | | || )\n ' |____| .__|_| |_|_| |_\\__|\n \ + :: Spring Boot :: (v3.2.0)\n2024-01-01 INFO Initializing Spring\n2024-01-01 \ + INFO Bean 'dataSource' created\n2024-01-01 INFO Tomcat started on port \ + 8080\n2024-01-01 INFO Started MyApp in 3.2 seconds"; + let o = filter_spring_boot(input); + assert!(o.contains("Tomcat started on port 8080"), "tomcat line kept; got:\n{o}"); + assert!(o.contains("Started MyApp in 3.2 seconds"), "started line kept; got:\n{o}"); + assert!(!o.contains("Initializing Spring"), "INFO chatter stripped; got:\n{o}"); + assert!(!o.contains("Bean 'dataSource'"), "bean chatter stripped; got:\n{o}"); + assert!(!o.contains(":: Spring Boot ::"), "banner stripped; got:\n{o}"); + } + + #[test] + fn spring_boot_preserves_errors() { + // rtk spring-boot.toml [[tests]] "preserves errors". + let input = " :: Spring Boot :: (v3.2.0)\n2024-01-01 INFO Initializing Spring\n2024-01-01 \ + ERROR Application run failed\nCaused by: java.lang.NullPointerException"; + let o = filter_spring_boot(input); + assert!(o.contains("ERROR Application run failed"), "error kept; got:\n{o}"); + assert!(o.contains("Caused by: java.lang.NullPointerException"), "cause kept; got:\n{o}"); + assert!(!o.contains("Initializing Spring"), "INFO stripped; got:\n{o}"); + } + + #[test] + fn spring_boot_routes_from_mvn_goal() { + // detect_phase wiring: `mvn spring-boot:run` → SpringBootRun. + assert_eq!(detect_phase("mvn spring-boot:run"), MvnPhase::SpringBootRun); + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let i = " :: Spring Boot :: (v3.2.0)\n2024-01-01 INFO Bean created\n2024-01-01 INFO \ + Tomcat started on port 8080\n2024-01-01 INFO Started MyApp in 2.1 seconds\n"; + let out = filter(&ctx("mvn", "mvn spring-boot:run", &cfg), i, 0); + assert!(out.changed, "spring-boot filter transformed output"); + assert!(out.text.contains("Tomcat started on port 8080"), "tomcat kept; got:\n{}", out.text); + assert!(!out.text.contains("Bean created"), "INFO stripped; got:\n{}", out.text); + } + + #[test] + fn spring_boot_routes_from_gradle_boot_run() { + // detect_task wiring: gradle `bootRun` → SpringBootRun. + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let i = " :: Spring Boot :: (v3.2.0)\n2024-01-01 INFO Bean created\n2024-01-01 ERROR \ + Application run failed\nCaused by: java.lang.IllegalStateException\n"; + let out = filter(&ctx("gradlew", "gradlew bootRun", &cfg), i, 1); + assert!(out.changed, "spring-boot filter transformed output"); + assert!(out.text.contains("ERROR Application run failed"), "error kept; got:\n{}", out.text); + assert!(out.text.contains("Caused by:"), "cause kept; got:\n{}", out.text); + assert!(!out.text.contains("Bean created"), "INFO stripped; got:\n{}", out.text); + } + + #[test] + fn spring_boot_savings() { + let input = " . ____ _ \n :: Spring Boot :: (v3.2.0)\n2024-01-01 INFO \ + Initializing\n2024-01-01 INFO Bean a\n2024-01-01 INFO Bean b\n2024-01-01 INFO \ + Bean c\n2024-01-01 INFO Tomcat started on port 8080\n2024-01-01 INFO Started \ + MyApp in 3.2 seconds"; + let o = filter_spring_boot(input); + let savings = savings_pct(input, &o); + assert!(savings >= 50.0, "spring-boot savings >=50%, got {savings:.1}%"); + } +} diff --git a/crates/pi-shell/src/minimizer/filters/lint.rs b/crates/pi-shell/src/minimizer/filters/lint.rs index b29c55048..f89ac0f54 100644 --- a/crates/pi-shell/src/minimizer/filters/lint.rs +++ b/crates/pi-shell/src/minimizer/filters/lint.rs @@ -4,18 +4,44 @@ use std::collections::BTreeMap; use crate::minimizer::{MinimizerCtx, MinimizerOutput, primitives}; +#[must_use] pub fn supports(subcommand: Option<&str>) -> bool { supports_program("", subcommand) } +#[must_use] pub fn supports_program(program: &str, subcommand: Option<&str>) -> bool { - matches!(program, "ruff" | "mypy" | "rubocop" | "pyright" | "basedpyright") - || matches!( - subcommand, - None | Some("check" | "lint" | "run" | "format" | "fmt" | "typecheck") - ) + // Program-claim the JS type-checker/linters too: without this, a path-arg + // invocation (`tsc --project x`, `eslint src/`, `biome ci app/`, + // `oxlint src/`) resolves its subcommand to the path token, which is not in + // the subcommand allowlist below, so the invocation would route UNFILTERED. + // detect.rs yields these exact program tokens (see its + // `detects_direct_lint_tools` test). Claiming the program makes the engine + // pick the Rust path first; the residual defs/biome.toml & defs/oxlint.toml + // remain as fallback for any unclaimed subcommand only. + matches!( + program, + "ruff" + | "mypy" + | "rubocop" + | "pyright" + | "basedpyright" + | "tsc" + | "eslint" + | "biome" + | "oxlint" + ) || matches!(subcommand, None | Some("check" | "lint" | "run" | "format" | "fmt" | "typecheck")) } +/// JS type-checker/linter programs whose human (non-JSON) output carries +/// code-frame body lines, underline rows, and tool-specific success/progress +/// chatter. The frame/noise strips below are gated to these programs so the +/// shared ruff/mypy/rubocop/pyright paths keep their existing behavior. +fn is_js_lint_program(program: &str) -> bool { + matches!(program, "tsc" | "eslint" | "biome" | "oxlint") +} + +#[must_use] pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerOutput { if preserves_machine_readable_output(ctx) { return MinimizerOutput::passthrough(input); @@ -29,9 +55,22 @@ pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerO } } +#[must_use] pub fn condense_lint_output(program: &str, input: &str, exit_code: i32) -> String { let cleaned = primitives::strip_ansi(input); let stripped = strip_lint_noise(program, &cleaned, exit_code); + if program == "eslint" { + // eslint's default "stylish" output puts the file path on its own + // non-indented header line and the diagnostics on the following indented + // `L:C severity message rule-id` rows. group_diagnostics expects the + // file on the SAME line as the location, so reshape stylish into + // per-diagnostic `file:line:col: …` lines first, then derive a Top-rules + // summary from the trailing rule-id column (rtk's idea, re-derived from + // DEFAULT text output, not JSON). + if let Some(rendered) = render_eslint_stylish(&stripped) { + return primitives::head_tail_lines(&rendered, 180, 100); + } + } let grouped = group_diagnostics(&stripped); primitives::head_tail_lines(&grouped, 180, 100) } @@ -50,14 +89,58 @@ fn strip_lint_noise(program: &str, input: &str, exit_code: i32) -> String { } fn preserves_machine_readable_output(ctx: &MinimizerCtx<'_>) -> bool { - matches!(ctx.program, "pyright" | "basedpyright") + // pyright/basedpyright --outputjson + if matches!(ctx.program, "pyright" | "basedpyright") && ctx .command .split_whitespace() .any(|part| part == "--outputjson" || part.starts_with("--outputjson=")) + { + return true; + } + // eslint with an explicit non-default formatter (-f / --format with value != + // stylish) + if ctx.program == "eslint" { + let tokens: Vec<&str> = ctx.command.split_whitespace().collect(); + for (i, t) in tokens.iter().enumerate() { + if (*t == "-f" || *t == "--format") && tokens.get(i + 1).is_some_and(|v| *v != "stylish") { + return true; + } + if let Some(val) = t.strip_prefix("--format=") + && val != "stylish" + { + return true; + } + } + } + false } fn is_lint_noise(program: &str, line: &str, exit_code: i32) -> bool { + // eslint's `N error(s) … potentially fixable with the --fix option.` hint is + // actionable chatter, not a diagnostic; drop it while keeping the + // `✖ N problems (…)` summary line. Checked ahead of the diagnostic-signal + // guard below because the hint itself contains the word "error". + // (snip strips on `potentially fixable`.) + if program == "eslint" && line.contains("potentially fixable") { + return true; + } + // Code-frame / underline / box-drawing / progress chatter is stripped even at + // exit!=0: these rows carry no diagnostic of their own, and oxlint's + // `Found N warning…` / biome's `Fixed N file…` summaries match the + // diagnostic-signal guard below only incidentally (the word "warning"). The + // `× message` diagnostic rows are never matched here, so they survive. + if is_js_lint_program(program) && is_js_frame_noise(program, line) { + return true; + } + // pyright/basedpyright emit a version banner plus source-discovery progress + // before the diagnostics. None of these rows carry a diagnostic, so strip them + // even at exit!=0. Scoped to pyright/basedpyright so the other linters' + // equivalent-looking lines (e.g. an oxlint `Found N warnings` summary) are not + // caught here. (Ported from rtk/src/filters/basedpyright.toml strip patterns.) + if matches!(program, "pyright" | "basedpyright") && is_pyright_banner_noise(line) { + return true; + } if exit_code != 0 && contains_diagnostic_signal(line) { return false; } @@ -77,6 +160,335 @@ fn is_lint_noise(program: &str, line: &str, exit_code: i32) -> bool { || lower.ends_with(" files inspected, no offenses detected")) } +/// pyright/basedpyright banner/progress noise: the version banner and the +/// source-file-discovery progress lines that precede the diagnostics. `line` +/// arrives already trimmed (see `strip_lint_noise`). Re-derived from +/// rtk/src/filters/basedpyright.toml's `strip_lines_matching` patterns: +/// `^Searching for source files`, `^Found \d+ source file`, +/// `^Pyright \d+\.\d+`, `^basedpyright \d+\.\d+`. +/// The blank-line pattern (`^\s*$`) is already handled by `strip_lint_noise`. +fn is_pyright_banner_noise(line: &str) -> bool { + if line.starts_with("Searching for source files") { + return true; + } + // `Pyright 1.1.0` / `basedpyright 1.22.0`: program token then a `MAJOR.MINOR` + // version. Matched by a literal prefix plus a dotted-digit check on the rest so + // a stray diagnostic message beginning with the word is not swept up. + if let Some(rest) = line + .strip_prefix("Pyright ") + .or_else(|| line.strip_prefix("basedpyright ")) + && starts_with_dotted_version(rest) + { + return true; + } + // `Found 42 source files`: literal prefix, then a count, then `source file`. + if let Some(rest) = line.strip_prefix("Found ") { + let digits: String = rest.chars().take_while(char::is_ascii_digit).collect(); + if !digits.is_empty() { + let after = rest[digits.len()..].trim_start(); + if after.starts_with("source file") { + return true; + } + } + } + false +} + +/// True when `s` begins with `MAJOR.MINOR` (e.g. `1.22.0`, `1.1`): one or more +/// digits, a `.`, then one or more digits. +fn starts_with_dotted_version(s: &str) -> bool { + let mut chars = s.chars().peekable(); + let mut saw_major = false; + while let Some(&c) = chars.peek() { + if c.is_ascii_digit() { + saw_major = true; + chars.next(); + } else { + break; + } + } + if !saw_major || chars.next() != Some('.') { + return false; + } + matches!(chars.next(), Some(c) if c.is_ascii_digit()) +} + +/// Reshape eslint "stylish" output and render it through the shared grouped +/// renderer plus an eslint-specific Top-rules summary. +/// +/// Returns `None` when no stylish diagnostic rows were recognized, so the +/// caller falls back to the generic grouped renderer (e.g. when eslint emitted +/// an already-flat or non-stylish shape). The reshape attributes each indented +/// `L:C severity message rule-id` row to the most recent non-indented file +/// header, synthesizing a `file:line:col: severity message` line that +/// `group_diagnostics` can parse. Ungrouped lines (notably the +/// `✖ N problems (…)` summary) flow through `group_diagnostics` untouched. +fn render_eslint_stylish(stripped: &str) -> Option { + let mut current_header: Option<&str> = None; + let mut synthesized = String::new(); + let mut passthrough = String::new(); + let mut rule_counts: BTreeMap = BTreeMap::new(); + let mut matched_any = false; + + for raw in stripped.lines() { + if raw.trim().is_empty() { + continue; + } + let indented = raw.starts_with(' ') || raw.starts_with('\t'); + if !indented { + let trimmed = raw.trim_end(); + if looks_like_eslint_header(trimmed) { + current_header = Some(trimmed); + } else { + // Summary lines (`✖ 3 problems (…)`) and any other non-indented, + // non-path text are preserved verbatim for the renderer. + passthrough.push_str(trimmed); + passthrough.push('\n'); + } + continue; + } + if let Some((loc, severity, message, rule)) = parse_eslint_row(raw.trim()) { + matched_any = true; + let header = current_header.unwrap_or(""); + synthesized.push_str(header); + synthesized.push(':'); + synthesized.push_str(loc); + synthesized.push_str(": "); + synthesized.push_str(severity); + synthesized.push(' '); + synthesized.push_str(message); + synthesized.push('\n'); + if let Some(rule) = rule { + *rule_counts.entry(rule.to_string()).or_default() += 1; + } + } else { + passthrough.push_str(raw.trim_end()); + passthrough.push('\n'); + } + } + + if !matched_any { + return None; + } + + let mut combined = synthesized; + combined.push_str(&passthrough); + let grouped = group_diagnostics(&combined); + + let rule_summary = format_code_summary(&rule_counts); + if rule_summary.is_empty() { + return Some(grouped); + } + let mut out = String::with_capacity(grouped.len() + rule_summary.len() + 12); + // group_diagnostics prints `N diagnostics in M files` as the first line; + // keep that header, then splice the eslint Top-rules summary right after it. + let mut lines = grouped.splitn(2, '\n'); + if let Some(first) = lines.next() { + out.push_str(first); + out.push('\n'); + out.push_str("Top rules: "); + out.push_str(&rule_summary); + out.push('\n'); + if let Some(rest) = lines.next() { + out.push_str(rest); + } + } else { + out.push_str(&grouped); + } + Some(out) +} + +/// A non-indented eslint stylish header is the file path preceding its +/// diagnostic rows. Reject summary/keyword lines so they are not mistaken for +/// file headers. +fn looks_like_eslint_header(line: &str) -> bool { + if line.is_empty() || !looks_like_path(line) { + return false; + } + let lower = line.to_ascii_lowercase(); + // Drop summary noise that also "looks like a path" (contains a dot) such as + // `✖ 3 problems (2 errors, 1 warning)`. + !line.starts_with('✖') + && !line.starts_with('×') + && !lower.contains("problem") + && !lower.contains(" error") + && !lower.contains(" warning") +} + +/// Parse an eslint stylish diagnostic row (already trimmed of indentation): +/// `1:10 error Unexpected var, use let or const instead no-var`. +/// +/// Returns `(location, severity, message, rule_id)`. The rule-id is the final +/// whitespace-separated token when it is a plain rule slug (`no-var`, +/// `@typescript-eslint/no-unused-vars`); rows without a trailing rule (e.g. +/// `Parsing error: Unexpected token`) yield `rule_id == None` and fold the +/// trailing text into the message. +fn parse_eslint_row(row: &str) -> Option<(&str, &str, &str, Option<&str>)> { + let (loc, after_loc) = row.split_once(char::is_whitespace)?; + if !is_line_col(loc) { + return None; + } + let after_loc = after_loc.trim_start(); + let (severity, after_sev) = after_loc.split_once(char::is_whitespace)?; + if !matches!(severity, "error" | "warning") { + return None; + } + let body = after_sev.trim_start(); + if body.is_empty() { + return None; + } + // eslint stylish separates the message from the trailing rule-id with a run of + // >=2 spaces (`message␣␣rule-id`). Recognize the rule-id by that STRUCTURAL + // position — the token after the last >=2-space gap — not by requiring a + // hyphen, so hyphenless core rules (`semi`, `eqeqeq`, `camelcase`, `curly`, + // `radix`, `complexity`) are counted and not glued onto the message text. + // Rows with no >=2-space gap (`Parsing error: Unexpected token`) yield no + // rule-id and keep their whole body as the message. + if let Some((message, candidate)) = split_message_and_rule(body) + && is_eslint_rule_id(candidate) + { + return Some((loc, severity, message.trim_end(), Some(candidate))); + } + Some((loc, severity, body, None)) +} + +/// Split an eslint stylish body into `(message, rule-candidate)` at the LAST +/// run of two-or-more spaces. The rule-id column is right-aligned/space-padded +/// by eslint, so the final >=2-space gap precedes the rule slug. Returns `None` +/// when the body contains no such gap (the row carries no rule-id column). +fn split_message_and_rule(body: &str) -> Option<(&str, &str)> { + let bytes = body.as_bytes(); + let mut idx = bytes.len(); + // Walk back to the last `" "` (>=2 spaces) boundary; the tail after it is the + // rule-candidate, which itself contains no internal space. + while idx >= 2 { + if bytes[idx - 1] == b' ' && bytes[idx - 2] == b' ' { + let candidate = body[idx..].trim_start(); + if candidate.is_empty() || candidate.contains(' ') { + return None; + } + return Some((&body[..idx - 2], candidate)); + } + idx -= 1; + } + None +} + +/// `line:col` location token: digits, a colon, digits. +fn is_line_col(token: &str) -> bool { + let Some((line, col)) = token.split_once(':') else { + return false; + }; + !line.is_empty() + && !col.is_empty() + && line.chars().all(|ch| ch.is_ascii_digit()) + && col.chars().all(|ch| ch.is_ascii_digit()) +} + +/// An eslint rule slug: lowercase letters/digits, hyphens, optional `@scope/` +/// prefix and `/` separators (`no-var`, `@typescript-eslint/no-unused-vars`, +/// and hyphenless core rules `semi`, `eqeqeq`, `camelcase`, `curly`, `radix`, +/// `complexity`). NO hyphen is required — recognition relies on the structural +/// >=2-space column split in `parse_eslint_row` plus this character-class. A +/// > leading lowercase letter excludes prose tokens that survived the split +/// > (uppercase-initial words, punctuation, trailing periods). +fn is_eslint_rule_id(token: &str) -> bool { + let mut chars = token.chars(); + matches!(chars.next(), Some(ch) if ch.is_ascii_lowercase()) + && chars + .all(|ch| ch.is_ascii_lowercase() || ch.is_ascii_digit() || matches!(ch, '-' | '/' | '@')) +} + +/// Code-frame / underline / tool-chatter noise specific to the JS lint family. +/// +/// `line` arrives already trimmed (see `strip_lint_noise`), so leading-column +/// whitespace is gone; patterns are matched against the trimmed form. These +/// strips are deliberately gated to `tsc`/`eslint`/`biome`/`oxlint` so the +/// shared ruff/mypy/rubocop/pyright paths are unaffected. +fn is_js_frame_noise(program: &str, trimmed: &str) -> bool { + // tsc pretty + biome/oxlint share the same caret/tilde underline rows and + // gutter-numbered code-frame bodies; handle them for every JS lint program. + // + // Underline rows: only `~` (tsc) or `^` (biome/oxlint carets), optionally + // with interior spaces, e.g. `~~~`, `^^^`, `~ ~`. + if !trimmed.is_empty() + && trimmed + .chars() + .all(|ch| ch == '~' || ch == '^' || ch == ' ') + && trimmed.chars().any(|ch| ch == '~' || ch == '^') + { + return true; + } + // Code-frame body line: a leading line-number gutter followed by source. + // biome/oxlint emit `3 │ interface Props {`; tsc pretty emits `3 foo = 1;`. + // + // The biome/oxlint `│`-bar gutter is unambiguous (no real summary line carries + // a leading number then a box-drawing bar), so strip it unconditionally. The + // tsc-pretty BARE form (`N source`, no bar) collides with genuine summary / + // content lines that legitimately begin with a number — `7 errors and 2 + // warnings found`, `5 warnings`, `2 problems (2 errors)`, `3 files checked` — + // so only strip the bare form when the line carries NO diagnostic signal. This + // guards the exact information the exit!=0 diagnostic-signal gate was written + // to protect (is_js_frame_noise runs ahead of that gate in is_lint_noise). + if is_gutter_bar_line(trimmed) { + return true; + } + if is_bare_gutter_numbered_line(trimmed) && !contains_diagnostic_signal(trimmed) { + return true; + } + match program { + "biome" => { + // `│ ...` continuation rows (no leading number) and the post-fix + // success summary. `Checked N files` is already covered by the + // lowercase `checked ` rule in is_lint_noise. + trimmed.starts_with('│') || trimmed.to_ascii_lowercase().starts_with("fixed ") + }, + "oxlint" => { + // Box-drawing closers and progress/summary chatter that carries no + // diagnostic. `× rule: message` and `╭─[file:line]` are KEPT. + trimmed.starts_with('╰') + || trimmed.starts_with("Finished in") + || trimmed.starts_with("Found ") && trimmed.contains("warning") + }, + _ => false, + } +} + +/// True when `trimmed` is a biome/oxlint `│`-bar code-frame gutter row: a run +/// of ASCII digits, optional spaces, then the box-drawing bar `│` (`3 │ +/// interface`, `12 │ items.forEach(...)`). The bar makes this form unambiguous, +/// so it is stripped unconditionally — no genuine summary line matches it. +fn is_gutter_bar_line(trimmed: &str) -> bool { + let mut rest = trimmed; + let digits = rest + .find(|ch: char| !ch.is_ascii_digit()) + .unwrap_or(rest.len()); + if digits == 0 { + return false; + } + rest = rest[digits..].trim_start_matches(' '); + rest.starts_with('│') +} + +/// True when `trimmed` begins with a tsc-pretty BARE line-number gutter: a run +/// of ASCII digits immediately followed by an ASCII space/tab then source +/// (`3 foo = 1;`, `10 const x: number = "hello";`). This form overlaps with +/// real summary lines that start with a number, so callers MUST additionally +/// exclude lines carrying a diagnostic signal before stripping. +fn is_bare_gutter_numbered_line(trimmed: &str) -> bool { + let mut chars = trimmed.char_indices(); + let mut saw_digit = false; + for (idx, ch) in chars.by_ref() { + if ch.is_ascii_digit() { + saw_digit = true; + continue; + } + return saw_digit && idx > 0 && (ch == ' ' || ch == '\t'); + } + false +} + +#[must_use] pub fn group_diagnostics(input: &str) -> String { let mut grouped: BTreeMap> = BTreeMap::new(); let mut ungrouped = Vec::new(); @@ -311,4 +723,364 @@ mod tests { let out = condense_lint_output("basedpyright", "0 errors, 0 warnings, 0 notes\n", 0); assert_eq!(out, ""); } + + #[test] + fn basedpyright_banner_and_progress_noise_is_stripped() { + // Re-derived from rtk/src/filters/basedpyright.toml's first inline test, + // rendered through the minimizer's grouped per-file output. The version + // banner, `Searching for source files`, and `Found N source files` + // progress lines are dropped; the diagnostics survive and group by file. + let input = "basedpyright 1.22.0\nSearching for source files\nFound 42 source \ + files\n\n/home/user/app/main.py:10:5 - error: \"foo\" is not defined \ + (reportUndefinedVariable)\n/home/user/app/main.py:25:1 - error: Type \"str\" \ + is not assignable to type \"int\" \ + (reportAssignmentType)\n/home/user/app/utils.py:8:9 - warning: Variable \"x\" \ + is not accessed (reportUnusedVariable)\n"; + let out = condense_lint_output("basedpyright", input, 1); + assert!(!out.contains("basedpyright 1.22.0"), "version banner must be stripped: {out}"); + assert!(!out.contains("Searching for source files"), "progress must be stripped: {out}"); + assert!(!out.contains("Found 42 source files"), "progress must be stripped: {out}"); + assert!(out.contains("3 diagnostics in 2 files"), "got: {out}"); + assert!(out.contains("reportUndefinedVariable")); + } + + #[test] + fn pyright_banner_strips_are_scoped_off_other_linters() { + // The pyright banner/progress strips must not touch other linters: an + // oxlint diagnostic that legitimately mentions `Found`/`source files`-style + // text, or a version-like token, stays put. + assert!(is_pyright_banner_noise("Found 3 source files")); // sanity: helper itself + // Helper is scoped at the call site to pyright/basedpyright; confirm a + // non-pyright program never reaches it via is_lint_noise. + assert!(!is_lint_noise("oxlint", "Found 3 source files referenced", 1)); + assert!(!is_lint_noise("tsc", "Pyright 1.1 is mentioned here", 2)); + // And confirm the helper fires for pyright/basedpyright through is_lint_noise. + assert!(is_lint_noise("pyright", "Searching for source files", 1)); + assert!(is_lint_noise("basedpyright", "Found 42 source files", 1)); + assert!(is_lint_noise("basedpyright", "basedpyright 1.22.0", 1)); + assert!(is_lint_noise("pyright", "Pyright 1.1.0", 1)); + } + + // ----------------------------------------------------------------- + // CONCERN 1: tsc program-claim + code-frame strips + // (ported from snip/filters/tsc.yaml inline tests, re-rendered through + // the minimizer's grouped per-file + Top-codes output instead of snip's + // flat keep_lines) + // ----------------------------------------------------------------- + + #[test] + fn tsc_eslint_biome_oxlint_are_program_claimed() { + // Path-arg invocations resolve the subcommand to a path token that is not + // in the subcommand allowlist; the program claim is what routes them. + for program in ["tsc", "eslint", "biome", "oxlint"] { + assert!( + supports_program(program, Some("src/foo.ts")), + "{program} path-arg invocation must be program-claimed" + ); + assert!(supports_program(program, None), "{program} bare invocation must be claimed"); + } + } + + #[test] + fn tsc_pretty_strips_code_frames_and_groups_by_file() { + // snip's "pretty format errors with context" fixture. + let input = "src/index.ts:3:1 - error TS2304: Cannot find name 'foo'.\n\n3 foo = 1;\n \ + ~~~\n\nsrc/utils.ts:10:5 - error TS2322: Type 'string' is not assignable to \ + type 'number'.\n\n10 const x: number = \"hello\";\n ~\n\nFound 2 errors \ + in 2 files.\n"; + let out = condense_lint_output("tsc", input, 2); + assert!(out.contains("2 diagnostics in 2 files"), "got: {out}"); + assert!(out.contains("TS2304")); + assert!(out.contains("TS2322")); + assert!(out.contains("Top codes:")); + // Code-frame body lines and underline rows are stripped. + assert!(!out.contains("foo = 1;"), "code-frame body must be stripped: {out}"); + assert!(!out.contains("const x: number"), "code-frame body must be stripped: {out}"); + assert!(!out.contains('~'), "underline rows must be stripped: {out}"); + } + + #[test] + fn tsc_classic_groups_by_file() { + // snip's "classic format errors" fixture (no code frames). + let input = "src/index.ts(3,1): error TS2304: Cannot find name 'foo'.\nsrc/utils.ts(10,5): \ + error TS2322: Type 'string' is not assignable to type 'number'.\nFound 2 \ + errors in 2 files.\n"; + let out = condense_lint_output("tsc", input, 2); + assert!(out.contains("2 diagnostics in 2 files"), "got: {out}"); + assert!(out.contains("src/index.ts")); + assert!(out.contains("src/utils.ts")); + assert!(out.contains("TS2304")); + assert!(out.contains("TS2322")); + } + + #[test] + fn tsc_empty_input_condenses_to_clean() { + // snip emits "ok (no type errors)"; the minimizer renders empty input as + // empty (its own clean-build signal), so assert that behavior. + assert_eq!(condense_lint_output("tsc", "", 0), ""); + } + + // ----------------------------------------------------------------- + // CONCERN 2: eslint stylish-block parsing + // (ported from snip/filters/eslint.yaml inline tests) + // ----------------------------------------------------------------- + + #[test] + fn eslint_stylish_groups_rows_under_headers_with_top_rules() { + // snip's "errors with summary" fixture (incl. a Parsing error row and the + // fixable hint). Codepoints normalized: × is U+00D7-free here — eslint's + // summary marker is the heavy ballot ✖ (U+2716), kept verbatim. + let input = "/home/user/project/src/file.js\n 1:10 error Unexpected var, use let or \ + const instead no-var\n 2:5 warning Missing semicolon \ + semi\n\n/home/user/project/src/other.js\n 3:1 error Parsing error: \ + Unexpected token\n\n✖ 3 problems (2 errors, 1 warning)\n 1 error and 0 \ + warnings potentially fixable with the `--fix` option.\n"; + let out = condense_lint_output("eslint", input, 1); + // Grouped per-file rendering with the shared diagnostics header. + assert!(out.contains("3 diagnostics in 2 files"), "got: {out}"); + assert!(out.contains("file.js")); + assert!(out.contains("other.js")); + // Top-rules summary derived from the trailing rule-id column. + assert!(out.contains("Top rules:"), "got: {out}"); + assert!(out.contains("no-var")); + assert!(out.contains("semi")); + // The Parsing error row (no rule-id) is preserved as a diagnostic. + assert!(out.contains("Parsing error: Unexpected token"), "got: {out}"); + // Summary kept, fixable hint stripped. + assert!(out.contains("✖ 3 problems (2 errors, 1 warning)"), "got: {out}"); + assert!(!out.contains("potentially fixable"), "fixable hint must be stripped: {out}"); + } + + #[test] + fn eslint_stylish_single_file_keeps_summary() { + // snip's "single file error" fixture. + let input = "/app/src/index.js\n 5:3 error 'x' is defined but never used \ + no-unused-vars\n\n✖ 1 problem (1 error, 0 warnings)\n"; + let out = condense_lint_output("eslint", input, 1); + assert!(out.contains("1 diagnostics in 1 files"), "got: {out}"); + assert!(out.contains("index.js")); + assert!(out.contains("no-unused-vars")); + assert!(out.contains("Top rules:")); + assert!(out.contains("✖ 1 problem (1 error, 0 warnings)"), "got: {out}"); + } + + #[test] + fn eslint_clean_run_condenses_to_clean() { + // snip's "no errors produces ok": empty eslint output renders as empty + // (the minimizer's clean signal). Reshape finds no rows and falls back to + // the empty grouped output. + assert_eq!(condense_lint_output("eslint", "", 0), ""); + } + + // ----------------------------------------------------------------- + // CONCERN 3: biome / oxlint split-brain alignment + // (synthetic inline fixtures; × is U+00D7 — biome/oxlint emit U+00D7, + // NOT snip's ✖/✔ keep-pattern codepoints) + // ----------------------------------------------------------------- + + #[test] + fn biome_ci_keeps_diagnostics_strips_code_frames() { + assert!(supports_program("biome", Some("ci"))); + // biome ci default output: grouped header line + `× message` rows + + // numbered code-frame + caret underline. (× == U+00D7.) + let input = "Checked 42 files in 0.5s\n\nsrc/app.tsx:5:3 lint/suspicious/noExplicitAny \ + \u{2501}\u{2501}\u{2501}\n \u{00d7} Unexpected any. Specify a different \ + type.\n 3 \u{2502} interface Props {\n 4 \u{2502} data: any;\n 5 \u{2502} \ + \u{0020} ^^^\n\nsrc/utils.ts:12:1 lint/complexity/noForEach \ + \u{2501}\u{2501}\u{2501}\n \u{00d7} Prefer for...of instead of forEach.\n 12 \ + \u{2502} items.forEach(item => process(item));\n\nFound 2 errors.\n"; + let out = condense_lint_output("biome", input, 1); + // Grouped header lines survive (file:line:col …), × rows survive. + assert!(out.contains("src/app.tsx"), "got: {out}"); + assert!(out.contains("src/utils.ts")); + assert!(out.contains('\u{00d7}'), "× diagnostic rows must survive: {out}"); + assert!(out.contains("Unexpected any")); + assert!(out.contains("Prefer for...of")); + // Code-frame body rows (`N │ …`) are stripped; success chatter gone. + assert!(!out.contains("interface Props"), "code-frame body must be stripped: {out}"); + assert!(!out.contains("Checked 42 files"), "checked chatter must be stripped: {out}"); + assert!(!out.contains('^'), "caret underline must be stripped: {out}"); + } + + #[test] + fn biome_strips_fixed_files_success() { + // `Fixed N files` post-fix summary is chatter; stripped at success. + let out = condense_lint_output("biome", "Fixed 3 files in 0.1s\n", 0); + assert_eq!(out, ""); + } + + #[test] + fn oxlint_keeps_rule_and_location_strips_frames() { + assert!(supports_program("oxlint", Some("src/"))); + // oxlint default output: `× rule: message`, `╭─[file:line]` location, + // numbered code-frame, `╰────` closer, Finished/Found chatter. + let input = " \u{00d7} eslint(no-console): Unexpected console statement.\n \ + \u{256d}\u{2500}[src/app.ts:5:3]\n 5 \u{2502} console.log(\"debug\");\n \ + \u{2502} ^^^^^^^^^^^\n \u{2570}\u{2500}\u{2500}\u{2500}\u{2500}\n\n \ + \u{00d7} eslint(no-unused-vars): 'x' is defined but never used.\n \ + \u{256d}\u{2500}[src/utils.ts:2:7]\n 2 \u{2502} let x = 42;\n \u{2502} \ + ^\n \u{2570}\u{2500}\u{2500}\u{2500}\u{2500}\n\nFound 2 warnings on 2 \ + files.\nFinished in 12ms on 100 files.\n"; + let out = condense_lint_output("oxlint", input, 1); + // Diagnostic rows and location markers survive. + assert!(out.contains('\u{00d7}'), "× diagnostic rows must survive: {out}"); + assert!(out.contains("no-console")); + assert!(out.contains("no-unused-vars")); + assert!( + out.contains("\u{256d}\u{2500}[src/app.ts:5:3]"), + "location marker must survive: {out}" + ); + // Code-frame rows, closers, and progress chatter are stripped. + assert!(!out.contains("console.log"), "code-frame body must be stripped: {out}"); + assert!(!out.contains('\u{2570}'), "box closer must be stripped: {out}"); + assert!(!out.contains("Finished in"), "Finished chatter must be stripped: {out}"); + assert!(!out.contains("Found 2 warnings"), "Found chatter must be stripped: {out}"); + } + + #[test] + fn oxlint_clean_run_condenses_to_clean() { + // Only progress chatter, no diagnostics -> empty. + let out = condense_lint_output("oxlint", "Finished in 5ms on 100 files.\n", 0); + assert_eq!(out, ""); + } + + #[test] + fn shared_python_ruby_paths_unaffected_by_js_strips() { + // Regression pin for the SHARED renderer: ruff (file:line) and mypy + // (bracketed code) diagnostics still group, and a leading-number gutter + // line in their output is NOT mistaken for a JS code-frame (the strip is + // gated to tsc/eslint/biome/oxlint only). + let ruff = "src/app.py:1:1: F401 imported but unused\nFound 1 error.\n"; + let out = condense_lint_output("ruff", ruff, 1); + assert!(out.contains("F401"), "got: {out}"); + + let mypy = "lib/b.py:4: error: no attr [attr-defined]\n"; + let out = condense_lint_output("mypy", mypy, 1); + assert!(out.contains("attr-defined") || out.contains("b.py"), "got: {out}"); + } + + // ----------------------------------------------------------------- + // Regression: blocking-issue fixes + // ----------------------------------------------------------------- + + #[test] + fn js_lint_numeric_summary_line_is_not_gutter_stripped() { + // BLOCKING 1 regression: a JS-lint summary/content line that BEGINS with a + // number (`7 errors and 2 warnings found`) must survive — the bare-gutter + // strip only applies to code-frame body rows that carry no diagnostic + // signal, so this line (it contains "error"/"warning") is preserved. + let input = "/app/x.js\n 1:1 error bad no-var\n\n7 errors and 2 warnings \ + found\n\u{2716} 9 problems (9 errors, 0 warnings)\n"; + let out = condense_lint_output("eslint", input, 1); + assert!( + out.contains("7 errors and 2 warnings found"), + "numeric summary line must survive the gutter strip: {out}" + ); + assert!(out.contains("\u{2716} 9 problems (9 errors, 0 warnings)"), "got: {out}"); + + // Helper-level pins: the BARE tsc form only strips when no diagnostic signal + // is present, while the biome/oxlint `│`-bar form always strips. + assert!(is_bare_gutter_numbered_line("3 foo = 1;")); + assert!(contains_diagnostic_signal("7 errors and 2 warnings found")); + assert!(contains_diagnostic_signal("5 warnings")); + assert!(contains_diagnostic_signal("2 problems (2 errors)")); + assert!(!is_gutter_bar_line("10 errors found"), "bare numeric is not a bar gutter"); + assert!(is_gutter_bar_line("3 \u{2502} interface Props {"), "biome bar gutter strips"); + assert!(is_gutter_bar_line("12 \u{2502} items.forEach(...)"), "oxlint bar gutter strips"); + } + + // ----------------------------------------------------------------- + // CONCERN: eslint explicit formatter passthrough + // ----------------------------------------------------------------- + + #[test] + fn eslint_json_format_passes_through() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = MinimizerCtx { + program: "eslint", + subcommand: None, + command: "eslint -f json src/", + config: &cfg, + }; + // should passthrough — preserves_machine_readable_output returns true + let dummy = r#"[{"filePath":"src/foo.js","messages":[]}]"#; + let out = filter(&ctx, dummy, 0); + assert!(!out.changed, "eslint -f json must passthrough unchanged"); + assert_eq!(out.text, dummy); + } + + #[test] + fn eslint_format_long_flag_passes_through() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + for command in [ + "eslint --format json src/", + "eslint --format=json src/", + "eslint --format compact src/", + "eslint -f junit src/", + ] { + let ctx = MinimizerCtx { program: "eslint", subcommand: None, command, config: &cfg }; + let dummy = r#"[{"filePath":"src/foo.js","messages":[]}]"#; + let out = filter(&ctx, dummy, 0); + assert!(!out.changed, "{command} must passthrough unchanged"); + assert_eq!(out.text, dummy); + } + } + + #[test] + fn eslint_stylish_still_condensed() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = MinimizerCtx { + program: "eslint", + subcommand: None, + command: "eslint --format stylish src/", + config: &cfg, + }; + let dummy = "\nsrc/foo.js\n 1:1 error bad no-var\n\n✖ 1 problem\n"; + let out = filter(&ctx, dummy, 1); + // stylish goes through the condenser, result should be changed + assert!(out.changed, "eslint --format stylish must go through the condenser"); + } + + #[test] + fn eslint_no_format_flag_still_condensed() { + // no -f/--format flag at all → default stylish → condenser runs + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = MinimizerCtx { + program: "eslint", + subcommand: None, + command: "eslint src/", + config: &cfg, + }; + let dummy = "\nsrc/foo.js\n 1:1 error bad no-var\n\n✖ 1 problem\n"; + let out = filter(&ctx, dummy, 1); + assert!(out.changed, "eslint without -f must go through the condenser"); + } + + #[test] + fn eslint_hyphenless_rules_counted_under_top_rules_and_unglued() { + // BLOCKING 2 regression: hyphenless core rules (`semi`, `eqeqeq`) are + // recognized by their structural >=2-space column position, counted under + // `Top rules:`, and NOT glued onto the message body. + assert!(is_eslint_rule_id("semi")); + assert!(is_eslint_rule_id("eqeqeq")); + assert!(is_eslint_rule_id("camelcase")); + assert!(is_eslint_rule_id("curly")); + assert!(is_eslint_rule_id("radix")); + assert!(is_eslint_rule_id("complexity")); + // Prose tokens (uppercase-initial / punctuation) are still rejected. + assert!(!is_eslint_rule_id("Unexpected")); + assert!(!is_eslint_rule_id("token.")); + + let input = "/app/x.js\n 1:1 error Missing semicolon semi\n 2:1 error Expected === \ + eqeqeq\n\n\u{2716} 2 problems (2 errors, 0 warnings)\n"; + let out = condense_lint_output("eslint", input, 1); + assert!(out.contains("Top rules:"), "hyphenless rules must produce a Top rules line: {out}"); + assert!(out.contains("semi (1x)"), "semi must be counted: {out}"); + assert!(out.contains("eqeqeq (1x)"), "eqeqeq must be counted: {out}"); + // The rule slug must NOT be glued onto the diagnostic message body. + assert!( + !out.contains("Missing semicolon semi") && !out.contains("Missing semicolon semi"), + "rule slug must be split from the message, not glued: {out}" + ); + } } diff --git a/crates/pi-shell/src/minimizer/filters/listing.rs b/crates/pi-shell/src/minimizer/filters/listing.rs index 192f08502..a130a7dd6 100644 --- a/crates/pi-shell/src/minimizer/filters/listing.rs +++ b/crates/pi-shell/src/minimizer/filters/listing.rs @@ -1,6 +1,8 @@ //! Filesystem listing and search filters. -use std::{collections::BTreeMap, path::Path}; +use std::{collections::BTreeMap, path::Path, sync::LazyLock}; + +use regex::Regex; use crate::minimizer::{MinimizerCtx, MinimizerOutput, config::OutlineLevel, primitives}; @@ -37,6 +39,7 @@ fn find_outputs_paths_only(command: &str) -> bool { }) } +#[must_use] pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerOutput { let cleaned = primitives::strip_ansi(input); let legacy = ctx.config.legacy_filters_active(); @@ -67,7 +70,7 @@ pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerO } }, "cat" | "read" => compact_cat_output(ctx, &cleaned), - "stat" | "du" | "df" | "wc" => compact_summary_output(&cleaned), + "stat" | "du" | "df" | "wc" => compact_summary_output(&cleaned, ctx.program), "jq" | "json" => cleaned, _ => cleaned, } @@ -79,6 +82,14 @@ pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerO } } +/// Date/time anchor in `ls -l` output: month-name day time-or-year. +/// E.g.: " Apr 28 10:00 " or " Dec 25 2024 " or " 2 feb 21:35 ". +/// The `(?i)` flag makes month names case-insensitive for non-C locales. +/// The trailing space ensures we do not match partial tokens. +static LS_DATE_RE: LazyLock = LazyLock::new(|| { + Regex::new(r"(?i)\s+(?:(?:\p{L}{3,}\.?\s+\d{1,2}|\d{1,2}\.?\s+\p{L}{3,}\.?)\s+(?:\d{4}|\d{2}:\d{2})|\d{4}[-/]\d{2}(?:[-/]\d{2})?\s+\d{2}:\d{2})\s+").unwrap() +}); + fn compact_listing_output(input: &str) -> String { primitives::compact_listing(input, 80) } @@ -471,24 +482,41 @@ fn parse_ls_long_line(line: &str) -> Option { if trimmed.starts_with("total ") || trimmed.is_empty() { return None; } - let kind = trimmed.chars().next()?; - if !matches!(kind, 'd' | '-' | 'l') { - return None; - } - let parts: Vec<&str> = trimmed.split_whitespace().collect(); - if parts.len() < 9 { - return None; - } - let name = parts[8..].join(" "); + + let date_match = LS_DATE_RE.find(line)?; + let name = line[date_match.end()..].to_string(); if matches!(name.as_str(), "." | "..") { return None; } - Some(LsEntry { - name, - is_dir: kind == 'd', - size: parts.get(4).and_then(|value| value.parse().ok()), - is_file: kind == '-', - }) + + let before_date = &line[..date_match.start()]; + let before_parts: Vec<&str> = before_date.split_whitespace().collect(); + if before_parts.len() < 4 { + return None; + } + + let kind = before_parts[0].chars().next()?; + if !matches!(kind, '-' | 'd' | 'l' | 'c' | 'b' | 's' | 'p' | 'D') { + return None; + } + + // Size is the rightmost parseable u64 before the date, but skip + // comma-separated device major/minor pairs. + let mut size = None; + if let Some((i, part)) = before_parts.iter().enumerate().next_back() { + if part.ends_with(',') { + // Major number of a device file — skip. + } else if let Ok(s) = part.parse::() { + if i > 0 && before_parts[i - 1].ends_with(',') { + // This numeric field is the minor number of a device file. + } else { + size = Some(s); + } + } + // Non-numeric field (e.g. owner/group word) before size: no size. + } + + Some(LsEntry { name, is_dir: kind == 'd', size, is_file: kind == '-' }) } fn format_human_size(size: u64) -> String { @@ -1123,13 +1151,34 @@ fn strip_python_bodies(input: &str) -> String { out } -fn compact_summary_output(input: &str) -> String { +fn compact_summary_output(input: &str, program: &str) -> String { let lines: Vec<&str> = input.lines().collect(); if lines.len() <= 30 { return input.to_string(); } - let windowed = primitives::head_tail_lines(input, 12, 12); + let input = if program == "df" { + let kept: Vec<&str> = lines + .into_iter() + .filter(|line| { + let trimmed = line.trim_start(); + if trimmed.starts_with("overlay") || trimmed.starts_with("none") { + // Keep container root: overlay/none mounted at "/" + return trimmed.split_whitespace().last() == Some("/"); + } + !trimmed.starts_with("tmpfs") + && !trimmed.starts_with("devtmpfs") + && !trimmed.starts_with("udev") + && !trimmed.starts_with("shm") + }) + .collect(); + kept.join("\n") + } else { + lines.join("\n") + }; + + let lines: Vec<&str> = input.lines().collect(); + let windowed = primitives::head_tail_lines(&input, 12, 12); let mut out = String::new(); for line in lines.iter().copied().filter(|line| is_summary_line(line)) { if !windowed.lines().any(|existing| existing == line) @@ -1160,6 +1209,8 @@ fn has_content(text: &str) -> bool { #[cfg(test)] mod tests { + use std::fmt::Write as _; + use super::*; use crate::minimizer::MinimizerConfig; @@ -1441,6 +1492,39 @@ mod tests { assert!(out.text.contains("/dev/disk35")); } + #[test] + fn df_keeps_overlay_root_drops_inner_overlays() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = ctx("df", &cfg); + let header = "Filesystem 1K-blocks Used Available Use% Mounted on\n"; + let overlay_root = "overlay 52428800 12345678 40083122 24% /\n"; + let overlay_inner = + "overlay 52428800 1234 52427566 0% /var/lib/docker/overlay2/abc/merged\n"; + let real_fs = "sda1 52428800 5000000 47428800 10% /data\n"; + let tmpfs_line = "tmpfs 8192000 0 8192000 0% /dev\n"; + let padding: String = (0..28).fold(String::new(), |mut s, i| { + let _ = writeln!(s, "sda{i} 1000 500 500 50% /mnt/disk{i}"); + s + }); + let input = format!("{header}{overlay_root}{overlay_inner}{real_fs}{tmpfs_line}{padding}"); + + let out = filter(&ctx, &input, 0); + // Container root overlay must be kept + assert!( + out.text.contains("24%") || (out.text.contains("overlay") && out.text.contains("/ ")), + "container root overlay must be kept; got:\n{}", + out.text + ); + // Inner overlay must be dropped + assert!( + !out.text.contains("/var/lib/docker"), + "inner overlay must be dropped; got:\n{}", + out.text + ); + // tmpfs must be dropped + assert!(!out.text.contains("tmpfs"), "tmpfs must be dropped; got:\n{}", out.text); + } + #[test] fn json_only_strips_ansi_when_short() { let cfg = MinimizerConfig { enabled: true, ..Default::default() }; @@ -1626,23 +1710,21 @@ mod tests { // --------------------------------------------------------------- fn legacy_cfg() -> MinimizerConfig { - let mut cfg = MinimizerConfig::default(); - cfg.enabled = true; - cfg.legacy_filters_active = true; - cfg + MinimizerConfig { enabled: true, legacy_filters_active: true, ..Default::default() } } fn synthesize_grep(matches_per_file: usize, files: usize) -> String { let mut out = String::new(); for f in 0..files { for m in 0..matches_per_file { - out.push_str(&format!( + let _ = writeln!( + out, "src/module{f}/file{f}.rs:{ln}: pub fn handler_{f}_{m}(req: Request) -> \ - Result {{ /* body */ }}\n", + Result {{ /* body */ }}", ln = m * 7 + 1, f = f, m = m, - )); + ); } } out @@ -1652,10 +1734,11 @@ mod tests { let mut out = String::new(); for d in 0..dirs { for f in 0..per_dir { - out.push_str(&format!( + let _ = writeln!( + out, "./crates/pi-shell/src/minimizer/filters/category{d}/\ - handler_{f}_with_descriptive_name.rs\n", - )); + handler_{f}_with_descriptive_name.rs", + ); } } out @@ -1817,4 +1900,133 @@ mod tests { assert_eq!(out.text, input); assert!(!out.changed); } + + // ------------------------------------------------------------- + // CONCERN 1: ls date-anchored parse + // ------------------------------------------------------------- + + #[test] + fn parse_ls_long_line_handles_spaced_filename() { + let entry = parse_ls_long_line("drwxr-xr-x 2 user staff 192 Feb 2 21:35 my dir").unwrap(); + assert_eq!(entry.name, "my dir"); + assert_eq!(entry.size, Some(192)); + assert!(entry.is_dir); + assert!(!entry.is_file); + } + + #[test] + fn parse_ls_long_line_handles_year_format_date() { + let entry = + parse_ls_long_line("-rw-r--r-- 1 user staff 5678 Dec 25 2024 archive.tar").unwrap(); + assert_eq!(entry.name, "archive.tar"); + assert_eq!(entry.size, Some(5678)); + assert!(!entry.is_dir); + assert!(entry.is_file); + } + + #[test] + fn compact_ls_with_spaced_filename_and_year_date() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = ctx("ls", &cfg); + let mut input = String::from("total 8\n"); + input.push_str("drwxr-xr-x 2 user staff 192 Feb 2 21:35 my dir\n"); + input.push_str("-rw-r--r-- 1 user staff 1234 Feb 2 21:35 my file.txt\n"); + input.push_str("-rw-r--r-- 1 user staff 5678 Dec 25 2024 archive.tar\n"); + for idx in 0..20 { + input.push_str("-rw-r--r-- 1 user staff "); + input.push_str(&(1024 * (idx + 1)).to_string()); + input.push_str(" Feb 2 21:35 file"); + input.push_str(&idx.to_string()); + input.push_str(".rs\n"); + } + let out = filter(&ctx, &input, 0); + assert!(out.text.contains("my dir/"), "spaced dir name missing: {}", out.text); + assert!(out.text.contains("my file.txt"), "spaced file name missing: {}", out.text); + assert!(out.text.contains("archive.tar"), "year-format file missing: {}", out.text); + } + + #[test] + fn parse_ls_long_line_handles_non_english_month() { + let entry = + parse_ls_long_line("-rw-r--r-- 1 user staff 1234 25 Mär 10:00 file.txt").unwrap(); + assert_eq!(entry.name, "file.txt"); + assert_eq!(entry.size, Some(1234)); + assert!(!entry.is_dir); + assert!(entry.is_file); + } + + #[test] + fn parse_ls_long_line_handles_dotted_month_abbreviation() { + let entry = + parse_ls_long_line("-rw-r--r-- 1 user staff 5678 févr. 2 21:35 file.txt").unwrap(); + assert_eq!(entry.name, "file.txt"); + assert_eq!(entry.size, Some(5678)); + assert!(!entry.is_dir); + assert!(entry.is_file); + } + + #[test] + fn parse_ls_long_line_device_file_returns_none_size() { + let entry = + parse_ls_long_line("crw-rw---- 1 root dialout 1, 3 Jan 1 10:00 console").unwrap(); + assert_eq!(entry.name, "console"); + assert_eq!(entry.size, None); + assert!(!entry.is_dir); + assert!(!entry.is_file); + } + + #[test] + fn parse_ls_long_line_iso_date_format() { + let entry = + parse_ls_long_line("-rw-r--r-- 1 user staff 1234 2024-12-25 10:00 file.txt").unwrap(); + assert_eq!(entry.name, "file.txt"); + assert_eq!(entry.size, Some(1234)); + assert!(!entry.is_dir); + assert!(entry.is_file); + } + + // ------------------------------------------------------------- + // CONCERN 2: df virtual-filesystem row drop + // ------------------------------------------------------------- + + #[test] + fn long_df_drops_virtual_fs_rows() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = ctx("df", &cfg); + let mut input = String::from("Filesystem 1K-blocks Used Available Use% Mounted on\n"); + for idx in 0..18 { + input.push_str("tmpfs 100 50 50 50% /mnt/t"); + input.push_str(&idx.to_string()); + input.push('\n'); + } + for idx in 0..30 { + input.push_str("/dev/disk"); + input.push_str(&idx.to_string()); + input.push_str(" 100 50 50 50% /mnt/d"); + input.push_str(&idx.to_string()); + input.push('\n'); + } + let out = filter(&ctx, &input, 0); + assert!( + out.text + .contains("Filesystem 1K-blocks Used Available Use% Mounted on"), + "header must be kept: {}", + out.text + ); + assert!(!out.text.contains("tmpfs"), "tmpfs must be dropped: {}", out.text); + assert!(out.text.contains("/dev/disk"), "real disk rows must be kept: {}", out.text); + assert!(out.text.contains("…"), "summary ellipsis expected: {}", out.text); + } + + #[test] + fn short_df_passes_through_verbatim() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let ctx = ctx("df", &cfg); + let mut input = String::from("Filesystem 1K-blocks Used Available Use% Mounted on\n"); + input.push_str("tmpfs 100 50 50 50% /mnt/tmp\n"); + input.push_str("/dev/disk0 100 50 50 50% /\n"); + let out = filter(&ctx, &input, 0); + assert_eq!(out.text, input, "short df must pass through verbatim"); + assert!(!out.changed); + } } diff --git a/crates/pi-shell/src/minimizer/filters/mod.rs b/crates/pi-shell/src/minimizer/filters/mod.rs index 6cef929d4..d68963a89 100644 --- a/crates/pi-shell/src/minimizer/filters/mod.rs +++ b/crates/pi-shell/src/minimizer/filters/mod.rs @@ -15,6 +15,7 @@ pub mod dotnet; pub mod generic; pub mod gh; +pub mod glab; pub mod go; pub mod gt; @@ -23,6 +24,8 @@ pub mod git; pub mod js_tools; +pub mod jvm; + pub mod lint; pub mod listing; pub mod node_tests; @@ -33,6 +36,7 @@ pub mod ruby; pub mod rust_tools; pub mod system; +#[must_use] pub fn supports(program: &str, subcommand: Option<&str>) -> bool { match program { "git" | "yadm" => git::supports(subcommand), @@ -45,11 +49,19 @@ pub fn supports(program: &str, subcommand: Option<&str>) -> bool { }, program if cpp::is_gtest_binary_name(program) => cpp::supports(program, subcommand), "dotnet" => dotnet::supports(program, subcommand), + // JVM build tools: phase is decided inside jvm::filter (never by + // ctx.subcommand, which mis-reports `mvn clean install` as `clean`), so + // supports() claims every subcommand. Defensive `.cmd`/`.bat` arms cover + // the case where normalize_program is bypassed. + "mvn" | "mvnw" | "mvnw.cmd" | "gradle" | "gradlew" | "gradlew.bat" => { + jvm::supports(program, subcommand) + }, "ls" | "tree" | "find" | "grep" | "rg" | "wc" | "cat" | "read" | "stat" | "du" | "df" | "jq" | "json" => true, "aws" | "curl" | "wget" | "psql" => cloud::supports(program, subcommand), "docker" | "kubectl" | "helm" => docker::supports(subcommand), "gh" => gh::supports(subcommand), + "glab" => glab::supports(subcommand), "pytest" | "ruff" | "mypy" | "python" | "python3" | "py" => { python::supports(program, subcommand) }, @@ -130,6 +142,7 @@ fn is_lint_script_token(token: &str) -> bool { } /// Apply the matching built-in filter. +#[must_use] pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerOutput { let _ = ctx.command; let _ = ctx.config.per_command(ctx.program); @@ -140,6 +153,9 @@ pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerO "cargo" => cargo::filter(ctx, input, exit_code), "go" | "golangci-lint" => go::filter(ctx, input, exit_code), "dotnet" => dotnet::filter(ctx, input, exit_code), + "mvn" | "mvnw" | "mvnw.cmd" | "gradle" | "gradlew" | "gradlew.bat" => { + jvm::filter(ctx, input, exit_code) + }, "cmake" | "ctest" | "ninja" | "gtest" | "gtest-parallel" => { cpp::filter(ctx, input, exit_code) }, @@ -149,6 +165,7 @@ pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerO "aws" | "curl" | "wget" | "psql" => cloud::filter(ctx, input, exit_code), "docker" | "kubectl" | "helm" => docker::filter(ctx, input, exit_code), "gh" => gh::filter(ctx, input, exit_code), + "glab" => glab::filter(ctx, input, exit_code), "pytest" | "ruff" | "mypy" | "python" | "python3" | "py" => { python::filter(ctx, input, exit_code) }, @@ -164,6 +181,9 @@ pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerO "uv" if matches!(ctx.subcommand, Some("run" | "pytest" | "ruff" | "mypy" | "-m")) => { filter_uv_wrapper(ctx, input, exit_code) }, + "bundle" if matches!(ctx.subcommand, Some("exec")) => { + filter_bundle_wrapper(ctx, input, exit_code) + }, "npm" | "pnpm" | "yarn" => { if is_pkg_test_invocation(ctx) { node_tests::filter(ctx, input, exit_code) @@ -183,10 +203,22 @@ pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerO } fn filter_js_wrapper(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerOutput { - if wrapper_invokes(ctx, &["tsc", "eslint", "biome"]) { - lint::filter(ctx, input, exit_code) - } else if wrapper_invokes(ctx, &["jest", "vitest", "playwright"]) { - node_tests::filter(ctx, input, exit_code) + if let Some(tool) = wrapper_invoked_tool(ctx, &["tsc", "eslint", "biome"]) { + let routed = MinimizerCtx { + program: tool, + subcommand: Some(tool), + command: ctx.command, + config: ctx.config, + }; + lint::filter(&routed, input, exit_code) + } else if let Some(tool) = wrapper_invoked_tool(ctx, &["jest", "vitest", "playwright"]) { + let routed = MinimizerCtx { + program: tool, + subcommand: Some(tool), + command: ctx.command, + config: ctx.config, + }; + node_tests::filter(&routed, input, exit_code) } else if js_tools::supports(ctx.program, ctx.subcommand) { js_tools::filter(ctx, input, exit_code) } else { @@ -252,6 +284,40 @@ fn filter_uv_wrapper(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> Min } } +fn filter_bundle_wrapper(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerOutput { + let Some(inner_command) = bundle_wrapped_command(ctx.command) else { + return pkg::filter(ctx, input, exit_code); + }; + crate::minimizer::apply(&inner_command, input, exit_code, ctx.config) +} + +/// Extract the inner command from a `bundle exec …` invocation so the +/// engine can re-dispatch through the wrapped tool's filter/def. Returns +/// `None` when the command does not follow the `bundle exec` pattern. +fn bundle_wrapped_command(command: &str) -> Option { + let tokens: Vec<&str> = command + .split(|ch: char| ch.is_whitespace() || matches!(ch, ';' | '|' | '&')) + .filter(|tok| !tok.is_empty()) + .collect(); + let bundle_pos = tokens.iter().position(|t| { + t.rsplit('/') + .next() + .is_some_and(|name| name.eq_ignore_ascii_case("bundle")) + })?; + let mut iter = tokens.iter().skip(bundle_pos + 1).copied(); + let word = next_command_word(&mut iter)?; + if word != "exec" { + return None; + } + let tool = next_command_word(&mut iter)?; + let mut inner = String::from(tool); + for tok in iter { + inner.push(' '); + inner.push_str(tok); + } + Some(inner) +} + /// Normalize uv invocation forms into a routable tool name (B1 / m4). /// /// Resolution order: @@ -340,6 +406,11 @@ const WRAPPER_VALUE_OPTIONS: &[&str] = &[ "--workspace", "-w", "--node-arg", + // bundle exec + "--gemfile", + "--path", + "--jobs", + "--retry", ]; /// Advance `tokens` to the next invoked-command word, skipping flag tokens and @@ -397,10 +468,6 @@ fn wrapper_command_word(command: &str) -> Option<&str> { Some(word) } -fn wrapper_invokes(ctx: &MinimizerCtx<'_>, tools: &[&str]) -> bool { - wrapper_invoked_tool(ctx, tools).is_some() -} - fn wrapper_invoked_tool<'a>(ctx: &'a MinimizerCtx<'_>, tools: &[&'a str]) -> Option<&'a str> { // Prefer wrapper_command_word over ctx.subcommand: it properly skips // value-taking option values (e.g. -w, --workspace, --with) that @@ -453,6 +520,16 @@ mod tests { assert!(!out.changed); } + #[test] + fn test_wrapper_eslint_json_format_preserved() { + // Simulates: npx eslint -f json src/ + let config = MinimizerConfig::default(); + let input = r#"[{"filePath":"a.ts","messages":[],"errorCount":0}]"#; + let context = ctx("npx", Some("eslint"), "npx eslint -f json src/", &config); + let out = filter(&context, input, 0); + assert!(out.text.contains("filePath"), "eslint -f json via npx must not be condensed"); + } + #[test] fn run_invoked_word_picks_script_not_arguments() { assert_eq!(run_invoked_word("npm run build -- test"), Some("build")); @@ -846,12 +923,96 @@ mod tests { fn pytest_legacy_filters_active_passes_through() { // Kill-switch parity (M2): legacy_filters_active=true skips the // pytest state machine even when invoked via `uv pytest`. - let mut config = MinimizerConfig::default(); - config.enabled = true; - config.legacy_filters_active = true; + let config = + MinimizerConfig { enabled: true, legacy_filters_active: true, ..Default::default() }; let context = ctx("uv", Some("pytest"), "uv pytest tests/", &config); let out = filter(&context, PYTEST_FAILURE_INPUT, 1); assert_eq!(out.text, PYTEST_FAILURE_INPUT); assert!(!out.changed); } + + // ------------------------------------------------------------- + // Tier 2b: bundle exec wrapper re-dispatch + // ------------------------------------------------------------- + + #[test] + fn bundle_wrapped_command_extracts_inner_command() { + assert_eq!( + super::bundle_wrapped_command("bundle exec rails db:migrate"), + Some("rails db:migrate".to_string()) + ); + assert_eq!( + super::bundle_wrapped_command("bundle exec rake db:migrate"), + Some("rake db:migrate".to_string()) + ); + assert_eq!( + super::bundle_wrapped_command("bundle exec rails routes"), + Some("rails routes".to_string()) + ); + assert_eq!(super::bundle_wrapped_command("bundle exec rspec"), Some("rspec".to_string())); + // Skips bundle-specific value-taking options + assert_eq!( + super::bundle_wrapped_command("bundle exec --gemfile foo/Gemfile rails db:migrate"), + Some("rails db:migrate".to_string()) + ); + // Non-exec subcommands return None + assert_eq!(super::bundle_wrapped_command("bundle install"), None); + // No bundle token returns None + assert_eq!(super::bundle_wrapped_command("gem install"), None); + // Path-prefixed bundle binary should still be recognized + assert_eq!( + super::bundle_wrapped_command("/usr/local/bin/bundle exec rails db:migrate"), + Some("rails db:migrate".to_string()) + ); + assert_eq!( + super::bundle_wrapped_command("bin/bundle exec rake db:migrate"), + Some("rake db:migrate".to_string()) + ); + } + + #[test] + fn bundle_exec_rails_db_migrate_routes_to_def() { + let config = MinimizerConfig { enabled: true, ..Default::default() }; + let context = ctx("bundle", Some("exec"), "bundle exec rails db:migrate", &config); + let input = "== 20240115 CreateUsers: migrating\n-- create_table(:users)\n -> 0.0234s\n== \ + 20240115 CreateUsers: migrated\n"; + let out = filter(&context, input, 0); + assert!(out.changed); + assert!(out.text.contains("CreateUsers")); + assert!(!out.text.contains("-- create_table")); + } + + #[test] + fn bundle_exec_rails_routes_routes_to_def() { + let config = MinimizerConfig { enabled: true, ..Default::default() }; + let context = ctx("bundle", Some("exec"), "bundle exec rails routes", &config); + let input = " Prefix Verb URI Pattern Controller#Action\n root GET / home#index\n"; + let out = filter(&context, input, 0); + assert!(out.changed); + assert!(!out.text.contains("Prefix")); + assert!(out.text.contains("root GET")); + } + + #[test] + fn bundle_exec_rspec_routes_to_ruby_filter() { + let config = MinimizerConfig { enabled: true, ..Default::default() }; + let context = ctx("bundle", Some("exec"), "bundle exec rspec", &config); + let input = "Randomized with seed 12345\n\nUserController\n GET /users\n returns a list \ + of users\n\nFinished in 0.45 seconds\n5 examples, 0 failures\n"; + let out = filter(&context, input, 0); + assert!(out.changed); + assert!(out.text.contains("5 examples, 0 failures")); + assert!(!out.text.contains("returns a list of users")); + } + + #[test] + fn bundle_exec_unknown_tool_uses_pkg_filter() { + let config = MinimizerConfig { enabled: true, ..Default::default() }; + let context = ctx("bundle", Some("exec"), "bundle exec ruby script.rb", &config); + let input = "hello from ruby\n"; + let out = filter(&context, input, 0); + // No filter matches ruby script.rb, so it passes through + assert_eq!(out.text, input); + assert!(!out.changed); + } } diff --git a/crates/pi-shell/src/minimizer/filters/node_tests.rs b/crates/pi-shell/src/minimizer/filters/node_tests.rs index 0a7d700bc..fd4e4b9dd 100644 --- a/crates/pi-shell/src/minimizer/filters/node_tests.rs +++ b/crates/pi-shell/src/minimizer/filters/node_tests.rs @@ -2,6 +2,7 @@ use crate::minimizer::{MinimizerCtx, MinimizerOutput, primitives}; +#[must_use] pub fn filter(_ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerOutput { let cleaned = primitives::strip_ansi(input); let text = if exit_code == 0 { @@ -27,6 +28,11 @@ fn drop_passed_lines(input: &str) -> String { push_line(&mut out, line); continue; } + // snip jest.yaml strips: console.log noise and the zero-information + // "Ran all test suites" line carry no signal even on success. + if is_noise_line(trimmed) { + continue; + } if is_pass_noise(trimmed) { continue; } @@ -50,6 +56,13 @@ fn failures_only(input: &str) -> String { for line in input.lines() { let trimmed = line.trim_start(); + // snip jest.yaml strips: drop console.log noise and the zero-information + // "Ran all test suites" line transparently, without breaking the kept + // failure block around them. + if is_noise_line(trimmed) { + continue; + } + if is_summary_line(trimmed) { keeping_block = false; trailing_context = 0; @@ -105,7 +118,6 @@ fn is_summary_line(trimmed: &str) -> bool { || trimmed.starts_with("Tests:") || trimmed.starts_with("Snapshots:") || trimmed.starts_with("Time:") - || trimmed.starts_with("Ran all test suites") || trimmed.starts_with("Test Files") || trimmed.starts_with("Duration") || trimmed.starts_with("Start at") @@ -127,6 +139,13 @@ fn starts_count_summary(trimmed: &str) -> bool { matches!(parts.next(), Some("failed" | "passed" | "skipped" | "flaky" | "pass" | "fail")) } +/// Zero-information lines worth dropping regardless of pass/fail context. +/// Ported from snip/filters/jest.yaml's `remove_lines` strips: jest console.log +/// echoes (`^\s+console\.`) and the trailing `Ran all test suites.` banner. +fn is_noise_line(trimmed: &str) -> bool { + trimmed.starts_with("console.") || trimmed.starts_with("Ran all test suites") +} + fn is_pass_noise(trimmed: &str) -> bool { trimmed.starts_with("PASS ") || trimmed.starts_with("✓") @@ -184,7 +203,7 @@ fn is_playwright_numbered_failure(trimmed: &str) -> bool { saw_digit = true; continue; } - return saw_digit && ch == ')' && chars.next().is_some_and(|next| next.is_whitespace()); + return saw_digit && ch == ')' && chars.next().is_some_and(char::is_whitespace); } false } @@ -342,4 +361,85 @@ Time: 2.345s assert!(filtered.contains("Tests: 32 passed, 32 total")); assert!(filtered.contains("Time: 2.345s")); } + + // Ported from snip/filters/jest.yaml's "all passing" inline test. snip keeps + // PASS lines; the minimizer collapses pass runs to the count summary, which is + // strictly less noisy, so the expectation is adjusted to drop the PASS lines. + #[test] + fn jest_all_passing_collapses_to_summary() { + let input = "PASS src/__tests__/utils.test.js\nPASS src/__tests__/main.test.js\n\nTest \ + Suites: 2 passed, 2 total\nTests: 5 passed, 5 total\nSnapshots: 0 \ + total\nTime: 1.234 s\n"; + let filtered = drop_passed_lines(input); + + assert!(!filtered.contains("utils.test.js")); + assert!(!filtered.contains("main.test.js")); + assert!(filtered.contains("Test Suites: 2 passed, 2 total")); + assert!(filtered.contains("Tests: 5 passed, 5 total")); + assert!(filtered.contains("Time: 1.234 s")); + } + + // Ported from snip/filters/jest.yaml's "with failures and stack traces" inline + // test. snip strips the code frame and `at` stack lines; the minimizer keeps + // that richer failure context. The new strips fold in here: the trailing "Ran + // all test suites." banner is dropped and the PASS line collapses. + #[test] + fn jest_failures_drop_ran_banner_and_keep_rich_context() { + let input = + "PASS src/__tests__/utils.test.js\nFAIL src/__tests__/main.test.js\n ● Main > should \ + return correct value\n\n expect(received).toBe(expected)\n\n Expected: 4\n \ + Received: 3\n\n 5 | test('should return correct value', () => {\n 6 | \ + expect(calculate(2, 2)).toBe(4);\n | ^\n 7 | });\n\n at \ + Object. (src/__tests__/main.test.js:6:29)\n\nTest Suites: 1 failed, 1 \ + passed, 2 total\nTests: 1 failed, 3 passed, 4 total\nSnapshots: 0 total\nTime: \ + 1.234 s\nRan all test suites.\n"; + let filtered = failures_only(input); + + // PASS line collapses; failure context survives. + assert!(!filtered.contains("PASS src/__tests__/utils.test.js")); + assert!(filtered.contains("FAIL src/__tests__/main.test.js")); + assert!(filtered.contains("● Main > should return correct value")); + assert!(filtered.contains("Expected: 4")); + assert!(filtered.contains("Received: 3")); + assert!(filtered.contains("Test Suites: 1 failed, 1 passed, 2 total")); + // New snip strip: the zero-information banner is gone. + assert!(!filtered.contains("Ran all test suites")); + } + + // New jest console.log strip (snip jest.yaml `^\s+console\.`): echoed + // console output is dropped on both the pass and fail paths. + #[test] + fn jest_console_log_noise_is_dropped() { + let pass_input = "PASS src/a.test.ts\n console.log\n debugging value 42\n at \ + log.ts:3:9\n\nTests: 1 passed, 1 total\n"; + let pass_filtered = drop_passed_lines(pass_input); + assert!(!pass_filtered.contains("console.log")); + assert!(pass_filtered.contains("Tests: 1 passed, 1 total")); + + let fail_input = "FAIL src/a.test.ts\n ● breaks\n console.error\n noisy log \ + line\n Expected: 1\n Received: 2\n\nTests: 1 failed, 1 total\n"; + let fail_filtered = failures_only(fail_input); + assert!(!fail_filtered.contains("console.error")); + assert!(fail_filtered.contains("Expected: 1")); + assert!(fail_filtered.contains("Received: 2")); + assert!(fail_filtered.contains("Tests: 1 failed, 1 total")); + } + + // Vitest default-reporter regression (keep-minimizer; pure lock). A failing + // file's multi-line `AssertionError: expected X to be Y` block plus the + // `❯ file:line` pointer must survive failures_only. + #[test] + fn vitest_assertion_error_block_and_pointer_survive() { + let input = " ✓ src/passing.test.ts (3)\n ❯ src/math.test.ts (1)\n × adds numbers\n\n \ + AssertionError: expected 3 to be 4 // Object.is equality\n\n - Expected\n + \ + Received\n\n - 4\n + 3\n\n ❯ src/math.test.ts:7:23\n\n Test Files 1 failed \ + | 1 passed (2)\n Tests 1 failed | 1 passed (2)\n"; + let filtered = failures_only(input); + + assert!(!filtered.contains("src/passing.test.ts")); + assert!(filtered.contains("× adds numbers")); + assert!(filtered.contains("AssertionError: expected 3 to be 4")); + assert!(filtered.contains("❯ src/math.test.ts:7:23")); + assert!(filtered.contains("Test Files 1 failed | 1 passed (2)")); + } } diff --git a/crates/pi-shell/src/minimizer/filters/pkg.rs b/crates/pi-shell/src/minimizer/filters/pkg.rs index 2edd38453..386081175 100644 --- a/crates/pi-shell/src/minimizer/filters/pkg.rs +++ b/crates/pi-shell/src/minimizer/filters/pkg.rs @@ -5,6 +5,7 @@ use std::{collections::HashSet, fmt::Write as _}; use crate::minimizer::{MinimizerCtx, MinimizerOutput, primitives}; const PACKAGE_TREE_HEAD_LINES: usize = 80; +#[must_use] pub fn supports(subcommand: Option<&str>) -> bool { matches!( subcommand, @@ -39,9 +40,12 @@ pub fn supports(subcommand: Option<&str>) -> bool { ) } +#[must_use] pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerOutput { if exit_code == 0 && (command_contains_any(ctx.command, &["--json"]) + || primitives::command_has_any_token(ctx.command, &["--format=json"]) + || primitives::command_has_ordered_tokens(ctx.command, "--format", "json") || ctx.program == "uv" && matches!(ctx.subcommand, Some("pip")) && command_contains_any(ctx.command, &["freeze"])) @@ -50,6 +54,18 @@ pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerO } let cleaned = primitives::strip_ansi(input); + + // Success no-op short-circuits, moved here from defs/poetry-install.toml and + // defs/uv-sync.toml so they fire regardless of overlay ordering. Each is + // scoped per (program, subcommand) so unrelated package managers are + // untouched. A non-empty message means ensure_success_visible leaves it as-is + // (no bare 'OK' rewrite). + if exit_code == 0 + && let Some(message) = success_up_to_date_short_circuit(ctx, &cleaned) + { + return MinimizerOutput::transformed(message.to_string(), input.len()); + } + let text = if exit_code == 0 && is_package_lock_command(ctx) { compact_package_lock_output(ctx, &cleaned) } else { @@ -60,6 +76,8 @@ pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerO } else if exit_code == 0 && (is_package_tree_command(ctx) || is_package_export_command(ctx)) && !command_contains_any(ctx.command, &["--json"]) + && !primitives::command_has_any_token(ctx.command, &["--format=json"]) + && !primitives::command_has_ordered_tokens(ctx.command, "--format", "json") { compact_package_tree_output(&deduped) } else { @@ -79,9 +97,65 @@ pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerO } } +/// Per-(program, subcommand) success no-op detection. Returns the one-line +/// summary to emit when the raw output says nothing changed, replacing the +/// `match_output` overlays that previously lived in defs/poetry-install.toml +/// and defs/uv-sync.toml. Callers must gate on `exit_code` == 0. +fn success_up_to_date_short_circuit(ctx: &MinimizerCtx<'_>, cleaned: &str) -> Option<&'static str> { + // poetry install/lock/update no-op: 'No dependencies to install or update' + // (poetry 1.x) or 'No changes.' (poetry 2.x). Scoped to program=poetry. + if ctx.program == "poetry" + && matches!(ctx.subcommand, Some("install" | "lock" | "update")) + && cleaned.lines().any(|line| { + let lower = line.trim().to_ascii_lowercase(); + lower.starts_with("no dependencies to install or update") || lower == "no changes." + }) { + return Some("ok (up to date)"); + } + // uv sync/add/remove no-op: 'Audited N packages in Xms' with no installs. + // Scoped to those subcommands so npm/brew/composer 'Audited' is unaffected. + // Only collapse when the run is a CLEAN no-op: uv co-prints actionable + // diagnostics (e.g. 'warning: VIRTUAL_ENV=… does not match the project + // environment path …') alongside the Audited line on exit 0, and eagerly + // collapsing to 'ok (up to date)' would destroy them. On HEAD the global + // is_noise_line stripped the Audited line but the surviving warning kept the + // output non-empty, so it was reported; preserve that by short-circuiting only + // when no warning/error line co-occurs. (poetry's branch above deliberately + // collapses warnings too — its deleted overlay did the same, so it stays.) + if ctx.program == "uv" + && matches!(ctx.subcommand, Some("sync" | "add" | "remove")) + && !uv_has_actionable_diagnostic(cleaned) + && cleaned.lines().any(|line| { + let lower = line.trim().to_ascii_lowercase(); + lower.starts_with("audited ") && lower.contains("package") + }) { + return Some("ok (up to date)"); + } + None +} + +/// True when any line carries an actionable diagnostic ('warning'/'error'/ +/// 'failed') that must survive a uv no-op short-circuit. Kept deliberately +/// narrow: the no-op summary lines themselves ('Resolved …', 'Audited …') carry +/// none of these tokens, so a clean no-op still collapses to 'ok (up to date)'. +/// Do NOT reuse `is_error_or_summary` here — it also matches 'audited'/'found'/ +/// 'success'/'complete', which would suppress the short-circuit on every no-op. +fn uv_has_actionable_diagnostic(cleaned: &str) -> bool { + cleaned.lines().any(|line| { + let lower = line.to_ascii_lowercase(); + lower.contains("warning") || lower.contains("error") || lower.contains("failed") + }) +} + fn strip_package_noise(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> String { let mut out = String::new(); let mut previous_blank = false; + // snip keeps exactly one JS install-summary line ('added N packages…', + // 'up to date', pnpm 'Done in Xs'/'Packages: +N', yarn 'Done in Xs'): the + // count confirms lockfile/node_modules state. Keep the first such line and + // treat later duplicates as noise. This check precedes is_noise_line so the + // 'audited N packages' strip cannot eat the combined 'added…audited' summary. + let mut kept_install_summary = false; for line in input.lines() { let trimmed = line.trim(); if trimmed.is_empty() { @@ -93,6 +167,16 @@ fn strip_package_noise(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> S } previous_blank = false; + if is_js_program(ctx.program) && is_js_install_summary(&trimmed.to_ascii_lowercase()) { + if kept_install_summary { + continue; + } + kept_install_summary = true; + out.push_str(line.trim_end()); + out.push('\n'); + continue; + } + if is_noise_line(ctx, trimmed, exit_code) { continue; } @@ -117,6 +201,11 @@ fn is_package_tree_command(ctx: &MinimizerCtx<'_>) -> bool { || matches!(ctx.subcommand, Some("pip")) && command_contains_any(ctx.command, &["list", "ls", "tree"]) }, + // Default tabular `pip list` / `pip list --outdated` are inventory dumps + // like `uv pip list`; give them the same tree/list compaction. `--json` + // already passes through earlier in filter(), so only text output lands. + // `pip3` is not normalized to `pip`, so claim both spellings. + "pip" | "pip3" => matches!(ctx.subcommand, Some("list")), "poetry" => { matches!(ctx.subcommand, Some("tree")) || matches!(ctx.subcommand, Some("show")) @@ -287,7 +376,16 @@ fn is_noise_line(ctx: &MinimizerCtx<'_>, line: &str, exit_code: i32) -> bool { if lower.contains("found 0 vulnerabilities") { return true; } - // Strip: "audited X packages" timing summaries (non-actionable) + // Strip: npm funding nags ("N packages are looking for funding" / "run `npm + // fund` for details"). snip drops both; removing 'funding' from + // is_audit_or_security_summary keeps real audit findings protected. + if lower.contains("looking for funding") || lower.contains("npm fund") { + return true; + } + // Strip: "audited X packages" timing summaries (non-actionable). This global + // rule still governs npm/brew/composer. uv sync/add/remove never reach here + // for an 'Audited' no-op — success_up_to_date_short_circuit() in filter() + // consumes that line into 'ok (up to date)' on the raw output first. if lower.contains("audited") && lower.contains("package") { return true; } @@ -304,7 +402,7 @@ fn is_noise_line(ctx: &MinimizerCtx<'_>, line: &str, exit_code: i32) -> bool { } is_generic_progress(line, &lower) || is_js_package_noise(ctx.program, line, &lower) - || is_python_package_noise(ctx.program, line, &lower) + || is_python_package_noise(ctx, line, &lower) || is_ruby_php_brew_noise(ctx.program, line, &lower) } @@ -322,7 +420,7 @@ fn compact_package_lock_output(ctx: &MinimizerCtx<'_>, input: &str) -> String { continue; } if is_generic_progress(trimmed, &lower) - || is_python_package_noise(ctx.program, trimmed, &lower) + || is_python_package_noise(ctx, trimmed, &lower) || is_js_package_noise(ctx.program, trimmed, &lower) { continue; @@ -360,14 +458,65 @@ fn is_generic_progress(line: &str, lower: &str) -> bool { .all(|ch| matches!(ch, '⠁' | '⠂' | '⠄' | '⡀' | '⢀' | '⠠' | '⠐' | '⠈' | ' ')) } +fn is_js_program(program: &str) -> bool { + matches!(program, "npm" | "pnpm" | "yarn" | "bun") +} + +/// JS package-manager success-summary lines worth keeping exactly once. snip +/// retains these so the count confirms `lockfile/node_modules` state. Callers +/// must gate on `is_js_program` first. +fn is_js_install_summary(lower: &str) -> bool { + lower.starts_with("added ") && lower.contains("package") + || lower.starts_with("removed ") && lower.contains("package") + || lower.starts_with("changed ") && lower.contains("package") + || lower.starts_with("up to date") + || lower.contains("already up-to-date") + || lower.starts_with("done in ") + || lower.starts_with("packages:") + || lower.starts_with("dependencies:") +} + +/// Classic yarn step markers: `[N/4] Resolving|Fetching|Linking|Building …`. +fn is_yarn_step_marker(line: &str) -> bool { + let Some(rest) = line.strip_prefix('[') else { + return false; + }; + let Some((counter, tail)) = rest.split_once(']') else { + return false; + }; + let Some((num, denom)) = counter.split_once('/') else { + return false; + }; + if num.is_empty() + || denom.is_empty() + || !num.bytes().all(|b| b.is_ascii_digit()) + || !denom.bytes().all(|b| b.is_ascii_digit()) + { + return false; + } + let step = tail.trim_start(); + step.starts_with("Resolving") + || step.starts_with("Fetching") + || step.starts_with("Linking") + || step.starts_with("Building") +} + fn is_js_package_noise(program: &str, line: &str, lower: &str) -> bool { - if !matches!(program, "npm" | "pnpm" | "yarn" | "bun") { + if !is_js_program(program) { return false; } line.starts_with('>') && line.contains('@') || lower.starts_with("npm notice") || lower.starts_with("npm http fetch") || lower.starts_with("pnpm: progress") + // pnpm progress bars are runs of plus signs; anchor on 3+ so a bare '+' + // diff line (a real change) still passes through. + || line.starts_with("+++") + // yarn classic step markers and berry's structural YN0000 info lines + // (box-drawing, section headers). Actionable codes (YN0002 peer warnings, + // YN0060 incompatibilities) carry other YNxxxx codes and are kept. + || is_yarn_step_marker(line) + || lower.contains("yn0000") || lower.starts_with("packages:") || lower.starts_with("resolved ") || lower.starts_with("reused ") @@ -377,8 +526,9 @@ fn is_js_package_noise(program: &str, line: &str, lower: &str) -> bool { || lower.contains("up to date") } -fn is_python_package_noise(program: &str, _line: &str, lower: &str) -> bool { - if !matches!(program, "pip" | "uv" | "poetry") { +fn is_python_package_noise(ctx: &MinimizerCtx<'_>, _line: &str, lower: &str) -> bool { + let program = ctx.program; + if !matches!(program, "pip" | "pip3" | "uv" | "poetry") { return false; } lower.starts_with("collecting ") @@ -389,10 +539,44 @@ fn is_python_package_noise(program: &str, _line: &str, lower: &str) -> bool { || lower.starts_with("resolving dependencies") || lower.starts_with("writing lock file") || lower.starts_with("package operations:") - || program == "uv" && is_uv_progress_noise(lower) + // pip prints an upgrade nag as '[notice] A new release of pip is + // available' plus a '[notice] To update, run: …' follow-up — non-actionable + // for the wrapped command. Scoped to pip/uv/poetry by the gate above. + || lower.starts_with("[notice]") + || program == "uv" && is_uv_progress_noise(lower, uv_keeps_install_summary(ctx)) + || program == "poetry" && is_poetry_bullet_progress(lower) } -fn is_uv_progress_noise(lower: &str) -> bool { +/// poetry prefixes per-package progress with a `- ` or `• ` bullet, e.g. +/// ` - Downloading requests-2.31.0…` / ` • Installing certifi (2023.11.17)`, +/// plus virtualenv-setup chatter. These are the `strip_lines` that previously +/// lived in defs/poetry-install.toml; the bullet prefix means the bare +/// `downloading `/`installing ` checks above never reached them. `lower` is the +/// already-trimmed, lowercased line. +fn is_poetry_bullet_progress(lower: &str) -> bool { + let bullet = lower + .strip_prefix("- ") + .or_else(|| lower.strip_prefix("• ")); + if let Some(rest) = bullet + && (rest.starts_with("downloading ") || rest.starts_with("installing ") && rest.contains('(')) + { + return true; + } + lower.starts_with("creating virtualenv") || lower.starts_with("using virtualenv") +} + +/// uv sync/add/remove keep the one-line 'Installed/Uninstalled N packages in +/// Xms' summary alongside the +/- delta rows (the count is the install signal). +/// uv lock/tree and every other subcommand still strip those rows as progress. +fn uv_keeps_install_summary(ctx: &MinimizerCtx<'_>) -> bool { + ctx.program == "uv" && matches!(ctx.subcommand, Some("sync" | "add" | "remove")) +} + +fn is_uv_progress_noise(lower: &str, keep_install_summary: bool) -> bool { + if keep_install_summary && (lower.starts_with("installed ") || lower.starts_with("uninstalled ")) + { + return false; + } lower.starts_with("resolved ") || lower.starts_with("prepared ") || lower.starts_with("installed ") @@ -406,9 +590,23 @@ fn is_ruby_php_brew_noise(program: &str, _line: &str, lower: &str) -> bool { if !matches!(program, "bundle" | "brew" | "composer") { return false; } + if program == "bundle" { + // Keep 'Bundle complete! … N gems now installed' / 'Bundle updated!' — the + // one-line gem-count signal (replaces the defs/bundle-install.toml + // short-circuit). Strip the 'Use `bundle info [gemname]`…' follow-up hint. + // Using/Fetching/Installing rows are still per-gem progress noise. + if lower.starts_with("bundle complete") || lower.starts_with("bundle updated") { + return false; + } + if lower.starts_with("use `bundle info") { + return true; + } + } lower.starts_with("fetching ") || lower.starts_with("installing ") && !lower.contains("error") || lower.starts_with("using ") + // brew/composer never emit 'Bundle complete'; this strip is preserved for + // them but bundle now keeps the line (handled above). || lower.starts_with("bundle complete") || lower.starts_with("==> downloading") || lower.starts_with("==> pouring") @@ -422,11 +620,13 @@ fn contains_audit_or_security_summary(input: &str) -> bool { fn is_audit_or_security_summary(line: &str) -> bool { let lower = line.to_ascii_lowercase(); + // 'funding' deliberately excluded: funding nags are stripped as noise and + // must NOT bypass head_tail_cap. Real audit findings ('audit'/'vulnerab'/ + // 'security') still trip the bypass. lower.contains("audit") || lower.contains("audited") || lower.contains("vulnerab") || lower.contains("security") - || lower.contains("funding") } fn is_error_or_summary(line: &str) -> bool { @@ -460,14 +660,19 @@ mod tests { } #[test] - fn strips_success_noise_audited_and_zero_vulnerabilities() { + fn keeps_one_success_summary_strips_funding_and_zero_vulnerabilities() { + // snip keeps the install summary (the count confirms node_modules state) + // while dropping progress, funding nags, and 'found 0 vulnerabilities'. let cfg = MinimizerConfig { enabled: true, ..Default::default() }; let ctx = ctx("npm", Some("install"), "npm install", &cfg); let input = "Resolving: total 10\nadded 3 packages, and audited 4 packages in 1s\n2 \ - packages are looking for funding\nfound 0 vulnerabilities\n"; + packages are looking for funding\n run `npm fund` for details\nfound 0 \ + vulnerabilities\n"; let out = strip_package_noise(&ctx, input, 0); assert!(!out.contains("Resolving:")); - assert!(!out.contains("audited 4 packages")); + assert!(out.contains("added 3 packages, and audited 4 packages in 1s")); + assert!(!out.contains("looking for funding")); + assert!(!out.contains("npm fund")); assert!(!out.contains("found 0 vulnerabilities")); } @@ -504,6 +709,67 @@ mod tests { assert!(out.contains("error: failed")); } + #[test] + fn npm_ci_keeps_one_added_summary_and_strips_funding() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let context = ctx("npm", Some("ci"), "npm ci", &cfg); + let input = "npm warn deprecated glob@7.2.3: no longer supported\nadded 245 packages, and \ + audited 246 packages in 12s\n\n29 packages are looking for funding\n run `npm \ + fund` for details\n\nfound 0 vulnerabilities\n"; + let out = filter(&context, input, 0); + assert!( + out.text + .contains("added 245 packages, and audited 246 packages in 12s") + ); + assert_eq!(out.text.matches("added 245 packages").count(), 1); + assert!(!out.text.contains("looking for funding")); + assert!(!out.text.contains("npm fund")); + assert!(!out.text.contains("found 0 vulnerabilities")); + } + + #[test] + fn npm_audit_surfaces_real_vulnerabilities() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let context = ctx("npm", Some("install"), "npm install", &cfg); + let input = "added 10 packages, and audited 11 packages in 2s\n3 packages are looking for \ + funding\n run `npm fund` for details\n\n2 vulnerabilities (1 moderate, 1 \ + high)\n\nTo address all issues, run:\n npm audit fix\n\nfound 2 \ + vulnerabilities\n"; + let out = filter(&context, input, 0); + assert!(out.text.contains("2 vulnerabilities (1 moderate, 1 high)")); + assert!(out.text.contains("found 2 vulnerabilities")); + assert!(out.text.contains("npm audit fix")); + assert!(!out.text.contains("looking for funding")); + } + + #[test] + fn pnpm_install_strips_plus_bars_keeps_packages_summary() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let context = ctx("pnpm", Some("install"), "pnpm install", &cfg); + let input = "Progress: resolved 120, reused 120, downloaded 0, added \ + 0\n+++++++++++++++++\nPackages: +183\n+ left-pad 1.3.0\nDone in 4.2s\n"; + let out = filter(&context, input, 0); + assert!(!out.text.contains("+++")); + assert!(out.text.contains("Packages: +183")); + // A bare '+' diff line (a real change) survives the 3+ plus anchor. + assert!(out.text.contains("+ left-pad 1.3.0")); + } + + #[test] + fn yarn_berry_keeps_actionable_codes_strips_yn0000() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let context = ctx("yarn", Some("install"), "yarn install", &cfg); + let input = "➤ YN0000: ┌ Resolution step\n➤ YN0002: │ react is listed by your project but \ + missing peer dependency\n➤ YN0060: │ incompatible peer dependency\n➤ YN0000: └ \ + Completed\n[2/4] Fetching packages...\nDone in 5.31s\n"; + let out = filter(&context, input, 0); + assert!(out.text.contains("YN0002")); + assert!(out.text.contains("YN0060")); + assert!(!out.text.contains("YN0000")); + assert!(!out.text.contains("[2/4] Fetching")); + assert!(out.text.contains("Done in 5.31s")); + } + fn ctx<'a>( program: &'a str, subcommand: Option<&'a str>, @@ -519,7 +785,7 @@ mod tests { let context = ctx("npm", Some("list"), "npm list --all", &cfg); let mut input = String::from("app@1.0.0\n"); for idx in 0..90 { - input.push_str(&format!("├── dep{idx:03}@1.0.0\n")); + let _ = writeln!(input, "├── dep{idx:03}@1.0.0"); } let out = filter(&context, &input, 0); @@ -536,7 +802,7 @@ mod tests { let context = ctx("npm", Some("ls"), "npm ls --depth=0", &cfg); let mut input = String::from("app@1.0.0\n"); for idx in 0..90 { - input.push_str(&format!("├── dep{idx:03}@1.0.0\n")); + let _ = writeln!(input, "├── dep{idx:03}@1.0.0"); } let out = filter(&context, &input, 0); @@ -552,7 +818,7 @@ mod tests { let mut input = String::from("Legend: production dependency, optional only, dev only\nreact 19.0.0\n"); for idx in 0..90 { - input.push_str(&format!("└─ dependent{idx:03}\n")); + let _ = writeln!(input, "└─ dependent{idx:03}"); } let out = filter(&context, &input, 0); @@ -612,7 +878,7 @@ mod tests { "Resolved 91 packages in 12ms\nPrepared 2 packages in 3ms\nPackage Version\n", ); for idx in 0..90 { - input.push_str(&format!("pkg{idx:03} 1.0.{idx}\n")); + let _ = writeln!(input, "pkg{idx:03} 1.0.{idx}"); } let out = filter(&context, &input, 0); @@ -632,7 +898,7 @@ mod tests { let context = ctx("uv", Some("tree"), "uv tree", &cfg); let mut input = String::from("project v1.0.0\n"); for idx in 0..90 { - input.push_str(&format!("├── pkg{idx:03} v1.0.{idx}\n")); + let _ = writeln!(input, "├── pkg{idx:03} v1.0.{idx}"); } let out = filter(&context, &input, 0); @@ -648,7 +914,7 @@ mod tests { let context = ctx("poetry", Some("show"), "poetry show --tree", &cfg); let mut input = String::from("requests 2.32.0 Python HTTP for Humans.\n"); for idx in 0..90 { - input.push_str(&format!("├── dep{idx:03} 1.0.{idx}\n")); + let _ = writeln!(input, "├── dep{idx:03} 1.0.{idx}"); } let out = filter(&context, &input, 0); @@ -663,7 +929,7 @@ mod tests { let context = ctx("uv", Some("pip"), "uv pip freeze", &cfg); let mut input = String::new(); for idx in 0..90 { - input.push_str(&format!("pkg{idx:03}==1.0.{idx}\n")); + let _ = writeln!(input, "pkg{idx:03}==1.0.{idx}"); } let out = filter(&context, &input, 0); @@ -679,7 +945,7 @@ mod tests { let context = ctx("uv", Some("export"), "uv export -f requirements-txt", &cfg); let mut input = String::from("# generated by uv\n"); for idx in 0..90 { - input.push_str(&format!("pkg{idx:03}==1.0.{idx}\n")); + let _ = writeln!(input, "pkg{idx:03}==1.0.{idx}"); } let out = filter(&context, &input, 0); @@ -694,7 +960,7 @@ mod tests { let context = ctx("poetry", Some("export"), "poetry export -f requirements.txt", &cfg); let mut input = String::from("# generated by poetry\n"); for idx in 0..90 { - input.push_str(&format!("dep{idx:03}==2.0.{idx}\n")); + let _ = writeln!(input, "dep{idx:03}==2.0.{idx}"); } let out = filter(&context, &input, 0); @@ -703,6 +969,36 @@ mod tests { assert!(out.text.contains("… 11 package entries omitted …")); } + #[test] + fn pip_install_strips_upgrade_notice_nag() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let context = ctx("pip", Some("install"), "pip install requests", &cfg); + let input = "Collecting requests\n Downloading requests-2.31.0-py3-none-any.whl (62 \ + kB)\nInstalling collected packages: requests\nSuccessfully installed \ + requests-2.31.0\n[notice] A new release of pip is available: 23.0 -> \ + 24.0\n[notice] To update, run: pip install --upgrade pip\n"; + let out = filter(&context, input, 0); + assert!(out.text.contains("Successfully installed requests-2.31.0")); + assert!(!out.text.contains("[notice]")); + assert!(!out.text.contains("new release of pip")); + assert!(!out.text.contains("Downloading requests")); + } + + #[test] + fn compacts_pip_list_output() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let context = ctx("pip", Some("list"), "pip list", &cfg); + let mut input = String::from("Package Version\n---------- -------\n"); + for idx in 0..90 { + let _ = writeln!(input, "pkg{idx:03} 1.0.{idx}"); + } + + let out = filter(&context, &input, 0); + assert!(out.text.starts_with("package tree/list: 92 entries\n")); + assert!(out.text.contains("pkg000")); + assert!(out.text.contains("… 12 package entries omitted …")); + } + #[test] fn compacts_uv_lock_output() { let cfg = MinimizerConfig { enabled: true, ..Default::default() }; @@ -725,4 +1021,195 @@ mod tests { assert!(out.text.contains("Installing dependencies from lock file")); assert!(out.text.contains("Writing lock file")); } + + #[test] + fn poetry_install_no_changes_short_circuits_to_up_to_date() { + // Carried over from defs/poetry-install.toml's match_output overlay; now + // lives in pkg.rs so it fires regardless of overlay ordering. poetry 1.x + // prints 'No dependencies to install or update'. + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let context = ctx("poetry", Some("install"), "poetry install", &cfg); + let input = + "Installing dependencies from lock file\n\nNo dependencies to install or update\n"; + let out = filter(&context, input, 0); + assert_eq!(out.text, "ok (up to date)"); + assert!(out.changed); + } + + #[test] + fn poetry_update_no_changes_bullet_short_circuits() { + // poetry 2.x prints 'No changes.' after bullet rows; still a no-op. + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let context = ctx("poetry", Some("update"), "poetry update", &cfg); + let input = + "• Installing requests (2.31.0)\n• Installing certifi (2023.11.17)\n\nNo changes.\n"; + let out = filter(&context, input, 0); + assert_eq!(out.text, "ok (up to date)"); + } + + #[test] + fn poetry_lock_no_changes_short_circuits() { + // The short-circuit covers lock too (the deleted def matched + // install|lock|update). + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let context = ctx("poetry", Some("lock"), "poetry lock", &cfg); + let input = "Resolving dependencies...\nNo changes.\n"; + let out = filter(&context, input, 0); + assert_eq!(out.text, "ok (up to date)"); + } + + #[test] + fn poetry_install_with_real_work_is_not_short_circuited() { + // A genuine install (no 'No changes'/'No dependencies…' no-op marker) must + // NOT collapse to 'ok (up to date)'. An actionable warning survives the + // progress strip and proves the short-circuit did not fire. + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let context = ctx("poetry", Some("install"), "poetry install", &cfg); + let input = "Installing dependencies from lock file\n\n - Downloading \ + requests-2.31.0-py3-none-any.whl (62.6 kB)\nWarning: the lock file is not up \ + to date\n"; + let out = filter(&context, input, 0); + assert_ne!(out.text, "ok (up to date)"); + assert!( + out.text + .contains("Warning: the lock file is not up to date") + ); + assert!(!out.text.contains("Downloading")); + } + + #[test] + fn uv_sync_audited_no_op_short_circuits_to_up_to_date() { + // Replaces defs/uv-sync.toml's 'Audited' overlay; lands as 'ok (up to + // date)' (not bare 'OK'). Scoped to uv sync/add/remove. + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let context = ctx("uv", Some("sync"), "uv sync", &cfg); + let input = "Resolved 42 packages in 123ms\nAudited 42 packages in 0.05ms\n"; + let out = filter(&context, input, 0); + assert_eq!(out.text, "ok (up to date)"); + } + + #[test] + fn uv_sync_audited_no_op_with_warning_keeps_warning() { + // Regression: the 'Audited' no-op short-circuit must NOT swallow a + // co-printed actionable diagnostic. uv on exit 0 can print + // 'warning: VIRTUAL_ENV=… does not match the project environment path …' + // before the Resolved/Audited summary; collapsing to 'ok (up to date)' + // would hide that the sync may have targeted the wrong environment. On HEAD + // the global is_noise_line stripped 'Audited' but the surviving warning + // kept the output, so it was reported — preserve that. + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let context = ctx("uv", Some("sync"), "uv sync", &cfg); + let input = "warning: VIRTUAL_ENV=.venv does not match the project environment path \ + .venv-other\nResolved 42 packages in 123ms\nAudited 42 packages in 0.05ms\n"; + let out = filter(&context, input, 0); + assert_ne!(out.text, "ok (up to date)"); + assert!( + out.text + .contains("warning: VIRTUAL_ENV=.venv does not match the project environment path") + ); + assert!(!out.text.contains("Audited 42 packages")); + } + + #[test] + fn uv_sync_keeps_installed_summary_and_delta_rows() { + // uv sync/add/remove keep the one-line 'Installed N packages' summary + // alongside the +/- delta rows; Resolved/Prepared progress is stripped. + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let context = ctx("uv", Some("sync"), "uv sync", &cfg); + let input = "Resolved 5 packages in 12ms\nPrepared 5 packages in 100ms\nInstalled 5 \ + packages in 23ms\n + certifi==2023.11.17\n + idna==3.6\n + requests==2.31.0\n"; + let out = filter(&context, input, 0); + assert!(out.text.contains("Installed 5 packages in 23ms")); + assert!(out.text.contains("+ certifi==2023.11.17")); + assert!(out.text.contains("+ requests==2.31.0")); + assert!(!out.text.contains("Resolved 5 packages")); + assert!(!out.text.contains("Prepared 5 packages")); + } + + #[test] + fn uv_add_keeps_installed_summary() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let context = ctx("uv", Some("add"), "uv add requests", &cfg); + let input = "Resolved 5 packages in 9ms\nInstalled 1 package in 4ms\n + requests==2.31.0\n"; + let out = filter(&context, input, 0); + assert!(out.text.contains("Installed 1 package in 4ms")); + assert!(out.text.contains("+ requests==2.31.0")); + assert!(!out.text.contains("Resolved 5 packages")); + } + + #[test] + fn uv_remove_keeps_uninstalled_summary() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let context = ctx("uv", Some("remove"), "uv remove requests", &cfg); + let input = "Resolved 4 packages in 6ms\nUninstalled 1 package in 2ms\n - requests==2.31.0\n"; + let out = filter(&context, input, 0); + assert!(out.text.contains("Uninstalled 1 package in 2ms")); + assert!(out.text.contains("- requests==2.31.0")); + assert!(!out.text.contains("Resolved 4 packages")); + } + + #[test] + fn bundle_install_keeps_complete_line_strips_info_hint() { + // Replaces defs/bundle-install.toml; keep the 'Bundle complete!' gem-count + // signal, strip Using/Fetching/Installing rows and the 'Use `bundle info`' + // hint. Scoped to program=bundle. + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let context = ctx("bundle", Some("install"), "bundle install", &cfg); + let input = "Fetching gem metadata from https://rubygems.org/.........\nResolving \ + dependencies...\nUsing rake 13.1.0\nFetching rspec 3.13.0\nInstalling rspec \ + 3.13.0\nBundle complete! 85 Gemfile dependencies, 200 gems now installed.\nUse \ + `bundle info [gemname]` to see where a bundled gem is installed.\n"; + let out = filter(&context, input, 0); + assert!( + out.text + .contains("Bundle complete! 85 Gemfile dependencies, 200 gems now installed.") + ); + assert!(!out.text.contains("Use `bundle info")); + assert!(!out.text.contains("Using rake")); + assert!(!out.text.contains("Installing rspec")); + assert!(!out.text.contains("Fetching")); + } + + #[test] + fn bundle_update_keeps_updated_line() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let context = ctx("bundle", Some("update"), "bundle update", &cfg); + let input = "Fetching gem metadata from https://rubygems.org/.........\nResolving \ + dependencies...\nUsing rake 13.1.0\nFetching rspec 3.14.0 (was \ + 3.13.0)\nInstalling rspec 3.14.0 (was 3.13.0)\nBundle updated!\n"; + let out = filter(&context, input, 0); + assert!(out.text.contains("Bundle updated!")); + assert!(!out.text.contains("Using rake")); + assert!(!out.text.contains("Installing rspec")); + } + + #[test] + fn brew_install_still_strips_pour_and_download_noise() { + // Concern 4 scoping guard: brew is unaffected by the bundle-only keep. + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let context = ctx("brew", Some("install"), "brew install jq", &cfg); + let input = + "==> Downloading https://example.com/jq.tar.gz\n==> Pouring jq--1.7.bottle.tar.gz\n"; + let out = filter(&context, input, 0); + assert!(!out.text.contains("==> Downloading")); + assert!(!out.text.contains("==> Pouring")); + } + + #[test] + fn test_pip_list_format_json_passthrough() { + let input = r#"[{"name":"pip","version":"23.0"},{"name":"requests","version":"2.28.0"}]"#; + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + + // --format=json form: output must be byte-identical to input (no JSON rewrite) + let context = ctx("pip", Some("list"), "pip list --format=json", &cfg); + let out = filter(&context, input, 0); + assert!(!out.changed, "pip list --format=json must not be modified"); + assert_eq!(out.text, input, "pip list --format=json must pass through as JSON"); + + // --format json form (two separate tokens): same contract + let context2 = ctx("pip", Some("list"), "pip list --format json", &cfg); + let out2 = filter(&context2, input, 0); + assert!(!out2.changed, "pip list --format json must not be modified"); + assert_eq!(out2.text, input, "pip list --format json must pass through as JSON"); + } } diff --git a/crates/pi-shell/src/minimizer/filters/python.rs b/crates/pi-shell/src/minimizer/filters/python.rs index 7849a9082..943875a66 100644 --- a/crates/pi-shell/src/minimizer/filters/python.rs +++ b/crates/pi-shell/src/minimizer/filters/python.rs @@ -16,6 +16,24 @@ use super::lint; use crate::minimizer::{MinimizerCtx, MinimizerOutput, primitives}; +/// Cap on rendered verbose failure blocks (the `___ test ___` traceback +/// sections). Mirrors RTK's `MAX_PYTEST_FAILURES` (== `CAP_WARNINGS` == 10), +/// re-derived for the minimizer's streaming, line-based renderer: once this +/// many traceback blocks have been emitted, further blocks are suppressed and +/// a single `+N more failures` overflow marker stands in for the remainder. +/// The compact `FAILED …` short-summary one-liners are NOT capped here — they +/// name every failed test cheaply and stay intact. +/// +/// The `=== ERRORS ===` section (collection / fixture-setup errors) is capped +/// by a SEPARATE counter (see `filter_pytest`): pytest renders ERRORS *before* +/// FAILURES, and those banners (`___ ERROR collecting … ___`) contain the +/// substring `test` via their path, so a single shared counter would let a +/// burst of low-value collection banners exhaust the budget and evict the +/// real assertion tracebacks that follow. Two counters keep each section's +/// overflow independent. +const MAX_PYTEST_FAILURES: usize = 10; + +#[must_use] pub fn supports(program: &str, subcommand: Option<&str>) -> bool { matches!(program, "pytest" | "ruff" | "mypy") || matches!( @@ -24,6 +42,7 @@ pub fn supports(program: &str, subcommand: Option<&str>) -> bool { ) } +#[must_use] pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerOutput { // Kill-switch parity (M2): when `legacy_filters_active`, fall back to // the pre-PR passthrough so callers can rollback an RTK-port regression @@ -66,23 +85,70 @@ fn filter_pytest(input: &str, exit_code: i32) -> String { let mut out = String::new(); let mut in_failure = false; + // Verbose traceback blocks seen so far, counted SEPARATELY per pytest + // section. `=== ERRORS ===` (collection / fixture-setup) banners render + // before `=== FAILURES ===`, so a shared counter would let collection + // noise exhaust the budget and evict real assertion tracebacks; two + // counters give each section an independent cap + overflow marker. + let mut failure_blocks = 0usize; + let mut error_blocks = 0usize; + let mut suppressing = false; for line in input.lines() { let trimmed = line.trim(); if is_pytest_summary_header(trimmed) { in_failure = false; + suppressing = false; push_line(&mut out, line); continue; } if is_pytest_summary_line(trimmed) { in_failure = false; + suppressing = false; push_pytest_summary_line(&mut out, trimmed); continue; } + // XFAIL/XPASS short-summary report lines (emitted under `-r` flags) + // must survive verbatim: XPASS in particular signals a behavior change + // (something expected-to-fail now passes). Handled before the + // in_failure block so the verbose-pass-noise filter can't eat them. + if trimmed.starts_with("XFAIL ") || trimmed.starts_with("XPASS ") { + in_failure = false; + suppressing = false; + push_line(&mut out, line); + continue; + } + + // `=== ERRORS ===` banners (`___ ERROR collecting … ___`, + // `___ ERROR at setup of … ___`) are checked FIRST and counted under + // their own cap. They precede the FAILURES section, so counting them + // here keeps the failure budget reserved for real assertion blocks. + let is_error_banner = is_pytest_error_banner(trimmed); + if is_error_banner || is_pytest_failure_header(trimmed) { + in_failure = true; + // The overflow count for each kind is rendered once after the loop. + if is_error_banner { + error_blocks += 1; + suppressing = error_blocks > MAX_PYTEST_FAILURES; + } else { + failure_blocks += 1; + suppressing = failure_blocks > MAX_PYTEST_FAILURES; + } + if !suppressing { + push_line(&mut out, line); + } + continue; + } if starts_pytest_failure(trimmed) { in_failure = true; - push_line(&mut out, line); + // While a capped traceback block is being suppressed, its `E ` / + // `ERROR at ` continuation lines belong to that block and are + // dropped too. (`FAILED ` short-summary lines only appear after the + // summary header has cleared `suppressing`, so they stay.) + if !suppressing { + push_line(&mut out, line); + } continue; } @@ -91,7 +157,7 @@ fn filter_pytest(input: &str, exit_code: i32) -> String { in_failure = false; continue; } - if !is_pytest_pass_noise(trimmed) { + if !suppressing && !is_pytest_pass_noise(trimmed) { push_line(&mut out, line); } continue; @@ -102,6 +168,21 @@ fn filter_pytest(input: &str, exit_code: i32) -> String { } } + // Errors render before failures in pytest; mirror that order for the + // overflow markers so the compact output reads top-to-bottom. + let error_overflow = error_blocks.saturating_sub(MAX_PYTEST_FAILURES); + if error_overflow > 0 { + out.push_str("… +"); + out.push_str(&error_overflow.to_string()); + out.push_str(" more errors\n"); + } + let overflow = failure_blocks.saturating_sub(MAX_PYTEST_FAILURES); + if overflow > 0 { + out.push_str("… +"); + out.push_str(&overflow.to_string()); + out.push_str(" more failures\n"); + } + if has_content(&out) { out } else { @@ -141,12 +222,35 @@ fn pytest_success(input: &str) -> String { } fn starts_pytest_failure(trimmed: &str) -> bool { - (trimmed.starts_with('_') && trimmed.ends_with('_') && trimmed.contains("test")) + is_pytest_failure_header(trimmed) || trimmed.starts_with("E ") || trimmed.starts_with("ERROR at ") || trimmed.starts_with("FAILED ") } +/// A `___ test ___`-style banner that opens one verbose traceback block in the +/// `=== FAILURES ===` section. These are the units capped by +/// `MAX_PYTEST_FAILURES`; the `E `/`FAILED `/`ERROR at ` forms are +/// continuation or short-summary lines, not block boundaries. +fn is_pytest_failure_header(trimmed: &str) -> bool { + trimmed.starts_with('_') && trimmed.ends_with('_') && trimmed.contains("test") +} + +/// A `___ ERROR … ___` banner that opens an `=== ERRORS ===`-section block: +/// `___ ERROR collecting ___` (import/collection failure) and +/// `___ ERROR at setup of ___` / `___ ERROR at teardown of ___` +/// (fixture errors). These render BEFORE the FAILURES section and their inner +/// text contains the substring `test` via the path/test name, so without this +/// distinction they would count against `MAX_PYTEST_FAILURES` and crowd out +/// the real assertion tracebacks. They are capped by their own counter +/// instead. +fn is_pytest_error_banner(trimmed: &str) -> bool { + if !(trimmed.starts_with('_') && trimmed.ends_with('_')) { + return false; + } + trimmed.trim_matches('_').trim().starts_with("ERROR ") +} + fn is_pytest_summary_header(trimmed: &str) -> bool { trimmed.contains("short test summary info") || trimmed.contains("warnings summary") } @@ -227,6 +331,14 @@ fn is_pytest_verbose_pass_line(trimmed: &str) -> bool { if !trimmed.contains("::") { return false; } + // `XFAIL …`/`XPASS …` short-summary report lines lead with the status + // token (e.g. `XFAIL test.py::case - reason`) and must NOT be treated as + // pass-noise — XPASS signals a behavior change. Verbose per-test rows carry + // the status token in a trailing column (`test.py::case XFAIL [100%]`), so + // keying on the leading token cleanly separates the two. + if trimmed.starts_with("XFAIL ") || trimmed.starts_with("XPASS ") { + return false; + } let mut parts = trimmed.split_whitespace(); parts.any(|part| matches!(part, "PASSED" | "SKIPPED" | "XPASS" | "XFAIL")) } @@ -299,6 +411,8 @@ fn has_content(text: &str) -> bool { #[cfg(test)] mod tests { + use std::fmt::Write as _; + use super::*; use crate::minimizer::MinimizerConfig; @@ -427,4 +541,177 @@ mod tests { assert!(out.text.contains("3 files left unchanged")); assert!(!out.text.contains("diagnostics")); } + + #[test] + fn pytest_caps_failure_blocks_with_overflow_marker() { + // Default (non -q) failing output with 12 verbose traceback blocks. + let mut input = String::from( + "============================= test session starts \ + =============================\ncollected 12 items\n\ntests/test_many.py \ + FFFFFFFFFFFF [100%]\n\n\ + =================================== FAILURES \ + ===================================\n", + ); + for i in 0..12 { + let _ = write!( + input, + "____________________________ test_case_{i} ____________________________\n\n def \ + test_case_{i}():\n> assert False\nE assert \ + False\n\ntests/test_many.py:{}: AssertionError\n", + i + 1 + ); + } + input.push_str( + "=========================== short test summary info ===========================\n", + ); + for i in 0..12 { + let _ = writeln!(input, "FAILED tests/test_many.py::test_case_{i} - assert False"); + } + input.push_str("========================= 12 failed in 0.30s =========================\n"); + + let out = filter_pytest(&input, 1); + + // First 10 traceback blocks render; blocks 11 and 12 are suppressed. + assert!(out.contains("test_case_0"), "got: {out}"); + assert!(out.contains("test_case_9"), "got: {out}"); + // The overflow marker accounts for the remaining 2 verbose blocks. + assert!(out.contains("… +2 more failures"), "got: {out}"); + // The traceback bodies for the capped blocks are gone, but the compact + // short-summary one-liners for every test survive uncapped. + let assert_false_lines = out.matches("E assert False").count(); + assert_eq!(assert_false_lines, 10, "capped traceback bodies: {out}"); + assert!( + out.contains("FAILED tests/test_many.py::test_case_11"), + "short-summary one-liners must stay uncapped: {out}" + ); + assert!(out.contains("pytest: 12 failed in 0.30s"), "got: {out}"); + } + + #[test] + fn pytest_xfail_xpass_summary_lines_survive() { + // `-rxX` surfaces XFAIL/XPASS entries in the short summary; XPASS is a + // behavior-change signal and must never be stripped as pass-noise. + let input = "============================= test session starts \ + =============================\ncollected 3 items\n\ntests/test_x.py \ + .xX [100%]\n\n\ + =========================== short test summary info \ + ===========================\nXFAIL tests/test_x.py::test_known_bug - \ + known issue #42\nXPASS tests/test_x.py::test_unexpected_pass - should \ + fail but passes\n========================= 1 passed, 1 xfailed, 1 xpassed \ + in 0.04s =========================\n"; + + let out = filter_pytest(input, 1); + + assert!(out.contains("XFAIL tests/test_x.py::test_known_bug"), "got: {out}"); + assert!(out.contains("XPASS tests/test_x.py::test_unexpected_pass"), "got: {out}"); + assert!(out.contains("pytest: 1 passed, 1 xfailed, 1 xpassed"), "got: {out}"); + } + + #[test] + fn pytest_collection_errors_do_not_evict_real_failure_tracebacks() { + // Constructed from real default pytest output (`--tb=short -q`, + // collection errors coexisting with failures): the `=== ERRORS ===` + // section renders 9 `___ ERROR collecting … ___` banners BEFORE the + // `=== FAILURES ===` section's 5 real assertion blocks. Those banners + // contain the substring `test` via their path, so a single shared cap + // would let them consume 9 of 10 slots and suppress 4 of the 5 real + // payment-bug tracebacks. The separate error cap must keep every real + // assertion traceback intact. + let mut input = String::from( + "============================= test session starts \ + =============================\ncollected 5 items / 9 \ + errors\n\n==================================== ERRORS \ + ====================================\n", + ); + for i in 0..9 { + let _ = write!( + input, + "_____________________ ERROR collecting tests/test_imp_{i}.py \ + _____________________\nImportError while importing test module \ + 'tests/test_imp_{i}.py'.\nE ImportError: boom\n" + ); + } + input.push_str( + "=================================== FAILURES ===================================\n", + ); + for i in 0..5 { + let _ = write!( + input, + "_______________________________ test_critical_{i} \ + ________________________________\ntests/pay.py:{}: in test_critical_{i}\n assert \ + 0 == 100\nE assert 0 == 100\ntests/pay.py:{}: AssertionError\n", + i + 1, + i + 1 + ); + } + input.push_str( + "=========================== short test summary info ===========================\n", + ); + for i in 0..5 { + let _ = writeln!(input, "FAILED tests/pay.py::test_critical_{i} - assert 0 == 100"); + } + input.push_str( + "========================= 5 failed, 9 errors in 0.30s =========================\n", + ); + + let out = filter_pytest(&input, 1); + + // Every real assertion traceback survives — none evicted by the + // collection-error banners that precede them. + for i in 0..5 { + assert!(out.contains(&format!("test_critical_{i}")), "lost failure {i}: {out}"); + } + let assert_lines = out.matches("E assert 0 == 100").count(); + assert_eq!(assert_lines, 5, "all 5 assertion bodies must survive: {out}"); + // 5 < cap, so there is NO failure overflow stealing real tracebacks. + assert!(!out.contains("more failures"), "no failures should be capped: {out}"); + // Collection errors are still surfaced (under their own cap of 10). + assert!(out.contains("ERROR collecting tests/test_imp_0.py"), "got: {out}"); + assert!(!out.contains("more errors"), "9 errors < cap, no error overflow: {out}"); + assert!(out.contains("pytest: 5 failed, 9 errors"), "got: {out}"); + } + + #[test] + fn pytest_caps_error_blocks_independently_of_failures() { + // 12 collection-error banners (ERRORS section) exceed the cap and yield + // their OWN `+N more errors` marker, while the 2 real failure tracebacks + // in the FAILURES section are untouched (their counter is separate). + let mut input = String::from( + "============================= test session starts \ + =============================\ncollected 2 items / 12 \ + errors\n\n==================================== ERRORS \ + ====================================\n", + ); + for i in 0..12 { + let _ = write!( + input, + "_____________________ ERROR collecting tests/test_imp_{i}.py \ + _____________________\nE ImportError: boom\n" + ); + } + input.push_str( + "=================================== FAILURES ===================================\n", + ); + for i in 0..2 { + let _ = write!( + input, + "_______________________________ test_real_{i} ________________________________\n \ + assert False\nE assert False\n" + ); + } + input.push_str( + "========================= 2 failed, 12 errors in 0.10s =========================\n", + ); + + let out = filter_pytest(&input, 1); + + // Error overflow marker fires for the 2 capped collection banners… + assert!(out.contains("… +2 more errors"), "got: {out}"); + // …but NOT a failure overflow — both real tracebacks render in full. + assert!(!out.contains("more failures"), "failures must be uncapped here: {out}"); + assert!(out.contains("test_real_0"), "got: {out}"); + assert!(out.contains("test_real_1"), "got: {out}"); + let assert_false = out.matches("E assert False").count(); + assert_eq!(assert_false, 2, "both failure bodies survive: {out}"); + } } diff --git a/crates/pi-shell/src/minimizer/filters/ruby.rs b/crates/pi-shell/src/minimizer/filters/ruby.rs index eb921e448..9e5fe8bdd 100644 --- a/crates/pi-shell/src/minimizer/filters/ruby.rs +++ b/crates/pi-shell/src/minimizer/filters/ruby.rs @@ -3,17 +3,29 @@ use super::lint; use crate::minimizer::{MinimizerCtx, MinimizerOutput, primitives}; +#[must_use] pub fn supports(program: &str, subcommand: Option<&str>) -> bool { - matches!(program, "rspec" | "rubocop") - || matches!((program, subcommand), ("rake" | "rails", Some("test"))) + match program { + "rspec" | "rubocop" => true, + "rake" | "rails" => !is_def_scoped_subcommand(subcommand), + _ => false, + } } +/// Subcommands that have dedicated TOML defs and must run standalone instead +/// of being claimed by the generic ruby filter (which would overlay them). +fn is_def_scoped_subcommand(subcommand: Option<&str>) -> bool { + matches!(subcommand, Some("db:migrate" | "db:rollback" | "routes")) +} + +#[must_use] pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerOutput { let cleaned = primitives::strip_ansi(input); let text = match ruby_tool(ctx.program, ctx.subcommand) { Some("rspec") => filter_rspec(&cleaned, exit_code), Some("minitest") => filter_minitest(&cleaned, exit_code), - Some("rubocop") => lint::condense_lint_output("rubocop", &cleaned, exit_code), + Some("rubocop") => filter_rubocop(&cleaned, exit_code), + Some("rake") => filter_rake(&cleaned, exit_code), _ => cleaned, }; @@ -28,25 +40,54 @@ fn ruby_tool<'a>(program: &'a str, subcommand: Option<&'a str>) -> Option<&'a st match (program, subcommand) { ("rspec", _) => Some("rspec"), ("rubocop", _) => Some("rubocop"), - ("rake" | "rails", Some("test")) => Some("minitest"), + ("rake" | "rails", Some(sub)) if is_minitest_subcommand(sub) => Some("minitest"), + ("rake" | "rails", Some(sub)) if is_def_scoped_subcommand(Some(sub)) => None, + ("rake" | "rails", _) => Some("rake"), _ => None, } } +/// A rake/rails subcommand that runs minitest: the bare `test` task, a scoped +/// `test:` task (`test:models`, `test:system`, `test:all`), or a +/// namespaced `:test` task (`app:test`). +fn is_minitest_subcommand(sub: &str) -> bool { + sub == "test" || sub.starts_with("test:") || sub.ends_with(":test") +} + fn filter_rspec(input: &str, exit_code: i32) -> String { if let Some(text) = compact_rspec_json(input) { return text; } + // Strip rtk noise (Spring preloader, SimpleCov coverage block, DEPRECATION + // warnings, `Finished in …` timing, Capybara screenshot detail) before both + // the success and failure text paths. Ported from + // rtk/src/cmds/ruby/rspec_cmd.rs::strip_noise, re-derived against the + // minimizer's DEFAULT (non-JSON) output. + let stripped = strip_rspec_noise(input); + if exit_code == 0 { - return ruby_test_success(input); + // snip behavior: on success collapse the doc-format tree to the + // `N examples, 0 failures` summary (plus any pending lines), discarding + // the per-example descriptions. + return rspec_success_summary(&stripped); } let mut out = String::new(); + // Each rendered failure block is buffered separately so the total can be + // capped at MAX_RENDERED_FAILURES with a `+N more failures` marker. The + // buffered blocks are rendered into `out` the moment the `Failures:` section + // ends — at the summary line or the `Failed examples:` boundary — so real + // rspec ordering (`Failures:` details, then summary, then `Failed examples:`) + // keeps each detail block under its own `Failures:` header instead of being + // appended after the `Failed examples:` list. + let mut blocks: Vec = Vec::new(); + let mut current = String::new(); + let mut rendered_blocks = false; let mut in_failure = false; let mut in_failed_examples = false; - for line in input.lines() { + for line in stripped.lines() { let trimmed = line.trim(); if trimmed == "Failures:" { in_failure = true; @@ -55,12 +96,16 @@ fn filter_rspec(input: &str, exit_code: i32) -> String { continue; } if trimmed == "Failed examples:" { + flush_rspec_block(&mut blocks, &mut current); + render_rspec_blocks(&mut out, &mut blocks, &mut rendered_blocks); in_failure = false; in_failed_examples = true; push_line(&mut out, line); continue; } if is_rspec_summary_line(trimmed) { + flush_rspec_block(&mut blocks, &mut current); + render_rspec_blocks(&mut out, &mut blocks, &mut rendered_blocks); in_failure = false; in_failed_examples = false; push_line(&mut out, line); @@ -70,13 +115,21 @@ fn filter_rspec(input: &str, exit_code: i32) -> String { if is_gem_backtrace(trimmed) || is_rspec_noise(trimmed) { continue; } - push_line(&mut out, line); + if is_numbered_failure(trimmed) { + flush_rspec_block(&mut blocks, &mut current); + } + current.push_str(line); + current.push('\n'); continue; } if in_failed_examples && !trimmed.is_empty() { push_line(&mut out, line); } } + // Any failure blocks not yet rendered (no summary / `Failed examples:` + // boundary was seen) are flushed at the end. + flush_rspec_block(&mut blocks, &mut current); + render_rspec_blocks(&mut out, &mut blocks, &mut rendered_blocks); if has_content(&out) { out @@ -85,6 +138,151 @@ fn filter_rspec(input: &str, exit_code: i32) -> String { } } +/// Render the buffered `Failures:` detail blocks into `out`, capped at +/// `MAX_RENDERED_FAILURES` with a `+N more failures` marker. Runs at most once +/// — guarded by `rendered` — so the section is emitted exactly where the +/// `Failures:` block ends (the summary line or `Failed examples:` boundary), +/// preserving real rspec section ordering. +fn render_rspec_blocks(out: &mut String, blocks: &mut Vec, rendered: &mut bool) { + if *rendered { + blocks.clear(); + return; + } + let total = blocks.len(); + if total == 0 { + return; + } + *rendered = true; + for block in blocks.iter().take(MAX_RENDERED_FAILURES) { + out.push_str(block); + } + if total > MAX_RENDERED_FAILURES { + push_line(out, &format!("+{} more failures", total - MAX_RENDERED_FAILURES)); + } + blocks.clear(); +} + +/// Cap on rendered failure blocks in non-JSON rspec output. rtk uses the same +/// limit (`MAX_RSPEC_FAILURES = 5`) — failure blocks carry full context, so a +/// handful is enough before collapsing to a `+N more failures` marker. +const MAX_RENDERED_FAILURES: usize = 5; + +fn flush_rspec_block(blocks: &mut Vec, current: &mut String) { + if has_content(current) { + blocks.push(std::mem::take(current)); + } else { + current.clear(); + } +} + +/// A numbered failure header like `1) User validates name`. +fn is_numbered_failure(trimmed: &str) -> bool { + let Some(pos) = trimmed.find(')') else { + return false; + }; + let prefix = &trimmed[..pos]; + !prefix.is_empty() && prefix.chars().all(|ch| ch.is_ascii_digit()) +} + +/// Drop rtk-style rspec noise before the text paths. Mirrors +/// `rtk/src/cmds/ruby/rspec_cmd.rs::strip_noise`: Spring preloader, `SimpleCov` +/// coverage block (until the next blank line), `DEPRECATION WARNING:` lines, +/// the `Finished in …` timing line, and Capybara screenshot detail (kept as a +/// compact `[screenshot: path]`). +fn strip_rspec_noise(input: &str) -> String { + let mut out = String::new(); + let mut in_simplecov = false; + // The SimpleCov / coverage block only ever appears in the TRAILING region + // (after the run completes), never inside a numbered `Failures:` block. The + // donor's patterns (`simplecov`, `coverage/`, `.simplecov`) are unscoped + // substring/prefix tests, so a failure whose description or assertion path + // mentions SimpleCov coverage (e.g. `1) SimpleCov configuration loads`, or an + // assertion about a `coverage/index.html` artifact) would falsely enter the + // strip and swallow the entire failure block up to the next blank line. Gate + // the strip to OUTSIDE the `Failures:` section so failure diagnostics survive. + let mut in_failures = false; + + for line in input.lines() { + let trimmed = line.trim(); + let lower = trimmed.to_ascii_lowercase(); + + if trimmed == "Failures:" { + in_failures = true; + } else if trimmed == "Failed examples:" + || is_rspec_summary_line(trimmed) + || trimmed.starts_with("Finished in ") + { + // rspec always prints the `Finished in …` timing line AFTER the failure + // details and BEFORE the trailing coverage block, so it reliably closes + // the `Failures:` region even when the summary line trails the coverage + // block (SimpleCov prints between timing and summary). + in_failures = false; + } + + if lower.contains("running via spring preloader") { + continue; + } + if trimmed.starts_with("DEPRECATION WARNING:") { + continue; + } + if trimmed.starts_with("Finished in ") { + continue; + } + // Only strip the SimpleCov/coverage block when NOT inside a `Failures:` + // section. The `coverage report` banner is anchored to its actual shape + // (`Coverage report generated …`) rather than a bare `coverage/` prefix, so + // a failure-detail line asserting on a `coverage/`-prefixed artifact path is + // not mistaken for the banner. + if !in_failures + && (is_coverage_banner(&lower) + || lower.contains("simplecov") + || lower.contains(".simplecov")) + { + in_simplecov = true; + continue; + } + if in_simplecov { + if trimmed.is_empty() { + in_simplecov = false; + } + continue; + } + if let Some(rest) = trimmed.strip_prefix("saved screenshot to ") { + push_line(&mut out, &format!("[screenshot: {}]", rest.trim())); + continue; + } + + push_line(&mut out, line); + } + + out +} + +/// The `SimpleCov` coverage-report banner that opens the trailing coverage +/// block, e.g. `Coverage report generated for RSpec to /app/coverage`. Anchored +/// to the banner shape so a failure-detail line merely mentioning a `coverage/` +/// path is not misread as the banner. +fn is_coverage_banner(lower: &str) -> bool { + lower.starts_with("coverage report") +} + +/// On a passing rspec run, keep only the `N examples, …` summary line plus any +/// pending lines; discard the doc-format example tree (snip behavior). +fn rspec_success_summary(input: &str) -> String { + let mut out = String::new(); + for line in input.lines() { + let trimmed = line.trim(); + if is_rspec_summary_line(trimmed) || trimmed.starts_with("Pending") { + push_line(&mut out, line); + } + } + if has_content(&out) { + out + } else { + ruby_test_success(input) + } +} + fn compact_rspec_json(input: &str) -> Option { let value: serde_json::Value = serde_json::from_str(input).ok()?; let map = value.as_object()?; @@ -216,7 +414,7 @@ fn first_json_string<'a>( fn first_json_u64(map: &serde_json::Map, keys: &[&str]) -> Option { keys .iter() - .find_map(|key| map.get(*key).and_then(|value| value.as_u64())) + .find_map(|key| map.get(*key).and_then(serde_json::Value::as_u64)) } fn filter_minitest(input: &str, exit_code: i32) -> String { @@ -257,6 +455,143 @@ fn filter_minitest(input: &str, exit_code: i32) -> String { } } +/// `RuboCop` output: keep lint's grouped offense rendering as primary, but +/// compact the `-a`/`-A` autocorrect run-summary line +/// (`N files inspected, M offenses detected, K offenses autocorrected`) — which +/// the grouped output otherwise keeps verbatim and buried — to a single `ok` +/// line. Ported from `rtk/src/cmds/ruby/rubocop_cmd.rs` autocorrect handling, +/// re-derived against the minimizer's DEFAULT text output. +fn filter_rubocop(input: &str, exit_code: i32) -> String { + let condensed = lint::condense_lint_output("rubocop", input, exit_code); + + let mut out = String::new(); + let mut replaced = false; + for line in condensed.lines() { + let trimmed = line.trim(); + if !replaced + && trimmed.contains("inspected") + && trimmed.contains("autocorrected") + && let Some(compact) = compact_rubocop_autocorrect(trimmed) + { + push_line(&mut out, &compact); + replaced = true; + continue; + } + push_line(&mut out, line); + } + + if replaced { out } else { condensed } +} + +/// Build `ok rubocop -A (N files, K autocorrected)` from an autocorrect summary +/// line. Returns `None` when the counts cannot be parsed (keep the line as-is). +fn compact_rubocop_autocorrect(line: &str) -> Option { + let files = leading_number(line)?; + let corrected = line + .split(',') + .rev() + .find(|part| part.contains("autocorrected")) + .and_then(leading_number)?; + Some(format!("ok rubocop -A ({files} files, {corrected} autocorrected)")) +} + +/// First whitespace-delimited token of `s` parsed as a count. +fn leading_number(s: &str) -> Option { + s.split_whitespace().next()?.parse().ok() +} + +/// Generic rake/rails task condenser for NON-test tasks. Keeps result/status +/// lines (mirrors snip's rake keep-lines pattern) plus the HEAD of a +/// `rake aborted!` traceback (the first few frames, which carry the real +/// cause). `rake test` / `rails test` never reach here — they route to +/// `filter_minitest`. +fn filter_rake(input: &str, exit_code: i32) -> String { + // On a FAILING non-test task that prints no `rake aborted!` header, the + // keep-lines pass below would retain only individually keyword-matching lines + // and silently drop the keyword-less diagnostic body (offending records, + // `Expected positive integer, got -3`-style value detail) — exactly the + // failure-detail the task warns must survive. The head/tail safety net only + // fires when `out` is empty, which a single keyword line defeats. So when the + // task failed and produced no `rake aborted!` traceback, preserve the full + // diagnostic via head/tail rather than the lossy keep-lines pass. + if exit_code != 0 && !input.lines().any(|line| line.trim() == "rake aborted!") { + return primitives::head_tail_lines(input, 80, 80); + } + + let mut out = String::new(); + let mut aborted_frames = 0usize; + let mut in_aborted = false; + + for line in input.lines() { + let trimmed = line.trim(); + + if trimmed == "rake aborted!" { + in_aborted = true; + aborted_frames = 0; + push_line(&mut out, line); + continue; + } + if in_aborted { + // Keep the head of the traceback — the first few frames pinpoint the + // cause — then drop the long tail. + if aborted_frames < MAX_ABORTED_FRAMES { + push_line(&mut out, line); + aborted_frames += 1; + continue; + } + // A blank line ends the traceback block; resume normal keep-lines. + if trimmed.is_empty() { + in_aborted = false; + } + continue; + } + + if is_rake_keep_line(trimmed) { + push_line(&mut out, line); + } + } + + if has_content(&out) { + out + } else { + primitives::head_tail_lines(input, 80, 80) + } +} + +/// Number of `rake aborted!` traceback frames kept (HEAD): enough to localize +/// the failure without dumping the full Rake/Ruby internal stack. +const MAX_ABORTED_FRAMES: usize = 5; + +/// snip rake.yaml keep-lines pattern, re-derived: task result / status / error +/// keywords worth surfacing from a non-test rake task. +fn is_rake_keep_line(trimmed: &str) -> bool { + if trimmed.is_empty() { + return false; + } + // rake aborted! always surfaces + if trimmed.contains("rake aborted") { + return true; + } + // warning: lines from asset compilation, migrations, etc. are signal + if trimmed.to_ascii_lowercase().starts_with("warning:") { + return true; + } + let lower = trimmed.to_ascii_lowercase(); + let words: Vec<&str> = lower.split_whitespace().collect(); + words.iter().any(|w| { + matches!( + *w, + "passed" + | "failed" + | "error" + | "fail" | "ok" + | "finished" + | "assertion" + | "test" | "failure" + ) + }) +} + fn ruby_test_success(input: &str) -> String { let mut out = String::new(); let mut summary = String::new(); @@ -293,7 +628,9 @@ fn is_rspec_summary_line(trimmed: &str) -> bool { } fn is_minitest_summary_line(trimmed: &str) -> bool { - trimmed.contains(" runs, ") + // Minitest prints `N runs, …`; minitest-reporters prints `N tests, …`. + // Accept either head form. + (trimmed.contains(" runs, ") || trimmed.contains(" tests, ")) && trimmed.contains(" assertions, ") && trimmed.contains(" failures, ") && trimmed.contains(" errors") @@ -309,6 +646,9 @@ fn is_ruby_pass_noise(trimmed: &str) -> bool { || trimmed.starts_with("Running:") || trimmed.starts_with("Randomized with seed") || trimmed.starts_with("Finished in ") + // minitest-reporters banner / progress lines. + || trimmed.starts_with("Started with run options") + || trimmed.starts_with("Progress:") } fn is_rspec_noise(trimmed: &str) -> bool { @@ -333,6 +673,8 @@ fn has_content(text: &str) -> bool { #[cfg(test)] mod tests { + use std::fmt::Write as _; + use super::*; use crate::minimizer::MinimizerConfig; @@ -342,7 +684,55 @@ mod tests { assert!(supports("rake", Some("test"))); assert!(supports("rails", Some("test"))); assert!(supports("rubocop", None)); + // rake/rails are claimed GENERICALLY except for def-scoped subcommands + // (db:migrate, db:rollback, routes) which run standalone via TOML defs. assert!(!supports("rake", Some("db:migrate"))); + assert!(!supports("rails", Some("db:migrate"))); + assert!(!supports("rails", Some("db:rollback"))); + assert!(!supports("rails", Some("routes"))); + assert!(supports("rake", Some("db:seed"))); + // test subcommand still routes to the minitest filter. + assert_eq!(ruby_tool("rake", Some("test")), Some("minitest")); + assert_eq!(ruby_tool("rails", Some("test")), Some("minitest")); + assert_eq!(ruby_tool("rake", Some("db:seed")), Some("rake")); + // Scoped (`test:`) and namespaced (`:test`) minitest tasks + // must ALSO route to the minitest filter — the generic condenser would + // strip 'Expected:'/'Actual:' failure-detail lines. + assert_eq!(ruby_tool("rake", Some("test:models")), Some("minitest")); + assert_eq!(ruby_tool("rails", Some("test:system")), Some("minitest")); + assert_eq!(ruby_tool("rake", Some("test:all")), Some("minitest")); + assert_eq!(ruby_tool("rake", Some("app:test")), Some("minitest")); + // Def-scoped subcommands return None so the engine runs the TOML def + // standalone instead of overlaying the generic rake condenser. + assert_eq!(ruby_tool("rake", Some("db:migrate")), None); + assert_eq!(ruby_tool("rails", Some("db:migrate")), None); + assert_eq!(ruby_tool("rails", Some("routes")), None); + } + + #[test] + fn scoped_minitest_task_keeps_failure_detail() { + // `rake test:models` yields subcommand="test:models" (detect.rs default + // arm lowercases the first positional). It must route to filter_minitest + // and KEEP the Expected/Actual assertion payload — the generic rake + // condenser would drop those keyword-less lines. + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let context = MinimizerCtx { + program: "rake", + subcommand: Some("test:models"), + command: "rake test:models", + config: &cfg, + }; + let input = "Run options: --seed 1\n\n# Running:\n\n.F\n\n 1) Failure:\nUserTest#test_name \ + [test/models/user_test.rb:8]:\nExpected: true\n Actual: false\n\n2 runs, 2 \ + assertions, 1 failures, 0 errors, 0 skips\n"; + let out = filter(&context, input, 1); + + assert!(out.text.contains("1) Failure")); + assert!(out.text.contains("test/models/user_test.rb:8")); + // The diagnostic payload survives (the generic condenser would drop it). + assert!(out.text.contains("Expected: true")); + assert!(out.text.contains("Actual: false")); + assert!(out.text.contains("2 runs, 2 assertions, 1 failures")); } #[test] @@ -467,4 +857,281 @@ mod tests { assert!(out.text.contains("2 diagnostics in 1 files")); assert!(out.text.contains("app/models/user.rb (2 diagnostics)")); } + + // ── CONCERN 1: rspec noise strip + failure cap + success collapse ────── + + #[test] + fn rspec_strips_spring_simplecov_deprecation_and_timing_noise() { + let input = "Running via Spring preloader in process 12345\n\nFailures:\n\n 1) User \ + validates name\n Failure/Error: expect(user).to be_valid\n expected \ + true got false\n # ./spec/models/user_spec.rb:12\n\nFinished in 0.45 \ + seconds (files took 1.2 seconds to load)\nDEPRECATION WARNING: thing is \ + deprecated.\nCoverage report generated for RSpec to /app/coverage.\n142 / 200 \ + LOC (71.0%) covered.\n\n3 examples, 1 failure\n"; + let out = filter_rspec(input, 1); + + assert!(!out.contains("Spring preloader")); + assert!(!out.contains("Finished in")); + assert!(!out.contains("DEPRECATION")); + assert!(!out.contains("Coverage report")); + assert!(!out.contains("LOC")); + assert!(out.contains("User validates name")); + assert!(out.contains("expected true got false")); + assert!(out.contains("3 examples, 1 failure")); + } + + #[test] + fn rspec_caps_failure_blocks_at_five() { + let mut input = String::from("Failures:\n\n"); + for i in 1..=7 { + let _ = write!( + input, + " {i}) Example number {i} fails\n Failure/Error: expect(true).to eq(false)\n \ + # ./spec/a_spec.rb:{i}\n\n" + ); + } + input.push_str("7 examples, 7 failures\n"); + let out = filter_rspec(&input, 1); + + assert!(out.contains("Example number 1 fails")); + assert!(out.contains("Example number 5 fails")); + assert!(!out.contains("Example number 6 fails")); + assert!(out.contains("+2 more failures")); + assert!(out.contains("7 examples, 7 failures")); + } + + #[test] + fn rspec_exit_zero_collapses_doc_tree_to_summary() { + // snip rspec_raw.txt-style doc-format run, but all passing: the doc tree + // must collapse to the summary line only. + let input = "Randomized with seed 12345\n\nUserController\n GET /users\n returns a list \ + of users\n POST /users\n creates a new user\n\nOrderService\n #process\n \ + processes payment\n\nFinished in 0.45 seconds\n5 examples, 0 failures\n"; + let out = filter_rspec(input, 0); + + assert!(out.contains("5 examples, 0 failures")); + assert!(!out.contains("UserController")); + assert!(!out.contains("processes payment")); + assert!(!out.contains("Finished in")); + } + + #[test] + fn rspec_failure_real_order_keeps_detail_under_failures_header() { + // Real rspec text emits sections in this order: `Failures:` numbered + // detail blocks, then the summary line, then `Failed examples:` list (see + // snip/tests/fixtures/rspec_raw.txt). The detail block must render under + // the `Failures:` header (before the summary), not be appended after the + // `Failed examples:` list. + let input = "Failures:\n\n 1) User validates name\n Failure/Error: expect(user).to \ + be_valid\n expected valid? to return true, got false\n # \ + ./spec/models/user_spec.rb:12\n\n1 example, 1 failure\n\nFailed \ + examples:\n\nrspec ./spec/models/user_spec.rb:12 # User validates name\n"; + let out = filter_rspec(input, 1); + + let failures_at = out.find("Failures:").expect("Failures header present"); + let detail_at = out.find("expected valid?").expect("detail present"); + let summary_at = out.find("1 example, 1 failure").expect("summary present"); + let failed_examples_at = out + .find("Failed examples:") + .expect("failed-examples header"); + + // Detail block sits under `Failures:` and before the summary; the + // `Failed examples:` header comes after the summary — not collided with + // the `Failures:` header. + assert!(failures_at < detail_at, "detail must follow Failures header: {out}"); + assert!(detail_at < summary_at, "detail must precede summary: {out}"); + assert!(summary_at < failed_examples_at, "summary must precede Failed examples list: {out}"); + // The two section headers must not be adjacent (the collision symptom). + assert!(detail_at < failed_examples_at, "detail must not land under Failed examples: {out}"); + } + + #[test] + fn rspec_failure_doc_run_keeps_failed_examples_and_summary() { + // The donor snip/tests/fixtures/rspec_raw.txt: a 3-failure doc run with no + // `Failures:` detail block, only the doc tree + `Failed examples:` list. + let input = "Randomized with seed 12345\n\nUserController\n GET /users\n returns a list \ + of users\n\nFinished in 0.45623 seconds (files took 1.23 seconds to load)\n42 \ + examples, 3 failures, 2 pending\n\nFailed examples:\n\nrspec \ + ./spec/controllers/users_controller_spec.rb:25 # UserController POST /users \ + with invalid params returns errors\nrspec \ + ./spec/services/order_service_spec.rb:45 # OrderService #process with invalid \ + order raises error\n"; + let out = filter_rspec(input, 1); + + assert!(out.contains("Failed examples:")); + assert!(out.contains("users_controller_spec.rb:25")); + assert!(out.contains("42 examples, 3 failures, 2 pending")); + assert!(!out.contains("returns a list of users")); + assert!(!out.contains("Finished in")); + } + + // ── CONCERN 2: rubocop autocorrect summary compaction ────────────────── + + #[test] + fn rubocop_autocorrect_summary_compacts_to_ok_line() { + // A default `rubocop -A` run: grouped offenses stay primary, the + // `N files inspected, M offenses detected, K offenses autocorrected` + // run-summary line collapses to one ok line. + let input = "app/models/user.rb:1:1: C: [Corrected] Style/FrozenStringLiteralComment: \ + Missing frozen string literal comment.\napp/models/user.rb:10:5: C: \ + [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.\n\n15 \ + files inspected, 3 offenses detected, 3 offenses autocorrected\n"; + let out = filter_rubocop(input, 1); + + assert!(out.contains("ok rubocop -A (15 files, 3 autocorrected)")); + assert!(!out.contains("offenses detected, 3 offenses autocorrected")); + // Grouped offense output stays primary. + assert!(out.contains("app/models/user.rb")); + } + + // ── CONCERN 3: minitest `tests,` summary + reporter noise ────────────── + + #[test] + fn minitest_accepts_tests_summary_and_strips_reporter_noise() { + let input = "Started with run options --seed 37764\n\nProgress: \ + |====================|\n\n.F\n\nFinished in 5.79938s\n\n 1) \ + Failure:\nUserTest#test_name [test/models/user_test.rb:8]:\nExpected: true\n \ + Actual: false\n\n57 tests, 378 assertions, 1 failures, 0 errors, 0 skips\n"; + let out = filter_minitest(input, 1); + + assert!(!out.contains("Started with run options")); + assert!(!out.contains("Progress:")); + assert!(out.contains("1) Failure")); + assert!(out.contains("test/models/user_test.rb:8")); + assert!(out.contains("Expected: true")); + assert!(out.contains("57 tests, 378 assertions, 1 failures")); + } + + #[test] + fn minitest_tests_summary_passes_through_success() { + let input = "Started with run options --seed 1\n\nProgress: |==========|\n\nFinished in \ + 5.7s\n57 tests, 378 assertions, 0 failures, 0 errors, 0 skips\n"; + let out = filter_minitest(input, 0); + + assert!(out.contains("57 tests, 378 assertions, 0 failures")); + assert!(!out.contains("Started with run options")); + assert!(!out.contains("Progress:")); + } + + // ── CONCERN 4: generic rake/rails condensation ───────────────────────── + + #[test] + fn rake_generic_task_condensed_keeps_status_drops_chatter() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let context = MinimizerCtx { + program: "rake", + subcommand: Some("db:seed"), + command: "rake db:seed", + config: &cfg, + }; + let input = "Seeding users...\nLoading fixtures from db/seeds.rb\ncreating record \ + 1\ncreating record 2\nSeed finished successfully\nDone in 1.2s\n"; + let out = filter(&context, input, 0); + + assert!(out.text.contains("Seed finished successfully")); + // Pure progress chatter without a status keyword is dropped. + assert!(!out.text.contains("creating record 1")); + } + + #[test] + fn rspec_simplecov_named_failure_block_is_not_swallowed() { + // A failure whose header/detail mentions SimpleCov (or a `coverage/` + // artifact path) must NOT trigger the trailing-coverage strip: the whole + // numbered block (header, Failure/Error, diff, file:line) must survive. + let input = "Failures:\n\n 1) SimpleCov configuration loads correctly\n Failure/Error: \ + expect(config).to be_present\n expected present\n # \ + ./spec/simplecov_spec.rb:5\n\n3 examples, 1 failure\n"; + let out = filter_rspec(input, 1); + + assert!(out.contains("SimpleCov configuration loads correctly")); + assert!(out.contains("expected present")); + assert!(out.contains("spec/simplecov_spec.rb:5")); + assert!(out.contains("3 examples, 1 failure")); + } + + #[test] + fn rspec_coverage_path_assertion_in_failure_survives() { + // A failure-detail line asserting on a `coverage/`-prefixed path must not be + // mistaken for the SimpleCov coverage banner and swallowed. + let input = "Failures:\n\n 1) Report generates coverage artifact\n Failure/Error: \ + expect(File).to exist\n coverage/index.html should exist\n # \ + ./spec/report_spec.rb:9\n\n1 example, 1 failure\n"; + let out = filter_rspec(input, 1); + + assert!(out.contains("Report generates coverage artifact")); + assert!(out.contains("coverage/index.html should exist")); + assert!(out.contains("spec/report_spec.rb:9")); + assert!(out.contains("1 example, 1 failure")); + } + + #[test] + fn rspec_trailing_simplecov_block_still_stripped() { + // The trailing SimpleCov/coverage block (outside any `Failures:` section) + // must STILL be stripped — the failure-block gate must not disable it. + let input = "Failures:\n\n 1) User validates name\n Failure/Error: expect(user).to \ + be_valid\n expected true got false\n # ./spec/user_spec.rb:5\n\n3 \ + examples, 1 failure\n\nCoverage report generated for RSpec to \ + /app/coverage.\n142 / 200 LOC (71.0%) covered.\n"; + let out = filter_rspec(input, 1); + + assert!(out.contains("User validates name")); + assert!(!out.contains("Coverage report")); + assert!(!out.contains("LOC")); + assert!(out.contains("3 examples, 1 failure")); + } + + #[test] + fn rake_failing_task_without_aborted_keeps_diagnostic_body() { + // A FAILING non-test rake task that prints no `rake aborted!` header but + // emits one keyword line plus keyword-less diagnostic body: the body lines + // (offending records + `Expected positive integer, got -3` value detail) + // must survive — the keep-lines pass alone would drop them. + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let context = MinimizerCtx { + program: "rake", + subcommand: Some("import:run"), + command: "rake import:run", + config: &cfg, + }; + let input = "Starting import...\nImportError occurred during processing\nRecord 4821: \ + invalid value '<<>>' in column total\nRecord 4822: foreign key 9912 \ + missing\nExpected positive integer, got -3\n"; + let out = filter(&context, input, 1); + + assert!(out.text.contains("ImportError occurred during processing")); + assert!(out.text.contains("Record 4821")); + assert!(out.text.contains("Record 4822")); + assert!(out.text.contains("Expected positive integer, got -3")); + } + + #[test] + fn rake_keep_warning_lines() { + assert!(is_rake_keep_line("warning: constant Foo::Bar is deprecated")); + assert!(is_rake_keep_line("Warning: could not find JAVA_HOME")); + // non-warning task chatter still dropped + assert!(!is_rake_keep_line("Compiling assets...")); + } + + #[test] + fn rake_aborted_keeps_traceback_head() { + let cfg = MinimizerConfig { enabled: true, ..Default::default() }; + let context = MinimizerCtx { + program: "rake", + subcommand: Some("db:seed"), + command: "rake db:seed", + config: &cfg, + }; + let mut input = String::from("rake aborted!\nNameError: undefined local variable\n"); + for i in 0..20 { + let _ = writeln!(input, "/app/lib/task_{i}.rb:{i}:in `block'"); + } + input.push_str("\nTasks: TOP => db:seed\n"); + let out = filter(&context, &input, 1); + + assert!(out.text.contains("rake aborted!")); + assert!(out.text.contains("NameError: undefined local variable")); + // HEAD frames kept, deep tail dropped. + assert!(out.text.contains("task_0.rb")); + assert!(!out.text.contains("task_15.rb")); + } } diff --git a/crates/pi-shell/src/minimizer/filters/rust_tools.rs b/crates/pi-shell/src/minimizer/filters/rust_tools.rs index 0c469f14a..498fb5184 100644 --- a/crates/pi-shell/src/minimizer/filters/rust_tools.rs +++ b/crates/pi-shell/src/minimizer/filters/rust_tools.rs @@ -11,10 +11,12 @@ use std::fmt::Write; use crate::minimizer::{MinimizerCtx, MinimizerOutput, primitives}; +#[must_use] pub fn supports(program: &str, _subcommand: Option<&str>) -> bool { matches!(program, "rustfmt") } +#[must_use] pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerOutput { // Kill-switch parity (M2): legacy_filters_active=true skips this // filter so callers can rollback without recompile. @@ -112,7 +114,7 @@ mod tests { let cfg = MinimizerConfig { enabled: true, ..Default::default() }; let mut input = String::new(); for i in 0..50 { - input.push_str(&format!("Diff in src/file_{i}.rs at line 10:\n")); + let _ = writeln!(input, "Diff in src/file_{i}.rs at line 10:"); for _ in 0..8 { input.push_str("- old line\n"); input.push_str("+ new line\n"); @@ -147,7 +149,7 @@ mod tests { // Simulate a long usage/error dump with no `Diff in ` headers. let mut input = String::new(); for i in 0..400 { - input.push_str(&format!("error: usage line {i}\n")); + let _ = writeln!(input, "error: usage line {i}"); } let out = filter(&context, &input, 1); assert!(out.changed); @@ -158,9 +160,8 @@ mod tests { #[test] fn rustfmt_legacy_filters_active_passes_through() { // Kill-switch parity (M2). - let mut cfg = MinimizerConfig::default(); - cfg.enabled = true; - cfg.legacy_filters_active = true; + let cfg = + MinimizerConfig { enabled: true, legacy_filters_active: true, ..Default::default() }; let context = ctx("rustfmt", "rustfmt --check src/", &cfg); let input = "Diff in src/a.rs at line 1:\n-old\n+new\n"; let out = filter(&context, input, 1); diff --git a/crates/pi-shell/src/minimizer/filters/system.rs b/crates/pi-shell/src/minimizer/filters/system.rs index 801fd48c5..c2ffb1c3f 100644 --- a/crates/pi-shell/src/minimizer/filters/system.rs +++ b/crates/pi-shell/src/minimizer/filters/system.rs @@ -5,6 +5,7 @@ use std::collections::HashMap; use super::git; use crate::minimizer::{MinimizerCtx, MinimizerOutput, primitives}; +#[must_use] pub fn supports(program: &str) -> bool { matches!( program, @@ -23,6 +24,7 @@ pub fn supports(program: &str) -> bool { ) } +#[must_use] pub fn filter(ctx: &MinimizerCtx<'_>, input: &str, exit_code: i32) -> MinimizerOutput { let cleaned = primitives::strip_ansi(input); let command = ctx.program; @@ -223,7 +225,7 @@ struct LogLine { count: usize, } -fn normalize_log_line(line: &str) -> String { +pub(super) fn normalize_log_line(line: &str) -> String { let without_timestamp = strip_leading_timestamp(line.trim()); let mut out = String::new(); for token in without_timestamp.split_whitespace() { @@ -310,6 +312,41 @@ fn flush_digits(out: &mut String, digits: &mut String) { digits.clear(); } +pub(super) fn compact_log_lines( + input: &str, + head: usize, + tail: usize, + key_fn: impl Fn(&str) -> String, +) -> String { + let mut unique: Vec = Vec::new(); + let mut by_key: HashMap = HashMap::new(); + + for (idx, line) in input.lines().enumerate() { + let key = if line.trim().is_empty() { + // Blank lines are section separators; do not globally deduplicate them. + // drop_repeated_blank_lines already collapsed consecutive blanks. + format!("") + } else { + let key = key_fn(line); + if key.is_empty() { + line.to_string() + } else { + key + } + }; + if let Some(index) = by_key.get(&key).copied() { + if let Some(entry) = unique.get_mut(index) { + entry.count += 1; + } + } else { + by_key.insert(key, unique.len()); + unique.push(LogLine { original: line.to_string(), count: 1 }); + } + } + + render_counted_lines(&unique, head, tail) +} + fn render_counted_lines(lines: &[LogLine], head: usize, tail: usize) -> String { let mut out = String::new(); if lines.len() <= head + tail { diff --git a/crates/pi-shell/src/minimizer/pipeline.rs b/crates/pi-shell/src/minimizer/pipeline.rs index 9a110247d..6aff600fb 100644 --- a/crates/pi-shell/src/minimizer/pipeline.rs +++ b/crates/pi-shell/src/minimizer/pipeline.rs @@ -11,11 +11,16 @@ //! 2. `replace` — ordered regex substitutions, line-by-line //! 3. `match_output` — short-circuit to a one-line summary when the //! full output blob matches, honoring an optional `unless` anti-pattern -//! 4. `strip_lines_matching` / `keep_lines_matching` (mutually exclusive) -//! 5. `truncate_lines_at` — per-line Unicode-safe char cap -//! 6. `head_lines` / `tail_lines` — keep first/last N lines with a marker -//! 7. `max_lines` — hard cap after head/tail -//! 8. `on_empty` — replace an empty result with a sentinel +//! 4. `strip_lines_matching` / `keep_lines_matching` — a line survives iff it +//! matches the keep set (when present) and does not match the strip set +//! (when present) +//! 5. `replace_after` — ordered regex substitutions, line-by-line, +//! applied after line filtering and before truncation so substitutions that +//! shorten lines (e.g. path compaction) see the full, untruncated text +//! 6. `truncate_lines_at` — per-line Unicode-safe char cap +//! 7. `head_lines` / `tail_lines` — keep first/last N lines with a marker +//! 8. `max_lines` — hard cap after head/tail +//! 9. `on_empty` — replace an empty result with a sentinel //! //! Pipelines never panic for the caller: regex compilation errors are //! surfaced when the pipeline is loaded, and runtime application is total. @@ -51,6 +56,11 @@ pub struct PipelineDef { pub strip_lines_matching: Vec, #[serde(default)] pub keep_lines_matching: Vec, + /// Ordered regex substitutions applied after the strip/keep line filter + /// and before `truncate_lines_at`, so substitutions that shorten lines + /// (e.g. path compaction) see the full, untruncated text. + #[serde(default)] + pub replace_after: Vec, pub truncate_lines_at: Option, pub head_lines: Option, pub tail_lines: Option, @@ -119,13 +129,6 @@ pub struct CompiledMatchOutput { unless: Option, } -#[derive(Debug)] -pub enum CompiledLineFilter { - None, - Strip(RegexSet), - Keep(RegexSet), -} - /// A pipeline with every regex pre-compiled. #[derive(Debug)] pub struct CompiledPipeline { @@ -138,7 +141,9 @@ pub struct CompiledPipeline { pub strip_ansi: bool, pub replace: Vec, pub match_output: Vec, - pub line_filter: CompiledLineFilter, + pub strip_lines: Option, + pub keep_lines: Option, + pub replace_after: Vec, pub truncate_lines_at: Option, pub head_lines: Option, pub tail_lines: Option, @@ -148,13 +153,22 @@ pub struct CompiledPipeline { pub except_on_exit: Vec, } -/// Compile a raw TOML definition. Returns a descriptive error on regex -/// issues or mutually-exclusive-field conflicts. -pub fn compile(name: String, def: PipelineDef) -> Result { - if !def.strip_lines_matching.is_empty() && !def.keep_lines_matching.is_empty() { - return Err("strip_lines_matching and keep_lines_matching are mutually exclusive".into()); - } +/// Compile an ordered regex-substitution list; `label` names the TOML key +/// (`replace` or `replace_after`) in error messages. +fn compile_replaces(rules: Vec, label: &str) -> Result, String> { + rules + .into_iter() + .map(|rule| { + let pattern = Regex::new(&rule.pattern) + .map_err(|e| format!("invalid {label} pattern '{}': {e}", rule.pattern))?; + Ok(CompiledReplace { pattern, replacement: rule.replacement }) + }) + .collect() +} +/// Compile a raw TOML definition. Returns a descriptive error on regex +/// issues. +pub fn compile(name: String, def: PipelineDef) -> Result { let match_command = Regex::new(&def.match_command).map_err(|e| format!("invalid match_command: {e}"))?; let match_subcommand = def @@ -163,15 +177,8 @@ pub fn compile(name: String, def: PipelineDef) -> Result, String>>()?; + let replace = compile_replaces(def.replace, "replace")?; + let replace_after = compile_replaces(def.replace_after, "replace_after")?; let match_output = def .match_output @@ -188,16 +195,21 @@ pub fn compile(name: String, def: PipelineDef) -> Result, String>>()?; - let line_filter = if !def.strip_lines_matching.is_empty() { - let set = RegexSet::new(&def.strip_lines_matching) - .map_err(|e| format!("invalid strip_lines_matching: {e}"))?; - CompiledLineFilter::Strip(set) - } else if !def.keep_lines_matching.is_empty() { - let set = RegexSet::new(&def.keep_lines_matching) - .map_err(|e| format!("invalid keep_lines_matching: {e}"))?; - CompiledLineFilter::Keep(set) + let strip_lines = if def.strip_lines_matching.is_empty() { + None } else { - CompiledLineFilter::None + Some( + RegexSet::new(&def.strip_lines_matching) + .map_err(|e| format!("invalid strip_lines_matching: {e}"))?, + ) + }; + let keep_lines = if def.keep_lines_matching.is_empty() { + None + } else { + Some( + RegexSet::new(&def.keep_lines_matching) + .map_err(|e| format!("invalid keep_lines_matching: {e}"))?, + ) }; Ok(CompiledPipeline { @@ -208,7 +220,9 @@ pub fn compile(name: String, def: PipelineDef) -> Result Result) -> bool { if !self.match_command.is_match(program) { return false; @@ -235,6 +250,7 @@ impl CompiledPipeline { } /// Whether this pipeline is gated off for the supplied exit code. + #[must_use] pub fn skipped_by_exit(&self, exit_code: i32) -> bool { if !self.only_on_exit.is_empty() && !self.only_on_exit.contains(&exit_code) { return true; @@ -245,7 +261,8 @@ impl CompiledPipeline { false } - /// Apply the full 8-stage pipeline to `input`. + /// Apply the full 9-stage pipeline to `input`. + #[must_use] pub fn apply<'a>(&self, input: &'a str) -> Cow<'a, str> { // Stage 1: strip_ansi let stage1: Cow<'_, str> = if self.strip_ansi { @@ -255,25 +272,7 @@ impl CompiledPipeline { }; // Stage 2: replace (ordered, line-by-line) - let stage2: Cow<'_, str> = if self.replace.is_empty() { - stage1 - } else { - let mut out = String::with_capacity(stage1.len()); - for line in stage1.lines() { - let mut current = Cow::Borrowed(line); - for rule in &self.replace { - let replaced = rule - .pattern - .replace_all(¤t, rule.replacement.as_str()); - if let Cow::Owned(s) = replaced { - current = Cow::Owned(s); - } - } - out.push_str(¤t); - out.push('\n'); - } - Cow::Owned(out) - }; + let stage2 = apply_replaces(stage1, &self.replace); // Stage 3: match_output short-circuit if !self.match_output.is_empty() { @@ -290,51 +289,84 @@ impl CompiledPipeline { } } - // Stage 4: strip/keep lines - let stage4: Cow<'_, str> = match &self.line_filter { - CompiledLineFilter::None => stage2, - CompiledLineFilter::Strip(set) => Cow::Owned(primitives::strip_lines_regex(&stage2, set)), - CompiledLineFilter::Keep(set) => Cow::Owned(primitives::keep_lines_regex(&stage2, set)), + // Stage 4: strip/keep lines (keep AND NOT strip; absent set = no + // constraint) + let stage4: Cow<'_, str> = if self.strip_lines.is_some() || self.keep_lines.is_some() { + Cow::Owned(primitives::filter_lines_regex( + &stage2, + self.strip_lines.as_ref(), + self.keep_lines.as_ref(), + )) + } else { + stage2 }; - // Stage 5: truncate each line - let stage5: Cow<'_, str> = if let Some(n) = self.truncate_lines_at { - let mut out = String::with_capacity(stage4.len()); - for line in stage4.lines() { + // Stage 5: replace_after (ordered, line-by-line) — post-filter so + // only surviving lines are substituted, pre-truncate so shortening + // substitutions (path compaction) see the full line. + let stage5 = apply_replaces(stage4, &self.replace_after); + + // Stage 6: truncate each line + let stage6: Cow<'_, str> = if let Some(n) = self.truncate_lines_at { + let mut out = String::with_capacity(stage5.len()); + for line in stage5.lines() { out.push_str(&primitives::truncate_line(line, n)); out.push('\n'); } Cow::Owned(out) } else { - stage4 + stage5 }; - // Stage 6: head + tail - let stage6: Cow<'_, str> = match (self.head_lines, self.tail_lines) { - (Some(h), Some(t)) => Cow::Owned(primitives::head_tail_lines(&stage5, h, t)), - (Some(h), None) => Cow::Owned(primitives::head_lines_only(&stage5, h)), - (None, Some(t)) => Cow::Owned(primitives::tail_lines_only(&stage5, t)), - (None, None) => stage5, + // Stage 7: head + tail + let stage7: Cow<'_, str> = match (self.head_lines, self.tail_lines) { + (Some(h), Some(t)) => Cow::Owned(primitives::head_tail_lines(&stage6, h, t)), + (Some(h), None) => Cow::Owned(primitives::head_lines_only(&stage6, h)), + (None, Some(t)) => Cow::Owned(primitives::tail_lines_only(&stage6, t)), + (None, None) => stage6, }; - // Stage 7: max_lines - let stage7: Cow<'_, str> = if let Some(m) = self.max_lines { - Cow::Owned(primitives::max_lines(&stage6, m)) + // Stage 8: max_lines + let stage8: Cow<'_, str> = if let Some(m) = self.max_lines { + Cow::Owned(primitives::max_lines(&stage7, m)) } else { - stage6 + stage7 }; - // Stage 8: on_empty + // Stage 9: on_empty if let Some(msg) = self.on_empty.as_deref() - && stage7.trim().is_empty() + && stage8.trim().is_empty() { return Cow::Owned(msg.to_string()); } - stage7 + stage8 } } +/// Apply an ordered regex-substitution list line-by-line. Returns `input` +/// untouched (no allocation) when `rules` is empty. +fn apply_replaces<'a>(input: Cow<'a, str>, rules: &[CompiledReplace]) -> Cow<'a, str> { + if rules.is_empty() { + return input; + } + let mut out = String::with_capacity(input.len()); + for line in input.lines() { + let mut current = Cow::Borrowed(line); + for rule in rules { + let replaced = rule + .pattern + .replace_all(¤t, rule.replacement.as_str()); + if let Cow::Owned(s) = replaced { + current = Cow::Owned(s); + } + } + out.push_str(¤t); + out.push('\n'); + } + Cow::Owned(out) +} + /// Return type of [`parse_file`]: the compiled pipelines alongside their /// inline tests grouped by pipeline name. pub type ParsedPipelineFile = (Vec, Vec<(String, Vec)>); @@ -351,6 +383,7 @@ pub struct PipelineRegistry { impl PipelineRegistry { /// Find the first pipeline that claims this `(program, subcommand)` pair. + #[must_use] pub fn find(&self, program: &str, subcommand: Option<&str>) -> Option<&CompiledPipeline> { self .pipelines @@ -403,6 +436,7 @@ pub struct TestOutcome { /// Run every inline test in `registry` and return the outcomes. #[allow(dead_code, reason = "test-only API surface")] +#[must_use] pub fn run_tests(registry: &PipelineRegistry) -> Vec { let mut out = Vec::new(); for (filter_name, tests) in ®istry.tests { @@ -511,6 +545,59 @@ unless = "(?i)error|fail" assert!(out.as_ref().contains("ERROR")); } + #[test] + fn strip_and_keep_combine_as_keep_and_not_strip() { + let src = r#" +schema_version = 1 +[filters.combo] +match_command = "^combo$" +keep_lines_matching = ["^> Task "] +strip_lines_matching = ["UP-TO-DATE$"] +"#; + let pipeline = compile_one(src); + let out = pipeline.apply("> Task :a UP-TO-DATE\n> Task :b\nDownloading dep\n"); + // Only lines matching the keep set AND not the strip set survive. + assert_eq!(out.as_ref(), "> Task :b\n"); + } + + #[test] + fn replace_after_substitutes_surviving_lines_post_filter() { + let src = r#" +schema_version = 1 +[filters.paths] +match_command = "^paths$" +keep_lines_matching = ["^src/"] +[[filters.paths.replace_after]] +pattern = "^src/very/long/prefix/" +replacement = ".../" +"#; + let pipeline = compile_one(src); + // The keep filter matches the ORIGINAL line (`^src/`); if the + // substitution ran before filtering, the rewritten `.../main.rs` + // would no longer match the keep set and be dropped. + let out = pipeline.apply("src/very/long/prefix/main.rs\nnoise line\nsrc/lib.rs\n"); + assert_eq!(out.as_ref(), ".../main.rs\nsrc/lib.rs\n"); + } + + #[test] + fn replace_after_runs_before_truncate_lines_at() { + let src = r#" +schema_version = 1 +[filters.shorten] +match_command = "^shorten$" +truncate_lines_at = 12 +[[filters.shorten.replace_after]] +pattern = "^/workspace/project/deep/" +replacement = "" +"#; + let pipeline = compile_one(src); + // The raw line exceeds the 12-char cap; the substitution shortens it + // below the cap first, so no truncation marker appears. If truncation + // ran first, the pattern would no longer match the clipped line. + let out = pipeline.apply("/workspace/project/deep/file.rs\n"); + assert_eq!(out.as_ref(), "file.rs\n"); + } + #[test] fn on_empty_fires_when_output_is_blank() { let src = r#" diff --git a/crates/pi-shell/src/minimizer/plan.rs b/crates/pi-shell/src/minimizer/plan.rs index 870fa4818..c7e15dce3 100644 --- a/crates/pi-shell/src/minimizer/plan.rs +++ b/crates/pi-shell/src/minimizer/plan.rs @@ -64,6 +64,7 @@ pub enum CommandPlan { } /// Parse `command` with `brush-parser` and classify its structure. +#[must_use] pub fn analyze(command: &str) -> CommandPlan { let trimmed = command.trim(); if trimmed.is_empty() { @@ -202,10 +203,14 @@ fn io_redirect_is_safe(io: &IoRedirect) -> bool { IoFileRedirectTarget::Fd(_) => true, IoFileRedirectTarget::ProcessSubstitution(..) => false, }, - IoRedirect::HereDocument(_, here_doc) => { - !word_has_command_substitution(&here_doc.here_end) - && !word_has_command_substitution(&here_doc.doc) - }, + // Here-docs are never safe to segment. The segmented runner rebuilds + // each chain segment from the brush AST via `pipeline.to_string()`, and + // that Display impl re-emits a quoted/escaped here-doc's *closing* + // delimiter with its quotes intact (`<<'EOF'` … `'EOF'` rather than the + // required bare `EOF`). The reconstructed close tag never matches, so + // the re-run segment fails with "unterminated here document". Leave any + // here-doc-bearing command to the unsegmented single path. + IoRedirect::HereDocument(..) => false, IoRedirect::HereString(_, word) => !word_has_command_substitution(word), IoRedirect::OutputAndError(word, _) => !word_has_command_substitution(word), } @@ -417,6 +422,20 @@ mod tests { } } + #[test] + fn heredoc_chains_are_not_segmented() { + // Regression: a chain whose segment carries a here-doc must not be + // split. The segmented runner rebuilds each segment with the brush AST + // Display impl, which re-emits a quoted/escaped here-doc's closing + // delimiter with quotes (`'EOF'` rather than `EOF`); re-running that + // reconstructed segment fails with "unterminated here document". Both + // quoted and unquoted delimiters bail so the whole command runs whole. + assert_not_chain("cat <<'EOF'\nbody\nEOF\necho done"); + assert_not_chain("cat <<\"EOF\"\nbody\nEOF\necho done"); + assert_not_chain("cat < usize { match self { Self::Errors => 160, @@ -21,12 +22,14 @@ impl CapClass { } } +#[must_use] pub const fn reduced(cap: usize, by: usize) -> usize { let reduced = cap.saturating_sub(by); if reduced == 0 && cap > 0 { 1 } else { reduced } } /// Remove ANSI CSI escape sequences while preserving line endings verbatim. +#[must_use] pub fn strip_ansi(input: &str) -> String { let mut out = String::with_capacity(input.len()); let mut chars = input.chars().peekable(); @@ -46,6 +49,7 @@ pub fn strip_ansi(input: &str) -> String { } /// Collapse consecutive identical lines as `line (×N)`. +#[must_use] pub fn dedup_consecutive_lines(input: &str) -> String { let mut out = String::new(); let mut previous: Option<&str> = None; @@ -77,6 +81,7 @@ fn flush_repeated(out: &mut String, line: Option<&str>, count: usize) { } /// Keep the first `head` and last `tail` lines with an omission marker. +#[must_use] pub fn head_tail_lines(input: &str, head: usize, tail: usize) -> String { let lines: Vec<&str> = input.lines().collect(); if lines.len() <= head + tail { @@ -99,6 +104,7 @@ pub fn head_tail_lines(input: &str, head: usize, tail: usize) -> String { } /// Keep head/tail lines using a named cap class. +#[must_use] pub fn head_tail_cap(input: &str, class: CapClass) -> String { let cap = class.lines(); let head = reduced(cap, cap / 3); @@ -120,6 +126,7 @@ pub fn strip_lines(input: &str, predicates: &[fn(&str) -> bool]) -> String { } /// Group `file:line:message` style diagnostics by file. +#[must_use] pub fn group_by_file(input: &str, max_per_file: usize) -> String { let mut grouped: BTreeMap> = BTreeMap::new(); let mut ungrouped = Vec::new(); @@ -169,7 +176,52 @@ fn split_file_line(line: &str) -> Option<(&str, &str)> { Some((file, rest)) } +#[must_use] +pub fn command_has_ordered_tokens(command: &str, first: &str, second: &str) -> bool { + let mut saw_first = false; + for part in command.split_whitespace() { + if saw_first && part == second { + return true; + } + if part == first { + saw_first = true; + } + } + false +} + +#[must_use] +pub fn command_has_any_token(command: &str, tokens: &[&str]) -> bool { + command.split_whitespace().any(|part| { + tokens.iter().any(|token| { + part == *token + || part + .strip_prefix(*token) + .is_some_and(|suffix| suffix.starts_with('=')) + }) + }) +} + +/// Dedup consecutive lines then apply a 120-head / 80-tail cap. +#[must_use] +pub fn head_tail_dedup(input: &str) -> String { + head_tail_lines(&dedup_consecutive_lines(input), 120, 80) +} + +#[must_use] +pub fn is_markdown_badge_or_image(line: &str) -> bool { + line.starts_with("![") || line.starts_with("[![") || line.contains("img.shields.io") +} + +#[must_use] +pub fn is_horizontal_rule(line: &str) -> bool { + line.len() >= 3 + && line.chars().all(|ch| matches!(ch, '-' | '*' | '_' | ' ')) + && line.chars().any(|ch| matches!(ch, '-' | '*' | '_')) +} + /// Compact a long plain listing to head/tail form. +#[must_use] pub fn compact_listing(input: &str, max_lines: usize) -> String { let lines: Vec<&str> = input .lines() @@ -205,6 +257,7 @@ pub fn compact_listing(input: &str, max_lines: usize) -> String { /// /// `max_chars == 0` is treated as "drop the line"; no marker is emitted in /// that case since the caller asked for an empty result. +#[must_use] pub fn truncate_line(line: &str, max_chars: usize) -> String { if max_chars == 0 { return String::new(); @@ -227,6 +280,7 @@ pub fn truncate_line(line: &str, max_chars: usize) -> String { } /// Keep only the first `head` lines; append a summary marker when truncated. +#[must_use] pub fn head_lines_only(input: &str, head: usize) -> String { let lines: Vec<&str> = input.lines().collect(); if lines.len() <= head { @@ -245,6 +299,7 @@ pub fn head_lines_only(input: &str, head: usize) -> String { } /// Keep only the last `tail` lines; prepend a summary marker when truncated. +#[must_use] pub fn tail_lines_only(input: &str, tail: usize) -> String { let lines: Vec<&str> = input.lines().collect(); if lines.len() <= tail { @@ -263,6 +318,7 @@ pub fn tail_lines_only(input: &str, tail: usize) -> String { } /// Hard cap: keep at most `max` lines, append a truncation marker otherwise. +#[must_use] pub fn max_lines(input: &str, max: usize) -> String { let lines: Vec<&str> = input.lines().collect(); if lines.len() <= max { @@ -280,28 +336,24 @@ pub fn max_lines(input: &str, max: usize) -> String { out } -/// Drop every line matched by any regex in `set`. -pub fn strip_lines_regex(input: &str, set: ®ex::RegexSet) -> String { +/// Line filter combining an optional keep set and an optional strip set. +/// +/// A line survives iff it matches the keep set (when present) AND does not +/// match the strip set (when present) — i.e. keep is `K AND NOT S`. An +/// absent set imposes no constraint, so pure strip and pure keep filtering +/// are the degenerate single-set cases. +#[must_use] +pub fn filter_lines_regex( + input: &str, + strip: Option<®ex::RegexSet>, + keep: Option<®ex::RegexSet>, +) -> String { let mut out = String::new(); for line in input.lines() { - if set.is_match(line) { - continue; + if keep.is_none_or(|set| set.is_match(line)) && !strip.is_some_and(|set| set.is_match(line)) { + out.push_str(line); + out.push('\n'); } - out.push_str(line); - out.push('\n'); - } - out -} - -/// Keep only lines matching any regex in `set`. -pub fn keep_lines_regex(input: &str, set: ®ex::RegexSet) -> String { - let mut out = String::new(); - for line in input.lines() { - if !set.is_match(line) { - continue; - } - out.push_str(line); - out.push('\n'); } out } @@ -381,4 +433,72 @@ mod tests { fn truncate_line_max_zero_yields_empty() { assert_eq!(truncate_line("anything", 0), ""); } + + #[test] + fn filter_lines_regex_combines_keep_and_strip() { + let strip = regex::RegexSet::new(["noise"]).unwrap(); + let keep = regex::RegexSet::new(["^task"]).unwrap(); + let input = "task ok\ntask noise\nnoise only\nunrelated\n"; + + // Combined: survives iff matches keep AND NOT strip. + assert_eq!(filter_lines_regex(input, Some(&strip), Some(&keep)), "task ok\n"); + // Strip only: absent keep set imposes no constraint. + assert_eq!(filter_lines_regex(input, Some(&strip), None), "task ok\nunrelated\n"); + // Keep only: absent strip set imposes no constraint. + assert_eq!(filter_lines_regex(input, None, Some(&keep)), "task ok\ntask noise\n"); + // Neither: identity modulo trailing-newline normalization. + assert_eq!(filter_lines_regex(input, None, None), input); + } + + #[test] + fn test_command_has_ordered_tokens_basic() { + assert!(command_has_ordered_tokens("glab mr diff 42", "mr", "diff")); + assert!( + !command_has_ordered_tokens("glab diff mr 42", "mr", "diff"), + "wrong order must be false" + ); + assert!( + !command_has_ordered_tokens("glab mr", "mr", "diff"), + "missing second token must be false" + ); + } + + #[test] + fn test_command_has_ordered_tokens_first_equals_second() { + // edge case: first == second — both must appear in order + assert!(command_has_ordered_tokens("git push push", "push", "push")); + assert!( + !command_has_ordered_tokens("git push", "push", "push"), + "only one occurrence — must be false" + ); + } + + #[test] + fn test_command_has_any_token_equals_form() { + // Exact token match and non-match. + assert!(command_has_any_token("eslint --format json src", &["json"])); + assert!(!command_has_any_token("eslint --format json src", &["xml"])); + // Equals-form: --flag=value matches when the search token is the flag prefix. + assert!(command_has_any_token("eslint --format=json src", &["--format"])); + // Value-only search does NOT match an equals-form part (token is prefix, not + // suffix). + assert!( + !command_has_any_token("eslint --format=json src", &["json"]), + "value after = must not match when token is not the flag prefix" + ); + // Substring of a standalone word must not match. + assert!( + !command_has_any_token("eslint --format foobar src", &["bar"]), + "substring of a token must not match" + ); + } + + #[test] + fn test_horizontal_rule_requires_non_space() { + assert!(is_horizontal_rule("---")); + assert!(is_horizontal_rule("- - -")); + assert!(is_horizontal_rule("***")); + assert!(!is_horizontal_rule(" "), "whitespace-only must not be a rule"); + assert!(!is_horizontal_rule(" "), "short whitespace must not be a rule"); + } } diff --git a/crates/pi-shell/src/process.rs b/crates/pi-shell/src/process.rs index 8899d8134..95ec5ef20 100644 --- a/crates/pi-shell/src/process.rs +++ b/crates/pi-shell/src/process.rs @@ -805,7 +805,7 @@ mod platform { } } - fn as_raw(&self) -> Handle { + const fn as_raw(&self) -> Handle { self.raw as Handle } } @@ -932,7 +932,7 @@ mod platform { unsafe { TerminateProcess(self.handle.as_raw(), 1) != 0 } } - pub const fn group_id(&self) -> Option { + pub const fn group_id() -> Option { None } @@ -1047,7 +1047,7 @@ mod platform { } fn read_remote_unicode_string(handle: Handle, value: UnicodeString) -> Option { - if value.length == 0 || value.buffer == 0 || value.length % 2 != 0 { + if value.length == 0 || value.buffer == 0 || !value.length.is_multiple_of(2) { return None; } let code_units = usize::from(value.length) / size_of::(); @@ -1135,7 +1135,7 @@ mod platform { OwnedHandle::from_raw(snapshot) } - fn process_entry() -> PROCESSENTRY32W { + const fn process_entry() -> PROCESSENTRY32W { PROCESSENTRY32W { dwSize: mem::size_of::() as u32, cntUsage: 0, @@ -1259,16 +1259,19 @@ impl Process { } /// Operating-system process identifier for this process reference. + #[must_use] pub const fn pid(&self) -> i32 { self.inner.pid() } /// Parent process id for this process, when available. + #[must_use] pub fn ppid(&self) -> Option { self.inner.parent_pid() } /// Launch arguments for this process. + #[must_use] pub fn args(&self) -> Vec { self.inner.args() } @@ -1279,11 +1282,19 @@ impl Process { /// signal abstraction, so the `signal` argument is ignored and the entire /// tree is hard-killed via `TerminateProcess`. Defaults to the POSIX /// hard-kill signal. + #[must_use] pub fn kill_tree(&self, signal: Option) -> u32 { self.signal_tree(signal.unwrap_or(KILL_SIGNAL)) } /// Process group id for this process, when supported by the platform. + #[cfg(target_os = "windows")] + #[must_use] + pub const fn group_id(&self) -> Option { + platform::Process::group_id() + } + #[cfg(not(target_os = "windows"))] + #[must_use] pub fn group_id(&self) -> Option { self.inner.group_id() } @@ -1299,6 +1310,7 @@ impl Process { } /// Current status of this process reference. + #[must_use] pub fn status(&self) -> ProcessStatus { self.inner.status() } @@ -1351,7 +1363,7 @@ impl Process { // If self leads its own process group, also signal the group — this catches // grandchildren reparented to init when their immediate parent died inside // the descendant walk. - if let Some(pgid) = self.inner.group_id() + if let Some(pgid) = self.group_id() && pgid == self.inner.pid() { let _ = kill_process_group(pgid, signal); @@ -1463,6 +1475,7 @@ async fn wait_for_exit( /// Send `signal` to the process group `pgid`. /// Returns false when process groups are unsupported on the platform. #[allow(clippy::missing_const_for_fn, reason = "Dispatches to platform-specific implementation")] +#[must_use] pub fn kill_process_group(pgid: i32, signal: i32) -> bool { // Defense in depth: refuse to deliver a signal to the harness's own // process group. Doing so terminates the harness along with the targets. @@ -1510,6 +1523,7 @@ pub struct TerminationTargets { impl TerminationTargets { /// Create an empty target set. + #[must_use] pub fn new() -> Self { Self::default() } @@ -1533,6 +1547,7 @@ impl TerminationTargets { } /// True when no targets have been recorded. + #[must_use] pub const fn is_empty(&self) -> bool { self.pgids.is_empty() && self.processes.is_empty() } diff --git a/crates/pi-shell/src/shell.rs b/crates/pi-shell/src/shell.rs index fb500f69f..57de9b23e 100644 --- a/crates/pi-shell/src/shell.rs +++ b/crates/pi-shell/src/shell.rs @@ -490,7 +490,10 @@ async fn create_session(config: &ShellConfig) -> Result { } shell.register_builtin("sleep", builtins::builtin::()); shell.register_builtin("timeout", builtins::builtin::()); - shell.register_builtin("nohup", builtins::builtin::()); + shell.register_builtin( + "nohup", + builtins::builtin::().transparent_background_wrapper(), + ); let mut merged_path: Option = None; for (key, value) in std::env::vars() { @@ -867,7 +870,7 @@ async fn run_shell_command_segmented_chain( async fn run_shell_command_once( session: &mut ShellSessionCore, - command: String, + mut command: String, mut params: ExecutionParameters, on_chunk: Option>, cancel_token: CancellationToken, @@ -930,6 +933,7 @@ async fn run_shell_command_once( terminate_new_descendants(&baseline_descendants).await; } }); + ensure_trailing_newline_for_heredoc(&mut command); let source_info = SourceInfo::from("pi-natives:command"); let result = session .shell @@ -1091,10 +1095,12 @@ async fn run_shell_command_streams( } } }); + let mut command = options.command.clone(); + ensure_trailing_newline_for_heredoc(&mut command); let source_info = SourceInfo::from("pi-shell:streams"); let result = session .shell - .run_string(options.command.clone(), &source_info, ¶ms) + .run_string(command, &source_info, ¶ms) .await; if cancel_token.is_cancelled() { @@ -1340,10 +1346,17 @@ fn apply_env_fallback(shell: &mut BrushShell) -> Result<()> { .map_err(|err| Error::msg(format!("Failed to set env fallback: {err}"))) } +fn is_macos_malloc_stack_logging_var(key: &str) -> bool { + matches!(key, "MallocStackLogging" | "MallocStackLoggingNoCompact") +} + fn should_skip_env_var(key: &str) -> bool { if key.starts_with("BASH_FUNC_") && key.ends_with("%%") { return true; } + if is_macos_malloc_stack_logging_var(key) { + return true; + } matches!( key, @@ -1398,6 +1411,13 @@ fn should_skip_env_var(key: &str) -> bool { ) } +fn ensure_trailing_newline_for_heredoc(command: &mut String) { + if command.ends_with('\n') || !command.as_bytes().windows(2).any(|window| window == b"<<") { + return; + } + command.push('\n'); +} + const fn session_keepalive(result: &ExecutionResult) -> bool { match result.next_control_flow { ExecutionControlFlow::Normal => true, @@ -2191,6 +2211,32 @@ replace = [{ pattern = "^.+$", replacement = "PWD" }] assert_eq!(minimized.output_bytes, 9); } + /// Regression: a quoted here-doc followed by another command must execute + /// instead of failing with "unterminated here document". The minimizer's + /// segmented runner used to rebuild each segment via the brush AST Display + /// impl, which re-emitted the `<<'PY'` close tag as the quoted `'PY'` — an + /// invalid delimiter that left the body unterminated. Here-doc-bearing + /// commands now bail out of segmentation and run whole via the single path. + #[cfg(unix)] + #[tokio::test(flavor = "multi_thread")] + async fn quoted_heredoc_in_chain_runs_via_single_path() { + let root = unique_temp_dir("heredoc-chain"); + let minimizer = printf_minimizer(&root.join("minimizer.toml"), None); + let (result, output) = run_command_capture( + "/bin/cat <<'PY'\nhello $USER\nPY\nprintf 'after\\n'", + None, + Some(minimizer), + CancelToken::default(), + ) + .await; + let _ = std::fs::remove_dir_all(&root); + assert_eq!(result.exit_code, Some(0)); + // Quoted delimiter keeps the body literal ($USER unexpanded) and the + // trailing command still runs in order. + assert_eq!(output, "hello $USER\nafter\n"); + assert!(!output.contains("unterminated")); + } + #[cfg(unix)] #[tokio::test(flavor = "multi_thread")] async fn segmented_chain_exceeding_aggregate_capture_cap_stays_raw() { @@ -2491,6 +2537,7 @@ replace = [{ pattern = "^.+$", replacement = "PWD" }] ); } + #[cfg(unix)] #[tokio::test(flavor = "multi_thread")] async fn wait_accepts_last_background_process_id() { let options = ShellExecuteOptions { @@ -2507,6 +2554,7 @@ replace = [{ pattern = "^.+$", replacement = "PWD" }] assert!(!result.timed_out); } + #[cfg(unix)] #[tokio::test(flavor = "multi_thread")] async fn wait_n_p_records_completed_process_id() { let options = ShellExecuteOptions { @@ -2526,6 +2574,7 @@ replace = [{ pattern = "^.+$", replacement = "PWD" }] assert!(!result.timed_out); } + #[cfg(unix)] #[tokio::test(flavor = "multi_thread")] async fn wait_f_accepts_process_id() { let options = ShellExecuteOptions { @@ -2556,66 +2605,6 @@ replace = [{ pattern = "^.+$", replacement = "PWD" }] assert!(matches!(reason, AbortReason::Signal)); } - #[tokio::test(flavor = "multi_thread")] - async fn cancellation_aborts_internal_background_jobs() { - let unique = std::time::SystemTime::now() - .duration_since(std::time::UNIX_EPOCH) - .expect("system clock before epoch") - .as_nanos(); - let dir = - std::env::temp_dir().join(format!("pi-shell-bg-cancel-{}-{unique}", std::process::id())); - std::fs::create_dir(&dir).expect("create temp dir"); - let started = dir.join("started"); - let release = dir.join("release"); - let marker = dir.join("marker"); - - let config = ShellConfig { session_env: None, snapshot_path: None, minimizer: None }; - let mut session = create_session(&config).await.expect("create session"); - session - .shell - .set_working_dir(dir.to_string_lossy().as_ref()) - .expect("set cwd"); - - let mut params = session.shell.default_exec_params(); - params.set_fd(OpenFiles::STDIN_FD, null_file().expect("null stdin")); - params.set_fd(OpenFiles::STDOUT_FD, null_file().expect("null stdout")); - params.set_fd(OpenFiles::STDERR_FD, null_file().expect("null stderr")); - - let source_info = SourceInfo::from("pi-shell:test"); - let result = session - .shell - .run_string( - "{ echo started > started; while [ ! -f release ]; do sleep 0.05; done; echo done > \ - marker; } &", - &source_info, - ¶ms, - ) - .await - .expect("spawn background job"); - assert_eq!(exit_code(&result), 0); - - let mut background_started = false; - for _ in 0..200 { - if started.exists() { - background_started = true; - break; - } - time::sleep(Duration::from_millis(10)).await; - } - assert!(background_started, "background job did not reach its wait loop"); - - terminate_background_jobs(&mut session.shell); - std::fs::write(&release, b"").expect("release marker"); - time::sleep(Duration::from_millis(250)).await; - let marker_exists = marker.exists(); - std::fs::remove_dir_all(&dir).expect("cleanup temp dir"); - - assert!( - !marker_exists, - "internal background job survived cancellation and wrote marker after release", - ); - } - #[cfg(unix)] #[tokio::test] async fn read_output_stops_when_cancelled_before_pipe_eof() { @@ -2725,6 +2714,25 @@ replace = [{ pattern = "^.+$", replacement = "PWD" }] assert_eq!(stdout, b"prod:8080"); } + /// Quoted heredoc delimiters at EOF must behave like bash. `brush-parser` + /// currently rejects that shape unless the input stream ends with a newline, + /// which surfaced as `unterminated here document sequence; tag(s) [...]` for + /// normal paste-run Python snippets. + #[cfg(unix)] + #[tokio::test(flavor = "multi_thread")] + async fn quoted_heredoc_without_trailing_newline_runs() { + let (result, output) = run_command_capture( + "/bin/cat <<'PY'\nhello $USER\nPY", + None, + None, + CancelToken::default(), + ) + .await; + + assert_eq!(result.exit_code, Some(0)); + assert_eq!(output, "hello $USER\n"); + } + /// Regression for a Windows/macOS deadlock in /// `brush_core::interp::setup_open_file_with_contents`. The body is /// 256 KiB — well past the default pipe buffer on every platform @@ -2757,10 +2765,12 @@ replace = [{ pattern = "^.+$", replacement = "PWD" }] /// own exit status — not nohup's (`125`/`126`/`127`) error codes. #[tokio::test(flavor = "multi_thread")] async fn nohup_builtin_propagates_command_exit_code() { - let options = ShellExecuteOptions { - command: "nohup /bin/sh -c 'exit 7'".to_string(), - ..Default::default() + let command = if cfg!(windows) { + "nohup cmd /C exit 7" + } else { + "nohup /bin/sh -c 'exit 7'" }; + let options = ShellExecuteOptions { command: command.to_string(), ..Default::default() }; let result = execute_shell(options, None, CancelToken::default()) .await .expect("execute should succeed"); @@ -2769,6 +2779,36 @@ replace = [{ pattern = "^.+$", replacement = "PWD" }] assert!(!result.timed_out); } + /// `nohup` is a no-op builtin in this embedded shell, but `nohup cmd &` + /// must still behave like a process-launching background command for `$!`. + #[cfg(unix)] + #[tokio::test(flavor = "multi_thread")] + async fn nohup_background_captures_operand_pid() { + let (tx, mut rx) = mpsc::unbounded_channel::(); + let options = ShellExecuteOptions { + command: "nohup /bin/sh -c 'exit 0' >/dev/null 2>&1 & pid=$!; printf 'pid=%s\n' \ + \"$pid\"; test -n \"$pid\"" + .to_string(), + ..Default::default() + }; + let result = execute_shell(options, Some(tx), CancelToken::default()) + .await + .expect("execute should succeed"); + assert_eq!(result.exit_code, Some(0)); + assert!(!result.cancelled); + assert!(!result.timed_out); + + let mut out = String::new(); + while let Some(chunk) = rx.recv().await { + out.push_str(&chunk); + } + let pid = out + .trim() + .strip_prefix("pid=") + .expect("nohup background PID output should include pid= prefix"); + assert!(pid.parse::().is_ok_and(|pid| pid > 0), "invalid PID output: {out:?}"); + } + /// `nohup` with no operand mirrors coreutils: a `missing operand` diagnostic /// and exit code 125 (a nohup-level error, distinct from any command code). #[tokio::test(flavor = "multi_thread")] diff --git a/crates/pi-shell/tests/fixtures/minimizer/cargo/test-pass.cmd b/crates/pi-shell/tests/fixtures/minimizer/cargo/test-pass.cmd new file mode 100644 index 000000000..0967aec68 --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/cargo/test-pass.cmd @@ -0,0 +1 @@ +cargo test --workspace diff --git a/crates/pi-shell/tests/fixtures/minimizer/cargo/test-pass.raw b/crates/pi-shell/tests/fixtures/minimizer/cargo/test-pass.raw new file mode 100644 index 000000000..ec8afa85c --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/cargo/test-pass.raw @@ -0,0 +1,48 @@ + Compiling proc-macro2 v1.0.86 + Compiling unicode-ident v1.0.12 + Compiling libc v0.2.155 + Compiling autocfg v1.3.0 + Compiling quote v1.0.36 + Compiling syn v2.0.72 + Compiling serde_derive v1.0.204 + Compiling serde v1.0.204 + Compiling thiserror-impl v1.0.63 + Compiling thiserror v1.0.63 + Compiling pi-shell v0.1.0 (/home/alpha/odin/omp/crates/pi-shell) +warning: unused variable: `ctx` + --> crates/pi-shell/src/minimizer/filters/mod.rs:134:30 + | +134 | pub fn filter(ctx: &MinimizerCtx, input: &str) -> MinimizerOutput { + | ^^^ help: if this is intentional, prefix it with an underscore: `_ctx` + | + = note: `#[warn(unused_variables)]` on by default + Finished `test` profile [unoptimized + debuginfo] target(s) in 12.84s + Running unittests src/lib.rs (target/debug/deps/pi_shell-9a1b2c3d4e5f6a7b) + +running 42 tests +test minimizer::detect::tests::detects_git_status ... ok +test minimizer::detect::tests::detects_cargo_test ... ok +test minimizer::engine::tests::enabled_known_filter_minimizes ... ok +test minimizer::engine::tests::unknown_command_is_passthrough ... ok +test minimizer::filters::cargo::tests::passing_run_summarizes ... ok +test minimizer::filters::go::tests::go_test_pass_condenses ... ok +test minimizer::plan::tests::single_command_is_single ... ok +test minimizer::plan::tests::chain_splits_on_and ... ok + +test result: ok. 42 passed; 0 failed; 0 ignored; 0 measured; 0 filtered; finished in 0.31s + + Running tests/minimizer_fixtures.rs (target/debug/deps/minimizer_fixtures-1122334455667788) + +running 8 tests +test fixture_cargo_test_pass ... ok +test fixture_npm_install ... ok +test fixture_go_test_pass ... ok + +test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered; finished in 0.02s + + Doc-tests pi-shell + +running 3 tests +test crates/pi-shell/src/minimizer.rs - minimizer (line 12) ... ok + +test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered; finished in 0.45s diff --git a/crates/pi-shell/tests/fixtures/minimizer/git/log-default.cmd b/crates/pi-shell/tests/fixtures/minimizer/git/log-default.cmd new file mode 100644 index 000000000..8ba3ad024 --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/git/log-default.cmd @@ -0,0 +1 @@ +git log diff --git a/crates/pi-shell/tests/fixtures/minimizer/git/log-default.min b/crates/pi-shell/tests/fixtures/minimizer/git/log-default.min new file mode 100644 index 000000000..c4e919782 --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/git/log-default.min @@ -0,0 +1,5 @@ +8cb198e (HEAD -> main, tag: v0.22.0) + chore(master): release 0.22.0 (#201) + Release-As: 0.22.0 +393fa5b feat: add `rtk wc` command (#175) + Adds a compact word-count subcommand. diff --git a/crates/pi-shell/tests/fixtures/minimizer/git/log-default.raw b/crates/pi-shell/tests/fixtures/minimizer/git/log-default.raw new file mode 100644 index 000000000..c26f0391b --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/git/log-default.raw @@ -0,0 +1,15 @@ +commit 8cb198e4a3d2f1b5c7e9a0d4f6b8c2e1a3d5f7b9 (HEAD -> main, tag: v0.22.0) +Author: Release Bot +Date: Wed Feb 19 10:30:45 2026 +0100 + + chore(master): release 0.22.0 (#201) + + Release-As: 0.22.0 + +commit 393fa5b2c4d6e8a0b2d4f6a8c0e2d4f6a8b0c2d4 +Author: Contributor One +Date: Wed Feb 19 09:15:30 2026 +0100 + + feat: add `rtk wc` command (#175) + + Adds a compact word-count subcommand. diff --git a/crates/pi-shell/tests/fixtures/minimizer/git/log.cmd b/crates/pi-shell/tests/fixtures/minimizer/git/log.cmd new file mode 100644 index 000000000..8ba3ad024 --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/git/log.cmd @@ -0,0 +1 @@ +git log diff --git a/crates/pi-shell/tests/fixtures/minimizer/git/log.min b/crates/pi-shell/tests/fixtures/minimizer/git/log.min new file mode 100644 index 000000000..9771ce651 --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/git/log.min @@ -0,0 +1,4 @@ +8cb198e (HEAD -> main, tag: v0.22.0, origin/main) + chore(master): release 0.22.0 (#201) + Release-As: 0.22.0 +c29644b chore(master): release 0.21.1 (#179) diff --git a/crates/pi-shell/tests/fixtures/minimizer/git/log.raw b/crates/pi-shell/tests/fixtures/minimizer/git/log.raw new file mode 100644 index 000000000..05a48b1de --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/git/log.raw @@ -0,0 +1,13 @@ +commit 8cb198e4a3d2f1b5c7e9a0d4f6b8c2e1a3d5f7b9 (HEAD -> main, tag: v0.22.0, origin/main) +Author: GitHub Actions +Date: Wed Feb 19 10:30:45 2026 +0100 + + chore(master): release 0.22.0 (#201) + + Release-As: 0.22.0 + +commit c29644b3d5e7a9b1c3d5f7a9b1c3d5e7a9b1c3d5 +Author: GitHub Actions +Date: Tue Feb 18 22:45:00 2026 +0100 + + chore(master): release 0.21.1 (#179) diff --git a/crates/pi-shell/tests/fixtures/minimizer/git/status-long.cmd b/crates/pi-shell/tests/fixtures/minimizer/git/status-long.cmd new file mode 100644 index 000000000..9177a8f3e --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/git/status-long.cmd @@ -0,0 +1 @@ +git status diff --git a/crates/pi-shell/tests/fixtures/minimizer/git/status-long.min b/crates/pi-shell/tests/fixtures/minimizer/git/status-long.min new file mode 100644 index 000000000..e908f5f6c --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/git/status-long.min @@ -0,0 +1,6 @@ +branch feature/new-filters +staged 2, unstaged 1, untracked 1 +A internal/filter/kubectl.go +M internal/filter/registry.go +M README.md +?? internal/filter/npm.go diff --git a/crates/pi-shell/tests/fixtures/minimizer/git/status-long.raw b/crates/pi-shell/tests/fixtures/minimizer/git/status-long.raw new file mode 100644 index 000000000..5b5dd5a6b --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/git/status-long.raw @@ -0,0 +1,15 @@ +On branch feature/new-filters +Your branch is up to date with 'origin/feature/new-filters'. + +Changes to be committed: + (use "git restore --staged ..." to unstage) + new file: internal/filter/kubectl.go + modified: internal/filter/registry.go + +Changes not staged for commit: + (use "git add ..." to update what will be committed) + modified: README.md + +Untracked files: + (use "git add ..." to include in what will be committed) + internal/filter/npm.go diff --git a/crates/pi-shell/tests/fixtures/minimizer/git/status.cmd b/crates/pi-shell/tests/fixtures/minimizer/git/status.cmd new file mode 100644 index 000000000..9177a8f3e --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/git/status.cmd @@ -0,0 +1 @@ +git status diff --git a/crates/pi-shell/tests/fixtures/minimizer/git/status.min b/crates/pi-shell/tests/fixtures/minimizer/git/status.min new file mode 100644 index 000000000..954b12221 --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/git/status.min @@ -0,0 +1,5 @@ +branch feature/new-filters +staged 3, unstaged 0, untracked 0 +A internal/filter/kubectl.go +A internal/filter/kubectl_test.go +M internal/filter/registry.go diff --git a/crates/pi-shell/tests/fixtures/minimizer/git/status.raw b/crates/pi-shell/tests/fixtures/minimizer/git/status.raw new file mode 100644 index 000000000..48db44492 --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/git/status.raw @@ -0,0 +1,8 @@ +On branch feature/new-filters +Your branch is up to date with 'origin/feature/new-filters'. + +Changes to be committed: + (use "git restore --staged ..." to unstage) + new file: internal/filter/kubectl.go + new file: internal/filter/kubectl_test.go + modified: internal/filter/registry.go diff --git a/crates/pi-shell/tests/fixtures/minimizer/glab/ci-trace.cmd b/crates/pi-shell/tests/fixtures/minimizer/glab/ci-trace.cmd new file mode 100644 index 000000000..96f59b0b4 --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/glab/ci-trace.cmd @@ -0,0 +1 @@ +glab ci trace diff --git a/crates/pi-shell/tests/fixtures/minimizer/glab/ci-trace.raw b/crates/pi-shell/tests/fixtures/minimizer/glab/ci-trace.raw new file mode 100644 index 000000000..a65fd8123 --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/glab/ci-trace.raw @@ -0,0 +1,54 @@ +section_start:1711234567:prepare_executor[0K +Running with gitlab-runner 16.9.0 (656c1943) + on runner-abc123 system ID: r_defGHI456 +Using Docker executor with image node:20-alpine ... +Preparing the "docker" executor +Using Docker executor with image node:20-alpine ... +Running on runner-abc123-project-42-concurrent-0 via runner-host... +section_end:1711234570:prepare_executor[0K +section_start:1711234570:get_sources[0K +Getting source from Git repository +Fetching changes with git depth set to 20... +Initialized empty Git repository in /builds/acme/toolkit/.git/ +Created fresh repository. +Checking out abc12345 as main... +Skipping Git submodules setup +section_end:1711234575:get_sources[0K +section_start:1711234575:download_artifacts[0K +Downloading artifacts for build (job_id=98765)... +Downloading artifacts from coordinator... ok host=runner-host id=98765 responseStatus=200 OK token=abc123 +section_end:1711234578:download_artifacts[0K +section_start:1711234578:build_script[0K +$ npm ci +added 847 packages in 12s +$ npm run build +> acme-toolkit@3.2.1 build +> tsc && vite build +[36;1mvite v5.2.0[0m building for production... +[32m✓[0m 142 modules transformed. +[33m⚠[0m Some chunks are larger than 500 kB after minification. +dist/index.html 0.45 kB │ gzip: 0.29 kB +dist/assets/main-a1b2c3.js 156.78 kB │ gzip: 48.23 kB +dist/assets/style-d4e5f6.css 12.34 kB │ gzip: 3.45 kB +[32m✓[0m built in 4.56s +$ npm test +> acme-toolkit@3.2.1 test +> vitest run +[32m✓[0m src/utils.test.ts (3 tests) 45ms +[32m✓[0m src/api.test.ts (7 tests) 123ms +[31m✗[0m src/auth.test.ts (2 tests) 67ms + FAIL src/auth.test.ts > validateToken > should reject expired tokens + AssertionError: expected true to be false + at src/auth.test.ts:42:18 +Test Files 1 failed | 2 passed | 3 total +Tests 1 failed | 11 passed | 12 total +Duration 0.89s +section_end:1711234600:build_script[0K +section_start:1711234600:upload_artifacts[0K +Uploading artifacts... +Uploading artifacts as "archive" to coordinator... ok id=98765 responseStatus=201 Created token=abc123 +section_end:1711234605:upload_artifacts[0K +section_start:1711234605:cleanup_file_variables[0K +Cleaning up project directory and file based variables +section_end:1711234606:cleanup_file_variables[0K +[31;1mERROR: Job failed: exit code 1[0m diff --git a/crates/pi-shell/tests/fixtures/minimizer/glab/release-list.cmd b/crates/pi-shell/tests/fixtures/minimizer/glab/release-list.cmd new file mode 100644 index 000000000..2ba5bc6ac --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/glab/release-list.cmd @@ -0,0 +1 @@ +glab release list diff --git a/crates/pi-shell/tests/fixtures/minimizer/glab/release-list.min b/crates/pi-shell/tests/fixtures/minimizer/glab/release-list.min new file mode 100644 index 000000000..5dfecd7c7 --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/glab/release-list.min @@ -0,0 +1,11 @@ +Releases + v3.2.1 (about 2 days ago) + v3.2.0 (about 1 week ago) + v3.1.0 (about 3 weeks ago) + v3.0.0 (about 1 month ago) + v2.5.0 (about 3 months ago) + v2.4.1 (about 5 months ago) + v2.4.0 (about 6 months ago) + v2.3.0 (about 9 months ago) + v2.2.0 (about 1 year ago) + v2.1.0 (about 2 years ago) diff --git a/crates/pi-shell/tests/fixtures/minimizer/glab/release-list.raw b/crates/pi-shell/tests/fixtures/minimizer/glab/release-list.raw new file mode 100644 index 000000000..a919148b1 --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/glab/release-list.raw @@ -0,0 +1,13 @@ +Showing 10 releases on acme/toolkit. + +Name Tag Created +v3.2.1 v3.2.1 about 2 days ago +v3.2.0 v3.2.0 about 1 week ago +v3.1.0 v3.1.0 about 3 weeks ago +v3.0.0 v3.0.0 about 1 month ago +v2.5.0 v2.5.0 about 3 months ago +v2.4.1 v2.4.1 about 5 months ago +v2.4.0 v2.4.0 about 6 months ago +v2.3.0 v2.3.0 about 9 months ago +v2.2.0 v2.2.0 about 1 year ago +v2.1.0 v2.1.0 about 2 years ago diff --git a/crates/pi-shell/tests/fixtures/minimizer/glab/release-view.cmd b/crates/pi-shell/tests/fixtures/minimizer/glab/release-view.cmd new file mode 100644 index 000000000..2b57a73c2 --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/glab/release-view.cmd @@ -0,0 +1 @@ +glab release view v2.0 diff --git a/crates/pi-shell/tests/fixtures/minimizer/glab/release-view.raw b/crates/pi-shell/tests/fixtures/minimizer/glab/release-view.raw new file mode 100644 index 000000000..88893ee37 --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/glab/release-view.raw @@ -0,0 +1,30 @@ +Test Release v2.0 +alice_dev released this 3 days ago +abc1234 - v2.0.0 + + ## What's Changed + + - Added widget support + - Fixed authentication bug + + ### Contributors + + @alice_dev @bob_dev + + -------- + + Image: logo → https://example.com/logo.png + + + + +ASSETS +There are no assets for this release +SOURCES +https://gitlab.example.com/acme/toolkit/-/archive/v2.0.0/toolkit-v2.0.0.zip +https://gitlab.example.com/acme/toolkit/-/archive/v2.0.0/toolkit-v2.0.0.tar.gz +https://gitlab.example.com/acme/toolkit/-/archive/v2.0.0/toolkit-v2.0.0.tar.bz2 +https://gitlab.example.com/acme/toolkit/-/archive/v2.0.0/toolkit-v2.0.0.tar + + +View this release on GitLab at https://gitlab.example.com/acme/toolkit/-/releases/v2.0.0 diff --git a/crates/pi-shell/tests/fixtures/minimizer/go/test-pass.cmd b/crates/pi-shell/tests/fixtures/minimizer/go/test-pass.cmd new file mode 100644 index 000000000..09c17af6f --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/go/test-pass.cmd @@ -0,0 +1 @@ +go test -v ./... diff --git a/crates/pi-shell/tests/fixtures/minimizer/go/test-pass.raw b/crates/pi-shell/tests/fixtures/minimizer/go/test-pass.raw new file mode 100644 index 000000000..90983b4d4 --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/go/test-pass.raw @@ -0,0 +1,61 @@ +=== RUN TestParseConfig +=== PAUSE TestParseConfig +=== CONT TestParseConfig +=== RUN TestParseConfig/empty_input +=== PAUSE TestParseConfig/empty_input +=== CONT TestParseConfig/empty_input +=== RUN TestParseConfig/with_defaults +=== PAUSE TestParseConfig/with_defaults +=== CONT TestParseConfig/with_defaults +=== RUN TestParseConfig/with_overrides +=== PAUSE TestParseConfig/with_overrides +=== CONT TestParseConfig/with_overrides +--- PASS: TestParseConfig (0.00s) +=== RUN TestEncodeDecode +=== PAUSE TestEncodeDecode +=== CONT TestEncodeDecode +=== RUN TestEncodeDecode/utf8 +=== PAUSE TestEncodeDecode/utf8 +=== CONT TestEncodeDecode/utf8 +=== RUN TestEncodeDecode/binary +=== PAUSE TestEncodeDecode/binary +=== CONT TestEncodeDecode/binary +--- PASS: TestEncodeDecode (0.01s) +=== RUN TestRoundTrip +=== PAUSE TestRoundTrip +=== CONT TestRoundTrip +--- PASS: TestRoundTrip (0.02s) +PASS +ok github.com/example/project/internal/config 0.031s +=== RUN TestHandlerGet +=== PAUSE TestHandlerGet +=== CONT TestHandlerGet +=== RUN TestHandlerPost +=== PAUSE TestHandlerPost +=== CONT TestHandlerPost +=== RUN TestHandlerDelete +=== PAUSE TestHandlerDelete +=== CONT TestHandlerDelete +--- PASS: TestHandlerGet (0.00s) +--- PASS: TestHandlerPost (0.00s) +--- PASS: TestHandlerDelete (0.00s) +PASS +ok github.com/example/project/internal/server 0.044s +=== RUN TestRouterMatch +=== PAUSE TestRouterMatch +=== CONT TestRouterMatch +=== RUN TestRouterFallback +=== PAUSE TestRouterFallback +=== CONT TestRouterFallback +--- PASS: TestRouterMatch (0.00s) +--- PASS: TestRouterFallback (0.00s) +PASS +ok github.com/example/project/internal/router 0.012s +=== RUN TestMiddlewareChain +=== PAUSE TestMiddlewareChain +=== CONT TestMiddlewareChain +--- PASS: TestMiddlewareChain (0.00s) +PASS +ok github.com/example/project/internal/middleware 0.009s +? github.com/example/project/cmd/cli [no test files] +ok github.com/example/project/pkg/util 0.008s diff --git a/crates/pi-shell/tests/fixtures/minimizer/jvm/gradle-build.cmd b/crates/pi-shell/tests/fixtures/minimizer/jvm/gradle-build.cmd new file mode 100644 index 000000000..81875953f --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/jvm/gradle-build.cmd @@ -0,0 +1 @@ +./gradlew build diff --git a/crates/pi-shell/tests/fixtures/minimizer/jvm/gradle-build.raw b/crates/pi-shell/tests/fixtures/minimizer/jvm/gradle-build.raw new file mode 100644 index 000000000..9ec9b283b --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/jvm/gradle-build.raw @@ -0,0 +1,33 @@ +Starting a Gradle Daemon (subsequent builds will be faster) +Daemon will be stopped at the end of the build after running out of JVM memory + +> Configure project :app +> Task :app:preBuild UP-TO-DATE +> Task :app:generateDebugBuildConfig UP-TO-DATE +> Task :app:generateDebugResValues UP-TO-DATE +> Task :app:generateDebugResources UP-TO-DATE +> Task :app:mergeDebugResources UP-TO-DATE +> Task :app:processDebugMainManifest UP-TO-DATE +> Task :app:processDebugManifest UP-TO-DATE +> Task :app:processDebugManifestForPackage UP-TO-DATE +> Task :app:processDebugResources UP-TO-DATE +> Task :app:compileDebugKotlin UP-TO-DATE +> Task :app:compileDebugJavaWithJavac UP-TO-DATE +> Task :app:compileDebugSources UP-TO-DATE +> Task :app:lintVitalAnalyzeDebug UP-TO-DATE +> Task :app:mergeDebugShaders UP-TO-DATE +> Task :app:compileDebugShaders UP-TO-DATE +> Task :app:generateDebugAssets UP-TO-DATE +> Task :app:mergeDebugAssets UP-TO-DATE +> Task :app:mergeDebugJniLibFolders UP-TO-DATE +> Task :app:mergeDebugNativeLibs NO-SOURCE +> Task :app:stripDebugDebugSymbols NO-SOURCE +> Task :app:validateSigningDebug UP-TO-DATE +> Task :app:writeDebugAppMetadata UP-TO-DATE +> Task :app:writeDebugSigningConfigVersions UP-TO-DATE +> Task :app:packageDebug UP-TO-DATE +> Task :app:createDebugApkListingFileRedirect UP-TO-DATE +> Task :app:assembleDebug UP-TO-DATE + +BUILD SUCCESSFUL in 3s +28 actionable tasks: 28 up-to-date diff --git a/crates/pi-shell/tests/fixtures/minimizer/jvm/gradle-connected.cmd b/crates/pi-shell/tests/fixtures/minimizer/jvm/gradle-connected.cmd new file mode 100644 index 000000000..0cebb4259 --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/jvm/gradle-connected.cmd @@ -0,0 +1 @@ +./gradlew connectedAndroidTest diff --git a/crates/pi-shell/tests/fixtures/minimizer/jvm/gradle-connected.raw b/crates/pi-shell/tests/fixtures/minimizer/jvm/gradle-connected.raw new file mode 100644 index 000000000..d92a795af --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/jvm/gradle-connected.raw @@ -0,0 +1,33 @@ +Starting 2 tests on Pixel_6_API_33(AVD) - 13 +Installing APK 'app-debug.apk' on 'Pixel_6_API_33(AVD) - 13'... +Installing APK 'app-debug-androidTest.apk' on 'Pixel_6_API_33(AVD) - 13'... + +> Task :app:connectedDebugAndroidTest +INSTRUMENTATION_STATUS: class=com.example.myapp.MainActivityTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=2 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=exampleInstrumentedTest +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=com.example.myapp.MainActivityTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=2 +INSTRUMENTATION_STATUS: stream= +. +INSTRUMENTATION_STATUS: test=exampleInstrumentedTest +INSTRUMENTATION_STATUS_CODE: 0 +com.example.myapp.MainActivityTest > exampleInstrumentedTest[Pixel_6_API_33(AVD) - 13] PASSED +INSTRUMENTATION_STATUS: class=com.example.myapp.MainActivityTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: test=anotherTest +INSTRUMENTATION_STATUS_CODE: 1 +com.example.myapp.MainActivityTest > anotherTest[Pixel_6_API_33(AVD) - 13] PASSED +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= +Tests run: 2, Failures: 0 +INSTRUMENTATION_CODE: -1 + +BUILD SUCCESSFUL in 45s +3 actionable tasks: 1 executed, 2 up-to-date diff --git a/crates/pi-shell/tests/fixtures/minimizer/jvm/gradle-lint.cmd b/crates/pi-shell/tests/fixtures/minimizer/jvm/gradle-lint.cmd new file mode 100644 index 000000000..2c6103228 --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/jvm/gradle-lint.cmd @@ -0,0 +1 @@ +./gradlew lint diff --git a/crates/pi-shell/tests/fixtures/minimizer/jvm/gradle-lint.exit b/crates/pi-shell/tests/fixtures/minimizer/jvm/gradle-lint.exit new file mode 100644 index 000000000..d00491fd7 --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/jvm/gradle-lint.exit @@ -0,0 +1 @@ +1 diff --git a/crates/pi-shell/tests/fixtures/minimizer/jvm/gradle-lint.raw b/crates/pi-shell/tests/fixtures/minimizer/jvm/gradle-lint.raw new file mode 100644 index 000000000..06cf3645e --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/jvm/gradle-lint.raw @@ -0,0 +1,48 @@ +Starting a Gradle Daemon (subsequent builds will be faster) +Daemon will be stopped at the end of the build after running out of JVM memory + +> Configure project :app +> Configure project :core + +> Task :app:preBuild UP-TO-DATE +> Task :app:preDebugBuild UP-TO-DATE +> Task :app:compileDebugAidl NO-SOURCE +> Task :app:compileDebugRenderscript NO-SOURCE +> Task :app:generateDebugBuildConfig UP-TO-DATE +> Task :app:generateDebugResValues UP-TO-DATE +> Task :app:generateDebugResources UP-TO-DATE +> Task :app:mergeDebugResources UP-TO-DATE +> Task :app:processDebugMainManifest UP-TO-DATE +> Task :app:processDebugManifest UP-TO-DATE +> Task :app:processDebugManifestForPackage UP-TO-DATE +> Task :app:processDebugResources UP-TO-DATE +> Task :app:compileDebugKotlin UP-TO-DATE +> Task :app:compileDebugJavaWithJavac UP-TO-DATE +> Task :app:lintVitalAnalyzeDebug UP-TO-DATE +> Task :app:lint +Ran lint on variant debug: 0 issues found + +Wrote HTML report to file:///Users/user/MyApp/app/build/reports/lint-results-debug.html +Wrote XML report to file:///Users/user/MyApp/app/build/reports/lint-results-debug.xml + +> Task :app:lintDebug + +Ran lint on variant debug: 3 issues found + +src/main/java/com/example/myapp/MainActivity.kt:45: Error: Format string invalid [StringFormatInvalid] + String.format(getString(R.string.template), arg1, arg2) + ^ + This format string placeholder index (2) does not correspond to an argument + +src/main/java/com/example/myapp/Utils.kt:89: Warning: HardcodedText [HardcodedText] + return "Hello World" + ~~~~~~~~~~~~~ + +src/main/res/layout/activity_main.xml:15: Warning: Missing contentDescription attribute on image [ContentDescription] + Task :app:testDebugUnitTest +com.example.myapp.CalculatorTest > testAddition PASSED +com.example.myapp.CalculatorTest > testSubtraction PASSED +com.example.myapp.CalculatorTest > testMultiplication PASSED +com.example.myapp.CalculatorTest > testDivision PASSED +com.example.myapp.MainViewModelTest > loadDataSuccess PASSED +com.example.myapp.MainViewModelTest > loadDataError PASSED + +6 tests completed, 0 failed + +BUILD SUCCESSFUL in 18s +4 actionable tasks: 1 executed, 3 up-to-date diff --git a/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-install-full.cmd b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-install-full.cmd new file mode 100644 index 000000000..45eeb2146 --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-install-full.cmd @@ -0,0 +1 @@ +mvn install diff --git a/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-install-full.raw b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-install-full.raw new file mode 100644 index 000000000..1c9118196 --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-install-full.raw @@ -0,0 +1,269 @@ +[INFO] Scanning for projects... +[INFO] +[INFO] ----------------------< commons-cli:commons-cli >----------------------- +[INFO] Building Apache Commons CLI 1.11.1-SNAPSHOT +[INFO] from pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/rat/apache-rat-plugin/0.18/apache-rat-plugin-0.18.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/rat/apache-rat-plugin/0.18/apache-rat-plugin-0.18.pom (17 kB at 20 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/rat/apache-rat-project/0.18/apache-rat-project-0.18.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/rat/apache-rat-project/0.18/apache-rat-project-0.18.pom (41 kB at 773 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/apache/37/apache-37.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/apache/37/apache-37.pom (26 kB at 674 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/assertj/assertj-bom/4.0.0-M1/assertj-bom-4.0.0-M1.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/assertj/assertj-bom/4.0.0-M1/assertj-bom-4.0.0-M1.pom (3.7 kB at 108 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/junit/junit-bom/6.1.0-M1/junit-bom-6.1.0-M1.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/junit/junit-bom/6.1.0-M1/junit-bom-6.1.0-M1.pom (5.3 kB at 107 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/mockito/mockito-bom/5.22.0/mockito-bom-5.22.0.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/mockito/mockito-bom/5.22.0/mockito-bom-5.22.0.pom (3.0 kB at 87 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/rat/apache-rat-plugin/0.18/apache-rat-plugin-0.18.jar +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/rat/apache-rat-plugin/0.18/apache-rat-plugin-0.18.jar (97 kB at 1.4 MB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-artifact-plugin/3.6.1/maven-artifact-plugin-3.6.1.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-artifact-plugin/3.6.1/maven-artifact-plugin-3.6.1.pom (8.6 kB at 246 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-artifact-plugin/3.6.1/maven-artifact-plugin-3.6.1.jar +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-artifact-plugin/3.6.1/maven-artifact-plugin-3.6.1.jar (75 kB at 1.6 MB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-antrun-plugin/3.2.0/maven-antrun-plugin-3.2.0.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-antrun-plugin/3.2.0/maven-antrun-plugin-3.2.0.pom (7.7 kB at 235 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-antrun-plugin/3.2.0/maven-antrun-plugin-3.2.0.jar +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-antrun-plugin/3.2.0/maven-antrun-plugin-3.2.0.jar (41 kB at 1.2 MB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/3.5.0/maven-resources-plugin-3.5.0.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/3.5.0/maven-resources-plugin-3.5.0.pom (7.7 kB at 219 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/47/maven-plugins-47.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/47/maven-plugins-47.pom (7.2 kB at 232 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/47/maven-parent-47.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/47/maven-parent-47.pom (54 kB at 1.2 MB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/junit/junit-bom/5.14.2/junit-bom-5.14.2.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/junit/junit-bom/5.14.2/junit-bom-5.14.2.pom (5.7 kB at 202 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/3.5.0/maven-resources-plugin-3.5.0.jar +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/3.5.0/maven-resources-plugin-3.5.0.jar (32 kB at 892 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/3.15.0/maven-compiler-plugin-3.15.0.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/3.15.0/maven-compiler-plugin-3.15.0.pom (9.5 kB at 233 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/3.15.0/maven-compiler-plugin-3.15.0.jar +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/3.15.0/maven-compiler-plugin-3.15.0.jar (84 kB at 2.1 MB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/felix/maven-bundle-plugin/6.0.2/maven-bundle-plugin-6.0.2.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/felix/maven-bundle-plugin/6.0.2/maven-bundle-plugin-6.0.2.pom (11 kB at 335 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/felix/felix-parent/9/felix-parent-9.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/felix/felix-parent/9/felix-parent-9.pom (21 kB at 397 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/apache/31/apache-31.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/apache/31/apache-31.pom (24 kB at 784 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/felix/maven-bundle-plugin/6.0.2/maven-bundle-plugin-6.0.2.jar +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/felix/maven-bundle-plugin/6.0.2/maven-bundle-plugin-6.0.2.jar (213 kB at 4.8 MB/s) +[INFO] argLine set to -javaagent:/home/user/.m2/repository/org/jacoco/org.jacoco.agent/0.8.14/org.jacoco.agent-0.8.14-runtime.jar=destfile=/path/to/cli/target/jacoco.exec -XX:+EnableDynamicAgentLoading +[INFO] +[INFO] --- surefire:3.5.5:test (default-test) @ commons-cli --- +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-api/3.5.5/surefire-api-3.5.5.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-api/3.5.5/surefire-api-3.5.5.pom (3.7 kB at 142 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-logger-api/3.5.5/surefire-logger-api-3.5.5.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-logger-api/3.5.5/surefire-logger-api-3.5.5.pom (3.5 kB at 116 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-shared-utils/3.5.5/surefire-shared-utils-3.5.5.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-shared-utils/3.5.5/surefire-shared-utils-3.5.5.pom (4.0 kB at 146 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-extensions-api/3.5.5/surefire-extensions-api-3.5.5.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-extensions-api/3.5.5/surefire-extensions-api-3.5.5.pom (3.6 kB at 123 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/maven-surefire-common/3.5.5/maven-surefire-common-3.5.5.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/maven-surefire-common/3.5.5/maven-surefire-common-3.5.5.pom (7.3 kB at 280 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-booter/3.5.5/surefire-booter-3.5.5.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-booter/3.5.5/surefire-booter-3.5.5.pom (5.1 kB at 183 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-extensions-spi/3.5.5/surefire-extensions-spi-3.5.5.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-extensions-spi/3.5.5/surefire-extensions-spi-3.5.5.pom (1.7 kB at 57 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-api/3.5.5/surefire-api-3.5.5.jar +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-api/3.5.5/surefire-api-3.5.5.jar (174 kB at 5.0 MB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-logger-api/3.5.5/surefire-logger-api-3.5.5.jar +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-shared-utils/3.5.5/surefire-shared-utils-3.5.5.jar +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-extensions-api/3.5.5/surefire-extensions-api-3.5.5.jar +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/maven-surefire-common/3.5.5/maven-surefire-common-3.5.5.jar +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-booter/3.5.5/surefire-booter-3.5.5.jar +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-logger-api/3.5.5/surefire-logger-api-3.5.5.jar (14 kB at 590 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-extensions-spi/3.5.5/surefire-extensions-spi-3.5.5.jar +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-booter/3.5.5/surefire-booter-3.5.5.jar (123 kB at 3.8 MB/s) +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-extensions-api/3.5.5/surefire-extensions-api-3.5.5.jar (26 kB at 677 kB/s) +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-extensions-spi/3.5.5/surefire-extensions-spi-3.5.5.jar (8.2 kB at 178 kB/s) +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/maven-surefire-common/3.5.5/maven-surefire-common-3.5.5.jar (316 kB at 5.6 MB/s) +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-shared-utils/3.5.5/surefire-shared-utils-3.5.5.jar (3.0 MB at 12 MB/s) +[INFO] Using auto detected provider org.apache.maven.surefire.junitplatform.JUnitPlatformProvider +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-junit-platform/3.5.5/surefire-junit-platform-3.5.5.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-junit-platform/3.5.5/surefire-junit-platform-3.5.5.pom (5.2 kB at 225 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-providers/3.5.5/surefire-providers-3.5.5.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-providers/3.5.5/surefire-providers-3.5.5.pom (2.5 kB at 115 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/common-java5/3.5.5/common-java5-3.5.5.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/common-java5/3.5.5/common-java5-3.5.5.pom (3.1 kB at 113 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-engine/1.12.2/junit-platform-engine-1.12.2.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-engine/1.12.2/junit-platform-engine-1.12.2.pom (3.2 kB at 100 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-commons/1.12.2/junit-platform-commons-1.12.2.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-commons/1.12.2/junit-platform-commons-1.12.2.pom (2.8 kB at 129 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-launcher/1.12.2/junit-platform-launcher-1.12.2.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-launcher/1.12.2/junit-platform-launcher-1.12.2.pom (3.0 kB at 138 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-junit-platform/3.5.5/surefire-junit-platform-3.5.5.jar +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-junit-platform/3.5.5/surefire-junit-platform-3.5.5.jar (35 kB at 1.5 MB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/common-java5/3.5.5/common-java5-3.5.5.jar +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-engine/1.12.2/junit-platform-engine-1.12.2.jar +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-commons/1.12.2/junit-platform-commons-1.12.2.jar +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-launcher/1.12.2/junit-platform-launcher-1.12.2.jar +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/common-java5/3.5.5/common-java5-3.5.5.jar (18 kB at 766 kB/s) +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-commons/1.12.2/junit-platform-commons-1.12.2.jar (152 kB at 3.0 MB/s) +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-engine/1.12.2/junit-platform-engine-1.12.2.jar (256 kB at 4.5 MB/s) +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-launcher/1.12.2/junit-platform-launcher-1.12.2.jar (208 kB at 3.6 MB/s) +[INFO] +[INFO] ------------------------------------------------------- +[INFO] T E S T S +[INFO] ------------------------------------------------------- +[INFO] Running org.apache.commons.cli.help.UtilTest +[INFO] Tests run: 34, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.760 s -- in org.apache.commons.cli.help.UtilTest +[INFO] Running org.apache.commons.cli.help.TextStyleTest +[INFO] Tests run: 13, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.183 s -- in org.apache.commons.cli.help.TextStyleTest +[INFO] Running org.apache.commons.cli.help.TextHelpAppendableTest +[INFO] Tests run: 33, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.405 s -- in org.apache.commons.cli.help.TextHelpAppendableTest +[INFO] Running org.apache.commons.cli.help.OptionFormatterTest +[INFO] Tests run: 22, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.243 s -- in org.apache.commons.cli.help.OptionFormatterTest +[INFO] Running org.apache.commons.cli.help.HelpFormatterTest + usage: CL syntax + + Header + + Options Since Description + + Footer + + usage: CL syntax + + Header + + + Options Since Description + + Footer + +[INFO] Tests run: 16, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.378 s -- in org.apache.commons.cli.help.HelpFormatterTest +[INFO] Running org.apache.commons.cli.example.XhtmlHelpAppendableTest +[INFO] Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.080 s -- in org.apache.commons.cli.example.XhtmlHelpAppendableTest +[INFO] Running org.apache.commons.cli.example.AptHelpAppendableTest +[INFO] Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.104 s -- in org.apache.commons.cli.example.AptHelpAppendableTest +[INFO] Running org.apache.commons.cli.bug.BugsTest +[INFO] Tests run: 13, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.192 s -- in org.apache.commons.cli.bug.BugsTest +[INFO] Running org.apache.commons.cli.bug.BugCLI71Test +[INFO] Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.050 s -- in org.apache.commons.cli.bug.BugCLI71Test +[INFO] Running org.apache.commons.cli.bug.BugCLI325Test +[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.057 s -- in org.apache.commons.cli.bug.BugCLI325Test +[INFO] Running org.apache.commons.cli.bug.BugCLI312Test +[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.040 s -- in org.apache.commons.cli.bug.BugCLI312Test +[INFO] Running org.apache.commons.cli.bug.BugCLI266Test +[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.014 s -- in org.apache.commons.cli.bug.BugCLI266Test +[INFO] Running org.apache.commons.cli.bug.BugCLI265Test +[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.019 s -- in org.apache.commons.cli.bug.BugCLI265Test +[INFO] Running org.apache.commons.cli.bug.BugCLI252Test +[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.017 s -- in org.apache.commons.cli.bug.BugCLI252Test +[INFO] Running org.apache.commons.cli.bug.BugCLI18Test +[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.012 s -- in org.apache.commons.cli.bug.BugCLI18Test +[INFO] Running org.apache.commons.cli.bug.BugCLI162Test +[INFO] Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.073 s -- in org.apache.commons.cli.bug.BugCLI162Test +[INFO] Running org.apache.commons.cli.bug.BugCLI148Test +[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 s -- in org.apache.commons.cli.bug.BugCLI148Test +[INFO] Running org.apache.commons.cli.bug.BugCLI13Test +[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.011 s -- in org.apache.commons.cli.bug.BugCLI13Test +[INFO] Running org.apache.commons.cli.bug.BugCLI133Test +[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.034 s -- in org.apache.commons.cli.bug.BugCLI133Test +[INFO] Running org.apache.commons.cli.ValuesTest +[INFO] Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.157 s -- in org.apache.commons.cli.ValuesTest +[INFO] Running org.apache.commons.cli.ValueTest +[INFO] Tests run: 40, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.647 s -- in org.apache.commons.cli.ValueTest +[INFO] Running org.apache.commons.cli.UtilTest +[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.049 s -- in org.apache.commons.cli.UtilTest +[INFO] Running org.apache.commons.cli.UnrecognizedOptionExceptionTest +[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 s -- in org.apache.commons.cli.UnrecognizedOptionExceptionTest +[INFO] Running org.apache.commons.cli.TypeHandlerTest +[INFO] Tests run: 63, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.008 s -- in org.apache.commons.cli.TypeHandlerTest +[INFO] Running org.apache.commons.cli.SolrCreateToolTest +[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.012 s -- in org.apache.commons.cli.SolrCreateToolTest +[INFO] Running org.apache.commons.cli.SolrCliTest +[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 s -- in org.apache.commons.cli.SolrCliTest +[INFO] Running org.apache.commons.cli.PosixParserTest +[WARNING] Tests run: 67, Failures: 0, Errors: 0, Skipped: 10, Time elapsed: 0.283 s -- in org.apache.commons.cli.PosixParserTest +[INFO] Running org.apache.commons.cli.PatternOptionBuilderTest +Exception found converting v to desired type: java.net.MalformedURLException: unknown protocol: foo +Exception found converting d to desired type: java.lang.ClassNotFoundException: System.DateTime +Exception found converting f to desired type: java.io.FileNotFoundException: non-existing.file (No such file or directory) +Exception found converting x to desired type: java.lang.NumberFormatException: For input string: "3,5" +Exception found converting i to desired type: java.lang.NoSuchMethodException: java.util.Calendar.() +Exception found converting n to desired type: java.lang.ClassNotFoundException: System.DateTime +[INFO] Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.059 s -- in org.apache.commons.cli.PatternOptionBuilderTest +[INFO] Running org.apache.commons.cli.ParseExceptionTest +[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.008 s -- in org.apache.commons.cli.ParseExceptionTest +[INFO] Running org.apache.commons.cli.OptionsTest +[INFO] Tests run: 16, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.047 s -- in org.apache.commons.cli.OptionsTest +[INFO] Running org.apache.commons.cli.OptionValidatorTest +[INFO] Tests run: 115, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.663 s -- in org.apache.commons.cli.OptionValidatorTest +[INFO] Running org.apache.commons.cli.OptionTest +[INFO] Tests run: 23, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.178 s -- in org.apache.commons.cli.OptionTest +[INFO] Running org.apache.commons.cli.OptionGroupTest +[INFO] Tests run: 13, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.059 s -- in org.apache.commons.cli.OptionGroupTest +[INFO] Running org.apache.commons.cli.OptionCountTest +[INFO] Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.030 s -- in org.apache.commons.cli.OptionCountTest +[INFO] Running org.apache.commons.cli.OptionBuilderTest +[INFO] Tests run: 9, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.039 s -- in org.apache.commons.cli.OptionBuilderTest +[INFO] Running org.apache.commons.cli.MissingOptionExceptionTest +[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.008 s -- in org.apache.commons.cli.MissingOptionExceptionTest +[INFO] Running org.apache.commons.cli.HelpFormatterTest +[INFO] Tests run: 44, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.032 s -- in org.apache.commons.cli.HelpFormatterTest +[INFO] Running org.apache.commons.cli.GnuParserTest +[WARNING] Tests run: 67, Failures: 0, Errors: 0, Skipped: 22, Time elapsed: 0.255 s -- in org.apache.commons.cli.GnuParserTest +[INFO] Running org.apache.commons.cli.DisablePartialMatchingTest +[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 s -- in org.apache.commons.cli.DisablePartialMatchingTest +[INFO] Running org.apache.commons.cli.DeprecatedAttributesTest +[INFO] Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.016 s -- in org.apache.commons.cli.DeprecatedAttributesTest +[INFO] Running org.apache.commons.cli.DefaultParserTest +[WARNING] Tests run: 87, Failures: 0, Errors: 0, Skipped: 2, Time elapsed: 0.702 s -- in org.apache.commons.cli.DefaultParserTest +[INFO] Running org.apache.commons.cli.ConverterTests +[INFO] Tests run: 14, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.159 s -- in org.apache.commons.cli.ConverterTests +[INFO] Running org.apache.commons.cli.CommandLineTest +[INFO] Tests run: 138, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.093 s -- in org.apache.commons.cli.CommandLineTest +[INFO] Running org.apache.commons.cli.BasicParserTest +[WARNING] Tests run: 67, Failures: 0, Errors: 0, Skipped: 27, Time elapsed: 0.125 s -- in org.apache.commons.cli.BasicParserTest +[INFO] Running org.apache.commons.cli.ArgumentIsOptionTest +[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 s -- in org.apache.commons.cli.ArgumentIsOptionTest +[INFO] Running org.apache.commons.cli.ApplicationTest +[INFO] Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.017 s -- in org.apache.commons.cli.ApplicationTest +[INFO] Running org.apache.commons.cli.AlreadySelectedExceptionTest +[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.008 s -- in org.apache.commons.cli.AlreadySelectedExceptionTest +[INFO] +[INFO] Results: +[INFO] +[INFO] Tests run: 977, Failures: 0, Errors: 0, Skipped: 61 +[INFO] +[INFO] +[INFO] --- jar:3.5.0:jar (default-jar) @ commons-cli --- +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-archiver/3.6.5/maven-archiver-3.6.5.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-archiver/3.6.5/maven-archiver-3.6.5.pom (4.7 kB at 95 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/shared/maven-shared-components/45/maven-shared-components-45.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/shared/maven-shared-components/45/maven-shared-components-45.pom (3.8 kB at 90 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-archiver/4.10.2/plexus-archiver-4.10.2.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-archiver/4.10.2/plexus-archiver-4.10.2.pom (7.0 kB at 178 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus/23/plexus-23.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus/23/plexus-23.pom (31 kB at 730 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-io/3.5.1/plexus-io-3.5.1.pom +[INFO] Analyzed bundle 'commons-cli' with 45 classes +[INFO] All coverage checks have been met. +[INFO] +[INFO] --- install:3.1.4:install (default-install) @ commons-cli --- +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/resolver/maven-resolver-util/1.9.22/maven-resolver-util-1.9.22.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/resolver/maven-resolver-util/1.9.22/maven-resolver-util-1.9.22.pom (2.2 kB at 66 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/resolver/maven-resolver/1.9.22/maven-resolver-1.9.22.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/resolver/maven-resolver/1.9.22/maven-resolver-1.9.22.pom (23 kB at 783 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/resolver/maven-resolver-api/1.9.22/maven-resolver-api-1.9.22.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/resolver/maven-resolver-api/1.9.22/maven-resolver-api-1.9.22.pom (2.2 kB at 79 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/resolver/maven-resolver-util/1.9.22/maven-resolver-util-1.9.22.jar +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/resolver/maven-resolver-util/1.9.22/maven-resolver-util-1.9.22.jar (196 kB at 2.1 MB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/resolver/maven-resolver-api/1.9.22/maven-resolver-api-1.9.22.jar +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/resolver/maven-resolver-api/1.9.22/maven-resolver-api-1.9.22.jar (157 kB at 1.9 MB/s) +[INFO] Installing /path/to/cli/pom.xml to /home/user/.m2/repository/commons-cli/commons-cli/1.11.1-SNAPSHOT/commons-cli-1.11.1-SNAPSHOT.pom +[INFO] Installing /path/to/cli/target/commons-cli-1.11.1-SNAPSHOT.jar to /home/user/.m2/repository/commons-cli/commons-cli/1.11.1-SNAPSHOT/commons-cli-1.11.1-SNAPSHOT.jar +[INFO] Installing /path/to/cli/target/commons-cli-1.11.1-SNAPSHOT-tests.jar to /home/user/.m2/repository/commons-cli/commons-cli/1.11.1-SNAPSHOT/commons-cli-1.11.1-SNAPSHOT-tests.jar +[INFO] Installing /path/to/cli/target/commons-cli-1.11.1-SNAPSHOT-sources.jar to /home/user/.m2/repository/commons-cli/commons-cli/1.11.1-SNAPSHOT/commons-cli-1.11.1-SNAPSHOT-sources.jar +[INFO] Installing /path/to/cli/target/commons-cli-1.11.1-SNAPSHOT-test-sources.jar to /home/user/.m2/repository/commons-cli/commons-cli/1.11.1-SNAPSHOT/commons-cli-1.11.1-SNAPSHOT-test-sources.jar +[INFO] Installing /path/to/cli/target/commons-cli-1.11.1-SNAPSHOT-bom.xml to /home/user/.m2/repository/commons-cli/commons-cli/1.11.1-SNAPSHOT/commons-cli-1.11.1-SNAPSHOT-cyclonedx.xml +[INFO] Installing /path/to/cli/target/commons-cli-1.11.1-SNAPSHOT-bom.json to /home/user/.m2/repository/commons-cli/commons-cli/1.11.1-SNAPSHOT/commons-cli-1.11.1-SNAPSHOT-cyclonedx.json +[INFO] Installing /path/to/cli/target/site/commons-cli_commons-cli-1.11.1-SNAPSHOT.spdx.json to /home/user/.m2/repository/commons-cli/commons-cli/1.11.1-SNAPSHOT/commons-cli-1.11.1-SNAPSHOT.spdx.json +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD SUCCESS +[INFO] ------------------------------------------------------------------------ +[INFO] Total time: 01:29 min +[INFO] Finished at: 2026-05-21T15:09:26Z +[INFO] ------------------------------------------------------------------------ diff --git a/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-install-slice.cmd b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-install-slice.cmd new file mode 100644 index 000000000..45eeb2146 --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-install-slice.cmd @@ -0,0 +1 @@ +mvn install diff --git a/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-install-slice.raw b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-install-slice.raw new file mode 100644 index 000000000..c4bb76cfd --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-install-slice.raw @@ -0,0 +1,44 @@ +[INFO] Scanning for projects... +[INFO] +[INFO] ----------------------< commons-cli:commons-cli >----------------------- +[INFO] Building Apache Commons CLI 1.11.1-SNAPSHOT +[INFO] from pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- compiler:3.15.0:compile (default-compile) @ commons-cli --- +[INFO] Recompiling the module because of changed source code. +[INFO] Compiling 47 source files with javac [debug parameters release 11] to target/classes +[INFO] +[INFO] --- compiler:3.15.0:testCompile (default-testCompile) @ commons-cli --- +[INFO] Recompiling the module because of changed dependency. +[INFO] Compiling 52 source files with javac [debug parameters release 11] to target/test-classes +[INFO] +[INFO] --- surefire:3.5.5:test (default-test) @ commons-cli --- +[INFO] +[INFO] ------------------------------------------------------- +[INFO] T E S T S +[INFO] ------------------------------------------------------- +[INFO] Running org.apache.commons.cli.help.UtilTest +[INFO] Tests run: 34, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.023 s -- in org.apache.commons.cli.help.UtilTest +[INFO] Running org.apache.commons.cli.DefaultParserTest +[WARNING] Tests run: 87, Failures: 0, Errors: 0, Skipped: 2, Time elapsed: 1.023 s -- in org.apache.commons.cli.DefaultParserTest +[INFO] Running org.apache.commons.cli.AlreadySelectedExceptionTest +[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.014 s -- in org.apache.commons.cli.AlreadySelectedExceptionTest +[INFO] +[INFO] Results: +[INFO] +[INFO] Tests run: 977, Failures: 0, Errors: 0, Skipped: 61 +[INFO] +[INFO] --- jar:3.5.0:jar (default-jar) @ commons-cli --- +[INFO] Building jar: target/commons-cli-1.11.1-SNAPSHOT.jar +[INFO] +[INFO] --- install:3.1.4:install (default-install) @ commons-cli --- +[INFO] Installing pom.xml to /root/.m2/repository/commons-cli/commons-cli/1.11.1-SNAPSHOT/commons-cli-1.11.1-SNAPSHOT.pom +[INFO] Installing target/commons-cli-1.11.1-SNAPSHOT.jar to /root/.m2/repository/commons-cli/commons-cli/1.11.1-SNAPSHOT/commons-cli-1.11.1-SNAPSHOT.jar +[INFO] Installing target/commons-cli-1.11.1-SNAPSHOT-sources.jar to /root/.m2/repository/commons-cli/commons-cli/1.11.1-SNAPSHOT/commons-cli-1.11.1-SNAPSHOT-sources.jar +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD SUCCESS +[INFO] ------------------------------------------------------------------------ +[INFO] Total time: 01:29 min +[INFO] Finished at: 2026-05-21T15:13:00Z +[INFO] ------------------------------------------------------------------------ diff --git a/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-quiet-fail.cmd b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-quiet-fail.cmd new file mode 100644 index 000000000..f312693b4 --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-quiet-fail.cmd @@ -0,0 +1 @@ +mvn -q test diff --git a/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-quiet-fail.exit b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-quiet-fail.exit new file mode 100644 index 000000000..d00491fd7 --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-quiet-fail.exit @@ -0,0 +1 @@ +1 diff --git a/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-quiet-fail.raw b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-quiet-fail.raw new file mode 100644 index 000000000..ef5ecfbaf --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-quiet-fail.raw @@ -0,0 +1,27 @@ +[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.069 s <<< FAILURE! -- in x.FailTest +[ERROR] x.FailTest.this_will_fail -- Time elapsed: 0.030 s <<< FAILURE! +org.opentest4j.AssertionFailedError: deliberate failure for rtk -q filter testing ==> expected: <1> but was: <2> + at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151) + at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132) + at org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197) + at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:150) + at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:563) + at x.FailTest.this_will_fail(FailTest.java:9) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) + +[ERROR] Failures: +[ERROR] FailTest.this_will_fail:9 deliberate failure for rtk -q filter testing ==> expected: <1> but was: <2> +[ERROR] Tests run: 6, Failures: 1, Errors: 0, Skipped: 0 +[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:3.5.5:test (default-test) on project mvnq: There are test failures. +[ERROR] +[ERROR] See /tmp/mvnq/target/surefire-reports for the individual test results. +[ERROR] See dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream. +[ERROR] -> [Help 1] +[ERROR] +[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. +[ERROR] Re-run Maven using the -X switch to enable full debug logging. +[ERROR] +[ERROR] For more information about the errors and possible solutions, please read the following articles: +[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException diff --git a/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-test-fail.cmd b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-test-fail.cmd new file mode 100644 index 000000000..cd42a8f2c --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-test-fail.cmd @@ -0,0 +1 @@ +mvn test diff --git a/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-test-fail.exit b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-test-fail.exit new file mode 100644 index 000000000..d00491fd7 --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-test-fail.exit @@ -0,0 +1 @@ +1 diff --git a/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-test-fail.raw b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-test-fail.raw new file mode 100644 index 000000000..4af9af21a --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-test-fail.raw @@ -0,0 +1,46 @@ +[INFO] Scanning for projects... +[INFO] +[INFO] ----------------------< commons-cli:commons-cli >----------------------- +[INFO] Building Apache Commons CLI 1.11.1-SNAPSHOT +[INFO] from pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- surefire:3.5.5:test (default-test) @ commons-cli --- +[INFO] +[INFO] ------------------------------------------------------- +[INFO] T E S T S +[INFO] ------------------------------------------------------- +[INFO] Running org.apache.commons.cli.SolrCliTest +[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 s -- in org.apache.commons.cli.SolrCliTest +[INFO] Running org.apache.commons.cli.RtkInducedFailTest +[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.033 s <<< FAILURE! -- in org.apache.commons.cli.RtkInducedFailTest +[ERROR] org.apache.commons.cli.RtkInducedFailTest.rtkInducedFailure -- Time elapsed: 0.025 s <<< FAILURE! +org.opentest4j.AssertionFailedError: expected: but was: + at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151) + at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132) + at org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197) + at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182) + at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:177) + at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:1145) + at org.apache.commons.cli.RtkInducedFailTest.rtkInducedFailure(RtkInducedFailTest.java:25) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) + +[INFO] Running org.apache.commons.cli.PatternOptionBuilderTest +[INFO] Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.066 s -- in org.apache.commons.cli.PatternOptionBuilderTest +[INFO] +[INFO] Results: +[INFO] +[ERROR] Failures: +[ERROR] RtkInducedFailTest.rtkInducedFailure:25 expected: but was: +[INFO] +[ERROR] Tests run: 978, Failures: 1, Errors: 0, Skipped: 61 +[INFO] +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD FAILURE +[INFO] ------------------------------------------------------------------------ +[INFO] Total time: 01:05 min +[INFO] Finished at: 2026-05-21T14:57:09Z +[INFO] ------------------------------------------------------------------------ +[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:3.5.5:test (default-test) on project commons-cli: There are test failures. diff --git a/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-test-pass-full.cmd b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-test-pass-full.cmd new file mode 100644 index 000000000..cd42a8f2c --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-test-pass-full.cmd @@ -0,0 +1 @@ +mvn test diff --git a/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-test-pass-full.raw b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-test-pass-full.raw new file mode 100644 index 000000000..7271e29e0 --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-test-pass-full.raw @@ -0,0 +1,247 @@ +[INFO] Scanning for projects... +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/100/commons-parent-100.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/100/commons-parent-100.pom (79 kB at 104 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/apache/38/apache-38.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/apache/38/apache-38.pom (26 kB at 776 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/junit/junit-bom/5.14.3/junit-bom-5.14.3.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/junit/junit-bom/5.14.3/junit-bom-5.14.3.pom (5.7 kB at 162 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/mockito/mockito-bom/4.11.0/mockito-bom-4.11.0.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/mockito/mockito-bom/4.11.0/mockito-bom-4.11.0.pom (3.2 kB at 117 kB/s) +[INFO] +[INFO] ----------------------< commons-cli:commons-cli >----------------------- +[INFO] Building Apache Commons CLI 1.11.1-SNAPSHOT +[INFO] from pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-remote-resources-plugin/3.3.0/maven-remote-resources-plugin-3.3.0.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-remote-resources-plugin/3.3.0/maven-remote-resources-plugin-3.3.0.pom (15 kB at 261 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/43/maven-plugins-43.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/43/maven-plugins-43.pom (7.5 kB at 267 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/43/maven-parent-43.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/43/maven-parent-43.pom (50 kB at 1.4 MB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/apache/33/apache-33.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/apache/33/apache-33.pom (24 kB at 691 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/junit/junit-bom/5.10.3/junit-bom-5.10.3.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/junit/junit-bom/5.10.3/junit-bom-5.10.3.pom (5.6 kB at 149 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-remote-resources-plugin/3.3.0/maven-remote-resources-plugin-3.3.0.jar +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-remote-resources-plugin/3.3.0/maven-remote-resources-plugin-3.3.0.jar (83 kB at 1.2 MB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/3.6.2/maven-enforcer-plugin-3.6.2.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/3.6.2/maven-enforcer-plugin-3.6.2.pom (8.2 kB at 234 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/3.6.2/enforcer-3.6.2.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/enforcer/enforcer/3.6.2/enforcer-3.6.2.pom (9.2 kB at 195 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/45/maven-parent-45.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/45/maven-parent-45.pom (53 kB at 1.4 MB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/apache/35/apache-35.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/apache/35/apache-35.pom (24 kB at 655 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/junit/junit-bom/5.13.1/junit-bom-5.13.1.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/junit/junit-bom/5.13.1/junit-bom-5.13.1.pom (5.6 kB at 188 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/3.6.2/maven-enforcer-plugin-3.6.2.jar +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-enforcer-plugin/3.6.2/maven-enforcer-plugin-3.6.2.jar (40 kB at 1.3 MB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-jar-plugin/3.5.0/maven-jar-plugin-3.5.0.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-jar-plugin/3.5.0/maven-jar-plugin-3.5.0.pom (7.6 kB at 207 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/45/maven-plugins-45.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/45/maven-plugins-45.pom (8.4 kB at 239 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-jar-plugin/3.5.0/maven-jar-plugin-3.5.0.jar +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-jar-plugin/3.5.0/maven-jar-plugin-3.5.0.jar (35 kB at 974 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-source-plugin/3.4.0/maven-source-plugin-3.4.0.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-source-plugin/3.4.0/maven-source-plugin-3.4.0.pom (6.8 kB at 143 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-source-plugin/3.4.0/maven-source-plugin-3.4.0.jar +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-source-plugin/3.4.0/maven-source-plugin-3.4.0.jar (33 kB at 701 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/mojo/build-helper-maven-plugin/3.6.1/build-helper-maven-plugin-3.6.1.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/codehaus/mojo/build-helper-maven-plugin/3.6.1/build-helper-maven-plugin-3.6.1.pom (8.1 kB at 198 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.core/0.8.14/org.jacoco.core-0.8.14.jar +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm/9.9/asm-9.9.jar +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/9.9/asm-commons-9.9.jar +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/9.9/asm-tree-9.9.jar +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm/9.9/asm-9.9.jar (126 kB at 3.2 MB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.report/0.8.14/org.jacoco.report-0.8.14.jar +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/9.9/asm-tree-9.9.jar (52 kB at 1.5 MB/s) +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/9.9/asm-commons-9.9.jar (74 kB at 1.3 MB/s) +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.core/0.8.14/org.jacoco.core-0.8.14.jar (230 kB at 3.5 MB/s) +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.report/0.8.14/org.jacoco.report-0.8.14.jar (131 kB at 2.5 MB/s) +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.agent/0.8.14/org.jacoco.agent-0.8.14-runtime.jar (307 kB at 2.5 MB/s) +[INFO] argLine set to -javaagent:/home/user/.m2/repository/org/jacoco/org.jacoco.agent/0.8.14/org.jacoco.agent-0.8.14-runtime.jar=destfile=/path/to/cli/target/jacoco.exec -XX:+EnableDynamicAgentLoading +[INFO] +[INFO] --- surefire:3.5.5:test (default-test) @ commons-cli --- +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-api/3.5.5/surefire-api-3.5.5.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-api/3.5.5/surefire-api-3.5.5.pom (3.7 kB at 88 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-logger-api/3.5.5/surefire-logger-api-3.5.5.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-logger-api/3.5.5/surefire-logger-api-3.5.5.pom (3.5 kB at 100 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-shared-utils/3.5.5/surefire-shared-utils-3.5.5.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-shared-utils/3.5.5/surefire-shared-utils-3.5.5.pom (4.0 kB at 94 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-extensions-api/3.5.5/surefire-extensions-api-3.5.5.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-extensions-api/3.5.5/surefire-extensions-api-3.5.5.pom (3.6 kB at 105 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/maven-surefire-common/3.5.5/maven-surefire-common-3.5.5.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/maven-surefire-common/3.5.5/maven-surefire-common-3.5.5.pom (7.3 kB at 208 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-booter/3.5.5/surefire-booter-3.5.5.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-booter/3.5.5/surefire-booter-3.5.5.pom (5.1 kB at 150 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-extensions-spi/3.5.5/surefire-extensions-spi-3.5.5.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-extensions-spi/3.5.5/surefire-extensions-spi-3.5.5.pom (1.7 kB at 45 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-api/3.5.5/surefire-api-3.5.5.jar +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-api/3.5.5/surefire-api-3.5.5.jar (174 kB at 2.5 MB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-logger-api/3.5.5/surefire-logger-api-3.5.5.jar +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-shared-utils/3.5.5/surefire-shared-utils-3.5.5.jar +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-extensions-api/3.5.5/surefire-extensions-api-3.5.5.jar +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/maven-surefire-common/3.5.5/maven-surefire-common-3.5.5.jar +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-booter/3.5.5/surefire-booter-3.5.5.jar +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-logger-api/3.5.5/surefire-logger-api-3.5.5.jar (14 kB at 502 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-extensions-spi/3.5.5/surefire-extensions-spi-3.5.5.jar +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-extensions-api/3.5.5/surefire-extensions-api-3.5.5.jar (26 kB at 735 kB/s) +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-booter/3.5.5/surefire-booter-3.5.5.jar (123 kB at 3.6 MB/s) +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-extensions-spi/3.5.5/surefire-extensions-spi-3.5.5.jar (8.2 kB at 167 kB/s) +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/maven-surefire-common/3.5.5/maven-surefire-common-3.5.5.jar (316 kB at 6.2 MB/s) +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-shared-utils/3.5.5/surefire-shared-utils-3.5.5.jar (3.0 MB at 12 MB/s) +[INFO] Using auto detected provider org.apache.maven.surefire.junitplatform.JUnitPlatformProvider +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-junit-platform/3.5.5/surefire-junit-platform-3.5.5.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-junit-platform/3.5.5/surefire-junit-platform-3.5.5.pom (5.2 kB at 144 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-providers/3.5.5/surefire-providers-3.5.5.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-providers/3.5.5/surefire-providers-3.5.5.pom (2.5 kB at 75 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/common-java5/3.5.5/common-java5-3.5.5.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/common-java5/3.5.5/common-java5-3.5.5.pom (3.1 kB at 76 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-engine/1.12.2/junit-platform-engine-1.12.2.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-engine/1.12.2/junit-platform-engine-1.12.2.pom (3.2 kB at 73 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-commons/1.12.2/junit-platform-commons-1.12.2.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-commons/1.12.2/junit-platform-commons-1.12.2.pom (2.8 kB at 67 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-launcher/1.12.2/junit-platform-launcher-1.12.2.pom +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-launcher/1.12.2/junit-platform-launcher-1.12.2.pom (3.0 kB at 92 kB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-junit-platform/3.5.5/surefire-junit-platform-3.5.5.jar +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-junit-platform/3.5.5/surefire-junit-platform-3.5.5.jar (35 kB at 1.3 MB/s) +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/common-java5/3.5.5/common-java5-3.5.5.jar +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-engine/1.12.2/junit-platform-engine-1.12.2.jar +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-commons/1.12.2/junit-platform-commons-1.12.2.jar +[INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-launcher/1.12.2/junit-platform-launcher-1.12.2.jar +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/common-java5/3.5.5/common-java5-3.5.5.jar (18 kB at 587 kB/s) +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-engine/1.12.2/junit-platform-engine-1.12.2.jar (256 kB at 4.7 MB/s) +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-launcher/1.12.2/junit-platform-launcher-1.12.2.jar (208 kB at 4.4 MB/s) +[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-commons/1.12.2/junit-platform-commons-1.12.2.jar (152 kB at 2.8 MB/s) +[INFO] +[INFO] ------------------------------------------------------- +[INFO] T E S T S +[INFO] ------------------------------------------------------- +[INFO] Running org.apache.commons.cli.help.UtilTest +[INFO] Tests run: 34, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.023 s -- in org.apache.commons.cli.help.UtilTest +[INFO] Running org.apache.commons.cli.help.TextStyleTest +[INFO] Tests run: 13, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.240 s -- in org.apache.commons.cli.help.TextStyleTest +[INFO] Running org.apache.commons.cli.help.TextHelpAppendableTest +[INFO] Tests run: 33, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.444 s -- in org.apache.commons.cli.help.TextHelpAppendableTest +[INFO] Running org.apache.commons.cli.help.OptionFormatterTest +[INFO] Tests run: 22, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.200 s -- in org.apache.commons.cli.help.OptionFormatterTest +[INFO] Running org.apache.commons.cli.help.HelpFormatterTest + usage: CL syntax + + Header + + Options Since Description + + Footer + + usage: CL syntax + + Header + + + Options Since Description + + Footer + +[INFO] Tests run: 16, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.410 s -- in org.apache.commons.cli.help.HelpFormatterTest +[INFO] Running org.apache.commons.cli.example.XhtmlHelpAppendableTest +[INFO] Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.084 s -- in org.apache.commons.cli.example.XhtmlHelpAppendableTest +[INFO] Running org.apache.commons.cli.example.AptHelpAppendableTest +[INFO] Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.103 s -- in org.apache.commons.cli.example.AptHelpAppendableTest +[INFO] Running org.apache.commons.cli.bug.BugsTest +[INFO] Tests run: 13, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.196 s -- in org.apache.commons.cli.bug.BugsTest +[INFO] Running org.apache.commons.cli.bug.BugCLI71Test +[INFO] Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.045 s -- in org.apache.commons.cli.bug.BugCLI71Test +[INFO] Running org.apache.commons.cli.bug.BugCLI325Test +[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.023 s -- in org.apache.commons.cli.bug.BugCLI325Test +[INFO] Running org.apache.commons.cli.bug.BugCLI312Test +[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.056 s -- in org.apache.commons.cli.bug.BugCLI312Test +[INFO] Running org.apache.commons.cli.bug.BugCLI266Test +[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.011 s -- in org.apache.commons.cli.bug.BugCLI266Test +[INFO] Running org.apache.commons.cli.bug.BugCLI265Test +[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.014 s -- in org.apache.commons.cli.bug.BugCLI265Test +[INFO] Running org.apache.commons.cli.bug.BugCLI252Test +[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.042 s -- in org.apache.commons.cli.bug.BugCLI252Test +[INFO] Running org.apache.commons.cli.bug.BugCLI18Test +[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 s -- in org.apache.commons.cli.bug.BugCLI18Test +[INFO] Running org.apache.commons.cli.bug.BugCLI162Test +[INFO] Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.100 s -- in org.apache.commons.cli.bug.BugCLI162Test +[INFO] Running org.apache.commons.cli.bug.BugCLI148Test +[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.016 s -- in org.apache.commons.cli.bug.BugCLI148Test +[INFO] Running org.apache.commons.cli.bug.BugCLI13Test +[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.015 s -- in org.apache.commons.cli.bug.BugCLI13Test +[INFO] Running org.apache.commons.cli.bug.BugCLI133Test +[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.010 s -- in org.apache.commons.cli.bug.BugCLI133Test +[INFO] Running org.apache.commons.cli.ValuesTest +[INFO] Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.125 s -- in org.apache.commons.cli.ValuesTest +[INFO] Running org.apache.commons.cli.ValueTest +[INFO] Tests run: 40, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.449 s -- in org.apache.commons.cli.ValueTest +[INFO] Running org.apache.commons.cli.UtilTest +[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.008 s -- in org.apache.commons.cli.UtilTest +[INFO] Running org.apache.commons.cli.UnrecognizedOptionExceptionTest +[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 s -- in org.apache.commons.cli.UnrecognizedOptionExceptionTest +[INFO] Running org.apache.commons.cli.TypeHandlerTest +[INFO] Tests run: 63, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.911 s -- in org.apache.commons.cli.TypeHandlerTest +[INFO] Running org.apache.commons.cli.SolrCreateToolTest +[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.015 s -- in org.apache.commons.cli.SolrCreateToolTest +[INFO] Running org.apache.commons.cli.SolrCliTest +[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 s -- in org.apache.commons.cli.SolrCliTest +[INFO] Running org.apache.commons.cli.PosixParserTest +[WARNING] Tests run: 67, Failures: 0, Errors: 0, Skipped: 10, Time elapsed: 0.296 s -- in org.apache.commons.cli.PosixParserTest +[INFO] Running org.apache.commons.cli.PatternOptionBuilderTest +Exception found converting v to desired type: java.net.MalformedURLException: unknown protocol: foo +Exception found converting d to desired type: java.lang.ClassNotFoundException: System.DateTime +Exception found converting f to desired type: java.io.FileNotFoundException: non-existing.file (No such file or directory) +Exception found converting x to desired type: java.lang.NumberFormatException: For input string: "3,5" +Exception found converting i to desired type: java.lang.NoSuchMethodException: java.util.Calendar.() +Exception found converting n to desired type: java.lang.ClassNotFoundException: System.DateTime +[INFO] Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.087 s -- in org.apache.commons.cli.PatternOptionBuilderTest +[INFO] Running org.apache.commons.cli.ParseExceptionTest +[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 s -- in org.apache.commons.cli.ParseExceptionTest +[INFO] Running org.apache.commons.cli.OptionsTest +[INFO] Tests run: 16, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.092 s -- in org.apache.commons.cli.OptionsTest +[INFO] Running org.apache.commons.cli.OptionValidatorTest +[INFO] Tests run: 115, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.499 s -- in org.apache.commons.cli.OptionValidatorTest +[INFO] Running org.apache.commons.cli.OptionTest +[INFO] Tests run: 23, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.136 s -- in org.apache.commons.cli.OptionTest +[INFO] Running org.apache.commons.cli.OptionGroupTest +[INFO] Tests run: 13, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.057 s -- in org.apache.commons.cli.OptionGroupTest +[INFO] Running org.apache.commons.cli.OptionCountTest +[INFO] Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.015 s -- in org.apache.commons.cli.OptionCountTest +[INFO] Running org.apache.commons.cli.OptionBuilderTest +[INFO] Tests run: 9, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.016 s -- in org.apache.commons.cli.OptionBuilderTest +[INFO] Running org.apache.commons.cli.MissingOptionExceptionTest +[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.044 s -- in org.apache.commons.cli.MissingOptionExceptionTest +[INFO] Running org.apache.commons.cli.HelpFormatterTest +[INFO] Tests run: 44, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.691 s -- in org.apache.commons.cli.HelpFormatterTest +[INFO] Running org.apache.commons.cli.GnuParserTest +[WARNING] Tests run: 67, Failures: 0, Errors: 0, Skipped: 22, Time elapsed: 0.336 s -- in org.apache.commons.cli.GnuParserTest +[INFO] Running org.apache.commons.cli.DisablePartialMatchingTest +[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.019 s -- in org.apache.commons.cli.DisablePartialMatchingTest +[INFO] Running org.apache.commons.cli.DeprecatedAttributesTest +[INFO] Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 s -- in org.apache.commons.cli.DeprecatedAttributesTest +[INFO] Running org.apache.commons.cli.DefaultParserTest +[WARNING] Tests run: 87, Failures: 0, Errors: 0, Skipped: 2, Time elapsed: 1.023 s -- in org.apache.commons.cli.DefaultParserTest +[INFO] Running org.apache.commons.cli.ConverterTests +[INFO] Tests run: 14, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.204 s -- in org.apache.commons.cli.ConverterTests +[INFO] Running org.apache.commons.cli.CommandLineTest +[INFO] Tests run: 138, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.091 s -- in org.apache.commons.cli.CommandLineTest +[INFO] Running org.apache.commons.cli.BasicParserTest +[WARNING] Tests run: 67, Failures: 0, Errors: 0, Skipped: 27, Time elapsed: 0.124 s -- in org.apache.commons.cli.BasicParserTest +[INFO] Running org.apache.commons.cli.ArgumentIsOptionTest +[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.019 s -- in org.apache.commons.cli.ArgumentIsOptionTest +[INFO] Running org.apache.commons.cli.ApplicationTest +[INFO] Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.020 s -- in org.apache.commons.cli.ApplicationTest +[INFO] Running org.apache.commons.cli.AlreadySelectedExceptionTest +[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.014 s -- in org.apache.commons.cli.AlreadySelectedExceptionTest +[INFO] +[INFO] Results: +[INFO] +[INFO] Tests run: 977, Failures: 0, Errors: 0, Skipped: 61 +[INFO] +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD SUCCESS +[INFO] ------------------------------------------------------------------------ +[INFO] Total time: 01:14 min +[INFO] Finished at: 2026-05-21T14:54:30Z +[INFO] ------------------------------------------------------------------------ diff --git a/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-test-pass-slice.cmd b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-test-pass-slice.cmd new file mode 100644 index 000000000..cd42a8f2c --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-test-pass-slice.cmd @@ -0,0 +1 @@ +mvn test diff --git a/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-test-pass-slice.raw b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-test-pass-slice.raw new file mode 100644 index 000000000..99c782416 --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/jvm/mvn-test-pass-slice.raw @@ -0,0 +1,33 @@ +[INFO] Scanning for projects... +[INFO] +[INFO] ----------------------< commons-cli:commons-cli >----------------------- +[INFO] Building Apache Commons CLI 1.11.1-SNAPSHOT +[INFO] from pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- surefire:3.5.5:test (default-test) @ commons-cli --- +[INFO] +[INFO] ------------------------------------------------------- +[INFO] T E S T S +[INFO] ------------------------------------------------------- +[INFO] Running org.apache.commons.cli.help.UtilTest +[INFO] Tests run: 34, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.023 s -- in org.apache.commons.cli.help.UtilTest +[INFO] Running org.apache.commons.cli.help.TextStyleTest +[INFO] Tests run: 13, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.240 s -- in org.apache.commons.cli.help.TextStyleTest +[INFO] Running org.apache.commons.cli.DefaultParserTest +[WARNING] Tests run: 87, Failures: 0, Errors: 0, Skipped: 2, Time elapsed: 1.023 s -- in org.apache.commons.cli.DefaultParserTest +[INFO] Running org.apache.commons.cli.ConverterTests +[INFO] Tests run: 14, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.204 s -- in org.apache.commons.cli.ConverterTests +[INFO] Running org.apache.commons.cli.AlreadySelectedExceptionTest +[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.014 s -- in org.apache.commons.cli.AlreadySelectedExceptionTest +[INFO] +[INFO] Results: +[INFO] +[INFO] Tests run: 977, Failures: 0, Errors: 0, Skipped: 61 +[INFO] +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD SUCCESS +[INFO] ------------------------------------------------------------------------ +[INFO] Total time: 01:14 min +[INFO] Finished at: 2026-05-21T14:54:30Z +[INFO] ------------------------------------------------------------------------ diff --git a/crates/pi-shell/tests/fixtures/minimizer/npm/install.cmd b/crates/pi-shell/tests/fixtures/minimizer/npm/install.cmd new file mode 100644 index 000000000..5fdd18ffd --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/npm/install.cmd @@ -0,0 +1 @@ +npm install diff --git a/crates/pi-shell/tests/fixtures/minimizer/npm/install.raw b/crates/pi-shell/tests/fixtures/minimizer/npm/install.raw new file mode 100644 index 000000000..807d836f7 --- /dev/null +++ b/crates/pi-shell/tests/fixtures/minimizer/npm/install.raw @@ -0,0 +1,29 @@ +npm http fetch GET 200 https://registry.npmjs.org/react 142ms +npm http fetch GET 200 https://registry.npmjs.org/react-dom 138ms +npm http fetch GET 200 https://registry.npmjs.org/lodash 95ms +npm http fetch GET 200 https://registry.npmjs.org/webpack 210ms +npm http fetch GET 200 https://registry.npmjs.org/typescript 188ms +npm http fetch GET 200 https://registry.npmjs.org/eslint 176ms +npm http fetch GET 200 https://registry.npmjs.org/jest 201ms +npm http fetch GET 200 https://registry.npmjs.org/babel-core 165ms +Progress: resolved 1 / 1248, reused 0, downloaded 1, added 0 +Progress: resolved 312 / 1248, reused 120, downloaded 192, added 64 +Progress: resolved 640 / 1248, reused 280, downloaded 360, added 210 +Progress: resolved 980 / 1248, reused 510, downloaded 470, added 540 +Progress: resolved 1248 / 1248, reused 800, downloaded 448, added 1248 +npm warn deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. +npm warn deprecated rimraf@2.7.1: Rimraf versions prior to v4 are no longer supported. +npm warn deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported. +npm notice +npm notice New major version of npm available! 9.8.1 -> 10.2.4 +npm notice Changelog: https://github.com/npm/cli/releases/tag/v10.2.4 +npm notice Run npm install -g npm@10.2.4 to update! +npm notice +resolved 1248 packages in 8s +reused 800, downloaded 448, added 1248 +added 1248 packages, and audited 1249 packages in 14s + +142 packages are looking for funding + run `npm fund` for details + +found 0 vulnerabilities diff --git a/crates/pi-shell/tests/minimizer_fixtures.rs b/crates/pi-shell/tests/minimizer_fixtures.rs new file mode 100644 index 000000000..b2905b780 --- /dev/null +++ b/crates/pi-shell/tests/minimizer_fixtures.rs @@ -0,0 +1,249 @@ +//! End-to-end fixture harness for the output minimizer with a token-savings +//! gate. +//! +//! Each fixture is a `/` pair on disk under +//! `tests/fixtures/minimizer/`: +//! +//! - `.cmd` — the full command line (one line; required). +//! - `.raw` — the raw captured output fed to the minimizer (required). +//! - `.exit` — integer exit code (optional; defaults to 0). +//! - `.min` — expected minimized snapshot (optional, see gate below). +//! +//! Gate per fixture (`raw` measured in bytes): +//! +//! - `raw.len() >= 500`: assert `minimized.len() <= 0.40 * raw.len()` — the +//! savings gate. A short output is not worth a filter round-trip, so the gate +//! only applies to buffers large enough to matter. +//! - `raw.len() < 500`: a `.min` snapshot is REQUIRED and must match exactly. +//! Small buffers cannot meaningfully clear a ratio gate, so they are pinned +//! by an exact snapshot instead. +//! - `.min` present alongside a `>= 500`-byte raw: assert BOTH the savings gate +//! and the exact snapshot. +//! +//! All fixture failures are collected before the harness panics so a single run +//! reports every regression, not just the first. + +use std::{fmt::Write as _, fs, path::Path}; + +use pi_shell::minimizer::{self, MinimizerConfig}; + +/// Byte-savings gate: minimized output must be at most this fraction of the raw +/// input for buffers large enough to be worth filtering. +const SAVINGS_RATIO: f64 = 0.40; + +/// Raw buffers below this byte length are pinned by an exact `.min` snapshot +/// instead of the ratio gate. +const GATE_MIN_BYTES: usize = 500; + +/// A single discovered fixture: the `.cmd`/`.raw` pair plus its optional +/// `.exit` and `.min` companions. +struct Fixture { + /// `/` — used only for human-readable failure reports. + name: String, + command: String, + raw: String, + exit: i32, + expected: Option, +} + +#[test] +fn minimizer_fixtures_clear_savings_gate() { + let root = fixtures_root(); + let fixtures = discover_fixtures(&root); + + // A silently-empty harness is worse than none: if the fixtures tree is + // missing or holds no `.cmd` cases, fail loudly rather than passing on zero + // assertions. + assert!( + !fixtures.is_empty(), + "no minimizer fixtures discovered under {}: the harness must run against at least one \ + fixture (a silently-empty gate is worse than none)", + root.display() + ); + + let cfg = MinimizerConfig { enabled: true, max_capture_bytes: u32::MAX, ..Default::default() }; + let mut failures: Vec = Vec::new(); + + for fixture in &fixtures { + if let Err(report) = check_fixture(fixture, &cfg) { + failures.push(report); + } + } + + assert!( + failures.is_empty(), + "{} of {} minimizer fixture(s) failed:\n\n{}", + failures.len(), + fixtures.len(), + failures.join("\n\n") + ); +} + +/// Run the minimizer on one fixture and apply the gate. Returns `Err(report)` +/// with a human-readable failure description (fixture name, ratio, diff +/// excerpt) on any violation so the caller can collect every failure. +fn check_fixture(fixture: &Fixture, cfg: &MinimizerConfig) -> Result<(), String> { + let out = minimizer::apply(&fixture.command, &fixture.raw, fixture.exit, cfg); + let minimized = out.text.as_str(); + + let raw_len = fixture.raw.len(); + let min_len = minimized.len(); + let ratio = if raw_len == 0 { + 0.0 + } else { + min_len as f64 / raw_len as f64 + }; + + let mut problems: Vec = Vec::new(); + + if raw_len >= GATE_MIN_BYTES { + let budget = (SAVINGS_RATIO * raw_len as f64).floor() as usize; + if min_len > budget { + problems.push(format!( + "savings gate: minimized {min_len} B > {budget} B budget ({:.1}% of {raw_len} B raw, \ + limit {:.0}%)", + ratio * 100.0, + SAVINGS_RATIO * 100.0 + )); + } + // A `.min` alongside a large raw pins the exact shape too. + if let Some(expected) = &fixture.expected + && expected != minimized + { + problems.push(format!("snapshot mismatch:\n{}", diff_excerpt(expected, minimized))); + } + } else { + // Small buffers cannot meaningfully clear a ratio gate; require an exact + // snapshot instead. + match &fixture.expected { + None => problems.push(format!( + "raw is {raw_len} B (< {GATE_MIN_BYTES} B): a `.min` snapshot is required for \ + sub-threshold fixtures" + )), + Some(expected) if expected != minimized => { + problems.push(format!("snapshot mismatch:\n{}", diff_excerpt(expected, minimized))); + }, + Some(_) => {}, + } + } + + if problems.is_empty() { + Ok(()) + } else { + Err(format!( + "[{}] cmd={:?} exit={} raw={} B min={} B ratio={:.1}%\n - {}", + fixture.name, + fixture.command, + fixture.exit, + raw_len, + min_len, + ratio * 100.0, + problems.join("\n - ") + )) + } +} + +/// Render a short, line-oriented diff excerpt (first divergence plus a little +/// context) so a snapshot failure is legible without dumping both buffers. +fn diff_excerpt(expected: &str, actual: &str) -> String { + let expected_lines: Vec<&str> = expected.lines().collect(); + let actual_lines: Vec<&str> = actual.lines().collect(); + let max = expected_lines.len().max(actual_lines.len()); + + let first_diff = (0..max).find(|&i| expected_lines.get(i) != actual_lines.get(i)); + let Some(start) = first_diff else { + // Lines all match: the difference is a trailing newline / final fragment. + return format!(" expected {expected:?}\n actual {actual:?}"); + }; + + let mut excerpt = String::new(); + for i in start..(start + 3).min(max) { + let _ = write!( + excerpt, + " line {}:\n expected {:?}\n actual {:?}\n", + i + 1, + expected_lines.get(i).copied().unwrap_or(""), + actual_lines.get(i).copied().unwrap_or("") + ); + } + excerpt.trim_end().to_string() +} + +/// Absolute path to the fixtures tree, anchored at the crate manifest dir so +/// the harness loads identically whether run as an integration test or under a +/// different working directory. +fn fixtures_root() -> std::path::PathBuf { + Path::new(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/minimizer") +} + +/// Walk `//.cmd` and assemble each fixture with its +/// `.raw`/`.exit`/`.min` companions. A missing `.raw` for a discovered `.cmd` +/// is a hard error: the fixture is malformed, not absent. +fn discover_fixtures(root: &Path) -> Vec { + let mut fixtures = Vec::new(); + + let Ok(families) = fs::read_dir(root) else { + // Missing tree → return empty; the test body turns this into a loud + // failure with the full path. + return fixtures; + }; + + let mut family_dirs: Vec<_> = families + .filter_map(Result::ok) + .map(|entry| entry.path()) + .filter(|path| path.is_dir()) + .collect(); + family_dirs.sort(); + + for family_dir in family_dirs { + let family = family_dir + .file_name() + .and_then(|name| name.to_str()) + .unwrap_or("?") + .to_string(); + + let Ok(entries) = fs::read_dir(&family_dir) else { + continue; + }; + let mut cmd_paths: Vec<_> = entries + .filter_map(Result::ok) + .map(|entry| entry.path()) + .filter(|path| path.extension().is_some_and(|ext| ext == "cmd")) + .collect(); + cmd_paths.sort(); + + for cmd_path in cmd_paths { + let case = cmd_path + .file_stem() + .and_then(|name| name.to_str()) + .unwrap_or("?") + .to_string(); + let raw_path = cmd_path.with_extension("raw"); + let raw = fs::read_to_string(&raw_path).unwrap_or_else(|err| { + panic!( + "fixture {family}/{case}: missing or unreadable .raw ({}): {err}", + raw_path.display() + ) + }); + + let command = fs::read_to_string(&cmd_path) + .unwrap_or_else(|err| panic!("fixture {family}/{case}: unreadable .cmd: {err}")) + .trim_end_matches(['\n', '\r']) + .to_string(); + + let exit = fs::read_to_string(cmd_path.with_extension("exit")) + .ok() + .map_or(0, |text| { + text.trim().parse::().unwrap_or_else(|err| { + panic!("fixture {family}/{case}: invalid .exit ({:?}): {err}", text.trim()) + }) + }); + + let expected = fs::read_to_string(cmd_path.with_extension("min")).ok(); + + fixtures.push(Fixture { name: format!("{family}/{case}"), command, raw, exit, expected }); + } + } + + fixtures +} diff --git a/docs/ai-schema-normalize.md b/docs/ai-schema-normalize.md index 2eb734493..dfb4762df 100644 --- a/docs/ai-schema-normalize.md +++ b/docs/ai-schema-normalize.md @@ -28,8 +28,9 @@ All exports live under `@oh-my-pi/pi-ai/utils/schema`: OpenAI strict-mode pipeline (sanitize → enforce). All three are exported from `normalize.ts`. - `adaptSchemaForStrict(schema, strict)` from `./adapt` — thin composer that - wraps `tryEnforceStrictSchema` for provider call sites and consults - `PI_NO_STRICT` (env `PI_NO_STRICT`) for the global bypass. + upgrades draft-07 inputs to 2020-12 and wraps `tryEnforceStrictSchema` for + provider call sites. `./adapt` also exports the `NO_STRICT` global-bypass + flag (env `PI_NO_STRICT`) honored by every provider that emits `strict: true`. Removed in the unified-flow refactor: @@ -135,15 +136,16 @@ so callers MUST emit `strict: true` only when enforcement actually succeeded. ## Performance: static fingerprint cache -`resolveProviderModels` in `packages/ai/src/model-manager.ts` and -`readModelCache`/`writeModelCache` in `model-cache.ts` cooperate via a -schema-v3 `static_fingerprint` column on the `model_cache` SQLite table. +`resolveProviderModels` in `packages/catalog/src/model-manager.ts` and +`readModelCache`/`writeModelCache` in `packages/catalog/src/model-cache.ts` +cooperate via a `static_fingerprint` column on the `model_cache` SQLite +table (current cache schema version 5). - `fingerprintStatic(staticModels)` hashes the static catalog slice (`Bun.hash(JSON.stringify(models))` in base36) and memoizes the result - in a per-process `WeakMap` keyed by the array reference. Multiple - cold-start arms calling `resolveProviderModels` with the same - `staticModels` array pay the JSON+hash cost once. + by tagging the array with a symbol property. Multiple cold-start arms + calling `resolveProviderModels` with the same `staticModels` array pay + the JSON+hash cost once. - On cache read, if the network fetch is being skipped, the cached row is fresh + authoritative, and the cached `static_fingerprint` matches the current one, `resolveProviderModels` returns the cached models verbatim @@ -153,10 +155,10 @@ schema-v3 `static_fingerprint` column on the `model_cache` SQLite table. empty-source inputs (the common shape after `(static, [])` or for providers without a static catalog), avoiding Map churn entirely. -Cache rows written before schema v3 are dropped by the cache-version -check; the column defaults to `''` for any row that survives a version -upgrade so the fingerprint-equality check naturally fails closed and the -full merge re-runs. +Cache rows written before the current schema version are dropped by the +cache-version check; the column defaults to `''` for any row that survives +a version upgrade so the fingerprint-equality check naturally fails closed +and the full merge re-runs. ## Related diff --git a/docs/bash-tool-runtime.md b/docs/bash-tool-runtime.md index 11f986d73..8adcb007c 100644 --- a/docs/bash-tool-runtime.md +++ b/docs/bash-tool-runtime.md @@ -95,7 +95,8 @@ That means print mode and non-UI RPC/tool contexts always use non-PTY. - configured command prefix, - snapshot path, - serialized shell env, -- optional agent session key. +- optional agent session key, +- minimizer configuration. Session-level bang-command executions pass `sessionKey: this.sessionId`. diff --git a/docs/blob-artifact-architecture.md b/docs/blob-artifact-architecture.md index 9233f3b90..516a2dc00 100644 --- a/docs/blob-artifact-architecture.md +++ b/docs/blob-artifact-architecture.md @@ -23,7 +23,7 @@ They are intentionally separate: Blob file naming: - file path: `/` -- no extension +- canonical file has no extension; when an extension is supplied (image MIME type), a typed sidecar `.` is hardlinked (or copied) next to it so OS openers can type-detect - reference string stored in entries: `blob:sha256:` Implications: @@ -55,6 +55,7 @@ Subagents can adopt the parent `ArtifactManager`; in that case parent and subage - `hash`: hex digest, - `path`: `/`, +- `displayPath`: `/.` when an extension was supplied, otherwise the canonical path, - `ref`: `blob:sha256:`. No session-local counter is used. diff --git a/docs/collab.md b/docs/collab.md new file mode 100644 index 000000000..5f199625a --- /dev/null +++ b/docs/collab.md @@ -0,0 +1,117 @@ +# Collab: Live Session Sharing + +`/collab` shares your running session with other omp instances in real time. Guests render the **same session natively in their own TUI** — streaming assistant text, tool-call cards, footer state (cwd, model, context %, cost), ctrl+o expansion, `/dump` — no terminal mirroring. Guests can prompt and interrupt the agent; the host machine runs the agent and all tools. + +## Quick start + +Host: + +``` +/collab +``` + +prints + +``` +Collab session started! + • Join from another terminal: omp join "mgAYTZwEnpRQtca0CTgn-Q.gdJUbTovD94ofDaa8YvhY0-ty16w4fn8PgB6PLnoA30" + • or any web browser: my.omp.sh/#mgAYTZwEnpRQtca0CTgn-Q.gdJUbTovD94ofDaa8YvhY0-ty16w4fn8PgB6PLnoA30 +``` + +The browser line is click-to-join (an OSC 8 hyperlink to the full `https://` deep link): the relay serves the web guest client at `/`, and the room id + key ride in the URL fragment. From another omp (any directory, any machine), either form works: + +``` +/join my.omp.sh/#mgAYTZwEnpRQtca0CTgn-Q.gdJU… +``` + +The guest's previous session is restored on `/leave` (or when the host stops). + +### Commands + +| Command | Effect | +|---|---| +| `/collab` | Start sharing (or re-print the link when already hosting) | +| `/collab ` | Start sharing through a specific relay (`relay.example.com`, `ws://localhost:7475`) | +| `/collab view` | Print a read-only (view-only) link (starts sharing first if needed) | +| `/collab status` | Show link + participants | +| `/collab stop` | Stop sharing | +| `/join ` | Join a shared session as a guest | +| `/leave` | Leave (guest) or stop sharing (host) | + +## Link format + +``` +https://host[:port]/# → browser deep link (printed by /collab; /join accepts it too) +. → default relay (my.omp.sh) +host[:port]/r/. → custom relay, wss:// inferred +ws://localhost:7475/r/. → plain ws, allowed for localhost only +``` + +The trailing `.` part is the room secret, base64url-encoded, in one of two strengths: + +- **Full link** — 48 bytes: the 32-byte AES-256-GCM room key followed by a 16-byte write token. Grants prompting, interrupting, and subagent control. +- **View-only link** — the bare 32-byte key, no write token. Grants live read access only. Pre-token links parse as view-only. + +The room secret is dot-joined rather than `#`-joined: RFC 3986 forbids a raw `#` inside a URL fragment, so strict URL stacks (macOS Foundation behind terminal click-to-open) percent-encode a second `#` to `%23` and break the link. Parsers leniently accept the legacy `#` form and the mangled `%23` form. In the browser deep link, everything after the `#` — room id and key — is a URL fragment: it never appears in any HTTP request, and neither secret is ever sent to the relay. + +## End-to-end encryption + +Every session payload (entries, events, state, prompts) is sealed with AES-256-GCM before it touches the socket. The relay sees only: + +- room ids and connection counts, +- opaque ciphertext frames and their sizes, +- a 4-byte routing prefix (which guest a frame targets). + +Possession of the link is the trust boundary: a full link reads and steers the session, a view-only link reads it. Share both like secrets. + +## Guest permission model + +Two trust levels, enforced by the link itself — the host verifies the 16-byte write token at join and rejects writes from peers without it (they appear as read-only in the participants list, and the join notice says so). + +Guests with a full link can: + +- read the entire session (including the back-transcript at join time), +- prompt the agent (rendered with their name badge on every participant's transcript; the LLM sees the prompt text verbatim — names are display-only), +- interrupt the agent (Esc), +- use the Agent Hub against the host's subagents: live table and progress, chat (steers the host's subagent), kill, revive, and transcript viewing (fetched from the host on demand). + +Guests with a view-only link can read everything live — back-transcript, streaming text, tool cards, subagent transcripts — but the host rejects prompting, interrupting, and agent control from them. + +Everything that mutates the host session or machine is host-only: `/model`, `/compact`, `/resume`, `/branch`, bash (`!`), python (`$`), skills, etc. Guests keep a small local allowlist (`/dump`, `/export`, `/copy`, `/help`, `/hotkeys`, `/theme`, `/settings`, `/leave`, `/collab`, `/exit`). + +Known v1 limit for guests: a turn already streaming when you join becomes visible from its next message boundary. + +## Web client + +`packages/collab-web` is a standalone browser client for the same links — no omp install needed on the guest side. The relay serves it at `/`, which is what makes the `/collab` deep link click-to-join: `https:///#` loads the client and auto-connects from the fragment. It renders the live transcript (streaming text, thinking, tool cards), a subagent panel with on-demand transcripts, and a composer with the same guest powers (prompt, interrupt, hub actions). Run `bun run dev` in the package for a local instance, `bun run mock-host` for an offline scripted host to develop against, and `bun run build` to emit a static `dist/` deployable anywhere (HTTPS required for WebCrypto). The client never talks to anything but the relay, and the key stays in the URL fragment. + +## Settings + +| Setting | Default | Meaning | +|---|---|---| +| `collab.relayUrl` | `wss://my.omp.sh` | Relay used by `/collab` when no relay is passed inline | +| `collab.displayName` | OS username | Name shown to other participants | +| `share.serverUrl` | `https://my.omp.sh/s` | Share viewer/upload base used by `/share` (links are `/#`) | +| `share.redactSecrets` | `true` | Run the secret obfuscator over `/share` snapshots before upload | + +## Self-hosting the relay + +The relay is a small content-blind Go service. It keeps no state beyond live connections and exposes: + +- `GET /` — the static collab-web guest client (target of the `/collab` deep link), +- `GET /r/?role=host|guest` — WebSocket upgrade, +- `POST /s` / `GET /s/` / `GET /s//raw` — `/share` blob upload, viewer page, and blob fetch, +- `GET /healthz` — liveness. + + +## Architecture notes + +Hub topology — the host is authoritative, guests never peer: + +1. `entry` frames — durable session entries, broadcast pre-blob-externalization so images stay inline (guests cannot resolve host blob refs). Guests append them verbatim (ids preserved) to a replica session file under `~/.omp/collab/.jsonl` and into the agent's message array, which is why `/dump` and context estimates work. +2. `event` frames — live agent events, fed straight into the guest's normal event controller; rendering is events-only to prevent double-render. +3. `state` frames — debounced footer snapshots: streaming flag, the host's full model object and thinking level (applied to the guest's replica agent state, so model display and context-window math are native), host context numbers, and participants. +4. `bus` frames — mirrored task-subagent lifecycle/progress EventBus traffic, republished on the guest's local bus so the subagent HUD and status-line count work natively. +5. `agents` frames — agent-registry snapshots feeding a guest-local registry, so the Agent Hub table renders host subagents. + +Guest→host: `hello`, `prompt`, `abort`, `agent-cmd` (hub chat/kill/revive), and `fetch-transcript` (incremental subagent-transcript reads answered by targeted `transcript` frames). The replica loads through the regular `/resume` machinery, so theming, ctrl+o, and transcript behavior are native by construction; the guest process never chdirs to host paths. diff --git a/docs/compaction.md b/docs/compaction.md index 93df614b7..ca29449e8 100644 --- a/docs/compaction.md +++ b/docs/compaction.md @@ -44,11 +44,12 @@ When context is rebuilt (`buildSessionContext`): 4. `branch_summary` entries are converted to `branchSummary` messages. 5. `custom_message` entries are converted to `custom` messages. -Those custom roles are then transformed into LLM-facing user messages in `convertToLlm()` using the static templates: +Those custom roles are then transformed into LLM-facing messages in `convertToLlm()`: `compactionSummary` and `branchSummary` become user messages rendered through the static templates - `packages/agent/src/compaction/prompts/compaction-summary-context.md` - `packages/agent/src/compaction/prompts/branch-summary-context.md` -- `packages/agent/src/compaction/prompts/handoff-document.md` + +while `custom` messages pass through as developer messages with their raw content (no template). ## Compaction pipeline @@ -129,12 +130,12 @@ The automatic paths are intentionally different: ### Snapcompact strategy -`compaction.strategy: "snapcompact"` replaces the LLM summarization call with a local, deterministic archival pass (`snapcompactCompact` from `@oh-my-pi/snapcompact`): +`compaction.strategy: "snapcompact"` replaces the LLM summarization call with a local, deterministic archival pass (`compact` from `@oh-my-pi/snapcompact`): -- The discarded history is serialized, whitespace-collapsed, and printed onto provider-aware square PNG frames using bundled public-domain pixel fonts. Anthropic-family and unknown APIs use repeated black `8x8` cells, Google uses repeated sentence-colored `8x8` cells, and OpenAI uses dense stretched `6x6` cells with `detail: "original"`. -- Serialization keeps the archive conversation-dense: tool results are truncated head+tail (default 2,000 chars at a 0.6 head ratio), tool-call argument values are capped per value (500) and per call (2,000), and tool output is printed in dim gray ink so conversation reads louder than tool noise. All budgets and the dimming are configurable via `SnapcompactSerializeOptions` (`toolResultMaxChars`, `toolArgMaxChars`, `toolCallMaxChars`, `truncateHeadRatio`, `dimToolResults`). +- The discarded history is serialized, whitespace-collapsed, and printed onto model-aware PNG frames (frame width fixed per shape; frame height hugs the rows actually printed) using bundled public-domain pixel fonts. The shape — and frame size — resolve from the **model id** when the model line was measured: Claude reads X.org `6x12` glyphs with dimmed stopwords (`6x12-dim`; high-res lines — Opus 4.7+, Fable, Mythos — get 1932px frames under Anthropic's 4,784 visual-token cap, older lines stay at 1568px), Gemini reads two word-wrapped columns of `8x13` glyphs with sentence-hue ink and dimmed stopwords (`doc-8on16-sent-dim` at 2048px — Gemini 3.x bills a fixed 1,120-token budget per image at any pixel size), GPT/Kimi/GLM read `8x13` glyphs on a 16px pitch (`8on16-bw` at 1568px — patch billing is area-proportional, and kimi's processor downscales past 1792px). A Claude routed through Vertex or OpenRouter keeps its Claude shape. Unmeasured models fall back to their wire API family (Anthropic-family/unknown → `6x12-dim`, Google → `doc-8on16-sent-dim`, OpenAI-compatible → `8on16-bw`); billing (per-family patch/budget formulas, OpenAI's `detail: "original"` hint) always follows the API carrying the request, computed for the resolved frame size. The `snapcompact.shape` setting (default `auto`) forces one of the research-eval variants instead: square grids (`8x8r`/`8x8u`/`6x6u`/`5x8` × sentence-hue/black ink) or the per-model eval winners (`6x12-dim`, `8x13-bw`, `8on16-bw`, and the two-column word-wrapped `doc-8on16-bw`/`-sent`/`-sent-dim`, where `dim` prints stopwords in gray). A forced variant keeps its geometry but is re-priced for the target provider's image billing. The same setting governs inline system-prompt/tool-result imaging (`snapcompact.systemPrompt`, `snapcompact.toolResults`). +- Serialization keeps the archive conversation-dense: tool results are truncated head+tail (default 2,000 chars at a 0.6 head ratio), tool-call argument values are capped per value (500) and per call (2,000), and tool output is printed in dim gray ink so conversation reads louder than tool noise. All budgets and the dimming are configurable via `SerializeOptions` (`toolResultMaxChars`, `toolArgMaxChars`, `toolCallMaxChars`, `truncateHeadRatio`, `dimToolResults`). - Frames persist under `CompactionEntry.preserveData.snapcompact` and are re-attached to the `compactionSummary` message as image blocks on every context rebuild; the entry's `summary` is a deterministic reading guide (grid geometry, role tags, truncation notes) plus the usual file-operation lists. -- Later compactions carry earlier frames forward. Beyond an 8-frame budget the archive fades from the middle out: the earliest frame (session head — the original request, or the filmed summary of older history) is pinned, and the oldest *unpinned* frames are evicted, so head and tail both survive. If the previous compaction was text-based, its summary is printed at the head of the frame archive as `[Summary of earlier history]`. +- Later compactions carry earlier frames forward. The frame budget is provider-aware (`providerFrameBudget`): the per-provider image cap clamped to 8 (`MAX_FRAMES`) — OpenRouter hard-caps requests at 8 images and silently drops the excess, unknown providers get a safe floor of 5. Beyond the budget the archive fades from the middle out: the earliest frame (session head — the original request, or the filmed summary of older history) is pinned, and the oldest *unpinned* frames are evicted. Pages of the *current* compaction that no longer fit are never rendered or dropped — the newest unframed slice survives verbatim as a text tail on the summary (`Archive.textTail`, capped at two frame capacities with middle elision) and is folded back into frames by the next compaction. If the previous compaction was text-based, its summary is printed at the head of the frame archive as `[Summary of earlier history]`. - No model, API key, or network is involved, so snapcompact is also safe for overflow recovery. It requires a vision-capable current model (`model.input` includes `"image"`); otherwise the run falls back to context-full and emits a warning notice (auto and manual paths). Manual `/compact` honors the strategy unless custom instructions are given (those imply a directed LLM summary). - Rationale: the shape table comes from the snapcompact 200k-token evals in `packages/snapcompact`, where bitmap frames preserved QA recall at lower billed-token cost than raw text for vision-capable models. @@ -150,7 +151,7 @@ Default prune policy: - Protect newest `40_000` tool-output tokens. - Require at least `20_000` total estimated savings. -- Never prune tool results from `skill` or `read`. +- Never prune `skill` tool results, `read` results of `skill://` paths, or reads of the active plan reference file (added via `AgentSession`'s plan protection). Pruned tool results are replaced with: @@ -158,6 +159,16 @@ Pruned tool results are replaced with: If pruning changes entries, session storage is rewritten and agent message state is refreshed before compaction decisions. +### Useless-result elision + +Tools can flag a finished result as contextually useless — a search with zero matches, a `job` poll that timed out with everything still running, an empty `irc` inbox drain. The flag originates on the tool result (`AgentToolResult.useless`, set via `ToolResultBuilder.useless()` or directly on the returned object), is copied by the agent loop onto the persisted `ToolResultMessage` (never together with `isError` — errors always win), and is consumed in three places: + +- **Per-turn stale-result pass** (`pruneSupersededToolResults`, gated by `compaction.dropUseless`, default on): flagged results are blanked to the exact placeholder `[Uneventful result elided]` (`USELESS_NOTICE`) with the same cache-aware timing as superseded reads — only when the suffix after the candidate is small (≤ ~8k tokens) or the session has idled past the provider prompt-cache lifetime. Results smaller than the notice itself are never blanked (no savings), and protected tools are exempt. +- **Threshold prune** (`pruneToolOutputs`): flagged results bypass the protect-recent window, same as superseded reads, and receive `USELESS_NOTICE` instead of the token-count placeholder. +- **Summary serialization**: `serializeConversation` (agent and snapcompact) drops the whole tool call/result pair from summarizer/archive input — the source region is discarded after summarization anyway, so the exclusion costs no cache. + +The flag never reaches provider wire formats, and flagged pairs are never removed from history (only blanked in place), so tool-call/result pairing and provider-native history replay stay intact. + ### Boundary and cut-point logic `prepareCompaction()` only considers entries since the last compaction entry (if any). diff --git a/docs/config-usage.md b/docs/config-usage.md index df70614b5..0db2adab0 100644 --- a/docs/config-usage.md +++ b/docs/config-usage.md @@ -256,7 +256,7 @@ Generate a session name using lowercase `:`. - Missing `TITLE_SYSTEM.md` keeps the bundled title prompts. - Discovery uses the same project-then-user config directory pattern as `SYSTEM.md`: project `.omp/TITLE_SYSTEM.md` first, then user `~/.omp/agent/TITLE_SYSTEM.md` and the other supported config bases. - The override replaces only the automatic session-title generation system prompt; normal `SYSTEM.md` / `APPEND_SYSTEM.md` prompt customization is unaffected. -- The online path still forces the `set_title` tool call. The local tiny-title path keeps the `...` prefill/stop wrapper and uses this file as its system turn. +- The online path forces the `set_title` tool call when the title model honors a forced `tool_choice`. Tool-choice-less providers (chat-completions hosts without `tool_choice` support, Claude Fable/Mythos) instead receive a marker-based prompt and emit the title wrapped in `...`, which is parsed leniently (a plain sentence or a truncated/unclosed tag still works). A `TITLE_SYSTEM.md` override is reused in both modes; in marker mode the wrap-in-`` instruction is appended after it. The local tiny-title path keeps the `<title>...` prefill/stop wrapper and uses this file as its system turn. ## Skills subsystem diff --git a/docs/context-files.md b/docs/context-files.md new file mode 100644 index 000000000..8be48caba --- /dev/null +++ b/docs/context-files.md @@ -0,0 +1,235 @@ +# Context files + +Context files are Markdown instruction files that `omp` discovers automatically before a session starts and injects into the agent's project context. Use them for repository conventions, architecture notes, test and review expectations, and instructions that should travel with a user account or a project. + +You never have to ask the agent to go read `AGENTS.md`, `CLAUDE.md`, `GEMINI.md`, or similar files — the relevant ones are already discovered, loaded, and placed in context when the session begins. + +## How context files relate to other concepts + +Four similarly named things behave differently. Keep them straight: + +- **Context files** are read as plain Markdown and shown to the agent inside a `` block. They are advisory background that stays in the session's opening context. +- **Sticky rules** come from a top-level `RULES.md`. They are converted into an always-apply rule that is re-attached near the current turn, so they keep their hold even after the visible conversation grows. See "Sticky rules vs normal context" below. +- **Discovery providers** are the config-source adapters (`native`, `claude`, `codex`, `gemini`, `opencode`, `github`, `agents`, `agents-md`) that know where each tool keeps its files. The same provider that contributes context files may also contribute MCP servers, slash commands, skills, hooks, tools, prompts, and settings. +- **Model providers** are inference backends such as `anthropic`, `openai`, `google`, `groq`, `ollama`, and `openrouter`. They have nothing to do with context files except that both kinds of id share the one `disabledProviders` list — see "Disabling discovery providers" below and [Providers](./providers.md). + +Authoring **skills** and **rule** files (as opposed to the sticky `RULES.md`) is covered in [Skills](./skills.md). Customizing the system prompt with `SYSTEM.md` is covered in [System prompt customization](./system-prompt-customization.md). + +## Native `.omp` files + +The native provider is the recommended format for new projects. It reads from your user agent directory and from `.omp/` directories inside a project, and it has the highest discovery priority, so its files win over every other convention at the same scope. + +| File | Scope | Behavior | +|---|---|---| +| `~/.omp/agent/AGENTS.md` | User | User-level context for every session unless the `native` provider is disabled. | +| `/.omp/AGENTS.md` | Project | Project context. `omp` walks upward from the current directory to the repository root and uses the **nearest** non-empty `.omp/AGENTS.md`. Farther native project files are not also included. | +| `~/.omp/agent/RULES.md` | User | User-level sticky rule content. Loaded as an always-apply rule, not as a context file. | +| `/.omp/RULES.md` | Project | Project sticky rule content. Same nearest-ancestor walk-up as above. Loaded as an always-apply rule. | + +Two details matter: + +- **Walk-up to the repository root.** Discovery starts in the current working directory and climbs through each ancestor up to the repository root, stopping at the first ancestor that has a usable `.omp/` directory. The *nearest* match wins; ancestors above it are not loaded as native context. +- **The `.omp/` directory must be non-empty.** An empty `.omp/` directory is skipped during the walk-up, so the search continues to the next ancestor. An empty `AGENTS.md` or `RULES.md` file contributes nothing. + +`~/.omp/agent` is the user base. If `PI_CODING_AGENT_DIR` is set, it relocates that base, so the user files become `$PI_CODING_AGENT_DIR/AGENTS.md` and `$PI_CODING_AGENT_DIR/RULES.md`. + +### Monorepo example + +```text +repo/ + .omp/ + AGENTS.md + RULES.md + packages/api/ + .omp/ + AGENTS.md +``` + +Starting a session in `repo/packages/api`: + +- The native context file is `repo/packages/api/.omp/AGENTS.md` (the nearest one). `repo/.omp/AGENTS.md` is **not** also included. +- The project sticky rule is `repo/packages/api/.omp/RULES.md` if present; otherwise the walk-up continues and `repo/.omp/RULES.md` is used. + +Put broad, durable project background in `AGENTS.md`. Reserve `RULES.md` for short, hard requirements that must stay visible across long conversations. + +## Other supported context conventions + +`omp` also discovers the context files of other agent tools so existing projects keep working without migration. The table lists context-file behavior only; each provider may also contribute other capabilities. + +| Provider id | Convention path | Scope | Notes | +|---|---|---|---| +| `native` | `.omp/AGENTS.md` | User + project | Recommended `omp` format. User file at `~/.omp/agent/AGENTS.md`; project file is the nearest non-empty `.omp/AGENTS.md` walking up to the repo root. | +| `claude` | `.claude/CLAUDE.md` | User + project | User file `~/.claude/CLAUDE.md`; project file `/.claude/CLAUDE.md` only (no ancestor walk-up). | +| `codex` | `.codex/AGENTS.md` | User | User file `~/.codex/AGENTS.md` only. Project-level Codex context comes from a standalone `AGENTS.md` via the `agents-md` provider, not from `/.codex/AGENTS.md`. | +| `gemini` | `.gemini/GEMINI.md` | User + project | User file `~/.gemini/GEMINI.md`; project file `/.gemini/GEMINI.md` only (no ancestor walk-up). | +| `opencode` | `.config/opencode/AGENTS.md` | User | User file `~/.config/opencode/AGENTS.md` only. | +| `github` | `.github/copilot-instructions.md` | Project | Project-only GitHub Copilot instructions from `/.github/copilot-instructions.md`. | +| `agents` | `.agent/AGENTS.md`, `.agents/AGENTS.md` | User + project | User files from `~/.agent/` and `~/.agents/`; project files discovered while walking up from the current directory to the repository root. | +| `agents-md` | `AGENTS.md` | Project | Standalone (non-config-directory) `AGENTS.md` files, discovered by walking up from the current directory to the repository root (or home when no repo root is known). Files whose parent directory name starts with `.` are ignored — those belong to a config-directory provider instead. | + +Providers marked "(no ancestor walk-up)" only look in the current working directory's config directory. If you need ancestor walk-up behavior, prefer the native `.omp/AGENTS.md` format or a standalone `AGENTS.md` (the `agents-md` provider), or launch `omp` from the directory that holds the config directory. + +## Load order and shadowing + +When two providers describe the *same* scope, the higher-priority provider wins. Provider priorities: + +| Priority | Provider id | +|---:|---| +| 100 | `native` | +| 80 | `claude` | +| 70 | `agents`, `codex` | +| 60 | `gemini` | +| 55 | `opencode` | +| 30 | `github` | +| 10 | `agents-md` | + +Discovered files are then deduplicated by scope: + +- **One user context file** is kept across all providers. Because `native` has the highest priority, `~/.omp/agent/AGENTS.md` shadows every other user-level context file. +- **One project context file per directory depth.** Depth is measured from the current directory: the cwd is depth 0, its parent depth 1, and so on. Config subdirectories of an ancestor (`.claude/`, `.github/`, `.gemini/`, …) count as the same depth as that ancestor. +- **At the same depth, the higher-priority provider shadows the rest.** +- **Across depths, multiple files survive.** In a monorepo, an ancestor `AGENTS.md` and a package-level one are different depths and both load. +- **Byte-identical files are collapsed.** If two surviving files have exactly the same content, only the copy closest to the cwd is kept. + +After deduplication, project files are sorted so **farther ancestors appear first** and files **closer to the cwd appear last**. Later files sit nearer the end of the context block, where they are most prominent. + +### Worked shadowing example + +```text +repo/ + AGENTS.md + packages/api/ + AGENTS.md + .github/copilot-instructions.md +``` + +Starting in `repo/packages/api`: + +- `repo/AGENTS.md` is found by `agents-md` at depth 2 and kept. +- `repo/packages/api/AGENTS.md` (`agents-md`, priority 10) and `repo/packages/api/.github/copilot-instructions.md` (`github`, priority 30) both resolve to depth 0. GitHub's higher priority shadows the package-level standalone `AGENTS.md`, so the Copilot file wins at that depth. +- The two kept files are ordered root-first, package-last, so `packages/api`'s file is the more prominent one. +- If you add `repo/packages/api/.omp/AGENTS.md`, `native` (priority 100) wins depth 0 outright, shadowing both lower-priority files. + +## Injection behavior + +Discovered context files are injected into the opening project prompt as a single `` block, one `` element per surviving file, in the sort order above: + +```xml + +You MUST follow the context files below for all tasks: + +...root content... + + +...package content... + + +``` + +The agent sees each file's absolute path and its fully expanded Markdown content (with `@` imports already resolved — see below). Loading is automatic — there is no need to instruct the agent to search for `AGENTS.md`, `CLAUDE.md`, `GEMINI.md`, `.cursorrules`, or similar files during a session. + +Deeper-directory `AGENTS.md` files that were *not* auto-loaded (for example, ones below the current directory) are surfaced separately in a `` block that lists their paths and tells the agent to read them before editing those directories. Those files are pointers, not full injected content. + +## `@` imports + +Inside any context file, an `@path` token expands inline to the referenced file's content before injection: + +```markdown +# Project notes + +Read @docs/architecture.md before changing storage code. +Shared release steps live in @../RELEASE.md and personal aliases in @~/.notes/aliases.md. +``` + +The exact rules: + +- **Relative paths resolve from the importing file's own directory**, not the session's working directory. +- **`~/` and `~`** resolve from the user's home directory; absolute paths are used as-is. +- **Tokens inside fenced code blocks and inline code spans are left untouched** — useful when you want to *write about* an `@token` without expanding it. +- **`git@github.com:org/repo.git` and `user@example.com`-style tokens are not treated as imports.** A token only counts when the `@` sits at the start of a line or after a space or tab. +- **Trailing sentence punctuation is trimmed** off the path (`. , ; : ! ? ) ] } " '`), so `@docs/setup.md.` imports `docs/setup.md`. +- **Imports recurse up to five hops.** An imported file may itself contain `@` imports, up to a total depth of five. +- **Cycles are skipped.** A file already pulled into the current expansion tree is not re-expanded, so mutual imports terminate cleanly. +- **A missing or unreadable target leaves the original `@token` text in place** rather than erroring. + +## Sticky rules vs normal context + +Use a normal context file (`AGENTS.md`, `CLAUDE.md`, `GEMINI.md`, `.github/copilot-instructions.md`, …) for the bulk of your guidance: repository overview, code style, build and test commands, review expectations, and local conventions. These load into the opening `` block. + +Use a top-level **`RULES.md`** for the handful of hard requirements that must stay active even after a long conversation has pushed the opening context far up the transcript: + +```markdown +# ~/.omp/agent/RULES.md + +Never commit or push unless the user explicitly asks. +Do not edit generated files. +``` + +`RULES.md` is special: + +- It is read **only** at the native locations — `~/.omp/agent/RULES.md` and the nearest `/.omp/RULES.md` from the cwd up to the repo root. A `RULES.md` anywhere else is not a context-file convention and is ignored. +- It is loaded as an **always-apply rule**, not as a context file, so it is re-attached near the current turn and keeps its hold across long sessions. +- It is **always sticky**: frontmatter cannot make it non-sticky. If you want conditional or opt-in behavior, write a normal rule file instead (see [Skills](./skills.md)). + +Keep `RULES.md` short. Long background belongs in `AGENTS.md`, where it costs context budget only once. + +## Disabling discovery providers + +Turn a provider off with the `disabledProviders` setting in `~/.omp/agent/config.yml`, a project's `.omp/config.yml`, or a `--config` overlay: + +```yaml +# .omp/config.yml +disabledProviders: + - claude + - github +``` + +`disabledProviders` is a **whole-provider switch with one shared id namespace**, used by two unrelated subsystems: + +| Id kind | Examples | Effect when listed | +|---|---|---| +| Discovery provider ids | `native`, `claude`, `codex`, `gemini`, `opencode`, `github`, `agents`, `agents-md` | The entire config source is removed — not just its context files, but also any MCP servers, slash commands, skills, hooks, tools, prompts, and settings it would have contributed. | +| Model provider ids | `anthropic`, `openai`, `google`, `groq`, `ollama`, `openrouter` | The model backend is removed from selection even when its credentials are present. See [Providers](./providers.md). | + +Ids are exact and the two namespaces do not collide by accident: `google` disables the Google model backend, while `gemini` disables the Gemini CLI discovery files. Disabling a discovery provider is heavier than it looks — disabling `claude`, for instance, also drops Claude-discovered MCP servers, commands, skills, hooks, tools, and settings, not only `CLAUDE.md`. + +Only `enabledModels` and `disabledProviders` support **path-scoped** entries, so you can vary provider availability per subtree: + +```yaml +disabledProviders: + - github # disabled everywhere + - path: ~/work/legacy-claude + providers: + - claude # disabled only under this directory +``` + +A scoped entry applies when the cwd equals the configured path or sits beneath it; `~` expands to home. Bare string entries apply everywhere. + +Remember that higher-precedence settings layers **replace** array settings rather than appending to them. If your global config disables `claude` but a project config sets `disabledProviders: [github]`, then inside that project Claude discovery is re-enabled and only GitHub is disabled. See [Settings](./settings.md) for the full layer precedence, merge rules, and path-scoped array details. + +## Troubleshooting + +### A file is not loaded + +- Native project context must live at `.omp/AGENTS.md`, and the `.omp/` directory must be non-empty; an empty `.omp/` is skipped and the walk-up continues to the next ancestor. +- A standalone `AGENTS.md` is handled by `agents-md`, not `native`. +- `.claude/CLAUDE.md`, `.gemini/GEMINI.md`, and `.github/copilot-instructions.md` are read only from the current working directory's config directory — not from every ancestor. +- `~/.codex/AGENTS.md` and `~/.config/opencode/AGENTS.md` are user-level only and have no project equivalent. +- Empty files contribute nothing for the native and standalone providers. +- A disabled discovery provider contributes nothing — check `disabledProviders` across your global, project, and `--config` layers. + +### The wrong file wins + +At one user scope or project depth, the higher-priority provider shadows the others (native > claude > agents/codex > gemini > opencode > github > agents-md). To force deterministic behavior, move your guidance into `.omp/AGENTS.md` (native always wins) or disable the competing discovery provider. + +### User context disappeared + +Only one user-level context file survives, and `~/.omp/agent/AGENTS.md` has the highest priority. If it exists, it shadows user-level `~/.claude/CLAUDE.md`, `~/.codex/AGENTS.md`, `~/.gemini/GEMINI.md`, `~/.config/opencode/AGENTS.md`, and `~/.agent`/`~/.agents` files. Consolidate user guidance into the native file or remove the native one if you prefer another tool's file. + +### A `RULES.md` file is ignored + +Only the native `RULES.md` locations are sticky: `~/.omp/agent/RULES.md` and the nearest `/.omp/RULES.md` from cwd to the repo root. A `RULES.md` in any other directory is not a recognized convention and will not be loaded. + +### An `@` import did not expand + +Confirm the target exists relative to the importing file (not the cwd). Imports inside fenced code blocks or inline code spans are intentionally left literal, `git@`/email-looking tokens are never imported, cycles are skipped, expansion stops after five hops, and a missing target leaves the original `@path` text unchanged. diff --git a/docs/environment-variables.md b/docs/environment-variables.md index 0466d800f..fd8c473f5 100644 --- a/docs/environment-variables.md +++ b/docs/environment-variables.md @@ -144,12 +144,11 @@ When `CLAUDE_CODE_USE_FOUNDRY` is enabled, Anthropic requests switch to Foundry | `AWS_PROFILE` | Enables named profile auth path | | `AWS_ACCESS_KEY_ID` + `AWS_SECRET_ACCESS_KEY` | Enables IAM key auth path | | `AWS_BEARER_TOKEN_BEDROCK` | Highest-precedence bearer token auth path; skips AWS profile/credential-chain lookup when set | -| `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` / `AWS_CONTAINER_CREDENTIALS_FULL_URI` | Enables ECS task credential path | -| `AWS_WEB_IDENTITY_TOKEN_FILE` + `AWS_ROLE_ARN` | Enables web identity auth path | +| `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` / `AWS_CONTAINER_CREDENTIALS_FULL_URI` | Marks Bedrock as available in provider detection (credential resolution itself covers env keys, profiles/SSO/`credential_process`, then IMDSv2) | +| `AWS_WEB_IDENTITY_TOKEN_FILE` + `AWS_ROLE_ARN` | Marks Bedrock as available in provider detection (same caveat as the ECS variables above) | | `AWS_BEDROCK_SKIP_AUTH` | If `1`, injects dummy credentials (proxy/non-auth scenarios) | -| `AWS_BEDROCK_FORCE_HTTP1` | If `1`, forces Node HTTP/1 request handler | -| `HTTPS_PROXY` / `HTTP_PROXY` / `ALL_PROXY` | Routes Bedrock runtime and AWS SSO credential calls through the configured proxy using HTTP/1 | -| `NO_PROXY` | Excludes matching hosts from proxy routing when a proxy variable is configured | +| `HTTPS_PROXY` / `HTTP_PROXY` | Honored via Bun's native fetch proxy support (the provider no longer ships an AWS SDK / proxy-agent transport) | +| `NO_PROXY` | Excludes matching hosts from Bun's native proxy routing | Region fallback in provider code: `options.region` → `AWS_REGION` → `AWS_DEFAULT_REGION` → `us-east-1`. @@ -201,7 +200,7 @@ OAuth host chain: `KIMI_CODE_OAUTH_HOST` → `KIMI_OAUTH_HOST` → `https://auth | ------------------------------------------ | ---------------------------------------------------- | | `PI_CODEX_DEBUG` | `1`/`true` enables Codex provider debug logging | | `PI_CODEX_WEBSOCKET` | `1`/`true` enables websocket transport preference | -| `PI_CODEX_WEBSOCKET_V2` | `1`/`true` enables websocket v2 path | +| `PI_OPENAI_STATEFUL` | Overrides the stateful-chaining default for the platform OpenAI Responses API (`previous_response_id`, forces `store: true`): on by default against api.openai.com, off elsewhere | | `PI_CODEX_WEBSOCKET_IDLE_TIMEOUT_MS` | Positive integer override (default 300000) | | `PI_CODEX_WEBSOCKET_RETRY_BUDGET` | Non-negative integer override (default 5) | | `PI_CODEX_WEBSOCKET_RETRY_DELAY_MS` | Positive integer base backoff override (default 500) | @@ -284,7 +283,8 @@ Use `ANTHROPIC_SEARCH_BASE_URL` (optionally with `ANTHROPIC_SEARCH_API_KEY`) to | Variable | Default / behavior | | ----------------------- | ------------------------------------------------------------------------------------------------------------------- | -| `PI_PY` | Eval backend override: `0`/`bash`=JavaScript only, `1`/`py`=Python only, `mix`/`both`=both; invalid values ignored | +| `PI_PY` | Boolean-like override for the Python eval backend: truthy (`1`/`true`/`yes`/`on`) enables, any other value disables; unset defers to the `eval.py` setting (default enabled) | +| `PI_JS` | Same boolean-like override for the JavaScript eval backend; unset defers to the `eval.js` setting (default enabled) | | `PI_PYTHON_SKIP_CHECK` | If `1`, skips Python interpreter availability checks (subprocess runner still starts on demand) | | `PI_PYTHON_INTEGRATION` | If `1`, opts gated integration tests in (e.g. `python-runner.integration.test.ts`) into running against real Python | | `PI_PYTHON_IPC_TRACE` | If `1`, logs NDJSON frames exchanged with the Python runner subprocess | @@ -377,7 +377,6 @@ These are read as runtime signals; they are usually set by the terminal/OS rathe | `COLORTERM`, `TERM`, `WT_SESSION` | Color capability detection (theme color mode) | | `COLORFGBG` | Terminal background light/dark auto-detection | | `TERM_PROGRAM`, `TERM_PROGRAM_VERSION`, `TERMINAL_EMULATOR` | Terminal identity in system prompt/context | -| `KDE_FULL_SESSION`, `XDG_CURRENT_DESKTOP`, `DESKTOP_SESSION`, `XDG_SESSION_DESKTOP`, `GDMSESSION`, `WINDOWMANAGER` | Desktop/window-manager detection in system prompt/context | | `TMUX_PANE`, `CMUX_SURFACE_ID`, `KITTY_WINDOW_ID`, `TERM_SESSION_ID`, `WT_SESSION` | Stable per-terminal session breadcrumb IDs | | `SHELL`, `ComSpec`, `TERM_PROGRAM`, `TERM` | System info diagnostics | | `APPDATA`, `XDG_CONFIG_HOME` | lspmux config path resolution | @@ -392,7 +391,7 @@ These are read as runtime signals; they are usually set by the terminal/OS rathe | `PI_NOTIFICATIONS` | `off` / `0` / `false` suppress desktop notifications | | `PI_TUI_WRITE_LOG` | If set, logs TUI writes to file | | `PI_HARDWARE_CURSOR` | If `1`, enables hardware cursor mode | -| `PI_NO_SYNC_OUTPUT` | If `1`, disables DEC 2026 synchronized-output wrappers while keeping TUI autowrap guards | +| `PI_NO_SYNC_OUTPUT` | If set (any non-empty value), disables DEC 2026 synchronized-output wrappers while keeping TUI autowrap guards | | `PI_NO_DECCARA` | If set (truthy), disables Kitty DECCARA rectangular-SGR background fills (forces padded-string rendering) | | `PI_DEBUG_REDRAW` | If `1`, enables redraw debug logging | | `PI_FORCE_IMAGE_PROTOCOL` | Forces terminal image protocol detection (`kitty`, `iterm2`/`iterm`, `sixel`, `none`) | diff --git a/docs/extensions.md b/docs/extensions.md index faedb4c81..047304f4b 100644 --- a/docs/extensions.md +++ b/docs/extensions.md @@ -138,7 +138,7 @@ Also exposed: - `deliverAs: "steer"` (default) — interrupts current run - `deliverAs: "followUp"` — queued to run after current run - `deliverAs: "nextTurn"` — stored and injected on the next user prompt -- `triggerTurn: true` — starts a turn when idle (`nextTurn` ignores this) +- `triggerTurn: true` — starts a turn when idle (also honored with `deliverAs: "nextTurn"`: idle prompts immediately; while streaming the queued message schedules an internal continuation) `pi.sendUserMessage(content, { deliverAs })` always goes through prompt flow; while streaming it queues as steer/follow-up. @@ -151,12 +151,30 @@ Handlers and tool `execute` receive `ctx` with: - `cwd` - `sessionManager` (read-only) - `modelRegistry`, `model` +- `models` (read-only model query — see below) - `getContextUsage()` - `compact(...)` - `isIdle()`, `hasPendingMessages()`, `abort()` - `shutdown()` - `getSystemPrompt()` +### Model selection (`ctx.models`) + +`ctx.models` is a read-only facade for picking and comparing models the same way core does: + +- `list()` — authenticated models available this session. +- `current()` — the live session model (read lazily, so it reflects `/model` switches). +- `resolve(spec)` — a model string (`provider/id`, bare id) or role alias (`pi/slow`, a configured role) → `Model`, honoring the same settings-backed aliases and match preferences as `--model`. Returns `undefined` when nothing matches. +- `family(model)` — an opaque lineage token for "same family?" checks (Claude point releases share a token; Claude and GPT differ). Compare it; don't persist it (the vocabulary tracks new releases). + +```ts +// Pick a model from a different family than the current one (e.g. a cross-family reviewer). +const current = ctx.models.current(); +const contrasting = ctx.models + .list() + .find(m => current && ctx.models.family(m) !== ctx.models.family(current)); +``` + ## 3) Command context (`ExtensionCommandContext`) Command handlers additionally get: @@ -276,7 +294,7 @@ pi.registerTool({ }); ``` -`tool_call`/`tool_result` intercept all tools once the registry is wrapped in `sdk.ts`, including built-ins and extension/custom tools. `ToolDefinition` also supports optional `hidden`, `defaultInactive`, `deferrable`, `mcpServerName`, `mcpToolName`, `renderCall`, and `renderResult` fields. +`tool_call`/`tool_result` intercept all tools once the registry is wrapped in `sdk.ts`, including built-ins and extension/custom tools. `ToolDefinition` also supports optional `hidden`, `defaultInactive`, `deferrable`, `approval`, `mcpServerName`, `mcpToolName`, `renderCall`, and `renderResult` fields. ## UI integration points @@ -297,16 +315,15 @@ Current no-op methods in this controller: - `setFooter` - `setHeader` -- `setEditorComponent` -Also note: `setWidget` currently routes to status-line text via `setHookWidget(...)`. +`setEditorComponent` is wired to the live editor (`ctx.setEditorComponent(factory)`). `setWidget` renders real widget components above or below the editor via `setHookWidget(...)` (`placement: "aboveEditor" | "belowEditor"`; string-array content capped at 10 lines). ### RPC mode (`rpc-mode.ts`) `ctx.ui` is backed by RPC `extension_ui_request` events: - dialog methods (`select`, `confirm`, `input`, `editor`) round-trip to client responses -- fire-and-forget methods emit requests (`notify`, `setStatus`, `setWidget` for string arrays, `setTitle`, `setEditorText`) +- fire-and-forget methods emit requests (`notify`, `setStatus`, `setWidget` for string arrays, `setEditorText`; `setTitle` emits only when `PI_RPC_EMIT_TITLE=1`) Unsupported/no-op in RPC implementation: @@ -321,9 +338,9 @@ Unsupported/no-op in RPC implementation: When no UI context is supplied to runner init, `ctx.hasUI` is `false` and methods are no-op/default-returning. -### Background interactive mode +### ACP mode -Background mode installs a non-interactive UI context object. In current implementation, `ctx.hasUI` may still be `true` while interactive dialogs return defaults/no-op behavior. +ACP installs an elicitation-bridged UI context (`createAcpExtensionUiContext` in `acp-agent.ts`). `ctx.hasUI` is `true` while only `select`/`confirm`/`input` round-trip (as ACP elicitations; defaults are returned when the client lacks the `elicitation.form` capability). The non-elicitation surface (widgets, editor, theming, terminal input) is stubbed no-op. ## Session and state patterns diff --git a/docs/fs-scan-cache-architecture.md b/docs/fs-scan-cache-architecture.md index e251f0569..57ae42d68 100644 --- a/docs/fs-scan-cache-architecture.md +++ b/docs/fs-scan-cache-architecture.md @@ -108,10 +108,10 @@ Current defaults in native APIs: - `fuzzyFind`: `hidden=false`, `gitignore=true`, `cache=false`, `node_modules` is skipped, `follow_links=true`, minimal detail - `grep`: `hidden=true`, `gitignore=true`, `cache=false`; cached directory mode skips `node_modules` unless the glob mentions `node_modules`; minimal detail -Coding-agent callers today: +Current callers: -- High-volume mention candidate discovery enables cache: - - `packages/coding-agent/src/utils/file-mentions.ts` +- `@`-mention fuzzy file autocomplete enables cache (`fuzzyFind` with `cache: true`): + - `packages/tui/src/autocomplete.ts` - Mutation flows invalidate through `packages/coding-agent/src/tools/fs-cache-invalidation.ts`. - Tool-level search integration (`packages/coding-agent/src/tools/search.ts`) currently calls native `grep` with `cache: false`. diff --git a/docs/handoff-generation-pipeline.md b/docs/handoff-generation-pipeline.md index 3e29416ce..3ed79675b 100644 --- a/docs/handoff-generation-pipeline.md +++ b/docs/handoff-generation-pipeline.md @@ -24,11 +24,11 @@ Does not cover: - [`../src/session/agent-session.ts`](../packages/coding-agent/src/session/agent-session.ts) - [`packages/agent/src/compaction/compaction.ts`](../packages/agent/src/compaction/compaction.ts) - [`../src/session/session-manager.ts`](../packages/coding-agent/src/session/session-manager.ts) -- [`../src/extensibility/slash-commands.ts`](../packages/coding-agent/src/extensibility/slash-commands.ts) +- [`../src/slash-commands/builtin-registry.ts`](../packages/coding-agent/src/slash-commands/builtin-registry.ts) ## Trigger path -1. `/handoff` is declared in builtin slash command metadata (`slash-commands.ts`) with optional inline hint: `[focus instructions]`. +1. `/handoff` is declared in builtin slash command metadata (`slash-commands/builtin-registry.ts`) with optional inline hint: `[focus instructions]`. 2. In interactive input handling (`InputController`), submit text matching `/handoff` or `/handoff ...` is intercepted before normal prompt submission. 3. The editor is cleared and `handleHandoffCommand(customInstructions?)` is called. 4. `CommandController.handleHandoffCommand` performs a preflight guard using current entries: @@ -62,10 +62,10 @@ The same minimum-content guard exists again inside `AgentSession.handoff()` and `generateHandoff(...)` converts the existing `AgentMessage[]` history to real LLM `Message[]` history, then appends one trailing agent-attributed `user` message containing the rendered handoff prompt. -The request uses `completeSimple(...)` directly: +The request uses `instrumentedCompleteSimple(...)` (the OTEL-instrumented `completeSimple` oneshot wrapper) directly: ```ts -await completeSimple( +await instrumentedCompleteSimple( model, { systemPrompt, @@ -80,6 +80,7 @@ await completeSimple( initiatorOverride, metadata, }, + { telemetry, oneshotKind: "handoff" }, ); ``` @@ -239,7 +240,7 @@ High-level state flow: 1. Interactive slash command intercepted. 2. Preflight message-count guard. 3. `#handoffAbortController` created (`isGeneratingHandoff = true`). -4. `generateHandoff(...)` issues one `completeSimple(...)` request with live system prompt, tools, message history, current thinking level, and trailing handoff prompt. +4. `generateHandoff(...)` issues one `instrumentedCompleteSimple(...)` request with live system prompt, tools, message history, current thinking level, and trailing handoff prompt. 5. Assistant response text blocks are joined; tool-call blocks are discarded. 6. If missing text → return `undefined`; if aborted → cancellation error path. 7. If present: diff --git a/docs/hooks.md b/docs/hooks.md index 902f10589..956e478c3 100644 --- a/docs/hooks.md +++ b/docs/hooks.md @@ -234,7 +234,7 @@ Hook status text set via `ctx.ui.setStatus(key, text)` is: - stored per key - sorted by key name -- sanitized (`\r`, `\n`, `\t` → spaces; repeated spaces collapsed) +- sanitized (ANSI/VT escape sequences stripped; control characters mapped to spaces; repeated spaces collapsed; trimmed) - joined and width-truncated for display ## Error propagation and fallback diff --git a/docs/keybindings.md b/docs/keybindings.md index dfc881bbe..e3e66ab6f 100644 --- a/docs/keybindings.md +++ b/docs/keybindings.md @@ -17,7 +17,7 @@ Chord names are case-insensitive and use the same notation shown in the UI, such Set an action to an empty array to disable it: ```yaml -app.stt.toggle: [] +app.history.search: [] ``` ## Common action IDs @@ -25,7 +25,7 @@ app.stt.toggle: [] | Action ID | Default | Meaning | | --------------------------- | -------------------------------------- | --------------------------------------------- | | `app.model.cycleForward` | `Ctrl+P` | Cycle role models forward | -| `app.model.cycleBackward` | `Shift+Ctrl+P` | Cycle role models in temporary mode | +| `app.model.cycleBackward` | `Shift+Ctrl+P` | Cycle role models backward | | `app.model.selectTemporary` | `Alt+P` | Pick a model temporarily for this session | | `app.model.select` | `Alt+M` | Open the model selector and set roles | | `app.plan.toggle` | `Alt+Shift+P` | Toggle plan mode | @@ -39,10 +39,10 @@ app.stt.toggle: [] | `app.display.reset` | `Ctrl+L` | Reset terminal display | | `app.clipboard.copyLine` | `Alt+Shift+L` | Copy the current line | | `app.clipboard.copyPrompt` | `Alt+Shift+C` | Copy the whole prompt | -| `app.clipboard.pasteImage` | `Ctrl+V` (`Alt+V` fallback on Windows) | Paste an image from the clipboard | -| `app.stt.toggle` | `Alt+H` | Toggle speech-to-text recording | +| `app.clipboard.pasteImage` | `Ctrl+V` (`Alt+V` fallback on Windows) | Paste from the clipboard (image preferred, text fallback) | +| `app.stt.toggle` | Unbound (hold `Space`) | Toggle speech-to-text. By default there is no key chord — hold the space bar to record (push-to-talk) and release to transcribe; bind a chord here for a press-to-toggle alternative | -On Windows Terminal, `Ctrl+V` may be handled by the terminal paste command before `omp` sees it; use the `Alt+V` fallback when clipboard image paste appears to do nothing. Windows Terminal also swallows `Ctrl+Enter`, so the follow-up shortcut also binds `Ctrl+Q` — the same chord GitHub Copilot CLI uses. If your existing `keybindings.yml` already assigns `Ctrl+Q` to another action, that user remap wins and follow-up keeps `Ctrl+Enter` unless you explicitly bind `app.message.followUp`. +On Windows Terminal, `Ctrl+V` may be handled by the terminal paste command before `omp` sees it; use the `Alt+V` fallback when clipboard image paste appears to do nothing. When the clipboard holds no image, `app.clipboard.pasteImage` pastes the clipboard text instead, so hosts that deliver only this chord (VS Code's integrated terminal when configured to forward `Ctrl+V`, Windows clipboard history via `Win+V`) work for both payload kinds. Windows Terminal also swallows `Ctrl+Enter`, so the follow-up shortcut also binds `Ctrl+Q` — the same chord GitHub Copilot CLI uses. If your existing `keybindings.yml` already assigns `Ctrl+Q` to another action, that user remap wins and follow-up keeps `Ctrl+Enter` unless you explicitly bind `app.message.followUp`. Terminals that implement OSC 5522 enhanced paste can send clipboard MIME data directly to `omp`; image pastes are attached as `[Image #N]`, while text/plain paste events keep normal paste behavior. When OSC 5522 is unavailable, bracketed paste still handles text, and a pasted single image-file path is loaded as an image when the file is readable from the `omp` host. diff --git a/docs/macos-signing-notarization.md b/docs/macos-signing-notarization.md index 191a3161c..ab9ad32fd 100644 --- a/docs/macos-signing-notarization.md +++ b/docs/macos-signing-notarization.md @@ -61,8 +61,8 @@ What this means in practice: ## Required GitHub secrets Add these under **Settings → Secrets and variables → Actions** (repo secrets). -Both the cert (`APPLE_CERTIFICATE_P12`) **and** the API key (`APPLE_API_KEY`) -must be present for signing to engage. +All five secrets (cert, password, and API key trio) must be present for +signing to engage. | Secret | What it is | | --- | --- | diff --git a/docs/marketplace.md b/docs/marketplace.md index bdefa7557..e0e50b0af 100644 --- a/docs/marketplace.md +++ b/docs/marketplace.md @@ -15,7 +15,7 @@ In the TUI, `/marketplace` with no arguments opens the interactive plugin browse A **marketplace** is a Git repository (or local directory) containing a catalog file at `.claude-plugin/marketplace.json`. The catalog lists available plugins with their sources, descriptions, and metadata. -A **plugin** is a directory containing Claude/OMP plugin content such as skills, commands, hooks, tools, MCP servers, LSP servers, rules, prompts, or extension modules. Plugins are identified by `name@marketplace` (e.g. `code-review@claude-plugins-official`). +A **plugin** is a directory containing Claude/OMP plugin content such as skills, commands, agents, hooks, tools, MCP servers, or LSP servers. Extension modules (`package.json` `omp.extensions` entry points) are not loaded from marketplace installs — they only load for npm-installed or `omp plugin link`ed plugins. Plugins are identified by `name@marketplace` (e.g. `code-review@claude-plugins-official`). **Scopes**: marketplace plugins can be installed at two scopes: diff --git a/docs/mcp-config.md b/docs/mcp-config.md index a583ecdf9..182e02f12 100644 --- a/docs/mcp-config.md +++ b/docs/mcp-config.md @@ -178,7 +178,8 @@ OMP understands two auth-related objects. "credentialId": "optional-stored-credential-id", "tokenUrl": "optional-token-endpoint", "clientId": "optional-client-id", - "clientSecret": "optional-client-secret" + "clientSecret": "optional-client-secret", + "resource": "optional-mcp-resource-uri" } ``` diff --git a/docs/mcp-protocol-transports.md b/docs/mcp-protocol-transports.md index c9c8f46e0..eb402635b 100644 --- a/docs/mcp-protocol-transports.md +++ b/docs/mcp-protocol-transports.md @@ -96,7 +96,7 @@ If SSE stream ends before matching response, request fails with `No response rec Client emits JSON-RPC notifications via `transport.notify(...)`. -- Stdio: writes notification frame to stdin (`jsonrpc`, `method`, optional `params`) plus newline. +- Stdio: writes notification frame to stdin (`jsonrpc`, `method`, `params`) plus newline via `writeFrame()`; a failed write closes the transport and throws. - HTTP: sends POST body without `id`; success accepts `2xx` or `202 Accepted`. Server-initiated notifications are surfaced through transport `onNotification`; `MCPManager` consumes known MCP list/update notifications and can forward all notifications through its own callback. @@ -112,11 +112,9 @@ Server-initiated notifications are surfaced through transport `onNotification`; - start stdout read loop (`readJsonl`) - start stderr loop (read/discard; currently silent) - `close()`: - - mark disconnected - - reject all pending requests (`Transport closed`) + - `#handleClose()`: mark disconnected, reject all pending requests (`Transport closed`), emit `onClose` - kill subprocess - await read loop shutdown - - emit `onClose` If read loop exits unexpectedly, `finally` triggers `#handleClose()` which performs the same pending-request rejection and close callback. @@ -124,7 +122,7 @@ If read loop exits unexpectedly, `finally` triggers `#handleClose()` which perfo Per request: -- timeout defaults to `config.timeout ?? 30000` +- timeout from `resolveMCPTimeoutMs`: `OMP_MCP_TIMEOUT_MS` env override, else `config.timeout ?? 30000`; `0` disables - optional `AbortSignal` from caller - abort and timeout both reject the pending promise and clean map entry @@ -150,7 +148,7 @@ When process exits or stream closes: ## Backpressure/streaming notes -- Outbound writes use `stdin.write()` + `flush()` without awaiting drain semantics. +- `request()` awaits `stdin.write()` + `flush()` so broken-pipe failures reject the request; `notify()` writes through `writeFrame()`, which does not await and neutralizes async EPIPE rejections. - There is no explicit queue or high-watermark management in transport. - Inbound processing is stream-driven (`for await` over `readJsonl`), one parsed message at a time. @@ -176,13 +174,13 @@ So `connected` means "transport usable", not "persistent stream established". For `request()`: -- timeout uses `AbortController` (`config.timeout ?? 30000`) +- timeout uses `AbortController` via `createMCPTimeout` (`OMP_MCP_TIMEOUT_MS` override, else `config.timeout ?? 30000`; `0` disables) - external signal, if provided, is merged via `AbortSignal.any([...])` - AbortError handling distinguishes caller abort vs timeout For `notify()`: -- timeout uses an internal `AbortController` (`config.timeout ?? 30000`) +- timeout uses an internal `AbortController` with the same resolved timeout - there is no external abort option on the transport interface For HTTP OAuth configs managed by `MCPManager`, outbound requests and best-effort server-request responses retry once on `HTTP 401`/`403` if token refresh returns replacement headers. @@ -230,7 +228,7 @@ SSE JSON parsing errors bubble out of `readSseJson` and reject request/listener. Notable differences from `HttpTransport`: - parses entire response text first, then extracts first `data: ` line (`parseSSE`), with JSON fallback -- no request timeout management, no abort API, no session-id handling, no transport lifecycle +- optional caller `AbortSignal` (`CallMcpOptions`), with a hard 60s `AbortSignal.timeout` default when none is given; no session-id handling, no transport lifecycle - returns raw JSON-RPC envelope object This path is lightweight but less robust than full transport implementation. diff --git a/docs/mcp-runtime-lifecycle.md b/docs/mcp-runtime-lifecycle.md index b6327d47b..7896bf8ac 100644 --- a/docs/mcp-runtime-lifecycle.md +++ b/docs/mcp-runtime-lifecycle.md @@ -4,7 +4,7 @@ This document describes how MCP servers are discovered, connected, exposed as to ## Lifecycle at a glance -1. **SDK startup** calls `discoverAndLoadMCPTools()` (unless MCP is disabled). +1. **SDK startup** kicks off MCP discovery (unless MCP is disabled): headless/SDK sessions await `discoverAndLoadMCPTools()`; interactive sessions (`hasUI: true`) create the manager up front and defer `discoverAndConnect()` until the session is live. 2. **Discovery** (`loadAllMCPConfigs`) resolves MCP server configs from capability sources, filters disabled/project/Exa entries and browser MCP servers when the built-in browser tool is enabled, and preserves source metadata. 3. **Manager connect phase** (`MCPManager.connectServers`) starts per-server connect + `tools/list` in parallel. 4. **Fast startup gate** waits up to 250ms, then may return: @@ -20,13 +20,17 @@ This document describes how MCP servers are discovered, connected, exposed as to ### Entry path from SDK -`createAgentSession()` in `src/sdk.ts` performs MCP startup when `enableMCP` is true (default): +`createAgentSession()` in `src/sdk.ts` performs MCP startup when `enableMCP` is true (default). There are two paths: -- calls `discoverAndLoadMCPTools(cwd, { ... })`, -- passes `authStorage`, cache storage, `mcp.enableProjectConfig`, and browser-MCP filtering based on the `browser.enabled` setting, -- always sets `filterExa: true`, -- logs per-server load/connect errors, -- stores returned manager in `toolSession.mcpManager` and session result. +- **Headless/SDK** (no UI, no provided manager): awaits `discoverAndLoadMCPTools(cwd, { ... })` and merges the returned tools into the startup `customTools` set. +- **Interactive/TUI** (`hasUI: true`, no provided manager): constructs `MCPManager` immediately (with cache + auth storage), defers `discoverAndConnect()` to a background task started after the session exists, then binds tools via `session.refreshMCPTools(...)` (disposing the manager if the session was torn down mid-connect). + +Both paths: + +- pass `authStorage`, cache storage, `mcp.enableProjectConfig`, and browser-MCP filtering based on the `browser.enabled` setting, +- always set `filterExa: true`, +- log per-server load/connect errors, +- store the manager in `toolSession.mcpManager` and the session result. If `enableMCP` is false, MCP discovery is skipped entirely. @@ -107,9 +111,9 @@ After 250ms: - rejected tasks produce per-server errors, - still-pending tasks: - use cached tool definitions if available (`MCPToolCache.get`) to create `DeferredMCPTool`s, - - otherwise block until those pending tasks settle. + - otherwise contribute no tools at startup; they stay in flight, and the background continuation registers their tools via `#onToolsChanged` once connect/list finishes (a slow server no longer blocks startup — issue #2100). -This is a hybrid startup model: fast return when cache is available, correctness wait when cache is not. +This is a hybrid startup model: fast return with deferred handles when cache is available, late background registration when it is not. ### Background completion behavior @@ -160,7 +164,7 @@ Current runtime behavior is connection-event driven: - **No autonomous polling health monitor** in manager/client. - **Automatic reconnect is wired to `transport.onClose`** for managed connections. -- Reconnect retries with backoff (`500`, `1000`, `2000`, `4000` ms), reloads tools, and notifies consumers on success. +- Reconnect retries with backoff (`500`, `1000`, `2000`, `4000` ms), reloads tools, and notifies consumers on success. A crash-storm circuit breaker suspends automatic reconnects for a server after more than 5 reconnect attempts within 30s; manual `/mcp reconnect` resets that history. - Tool calls that see retriable connection errors also attempt one reconnect + retry. - Reconnect is also explicit via `/mcp reconnect ` or broader `/mcp reload`. @@ -199,7 +203,7 @@ In current wiring, explicit teardown is used in MCP command flows (for reload/re | Invalid server config | Server skipped with validation error entry | Best-effort per server | | Connect timeout/init failure | Server error recorded; others continue | Best-effort per server | | `tools/list` still pending at startup with cache hit | Deferred tools returned immediately | Best-effort fast startup | -| `tools/list` still pending at startup without cache | Startup waits for pending to settle | Hard wait for correctness | +| `tools/list` still pending at startup without cache | No tools at startup; background continuation registers them via `#onToolsChanged` when ready | Best-effort late registration | | Late background tool-load failure | Logged after startup gate | Best-effort logging | | Runtime dropped transport | Manager attempts reconnect; stale tools remain while reconnecting and future calls may retry once or fail with MCP errors | Best-effort automatic recovery | diff --git a/docs/memory.md b/docs/memory.md index d5c07f9ba..558e51d07 100644 --- a/docs/memory.md +++ b/docs/memory.md @@ -41,7 +41,7 @@ The agent can read memory files directly using `memory://` URLs with the `read` ## How it works -Local summary memories are built by a background pipeline that runs at startup or when manually triggered via slash command. The pipeline is skipped for subagents and for sessions that are not persisted to a session file. +Local summary memories are built by a background pipeline that runs at startup; `/memory enqueue` marks consolidation work that the next startup picks up. The pipeline is skipped for subagents and for sessions that are not persisted to a session file. **Phase 1 — per-session extraction:** For each past session that has changed since it was last processed, a model reads the session history and extracts durable signal: technical decisions, constraints, resolved failures, recurring workflows. Sessions that are too recent, too old, currently active, or beyond the configured scan/age limits are skipped. Each extraction produces a raw memory block and a short synopsis for that session. @@ -59,12 +59,13 @@ Consolidated output is redacted for common secret/token patterns before `MEMORY. Memory extraction and consolidation behavior is driven by static prompt files in `packages/coding-agent/src/prompts/memories/`. -| File | Purpose | Variables | -| --------------------- | ------------------------------------------- | ------------------------------------------- | -| `stage_one_system.md` | System prompt for per-session extraction | — | -| `stage_one_input.md` | User-turn template wrapping session content | `{{thread_id}}`, `{{response_items_json}}` | -| `consolidation.md` | Prompt for cross-session consolidation | `{{raw_memories}}`, `{{rollout_summaries}}` | -| `read_path.md` | Memory guidance injected into live sessions | `{{memory_summary}}` | +| File | Purpose | Variables | +| ------------------------ | -------------------------------------------- | ------------------------------------------- | +| `stage_one_system.md` | System prompt for per-session extraction | — | +| `stage_one_input.md` | User-turn template wrapping session content | `{{thread_id}}`, `{{response_items_json}}` | +| `consolidation_system.md`| System prompt for cross-session consolidation | — | +| `consolidation.md` | User-turn prompt for cross-session consolidation | `{{raw_memories}}`, `{{rollout_summaries}}` | +| `read-path.md` | Memory guidance injected into live sessions | `{{memory_summary}}` | ### Model selection @@ -91,7 +92,7 @@ Additional tuning knobs (concurrency, lease durations, token budgets) are availa ## Key files -- `packages/coding-agent/src/memories/index.ts` — pipeline orchestration, injection, slash command handling +- `packages/coding-agent/src/memories/index.ts` — pipeline orchestration, injection, clear/enqueue entry points (the `/memory` command routes here via `packages/coding-agent/src/memory-backend/local-backend.ts`) - `packages/coding-agent/src/memories/storage.ts` — SQLite-backed job queue and thread registry - `packages/coding-agent/src/prompts/memories/` — memory prompt templates - `packages/coding-agent/src/internal-urls/memory-protocol.ts` — `memory://` URL handler diff --git a/docs/mnemosyne-memory-backend.md b/docs/mnemosyne-memory-backend.md index 482ed8d6a..347beb643 100644 --- a/docs/mnemosyne-memory-backend.md +++ b/docs/mnemosyne-memory-backend.md @@ -34,10 +34,12 @@ Recalled memory is background context, not instructions. Current user messages a | ------------------------------- | ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `memory.backend` | `off` | Set to `mnemopi` to enable this backend. | | `mnemopi.dbPath` | agent memories dir | Optional SQLite database path. | -| `mnemopi.bank` | project directory name | Base bank name passed to `Mnemopi`; the coding-agent wrapper scopes from this base according to `mnemopi.scoping`. | +| `mnemopi.bank` | unset | Optional shared bank base name passed to `Mnemopi`; the coding-agent wrapper scopes from this base according to `mnemopi.scoping`. Unset → shared bank `default`; per-project modes derive a project bank from the project root name plus a stable hash. | | `mnemopi.scoping` | `per-project` | Memory visibility mode: `global` = one shared bank, `per-project` = isolated project memory, `per-project-tagged` = project-local writes plus global recall visibility. | | `mnemopi.autoRecall` | `true` | Recall memory on the first turn of a session. | | `mnemopi.autoRetain` | `true` | Retain completed turns automatically. | +| `mnemopi.polyphonicRecall` | `false` | Enable 4-voice polyphonic recall (vector, graph, fact, temporal) with reciprocal rank fusion; `MNEMOPI_POLYPHONIC_RECALL` overrides when set. | +| `mnemopi.enhancedRecall` | `false` | Enable the tiered query result cache for repeated/similar recall queries; `MNEMOPI_ENHANCED_RECALL` overrides when set. | | `mnemopi.retainEveryNTurns` | `4` | Minimum user turns between automatic retain writes. | | `mnemopi.recallLimit` | `8` | Maximum recalled memories in the prompt block. | | `mnemopi.recallContextTurns` | `3` | Prior user-bounded turns included in recall queries. | @@ -65,7 +67,7 @@ The combined project-plus-global behavior lives in the wrapper. The `@oh-my-pi/p ## LLM and embeddings -The backend passes these settings to the `Mnemopi` constructor; if a setting is omitted, Mnemopi falls back to its `MNEMOPI_*` environment defaults. The backend does not download or run a local GGUF LLM. LLM-dependent paths use a configured pi-ai model, a dynamic completion function, a remote OpenAI-compatible endpoint, or deterministic no-LLM fallbacks. +The backend passes these settings to the `Mnemopi` constructor; if a setting is omitted, Mnemopi falls back to its `MNEMOPI_*` environment defaults. The backend does not download or run a local GGUF LLM. LLM-dependent paths use a configured pi-ai model, an opt-in local on-device memory model (`providers.memoryModel`, ONNX — overrides `smol`/`remote` when set to a local model), a dynamic completion function, a remote OpenAI-compatible endpoint, or deterministic no-LLM fallbacks. FTS-only: diff --git a/docs/models.md b/docs/models.md index 87f57c8f8..9e1b72b5c 100644 --- a/docs/models.md +++ b/docs/models.md @@ -10,7 +10,7 @@ Primary implementation files: - `src/config/model-resolver.ts` — parses model patterns and selects initial/smol/slow models - `src/config/settings-schema.ts` — model-related settings (`modelRoles`, provider transport preferences) - `src/session/auth-storage.ts` — API key + OAuth resolution order -- `packages/ai/src/models.ts` and `packages/ai/src/types.ts` — built-in providers/models and `Model`/`compat` types +- `packages/catalog/src/models.ts` and `packages/catalog/src/types.ts` — built-in providers/models (`getBundledModels` / `getBundledProviders`) and `Model`/`compat` types ## Config file location and legacy behavior @@ -130,7 +130,7 @@ Must define at least one of: ### Discovery -- `discovery` requires provider-level `api`. +- `discovery` requires provider-level `api`, except `discovery.type: proxy` (per-model wire auto-detected). ### Model value checks @@ -167,13 +167,13 @@ ModelRegistry pipeline (on refresh): ### Provider-model cache and static fingerprint Cached per-provider model lists are persisted in the model-cache SQLite -database (schema v3) with a `static_fingerprint` column that hashes the -static catalog slice merged into the row. When `resolveProviderModels` +database (current schema version 5) with a `static_fingerprint` column that +hashes the static catalog slice merged into the row. When `resolveProviderModels` skips the network fetch and the fingerprint of the in-memory static catalog matches the cached one, the cached rows are returned verbatim — the static + dynamic merge is bypassed entirely. The fingerprint is -memoized per process via a WeakMap keyed by the static-models array -reference, so repeated cold-start calls do not re-hash. +memoized per process by tagging the static-models array with a symbol +property, so repeated cold-start calls do not re-hash. ## Canonical model equivalence and coalescing @@ -459,14 +459,14 @@ disabledProviders: String entries apply everywhere. Scoped entries apply when the current working directory is the configured path or one of its subdirectories. Use `path`, `paths`, `pathPrefix`, or `pathPrefixes`; use `models` for `enabledModels`, `providers` for `disabledProviders`, or `values` for either. -## `/model` and `--list-models` +## `/model` and `omp models` Both surfaces keep provider-prefixed models visible and selectable. They now also expose canonical/coalesced models: - `/model` includes a canonical view alongside provider tabs -- `--list-models` prints a canonical section plus the concrete provider rows +- `omp models` prints provider-grouped tables of every concrete model, and `omp models canonical` prints the coalesced canonical view Selecting a canonical entry stores the canonical selector. Selecting a provider row stores the explicit `provider/modelId`. @@ -525,7 +525,7 @@ The built-in model policy currently links OpenAI `codex-spark` variants to `gpt- ## Compatibility and routing fields -The `compat` block on a provider or model overrides the URL-based auto-detection in `packages/ai/src/providers/openai-completions-compat.ts`. It is validated by `OpenAICompatSchema` in `packages/coding-agent/src/config/models-config-schema.ts` and consumed by every `openai-completions` transport (`packages/ai/src/providers/openai-completions.ts`). The canonical type is `OpenAICompat` in `packages/ai/src/types.ts`. +The `compat` block on a provider or model overrides the URL-based auto-detection in `packages/catalog/src/compat/openai.ts` (`buildOpenAICompat`). It is validated by `OpenAICompatSchema` in `packages/coding-agent/src/config/models-config-schema.ts` and consumed by every `openai-completions` transport (`packages/ai/src/providers/openai-completions.ts`). The canonical type is `OpenAICompat` in `packages/catalog/src/types.ts`. `models.yml` accepts the following keys (all optional; unset falls back to URL detection): @@ -539,17 +539,24 @@ Request shaping: - `supportsToolChoice` — emit the `tool_choice` parameter when the caller forces a specific tool. Default: `true`. Set `false` for endpoints that 400 on `tool_choice` (e.g. DeepSeek when reasoning is on). - `disableReasoningOnForcedToolChoice` — drop `reasoning_effort` / OpenRouter `reasoning` whenever `tool_choice` forces a call. Default: auto (Kimi/Anthropic-fronted endpoints). - `disableReasoningOnToolChoice` — drop reasoning fields whenever any `tool_choice` is sent. Default: auto (DeepSeek reasoning models). +- `alwaysSendMaxTokens` — always send a max-token field when the caller did not provide one. Default: auto (Kimi-family models derive TPM limits from `max_tokens`). +- `strictResponsesPairing` — Responses-API tool-call/result history must be strictly paired. Default: auto (Azure OpenAI, GitHub Copilot). +- `streamIdleTimeoutMs` — stream-watchdog idle-timeout floor in ms for slow reasoning hosts. Default: auto (GLM coding-plan hosts, direct DeepSeek reasoning). +- `cacheControlFormat` — `"anthropic"` to include Anthropic-style prompt-cache markers in chat-completions payloads. Default: auto (OpenRouter `anthropic/*` models). +- `supportsLongPromptCacheRetention` — host honors `prompt_cache_retention: "24h"` on the Responses API. Default: auto (api.openai.com). - `extraBody` — extra top-level fields merged into every request body (gateway hints, controller selectors, etc.). Reasoning / thinking: -- `supportsReasoningEffort` — accept `reasoning_effort`. Default: auto (off for Grok and zAI). +- `supportsReasoningEffort` — accept `reasoning_effort`. Default: auto (off for Grok, Z.ai/Zhipu, and Xiaomi MiMo). +- `supportsReasoningParams` — whether request shaping may send reasoning params at all. Default: auto (off for GitHub Copilot chat-completions). - `reasoningEffortMap` — partial map from internal effort levels (`minimal|low|medium|high|xhigh`) to provider-specific strings (e.g. DeepSeek maps `xhigh -> "max"`). - `thinkingFormat` — request shape for thinking: `"openai"` (`reasoning_effort`), `"openrouter"` (`reasoning: { effort }`), `"zai"` (`thinking: { type: "enabled" }`), `"qwen"` (top-level `enable_thinking`), or `"qwen-chat-template"` (`chat_template_kwargs.enable_thinking`). Default: `"openai"`. - `reasoningContentField` — assistant field carrying chain-of-thought: `"reasoning_content"`, `"reasoning"`, or `"reasoning_text"`. Default: auto. - `requiresReasoningContentForToolCalls` — assistant tool-call turns must round-trip the reasoning field (DeepSeek-R1, Kimi, OpenRouter when reasoning is on). Default: `false`. - `allowsSyntheticReasoningContentForToolCalls` — allow a placeholder reasoning field when a prior assistant tool-call turn lacks provider reasoning content. Default: `true`; set `false` for providers that validate the exact reasoning value. - `requiresAssistantContentForToolCalls` — assistant tool-call turns must include non-empty text content (Kimi). Default: `false`. +- `whenThinking` — partial compat overrides applied only when a request actually engages thinking mode (deep-merged over the baseline compat). Tool / message normalization: @@ -569,7 +576,7 @@ Provider-level `compat` is the baseline; per-model `compat` is deep-merged on to ### Anthropic compatibility (`anthropic-messages`) -For `anthropic-messages` models the runtime uses a separate `AnthropicCompat` shape (`packages/ai/src/types.ts`). The `models.yml` schema currently exposes only the strict-tools opt-out as a top-level provider field (see below); the remaining Anthropic-side knobs (`disableAdaptiveThinking`, `supportsEagerToolInputStreaming`, `supportsLongCacheRetention`, `supportsMidConversationSystem`) are set by built-in catalog metadata and are not user-configurable from `models.yml`. +For `anthropic-messages` models the runtime uses a separate `AnthropicCompat` shape (`packages/catalog/src/types.ts`). The `models.yml` schema exposes the strict-tools opt-out as a top-level provider field (see below) plus two Anthropic-side flags in the same `compat` slot — `requiresToolResultId` (non-standard `id` alias on `tool_result` blocks for Z.AI-style proxies) and `replayUnsignedThinking` (replay unsigned thinking blocks as native thinking instead of demoting them to text); the remaining Anthropic-side knobs (`disableAdaptiveThinking`, `supportsEagerToolInputStreaming`, `supportsLongCacheRetention`, `supportsMidConversationSystem`, `supportsForcedToolChoice`, `supportsSamplingParams`) are set by built-in catalog metadata and are not user-configurable from `models.yml`. ### Strict tool schemas (`disableStrictTools`) @@ -634,6 +641,33 @@ providers: type: openai-models-list ``` +The built-in vLLM provider can be pointed at a non-default endpoint without declaring a custom discovery type. OMP uses vLLM's `/v1/models` metadata and preserves vLLM's `max_model_len` field as the discovered context window. + +```yaml +providers: + vllm: + baseUrl: http://192.168.5.3:8085/v1 + auth: none +``` + +For multiple vLLM endpoints, use arbitrary provider IDs with the generic OpenAI-compatible discovery path. Set `auth: none` for local no-auth servers or `apiKey` for authenticated ones. Generic discovery reads `max_model_len` first and then `context_length` as a generic OpenAI-compatible fallback. + +```yaml +providers: + vllm-fast: + baseUrl: http://host-a:8000/v1 + auth: none + api: openai-completions + discovery: + type: openai-models-list + vllm-long: + baseUrl: http://host-b:8000/v1 + auth: none + api: openai-completions + discovery: + type: openai-models-list +``` + ### Hosted proxy with env-based key ```yaml diff --git a/docs/natives-addon-loader-runtime.md b/docs/natives-addon-loader-runtime.md index 9423dac49..2e4ee100f 100644 --- a/docs/natives-addon-loader-runtime.md +++ b/docs/natives-addon-loader-runtime.md @@ -29,7 +29,7 @@ At module initialization, `native/index.js` computes: - **Platform tag**: `${process.platform}-${process.arch}` (for example `darwin-arm64`). - **Package version**: from `packages/natives/package.json`. - **Core directories**: - - `leafPackageDir`: directory of the platform leaf package, resolved via `require.resolve("@oh-my-pi/pi-natives-/package.json")`; `null` when no leaf is installed (e.g. local dev). + - `leafPackageDir`: directory of the platform leaf package, resolved via `require.resolve("@oh-my-pi/pi-natives-/package.json")`; `null` when no leaf is installed (e.g. local dev) and forced to `null` in compiled-binary mode. - `nativeDir`: package-local `packages/natives/native`. - `execDir`: directory containing `process.execPath`. - `versionedDir`: `/`. @@ -95,11 +95,10 @@ The default unsuffixed fallback remains part of the x64 candidate list. ### Non-compiled runtime -For each filename, candidates are, in order: +Candidates are grouped by directory class, in order: -1. `/` (omitted when `leafPackageDir` is `null`) -2. `/` -3. `/` +1. `/` for every filename (omitted when `leafPackageDir` is `null`) +2. `/` then `/`, per filename The leaf package dir comes first so the optional-dependency binary published with the release is preferred over any `.node` left in the core package's `native/` (e.g. a stale local-dev build). @@ -107,12 +106,10 @@ On Windows installs where `nativeDir` is inside a `node_modules` segment (`shoul ### Compiled runtime -For each filename, candidates are: +Candidates are grouped, in order: -1. `/` -2. `/` -3. `/` -4. `/` +1. `/` then `/`, per filename +2. `/` then `/`, per filename At load time, an extracted embedded candidate, or a staged Windows candidate when no embedded candidate exists, is prepended ahead of these de-duplicated candidates. diff --git a/docs/natives-architecture.md b/docs/natives-architecture.md index c705f6aec..681671740 100644 --- a/docs/natives-architecture.md +++ b/docs/natives-architecture.md @@ -107,6 +107,7 @@ Loader failures are explicit: - `ast` - `block` - `clipboard` +- `crash_handler` - `fd` - `fs_cache` - `glob` @@ -123,6 +124,7 @@ Loader failures are explicit: - `pty` - `shell` - `sixel` +- `snapcompact` - `summary` - `task` - `text` diff --git a/docs/natives-binding-contract.md b/docs/natives-binding-contract.md index 375d6adf3..bc608b660 100644 --- a/docs/natives-binding-contract.md +++ b/docs/natives-binding-contract.md @@ -93,7 +93,7 @@ Changing sync ↔ async for an existing export is a breaking public API change b `#[napi(object)]` Rust structs become TS interfaces, for example: - `GrepResult`, `SearchResult`, `GlobResult`, `FuzzyFindResult` -- `ShellRunResult`, `ShellExecuteResult`, `PtyRunResult`, `MinimizerResult` +- `ShellRunResult`, `PtyRunResult`, `MinimizerResult` - `AstFindResult`, `AstReplaceResult`, `BlockRange`, `SummaryResult` - `System`/media/isolation payloads such as `ClipboardImage`, `WorkProfile`, `ParsedKittyResult`, `IsoResolveResult` diff --git a/docs/natives-build-release-debugging.md b/docs/natives-build-release-debugging.md index b779f50ad..471c596e8 100644 --- a/docs/natives-build-release-debugging.md +++ b/docs/natives-build-release-debugging.md @@ -26,6 +26,7 @@ It follows the architecture terms from `docs/natives-architecture.md`: - `bun scripts/build-native.ts` (`build`) → N-API build, addon install, generated declarations install, explicit ESM export and enum runtime patch. - `bun scripts/embed-native.ts` (`embed:native`) → generate `native/embedded-addon.js` plus `native/embedded-addons..tar.gz` from built files. +- `bun scripts/gen-npm-packages.ts` (`gen:npm`) → generate per-platform npm leaf packages (`@oh-my-pi/pi-natives--`, installed as optional dependencies of the core package) under `npm/` from built addon files. Root scripts include `build:native` as `bun --cwd=packages/natives run build`. @@ -40,7 +41,8 @@ Root scripts include `build:native` as `bun --cwd=packages/natives run build`. - `--no-js` - `--dts index.d.ts` - `--profile local` for non-CI local native builds, otherwise `--profile ci` -- optional `--target ` +- `-o ` +- optional `--target ` plus `--cross-compile` (napi picks the `cargo-zigbuild` or `cargo-xwin` backend from the target) for cross builds `crates/pi-natives/Cargo.toml` declares `crate-type = ["cdylib"]`; napi-rs emits `.node` artifacts plus generated `index.d.ts` in an isolated temporary output directory under `packages/natives/native/.build/`. @@ -131,7 +133,7 @@ Failure exits have explicit error text for invalid variants, failed napi build, 4. **Generate archive + manifest**: write `native/embedded-addons.-.tar.gz` containing all available target addon files and `native/embedded-addon.js` with package version, archive metadata, and file sizes. 5. **Runtime extraction ready** for compiled mode. -`--reset` writes the null manifest stub (`embeddedAddon = null`) without validating addon availability. +`--reset` writes the null manifest stub (`embeddedAddon = null`) without validating addon availability, and deletes any existing `embedded-addons.*.tar.gz` archives from `native/`. ## Dev workflow vs shipped/compiled behavior @@ -140,7 +142,7 @@ Failure exits have explicit error text for invalid variants, failed napi build, Typical local loop: 1. Build addon: `bun --cwd=packages/natives run build`. -2. Loader resolves package-local `native/` candidates, then executable-dir fallback candidates. +2. Loader resolves platform npm leaf-package candidates (`@oh-my-pi/pi-natives--`, when resolvable), then package-local `native/` and executable-dir fallback candidates. 3. Generated declarations in `native/index.d.ts` describe the public TS API. ## Shipped/compiled binary workflow diff --git a/docs/natives-media-system-utils.md b/docs/natives-media-system-utils.md index e025559b5..a351a8105 100644 --- a/docs/natives-media-system-utils.md +++ b/docs/natives-media-system-utils.md @@ -55,7 +55,7 @@ Conversion behavior: ### Clipboard (`clipboard`) -- `copyToClipboard(text)` is a synchronous native call using `arboard::Clipboard::set_text`. +- `copyToClipboard(text)` is a synchronous native call using `arboard::Clipboard::set_text`. On Linux a single process-lifetime `Clipboard` instance is kept alive (X11/Wayland selection ownership); macOS/Windows use a transient instance per call. - `readImageFromClipboard()` runs in `task::blocking("clipboard.read_image", (), ...)`. - Image read returns `null`/`undefined` when `arboard` reports `ContentNotAvailable`. - Successful image read converts clipboard RGBA data into PNG bytes and returns `{ data: Uint8Array, mimeType: "image/png" }`. @@ -112,7 +112,7 @@ Failure transitions: ### Clipboard lifecycle -- Text copy constructs an `arboard::Clipboard` and calls `set_text` synchronously. +- Text copy calls `set_text` synchronously; macOS/Windows construct a transient `arboard::Clipboard` per call, while Linux initializes one process-lifetime instance on first copy and reuses it. - Image read constructs an `arboard::Clipboard`, calls `get_image`, encodes PNG on success, maps `ContentNotAvailable` to `None`, and rejects other errors. ### Work profiling lifecycle diff --git a/docs/natives-shell-pty-process.md b/docs/natives-shell-pty-process.md index 146277e50..a52190ae7 100644 --- a/docs/natives-shell-pty-process.md +++ b/docs/natives-shell-pty-process.md @@ -46,7 +46,7 @@ Rust creates `brush_core::Shell` with: - inherited environment disabled (`do_not_inherit_env: true`), followed by explicit environment reconstruction from host env, - profile and rc loading skipped, - bash-mode builtins, with `exec` and `suspend` disabled, -- native `sleep` and `timeout` builtins registered, +- native `sleep`, `timeout`, and `nohup` builtins registered, - skip-list for shell-sensitive vars (`PS1`, `PWD`, `SHLVL`, bash function exports, etc.), - a non-exported `env="$env"` fallback so PowerShell-style `$env:NAME` survives brush parameter expansion unless the user shadows `env`. @@ -227,7 +227,7 @@ The parser combines: Modifier handling: -- only shift/alt/ctrl bits are compared for key matching, +- only shift/alt/ctrl/super bits are compared for key matching, - lock bits are masked out before comparisons. Layout behavior: diff --git a/docs/non-compaction-retry-policy.md b/docs/non-compaction-retry-policy.md index ef84e5678..8e405b720 100644 --- a/docs/non-compaction-retry-policy.md +++ b/docs/non-compaction-retry-policy.md @@ -32,7 +32,10 @@ So: overload/rate/server/network-style failures use this retry policy; context-w - assistant `stopReason === "error"` - `errorMessage` exists - message is **not** context overflow -- `errorMessage` matches transient transport/envelope patterns or `isUsageLimitError(...)` +- one of: + - the stop is a classifier refusal (`stopDetails.type` is `"refusal"` or `"sensitive"`) + - the error is a stale OpenAI Responses replay failure (`Item with id '…' not found`, or an invalid/expired/not-found `previous_response`) + - `errorMessage` matches transient transport/envelope patterns or `isUsageLimitError(...)` Current retryable inputs are regex/string-classified: @@ -44,7 +47,7 @@ Current retryable inputs are regex/string-classified: - provider-suggested retry wording, including OpenAI `retry your request` failures - network/connection/socket failures, refused/closed connections, upstream connect/reset-before-headers, socket hang up, timeout/timed out, fetch failed, terminated, retry delay wording, and unexpected socket close messages -This is string-pattern classification, not typed provider error codes. +Transport classification is regex text matching, not typed provider error codes; classifier refusals are the exception, detected from the typed `stopDetails` field. ## Retry lifecycle and state transitions @@ -62,9 +65,9 @@ Flow (`#handleRetryableError`): 3. Increment `#retryAttempt`. 4. Create `#retryPromise` once (first attempt in a chain). 5. If attempt exceeded `retry.maxRetries`, emit final failure event and stop. -6. Compute capped jittered local delay: `min(retry.baseDelayMs * 2^(attempt-1), 8000ms) * (75–100% jitter)`. -7. For usage-limit errors, parse retry hints and call auth storage (`markUsageLimitReached(...)`); if credential switching succeeds, force delay to `0`. Otherwise wait for whichever comes first — the provider's retry-after/backoff hint, or the earliest moment a temporarily blocked sibling credential frees up (`retryAtMs` + 1s buffer) so the next attempt can pick it up. -8. If no credential switch occurred, suppress the current model selector for cooldown, try configured retry model fallback chains, and force delay to `0` on model switch. +6. Compute capped jittered local delay: `min(retry.baseDelayMs * 2^(attempt-1), 8000ms) * (75–100% jitter)`. Stale OpenAI Responses replay errors skip the backoff entirely (delay `0`) after resetting the cached provider session. +7. For usage-limit errors, parse retry hints and call auth storage (`markUsageLimitReached(...)`); if credential switching succeeds — including spending a banked Codex reset via the opt-in auto-redeem — force delay to `0`. Otherwise wait for whichever comes first — the provider's retry-after/backoff hint, or the earliest moment a temporarily blocked sibling credential frees up (`retryAtMs` + 1s buffer) so the next attempt can pick it up. +8. If no credential switch occurred and `retry.modelFallback` is enabled, suppress the current model selector for cooldown and try configured retry model fallback chains, forcing delay to `0` on model switch. Classifier refusals skip the cooldown and only proceed when a fallback model was actually applied (pinned); with no fallback, the chain ends without an `auto_retry_start`. 9. If the final delay exceeds `retry.maxDelayMs` and no credential/model switch happened, emit final failure and do not sleep. 10. Emit `auto_retry_start`. 11. Remove the trailing assistant error message from agent runtime state (kept in persisted session history). @@ -79,8 +82,9 @@ Flow (`#handleRetryableError`): - retry cancellation during backoff sleep - max retries exceeded path - max delay exceeded path +- classifier refusal with no fallback model applied (chain ends silently, no retry started) -`#retryPromise` resolves/clears when retry chain ends (success, cancellation, max-exceeded, or max-delay failure), via `#resolveRetry()`. +`#retryPromise` resolves/clears when retry chain ends (success, cancellation, max-exceeded, max-delay failure, or classifier-refusal stop), via `#resolveRetry()`. ## Backoff and max-attempt semantics @@ -138,7 +142,7 @@ On `auto_retry_end`, it restores prior `Esc` handler and clears loader state. ## Streaming and prompt completion behavior -`prompt()` ultimately waits on `#waitForRetry()` after `agent.prompt(...)` returns. +`prompt()` ultimately waits on `#waitForPostPromptRecovery()` after `agent.prompt(...)` returns; that loop awaits the retry lifecycle promise alongside TTSR resume and deferred post-prompt tasks. Effect: @@ -157,6 +161,7 @@ Defined in settings schema under retry group: - `retry.maxRetries` - `retry.baseDelayMs` - `retry.maxDelayMs` +- `retry.modelFallback` (default `true`; gates retry model-fallback switching) - `retry.fallbackChains` - `retry.fallbackRevertPolicy` (`"cooldown-expiry"` by default; `"never"` disables automatic restoration) diff --git a/docs/notebook-tool-runtime.md b/docs/notebook-tool-runtime.md index 84ab459a0..6112ca172 100644 --- a/docs/notebook-tool-runtime.md +++ b/docs/notebook-tool-runtime.md @@ -84,7 +84,7 @@ Kernel semantics are implemented in `executePython` / `PythonKernel` and apply t `PythonKernelMode`: - `session` (default) - - kernels are cached by `(session id, cwd)` + - kernels are cached by `(session id, cwd, interpreter)` - multiple owners can share a retained kernel for the same key - execution is serialized by the tool's exclusive concurrency and backend execution path - dead kernels are replaced before execution @@ -103,7 +103,7 @@ In session mode: - if the retained subprocess is not alive before execution, it is replaced - if execution fails because the subprocess died, the kernel is replaced and the code is retried once -- explicit `reset` is rejected while another reset for the same session key is already in progress +- concurrent resets for the same session key coalesce: a reset already in flight is awaited instead of starting another, and runs queued behind it proceed on the freshly-restarted kernel ## 4) Environment/session variable injection @@ -114,6 +114,7 @@ Kernel startup and per-execution environment patching can receive: - `PI_TOOL_BRIDGE_URL` - `PI_TOOL_BRIDGE_TOKEN` - `PI_TOOL_BRIDGE_SESSION` +- `PI_EVAL_LOCAL_ROOTS` The runner initializes process state so code executes in the requested cwd, managed env entries are reflected in `os.environ`, and cwd is available on `sys.path`. diff --git a/docs/plugin-manager-installer-plumbing.md b/docs/plugin-manager-installer-plumbing.md index dadbcb444..b87651d94 100644 --- a/docs/plugin-manager-installer-plumbing.md +++ b/docs/plugin-manager-installer-plumbing.md @@ -1,6 +1,6 @@ # Plugin manager and installer plumbing -This document describes how `omp plugin` npm/link operations mutate plugin state on disk and how installed npm/link plugins become runtime capabilities (tools and extensions today, hooks/commands path resolution available). Marketplace installs use separate marketplace registries and cache plumbing; see `docs/marketplace.md`. +This document describes how `omp plugin` npm/git/link operations mutate plugin state on disk and how installed npm/git/link plugins become runtime capabilities (tools and extensions today, hooks/commands path resolution available). Marketplace installs use separate marketplace registries and cache plumbing; see `docs/marketplace.md`. ## Scope and architecture @@ -9,7 +9,7 @@ There are two plugin-management implementations in the codebase: 1. **Active path used by CLI commands**: `PluginManager` (`src/extensibility/plugins/manager.ts`) 2. **Legacy helper module**: installer functions (`src/extensibility/plugins/installer.ts`) -`omp plugin` npm/link actions go through `PluginManager`; marketplace actions go through `MarketplaceManager`. +`omp plugin` npm/git/link actions go through `PluginManager`; marketplace actions go through `MarketplaceManager`. `install` classifies each target (`classifyInstallTarget` in `cli/classify-install-target.ts`): `name@marketplace` routes to the marketplace manager, local paths route to `PluginManager.link()`, git and npm specs to `PluginManager.install()`. `installer.ts` still documents important safety checks and filesystem behavior, but it is not the path used by `src/commands/plugin.ts` + `src/cli/plugin-cli.ts`. @@ -75,6 +75,8 @@ Marketplace registries live separately: - `pkg[a,b]` -> enable named features - `@scope/pkg@1.2.3[feat]` -> scoped + versioned package with explicit feature selection +`PluginManager.install` also accepts git sources (validated by `validateGitSpec` instead of the npm regex): namespaced shorthands `github:user/repo[#ref]`, `gitlab:`, `bitbucket:`, `codeberg:`, `sourcehut:`/`srht:`, and full git URLs (`https://github.com/user/repo`, `git@github.com:user/repo`, `ssh://…`, `git+https://…`). Git specs do not encode the package name, so install diffs `plugins/package.json#dependencies` before/after `bun install` to resolve it. + `extractPackageName` strips version suffix for on-disk path lookup after install. ## Manifest source and required fields @@ -97,10 +99,10 @@ Malformed `package.json` JSON is a hard failure at read time; malformed manifest ## Install/update flow (`PluginManager.install`) 1. Parse feature bracket syntax from install spec. -2. Validate package name against regex + shell-metacharacter denylist. +2. Validate the spec: git specs via `validateGitSpec`; npm specs against the package-name regex + shell-metacharacter denylist. 3. Ensure plugin `package.json` exists (`omp-plugins`, private dependencies map). 4. Run `bun install ` in `~/.omp/plugins`. -5. Read installed package `node_modules//package.json`. +5. Resolve the installed package name (npm: strip version via `extractPackageName`; git: diff `dependencies` before/after) and read `node_modules//package.json`. 6. Resolve manifest and compute `enabledFeatures`: - `[*]`: all declared features (or `null` if no feature map) - `[a,b]`: validates each feature exists in manifest features map @@ -162,7 +164,7 @@ Caveat: current `PluginManager.link` does not enforce the `cwd` path-boundary ch `getEnabledPlugins(cwd)` (`plugins/loader.ts`) reads: -- plugin dependency manifest (`package.json`) +- plugin dependency manifest (`package.json`), unioned with lockfile plugin entries so `plugin link`-only plugins without a dependency entry are still discovered - lockfile runtime state - project overrides via `getConfigDirPaths("plugin-overrides.json", { user: false, cwd })` @@ -188,7 +190,7 @@ Each resolver includes base entries plus feature entries: - explicit feature list -> only selected features - `enabledFeatures === null` -> enable features marked `default: true` -Manifest entries may point to a file or to a directory containing `index.ts`, `index.js`, `index.mjs`, or `index.cjs`. Missing files are silently skipped (`existsSync` guard). +Manifest entries may point to a file or to a directory containing `index.ts`, `index.js`, `index.mjs`, or `index.cjs`. Missing files are silently skipped (`statSync`/`existsSync` guard). ## Current runtime wiring differences @@ -218,8 +220,9 @@ No cross-process locking or merge strategy exists; concurrent writers can overwr Active manager path enforces package-name validation: -- regex for scoped/unscoped package specs (optionally with version) -- explicit shell metacharacter denylist (`[;&|`$(){}[]<>\\]`) +- npm specs: regex for scoped/unscoped package specs (optionally with version) +- shell metacharacter denylist: `;`, `&`, `|`, backtick, `$`, `(`, `)`, `{`, `}`, `<`, `>`, `\`, newline, CR, tab (`[`/`]` are allowed for feature brackets) +- git specs: `validateGitSpec` (permits `:`, `/`, `#`, `+`, `.`, `-`, `_`) instead of the npm regex This limits command-injection risk when invoking `bun install/uninstall`. diff --git a/docs/porting-from-pi-mono.md b/docs/porting-from-pi-mono.md index 23e4dfcd1..a7ac8dbab 100644 --- a/docs/porting-from-pi-mono.md +++ b/docs/porting-from-pi-mono.md @@ -100,7 +100,7 @@ const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "myapp-")); ## 5) Prefer Bun embeds (no copying) -Do not add new runtime asset copy steps. Keep assets in repo and prefer Bun embeds/imports; preserve existing explicit generation workflows such as `packages/coding-agent/src/export/html/template.generated.ts`. +Do not add new runtime asset copy steps. Keep assets in repo and prefer Bun embeds/imports; preserve existing explicit generation workflows such as `packages/coding-agent/src/export/html/tool-views.generated.js` (built from collab-web sources via `bun run build-tool-views`). - If upstream copies assets into a dist folder, replace with Bun-friendly embeds. - Prompts are static `.md` files; use Bun text imports (`with { type: "text" }`) and Handlebars instead of inline prompt strings. diff --git a/docs/provider-streaming-internals.md b/docs/provider-streaming-internals.md index 7ad3c1e47..17ee6f169 100644 --- a/docs/provider-streaming-internals.md +++ b/docs/provider-streaming-internals.md @@ -5,8 +5,8 @@ This document explains how token/tool streaming is normalized in `@oh-my-pi/pi-a ## End-to-end flow 1. `streamSimple()` (`packages/ai/src/stream.ts`) maps generic options and dispatches to a provider stream function. -2. Provider stream functions translate provider-native stream events into the unified `AssistantMessageEvent` sequence. Current built-ins include Anthropic, OpenAI Responses/Completions/Codex/Azure Responses, Google Gemini/Gemini CLI/Vertex, Bedrock Converse, Ollama, Cursor, pi-native gateway transport, plus GitLab Duo/Kimi/Synthetic wrappers and extension-registered custom APIs. -3. Each provider pushes events into `AssistantMessageEventStream` (`packages/ai/src/utils/event-stream.ts`), which throttles delta events and exposes: +2. Provider stream functions translate provider-native stream events into the unified `AssistantMessageEvent` sequence. Current built-ins include Anthropic, OpenAI Responses/Completions/Codex/Azure Responses, Google Gemini/Gemini CLI/Vertex, Bedrock Converse, Ollama, Cursor, pi-native gateway transport, plus GitLab Duo/Kimi/Synthetic/xAI-Grok-Responses wrappers and extension-registered custom APIs. +3. Each provider pushes events into `AssistantMessageEventStream` (`packages/ai/src/utils/event-stream.ts`), which exposes: - async iteration for incremental updates - `result()` for final `AssistantMessage` 4. `agentLoop` (`packages/agent/src/agent-loop.ts`) consumes those events, mutates in-flight assistant state, and emits `message_update` events carrying the raw `assistantMessageEvent`. @@ -28,18 +28,13 @@ All providers emit the same shape (`AssistantMessageEvent` in `packages/ai/src/t `AssistantMessageEventStream` guarantees: - final result is resolved by terminal event (`done` or `error`) -- deltas are batched/throttled (~50ms) -- buffered deltas are flushed before non-delta events and before completion +- events are delivered to consumers immediately, in push order (no batching or merging) -## Delta throttling and harmonization behavior +## Delta throttling behavior -`AssistantMessageEventStream` treats `text_delta`, `thinking_delta`, and `toolcall_delta` as mergeable events: +`AssistantMessageEventStream` itself no longer throttles or merges delta events — every provider event is delivered as pushed. The per-delta cost control moved into tool-call argument parsing: providers accumulate partial JSON and re-parse it via `parseStreamingJsonThrottled()` (`packages/ai/src/utils/json-parse.ts`), which skips the re-parse until at least `STREAMING_JSON_PARSE_MIN_GROWTH` (256) new bytes have arrived, bounding mid-stream parse cost from quadratic to linear. The final `toolcall_end` parse is always unconditional and authoritative. -- buffered deltas are merged only when **type + contentIndex** match -- merge keeps the latest `partial` snapshot -- non-delta events force immediate flush - -This smooths high-frequency provider streams for TUI/event consumers, but is not provider backpressure: providers still produce at full speed, while the local stream buffers. +There is no provider backpressure: providers still produce at full speed, while the local stream queues. ## Provider normalization details @@ -63,7 +58,7 @@ Tool-call argument streaming: - each tool block carries internal `partialJson` - every JSON delta appends to `partialJson` -- `arguments` are reparsed on each delta via `parseStreamingJson()` +- `arguments` are reparsed on appended deltas via `parseStreamingJsonThrottled()` (re-parse only after ≥256 new bytes) - `toolcall_end` reparses once more, then strips `partialJson` ## OpenAI Responses family (`openai-responses`, `openai-codex-responses`, `azure-openai-responses`) @@ -88,7 +83,7 @@ Tool-call argument streaming: ## Google Generative AI (`google-generative-ai`) -Source: `packages/ai/src/providers/google.ts` +Source: `packages/ai/src/providers/google.ts` (thin request wrapper) and `google-shared.ts` (`streamGoogleGenAI`, shared chunk-to-block translation) Normalization points: @@ -106,17 +101,17 @@ Tool-call argument streaming: ## Partial tool-call JSON accumulation and recovery -Shared behavior for Anthropic/OpenAI Responses uses `parseStreamingJson()` (`packages/ai/src/utils/json-parse.ts`): +Shared behavior for Anthropic/OpenAI Responses uses `parseStreamingJson()` / `parseStreamingJsonThrottled()` (`packages/ai/src/utils/json-parse.ts`): 1. try `JSON.parse` -2. fallback to `partial-json` parser for incomplete fragments +2. fallback to `repairJson()` + the `partial-json` parser for incomplete fragments 3. if both fail, return `{}` Implications: - malformed or truncated argument deltas do not crash stream processing immediately - in-progress `arguments` may temporarily be `{}` -- later valid deltas can recover structured arguments because parsing is retried on every append +- later valid deltas can recover structured arguments because parsing is retried as the buffer grows (throttled to ≥256-byte growth steps mid-stream) - final `toolcall_end` performs one more parse attempt before emission ## Stop reasons vs transport/runtime errors @@ -140,7 +135,7 @@ If provider stream throws or signals failure, each provider wrapper catches and ## Malformed chunk / SSE parse failure behavior -Most provider paths delegate chunk/SSE framing to vendor SDK streams (Anthropic SDK, OpenAI SDK, Google SDK). The Codex SSE fallback uses `readSseJson()` directly, and websocket Codex frames are normalized through the same event handler. +The OpenAI Completions/Responses paths delegate chunk/SSE framing to the `openai` SDK stream. Anthropic uses the in-repo `AnthropicMessagesClient` (`packages/ai/src/providers/anthropic-client.ts`); the Google paths and the Codex SSE fallback read SSE via `readSseJson()` directly, and websocket Codex frames are normalized through the same event handler. Observed behavior in current implementation: @@ -169,7 +164,7 @@ Tool execution cancellation is separate from model stream cancellation: There is no hard backpressure mechanism between provider SDK stream and downstream consumers: - `EventStream` uses in-memory queues with no max size -- throttling reduces UI update rate but does not slow provider intake +- the throttled partial-JSON re-parse reduces per-delta CPU cost but does not slow provider intake - if consumers lag significantly, queued events can grow until completion Current design favors responsiveness and simple ordering over bounded-buffer flow control. @@ -195,7 +190,7 @@ Unified (common contract): - event shape (`AssistantMessageEvent`) - final result extraction (`done`/`error`) -- delta throttling + merge rules +- immediate in-order event delivery - agent/session event propagation model Provider-specific (not fully abstracted): @@ -210,7 +205,7 @@ Provider-specific (not fully abstracted): ## Implementation files - [`../../ai/src/stream.ts`](../packages/ai/src/stream.ts) — provider dispatch, option mapping, API key/session plumbing, custom API dispatch, and provider-specific credential handling. -- [`../../ai/src/utils/event-stream.ts`](../packages/ai/src/utils/event-stream.ts) — generic stream queue + assistant delta throttling. +- [`../../ai/src/utils/event-stream.ts`](../packages/ai/src/utils/event-stream.ts) — generic stream queue + final-result resolution. - [`../../ai/src/utils/json-parse.ts`](../packages/ai/src/utils/json-parse.ts) — partial JSON parsing for streamed tool arguments. - [`../../ai/src/providers/anthropic.ts`](../packages/ai/src/providers/anthropic.ts) — Anthropic event translation and tool JSON delta accumulation. - [`../../ai/src/providers/openai-responses.ts`](../packages/ai/src/providers/openai-responses.ts), [`openai-responses-shared.ts`](../packages/ai/src/providers/openai-responses-shared.ts), [`openai-codex-responses.ts`](../packages/ai/src/providers/openai-codex-responses.ts), [`azure-openai-responses.ts`](../packages/ai/src/providers/azure-openai-responses.ts) — Responses-family event translation and status mapping. diff --git a/docs/providers.md b/docs/providers.md new file mode 100644 index 000000000..75c747642 --- /dev/null +++ b/docs/providers.md @@ -0,0 +1,351 @@ +# Providers + +Providers are the model backends `omp` can route requests to: Anthropic, OpenAI, Google Gemini, Groq, OpenRouter, Mistral, xAI, local engines like Ollama, hosted gateways, custom `models.yml` providers, and providers registered by extensions. + +A **provider** is the account or backend namespace, such as `anthropic`, `openai`, `google`, or `ollama`. A **model** is a concrete model under that provider, selected as `provider/model-id`, such as `anthropic/claude-opus-4-6`. Disabling a provider removes every model under it from selection; if you only want to narrow individual models, use model settings instead. + +This page covers how providers become available, how credentials are resolved, the provider/environment-variable map, local engines, disabling providers, and custom providers. For model selection and the full `models.yml` schema, see [Model and Provider Configuration](./models.md). For config-file locations and merge precedence, see [Settings](./settings.md). For credential storage and login flows in depth, see [Secrets and credentials](./secrets.md). For the complete environment-variable reference, see [Environment variables](./environment-variables.md). For local engine setup, see [Local models](./local-models.md). For context-file discovery providers, see [Context files](./context-files.md). + +## How `omp` decides a provider is available + +At startup the model registry assembles its catalog from four sources, in order: + +1. The bundled model catalog (every built-in provider and its known models). +2. Custom provider and model entries from `~/.omp/agent/models.yml`. +3. Runtime-discovered models for providers that support discovery (local engines and discovery-enabled gateways). +4. Providers and models registered by extensions. + +The registry can hold a model even when it is not currently selectable. A model becomes **available** only when both conditions hold: + +1. its provider ID is **not** in the effective `disabledProviders` list; **and** +2. the provider is either **keyless** (an implicit local provider, or a custom provider with `auth: none`) **or** has resolvable credentials. + +`disabledProviders` is checked *before* credentials. If a provider ID is disabled, no stored key, OAuth session, environment variable, `.env` entry, or `models.yml` `apiKey` will make it selectable — the provider's models are dropped from availability regardless of credentials. Removing the ID from the effective list restores them. + +Keyless local engines are a special case: `ollama`, `llama.cpp`, and `lm-studio` are treated as keyless when no key is configured, so their discovered models are selectable as soon as the engine answers — no login required. See [Built-in local engines](#built-in-local-engines). + +## Credentials and precedence + +When a provider needs an API key, `omp` resolves it in this order (first match wins): + +1. **Runtime override** — a key supplied for the current process, e.g. CLI `--api-key`. Never persisted. +2. **`models.yml` config key** — an `apiKey` pinned on a custom provider, registered as a config-sourced bearer. This deliberately beats stored OAuth, so a key supplied for a custom `baseUrl`/gateway is honored instead of forwarding an upstream OAuth token the proxy would reject. +3. **Stored API key** — an API-key credential saved in the auth store. +4. **Stored OAuth credential** — refreshed when needed; multiple accounts are ranked/rotated automatically. +5. **Provider environment variable** — including values loaded from `.env` files (see [the env-var table](#environment-variables-and-env-files)). +6. **`models.yml` fallback resolver** — keys for custom providers not otherwise registered. + +Stored credentials live in the auth store at `~/.omp/agent/agent.db` for local auth, or in the configured auth-broker snapshot when running in broker mode. (`PI_CODING_AGENT_DIR` relocates the `~/.omp/agent` base, and the auth store moves with it.) + +### OAuth vs API key, and provider-scoped logins + +Logins are **provider-scoped**: authenticating `anthropic` does not authenticate `openai`, and each provider tracks its own credentials. A disabled provider stays disabled even with valid stored auth. + +Use the interactive slash commands inside a session: + +- `/login` — opens the OAuth/key selector. `/login ` jumps straight to one provider (e.g. `/login anthropic`); for an OAuth flow that needs a pasted callback, run `/login ` to complete it. +- `/logout` — opens the provider selector to remove stored credentials. + +For headless or remote setups backed by a shared auth broker, the CLI exposes `omp auth-broker login ` / `omp auth-broker logout` (and `status`, `list`, `import`, `migrate`). See [Secrets and credentials](./secrets.md) for the broker model. + +When a model has no credentials, `omp` tells you to run `/login` or set the provider's environment variable. + +### Pinning a key in `models.yml` + +A custom provider's `apiKey` is resolved as **environment-variable-name-or-literal**: if the value names an existing environment variable, that variable's value is used; otherwise the string itself is the key. Prefixing the value with `!` runs it as a shell command and uses the trimmed stdout (see [Model and Provider Configuration](./models.md) for the full value syntax). + +```yaml +# ~/.omp/agent/models.yml +providers: + my-gateway: + baseUrl: https://gateway.example.com/v1 + api: openai-completions + apiKey: MY_GATEWAY_API_KEY # reads this env var if set, else literal text + models: + - id: claude-sonnet + name: Claude Sonnet via Gateway + contextWindow: 200000 + maxTokens: 8192 +``` + +If `authHeader: true` is set on a custom provider, the resolved key is injected as an `Authorization: Bearer ` header on every request to that provider. + +## Environment variables and `.env` files + +Each provider has one or more environment variables that supply a key when no stored credential exists. The table below is the verified provider → variable map; the full catalog is large, so it is split into core and additional providers. OAuth-backed providers can also accept a token variable in addition to (or instead of) an API key. + +### Core providers + +| Provider ID | Environment variable(s) | +|---|---| +| `anthropic` | `ANTHROPIC_OAUTH_TOKEN`, then `ANTHROPIC_API_KEY` (Foundry mode prefers `ANTHROPIC_FOUNDRY_API_KEY` when `CLAUDE_CODE_USE_FOUNDRY=true`) | +| `openai` | `OPENAI_API_KEY` | +| `openai-codex` | `OPENAI_CODEX_OAUTH_TOKEN` | +| `google` | `GEMINI_API_KEY` | +| `google-vertex` | `GOOGLE_CLOUD_API_KEY`, or Application Default Credentials (`GOOGLE_APPLICATION_CREDENTIALS` + `GOOGLE_CLOUD_PROJECT` + `GOOGLE_CLOUD_LOCATION`) | +| `groq` | `GROQ_API_KEY` | +| `openrouter` | `OPENROUTER_API_KEY` | +| `mistral` | `MISTRAL_API_KEY` | +| `xai` | `XAI_API_KEY` | +| `xai-oauth` | `XAI_OAUTH_TOKEN`, then `XAI_API_KEY` | +| `github-copilot` | `COPILOT_GITHUB_TOKEN` | +| `cursor` | `CURSOR_ACCESS_TOKEN` | +| `azure-openai-responses` | `AZURE_OPENAI_API_KEY` | +| `amazon-bedrock` | `AWS_PROFILE`, or `AWS_ACCESS_KEY_ID` + `AWS_SECRET_ACCESS_KEY`, or an ECS/IRSA credential chain | + +### Additional hosted providers + +| Provider ID | Environment variable(s) | +|---|---| +| `cerebras` | `CEREBRAS_API_KEY` | +| `deepseek` | `DEEPSEEK_API_KEY` | +| `fireworks` | `FIREWORKS_API_KEY` | +| `together` | `TOGETHER_API_KEY` | +| `nvidia` | `NVIDIA_API_KEY` | +| `huggingface` | `HUGGINGFACE_HUB_TOKEN`, then `HF_TOKEN` | +| `moonshot` | `MOONSHOT_API_KEY` | +| `kimi-code` | `KIMI_API_KEY` | +| `nanogpt` | `NANO_GPT_API_KEY` | +| `venice` | `VENICE_API_KEY` | +| `vercel-ai-gateway` | `AI_GATEWAY_API_KEY` (also `VERCEL_AI_GATEWAY_API_KEY` for catalog discovery) | +| `cloudflare-ai-gateway` | `CLOUDFLARE_AI_GATEWAY_API_KEY` | +| `litellm` | `LITELLM_API_KEY` | +| `kilo` | `KILO_API_KEY` | +| `zai` | `ZAI_API_KEY` | +| `zenmux` | `ZENMUX_API_KEY` | +| `zhipu-coding-plan` | `ZHIPU_API_KEY` | +| `qianfan` | `QIANFAN_API_KEY` | +| `qwen-portal` | `QWEN_OAUTH_TOKEN`, then `QWEN_PORTAL_API_KEY` | +| `synthetic` | `SYNTHETIC_API_KEY` | +| `minimax` | `MINIMAX_API_KEY` | +| `alibaba-coding-plan` | `ALIBABA_CODING_PLAN_API_KEY` | +| `aimlapi` | `AIMLAPI_API_KEY` | +| `gitlab-duo` | `GITLAB_TOKEN` | +| `opencode-zen`, `opencode-go` | `OPENCODE_API_KEY` | +| `firepass` | `FIREPASS_API_KEY` | +| `wafer-pass` | `WAFER_PASS_API_KEY` | +| `wafer-serverless` | `WAFER_SERVERLESS_API_KEY` | +| `xiaomi` | `XIAOMI_API_KEY` | +| `ollama-cloud` | `OLLAMA_CLOUD_API_KEY` | +| `ollama` | `OLLAMA_API_KEY` (optional; local discovery is keyless by default) | +| `lm-studio` | `LM_STUDIO_API_KEY` (optional; keyless by default) | +| `llama.cpp` | `LLAMA_CPP_API_KEY` (only when the server requires auth) | + +OAuth-backed providers such as `anthropic`, `github-copilot`, `cursor`, `ollama-cloud`, `qwen-portal`, `xai-oauth`, `wafer-pass`, `wafer-serverless`, `google-gemini-cli`, and `google-antigravity` are normally reached through `/login` rather than an environment variable. See [Environment variables](./environment-variables.md) for search-tool and configuration variables not listed here. + +### `.env` discovery and precedence + +`omp` eagerly loads `.env` files into the process environment before any provider lookup. It reads four files and, for each variable, the **first** source that defines it wins. Effective precedence, high to low: + +1. The process environment inherited by `omp` (already-set variables always win). +2. `/.env` +3. `~/.omp/agent/.env` +4. `~/.omp/.env` +5. `~/.env` + +A variable already present in the process environment is never overwritten by a `.env` file. Among the files, a value set in `/.env` wins over `~/.omp/agent/.env`, which wins over `~/.omp/.env`, which wins over `~/.env`. So a shell-exported `OPENAI_API_KEY` beats every `.env` file, and a project's `/.env` beats your home `~/.env`. + +Project-local `.env` is the simplest way to make one repository use a project-specific gateway, key, or local endpoint: + +```dotenv +# /.env +OPENROUTER_API_KEY=sk-or-... +OLLAMA_BASE_URL=http://127.0.0.1:11434 +``` + +`.env` parsing is intentionally minimal: + +- blank lines and lines starting with `#` are ignored; +- keys must match `[A-Za-z_][A-Za-z0-9_]*` (shell-identifier shape) — other names are dropped; +- values may be wrapped in single or double quotes, which are stripped; +- values containing a NUL byte are dropped; +- an `OMP_`-prefixed key is also mirrored to the matching `PI_`-prefixed name. + +## Built-in local engines + +Three local engines are discovered automatically without needing a `models.yml` entry. Each uses a base URL that can be overridden by an environment variable: + +| Provider ID | Base URL (env override → default) | Notes | +|---|---|---| +| `ollama` | `OLLAMA_BASE_URL`, then `OLLAMA_HOST` (normalized), else `http://127.0.0.1:11434` | Keyless by default. | +| `llama.cpp` | `LLAMA_CPP_BASE_URL`, else `http://127.0.0.1:8080` | Keyless unless a key is stored for `llama.cpp`. | +| `lm-studio` | `LM_STUDIO_BASE_URL`, else `http://127.0.0.1:1234/v1` | Keyless by default. | + +These implicit engines are **skipped** when: + +- a provider with the same ID is already configured in `models.yml` (your explicit config wins); or +- the provider ID appears in the effective `disabledProviders` list. + +For installing and running these engines, see [Local models](./local-models.md). + +## Disabling model providers + +Use the `disabledProviders` setting to remove a provider's models from selection: + +```yaml +# ~/.omp/agent/config.yml or /.omp/config.yml +disabledProviders: + - anthropic + - openai + - google + - groq +``` + +Provider IDs are matched exactly. Disable `google` to hide the Google Gemini API provider; the OAuth-backed Google providers `google-gemini-cli` and `google-antigravity` are separate IDs and must be disabled individually. Disable `ollama`, `llama.cpp`, or `lm-studio` to stop local discovery for that engine. + +`disabledProviders` applies uniformly to: + +- bundled catalog providers; +- custom `models.yml` providers; +- runtime-discovered provider models; +- extension-registered providers; +- implicit local engines. + +Disabling a provider does not delete its stored credentials — re-enable it by removing its ID from the effective list. + +## Project-specific provider control + +Project settings live in `/.omp/config.yml`. Use them when one repository must allow or hide a different provider set than your global default: + +```yaml +# /.omp/config.yml +disabledProviders: + - openai + - openrouter +``` + +Settings arrays are **replaced** wholesale by the higher-precedence layer, not merged or appended. If the global file disables three providers and the project file disables one, the project sees only the project list: + +```yaml +# ~/.omp/agent/config.yml +disabledProviders: + - anthropic + - openai + - google + +# /.omp/config.yml +disabledProviders: + - groq +``` + +Effective result inside the project: + +```json +["groq"] +``` + +The project array re-enables `anthropic`, `openai`, and `google` for sessions launched from that project. If you want a project to *add* to the global set, repeat the global IDs in the project file. See [Settings](./settings.md) for the full precedence chain, including `--config` overlays and runtime overrides. + +## Path-scoped `disabledProviders` + +`disabledProviders` can mix plain string entries (apply everywhere) with path-scoped entries (apply only when the current working directory matches a configured path): + +```yaml +disabledProviders: + - ollama + - path: ~/projects/sensitive + providers: + - anthropic + - openai + - paths: + - ~/work/client-a + - ~/work/client-b + values: + - openrouter +``` + +- Bare string entries always apply. +- A scoped entry applies when the current working directory **is** the configured path or sits **under** it. `~` expands to the home directory. +- Accepted path keys: `path`, `paths`, `pathPrefix`, `pathPrefixes`. +- Accepted value keys: `providers`, `values`, `items`. + +For the example above: + +- `ollama` is disabled everywhere. +- `anthropic` and `openai` are additionally disabled under `~/projects/sensitive`. +- `openrouter` is additionally disabled under `~/work/client-a` and `~/work/client-b`. + +Path scopes are resolved **after** the settings merge. Because a higher-precedence layer replaces the whole array, a project-level `disabledProviders` array drops any scoped entries that only existed in the global array. `enabledModels` is the only other setting that supports the same path-scoped form. See [Settings](./settings.md) for details. + +## Provider IDs vs discovery provider IDs + +`disabledProviders` uses a **single shared ID namespace** that gates two different subsystems: + +- **Model providers** — the backends on this page (`anthropic`, `openai`, `ollama`, a custom `models.yml` ID, …). Disabling one removes its models from selection. +- **Discovery providers** — sources of context files, MCP servers, commands, skills, hooks, tools, prompts, and settings. Disabling one stops that source from contributing capability items. + +| Entry type | Examples | Effect | +|---|---|---| +| Model provider ID | `anthropic`, `openai`, `google`, `groq`, `openrouter`, `ollama`, `my-gateway` | Removes that provider's models from availability. | +| Discovery provider ID | `native`, `claude`, `codex`, `gemini`, `agents`, `github` | Stops that discovery source from contributing capability items. | + +Watch the related names. The Google Gemini **API** models use the model provider ID `google`; `gemini` is a **discovery** provider ID (the source that reads `GEMINI.md`), not the Google model provider. Use discovery IDs only when you intend to disable an entire config source. See [Context files](./context-files.md) for the discovery-provider side. + +## Custom providers in `models.yml` + +Custom providers live in `~/.omp/agent/models.yml` under `providers:`. A provider ID defined there participates in the same selection, credential resolution, and `disabledProviders` rules as built-in providers. + +Minimal OpenAI-compatible provider: + +```yaml +providers: + my-openai-compatible: + baseUrl: https://api.example.com/v1 + api: openai-completions + apiKey: MY_OPENAI_COMPATIBLE_KEY # env-var-name or literal + models: + - id: fast-chat + name: Fast Chat + contextWindow: 128000 + maxTokens: 8192 +``` + +Keyless local provider (no credentials required): + +```yaml +providers: + local-proxy: + baseUrl: http://127.0.0.1:4000/v1 + api: openai-completions + auth: none + models: + - id: local-model + name: Local Model + contextWindow: 32768 + maxTokens: 4096 +``` + +Discovery-enabled provider (models fetched from the endpoint at runtime): + +```yaml +providers: + team-proxy: + baseUrl: https://models.example.com/v1 + apiKey: TEAM_PROXY_API_KEY + authHeader: true # send Authorization: Bearer + disableStrictTools: true + discovery: + type: proxy +``` + +For the full schema, all allowed `api` values, discovery `type`s, model overrides, and equivalence settings, see [Model and Provider Configuration](./models.md). + +To disable a custom provider, list its ID exactly: + +```yaml +disabledProviders: + - my-openai-compatible + - team-proxy +``` + +## Troubleshooting + +**A provider's models are not selectable.** Confirm the provider has credentials (`/login `, an exported environment variable, or a `models.yml` `apiKey`) and that its ID is not in the effective `disabledProviders` list. Remember the rule: not disabled **and** (keyless **or** has credentials). Keyless local engines only appear once the engine is actually running and responding. + +**The wrong key is being used (a stale key from `.env`).** Resolution favors runtime `--api-key`, then a `models.yml` config key, then stored credentials, then environment/`.env`. An already-set process environment variable also beats every `.env` file, and `/.env` beats `~/.env`. If an unexpected key wins, check for an exported shell variable and the four `.env` files in precedence order, and clear the one that should not apply. + +**A provider still appears even though I disabled it.** `disabledProviders` arrays are replaced, not merged: a project `/.omp/config.yml` array fully overrides the global one. Verify the *effective* list for the directory you are in (path-scoped entries only apply at or under their configured path), and confirm the ID is spelled exactly. Use `omp config get disabledProviders` to inspect the merged value (see [Settings](./settings.md)). + +**A discovery provider name had no effect on models (or vice-versa).** The ID namespace is shared. `gemini`, `codex`, `claude`, `native`, and `agents` are discovery-source IDs; the Google model backend is `google`. Make sure you are disabling the right kind of provider. + +**A custom `models.yml` provider does not load.** A YAML or schema error makes the registry skip the custom file. Validate the file with `omp models` (use `omp models find ` to scope it to one provider), confirm each provider has a `baseUrl`, a valid `api`, and at least one model entry, and that an implicit local engine is not silently shadowing it (an explicit `ollama`/`lm-studio`/`llama.cpp` entry replaces the built-in discovery for that ID). See [Model and Provider Configuration](./models.md). diff --git a/docs/python-repl.md b/docs/python-repl.md index 710321f35..5ce950b09 100644 --- a/docs/python-repl.md +++ b/docs/python-repl.md @@ -59,7 +59,7 @@ One JSON object per line, UTF-8, `\n` terminated. Host → runner: ```jsonc -{"id": "", "code": "", "silent": false, "storeHistory": true} +{"id": "", "code": "", "silent": false, "storeHistory": true, "cwd": "", "env": {"KEY": "VAL"}} {"type": "exit"} ``` @@ -108,7 +108,7 @@ Unknown magic names raise `NameError: UsageError: ...` inside the cell. `python.kernelMode` controls retained kernel reuse: - `session` (default) - - Reuses kernel sessions keyed by namespaced eval session id plus cwd. + - Reuses kernel sessions keyed by namespaced eval session id plus normalized cwd and interpreter. - Multiple owners can share the same retained kernel for that key. - Calls through the tool are exclusive, so tool invocations do not overlap. - A dead retained subprocess is replaced before execution. @@ -138,9 +138,9 @@ Environment is filtered before launching the runner: - Allow-prefixes: `LC_`, `XDG_`, `PI_` - Denylist strips common API keys (OpenAI/Anthropic/Gemini/etc.) -Runtime selection order: +Runtime selection order (skipped entirely when the `python.interpreter` setting names an explicit executable): -1. Active/located venv (`VIRTUAL_ENV`, then `/.venv`, `/venv`) +1. Active/located venv (`VIRTUAL_ENV`, then `CONDA_PREFIX`, then `/.venv`, `/venv`) 2. Managed venv at `~/.omp/python-env` 3. `python` or `python3` on PATH @@ -156,19 +156,19 @@ The runner additionally receives `PYTHONUNBUFFERED=1` and `PYTHONIOENCODING=utf- - JavaScript backend only (`eval.py=false`, `eval.js=true`, or `PI_PY=0 PI_JS=1`) - both backends (`eval.py=true`, `eval.js=true`, or `PI_PY=1 PI_JS=1`) -`PI_PY` and `PI_JS` use normal boolean flag parsing. If either env var is set, the env pair overrides the per-key settings; an unset member of the pair defaults to enabled. +`PI_PY` and `PI_JS` use normal boolean flag parsing. Each flag, when set, overrides only its own setting; an unset flag falls back to its setting (`eval.py` / `eval.js`, both default `true`). If Python preflight fails and `eval.js` is enabled, `eval` remains available for `js` cells; `py` cells fail with a Python-backend availability error. -Python prelude helpers include `agent(prompt, *, agent_type="task", model=None, context=None, label=None, schema=None)`. It synchronously calls the host bridge, runs one subagent through the task executor, and returns the final text. When `schema` is supplied, the helper parses the subagent's JSON output and returns the object. +Python prelude helpers include `agent(prompt, *, agent_type="task", model=None, label=None, schema=None)`. It synchronously calls the host bridge, runs one subagent through the task executor, and returns the final text. When `schema` is supplied, the helper parses the subagent's JSON output and returns the object. ## Execution flow and cancellation/timeout ### Cell timeout -Each eval cell `timeout` is in seconds, defaults to 30, and is clamped to `1..600`. It is a **wall-clock budget on the cell's own work** that the watchdog (`IdleTimeout`, `src/eval/idle-timeout.ts`) enforces, **but it is paused while a host-side `agent()`/`parallel()`/`completion()` bridge call is in flight**: those calls pump a heartbeat (`withBridgeHeartbeat`, `src/eval/heartbeat.ts`) that re-arms the watchdog, so a long fanout or a slow completion runs to completion instead of being killed mid-stream. +Each eval cell `timeout` is in seconds, defaults to 30, and is clamped to `1..3600`. It is a **wall-clock budget on the cell's own work** that the watchdog (`IdleTimeout`, `src/eval/idle-timeout.ts`) enforces, **but it is suspended while a host-side `agent()`/`parallel()`/`completion()` bridge call is in flight**: those calls emit synthetic pause/resume timeout-control status events (`withBridgeTimeoutPause`, `src/eval/bridge-timeout.ts`) that pause the watchdog entirely and start a fresh timeout window when control returns to the runtime, so a long fanout or a slow completion runs to completion instead of being killed mid-stream. Pause is reference-counted because `parallel()` can have multiple bridge calls in flight at once. -The heartbeat is the **sole** signal that extends the budget. Everything else the cell does — compute, `stdout`/`stderr`, `log()`/`phase()`, and ordinary (non-agent) tool calls — counts against `timeout`, so a cell that is not delegating to an agent/completion is bounded by a plain wall-clock timeout. The tool combines the caller abort signal, the session abort signal, and the watchdog's signal with `AbortSignal.any(...)`; no wall-clock deadline is passed to the backend, so neither runtime arms a competing fixed timer. +The pause/resume events are the **sole** mechanism that suspends the budget. Everything else the cell does — compute, `stdout`/`stderr`, `log()`/`phase()`, and ordinary (non-agent) tool calls — counts against `timeout`, so a cell that is not delegating to an agent/completion is bounded by a plain wall-clock timeout. The tool combines the caller abort signal, the session abort signal, and the watchdog's signal with `AbortSignal.any(...)`; no wall-clock deadline is passed to the backend, so neither runtime arms a competing fixed timer. ### Kernel execution cancellation @@ -176,10 +176,10 @@ On abort/timeout: - The host sends `kill("SIGINT")` to the runner subprocess. - The runner's exec-time signal handler raises `KeyboardInterrupt` inside the user code. -- Result includes `cancelled=true`; the timeout path annotates output as `Command timed out after seconds`. +- Result includes `cancelled=true`; a kernel timeout is annotated as `eval cell timed out after s; kernel interrupted but remains running. Reset the kernel via { reset: true } if state appears corrupted.` - Between requests the runner installs `SIG_IGN` for SIGINT so a stray cancel does not tear down the kernel. -If a second cancel is required (runner stuck in C code), the host escalates to `SIGTERM` and the session restarts on the next call. +If the runner does not emit `done` within 5s of the interrupt (`INTERRUPT_ESCALATION_MS` — e.g. stuck in C code holding the GIL), the host shuts the subprocess down (escalating `exit` → `SIGTERM` → `SIGKILL`), the cell is annotated as kernel-killed, and the kernel is recreated on the next call. ### stdin behavior diff --git a/docs/resolve-tool-runtime.md b/docs/resolve-tool-runtime.md index aa2c3c829..1a3f1c423 100644 --- a/docs/resolve-tool-runtime.md +++ b/docs/resolve-tool-runtime.md @@ -18,10 +18,12 @@ This document explains how preview/apply workflows are modeled in coding-agent a - `action: "discard"` invokes `reject(reason, extra)` if provided; otherwise returns `Discarded: