diff --git a/.github/issue_template.md b/.github/issue_template.md index 3ece4a3e9..a61840fb9 100644 --- a/.github/issue_template.md +++ b/.github/issue_template.md @@ -1 +1,39 @@ - +# IMPORTANT NOTICE + +1. this section is exclusively for ISSUES related to Furnace (bugs, major annoyances and others). +2. this section is NOT for Suggestions, Questions, Showcase or any other Discussions that do not meet the criteria and definition of an ISSUE. + - see the Discussions section if you wish to submit these. +3. check whether your issue has been reported already. + - go to the Issues section, and use the search bar that appears on top of the Issues list. +4. include the following information: + - version of Furnace (help > about) + - operating system (and version) + - whether you have downloaded Furnace, or built it from source. +5. provide these details if you believe the issue is operating system and/or computer-specific: + - CPU model + - Windows: go to Control Panel > System. + - macOS: go to the Apple menu and select About This Mac... + - Linux: use `lscpu` or `cat /proc/cpuinfo`. + - graphics card (and driver version) + - Windows: open `dxdiag` and observe the Render tab. + - macOS: go to the Apple menu and select About This Mac... + - this information is not always shown. + - this information is not necessary if you use an Apple silicon Mac. + - Linux: use `glxinfo | grep OpenGL`. +6. if your issue is an abnormal program termination (a "Crash"), you must provide additional details: + - the furnace_crash.txt file that is created by Furnace after a Crash. this file is located in the following paths: + - Windows: `C:\Users\\furnace_crash.txt` + - Linux/other: `/tmp/furnace_crash.txt` + - on macOS this file is not generated. you may retrieve information about the Crash by clicking on "Report..." or "Show Details" in the "quit unexpectedly" dialog that appears following the Crash. + - make sure to remove any personal information for privacy reasons. + - be sure to select "Don't Send" afterwards. + - the furnace.log file located in: + - Windows: `C:\Users\\AppData\Roaming\furnace\furnace.log` + - macOS: `~/Library/Application Support/furnace/furnace.log` + - Linux: `~/.config/furnace/furnace.log` + - make sure to remove any personal information for privacy reasons. + +BY SUBMITTING A TICKET, YOU HEREBY AGREE TO COMPLY WITH THESE TERMS. +FAILURE TO DO SO MAY RESULT IN YOUR TICKET BEING DECLARED VOID. + +***END OF NOTICE*** --- REMOVE THIS NOTICE AFTER READING! diff --git a/.gitignore b/.gitignore index 78ce5cb8e..ab6a95188 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,4 @@ CMakePresets.json extern/imgui_patched/examples/ src/asm/68k/amigatest/*.bin src/asm/68k/amigatest/player +res/binary_to_compressed_c diff --git a/CMakeLists.txt b/CMakeLists.txt index 9360de1e1..89f1cebc8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -507,6 +507,8 @@ src/engine/platform/sound/d65modified.c src/engine/platform/sound/ted-sound.c +src/engine/platform/sound/c140.c + src/engine/platform/oplAInterface.cpp src/engine/platform/ym2608Interface.cpp src/engine/platform/ym2610Interface.cpp @@ -599,6 +601,7 @@ src/engine/platform/sm8521.cpp src/engine/platform/pv1000.cpp src/engine/platform/k053260.cpp src/engine/platform/ted.cpp +src/engine/platform/c140.cpp src/engine/platform/pcmdac.cpp src/engine/platform/dummy.cpp @@ -646,6 +649,7 @@ src/gui/font_proggyClean.cpp src/gui/font_ptMono.cpp src/gui/font_unifont.cpp src/gui/font_icon.cpp +src/gui/font_furicon.cpp src/gui/fonts.cpp src/gui/image_icon.cpp diff --git a/demos/arcade/Physics_Exam_TaitoArcade.fur b/demos/arcade/Physics_Exam_TaitoArcade.fur new file mode 100644 index 000000000..5cb97e54f Binary files /dev/null and b/demos/arcade/Physics_Exam_TaitoArcade.fur differ diff --git a/demos/arcade/physics_exam.fur b/demos/arcade/physics_exam.fur deleted file mode 100644 index b26e3f6e4..000000000 Binary files a/demos/arcade/physics_exam.fur and /dev/null differ diff --git a/demos/gameboy/dtect.fur b/demos/gameboy/dtect.fur new file mode 100644 index 000000000..17c5f5bc4 Binary files /dev/null and b/demos/gameboy/dtect.fur differ diff --git a/demos/gameboy/freedom.fur b/demos/gameboy/freedom.fur new file mode 100644 index 000000000..024bafded Binary files /dev/null and b/demos/gameboy/freedom.fur differ diff --git a/demos/gameboy/ice_3_advert.fur b/demos/gameboy/ice_3_advert.fur new file mode 100644 index 000000000..cb0d61a93 Binary files /dev/null and b/demos/gameboy/ice_3_advert.fur differ diff --git a/demos/gameboy/minos.fur b/demos/gameboy/minos.fur new file mode 100644 index 000000000..14cb6244d Binary files /dev/null and b/demos/gameboy/minos.fur differ diff --git a/demos/gameboy/spreadtro.fur b/demos/gameboy/spreadtro.fur new file mode 100644 index 000000000..f8804b394 Binary files /dev/null and b/demos/gameboy/spreadtro.fur differ diff --git a/demos/genesis/inside_the_computer.fur b/demos/genesis/inside_the_computer.fur index b26820194..b3bd29c0f 100644 Binary files a/demos/genesis/inside_the_computer.fur and b/demos/genesis/inside_the_computer.fur differ diff --git a/demos/misc/teddy_bear_midnight_jam_ted.fur b/demos/misc/teddy_bear_midnight_jam_ted.fur new file mode 100644 index 000000000..7ee9d067c Binary files /dev/null and b/demos/misc/teddy_bear_midnight_jam_ted.fur differ diff --git a/demos/multichip/track8_n163_k053260.fur b/demos/multichip/track8_n163_k053260.fur new file mode 100644 index 000000000..d5bc373ae Binary files /dev/null and b/demos/multichip/track8_n163_k053260.fur differ diff --git a/demos/nes/the_best-1990.fur b/demos/nes/the_best-1990.fur index c5b62f15f..ca599260b 100644 Binary files a/demos/nes/the_best-1990.fur and b/demos/nes/the_best-1990.fur differ diff --git a/doc/1-intro/README.md b/doc/1-intro/README.md index 8e9289fc6..e5430504b 100644 --- a/doc/1-intro/README.md +++ b/doc/1-intro/README.md @@ -20,4 +20,10 @@ it also has a flexible windowing system which you may move around and organize. see [2-interface](../2-interface/README.md) and [3-pattern](../3-pattern/README.md) for more information. -once familiar with the tracker, look to [9-guides](../9-guides/README.md) for useful techniques. \ No newline at end of file +once familiar with the tracker, look to [9-guides](../9-guides/README.md) for useful techniques. + + + +# links + +[Furnace Tutorials](https://youtube.com/playlist?list=PLCELB6AsTZUnwv0PC5AAGHjvg47F44YQ1): video tutorials created by Spinning Square Waves. \ No newline at end of file diff --git a/doc/2-interface/README.md b/doc/2-interface/README.md index cb1588dde..3d6067aff 100644 --- a/doc/2-interface/README.md +++ b/doc/2-interface/README.md @@ -13,6 +13,7 @@ primary topics: - [play/edit controls](play-edit-controls.md) - [instrument/wavetable/sample list](asset-list.md) - [song information](song-info.md) +- [effect list window](effect-list-window.md) - [pattern view](../3-pattern/README.md) - [instrument editor](../4-instrument/README.md) - [wavetable editor](../5-wave/README.md) diff --git a/doc/2-interface/effect-list-window.md b/doc/2-interface/effect-list-window.md new file mode 100644 index 000000000..28a1c313c --- /dev/null +++ b/doc/2-interface/effect-list-window.md @@ -0,0 +1,10 @@ +# effect list window + +(for more details about these effects, see [the effects page](../3-pattern/effects.md)) + +![effect list window](effect-list.png) + +this window provides a list of the effects that are available. + +- **Chip at cursor**: the currently selected chip. the list only shows available effects for this chip. +- menu button: opens a small list of effect categories. toggle each to change whether they're shown in the list. diff --git a/doc/2-interface/effect-list.png b/doc/2-interface/effect-list.png new file mode 100644 index 000000000..dd5d0cc8b Binary files /dev/null and b/doc/2-interface/effect-list.png differ diff --git a/doc/2-interface/settings.md b/doc/2-interface/settings.md index 32c85242b..46226475c 100644 --- a/doc/2-interface/settings.md +++ b/doc/2-interface/settings.md @@ -11,21 +11,19 @@ settings are saved when clicking the **OK** button at the bottom of the dialog. - **Render backend** - changing this may help with performace issues. - **Late render clear** -- **Power-saving mode** - - saves power by lowering the frame rate to 2fps when idle. +- **Power-saving mode**: saves power by lowering the frame rate to 2fps when idle. - may cause issues under Mesa drivers! -- **Disable threaded input (restart after changing!)** - - threaded input processes key presses for note preview on a separate thread (on supported platforms), which reduces latency. +- **Disable threaded input (restart after changing!)**: processes key presses for note preview on a separate thread (on supported platforms), which reduces latency. - however, crashes have been reported when threaded input is on. enable this option if that is the case. - **Enable event delay** - may cause issues with high-polling-rate mice when previewing notes. ### File -- **Use system file picker**: use native OS file dialog instead of Furnace's. -- **Number of recent files** +- **Use system file picker**: uses native OS file dialog instead of Furnace's. +- **Number of recent files**: number of files to show in the _open recent..._ menu. - **Compress when saving** - - use zlib to compress saved songs. + - uses zlib to compress saved songs. - **Save unused patterns** - **Use new pattern format when saving** - **Don't apply compatibility flags when loading .dmf** @@ -39,11 +37,11 @@ settings are saved when clicking the **OK** button at the bottom of the dialog. - **Initial system**: the system of chips loaded on starting Furnace. - **Current system**: sets current chips as default. - - **Randomize**: set default to a random system. + - **Randomize**: sets default to a random system. - this will not choose a random system at each start. - **Reset to defaults**: sets default to "Sega Genesis/Mega Drive". - **Name**: name for the default system. may be set to any text. - - system configuration: same as in the [chip manager](../8-advanced/chip-manager.md) and [mixer](../8-advanced/mixer.md). + - **Configure:**: same as in the [chip manager](../8-advanced/chip-manager.md) and [mixer](../8-advanced/mixer.md). - **When creating new song**: - **Display system preset selector** - **Start with initial system** @@ -70,12 +68,12 @@ settings are saved when clicking the **OK** button at the bottom of the dialog. ### Output -- **Backend**: select SDL or JACK for audio output. +- **Backend**: selects SDL or JACK for audio output. - only appears on Linux, or MacOS compiled with JACK support - **Driver** - **Device**: audio device for playback. - **Sample rate** -- **Outputs**: select number of audio outputs created, up to 16. +- **Outputs**: number of audio outputs created, up to 16. - only appears when Backend is JACK. - **Channels**: number of output channels to use. - **Buffer size**: size of buffer in both samples and milliseconds. @@ -209,8 +207,7 @@ settings are saved when clicking the **OK** button at the bottom of the dialog. - **Export**: writes current layout to a .ini file. - **Reset**: resets layout to default. - **Allow docking editors** -- **Remember window position** - - remembers the window's last position on start-up. +- **Remember window position**: remembers the window's last position on start-up. - **Only allow window movement when clicking on title bar** - **Play/edit controls layout:** - **Classic** @@ -236,7 +233,7 @@ settings are saved when clicking the **OK** button at the bottom of the dialog. - **No** - **Yes** - **Yes (while holding Ctrl only)** -- **Toggle channel solo on:** select which interactions with a channel header will toggle solo for that channel. +- **Toggle channel solo on:** selects which interactions with a channel header will toggle solo for that channel. - Right-click or double click - Right-click - Double-click @@ -248,13 +245,15 @@ settings are saved when clicking the **OK** button at the bottom of the dialog. - **Pull delete affects entire channel row** - **Push value when overwriting instead of clearing it**: in the order list and pattern editors, typing into an already-filled value will shift digits instead of starting fresh. - if off: moving the cursor onto the value `A5` and typing a "B" results in `0B`. - - if on: with the cursor on the value `A5` and typing a "B" results in `5B`. + - if on: moving the cursor onto the value `A5` and typing a "B" results in `5B`. - **Effect input behavior:** - **Move down** - **Move to effect value (otherwise move down)** - **Move to effect value/next effect and wrap around** - **Delete effect value when deleting effect** - **Change current instrument when changing instrument column (absorb)** +- **Remove instrument value when inserting note off/release** +- **Remove volume value when inserting note off/release** ### Cursor movement @@ -293,16 +292,17 @@ settings are saved when clicking the **OK** button at the bottom of the dialog. ### Scaling -- **Automatic UI scaling factor**: automatically match the OS's UI scaling. -- **UI scaling factor**: only if "Automatic UI scaling factor" is off. +- **Automatic UI scaling factor**: automatically matches the OS's UI scaling. +- **UI scaling factor**: only appears if "Automatic UI scaling factor" is off. - **Icon size** ### Text -- **Main font**: if "Custom...", a file path selector will appear beneath. -- **Size** -- **Pattern font**: if "Custom...", a file path selector will appear beneath. -- **Size** +- **Main font**: overall interface font.\ + **Header font**: font for section headers.\ + **Pattern font** font for the pattern view, the order list, and related. + - if "Custom...", a file path selector will appear. + - **Size**: font size. - **Display Japanese characters**\ **Display Chinese (Simplified) characters**\ **Display Chinese (Traditional) characters**\ @@ -358,7 +358,7 @@ settings are saved when clicking the **OK** button at the bottom of the dialog. ### Channel -- **Channel style:** +- **Channel style:** sets the appearance of channel headers in pattern view. - **Classic** - **Line** - **Round** @@ -391,9 +391,18 @@ settings are saved when clicking the **OK** button at the bottom of the dialog. ### Assets -- **Unified instrument/wavetable/sample list** -- **Horizontal instrument list** +- **Unified instrument/wavetable/sample list**: combines all three types of assets into one list. + - the buttons act as appropriate to the currently selected asset or header. +- **Horizontal instrument list**: when there are more instruments than there is room to display them... + - if on, scroll horizontally through multiple columns. + - if off, scroll vertically in one long column. +- **Instrument list icon style:** + - **None** + - **Graphical icons** + - **Letter icons** - **Colorize instrument editor using instrument type** +- **Display instrument type menu when adding instrument** + - if turned off, the menu can still be opened by right-clicking the add button. ### Macro Editor @@ -428,11 +437,11 @@ settings are saved when clicking the **OK** button at the bottom of the dialog. - **Between Decay and Sustain Rate** - **After Release Rate** - **Use separate colors for carriers/modulators in FM editor** -- **Unsigned FM detune values** +- **Unsigned FM detune values**: uses the internal representation of detune values, such that detune amounts of -1, -2, and -3 are shown as 5, 6, and 7. ### Statistics -- **Chip memory usage unit:** +- **Chip memory usage unit:** unit for displaying memory usage in the Statistics window. - **Bytes** - **Kilobytes** @@ -440,15 +449,20 @@ settings are saved when clicking the **OK** button at the bottom of the dialog. - **Rounded corners** - **Border** -- **Fill entire window** -- **Waveform goes out of bounds** +- **Mono**: displays a single monaural waveform of all sound mixed together. + - if turned off, waves will be drawn on top of each other for each output channel. + - all colors are configurable via _Settings > Color > Color scheme > Oscilloscope > Wave (non-mono)._ +- **Anti-aliased**: smoothes the lines of the waveform. + - slight performance cost and slightly buggy. +- **Fill entire window**: removes the gap between the waveform and the edge of the window. +- **Waveform goes out of bounds**: allows the waveform to draw past the top and bottom of the oscilloscope. ### Windows - **Rounded window corners** - **Rounded buttons** - **Rounded menu corners** -- **Borders around widgets** +- **Borders around widgets**: draws thin borders on buttons, checkboxes, text widgets, and the like. diff --git a/doc/3-pattern/effects.md b/doc/3-pattern/effects.md index 91e311473..6a9515d6c 100644 --- a/doc/3-pattern/effects.md +++ b/doc/3-pattern/effects.md @@ -14,7 +14,7 @@ however, effects are continuous, which means you only need to type it once and t - `F4xx`: **Fine volume slide down.** same as `0A0x` but 64× slower. - `F8xx`: **Single tick volume slide up.** adds `x` to volume on first tick only. - `F9xx`: **Single tick volume slide down.** subtracts `x` from volume on first tick only. - + - --- - `07xy`: **Tremolo.** changes volume to be "wavy" with a sine LFO. `x` is the speed. `y` is the depth. - Tremolo is downward only. - Maximum tremolo depth is -60 volume steps. @@ -26,16 +26,17 @@ however, effects are continuous, which means you only need to type it once and t - `02xx`: **Pitch slide down.** - `F1xx`: **Single tick pitch slide up.** - `F2xx`: **Single tick pitch slide down.** - -- `03xx`: **Portamento.** slides the current note's pitch to the specified note. `x` is the slide speed. - - A note _must_ be present for this effect to work. + - --- +- `03xx`: **Portamento.** slides the currently playing note's pitch toward the new note. `x` is the slide speed. + - a note _must_ be present with this effect for it to work. + - the effect stops automatically when it reaches the new note. - `E1xy`: **Note slide up.** `x` is the speed, while `y` is how many semitones to slide up. - `E2xy`: **Note slide down.** `x` is the speed, while `y` is how many semitones to slide down. - -- `EAxx`: **Toggle legato.** while on, notes instantly change the pitch of the currrently playing sound instead of starting it over. + - --- +- `EAxx`: **Toggle legato.** while on, new notes instantly change the pitch of the currently playing sound instead of starting it over. - `00xy`: **Arpeggio.** after using this effect the channel will rapidly switch between semitone values of `note`, `note + x` and `note + y`. - `E0xx`: **Set arpeggio speed.** this sets the number of ticks between arpeggio values. default is 1. - + - --- - `04xy`: **Vibrato.** changes pitch to be "wavy" with a sine LFO. `x` is the speed, while `y` is the depth. - Maximum vibrato depth is ±1 semitone. - `E3xx`: **Set vibrato direction.** `xx` may be one of the following: @@ -54,7 +55,7 @@ not all chips support these effects. - `82xx`: **Set volume of right channel** (from `00` to `FF`). - `89xx`: **Set volume of rear left channel** (from `00` to `FF`). - `8Axx`: **Set volume of rear right channel** (from `00` to `FF`). - + - --- - `80xx`: **Set panning (linear).** this effect behaves more like other trackers: - `00` is left. - `80` is center. @@ -64,15 +65,15 @@ not all chips support these effects. - `09xx`: **Set speed/groove.** if no grooves are defined, this sets speed. If alternating speeds are active, this sets the first speed. - `0Fxx`: **Set speed 2.** during alternating speeds or a groove, this sets the second speed. - + - --- - `Cxxx`: **Set tick rate.** changes tick rate to `xxx` Hz (ticks per second). - `xxx` may be from `000` to `3FF`. - `F0xx`: **Set BPM.** changes tick rate according to beats per minute. range is `01` to `FF`. - + - --- - `0Bxx`: **Jump to order.** `x` is the order to play after the current row. - this marks the end of a loop with order `x` as the loop start. -- `0Dxx`: **Jump to next pattern.** skips the current row and remainder of current order. - - this can be used to shorten the current order. +- `0Dxx`: **Jump to next pattern.** skips the current row and remainder of current order. `x` is the row at which to start playing the next pattern. + - this can be used to shorten the current order as though it had a different pattern length. - `FFxx`: **Stop song.** stops playback and ends the song. `x` is ignored. ## note @@ -86,12 +87,12 @@ not all chips support these effects. - `9xxx`: **Set sample position.** jumps current sample to position `xxx * 0x100`. - Not all chips support this effect. -- `EBxx`: **Set sample bank.** - - Does not apply on Amiga. +- `EBxx`: **Set LEGACY sample mode bank.** selects sample bank. used only for compatibility. + - does not apply on Amiga. - `EExx`: **Send external command.** - - This effect is currently incomplete. -- `F5xx`: **Disable macro.** see macro table at the end of this document for possible values. -- `F6xx`: **Enable macro.** + - this effect is currently incomplete. +- `F5xx`: **Disable macro.**\ + `F6xx`: **Enable macro.** see macro table at the end of this document for possible values. additionally, [each chip has its own effects](../7-systems/README.md). diff --git a/doc/4-instrument/README.md b/doc/4-instrument/README.md index 7ab7898ec..497204646 100644 --- a/doc/4-instrument/README.md +++ b/doc/4-instrument/README.md @@ -15,7 +15,7 @@ depending on the instrument type, there are many different types of instrument e - [SAA1099](saa.md) - for use with Philips SAA1099 PSG sound source. - [TIA](tia.md) - for use with Atari 2600 chip. - [AY-3-8910](ay8910.md) - for use with AY-3-8910 PSG sound source and SSG portion in YM2610. -- [Amiga / sample](amiga.md) for controlling Amiga and other sample based synthsizers like YM2612's Channel 6 PCM mode, NES channel 5, Sega PCM, X1-010 and PC Engine's sample playback mode. +- [Generic Sample](amiga.md) for controlling Amiga and other sample channels/chips like YM2612's Channel 6 PCM mode, NES channel 5, Sega PCM, X1-010 and PC Engine's sample playback mode. - [Atari Lynx](lynx.md) - for use with Atari Lynx handheld console. - [VERA](vera.md) - for use with Commander X16 VERA. - [Seta/Allumer X1-010](x1_010.md) - for use with Wavetable portion in Seta/Allumer X1-010. @@ -24,6 +24,7 @@ depending on the instrument type, there are many different types of instrument e - [Konami VRC6](vrc6.md) - for use with VRC6's PSG sound source. - [SNES](snes.md) - for use with SNES S-APU. - [Casio PV-1000](pv1000.md) - for use with Casio PV-1000. +- [C140](c140.md) for use with Namco C140. # macros diff --git a/doc/4-instrument/amiga.md b/doc/4-instrument/amiga.md index 3d7a606f9..4799d7cf3 100644 --- a/doc/4-instrument/amiga.md +++ b/doc/4-instrument/amiga.md @@ -1,17 +1,18 @@ # Amiga/PCM sound source instrument editor -The PCM instrument editor consists of a sample selector and several macros: +The Generic Sample instrument editor consists of a sample selector and several macros: -# Amiga/sample +# Sample - **Initial sample**: specifies which sample should be assigned to the instrument, or the first one in the sequence +- **Use sample map**: enables mapping different samples to notes. # Macros -- **Volume**: volume sequence. _warning:_ it works only on Amiga system, as of version 0.5.5! -- **Arpeggio**: pitch sequence -- **Waveform**: sample sequence -- **Panning (left)**: output level for left channel -- **Panning (right)**: output level for right channel -- **Pitch**: fine pitch -- **Phase Reset**: trigger restart of waveform \ No newline at end of file +- **Volume**: volume sequence. does not apply to some chips. +- **Arpeggio**: pitch sequence. +- **Waveform**: waveform sequence. +- **Panning (left)**: output level for left channel. +- **Panning (right)**: output level for right channel. +- **Pitch**: fine pitch. +- **Phase Reset**: trigger restart of waveform. \ No newline at end of file diff --git a/doc/4-instrument/c140.md b/doc/4-instrument/c140.md new file mode 100644 index 000000000..50d20d3e9 --- /dev/null +++ b/doc/4-instrument/c140.md @@ -0,0 +1,17 @@ +# Namco C140 instrument editor + +the Namco C140 instrument editor consists of a sample selector and several macros: + +# Sample + +- **Initial sample**: specifies which sample should be assigned to the instrument, or the first one in the sequence. +- **Use sample map**: enables mapping different samples to notes. + +# Macros + +- **Volume**: volume sequence. +- **Arpeggio**: pitch sequence. +- **Panning (left)**: output level for left channel. +- **Panning (right)**: output level for right channel. +- **Pitch**: fine pitch. +- **Phase Reset**: trigger restart of sample. \ No newline at end of file diff --git a/doc/4-instrument/fmopl.md b/doc/4-instrument/fmopl.md new file mode 100644 index 000000000..da03ffc7c --- /dev/null +++ b/doc/4-instrument/fmopl.md @@ -0,0 +1,70 @@ +# OPL FM synthesis instrument editor + +The OPL FM editor is divided into 7 tabs: + +- **FM**: for controlling the basic parameters of FM sound source. +- **Macros (FM)**: for macros controlling algorithm and feedback +- **Macros (OP1)**: for macros controlling FM parameters of operator 1 +- **Macros (OP2)**: for macros controlling FM parameters of operator 2 +- **Macros (OP3)**: for macros controlling FM parameters of operator 3 (Warning: only when 4-op flag is set, only on OPL3!) +- **Macros (OP4)**: for macros controlling FM parameters of operator 4 (Warning: only when 4-op flag is set, only on OPL3!) +- **Macros**: for miscellaneous macros controlling volume, arpeggio, and YMF262 panning. + +## FM + +The OPL synthesizers are nominally two-operator (OPL3 supports limited 4-operator mode), meaning it takes two oscillators to produce a single sound. + +These apply to the instrument as a whole: +- **Feedback (FB)**: Determines how many times operator 1 returns its output to itself. (0-7 range) +- **Algorithm (AL)**: Determines how operators are connected to each other. (0-1 range and OPL1 and OPL2, 0-3 range on OPL3 4op mode) + - Left-click pops up a small "operators changes with volume?" dialog where each operator can be toggled to scale with volume level. + - Right-click to switch to a preview display of the waveform generated on a new note: + - Left-click restarts the preview. + - Middle-click pauses and unpauses the preview. + - Right-click returns to algorithm view. + +- **4-op**: Enables 4-operator FM instrument editor mode (ONLY ON OPL3) +- **Drums**: Enables OPL drum mode editor + +These apply to each operator: +- The crossed-arrows button can be dragged to rearrange operators. +- The **OP1**, **OP2**, **OP3**, and **OP4** buttons enable or disable those operators. +- **Amplitude Modulation (AM)**: Makes the operator affected by LFO tremolo. +- **Sustain flag (SUS)**: When enabled, value of Sustain Level is in effect. +- **Attack Rate (AR)**: determines the rising time for the sound. The bigger the value, the faster the attack. (0-15 range) +- **Decay Rate (DR)**: Determines the diminishing time for the sound. The higher the value, the shorter the decay. It's the initial amplitude decay rate. (0-315 range) +- **Sustain Level (SL)**: Determines the point at which the sound ceases to decay and changes to a sound having a constant level. The sustain level is expressed as a fraction of the maximum level. (0-15 range) +- **Release Rate (RR)**: Determines the rate at which the sound disappears after KEY-OFF. The higher the value, the shorter the release. (0-15 range) +- **Total Level (TL)**: Represents the envelope’s highest amplitude, with 0 being the largest and 63 (decimal) the smallest. A change of one unit is about 0.75 dB. + +![FM ADSR chart](FM-ADSRchart.png) + +- **Envelope Scale (KSR)**: Also known as "Key Scale". Determines the degree to which the envelope execution speed increases according to the pitch. +- **Frequency Multiplier (MULT)**: Determines the operator frequency in relation to the pitch. (0-10, 12, 15 range) +- **Waveform select (WS)**: Changes the waveform generated by oscillator (OPL2 and OPL3 only, 0-7 range) +- **Pitch Modulation (VIB)**: Makes the operator affected by LFO vibrato. + +## macros + +Macros define the sequence of values passed to the given parameter. Via macro, along with the previously mentioned parameters, the following can be controlled: + +## FM Macros + +All parameters are listed above. + +## OP1-OP4 Macros + +All parameters are listed above. + +## Macros + +- **Arpeggio**: Pitch change sequence in semitones. +- **Panning**: toggles output on left and right channels. (OPL3 only!) +- **Pitch**: fine pitch. + - **Relative**: pitch changes are relative to the current pitch, not the note's base pitch. +- **Phase Reset**: Restarts all operators and resets the waveform to its start. Effectively the same as a `0Cxx` retrigger. + + +# links + +[FM instrument tutorial](https://www.youtube.com/watch?v=wS8edjurjDw): A great starting point to learn how create and work with FM sounds. This was made for DefleMask, but all the same principles apply. diff --git a/doc/4-instrument/fmopll.md b/doc/4-instrument/fmopll.md new file mode 100644 index 000000000..fe26e556a --- /dev/null +++ b/doc/4-instrument/fmopll.md @@ -0,0 +1,63 @@ +# OPLL FM synthesis instrument editor + +The OPLL FM editor is divided into 5 tabs: + +- **FM**: for controlling the basic parameters of FM sound source. +- **Macros (FM)**: for macros controlling algorithm, waveform and feedback +- **Macros (OP1)**: for macros controlling FM parameters of operator 1 +- **Macros (OP2)**: for macros controlling FM parameters of operator 2 +- **Macros**: for miscellaneous macros controlling volume, arpeggio, and preset. + +## FM + +The OPLL synthesizer is two-operator, meaning it takes two oscillators to produce a single sound. + +These apply to the instrument as a whole: +- **Feedback (FB)**: Determines how many times operator 1 returns its output to itself. (0-7 range) +- **Sustain (SUS)**: enables the sustain flag (sets the release rate to 5) +- **DC (half-sine carrier)**: Sets the waveform produced by carrier operator to half-sine +- **DM (half-sine modulator)**: Sets the waveform produced by modulator operator to half-sine + +To the right, there is a drop down menu for OPLL preset instrument selection. + +These apply to each operator: +- The crossed-arrows button can be dragged to rearrange operators. +- The **OP1**, **OP2** buttons enable or disable those operators. +- **Amplitude Modulation (AM)**: Makes the operator affected by LFO tremolo. +- **Envelope generator sustain flag (EGS)**: When enabled, value of Sustain Level is in effect. +- **Attack Rate (AR)**: determines the rising time for the sound. The bigger the value, the faster the attack. (0-15 range) +- **Decay Rate (DR)**: Determines the diminishing time for the sound. The higher the value, the shorter the decay. It's the initial amplitude decay rate. (0-15 range) +- **Sustain Level (SL)**: Determines the point at which the sound ceases to decay and changes to a sound having a constant level. The sustain level is expressed as a fraction of the maximum level. (0-15 range) +- **Release Rate (RR)**: Determines the rate at which the sound disappears after KEY-OFF. The higher the value, the shorter the release. (0-15 range) +- **Total Level (TL)**: Represents the envelope’s highest amplitude, with 0 being the largest and 63 (decimal) the smallest. A change of one unit is about 0.75 dB. + +![FM ADSR chart](FM-ADSRchart.png) + +- **Envelope Scale (KSR)**: Also known as "Key Scale". Determines the degree to which the envelope execution speed increases according to the pitch. +- **Frequency Multiplier (MULT)**: Determines the operator frequency in relation to the pitch. (0-10, 12, 15 range) +- **Pitch Modulation (VIB)**: Makes the operator affected by LFO vibrato. + +## macros + +Macros define the sequence of values passed to the given parameter. Via macro, along with the previously mentioned parameters, the following can be controlled: + +## FM Macros + +All parameters are listed above. + +## OP1-OP4 Macros + +All parameters are listed above. + +## Macros + +- **Arpeggio**: Pitch change sequence in semitones. +- **Patch**: changes the playing preset mid-note +- **Pitch**: fine pitch. + - **Relative**: pitch changes are relative to the current pitch, not the note's base pitch. +- **Phase Reset**: Restarts all operators and resets the waveform to its start. Effectively the same as a `0Cxx` retrigger. + + +# links + +[FM instrument tutorial](https://www.youtube.com/watch?v=wS8edjurjDw): A great starting point to learn how create and work with FM sounds. This was made for DefleMask, but all the same principles apply. diff --git a/doc/4-instrument/psg.md b/doc/4-instrument/psg.md index 2f692af1f..15bb8ff8b 100644 --- a/doc/4-instrument/psg.md +++ b/doc/4-instrument/psg.md @@ -1,6 +1,6 @@ -# PSG instrument editor +# Sega PSG instrument editor -The instrument editor for PSG (SMS, MSX, and other TI SN76489 derivatives) consists of these macros: +The instrument editor for Sega PSG (SMS, and other TI SN76489 derivatives) consists of these macros: - **Volume**: volume. - **Arpeggio**: pitch in half-steps. @@ -11,4 +11,4 @@ The instrument editor for PSG (SMS, MSX, and other TI SN76489 derivatives) consi - `3`: long noise, use channel 3 for frequency. - **Panning**: output for left and right channels. - **Pitch**: fine pitch. -- **Phase Reset**: trigger restart of waveform. \ No newline at end of file +- **Phase Reset**: trigger restart of waveform. diff --git a/doc/4-instrument/saa.md b/doc/4-instrument/saa.md index 1611bd61c..f005261b4 100644 --- a/doc/4-instrument/saa.md +++ b/doc/4-instrument/saa.md @@ -9,4 +9,12 @@ The SAA1099 instrument editor consists of these macros: - **Panning (left)**: output level for left channel - **Panning (right)**: output level for right channel - **Pitch**: fine pitch -- **Envelope**: envelope generator shape +- **Envelope**: envelope generator settings: + enable: enables the envelope generator + N/A: has no effect + fixed: toggles whether to use a fixed frequency or lock to the frequency of channel 2 or 5 + resolution: increases the envelope generator pitch resolution + direction: inverts the waveform around Y axis + cut: cuts the waveform (producing saw wave out of tri wave) + loop: toggles wheteher evelope is one-off or constantly looping + mirror: sets whether the right output will mirror the left one diff --git a/doc/6-sample/README.md b/doc/6-sample/README.md index 66d35479a..9f5a6cf86 100644 --- a/doc/6-sample/README.md +++ b/doc/6-sample/README.md @@ -33,15 +33,15 @@ the following sound chips have sample support: - Yamaha PCMD8/YMZ280B - MMC5 (last channel only) -## compatible sample mode +## compatible sample mode (LEGACY) -effect `17xx` enables/disables compatible sample mode whether supported (e.g. on Sega Genesis or PC Engine). +**use of this mode is discouraged in favor of Sample type instruments.** + +effect `17xx` enables/disables compatible sample mode where supported (e.g. on Sega Genesis or PC Engine). in this mode, samples are mapped to notes in an octave from C to B, allowing you to use up to 12 samples. if you need to use more samples, you may change the sample bank using effect `EBxx`. -use of this mode is discouraged in favor of Sample type instruments. - ## notes due to limitations in some of those sound chips, some restrictions exist: diff --git a/doc/7-systems/README.md b/doc/7-systems/README.md index 294fdc9e9..367ca9d83 100644 --- a/doc/7-systems/README.md +++ b/doc/7-systems/README.md @@ -1,56 +1,123 @@ -# sound chips +# systems -this is a list of sound chips that Furnace supports, including effects. +this is a list of some of the systems that Furnace supports, as shown in the new file dialog. each chip links to a page with information and a list of supported effects. +some systems have alternate chips, such as the Sega Genesis having a YM2612, a YM3438, or YMF276 depending on the model. this list shows the default configuration. + +- **Sega Genesis**: [YM3438](ym2612.md), [SN76489](sms.md) +- **Sega Genesis (with Sega CD)**: [YM3438](ym2612.md), [SN76489](sms.md), [RF5C164](ricoh.md) + +- **Sega Master System**: [SN76489](sms.md) +- **Sega Master System (with FM expansion)**: [SN76489](sms.md), [YM2413](opll.md) + +- **NES**: [2A03](nes.md) +- **Famicom with Konami VRC6**: [2A03](nes.md), [VRC6](vrc6.md) +- **Famicom with Konami VRC7**: [2A03](nes.md), [VRC7](opl.md) +- **Famicom with MMC5**: [2A03](nes.md), [MMC5](mmc5.md) +- **Famicom with Sunsoft 5B**: [2A03](nes.md), [5B](ay8910.md) +- **Famicom with Namco 163**: [2A03](nes.md), [N163](n163.md) +- **Famicom Disk System**: [2A03](nes.md), [FDS](fds.md) + +- **Game Boy**: [Game Boy](game-boy.md) + +- **SNES**: [SNES](snes.md) + +- **NEC PC Engine/TurboGrafx-16**: [HuC6280](pce.md) + +- **Commodore VIC-20**: [VIC](vic20.md) + +- **Commodore 64 (6581 SID)**: [MOS 6581](c64.md) +- **Commodore 64 (8580 SID)**: [MOS 8580](c64.md) + +- **Amiga**: [Amiga](amiga.md) + +- **Arcade (YM2151 and SegaPCM)**: [YM2151](ym2152.md), [SegaPCM](segapcm.md) + +- **Capcom CPS-1**: [YM2151](ym2152.md), [MSM6295](msm6295.md) +- **Capcom CPS-2 (QSound)**: [QSound](qsound.md) + +- **Neo Geo CD**: [YM2610](ym2610.md) +- **Neo Geo CD (extended channel 2)**: [YM2610](ym2610.md) + +- **Neo Geo Pocket**: [T6W28](t6w28.md), [DAC](dac.md) + +- **Atari 2600/7800**: [TIA](tia.md) +- **Atari 800**: [POKEY](pokey.md) + +- **Konami Bubble System**: [AY-3-8910](ay8910.md) × 2, [Konami WSG](bubblesystem.md) + +- **Sharp X68000**: [YM2151](ym2152.md), [MSM6258](msm6258.md) + +- **PC + Sound Blaster Pro**: [YM3812](opl.md) × 2, [DAC](dac.md), [PC Speaker](pcspkr.md) + +- **MSX**: [AY-3-8910](ay8910.md) +- **MSX + SCC**: [YM2149(F)](ay8910.md), [SCC](scc.md) + +- **Commander X16 (VERA only)**: [VERA](vera.md) + +- and many, many more! + + + +# chips + +this is the full list of chips that Furnace supports. + +- [2A03](nes.md) - [Amiga](amiga.md) -- [AY-3-8910](ay8910.md) -- [Microchip AY8930](ay8930.md) -- [Bubble System WSG](bubblesystem.md) -- [Casio PV-1000](pv1000.md) -- [Commodore 64](c64.md) -- [Commodore PET](pet.md) -- [Commodore VIC-20](vic20.md) -- [Generic PCM DAC](dac.md) -- [Famicom Disk System](fds.md) -- [Game Boy](game-boy.md) -- [Konami K007232](k007232.md) -- [Konami K056320](k056320.md) +- [AY-3-8910/8914/YM2149(F)/Sunsoft 5B](ay8910.md) +- [Microship AY8930](ay8930.md) +- [MOS 6581/8580 (SID)](c64.md) +- [Ensoniq ES5506](es5506.md) - [Konami SCC](scc.md) -- [Konami VRC6](vrc6.md) -- [Atari Lynx](lynx.md) +- [FDS](fds.md) +- [Game Boy](game-boy.md) +- [Generic PCM DAC](dac.md) +- [Irem GA20](ga20.md) +- [Bubble System WSG](bubblesystem.md) +- [K007232](k007232.md) +- [K053260](k056320.md) +- [Lynx](lynx.md) +- [MMC5](mmc5.md) +- [MSM5232](msm5232.md) +- [MSM6258](msm6258.md) +- [MSM6295](msm6295.md) - [Namco 163](n163.md) -- [Namco WSG](namco.md) -- [NES](nes.md) -- [Nintendo MMC5](mmc5.md) -- [OKI MSM5232](msm5232.md) -- [OKI MSM6258](msm6258.md) -- [OKI MSM6295](msm6295.md) -- [PC Engine/TurboGrafx-16](pce.md) +- [Namco C140](c140.md) +- [Namco WSG/C15/C30](namco.md) +- [HuC6280](pce.md) - [PC Speaker](pcspkr.md) -- [Philips SAA1099](saa1099.md) -- [Pokémon mini](pokemini.md) -- [Capcom QSound](qsound.md) -- [Ricoh RF5C68](ricoh.md) +- [PET](pet.md) +- [Pokémon Mini](pokemini.md) +- [POKEY](pokey.md) +- [PV-1000](pv1000.md) +- [QSound](qsound.md) +- [RF5C68/RF5C164](ricoh.md) +- [SAA1099](saa1099.md) - [SegaPCM](segapcm.md) -- [Seta/Allumer X1-010](x1-010.md) +- [SM8521](sm8521.md) +- [SN76489/Sega PSG](sms.md) - [SNES](snes.md) -- [Atari 2600 (TIA)](tia.md) - [tildearrow Sound Unit](soundunit.md) -- [TI SN76489](sms.md) -- [Toshiba T6W28](t6w28.md) +- [T6W28](t6w28.md) +- [TED](ted.md) +- [TIA](tia.md) - [VERA](vera.md) -- [WonderSwan](wonderswan.md) +- [VIC](vic20.md) - [Virtual Boy](virtual-boy.md) -- [Yamaha YM2413 (OPLL)](opll.md) -- [Yamaha OPL](opl.md) -- [Yamaha YM2151](ym2151.md) -- [Yamaha YM2203](ym2203.md) -- [Yamaha YM2414 (OPZ)](opz.md) -- [Yamaha YM2608](ym2608.md) -- [Neo Geo/YM2610](ym2610.md) -- [Taito Arcade/YM2610B](ym2610b.md) -- [Yamaha YM2612](ym2612.md) -- [Yamaha YMZ280B](ymz280b.md) +- [VRC6](vrc6.md) +- [WonderSwan](wonderswan.md) +- [X1-010](x1-010.md) +- [VRC7, Y8950, YM3526, YM3812 and YMF262 (OPL)](opl.md) +- [YM2413 (OPLL)](opll.md) +- [YM2414 (OPZ)](opz.md) +- [YM2151 (OPM)](ym2152.md) +- [YM2203 (OPN)](ym2203.md) +- [YM2608 (OPNA)](ym2608.md) +- [YM2610 (OPNB)](ym2610.md) +- [YM2610B (OPNB2)](ym2610b.md) +- [YM2612/YM3438 (OPN2)](ym2612.md) +- [YMZ280B](ymz280b.md) - [ZX Spectrum Beeper](zxbeep.md) Furnace also reads .dmf files with the [Yamaha YMU759](ymu759.md) system, but... diff --git a/doc/7-systems/amiga.md b/doc/7-systems/amiga.md index ee197a90a..c40d6eed6 100644 --- a/doc/7-systems/amiga.md +++ b/doc/7-systems/amiga.md @@ -18,6 +18,8 @@ imported MOD files use this chip, and will set A-4 tuning to 436. # info +this chip uses the [Generic Sample](../4-instrument/amiga.md) instrument editor. + - the maximum rate for sample playback is technically 31469Hz but anything higher than 28867Hz will sound glitchy on hardware. - sample lengths and loop will be set to an even number. - samples can't be longer than 131070. \ No newline at end of file diff --git a/doc/7-systems/ay8910.md b/doc/7-systems/ay8910.md index 0b9d759a4..8c88d704e 100644 --- a/doc/7-systems/ay8910.md +++ b/doc/7-systems/ay8910.md @@ -47,7 +47,11 @@ as of Furnace 0.6pre7, AY-3-8910 supports software sample playback, where all 3 - `2Fxx`: **write to I/O port B.** - this changes the port's mode to "write". make sure you have connected something to it. -# chip config +# info + +this chip uses the [AY-3-8910](../4-instrument/ay8910.md) instrument editor. + + ## AY derivative modes AY-3-810 was an absurdly popular chip that was blessed with many third-party clones, licensed or not. diff --git a/doc/7-systems/ay8930.md b/doc/7-systems/ay8930.md index 1a926ebce..545e8fd0b 100644 --- a/doc/7-systems/ay8930.md +++ b/doc/7-systems/ay8930.md @@ -55,3 +55,7 @@ as of Furnace 0.6pre7, AY8930 supports software PCM, where all 3 channels can pl - `x` is the numerator. - `y` is the denominator. - if `x` or `y` are 0 this will disable auto-envelope mode. + +# info + +this chip uses the [AY8930](../4-instrument/8930.md) instrument editor. diff --git a/doc/7-systems/bubblesystem.md b/doc/7-systems/bubblesystem.md index c04aa098d..946fd61d8 100644 --- a/doc/7-systems/bubblesystem.md +++ b/doc/7-systems/bubblesystem.md @@ -11,3 +11,7 @@ Furnace emulates this configuration as a "chip" with 32×16 wavetables. # effects - `10xx`: **change wave.** + +# info + +this chip uses the [Konami SCC/ Bubble System WSG](../4-instrument/scc.md) instrument editor. diff --git a/doc/7-systems/c140.md b/doc/7-systems/c140.md new file mode 100644 index 000000000..eb39e3461 --- /dev/null +++ b/doc/7-systems/c140.md @@ -0,0 +1,19 @@ +# Namco C140 + +Namco C140 is a 24-channel custom PCM sound chip manufactured jointly by Fujitsu and Namco. It was first used in Namco Sytem 2 arcade family starting in 1987. + +This chip features: + +- stereo soft panning +- accepts either raw 12-bit PCM or proprietary 8-bit u-law compressed PCM samples +- 21.4 kHz sampling rate + +# effects + +- `80xx`: set panning (`00: left, `80`: center, `FF`: right) +- `81xx`: set left channel panning +- `82xx`: set right channel panning + +# info + +this chip uses the [C140](../4-instrument/c140.md) instrument editor. diff --git a/doc/7-systems/c64.md b/doc/7-systems/c64.md index 7627f3d9b..04035df58 100644 --- a/doc/7-systems/c64.md +++ b/doc/7-systems/c64.md @@ -57,3 +57,7 @@ two versions of aforementioned chip exist - 6581 (original chip) and 8580 (impro - `6`: disable channel 3 (`y` is `0` or `1`) - `3xxx`: **set duty cycle.** `xxx` range is `000` to `FFF`. - `4xxx`: **set cutoff.** `xxx` range is `000` to `7FF`. + +# info + +this chip uses the [C64](../4-instrument/c64.md) instrument editor. diff --git a/doc/7-systems/dac.md b/doc/7-systems/dac.md index 60bdd96c0..3c6445db9 100644 --- a/doc/7-systems/dac.md +++ b/doc/7-systems/dac.md @@ -7,3 +7,7 @@ with it, you can emulate PCM DACs found in Williams arcade boards, Sound Blaster # effects none yet. + +# info + +this chip uses the [Generic Sample](../4-instrument/amiga.md) instrument editor. diff --git a/doc/7-systems/es5506.md b/doc/7-systems/es5506.md index 436aca0c7..e36eff1c5 100644 --- a/doc/7-systems/es5506.md +++ b/doc/7-systems/es5506.md @@ -39,3 +39,7 @@ it supports a whopping 32 channels of 16-bit PCM and: - `8Axx`: **set panning (rear right channel).** - `9xxx`: **set sample offset.** resets sample position to `xxx * 0x100`. - `DFxx`: **set sample playback direction.** + +# info + +this chip uses the [ES5506](../4-instrument/es5506.md) instrument editor. diff --git a/doc/7-systems/fds.md b/doc/7-systems/fds.md index 8105d107f..f26ccef9b 100644 --- a/doc/7-systems/fds.md +++ b/doc/7-systems/fds.md @@ -25,3 +25,7 @@ it also offers an additional 6-bit, 64-byte wavetable sound channel with (somewh - 6: -2 - 7: -1 - why is this mapping so unnatural? because that's how DefleMask does it (yeah, as you may have guessed this effect is mostly for compatibility reasons)... + +# info + +this chip uses the [FDS](../4-instrument/fds.md) instrument editor. diff --git a/doc/7-systems/ga20.md b/doc/7-systems/ga20.md new file mode 100644 index 000000000..875564870 --- /dev/null +++ b/doc/7-systems/ga20.md @@ -0,0 +1,8 @@ +# Irem GA20 + +ga20 is a 4 channel PCM sound source used by Irem in their arcades in late 1980s and eraly 1990s, often paired with [Yamaha YM2151](ym2151.md). Soundchip itself is rather unremarkable, having 8-bit volume and pitch control, no stereo panning + + +# effects + +none diff --git a/doc/7-systems/game-boy.md b/doc/7-systems/game-boy.md index eed8241af..b2b624dba 100644 --- a/doc/7-systems/game-boy.md +++ b/doc/7-systems/game-boy.md @@ -21,6 +21,11 @@ with stereo sound, two pulse channels, a wave channel and a noise channel, it pa - set to `0` to disable it. - `14xx`: **set sweep direction.** `0` is up and `1` is down. +# info + +this chip uses the [Game Boy](../4-instrument/game-boy.md) instrument editor. + + # links - [Gameboy sound hardware](https://gbdev.gg8.se/wiki/articles/Gameboy_sound_hardware) - detailed technical information diff --git a/doc/7-systems/k007232.md b/doc/7-systems/k007232.md index f5571e1e2..f7e9d69c1 100644 --- a/doc/7-systems/k007232.md +++ b/doc/7-systems/k007232.md @@ -9,3 +9,7 @@ it has 7 bit digital output per each channel and no volume register on chip, so # effects - nothing for now. + +# info + +this chip uses the [K007232](../4-instrument/k007232.md) instrument editor. diff --git a/doc/7-systems/k056320.md b/doc/7-systems/k056320.md index bf6595823..ad3fb4a96 100644 --- a/doc/7-systems/k056320.md +++ b/doc/7-systems/k056320.md @@ -1,9 +1,13 @@ # Konami 056320 -the 056320 is a sample-based chip that featured in a number of Konami arcade games, notably _Sunset Riders_ and _Teenage Mutant Ninja Turtles: Turtles in Time_. it has four channels of audio and stereo output, and can access up to 2MB of samples in 8-bit PCM or 4-bit ADPCM formats. +the 056320 is a sample-based chip that featured in a number of Konami arcade games, notably _Sunset Riders_ and _Teenage Mutant Ninja Turtles: Turtles in Time_. it has four channels of audio, 12-bit pitch resolution and stereo output, and can access up to 2MB of samples in 8-bit PCM or 4-bit ADPCM formats. # effects - `DFxx`: Set sample playback direction. `0` is normal; `1` is reverse. + +# info + +this chip uses the [C140](../4-instrument/c140.md) instrument editor. diff --git a/doc/7-systems/lynx.md b/doc/7-systems/lynx.md index 24f32634f..e3bb087db 100644 --- a/doc/7-systems/lynx.md +++ b/doc/7-systems/lynx.md @@ -17,3 +17,7 @@ the Atari Lynx has a 6502-based CPU with a sound part (this chip is known as MIK - `3xxx`: **load LFSR.** this is a bitmask with values ranging from `000` to `FFF`. - for it to work, duty macro in instrument editor must be set to some value. without it LFSR will not be fed with any bits. + +# info + +this chip uses the [Atari Lynx](../4-instrument/lynx.md) instrument editor. diff --git a/doc/7-systems/mmc5.md b/doc/7-systems/mmc5.md index a838dfe88..90d8c5696 100644 --- a/doc/7-systems/mmc5.md +++ b/doc/7-systems/mmc5.md @@ -10,3 +10,7 @@ additionally, it offers an 8-bit DAC which can be used to play samples. only one - `12xx`: **set duty cycle or noise mode of channel.** - may be `0` through `3` for the pulse channels. + +# info + +this chip uses the [NES](../4-instrument/nes.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. diff --git a/doc/7-systems/msm5232.md b/doc/7-systems/msm5232.md index 0f28cb786..17ee9ee03 100644 --- a/doc/7-systems/msm5232.md +++ b/doc/7-systems/msm5232.md @@ -24,3 +24,7 @@ Furnace implements this chip in a way that allows the following features: - only in internal (capacitor-based) envelope mode. - `13xx`: **set group decay.** range is `0` to `11`. - only in internal (capacitor-based) envelope mode. + +# info + +this chip uses the [MSM5232](../4-instrument/msm5232.md) instrument editor. diff --git a/doc/7-systems/msm6258.md b/doc/7-systems/msm6258.md index a7b8a21fd..9cabf1405 100644 --- a/doc/7-systems/msm6258.md +++ b/doc/7-systems/msm6258.md @@ -18,3 +18,7 @@ MSM6258 is an extremely basic ADPCM sound codec. it has no variable frequency ra | 4.096 MHz | 8000 Hz | | 8 MHz | 15625 Hz | | 8.192 MHz | 16000 Hz | + +# info + +this chip uses the [MSM6258](../4-instrument/msm6258.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. diff --git a/doc/7-systems/msm6295.md b/doc/7-systems/msm6295.md index c130854ea..9906de6b1 100644 --- a/doc/7-systems/msm6295.md +++ b/doc/7-systems/msm6295.md @@ -6,9 +6,15 @@ an upgrade from 6258 - it provides 4 ADPCM channels, at max 32 KHz (still no var - `20xx`: **set chip output rate.** -# chip config + +# info + +this chip uses the [MSM6295](../4-instrument/msm6295.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. + + ## chip clock rates -like MSM6258, MSM295 is an extremely basic ADPCM sound codec. it has no variable frequency rate, it depends on clock rate of a chip itself. Furnace supports following rates: + +like MSM6258, MSM6295 is an extremely basic ADPCM sound codec. it has no variable frequency rate, it depends on clock rate of a chip itself. Furnace supports following rates: | clock rate | sampling rate | |--------------------|---------------| diff --git a/doc/7-systems/n163.md b/doc/7-systems/n163.md index e6645637d..af1bffbee 100644 --- a/doc/7-systems/n163.md +++ b/doc/7-systems/n163.md @@ -38,3 +38,7 @@ if the waveform changes (e.g. ins change, wave macro or wave synth), or the **lo - the length is determined by the wave's width (it will be snapped to a multiple of 4 if it isn't). - make sure to use `21xx` first! - `21xx`: **set position for 20xx.** + +# info + +this chip uses the [Namco 163](../4-instrument/n163.md) instrument editor. diff --git a/doc/7-systems/namco.md b/doc/7-systems/namco.md index 54d8b964f..ffa5817b9 100644 --- a/doc/7-systems/namco.md +++ b/doc/7-systems/namco.md @@ -8,3 +8,7 @@ everything starts with Namco WSG, which is a simple 3-channel wavetable with no - `10xx`: **change waveform.** - `11xx`: **toggle noise mode.** _warning:_ only on C30. + +# info + +this chip uses the [Namco WSG](../4-instrument/namco.md) instrument editor. diff --git a/doc/7-systems/nes.md b/doc/7-systems/nes.md index 2b81c2a87..28df60676 100644 --- a/doc/7-systems/nes.md +++ b/doc/7-systems/nes.md @@ -56,7 +56,11 @@ also known as Famicom. it is a five-channel sound generator: first two channels - only works in DPCM mode. - see table below for possible values. -# tables + +# info + +this chip uses the [NES](../4-instrument/nes.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. + ## short noise frequencies (NTSC) diff --git a/doc/7-systems/opl.md b/doc/7-systems/opl.md index 5f7034cb9..ac82ded0e 100644 --- a/doc/7-systems/opl.md +++ b/doc/7-systems/opl.md @@ -78,3 +78,7 @@ afterwards everyone moved to Windows and software mixed PCM streaming... - `5Bxy`: **set KSR of operator.** - `x` is the operator from 1 to 4; the last 2 operators only work in 4-op mode. a value of `0` means "all operators". - `y` determines whether KSR is on. + +# info + +this chip uses the [FM (OPL)](../4-instrument/fm-opl.md) instrument editor. diff --git a/doc/7-systems/opll.md b/doc/7-systems/opll.md index c5dd4ff6d..92a81490b 100644 --- a/doc/7-systems/opll.md +++ b/doc/7-systems/opll.md @@ -65,3 +65,7 @@ the YM2413 is equipped with the following features: - `5Bxy`: **set KSR of operator.** - `x` is the operator, either 1 or 2. a value of `0` means "all operators". - `y` determines whether KSR is on. + +# info + +this chip uses the [FM (OPLL)](../4-instrument/fm-opll.md) instrument editor. diff --git a/doc/7-systems/opz.md b/doc/7-systems/opz.md index 1abef5c45..c4b0413a9 100644 --- a/doc/7-systems/opz.md +++ b/doc/7-systems/opz.md @@ -113,3 +113,7 @@ no plans have been made for TX81Z MIDI passthrough, because: - `5Dxx`: **set D2R/SR of operator 2.** - `5Exx`: **set D2R/SR of operator 3.** - `5Fxx`: **set D2R/SR of operator 4.** + +# info + +this chip uses the [FM (OPZ)](../4-instrument/opz.md) instrument editor. diff --git a/doc/7-systems/pce.md b/doc/7-systems/pce.md index 80f4af109..308d42e46 100644 --- a/doc/7-systems/pce.md +++ b/doc/7-systems/pce.md @@ -18,5 +18,9 @@ furthermore, it has some PCM and LFO! - `03`: LFO enabled, shift 8. - when LFO is enabled, channel 2 is muted and its output is passed to channel 1's frequency. - `13xx`: **set LFO speed.** -- `17xx`: **toggle PCM mode.** - - _this effect is here for compatibility reasons_; it is otherwise recommended to use Sample type instruments (which automatically enable PCM mode when used). +- `17xx`: **toggle LEGACY sample mode.** + - **this effect exists only for compatibility reasons! its use is NOT recommented. use Sample type instruments instead.** + +# info + +this chip uses the [PC Engine](../4-instrument/pce.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. diff --git a/doc/7-systems/pcspkr.md b/doc/7-systems/pcspkr.md index a6a55ba65..d84181bfe 100644 --- a/doc/7-systems/pcspkr.md +++ b/doc/7-systems/pcspkr.md @@ -29,3 +29,7 @@ oh, and of course you also need the beeper to be present in your machine. some l # effects ha! effects... + +# info + +this chip uses the [Beeper](../4-instrument/beeper.md) instrument editor. diff --git a/doc/7-systems/pet.md b/doc/7-systems/pet.md index 9b7e3b5bf..e99e17925 100644 --- a/doc/7-systems/pet.md +++ b/doc/7-systems/pet.md @@ -9,3 +9,7 @@ some of these didn't even have sound... # effects - `10xx`: **set waveform.** `xx` is a bitmask. + +# info + +this chip uses the [PET](../4-instrument/pet.md) instrument editor. diff --git a/doc/7-systems/pokemini.md b/doc/7-systems/pokemini.md index 142d49658..7633f27a2 100644 --- a/doc/7-systems/pokemini.md +++ b/doc/7-systems/pokemini.md @@ -5,3 +5,7 @@ the Pokémon Mini is a ridiculously small handheld system from 2001. its single # effects none. + +# info + +this chip uses the [Pokémon Mini/QuadTone](../4-instrument/quadtone.md) instrument editor. diff --git a/doc/7-systems/pokey.md b/doc/7-systems/pokey.md index 20d75f1ea..31832e580 100644 --- a/doc/7-systems/pokey.md +++ b/doc/7-systems/pokey.md @@ -35,3 +35,7 @@ a sound and input chip developed by Atari for their 8-bit computers (Atari 400, - `12xx`: **toggle two-tone mode.** - when enabled, channel 2 modulates channel 1. I don't know how, but it does. - only on ASAP core. + +# info + +this chip uses the [POKEY](../4-instrument/pokey.md) instrument editor. diff --git a/doc/7-systems/pv1000.md b/doc/7-systems/pv1000.md index 43abbfea9..97cb617b5 100644 --- a/doc/7-systems/pv1000.md +++ b/doc/7-systems/pv1000.md @@ -5,3 +5,7 @@ released only in Japan, this console was pulled after only a few weeks on the ma # effects - `10xx`: **set ring modulation.** amplitude modulation by the previous channel's output. `0` turns it off and `1` turns it on. + +# info + +this chip uses the [PV-1000](../4-instrument/pv1000.md) instrument editor. diff --git a/doc/7-systems/qsound.md b/doc/7-systems/qsound.md index 07651a721..6aa57d365 100644 --- a/doc/7-systems/qsound.md +++ b/doc/7-systems/qsound.md @@ -17,3 +17,7 @@ there are also 3 ADPCM channels. ADPCM samples are fixed to 8012 Hz. - `11xx`: **set echo level.** - `12xx`: **toggle QSound algorithm.** on by default. - `3xxx`: **set echo delay buffer length.** + +# info + +this chip uses the [QSound](../4-instrument/qsound.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. diff --git a/doc/7-systems/ricoh.md b/doc/7-systems/ricoh.md index 518326022..1c3695cad 100644 --- a/doc/7-systems/ricoh.md +++ b/doc/7-systems/ricoh.md @@ -6,3 +6,6 @@ YM2612's sidekick - poor man's SNES DSP. 8-channel PCM sample-based synthesizer none so far. +# info + +this chip uses the [RF5C68](../4-instrument/ricoh.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. diff --git a/doc/7-systems/saa1099.md b/doc/7-systems/saa1099.md index 6b2624e40..8036ec71e 100644 --- a/doc/7-systems/saa1099.md +++ b/doc/7-systems/saa1099.md @@ -27,3 +27,7 @@ this was used by the Game Blaster and SAM Coupé. it's pretty similar to the AY- - `111`: up loop (reverse saw) - bit 0 sets whether the right output will mirror the left one. - this effect affects either the first 3 or last 3 channels, depending on where it is placed. + +# info + +this chip uses the [SAA1099](../4-instrument/saa.md) instrument editor. diff --git a/doc/7-systems/scc.md b/doc/7-systems/scc.md index 19a0736c8..8e5b01475 100644 --- a/doc/7-systems/scc.md +++ b/doc/7-systems/scc.md @@ -9,3 +9,7 @@ the SCC+ fixes this issue though (while being compatible with SCC games). # effects - `10xx`: **change wave.** + +# info + +this chip uses the [Konami SCC/Bubble System WSG](../4-instrument/scc.md) instrument editor. diff --git a/doc/7-systems/segapcm.md b/doc/7-systems/segapcm.md index 3272699d3..296f2a884 100644 --- a/doc/7-systems/segapcm.md +++ b/doc/7-systems/segapcm.md @@ -15,3 +15,7 @@ Furnace also has a five channel version of this chip, but it only exists for Def - `20xx`: **set PCM frequency.** - `xx` is a 256th fraction of 31250Hz. - this effect exists mostly for DefleMask compatibility; it is otherwise recommended to use Sample type instruments. + +# info + +this chip uses the [SegaPCM](../4-instrument/segapcm.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. diff --git a/doc/7-systems/sm8521.md b/doc/7-systems/sm8521.md index a5a6e024c..c29ff79ae 100644 --- a/doc/7-systems/sm8521.md +++ b/doc/7-systems/sm8521.md @@ -15,9 +15,13 @@ the sound-related features and quirks of the SM8521 are as follows: - a low bit-depth output (which means it distorts a lot). - it phase resets when you switch waves - 12-bit pitch with a wide frequency range -- a software-controlled D/A register that (potentially) requires all other registers to be stopped to play. due to this, it is currently, it is not implemented in Furnace as of version 0.6pre4. +- a software-controlled D/A register that (potentially) requires all other registers to be stopped to play. due to this, it is currently not implemented in Furnace as of version 0.6pre4. ## effect commands - `10xx`: **set waveform.** - `xx` is a value between 0 and 255 that sets the waveform of the channel you place it on. + +# info + +this chip uses the [SM8521](../4-instrument/sm8521.md) instrument editor. diff --git a/doc/7-systems/sms.md b/doc/7-systems/sms.md index 528de4207..36d13976d 100644 --- a/doc/7-systems/sms.md +++ b/doc/7-systems/sms.md @@ -1,4 +1,4 @@ -# TI SN76489 (e.g. sega Master System) +# TI SN76489 (e.g. Sega Master System) a relatively simple sound chip made by Texas Instruments. a derivative of it is used in Sega's Master System, the predecessor to Genesis. @@ -14,7 +14,12 @@ the original iteration of the SN76489 used in the TI-99/4A computer, the SN94624 - `0`: thin pulse. - `1`: noise. -# chip config + +# info + +this chip uses the [SN76489/Sega PSG](../4-instrument/psg.md) instrument editor. + + ## SN7 versions SN7 was extremely popular due to low cost. Therefore, it was cloned and copied to no end, often with minor differences between each other. Furnace supports several of these: - SN94624, can only produce tones as low as 100Hz, and is clocked at 447 KHz. diff --git a/doc/7-systems/snes.md b/doc/7-systems/snes.md index 9888291c6..9c57d7526 100644 --- a/doc/7-systems/snes.md +++ b/doc/7-systems/snes.md @@ -67,7 +67,10 @@ Furnace also allows the SNES to use wavetables (and the wavetable synthesizer) i - _Note:_ Be sure the sum of all coefficients is between -128 and 127. sums outside that may result in overflow and therefore clicking. - see [SnesLab](https://sneslab.net/wiki/FIR_Filter) for a full explanation and examples. -# tables +# info + +this chip uses the [SNES](../4-instrument/snes.md) instrument editor. + ## ADSR diff --git a/doc/7-systems/soundunit.md b/doc/7-systems/soundunit.md index 5b4838133..00706c0f1 100644 --- a/doc/7-systems/soundunit.md +++ b/doc/7-systems/soundunit.md @@ -54,3 +54,7 @@ it has the following capabilities: - bit 0-6: speed - bit 7: up direction - `4xxx`: **set cutoff.** range is `0` to `FFF`. + +# info + +this chip uses the [Sound Unit](../4-instrument/soundunit.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. diff --git a/doc/7-systems/t6w28.md b/doc/7-systems/t6w28.md index 886ea63b4..26d7d977c 100644 --- a/doc/7-systems/t6w28.md +++ b/doc/7-systems/t6w28.md @@ -9,3 +9,7 @@ this chip was used in Neo Geo Pocket. - `20xx`: **set noise mode.** - `0`: thin pulse. - `1`: noise. + +# info + +this chip uses the [T6W28](../4-instrument/t6w28.md) instrument editor. diff --git a/doc/7-systems/ted.md b/doc/7-systems/ted.md index e1349a55b..4333fcea6 100644 --- a/doc/7-systems/ted.md +++ b/doc/7-systems/ted.md @@ -8,3 +8,7 @@ pitch range is limited as well, akin to that of SN76489, and volume control is g # effects none so far. + +# info + +this chip uses the [TED](../4-instrument/ted.md) instrument editor. diff --git a/doc/7-systems/tia.md b/doc/7-systems/tia.md index d4cf06b38..8b89616d4 100644 --- a/doc/7-systems/tia.md +++ b/doc/7-systems/tia.md @@ -29,9 +29,12 @@ Furnace isn't complete without this one... -# tables +# info -pitch number can be used for absolute notes in arpeggio macros. +this chip uses the [TIA](../4-instrument/tia.md) instrument editor. + + +- pitch number can be used for absolute notes in arpeggio macros. ## shape 1 diff --git a/doc/7-systems/vera.md b/doc/7-systems/vera.md index e89744a9d..d4189412a 100644 --- a/doc/7-systems/vera.md +++ b/doc/7-systems/vera.md @@ -15,3 +15,7 @@ currently Furnace does not support the PCM channel's stereo mode, though (except - `22xx`: **set duty cycle.** range is `0` to `3F`. - `EExx`: **ZSM synchronization event.** - Where `xx` is the event payload. This has no effect in how the music is played in Furnace, but the ZSMKit library for the Commander X16 interprets these events inside ZSM files and optionally triggers a callback routine. This can be used, for instance, to cause game code to respond to beats or at certain points in the music. + +# info + +this chip uses the [VERA](../4-instrument/vera.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. diff --git a/doc/7-systems/vic20.md b/doc/7-systems/vic20.md index e5126c182..6d5a9bd41 100644 --- a/doc/7-systems/vic20.md +++ b/doc/7-systems/vic20.md @@ -16,3 +16,7 @@ these channels are not referred as "square" wave channels since a technique to p ## effect commands - `10xx`: **switch waveform.** range is `00` to `0F`. + +# info + +this chip uses the [VIC](../4-instrument/vic.md) instrument editor. diff --git a/doc/7-systems/virtual-boy.md b/doc/7-systems/virtual-boy.md index 9ef6c909b..8dc11da98 100644 --- a/doc/7-systems/virtual-boy.md +++ b/doc/7-systems/virtual-boy.md @@ -41,3 +41,7 @@ additionally, channel 5 offers a modulation/sweep unit. the former is similar to - `15xx`: **set modulation wave.** - `xx` points to a wavetable. range is `0` to `FF`. - this is an alternative to setting the modulation wave through the instrument. + +# info + +this chip uses the [Virtual Boy](../4-instrument/virtual-boy.md) instrument editor. diff --git a/doc/7-systems/vrc6.md b/doc/7-systems/vrc6.md index d652cc26c..ba6df1d2a 100644 --- a/doc/7-systems/vrc6.md +++ b/doc/7-systems/vrc6.md @@ -15,4 +15,9 @@ Furnace supports this routine for PCM playback, but it consumes a lot of CPU tim these effects only are effective in the pulse channels. - `12xx`: **set duty cycle.** range is `0` to `7`. -- `17xx`: **toggle PCM mode.** +- `17xx`: **toggle LEGACY sample mode.** + - **this effect exists only for compatibility reasons! its use is NOT recommented. use Sample type instruments instead.** + +# info + +this chip uses the [VRC](../4-instrument/vrc6.md), [VRC (saw)](../4-instrument/vrc6.md), and [Generic Sample](../4-instrument/amiga.md) instrument editors. diff --git a/doc/7-systems/wonderswan.md b/doc/7-systems/wonderswan.md index d4bff7c1e..e386461b7 100644 --- a/doc/7-systems/wonderswan.md +++ b/doc/7-systems/wonderswan.md @@ -19,3 +19,7 @@ it has 4 wavetable channels. some of them have additional capabilities: - 1-32: enable and set period. - `13xx`: **setup sweep amount.** channel 3 only. - `17xx`: **toggle PCM mode.** channel 2 only. + +# info + +this chip uses the [WonderSwan](../4-instrument/wonderswan.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. diff --git a/doc/7-systems/x1-010.md b/doc/7-systems/x1-010.md index 5f110aba5..e4836cf8f 100644 --- a/doc/7-systems/x1-010.md +++ b/doc/7-systems/x1-010.md @@ -27,7 +27,8 @@ in Furnace, you can enable the envelope shape split mode. when it is set, its wa - `10xx`: **change wave.** - `11xx`: **change envelope shape.** also wavetable. -- `17xx`: **toggle PCM mode.** +- `17xx`: **toggle LEGACY sample mode.** + - **this effect exists only for compatibility reasons! its use is NOT recommented. use Sample type instruments instead.** - `20xx`: **set PCM frequency.** range is `1` to `FF`. - PCM frequency formula: `step * (clock / 8192)`. - range is 1.95KHz to 498KHz if the chip clock is 16MHz. @@ -45,3 +46,7 @@ in Furnace, you can enable the envelope shape split mode. when it is set, its wa - `x` is the numerator. - `y` is the denominator. - if `x` or `y` are 0 this will disable auto-envelope mode. + +# info + +this chip uses the [X1-010](../4-instrument/x1_010.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. diff --git a/doc/7-systems/ym2151.md b/doc/7-systems/ym2151.md index f9bd87511..58b4fd1f7 100644 --- a/doc/7-systems/ym2151.md +++ b/doc/7-systems/ym2151.md @@ -68,3 +68,7 @@ in most arcade boards the chip was used in combination with a PCM chip, like [Se - `5Dxx`: **set D2R/SR of operator 2.** - `5Exx`: **set D2R/SR of operator 3.** - `5Fxx`: **set D2R/SR of operator 4.** + +# info + +this chip uses the [FM (OPM)](../4-instrument/fm-opm.md) instrument editor. diff --git a/doc/7-systems/ym2203.md b/doc/7-systems/ym2203.md index f79f95d24..f8fd41fe9 100644 --- a/doc/7-systems/ym2203.md +++ b/doc/7-systems/ym2203.md @@ -100,7 +100,12 @@ several variants of this chip were released as well, with more features. - `5Exx`: **set D2R/SR of operator 3.** - `5Fxx`: **set D2R/SR of operator 4.** -# system modes + +# info + +this chip uses the [FM (OPN)](../4-instrument/fm-opn.md) and [AY-3-8910/SSG](../4-instrument/ay8910.md) instrument editor. + + ## extended channel 3 in ExtCh mode, channel 3 is split into one column for each of its four operators and feedback are shared. the frequency of each operator may be controlled independently with notes and effects. this can be used for more polyphony or more complex sounds. diff --git a/doc/7-systems/ym2608.md b/doc/7-systems/ym2608.md index 16f3cc7e1..51ea15d90 100644 --- a/doc/7-systems/ym2608.md +++ b/doc/7-systems/ym2608.md @@ -100,7 +100,12 @@ the YM2610 (OPNB) and YM2610B chips are very similar to this one, but the built- - `5Exx`: **set D2R/SR of operator 3.** - `5Fxx`: **set D2R/SR of operator 4.** -# system modes + +# info + +this chip uses the [FM (OPN)](../4-instrument/fm-opn.md), [Generic Sample](../4-instrument/amiga.md), [AY-3-8910/SSG](../4-instrument/ay8910.md), [ADPCM-A](../4-instrument/adpcm-a.md), and [ADPCM-B](../4-instrument/adpcm-b.md) instrument editors. + + ## extended channel 3 in ExtCh mode, channel 3 is split into one column for each of its four operators. feedback and LFO levels are shared. the frequency of each operator may be controlled independently with notes and effects. this can be used for more polyphony or more complex sounds. diff --git a/doc/7-systems/ym2610.md b/doc/7-systems/ym2610.md index 02a630b0e..b56df33d7 100644 --- a/doc/7-systems/ym2610.md +++ b/doc/7-systems/ym2610.md @@ -98,7 +98,11 @@ its soundchip is a 4-in-1: 4ch 4-op FM, YM2149 (AY-3-8910 clone) and [2 differen - `5Exx`: **set D2R/SR of operator 3.** - `5Fxx`: **set D2R/SR of operator 4.** -# system modes +# info + +this chip uses the [FM (OPN)](../4-instrument/fm-opn.md), [Generic Sample](../4-instrument/amiga.md), [AY-3-8910/SSG](../4-instrument/ay8910.md), [ADPCM-A](../4-instrument/adpcm-a.md), and [ADPCM-B](../4-instrument/adpcm-b.md) instrument editors. + + ## extended channel 2 in ExtCh mode, channel 2 is split into one column for each of its four operators. feedback and LFO levels are shared. the frequency of each operator may be controlled independently with notes and effects. this can be used for more polyphony or more complex sounds. diff --git a/doc/7-systems/ym2610b.md b/doc/7-systems/ym2610b.md index 2911c2671..a670cfc2c 100644 --- a/doc/7-systems/ym2610b.md +++ b/doc/7-systems/ym2610b.md @@ -97,8 +97,13 @@ it is backward compatible with the original chip. - `5Exx`: **set D2R/SR of operator 3.** - `5Fxx`: **set D2R/SR of operator 4.** -# system modes +# info + +this chip uses the [FM (OPN)](../4-instrument/fm-opn.md), [Generic Sample](../4-instrument/amiga.md), [AY-3-8910/SSG](../4-instrument/ay8910.md), [ADPCM-A](../4-instrument/adpcm-a.md), and [ADPCM-B](../4-instrument/adpcm-b.md) instrument editors. + + ## extended channel 3 + in ExtCh mode, channel 3 is split into one column for each of its four operators. feedback and LFO levels are shared. the frequency of each operator may be controlled independently with notes and effects. this can be used for more polyphony or more complex sounds. all four operators are still combined according to the algorithm in use. for example, algorithm 7 acts as four independent sine waves. algorithm 4 acts as two independent 2op sounds. even with algorithm 0, placing a note in any operator triggers that operator alone. diff --git a/doc/7-systems/ym2612.md b/doc/7-systems/ym2612.md index ddb91b781..7804984eb 100644 --- a/doc/7-systems/ym2612.md +++ b/doc/7-systems/ym2612.md @@ -16,8 +16,9 @@ as of Furnace 0.6pre5, Furnace offers DualPCM, a Z80 driver that splits channel - `16xy`: **set multiplier of operator.** - `x` is the operator (1-4). - `y` is the multiplier. -- `17xx`: **enable PCM channel.** +- `17xx`: **toggle LEGACY sample mode.** - this only works on channel 6. + - **this effect exists only for compatibility reasons! its use is NOT recommented. use Sample type instruments instead.** - `18xx`: **toggle extended channel 3 mode.** - 0 disables it and 1 enables it. - only in extended channel 3 chip. @@ -66,3 +67,24 @@ as of Furnace 0.6pre5, Furnace offers DualPCM, a Z80 driver that splits channel - `5Dxx`: **set D2R/SR of operator 2.** - `5Exx`: **set D2R/SR of operator 3.** - `5Fxx`: **set D2R/SR of operator 4.** + +# info + +this chip uses the [FM (OPN)](../4-instrument/fm-opn.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. + + +## extended channel 3 + +in ExtCh mode, channel 3 is split into one column for each of its four operators. feedback and LFO levels are shared. the frequency of each operator may be controlled independently with notes and effects. this can be used for more polyphony or more complex sounds. + +all four operators are still combined according to the algorithm in use. for example, algorithm 7 acts as four independent sine waves. algorithm 4 acts as two independent 2op sounds. even with algorithm 0, placing a note in any operator triggers that operator alone. + +## CSM + +CSM is short for "Composite Sinusoidal Modeling". CSM works by sending key-on and key-off commands to channel 3 at a specific frequency, controlled by the added "CSM Timer" channel. this can be used to create vocal formants (speech synthesis!) or other complex effects. + +CSM is beyond the scope of this documentation. for more information, see this [brief SSG-EG and CSM video tutorial](https://www.youtube.com/watch?v=IKOR0TUlnWU). + +## DualPCM + +thanks to the Z80 sound CPU, DualPCM can play two samples at once! this mode splits channel 6 into two individual PCM channels with variable pitch. these are mixed together in software and streamed to channel 6 with a mix rate of 13750 Hz. VGM export requires the "direct stream mode" option to be enabled, and resulting files will be very large. diff --git a/doc/7-systems/ymu759.md b/doc/7-systems/ymu759.md index 339848321..956b37aca 100644 --- a/doc/7-systems/ymu759.md +++ b/doc/7-systems/ymu759.md @@ -15,3 +15,7 @@ even DefleMask dropped support for the chip in version 0.11, which just shows ho hey, at least it was the spark that ignited the idea of DefleMask. + +# info + +this chip uses the [FM (OPL)](../4-instrument/fm-opl.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. diff --git a/doc/7-systems/ymz280b.md b/doc/7-systems/ymz280b.md index b3a82b868..982df8d25 100644 --- a/doc/7-systems/ymz280b.md +++ b/doc/7-systems/ymz280b.md @@ -7,3 +7,7 @@ it has 16-level stereo panning, up to 16-bit PCM and up to 16MB of external PCM # effects none so far. + +# info + +this chip uses the [YMZ280B](../4-instrument/ymz280b.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. diff --git a/doc/7-systems/zxbeep.md b/doc/7-systems/zxbeep.md index e724e0943..183beb4fc 100644 --- a/doc/7-systems/zxbeep.md +++ b/doc/7-systems/zxbeep.md @@ -14,3 +14,7 @@ not really - very soon talented programmers found out ways to output much more t - `xx` is the sample number. - overlay drums are 1-bit and always play at 55930Hz (NTSC) or 55420Hz (PAL). - the maximum length is 2048! + +# info + +this chip uses the [Beeper](../4-instrument/beeper.md), [Generic Sample](../4-instrument/amiga.md), and [Pokémon Mini/QuadTone](../4-instrument/quadtone.md) instrument editors. diff --git a/doc/8-advanced/chanosc-gradient.png b/doc/8-advanced/chanosc-gradient.png index 26bdb2581..357bbf764 100644 Binary files a/doc/8-advanced/chanosc-gradient.png and b/doc/8-advanced/chanosc-gradient.png differ diff --git a/doc/8-advanced/chanosc.md b/doc/8-advanced/chanosc.md index 4e3962ced..f58ae2960 100644 --- a/doc/8-advanced/chanosc.md +++ b/doc/8-advanced/chanosc.md @@ -8,6 +8,11 @@ right-clicking within the view will change it to the configuration view shown ab - **Columns**: arranges oscilloscopes into this many columns. - **Size (ms)**: sets what length of audio is visible in each oscilloscope. - **Center waveform**: does its best to latch the waveform to the channel's note frequency and centers the display. +- **Automatic columns**: sets the number of columns based on the number of channels. + - **Off**: use the Columns setting. + - **Mode 1**: always fewer columns than rows. + - **Mode 2**: bias slightly toward more columns. + - **Mode 3**: always more columns than rows. - **Amplitude**: scales amplitude for all oscilloscopes. - **Gradient**: see below. - the color selector sets the color for all waveforms. right-clicking on it pops up an option dialog: @@ -19,6 +24,7 @@ right-clicking within the view will change it to the configuration view shown ab - `%C`: channel short name - `%d`: channel number (starting from 0) - `%D`: channel number (starting from 1) + - `%n`: channel note - `%i`: instrument name - `%I`: instrument number (decimal) - `%x`: instrument number (hex) diff --git a/doc/8-advanced/chanosc.png b/doc/8-advanced/chanosc.png index 2f90435a8..06dce19c1 100644 Binary files a/doc/8-advanced/chanosc.png and b/doc/8-advanced/chanosc.png differ diff --git a/extern/igfd/ImGuiFileDialog.cpp b/extern/igfd/ImGuiFileDialog.cpp index d66dadf74..fbdd00f07 100644 --- a/extern/igfd/ImGuiFileDialog.cpp +++ b/extern/igfd/ImGuiFileDialog.cpp @@ -192,7 +192,7 @@ namespace IGFD #define OverWriteDialogTitleString "Warning" #endif // OverWriteDialogTitleString #ifndef OverWriteDialogMessageString -#define OverWriteDialogMessageString "The file you selected already exists? Would you like to overwrite it?" +#define OverWriteDialogMessageString "The file you selected already exists! Would you like to overwrite it?" #endif // OverWriteDialogMessageString #ifndef OverWriteDialogConfirmButtonString #define OverWriteDialogConfirmButtonString "Yes" @@ -3814,6 +3814,66 @@ namespace IGFD return escape; } + int IGFD::FileDialog::isFileNameValid(const char* n) { +#ifdef _WIN32 + char lower[6]; + int len=strlen(n); + + for (int i=0; i<6; i++) { + lower[i]=0; + } + + if (len>=3) { + if (len>5) len=5; + for (int i=0; i='A' && n[i]<='Z') { + lower[i]=n[i]+('a'-'A'); + } else { + lower[i]=n[i]; + } + } + if ((memcmp(lower,"con",3)==0 || + memcmp(lower,"prn",3)==0 || + memcmp(lower,"aux",3)==0 || + memcmp(lower,"nul",3)==0) && + (len==3 || lower[3]=='.')) { + return 2; + } + if (len>=4) { + if ((memcmp(lower,"com",3) || + memcmp(lower,"lpt",3)) && + (lower[3]>='1' && lower[3]<='9') && + (len==4 || lower[4]=='.')) { + return 2; + } + } + } +#endif + for (const char* i=n; *i; i++) { +#ifdef _WIN32 + if (*i<32) { + return 3; + } +#endif + + switch (*i) { +#ifdef _WIN32 + case '<': + case '>': + case ':': + case '"': + case '\\': + case '|': + case '?': + case '*': +#endif + case '/': + return 1; + } + } + return 0; + } + bool IGFD::FileDialog::prDrawFooter() { auto& fdFile = prFileDialogInternal.puFileManager; @@ -3844,16 +3904,44 @@ namespace IGFD bool res = false; // OK Button - if (prFileDialogInternal.puCanWeContinue && strlen(fdFile.puFileNameBuffer)) + bool notEmpty=strlen(fdFile.puFileNameBuffer); + int fileValid=isFileNameValid(fdFile.puFileNameBuffer); + if (!(prFileDialogInternal.puDLGflags&ImGuiFileDialogFlags_ConfirmOverwrite)) fileValid=0; + ImGui::BeginDisabled(!(prFileDialogInternal.puCanWeContinue && notEmpty && fileValid==0)); + if (IMGUI_BUTTON(okButtonString "##validationdialog")) { - if (IMGUI_BUTTON(okButtonString "##validationdialog")) - { - prFileDialogInternal.puIsOk = true; - res = true; - } - - ImGui::SameLine(); + prFileDialogInternal.puIsOk = true; + res = true; } + if (!(prFileDialogInternal.puCanWeContinue && notEmpty && fileValid==0)) { + if (ImGui::IsItemHovered()) { + if (!notEmpty) { + if (prFileDialogInternal.puDLGflags&ImGuiFileDialogFlags_ConfirmOverwrite) { + ImGui::SetTooltip("file name is empty"); + } else { + ImGui::SetTooltip("select a file"); + } + } else if (!prFileDialogInternal.puCanWeContinue) { + ImGui::SetTooltip("we can't continue - this is most likely a bug!"); + } else switch (fileValid) { + case 1: + ImGui::SetTooltip("invalid characters in file name\nmake sure there aren't any of these:\n < > : \" / \\ | ? *"); + break; + case 2: + ImGui::SetTooltip("this file name is reserved by the system"); + break; + case 3: + ImGui::SetTooltip("non-printable characters in file name\nhow did you manage to type these?"); + break; + default: + ImGui::SetTooltip("bug! how did you do this? please fill an issue report now..."); + break; + } + } + } + ImGui::EndDisabled(); + + ImGui::SameLine(); // Cancel Button if (IMGUI_BUTTON(cancelButtonString "##validationdialog") || diff --git a/extern/igfd/ImGuiFileDialog.h b/extern/igfd/ImGuiFileDialog.h index 0850cd680..a2420918f 100644 --- a/extern/igfd/ImGuiFileDialog.h +++ b/extern/igfd/ImGuiFileDialog.h @@ -1261,6 +1261,11 @@ namespace IGFD bool IsOpened(const std::string& vKey) const; // say if the key is opened bool IsOpened() const; // say if the dialog is opened somewhere std::string GetOpenedKey() const; // return the dialog key who is opened, return nothing if not opened + // 0: valid + // 1: invalid chars + // 2: reserved name + // 3: non-printable chars + int isFileNameValid(const char* n); // get result bool IsOk() const; // true => Dialog Closed with Ok result / false : Dialog closed with cancel result diff --git a/extern/imgui_patched/imconfig.h b/extern/imgui_patched/imconfig.h index 876cf32f7..860c0b427 100644 --- a/extern/imgui_patched/imconfig.h +++ b/extern/imgui_patched/imconfig.h @@ -97,7 +97,9 @@ // Your renderer backend will need to support it (most example renderer backends support both 16/32-bit indices). // Another way to allow large meshes while keeping 16-bit indices is to handle ImDrawCmd::VtxOffset in your renderer. // Read about ImGuiBackendFlags_RendererHasVtxOffset for details. -//#define ImDrawIdx unsigned int +#ifndef IS_MOBILE +#define ImDrawIdx unsigned int +#endif //---- Override ImDrawCallback signature (will need to modify renderer backends accordingly) //struct ImDrawList; diff --git a/extern/imgui_patched/imconfig_fur.h b/extern/imgui_patched/imconfig_fur.h index 9c62b3966..30ca74732 100644 --- a/extern/imgui_patched/imconfig_fur.h +++ b/extern/imgui_patched/imconfig_fur.h @@ -96,7 +96,9 @@ // Your renderer backend will need to support it (most example renderer backends support both 16/32-bit indices). // Another way to allow large meshes while keeping 16-bit indices is to handle ImDrawCmd::VtxOffset in your renderer. // Read about ImGuiBackendFlags_RendererHasVtxOffset for details. -//#define ImDrawIdx unsigned int +#ifndef IS_MOBILE +#define ImDrawIdx unsigned int +#endif //---- Override ImDrawCallback signature (will need to modify renderer backends accordingly) //struct ImDrawList; diff --git a/extern/imgui_patched/imgui.cpp b/extern/imgui_patched/imgui.cpp index 90dc211f3..ceb71b325 100644 --- a/extern/imgui_patched/imgui.cpp +++ b/extern/imgui_patched/imgui.cpp @@ -9522,6 +9522,8 @@ void ImGui::UpdateInputEvents(bool trickle_fast_inputs) } else if (e->Type == ImGuiInputEventType_MouseButton) { + bool trickle_fast_inputs = true; // forcing trickle for MouseButton event + // Trickling Rule: Stop processing queued events if we got multiple action on the same button const ImGuiMouseButton button = e->MouseButton.Button; IM_ASSERT(button >= 0 && button < ImGuiMouseButton_COUNT); @@ -9549,6 +9551,8 @@ void ImGui::UpdateInputEvents(bool trickle_fast_inputs) } else if (e->Type == ImGuiInputEventType_Key) { + bool trickle_fast_inputs = true; // forcing trickle for Key event + // Trickling Rule: Stop processing queued events if we got multiple action on the same button ImGuiKey key = e->Key.Key; IM_ASSERT(key != ImGuiKey_None); @@ -9570,6 +9574,10 @@ void ImGui::UpdateInputEvents(bool trickle_fast_inputs) } else if (e->Type == ImGuiInputEventType_Text) { + // forcing trickle for Text event, but only when interacting with keydown or mouse button + if ((key_changed && trickle_interleaved_keys_and_text) || mouse_button_changed != 0) + break; + // Trickling Rule: Stop processing queued events if keys/mouse have been interacted with if (trickle_fast_inputs && ((key_changed && trickle_interleaved_keys_and_text) || mouse_button_changed != 0 || mouse_moved || mouse_wheeled)) break; diff --git a/extern/imgui_patched/imgui_draw.cpp b/extern/imgui_patched/imgui_draw.cpp index db56f7e3c..6e39f4d0d 100644 --- a/extern/imgui_patched/imgui_draw.cpp +++ b/extern/imgui_patched/imgui_draw.cpp @@ -2224,10 +2224,22 @@ ImFont* ImFontAtlas::AddFontFromMemoryTTF(void* ttf_data, int ttf_size, float si ImFont* ImFontAtlas::AddFontFromMemoryCompressedTTF(const void* compressed_ttf_data, int compressed_ttf_size, float size_pixels, const ImFontConfig* font_cfg_template, const ImWchar* glyph_ranges) { + // workaround for big-endian +#ifdef TA_BIG_ENDIAN + unsigned char* beData=(unsigned char*)IM_ALLOC(compressed_ttf_size); + for (int i=0; i& filterList, nfdselcallback_t selCallback ) { nfdresult_t nfdResult = NFD_ERROR; + NFDWinEvents* winEvents; + bool hasEvents=true; + DWORD eventID=0; HRESULT coResult = COMInit(); @@ -566,6 +569,16 @@ nfdresult_t NFD_OpenDialogMultiple( const std::vector& filterList, goto end; } + // Pass the callback + winEvents=new NFDWinEvents(selCallback); + if ( !SUCCEEDED(fileOpenDialog->Advise(winEvents,&eventID)) ) { + // error... ignore + hasEvents=false; + winEvents->Release(); + } else { + winEvents->Release(); + } + // Set a flag for multiple options DWORD dwFlags; result = fileOpenDialog->GetOptions(&dwFlags); @@ -613,8 +626,12 @@ nfdresult_t NFD_OpenDialogMultiple( const std::vector& filterList, } end: - if ( fileOpenDialog ) + if (fileOpenDialog) { + if (hasEvents) { + fileOpenDialog->Unadvise(eventID); + } fileOpenDialog->Release(); + } COMUninit(coResult); diff --git a/extern/opl/MODIFIED.md b/extern/opl/MODIFIED.md index 78341ad48..d5a39e9f7 100644 --- a/extern/opl/MODIFIED.md +++ b/extern/opl/MODIFIED.md @@ -1,4 +1,4 @@ # modification disclaimer -this is a modified version of Nuked-OPL3 which implements channel muting in the core. +this is a modified version of Nuked-OPL3 which implements channel muting in the core, and resampling function. see [this issue](https://github.com/tildearrow/furnace/issues/414) for more information. diff --git a/extern/opl/opl3.c b/extern/opl/opl3.c index 3358f0335..5acdca250 100644 --- a/extern/opl/opl3.c +++ b/extern/opl/opl3.c @@ -1362,6 +1362,11 @@ void OPL3_Reset(opl3_chip *chip, uint32_t samplerate) #endif } +void OPL3_Resample(opl3_chip *chip, uint32_t samplerate) +{ + chip->rateratio = (samplerate << RSM_FRAC) / 49716; +} + void OPL3_WriteReg(opl3_chip *chip, uint16_t reg, uint8_t v) { uint8_t high = (reg >> 8) & 0x01; diff --git a/extern/opl/opl3.h b/extern/opl/opl3.h index 8d5153237..1e88a8018 100644 --- a/extern/opl/opl3.h +++ b/extern/opl/opl3.h @@ -158,6 +158,7 @@ struct _opl3_chip { void OPL3_Generate(opl3_chip *chip, int16_t *buf); void OPL3_GenerateResampled(opl3_chip *chip, int16_t *buf); void OPL3_Reset(opl3_chip *chip, uint32_t samplerate); +void OPL3_Resample(opl3_chip *chip, uint32_t samplerate); void OPL3_WriteReg(opl3_chip *chip, uint16_t reg, uint8_t v); void OPL3_WriteRegBuffered(opl3_chip *chip, uint16_t reg, uint8_t v); void OPL3_GenerateStream(opl3_chip *chip, int16_t *sndptr, uint32_t numsamples); diff --git a/papers/format.md b/papers/format.md index 46bb4c1fa..4a5e6e900 100644 --- a/papers/format.md +++ b/papers/format.md @@ -143,8 +143,8 @@ size | description | - 0x49: Neo Geo CD extended - 16 channels | - 0x80: AY-3-8910 - 3 channels | - 0x81: Amiga - 4 channels - | - 0x82: YM2151 alone - 8 channels - | - 0x83: YM2612 alone - 6 channels + | - 0x82: YM2151 - 8 channels + | - 0x83: YM2612 - 6 channels | - 0x84: TIA - 2 channels | - 0x85: VIC-20 - 4 channels | - 0x86: PET - 1 channel @@ -159,7 +159,7 @@ size | description | - 0x8f: OPL (YM3526) - 9 channels | - 0x90: OPL2 (YM3812) - 9 channels | - 0x91: OPL3 (YMF262) - 18 channels - | - 0x92: MultiPCM - 28 channels + | - 0x92: MultiPCM - 28 channels (UNAVAILABLE) | - 0x93: Intel 8253 (beeper) - 1 channel | - 0x94: POKEY - 4 channels | - 0x95: RF5C68 - 8 channels @@ -187,8 +187,8 @@ size | description | - 0xab: MSM6258 - 1 channel | - 0xac: Commander X16 (VERA) - 17 channels | - 0xad: Bubble System WSG - 2 channels - | - 0xae: OPL4 (YMF278B) - 42 channels - | - 0xaf: OPL4 drums (YMF278B) - 44 channels + | - 0xae: OPL4 (YMF278B) - 42 channels (UNAVAILABLE) + | - 0xaf: OPL4 drums (YMF278B) - 44 channels (UNAVAILABLE) | - 0xb0: Seta/Allumer X1-010 - 16 channels | - 0xb1: Ensoniq ES5506 - 32 channels | - 0xb2: Yamaha Y8950 - 10 channels @@ -199,26 +199,29 @@ size | description | - 0xb7: YM2608 extended - 19 channels | - 0xb8: YMZ280B - 8 channels | - 0xb9: Namco WSG - 3 channels - | - 0xba: Namco 15xx - 8 channels - | - 0xbb: Namco CUS30 - 8 channels + | - 0xba: Namco C15 - 8 channels + | - 0xbb: Namco C30 - 8 channels | - 0xbc: MSM5232 - 8 channels - | - 0xbd: YM2612 extra features extended - 11 channels - | - 0xbe: YM2612 extra features - 7 channels + | - 0xbd: YM2612 DualPCM extended - 11 channels + | - 0xbe: YM2612 DualPCM - 7 channels | - 0xbf: T6W28 - 4 channels | - 0xc0: PCM DAC - 1 channel | - 0xc1: YM2612 CSM - 10 channels - | - 0xc2: Neo Geo CSM (YM2610) - 18 channels - | - 0xc3: YM2203 CSM - 10 channels - | - 0xc4: YM2608 CSM - 20 channels - | - 0xc5: YM2610B CSM - 20 channels + | - 0xc2: Neo Geo CSM (YM2610) - 18 channels (UNAVAILABLE) + | - 0xc3: YM2203 CSM - 10 channels (UNAVAILABLE) + | - 0xc4: YM2608 CSM - 20 channels (UNAVAILABLE) + | - 0xc5: YM2610B CSM - 20 channels (UNAVAILABLE) | - 0xc6: K007232 - 2 channels | - 0xc7: GA20 - 4 channels | - 0xc8: SM8521 - 3 channels - | - 0xc9: M114S - 16 channels + | - 0xc9: M114S - 16 channels (UNAVAILABLE) | - 0xca: ZX Spectrum (beeper, QuadTone engine) - 5 channels | - 0xcb: Casio PV-1000 - 3 channels | - 0xcc: K053260 - 4 channels | - 0xcd: TED - 2 channels + | - 0xce: Namco C140 - 24 channels + | - 0xcf: Namco C219 - 16 channels (UNAVAILABLE) + | - 0xd0: Namco C352 - 32 channels (UNAVAILABLE) | - 0xde: YM2610B extended - 19 channels | - 0xe0: QSound - 19 channels | - 0xfc: Pong - 1 channel @@ -227,6 +230,8 @@ size | description | - 0xff: reserved for development | - (compound!) means that the system is composed of two or more chips, | and has to be flattened. + | - (UNAVAILABLE) means that the chip hasn't been implemented in Furnace + | yet. 32 | sound chip volumes (<135) or reserved | - signed char, 64=1.0, 127=~2.0 | - as of version 135 these fields only exist for compatibility reasons. diff --git a/papers/icons.md b/papers/icons.md new file mode 100644 index 000000000..7dce048db --- /dev/null +++ b/papers/icons.md @@ -0,0 +1,26 @@ +To generate a new letter icon: + +- Open `icons.sfd` in FontForge. +- Open "IBM Plex Sans Medium" to the side. Return to the icons font. +- Copy char `E0F0` (the one with just two baselines) to the new codepoint. +- Open the new codepoint. +- Select the upper baseline. +- Use `Element | Insert Text Outlines...` to place text: + - Turn off "Scale so text width matches path length". + - Align "centered". + - Type first line of text into the box. + - Click the "Insert" button (might need window resize to be visible). +- Delete the baseline. +- If there's a line 2, repeat for the lower baseline, including deletion. +- Select all. +- Use `Element | Transformations | Transform...` to Scale Uniformly and Move as needed: + - One letter: 12000%, X -896, Y 60.5. + - Two letters: 10000%, X -896, Y 144.2. + - Three letters: 8000%, X -896, Y 228. + - Two lines: 8000%, X -896, Y 663.5. +- If resulting glyph is too wide, repeat all steps starting with "IBM Plex Sans Condensed Medium" instead. + - Remember to close the other IBM Plex font or select the proper one in the text dialog. + +Note: Codepoints `EFF0` to `EFF4` are for reference and shouldn't be used. + +Note: WSG icon (`E11F`) has been slightly kerned to fit. diff --git a/papers/newIns.md b/papers/newIns.md index 786a553c3..4ef3be31d 100644 --- a/papers/newIns.md +++ b/papers/newIns.md @@ -119,6 +119,7 @@ the following instrument types are available: - 49: PV-1000 - 50: K053260 - 52: TED +- 53: C140 the following feature codes are recognized: diff --git a/papers/zsm-format.md b/papers/zsm-format.md index e0fd2c02d..682e63b46 100644 --- a/papers/zsm-format.md +++ b/papers/zsm-format.md @@ -162,11 +162,12 @@ There are currently no supported expansion HW IDs assigned. The purpose of this channel is to provide for music synchronization cues that applications may use to perform operations in sync with the music (such as when the Goombas jump in New Super Mario Bros in time with the BOP! BOP! notes in the music). It is intended for the reference player to provide a sync channel callback, passing the data bytes to the callback function, and then to proceed with playback. -The synchronization format currently defines this one event type: +The synchronization format currently defines these event types: Event Type|Description|Message Format --|--|-- `0x00`|Generic sync message|`xx` (any value from `0x00`-`0xff`) +`0x01`|Song tuning|a signed byte indicating an offset from A-440 tuning represented in 256ths of a semitone An example of an EXTCMD containing one sync event might look as follows: `0x40 0x82 0x00 0x05` diff --git a/res/icons.sfd b/res/icons.sfd new file mode 100644 index 000000000..9ff032dc9 --- /dev/null +++ b/res/icons.sfd @@ -0,0 +1,7273 @@ +SplineFontDB: 3.2 +FontName: FurnaceIcons +FullName: Furnace Icons +FamilyName: Furnace Icons +Weight: Regular +Copyright: +UComments: "To generate a new icon:+AAoACgAA-- Open +ACIA-IBM Plex Sans Medium+ACIA to the side. Return to the icons font.+AAoA-- Copy char EFF0 (the one with just two baselines) to the new codepoint.+AAoA-- Open the new codepoint.+AAoA-- Select the upper baseline.+AAoA-- Use `Element | Insert Text Outlines...` to place text:+AAoA - Turn off +ACIA-Scale so text width matches path length+ACIA.+AAoA - Align +ACIA-centered+ACIA.+AAoA - Type first line of text into the box.+AAoA - Click the +ACIA-Insert+ACIA button (might need window resize to be visible).+AAoA-- Delete the baseline.+AAoA-- If there's a line 2, repeat for the lower baseline, including deletion.+AAoA-- Select all.+AAoA-- Use `Element | Transformations | Transform...` to Scale Uniformly and Move as needed:+AAoA - One letter: 12000%, X -896, Y 120.5.+AAoA - Two letters: 10000%, X -896, Y 204.2.+AAoA - Three letters: 8000%, X -896, Y 288.+AAoA - Two lines: 8000%, X -896, Y 723.5.+AAoA-- If resulting glyph is too wide, repeat all steps starting with +ACIA-IBM Plex Sans Condensed Medium+ACIA instead.+AAoA - Remember to close the other IBM Plex font or select the proper one in the text dialog.+AAoACgAA-Note: Codepoints EFF0 to EFF4 are for reference and shouldn't be used.+AAoACgAA-Note: WSG icon (F01F) has been slightly kerned to fit.+AAoA" +Version: 001.000 +ItalicAngle: 0 +UnderlinePosition: 0 +UnderlineWidth: 0 +Ascent: 1536 +Descent: 256 +InvalidEm: 0 +LayerCount: 2 +Layer: 0 0 "Back" 1 +Layer: 1 0 "Fore" 0 +XUID: [1021 230 235539655 14169] +FSType: 0 +OS2Version: 0 +OS2_WeightWidthSlopeOnly: 0 +OS2_UseTypoMetrics: 0 +CreationTime: 1691897631 +ModificationTime: 1692064247 +PfmFamily: 81 +TTFWeight: 400 +TTFWidth: 5 +LineGap: 0 +VLineGap: 0 +OS2TypoAscent: 1536 +OS2TypoAOffset: 0 +OS2TypoDescent: -256 +OS2TypoDOffset: 0 +OS2TypoLinegap: 0 +OS2WinAscent: 1536 +OS2WinAOffset: 0 +OS2WinDescent: 256 +OS2WinDOffset: 0 +HheadAscent: 1536 +HheadAOffset: 0 +HheadDescent: -256 +HheadDOffset: 0 +OS2Vendor: 'FurT' +MarkAttachClasses: 1 +DEI: 91125 +LangName: 1033 +Encoding: UnicodeBmp +UnicodeInterp: none +NameList: AGL For New Fonts +DisplaySize: -48 +AntiAlias: 1 +FitToEm: 0 +WinInfo: 57536 16 11 +BeginPrivate: 0 +EndPrivate +BeginChars: 65536 60 + +StartChar: space +Encoding: 32 32 0 +Width: 1792 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uniE100 +Encoding: 57600 57600 1 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 216.516 95.9375<754.864 980.648 1382.09 1612.77> 494.875 95.0781<141.391 377.778 1516.16 1654.36> 813.625 95.9375<141.391 377.778 780.433 998.844 1381.56 1608.87> +VStem: 32.9531 108.438<228 494.875 589.953 803.078> 401.547 114.297<612.194 780.759> 648.969 107.5<656.387 792.68> 1008.97 107.5<339.565 486.758> 1203.19 116.172<375.958 749.848> 1663.97 95.0781<228 329.797 361.503 491.984> +DStem2: 863.031 629.25 844.75 526.594 0.978916 -0.204262<-84.378 149.631> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 276.516 95.9375<754.864 980.648 1382.09 1612.77> 554.875 95.0781<141.391 377.778 1516.16 1654.36> 873.625 95.9375<141.391 377.778 780.433 998.844 1381.56 1608.87> +VStem: 32.9531 108.438<288 554.875 649.953 863.078> 401.547 114.297<672.194 840.759> 648.969 107.5<716.387 852.68> 1008.97 107.5<399.565 546.758> 1203.19 116.172<435.958 809.848> 1663.97 95.0781<288 389.797 421.503 551.984> +DStem2: 863.031 689.25 844.75 586.594 0.978916 -0.204262<-84.378 149.631> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +32.953125 228 m 1 + 32.953125 451.359375 32.953125 674.71875 32.953125 898.078125 c 1 + 128.942382812 898.078125 224.932617188 898.078125 320.921875 898.078125 c 1 + 383.03125 898.078125 431 879.875 464.90625 843.390625 c 0 + 498.890625 806.90625 515.84375 757.921875 515.84375 696.515625 c 256 + 515.84375 635.03125 498.890625 586.046875 464.90625 549.5625 c 0 + 431 513.15625 383.03125 494.875 320.921875 494.875 c 1 + 261.078125 494.875 201.234375 494.875 141.390625 494.875 c 1 + 141.390625 405.916992188 141.390625 316.958007812 141.390625 228 c 1 + 105.245117188 228 69.0986328125 228 32.953125 228 c 1 +141.390625 589.953125 m 1 + 198.995117188 589.953125 256.598632812 589.953125 314.203125 589.953125 c 1 + 341.703125 589.953125 363.1875 597.140625 378.5 611.515625 c 0 + 393.890625 625.890625 401.546875 646.59375 401.546875 673.46875 c 1 + 401.546875 688.807617188 401.546875 704.145507812 401.546875 719.484375 c 1 + 401.546875 746.4375 393.890625 767.0625 378.5 781.4375 c 0 + 363.1875 795.8125 341.703125 803.078125 314.203125 803.078125 c 1 + 256.598632812 803.078125 198.995117188 803.078125 141.390625 803.078125 c 1 + 141.390625 732.036132812 141.390625 660.995117188 141.390625 589.953125 c 1 +873.578125 216.515625 m 0 + 817.25 216.515625 769.4375 226.75 730.0625 247.21875 c 0 + 690.6875 267.6875 656.9375 295.1875 628.8125 329.796875 c 1 + 653.760742188 353.15625 678.708007812 376.515625 703.65625 399.875 c 1 + 727.328125 371.046875 753.421875 349.25 781.859375 334.5625 c 0 + 810.375 319.875 842.875 312.453125 879.359375 312.453125 c 0 + 922.25 312.453125 954.515625 322.0625 976.3125 341.28125 c 0 + 998.03125 360.5 1008.96875 386.4375 1008.96875 419.015625 c 0 + 1008.96875 445.265625 1001.234375 466.046875 985.921875 481.4375 c 0 + 970.53125 496.828125 943.34375 508.3125 904.28125 515.96875 c 1 + 884.4375 519.510742188 864.59375 523.051757812 844.75 526.59375 c 1 + 779.515625 538.703125 730.53125 560.1875 697.875 590.890625 c 0 + 665.21875 621.59375 648.96875 663.859375 648.96875 717.609375 c 0 + 648.96875 747.0625 654.515625 773.78125 665.765625 797.765625 c 0 + 676.9375 821.75 692.640625 841.90625 712.796875 858.234375 c 0 + 732.953125 874.5625 757.40625 887.21875 786.234375 896.125 c 0 + 814.984375 905.109375 847.328125 909.5625 883.1875 909.5625 c 0 + 933.734375 909.5625 977.5625 900.8125 1014.671875 883.234375 c 0 + 1051.78125 865.578125 1083.5 840.1875 1109.75 806.90625 c 1 + 1084.46386719 784.510742188 1059.17675781 762.114257812 1033.890625 739.71875 c 1 + 1016.625 762.0625 995.53125 780.03125 970.53125 793.46875 c 0 + 945.609375 806.90625 914.515625 813.625 877.40625 813.625 c 0 + 839.046875 813.625 809.28125 805.890625 788.109375 790.578125 c 0 + 767.015625 775.1875 756.46875 752.765625 756.46875 723.390625 c 0 + 756.46875 695.1875 765.0625 674.25 782.40625 660.5 c 0 + 799.671875 646.75 826.546875 636.28125 863.03125 629.25 c 1 + 882.875 625.109375 902.71875 620.96875 922.5625 616.828125 c 1 + 989.75 604.015625 1038.890625 582.21875 1069.90625 551.515625 c 0 + 1100.921875 520.8125 1116.46875 478.546875 1116.46875 424.796875 c 0 + 1116.46875 393.46875 1111 364.953125 1100.140625 339.328125 c 0 + 1089.28125 313.78125 1073.421875 291.828125 1052.640625 273.625 c 0 + 1031.78125 255.34375 1006.390625 241.28125 976.3125 231.359375 c 0 + 946.234375 221.4375 911.9375 216.515625 873.578125 216.515625 c 0 +1663.96875 329.796875 m 1 + 1662.69238281 329.796875 1661.41699219 329.796875 1660.140625 329.796875 c 1 + 1653.109375 297.140625 1634.046875 270.109375 1603.03125 248.625 c 0 + 1571.9375 227.21875 1530.84375 216.515625 1479.671875 216.515625 c 0 + 1439.984375 216.515625 1403.1875 224.015625 1369.28125 239.015625 c 0 + 1335.296875 254.09375 1306.078125 276.125 1281.390625 305.265625 c 0 + 1256.78125 334.40625 1237.5625 370.578125 1223.8125 413.78125 c 0 + 1210.0625 456.984375 1203.1875 506.75 1203.1875 563.078125 c 0 + 1203.1875 618.703125 1210.21875 668.15625 1224.28125 711.359375 c 0 + 1238.34375 754.5625 1258.1875 790.890625 1283.8125 820.34375 c 0 + 1309.4375 849.796875 1340.140625 871.984375 1376 887.0625 c 0 + 1411.78125 902.0625 1451.78125 909.5625 1496 909.5625 c 0 + 1556.15625 909.5625 1607.015625 896.28125 1648.578125 869.796875 c 0 + 1690.21875 843.234375 1722.5625 806.203125 1745.609375 758.859375 c 1 + 1716.15625 741.59375 1686.703125 724.328125 1657.25 707.0625 c 1 + 1644.4375 738.390625 1624.59375 763.859375 1597.71875 783.390625 c 0 + 1570.84375 802.84375 1536.9375 812.609375 1496 812.609375 c 0 + 1442.875 812.609375 1400.140625 795.65625 1367.796875 761.75 c 0 + 1335.53125 727.84375 1319.359375 679.875 1319.359375 617.765625 c 1 + 1319.359375 581.28125 1319.359375 544.796875 1319.359375 508.3125 c 1 + 1319.359375 446.203125 1335.53125 398.234375 1367.796875 364.328125 c 0 + 1400.140625 330.421875 1442.875 313.46875 1496 313.46875 c 0 + 1517.09375 313.46875 1537.25 316.125 1556.46875 321.59375 c 0 + 1575.6875 327.0625 1592.484375 335.03125 1606.859375 345.578125 c 0 + 1621.234375 356.125 1632.796875 369.25 1641.390625 384.953125 c 0 + 1650.0625 400.65625 1654.359375 419.015625 1654.359375 440.1875 c 1 + 1654.359375 457.453125 1654.359375 474.71875 1654.359375 491.984375 c 1 + 1608.29199219 491.984375 1562.22363281 491.984375 1516.15625 491.984375 c 1 + 1516.15625 523.026367188 1516.15625 554.067382812 1516.15625 585.109375 c 1 + 1597.12011719 585.109375 1678.08300781 585.109375 1759.046875 585.109375 c 1 + 1759.046875 466.073242188 1759.046875 347.036132812 1759.046875 228 c 1 + 1727.35449219 228 1695.66113281 228 1663.96875 228 c 1 + 1663.96875 261.932617188 1663.96875 295.864257812 1663.96875 329.796875 c 1 +EndSplineSet +EndChar + +StartChar: uniE101 +Encoding: 57601 57601 2 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 216.516 90.2344<203.228 410.876> 498.703 90.2344<815.531 1024.71> 807.844 90.2344<194.777 419.326 815.531 1024.71> +VStem: 46.8594 109.453<354.775 771.303> 457.719 109.453<354.775 771.303> 713.734 101.797<228 498.703 588.938 807.844> 1043.97 108.516<608.279 788.506> 1273.73 117.109<822.653 898.078> 1273.73 97.9688<228 753.051> 1627.02 118.125<228 303.425> 1647.17 97.9688<373.027 898.078> +DStem2: 1590.53 495.812 1376.47 755.031 0.377481 -0.926017<-320.846 135.117> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 276.516 90.2344<203.228 410.876> 558.703 90.2344<815.531 1024.71> 867.844 90.2344<194.777 419.326 815.531 1024.71> +VStem: 46.8594 109.453<414.775 831.303> 457.719 109.453<414.775 831.303> 713.734 101.797<288 558.703 648.938 867.844> 1043.97 108.516<668.279 848.506> 1273.73 117.109<882.653 958.078> 1273.73 97.9688<288 813.051> 1627.02 118.125<288 363.425> 1647.17 97.9688<433.027 958.078> +DStem2: 1590.53 555.812 1376.47 815.031 0.377481 -0.926017<-320.846 135.117> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +307.015625 216.515625 m 256xfe + 266.703125 216.515625 230.53125 223.078125 198.578125 236.125 c 0 + 166.546875 249.25 139.203125 269.953125 116.46875 298.078125 c 0 + 93.734375 326.203125 76.46875 362.21875 64.59375 406.046875 c 0 + 52.796875 449.953125 46.859375 502.21875 46.859375 563.078125 c 256 + 46.859375 623.859375 52.796875 676.125 64.59375 720.03125 c 0 + 76.46875 763.859375 93.734375 799.875 116.46875 828 c 0 + 139.203125 856.125 166.546875 876.828125 198.578125 889.953125 c 0 + 230.53125 903.078125 266.703125 909.5625 307.015625 909.5625 c 256 + 347.328125 909.5625 383.5 903.078125 415.53125 889.953125 c 0 + 447.484375 876.828125 474.90625 856.125 497.5625 828 c 0 + 520.296875 799.875 537.5625 763.859375 549.4375 720.03125 c 0 + 561.234375 676.125 567.171875 623.859375 567.171875 563.078125 c 256 + 567.171875 502.21875 561.234375 449.953125 549.4375 406.046875 c 0 + 537.5625 362.21875 520.296875 326.203125 497.5625 298.078125 c 0 + 474.90625 269.953125 447.484375 249.25 415.53125 236.125 c 0 + 383.5 223.078125 347.328125 216.515625 307.015625 216.515625 c 256xfe +307.015625 306.75 m 256 + 355.0625 306.75 392.171875 322.21875 418.421875 353.3125 c 0 + 444.59375 384.328125 457.71875 427.375 457.71875 482.375 c 1 + 457.71875 536.151367188 457.71875 589.926757812 457.71875 643.703125 c 1 + 457.71875 698.703125 444.59375 741.75 418.421875 772.765625 c 0 + 392.171875 803.859375 355.0625 819.328125 307.015625 819.328125 c 256 + 259.046875 819.328125 221.9375 803.859375 195.6875 772.765625 c 0 + 169.4375 741.75 156.3125 698.703125 156.3125 643.703125 c 1 + 156.3125 589.926757812 156.3125 536.151367188 156.3125 482.375 c 1 + 156.3125 427.375 169.4375 384.328125 195.6875 353.3125 c 0 + 221.9375 322.21875 259.046875 306.75 307.015625 306.75 c 256 +713.734375 228 m 1 + 713.734375 451.359375 713.734375 674.71875 713.734375 898.078125 c 1 + 802.067382812 898.078125 890.401367188 898.078125 978.734375 898.078125 c 1 + 1036.3125 898.078125 1079.671875 880.96875 1108.8125 846.75 c 0 + 1137.875 812.453125 1152.484375 763.078125 1152.484375 698.390625 c 256 + 1152.484375 633.78125 1137.875 584.328125 1108.8125 550.109375 c 0 + 1079.671875 515.8125 1036.3125 498.703125 978.734375 498.703125 c 1 + 924.333007812 498.703125 869.932617188 498.703125 815.53125 498.703125 c 1 + 815.53125 408.46875 815.53125 318.234375 815.53125 228 c 1 + 781.598632812 228 747.666992188 228 713.734375 228 c 1 +815.53125 588.9375 m 1 + 867.041992188 588.9375 918.551757812 588.9375 970.0625 588.9375 c 1 + 994.359375 588.9375 1012.796875 595.1875 1025.296875 607.6875 c 0 + 1037.71875 620.1875 1043.96875 640.1875 1043.96875 667.6875 c 1 + 1043.96875 688.15625 1043.96875 708.625 1043.96875 729.09375 c 1 + 1043.96875 756.671875 1037.71875 776.671875 1025.296875 789.09375 c 0 + 1012.796875 801.59375 994.359375 807.84375 970.0625 807.84375 c 1 + 918.551757812 807.84375 867.041992188 807.84375 815.53125 807.84375 c 1 + 815.53125 734.875 815.53125 661.90625 815.53125 588.9375 c 1 +1427.328125 630.265625 m 1 + 1410.375 671.854492188 1393.421875 713.442382812 1376.46875 755.03125 c 1 + 1372.30175781 755.03125 1368.13574219 755.03125 1363.96875 755.03125 c 1 + 1366.546875 712.791992188 1369.125 670.551757812 1371.703125 628.3125 c 1 + 1371.703125 494.875 1371.703125 361.4375 1371.703125 228 c 1 + 1339.046875 228 1306.390625 228 1273.734375 228 c 1xfec0 + 1273.734375 451.359375 1273.734375 674.71875 1273.734375 898.078125 c 1 + 1312.77050781 898.078125 1351.80761719 898.078125 1390.84375 898.078125 c 1 + 1457.40625 763.989257812 1523.96875 629.901367188 1590.53125 495.8125 c 1 + 1607.82324219 454.223632812 1625.11425781 412.635742188 1642.40625 371.046875 c 1 + 1646.57324219 371.046875 1650.73925781 371.046875 1654.90625 371.046875 c 1 + 1652.328125 413.286132812 1649.75 455.526367188 1647.171875 497.765625 c 1 + 1647.171875 631.203125 1647.171875 764.640625 1647.171875 898.078125 c 1 + 1679.828125 898.078125 1712.484375 898.078125 1745.140625 898.078125 c 1xff20 + 1745.140625 674.71875 1745.140625 451.359375 1745.140625 228 c 1 + 1705.765625 228 1666.390625 228 1627.015625 228 c 1xfe40 + 1560.453125 362.088867188 1493.890625 496.176757812 1427.328125 630.265625 c 1 +EndSplineSet +EndChar + +StartChar: uniE102 +Encoding: 57602 57602 3 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 129.845 121.191<399.409 663.663> 144.2 116.406<1138.19 1452.86> 474.181 116.406<556.547 729.398> 515.001 112.793<1138.19 1425.21> 865.392 116.406<1138.19 1425.21> 874.962 121.191<400.057 661.626> +VStem: 165.336 145.312<342.614 782.606> 741.312 118.945<144.2 271.446 322.934 474.181> 1002.64 135.547<260.606 515.001 627.794 865.392> 1453.81 142.773<654.386 838.799> 1483.7 142.969<289.11 486.498> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 189.845 121.191<399.409 663.663> 204.2 116.406<1138.19 1452.86> 534.181 116.406<556.547 729.398> 575.001 112.793<1138.19 1425.21> 925.392 116.406<1138.19 1425.21> 934.962 121.191<400.057 661.626> +VStem: 165.336 145.312<402.614 842.606> 741.312 118.945<204.2 331.446 382.934 534.181> 1002.64 135.547<320.606 575.001 687.794 925.392> 1453.81 142.773<714.386 898.799> 1483.7 142.969<349.11 546.498> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +741.3125 271.446289062 m 1x6380 + 739.75 271.446289062 738.1875 271.446289062 736.625 271.446289062 c 1 + 727.8359375 230.625976562 704.0078125 196.836914062 665.140625 169.981445312 c 0 + 626.2734375 143.223632812 574.90625 129.844726562 511.0390625 129.844726562 c 0 + 461.4296875 129.844726562 415.3359375 139.219726562 372.953125 157.969726562 c 0 + 330.5703125 176.817382812 294.046875 204.356445312 263.1875 240.782226562 c 0 + 232.328125 277.208007812 208.3046875 322.422851562 191.1171875 376.426757812 c 0 + 173.9296875 430.430664062 165.3359375 492.637695312 165.3359375 563.047851562 c 0 + 165.3359375 632.579101562 174.125 694.395507812 191.703125 748.399414062 c 0 + 209.28125 802.403320312 234.0859375 847.813476562 266.1171875 884.629882812 c 0 + 298.1484375 921.446289062 336.625 949.180664062 381.3515625 968.028320312 c 0 + 426.078125 986.778320312 476.078125 996.153320312 531.3515625 996.153320312 c 0 + 606.546875 996.153320312 670.21875 979.551757812 722.171875 946.446289062 c 0 + 774.125 913.243164062 814.5546875 866.954101562 843.4609375 807.774414062 c 1 + 806.612304688 786.192382812 769.762695312 764.610351562 732.9140625 743.028320312 c 1 + 716.8984375 782.188476562 692.09375 814.024414062 658.5 838.438476562 c 0 + 624.90625 862.754882812 582.5234375 874.961914062 531.3515625 874.961914062 c 0 + 464.9453125 874.961914062 411.625 853.770507812 371.1953125 811.387695312 c 0 + 330.765625 769.004882812 310.6484375 709.043945312 310.6484375 631.407226562 c 1 + 310.6484375 585.801757812 310.6484375 540.196289062 310.6484375 494.590820312 c 1 + 310.6484375 416.954101562 330.765625 356.993164062 371.1953125 314.610351562 c 0 + 411.625 272.227539062 464.9453125 251.036132812 531.3515625 251.036132812 c 0x8780 + 557.71875 251.036132812 582.9140625 254.356445312 606.9375 261.192382812 c 0 + 630.9609375 268.028320312 652.0546875 277.989257812 670.0234375 291.172851562 c 0 + 687.9921875 304.356445312 702.4453125 320.762695312 713.1875 340.391601562 c 0 + 723.9296875 360.020507812 729.3984375 382.969726562 729.3984375 409.434570312 c 1 + 729.3984375 431.016601562 729.3984375 452.598632812 729.3984375 474.180664062 c 1 + 671.78125 474.180664062 614.1640625 474.180664062 556.546875 474.180664062 c 1 + 556.546875 512.982421875 556.546875 551.784179688 556.546875 590.586914062 c 1 + 657.784179688 590.586914062 759.020507812 590.586914062 860.2578125 590.586914062 c 1 + 860.2578125 441.791015625 860.2578125 292.995117188 860.2578125 144.200195312 c 1 + 820.609375 144.200195312 780.9609375 144.200195312 741.3125 144.200195312 c 1 + 741.3125 186.615234375 741.3125 229.030273438 741.3125 271.446289062 c 1x6380 +1002.640625 981.797851562 m 1x4ba0 + 1126.20800781 981.797851562 1249.77636719 981.797851562 1373.34375 981.797851562 c 1 + 1442.875 981.797851562 1497.5625 962.168945312 1537.2109375 923.008789062 c 0 + 1576.859375 883.848632812 1596.5859375 831.407226562 1596.5859375 765.782226562 c 0x4bc0 + 1596.5859375 734.629882812 1592.09375 707.969726562 1583.3046875 685.997070312 c 0 + 1574.515625 664.024414062 1563.3828125 645.958007812 1549.7109375 631.993164062 c 0 + 1536.234375 618.028320312 1520.609375 607.579101562 1503.03125 600.840820312 c 0 + 1485.453125 594.004882812 1468.265625 589.805664062 1451.2734375 588.243164062 c 1 + 1451.2734375 585.833984375 1451.2734375 583.424804688 1451.2734375 581.016601562 c 1 + 1468.265625 580.235351562 1486.8203125 576.231445312 1507.1328125 569.004882812 c 0 + 1527.640625 561.778320312 1546.5859375 550.352539062 1564.1640625 534.825195312 c 0 + 1581.7421875 519.200195312 1596.5859375 499.180664062 1608.5 474.766601562 c 0 + 1620.609375 450.352539062 1626.6640625 420.567382812 1626.6640625 385.411132812 c 0 + 1626.6640625 351.817382812 1621.1953125 320.176757812 1610.453125 290.586914062 c 0 + 1599.515625 260.997070312 1584.4765625 235.411132812 1565.3359375 213.829101562 c 0 + 1546.1953125 192.247070312 1523.34375 175.157226562 1496.9765625 162.754882812 c 0 + 1470.609375 150.352539062 1441.703125 144.200195312 1410.6484375 144.200195312 c 1 + 1274.64550781 144.200195312 1138.64355469 144.200195312 1002.640625 144.200195312 c 1 + 1002.640625 423.399414062 1002.640625 702.598632812 1002.640625 981.797851562 c 1x4ba0 +1138.1875 260.606445312 m 1 + 1215.79199219 260.606445312 1293.39550781 260.606445312 1371 260.606445312 c 1 + 1406.15625 260.606445312 1433.6953125 269.786132812 1453.8125 288.243164062 c 0x53c0 + 1473.734375 306.602539062 1483.6953125 332.969726562 1483.6953125 367.442382812 c 1 + 1483.6953125 381.016601562 1483.6953125 394.590820312 1483.6953125 408.165039062 c 1x53a0 + 1483.6953125 442.637695312 1473.734375 469.004882812 1453.8125 487.364257812 c 0 + 1433.6953125 505.821289062 1406.15625 515.000976562 1371 515.000976562 c 1 + 1293.39550781 515.000976562 1215.79199219 515.000976562 1138.1875 515.000976562 c 1x53c0 + 1138.1875 430.202148438 1138.1875 345.404296875 1138.1875 260.606445312 c 1 +1138.1875 627.793945312 m 1 + 1208.17480469 627.793945312 1278.16113281 627.793945312 1348.1484375 627.793945312 c 1 + 1381.7421875 627.793945312 1407.71875 636.387695312 1426.078125 653.575195312 c 0 + 1444.6328125 670.762695312 1453.8125 695.372070312 1453.8125 727.403320312 c 1 + 1453.8125 740.196289062 1453.8125 752.989257812 1453.8125 765.782226562 c 1 + 1453.8125 797.813476562 1444.6328125 822.422851562 1426.078125 839.610351562 c 0 + 1407.71875 856.797851562 1381.7421875 865.391601562 1348.1484375 865.391601562 c 1 + 1278.16113281 865.391601562 1208.17480469 865.391601562 1138.1875 865.391601562 c 1x1bc0 + 1138.1875 786.192382812 1138.1875 706.993164062 1138.1875 627.793945312 c 1 +EndSplineSet +EndChar + +StartChar: uniE103 +Encoding: 57603 57603 4 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 216.516 96.9531<226.177 441.873 832.752 1027.57> 358.547 85.4688<1326.08 1544.91 1647.64 1738.89> 564.016 87.3438<857.168 1024.42> 799.172 98.9062<1514.99 1544.91> 812.609 96.9531<226.122 440.941> +VStem: 53.1094 115.156<375.807 753.111> 694.047 112.344<336.954 531.784> 1054.05 111.406<336.954 531.784> 1544.91 102.734<228 358.547 444.016 799.172> +DStem2: 1233.89 451.672 1326.08 444.016 0.512745 0.858541<40.6955 454.37> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 276.516 96.9531<226.177 441.873 832.752 1027.57> 418.547 85.4688<1326.08 1544.91 1647.64 1738.89> 624.016 87.3438<857.168 1024.42> 859.172 98.9062<1514.99 1544.91> 872.609 96.9531<226.122 440.941> +VStem: 53.1094 115.156<435.807 813.111> 694.047 112.344<396.954 591.784> 1054.05 111.406<396.954 591.784> 1544.91 102.734<288 418.547 504.016 859.172> +DStem2: 1233.89 511.672 1326.08 504.016 0.512745 0.858541<40.6955 454.37> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +334.359375 216.515625 m 0xef80 + 246.703125 216.515625 177.875 246.046875 127.953125 305.265625 c 0 + 78.03125 364.484375 53.109375 450.421875 53.109375 563.078125 c 0 + 53.109375 619.328125 59.515625 668.9375 72.328125 711.828125 c 0 + 85.0625 754.71875 103.65625 790.890625 127.953125 820.34375 c 0 + 152.328125 849.796875 181.859375 871.984375 216.78125 887.0625 c 0 + 251.625 902.0625 290.84375 909.5625 334.359375 909.5625 c 0 + 392.640625 909.5625 441.390625 896.828125 480.765625 871.203125 c 0 + 520.140625 845.578125 551 807.84375 573.421875 757.921875 c 1 + 543.03125 741.28125 512.640625 724.640625 482.25 708 c 1 + 470.6875 740.03125 452.953125 765.421875 428.96875 784.328125 c 0 + 404.90625 803.234375 373.421875 812.609375 334.359375 812.609375 c 0 + 282.5625 812.609375 241.859375 795.03125 212.484375 759.875 c 0 + 183.03125 724.640625 168.265625 675.96875 168.265625 613.9375 c 1 + 168.265625 580.004882812 168.265625 546.073242188 168.265625 512.140625 c 1 + 168.265625 450.109375 183.03125 401.4375 212.484375 366.203125 c 0 + 241.859375 331.046875 282.5625 313.46875 334.359375 313.46875 c 0 + 374.671875 313.46875 407.484375 323.859375 432.796875 344.640625 c 0 + 458.03125 365.421875 476.78125 392.140625 488.96875 424.796875 c 1 + 518.083007812 407.192382812 547.198242188 389.588867188 576.3125 371.984375 c 1 + 553.890625 323.390625 522.5625 285.265625 482.25 257.765625 c 0 + 441.859375 230.265625 392.640625 216.515625 334.359375 216.515625 c 0xef80 +930.21875 216.515625 m 0 + 893.109375 216.515625 859.984375 222.53125 830.84375 234.71875 c 0 + 801.703125 246.90625 777.09375 264.328125 756.9375 287.0625 c 0 + 736.78125 309.796875 721.234375 337.140625 710.375 369.09375 c 0 + 699.515625 401.125 694.046875 437.296875 694.046875 477.609375 c 0 + 694.046875 526.203125 701.390625 571.984375 716.15625 614.875 c 0 + 730.84375 657.765625 749.75 697.140625 772.796875 732.921875 c 0 + 795.84375 768.78125 821.546875 800.65625 850.0625 828.46875 c 0 + 878.5 856.28125 906.546875 879.484375 934.046875 898.078125 c 1 + 982.041992188 898.078125 1030.03613281 898.078125 1078.03125 898.078125 c 1xf780 + 1040.296875 870.578125 1006.390625 844.015625 976.3125 818.390625 c 0 + 946.234375 792.765625 919.984375 766.59375 897.5625 739.71875 c 0 + 875.140625 712.765625 856.46875 684.328125 841.390625 654.25 c 0 + 826.390625 624.171875 814.671875 591.203125 806.390625 555.34375 c 1 + 808.629882812 554.71875 810.870117188 554.09375 813.109375 553.46875 c 1 + 820.140625 566.90625 828.265625 579.484375 837.5625 591.359375 c 0 + 846.859375 603.234375 857.71875 613.625 870.21875 622.53125 c 0 + 882.71875 631.515625 896.9375 638.546875 912.953125 643.703125 c 0 + 928.96875 648.78125 947.484375 651.359375 968.578125 651.359375 c 0 + 996.78125 651.359375 1022.875 646.59375 1046.859375 636.984375 c 0 + 1070.84375 627.375 1091.625 613.46875 1109.28125 595.1875 c 0 + 1126.859375 576.984375 1140.609375 555.03125 1150.53125 529.40625 c 0 + 1160.453125 503.859375 1165.453125 475.34375 1165.453125 444.015625 c 0 + 1165.453125 410.109375 1159.828125 379.171875 1148.578125 351.359375 c 0 + 1137.40625 323.546875 1121.546875 299.71875 1101.078125 279.875 c 0 + 1080.609375 260.03125 1055.84375 244.484375 1026.703125 233.3125 c 0 + 997.5625 222.0625 965.453125 216.515625 930.21875 216.515625 c 0 +930.21875 304.796875 m 256 + 969.28125 304.796875 999.671875 315.1875 1021.390625 335.96875 c 0 + 1043.1875 356.828125 1054.046875 387.375 1054.046875 427.6875 c 1 + 1054.046875 432.166992188 1054.046875 436.645507812 1054.046875 441.125 c 1 + 1054.046875 481.4375 1043.1875 511.984375 1021.390625 532.765625 c 0 + 999.671875 553.625 969.28125 564.015625 930.21875 564.015625 c 256 + 891.15625 564.015625 860.765625 553.625 839.046875 532.765625 c 0 + 817.25 511.984375 806.390625 481.4375 806.390625 441.125 c 1 + 806.390625 436.645507812 806.390625 432.166992188 806.390625 427.6875 c 1 + 806.390625 387.375 817.25 356.828125 839.046875 335.96875 c 0 + 860.765625 315.1875 891.15625 304.796875 930.21875 304.796875 c 256 +1544.90625 228 m 1 + 1544.90625 271.515625 1544.90625 315.03125 1544.90625 358.546875 c 1 + 1441.234375 358.546875 1337.5625 358.546875 1233.890625 358.546875 c 1 + 1233.890625 389.588867188 1233.890625 420.629882812 1233.890625 451.671875 c 1 + 1324.46386719 600.473632812 1415.03613281 749.276367188 1505.609375 898.078125 c 1 + 1552.953125 898.078125 1600.296875 898.078125 1647.640625 898.078125 c 1 + 1647.640625 746.723632812 1647.640625 595.370117188 1647.640625 444.015625 c 1 + 1678.05761719 444.015625 1708.47363281 444.015625 1738.890625 444.015625 c 1 + 1738.890625 415.526367188 1738.890625 387.036132812 1738.890625 358.546875 c 1 + 1708.47363281 358.546875 1678.05761719 358.546875 1647.640625 358.546875 c 1 + 1647.640625 315.03125 1647.640625 271.515625 1647.640625 228 c 1 + 1613.39550781 228 1579.15136719 228 1544.90625 228 c 1 +1326.078125 444.015625 m 1 + 1399.02050781 444.015625 1471.96386719 444.015625 1544.90625 444.015625 c 1 + 1544.90625 562.401367188 1544.90625 680.786132812 1544.90625 799.171875 c 1 + 1542.66699219 799.171875 1540.42675781 799.171875 1538.1875 799.171875 c 1 + 1467.484375 680.786132812 1396.78125 562.401367188 1326.078125 444.015625 c 1 +EndSplineSet +EndChar + +StartChar: uniE104 +Encoding: 57604 57604 5 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: -202.516 96.0156<1128.27 1400.92> 64.359 95.0781<488.266 724.653> 372.562 95<488.266 724.653> 652.016 95.9375<411.817 637.602> 1249.12 95.9375<437.386 655.798> +VStem: 305.922 107.5<1091.89 1228.18> 379.828 108.438<-202.516 64.359 159.438 372.562> 665.922 107.5<775.065 922.258> 748.422 114.297<181.678 350.243> 889.906 103.672<663.5 1176.16> 1019.83 108.438<-106.5 467.562> 1402.56 103.672<663.5 1176.16> +DStem2: 519.984 1064.75 501.703 962.09 0.978916 -0.204262<-84.378 149.631> 1018.5 1333.58 998.344 1176.16 0.468722 -0.883346<129.61 385.178> 1203.81 992.8 1344.91 1067.64 0.468722 0.883346<0 252.858> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: -142.516 96.0156<1128.27 1400.92> 124.359 95.0781<488.266 724.653> 432.562 95<488.266 724.653> 712.016 95.9375<411.817 637.602> 1309.12 95.9375<437.386 655.798> +VStem: 305.922 107.5<1151.89 1288.18> 379.828 108.438<-142.516 124.359 219.438 432.562> 665.922 107.5<835.065 982.258> 748.422 114.297<241.678 410.243> 889.906 103.672<723.5 1236.16> 1019.83 108.438<-46.5 527.562> 1402.56 103.672<723.5 1236.16> +DStem2: 519.984 1124.75 501.703 1022.09 0.978916 -0.204262<-84.378 149.631> 1018.5 1393.58 998.344 1236.16 0.468722 -0.883346<129.61 385.178> 1203.81 1052.8 1344.91 1127.64 0.468722 0.883346<0 252.858> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +379.828125 -202.515625 m 1xfaf0 + 379.828125 -184.07421875 l 4 + 379.828125 467.5625 l 1 + 475.817382812 467.5625 571.807617188 467.5625 667.796875 467.5625 c 1 + 729.90625 467.5625 777.875 449.359375 811.78125 412.875 c 0 + 845.765625 376.390625 862.71875 327.40625 862.71875 266 c 256 + 862.71875 204.515625 845.765625 155.53125 811.78125 119.046875 c 0 + 777.875 82.640625 729.90625 64.359375 667.796875 64.359375 c 1 + 607.953125 64.359375 548.109375 64.359375 488.265625 64.359375 c 1 + 488.265625 -24.599609375 488.265625 -113.557617188 488.265625 -202.515625 c 1 + 452.120117188 -202.515625 415.973632812 -202.515625 379.828125 -202.515625 c 1xfaf0 +488.265625 159.4375 m 1 + 545.870117188 159.4375 603.473632812 159.4375 661.078125 159.4375 c 1 + 688.578125 159.4375 710.0625 166.625 725.375 181 c 0 + 740.765625 195.375 748.421875 216.078125 748.421875 242.953125 c 1 + 748.421875 258.291015625 748.421875 273.629882812 748.421875 288.96875 c 1 + 748.421875 315.921875 740.765625 336.546875 725.375 350.921875 c 0 + 710.0625 365.296875 688.578125 372.5625 661.078125 372.5625 c 1 + 603.473632812 372.5625 545.870117188 372.5625 488.265625 372.5625 c 1 + 488.265625 301.520507812 488.265625 230.478515625 488.265625 159.4375 c 1 +1019.828125 -202.515625 m 1 + 1019.828125 20.84375 1019.828125 244.203125 1019.828125 467.5625 c 1 + 1055.97363281 467.5625 1092.12011719 467.5625 1128.265625 467.5625 c 1 + 1128.265625 276.208007812 1128.265625 84.853515625 1128.265625 -106.5 c 1 + 1219.15136719 -106.5 1310.03613281 -106.5 1400.921875 -106.5 c 1 + 1400.921875 -138.505859375 1400.921875 -170.510742188 1400.921875 -202.515625 c 1 + 1273.890625 -202.515625 1146.859375 -202.515625 1019.828125 -202.515625 c 1 +530.53125 652.015625 m 0 + 474.203125 652.015625 426.390625 662.249023438 387.015625 682.71875 c 0 + 347.640625 703.1875 313.890625 730.6875 285.765625 765.296875 c 1 + 310.713867188 788.65625 335.661132812 812.015625 360.609375 835.375 c 1 + 384.28125 806.546875 410.375 784.75 438.8125 770.0625 c 0 + 467.328125 755.375 499.828125 747.953125 536.3125 747.953125 c 0 + 579.203125 747.953125 611.46875 757.5625 633.265625 776.78125 c 0 + 654.984375 796 665.921875 821.9375 665.921875 854.515625 c 0 + 665.921875 880.765625 658.1875 901.546875 642.875 916.9375 c 0 + 627.484375 932.328125 600.296875 943.8125 561.234375 951.46875 c 1 + 541.390625 955.009765625 521.546875 958.551757812 501.703125 962.09375 c 1 + 436.46875 974.203125 387.484375 995.6875 354.828125 1026.390625 c 0 + 322.171875 1057.09375 305.921875 1099.359375 305.921875 1153.109375 c 0 + 305.921875 1182.5625 311.46875 1209.28125 322.71875 1233.265625 c 0 + 333.890625 1257.25 349.59375 1277.40625 369.75 1293.734375 c 0 + 389.90625 1310.0625 414.359375 1322.71875 443.1875 1331.625 c 0 + 471.9375 1340.609375 504.28125 1345.0625 540.140625 1345.0625 c 0 + 590.6875 1345.0625 634.515625 1336.3125 671.625 1318.734375 c 0 + 708.734375 1301.078125 740.453125 1275.6875 766.703125 1242.40625 c 1 + 741.416992188 1220.00976562 716.129882812 1197.61425781 690.84375 1175.21875 c 1 + 673.578125 1197.5625 652.484375 1215.53125 627.484375 1228.96875 c 0 + 602.5625 1242.40625 571.46875 1249.125 534.359375 1249.125 c 0 + 496 1249.125 466.234375 1241.390625 445.0625 1226.078125 c 0 + 423.96875 1210.6875 413.421875 1188.265625 413.421875 1158.890625 c 0 + 413.421875 1130.6875 422.015625 1109.75 439.359375 1096 c 0 + 456.625 1082.25 483.5 1071.78125 519.984375 1064.75 c 1 + 539.828125 1060.609375 559.671875 1056.46875 579.515625 1052.328125 c 1 + 646.703125 1039.515625 695.84375 1017.71875 726.859375 987.015625 c 0 + 757.875 956.3125 773.421875 914.046875 773.421875 860.296875 c 0xfd70 + 773.421875 828.96875 767.953125 800.453125 757.09375 774.828125 c 0 + 746.234375 749.28125 730.375 727.328125 709.59375 709.125 c 0 + 688.734375 690.84375 663.34375 676.78125 633.265625 666.859375 c 0 + 603.1875 656.936523438 568.890625 652.015625 530.53125 652.015625 c 0 +1402.5625 1176.15625 m 1 + 1400.94824219 1176.15625 1399.33300781 1176.15625 1397.71875 1176.15625 c 1 + 1380.11425781 1139.984375 1362.51074219 1103.8125 1344.90625 1067.640625 c 1 + 1295.94824219 978.369140625 1246.98925781 889.098632812 1198.03125 799.828125 c 1 + 1149.07324219 889.098632812 1100.11425781 978.369140625 1051.15625 1067.640625 c 1 + 1033.55175781 1103.8125 1015.94824219 1139.984375 998.34375 1176.15625 c 1 + 996.754882812 1176.15625 995.166992188 1176.15625 993.578125 1176.15625 c 1 + 993.578125 1005.27050781 993.578125 834.384765625 993.578125 663.5 c 1 + 959.020507812 663.5 924.463867188 663.5 889.90625 663.5 c 1 + 889.90625 886.859375 889.90625 1110.21875 889.90625 1333.578125 c 1 + 932.770507812 1333.578125 975.635742188 1333.578125 1018.5 1333.578125 c 1 + 1078.34375 1219.984375 1138.1875 1106.390625 1198.03125 992.796875 c 1 + 1199.95800781 992.796875 1201.88574219 992.796875 1203.8125 992.796875 c 1 + 1263.65625 1106.390625 1323.5 1219.984375 1383.34375 1333.578125 c 1 + 1424.30761719 1333.578125 1465.27050781 1333.578125 1506.234375 1333.578125 c 1 + 1506.234375 1110.21875 1506.234375 886.859375 1506.234375 663.5 c 1 + 1471.67675781 663.5 1437.12011719 663.5 1402.5625 663.5 c 1 + 1402.5625 834.384765625 1402.5625 1005.27050781 1402.5625 1176.15625 c 1 +EndSplineSet +EndChar + +StartChar: uniE105 +Encoding: 57605 57605 6 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 228 96.0156<814.669 1050.52 1429.91 1750.53> 494.875 95.0781<149.906 386.215> 519.875 95.9375<1429.91 1720.84> 802.062 96.0156<149.906 386.215 813.763 1048.56 1429.91 1750.53> +VStem: 41.4688 108.438<228 494.875 589.953 803.078> 410.062 114.219<612.194 780.759> 651.625 115.156<375.807 753.111> 1321.47 108.438<324.016 519.875 615.812 802.062> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 288 96.0156<814.669 1050.52 1429.91 1750.53> 554.875 95.0781<149.906 386.215> 579.875 95.9375<1429.91 1720.84> 862.062 96.0156<149.906 386.215 813.763 1048.56 1429.91 1750.53> +VStem: 41.4688 108.438<288 554.875 649.953 863.078> 410.062 114.219<672.194 840.759> 651.625 115.156<435.807 813.111> 1321.47 108.438<384.016 579.875 675.812 862.062> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +41.46875 228 m 1xdf + 41.46875 451.359375 41.46875 674.71875 41.46875 898.078125 c 1 + 137.458007812 898.078125 233.448242188 898.078125 329.4375 898.078125 c 1 + 391.46875 898.078125 439.4375 879.875 473.34375 843.390625 c 0 + 507.40625 806.90625 524.28125 757.921875 524.28125 696.515625 c 256 + 524.28125 635.03125 507.40625 586.046875 473.34375 549.5625 c 0 + 439.4375 513.15625 391.46875 494.875 329.4375 494.875 c 1 + 269.59375 494.875 209.75 494.875 149.90625 494.875 c 1 + 149.90625 405.916992188 149.90625 316.958007812 149.90625 228 c 1 + 113.760742188 228 77.6142578125 228 41.46875 228 c 1xdf +149.90625 589.953125 m 1 + 207.510742188 589.953125 265.114257812 589.953125 322.71875 589.953125 c 1 + 350.21875 589.953125 371.625 597.140625 386.9375 611.515625 c 0 + 402.40625 625.890625 410.0625 646.59375 410.0625 673.46875 c 1 + 410.0625 688.807617188 410.0625 704.145507812 410.0625 719.484375 c 1 + 410.0625 746.4375 402.40625 767.0625 386.9375 781.4375 c 0 + 371.625 795.8125 350.21875 803.078125 322.71875 803.078125 c 1 + 265.114257812 803.078125 207.510742188 803.078125 149.90625 803.078125 c 1 + 149.90625 732.036132812 149.90625 660.995117188 149.90625 589.953125 c 1 +932.875 216.515625 m 0 + 845.21875 216.515625 776.46875 246.046875 726.46875 305.265625 c 0 + 676.625 364.484375 651.625 450.421875 651.625 563.078125 c 0 + 651.625 619.328125 658.03125 668.9375 670.84375 711.828125 c 0 + 683.65625 754.71875 702.25 790.890625 726.46875 820.34375 c 0 + 750.84375 849.796875 780.375 871.984375 815.375 887.0625 c 0 + 850.21875 902.0625 889.4375 909.5625 932.875 909.5625 c 0 + 991.15625 909.5625 1039.90625 896.828125 1079.28125 871.203125 c 0 + 1118.65625 845.578125 1149.59375 807.84375 1171.9375 757.921875 c 1 + 1141.57324219 741.28125 1111.20800781 724.640625 1080.84375 708 c 1 + 1069.28125 740.03125 1051.46875 765.421875 1027.5625 784.328125 c 0 + 1003.5 803.234375 971.9375 812.609375 932.875 812.609375 c 0 + 881.15625 812.609375 840.375 795.03125 811 759.875 c 0 + 781.625 724.640625 766.78125 675.96875 766.78125 613.9375 c 1 + 766.78125 580.004882812 766.78125 546.073242188 766.78125 512.140625 c 1 + 766.78125 450.109375 781.625 401.4375 811 366.203125 c 0 + 840.375 331.046875 881.15625 313.46875 932.875 313.46875 c 0 + 973.1875 313.46875 1006 323.859375 1031.3125 344.640625 c 0 + 1056.625 365.421875 1075.375 392.140625 1087.5625 424.796875 c 1 + 1116.67675781 407.192382812 1145.79199219 389.588867188 1174.90625 371.984375 c 1 + 1152.40625 323.390625 1121.15625 285.265625 1080.84375 257.765625 c 0 + 1040.375 230.265625 991.15625 216.515625 932.875 216.515625 c 0 +1321.46875 228 m 1 + 1321.46875 451.359375 1321.46875 674.71875 1321.46875 898.078125 c 1 + 1464.48925781 898.078125 1607.51074219 898.078125 1750.53125 898.078125 c 1 + 1750.53125 866.073242188 1750.53125 834.067382812 1750.53125 802.0625 c 1 + 1643.65625 802.0625 1536.78125 802.0625 1429.90625 802.0625 c 1 + 1429.90625 739.979492188 1429.90625 677.895507812 1429.90625 615.8125 c 1 + 1526.88574219 615.8125 1623.86425781 615.8125 1720.84375 615.8125 c 1 + 1720.84375 583.833007812 1720.84375 551.854492188 1720.84375 519.875 c 1 + 1623.86425781 519.875 1526.88574219 519.875 1429.90625 519.875 c 1xbf + 1429.90625 454.588867188 1429.90625 389.301757812 1429.90625 324.015625 c 1 + 1536.78125 324.015625 1643.65625 324.015625 1750.53125 324.015625 c 1 + 1750.53125 292.010742188 1750.53125 260.004882812 1750.53125 228 c 1 + 1607.51074219 228 1464.48925781 228 1321.46875 228 c 1 +EndSplineSet +EndChar + +StartChar: uniE106 +Encoding: 57606 57606 7 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 370.958 116.406<389.164 636.43> 856.993 124.805<499.082 527.573> +VStem: 145.609 137.891<144.2 282.091> 745.609 141.602<144.2 285.802> 1220.41 135.547<144.2 537.633> +DStem2: 145.609 144.2 283.5 144.2 0.303392 0.952866<41.8349 280.126 400.882 789.887> 601.664 981.8 516.312 856.993 0.306233 -0.951957<92.6712 481.326> 1087.21 981.8 932.328 981.8 0.479431 -0.877579<0 425.309> 1294.83 608.556 1355.96 476.622 0.477305 0.878738<0 424.748> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 430.958 116.406<389.164 636.43> 916.993 124.805<499.082 527.573> +VStem: 145.609 137.891<204.2 342.091> 745.609 141.602<204.2 345.802> 1220.41 135.547<204.2 597.633> +DStem2: 145.609 204.2 283.5 204.2 0.303392 0.952866<41.8349 280.126 400.882 789.887> 601.664 1041.8 516.312 916.993 0.306233 -0.951957<92.6712 481.326> 1087.21 1041.8 932.328 1041.8 0.479431 -0.877579<0 425.309> 1294.83 668.556 1355.96 536.622 0.477305 0.878738<0 424.748> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +745.609375 144.200195312 m 1 + 720.4140625 219.786132812 695.21875 295.372070312 670.0234375 370.958007812 c 1 + 565.596679688 370.958007812 461.168945312 370.958007812 356.7421875 370.958007812 c 1 + 332.328125 295.372070312 307.9140625 219.786132812 283.5 144.200195312 c 1 + 237.536132812 144.200195312 191.573242188 144.200195312 145.609375 144.200195312 c 1 + 240.791992188 423.399414062 335.973632812 702.598632812 431.15625 981.797851562 c 1 + 487.9921875 981.797851562 544.828125 981.797851562 601.6640625 981.797851562 c 1 + 696.846679688 702.598632812 792.028320312 423.399414062 887.2109375 144.200195312 c 1 + 840.010742188 144.200195312 792.809570312 144.200195312 745.609375 144.200195312 c 1 +516.3125 856.993164062 m 1 + 514.359375 856.993164062 512.40625 856.993164062 510.453125 856.993164062 c 1 + 470.0234375 733.783203125 429.59375 610.573242188 389.1640625 487.364257812 c 1 + 471.5859375 487.364257812 554.0078125 487.364257812 636.4296875 487.364257812 c 1 + 596.390625 610.573242188 556.3515625 733.783203125 516.3125 856.993164062 c 1 +1220.4140625 144.200195312 m 1 + 1220.4140625 254.193359375 1220.4140625 364.186523438 1220.4140625 474.180664062 c 1 + 1124.38574219 643.385742188 1028.35644531 812.591796875 932.328125 981.797851562 c 1 + 983.956054688 981.797851562 1035.58300781 981.797851562 1087.2109375 981.797851562 c 1 + 1155.1796875 857.383789062 1223.1484375 732.969726562 1291.1171875 608.555664062 c 1 + 1292.35449219 608.555664062 1293.59082031 608.555664062 1294.828125 608.555664062 c 1 + 1362.40625 732.969726562 1429.984375 857.383789062 1497.5625 981.797851562 c 1 + 1547.171875 981.797851562 1596.78125 981.797851562 1646.390625 981.797851562 c 1 + 1549.58105469 813.405273438 1452.77050781 645.013671875 1355.9609375 476.622070312 c 1 + 1355.9609375 365.814453125 1355.9609375 255.006835938 1355.9609375 144.200195312 c 1 + 1310.77832031 144.200195312 1265.59667969 144.200195312 1220.4140625 144.200195312 c 1 +EndSplineSet +EndChar + +StartChar: uniE107 +Encoding: 57607 57607 8 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: -208.33 91.1719<486.344 688.342 1095.48 1270.78> 105.576 92.1094<518.508 677.882> 393.545 91.1719<497.902 685.553 1095.48 1270.78> 657.686 87.3438<530.171 727.317> 915.889 87.3438<1092.63 1259.92> 975.42 83.5156<544.742 712.82> 1263.39 87.3438<537.628 719.903 1093.28 1280.94> +VStem: 388.742 113.281<773.719 946.73> 408.898 105.625<1083.68 1238.65> 708.586 114.219<224.923 368.321> 722.023 112.344<-86.9403 77.853> 743.039 105.547<1083.68 1238.65> 755.461 113.281<773.719 946.73> 940.305 115.156<-76.3001 352.598 1036.11 1229.56> 1310.85 115.156<-77.1032 353.491 1035.46 1230.29> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: -148.33 91.1719<486.344 688.342 1095.48 1270.78> 165.576 92.1094<518.508 677.882> 453.545 91.1719<497.902 685.553 1095.48 1270.78> 717.686 87.3438<530.171 727.317> 975.889 87.3438<1092.63 1259.92> 1035.42 83.5156<544.742 712.82> 1323.39 87.3438<537.628 719.903 1093.28 1280.94> +VStem: 388.742 113.281<833.719 1006.73> 408.898 105.625<1143.68 1298.65> 708.586 114.219<284.923 428.321> 722.023 112.344<-26.9403 137.853> 743.039 105.547<1143.68 1298.65> 755.461 113.281<833.719 1006.73> 940.305 115.156<-16.3001 412.598 1096.11 1289.56> 1310.85 115.156<-17.1032 413.491 1095.46 1290.29> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +586.6328125 197.685546875 m 1xf226 + 628.2734375 197.685546875 658.9765625 206.513671875 678.8203125 224.091796875 c 0 + 698.6640625 241.748046875 708.5859375 264.248046875 708.5859375 291.826171875 c 1 + 708.5859375 294.065429688 708.5859375 296.305664062 708.5859375 298.544921875 c 1 + 708.5859375 329.248046875 698.9765625 352.763671875 679.7578125 369.091796875 c 0 + 660.6171875 385.419921875 634.6796875 393.544921875 602.0234375 393.544921875 c 0 + 569.9921875 393.544921875 542.8046875 386.357421875 520.4609375 371.982421875 c 0 + 498.0390625 357.529296875 479.1328125 337.529296875 463.8203125 311.982421875 c 1 + 439.809570312 332.763671875 415.799804688 353.544921875 391.7890625 374.326171875 c 1 + 402.0234375 389.091796875 413.5859375 403.154296875 426.3203125 416.591796875 c 0 + 439.1328125 430.029296875 454.2109375 441.748046875 471.4765625 451.669921875 c 0 + 488.7421875 461.591796875 508.2734375 469.560546875 529.9921875 475.654296875 c 0 + 551.7890625 481.748046875 576.7109375 484.716796875 604.9140625 484.716796875 c 0 + 636.2421875 484.716796875 665.3828125 480.888671875 692.2578125 473.232421875 c 0 + 719.1328125 465.576171875 742.1796875 454.169921875 761.3984375 439.169921875 c 0 + 780.6171875 424.091796875 795.6171875 405.888671875 806.4765625 384.404296875 c 0 + 817.4140625 362.998046875 822.8046875 338.857421875 822.8046875 311.982421875 c 0xf246 + 822.8046875 290.810546875 819.4453125 271.669921875 812.7265625 254.326171875 c 0 + 806.0078125 237.060546875 796.7109375 221.904296875 784.9140625 208.779296875 c 0 + 773.0390625 195.654296875 759.2890625 184.951171875 743.6640625 176.591796875 c 0 + 727.9609375 168.310546875 711.4765625 162.216796875 694.2109375 158.388671875 c 1 + 694.2109375 156.774414062 694.2109375 155.159179688 694.2109375 153.544921875 c 1 + 713.3515625 149.716796875 731.4765625 143.466796875 748.4296875 134.873046875 c 0 + 765.3828125 126.201171875 780.3046875 115.029296875 793.0390625 101.201171875 c 0 + 805.8515625 87.451171875 815.9296875 71.123046875 823.2734375 52.294921875 c 0 + 830.6953125 33.388671875 834.3671875 11.826171875 834.3671875 -12.548828125 c 0 + 834.3671875 -42.001953125 828.5859375 -68.720703125 817.1015625 -92.705078125 c 0 + 805.5390625 -116.689453125 789.3671875 -137.314453125 768.5859375 -154.580078125 c 0 + 747.8046875 -171.923828125 722.6484375 -185.126953125 693.1953125 -194.423828125 c 0 + 663.8203125 -203.720703125 631.1640625 -208.330078125 595.3046875 -208.330078125 c 0 + 563.9765625 -208.330078125 536.3984375 -204.970703125 512.7265625 -198.251953125 c 0 + 489.0546875 -191.533203125 468.1171875 -182.626953125 449.8359375 -171.376953125 c 0 + 431.6328125 -160.205078125 415.6171875 -147.392578125 401.8671875 -133.017578125 c 0 + 388.1171875 -118.642578125 376.0859375 -103.720703125 365.8515625 -88.330078125 c 1 + 392.4140625 -67.548828125 418.9765625 -46.767578125 445.5390625 -25.986328125 c 1 + 453.8984375 -39.423828125 462.6484375 -51.689453125 471.9453125 -62.939453125 c 0 + 481.2421875 -74.111328125 491.7890625 -83.720703125 503.6640625 -91.689453125 c 0 + 515.4609375 -99.736328125 528.8984375 -105.986328125 543.9765625 -110.439453125 c 0 + 558.9765625 -114.892578125 576.0859375 -117.158203125 595.3046875 -117.158203125 c 0 + 636.2421875 -117.158203125 667.6484375 -107.392578125 689.3671875 -87.861328125 c 0 + 711.1640625 -68.330078125 722.0234375 -41.298828125 722.0234375 -6.767578125 c 1 + 722.0234375 -4.5283203125 722.0234375 -2.2880859375 722.0234375 -0.048828125 c 1 + 722.0234375 34.482421875 710.5390625 60.732421875 687.4921875 78.701171875 c 0 + 664.4453125 96.591796875 631.7890625 105.576171875 589.5234375 105.576171875 c 1 + 565.8515625 105.576171875 542.1796875 105.576171875 518.5078125 105.576171875 c 1 + 518.5078125 136.279296875 518.5078125 166.982421875 518.5078125 197.685546875 c 1 + 541.215820312 197.685546875 563.924804688 197.685546875 586.6328125 197.685546875 c 1xf226 +1183.1171875 -208.330078125 m 0 + 1141.5546875 -208.330078125 1105.3828125 -200.517578125 1074.6796875 -184.814453125 c 0 + 1043.9765625 -169.189453125 1018.6640625 -146.611328125 998.8203125 -117.158203125 c 0 + 978.9765625 -87.705078125 964.2890625 -51.533203125 954.6796875 -8.720703125 c 0 + 945.0703125 34.169921875 940.3046875 83.154296875 940.3046875 138.232421875 c 0 + 940.3046875 192.607421875 945.0703125 241.357421875 954.6796875 284.560546875 c 0 + 964.2890625 327.763671875 978.9765625 364.091796875 998.8203125 393.544921875 c 0 + 1018.6640625 422.998046875 1043.9765625 445.576171875 1074.6796875 461.201171875 c 0 + 1105.3828125 476.904296875 1141.5546875 484.716796875 1183.1171875 484.716796875 c 0 + 1266.3203125 484.716796875 1327.6484375 454.326171875 1367.0234375 393.544921875 c 0 + 1406.3203125 332.763671875 1426.0078125 247.607421875 1426.0078125 138.232421875 c 256 + 1426.0078125 28.779296875 1406.3203125 -56.376953125 1367.0234375 -117.158203125 c 0 + 1327.6484375 -177.939453125 1266.3203125 -208.330078125 1183.1171875 -208.330078125 c 0 +1183.1171875 -116.220703125 m 256 + 1206.1640625 -116.220703125 1225.8515625 -111.533203125 1242.1796875 -102.314453125 c 0 + 1258.5078125 -93.017578125 1271.7890625 -79.736328125 1282.0234375 -62.470703125 c 0 + 1292.2578125 -45.126953125 1299.6015625 -24.501953125 1304.1328125 -0.517578125 c 0 + 1308.5859375 23.466796875 1310.8515625 50.185546875 1310.8515625 79.638671875 c 1 + 1310.8515625 118.674804688 1310.8515625 157.711914062 1310.8515625 196.748046875 c 1 + 1310.8515625 226.201171875 1308.5859375 252.919921875 1304.1328125 276.904296875 c 0 + 1299.6015625 300.888671875 1292.2578125 321.591796875 1282.0234375 338.857421875 c 0 + 1271.7890625 356.123046875 1258.5078125 369.404296875 1242.1796875 378.701171875 c 0 + 1225.8515625 387.919921875 1206.1640625 392.607421875 1183.1171875 392.607421875 c 256 + 1160.0703125 392.607421875 1140.4609375 387.919921875 1124.1328125 378.701171875 c 0 + 1107.8046875 369.404296875 1094.5234375 356.123046875 1084.2890625 338.857421875 c 0 + 1074.0546875 321.591796875 1066.6328125 300.888671875 1062.1796875 276.904296875 c 0 + 1057.7265625 252.919921875 1055.4609375 226.201171875 1055.4609375 196.748046875 c 1 + 1055.4609375 157.711914062 1055.4609375 118.674804688 1055.4609375 79.638671875 c 1 + 1055.4609375 50.185546875 1057.7265625 23.466796875 1062.1796875 -0.517578125 c 0 + 1066.6328125 -24.501953125 1074.0546875 -45.126953125 1084.2890625 -62.470703125 c 0 + 1094.5234375 -79.736328125 1107.8046875 -93.017578125 1124.1328125 -102.314453125 c 0 + 1140.4609375 -111.533203125 1160.0703125 -116.220703125 1183.1171875 -116.220703125 c 256 +628.7421875 657.685546875 m 256 + 589.7578125 657.685546875 555.3046875 662.607421875 525.5390625 672.529296875 c 0 + 495.8515625 682.451171875 470.8515625 696.044921875 450.6953125 713.310546875 c 0 + 430.5390625 730.576171875 415.1484375 751.123046875 404.6015625 774.794921875 c 0 + 394.0546875 798.466796875 388.7421875 824.013671875 388.7421875 851.591796875 c 0xf30e + 388.7421875 896.357421875 401.0859375 932.373046875 425.6953125 959.560546875 c 0 + 450.3828125 986.748046875 482.8828125 1005.81054688 523.1953125 1016.66992188 c 1 + 523.1953125 1019.24804688 523.1953125 1021.82617188 523.1953125 1024.40429688 c 1 + 488.5859375 1036.51367188 460.9296875 1055.73242188 440.1484375 1081.98242188 c 0 + 419.3671875 1108.23242188 408.8984375 1140.49804688 408.8984375 1178.93554688 c 0 + 408.8984375 1204.56054688 413.8984375 1227.91992188 423.8203125 1249.01367188 c 0 + 433.7421875 1270.10742188 447.9609375 1288.23242188 466.5546875 1303.23242188 c 0 + 485.0703125 1318.31054688 508.1171875 1329.95117188 535.6171875 1338.31054688 c 0 + 563.1953125 1346.59179688 594.2109375 1350.73242188 628.7421875 1350.73242188 c 256 + 663.3515625 1350.73242188 694.3671875 1346.59179688 721.8671875 1338.31054688 c 0 + 749.4453125 1329.95117188 772.4921875 1318.31054688 791.0078125 1303.23242188 c 0 + 809.6015625 1288.23242188 823.8203125 1270.10742188 833.7421875 1249.01367188 c 0 + 843.6640625 1227.91992188 848.5859375 1204.56054688 848.5859375 1178.93554688 c 0xf296 + 848.5859375 1140.49804688 838.1953125 1108.23242188 817.4140625 1081.98242188 c 0 + 796.6328125 1055.73242188 768.8984375 1036.51367188 734.3671875 1024.40429688 c 1 + 734.3671875 1021.82617188 734.3671875 1019.24804688 734.3671875 1016.66992188 c 1 + 774.6796875 1005.81054688 807.1796875 986.748046875 831.7890625 959.560546875 c 0 + 856.4765625 932.373046875 868.7421875 896.357421875 868.7421875 851.591796875 c 0xf20e + 868.7421875 824.013671875 863.5078125 798.466796875 852.9609375 774.794921875 c 0 + 842.3359375 751.123046875 827.0234375 730.576171875 806.8671875 713.310546875 c 0 + 786.7109375 696.044921875 761.7109375 682.451171875 731.9453125 672.529296875 c 0 + 702.1796875 662.607421875 667.8046875 657.685546875 628.7421875 657.685546875 c 256 +628.7421875 745.029296875 m 256 + 669.0546875 745.029296875 700.3046875 754.326171875 722.3359375 772.841796875 c 0 + 744.4453125 791.435546875 755.4609375 817.294921875 755.4609375 850.576171875 c 1 + 755.4609375 856.982421875 755.4609375 863.388671875 755.4609375 869.794921875 c 1 + 755.4609375 903.076171875 744.4453125 929.013671875 722.3359375 947.607421875 c 0 + 700.3046875 966.123046875 669.0546875 975.419921875 628.7421875 975.419921875 c 256xf70e + 588.4296875 975.419921875 557.2578125 966.123046875 535.1484375 947.607421875 c 0 + 513.1171875 929.013671875 502.0234375 903.076171875 502.0234375 869.794921875 c 1 + 502.0234375 863.388671875 502.0234375 856.982421875 502.0234375 850.576171875 c 1 + 502.0234375 817.294921875 513.1171875 791.435546875 535.1484375 772.841796875 c 0 + 557.2578125 754.326171875 588.4296875 745.029296875 628.7421875 745.029296875 c 256 +628.7421875 1058.93554688 m 256 + 665.9296875 1058.93554688 694.2109375 1066.90429688 713.7421875 1082.91992188 c 0 + 733.2734375 1098.93554688 743.0390625 1122.29492188 743.0390625 1152.99804688 c 1 + 743.0390625 1158.44042969 743.0390625 1163.88378906 743.0390625 1169.32617188 c 1 + 743.0390625 1200.02929688 733.2734375 1223.38867188 713.7421875 1239.40429688 c 0 + 694.2109375 1255.41992188 665.9296875 1263.38867188 628.7421875 1263.38867188 c 256 + 591.6328125 1263.38867188 563.3515625 1255.41992188 543.8203125 1239.40429688 c 0 + 524.2890625 1223.38867188 514.5234375 1200.02929688 514.5234375 1169.32617188 c 1 + 514.5234375 1163.88378906 514.5234375 1158.44042969 514.5234375 1152.99804688 c 1xf696 + 514.5234375 1122.29492188 524.2890625 1098.93554688 543.8203125 1082.91992188 c 0 + 563.3515625 1066.90429688 591.6328125 1058.93554688 628.7421875 1058.93554688 c 256 +1423.0390625 1089.63867188 m 0 + 1423.0390625 1041.04492188 1415.6171875 995.263671875 1400.9296875 952.373046875 c 0 + 1386.2421875 909.482421875 1367.3359375 870.107421875 1344.2890625 834.326171875 c 0 + 1321.2421875 798.466796875 1295.4609375 766.435546875 1267.0234375 738.310546875 c 0 + 1238.5078125 710.107421875 1210.5390625 687.060546875 1183.0390625 669.169921875 c 1 + 1135.01855469 669.169921875 1086.99707031 669.169921875 1038.9765625 669.169921875 c 1 + 1076.7890625 696.669921875 1110.6953125 723.232421875 1140.7734375 748.857421875 c 0 + 1170.8515625 774.482421875 1197.1015625 800.654296875 1219.5234375 827.607421875 c 0 + 1241.8671875 854.482421875 1260.6171875 882.919921875 1275.6171875 912.998046875 c 0 + 1290.6953125 943.076171875 1302.3359375 976.044921875 1310.6953125 1011.90429688 c 1 + 1308.45605469 1012.52929688 1306.21582031 1013.15429688 1303.9765625 1013.77929688 c 1 + 1296.9453125 1000.34179688 1288.7421875 987.763671875 1279.5234375 975.888671875 c 0 + 1270.2265625 964.013671875 1259.3671875 953.623046875 1246.8671875 944.716796875 c 0 + 1234.3671875 935.732421875 1220.1484375 928.701171875 1204.1328125 923.544921875 c 0 + 1188.1171875 918.466796875 1169.6015625 915.888671875 1148.4296875 915.888671875 c 0xfa06 + 1120.3046875 915.888671875 1094.2109375 920.654296875 1070.2265625 930.263671875 c 0 + 1046.2421875 939.873046875 1025.3828125 953.779296875 1007.8046875 972.060546875 c 0 + 990.2265625 990.263671875 976.4765625 1012.06054688 966.5546875 1037.29492188 c 0 + 956.6328125 1062.60742188 951.6328125 1091.27929688 951.6328125 1123.23242188 c 0 + 951.6328125 1156.51367188 957.2578125 1187.21679688 968.4296875 1215.41992188 c 0 + 979.6796875 1243.54492188 995.4609375 1267.60742188 1016.0078125 1287.37304688 c 0 + 1036.4765625 1307.21679688 1061.0859375 1322.76367188 1089.9140625 1333.93554688 c 0 + 1118.6640625 1345.18554688 1151.0078125 1350.73242188 1186.8671875 1350.73242188 c 0 + 1223.9765625 1350.73242188 1257.1015625 1344.71679688 1286.2421875 1332.52929688 c 0 + 1315.3046875 1320.34179688 1339.9921875 1302.91992188 1360.1484375 1280.18554688 c 0 + 1380.3046875 1257.45117188 1395.8515625 1230.10742188 1406.7109375 1198.15429688 c 0 + 1417.5703125 1166.12304688 1423.0390625 1129.95117188 1423.0390625 1089.63867188 c 0 +1186.8671875 1003.23242188 m 256 + 1225.9296875 1003.23242188 1256.3203125 1013.62304688 1278.0390625 1034.48242188 c 0 + 1299.8359375 1055.26367188 1310.6953125 1085.81054688 1310.6953125 1126.12304688 c 1 + 1310.6953125 1130.60253906 1310.6953125 1135.08105469 1310.6953125 1139.56054688 c 1 + 1310.6953125 1179.87304688 1299.8359375 1210.41992188 1278.0390625 1231.27929688 c 0 + 1256.3203125 1252.06054688 1225.9296875 1262.45117188 1186.8671875 1262.45117188 c 256 + 1147.8046875 1262.45117188 1117.4140625 1252.06054688 1095.6171875 1231.27929688 c 0 + 1073.8984375 1210.41992188 1063.0390625 1179.87304688 1063.0390625 1139.56054688 c 1 + 1063.0390625 1135.08105469 1063.0390625 1130.60253906 1063.0390625 1126.12304688 c 1 + 1063.0390625 1085.81054688 1073.8984375 1055.26367188 1095.6171875 1034.48242188 c 0 + 1117.4140625 1013.62304688 1147.8046875 1003.23242188 1186.8671875 1003.23242188 c 256 +EndSplineSet +EndChar + +StartChar: uniE108 +Encoding: 57608 57608 9 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 228 88.2812<711 802.25 910.688 1002.88> 409.406 93.125<1273.34 1471> 802.062 96.0156<120.375 320.062 428.5 628.188 711 802.25 910.688 1002.88 1359.62 1385.56> +VStem: 320.062 108.438<228 802.062> 711 291.875<228 316.281 809.797 898.078> 1078.34 110.469<228 338.469> 1558.34 113.281<228 341.281> +DStem2: 1078.34 228 1188.81 228 0.303155 0.952941<33.4892 224.122 320.727 631.883> 1443.19 898.078 1375.06 798.234 0.305997 -0.952033<74.2085 385.084> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 288 88.2812<711 802.25 910.688 1002.88> 469.406 93.125<1273.34 1471> 862.062 96.0156<120.375 320.062 428.5 628.188 711 802.25 910.688 1002.88 1359.62 1385.56> +VStem: 320.062 108.438<288 862.062> 711 291.875<288 376.281 869.797 958.078> 1078.34 110.469<288 398.469> 1558.34 113.281<288 401.281> +DStem2: 1078.34 288 1188.81 288 0.303155 0.952941<33.4892 224.122 320.727 631.883> 1443.19 958.078 1375.06 858.234 0.305997 -0.952033<74.2085 385.084> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +428.5 802.0625 m 1 + 428.5 610.708007812 428.5 419.354492188 428.5 228 c 1 + 392.354492188 228 356.208007812 228 320.0625 228 c 1 + 320.0625 419.354492188 320.0625 610.708007812 320.0625 802.0625 c 1 + 253.5 802.0625 186.9375 802.0625 120.375 802.0625 c 1 + 120.375 834.067382812 120.375 866.073242188 120.375 898.078125 c 1 + 289.645507812 898.078125 458.916992188 898.078125 628.1875 898.078125 c 1 + 628.1875 866.073242188 628.1875 834.067382812 628.1875 802.0625 c 1 + 561.625 802.0625 495.0625 802.0625 428.5 802.0625 c 1 +711 228 m 1 + 711 257.426757812 711 286.854492188 711 316.28125 c 1 + 741.416992188 316.28125 771.833007812 316.28125 802.25 316.28125 c 1 + 802.25 480.786132812 802.25 645.291992188 802.25 809.796875 c 1 + 771.833007812 809.796875 741.416992188 809.796875 711 809.796875 c 1 + 711 839.223632812 711 868.651367188 711 898.078125 c 1 + 808.291992188 898.078125 905.583007812 898.078125 1002.875 898.078125 c 1 + 1002.875 868.651367188 1002.875 839.223632812 1002.875 809.796875 c 1 + 972.145507812 809.796875 941.416992188 809.796875 910.6875 809.796875 c 1 + 910.6875 645.291992188 910.6875 480.786132812 910.6875 316.28125 c 1 + 941.416992188 316.28125 972.145507812 316.28125 1002.875 316.28125 c 1 + 1002.875 286.854492188 1002.875 257.426757812 1002.875 228 c 1 + 905.583007812 228 808.291992188 228 711 228 c 1 +1558.34375 228 m 1 + 1538.1875 288.46875 1518.03125 348.9375 1497.875 409.40625 c 1 + 1414.38574219 409.40625 1330.89550781 409.40625 1247.40625 409.40625 c 1 + 1227.875 348.9375 1208.34375 288.46875 1188.8125 228 c 1 + 1151.98925781 228 1115.16699219 228 1078.34375 228 c 1 + 1154.54199219 451.359375 1230.73925781 674.71875 1306.9375 898.078125 c 1 + 1352.35449219 898.078125 1397.77050781 898.078125 1443.1875 898.078125 c 1 + 1519.33300781 674.71875 1595.47949219 451.359375 1671.625 228 c 1 + 1633.86425781 228 1596.10449219 228 1558.34375 228 c 1 +1375.0625 798.234375 m 1 + 1373.44824219 798.234375 1371.83300781 798.234375 1370.21875 798.234375 c 1 + 1337.92675781 699.666992188 1305.63574219 601.098632812 1273.34375 502.53125 c 1 + 1339.22949219 502.53125 1405.11425781 502.53125 1471 502.53125 c 1 + 1439.02050781 601.098632812 1407.04199219 699.666992188 1375.0625 798.234375 c 1 +EndSplineSet +EndChar + +StartChar: uniE109 +Encoding: 57609 57609 10 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 216.516 95.9375<134.083 359.867> 409.406 93.125<745.609 943.344 1385.61 1583.34> 798.234 99.8438<830.443 859.33 1470.44 1499.33> 813.625 95.9375<159.651 378.063> +VStem: 28.1875 107.5<656.387 792.68> 388.188 107.5<339.565 486.758> 550.688 110.391<228 338.391> 1030.69 113.281<228 341.281> 1190.69 110.391<228 338.391> 1670.69 113.281<228 341.281> +DStem2: 242.25 629.25 223.969 526.594 0.978916 -0.204262<-84.378 149.631> 550.688 228 661.078 228 0.322775 0.946476<35.6313 226.241 322.753 322.753> 915.531 898.078 847.328 798.234 0.306115 -0.951995<74.1727 385.072 481.954 673.162> 1190.69 228 1301.08 228 0.322775 0.946476<35.6313 226.241 322.753 322.753> 1555.53 898.078 1487.33 798.234 0.306115 -0.951995<74.1727 385.072 481.954 673.162> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 276.516 95.9375<134.083 359.867> 469.406 93.125<745.609 943.344 1385.61 1583.34> 858.234 99.8438<830.443 859.33 1470.44 1499.33> 873.625 95.9375<159.651 378.063> +VStem: 28.1875 107.5<716.387 852.68> 388.188 107.5<399.565 546.758> 550.688 110.391<288 398.391> 1030.69 113.281<288 401.281> 1190.69 110.391<288 398.391> 1670.69 113.281<288 401.281> +DStem2: 242.25 689.25 223.969 586.594 0.978916 -0.204262<-84.378 149.631> 550.688 288 661.078 288 0.322775 0.946476<35.6313 226.241 322.753 322.753> 915.531 958.078 847.328 858.234 0.306115 -0.951995<74.1727 385.072 481.954 673.162> 1190.69 288 1301.08 288 0.322775 0.946476<35.6313 226.241 322.753 322.753> 1555.53 958.078 1487.33 858.234 0.306115 -0.951995<74.1727 385.072 481.954 673.162> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +252.796875 216.515625 m 0xdfc0 + 196.46875 216.515625 148.65625 226.75 109.28125 247.21875 c 0 + 69.90625 267.6875 36.15625 295.1875 8.03125 329.796875 c 1 + 32.9794921875 353.15625 57.9267578125 376.515625 82.875 399.875 c 1 + 106.546875 371.046875 132.640625 349.25 161.078125 334.5625 c 0 + 189.59375 319.875 222.09375 312.453125 258.578125 312.453125 c 0 + 301.46875 312.453125 333.734375 322.0625 355.53125 341.28125 c 0 + 377.25 360.5 388.1875 386.4375 388.1875 419.015625 c 0 + 388.1875 445.265625 380.453125 466.046875 365.140625 481.4375 c 0 + 349.75 496.828125 322.5625 508.3125 283.5 515.96875 c 1 + 263.65625 519.510742188 243.8125 523.051757812 223.96875 526.59375 c 1 + 158.734375 538.703125 109.75 560.1875 77.09375 590.890625 c 0 + 44.4375 621.59375 28.1875 663.859375 28.1875 717.609375 c 0 + 28.1875 747.0625 33.734375 773.78125 44.984375 797.765625 c 0 + 56.15625 821.75 71.859375 841.90625 92.015625 858.234375 c 0 + 112.171875 874.5625 136.625 887.21875 165.453125 896.125 c 0 + 194.203125 905.109375 226.546875 909.5625 262.40625 909.5625 c 0 + 312.953125 909.5625 356.78125 900.8125 393.890625 883.234375 c 0 + 431 865.578125 462.71875 840.1875 488.96875 806.90625 c 1 + 463.682617188 784.510742188 438.395507812 762.114257812 413.109375 739.71875 c 1 + 395.84375 762.0625 374.75 780.03125 349.75 793.46875 c 0 + 324.828125 806.90625 293.734375 813.625 256.625 813.625 c 0 + 218.265625 813.625 188.5 805.890625 167.328125 790.578125 c 0 + 146.234375 775.1875 135.6875 752.765625 135.6875 723.390625 c 0 + 135.6875 695.1875 144.28125 674.25 161.625 660.5 c 0 + 178.890625 646.75 205.765625 636.28125 242.25 629.25 c 1 + 262.09375 625.109375 281.9375 620.96875 301.78125 616.828125 c 1 + 368.96875 604.015625 418.109375 582.21875 449.125 551.515625 c 0 + 480.140625 520.8125 495.6875 478.546875 495.6875 424.796875 c 0 + 495.6875 393.46875 490.21875 364.953125 479.359375 339.328125 c 0 + 468.5 313.78125 452.640625 291.828125 431.859375 273.625 c 0 + 411 255.34375 385.609375 241.28125 355.53125 231.359375 c 0 + 325.453125 221.4375 291.15625 216.515625 252.796875 216.515625 c 0xdfc0 +1030.6875 228 m 1 + 1010.53125 288.46875 990.375 348.9375 970.21875 409.40625 c 1 + 886.703125 409.40625 803.1875 409.40625 719.671875 409.40625 c 1 + 700.140625 348.9375 680.609375 288.46875 661.078125 228 c 1 + 624.28125 228 587.484375 228 550.6875 228 c 1 + 626.859375 451.359375 703.03125 674.71875 779.203125 898.078125 c 1 + 824.645507812 898.078125 870.088867188 898.078125 915.53125 898.078125 c 1xefc0 + 991.676757812 674.71875 1067.82324219 451.359375 1143.96875 228 c 1 + 1106.20800781 228 1068.44824219 228 1030.6875 228 c 1 +847.328125 798.234375 m 1 + 845.739257812 798.234375 844.151367188 798.234375 842.5625 798.234375 c 1 + 810.245117188 699.666992188 777.926757812 601.098632812 745.609375 502.53125 c 1 + 811.520507812 502.53125 877.432617188 502.53125 943.34375 502.53125 c 1 + 911.338867188 601.098632812 879.333007812 699.666992188 847.328125 798.234375 c 1 +1670.6875 228 m 1 + 1650.53125 288.46875 1630.375 348.9375 1610.21875 409.40625 c 1 + 1526.703125 409.40625 1443.1875 409.40625 1359.671875 409.40625 c 1 + 1340.140625 348.9375 1320.609375 288.46875 1301.078125 228 c 1 + 1264.28125 228 1227.484375 228 1190.6875 228 c 1 + 1266.859375 451.359375 1343.03125 674.71875 1419.203125 898.078125 c 1 + 1464.64550781 898.078125 1510.08886719 898.078125 1555.53125 898.078125 c 1 + 1631.67675781 674.71875 1707.82324219 451.359375 1783.96875 228 c 1 + 1746.20800781 228 1708.44824219 228 1670.6875 228 c 1 +1487.328125 798.234375 m 1 + 1485.73925781 798.234375 1484.15136719 798.234375 1482.5625 798.234375 c 1 + 1450.24511719 699.666992188 1417.92675781 601.098632812 1385.609375 502.53125 c 1 + 1451.52050781 502.53125 1517.43261719 502.53125 1583.34375 502.53125 c 1 + 1551.33886719 601.098632812 1519.33300781 699.666992188 1487.328125 798.234375 c 1 +EndSplineSet +EndChar + +StartChar: uniE10A +Encoding: 57610 57610 11 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 228 88.2812<773.109 864.281 972.797 1064.98 1342.08 1563.11> 809.797 88.2812<773.109 864.281 972.797 1064.98 1342.01 1562.58> +VStem: 96.625 112.344<785.734 898.078> 555.531 109.453<788.625 898.078> 773.109 291.875<228 316.281 809.797 898.078> 1172.17 115.156<375.807 753.111> +DStem2: 208.969 898.078 96.625 898.078 0.311738 -0.950168<0 589.589> 383.656 333.625 442.25 228 0.291293 0.956634<0 590.041> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 288 88.2812<773.109 864.281 972.797 1064.98 1342.08 1563.11> 869.797 88.2812<773.109 864.281 972.797 1064.98 1342.01 1562.58> +VStem: 96.625 112.344<845.734 958.078> 555.531 109.453<848.625 958.078> 773.109 291.875<288 376.281 869.797 958.078> 1172.17 115.156<435.807 813.111> +DStem2: 208.969 958.078 96.625 958.078 0.311738 -0.950168<0 589.589> 383.656 393.625 442.25 288 0.291293 0.956634<0 590.041> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +316.46875 228 m 1 + 243.1875 451.359375 169.90625 674.71875 96.625 898.078125 c 1 + 134.073242188 898.078125 171.520507812 898.078125 208.96875 898.078125 c 1 + 244.489257812 787.6875 280.010742188 677.296875 315.53125 566.90625 c 1 + 336.963867188 489.145507812 358.395507812 411.385742188 379.828125 333.625 c 1 + 381.104492188 333.625 382.379882812 333.625 383.65625 333.625 c 1 + 405.426757812 411.385742188 427.198242188 489.145507812 448.96875 566.90625 c 1 + 484.489257812 677.296875 520.010742188 787.6875 555.53125 898.078125 c 1 + 592.015625 898.078125 628.5 898.078125 664.984375 898.078125 c 1 + 590.739257812 674.71875 516.495117188 451.359375 442.25 228 c 1 + 400.323242188 228 358.395507812 228 316.46875 228 c 1 +773.109375 228 m 1 + 773.109375 257.426757812 773.109375 286.854492188 773.109375 316.28125 c 1 + 803.5 316.28125 833.890625 316.28125 864.28125 316.28125 c 1 + 864.28125 480.786132812 864.28125 645.291992188 864.28125 809.796875 c 1 + 833.890625 809.796875 803.5 809.796875 773.109375 809.796875 c 1 + 773.109375 839.223632812 773.109375 868.651367188 773.109375 898.078125 c 1 + 870.401367188 898.078125 967.692382812 898.078125 1064.984375 898.078125 c 1 + 1064.984375 868.651367188 1064.984375 839.223632812 1064.984375 809.796875 c 1 + 1034.25488281 809.796875 1003.52636719 809.796875 972.796875 809.796875 c 1 + 972.796875 645.291992188 972.796875 480.786132812 972.796875 316.28125 c 1 + 1003.52636719 316.28125 1034.25488281 316.28125 1064.984375 316.28125 c 1 + 1064.984375 286.854492188 1064.984375 257.426757812 1064.984375 228 c 1 + 967.692382812 228 870.401367188 228 773.109375 228 c 1 +1453.421875 216.515625 m 0 + 1365.765625 216.515625 1296.9375 246.046875 1247.015625 305.265625 c 0 + 1197.09375 364.484375 1172.171875 450.421875 1172.171875 563.078125 c 0 + 1172.171875 619.328125 1178.578125 668.9375 1191.390625 711.828125 c 0 + 1204.125 754.71875 1222.71875 790.890625 1247.015625 820.34375 c 0 + 1271.390625 849.796875 1300.921875 871.984375 1335.84375 887.0625 c 0 + 1370.6875 902.0625 1409.90625 909.5625 1453.421875 909.5625 c 0 + 1511.703125 909.5625 1560.453125 896.828125 1599.828125 871.203125 c 0 + 1639.203125 845.578125 1670.0625 807.84375 1692.484375 757.921875 c 1 + 1662.09375 741.28125 1631.703125 724.640625 1601.3125 708 c 1 + 1589.75 740.03125 1572.015625 765.421875 1548.03125 784.328125 c 0 + 1523.96875 803.234375 1492.484375 812.609375 1453.421875 812.609375 c 0 + 1401.625 812.609375 1360.921875 795.03125 1331.546875 759.875 c 0 + 1302.09375 724.640625 1287.328125 675.96875 1287.328125 613.9375 c 1 + 1287.328125 580.004882812 1287.328125 546.073242188 1287.328125 512.140625 c 1 + 1287.328125 450.109375 1302.09375 401.4375 1331.546875 366.203125 c 0 + 1360.921875 331.046875 1401.625 313.46875 1453.421875 313.46875 c 0 + 1493.734375 313.46875 1526.546875 323.859375 1551.859375 344.640625 c 0 + 1577.09375 365.421875 1595.84375 392.140625 1608.03125 424.796875 c 1 + 1637.14550781 407.192382812 1666.26074219 389.588867188 1695.375 371.984375 c 1 + 1672.953125 323.390625 1641.625 285.265625 1601.3125 257.765625 c 0 + 1560.921875 230.265625 1511.703125 216.515625 1453.421875 216.515625 c 0 +EndSplineSet +EndChar + +StartChar: uniE10B +Encoding: 57611 57611 12 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 228 96.0156<820.297 1141> 494.875 95.0781<180.297 416.684> 519.875 95.9375<820.297 1111.23> 802.062 96.0156<180.297 416.684 820.297 1141 1212.33 1412.02 1520.45 1720.14> +VStem: 71.8594 108.438<228 494.875 589.953 803.078> 440.453 114.297<612.194 780.759> 711.859 108.438<324.016 519.875 615.812 802.062> 1412.02 108.438<228 802.062> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 288 96.0156<820.297 1141> 554.875 95.0781<180.297 416.684> 579.875 95.9375<820.297 1111.23> 862.062 96.0156<180.297 416.684 820.297 1141 1212.33 1412.02 1520.45 1720.14> +VStem: 71.8594 108.438<288 554.875 649.953 863.078> 440.453 114.297<672.194 840.759> 711.859 108.438<384.016 579.875 675.812 862.062> 1412.02 108.438<288 862.062> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +71.859375 228 m 1xdf + 71.859375 451.359375 71.859375 674.71875 71.859375 898.078125 c 1 + 167.848632812 898.078125 263.838867188 898.078125 359.828125 898.078125 c 1 + 421.9375 898.078125 469.90625 879.875 503.8125 843.390625 c 0 + 537.796875 806.90625 554.75 757.921875 554.75 696.515625 c 256 + 554.75 635.03125 537.796875 586.046875 503.8125 549.5625 c 0 + 469.90625 513.15625 421.9375 494.875 359.828125 494.875 c 1 + 299.984375 494.875 240.140625 494.875 180.296875 494.875 c 1 + 180.296875 405.916992188 180.296875 316.958007812 180.296875 228 c 1 + 144.151367188 228 108.004882812 228 71.859375 228 c 1xdf +180.296875 589.953125 m 1 + 237.901367188 589.953125 295.504882812 589.953125 353.109375 589.953125 c 1 + 380.609375 589.953125 402.09375 597.140625 417.40625 611.515625 c 0 + 432.796875 625.890625 440.453125 646.59375 440.453125 673.46875 c 1 + 440.453125 688.807617188 440.453125 704.145507812 440.453125 719.484375 c 1 + 440.453125 746.4375 432.796875 767.0625 417.40625 781.4375 c 0 + 402.09375 795.8125 380.609375 803.078125 353.109375 803.078125 c 1 + 295.504882812 803.078125 237.901367188 803.078125 180.296875 803.078125 c 1 + 180.296875 732.036132812 180.296875 660.995117188 180.296875 589.953125 c 1 +711.859375 228 m 1 + 711.859375 451.359375 711.859375 674.71875 711.859375 898.078125 c 1 + 854.90625 898.078125 997.953125 898.078125 1141 898.078125 c 1 + 1141 866.073242188 1141 834.067382812 1141 802.0625 c 1 + 1034.09863281 802.0625 927.198242188 802.0625 820.296875 802.0625 c 1 + 820.296875 739.979492188 820.296875 677.895507812 820.296875 615.8125 c 1 + 917.276367188 615.8125 1014.25488281 615.8125 1111.234375 615.8125 c 1 + 1111.234375 583.833007812 1111.234375 551.854492188 1111.234375 519.875 c 1 + 1014.25488281 519.875 917.276367188 519.875 820.296875 519.875 c 1xbf + 820.296875 454.588867188 820.296875 389.301757812 820.296875 324.015625 c 1 + 927.198242188 324.015625 1034.09863281 324.015625 1141 324.015625 c 1 + 1141 292.010742188 1141 260.004882812 1141 228 c 1 + 997.953125 228 854.90625 228 711.859375 228 c 1 +1520.453125 802.0625 m 1 + 1520.453125 610.708007812 1520.453125 419.354492188 1520.453125 228 c 1 + 1484.30761719 228 1448.16113281 228 1412.015625 228 c 1 + 1412.015625 419.354492188 1412.015625 610.708007812 1412.015625 802.0625 c 1 + 1345.453125 802.0625 1278.890625 802.0625 1212.328125 802.0625 c 1 + 1212.328125 834.067382812 1212.328125 866.073242188 1212.328125 898.078125 c 1 + 1381.59863281 898.078125 1550.87011719 898.078125 1720.140625 898.078125 c 1 + 1720.140625 866.073242188 1720.140625 834.067382812 1720.140625 802.0625 c 1 + 1653.578125 802.0625 1587.015625 802.0625 1520.453125 802.0625 c 1 +EndSplineSet +EndChar + +StartChar: uniE10C +Encoding: 57612 57612 13 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: -208.33 85.3906<803.27 978.187> 140.107 85.4688<828.18 977.718> 657.686 89.2188<1388.21 1579.14> 669.17 92.1875<328.559 354.926> 942.76 85.4688<802.406 938.743> 1249.95 89.2969<802.406 1011.58 1380.73 1582.23> +VStem: 82.0938 106.562<1232.69 1339.25> 493.891 104.688<1234.56 1339.25> 674.359 107.5<-102.67 120.457> 700.609 101.797<669.17 942.76 1028.23 1249.95> 998.891 107.5<-102.386 119.315> 1030.84 108.516<1047.5 1230.69> 1233.73 109.453<795.416 1213> +DStem2: 188.656 1339.25 82.0938 1339.25 0.271727 -0.962374<0 593.586> 375.844 917.842 402.719 669.17 0.269742 0.962933<-155.735 437.628> 1024.12 950.42 922.406 942.76 0.413517 -0.910496<0 262.054> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: -148.33 85.3906<803.27 978.187> 200.107 85.4688<828.18 977.718> 717.686 89.2188<1388.21 1579.14> 729.17 92.1875<328.559 354.926> 1002.76 85.4688<802.406 938.743> 1309.95 89.2969<802.406 1011.58 1380.73 1582.23> +VStem: 82.0938 106.562<1292.69 1399.25> 493.891 104.688<1294.56 1399.25> 674.359 107.5<-42.67 180.457> 700.609 101.797<729.17 1002.76 1088.23 1309.95> 998.891 107.5<-42.3858 179.315> 1030.84 108.516<1107.5 1290.69> 1233.73 109.453<855.416 1273> +DStem2: 188.656 1399.25 82.0938 1399.25 0.271727 -0.962374<0 593.586> 375.844 977.842 402.719 729.17 0.269742 0.962933<-155.735 437.628> 1024.12 1010.42 922.406 1002.76 0.413517 -0.910496<0 262.054> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +890.296875 -208.330078125 m 0xcfa8 + 818.734375 -208.330078125 764.828125 -186.298828125 728.578125 -142.158203125 c 0 + 692.484375 -97.939453125 674.359375 -33.642578125 674.359375 50.810546875 c 0 + 674.359375 91.123046875 679.515625 131.435546875 689.671875 171.826171875 c 0 + 699.984375 212.138671875 714.671875 250.654296875 733.890625 287.451171875 c 0 + 753.109375 324.248046875 775.921875 358.701171875 802.484375 390.654296875 c 0 + 829.046875 422.685546875 858.734375 450.185546875 891.390625 473.232421875 c 1 + 937.120117188 473.232421875 982.848632812 473.232421875 1028.578125 473.232421875 c 1 + 989.515625 443.154296875 955.921875 414.482421875 927.796875 387.294921875 c 0 + 899.671875 360.107421875 875.765625 333.076171875 856.234375 306.201171875 c 0 + 836.703125 279.326171875 820.921875 251.669921875 808.734375 223.154296875 c 0 + 796.546875 194.638671875 787.328125 163.779296875 780.921875 130.498046875 c 1 + 785.088867188 130.498046875 789.254882812 130.498046875 793.421875 130.498046875 c 1 + 804.359375 161.201171875 821.546875 184.716796875 845.296875 201.044921875 c 0 + 868.890625 217.373046875 897.015625 225.576171875 929.671875 225.576171875 c 0 + 984.046875 225.576171875 1027.171875 207.919921875 1058.890625 172.763671875 c 0 + 1090.453125 137.529296875 1106.390625 85.732421875 1106.390625 17.216796875 c 0 + 1106.390625 -53.798828125 1087.953125 -109.189453125 1051.234375 -148.876953125 c 0 + 1014.359375 -188.564453125 960.765625 -208.330078125 890.296875 -208.330078125 c 0xcfa8 +890.296875 -122.939453125 m 256 + 962.640625 -122.939453125 998.890625 -83.251953125 998.890625 -3.876953125 c 1 + 998.890625 4.4306640625 998.890625 12.7373046875 998.890625 21.044921875 c 1 + 998.890625 100.419921875 962.640625 140.107421875 890.296875 140.107421875 c 256 + 818.109375 140.107421875 781.859375 100.419921875 781.859375 21.044921875 c 1 + 781.859375 12.7373046875 781.859375 4.4306640625 781.859375 -3.876953125 c 1 + 781.859375 -83.251953125 818.109375 -122.939453125 890.296875 -122.939453125 c 256 +278.890625 669.169921875 m 1xdf08 + 213.291992188 892.529296875 147.692382812 1115.88867188 82.09375 1339.24804688 c 1 + 117.614257812 1339.24804688 153.135742188 1339.24804688 188.65625 1339.24804688 c 1 + 228.317382812 1198.77929688 267.979492188 1058.31054688 307.640625 917.841796875 c 1 + 316.9375 865.680664062 326.234375 813.518554688 335.53125 761.357421875 c 1 + 339.671875 761.357421875 343.8125 761.357421875 347.953125 761.357421875 c 1 + 357.25 813.518554688 366.546875 865.680664062 375.84375 917.841796875 c 1 + 415.192382812 1058.31054688 454.541992188 1198.77929688 493.890625 1339.24804688 c 1 + 528.786132812 1339.24804688 563.682617188 1339.24804688 598.578125 1339.24804688 c 1 + 533.291992188 1115.88867188 468.004882812 892.529296875 402.71875 669.169921875 c 1 + 361.442382812 669.169921875 320.166992188 669.169921875 278.890625 669.169921875 c 1xdf08 +802.40625 669.169921875 m 1xdf58 + 768.473632812 669.169921875 734.541992188 669.169921875 700.609375 669.169921875 c 1 + 700.609375 892.529296875 700.609375 1115.88867188 700.609375 1339.24804688 c 1 + 788.942382812 1339.24804688 877.276367188 1339.24804688 965.609375 1339.24804688 c 1 + 1023.1875 1339.24804688 1066.546875 1322.13867188 1095.6875 1287.91992188 c 0 + 1124.75 1253.62304688 1139.359375 1204.56054688 1139.359375 1140.49804688 c 0 + 1139.359375 1088.70117188 1129.75 1046.74804688 1110.53125 1014.79492188 c 0 + 1091.3125 982.763671875 1062.5625 961.357421875 1024.125 950.419921875 c 1 + 1066.703125 856.669921875 1109.28125 762.919921875 1151.859375 669.169921875 c 1 + 1114.09863281 669.169921875 1076.33886719 669.169921875 1038.578125 669.169921875 c 1 + 999.854492188 760.368164062 961.129882812 851.565429688 922.40625 942.763671875 c 1 + 882.40625 942.763671875 842.40625 942.763671875 802.40625 942.763671875 c 1 + 802.40625 851.565429688 802.40625 760.368164062 802.40625 669.169921875 c 1xdf58 +956.9375 1028.23242188 m 1 + 981.234375 1028.23242188 999.671875 1034.48242188 1012.171875 1046.90429688 c 0 + 1024.59375 1059.40429688 1030.84375 1079.71679688 1030.84375 1107.91992188 c 1 + 1030.84375 1128.70117188 1030.84375 1149.48242188 1030.84375 1170.26367188 c 1 + 1030.84375 1198.46679688 1024.59375 1218.77929688 1012.171875 1231.27929688 c 0 + 999.671875 1243.70117188 981.234375 1249.95117188 956.9375 1249.95117188 c 1 + 905.426757812 1249.95117188 853.916992188 1249.95117188 802.40625 1249.95117188 c 1 + 802.40625 1176.04492188 802.40625 1102.13867188 802.40625 1028.23242188 c 1 + 853.916992188 1028.23242188 905.426757812 1028.23242188 956.9375 1028.23242188 c 1 +1487.171875 657.685546875 m 0xef08 + 1448.109375 657.685546875 1413.109375 664.248046875 1382.09375 677.294921875 c 0 + 1351 690.419921875 1324.4375 711.123046875 1302.40625 739.248046875 c 0 + 1280.296875 767.373046875 1263.34375 803.388671875 1251.46875 847.216796875 c 0 + 1239.671875 891.123046875 1233.734375 943.388671875 1233.734375 1004.24804688 c 256 + 1233.734375 1065.02929688 1239.671875 1117.29492188 1251.46875 1161.20117188 c 0 + 1263.34375 1205.02929688 1280.296875 1241.04492188 1302.40625 1269.16992188 c 0 + 1324.4375 1297.29492188 1351 1317.99804688 1382.09375 1331.12304688 c 0 + 1413.109375 1344.24804688 1448.109375 1350.73242188 1487.171875 1350.73242188 c 0 + 1544.125 1350.73242188 1589.75 1338.46679688 1623.96875 1313.77929688 c 0 + 1658.1875 1289.16992188 1685.609375 1252.21679688 1706.078125 1202.91992188 c 1 + 1677.27636719 1186.93066406 1648.47363281 1170.94042969 1619.671875 1154.95117188 c 1 + 1608.109375 1192.68554688 1592.015625 1219.87304688 1571.15625 1236.51367188 c 0 + 1550.375 1253.15429688 1522.40625 1261.51367188 1487.171875 1261.51367188 c 0 + 1441.78125 1261.51367188 1406.390625 1245.81054688 1381.078125 1214.48242188 c 0 + 1355.84375 1183.07617188 1343.1875 1139.87304688 1343.1875 1084.87304688 c 1 + 1343.1875 1031.09667969 1343.1875 977.321289062 1343.1875 923.544921875 c 1 + 1343.1875 868.544921875 1355.84375 825.341796875 1381.078125 793.935546875 c 0 + 1406.390625 762.607421875 1441.78125 746.904296875 1487.171875 746.904296875 c 0 + 1523.03125 746.904296875 1552.015625 755.888671875 1574.046875 773.779296875 c 0 + 1596.15625 791.748046875 1613.265625 820.498046875 1625.453125 860.185546875 c 1 + 1653.60449219 843.544921875 1681.75488281 826.904296875 1709.90625 810.263671875 c 1 + 1688.8125 761.044921875 1660.609375 723.232421875 1625.453125 696.982421875 c 0 + 1590.21875 670.732421875 1544.125 657.685546875 1487.171875 657.685546875 c 0xef08 +EndSplineSet +EndChar + +StartChar: uniE10D +Encoding: 57613 57613 14 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: -202.516 96.0156<568.266 840.922 1048.27 1320.92> 652.016 96.9531<456.756 680.46> 930.375 95.0781<1137.88 1374.26> 1248.11 96.9531<456.756 680.46 1137.88 1374.26> +VStem: 279.672 116.172<812.663 1184.42> 459.828 108.438<-106.5 467.562> 741.391 116.172<812.663 1184.42> 939.828 108.438<-106.5 467.562> 1029.44 108.438<663.5 930.375 1025.45 1238.58> 1398.03 114.297<1047.69 1216.26> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: -142.516 96.0156<568.266 840.922 1048.27 1320.92> 712.016 96.9531<456.756 680.46> 990.375 95.0781<1137.88 1374.26> 1308.11 96.9531<456.756 680.46 1137.88 1374.26> +VStem: 279.672 116.172<872.663 1244.42> 459.828 108.438<-46.5 527.562> 741.391 116.172<872.663 1244.42> 939.828 108.438<-46.5 527.562> 1029.44 108.438<723.5 990.375 1085.45 1298.58> 1398.03 114.297<1107.69 1276.26> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +459.828125 -202.515625 m 1xfe40 + 459.828125 20.84375 459.828125 244.203125 459.828125 467.5625 c 1 + 495.973632812 467.5625 532.120117188 467.5625 568.265625 467.5625 c 1 + 568.265625 276.208007812 568.265625 84.853515625 568.265625 -106.5 c 1 + 659.151367188 -106.5 750.036132812 -106.5 840.921875 -106.5 c 1 + 840.921875 -138.505859375 840.921875 -170.510742188 840.921875 -202.515625 c 1 + 713.890625 -202.515625 586.859375 -202.515625 459.828125 -202.515625 c 1xfe40 +939.828125 -202.515625 m 1xff40 + 939.828125 20.84375 939.828125 244.203125 939.828125 467.5625 c 1 + 975.973632812 467.5625 1012.12011719 467.5625 1048.265625 467.5625 c 1 + 1048.265625 276.208007812 1048.265625 84.853515625 1048.265625 -106.5 c 1 + 1139.15136719 -106.5 1230.03613281 -106.5 1320.921875 -106.5 c 1 + 1320.921875 -138.505859375 1320.921875 -170.510742188 1320.921875 -202.515625 c 1 + 1193.890625 -202.515625 1066.859375 -202.515625 939.828125 -202.515625 c 1xff40 +568.65625 652.015625 m 256 + 525.0625 652.015625 485.609375 659.515625 450.0625 674.515625 c 0 + 414.515625 689.59375 384.125 711.625 358.890625 740.765625 c 0 + 333.578125 769.90625 314.046875 806.078125 300.296875 849.28125 c 0 + 286.546875 892.484375 279.671875 942.25 279.671875 998.578125 c 256 + 279.671875 1054.828125 286.546875 1104.59375 300.296875 1147.796875 c 0 + 314.046875 1191 333.578125 1227.171875 358.890625 1256.3125 c 0 + 384.125 1285.453125 414.515625 1307.484375 450.0625 1322.5625 c 0 + 485.609375 1337.5625 525.0625 1345.0625 568.65625 1345.0625 c 256 + 612.171875 1345.0625 651.625 1337.5625 687.171875 1322.5625 c 0 + 722.71875 1307.484375 753.109375 1285.453125 778.34375 1256.3125 c 0 + 803.65625 1227.171875 823.1875 1191 836.9375 1147.796875 c 0 + 850.6875 1104.59375 857.5625 1054.828125 857.5625 998.578125 c 256 + 857.5625 942.25 850.6875 892.484375 836.9375 849.28125 c 0 + 823.1875 806.078125 803.65625 769.90625 778.34375 740.765625 c 0 + 753.109375 711.625 722.71875 689.59375 687.171875 674.515625 c 0 + 651.625 659.515625 612.171875 652.015625 568.65625 652.015625 c 256 +568.65625 748.96875 m 0 + 594.203125 748.96875 617.71875 753.421875 639.203125 762.40625 c 0 + 660.609375 771.3125 678.890625 784.28125 693.890625 801.234375 c 0 + 708.96875 818.1875 720.609375 838.890625 728.96875 863.1875 c 0 + 737.25 887.484375 741.390625 914.984375 741.390625 945.765625 c 1 + 741.390625 980.947265625 741.390625 1016.12988281 741.390625 1051.3125 c 1 + 741.390625 1082.09375 737.25 1109.59375 728.96875 1133.890625 c 0 + 720.609375 1158.1875 708.96875 1178.890625 693.890625 1195.84375 c 0 + 678.890625 1212.796875 660.609375 1225.765625 639.203125 1234.671875 c 0 + 617.71875 1243.65625 594.203125 1248.109375 568.65625 1248.109375 c 0 + 542.40625 1248.109375 518.734375 1243.65625 497.5625 1234.671875 c 0 + 476.46875 1225.765625 458.34375 1212.796875 443.34375 1195.84375 c 0 + 428.265625 1178.890625 416.625 1158.1875 408.265625 1133.890625 c 0 + 399.984375 1109.59375 395.84375 1082.09375 395.84375 1051.3125 c 1 + 395.84375 1016.12988281 395.84375 980.947265625 395.84375 945.765625 c 1 + 395.84375 914.984375 399.984375 887.484375 408.265625 863.1875 c 0 + 416.625 838.890625 428.265625 818.1875 443.34375 801.234375 c 0 + 458.34375 784.28125 476.46875 771.3125 497.5625 762.40625 c 0 + 518.734375 753.421875 542.40625 748.96875 568.65625 748.96875 c 0 +1029.4375 663.5 m 1xfec0 + 1029.4375 886.859375 1029.4375 1110.21875 1029.4375 1333.578125 c 1 + 1125.42675781 1333.578125 1221.41699219 1333.578125 1317.40625 1333.578125 c 1 + 1379.515625 1333.578125 1427.484375 1315.37402344 1461.390625 1278.890625 c 0 + 1495.375 1242.40527344 1512.328125 1193.421875 1512.328125 1132.015625 c 256 + 1512.328125 1070.53027344 1495.375 1021.546875 1461.390625 985.0625 c 0 + 1427.484375 948.65625 1379.515625 930.375 1317.40625 930.375 c 1 + 1257.5625 930.375 1197.71875 930.375 1137.875 930.375 c 1 + 1137.875 841.416015625 1137.875 752.458007812 1137.875 663.5 c 1 + 1101.72949219 663.5 1065.58300781 663.5 1029.4375 663.5 c 1xfec0 +1137.875 1025.453125 m 1 + 1195.47949219 1025.453125 1253.08300781 1025.453125 1310.6875 1025.453125 c 1 + 1338.1875 1025.453125 1359.671875 1032.640625 1374.984375 1047.015625 c 0 + 1390.375 1061.390625 1398.03125 1082.09277344 1398.03125 1108.96875 c 1 + 1398.03125 1124.30664062 1398.03125 1139.64550781 1398.03125 1154.984375 c 1 + 1398.03125 1181.9375 1390.375 1202.56152344 1374.984375 1216.9375 c 0 + 1359.671875 1231.31152344 1338.1875 1238.578125 1310.6875 1238.578125 c 1 + 1253.08300781 1238.578125 1195.47949219 1238.578125 1137.875 1238.578125 c 1 + 1137.875 1167.53613281 1137.875 1096.49414062 1137.875 1025.453125 c 1 +EndSplineSet +EndChar + +StartChar: uniE10E +Encoding: 57614 57614 15 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 228 96.0156<177.043 421.987 1508.81 1781.47> 494.875 95.0781<868.812 1105.12> 803.078 95<177.765 421.265 868.812 1105.12> +VStem: 10.5312 116.25<377.163 748.916> 472.25 116.25<377.163 748.916> 760.375 108.438<228 494.875 589.953 803.078> 1128.97 114.219<612.194 780.759> 1400.38 108.438<324.016 898.078> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 288 96.0156<177.043 421.987 1508.81 1781.47> 554.875 95.0781<868.812 1105.12> 863.078 95<177.765 421.265 868.812 1105.12> +VStem: 10.5312 116.25<437.163 808.916> 472.25 116.25<437.163 808.916> 760.375 108.438<288 554.875 649.953 863.078> 1128.97 114.219<672.194 840.759> 1400.38 108.438<384.016 958.078> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +299.59375 216.515625 m 256 + 256 216.515625 216.46875 224.015625 181 239.015625 c 0 + 145.375 254.09375 115.0625 276.125 89.75 305.265625 c 0 + 64.4375 334.40625 44.90625 370.578125 31.15625 413.78125 c 0 + 17.40625 456.984375 10.53125 506.75 10.53125 563.078125 c 256 + 10.53125 619.328125 17.40625 669.09375 31.15625 712.296875 c 0 + 44.90625 755.5 64.4375 791.671875 89.75 820.8125 c 0 + 115.0625 849.953125 145.375 871.984375 181 887.0625 c 0 + 216.46875 902.0625 256 909.5625 299.59375 909.5625 c 256 + 343.03125 909.5625 382.5625 902.0625 418.03125 887.0625 c 0 + 453.65625 871.984375 483.96875 849.953125 509.28125 820.8125 c 0 + 534.59375 791.671875 554.125 755.5 567.875 712.296875 c 0 + 581.625 669.09375 588.5 619.328125 588.5 563.078125 c 256 + 588.5 506.75 581.625 456.984375 567.875 413.78125 c 0 + 554.125 370.578125 534.59375 334.40625 509.28125 305.265625 c 0 + 483.96875 276.125 453.65625 254.09375 418.03125 239.015625 c 0 + 382.5625 224.015625 343.03125 216.515625 299.59375 216.515625 c 256 +299.59375 313.46875 m 0 + 325.0625 313.46875 348.65625 317.921875 370.0625 326.90625 c 0 + 391.46875 335.8125 409.75 348.78125 424.75 365.734375 c 0 + 439.90625 382.6875 451.46875 403.390625 459.90625 427.6875 c 0 + 468.1875 451.984375 472.25 479.484375 472.25 510.265625 c 1 + 472.25 545.448242188 472.25 580.629882812 472.25 615.8125 c 1 + 472.25 646.59375 468.1875 674.09375 459.90625 698.390625 c 0 + 451.46875 722.6875 439.90625 743.390625 424.75 760.34375 c 0 + 409.75 777.296875 391.46875 790.265625 370.0625 799.171875 c 0 + 348.65625 808.15625 325.0625 812.609375 299.59375 812.609375 c 0 + 273.34375 812.609375 249.59375 808.15625 228.5 799.171875 c 0 + 207.40625 790.265625 189.28125 777.296875 174.28125 760.34375 c 0 + 159.125 743.390625 147.5625 722.6875 139.125 698.390625 c 0 + 130.84375 674.09375 126.78125 646.59375 126.78125 615.8125 c 1 + 126.78125 580.629882812 126.78125 545.448242188 126.78125 510.265625 c 1 + 126.78125 479.484375 130.84375 451.984375 139.125 427.6875 c 0 + 147.5625 403.390625 159.125 382.6875 174.28125 365.734375 c 0 + 189.28125 348.78125 207.40625 335.8125 228.5 326.90625 c 0 + 249.59375 317.921875 273.34375 313.46875 299.59375 313.46875 c 0 +760.375 228 m 1 + 760.375 451.359375 760.375 674.71875 760.375 898.078125 c 1 + 856.364257812 898.078125 952.354492188 898.078125 1048.34375 898.078125 c 1 + 1110.375 898.078125 1158.34375 879.875 1192.25 843.390625 c 0 + 1226.3125 806.90625 1243.1875 757.921875 1243.1875 696.515625 c 256 + 1243.1875 635.03125 1226.3125 586.046875 1192.25 549.5625 c 0 + 1158.34375 513.15625 1110.375 494.875 1048.34375 494.875 c 1 + 988.5 494.875 928.65625 494.875 868.8125 494.875 c 1 + 868.8125 405.916992188 868.8125 316.958007812 868.8125 228 c 1 + 832.666992188 228 796.520507812 228 760.375 228 c 1 +868.8125 589.953125 m 1 + 926.416992188 589.953125 984.020507812 589.953125 1041.625 589.953125 c 1 + 1069.125 589.953125 1090.53125 597.140625 1105.84375 611.515625 c 0 + 1121.3125 625.890625 1128.96875 646.59375 1128.96875 673.46875 c 1 + 1128.96875 688.807617188 1128.96875 704.145507812 1128.96875 719.484375 c 1 + 1128.96875 746.4375 1121.3125 767.0625 1105.84375 781.4375 c 0 + 1090.53125 795.8125 1069.125 803.078125 1041.625 803.078125 c 1 + 984.020507812 803.078125 926.416992188 803.078125 868.8125 803.078125 c 1 + 868.8125 732.036132812 868.8125 660.995117188 868.8125 589.953125 c 1 +1400.375 228 m 1 + 1400.375 451.359375 1400.375 674.71875 1400.375 898.078125 c 1 + 1436.52050781 898.078125 1472.66699219 898.078125 1508.8125 898.078125 c 1 + 1508.8125 706.723632812 1508.8125 515.370117188 1508.8125 324.015625 c 1 + 1599.69824219 324.015625 1690.58300781 324.015625 1781.46875 324.015625 c 1 + 1781.46875 292.010742188 1781.46875 260.004882812 1781.46875 228 c 1 + 1654.4375 228 1527.40625 228 1400.375 228 c 1 +EndSplineSet +EndChar + +StartChar: uniE10F +Encoding: 57615 57615 16 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 228 96.0156<742.719 983.085 1340.88 1585.94> 519.875 95.9375<182.719 458.188 1468.24 1586.52> 802.062 96.0156<182.719 492.719 742.719 983.085 1378.58 1614.18> +VStem: 74.2812 108.438<228 519.875 615.812 802.062> 634.281 108.438<324.016 802.062> 1038.34 116.25<379.419 746.659> 1250.22 107.5<656.387 792.68> 1610.22 107.5<339.565 486.758> +DStem2: 1464.28 629.25 1446 526.594 0.978916 -0.204262<-84.3745 149.704> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 288 96.0156<742.719 983.085 1340.88 1585.94> 579.875 95.9375<182.719 458.188 1468.24 1586.52> 862.062 96.0156<182.719 492.719 742.719 983.085 1378.58 1614.18> +VStem: 74.2812 108.438<288 579.875 675.812 862.062> 634.281 108.438<384.016 862.062> 1038.34 116.25<439.419 806.659> 1250.22 107.5<716.387 852.68> 1610.22 107.5<399.565 546.758> +DStem2: 1464.28 689.25 1446 586.594 0.978916 -0.204262<-84.3745 149.704> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +74.28125 228 m 1 + 74.28125 451.359375 74.28125 674.71875 74.28125 898.078125 c 1 + 213.760742188 898.078125 353.239257812 898.078125 492.71875 898.078125 c 1 + 492.71875 866.073242188 492.71875 834.067382812 492.71875 802.0625 c 1 + 389.385742188 802.0625 286.051757812 802.0625 182.71875 802.0625 c 1 + 182.71875 739.979492188 182.71875 677.895507812 182.71875 615.8125 c 1 + 274.541992188 615.8125 366.364257812 615.8125 458.1875 615.8125 c 1 + 458.1875 583.833007812 458.1875 551.854492188 458.1875 519.875 c 1 + 366.364257812 519.875 274.541992188 519.875 182.71875 519.875 c 1 + 182.71875 422.583007812 182.71875 325.291992188 182.71875 228 c 1 + 146.573242188 228 110.426757812 228 74.28125 228 c 1 +634.28125 898.078125 m 1 + 713.291992188 898.078125 792.301757812 898.078125 871.3125 898.078125 c 1 + 914.28125 898.078125 953.03125 891.046875 988.03125 876.984375 c 0 + 1022.875 862.84375 1052.5625 841.90625 1077.25 814.09375 c 0 + 1101.9375 786.203125 1121 751.359375 1134.4375 709.40625 c 0 + 1147.875 667.53125 1154.59375 618.703125 1154.59375 563.078125 c 256 + 1154.59375 507.375 1147.875 458.546875 1134.4375 416.671875 c 0 + 1121 374.71875 1101.9375 339.875 1077.25 311.984375 c 0 + 1052.5625 284.171875 1022.875 263.234375 988.03125 249.09375 c 0 + 953.03125 235.03125 914.28125 228 871.3125 228 c 1 + 792.301757812 228 713.291992188 228 634.28125 228 c 1 + 634.28125 451.359375 634.28125 674.71875 634.28125 898.078125 c 1 +871.3125 324.015625 m 1 + 921.3125 324.015625 961.625 339.71875 992.25 371.046875 c 0 + 1023.03125 402.375 1038.34375 448.46875 1038.34375 509.25 c 1 + 1038.34375 545.109375 1038.34375 580.96875 1038.34375 616.828125 c 1 + 1038.34375 677.609375 1023.03125 723.703125 992.25 755.03125 c 0 + 961.625 786.4375 921.3125 802.0625 871.3125 802.0625 c 1 + 828.448242188 802.0625 785.583007812 802.0625 742.71875 802.0625 c 1 + 742.71875 642.713867188 742.71875 483.364257812 742.71875 324.015625 c 1 + 785.583007812 324.015625 828.448242188 324.015625 871.3125 324.015625 c 1 +1474.90625 216.515625 m 0 + 1418.5 216.515625 1370.6875 226.75 1331.3125 247.21875 c 0 + 1291.9375 267.6875 1258.1875 295.1875 1230.0625 329.796875 c 1 + 1255.01074219 353.15625 1279.95800781 376.515625 1304.90625 399.875 c 1 + 1328.65625 371.046875 1354.75 349.25 1383.1875 334.5625 c 0 + 1411.625 319.875 1444.125 312.453125 1480.6875 312.453125 c 0 + 1523.5 312.453125 1555.84375 322.0625 1577.5625 341.28125 c 0 + 1599.28125 360.5 1610.21875 386.4375 1610.21875 419.015625 c 0 + 1610.21875 445.265625 1602.5625 466.046875 1587.25 481.4375 c 0 + 1571.78125 496.828125 1544.59375 508.3125 1505.53125 515.96875 c 1 + 1485.6875 519.510742188 1465.84375 523.051757812 1446 526.59375 c 1 + 1380.84375 538.703125 1331.78125 560.1875 1299.125 590.890625 c 0 + 1266.46875 621.59375 1250.21875 663.859375 1250.21875 717.609375 c 0 + 1250.21875 747.0625 1255.84375 773.78125 1267.09375 797.765625 c 0 + 1278.1875 821.75 1293.96875 841.90625 1314.125 858.234375 c 0 + 1334.28125 874.5625 1358.65625 887.21875 1387.5625 896.125 c 0 + 1416.3125 905.109375 1448.65625 909.5625 1484.4375 909.5625 c 0 + 1535.0625 909.5625 1578.8125 900.8125 1616 883.234375 c 0 + 1653.03125 865.578125 1684.75 840.1875 1711 806.90625 c 1 + 1685.73925781 784.510742188 1660.47949219 762.114257812 1635.21875 739.71875 c 1 + 1617.875 762.0625 1596.78125 780.03125 1571.78125 793.46875 c 0 + 1546.9375 806.90625 1515.84375 813.625 1478.65625 813.625 c 0 + 1440.375 813.625 1410.53125 805.890625 1389.4375 790.578125 c 0 + 1368.34375 775.1875 1357.71875 752.765625 1357.71875 723.390625 c 0 + 1357.71875 695.1875 1366.3125 674.25 1383.65625 660.5 c 0 + 1401 646.75 1427.875 636.28125 1464.28125 629.25 c 1 + 1484.125 625.109375 1503.96875 620.96875 1523.8125 616.828125 c 1 + 1591 604.015625 1640.21875 582.21875 1671.15625 551.515625 c 0 + 1702.25 520.8125 1717.71875 478.546875 1717.71875 424.796875 c 0 + 1717.71875 393.46875 1712.25 364.953125 1701.46875 339.328125 c 0 + 1690.53125 313.78125 1674.75 291.828125 1653.96875 273.625 c 0 + 1633.03125 255.34375 1607.71875 241.28125 1577.5625 231.359375 c 0 + 1547.5625 221.4375 1513.1875 216.515625 1474.90625 216.515625 c 0 +EndSplineSet +EndChar + +StartChar: uniE110 +Encoding: 57616 57616 17 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 144.2 116.406<1160.36 1475.04> 515.001 112.793<1160.36 1447.48> 865.392 116.406<1160.36 1447.48> +VStem: 143.168 140.43<841.368 981.8> 716.801 136.816<844.981 981.8> 1024.81 135.547<260.606 515.001 627.794 865.392> 1475.98 142.773<654.386 838.799> 1505.96 142.871<289.11 486.498> +DStem2: 283.598 981.8 143.168 981.8 0.311738 -0.950168<0 736.986> 501.957 276.231 575.199 144.2 0.291293 0.956634<0 737.551> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 204.2 116.406<1160.36 1475.04> 575.001 112.793<1160.36 1447.48> 925.392 116.406<1160.36 1447.48> +VStem: 143.168 140.43<901.368 1041.8> 716.801 136.816<904.981 1041.8> 1024.81 135.547<320.606 575.001 687.794 925.392> 1475.98 142.773<714.386 898.799> 1505.96 142.871<349.11 546.498> +DStem2: 283.598 1041.8 143.168 1041.8 0.311738 -0.950168<0 736.986> 501.957 336.231 575.199 204.2 0.291293 0.956634<0 737.551> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +417.97265625 144.200195312 m 1xfc + 326.37109375 423.399414062 234.76953125 702.598632812 143.16796875 981.797851562 c 1 + 189.977539062 981.797851562 236.788085938 981.797851562 283.59765625 981.797851562 c 1 + 327.999023438 843.809570312 372.399414062 705.821289062 416.80078125 567.833007812 c 1 + 443.590820312 470.631835938 470.381835938 373.431640625 497.171875 276.231445312 c 1 + 498.766601562 276.231445312 500.362304688 276.231445312 501.95703125 276.231445312 c 1 + 529.170898438 373.431640625 556.383789062 470.631835938 583.59765625 567.833007812 c 1 + 627.999023438 705.821289062 672.399414062 843.809570312 716.80078125 981.797851562 c 1 + 762.40625 981.797851562 808.01171875 981.797851562 853.6171875 981.797851562 c 1 + 760.811523438 702.598632812 668.004882812 423.399414062 575.19921875 144.200195312 c 1 + 522.790039062 144.200195312 470.381835938 144.200195312 417.97265625 144.200195312 c 1xfc +1024.80859375 981.797851562 m 1 + 1148.40917969 981.797851562 1272.00878906 981.797851562 1395.609375 981.797851562 c 1 + 1465.140625 981.797851562 1519.828125 962.168945312 1559.37890625 923.008789062 c 0 + 1599.02734375 883.848632812 1618.75390625 831.407226562 1618.75390625 765.782226562 c 0xfe + 1618.75390625 734.629882812 1614.359375 707.969726562 1605.5703125 685.997070312 c 0 + 1596.78125 664.024414062 1585.55078125 645.958007812 1571.9765625 631.993164062 c 0 + 1558.40234375 618.028320312 1542.77734375 607.579101562 1525.19921875 600.840820312 c 0 + 1507.62109375 594.004882812 1490.43359375 589.805664062 1473.5390625 588.243164062 c 1 + 1473.5390625 585.833984375 1473.5390625 583.424804688 1473.5390625 581.016601562 c 1 + 1490.43359375 580.235351562 1508.98828125 576.231445312 1529.3984375 569.004882812 c 0 + 1549.80859375 561.778320312 1568.75390625 550.352539062 1586.4296875 534.825195312 c 0 + 1604.0078125 519.200195312 1618.75390625 499.180664062 1630.765625 474.766601562 c 0 + 1642.77734375 450.352539062 1648.83203125 420.567382812 1648.83203125 385.411132812 c 0xfd + 1648.83203125 351.817382812 1643.36328125 320.176757812 1632.62109375 290.586914062 c 0 + 1621.78125 260.997070312 1606.7421875 235.411132812 1587.6015625 213.829101562 c 0 + 1568.36328125 192.247070312 1545.609375 175.157226562 1519.14453125 162.754882812 c 0 + 1492.77734375 150.352539062 1463.96875 144.200195312 1432.81640625 144.200195312 c 1 + 1296.81347656 144.200195312 1160.81152344 144.200195312 1024.80859375 144.200195312 c 1 + 1024.80859375 423.399414062 1024.80859375 702.598632812 1024.80859375 981.797851562 c 1 +1160.35546875 260.606445312 m 1 + 1237.95996094 260.606445312 1315.56347656 260.606445312 1393.16796875 260.606445312 c 1 + 1428.421875 260.606445312 1455.9609375 269.786132812 1475.98046875 288.243164062 c 0xfe + 1496 306.602539062 1505.9609375 332.969726562 1505.9609375 367.442382812 c 1 + 1505.9609375 381.016601562 1505.9609375 394.590820312 1505.9609375 408.165039062 c 1xfd + 1505.9609375 442.637695312 1496 469.004882812 1475.98046875 487.364257812 c 0 + 1455.9609375 505.821289062 1428.421875 515.000976562 1393.16796875 515.000976562 c 1 + 1315.56347656 515.000976562 1237.95996094 515.000976562 1160.35546875 515.000976562 c 1 + 1160.35546875 430.202148438 1160.35546875 345.404296875 1160.35546875 260.606445312 c 1 +1160.35546875 627.793945312 m 1 + 1230.375 627.793945312 1300.39453125 627.793945312 1370.4140625 627.793945312 c 1 + 1404.0078125 627.793945312 1429.984375 636.387695312 1448.34375 653.575195312 c 0 + 1466.80078125 670.762695312 1475.98046875 695.372070312 1475.98046875 727.403320312 c 1 + 1475.98046875 740.196289062 1475.98046875 752.989257812 1475.98046875 765.782226562 c 1 + 1475.98046875 797.813476562 1466.80078125 822.422851562 1448.34375 839.610351562 c 0 + 1429.984375 856.797851562 1404.0078125 865.391601562 1370.4140625 865.391601562 c 1 + 1300.39453125 865.391601562 1230.375 865.391601562 1160.35546875 865.391601562 c 1 + 1160.35546875 786.192382812 1160.35546875 706.993164062 1160.35546875 627.793945312 c 1 +EndSplineSet +EndChar + +StartChar: uniE111 +Encoding: 57617 57617 18 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: -202.66 88.2812<529.736 717.81 1048.08 1247.08> 111.246 92.1094<1077.25 1236.62> 144.84 87.3438<550.762 718.015> 399.215 91.1719<1056.64 1244.29> 674.84 90.2344<1027.95 1216.16 1322.72 1485.92> 1266.17 78.75<1171.98 1216.16> +VStem: 306.078 103.672<674.84 1187.5> 387.641 112.344<-82.2222 112.609> 722.719 103.672<832.262 1344.92> 747.641 111.406<-82.2222 112.609> 1216.16 106.562<765.074 1266.17> 1267.33 114.219<230.593 373.991> 1280.77 112.344<-81.2704 83.523> +DStem2: 645.922 974.37 486.547 1045.39 0.508638 -0.860981<-299.653 157.446> 986.703 1159.61 1052.95 1100.15 0.683543 0.72991<1.41729 229.335> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: -142.66 88.2812<529.736 717.81 1048.08 1247.08> 171.246 92.1094<1077.25 1236.62> 204.84 87.3438<550.762 718.015> 459.215 91.1719<1056.64 1244.29> 734.84 90.2344<1027.95 1216.16 1322.72 1485.92> 1326.17 78.75<1171.98 1216.16> +VStem: 306.078 103.672<734.84 1247.5> 387.641 112.344<-22.2222 172.609> 722.719 103.672<892.262 1404.92> 747.641 111.406<-22.2222 172.609> 1216.16 106.562<825.074 1326.17> 1267.33 114.219<290.593 433.991> 1280.77 112.344<-21.2704 143.523> +DStem2: 645.922 1034.37 486.547 1105.39 0.508638 -0.860981<-299.653 157.446> 986.703 1219.61 1052.95 1160.15 0.683543 0.72991<1.41729 229.335> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +623.8125 -202.66015625 m 0xbd40 + 586.703125 -202.66015625 553.578125 -196.64453125 524.4375 -184.45703125 c 0 + 495.296875 -172.26953125 470.6875 -154.84765625 450.53125 -132.11328125 c 0 + 430.375 -109.37890625 414.828125 -82.03515625 403.96875 -50.08203125 c 0 + 393.109375 -18.05078125 387.640625 18.12109375 387.640625 58.43359375 c 0xbd40 + 387.640625 107.02734375 394.984375 152.80859375 409.75 195.69921875 c 0xbe + 424.4375 238.58984375 443.34375 277.96484375 466.390625 313.74609375 c 0 + 489.4375 349.60546875 515.140625 381.48046875 543.65625 409.29296875 c 0 + 572.09375 437.10546875 600.140625 460.30859375 627.640625 478.90234375 c 1 + 675.635742188 478.90234375 723.629882812 478.90234375 771.625 478.90234375 c 1 + 733.890625 451.40234375 699.984375 424.83984375 669.90625 399.21484375 c 0 + 639.828125 373.58984375 613.578125 347.41796875 591.15625 320.54296875 c 0 + 568.734375 293.58984375 550.0625 265.15234375 534.984375 235.07421875 c 0 + 519.984375 204.99609375 508.265625 172.02734375 499.984375 136.16796875 c 1 + 502.223632812 135.54296875 504.463867188 134.91796875 506.703125 134.29296875 c 1 + 513.734375 147.73046875 521.859375 160.30859375 531.15625 172.18359375 c 0 + 540.453125 184.05859375 551.3125 194.44921875 563.8125 203.35546875 c 0xdd + 576.3125 212.33984375 590.53125 219.37109375 606.546875 224.52734375 c 0 + 622.5625 229.60546875 641.078125 232.18359375 662.171875 232.18359375 c 0 + 690.375 232.18359375 716.46875 227.41796875 740.453125 217.80859375 c 0 + 764.4375 208.19921875 785.21875 194.29296875 802.875 176.01171875 c 0 + 820.453125 157.80859375 834.203125 135.85546875 844.125 110.23046875 c 0 + 854.046875 84.68359375 859.046875 56.16796875 859.046875 24.83984375 c 0 + 859.046875 -9.06640625 853.421875 -40.00390625 842.171875 -67.81640625 c 0 + 831 -95.62890625 815.140625 -119.45703125 794.671875 -139.30078125 c 0 + 774.203125 -159.14453125 749.4375 -174.69140625 720.296875 -185.86328125 c 0 + 691.15625 -197.11328125 659.046875 -202.66015625 623.8125 -202.66015625 c 0xbd40 +623.8125 -114.37890625 m 256 + 662.875 -114.37890625 693.265625 -103.98828125 714.984375 -83.20703125 c 0 + 736.78125 -62.34765625 747.640625 -31.80078125 747.640625 8.51171875 c 1 + 747.640625 12.9912109375 747.640625 17.470703125 747.640625 21.94921875 c 1 + 747.640625 62.26171875 736.78125 92.80859375 714.984375 113.58984375 c 0 + 693.265625 134.44921875 662.875 144.83984375 623.8125 144.83984375 c 256 + 584.75 144.83984375 554.359375 134.44921875 532.640625 113.58984375 c 0 + 510.84375 92.80859375 499.984375 62.26171875 499.984375 21.94921875 c 1 + 499.984375 17.470703125 499.984375 12.9912109375 499.984375 8.51171875 c 1 + 499.984375 -31.80078125 510.84375 -62.34765625 532.640625 -83.20703125 c 0 + 554.359375 -103.98828125 584.75 -114.37890625 623.8125 -114.37890625 c 256 +1145.375 203.35546875 m 1xdc08 + 1187.015625 203.35546875 1217.71875 212.18359375 1237.5625 229.76171875 c 0 + 1257.40625 247.41796875 1267.328125 269.918945312 1267.328125 297.49609375 c 1 + 1267.328125 299.736328125 1267.328125 301.975585938 1267.328125 304.21484375 c 1 + 1267.328125 334.918945312 1257.71875 358.43359375 1238.5 374.76171875 c 0 + 1219.359375 391.08984375 1193.421875 399.21484375 1160.765625 399.21484375 c 0 + 1128.734375 399.21484375 1101.546875 392.02734375 1079.203125 377.65234375 c 0 + 1056.78125 363.19921875 1037.875 343.19921875 1022.5625 317.65234375 c 1 + 998.551757812 338.43359375 974.541992188 359.21484375 950.53125 379.99609375 c 1 + 960.765625 394.76171875 972.328125 408.82421875 985.0625 422.26171875 c 0 + 997.875 435.69921875 1012.953125 447.41796875 1030.21875 457.33984375 c 0 + 1047.484375 467.26171875 1067.015625 475.23046875 1088.734375 481.32421875 c 0 + 1110.53125 487.41796875 1135.453125 490.38671875 1163.65625 490.38671875 c 0 + 1194.984375 490.38671875 1224.125 486.55859375 1251 478.90234375 c 0 + 1277.875 471.24609375 1300.921875 459.83984375 1320.140625 444.83984375 c 0 + 1339.359375 429.76171875 1354.359375 411.55859375 1365.21875 390.07421875 c 0 + 1376.15625 368.66796875 1381.546875 344.528320312 1381.546875 317.65234375 c 0xdc10 + 1381.546875 296.48046875 1378.1875 277.33984375 1371.46875 259.99609375 c 0 + 1364.75 242.73046875 1355.453125 227.575195312 1343.65625 214.44921875 c 0 + 1331.78125 201.325195312 1318.03125 190.622070312 1302.40625 182.26171875 c 0 + 1286.703125 173.981445312 1270.21875 167.88671875 1252.953125 164.05859375 c 1 + 1252.953125 162.444335938 1252.953125 160.830078125 1252.953125 159.21484375 c 1 + 1272.09375 155.387695312 1290.21875 149.137695312 1307.171875 140.54296875 c 0 + 1324.125 131.87109375 1339.046875 120.69921875 1351.78125 106.87109375 c 0 + 1364.59375 93.12109375 1374.671875 76.79296875 1382.015625 57.96484375 c 0 + 1389.4375 39.05859375 1393.109375 17.4970703125 1393.109375 -6.87890625 c 0 + 1393.109375 -36.33203125 1387.328125 -63.0498046875 1375.84375 -87.03515625 c 0 + 1364.28125 -111.018554688 1348.109375 -131.643554688 1327.328125 -148.91015625 c 0 + 1306.546875 -166.252929688 1281.390625 -179.456054688 1251.9375 -188.75390625 c 0 + 1222.5625 -198.049804688 1189.90625 -202.66015625 1154.046875 -202.66015625 c 0 + 1122.71875 -202.66015625 1095.140625 -199.299804688 1071.46875 -192.58203125 c 0 + 1047.796875 -185.862304688 1026.859375 -176.95703125 1008.578125 -165.70703125 c 0 + 990.375 -154.53515625 974.359375 -141.72265625 960.609375 -127.34765625 c 0 + 946.859375 -112.97265625 934.828125 -98.05078125 924.59375 -82.66015625 c 1 + 951.15625 -61.87890625 977.71875 -41.09765625 1004.28125 -20.31640625 c 1 + 1012.640625 -33.75390625 1021.390625 -46.01953125 1030.6875 -57.26953125 c 0 + 1039.984375 -68.44140625 1050.53125 -78.05078125 1062.40625 -86.01953125 c 0 + 1074.203125 -94.0654296875 1087.640625 -100.315429688 1102.71875 -104.76953125 c 0 + 1117.71875 -109.22265625 1134.828125 -111.48828125 1154.046875 -111.48828125 c 0 + 1194.984375 -111.48828125 1226.390625 -101.72265625 1248.109375 -82.19140625 c 0 + 1269.90625 -62.66015625 1280.765625 -35.62890625 1280.765625 -1.09765625 c 1 + 1280.765625 1.142578125 1280.765625 3.3818359375 1280.765625 5.62109375 c 1 + 1280.765625 40.1533203125 1269.28125 66.40234375 1246.234375 84.37109375 c 0 + 1223.1875 102.26171875 1190.53125 111.24609375 1148.265625 111.24609375 c 1 + 1124.59375 111.24609375 1100.921875 111.24609375 1077.25 111.24609375 c 1 + 1077.25 141.94921875 1077.25 172.65234375 1077.25 203.35546875 c 1 + 1099.95800781 203.35546875 1122.66699219 203.35546875 1145.375 203.35546875 c 1xdc08 +486.546875 1045.38671875 m 1 + 461.911132812 1092.75683594 437.276367188 1140.12695312 412.640625 1187.49609375 c 1 + 411.676757812 1187.49609375 410.713867188 1187.49609375 409.75 1187.49609375 c 1 + 409.75 1016.61132812 409.75 845.725585938 409.75 674.83984375 c 1 + 375.192382812 674.83984375 340.635742188 674.83984375 306.078125 674.83984375 c 1 + 306.078125 898.19921875 306.078125 1121.55859375 306.078125 1344.91796875 c 1 + 346.390625 1344.91796875 386.703125 1344.91796875 427.015625 1344.91796875 c 1 + 499.984375 1221.40234375 572.953125 1097.88671875 645.921875 974.37109375 c 1 + 670.557617188 927.001953125 695.192382812 879.631835938 719.828125 832.26171875 c 1 + 720.791992188 832.26171875 721.754882812 832.26171875 722.71875 832.26171875 c 1 + 722.71875 1003.14746094 722.71875 1174.03320312 722.71875 1344.91796875 c 1 + 757.276367188 1344.91796875 791.833007812 1344.91796875 826.390625 1344.91796875 c 1 + 826.390625 1121.55859375 826.390625 898.19921875 826.390625 674.83984375 c 1x9e80 + 786.078125 674.83984375 745.765625 674.83984375 705.453125 674.83984375 c 1 + 632.484375 798.35546875 559.515625 921.87109375 486.546875 1045.38671875 c 1 +1027.953125 674.83984375 m 1 + 1027.953125 704.91796875 1027.953125 734.99609375 1027.953125 765.07421875 c 1 + 1090.6875 765.07421875 1153.421875 765.07421875 1216.15625 765.07421875 c 1 + 1216.15625 932.10546875 1216.15625 1099.13671875 1216.15625 1266.16796875 c 1 + 1213.578125 1266.16796875 1211 1266.16796875 1208.421875 1266.16796875 c 1 + 1156.59863281 1210.83007812 1104.77636719 1155.49121094 1052.953125 1100.15234375 c 1 + 1030.87011719 1119.97070312 1008.78613281 1139.78808594 986.703125 1159.60546875 c 1 + 1043.65625 1221.37695312 1100.609375 1283.14746094 1157.5625 1344.91796875 c 1 + 1212.61425781 1344.91796875 1267.66699219 1344.91796875 1322.71875 1344.91796875 c 1 + 1322.71875 1151.63671875 1322.71875 958.35546875 1322.71875 765.07421875 c 1x9c20 + 1377.12011719 765.07421875 1431.52050781 765.07421875 1485.921875 765.07421875 c 1 + 1485.921875 734.99609375 1485.921875 704.91796875 1485.921875 674.83984375 c 1 + 1333.265625 674.83984375 1180.609375 674.83984375 1027.953125 674.83984375 c 1 +EndSplineSet +EndChar + +StartChar: uniE112 +Encoding: 57618 57618 19 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 216.516 96.9531<151.634 379.752 774.678 990.363 1414.68 1630.36> 812.609 96.9531<178.808 399.181 774.597 989.432 1414.6 1629.43> +VStem: 47.4062 107.5<656.387 792.68> 407.406 107.5<339.565 486.758> 601.625 115.156<375.807 753.111> 1241.62 115.156<375.807 753.111> +DStem2: 261.469 629.25 243.188 526.594 0.978916 -0.204262<-84.3815 149.558> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 276.516 96.9531<151.634 379.752 774.678 990.363 1414.68 1630.36> 872.609 96.9531<178.808 399.181 774.597 989.432 1414.6 1629.43> +VStem: 47.4062 107.5<716.387 852.68> 407.406 107.5<399.565 546.758> 601.625 115.156<435.807 813.111> 1241.62 115.156<435.807 813.111> +DStem2: 261.469 689.25 243.188 586.594 0.978916 -0.204262<-84.3815 149.558> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +271.9375 216.515625 m 0 + 215.6875 216.515625 167.875 226.75 128.5 247.21875 c 0 + 89.125 267.6875 55.375 295.1875 27.25 329.796875 c 1 + 52.1982421875 353.15625 77.1455078125 376.515625 102.09375 399.875 c 1 + 125.6875 371.046875 151.78125 349.25 180.21875 334.5625 c 0 + 208.8125 319.875 241.3125 312.453125 277.71875 312.453125 c 0 + 320.6875 312.453125 352.875 322.0625 374.75 341.28125 c 0 + 396.46875 360.5 407.40625 386.4375 407.40625 419.015625 c 0 + 407.40625 445.265625 399.59375 466.046875 384.28125 481.4375 c 0 + 368.96875 496.828125 341.78125 508.3125 302.71875 515.96875 c 1 + 282.875 519.510742188 263.03125 523.051757812 243.1875 526.59375 c 1 + 177.875 538.703125 128.96875 560.1875 96.3125 590.890625 c 0 + 63.65625 621.59375 47.40625 663.859375 47.40625 717.609375 c 0 + 47.40625 747.0625 52.875 773.78125 64.125 797.765625 c 0 + 75.375 821.75 91 841.90625 111.15625 858.234375 c 0 + 131.3125 874.5625 155.84375 887.21875 184.59375 896.125 c 0 + 213.34375 905.109375 245.6875 909.5625 281.625 909.5625 c 0 + 332.09375 909.5625 376 900.8125 413.03125 883.234375 c 0 + 450.21875 865.578125 481.9375 840.1875 508.1875 806.90625 c 1 + 482.875 784.510742188 457.5625 762.114257812 432.25 739.71875 c 1 + 415.0625 762.0625 393.96875 780.03125 368.96875 793.46875 c 0 + 343.96875 806.90625 312.875 813.625 275.84375 813.625 c 0 + 237.40625 813.625 207.71875 805.890625 186.46875 790.578125 c 0 + 165.375 775.1875 154.90625 752.765625 154.90625 723.390625 c 0 + 154.90625 695.1875 163.5 674.25 180.84375 660.5 c 0 + 198.03125 646.75 224.90625 636.28125 261.46875 629.25 c 1 + 281.3125 625.109375 301.15625 620.96875 321 616.828125 c 1 + 388.1875 604.015625 437.25 582.21875 468.34375 551.515625 c 0 + 499.28125 520.8125 514.90625 478.546875 514.90625 424.796875 c 0 + 514.90625 393.46875 509.4375 364.953125 498.5 339.328125 c 0 + 487.71875 313.78125 471.78125 291.828125 451 273.625 c 0 + 430.21875 255.34375 404.75 241.28125 374.75 231.359375 c 0 + 344.59375 221.4375 310.375 216.515625 271.9375 216.515625 c 0 +882.875 216.515625 m 0 + 795.21875 216.515625 726.3125 246.046875 676.46875 305.265625 c 0 + 626.46875 364.484375 601.625 450.421875 601.625 563.078125 c 0 + 601.625 619.328125 608.03125 668.9375 620.84375 711.828125 c 0 + 633.5 754.71875 652.09375 790.890625 676.46875 820.34375 c 0 + 700.84375 849.796875 730.375 871.984375 765.21875 887.0625 c 0 + 800.0625 902.0625 839.28125 909.5625 882.875 909.5625 c 0 + 941.15625 909.5625 989.90625 896.828125 1029.28125 871.203125 c 0 + 1068.65625 845.578125 1099.4375 807.84375 1121.9375 757.921875 c 1 + 1091.52050781 741.28125 1061.10449219 724.640625 1030.6875 708 c 1 + 1019.125 740.03125 1001.46875 765.421875 977.40625 784.328125 c 0 + 953.34375 803.234375 921.9375 812.609375 882.875 812.609375 c 0 + 831 812.609375 790.375 795.03125 761 759.875 c 0 + 731.46875 724.640625 716.78125 675.96875 716.78125 613.9375 c 1 + 716.78125 580.004882812 716.78125 546.073242188 716.78125 512.140625 c 1 + 716.78125 450.109375 731.46875 401.4375 761 366.203125 c 0 + 790.375 331.046875 831 313.46875 882.875 313.46875 c 0 + 923.1875 313.46875 956 323.859375 981.3125 344.640625 c 0 + 1006.46875 365.421875 1025.21875 392.140625 1037.40625 424.796875 c 1 + 1066.52050781 407.192382812 1095.63574219 389.588867188 1124.75 371.984375 c 1 + 1102.40625 323.390625 1071 285.265625 1030.6875 257.765625 c 0 + 990.375 230.265625 941.15625 216.515625 882.875 216.515625 c 0 +1522.875 216.515625 m 0 + 1435.21875 216.515625 1366.3125 246.046875 1316.46875 305.265625 c 0 + 1266.46875 364.484375 1241.625 450.421875 1241.625 563.078125 c 0 + 1241.625 619.328125 1248.03125 668.9375 1260.84375 711.828125 c 0 + 1273.5 754.71875 1292.09375 790.890625 1316.46875 820.34375 c 0 + 1340.84375 849.796875 1370.375 871.984375 1405.21875 887.0625 c 0 + 1440.0625 902.0625 1479.28125 909.5625 1522.875 909.5625 c 0 + 1581.15625 909.5625 1629.90625 896.828125 1669.28125 871.203125 c 0 + 1708.65625 845.578125 1739.4375 807.84375 1761.9375 757.921875 c 1 + 1731.52050781 741.28125 1701.10449219 724.640625 1670.6875 708 c 1 + 1659.125 740.03125 1641.46875 765.421875 1617.40625 784.328125 c 0 + 1593.34375 803.234375 1561.9375 812.609375 1522.875 812.609375 c 0 + 1471 812.609375 1430.375 795.03125 1401 759.875 c 0 + 1371.46875 724.640625 1356.78125 675.96875 1356.78125 613.9375 c 1 + 1356.78125 580.004882812 1356.78125 546.073242188 1356.78125 512.140625 c 1 + 1356.78125 450.109375 1371.46875 401.4375 1401 366.203125 c 0 + 1430.375 331.046875 1471 313.46875 1522.875 313.46875 c 0 + 1563.1875 313.46875 1596 323.859375 1621.3125 344.640625 c 0 + 1646.46875 365.421875 1665.21875 392.140625 1677.40625 424.796875 c 1 + 1706.52050781 407.192382812 1735.63574219 389.588867188 1764.75 371.984375 c 1 + 1742.40625 323.390625 1711 285.265625 1670.6875 257.765625 c 0 + 1630.375 230.265625 1581.15625 216.515625 1522.875 216.515625 c 0 +EndSplineSet +EndChar + +StartChar: uniE113 +Encoding: 57619 57619 20 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 228 89.2969<228.172 451.245 1380.3 1712.48> 498.703 90.2344<848.188 1057.36> 808.781 89.2969<228.172 451.245 848.188 1057.36 1280.45 1586.7> +VStem: 79.5156 109.453<354.775 771.303> 490.375 109.453<354.775 771.303> 746.391 101.797<228 498.703 588.938 807.844> 1076.62 108.516<608.279 788.506> +DStem2: 1265.14 319.172 1380.3 317.297 0.548962 0.835847<61.6492 585.764> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 288 89.2969<228.172 451.245 1380.3 1712.48> 558.703 90.2344<848.188 1057.36> 868.781 89.2969<228.172 451.245 848.188 1057.36 1280.45 1586.7> +VStem: 79.5156 109.453<414.775 831.303> 490.375 109.453<414.775 831.303> 746.391 101.797<288 558.703 648.938 867.844> 1076.62 108.516<668.279 848.506> +DStem2: 1265.14 379.172 1380.3 377.297 0.548962 0.835847<61.6492 585.764> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +339.671875 216.515625 m 256 + 299.359375 216.515625 263.1875 223.078125 231.234375 236.125 c 0 + 199.203125 249.25 171.859375 269.953125 149.125 298.078125 c 0 + 126.390625 326.203125 109.125 362.21875 97.25 406.046875 c 0 + 85.453125 449.953125 79.515625 502.21875 79.515625 563.078125 c 256 + 79.515625 623.859375 85.453125 676.125 97.25 720.03125 c 0 + 109.125 763.859375 126.390625 799.875 149.125 828 c 0 + 171.859375 856.125 199.203125 876.828125 231.234375 889.953125 c 0 + 263.1875 903.078125 299.359375 909.5625 339.671875 909.5625 c 256 + 379.984375 909.5625 416.15625 903.078125 448.1875 889.953125 c 0 + 480.140625 876.828125 507.5625 856.125 530.21875 828 c 0 + 552.953125 799.875 570.21875 763.859375 582.09375 720.03125 c 0 + 593.890625 676.125 599.828125 623.859375 599.828125 563.078125 c 256 + 599.828125 502.21875 593.890625 449.953125 582.09375 406.046875 c 0 + 570.21875 362.21875 552.953125 326.203125 530.21875 298.078125 c 0 + 507.5625 269.953125 480.140625 249.25 448.1875 236.125 c 0 + 416.15625 223.078125 379.984375 216.515625 339.671875 216.515625 c 256 +339.671875 306.75 m 256 + 387.71875 306.75 424.828125 322.21875 451.078125 353.3125 c 0 + 477.25 384.328125 490.375 427.375 490.375 482.375 c 1 + 490.375 536.151367188 490.375 589.926757812 490.375 643.703125 c 1 + 490.375 698.703125 477.25 741.75 451.078125 772.765625 c 0 + 424.828125 803.859375 387.71875 819.328125 339.671875 819.328125 c 256 + 291.703125 819.328125 254.59375 803.859375 228.34375 772.765625 c 0 + 202.09375 741.75 188.96875 698.703125 188.96875 643.703125 c 1 + 188.96875 589.926757812 188.96875 536.151367188 188.96875 482.375 c 1 + 188.96875 427.375 202.09375 384.328125 228.34375 353.3125 c 0 + 254.59375 322.21875 291.703125 306.75 339.671875 306.75 c 256 +746.390625 228 m 1 + 746.390625 451.359375 746.390625 674.71875 746.390625 898.078125 c 1 + 834.723632812 898.078125 923.057617188 898.078125 1011.390625 898.078125 c 1 + 1068.96875 898.078125 1112.328125 880.96875 1141.46875 846.75 c 0 + 1170.53125 812.453125 1185.140625 763.078125 1185.140625 698.390625 c 256 + 1185.140625 633.78125 1170.53125 584.328125 1141.46875 550.109375 c 0 + 1112.328125 515.8125 1068.96875 498.703125 1011.390625 498.703125 c 1 + 956.989257812 498.703125 902.588867188 498.703125 848.1875 498.703125 c 1 + 848.1875 408.46875 848.1875 318.234375 848.1875 228 c 1 + 814.254882812 228 780.323242188 228 746.390625 228 c 1 +848.1875 588.9375 m 1 + 899.698242188 588.9375 951.208007812 588.9375 1002.71875 588.9375 c 1 + 1027.015625 588.9375 1045.453125 595.1875 1057.953125 607.6875 c 0 + 1070.375 620.1875 1076.625 640.1875 1076.625 667.6875 c 1 + 1076.625 688.15625 1076.625 708.625 1076.625 729.09375 c 1 + 1076.625 756.671875 1070.375 776.671875 1057.953125 789.09375 c 0 + 1045.453125 801.59375 1027.015625 807.84375 1002.71875 807.84375 c 1 + 951.208007812 807.84375 899.698242188 807.84375 848.1875 807.84375 c 1 + 848.1875 734.875 848.1875 661.90625 848.1875 588.9375 c 1 +1712.484375 228 m 1 + 1563.37011719 228 1414.25488281 228 1265.140625 228 c 1 + 1265.140625 258.390625 1265.140625 288.78125 1265.140625 319.171875 c 1 + 1372.328125 482.375 1479.515625 645.578125 1586.703125 808.78125 c 1 + 1484.62011719 808.78125 1382.53613281 808.78125 1280.453125 808.78125 c 1 + 1280.453125 838.546875 1280.453125 868.3125 1280.453125 898.078125 c 1 + 1420.94824219 898.078125 1561.44238281 898.078125 1701.9375 898.078125 c 1 + 1701.9375 867.6875 1701.9375 837.296875 1701.9375 806.90625 c 1 + 1594.72363281 643.703125 1487.51074219 480.5 1380.296875 317.296875 c 1 + 1491.02636719 317.296875 1601.75488281 317.296875 1712.484375 317.296875 c 1 + 1712.484375 287.53125 1712.484375 257.765625 1712.484375 228 c 1 +EndSplineSet +EndChar + +StartChar: uniE114 +Encoding: 57620 57620 21 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: -202.516 96.0156<794.758 1115.46> 89.359 95.9375<794.758 1085.7> 371.547 96.0156<794.758 1115.46> 652.016 96.9531<1094.81 1318.51> 930.375 95.0781<415.93 652.317> 1238.58 95<415.93 652.317 1084.89 1328.46> +VStem: 46.3203 108.438<-202.516 49.388 127.719 467.562> 307.492 108.438<663.5 930.375 1025.45 1238.58> 435.07 126.719<340.844 467.562> 450.461 130.547<-202.516 -71.9688> 686.32 108.438<-106.5 89.359 185.297 371.547 1047.69 1216.26> 917.727 116.172<812.663 1184.42> 1379.45 116.172<812.662 1184.42> 1404.68 108.516<-202.516 124.921> +DStem2: 158.586 127.719 246.945 110.453 0.660468 0.750854<0 45.3946 144.153 437.782> 322.805 185.297 246.945 110.453 0.545149 -0.838339<21.3897 394.71> 1298.12 467.562 1174.29 467.562 0.479608 -0.877483<0 340.284> 1464.21 168.969 1513.2 63.422 0.477483 0.878641<0 339.836> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: -142.516 96.0156<794.758 1115.46> 149.359 95.9375<794.758 1085.7> 431.547 96.0156<794.758 1115.46> 712.016 96.9531<1094.81 1318.51> 990.375 95.0781<415.93 652.317> 1298.58 95<415.93 652.317 1084.89 1328.46> +VStem: 46.3203 108.438<-142.516 109.388 187.719 527.562> 307.492 108.438<723.5 990.375 1085.45 1298.58> 435.07 126.719<400.844 527.562> 450.461 130.547<-142.516 -11.9688> 686.32 108.438<-46.5 149.359 245.297 431.547 1107.69 1276.26> 917.727 116.172<872.663 1244.42> 1379.45 116.172<872.662 1244.42> 1404.68 108.516<-142.516 184.921> +DStem2: 158.586 187.719 246.945 170.453 0.660468 0.750854<0 45.3946 144.153 437.782> 322.805 245.297 246.945 170.453 0.545149 -0.838339<21.3897 394.71> 1298.12 527.562 1174.29 527.562 0.479608 -0.877483<0 340.284> 1464.21 228.969 1513.2 123.422 0.477483 0.878641<0 339.836> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +246.9453125 110.453125 m 1xff70 + 216.215820312 75.244140625 185.487304688 40.0361328125 154.7578125 4.828125 c 1 + 154.7578125 -64.287109375 154.7578125 -133.401367188 154.7578125 -202.515625 c 1 + 118.612304688 -202.515625 82.4658203125 -202.515625 46.3203125 -202.515625 c 1 + 46.3203125 20.84375 46.3203125 244.203125 46.3203125 467.5625 c 1 + 82.4658203125 467.5625 118.612304688 467.5625 154.7578125 467.5625 c 1 + 154.7578125 354.28125 154.7578125 241 154.7578125 127.71875 c 1 + 156.034179688 127.71875 157.309570312 127.71875 158.5859375 127.71875 c 1 + 190.590820312 168.369140625 222.596679688 209.020507812 254.6015625 249.671875 c 1 + 314.7578125 322.301757812 374.9140625 394.931640625 435.0703125 467.5625 c 1 + 477.309570312 467.5625 519.549804688 467.5625 561.7890625 467.5625 c 1xffb0 + 482.127929688 373.473632812 402.465820312 279.384765625 322.8046875 185.296875 c 1 + 408.872070312 56.025390625 494.940429688 -73.2451171875 581.0078125 -202.515625 c 1 + 537.4921875 -202.515625 493.9765625 -202.515625 450.4609375 -202.515625 c 1 + 382.622070312 -98.193359375 314.784179688 6.1298828125 246.9453125 110.453125 c 1xff70 +686.3203125 -202.515625 m 1 + 686.3203125 20.84375 686.3203125 244.203125 686.3203125 467.5625 c 1 + 829.3671875 467.5625 972.4140625 467.5625 1115.4609375 467.5625 c 1 + 1115.4609375 435.556640625 1115.4609375 403.551757812 1115.4609375 371.546875 c 1 + 1008.55957031 371.546875 901.659179688 371.546875 794.7578125 371.546875 c 1 + 794.7578125 309.462890625 794.7578125 247.379882812 794.7578125 185.296875 c 1 + 891.737304688 185.296875 988.715820312 185.296875 1085.6953125 185.296875 c 1 + 1085.6953125 153.317382812 1085.6953125 121.337890625 1085.6953125 89.359375 c 1 + 988.715820312 89.359375 891.737304688 89.359375 794.7578125 89.359375 c 1 + 794.7578125 24.072265625 794.7578125 -41.2138671875 794.7578125 -106.5 c 1 + 901.659179688 -106.5 1008.55957031 -106.5 1115.4609375 -106.5 c 1 + 1115.4609375 -138.505859375 1115.4609375 -170.510742188 1115.4609375 -202.515625 c 1 + 972.4140625 -202.515625 829.3671875 -202.515625 686.3203125 -202.515625 c 1 +1404.6796875 -202.515625 m 1xff34 + 1404.6796875 -114.521484375 1404.6796875 -26.5263671875 1404.6796875 61.46875 c 1 + 1327.8828125 196.833007812 1251.0859375 332.197265625 1174.2890625 467.5625 c 1 + 1215.56542969 467.5625 1256.84082031 467.5625 1298.1171875 467.5625 c 1 + 1352.51855469 368.03125 1406.91894531 268.5 1461.3203125 168.96875 c 1 + 1462.28417969 168.96875 1463.24707031 168.96875 1464.2109375 168.96875 c 1 + 1518.29980469 268.5 1572.38769531 368.03125 1626.4765625 467.5625 c 1 + 1666.1640625 467.5625 1705.8515625 467.5625 1745.5390625 467.5625 c 1 + 1668.09082031 332.848632812 1590.64355469 198.134765625 1513.1953125 63.421875 c 1 + 1513.1953125 -25.224609375 1513.1953125 -113.870117188 1513.1953125 -202.515625 c 1 + 1477.0234375 -202.515625 1440.8515625 -202.515625 1404.6796875 -202.515625 c 1xff34 +307.4921875 663.5 m 1 + 307.4921875 886.859375 307.4921875 1110.21875 307.4921875 1333.578125 c 1 + 403.481445312 1333.578125 499.471679688 1333.578125 595.4609375 1333.578125 c 1 + 657.5703125 1333.578125 705.5390625 1315.375 739.4453125 1278.890625 c 0 + 773.4296875 1242.40625 790.3828125 1193.421875 790.3828125 1132.015625 c 256 + 790.3828125 1070.53125 773.4296875 1021.546875 739.4453125 985.0625 c 0 + 705.5390625 948.65625 657.5703125 930.375 595.4609375 930.375 c 1 + 535.6171875 930.375 475.7734375 930.375 415.9296875 930.375 c 1 + 415.9296875 841.416015625 415.9296875 752.458007812 415.9296875 663.5 c 1 + 379.784179688 663.5 343.637695312 663.5 307.4921875 663.5 c 1 +415.9296875 1025.453125 m 1 + 473.534179688 1025.453125 531.137695312 1025.453125 588.7421875 1025.453125 c 1 + 616.2421875 1025.453125 637.7265625 1032.640625 653.0390625 1047.015625 c 0 + 668.4296875 1061.390625 676.0859375 1082.09375 676.0859375 1108.96875 c 1 + 676.0859375 1124.30664062 676.0859375 1139.64550781 676.0859375 1154.984375 c 1 + 676.0859375 1181.9375 668.4296875 1202.5625 653.0390625 1216.9375 c 0 + 637.7265625 1231.3125 616.2421875 1238.578125 588.7421875 1238.578125 c 1 + 531.137695312 1238.578125 473.534179688 1238.578125 415.9296875 1238.578125 c 1 + 415.9296875 1167.53613281 415.9296875 1096.49414062 415.9296875 1025.453125 c 1 +1206.7109375 652.015625 m 256 + 1163.1171875 652.015625 1123.6640625 659.515625 1088.1171875 674.515625 c 0 + 1052.5703125 689.59375 1022.1796875 711.624023438 996.9453125 740.765625 c 0 + 971.6328125 769.90625 952.1015625 806.078125 938.3515625 849.28125 c 0 + 924.6015625 892.484375 917.7265625 942.25 917.7265625 998.578125 c 256 + 917.7265625 1054.828125 924.6015625 1104.59375 938.3515625 1147.796875 c 0 + 952.1015625 1191 971.6328125 1227.171875 996.9453125 1256.3125 c 0 + 1022.1796875 1285.453125 1052.5703125 1307.48339844 1088.1171875 1322.5625 c 0 + 1123.6640625 1337.56152344 1163.1171875 1345.0625 1206.7109375 1345.0625 c 256 + 1250.2265625 1345.0625 1289.6796875 1337.5625 1325.2265625 1322.5625 c 0 + 1360.7734375 1307.48339844 1391.1640625 1285.45214844 1416.3984375 1256.3125 c 0 + 1441.7109375 1227.171875 1461.2421875 1191 1474.9921875 1147.796875 c 0 + 1488.7421875 1104.59375 1495.6171875 1054.82714844 1495.6171875 998.578125 c 256xff38 + 1495.6171875 942.25 1488.7421875 892.483398438 1474.9921875 849.28125 c 0 + 1461.2421875 806.077148438 1441.7109375 769.905273438 1416.3984375 740.765625 c 0 + 1391.1640625 711.625 1360.7734375 689.59375 1325.2265625 674.515625 c 0 + 1289.6796875 659.515625 1250.2265625 652.015625 1206.7109375 652.015625 c 256 +1206.7109375 748.96875 m 0 + 1232.2578125 748.96875 1255.7734375 753.421875 1277.2578125 762.40625 c 0 + 1298.6640625 771.3125 1316.9453125 784.28125 1331.9453125 801.234375 c 0 + 1347.0234375 818.186523438 1358.6640625 838.890625 1367.0234375 863.1875 c 0 + 1375.3046875 887.484375 1379.4453125 914.983398438 1379.4453125 945.765625 c 1 + 1379.4453125 980.947265625 1379.4453125 1016.12988281 1379.4453125 1051.3125 c 1 + 1379.4453125 1082.09375 1375.3046875 1109.59277344 1367.0234375 1133.890625 c 0 + 1358.6640625 1158.18652344 1347.0234375 1178.890625 1331.9453125 1195.84375 c 0 + 1316.9453125 1212.79589844 1298.6640625 1225.76464844 1277.2578125 1234.671875 c 0 + 1255.7734375 1243.65625 1232.2578125 1248.109375 1206.7109375 1248.109375 c 0 + 1180.4609375 1248.109375 1156.7890625 1243.65625 1135.6171875 1234.671875 c 0 + 1114.5234375 1225.765625 1096.3984375 1212.796875 1081.3984375 1195.84375 c 0 + 1066.3203125 1178.890625 1054.6796875 1158.18652344 1046.3203125 1133.890625 c 0 + 1038.0390625 1109.59277344 1033.8984375 1082.09375 1033.8984375 1051.3125 c 1 + 1033.8984375 1016.12988281 1033.8984375 980.947265625 1033.8984375 945.765625 c 1 + 1033.8984375 914.983398438 1038.0390625 887.484375 1046.3203125 863.1875 c 0 + 1054.6796875 838.890625 1066.3203125 818.186523438 1081.3984375 801.234375 c 0 + 1096.3984375 784.280273438 1114.5234375 771.311523438 1135.6171875 762.40625 c 0 + 1156.7890625 753.420898438 1180.4609375 748.96875 1206.7109375 748.96875 c 0 +EndSplineSet +EndChar + +StartChar: uniE115 +Encoding: 57621 57621 22 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 60.5 139.688<684.242 1061.86> 505.461 135.352<684.242 1028.79> 925.93 139.688<684.242 1028.79> +VStem: 521.586 162.656<200.188 505.461 640.812 925.93> 1062.99 171.328<672.723 894.019> 1098.97 171.445<234.391 471.257> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 120.5 139.688<684.242 1061.86> 565.461 135.352<684.242 1028.79> 985.93 139.688<684.242 1028.79> +VStem: 521.586 162.656<260.188 565.461 700.812 985.93> 1062.99 171.328<732.723 954.019> 1098.97 171.445<294.391 531.257> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +521.5859375 1065.6171875 m 1xf4 + 669.90625 1065.6171875 818.2265625 1065.6171875 966.546875 1065.6171875 c 1 + 1049.984375 1065.6171875 1115.609375 1042.0625 1163.0703125 995.0703125 c 0 + 1210.6484375 948.078125 1234.3203125 885.1484375 1234.3203125 806.3984375 c 0xf8 + 1234.3203125 769.015625 1229.046875 737.0234375 1218.5 710.65625 c 0 + 1207.953125 684.2890625 1194.4765625 662.609375 1178.1875 645.8515625 c 0 + 1161.8984375 629.09375 1143.1484375 616.5546875 1122.0546875 608.46875 c 0 + 1100.9609375 600.265625 1080.3359375 595.2265625 1060.0625 593.3515625 c 1 + 1060.0625 590.4609375 1060.0625 587.5703125 1060.0625 584.6796875 c 1 + 1080.3359375 583.7421875 1102.6015625 578.9375 1127.09375 570.265625 c 0 + 1151.5859375 561.59375 1174.3203125 547.8828125 1195.53125 529.25 c 0 + 1216.625 510.5 1234.3203125 486.4765625 1248.734375 457.1796875 c 0 + 1263.1484375 427.8828125 1270.4140625 392.140625 1270.4140625 349.953125 c 0 + 1270.4140625 309.640625 1263.8515625 271.671875 1250.9609375 236.1640625 c 0 + 1237.953125 200.65625 1219.90625 169.953125 1196.9375 144.0546875 c 0 + 1173.8515625 118.15625 1146.546875 97.6484375 1114.7890625 82.765625 c 0 + 1083.1484375 67.8828125 1048.578125 60.5 1011.1953125 60.5 c 1 + 847.9921875 60.5 684.7890625 60.5 521.5859375 60.5 c 1 + 521.5859375 395.5390625 521.5859375 730.578125 521.5859375 1065.6171875 c 1xf4 +684.2421875 200.1875 m 1 + 777.3671875 200.1875 870.4921875 200.1875 963.6171875 200.1875 c 1 + 1005.921875 200.1875 1038.96875 211.203125 1062.9921875 233.3515625 c 0xf8 + 1087.015625 255.3828125 1098.96875 287.0234375 1098.96875 328.390625 c 1 + 1098.96875 344.6796875 1098.96875 360.96875 1098.96875 377.2578125 c 1xf4 + 1098.96875 418.625 1087.015625 450.265625 1062.9921875 472.296875 c 0 + 1038.96875 494.4453125 1005.921875 505.4609375 963.6171875 505.4609375 c 1 + 870.4921875 505.4609375 777.3671875 505.4609375 684.2421875 505.4609375 c 1 + 684.2421875 403.703125 684.2421875 301.9453125 684.2421875 200.1875 c 1 +684.2421875 640.8125 m 1 + 768.265625 640.8125 852.2890625 640.8125 936.3125 640.8125 c 1 + 976.625 640.8125 1007.796875 651.125 1029.828125 671.75 c 0 + 1051.9765625 692.375 1062.9921875 721.90625 1062.9921875 760.34375 c 1 + 1062.9921875 775.6953125 1062.9921875 791.046875 1062.9921875 806.3984375 c 1 + 1062.9921875 844.8359375 1051.9765625 874.3671875 1029.828125 894.9921875 c 0 + 1007.796875 915.6171875 976.625 925.9296875 936.3125 925.9296875 c 1 + 852.2890625 925.9296875 768.265625 925.9296875 684.2421875 925.9296875 c 1 + 684.2421875 830.890625 684.2421875 735.8515625 684.2421875 640.8125 c 1 +EndSplineSet +EndChar + +StartChar: uniE116 +Encoding: 57622 57622 23 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: -21.1094 93.125<474.359 672.172> 367.719 99.8438<559.262 588.09> 652.016 95.9375<328.301 554.086> 663.5 124.766<964.387 984.548 1352.16 1364.12> 1249.12 95.9375<353.87 572.282> +VStem: 222.406 107.5<1091.89 1228.18> 279.516 110.312<-202.516 -92.2031> 582.406 107.5<775.065 922.258> 746.859 110.391<1223.19 1333.58> 759.516 113.281<-202.516 -89.2344> 980.922 103.75<-202.516 310.141> 1397.64 103.594<-45.0938 467.562> 1483.19 106.562<1227.02 1333.58> +DStem2: 279.516 -202.516 389.828 -202.516 0.303392 0.952866<33.468 224.101 320.706 631.909> 436.469 1064.75 418.188 962.09 0.978916 -0.204262<-84.378 149.631> 644.359 467.562 576.078 367.719 0.306233 -0.951957<74.137 385.061 481.942 673.15> 857.25 1333.58 746.859 1333.58 0.206752 -0.978393<0 557.355> 975.297 788.266 1027.17 663.5 0.24367 0.969858<0 458.809> 1320.77 97.016 1161.39 168.031 0.508638 -0.860981<-299.653 157.446> 1229.75 1333.58 1167.33 1213.58 0.238997 -0.97102<101.604 559.948> 1364.12 789.281 1424.59 663.5 0.213693 0.976901<0 557.167> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 38.8906 93.125<474.359 672.172> 427.719 99.8438<559.262 588.09> 712.016 95.9375<328.301 554.086> 723.5 124.766<964.387 984.548 1352.16 1364.12> 1309.12 95.9375<353.87 572.282> +VStem: 222.406 107.5<1151.89 1288.18> 279.516 110.312<-142.516 -32.2031> 582.406 107.5<835.065 982.258> 746.859 110.391<1283.19 1393.58> 759.516 113.281<-142.516 -29.2344> 980.922 103.75<-142.516 370.141> 1397.64 103.594<14.9062 527.562> 1483.19 106.562<1287.02 1393.58> +DStem2: 279.516 -142.516 389.828 -142.516 0.303392 0.952866<33.468 224.101 320.706 631.909> 436.469 1124.75 418.188 1022.09 0.978916 -0.204262<-84.378 149.631> 644.359 527.562 576.078 427.719 0.306233 -0.951957<74.137 385.061 481.942 673.15> 857.25 1393.58 746.859 1393.58 0.206752 -0.978393<0 557.355> 975.297 848.266 1027.17 723.5 0.24367 0.969858<0 458.809> 1320.77 157.016 1161.39 228.031 0.508638 -0.860981<-299.653 157.446> 1229.75 1393.58 1167.33 1273.58 0.238997 -0.97102<101.604 559.948> 1364.12 849.281 1424.59 723.5 0.213693 0.976901<0 557.167> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +759.515625 -202.515625 m 1xcb60 + 739.359375 -142.046875 719.203125 -81.578125 699.046875 -21.109375 c 1 + 615.504882812 -21.109375 531.963867188 -21.109375 448.421875 -21.109375 c 1 + 428.890625 -81.578125 409.359375 -142.046875 389.828125 -202.515625 c 1 + 353.057617188 -202.515625 316.286132812 -202.515625 279.515625 -202.515625 c 1 + 355.661132812 20.84375 431.807617188 244.203125 507.953125 467.5625 c 1 + 553.421875 467.5625 598.890625 467.5625 644.359375 467.5625 c 1 + 720.504882812 244.203125 796.651367188 20.84375 872.796875 -202.515625 c 1 + 835.036132812 -202.515625 797.276367188 -202.515625 759.515625 -202.515625 c 1xcb60 +576.078125 367.71875 m 1 + 574.515625 367.71875 572.953125 367.71875 571.390625 367.71875 c 1 + 539.046875 269.150390625 506.703125 170.583007812 474.359375 72.015625 c 1 + 540.296875 72.015625 606.234375 72.015625 672.171875 72.015625 c 1 + 640.140625 170.583007812 608.109375 269.150390625 576.078125 367.71875 c 1 +1161.390625 168.03125 m 1 + 1136.75488281 215.400390625 1112.12011719 262.770507812 1087.484375 310.140625 c 1 + 1086.546875 310.140625 1085.609375 310.140625 1084.671875 310.140625 c 1 + 1084.671875 139.254882812 1084.671875 -31.630859375 1084.671875 -202.515625 c 1 + 1050.08886719 -202.515625 1015.50488281 -202.515625 980.921875 -202.515625 c 1 + 980.921875 20.84375 980.921875 244.203125 980.921875 467.5625 c 1 + 1021.234375 467.5625 1061.546875 467.5625 1101.859375 467.5625 c 1 + 1174.828125 344.046875 1247.796875 220.53125 1320.765625 97.015625 c 1 + 1345.40136719 49.6455078125 1370.03613281 2.275390625 1394.671875 -45.09375 c 1 + 1395.66113281 -45.09375 1396.65136719 -45.09375 1397.640625 -45.09375 c 1 + 1397.640625 125.791015625 1397.640625 296.676757812 1397.640625 467.5625 c 1 + 1432.171875 467.5625 1466.703125 467.5625 1501.234375 467.5625 c 1 + 1501.234375 244.203125 1501.234375 20.84375 1501.234375 -202.515625 c 1xc930 + 1460.921875 -202.515625 1420.609375 -202.515625 1380.296875 -202.515625 c 1 + 1307.328125 -79 1234.359375 44.515625 1161.390625 168.03125 c 1 +447.015625 652.015625 m 0xed20 + 390.6875 652.015625 342.875 662.249023438 303.5 682.71875 c 0 + 264.125 703.1875 230.375 730.6875 202.25 765.296875 c 1 + 227.198242188 788.65625 252.145507812 812.015625 277.09375 835.375 c 1 + 300.765625 806.546875 326.859375 784.75 355.296875 770.0625 c 0 + 383.8125 755.375 416.3125 747.953125 452.796875 747.953125 c 0 + 495.6875 747.953125 527.953125 757.5625 549.75 776.78125 c 0 + 571.46875 796 582.40625 821.9375 582.40625 854.515625 c 0 + 582.40625 880.765625 574.671875 901.546875 559.359375 916.9375 c 0 + 543.96875 932.328125 516.78125 943.8125 477.71875 951.46875 c 1 + 457.875 955.009765625 438.03125 958.551757812 418.1875 962.09375 c 1 + 352.953125 974.203125 303.96875 995.6875 271.3125 1026.390625 c 0 + 238.65625 1057.09375 222.40625 1099.359375 222.40625 1153.109375 c 0 + 222.40625 1182.5625 227.953125 1209.28125 239.203125 1233.265625 c 0 + 250.375 1257.25 266.078125 1277.40625 286.234375 1293.734375 c 0 + 306.390625 1310.0625 330.84375 1322.71875 359.671875 1331.625 c 0 + 388.421875 1340.609375 420.765625 1345.0625 456.625 1345.0625 c 0 + 507.171875 1345.0625 551 1336.3125 588.109375 1318.734375 c 0 + 625.21875 1301.078125 656.9375 1275.6875 683.1875 1242.40625 c 1 + 657.901367188 1220.00976562 632.614257812 1197.61425781 607.328125 1175.21875 c 1 + 590.0625 1197.5625 568.96875 1215.53125 543.96875 1228.96875 c 0 + 519.046875 1242.40625 487.953125 1249.125 450.84375 1249.125 c 0 + 412.484375 1249.125 382.71875 1241.390625 361.546875 1226.078125 c 0 + 340.453125 1210.6875 329.90625 1188.265625 329.90625 1158.890625 c 0 + 329.90625 1130.6875 338.5 1109.75 355.84375 1096 c 0 + 373.109375 1082.25 399.984375 1071.78125 436.46875 1064.75 c 1 + 456.3125 1060.609375 476.15625 1056.46875 496 1052.328125 c 1 + 563.1875 1039.515625 612.328125 1017.71875 643.34375 987.015625 c 0 + 674.359375 956.3125 689.90625 914.046875 689.90625 860.296875 c 0 + 689.90625 828.96875 684.4375 800.453125 673.578125 774.828125 c 0 + 662.71875 749.28125 646.859375 727.328125 626.078125 709.125 c 0 + 605.21875 690.84375 579.828125 676.78125 549.75 666.859375 c 0 + 519.671875 656.936523438 485.375 652.015625 447.015625 652.015625 c 0xed20 +905.21875 663.5 m 1xd9a8 + 852.432617188 886.859375 799.645507812 1110.21875 746.859375 1333.578125 c 1 + 783.65625 1333.578125 820.453125 1333.578125 857.25 1333.578125 c 1 + 879.958007812 1226.05175781 902.666992188 1118.52539062 925.375 1011 c 1 + 941.078125 936.754882812 956.78125 862.509765625 972.484375 788.265625 c 1 + 973.421875 788.265625 974.359375 788.265625 975.296875 788.265625 c 1 + 993.239257812 862.509765625 1011.18261719 936.754882812 1029.125 1011 c 1 + 1055.66113281 1118.52539062 1082.19824219 1226.05175781 1108.734375 1333.578125 c 1 + 1149.07324219 1333.578125 1189.41113281 1333.578125 1229.75 1333.578125 c 1 + 1255.97363281 1226.05175781 1282.19824219 1118.52539062 1308.421875 1011 c 1 + 1326.02636719 937.09375 1343.62988281 863.1875 1361.234375 789.28125 c 1 + 1362.19824219 789.28125 1363.16113281 789.28125 1364.125 789.28125 c 1 + 1380.453125 863.1875 1396.78125 937.09375 1413.109375 1011 c 1 + 1436.46875 1118.52539062 1459.828125 1226.05175781 1483.1875 1333.578125 c 1 + 1518.70800781 1333.578125 1554.22949219 1333.578125 1589.75 1333.578125 c 1 + 1534.69824219 1110.21875 1479.64550781 886.859375 1424.59375 663.5 c 1 + 1383.96875 663.5 1343.34375 663.5 1302.71875 663.5 c 1 + 1274.22949219 779.020507812 1245.73925781 894.541015625 1217.25 1010.0625 c 1 + 1200.609375 1077.90039062 1183.96875 1145.73925781 1167.328125 1213.578125 c 1 + 1166.67675781 1213.578125 1166.02636719 1213.578125 1165.375 1213.578125 c 1 + 1148.421875 1145.73925781 1131.46875 1077.90039062 1114.515625 1010.0625 c 1 + 1085.40136719 894.541015625 1056.28613281 779.020507812 1027.171875 663.5 c 1 + 986.520507812 663.5 945.870117188 663.5 905.21875 663.5 c 1xd9a8 +EndSplineSet +EndChar + +StartChar: uniE117 +Encoding: 57623 57623 24 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 669.17 96.0156<520.383 793.039> +VStem: 280.539 103.75<-196.846 315.811> 411.945 108.438<765.186 1339.25> 697.258 103.594<-39.4238 473.232> 938.195 120<-196.846 -76.8457> 945.852 127.656<345.576 473.232> 1050.3 108.516<669.17 996.61> 1383.66 127.656<-196.846 -69.1894 345.576 473.232> +DStem2: 620.383 102.686 461.008 173.701 0.508638 -0.860981<-299.653 157.446> 943.742 1339.25 819.914 1339.25 0.479608 -0.877483<0 340.284> 938.195 -196.846 1058.2 -196.846 0.552681 0.833393<66.3217 372.475 510.607 804.036> 1073.51 473.232 945.852 473.232 0.546973 -0.83715<0 292.459 418.391 730.603> 1109.84 1040.65 1158.82 935.107 0.477483 0.878641<0 339.836> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 729.17 96.0156<520.383 793.039> +VStem: 280.539 103.75<-136.846 375.811> 411.945 108.438<825.186 1399.25> 697.258 103.594<20.5762 533.232> 938.195 120<-136.846 -16.8457> 945.852 127.656<405.576 533.232> 1050.3 108.516<729.17 1056.61> 1383.66 127.656<-136.846 -9.18945 405.576 533.232> +DStem2: 620.383 162.686 461.008 233.701 0.508638 -0.860981<-299.653 157.446> 943.742 1399.25 819.914 1399.25 0.479608 -0.877483<0 340.284> 938.195 -136.846 1058.2 -136.846 0.552681 0.833393<66.3217 372.475 510.607 804.036> 1073.51 533.232 945.852 533.232 0.546973 -0.83715<0 292.459 418.391 730.603> 1109.84 1100.65 1158.82 995.107 0.477483 0.878641<0 339.836> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +461.0078125 173.701171875 m 1xf1 + 436.372070312 221.071289062 411.737304688 268.440429688 387.1015625 315.810546875 c 1 + 386.1640625 315.810546875 385.2265625 315.810546875 384.2890625 315.810546875 c 1 + 384.2890625 144.924804688 384.2890625 -25.9599609375 384.2890625 -196.845703125 c 1 + 349.706054688 -196.845703125 315.122070312 -196.845703125 280.5390625 -196.845703125 c 1 + 280.5390625 26.513671875 280.5390625 249.873046875 280.5390625 473.232421875 c 1 + 320.8515625 473.232421875 361.1640625 473.232421875 401.4765625 473.232421875 c 1 + 474.4453125 349.716796875 547.4140625 226.201171875 620.3828125 102.685546875 c 1 + 645.018554688 55.3154296875 669.653320312 7.9462890625 694.2890625 -39.423828125 c 1 + 695.278320312 -39.423828125 696.268554688 -39.423828125 697.2578125 -39.423828125 c 1 + 697.2578125 131.461914062 697.2578125 302.346679688 697.2578125 473.232421875 c 1 + 731.7890625 473.232421875 766.3203125 473.232421875 800.8515625 473.232421875 c 1 + 800.8515625 249.873046875 800.8515625 26.513671875 800.8515625 -196.845703125 c 1 + 760.5390625 -196.845703125 720.2265625 -196.845703125 679.9140625 -196.845703125 c 1 + 606.9453125 -73.330078125 533.9765625 50.185546875 461.0078125 173.701171875 c 1xf1 +1511.3203125 -196.845703125 m 1 + 1468.76855469 -196.845703125 1426.21582031 -196.845703125 1383.6640625 -196.845703125 c 1 + 1329.54980469 -107.887695312 1275.43457031 -18.9287109375 1221.3203125 70.029296875 c 1 + 1220.3828125 70.029296875 1219.4453125 70.029296875 1218.5078125 70.029296875 c 1 + 1165.0703125 -18.9287109375 1111.6328125 -107.887695312 1058.1953125 -196.845703125 c 1 + 1018.1953125 -196.845703125 978.1953125 -196.845703125 938.1953125 -196.845703125 c 1xf9 + 1010.48730469 -82.6005859375 1082.77832031 31.6435546875 1155.0703125 145.888671875 c 1 + 1085.33105469 255.002929688 1015.59082031 364.118164062 945.8515625 473.232421875 c 1 + 988.403320312 473.232421875 1030.95605469 473.232421875 1073.5078125 473.232421875 c 1xf5 + 1124.39355469 390.029296875 1175.27832031 306.826171875 1226.1640625 223.623046875 c 1 + 1226.7890625 223.623046875 1227.4140625 223.623046875 1228.0390625 223.623046875 c 1 + 1279.54980469 306.826171875 1331.05957031 390.029296875 1382.5703125 473.232421875 c 1 + 1422.5703125 473.232421875 1462.5703125 473.232421875 1502.5703125 473.232421875 c 1 + 1432.20605469 364.430664062 1361.84082031 255.627929688 1291.4765625 146.826171875 c 1 + 1364.7578125 32.2685546875 1438.0390625 -82.2880859375 1511.3203125 -196.845703125 c 1 +411.9453125 669.169921875 m 1 + 411.9453125 892.529296875 411.9453125 1115.88867188 411.9453125 1339.24804688 c 1 + 448.090820312 1339.24804688 484.237304688 1339.24804688 520.3828125 1339.24804688 c 1 + 520.3828125 1147.89355469 520.3828125 956.540039062 520.3828125 765.185546875 c 1 + 611.268554688 765.185546875 702.153320312 765.185546875 793.0390625 765.185546875 c 1 + 793.0390625 733.180664062 793.0390625 701.174804688 793.0390625 669.169921875 c 1 + 666.0078125 669.169921875 538.9765625 669.169921875 411.9453125 669.169921875 c 1 +1050.3046875 669.169921875 m 1xf3 + 1050.3046875 757.165039062 1050.3046875 845.159179688 1050.3046875 933.154296875 c 1 + 973.5078125 1068.51855469 896.7109375 1203.88378906 819.9140625 1339.24804688 c 1 + 861.190429688 1339.24804688 902.465820312 1339.24804688 943.7421875 1339.24804688 c 1 + 998.143554688 1239.71679688 1052.54394531 1140.18554688 1106.9453125 1040.65429688 c 1 + 1107.90917969 1040.65429688 1108.87207031 1040.65429688 1109.8359375 1040.65429688 c 1 + 1163.92480469 1140.18554688 1218.01269531 1239.71679688 1272.1015625 1339.24804688 c 1 + 1311.7890625 1339.24804688 1351.4765625 1339.24804688 1391.1640625 1339.24804688 c 1 + 1313.71582031 1204.53417969 1236.26855469 1069.82128906 1158.8203125 935.107421875 c 1 + 1158.8203125 846.461914062 1158.8203125 757.815429688 1158.8203125 669.169921875 c 1 + 1122.6484375 669.169921875 1086.4765625 669.169921875 1050.3046875 669.169921875 c 1xf3 +EndSplineSet +EndChar + +StartChar: uniE118 +Encoding: 57624 57624 25 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: -15.4395 93.125<1083.51 1281.16> 73.857 91.25<418.508 570.842> 378.232 95<418.508 654.817 1169.79 1195.72> 669.17 96.0156<609.465 629.562 1148.12 1468.74> 961.04 95.9375<1148.12 1439.05> 1243.23 96.0156<1148.12 1468.74> +VStem: 310.07 108.438<-196.846 73.857 165.107 378.232> 334.367 112.344<1226.9 1339.25> 678.664 114.219<187.348 355.913> 793.273 109.375<1229.87 1339.25> 888.508 110.469<-196.846 -86.377> 1039.68 108.438<765.186 961.04 1056.98 1243.23> 1368.51 113.281<-196.846 -83.5645> +DStem2: 446.711 1339.25 334.367 1339.25 0.311738 -0.950168<0 589.564> 662.258 85.42 551.945 73.857 0.456936 -0.8895<0 262.07> 621.398 774.795 679.992 669.17 0.315331 0.948982<0 589.853> 888.508 -196.846 998.977 -196.846 0.303155 0.952941<33.4892 224.122 320.727 631.883> 1253.35 473.232 1185.23 373.389 0.305997 -0.952033<74.2085 385.084> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 44.5605 93.125<1083.51 1281.16> 133.857 91.25<418.508 570.842> 438.232 95<418.508 654.817 1169.79 1195.72> 729.17 96.0156<609.465 629.562 1148.12 1468.74> 1021.04 95.9375<1148.12 1439.05> 1303.23 96.0156<1148.12 1468.74> +VStem: 310.07 108.438<-136.846 133.857 225.107 438.232> 334.367 112.344<1286.9 1399.25> 678.664 114.219<247.348 415.913> 793.273 109.375<1289.87 1399.25> 888.508 110.469<-136.846 -26.377> 1039.68 108.438<825.186 1021.04 1116.98 1303.23> 1368.51 113.281<-136.846 -23.5645> +DStem2: 446.711 1399.25 334.367 1399.25 0.311738 -0.950168<0 589.564> 662.258 145.42 551.945 133.857 0.456936 -0.8895<0 262.07> 621.398 834.795 679.992 729.17 0.315331 0.948982<0 589.853> 888.508 -136.846 998.977 -136.846 0.303155 0.952941<33.4892 224.122 320.727 631.883> 1253.35 533.232 1185.23 433.389 0.305997 -0.952033<74.2085 385.084> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +418.5078125 -196.845703125 m 1x7e98 + 382.362304688 -196.845703125 346.215820312 -196.845703125 310.0703125 -196.845703125 c 1 + 310.0703125 26.513671875 310.0703125 249.873046875 310.0703125 473.232421875 c 1 + 406.372070312 473.232421875 502.674804688 473.232421875 598.9765625 473.232421875 c 1 + 659.1328125 473.232421875 706.4765625 455.185546875 741.0078125 419.013671875 c 0 + 775.5390625 382.841796875 792.8828125 333.701171875 792.8828125 271.669921875 c 0 + 792.8828125 223.623046875 781.7890625 183.779296875 759.7578125 152.138671875 c 0 + 737.7265625 120.419921875 705.2265625 98.232421875 662.2578125 85.419921875 c 1 + 710.590820312 -8.6689453125 758.924804688 -102.756835938 807.2578125 -196.845703125 c 1 + 766.9453125 -196.845703125 726.6328125 -196.845703125 686.3203125 -196.845703125 c 1 + 641.528320312 -106.611328125 596.737304688 -16.376953125 551.9453125 73.857421875 c 1 + 507.465820312 73.857421875 462.987304688 73.857421875 418.5078125 73.857421875 c 1 + 418.5078125 -16.376953125 418.5078125 -106.611328125 418.5078125 -196.845703125 c 1x7e98 +591.3203125 165.107421875 m 1 + 618.8203125 165.107421875 640.2265625 172.294921875 655.5390625 186.669921875 c 0 + 671.0078125 201.044921875 678.6640625 221.748046875 678.6640625 248.623046875 c 1 + 678.6640625 263.961914062 678.6640625 279.299804688 678.6640625 294.638671875 c 1 + 678.6640625 321.591796875 671.0078125 342.216796875 655.5390625 356.591796875 c 0 + 640.2265625 370.966796875 618.8203125 378.232421875 591.3203125 378.232421875 c 1 + 533.715820312 378.232421875 476.112304688 378.232421875 418.5078125 378.232421875 c 1 + 418.5078125 307.190429688 418.5078125 236.149414062 418.5078125 165.107421875 c 1 + 476.112304688 165.107421875 533.715820312 165.107421875 591.3203125 165.107421875 c 1 +1368.5078125 -196.845703125 m 1 + 1348.3515625 -136.376953125 1328.1953125 -75.908203125 1308.0390625 -15.439453125 c 1 + 1224.54980469 -15.439453125 1141.05957031 -15.439453125 1057.5703125 -15.439453125 c 1 + 1038.0390625 -75.908203125 1018.5078125 -136.376953125 998.9765625 -196.845703125 c 1 + 962.153320312 -196.845703125 925.331054688 -196.845703125 888.5078125 -196.845703125 c 1xbcb8 + 964.706054688 26.513671875 1040.90332031 249.873046875 1117.1015625 473.232421875 c 1 + 1162.51855469 473.232421875 1207.93457031 473.232421875 1253.3515625 473.232421875 c 1 + 1329.49707031 249.873046875 1405.64355469 26.513671875 1481.7890625 -196.845703125 c 1 + 1444.02832031 -196.845703125 1406.26855469 -196.845703125 1368.5078125 -196.845703125 c 1 +1185.2265625 373.388671875 m 1 + 1183.61230469 373.388671875 1181.99707031 373.388671875 1180.3828125 373.388671875 c 1 + 1148.09082031 274.821289062 1115.79980469 176.252929688 1083.5078125 77.685546875 c 1 + 1149.39355469 77.685546875 1215.27832031 77.685546875 1281.1640625 77.685546875 c 1 + 1249.18457031 176.252929688 1217.20605469 274.821289062 1185.2265625 373.388671875 c 1 +554.2109375 669.169921875 m 1 + 480.9296875 892.529296875 407.6484375 1115.88867188 334.3671875 1339.24804688 c 1 + 371.815429688 1339.24804688 409.262695312 1339.24804688 446.7109375 1339.24804688 c 1 + 482.231445312 1228.85742188 517.752929688 1118.46679688 553.2734375 1008.07617188 c 1 + 574.6796875 930.315429688 596.0859375 852.555664062 617.4921875 774.794921875 c 1 + 618.793945312 774.794921875 620.096679688 774.794921875 621.3984375 774.794921875 c 1 + 643.168945312 852.555664062 664.940429688 930.315429688 686.7109375 1008.07617188 c 1 + 722.231445312 1118.46679688 757.752929688 1228.85742188 793.2734375 1339.24804688 c 1 + 829.731445312 1339.24804688 866.190429688 1339.24804688 902.6484375 1339.24804688 c 1x3dd8 + 828.4296875 1115.88867188 754.2109375 892.529296875 679.9921875 669.169921875 c 1 + 638.065429688 669.169921875 596.137695312 669.169921875 554.2109375 669.169921875 c 1 +1039.6796875 669.169921875 m 1 + 1039.6796875 892.529296875 1039.6796875 1115.88867188 1039.6796875 1339.24804688 c 1 + 1182.70019531 1339.24804688 1325.72167969 1339.24804688 1468.7421875 1339.24804688 c 1 + 1468.7421875 1307.24316406 1468.7421875 1275.23730469 1468.7421875 1243.23242188 c 1 + 1361.8671875 1243.23242188 1254.9921875 1243.23242188 1148.1171875 1243.23242188 c 1 + 1148.1171875 1181.14941406 1148.1171875 1119.06542969 1148.1171875 1056.98242188 c 1 + 1245.09667969 1056.98242188 1342.07519531 1056.98242188 1439.0546875 1056.98242188 c 1 + 1439.0546875 1025.00292969 1439.0546875 993.024414062 1439.0546875 961.044921875 c 1 + 1342.07519531 961.044921875 1245.09667969 961.044921875 1148.1171875 961.044921875 c 1 + 1148.1171875 895.758789062 1148.1171875 830.471679688 1148.1171875 765.185546875 c 1 + 1254.9921875 765.185546875 1361.8671875 765.185546875 1468.7421875 765.185546875 c 1 + 1468.7421875 733.180664062 1468.7421875 701.174804688 1468.7421875 669.169921875 c 1 + 1325.72167969 669.169921875 1182.70019531 669.169921875 1039.6796875 669.169921875 c 1 +EndSplineSet +EndChar + +StartChar: uniE119 +Encoding: 57625 57625 26 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 144.2 112.793<1049.91 1285.26 1418.46 1622.37> 883.36 98.4375<1239.05 1285.26> +VStem: 169.633 150<144.2 294.2> 179.203 159.57<822.228 981.8> 726.469 159.57<144.2 303.771 822.228 981.8> 1285.26 133.203<256.993 883.36> +DStem2: 169.633 144.2 319.633 144.2 0.552681 0.833393<82.9021 411.831 638.258 1005.04> 338.773 981.8 179.203 981.8 0.546973 -0.83715<0 365.574 522.989 913.254> 998.344 750.157 1081.16 675.841 0.683539 0.729914<1.88118 286.669> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 204.2 112.793<1049.91 1285.26 1418.46 1622.37> 943.36 98.4375<1239.05 1285.26> +VStem: 169.633 150<204.2 354.2> 179.203 159.57<882.228 1041.8> 726.469 159.57<204.2 363.771 882.228 1041.8> 1285.26 133.203<316.993 943.36> +DStem2: 169.633 204.2 319.633 204.2 0.552681 0.833393<82.9021 411.831 638.258 1005.04> 338.773 1041.8 179.203 1041.8 0.546973 -0.83715<0 365.574 522.989 913.254> 998.344 810.157 1081.16 735.841 0.683539 0.729914<1.88118 286.669> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +886.0390625 144.200195312 m 1xdc + 832.848632812 144.200195312 779.659179688 144.200195312 726.46875 144.200195312 c 1 + 658.825195312 255.397460938 591.182617188 366.595703125 523.5390625 477.793945312 c 1 + 522.3671875 477.793945312 521.1953125 477.793945312 520.0234375 477.793945312 c 1 + 453.2265625 366.595703125 386.4296875 255.397460938 319.6328125 144.200195312 c 1 + 269.6328125 144.200195312 219.6328125 144.200195312 169.6328125 144.200195312 c 1xec + 259.997070312 287.005859375 350.362304688 429.811523438 440.7265625 572.618164062 c 1 + 353.551757812 709.010742188 266.377929688 845.404296875 179.203125 981.797851562 c 1 + 232.393554688 981.797851562 285.583007812 981.797851562 338.7734375 981.797851562 c 1 + 402.379882812 877.793945312 465.987304688 773.790039062 529.59375 669.786132812 c 1 + 530.375 669.786132812 531.15625 669.786132812 531.9375 669.786132812 c 1 + 596.325195312 773.790039062 660.713867188 877.793945312 725.1015625 981.797851562 c 1 + 775.1015625 981.797851562 825.1015625 981.797851562 875.1015625 981.797851562 c 1 + 787.145507812 845.794921875 699.190429688 709.791992188 611.234375 573.790039062 c 1 + 702.8359375 430.592773438 794.4375 287.396484375 886.0390625 144.200195312 c 1xdc +1049.90625 144.200195312 m 1 + 1049.90625 181.797851562 1049.90625 219.395507812 1049.90625 256.993164062 c 1 + 1128.35644531 256.993164062 1206.80761719 256.993164062 1285.2578125 256.993164062 c 1 + 1285.2578125 465.782226562 1285.2578125 674.571289062 1285.2578125 883.360351562 c 1 + 1282.00292969 883.360351562 1278.74707031 883.360351562 1275.4921875 883.360351562 c 1 + 1210.71386719 814.186523438 1145.93457031 745.013671875 1081.15625 675.840820312 c 1 + 1053.55175781 700.612304688 1025.94824219 725.384765625 998.34375 750.157226562 c 1 + 1069.56738281 827.370117188 1140.79199219 904.583984375 1212.015625 981.797851562 c 1 + 1280.83105469 981.797851562 1349.64550781 981.797851562 1418.4609375 981.797851562 c 1 + 1418.4609375 740.196289062 1418.4609375 498.594726562 1418.4609375 256.993164062 c 1 + 1486.4296875 256.993164062 1554.3984375 256.993164062 1622.3671875 256.993164062 c 1 + 1622.3671875 219.395507812 1622.3671875 181.797851562 1622.3671875 144.200195312 c 1 + 1431.546875 144.200195312 1240.7265625 144.200195312 1049.90625 144.200195312 c 1 +EndSplineSet +EndChar + +StartChar: uniE11A +Encoding: 57626 57626 27 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: -208.33 85.3906<443.27 618.187 1139.04 1341.37> 140.107 85.4688<468.18 617.718> 395.498 89.2188<1163.21 1360.78> 657.686 89.2188<1388.21 1579.14> 669.17 92.1875<328.559 354.926> 942.76 85.4688<802.406 938.743> 1249.95 89.2969<802.406 1011.58 1380.73 1582.23> +VStem: 82.0938 106.562<1232.69 1339.25> 314.359 107.5<-102.67 120.457> 493.891 104.688<1234.56 1339.25> 638.891 107.5<-102.386 119.315> 700.609 101.797<669.17 942.76 1028.23 1249.95> 1040.14 101.719<228.688 375.925 1047.5 1230.69> 1233.73 109.453<795.416 1213> 1364.67 101.719<-98.4167 64.863> +DStem2: 188.656 1339.25 82.0938 1339.25 0.271727 -0.962374<0 593.586> 375.844 917.842 402.719 669.17 0.269742 0.962933<-155.735 437.628> 1024.12 950.42 922.406 942.76 0.413517 -0.910496<0 262.054> 1234.05 201.592 1215.77 105.576 0.978371 -0.206857<-75.1218 135.909> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: -148.33 85.3906<443.27 618.187 1139.04 1341.37> 200.107 85.4688<468.18 617.718> 455.498 89.2188<1163.21 1360.78> 717.686 89.2188<1388.21 1579.14> 729.17 92.1875<328.559 354.926> 1002.76 85.4688<802.406 938.743> 1309.95 89.2969<802.406 1011.58 1380.73 1582.23> +VStem: 82.0938 106.562<1292.69 1399.25> 314.359 107.5<-42.67 180.457> 493.891 104.688<1294.56 1399.25> 638.891 107.5<-42.3858 179.315> 700.609 101.797<729.17 1002.76 1088.23 1309.95> 1040.14 101.719<288.688 435.925 1107.5 1290.69> 1233.73 109.453<855.416 1273> 1364.67 101.719<-38.4167 124.863> +DStem2: 188.656 1399.25 82.0938 1399.25 0.271727 -0.962374<0 593.586> 375.844 977.842 402.719 729.17 0.269742 0.962933<-155.735 437.628> 1024.12 1010.42 922.406 1002.76 0.413517 -0.910496<0 262.054> 1234.05 261.592 1215.77 165.576 0.978371 -0.206857<-75.1218 135.909> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +530.296875 -208.330078125 m 0xe7ee + 458.734375 -208.330078125 404.828125 -186.298828125 368.578125 -142.158203125 c 0 + 332.484375 -97.939453125 314.359375 -33.642578125 314.359375 50.810546875 c 0 + 314.359375 91.123046875 319.515625 131.435546875 329.671875 171.826171875 c 0 + 339.984375 212.138671875 354.671875 250.654296875 373.890625 287.451171875 c 0 + 393.109375 324.248046875 415.921875 358.701171875 442.484375 390.654296875 c 0 + 469.046875 422.685546875 498.734375 450.185546875 531.390625 473.232421875 c 1 + 577.120117188 473.232421875 622.848632812 473.232421875 668.578125 473.232421875 c 1 + 629.515625 443.154296875 595.921875 414.482421875 567.796875 387.294921875 c 0 + 539.671875 360.107421875 515.765625 333.076171875 496.234375 306.201171875 c 0 + 476.703125 279.326171875 460.921875 251.669921875 448.734375 223.154296875 c 0 + 436.546875 194.638671875 427.328125 163.779296875 420.921875 130.498046875 c 1 + 425.088867188 130.498046875 429.254882812 130.498046875 433.421875 130.498046875 c 1 + 444.359375 161.201171875 461.546875 184.716796875 485.296875 201.044921875 c 0 + 508.890625 217.373046875 537.015625 225.576171875 569.671875 225.576171875 c 0 + 624.046875 225.576171875 667.171875 207.919921875 698.890625 172.763671875 c 0 + 730.453125 137.529296875 746.390625 85.732421875 746.390625 17.216796875 c 0 + 746.390625 -53.798828125 727.953125 -109.189453125 691.234375 -148.876953125 c 0 + 654.359375 -188.564453125 600.765625 -208.330078125 530.296875 -208.330078125 c 0xe7ee +530.296875 -122.939453125 m 256 + 602.640625 -122.939453125 638.890625 -83.251953125 638.890625 -3.876953125 c 1 + 638.890625 4.4306640625 638.890625 12.7373046875 638.890625 21.044921875 c 1 + 638.890625 100.419921875 602.640625 140.107421875 530.296875 140.107421875 c 256 + 458.109375 140.107421875 421.859375 100.419921875 421.859375 21.044921875 c 1 + 421.859375 12.7373046875 421.859375 4.4306640625 421.859375 -3.876953125 c 1 + 421.859375 -83.251953125 458.109375 -122.939453125 530.296875 -122.939453125 c 256 +1244.671875 -208.330078125 m 0 + 1194.671875 -208.330078125 1151.390625 -198.955078125 1114.515625 -180.048828125 c 0 + 1077.796875 -161.142578125 1046.234375 -133.798828125 1019.984375 -97.939453125 c 1 + 1043.31738281 -76.5068359375 1066.65136719 -55.0751953125 1089.984375 -33.642578125 c 1 + 1109.828125 -61.142578125 1132.640625 -82.314453125 1158.265625 -97.001953125 c 0 + 1183.734375 -111.689453125 1212.953125 -119.111328125 1245.609375 -119.111328125 c 0 + 1324.984375 -119.111328125 1364.671875 -82.626953125 1364.671875 -9.658203125 c 0 + 1364.671875 19.794921875 1357.484375 42.373046875 1343.421875 57.998046875 c 0 + 1329.359375 73.701171875 1305.140625 85.732421875 1270.453125 94.013671875 c 1 + 1252.22363281 97.8681640625 1233.99511719 101.721679688 1215.765625 105.576171875 c 1 + 1155.609375 119.013671875 1111.390625 140.576171875 1082.796875 170.341796875 c 0 + 1054.359375 200.107421875 1040.140625 241.904296875 1040.140625 295.654296875 c 0 + 1040.140625 357.685546875 1058.890625 404.716796875 1096.234375 436.748046875 c 0 + 1133.734375 468.779296875 1186.078125 484.716796875 1253.265625 484.716796875 c 0 + 1301.234375 484.716796875 1341.703125 476.591796875 1374.671875 460.263671875 c 0 + 1407.640625 443.935546875 1436.234375 418.544921875 1460.609375 383.935546875 c 1 + 1437.22363281 363.466796875 1413.83886719 342.998046875 1390.453125 322.529296875 c 1 + 1373.265625 346.826171875 1353.890625 365.107421875 1332.484375 377.216796875 c 0 + 1311.078125 389.404296875 1283.890625 395.498046875 1251.390625 395.498046875 c 0 + 1214.828125 395.498046875 1187.484375 387.919921875 1169.203125 372.919921875 c 0 + 1151.078125 357.841796875 1141.859375 333.076171875 1141.859375 298.544921875 c 0 + 1141.859375 270.341796875 1149.046875 249.091796875 1163.421875 234.638671875 c 0 + 1177.953125 220.263671875 1201.390625 209.248046875 1234.046875 201.591796875 c 1 + 1252.27636719 197.424804688 1270.50488281 193.258789062 1288.734375 189.091796875 c 1 + 1320.765625 182.060546875 1347.953125 173.232421875 1370.296875 162.685546875 c 0 + 1392.796875 152.138671875 1411.234375 139.169921875 1425.609375 123.779296875 c 0 + 1439.984375 108.466796875 1450.296875 90.341796875 1456.703125 69.560546875 c 0 + 1463.109375 48.779296875 1466.390625 24.560546875 1466.390625 -2.939453125 c 0 + 1466.390625 -70.126953125 1447.015625 -121.142578125 1408.265625 -156.064453125 c 0 + 1369.515625 -190.908203125 1314.984375 -208.330078125 1244.671875 -208.330078125 c 0 +278.890625 669.169921875 m 1xefce + 213.291992188 892.529296875 147.692382812 1115.88867188 82.09375 1339.24804688 c 1 + 117.614257812 1339.24804688 153.135742188 1339.24804688 188.65625 1339.24804688 c 1 + 228.317382812 1198.77929688 267.979492188 1058.31054688 307.640625 917.841796875 c 1 + 316.9375 865.680664062 326.234375 813.518554688 335.53125 761.357421875 c 1 + 339.671875 761.357421875 343.8125 761.357421875 347.953125 761.357421875 c 1 + 357.25 813.518554688 366.546875 865.680664062 375.84375 917.841796875 c 1 + 415.192382812 1058.31054688 454.541992188 1198.77929688 493.890625 1339.24804688 c 1 + 528.786132812 1339.24804688 563.682617188 1339.24804688 598.578125 1339.24804688 c 1 + 533.291992188 1115.88867188 468.004882812 892.529296875 402.71875 669.169921875 c 1 + 361.442382812 669.169921875 320.166992188 669.169921875 278.890625 669.169921875 c 1xefce +802.40625 669.169921875 m 1xefde + 768.473632812 669.169921875 734.541992188 669.169921875 700.609375 669.169921875 c 1 + 700.609375 892.529296875 700.609375 1115.88867188 700.609375 1339.24804688 c 1 + 788.942382812 1339.24804688 877.276367188 1339.24804688 965.609375 1339.24804688 c 1 + 1023.1875 1339.24804688 1066.546875 1322.13867188 1095.6875 1287.91992188 c 0 + 1124.75 1253.62304688 1139.359375 1204.56054688 1139.359375 1140.49804688 c 0 + 1139.359375 1088.70117188 1129.75 1046.74804688 1110.53125 1014.79492188 c 0 + 1091.3125 982.763671875 1062.5625 961.357421875 1024.125 950.419921875 c 1 + 1066.703125 856.669921875 1109.28125 762.919921875 1151.859375 669.169921875 c 1 + 1114.09863281 669.169921875 1076.33886719 669.169921875 1038.578125 669.169921875 c 1 + 999.854492188 760.368164062 961.129882812 851.565429688 922.40625 942.763671875 c 1 + 882.40625 942.763671875 842.40625 942.763671875 802.40625 942.763671875 c 1 + 802.40625 851.565429688 802.40625 760.368164062 802.40625 669.169921875 c 1xefde +956.9375 1028.23242188 m 1 + 981.234375 1028.23242188 999.671875 1034.48242188 1012.171875 1046.90429688 c 0 + 1024.59375 1059.40429688 1030.84375 1079.71679688 1030.84375 1107.91992188 c 1 + 1030.84375 1128.70117188 1030.84375 1149.48242188 1030.84375 1170.26367188 c 1 + 1030.84375 1198.46679688 1024.59375 1218.77929688 1012.171875 1231.27929688 c 0 + 999.671875 1243.70117188 981.234375 1249.95117188 956.9375 1249.95117188 c 1 + 905.426757812 1249.95117188 853.916992188 1249.95117188 802.40625 1249.95117188 c 1 + 802.40625 1176.04492188 802.40625 1102.13867188 802.40625 1028.23242188 c 1 + 853.916992188 1028.23242188 905.426757812 1028.23242188 956.9375 1028.23242188 c 1 +1487.171875 657.685546875 m 0xf7ce + 1448.109375 657.685546875 1413.109375 664.248046875 1382.09375 677.294921875 c 0 + 1351 690.419921875 1324.4375 711.123046875 1302.40625 739.248046875 c 0 + 1280.296875 767.373046875 1263.34375 803.388671875 1251.46875 847.216796875 c 0 + 1239.671875 891.123046875 1233.734375 943.388671875 1233.734375 1004.24804688 c 256 + 1233.734375 1065.02929688 1239.671875 1117.29492188 1251.46875 1161.20117188 c 0 + 1263.34375 1205.02929688 1280.296875 1241.04492188 1302.40625 1269.16992188 c 0 + 1324.4375 1297.29492188 1351 1317.99804688 1382.09375 1331.12304688 c 0 + 1413.109375 1344.24804688 1448.109375 1350.73242188 1487.171875 1350.73242188 c 0 + 1544.125 1350.73242188 1589.75 1338.46679688 1623.96875 1313.77929688 c 0 + 1658.1875 1289.16992188 1685.609375 1252.21679688 1706.078125 1202.91992188 c 1 + 1677.27636719 1186.93066406 1648.47363281 1170.94042969 1619.671875 1154.95117188 c 1 + 1608.109375 1192.68554688 1592.015625 1219.87304688 1571.15625 1236.51367188 c 0 + 1550.375 1253.15429688 1522.40625 1261.51367188 1487.171875 1261.51367188 c 0 + 1441.78125 1261.51367188 1406.390625 1245.81054688 1381.078125 1214.48242188 c 0 + 1355.84375 1183.07617188 1343.1875 1139.87304688 1343.1875 1084.87304688 c 1 + 1343.1875 1031.09667969 1343.1875 977.321289062 1343.1875 923.544921875 c 1 + 1343.1875 868.544921875 1355.84375 825.341796875 1381.078125 793.935546875 c 0 + 1406.390625 762.607421875 1441.78125 746.904296875 1487.171875 746.904296875 c 0 + 1523.03125 746.904296875 1552.015625 755.888671875 1574.046875 773.779296875 c 0 + 1596.15625 791.748046875 1613.265625 820.498046875 1625.453125 860.185546875 c 1 + 1653.60449219 843.544921875 1681.75488281 826.904296875 1709.90625 810.263671875 c 1 + 1688.8125 761.044921875 1660.609375 723.232421875 1625.453125 696.982421875 c 0 + 1590.21875 670.732421875 1544.125 657.685546875 1487.171875 657.685546875 c 0xf7ce +EndSplineSet +EndChar + +StartChar: uniE11B +Encoding: 57627 57627 28 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: -208.33 96.9531<1073.4 1297.1> 377.217 96.0156<306.547 506.234 614.672 814.359 1062.75 1307.77> 657.686 96.9531<474.093 697.732> 1243.23 96.0156<463.45 708.394 987.25 1186.94 1295.38 1495.06> +VStem: 296.938 116.25<818.332 1190.09> 506.234 108.438<-196.846 377.217> 758.656 116.25<818.332 1190.09> 896.312 116.172<-47.6831 324.07> 1186.94 108.438<669.17 1243.23> 1358.03 116.172<-47.6831 324.07> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: -148.33 96.9531<1073.4 1297.1> 437.217 96.0156<306.547 506.234 614.672 814.359 1062.75 1307.77> 717.686 96.9531<474.093 697.732> 1303.23 96.0156<463.45 708.394 987.25 1186.94 1295.38 1495.06> +VStem: 296.938 116.25<878.332 1250.09> 506.234 108.438<-136.846 437.217> 758.656 116.25<878.332 1250.09> 896.312 116.172<12.3169 384.07> 1186.94 108.438<729.17 1303.23> 1358.03 116.172<12.3169 384.07> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +614.671875 377.216796875 m 1 + 614.671875 185.862304688 614.671875 -5.4912109375 614.671875 -196.845703125 c 1 + 578.526367188 -196.845703125 542.379882812 -196.845703125 506.234375 -196.845703125 c 1 + 506.234375 -5.4912109375 506.234375 185.862304688 506.234375 377.216796875 c 1 + 439.671875 377.216796875 373.109375 377.216796875 306.546875 377.216796875 c 1 + 306.546875 409.221679688 306.546875 441.227539062 306.546875 473.232421875 c 1 + 475.817382812 473.232421875 645.088867188 473.232421875 814.359375 473.232421875 c 1 + 814.359375 441.227539062 814.359375 409.221679688 814.359375 377.216796875 c 1 + 747.796875 377.216796875 681.234375 377.216796875 614.671875 377.216796875 c 1 +1185.296875 -208.330078125 m 256 + 1141.703125 -208.330078125 1102.25 -200.830078125 1066.703125 -185.830078125 c 0 + 1031.15625 -170.751953125 1000.765625 -148.720703125 975.53125 -119.580078125 c 0 + 950.21875 -90.439453125 930.6875 -54.267578125 916.9375 -11.064453125 c 0 + 903.1875 32.138671875 896.3125 81.904296875 896.3125 138.232421875 c 256 + 896.3125 194.482421875 903.1875 244.248046875 916.9375 287.451171875 c 0 + 930.6875 330.654296875 950.21875 366.826171875 975.53125 395.966796875 c 0 + 1000.765625 425.107421875 1031.15625 447.138671875 1066.703125 462.216796875 c 0 + 1102.25 477.216796875 1141.703125 484.716796875 1185.296875 484.716796875 c 256 + 1228.8125 484.716796875 1268.265625 477.216796875 1303.8125 462.216796875 c 0 + 1339.359375 447.138671875 1369.75 425.107421875 1394.984375 395.966796875 c 0 + 1420.296875 366.826171875 1439.828125 330.654296875 1453.578125 287.451171875 c 0 + 1467.328125 244.248046875 1474.203125 194.482421875 1474.203125 138.232421875 c 256 + 1474.203125 81.904296875 1467.328125 32.138671875 1453.578125 -11.064453125 c 0 + 1439.828125 -54.267578125 1420.296875 -90.439453125 1394.984375 -119.580078125 c 0 + 1369.75 -148.720703125 1339.359375 -170.751953125 1303.8125 -185.830078125 c 0 + 1268.265625 -200.830078125 1228.8125 -208.330078125 1185.296875 -208.330078125 c 256 +1185.296875 -111.376953125 m 0 + 1210.84375 -111.376953125 1234.359375 -106.923828125 1255.84375 -97.939453125 c 0 + 1277.25 -89.033203125 1295.53125 -76.064453125 1310.53125 -59.111328125 c 0 + 1325.609375 -42.158203125 1337.25 -21.455078125 1345.609375 2.841796875 c 0 + 1353.890625 27.138671875 1358.03125 54.638671875 1358.03125 85.419921875 c 1 + 1358.03125 120.602539062 1358.03125 155.784179688 1358.03125 190.966796875 c 1 + 1358.03125 221.748046875 1353.890625 249.248046875 1345.609375 273.544921875 c 0 + 1337.25 297.841796875 1325.609375 318.544921875 1310.53125 335.498046875 c 0 + 1295.53125 352.451171875 1277.25 365.419921875 1255.84375 374.326171875 c 0 + 1234.359375 383.310546875 1210.84375 387.763671875 1185.296875 387.763671875 c 0 + 1159.046875 387.763671875 1135.375 383.310546875 1114.203125 374.326171875 c 0 + 1093.109375 365.419921875 1074.984375 352.451171875 1059.984375 335.498046875 c 0 + 1044.90625 318.544921875 1033.265625 297.841796875 1024.90625 273.544921875 c 0 + 1016.625 249.248046875 1012.484375 221.748046875 1012.484375 190.966796875 c 1 + 1012.484375 155.784179688 1012.484375 120.602539062 1012.484375 85.419921875 c 1 + 1012.484375 54.638671875 1016.625 27.138671875 1024.90625 2.841796875 c 0 + 1033.265625 -21.455078125 1044.90625 -42.158203125 1059.984375 -59.111328125 c 0 + 1074.984375 -76.064453125 1093.109375 -89.033203125 1114.203125 -97.939453125 c 0 + 1135.375 -106.923828125 1159.046875 -111.376953125 1185.296875 -111.376953125 c 0 +586 657.685546875 m 256 + 542.40625 657.685546875 502.875 665.185546875 467.40625 680.185546875 c 0 + 431.78125 695.263671875 401.46875 717.294921875 376.15625 746.435546875 c 0 + 350.84375 775.576171875 331.3125 811.748046875 317.5625 854.951171875 c 0 + 303.8125 898.154296875 296.9375 947.919921875 296.9375 1004.24804688 c 256 + 296.9375 1060.49804688 303.8125 1110.26367188 317.5625 1153.46679688 c 0 + 331.3125 1196.66992188 350.84375 1232.84179688 376.15625 1261.98242188 c 0 + 401.46875 1291.12304688 431.78125 1313.15429688 467.40625 1328.23242188 c 0 + 502.875 1343.23242188 542.40625 1350.73242188 586 1350.73242188 c 256 + 629.4375 1350.73242188 668.96875 1343.23242188 704.4375 1328.23242188 c 0 + 740.0625 1313.15429688 770.375 1291.12304688 795.6875 1261.98242188 c 0 + 821 1232.84179688 840.53125 1196.66992188 854.28125 1153.46679688 c 0 + 868.03125 1110.26367188 874.90625 1060.49804688 874.90625 1004.24804688 c 256 + 874.90625 947.919921875 868.03125 898.154296875 854.28125 854.951171875 c 0 + 840.53125 811.748046875 821 775.576171875 795.6875 746.435546875 c 0 + 770.375 717.294921875 740.0625 695.263671875 704.4375 680.185546875 c 0 + 668.96875 665.185546875 629.4375 657.685546875 586 657.685546875 c 256 +586 754.638671875 m 0 + 611.46875 754.638671875 635.0625 759.091796875 656.46875 768.076171875 c 0 + 677.875 776.982421875 696.15625 789.951171875 711.15625 806.904296875 c 0 + 726.3125 823.857421875 737.875 844.560546875 746.3125 868.857421875 c 0 + 754.59375 893.154296875 758.65625 920.654296875 758.65625 951.435546875 c 1 + 758.65625 986.618164062 758.65625 1021.79980469 758.65625 1056.98242188 c 1 + 758.65625 1087.76367188 754.59375 1115.26367188 746.3125 1139.56054688 c 0 + 737.875 1163.85742188 726.3125 1184.56054688 711.15625 1201.51367188 c 0 + 696.15625 1218.46679688 677.875 1231.43554688 656.46875 1240.34179688 c 0 + 635.0625 1249.32617188 611.46875 1253.77929688 586 1253.77929688 c 0 + 559.75 1253.77929688 536 1249.32617188 514.90625 1240.34179688 c 0 + 493.8125 1231.43554688 475.6875 1218.46679688 460.6875 1201.51367188 c 0 + 445.53125 1184.56054688 433.96875 1163.85742188 425.53125 1139.56054688 c 0 + 417.25 1115.26367188 413.1875 1087.76367188 413.1875 1056.98242188 c 1 + 413.1875 1021.79980469 413.1875 986.618164062 413.1875 951.435546875 c 1 + 413.1875 920.654296875 417.25 893.154296875 425.53125 868.857421875 c 0 + 433.96875 844.560546875 445.53125 823.857421875 460.6875 806.904296875 c 0 + 475.6875 789.951171875 493.8125 776.982421875 514.90625 768.076171875 c 0 + 536 759.091796875 559.75 754.638671875 586 754.638671875 c 0 +1295.375 1243.23242188 m 1 + 1295.375 1051.87792969 1295.375 860.524414062 1295.375 669.169921875 c 1 + 1259.22949219 669.169921875 1223.08300781 669.169921875 1186.9375 669.169921875 c 1 + 1186.9375 860.524414062 1186.9375 1051.87792969 1186.9375 1243.23242188 c 1 + 1120.375 1243.23242188 1053.8125 1243.23242188 987.25 1243.23242188 c 1 + 987.25 1275.23730469 987.25 1307.24316406 987.25 1339.24804688 c 1 + 1156.52050781 1339.24804688 1325.79199219 1339.24804688 1495.0625 1339.24804688 c 1 + 1495.0625 1307.24316406 1495.0625 1275.23730469 1495.0625 1243.23242188 c 1 + 1428.5 1243.23242188 1361.9375 1243.23242188 1295.375 1243.23242188 c 1 +EndSplineSet +EndChar + +StartChar: uniE11C +Encoding: 57628 57628 29 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: -202.66 89.2188<744.623 935.553> 79.527 90.2344<158.82 367.996> 333.98 144.922<1268.27 1295.6 1615.77 1643.59> 388.668 90.2344<158.82 367.996 736.426 938.646> 1200 144.922<713.898 741.227 1061.4 1089.21> +VStem: 57.0234 101.797<-191.176 79.527 169.762 388.668> 387.258 108.516<189.103 369.33> 590.148 109.453<-64.9293 352.656> 622.648 97.9688<674.84 1198.24> 1082.49 97.9688<674.84 1200.09> 1177.02 97.9688<-191.176 332.225> 1636.87 97.9688<-191.176 334.071> +DStem2: 742.648 1344.92 725.383 1200 0.416929 -0.908939<124.527 395.989> 1297.02 478.902 1279.76 333.98 0.416929 -0.908939<124.527 395.989> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: -142.66 89.2188<744.623 935.553> 139.527 90.2344<158.82 367.996> 393.98 144.922<1268.27 1295.6 1615.77 1643.59> 448.668 90.2344<158.82 367.996 736.426 938.646> 1260 144.922<713.898 741.227 1061.4 1089.21> +VStem: 57.0234 101.797<-131.176 139.527 229.762 448.668> 387.258 108.516<249.103 429.33> 590.148 109.453<-4.92935 412.656> 622.648 97.9688<734.84 1258.24> 1082.49 97.9688<734.84 1260.09> 1177.02 97.9688<-131.176 392.225> 1636.87 97.9688<-131.176 394.071> +DStem2: 742.648 1404.92 725.383 1260 0.416929 -0.908939<124.527 395.989> 1297.02 538.902 1279.76 393.98 0.416929 -0.908939<124.527 395.989> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +57.0234375 -191.17578125 m 1xde10 + 57.0234375 32.18359375 57.0234375 255.54296875 57.0234375 478.90234375 c 1 + 145.356445312 478.90234375 233.690429688 478.90234375 322.0234375 478.90234375 c 1 + 379.6015625 478.90234375 422.9609375 461.79296875 452.1015625 427.57421875 c 0 + 481.1640625 393.27734375 495.7734375 343.90234375 495.7734375 279.21484375 c 256 + 495.7734375 214.60546875 481.1640625 165.15234375 452.1015625 130.93359375 c 0 + 422.9609375 96.63671875 379.6015625 79.52734375 322.0234375 79.52734375 c 1 + 267.622070312 79.52734375 213.221679688 79.52734375 158.8203125 79.52734375 c 1 + 158.8203125 -10.70703125 158.8203125 -100.94140625 158.8203125 -191.17578125 c 1 + 124.887695312 -191.17578125 90.9560546875 -191.17578125 57.0234375 -191.17578125 c 1xde10 +158.8203125 169.76171875 m 1 + 210.331054688 169.76171875 261.840820312 169.76171875 313.3515625 169.76171875 c 1 + 337.6484375 169.76171875 356.0859375 176.01171875 368.5859375 188.51171875 c 0 + 381.0078125 201.01171875 387.2578125 221.01171875 387.2578125 248.51171875 c 1 + 387.2578125 268.98046875 387.2578125 289.44921875 387.2578125 309.91796875 c 1 + 387.2578125 337.49609375 381.0078125 357.49609375 368.5859375 369.91796875 c 0 + 356.0859375 382.41796875 337.6484375 388.66796875 313.3515625 388.66796875 c 1 + 261.840820312 388.66796875 210.331054688 388.66796875 158.8203125 388.66796875 c 1 + 158.8203125 315.69921875 158.8203125 242.73046875 158.8203125 169.76171875 c 1 +843.5859375 -202.66015625 m 0 + 804.5234375 -202.66015625 769.5234375 -196.09765625 738.5078125 -183.05078125 c 0 + 707.4140625 -169.92578125 680.8515625 -149.22265625 658.8203125 -121.09765625 c 0 + 636.7109375 -92.97265625 619.7578125 -56.95703125 607.8828125 -13.12890625 c 0 + 596.0859375 30.77734375 590.1484375 83.04296875 590.1484375 143.90234375 c 256 + 590.1484375 204.68359375 596.0859375 256.94921875 607.8828125 300.85546875 c 0 + 619.7578125 344.68359375 636.7109375 380.69921875 658.8203125 408.82421875 c 0 + 680.8515625 436.94921875 707.4140625 457.65234375 738.5078125 470.77734375 c 0 + 769.5234375 483.90234375 804.5234375 490.38671875 843.5859375 490.38671875 c 0 + 900.5390625 490.38671875 946.1640625 478.122070312 980.3828125 453.43359375 c 0 + 1014.6015625 428.82421875 1042.0234375 391.87109375 1062.4921875 342.57421875 c 1 + 1033.69042969 326.584960938 1004.88769531 310.595703125 976.0859375 294.60546875 c 1 + 964.5234375 332.33984375 948.4296875 359.528320312 927.5703125 376.16796875 c 0 + 906.7890625 392.80859375 878.8203125 401.16796875 843.5859375 401.16796875 c 0 + 798.1953125 401.16796875 762.8046875 385.46484375 737.4921875 354.13671875 c 0 + 712.2578125 322.73046875 699.6015625 279.52734375 699.6015625 224.52734375 c 1 + 699.6015625 170.751953125 699.6015625 116.975585938 699.6015625 63.19921875 c 1xcf10 + 699.6015625 8.19921875 712.2578125 -35.00390625 737.4921875 -66.41015625 c 0 + 762.8046875 -97.73828125 798.1953125 -113.44140625 843.5859375 -113.44140625 c 0 + 879.4453125 -113.44140625 908.4296875 -104.45703125 930.4609375 -86.56640625 c 0 + 952.5703125 -68.59765625 969.6796875 -39.84765625 981.8671875 -0.16015625 c 1 + 1010.01855469 -16.80078125 1038.16894531 -33.44140625 1066.3203125 -50.08203125 c 1 + 1045.2265625 -99.30078125 1017.0234375 -137.11328125 981.8671875 -163.36328125 c 0 + 946.6328125 -189.61328125 900.5390625 -202.66015625 843.5859375 -202.66015625 c 0 +1636.8671875 221.63671875 m 1 + 1639.10644531 259.709960938 1641.34667969 297.783203125 1643.5859375 335.85546875 c 1 + 1639.7578125 335.85546875 1635.9296875 335.85546875 1632.1015625 335.85546875 c 1 + 1616.73730469 298.408203125 1601.37207031 260.959960938 1586.0078125 223.51171875 c 1 + 1542.4921875 132.65234375 1498.9765625 41.79296875 1455.4609375 -49.06640625 c 1 + 1412.2578125 41.79296875 1369.0546875 132.65234375 1325.8515625 223.51171875 c 1 + 1310.48730469 260.334960938 1295.12207031 297.158203125 1279.7578125 333.98046875 c 1 + 1275.9296875 333.98046875 1272.1015625 333.98046875 1268.2734375 333.98046875 c 1xee30 + 1270.51269531 296.533203125 1272.75292969 259.084960938 1274.9921875 221.63671875 c 1 + 1274.9921875 84.033203125 1274.9921875 -53.5712890625 1274.9921875 -191.17578125 c 1 + 1242.3359375 -191.17578125 1209.6796875 -191.17578125 1177.0234375 -191.17578125 c 1 + 1177.0234375 32.18359375 1177.0234375 255.54296875 1177.0234375 478.90234375 c 1 + 1217.0234375 478.90234375 1257.0234375 478.90234375 1297.0234375 478.90234375 c 1xde30 + 1333.1953125 400.830078125 1369.3671875 322.756835938 1405.5390625 244.68359375 c 1 + 1421.21582031 200.517578125 1436.89355469 156.350585938 1452.5703125 112.18359375 c 1 + 1455.43457031 112.18359375 1458.29980469 112.18359375 1461.1640625 112.18359375 c 1 + 1476.8671875 156.350585938 1492.5703125 200.517578125 1508.2734375 244.68359375 c 1 + 1544.10644531 322.756835938 1579.94042969 400.830078125 1615.7734375 478.90234375 c 1xee30 + 1655.4609375 478.90234375 1695.1484375 478.90234375 1734.8359375 478.90234375 c 1xde30 + 1734.8359375 255.54296875 1734.8359375 32.18359375 1734.8359375 -191.17578125 c 1 + 1702.1796875 -191.17578125 1669.5234375 -191.17578125 1636.8671875 -191.17578125 c 1 + 1636.8671875 -53.5712890625 1636.8671875 84.033203125 1636.8671875 221.63671875 c 1 +1082.4921875 1087.65234375 m 1xced0 + 1084.73144531 1125.72558594 1086.97167969 1163.79882812 1089.2109375 1201.87109375 c 1 + 1085.3828125 1201.87109375 1081.5546875 1201.87109375 1077.7265625 1201.87109375 c 1 + 1062.36230469 1164.42382812 1046.99707031 1126.97558594 1031.6328125 1089.52734375 c 1 + 988.1171875 998.66796875 944.6015625 907.80859375 901.0859375 816.94921875 c 1 + 857.8828125 907.80859375 814.6796875 998.66796875 771.4765625 1089.52734375 c 1 + 756.112304688 1126.35058594 740.747070312 1163.17382812 725.3828125 1199.99609375 c 1 + 721.5546875 1199.99609375 717.7265625 1199.99609375 713.8984375 1199.99609375 c 1 + 716.137695312 1162.54882812 718.377929688 1125.10058594 720.6171875 1087.65234375 c 1 + 720.6171875 950.048828125 720.6171875 812.444335938 720.6171875 674.83984375 c 1 + 687.9609375 674.83984375 655.3046875 674.83984375 622.6484375 674.83984375 c 1 + 622.6484375 898.19921875 622.6484375 1121.55859375 622.6484375 1344.91796875 c 1 + 662.6484375 1344.91796875 702.6484375 1344.91796875 742.6484375 1344.91796875 c 1 + 778.8203125 1266.84570312 814.9921875 1188.77246094 851.1640625 1110.69921875 c 1 + 866.840820312 1066.53320312 882.518554688 1022.36621094 898.1953125 978.19921875 c 1 + 901.059570312 978.19921875 903.924804688 978.19921875 906.7890625 978.19921875 c 1 + 922.4921875 1022.36621094 938.1953125 1066.53320312 953.8984375 1110.69921875 c 1 + 989.731445312 1188.77246094 1025.56542969 1266.84570312 1061.3984375 1344.91796875 c 1 + 1101.0859375 1344.91796875 1140.7734375 1344.91796875 1180.4609375 1344.91796875 c 1 + 1180.4609375 1121.55859375 1180.4609375 898.19921875 1180.4609375 674.83984375 c 1 + 1147.8046875 674.83984375 1115.1484375 674.83984375 1082.4921875 674.83984375 c 1 + 1082.4921875 812.444335938 1082.4921875 950.048828125 1082.4921875 1087.65234375 c 1xced0 +EndSplineSet +EndChar + +StartChar: uniE11D +Encoding: 57629 57629 30 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: -196.846 96.0156<497.016 817.797 1015.27 1260.36> 95.029 95.9375<497.016 787.953 1142.69 1260.82> 377.217 96.0156<497.016 817.797 1052.91 1288.54> 657.686 95.9375<459.826 685.636> 1254.79 95.9375<485.37 703.815> +VStem: 353.969 107.5<1097.56 1233.85> 388.578 108.438<-100.83 95.029 190.967 377.217> 713.969 107.5<780.735 927.928> 924.672 107.5<231.541 367.835> 937.875 103.75<669.17 1181.83> 1284.67 107.5<-85.2804 61.913> 1354.59 103.594<826.592 1339.25> +DStem2: 568.031 1070.42 549.75 967.76 0.978916 -0.204262<-84.3815 149.558> 1277.72 968.7 1118.34 1039.72 0.508638 -0.860981<-299.653 157.446> 1138.73 204.404 1120.45 101.748 0.978916 -0.204262<-84.3815 149.558> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: -136.846 96.0156<497.016 817.797 1015.27 1260.36> 155.029 95.9375<497.016 787.953 1142.69 1260.82> 437.217 96.0156<497.016 817.797 1052.91 1288.54> 717.686 95.9375<459.826 685.636> 1314.79 95.9375<485.37 703.815> +VStem: 353.969 107.5<1157.56 1293.85> 388.578 108.438<-40.8301 155.029 250.967 437.217> 713.969 107.5<840.735 987.928> 924.672 107.5<291.541 427.835> 937.875 103.75<729.17 1241.83> 1284.67 107.5<-25.2804 121.913> 1354.59 103.594<886.592 1399.25> +DStem2: 568.031 1130.42 549.75 1027.76 0.978916 -0.204262<-84.3815 149.558> 1277.72 1028.7 1118.34 1099.72 0.508638 -0.860981<-299.653 157.446> 1138.73 264.404 1120.45 161.748 0.978916 -0.204262<-84.3815 149.558> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +388.578125 -196.845703125 m 1xfb + 388.578125 26.513671875 388.578125 249.873046875 388.578125 473.232421875 c 1 + 531.651367188 473.232421875 674.723632812 473.232421875 817.796875 473.232421875 c 1 + 817.796875 441.227539062 817.796875 409.221679688 817.796875 377.216796875 c 1 + 710.870117188 377.216796875 603.942382812 377.216796875 497.015625 377.216796875 c 1 + 497.015625 315.133789062 497.015625 253.049804688 497.015625 190.966796875 c 1 + 593.995117188 190.966796875 690.973632812 190.966796875 787.953125 190.966796875 c 1 + 787.953125 158.987304688 787.953125 127.008789062 787.953125 95.029296875 c 1 + 690.973632812 95.029296875 593.995117188 95.029296875 497.015625 95.029296875 c 1 + 497.015625 29.7431640625 497.015625 -35.5439453125 497.015625 -100.830078125 c 1 + 603.942382812 -100.830078125 710.870117188 -100.830078125 817.796875 -100.830078125 c 1 + 817.796875 -132.834960938 817.796875 -164.840820312 817.796875 -196.845703125 c 1 + 674.723632812 -196.845703125 531.651367188 -196.845703125 388.578125 -196.845703125 c 1xfb +1149.203125 -208.330078125 m 0 + 1092.953125 -208.330078125 1045.140625 -198.095703125 1005.765625 -177.626953125 c 0 + 966.390625 -157.158203125 932.640625 -129.658203125 904.515625 -95.048828125 c 1 + 929.463867188 -71.689453125 954.411132812 -48.330078125 979.359375 -24.970703125 c 1 + 1002.953125 -53.798828125 1029.046875 -75.595703125 1057.484375 -90.283203125 c 0 + 1086.078125 -104.970703125 1118.578125 -112.392578125 1154.984375 -112.392578125 c 0 + 1197.953125 -112.392578125 1230.140625 -102.783203125 1252.015625 -83.564453125 c 0 + 1273.734375 -64.345703125 1284.671875 -38.408203125 1284.671875 -5.830078125 c 0 + 1284.671875 20.419921875 1276.859375 41.201171875 1261.546875 56.591796875 c 0 + 1246.234375 71.982421875 1219.046875 83.466796875 1179.984375 91.123046875 c 1 + 1160.140625 94.6650390625 1140.296875 98.2060546875 1120.453125 101.748046875 c 1 + 1055.140625 113.857421875 1006.234375 135.341796875 973.578125 166.044921875 c 0 + 940.921875 196.748046875 924.671875 239.013671875 924.671875 292.763671875 c 0 + 924.671875 322.216796875 930.140625 348.935546875 941.390625 372.919921875 c 0 + 952.640625 396.904296875 968.265625 417.060546875 988.421875 433.388671875 c 0 + 1008.578125 449.716796875 1033.109375 462.373046875 1061.859375 471.279296875 c 0 + 1090.609375 480.263671875 1122.953125 484.716796875 1158.890625 484.716796875 c 0 + 1209.359375 484.716796875 1253.265625 475.966796875 1290.296875 458.388671875 c 0 + 1327.484375 440.732421875 1359.203125 415.341796875 1385.453125 382.060546875 c 1 + 1360.140625 359.665039062 1334.828125 337.268554688 1309.515625 314.873046875 c 1 + 1292.328125 337.216796875 1271.234375 355.185546875 1246.234375 368.623046875 c 0 + 1221.234375 382.060546875 1190.140625 388.779296875 1153.109375 388.779296875 c 0 + 1114.671875 388.779296875 1084.984375 381.044921875 1063.734375 365.732421875 c 0 + 1042.640625 350.341796875 1032.171875 327.919921875 1032.171875 298.544921875 c 0 + 1032.171875 270.341796875 1040.765625 249.404296875 1058.109375 235.654296875 c 0 + 1075.296875 221.904296875 1102.171875 211.435546875 1138.734375 204.404296875 c 1 + 1158.578125 200.263671875 1178.421875 196.123046875 1198.265625 191.982421875 c 1 + 1265.453125 179.169921875 1314.515625 157.373046875 1345.609375 126.669921875 c 0 + 1376.546875 95.966796875 1392.171875 53.701171875 1392.171875 -0.048828125 c 0xf9a0 + 1392.171875 -31.376953125 1386.703125 -59.892578125 1375.765625 -85.517578125 c 0 + 1364.984375 -111.064453125 1349.046875 -133.017578125 1328.265625 -151.220703125 c 0 + 1307.484375 -169.501953125 1282.015625 -183.564453125 1252.015625 -193.486328125 c 0 + 1221.859375 -203.408203125 1187.640625 -208.330078125 1149.203125 -208.330078125 c 0 +578.5 657.685546875 m 0 + 522.25 657.685546875 474.4375 667.919921875 435.0625 688.388671875 c 0 + 395.6875 708.857421875 361.9375 736.357421875 333.8125 770.966796875 c 1 + 358.760742188 794.326171875 383.708007812 817.685546875 408.65625 841.044921875 c 1 + 432.25 812.216796875 458.34375 790.419921875 486.78125 775.732421875 c 0 + 515.375 761.044921875 547.875 753.623046875 584.28125 753.623046875 c 0 + 627.25 753.623046875 659.4375 763.232421875 681.3125 782.451171875 c 0 + 703.03125 801.669921875 713.96875 827.607421875 713.96875 860.185546875 c 0 + 713.96875 886.435546875 706.15625 907.216796875 690.84375 922.607421875 c 0 + 675.53125 937.998046875 648.34375 949.482421875 609.28125 957.138671875 c 1 + 589.4375 960.680664062 569.59375 964.221679688 549.75 967.763671875 c 1 + 484.4375 979.873046875 435.53125 1001.35742188 402.875 1032.06054688 c 0 + 370.21875 1062.76367188 353.96875 1105.02929688 353.96875 1158.77929688 c 0 + 353.96875 1188.23242188 359.4375 1214.95117188 370.6875 1238.93554688 c 0 + 381.9375 1262.91992188 397.5625 1283.07617188 417.71875 1299.40429688 c 0 + 437.875 1315.73242188 462.40625 1328.38867188 491.15625 1337.29492188 c 0 + 519.90625 1346.27929688 552.25 1350.73242188 588.1875 1350.73242188 c 0 + 638.65625 1350.73242188 682.5625 1341.98242188 719.59375 1324.40429688 c 0 + 756.78125 1306.74804688 788.5 1281.35742188 814.75 1248.07617188 c 1 + 789.4375 1225.68066406 764.125 1203.28417969 738.8125 1180.88867188 c 1 + 721.625 1203.23242188 700.53125 1221.20117188 675.53125 1234.63867188 c 0 + 650.53125 1248.07617188 619.4375 1254.79492188 582.40625 1254.79492188 c 0 + 543.96875 1254.79492188 514.28125 1247.06054688 493.03125 1231.74804688 c 0 + 471.9375 1216.35742188 461.46875 1193.93554688 461.46875 1164.56054688 c 0xfd + 461.46875 1136.35742188 470.0625 1115.41992188 487.40625 1101.66992188 c 0 + 504.59375 1087.91992188 531.46875 1077.45117188 568.03125 1070.41992188 c 1 + 587.875 1066.27929688 607.71875 1062.13867188 627.5625 1057.99804688 c 1 + 694.75 1045.18554688 743.8125 1023.38867188 774.90625 992.685546875 c 0 + 805.84375 961.982421875 821.46875 919.716796875 821.46875 865.966796875 c 0 + 821.46875 834.638671875 816 806.123046875 805.0625 780.498046875 c 0 + 794.28125 754.951171875 778.34375 732.998046875 757.5625 714.794921875 c 0 + 736.78125 696.513671875 711.3125 682.451171875 681.3125 672.529296875 c 0 + 651.15625 662.607421875 616.9375 657.685546875 578.5 657.685546875 c 0 +1118.34375 1039.71679688 m 1 + 1093.70800781 1087.08691406 1069.07324219 1134.45605469 1044.4375 1181.82617188 c 1 + 1043.5 1181.82617188 1042.5625 1181.82617188 1041.625 1181.82617188 c 1 + 1041.625 1010.94042969 1041.625 840.055664062 1041.625 669.169921875 c 1 + 1007.04199219 669.169921875 972.458007812 669.169921875 937.875 669.169921875 c 1 + 937.875 892.529296875 937.875 1115.88867188 937.875 1339.24804688 c 1 + 978.1875 1339.24804688 1018.5 1339.24804688 1058.8125 1339.24804688 c 1 + 1131.78125 1215.73242188 1204.75 1092.21679688 1277.71875 968.701171875 c 1 + 1302.35449219 921.331054688 1326.98925781 873.961914062 1351.625 826.591796875 c 1 + 1352.61425781 826.591796875 1353.60449219 826.591796875 1354.59375 826.591796875 c 1 + 1354.59375 997.477539062 1354.59375 1168.36230469 1354.59375 1339.24804688 c 1 + 1389.125 1339.24804688 1423.65625 1339.24804688 1458.1875 1339.24804688 c 1 + 1458.1875 1115.88867188 1458.1875 892.529296875 1458.1875 669.169921875 c 1xf950 + 1417.875 669.169921875 1377.5625 669.169921875 1337.25 669.169921875 c 1 + 1264.28125 792.685546875 1191.3125 916.201171875 1118.34375 1039.71679688 c 1 +EndSplineSet +EndChar + +StartChar: uniE11E +Encoding: 57630 57630 31 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 129.845 119.922<380.027 643.107 1147.14 1395.21> 876.231 119.922<401.199 656.619> +VStem: 232.816 134.375<683.539 846.481> 682.816 134.375<287.984 463.824> 958.012 133.203<308.461 981.8> 1451.18 133.203<308.461 981.8> +DStem2: 500.395 645.763 477.543 517.442 0.978916 -0.204262<-105.472 187.038> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 189.845 119.922<380.027 643.107 1147.14 1395.21> 936.231 119.922<401.199 656.619> +VStem: 232.816 134.375<743.539 906.481> 682.816 134.375<347.984 523.824> 958.012 133.203<368.461 1041.8> 1451.18 133.203<368.461 1041.8> +DStem2: 500.395 705.763 477.543 577.442 0.978916 -0.204262<-105.472 187.038> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +513.578125 129.844726562 m 0 + 443.16796875 129.844726562 383.40234375 142.637695312 334.18359375 168.223632812 c 0 + 284.96484375 193.809570312 242.77734375 228.184570312 207.62109375 271.446289062 c 1 + 238.805664062 300.645507812 269.991210938 329.844726562 301.17578125 359.043945312 c 1 + 330.765625 323.008789062 363.3828125 295.762695312 398.9296875 277.403320312 c 0 + 434.57421875 259.043945312 475.19921875 249.766601562 520.8046875 249.766601562 c 0 + 574.41796875 249.766601562 614.75 261.778320312 641.99609375 285.801757812 c 0 + 669.14453125 309.825195312 682.81640625 342.247070312 682.81640625 382.969726562 c 0 + 682.81640625 415.782226562 673.1484375 441.758789062 654.0078125 460.997070312 c 0 + 634.76953125 480.235351562 600.78515625 494.590820312 551.95703125 504.161132812 c 1 + 527.15234375 508.587890625 502.34765625 513.014648438 477.54296875 517.442382812 c 1 + 396 532.579101562 334.76953125 559.434570312 293.94921875 597.813476562 c 0 + 253.12890625 636.192382812 232.81640625 689.024414062 232.81640625 756.211914062 c 0 + 232.81640625 793.028320312 239.75 826.426757812 253.8125 856.407226562 c 0 + 267.77734375 886.387695312 287.40625 911.583007812 312.6015625 931.993164062 c 0 + 337.796875 952.403320312 368.36328125 968.223632812 404.3984375 979.356445312 c 0 + 440.3359375 990.586914062 480.765625 996.153320312 525.58984375 996.153320312 c 0 + 588.7734375 996.153320312 643.55859375 985.215820312 689.9453125 963.243164062 c 0 + 736.33203125 941.172851562 775.98046875 909.434570312 808.79296875 867.833007812 c 1 + 777.184570312 839.837890625 745.577148438 811.842773438 713.96875 783.848632812 c 1 + 692.38671875 811.778320312 666.01953125 834.239257812 634.76953125 851.036132812 c 0 + 603.6171875 867.833007812 564.75 876.231445312 518.36328125 876.231445312 c 0 + 470.4140625 876.231445312 433.20703125 866.563476562 406.7421875 847.422851562 c 0 + 380.375 828.184570312 367.19140625 800.157226562 367.19140625 763.438476562 c 0 + 367.19140625 728.184570312 377.93359375 702.012695312 399.61328125 684.825195312 c 0 + 421.1953125 667.637695312 454.7890625 654.551757812 500.39453125 645.762695312 c 1 + 525.19921875 640.586914062 550.00390625 635.411132812 574.80859375 630.235351562 c 1 + 658.79296875 614.219726562 720.21875 586.973632812 758.98828125 548.594726562 c 0 + 797.7578125 510.215820312 817.19140625 457.383789062 817.19140625 390.196289062 c 0 + 817.19140625 351.036132812 810.35546875 315.391601562 796.78125 283.360351562 c 0 + 783.20703125 251.426757812 763.3828125 223.985351562 737.40625 201.231445312 c 0 + 711.33203125 178.379882812 679.59375 160.801757812 641.99609375 148.399414062 c 0 + 604.3984375 135.997070312 561.52734375 129.844726562 513.578125 129.844726562 c 0 +1091.21484375 981.797851562 m 1 + 1091.21484375 809.791992188 1091.21484375 637.787109375 1091.21484375 465.782226562 c 1 + 1091.21484375 394.590820312 1104.7890625 340.977539062 1131.9375 305.040039062 c 0 + 1159.18359375 269.004882812 1205.5703125 251.036132812 1271.1953125 251.036132812 c 256 + 1336.8203125 251.036132812 1383.20703125 269.004882812 1410.35546875 305.040039062 c 0 + 1437.6015625 340.977539062 1451.17578125 394.590820312 1451.17578125 465.782226562 c 1 + 1451.17578125 637.787109375 1451.17578125 809.791992188 1451.17578125 981.797851562 c 1 + 1495.57714844 981.797851562 1539.97753906 981.797851562 1584.37890625 981.797851562 c 1 + 1584.37890625 816.986328125 1584.37890625 652.174804688 1584.37890625 487.364257812 c 1 + 1584.37890625 425.840820312 1578.8125 372.618164062 1567.58203125 327.793945312 c 0 + 1556.3515625 282.969726562 1538.3828125 245.958007812 1513.578125 216.758789062 c 0 + 1488.7734375 187.559570312 1456.546875 165.782226562 1416.99609375 151.426757812 c 0 + 1377.34765625 136.973632812 1328.8125 129.844726562 1271.1953125 129.844726562 c 256 + 1213.578125 129.844726562 1164.9453125 136.973632812 1125.39453125 151.426757812 c 0 + 1085.74609375 165.782226562 1053.6171875 187.559570312 1028.8125 216.758789062 c 0 + 1004.0078125 245.958007812 985.94140625 282.969726562 974.80859375 327.793945312 c 0 + 963.578125 372.618164062 958.01171875 425.840820312 958.01171875 487.364257812 c 1 + 958.01171875 652.174804688 958.01171875 816.986328125 958.01171875 981.797851562 c 1 + 1002.41308594 981.797851562 1046.81347656 981.797851562 1091.21484375 981.797851562 c 1 +EndSplineSet +EndChar + +StartChar: uniE11F +Encoding: 57631 57631 32 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 216.516 89.2188<906.667 1116.84 1445.69 1645.37> 228 108.516<198.32 221.367 546.758 569.805> 494.875 87.3438<1569.19 1693.09> 795.344 102.734<371.133 393.242> 820.344 89.2188<935.851 1133.42 1446.32 1654.53> +VStem: 0 103.75<794.328 898.078> 321.719 123.75<796.086 898.078> 664.375 99.8438<798.234 898.078> 812.781 101.719<653.533 800.771> 1137.31 101.719<326.429 489.709> 1288.88 109.531<354.707 771.324> 1701.69 90.3125<228 326.906 350.738 494.875> +DStem2: 103.75 898.078 0 898.078 0.190374 -0.981712<0 567.853> 216.094 336.516 355.312 640.812 0.136058 0.990701<4.46299 473.288> 530.938 490.109 387.969 795.344 0.136058 -0.990701<-318.35 155.035> 585.625 491.984 617.344 228 0.190374 0.981712<-154.194 413.659> 1006.69 626.438 988.406 530.422 0.978371 -0.206857<-75.1218 135.909> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 276.516 89.2188<906.667 1116.84 1445.69 1645.37> 288 108.516<198.32 221.367 546.758 569.805> 554.875 87.3438<1569.19 1693.09> 855.344 102.734<371.133 393.242> 880.344 89.2188<935.851 1133.42 1446.32 1654.53> +VStem: 0 103.75<854.328 958.078> 321.719 123.75<856.086 958.078> 664.375 99.8438<858.234 958.078> 812.781 101.719<713.533 860.771> 1137.31 101.719<386.429 549.709> 1288.88 109.531<414.707 831.324> 1701.69 90.3125<288 386.906 410.738 554.875> +DStem2: 103.75 958.078 0 958.078 0.190374 -0.981712<0 567.853> 216.094 396.516 355.312 700.812 0.136058 0.990701<4.46299 473.288> 530.938 550.109 387.969 855.344 0.136058 -0.990701<-318.35 155.035> 585.625 551.984 617.344 288 0.190374 0.981712<-154.194 413.659> 1006.69 686.438 988.406 590.422 0.978371 -0.206857<-75.1218 135.909> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +142.1875 228 m 1x77f0 + 94.7919921875 451.359375 47.3955078125 674.71875 0 898.078125 c 1 + 34.5830078125 898.078125 69.1669921875 898.078125 103.75 898.078125 c 1 + 130 762.713867188 156.25 627.348632812 182.5 491.984375 c 1 + 189.53125 440.161132812 196.5625 388.338867188 203.59375 336.515625 c 1 + 207.760742188 336.515625 211.926757812 336.515625 216.09375 336.515625 c 1 + 223.125 387.713867188 230.15625 438.911132812 237.1875 490.109375 c 1 + 265.364257812 626.098632812 293.541992188 762.088867188 321.71875 898.078125 c 1 + 362.96875 898.078125 404.21875 898.078125 445.46875 898.078125 c 1 + 473.958007812 762.088867188 502.448242188 626.098632812 530.9375 490.109375 c 1 + 537.96875 438.911132812 545 387.713867188 552.03125 336.515625 c 1 + 556.198242188 336.515625 560.364257812 336.515625 564.53125 336.515625 c 1 + 571.5625 388.338867188 578.59375 440.161132812 585.625 491.984375 c 1 + 611.875 627.348632812 638.125 762.713867188 664.375 898.078125 c 1 + 697.65625 898.078125 730.9375 898.078125 764.21875 898.078125 c 1 + 715.260742188 674.71875 666.301757812 451.359375 617.34375 228 c 1 + 576.71875 228 536.09375 228 495.46875 228 c 1 + 466.666992188 365.604492188 437.864257812 503.208007812 409.0625 640.8125 c 1 + 402.03125 692.323242188 395 743.833007812 387.96875 795.34375 c 1 + 384.114257812 795.34375 380.260742188 795.34375 376.40625 795.34375 c 1 + 369.375 743.833007812 362.34375 692.323242188 355.3125 640.8125 c 1 + 325.208007812 503.208007812 295.104492188 365.604492188 265 228 c 1 + 224.0625 228 183.125 228 142.1875 228 c 1x77f0 +1017.3125 216.515625 m 4xaff0 + 967.3125 216.515625 924.03125 225.890625 887.15625 244.796875 c 4 + 850.4375 263.703125 818.875 291.046875 792.625 326.90625 c 5 + 815.958007812 348.338867188 839.291992188 369.770507812 862.625 391.203125 c 5 + 882.46875 363.703125 905.28125 342.53125 930.90625 327.84375 c 4 + 956.375 313.15625 985.59375 305.734375 1018.25 305.734375 c 4 + 1097.625 305.734375 1137.3125 342.21875 1137.3125 415.1875 c 4 + 1137.3125 444.640625 1130.125 467.21875 1116.0625 482.84375 c 4 + 1102 498.546875 1077.78125 510.578125 1043.09375 518.859375 c 5 + 1024.86425781 522.713867188 1006.63574219 526.567382812 988.40625 530.421875 c 5 + 928.25 543.859375 884.03125 565.421875 855.4375 595.1875 c 4 + 827 624.953125 812.78125 666.75 812.78125 720.5 c 4 + 812.78125 782.53125 831.53125 829.5625 868.875 861.59375 c 4 + 906.375 893.625 958.71875 909.5625 1025.90625 909.5625 c 4 + 1073.875 909.5625 1114.34375 901.4375 1147.3125 885.109375 c 4 + 1180.28125 868.78125 1208.875 843.390625 1233.25 808.78125 c 5 + 1209.86425781 788.3125 1186.47949219 767.84375 1163.09375 747.375 c 5 + 1145.90625 771.671875 1126.53125 789.953125 1105.125 802.0625 c 4 + 1083.71875 814.25 1056.53125 820.34375 1024.03125 820.34375 c 4 + 987.46875 820.34375 960.125 812.765625 941.84375 797.765625 c 4 + 923.71875 782.6875 914.5 757.921875 914.5 723.390625 c 4 + 914.5 695.1875 921.6875 673.9375 936.0625 659.484375 c 4 + 950.59375 645.109375 974.03125 634.09375 1006.6875 626.4375 c 5 + 1024.91699219 622.270507812 1043.14550781 618.104492188 1061.375 613.9375 c 5 + 1093.40625 606.90625 1120.59375 598.078125 1142.9375 587.53125 c 4 + 1165.4375 576.984375 1183.875 564.015625 1198.25 548.625 c 4 + 1212.625 533.3125 1222.9375 515.1875 1229.34375 494.40625 c 4 + 1235.75 473.625 1239.03125 449.40625 1239.03125 421.90625 c 4 + 1239.03125 354.71875 1219.65625 303.703125 1180.90625 268.78125 c 4 + 1142.15625 233.9375 1087.625 216.515625 1017.3125 216.515625 c 4xaff0 +1701.6875 326.90625 m 5 + 1697.83300781 326.90625 1693.97949219 326.90625 1690.125 326.90625 c 5 + 1683.875 294.875 1667.46875 268.46875 1641.21875 247.6875 c 4 + 1614.96875 226.90625 1577.9375 216.515625 1529.8125 216.515625 c 4xa7f0 + 1495.28125 216.515625 1463.40625 222.84375 1434.34375 235.65625 c 4 + 1405.28125 248.46875 1379.8125 268.78125 1358.09375 296.671875 c 4 + 1336.21875 324.484375 1319.34375 360.34375 1307.15625 404.171875 c 4 + 1294.96875 448 1288.875 500.65625 1288.875 562.0625 c 260 + 1288.875 623.546875 1294.8125 676.125 1306.6875 720.03125 c 4 + 1318.5625 763.859375 1335.75 799.875 1358.5625 828 c 4 + 1381.21875 856.125 1408.5625 876.828125 1440.59375 889.953125 c 4 + 1472.625 903.078125 1508.71875 909.5625 1549.03125 909.5625 c 4 + 1608.5625 909.5625 1657 896.828125 1694.03125 871.203125 c 4 + 1731.21875 845.578125 1759.96875 809.09375 1780.4375 761.75 c 5 + 1752.625 745.421875 1724.8125 729.09375 1697 712.765625 c 5 + 1685.4375 745.421875 1667.9375 771.359375 1644.65625 790.578125 c 4 + 1621.21875 809.796875 1589.65625 819.328125 1549.96875 819.328125 c 4 + 1502 819.328125 1464.8125 804.015625 1438.25 773.3125 c 4 + 1411.6875 742.53125 1398.40625 699.71875 1398.40625 644.640625 c 5 + 1398.40625 590.239257812 1398.40625 535.838867188 1398.40625 481.4375 c 5 + 1398.40625 426.4375 1411.6875 383.546875 1438.25 352.765625 c 4 + 1464.8125 322.0625 1502 306.75 1549.96875 306.75 c 4 + 1569.8125 306.75 1588.40625 309.5625 1605.75 315.34375 c 4 + 1622.9375 321.125 1638.25 329.40625 1651.375 340.34375 c 4 + 1664.5 351.203125 1674.65625 364.796875 1682 381.125 c 4 + 1689.34375 397.453125 1693.09375 415.8125 1693.09375 436.28125 c 5 + 1693.09375 455.8125 1693.09375 475.34375 1693.09375 494.875 c 5 + 1651.79199219 494.875 1610.48925781 494.875 1569.1875 494.875 c 5 + 1569.1875 523.989257812 1569.1875 553.104492188 1569.1875 582.21875 c 5 + 1643.45800781 582.21875 1717.72949219 582.21875 1792 582.21875 c 5 + 1792 464.145507812 1792 346.073242188 1792 228 c 5 + 1761.89550781 228 1731.79199219 228 1701.6875 228 c 5x6ff0 + 1701.6875 260.96875 1701.6875 293.9375 1701.6875 326.90625 c 5 +EndSplineSet +EndChar + +StartChar: uniE120 +Encoding: 57632 57632 33 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: -202.516 96.0156<738.656 979.032> 371.547 96.0156<738.656 979.032> 663.5 96.0156<177.043 421.987 1508.81 1781.47> 930.375 95.0781<868.812 1105.12> 1238.58 95<177.765 421.265 868.812 1105.12> +VStem: 10.5312 116.25<812.663 1184.42> 472.25 116.25<812.663 1184.42> 630.219 108.438<-106.5 371.547> 760.375 108.438<663.5 930.375 1025.45 1238.58> 1034.36 116.172<-51.0968 316.144> 1128.97 114.219<1047.69 1216.26> 1400.38 108.438<759.516 1333.58> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: -142.516 96.0156<738.656 979.032> 431.547 96.0156<738.656 979.032> 723.5 96.0156<177.043 421.987 1508.81 1781.47> 990.375 95.0781<868.812 1105.12> 1298.58 95<177.765 421.265 868.812 1105.12> +VStem: 10.5312 116.25<872.663 1244.42> 472.25 116.25<872.663 1244.42> 630.219 108.438<-46.5 431.547> 760.375 108.438<723.5 990.375 1085.45 1298.58> 1034.36 116.172<8.90325 376.144> 1128.97 114.219<1107.69 1276.26> 1400.38 108.438<819.516 1393.58> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +630.21875 467.5625 m 5xffd0 + 709.254882812 467.5625 788.291992188 467.5625 867.328125 467.5625 c 5 + 910.21875 467.5625 949.046875 460.53125 983.96875 446.46875 c 4 + 1018.8125 432.328125 1048.578125 411.390625 1073.265625 383.578125 c 4 + 1097.875 355.6875 1116.9375 320.84375 1130.375 278.890625 c 4 + 1143.8125 237.015625 1150.53125 188.1875 1150.53125 132.5625 c 260 + 1150.53125 76.859375 1143.8125 28.03125 1130.375 -13.84375 c 4 + 1116.9375 -55.796875 1097.875 -90.640625 1073.265625 -118.53125 c 4 + 1048.578125 -146.34375 1018.8125 -167.28125 983.96875 -181.421875 c 4 + 949.046875 -195.484375 910.21875 -202.515625 867.328125 -202.515625 c 5 + 788.291992188 -202.515625 709.254882812 -202.515625 630.21875 -202.515625 c 5 + 630.21875 20.84375 630.21875 244.203125 630.21875 467.5625 c 5xffd0 +867.328125 -106.5 m 5 + 917.25 -106.5 957.5625 -90.796875 988.265625 -59.46875 c 4 + 1018.96875 -28.140625 1034.359375 17.953125 1034.359375 78.734375 c 5 + 1034.359375 114.59375 1034.359375 150.453125 1034.359375 186.3125 c 5 + 1034.359375 247.09375 1018.96875 293.1875 988.265625 324.515625 c 4 + 957.5625 355.921875 917.25 371.546875 867.328125 371.546875 c 5 + 824.4375 371.546875 781.546875 371.546875 738.65625 371.546875 c 5 + 738.65625 212.198242188 738.65625 52.8486328125 738.65625 -106.5 c 5 + 781.546875 -106.5 824.4375 -106.5 867.328125 -106.5 c 5 +299.59375 652.015625 m 260 + 256 652.015625 216.46875 659.515625 181 674.515625 c 4 + 145.375 689.59375 115.0625 711.625 89.75 740.765625 c 4 + 64.4375 769.90625 44.90625 806.078125 31.15625 849.28125 c 4 + 17.40625 892.484375 10.53125 942.25 10.53125 998.578125 c 260 + 10.53125 1054.828125 17.40625 1104.59375 31.15625 1147.796875 c 4 + 44.90625 1191 64.4375 1227.171875 89.75 1256.3125 c 4 + 115.0625 1285.453125 145.375 1307.484375 181 1322.5625 c 4 + 216.46875 1337.5625 256 1345.0625 299.59375 1345.0625 c 260 + 343.03125 1345.0625 382.5625 1337.5625 418.03125 1322.5625 c 4 + 453.65625 1307.484375 483.96875 1285.453125 509.28125 1256.3125 c 4 + 534.59375 1227.171875 554.125 1191 567.875 1147.796875 c 4 + 581.625 1104.59375 588.5 1054.828125 588.5 998.578125 c 260 + 588.5 942.25 581.625 892.484375 567.875 849.28125 c 4 + 554.125 806.078125 534.59375 769.90625 509.28125 740.765625 c 4 + 483.96875 711.625 453.65625 689.59375 418.03125 674.515625 c 4 + 382.5625 659.515625 343.03125 652.015625 299.59375 652.015625 c 260 +299.59375 748.96875 m 4 + 325.0625 748.96875 348.65625 753.421875 370.0625 762.40625 c 4 + 391.46875 771.3125 409.75 784.28125 424.75 801.234375 c 4 + 439.90625 818.1875 451.46875 838.890625 459.90625 863.1875 c 4 + 468.1875 887.484375 472.25 914.984375 472.25 945.765625 c 5 + 472.25 980.948242188 472.25 1016.12988281 472.25 1051.3125 c 5 + 472.25 1082.09375 468.1875 1109.59375 459.90625 1133.890625 c 4 + 451.46875 1158.1875 439.90625 1178.890625 424.75 1195.84375 c 4 + 409.75 1212.796875 391.46875 1225.765625 370.0625 1234.671875 c 4 + 348.65625 1243.65625 325.0625 1248.109375 299.59375 1248.109375 c 4 + 273.34375 1248.109375 249.59375 1243.65625 228.5 1234.671875 c 4 + 207.40625 1225.765625 189.28125 1212.796875 174.28125 1195.84375 c 4 + 159.125 1178.890625 147.5625 1158.1875 139.125 1133.890625 c 4 + 130.84375 1109.59375 126.78125 1082.09375 126.78125 1051.3125 c 5 + 126.78125 1016.12988281 126.78125 980.948242188 126.78125 945.765625 c 5 + 126.78125 914.984375 130.84375 887.484375 139.125 863.1875 c 4 + 147.5625 838.890625 159.125 818.1875 174.28125 801.234375 c 4 + 189.28125 784.28125 207.40625 771.3125 228.5 762.40625 c 4 + 249.59375 753.421875 273.34375 748.96875 299.59375 748.96875 c 4 +760.375 663.5 m 5 + 760.375 886.859375 760.375 1110.21875 760.375 1333.578125 c 5 + 856.364257812 1333.578125 952.354492188 1333.578125 1048.34375 1333.578125 c 5 + 1110.375 1333.578125 1158.34375 1315.375 1192.25 1278.890625 c 4 + 1226.3125 1242.40625 1243.1875 1193.421875 1243.1875 1132.015625 c 260xffb0 + 1243.1875 1070.53125 1226.3125 1021.546875 1192.25 985.0625 c 4 + 1158.34375 948.65625 1110.375 930.375 1048.34375 930.375 c 5 + 988.5 930.375 928.65625 930.375 868.8125 930.375 c 5 + 868.8125 841.416992188 868.8125 752.458007812 868.8125 663.5 c 5 + 832.666992188 663.5 796.520507812 663.5 760.375 663.5 c 5 +868.8125 1025.453125 m 5 + 926.416992188 1025.453125 984.020507812 1025.453125 1041.625 1025.453125 c 5 + 1069.125 1025.453125 1090.53125 1032.640625 1105.84375 1047.015625 c 4 + 1121.3125 1061.390625 1128.96875 1082.09375 1128.96875 1108.96875 c 5 + 1128.96875 1124.30761719 1128.96875 1139.64550781 1128.96875 1154.984375 c 5 + 1128.96875 1181.9375 1121.3125 1202.5625 1105.84375 1216.9375 c 4 + 1090.53125 1231.3125 1069.125 1238.578125 1041.625 1238.578125 c 5 + 984.020507812 1238.578125 926.416992188 1238.578125 868.8125 1238.578125 c 5 + 868.8125 1167.53613281 868.8125 1096.49511719 868.8125 1025.453125 c 5 +1400.375 663.5 m 5 + 1400.375 886.859375 1400.375 1110.21875 1400.375 1333.578125 c 5 + 1436.52050781 1333.578125 1472.66699219 1333.578125 1508.8125 1333.578125 c 5 + 1508.8125 1142.22363281 1508.8125 950.870117188 1508.8125 759.515625 c 5 + 1599.69824219 759.515625 1690.58300781 759.515625 1781.46875 759.515625 c 5 + 1781.46875 727.510742188 1781.46875 695.504882812 1781.46875 663.5 c 5 + 1654.4375 663.5 1527.40625 663.5 1400.375 663.5 c 5 +EndSplineSet +EndChar + +StartChar: uniE121 +Encoding: 57633 57633 34 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 216.516 90.2344<160.025 367.673> 498.703 90.2344<772.328 981.503> 753.156 144.922<1321.78 1349.11 1669.28 1697.09> 807.844 90.2344<151.573 376.123 772.328 981.503> +VStem: 3.65625 109.453<354.775 771.303> 414.516 109.453<354.775 771.303> 670.531 101.797<228 498.703 588.938 807.844> 1000.77 108.516<608.279 788.506> 1230.53 97.9688<228 751.401> 1690.38 97.9688<228 753.247> +DStem2: 1350.53 898.078 1333.27 753.156 0.416929 -0.908939<124.527 395.989> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 276.516 90.2344<160.025 367.673> 558.703 90.2344<772.328 981.503> 813.156 144.922<1321.78 1349.11 1669.28 1697.09> 867.844 90.2344<151.573 376.123 772.328 981.503> +VStem: 3.65625 109.453<414.775 831.303> 414.516 109.453<414.775 831.303> 670.531 101.797<288 558.703 648.938 867.844> 1000.77 108.516<668.279 848.506> 1230.53 97.9688<288 811.401> 1690.38 97.9688<288 813.247> +DStem2: 1350.53 958.078 1333.27 813.156 0.416929 -0.908939<124.527 395.989> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +263.8125 216.515625 m 256xcfc0 + 223.5 216.515625 187.328125 223.078125 155.375 236.125 c 0 + 123.34375 249.25 96 269.953125 73.265625 298.078125 c 0 + 50.53125 326.203125 33.265625 362.21875 21.390625 406.046875 c 0 + 9.59375 449.953125 3.65625 502.21875 3.65625 563.078125 c 256 + 3.65625 623.859375 9.59375 676.125 21.390625 720.03125 c 0 + 33.265625 763.859375 50.53125 799.875 73.265625 828 c 0 + 96 856.125 123.34375 876.828125 155.375 889.953125 c 0 + 187.328125 903.078125 223.5 909.5625 263.8125 909.5625 c 256 + 304.125 909.5625 340.296875 903.078125 372.328125 889.953125 c 0 + 404.28125 876.828125 431.703125 856.125 454.359375 828 c 0 + 477.09375 799.875 494.359375 763.859375 506.234375 720.03125 c 0 + 518.03125 676.125 523.96875 623.859375 523.96875 563.078125 c 256 + 523.96875 502.21875 518.03125 449.953125 506.234375 406.046875 c 0 + 494.359375 362.21875 477.09375 326.203125 454.359375 298.078125 c 0 + 431.703125 269.953125 404.28125 249.25 372.328125 236.125 c 0 + 340.296875 223.078125 304.125 216.515625 263.8125 216.515625 c 256xcfc0 +263.8125 306.75 m 256 + 311.859375 306.75 348.96875 322.21875 375.21875 353.3125 c 0 + 401.390625 384.328125 414.515625 427.375 414.515625 482.375 c 1 + 414.515625 536.151367188 414.515625 589.926757812 414.515625 643.703125 c 1 + 414.515625 698.703125 401.390625 741.75 375.21875 772.765625 c 0 + 348.96875 803.859375 311.859375 819.328125 263.8125 819.328125 c 256 + 215.84375 819.328125 178.734375 803.859375 152.484375 772.765625 c 0 + 126.234375 741.75 113.109375 698.703125 113.109375 643.703125 c 1 + 113.109375 589.926757812 113.109375 536.151367188 113.109375 482.375 c 1 + 113.109375 427.375 126.234375 384.328125 152.484375 353.3125 c 0 + 178.734375 322.21875 215.84375 306.75 263.8125 306.75 c 256 +670.53125 228 m 1 + 670.53125 451.359375 670.53125 674.71875 670.53125 898.078125 c 1 + 758.864257812 898.078125 847.198242188 898.078125 935.53125 898.078125 c 1xdfc0 + 993.109375 898.078125 1036.46875 880.96875 1065.609375 846.75 c 0 + 1094.671875 812.453125 1109.28125 763.078125 1109.28125 698.390625 c 256 + 1109.28125 633.78125 1094.671875 584.328125 1065.609375 550.109375 c 0 + 1036.46875 515.8125 993.109375 498.703125 935.53125 498.703125 c 1 + 881.129882812 498.703125 826.729492188 498.703125 772.328125 498.703125 c 1 + 772.328125 408.46875 772.328125 318.234375 772.328125 228 c 1 + 738.395507812 228 704.463867188 228 670.53125 228 c 1 +772.328125 588.9375 m 1 + 823.838867188 588.9375 875.348632812 588.9375 926.859375 588.9375 c 1 + 951.15625 588.9375 969.59375 595.1875 982.09375 607.6875 c 0 + 994.515625 620.1875 1000.765625 640.1875 1000.765625 667.6875 c 1 + 1000.765625 688.15625 1000.765625 708.625 1000.765625 729.09375 c 1 + 1000.765625 756.671875 994.515625 776.671875 982.09375 789.09375 c 0 + 969.59375 801.59375 951.15625 807.84375 926.859375 807.84375 c 1 + 875.348632812 807.84375 823.838867188 807.84375 772.328125 807.84375 c 1 + 772.328125 734.875 772.328125 661.90625 772.328125 588.9375 c 1 +1690.375 640.8125 m 1 + 1692.61425781 678.885742188 1694.85449219 716.958007812 1697.09375 755.03125 c 1 + 1693.265625 755.03125 1689.4375 755.03125 1685.609375 755.03125 c 1 + 1670.24511719 717.583007812 1654.87988281 680.135742188 1639.515625 642.6875 c 1 + 1596 551.828125 1552.484375 460.96875 1508.96875 370.109375 c 1 + 1465.765625 460.96875 1422.5625 551.828125 1379.359375 642.6875 c 1 + 1363.99511719 679.510742188 1348.62988281 716.333007812 1333.265625 753.15625 c 1 + 1329.4375 753.15625 1325.609375 753.15625 1321.78125 753.15625 c 1xefc0 + 1324.02050781 715.708007812 1326.26074219 678.260742188 1328.5 640.8125 c 1 + 1328.5 503.208007812 1328.5 365.604492188 1328.5 228 c 1 + 1295.84375 228 1263.1875 228 1230.53125 228 c 1 + 1230.53125 451.359375 1230.53125 674.71875 1230.53125 898.078125 c 1 + 1270.53125 898.078125 1310.53125 898.078125 1350.53125 898.078125 c 1xdfc0 + 1386.703125 820.004882812 1422.875 741.932617188 1459.046875 663.859375 c 1 + 1474.72363281 619.692382812 1490.40136719 575.526367188 1506.078125 531.359375 c 1 + 1508.94238281 531.359375 1511.80761719 531.359375 1514.671875 531.359375 c 1 + 1530.375 575.526367188 1546.078125 619.692382812 1561.78125 663.859375 c 1 + 1597.61425781 741.932617188 1633.44824219 820.004882812 1669.28125 898.078125 c 1xefc0 + 1708.96875 898.078125 1748.65625 898.078125 1788.34375 898.078125 c 1 + 1788.34375 674.71875 1788.34375 451.359375 1788.34375 228 c 1 + 1755.6875 228 1723.03125 228 1690.375 228 c 1 + 1690.375 365.604492188 1690.375 503.208007812 1690.375 640.8125 c 1 +EndSplineSet +EndChar + +StartChar: uniE122 +Encoding: 57634 57634 35 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 228 96.0156<862.719 1183.34 1380.88 1625.94> 519.875 95.9375<862.719 1153.66 1508.24 1626.52> 802.062 96.0156<862.719 1183.34 1418.58 1654.18> +VStem: 34.2812 103.594<228 740.656> 450.844 103.75<385.422 898.078> 754.281 108.438<324.016 519.875 615.812 802.062> 1290.22 107.5<656.387 792.68> 1650.22 107.5<339.565 486.758> +DStem2: 374.125 527.531 214.75 598.547 0.508638 -0.860981<-299.653 157.446> 1504.28 629.25 1486 526.594 0.978916 -0.204262<-84.3745 149.704> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 288 96.0156<862.719 1183.34 1380.88 1625.94> 579.875 95.9375<862.719 1153.66 1508.24 1626.52> 862.062 96.0156<862.719 1183.34 1418.58 1654.18> +VStem: 34.2812 103.594<288 800.656> 450.844 103.75<445.422 958.078> 754.281 108.438<384.016 579.875 675.812 862.062> 1290.22 107.5<716.387 852.68> 1650.22 107.5<399.565 546.758> +DStem2: 374.125 587.531 214.75 658.547 0.508638 -0.860981<-299.653 157.446> 1504.28 689.25 1486 586.594 0.978916 -0.204262<-84.3745 149.704> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +214.75 598.546875 m 1 + 190.114257812 645.916992188 165.479492188 693.286132812 140.84375 740.65625 c 1 + 139.854492188 740.65625 138.864257812 740.65625 137.875 740.65625 c 1 + 137.875 569.770507812 137.875 398.885742188 137.875 228 c 1 + 103.34375 228 68.8125 228 34.28125 228 c 1 + 34.28125 451.359375 34.28125 674.71875 34.28125 898.078125 c 1 + 74.59375 898.078125 114.90625 898.078125 155.21875 898.078125 c 1 + 228.1875 774.5625 301.15625 651.046875 374.125 527.53125 c 1 + 398.760742188 480.161132812 423.395507812 432.791992188 448.03125 385.421875 c 1 + 448.96875 385.421875 449.90625 385.421875 450.84375 385.421875 c 1 + 450.84375 556.307617188 450.84375 727.192382812 450.84375 898.078125 c 1 + 485.426757812 898.078125 520.010742188 898.078125 554.59375 898.078125 c 1 + 554.59375 674.71875 554.59375 451.359375 554.59375 228 c 1 + 514.28125 228 473.96875 228 433.65625 228 c 1 + 360.6875 351.515625 287.71875 475.03125 214.75 598.546875 c 1 +754.28125 228 m 1 + 754.28125 451.359375 754.28125 674.71875 754.28125 898.078125 c 1 + 897.301757812 898.078125 1040.32324219 898.078125 1183.34375 898.078125 c 1 + 1183.34375 866.073242188 1183.34375 834.067382812 1183.34375 802.0625 c 1 + 1076.46875 802.0625 969.59375 802.0625 862.71875 802.0625 c 1 + 862.71875 739.979492188 862.71875 677.895507812 862.71875 615.8125 c 1 + 959.698242188 615.8125 1056.67675781 615.8125 1153.65625 615.8125 c 1 + 1153.65625 583.833007812 1153.65625 551.854492188 1153.65625 519.875 c 1 + 1056.67675781 519.875 959.698242188 519.875 862.71875 519.875 c 1 + 862.71875 454.588867188 862.71875 389.301757812 862.71875 324.015625 c 1 + 969.59375 324.015625 1076.46875 324.015625 1183.34375 324.015625 c 1 + 1183.34375 292.010742188 1183.34375 260.004882812 1183.34375 228 c 1 + 1040.32324219 228 897.301757812 228 754.28125 228 c 1 +1514.90625 216.515625 m 0 + 1458.5 216.515625 1410.6875 226.75 1371.3125 247.21875 c 0 + 1331.9375 267.6875 1298.1875 295.1875 1270.0625 329.796875 c 1 + 1295.01074219 353.15625 1319.95800781 376.515625 1344.90625 399.875 c 1 + 1368.65625 371.046875 1394.75 349.25 1423.1875 334.5625 c 0 + 1451.625 319.875 1484.125 312.453125 1520.6875 312.453125 c 0 + 1563.5 312.453125 1595.84375 322.0625 1617.5625 341.28125 c 0 + 1639.28125 360.5 1650.21875 386.4375 1650.21875 419.015625 c 0 + 1650.21875 445.265625 1642.5625 466.046875 1627.25 481.4375 c 0 + 1611.78125 496.828125 1584.59375 508.3125 1545.53125 515.96875 c 1 + 1525.6875 519.510742188 1505.84375 523.051757812 1486 526.59375 c 1 + 1420.84375 538.703125 1371.78125 560.1875 1339.125 590.890625 c 0 + 1306.46875 621.59375 1290.21875 663.859375 1290.21875 717.609375 c 0 + 1290.21875 747.0625 1295.84375 773.78125 1307.09375 797.765625 c 0 + 1318.1875 821.75 1333.96875 841.90625 1354.125 858.234375 c 0 + 1374.28125 874.5625 1398.65625 887.21875 1427.5625 896.125 c 0 + 1456.3125 905.109375 1488.65625 909.5625 1524.4375 909.5625 c 0 + 1575.0625 909.5625 1618.8125 900.8125 1656 883.234375 c 0 + 1693.03125 865.578125 1724.75 840.1875 1751 806.90625 c 1 + 1725.73925781 784.510742188 1700.47949219 762.114257812 1675.21875 739.71875 c 1 + 1657.875 762.0625 1636.78125 780.03125 1611.78125 793.46875 c 0 + 1586.9375 806.90625 1555.84375 813.625 1518.65625 813.625 c 0 + 1480.375 813.625 1450.53125 805.890625 1429.4375 790.578125 c 0 + 1408.34375 775.1875 1397.71875 752.765625 1397.71875 723.390625 c 0 + 1397.71875 695.1875 1406.3125 674.25 1423.65625 660.5 c 0 + 1441 646.75 1467.875 636.28125 1504.28125 629.25 c 1 + 1524.125 625.109375 1543.96875 620.96875 1563.8125 616.828125 c 1 + 1631 604.015625 1680.21875 582.21875 1711.15625 551.515625 c 0 + 1742.25 520.8125 1757.71875 478.546875 1757.71875 424.796875 c 0 + 1757.71875 393.46875 1752.25 364.953125 1741.46875 339.328125 c 0 + 1730.53125 313.78125 1714.75 291.828125 1693.96875 273.625 c 0 + 1673.03125 255.34375 1647.71875 241.28125 1617.5625 231.359375 c 0 + 1587.5625 221.4375 1553.1875 216.515625 1514.90625 216.515625 c 0 +EndSplineSet +EndChar + +StartChar: uniE123 +Encoding: 57635 57635 36 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: -208.33 91.1719<499.414 694.483 1066.72 1266.62> 109.404 83.5156<1082.67 1250.74> 140.107 89.2969<533.048 697.686> 379.17 94.0625<506.077 806.353> 397.373 87.3438<1075.55 1257.83> 657.686 88.2812<528.291 716.365> 669.17 92.1875<1073.85 1411.82> 1005.19 87.3438<549.317 716.57> 1256.67 94.0625<1075.17 1251.25> +VStem: 386.196 112.344<778.124 972.95> 727.681 113.281<-83.4778 106.427> 746.196 111.406<778.124 972.95> 926.665 113.281<-92.2969 80.715> 946.821 105.625<217.66 372.633> 1280.96 105.547<217.66 372.633 1041.52 1227.98> 1293.38 113.281<-92.2969 80.715> +DStem2: 401.274 99.795 491.509 142.061 0.0726244 0.997359<48.7072 286.444> 956.743 772.842 1073.85 761.357 0.752577 0.658505<80.5713 451.637> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: -148.33 91.1719<499.414 694.483 1066.72 1266.62> 169.404 83.5156<1082.67 1250.74> 200.107 89.2969<533.048 697.686> 439.17 94.0625<506.077 806.353> 457.373 87.3438<1075.55 1257.83> 717.686 88.2812<528.291 716.365> 729.17 92.1875<1073.85 1411.82> 1065.19 87.3438<549.317 716.57> 1316.67 94.0625<1075.17 1251.25> +VStem: 386.196 112.344<838.124 1032.95> 727.681 113.281<-23.4778 166.427> 746.196 111.406<838.124 1032.95> 926.665 113.281<-32.2969 140.715> 946.821 105.625<277.66 432.633> 1280.96 105.547<277.66 432.633 1101.52 1287.98> 1293.38 113.281<-32.2969 140.715> +DStem2: 401.274 159.795 491.509 202.061 0.0726244 0.997359<48.7072 286.444> 956.743 832.842 1073.85 821.357 0.752577 0.658505<80.5713 451.637> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +806.352539062 379.169921875 m 1xb1e0 + 707.16015625 379.169921875 607.966796875 379.169921875 508.774414062 379.169921875 c 1 + 503.01953125 300.133789062 497.263671875 221.096679688 491.508789062 142.060546875 c 1 + 493.748046875 142.060546875 495.98828125 142.060546875 498.227539062 142.060546875 c 1 + 505.883789062 155.498046875 513.930664062 167.451171875 522.211914062 177.998046875 c 0 + 530.571289062 188.623046875 540.102539062 197.685546875 551.040039062 205.419921875 c 0 + 561.899414062 213.076171875 574.399414062 219.013671875 588.461914062 223.154296875 c 0 + 602.524414062 227.294921875 619.165039062 229.404296875 638.383789062 229.404296875 c 0 + 667.211914062 229.404296875 693.930664062 224.560546875 718.540039062 215.029296875 c 0 + 743.149414062 205.419921875 764.633789062 191.669921875 782.836914062 173.701171875 c 0 + 801.118164062 155.810546875 815.336914062 133.857421875 825.571289062 107.919921875 c 0 + 835.805664062 82.060546875 840.961914062 52.763671875 840.961914062 20.107421875 c 0 + 840.961914062 -13.173828125 835.649414062 -43.876953125 825.102539062 -72.080078125 c 0 + 814.555664062 -100.205078125 799.008789062 -124.345703125 778.540039062 -144.501953125 c 0 + 758.071289062 -164.658203125 732.915039062 -180.361328125 703.149414062 -191.533203125 c 0 + 673.383789062 -202.783203125 639.633789062 -208.330078125 601.899414062 -208.330078125 c 0 + 571.821289062 -208.330078125 545.258789062 -204.970703125 522.211914062 -198.251953125 c 0 + 499.165039062 -191.533203125 478.852539062 -182.626953125 461.274414062 -171.376953125 c 0 + 443.618164062 -160.205078125 428.305664062 -147.392578125 415.180664062 -133.017578125 c 0 + 402.055664062 -118.642578125 390.415039062 -103.720703125 380.102539062 -88.330078125 c 1 + 406.352539062 -67.548828125 432.602539062 -46.767578125 458.852539062 -25.986328125 c 1 + 467.211914062 -39.423828125 475.805664062 -51.533203125 484.790039062 -62.470703125 c 0 + 493.774414062 -73.330078125 504.008789062 -82.939453125 515.493164062 -91.220703125 c 0 + 526.977539062 -99.580078125 539.946289062 -105.986328125 554.399414062 -110.439453125 c 0 + 568.774414062 -114.892578125 585.258789062 -117.158203125 603.852539062 -117.158203125 c 0 + 643.461914062 -117.158203125 674.086914062 -106.298828125 695.493164062 -84.501953125 c 0 + 716.899414062 -62.783203125 727.680664062 -32.705078125 727.680664062 5.732421875 c 1 + 727.680664062 9.560546875 727.680664062 13.388671875 727.680664062 17.216796875 c 1 + 727.680664062 55.654296875 716.899414062 85.732421875 695.493164062 107.451171875 c 0 + 674.086914062 129.248046875 643.461914062 140.107421875 603.852539062 140.107421875 c 0 + 575.024414062 140.107421875 551.977539062 134.638671875 534.711914062 123.779296875 c 0 + 517.446289062 112.919921875 502.680664062 100.732421875 490.571289062 87.294921875 c 1 + 460.805664062 91.4619140625 431.040039062 95.6279296875 401.274414062 99.794921875 c 1 + 409.58203125 224.274414062 417.888671875 348.752929688 426.196289062 473.232421875 c 1 + 552.915039062 473.232421875 679.633789062 473.232421875 806.352539062 473.232421875 c 1 + 806.352539062 441.877929688 806.352539062 410.524414062 806.352539062 379.169921875 c 1xb1e0 +1166.66503906 -208.330078125 m 256 + 1127.68066406 -208.330078125 1093.22753906 -203.408203125 1063.46191406 -193.486328125 c 0 + 1033.77441406 -183.564453125 1008.77441406 -169.970703125 988.618164062 -152.705078125 c 0 + 968.461914062 -135.439453125 953.071289062 -114.892578125 942.524414062 -91.220703125 c 0 + 931.977539062 -67.548828125 926.665039062 -42.001953125 926.665039062 -14.423828125 c 0x89c9 + 926.665039062 30.341796875 939.008789062 66.357421875 963.618164062 93.544921875 c 0 + 988.305664062 120.732421875 1020.80566406 139.794921875 1061.11816406 150.654296875 c 1 + 1061.11816406 153.232421875 1061.11816406 155.810546875 1061.11816406 158.388671875 c 1 + 1026.50878906 170.498046875 998.852539062 189.716796875 978.071289062 215.966796875 c 0 + 957.290039062 242.216796875 946.821289062 274.482421875 946.821289062 312.919921875 c 0 + 946.821289062 338.544921875 951.821289062 361.904296875 961.743164062 382.998046875 c 0 + 971.665039062 404.091796875 985.883789062 422.216796875 1004.47753906 437.216796875 c 0 + 1022.99316406 452.294921875 1046.04003906 463.935546875 1073.54003906 472.294921875 c 0 + 1101.11816406 480.576171875 1132.13378906 484.716796875 1166.66503906 484.716796875 c 256 + 1201.27441406 484.716796875 1232.29003906 480.576171875 1259.79003906 472.294921875 c 0 + 1287.36816406 463.935546875 1310.41503906 452.294921875 1328.93066406 437.216796875 c 0 + 1347.52441406 422.216796875 1361.74316406 404.091796875 1371.66503906 382.998046875 c 0 + 1381.58691406 361.904296875 1386.50878906 338.544921875 1386.50878906 312.919921875 c 0x89c6 + 1386.50878906 274.482421875 1376.11816406 242.216796875 1355.33691406 215.966796875 c 0 + 1334.55566406 189.716796875 1306.82128906 170.498046875 1272.29003906 158.388671875 c 1 + 1272.29003906 155.810546875 1272.29003906 153.232421875 1272.29003906 150.654296875 c 1 + 1312.60253906 139.794921875 1345.10253906 120.732421875 1369.71191406 93.544921875 c 0 + 1394.39941406 66.357421875 1406.66503906 30.341796875 1406.66503906 -14.423828125 c 0x89c1 + 1406.66503906 -42.001953125 1401.43066406 -67.548828125 1390.88378906 -91.220703125 c 0 + 1380.25878906 -114.892578125 1364.94628906 -135.439453125 1344.79003906 -152.705078125 c 0 + 1324.63378906 -169.970703125 1299.63378906 -183.564453125 1269.86816406 -193.486328125 c 0 + 1240.10253906 -203.408203125 1205.72753906 -208.330078125 1166.66503906 -208.330078125 c 256 +1166.66503906 -120.986328125 m 256 + 1206.97753906 -120.986328125 1238.22753906 -111.689453125 1260.25878906 -93.173828125 c 0 + 1282.36816406 -74.580078125 1293.38378906 -48.720703125 1293.38378906 -15.439453125 c 1 + 1293.38378906 -9.033203125 1293.38378906 -2.626953125 1293.38378906 3.779296875 c 1 + 1293.38378906 37.060546875 1282.36816406 62.998046875 1260.25878906 81.591796875 c 0 + 1238.22753906 100.107421875 1206.97753906 109.404296875 1166.66503906 109.404296875 c 256xc1c9 + 1126.35253906 109.404296875 1095.18066406 100.107421875 1073.07128906 81.591796875 c 0 + 1051.04003906 62.998046875 1039.94628906 37.060546875 1039.94628906 3.779296875 c 1 + 1039.94628906 -2.626953125 1039.94628906 -9.033203125 1039.94628906 -15.439453125 c 1 + 1039.94628906 -48.720703125 1051.04003906 -74.580078125 1073.07128906 -93.173828125 c 0 + 1095.18066406 -111.689453125 1126.35253906 -120.986328125 1166.66503906 -120.986328125 c 256 +1166.66503906 192.919921875 m 256 + 1203.85253906 192.919921875 1232.13378906 200.888671875 1251.66503906 216.904296875 c 0 + 1271.19628906 232.919921875 1280.96191406 256.279296875 1280.96191406 286.982421875 c 1 + 1280.96191406 292.424804688 1280.96191406 297.868164062 1280.96191406 303.310546875 c 1 + 1280.96191406 334.013671875 1271.19628906 357.373046875 1251.66503906 373.388671875 c 0 + 1232.13378906 389.404296875 1203.85253906 397.373046875 1166.66503906 397.373046875 c 256 + 1129.55566406 397.373046875 1101.27441406 389.404296875 1081.74316406 373.388671875 c 0 + 1062.21191406 357.373046875 1052.44628906 334.013671875 1052.44628906 303.310546875 c 1 + 1052.44628906 297.868164062 1052.44628906 292.424804688 1052.44628906 286.982421875 c 1xc9c6 + 1052.44628906 256.279296875 1062.21191406 232.919921875 1081.74316406 216.904296875 c 0 + 1101.27441406 200.888671875 1129.55566406 192.919921875 1166.66503906 192.919921875 c 256 +622.368164062 657.685546875 m 0x85d0 + 585.258789062 657.685546875 552.133789062 663.701171875 522.993164062 675.888671875 c 0 + 493.852539062 688.076171875 469.243164062 705.498046875 449.086914062 728.232421875 c 0 + 428.930664062 750.966796875 413.383789062 778.310546875 402.524414062 810.263671875 c 0 + 391.665039062 842.294921875 386.196289062 878.466796875 386.196289062 918.779296875 c 0 + 386.196289062 967.373046875 393.540039062 1013.15429688 408.305664062 1056.04492188 c 0 + 422.993164062 1098.93554688 441.899414062 1138.31054688 464.946289062 1174.09179688 c 0 + 487.993164062 1209.95117188 513.696289062 1241.82617188 542.211914062 1269.63867188 c 0 + 570.649414062 1297.45117188 598.696289062 1320.65429688 626.196289062 1339.24804688 c 1 + 674.19140625 1339.24804688 722.185546875 1339.24804688 770.180664062 1339.24804688 c 1 + 732.446289062 1311.74804688 698.540039062 1285.18554688 668.461914062 1259.56054688 c 0 + 638.383789062 1233.93554688 612.133789062 1207.76367188 589.711914062 1180.88867188 c 0 + 567.290039062 1153.93554688 548.618164062 1125.49804688 533.540039062 1095.41992188 c 0 + 518.540039062 1065.34179688 506.821289062 1032.37304688 498.540039062 996.513671875 c 1 + 500.779296875 995.888671875 503.01953125 995.263671875 505.258789062 994.638671875 c 1 + 512.290039062 1008.07617188 520.415039062 1020.65429688 529.711914062 1032.52929688 c 0 + 539.008789062 1044.40429688 549.868164062 1054.79492188 562.368164062 1063.70117188 c 0 + 574.868164062 1072.68554688 589.086914062 1079.71679688 605.102539062 1084.87304688 c 0 + 621.118164062 1089.95117188 639.633789062 1092.52929688 660.727539062 1092.52929688 c 0 + 688.930664062 1092.52929688 715.024414062 1087.76367188 739.008789062 1078.15429688 c 0 + 762.993164062 1068.54492188 783.774414062 1054.63867188 801.430664062 1036.35742188 c 0 + 819.008789062 1018.15429688 832.758789062 996.201171875 842.680664062 970.576171875 c 0 + 852.602539062 945.029296875 857.602539062 916.513671875 857.602539062 885.185546875 c 0 + 857.602539062 851.279296875 851.977539062 820.341796875 840.727539062 792.529296875 c 0 + 829.555664062 764.716796875 813.696289062 740.888671875 793.227539062 721.044921875 c 0 + 772.758789062 701.201171875 747.993164062 685.654296875 718.852539062 674.482421875 c 0 + 689.711914062 663.232421875 657.602539062 657.685546875 622.368164062 657.685546875 c 0x85d0 +622.368164062 745.966796875 m 256 + 661.430664062 745.966796875 691.821289062 756.357421875 713.540039062 777.138671875 c 0 + 735.336914062 797.998046875 746.196289062 828.544921875 746.196289062 868.857421875 c 1 + 746.196289062 873.336914062 746.196289062 877.815429688 746.196289062 882.294921875 c 1 + 746.196289062 922.607421875 735.336914062 953.154296875 713.540039062 973.935546875 c 0 + 691.821289062 994.794921875 661.430664062 1005.18554688 622.368164062 1005.18554688 c 256 + 583.305664062 1005.18554688 552.915039062 994.794921875 531.196289062 973.935546875 c 0 + 509.399414062 953.154296875 498.540039062 922.607421875 498.540039062 882.294921875 c 1 + 498.540039062 877.815429688 498.540039062 873.336914062 498.540039062 868.857421875 c 1 + 498.540039062 828.544921875 509.399414062 797.998046875 531.196289062 777.138671875 c 0 + 552.915039062 756.357421875 583.305664062 745.966796875 622.368164062 745.966796875 c 256 +1411.82128906 669.169921875 m 1x83c0 + 1260.12890625 669.169921875 1108.43554688 669.169921875 956.743164062 669.169921875 c 1 + 956.743164062 703.727539062 956.743164062 738.284179688 956.743164062 772.841796875 c 1 + 1028.12304688 836.513671875 1099.50390625 900.185546875 1170.88378906 963.857421875 c 1 + 1204.79003906 994.638671875 1230.88378906 1023.85742188 1249.08691406 1051.74804688 c 0 + 1267.29003906 1079.56054688 1276.43066406 1108.85742188 1276.43066406 1139.56054688 c 1 + 1276.43066406 1143.72753906 1276.43066406 1147.89355469 1276.43066406 1152.06054688 c 1 + 1276.43066406 1184.71679688 1266.66503906 1210.26367188 1247.13378906 1228.85742188 c 0 + 1227.68066406 1247.37304688 1201.27441406 1256.66992188 1167.99316406 1256.66992188 c 0 + 1149.39941406 1256.66992188 1133.22753906 1253.93554688 1119.47753906 1248.54492188 c 0 + 1105.72753906 1243.07617188 1093.69628906 1235.57617188 1083.46191406 1225.96679688 c 0 + 1073.22753906 1216.35742188 1064.79003906 1205.18554688 1058.07128906 1192.37304688 c 0 + 1051.35253906 1179.56054688 1046.04003906 1165.81054688 1042.21191406 1151.12304688 c 1 + 1010.51953125 1163.28417969 978.826171875 1175.44628906 947.133789062 1187.60742188 c 1 + 954.243164062 1208.70117188 963.774414062 1229.01367188 975.961914062 1248.54492188 c 0 + 988.149414062 1268.07617188 1003.46191406 1285.49804688 1022.05566406 1300.88867188 c 0 + 1040.57128906 1316.20117188 1062.52441406 1328.38867188 1087.83691406 1337.29492188 c 0 + 1113.07128906 1346.27929688 1142.68066406 1350.73242188 1176.58691406 1350.73242188 c 256 + 1210.49316406 1350.73242188 1240.96191406 1345.81054688 1267.83691406 1335.88867188 c 0 + 1294.71191406 1325.96679688 1317.21191406 1312.21679688 1335.49316406 1294.63867188 c 0 + 1353.69628906 1276.98242188 1367.68066406 1256.04492188 1377.21191406 1231.74804688 c 0 + 1386.82128906 1207.37304688 1391.66503906 1180.88867188 1391.66503906 1152.06054688 c 0 + 1391.66503906 1125.18554688 1387.52441406 1100.18554688 1379.16503906 1077.13867188 c 0 + 1370.88378906 1054.09179688 1359.32128906 1032.37304688 1344.63378906 1011.90429688 c 0 + 1329.86816406 991.435546875 1312.75878906 971.904296875 1293.22753906 953.310546875 c 0 + 1273.69628906 934.794921875 1253.07128906 915.888671875 1231.35253906 896.669921875 c 1 + 1178.85253906 851.565429688 1126.35253906 806.461914062 1073.85253906 761.357421875 c 1 + 1186.50878906 761.357421875 1299.16503906 761.357421875 1411.82128906 761.357421875 c 1 + 1411.82128906 730.627929688 1411.82128906 699.899414062 1411.82128906 669.169921875 c 1x83c0 +EndSplineSet +EndChar + +StartChar: uniE124 +Encoding: 57636 57636 37 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: -208.33 91.1719<1068.73 1263.8> 49.873 87.3438<519.871 687.162> 140.107 89.2969<1102.37 1267.01> 379.17 94.0625<1075.4 1375.67> 396.436 88.2812<519.85 708.188> 657.686 88.2812<529.488 717.562> 669.17 92.1875<1075.05 1413.02> 1005.19 87.3438<550.514 717.767> 1256.67 94.0625<1076.36 1252.45> +VStem: 378.877 111.406<169.448 364.279 780.299 970.95> 737.939 112.344<169.448 364.279 778.124 972.95> 1277.63 115.233<1035.46 1227.98> 1297 113.281<-83.4778 106.427> +DStem2: 957.939 772.842 1075.05 761.357 0.752575 0.658506<80.5711 451.636> 970.596 99.795 1060.83 142.061 0.0726286 0.997359<48.7076 286.445> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: -148.33 91.1719<1068.73 1263.8> 109.873 87.3438<519.871 687.162> 200.107 89.2969<1102.37 1267.01> 439.17 94.0625<1075.4 1375.67> 456.436 88.2812<519.85 708.188> 717.686 88.2812<529.488 717.562> 729.17 92.1875<1075.05 1413.02> 1065.19 87.3438<550.514 717.767> 1316.67 94.0625<1076.36 1252.45> +VStem: 378.877 111.406<229.448 424.279 840.299 1030.95> 737.939 112.344<229.448 424.279 838.124 1032.95> 1277.63 115.233<1095.46 1287.98> 1297 113.281<-23.4778 166.427> +DStem2: 957.939 832.842 1075.05 821.357 0.752575 0.658506<80.5711 451.636> 970.596 159.795 1060.83 202.061 0.0726286 0.997359<48.7076 286.445> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +850.283203125 223.623046875 m 0xe9e0 + 850.283203125 175.029296875 842.861328125 129.248046875 828.173828125 86.357421875 c 0 + 813.486328125 43.466796875 794.580078125 4.091796875 771.533203125 -31.689453125 c 0 + 748.486328125 -67.548828125 722.705078125 -99.580078125 694.267578125 -127.705078125 c 0 + 665.751953125 -155.908203125 637.783203125 -178.955078125 610.283203125 -196.845703125 c 1 + 562.26171875 -196.845703125 514.241210938 -196.845703125 466.220703125 -196.845703125 c 1 + 504.033203125 -169.345703125 537.939453125 -142.783203125 568.017578125 -117.158203125 c 0 + 598.095703125 -91.533203125 624.345703125 -65.361328125 646.767578125 -38.408203125 c 0 + 669.111328125 -11.533203125 687.861328125 16.904296875 702.861328125 46.982421875 c 0 + 717.939453125 77.060546875 729.580078125 110.029296875 737.939453125 145.888671875 c 1 + 735.69921875 146.513671875 733.459960938 147.138671875 731.220703125 147.763671875 c 1 + 724.189453125 134.326171875 715.986328125 121.748046875 706.767578125 109.873046875 c 0 + 697.470703125 97.998046875 686.611328125 87.607421875 674.111328125 78.701171875 c 0 + 661.611328125 69.716796875 647.392578125 62.685546875 631.376953125 57.529296875 c 0 + 615.361328125 52.451171875 596.845703125 49.873046875 575.673828125 49.873046875 c 0 + 547.548828125 49.873046875 521.455078125 54.638671875 497.470703125 64.248046875 c 0 + 473.486328125 73.857421875 452.626953125 87.763671875 435.048828125 106.044921875 c 0 + 417.470703125 124.248046875 403.720703125 146.044921875 393.798828125 171.279296875 c 0 + 383.876953125 196.591796875 378.876953125 225.263671875 378.876953125 257.216796875 c 0 + 378.876953125 290.498046875 384.501953125 321.201171875 395.673828125 349.404296875 c 0 + 406.923828125 377.529296875 422.705078125 401.591796875 443.251953125 421.357421875 c 0 + 463.720703125 441.201171875 488.330078125 456.748046875 517.158203125 467.919921875 c 0 + 545.908203125 479.169921875 578.251953125 484.716796875 614.111328125 484.716796875 c 0 + 651.220703125 484.716796875 684.345703125 478.701171875 713.486328125 466.513671875 c 0 + 742.548828125 454.326171875 767.236328125 436.904296875 787.392578125 414.169921875 c 0 + 807.548828125 391.435546875 823.095703125 364.091796875 833.955078125 332.138671875 c 0 + 844.814453125 300.107421875 850.283203125 263.935546875 850.283203125 223.623046875 c 0xe9e0 +614.111328125 137.216796875 m 256 + 653.173828125 137.216796875 683.564453125 147.607421875 705.283203125 168.466796875 c 0 + 727.080078125 189.248046875 737.939453125 219.794921875 737.939453125 260.107421875 c 1 + 737.939453125 264.586914062 737.939453125 269.065429688 737.939453125 273.544921875 c 1 + 737.939453125 313.857421875 727.080078125 344.404296875 705.283203125 365.263671875 c 0 + 683.564453125 386.044921875 653.173828125 396.435546875 614.111328125 396.435546875 c 256 + 575.048828125 396.435546875 544.658203125 386.044921875 522.861328125 365.263671875 c 0 + 501.142578125 344.404296875 490.283203125 313.857421875 490.283203125 273.544921875 c 1 + 490.283203125 269.065429688 490.283203125 264.586914062 490.283203125 260.107421875 c 1 + 490.283203125 219.794921875 501.142578125 189.248046875 522.861328125 168.466796875 c 0 + 544.658203125 147.607421875 575.048828125 137.216796875 614.111328125 137.216796875 c 256 +1375.67382812 379.169921875 m 1xf1e8 + 1276.48046875 379.169921875 1177.28808594 379.169921875 1078.09570312 379.169921875 c 1 + 1072.33984375 300.133789062 1066.58496094 221.096679688 1060.83007812 142.060546875 c 1 + 1063.06933594 142.060546875 1065.30859375 142.060546875 1067.54882812 142.060546875 c 1 + 1075.20507812 155.498046875 1083.25195312 167.451171875 1091.53320312 177.998046875 c 0 + 1099.89257812 188.623046875 1109.42285156 197.685546875 1120.36132812 205.419921875 c 0 + 1131.21972656 213.076171875 1143.72070312 219.013671875 1157.78320312 223.154296875 c 0 + 1171.84472656 227.294921875 1188.48632812 229.404296875 1207.70507812 229.404296875 c 0 + 1236.53222656 229.404296875 1263.25195312 224.560546875 1287.86132812 215.029296875 c 0 + 1312.46972656 205.419921875 1333.95410156 191.669921875 1352.15820312 173.701171875 c 0 + 1370.43945312 155.810546875 1384.65820312 133.857421875 1394.89257812 107.919921875 c 0 + 1405.12597656 82.060546875 1410.28320312 52.763671875 1410.28320312 20.107421875 c 0 + 1410.28320312 -13.173828125 1404.97070312 -43.876953125 1394.42382812 -72.080078125 c 0 + 1383.87597656 -100.205078125 1368.33007812 -124.345703125 1347.86035156 -144.501953125 c 0 + 1327.39257812 -164.658203125 1302.23535156 -180.361328125 1272.47070312 -191.533203125 c 0 + 1242.70410156 -202.783203125 1208.95410156 -208.330078125 1171.22070312 -208.330078125 c 0 + 1141.14257812 -208.330078125 1114.58007812 -204.970703125 1091.53320312 -198.251953125 c 0 + 1068.48535156 -191.533203125 1048.17382812 -182.626953125 1030.59570312 -171.376953125 c 0 + 1012.93945312 -160.205078125 997.625976562 -147.392578125 984.501953125 -133.017578125 c 0 + 971.375976562 -118.642578125 959.736328125 -103.720703125 949.423828125 -88.330078125 c 1 + 975.673828125 -67.548828125 1001.92285156 -46.767578125 1028.17285156 -25.986328125 c 1 + 1036.53222656 -39.423828125 1045.12695312 -51.533203125 1054.11132812 -62.470703125 c 0 + 1063.09472656 -73.330078125 1073.32910156 -82.939453125 1084.81445312 -91.220703125 c 0 + 1096.29882812 -99.580078125 1109.26757812 -105.986328125 1123.72070312 -110.439453125 c 0 + 1138.09570312 -114.892578125 1154.57910156 -117.158203125 1173.17382812 -117.158203125 c 0 + 1212.78222656 -117.158203125 1243.40820312 -106.298828125 1264.81445312 -84.501953125 c 0 + 1286.21972656 -62.783203125 1297.00195312 -32.705078125 1297.00195312 5.732421875 c 1 + 1297.00195312 9.560546875 1297.00195312 13.388671875 1297.00195312 17.216796875 c 1 + 1297.00195312 55.654296875 1286.21972656 85.732421875 1264.81445312 107.451171875 c 0 + 1243.40820312 129.248046875 1212.78222656 140.107421875 1173.17382812 140.107421875 c 0 + 1144.34570312 140.107421875 1121.29785156 134.638671875 1104.03320312 123.779296875 c 0 + 1086.76757812 112.919921875 1072.00097656 100.732421875 1059.89257812 87.294921875 c 1 + 1030.12695312 91.4619140625 1000.36035156 95.6279296875 970.595703125 99.794921875 c 1 + 978.90234375 224.274414062 987.209960938 348.752929688 995.517578125 473.232421875 c 1 + 1122.23535156 473.232421875 1248.95507812 473.232421875 1375.67382812 473.232421875 c 1 + 1375.67382812 441.877929688 1375.67382812 410.524414062 1375.67382812 379.169921875 c 1xf1e8 +623.564453125 657.685546875 m 0xe5e0 + 586.455078125 657.685546875 553.330078125 663.701171875 524.189453125 675.888671875 c 0 + 495.048828125 688.076171875 470.439453125 705.498046875 450.283203125 728.232421875 c 0 + 430.126953125 750.966796875 414.580078125 778.310546875 403.720703125 810.263671875 c 0 + 392.861328125 842.294921875 387.392578125 878.466796875 387.392578125 918.779296875 c 0 + 387.392578125 967.373046875 394.736328125 1013.15429688 409.501953125 1056.04492188 c 0 + 424.189453125 1098.93554688 443.095703125 1138.31054688 466.142578125 1174.09179688 c 0 + 489.189453125 1209.95117188 514.892578125 1241.82617188 543.408203125 1269.63867188 c 0 + 571.845703125 1297.45117188 599.892578125 1320.65429688 627.392578125 1339.24804688 c 1 + 675.38671875 1339.24804688 723.381835938 1339.24804688 771.376953125 1339.24804688 c 1 + 733.642578125 1311.74804688 699.736328125 1285.18554688 669.658203125 1259.56054688 c 0 + 639.580078125 1233.93554688 613.330078125 1207.76367188 590.908203125 1180.88867188 c 0 + 568.486328125 1153.93554688 549.814453125 1125.49804688 534.736328125 1095.41992188 c 0 + 519.736328125 1065.34179688 508.017578125 1032.37304688 499.736328125 996.513671875 c 1 + 501.975585938 995.888671875 504.21484375 995.263671875 506.455078125 994.638671875 c 1 + 513.486328125 1008.07617188 521.611328125 1020.65429688 530.908203125 1032.52929688 c 0 + 540.205078125 1044.40429688 551.064453125 1054.79492188 563.564453125 1063.70117188 c 0 + 576.064453125 1072.68554688 590.283203125 1079.71679688 606.298828125 1084.87304688 c 0 + 622.314453125 1089.95117188 640.830078125 1092.52929688 661.923828125 1092.52929688 c 0 + 690.126953125 1092.52929688 716.220703125 1087.76367188 740.205078125 1078.15429688 c 0 + 764.189453125 1068.54492188 784.970703125 1054.63867188 802.626953125 1036.35742188 c 0 + 820.205078125 1018.15429688 833.955078125 996.201171875 843.876953125 970.576171875 c 0 + 853.798828125 945.029296875 858.798828125 916.513671875 858.798828125 885.185546875 c 0 + 858.798828125 851.279296875 853.173828125 820.341796875 841.923828125 792.529296875 c 0 + 830.751953125 764.716796875 814.892578125 740.888671875 794.423828125 721.044921875 c 0 + 773.955078125 701.201171875 749.189453125 685.654296875 720.048828125 674.482421875 c 0 + 690.908203125 663.232421875 658.798828125 657.685546875 623.564453125 657.685546875 c 0xe5e0 +623.564453125 745.966796875 m 256 + 662.626953125 745.966796875 693.017578125 756.357421875 714.736328125 777.138671875 c 0 + 736.533203125 797.998046875 747.392578125 828.544921875 747.392578125 868.857421875 c 1 + 747.392578125 873.336914062 747.392578125 877.815429688 747.392578125 882.294921875 c 1 + 747.392578125 922.607421875 736.533203125 953.154296875 714.736328125 973.935546875 c 0 + 693.017578125 994.794921875 662.626953125 1005.18554688 623.564453125 1005.18554688 c 256 + 584.501953125 1005.18554688 554.111328125 994.794921875 532.392578125 973.935546875 c 0 + 510.595703125 953.154296875 499.736328125 922.607421875 499.736328125 882.294921875 c 1 + 499.736328125 877.815429688 499.736328125 873.336914062 499.736328125 868.857421875 c 1 + 499.736328125 828.544921875 510.595703125 797.998046875 532.392578125 777.138671875 c 0 + 554.111328125 756.357421875 584.501953125 745.966796875 623.564453125 745.966796875 c 256 +1413.01757812 669.169921875 m 1xe3f0 + 1261.32421875 669.169921875 1109.63183594 669.169921875 957.939453125 669.169921875 c 1 + 957.939453125 703.727539062 957.939453125 738.284179688 957.939453125 772.841796875 c 1 + 1029.31933594 836.513671875 1100.69921875 900.185546875 1172.08007812 963.857421875 c 1 + 1205.98535156 994.638671875 1232.08007812 1023.85742188 1250.28320312 1051.74804688 c 0 + 1268.48535156 1079.56054688 1277.62695312 1108.85742188 1277.62695312 1139.56054688 c 1 + 1277.62695312 1143.72753906 1277.62695312 1147.89355469 1277.62695312 1152.06054688 c 1 + 1277.62695312 1184.71679688 1267.86035156 1210.26367188 1248.33007812 1228.85742188 c 0 + 1228.87597656 1247.37304688 1202.47070312 1256.66992188 1169.18847656 1256.66992188 c 0 + 1150.59570312 1256.66992188 1134.42382812 1253.93554688 1120.67382812 1248.54492188 c 0 + 1106.92382812 1243.07617188 1094.89160156 1235.57617188 1084.65820312 1225.96679688 c 0 + 1074.42382812 1216.35742188 1065.98535156 1205.18554688 1059.26660156 1192.37304688 c 0 + 1052.54882812 1179.56054688 1047.23535156 1165.81054688 1043.40722656 1151.12304688 c 1 + 1011.71484375 1163.28417969 980.022460938 1175.44628906 948.330078125 1187.60742188 c 1 + 955.439453125 1208.70117188 964.969726562 1229.01367188 977.158203125 1248.54492188 c 0 + 989.345703125 1268.07617188 1004.65820312 1285.49804688 1023.25195312 1300.88867188 c 0 + 1041.76660156 1316.20117188 1063.71972656 1328.38867188 1089.03320312 1337.29492188 c 0 + 1114.26660156 1346.27929688 1143.87597656 1350.73242188 1177.78320312 1350.73242188 c 256 + 1211.68847656 1350.73242188 1242.15820312 1345.81054688 1269.03320312 1335.88867188 c 0 + 1295.90722656 1325.96679688 1318.40820312 1312.21679688 1336.68945312 1294.63867188 c 0 + 1354.89160156 1276.98242188 1368.87695312 1256.04492188 1378.40820312 1231.74804688 c 0 + 1388.01757812 1207.37304688 1392.86035156 1180.88867188 1392.86035156 1152.06054688 c 0 + 1392.86035156 1125.18554688 1388.72070312 1100.18554688 1380.36132812 1077.13867188 c 0 + 1372.07910156 1054.09179688 1360.51757812 1032.37304688 1345.82910156 1011.90429688 c 0 + 1331.06347656 991.435546875 1313.95507812 971.904296875 1294.42285156 953.310546875 c 0 + 1274.89257812 934.794921875 1254.26660156 915.888671875 1232.54882812 896.669921875 c 1 + 1180.04882812 851.565429688 1127.54882812 806.461914062 1075.04882812 761.357421875 c 1 + 1187.70507812 761.357421875 1300.36132812 761.357421875 1413.01757812 761.357421875 c 1 + 1413.01757812 730.627929688 1413.01757812 699.899414062 1413.01757812 669.169921875 c 1xe3f0 +EndSplineSet +EndChar + +StartChar: uniE125 +Encoding: 57637 57637 38 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: -17.2031 83.5156<801.078 977.719> 375.375 92.1875<873.463 902.443> 652.016 89.2188<744.694 935.623> 934.203 90.2344<158.891 368.066> 1188.66 144.922<1268.34 1295.67 1615.84 1643.66> 1243.34 90.2344<158.891 368.066 736.496 938.717> +VStem: 57.0938 101.797<663.5 934.203 1024.44 1243.34> 387.328 108.516<1043.78 1224.01> 590.219 109.453<789.746 1207.33> 624.438 99.8438<-202.516 -102.672> 1053.58 102.734<-202.516 -99.7812> 1177.09 97.9688<663.5 1186.9> 1636.94 97.9688<663.5 1188.75> +DStem2: 624.438 -202.516 724.281 -202.516 0.286825 0.957983<28.6377 221.043 308.198 625.84> 954.672 467.562 915.297 277.484 0.276827 -0.96092<73.4064 391.949 478.84 671.271> 1297.09 1333.58 1279.83 1188.66 0.416929 -0.908939<124.527 395.989> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 42.7969 83.5156<801.078 977.719> 435.375 92.1875<873.463 902.443> 712.016 89.2188<744.694 935.623> 994.203 90.2344<158.891 368.066> 1248.66 144.922<1268.34 1295.67 1615.84 1643.66> 1303.34 90.2344<158.891 368.066 736.496 938.717> +VStem: 57.0938 101.797<723.5 994.203 1084.44 1303.34> 387.328 108.516<1103.78 1284.01> 590.219 109.453<849.746 1267.33> 624.438 99.8438<-142.516 -42.6719> 1053.58 102.734<-142.516 -39.7812> 1177.09 97.9688<723.5 1246.9> 1636.94 97.9688<723.5 1248.75> +DStem2: 624.438 -142.516 724.281 -142.516 0.286825 0.957983<28.6377 221.043 308.198 625.84> 954.672 527.562 915.297 337.484 0.276827 -0.96092<73.4064 391.949 478.84 671.271> 1297.09 1393.58 1279.83 1248.66 0.416929 -0.908939<124.527 395.989> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +1053.578125 -202.515625 m 1xf378 + 1036.28613281 -140.745117188 1018.99511719 -78.974609375 1001.703125 -17.203125 c 1 + 926.520507812 -17.203125 851.338867188 -17.203125 776.15625 -17.203125 c 1 + 758.864257812 -78.974609375 741.573242188 -140.745117188 724.28125 -202.515625 c 1 + 691 -202.515625 657.71875 -202.515625 624.4375 -202.515625 c 1 + 691.3125 20.84375 758.1875 244.203125 825.0625 467.5625 c 1 + 868.265625 467.5625 911.46875 467.5625 954.671875 467.5625 c 1 + 1021.88574219 244.203125 1089.09863281 20.84375 1156.3125 -202.515625 c 1 + 1122.06738281 -202.515625 1087.82324219 -202.515625 1053.578125 -202.515625 c 1xf378 +915.296875 277.484375 m 1 + 908.265625 310.114257812 901.234375 342.744140625 894.203125 375.375 c 1 + 890.036132812 375.375 885.870117188 375.375 881.703125 375.375 c 1 + 874.671875 342.744140625 867.640625 310.114257812 860.609375 277.484375 c 1 + 840.765625 207.09375 820.921875 136.703125 801.078125 66.3125 c 1 + 859.958007812 66.3125 918.838867188 66.3125 977.71875 66.3125 c 1 + 956.911132812 136.703125 936.104492188 207.09375 915.296875 277.484375 c 1 +57.09375 663.5 m 1 + 57.09375 886.859375 57.09375 1110.21875 57.09375 1333.578125 c 1 + 145.426757812 1333.578125 233.760742188 1333.578125 322.09375 1333.578125 c 1xf738 + 379.671875 1333.578125 423.03125 1316.46875 452.171875 1282.25 c 0 + 481.234375 1247.953125 495.84375 1198.578125 495.84375 1133.890625 c 256 + 495.84375 1069.28125 481.234375 1019.828125 452.171875 985.609375 c 0 + 423.03125 951.3125 379.671875 934.203125 322.09375 934.203125 c 1 + 267.692382812 934.203125 213.291992188 934.203125 158.890625 934.203125 c 1 + 158.890625 843.96875 158.890625 753.734375 158.890625 663.5 c 1 + 124.958007812 663.5 91.0263671875 663.5 57.09375 663.5 c 1 +158.890625 1024.4375 m 1 + 210.401367188 1024.4375 261.911132812 1024.4375 313.421875 1024.4375 c 1 + 337.71875 1024.4375 356.15625 1030.6875 368.65625 1043.1875 c 0 + 381.078125 1055.6875 387.328125 1075.6875 387.328125 1103.1875 c 1 + 387.328125 1123.65625 387.328125 1144.125 387.328125 1164.59375 c 1 + 387.328125 1192.171875 381.078125 1212.171875 368.65625 1224.59375 c 0 + 356.15625 1237.09375 337.71875 1243.34375 313.421875 1243.34375 c 1 + 261.911132812 1243.34375 210.401367188 1243.34375 158.890625 1243.34375 c 1 + 158.890625 1170.375 158.890625 1097.40625 158.890625 1024.4375 c 1 +843.65625 652.015625 m 0 + 804.59375 652.015625 769.59375 658.578125 738.578125 671.625 c 0 + 707.484375 684.75 680.921875 705.453125 658.890625 733.578125 c 0 + 636.78125 761.703125 619.828125 797.71875 607.953125 841.546875 c 0 + 596.15625 885.453125 590.21875 937.71875 590.21875 998.578125 c 256 + 590.21875 1059.359375 596.15625 1111.625 607.953125 1155.53125 c 0 + 619.828125 1199.359375 636.78125 1235.375 658.890625 1263.5 c 0 + 680.921875 1291.625 707.484375 1312.328125 738.578125 1325.453125 c 0 + 769.59375 1338.578125 804.59375 1345.0625 843.65625 1345.0625 c 0 + 900.609375 1345.0625 946.234375 1332.796875 980.453125 1308.109375 c 0 + 1014.671875 1283.5 1042.09375 1246.546875 1062.5625 1197.25 c 1 + 1033.76074219 1181.25976562 1004.95800781 1165.27050781 976.15625 1149.28125 c 1 + 964.59375 1187.015625 948.5 1214.20214844 927.640625 1230.84375 c 0 + 906.859375 1247.48339844 878.890625 1255.84375 843.65625 1255.84375 c 0 + 798.265625 1255.84375 762.875 1240.140625 737.5625 1208.8125 c 0 + 712.328125 1177.40625 699.671875 1134.203125 699.671875 1079.203125 c 1 + 699.671875 1025.42675781 699.671875 971.650390625 699.671875 917.875 c 1xf3b8 + 699.671875 862.875 712.328125 819.671875 737.5625 788.265625 c 0 + 762.875 756.9375 798.265625 741.234375 843.65625 741.234375 c 0 + 879.515625 741.234375 908.5 750.217773438 930.53125 768.109375 c 0 + 952.640625 786.077148438 969.75 814.828125 981.9375 854.515625 c 1 + 1010.08886719 837.875 1038.23925781 821.234375 1066.390625 804.59375 c 1 + 1045.296875 755.375 1017.09375 717.561523438 981.9375 691.3125 c 0 + 946.703125 665.061523438 900.609375 652.015625 843.65625 652.015625 c 0 +1636.9375 1076.3125 m 1 + 1639.17675781 1114.38476562 1641.41699219 1152.45800781 1643.65625 1190.53125 c 1 + 1639.828125 1190.53125 1636 1190.53125 1632.171875 1190.53125 c 1 + 1616.80761719 1153.08300781 1601.44238281 1115.63476562 1586.078125 1078.1875 c 1 + 1542.5625 987.328125 1499.046875 896.46875 1455.53125 805.609375 c 1 + 1412.328125 896.46875 1369.125 987.328125 1325.921875 1078.1875 c 1 + 1310.55761719 1115.00976562 1295.19238281 1151.83300781 1279.828125 1188.65625 c 1 + 1276 1188.65625 1272.171875 1188.65625 1268.34375 1188.65625 c 1xfb38 + 1270.58300781 1151.20800781 1272.82324219 1113.75976562 1275.0625 1076.3125 c 1 + 1275.0625 938.708007812 1275.0625 801.103515625 1275.0625 663.5 c 1 + 1242.40625 663.5 1209.75 663.5 1177.09375 663.5 c 1 + 1177.09375 886.859375 1177.09375 1110.21875 1177.09375 1333.578125 c 1 + 1217.09375 1333.578125 1257.09375 1333.578125 1297.09375 1333.578125 c 1xf738 + 1333.265625 1255.50488281 1369.4375 1177.43164062 1405.609375 1099.359375 c 1 + 1421.28613281 1055.19238281 1436.96386719 1011.02539062 1452.640625 966.859375 c 1 + 1455.50488281 966.859375 1458.37011719 966.859375 1461.234375 966.859375 c 1 + 1476.9375 1011.02539062 1492.640625 1055.19238281 1508.34375 1099.359375 c 1 + 1544.17675781 1177.43164062 1580.01074219 1255.50488281 1615.84375 1333.578125 c 1xfb38 + 1655.53125 1333.578125 1695.21875 1333.578125 1734.90625 1333.578125 c 1xf738 + 1734.90625 1110.21875 1734.90625 886.859375 1734.90625 663.5 c 1 + 1702.25 663.5 1669.59375 663.5 1636.9375 663.5 c 1 + 1636.9375 801.103515625 1636.9375 938.708007812 1636.9375 1076.3125 c 1 +EndSplineSet +EndChar + +StartChar: uniE126 +Encoding: 57638 57638 39 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: -202.516 89.2969<766.078 988.208> 96.078 87.3438<766.078 968.007> 378.266 89.2969<766.078 968.007> 652.016 89.2188<744.694 935.623> 934.203 90.2344<158.891 368.066> 1188.66 144.922<1268.34 1295.67 1615.84 1643.66> 1243.34 90.2344<158.891 368.066 736.496 938.717> +VStem: 57.0938 101.797<663.5 934.203 1024.44 1243.34> 387.328 108.516<1043.78 1224.01> 590.219 109.453<789.746 1207.33> 664.281 101.797<-113.219 96.078 183.422 378.266> 986.859 107.5<201.718 359.969> 1007.95 108.516<-92.9103 75.77> 1177.09 97.9688<663.5 1186.9> 1636.94 97.9688<663.5 1188.75> +DStem2: 1297.09 1333.58 1279.83 1188.66 0.416929 -0.908939<124.527 395.989> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: -142.516 89.2969<766.078 988.208> 156.078 87.3438<766.078 968.007> 438.266 89.2969<766.078 968.007> 712.016 89.2188<744.694 935.623> 994.203 90.2344<158.891 368.066> 1248.66 144.922<1268.34 1295.67 1615.84 1643.66> 1303.34 90.2344<158.891 368.066 736.496 938.717> +VStem: 57.0938 101.797<723.5 994.203 1084.44 1303.34> 387.328 108.516<1103.78 1284.01> 590.219 109.453<849.746 1267.33> 664.281 101.797<-53.2188 156.078 243.422 438.266> 986.859 107.5<261.718 419.969> 1007.95 108.516<-32.9103 135.77> 1177.09 97.9688<723.5 1246.9> 1636.94 97.9688<723.5 1248.75> +DStem2: 1297.09 1393.58 1279.83 1248.66 0.416929 -0.908939<124.527 395.989> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +664.28125 467.5625 m 1xf9ae + 754.854492188 467.5625 845.426757812 467.5625 936 467.5625 c 1 + 987.796875 467.5625 1027.171875 452.874023438 1054.046875 423.421875 c 0 + 1080.921875 393.967773438 1094.359375 351.078125 1094.359375 294.75 c 0 + 1094.359375 251.859375 1085.0625 218.265625 1066.546875 193.96875 c 0 + 1047.953125 169.670898438 1021.390625 155.920898438 986.859375 152.71875 c 1 + 986.859375 148.864257812 986.859375 145.009765625 986.859375 141.15625 c 1xf9b6 + 1006.078125 141.15625 1023.5 137.483398438 1039.203125 130.140625 c 0 + 1054.828125 122.796875 1068.421875 112.327148438 1079.984375 98.890625 c 0 + 1091.46875 85.453125 1100.453125 69.515625 1106.859375 50.921875 c 0 + 1113.265625 32.3271484375 1116.46875 12.171875 1116.46875 -9.546875 c 0 + 1116.46875 -38.375 1112.796875 -64.6259765625 1105.453125 -88.296875 c 0 + 1098.03125 -111.96875 1087.640625 -132.282226562 1074.203125 -149.234375 c 0 + 1060.765625 -166.1875 1044.59375 -179.313476562 1025.765625 -188.609375 c 0 + 1006.859375 -197.90625 985.921875 -202.515625 962.875 -202.515625 c 1 + 863.34375 -202.515625 763.8125 -202.515625 664.28125 -202.515625 c 1 + 664.28125 20.84375 664.28125 244.203125 664.28125 467.5625 c 1xf9ae +766.078125 -113.21875 m 1 + 821.754882812 -113.21875 877.432617188 -113.21875 933.109375 -113.21875 c 1 + 957.40625 -113.21875 976 -106.65625 988.8125 -93.53125 c 0 + 1001.546875 -80.40625 1007.953125 -59.46875 1007.953125 -30.640625 c 1 + 1007.953125 -15.927734375 1007.953125 -1.2138671875 1007.953125 13.5 c 1xf9ae + 1007.953125 42.25 1001.546875 63.265625 988.8125 76.390625 c 0 + 976 89.515625 957.40625 96.078125 933.109375 96.078125 c 1 + 877.432617188 96.078125 821.754882812 96.078125 766.078125 96.078125 c 1 + 766.078125 26.3125 766.078125 -43.453125 766.078125 -113.21875 c 1 +766.078125 183.421875 m 1 + 816.3125 183.421875 866.546875 183.421875 916.78125 183.421875 c 1 + 939.203125 183.421875 956.46875 189.359375 968.578125 201.15625 c 0 + 980.765625 213.03125 986.859375 232.327148438 986.859375 259.28125 c 1 + 986.859375 273.65625 986.859375 288.03125 986.859375 302.40625 c 1xf9b6 + 986.859375 329.359375 980.765625 348.655273438 968.578125 360.53125 c 0 + 956.46875 372.327148438 939.203125 378.265625 916.78125 378.265625 c 1 + 866.546875 378.265625 816.3125 378.265625 766.078125 378.265625 c 1 + 766.078125 313.317382812 766.078125 248.369140625 766.078125 183.421875 c 1 +57.09375 663.5 m 1 + 57.09375 886.859375 57.09375 1110.21875 57.09375 1333.578125 c 1 + 145.426757812 1333.578125 233.760742188 1333.578125 322.09375 1333.578125 c 1xfb86 + 379.671875 1333.578125 423.03125 1316.46875 452.171875 1282.25 c 0 + 481.234375 1247.953125 495.84375 1198.578125 495.84375 1133.890625 c 256 + 495.84375 1069.28125 481.234375 1019.828125 452.171875 985.609375 c 0 + 423.03125 951.3125 379.671875 934.203125 322.09375 934.203125 c 1 + 267.692382812 934.203125 213.291992188 934.203125 158.890625 934.203125 c 1 + 158.890625 843.96875 158.890625 753.734375 158.890625 663.5 c 1 + 124.958007812 663.5 91.0263671875 663.5 57.09375 663.5 c 1 +158.890625 1024.4375 m 1 + 210.401367188 1024.4375 261.911132812 1024.4375 313.421875 1024.4375 c 1 + 337.71875 1024.4375 356.15625 1030.6875 368.65625 1043.1875 c 0 + 381.078125 1055.6875 387.328125 1075.6875 387.328125 1103.1875 c 1 + 387.328125 1123.65625 387.328125 1144.125 387.328125 1164.59375 c 1 + 387.328125 1192.171875 381.078125 1212.171875 368.65625 1224.59375 c 0 + 356.15625 1237.09375 337.71875 1243.34375 313.421875 1243.34375 c 1 + 261.911132812 1243.34375 210.401367188 1243.34375 158.890625 1243.34375 c 1 + 158.890625 1170.375 158.890625 1097.40625 158.890625 1024.4375 c 1 +843.65625 652.015625 m 0 + 804.59375 652.015625 769.59375 658.578125 738.578125 671.625 c 0 + 707.484375 684.75 680.921875 705.453125 658.890625 733.578125 c 0 + 636.78125 761.703125 619.828125 797.71875 607.953125 841.546875 c 0 + 596.15625 885.453125 590.21875 937.71875 590.21875 998.578125 c 256 + 590.21875 1059.359375 596.15625 1111.625 607.953125 1155.53125 c 0 + 619.828125 1199.359375 636.78125 1235.375 658.890625 1263.5 c 0 + 680.921875 1291.625 707.484375 1312.328125 738.578125 1325.453125 c 0 + 769.59375 1338.578125 804.59375 1345.0625 843.65625 1345.0625 c 0 + 900.609375 1345.0625 946.234375 1332.796875 980.453125 1308.109375 c 0 + 1014.671875 1283.5 1042.09375 1246.546875 1062.5625 1197.25 c 1 + 1033.76074219 1181.25976562 1004.95800781 1165.27050781 976.15625 1149.28125 c 1 + 964.59375 1187.015625 948.5 1214.20214844 927.640625 1230.84375 c 0 + 906.859375 1247.48339844 878.890625 1255.84375 843.65625 1255.84375 c 0 + 798.265625 1255.84375 762.875 1240.140625 737.5625 1208.8125 c 0 + 712.328125 1177.40625 699.671875 1134.203125 699.671875 1079.203125 c 1 + 699.671875 1025.42675781 699.671875 971.650390625 699.671875 917.875 c 1xf9c6 + 699.671875 862.875 712.328125 819.671875 737.5625 788.265625 c 0 + 762.875 756.9375 798.265625 741.234375 843.65625 741.234375 c 0 + 879.515625 741.234375 908.5 750.217773438 930.53125 768.109375 c 0 + 952.640625 786.077148438 969.75 814.828125 981.9375 854.515625 c 1 + 1010.08886719 837.875 1038.23925781 821.234375 1066.390625 804.59375 c 1 + 1045.296875 755.375 1017.09375 717.561523438 981.9375 691.3125 c 0 + 946.703125 665.061523438 900.609375 652.015625 843.65625 652.015625 c 0 +1636.9375 1076.3125 m 1 + 1639.17675781 1114.38476562 1641.41699219 1152.45800781 1643.65625 1190.53125 c 1 + 1639.828125 1190.53125 1636 1190.53125 1632.171875 1190.53125 c 1 + 1616.80761719 1153.08300781 1601.44238281 1115.63476562 1586.078125 1078.1875 c 1 + 1542.5625 987.328125 1499.046875 896.46875 1455.53125 805.609375 c 1 + 1412.328125 896.46875 1369.125 987.328125 1325.921875 1078.1875 c 1 + 1310.55761719 1115.00976562 1295.19238281 1151.83300781 1279.828125 1188.65625 c 1 + 1276 1188.65625 1272.171875 1188.65625 1268.34375 1188.65625 c 1xfd86 + 1270.58300781 1151.20800781 1272.82324219 1113.75976562 1275.0625 1076.3125 c 1 + 1275.0625 938.708007812 1275.0625 801.103515625 1275.0625 663.5 c 1 + 1242.40625 663.5 1209.75 663.5 1177.09375 663.5 c 1 + 1177.09375 886.859375 1177.09375 1110.21875 1177.09375 1333.578125 c 1 + 1217.09375 1333.578125 1257.09375 1333.578125 1297.09375 1333.578125 c 1xfb86 + 1333.265625 1255.50488281 1369.4375 1177.43164062 1405.609375 1099.359375 c 1 + 1421.28613281 1055.19238281 1436.96386719 1011.02539062 1452.640625 966.859375 c 1 + 1455.50488281 966.859375 1458.37011719 966.859375 1461.234375 966.859375 c 1 + 1476.9375 1011.02539062 1492.640625 1055.19238281 1508.34375 1099.359375 c 1 + 1544.17675781 1177.43164062 1580.01074219 1255.50488281 1615.84375 1333.578125 c 1xfd86 + 1655.53125 1333.578125 1695.21875 1333.578125 1734.90625 1333.578125 c 1xfb86 + 1734.90625 1110.21875 1734.90625 886.859375 1734.90625 663.5 c 1 + 1702.25 663.5 1669.59375 663.5 1636.9375 663.5 c 1 + 1636.9375 801.103515625 1636.9375 938.708007812 1636.9375 1076.3125 c 1 +EndSplineSet +EndChar + +StartChar: uniE127 +Encoding: 57639 57639 40 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: -208.33 96.9531<472.423 704.729> -15.4395 93.125<1098.35 1296.09> 67.139 93.125<608.117 746.32> 373.389 99.8438<1183.19 1212.07> 387.764 96.9531<472.697 701.413> 657.686 95.9375<510.965 736.75 1097.49 1418.2> 961.04 95.9375<1097.49 1388.43> 1254.79 95.9375<536.534 754.946 1097.49 1418.2> +VStem: 295.148 116.172<-48.8873 325.002> 405.07 107.5<1097.56 1233.85> 755.93 95.0781<-196.846 -95.0488 -63.3424 67.139> 765.07 107.5<780.735 927.928> 903.43 110.391<-196.846 -86.4551> 989.055 108.438<765.186 961.04 1056.98 1243.23> 1383.43 113.281<-196.846 -83.5645> +DStem2: 619.133 1070.42 600.852 967.76 0.978916 -0.204262<-84.378 149.631> 903.43 -196.846 1013.82 -196.846 0.322775 0.946476<35.6313 226.241 322.753 322.753> 1268.27 473.232 1200.07 373.389 0.306115 -0.951995<74.1727 385.072 481.954 673.162> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: -148.33 96.9531<472.423 704.729> 44.5605 93.125<1098.35 1296.09> 127.139 93.125<608.117 746.32> 433.389 99.8438<1183.19 1212.07> 447.764 96.9531<472.697 701.413> 717.686 95.9375<510.965 736.75 1097.49 1418.2> 1021.04 95.9375<1097.49 1388.43> 1314.79 95.9375<536.534 754.946 1097.49 1418.2> +VStem: 295.148 116.172<11.1127 385.002> 405.07 107.5<1157.56 1293.85> 755.93 95.0781<-136.846 -35.0488 -3.34238 127.139> 765.07 107.5<840.735 987.928> 903.43 110.391<-136.846 -26.4551> 989.055 108.438<825.186 1021.04 1116.98 1303.23> 1383.43 113.281<-136.846 -23.5645> +DStem2: 619.133 1130.42 600.852 1027.76 0.978916 -0.204262<-84.378 149.631> 903.43 -136.846 1013.82 -136.846 0.322775 0.946476<35.6313 226.241 322.753 322.753> 1268.27 533.232 1200.07 433.389 0.306115 -0.951995<74.1727 385.072 481.954 673.162> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +755.9296875 -95.048828125 m 1xafa2 + 754.653320312 -95.048828125 753.377929688 -95.048828125 752.1015625 -95.048828125 c 1 + 745.0703125 -127.705078125 726.0078125 -154.736328125 694.9921875 -176.220703125 c 0 + 663.8984375 -197.626953125 622.8046875 -208.330078125 571.6328125 -208.330078125 c 0 + 531.9453125 -208.330078125 495.1484375 -200.830078125 461.2421875 -185.830078125 c 0 + 427.2578125 -170.751953125 398.0390625 -148.720703125 373.3515625 -119.580078125 c 0 + 348.7421875 -90.439453125 329.5234375 -54.267578125 315.7734375 -11.064453125 c 0 + 302.0234375 32.138671875 295.1484375 81.904296875 295.1484375 138.232421875 c 0 + 295.1484375 193.857421875 302.1796875 243.310546875 316.2421875 286.513671875 c 0 + 330.3046875 329.716796875 350.1484375 366.044921875 375.7734375 395.498046875 c 0 + 401.3984375 424.951171875 432.1015625 447.138671875 467.9609375 462.216796875 c 0 + 503.7421875 477.216796875 543.7421875 484.716796875 587.9609375 484.716796875 c 0 + 648.1171875 484.716796875 698.9765625 471.435546875 740.5390625 444.951171875 c 0 + 782.1796875 418.388671875 814.5234375 381.357421875 837.5703125 334.013671875 c 1 + 808.1171875 316.748046875 778.6640625 299.482421875 749.2109375 282.216796875 c 1 + 736.3984375 313.544921875 716.5546875 339.013671875 689.6796875 358.544921875 c 0 + 662.8046875 377.998046875 628.8984375 387.763671875 587.9609375 387.763671875 c 0 + 534.8359375 387.763671875 492.1015625 370.810546875 459.7578125 336.904296875 c 0 + 427.4921875 302.998046875 411.3203125 255.029296875 411.3203125 192.919921875 c 1 + 411.3203125 156.435546875 411.3203125 119.951171875 411.3203125 83.466796875 c 1 + 411.3203125 21.357421875 427.4921875 -26.611328125 459.7578125 -60.517578125 c 0 + 492.1015625 -94.423828125 534.8359375 -111.376953125 587.9609375 -111.376953125 c 0 + 609.0546875 -111.376953125 629.2109375 -108.720703125 648.4296875 -103.251953125 c 0 + 667.6484375 -97.783203125 684.4453125 -89.814453125 698.8203125 -79.267578125 c 0 + 713.1953125 -68.720703125 724.7578125 -55.595703125 733.3515625 -39.892578125 c 0 + 742.0234375 -24.189453125 746.3203125 -5.830078125 746.3203125 15.341796875 c 1 + 746.3203125 32.607421875 746.3203125 49.873046875 746.3203125 67.138671875 c 1 + 700.252929688 67.138671875 654.184570312 67.138671875 608.1171875 67.138671875 c 1 + 608.1171875 98.1806640625 608.1171875 129.221679688 608.1171875 160.263671875 c 1 + 689.081054688 160.263671875 770.043945312 160.263671875 851.0078125 160.263671875 c 1 + 851.0078125 41.2275390625 851.0078125 -77.8095703125 851.0078125 -196.845703125 c 1 + 819.315429688 -196.845703125 787.622070312 -196.845703125 755.9296875 -196.845703125 c 1 + 755.9296875 -162.913085938 755.9296875 -128.981445312 755.9296875 -95.048828125 c 1xafa2 +1383.4296875 -196.845703125 m 1 + 1363.2734375 -136.376953125 1343.1171875 -75.908203125 1322.9609375 -15.439453125 c 1 + 1239.4453125 -15.439453125 1155.9296875 -15.439453125 1072.4140625 -15.439453125 c 1 + 1052.8828125 -75.908203125 1033.3515625 -136.376953125 1013.8203125 -196.845703125 c 1 + 977.0234375 -196.845703125 940.2265625 -196.845703125 903.4296875 -196.845703125 c 1 + 979.6015625 26.513671875 1055.7734375 249.873046875 1131.9453125 473.232421875 c 1 + 1177.38769531 473.232421875 1222.83105469 473.232421875 1268.2734375 473.232421875 c 1xd70a + 1344.41894531 249.873046875 1420.56542969 26.513671875 1496.7109375 -196.845703125 c 1 + 1458.95019531 -196.845703125 1421.19042969 -196.845703125 1383.4296875 -196.845703125 c 1 +1200.0703125 373.388671875 m 1 + 1198.48144531 373.388671875 1196.89355469 373.388671875 1195.3046875 373.388671875 c 1 + 1162.98730469 274.821289062 1130.66894531 176.252929688 1098.3515625 77.685546875 c 1 + 1164.26269531 77.685546875 1230.17480469 77.685546875 1296.0859375 77.685546875 c 1 + 1264.08105469 176.252929688 1232.07519531 274.821289062 1200.0703125 373.388671875 c 1 +629.6796875 657.685546875 m 0 + 573.3515625 657.685546875 525.5390625 667.919921875 486.1640625 688.388671875 c 0 + 446.7890625 708.857421875 413.0390625 736.357421875 384.9140625 770.966796875 c 1 + 409.862304688 794.326171875 434.809570312 817.685546875 459.7578125 841.044921875 c 1 + 483.4296875 812.216796875 509.5234375 790.419921875 537.9609375 775.732421875 c 0 + 566.4765625 761.044921875 598.9765625 753.623046875 635.4609375 753.623046875 c 0 + 678.3515625 753.623046875 710.6171875 763.232421875 732.4140625 782.451171875 c 0 + 754.1328125 801.669921875 765.0703125 827.607421875 765.0703125 860.185546875 c 0 + 765.0703125 886.435546875 757.3359375 907.216796875 742.0234375 922.607421875 c 0 + 726.6328125 937.998046875 699.4453125 949.482421875 660.3828125 957.138671875 c 1 + 640.5390625 960.680664062 620.6953125 964.221679688 600.8515625 967.763671875 c 1 + 535.6171875 979.873046875 486.6328125 1001.35742188 453.9765625 1032.06054688 c 0 + 421.3203125 1062.76367188 405.0703125 1105.02929688 405.0703125 1158.77929688 c 0 + 405.0703125 1188.23242188 410.6171875 1214.95117188 421.8671875 1238.93554688 c 0 + 433.0390625 1262.91992188 448.7421875 1283.07617188 468.8984375 1299.40429688 c 0 + 489.0546875 1315.73242188 513.5078125 1328.38867188 542.3359375 1337.29492188 c 0 + 571.0859375 1346.27929688 603.4296875 1350.73242188 639.2890625 1350.73242188 c 0 + 689.8359375 1350.73242188 733.6640625 1341.98242188 770.7734375 1324.40429688 c 0 + 807.8828125 1306.74804688 839.6015625 1281.35742188 865.8515625 1248.07617188 c 1 + 840.565429688 1225.68066406 815.278320312 1203.28417969 789.9921875 1180.88867188 c 1 + 772.7265625 1203.23242188 751.6328125 1221.20117188 726.6328125 1234.63867188 c 0 + 701.7109375 1248.07617188 670.6171875 1254.79492188 633.5078125 1254.79492188 c 0 + 595.1484375 1254.79492188 565.3828125 1247.06054688 544.2109375 1231.74804688 c 0 + 523.1171875 1216.35742188 512.5703125 1193.93554688 512.5703125 1164.56054688 c 0 + 512.5703125 1136.35742188 521.1640625 1115.41992188 538.5078125 1101.66992188 c 0 + 555.7734375 1087.91992188 582.6484375 1077.45117188 619.1328125 1070.41992188 c 1 + 638.9765625 1066.27929688 658.8203125 1062.13867188 678.6640625 1057.99804688 c 1 + 745.8515625 1045.18554688 794.9921875 1023.38867188 826.0078125 992.685546875 c 0 + 857.0234375 961.982421875 872.5703125 919.716796875 872.5703125 865.966796875 c 0x8752 + 872.5703125 834.638671875 867.1015625 806.123046875 856.2421875 780.498046875 c 0 + 845.3828125 754.951171875 829.5234375 732.998046875 808.7421875 714.794921875 c 0 + 787.8828125 696.513671875 762.4921875 682.451171875 732.4140625 672.529296875 c 0 + 702.3359375 662.607421875 668.0390625 657.685546875 629.6796875 657.685546875 c 0 +989.0546875 669.169921875 m 1x8706 + 989.0546875 892.529296875 989.0546875 1115.88867188 989.0546875 1339.24804688 c 1 + 1132.1015625 1339.24804688 1275.1484375 1339.24804688 1418.1953125 1339.24804688 c 1 + 1418.1953125 1307.24316406 1418.1953125 1275.23730469 1418.1953125 1243.23242188 c 1 + 1311.29394531 1243.23242188 1204.39355469 1243.23242188 1097.4921875 1243.23242188 c 1 + 1097.4921875 1181.14941406 1097.4921875 1119.06542969 1097.4921875 1056.98242188 c 1 + 1194.47167969 1056.98242188 1291.45019531 1056.98242188 1388.4296875 1056.98242188 c 1 + 1388.4296875 1025.00292969 1388.4296875 993.024414062 1388.4296875 961.044921875 c 1 + 1291.45019531 961.044921875 1194.47167969 961.044921875 1097.4921875 961.044921875 c 1 + 1097.4921875 895.758789062 1097.4921875 830.471679688 1097.4921875 765.185546875 c 1 + 1204.39355469 765.185546875 1311.29394531 765.185546875 1418.1953125 765.185546875 c 1 + 1418.1953125 733.180664062 1418.1953125 701.174804688 1418.1953125 669.169921875 c 1 + 1275.1484375 669.169921875 1132.1015625 669.169921875 989.0546875 669.169921875 c 1x8706 +EndSplineSet +EndChar + +StartChar: uniE128 +Encoding: 57640 57640 41 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: -188.641 135.352<983.512 1136.47> 937.414 145.43<754.163 1037.71> +VStem: 462.641 174.141<315.312 810.753> 829.672 152.812<-53.1521 53.218> 1155.22 174.141<313.985 810.753> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: -128.641 135.352<983.512 1136.47> 997.414 145.43<754.163 1037.71> +VStem: 462.641 174.141<375.312 870.753> 829.672 152.812<6.84791 113.218> 1155.22 174.141<373.985 870.753> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +1136.46875 -188.640625 m 5 + 1088.96875 -188.640625 1041.46875 -188.640625 993.96875 -188.640625 c 5 + 937.25 -188.640625 895.765625 -174.2265625 869.28125 -145.3984375 c 4 + 843.03125 -116.5703125 829.671875 -77.78125 829.671875 -28.796875 c 5 + 829.671875 -3.3671875 829.671875 22.0625 829.671875 47.4921875 c 5 + 773.1875 54.2890625 722.328125 70.578125 677.09375 96.4765625 c 4 + 632.09375 122.375 593.65625 156.9453125 562.015625 200.1875 c 4 + 530.140625 243.4296875 505.765625 295.4609375 488.421875 356.3984375 c 4 + 471.3125 417.3359375 462.640625 486.2421875 462.640625 563.1171875 c 4 + 462.640625 647.4921875 472.953125 722.140625 493.578125 786.9453125 c 4 + 514.203125 851.75 543.5 906.0078125 581.46875 949.71875 c 4 + 619.203125 993.4296875 664.90625 1026.4765625 718.109375 1049.09375 c 4 + 771.546875 1071.59375 830.609375 1082.84375 896 1082.84375 c 260 + 961.390625 1082.84375 1020.453125 1071.59375 1073.890625 1049.09375 c 4 + 1127.09375 1026.4765625 1172.796875 993.4296875 1210.53125 949.71875 c 4 + 1248.5 906.0078125 1277.796875 851.75 1298.421875 786.9453125 c 4 + 1319.046875 722.140625 1329.359375 647.4921875 1329.359375 563.1171875 c 4 + 1329.359375 413.3515625 1298.1875 294.9921875 1235.84375 208.15625 c 4 + 1173.5 121.203125 1088.890625 68.703125 982.484375 50.421875 c 5 + 982.484375 15.8515625 982.484375 -18.71875 982.484375 -53.2890625 c 5 + 1033.8125 -53.2890625 1085.140625 -53.2890625 1136.46875 -53.2890625 c 5 + 1136.46875 -98.40625 1136.46875 -143.5234375 1136.46875 -188.640625 c 5 +896 188.703125 m 4 + 934.4375 188.703125 969.59375 195.3828125 1001.9375 208.859375 c 4 + 1034.046875 222.21875 1061.46875 241.671875 1083.96875 267.1015625 c 4 + 1106.46875 292.53125 1124.046875 323.5859375 1136.46875 360.03125 c 4 + 1148.890625 396.4765625 1155.21875 437.7265625 1155.21875 483.8984375 c 5 + 1155.21875 536.671875 1155.21875 589.4453125 1155.21875 642.21875 c 5 + 1155.21875 688.390625 1148.890625 729.640625 1136.46875 766.0859375 c 4 + 1124.046875 802.53125 1106.46875 833.5859375 1083.96875 859.015625 c 4 + 1061.46875 884.4453125 1034.046875 903.8984375 1001.9375 917.2578125 c 4 + 969.59375 930.734375 934.4375 937.4140625 896 937.4140625 c 4 + 856.625 937.4140625 821.234375 930.734375 789.359375 917.2578125 c 4 + 757.71875 903.8984375 730.53125 884.4453125 708.03125 859.015625 c 4 + 685.53125 833.5859375 667.953125 802.53125 655.53125 766.0859375 c 4 + 643.109375 729.640625 636.78125 688.390625 636.78125 642.21875 c 5 + 636.78125 589.4453125 636.78125 536.671875 636.78125 483.8984375 c 5 + 636.78125 437.7265625 643.109375 396.4765625 655.53125 360.03125 c 4 + 667.953125 323.5859375 685.53125 292.53125 708.03125 267.1015625 c 4 + 730.53125 241.671875 757.71875 222.21875 789.359375 208.859375 c 4 + 821.234375 195.3828125 856.625 188.703125 896 188.703125 c 4 +EndSplineSet +EndChar + +StartChar: uniE129 +Encoding: 57641 57641 42 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 228 89.2969<1439.98 1772.17> 753.156 144.922<737.328 764.657 1084.83 1112.64> 808.781 89.2969<1340.14 1646.39> +VStem: 227.25 101.719<228 487.219> 646.078 97.9688<228 751.401> 1105.92 97.9688<228 753.247> +DStem2: 134.125 898.078 19.8281 898.078 0.450673 -0.892689<0 330.095> 285.766 598.547 328.969 487.219 0.416605 0.909088<0 329.486> 766.078 898.078 748.812 753.156 0.416929 -0.908939<124.527 395.989> 1324.83 319.172 1439.98 317.297 0.548962 0.835847<61.6492 585.764> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 288 89.2969<1439.98 1772.17> 813.156 144.922<737.328 764.657 1084.83 1112.64> 868.781 89.2969<1340.14 1646.39> +VStem: 227.25 101.719<288 547.219> 646.078 97.9688<288 811.401> 1105.92 97.9688<288 813.247> +DStem2: 134.125 958.078 19.8281 958.078 0.450673 -0.892689<0 330.095> 285.766 658.547 328.969 547.219 0.416605 0.909087<0 329.486> 766.078 958.078 748.812 813.156 0.416929 -0.908939<124.527 395.989> 1324.83 379.172 1439.98 377.297 0.548962 0.835847<61.6492 585.764> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +227.25 228 m 1xbc + 227.25 314.40625 227.25 400.8125 227.25 487.21875 c 1 + 158.109375 624.171875 88.96875 761.125 19.828125 898.078125 c 1 + 57.9267578125 898.078125 96.0263671875 898.078125 134.125 898.078125 c 1 + 180.504882812 798.234375 226.885742188 698.390625 273.265625 598.546875 c 1 + 277.432617188 598.546875 281.598632812 598.546875 285.765625 598.546875 c 1 + 331.520507812 698.390625 377.276367188 798.234375 423.03125 898.078125 c 1 + 460.479492188 898.078125 497.926757812 898.078125 535.375 898.078125 c 1 + 466.573242188 761.125 397.770507812 624.171875 328.96875 487.21875 c 1 + 328.96875 400.8125 328.96875 314.40625 328.96875 228 c 1 + 295.0625 228 261.15625 228 227.25 228 c 1xbc +1105.921875 640.8125 m 1 + 1108.16113281 678.885742188 1110.40136719 716.958007812 1112.640625 755.03125 c 1 + 1108.8125 755.03125 1104.984375 755.03125 1101.15625 755.03125 c 1 + 1085.79199219 717.583007812 1070.42675781 680.135742188 1055.0625 642.6875 c 1 + 1011.546875 551.828125 968.03125 460.96875 924.515625 370.109375 c 1 + 881.3125 460.96875 838.109375 551.828125 794.90625 642.6875 c 1 + 779.541992188 679.510742188 764.176757812 716.333007812 748.8125 753.15625 c 1 + 744.984375 753.15625 741.15625 753.15625 737.328125 753.15625 c 1xdc + 739.567382812 715.708007812 741.807617188 678.260742188 744.046875 640.8125 c 1 + 744.046875 503.208007812 744.046875 365.604492188 744.046875 228 c 1 + 711.390625 228 678.734375 228 646.078125 228 c 1 + 646.078125 451.359375 646.078125 674.71875 646.078125 898.078125 c 1 + 686.078125 898.078125 726.078125 898.078125 766.078125 898.078125 c 1xbc + 802.25 820.004882812 838.421875 741.932617188 874.59375 663.859375 c 1 + 890.270507812 619.692382812 905.948242188 575.526367188 921.625 531.359375 c 1 + 924.489257812 531.359375 927.354492188 531.359375 930.21875 531.359375 c 1 + 945.921875 575.526367188 961.625 619.692382812 977.328125 663.859375 c 1 + 1013.16113281 741.932617188 1048.99511719 820.004882812 1084.828125 898.078125 c 1xdc + 1124.515625 898.078125 1164.203125 898.078125 1203.890625 898.078125 c 1 + 1203.890625 674.71875 1203.890625 451.359375 1203.890625 228 c 1 + 1171.234375 228 1138.578125 228 1105.921875 228 c 1 + 1105.921875 365.604492188 1105.921875 503.208007812 1105.921875 640.8125 c 1 +1772.171875 228 m 1 + 1623.05761719 228 1473.94238281 228 1324.828125 228 c 1 + 1324.828125 258.390625 1324.828125 288.78125 1324.828125 319.171875 c 1 + 1432.015625 482.375 1539.203125 645.578125 1646.390625 808.78125 c 1 + 1544.30761719 808.78125 1442.22363281 808.78125 1340.140625 808.78125 c 1 + 1340.140625 838.546875 1340.140625 868.3125 1340.140625 898.078125 c 1 + 1480.63574219 898.078125 1621.12988281 898.078125 1761.625 898.078125 c 1xbc + 1761.625 867.6875 1761.625 837.296875 1761.625 806.90625 c 1 + 1654.41113281 643.703125 1547.19824219 480.5 1439.984375 317.296875 c 1 + 1550.71386719 317.296875 1661.44238281 317.296875 1772.171875 317.296875 c 1 + 1772.171875 287.53125 1772.171875 257.765625 1772.171875 228 c 1 +EndSplineSet +EndChar + +StartChar: uniE12A +Encoding: 57642 57642 43 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 216.516 91.1719<1374.3 1569.36> 498.703 91.25<184.594 336.939> 519.875 95.9375<824.594 1100.14> 564.953 89.2969<1407.93 1572.57> 802.062 96.0156<184.594 420.981 824.594 1134.67 1380.69 1681.23> +VStem: 76.1562 108.438<228 498.703 589.953 803.078> 444.75 114.297<612.194 780.759> 716.156 108.438<228 519.875 615.812 802.062> 1602.56 113.281<341.368 531.273> +DStem2: 428.422 510.266 318.031 498.703 0.456936 -0.8895<0 262.07> 1276.16 524.641 1366.39 566.906 0.0726244 0.997359<48.7072 286.444> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 276.516 91.1719<1374.3 1569.36> 558.703 91.25<184.594 336.939> 579.875 95.9375<824.594 1100.14> 624.953 89.2969<1407.93 1572.57> 862.062 96.0156<184.594 420.981 824.594 1134.67 1380.69 1681.23> +VStem: 76.1562 108.438<288 558.703 649.953 863.078> 444.75 114.297<672.194 840.759> 716.156 108.438<288 579.875 675.812 862.062> 1602.56 113.281<401.368 591.273> +DStem2: 428.422 570.266 318.031 558.703 0.456936 -0.8895<0 262.07> 1276.16 584.641 1366.39 626.906 0.0726244 0.997359<48.7072 286.444> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +184.59375 228 m 1xcf80 + 148.448242188 228 112.301757812 228 76.15625 228 c 1 + 76.15625 451.359375 76.15625 674.71875 76.15625 898.078125 c 1 + 172.458007812 898.078125 268.760742188 898.078125 365.0625 898.078125 c 1 + 425.296875 898.078125 472.640625 880.03125 507.171875 843.859375 c 0 + 541.703125 807.6875 559.046875 758.546875 559.046875 696.515625 c 0 + 559.046875 648.46875 547.953125 608.625 525.921875 576.984375 c 0 + 503.8125 545.265625 471.3125 523.078125 428.421875 510.265625 c 1 + 476.754882812 416.176757812 525.088867188 322.088867188 573.421875 228 c 1 + 533.109375 228 492.796875 228 452.484375 228 c 1 + 407.666992188 318.234375 362.848632812 408.46875 318.03125 498.703125 c 1 + 273.551757812 498.703125 229.073242188 498.703125 184.59375 498.703125 c 1 + 184.59375 408.46875 184.59375 318.234375 184.59375 228 c 1xcf80 +357.40625 589.953125 m 1 + 384.90625 589.953125 406.390625 597.140625 421.703125 611.515625 c 0 + 437.09375 625.890625 444.75 646.59375 444.75 673.46875 c 1 + 444.75 688.807617188 444.75 704.145507812 444.75 719.484375 c 1 + 444.75 746.4375 437.09375 767.0625 421.703125 781.4375 c 0 + 406.390625 795.8125 384.90625 803.078125 357.40625 803.078125 c 1 + 299.801757812 803.078125 242.198242188 803.078125 184.59375 803.078125 c 1 + 184.59375 732.036132812 184.59375 660.995117188 184.59375 589.953125 c 1 + 242.198242188 589.953125 299.801757812 589.953125 357.40625 589.953125 c 1 +716.15625 228 m 1 + 716.15625 451.359375 716.15625 674.71875 716.15625 898.078125 c 1 + 855.661132812 898.078125 995.166992188 898.078125 1134.671875 898.078125 c 1 + 1134.671875 866.073242188 1134.671875 834.067382812 1134.671875 802.0625 c 1 + 1031.3125 802.0625 927.953125 802.0625 824.59375 802.0625 c 1 + 824.59375 739.979492188 824.59375 677.895507812 824.59375 615.8125 c 1 + 916.442382812 615.8125 1008.29199219 615.8125 1100.140625 615.8125 c 1 + 1100.140625 583.833007812 1100.140625 551.854492188 1100.140625 519.875 c 1 + 1008.29199219 519.875 916.442382812 519.875 824.59375 519.875 c 1xaf80 + 824.59375 422.583007812 824.59375 325.291992188 824.59375 228 c 1 + 788.448242188 228 752.301757812 228 716.15625 228 c 1 +1681.234375 804.015625 m 1 + 1582.04199219 804.015625 1482.84863281 804.015625 1383.65625 804.015625 c 1 + 1377.90136719 724.979492188 1372.14550781 645.942382812 1366.390625 566.90625 c 1 + 1368.62988281 566.90625 1370.87011719 566.90625 1373.109375 566.90625 c 1 + 1380.765625 580.34375 1388.8125 592.296875 1397.09375 602.84375 c 0 + 1405.453125 613.46875 1414.984375 622.53125 1425.921875 630.265625 c 0 + 1436.78125 637.921875 1449.28125 643.859375 1463.34375 648 c 0 + 1477.40625 652.140625 1494.046875 654.25 1513.265625 654.25 c 0 + 1542.09375 654.25 1568.8125 649.40625 1593.421875 639.875 c 0 + 1618.03125 630.265625 1639.515625 616.515625 1657.71875 598.546875 c 0 + 1676 580.65625 1690.21875 558.703125 1700.453125 532.765625 c 0 + 1710.6875 506.90625 1715.84375 477.609375 1715.84375 444.953125 c 0 + 1715.84375 411.671875 1710.53125 380.96875 1699.984375 352.765625 c 0 + 1689.4375 324.640625 1673.890625 300.5 1653.421875 280.34375 c 0 + 1632.953125 260.1875 1607.796875 244.484375 1578.03125 233.3125 c 0 + 1548.265625 222.0625 1514.515625 216.515625 1476.78125 216.515625 c 0 + 1446.703125 216.515625 1420.140625 219.875 1397.09375 226.59375 c 0 + 1374.046875 233.3125 1353.734375 242.21875 1336.15625 253.46875 c 0 + 1318.5 264.640625 1303.1875 277.453125 1290.0625 291.828125 c 0 + 1276.9375 306.203125 1265.296875 321.125 1254.984375 336.515625 c 1 + 1281.234375 357.296875 1307.484375 378.078125 1333.734375 398.859375 c 1 + 1342.09375 385.421875 1350.6875 373.3125 1359.671875 362.375 c 0 + 1368.65625 351.515625 1378.890625 341.90625 1390.375 333.625 c 0 + 1401.859375 325.265625 1414.828125 318.859375 1429.28125 314.40625 c 0 + 1443.65625 309.953125 1460.140625 307.6875 1478.734375 307.6875 c 0 + 1518.34375 307.6875 1548.96875 318.546875 1570.375 340.34375 c 0 + 1591.78125 362.0625 1602.5625 392.140625 1602.5625 430.578125 c 1 + 1602.5625 434.40625 1602.5625 438.234375 1602.5625 442.0625 c 1 + 1602.5625 480.5 1591.78125 510.578125 1570.375 532.296875 c 0 + 1548.96875 554.09375 1518.34375 564.953125 1478.734375 564.953125 c 0x9f80 + 1449.90625 564.953125 1426.859375 559.484375 1409.59375 548.625 c 0 + 1392.328125 537.765625 1377.5625 525.578125 1365.453125 512.140625 c 1 + 1335.6875 516.307617188 1305.921875 520.473632812 1276.15625 524.640625 c 1 + 1284.46386719 649.120117188 1292.77050781 773.598632812 1301.078125 898.078125 c 1 + 1427.796875 898.078125 1554.515625 898.078125 1681.234375 898.078125 c 1 + 1681.234375 866.723632812 1681.234375 835.370117188 1681.234375 804.015625 c 1 +EndSplineSet +EndChar + +StartChar: uniE12B +Encoding: 57643 57643 44 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: -208.33 91.1719<492.095 694.045 1082.26 1420.23> 105.576 92.1094<524.289 683.663> 393.545 91.1719<503.64 691.332 1086.66 1259.04> 657.686 91.1719<511.882 706.951 1072.57 1410.54> 1006.12 89.2969<545.516 710.154> 1245.19 94.0625<518.545 818.82 1064.99 1253.84> +VStem: 714.289 114.219<224.923 368.321> 727.727 112.344<-86.9403 77.853> 740.148 113.281<782.538 972.44> 965.227 455<-196.846 -104.658 669.17 761.357> 1284.91 115.156<169.902 361.965 1049.13 1227.98> +DStem2: 471.32 840.029 392.57 777.686 0.582707 -0.812682<4.77747 136.754> 413.742 965.81 503.977 1008.08 0.0726244 0.997359<48.7072 286.444> 955.461 772.842 1072.57 761.357 0.752577 0.658505<80.5713 451.637> 965.227 -93.1738 1082.26 -104.658 0.752577 0.658505<80.5125 451.578> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: -148.33 91.1719<492.095 694.045 1082.26 1420.23> 165.576 92.1094<524.289 683.663> 453.545 91.1719<503.64 691.332 1086.66 1259.04> 717.686 91.1719<511.882 706.951 1072.57 1410.54> 1066.12 89.2969<545.516 710.154> 1305.19 94.0625<518.545 818.82 1064.99 1253.84> +VStem: 714.289 114.219<284.923 428.321> 727.727 112.344<-26.9403 137.853> 740.148 113.281<842.538 1032.44> 965.227 455<-136.846 -44.6582 729.17 821.357> 1284.91 115.156<229.902 421.965 1109.13 1287.98> +DStem2: 471.32 900.029 392.57 837.686 0.582707 -0.812682<4.77747 136.754> 413.742 1025.81 503.977 1068.08 0.0726244 0.997359<48.7072 286.444> 955.461 832.842 1072.57 821.357 0.752577 0.658505<80.5713 451.637> 965.227 -33.1738 1082.26 -44.6582 0.752577 0.658505<80.5125 451.578> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +592.4140625 197.685546875 m 1xfd + 633.9765625 197.685546875 664.7578125 206.513671875 684.6015625 224.091796875 c 0 + 704.4453125 241.748046875 714.2890625 264.248046875 714.2890625 291.826171875 c 1 + 714.2890625 294.065429688 714.2890625 296.305664062 714.2890625 298.544921875 c 1 + 714.2890625 329.248046875 704.7578125 352.763671875 685.5390625 369.091796875 c 0 + 666.3203125 385.419921875 640.3828125 393.544921875 607.7265625 393.544921875 c 0 + 575.6953125 393.544921875 548.5078125 386.357421875 526.1640625 371.982421875 c 0 + 503.8203125 357.529296875 484.9140625 337.529296875 469.6015625 311.982421875 c 1 + 445.590820312 332.763671875 421.581054688 353.544921875 397.5703125 374.326171875 c 1 + 407.7265625 389.091796875 419.2890625 403.154296875 432.1015625 416.591796875 c 0 + 444.9140625 430.029296875 459.9140625 441.748046875 477.2578125 451.669921875 c 0 + 494.4453125 461.591796875 513.9765625 469.560546875 535.6953125 475.654296875 c 0 + 557.5703125 481.748046875 582.4140625 484.716796875 610.6953125 484.716796875 c 0 + 641.9453125 484.716796875 671.1640625 480.888671875 698.0390625 473.232421875 c 0 + 724.9140625 465.576171875 747.8828125 454.169921875 767.1015625 439.169921875 c 0 + 786.3203125 424.091796875 801.3203125 405.888671875 812.2578125 384.404296875 c 0 + 823.1953125 362.998046875 828.5078125 338.857421875 828.5078125 311.982421875 c 0xfe + 828.5078125 290.810546875 825.2265625 271.669921875 818.5078125 254.326171875 c 0 + 811.7890625 237.060546875 802.4140625 221.904296875 790.6953125 208.779296875 c 0 + 778.8203125 195.654296875 765.0703125 184.951171875 749.4453125 176.591796875 c 0 + 733.6640625 168.310546875 717.2578125 162.216796875 699.9140625 158.388671875 c 1 + 699.9140625 156.774414062 699.9140625 155.159179688 699.9140625 153.544921875 c 1 + 719.1328125 149.716796875 737.2578125 143.466796875 754.1328125 134.873046875 c 0 + 771.1640625 126.201171875 786.0078125 115.029296875 798.8203125 101.201171875 c 0 + 811.6328125 87.451171875 821.6328125 71.123046875 828.9765625 52.294921875 c 0 + 836.4765625 33.388671875 840.0703125 11.826171875 840.0703125 -12.548828125 c 0 + 840.0703125 -42.001953125 834.2890625 -68.720703125 822.8828125 -92.705078125 c 0 + 811.3203125 -116.689453125 795.0703125 -137.314453125 774.2890625 -154.580078125 c 0 + 753.5078125 -171.923828125 728.3515625 -185.126953125 698.9765625 -194.423828125 c 0 + 669.6015625 -203.720703125 636.9453125 -208.330078125 601.0078125 -208.330078125 c 0 + 569.7578125 -208.330078125 542.1015625 -204.970703125 518.5078125 -198.251953125 c 0 + 494.7578125 -191.533203125 473.8203125 -182.626953125 455.5390625 -171.376953125 c 0 + 437.4140625 -160.205078125 421.3203125 -147.392578125 407.5703125 -133.017578125 c 0 + 393.8203125 -118.642578125 381.7890625 -103.720703125 371.6328125 -88.330078125 c 1 + 398.1953125 -67.548828125 424.7578125 -46.767578125 451.3203125 -25.986328125 c 1 + 459.6015625 -39.423828125 468.3515625 -51.689453125 477.7265625 -62.939453125 c 0 + 486.9453125 -74.111328125 497.5703125 -83.720703125 509.4453125 -91.689453125 c 0 + 521.1640625 -99.736328125 534.6015625 -105.986328125 549.7578125 -110.439453125 c 0 + 564.7578125 -114.892578125 581.7890625 -117.158203125 601.0078125 -117.158203125 c 0 + 641.9453125 -117.158203125 673.3515625 -107.392578125 695.0703125 -87.861328125 c 0 + 716.9453125 -68.330078125 727.7265625 -41.298828125 727.7265625 -6.767578125 c 1 + 727.7265625 -4.5283203125 727.7265625 -2.2880859375 727.7265625 -0.048828125 c 1 + 727.7265625 34.482421875 716.3203125 60.732421875 693.1953125 78.701171875 c 0 + 670.2265625 96.591796875 637.5703125 105.576171875 595.2265625 105.576171875 c 1 + 571.581054688 105.576171875 547.934570312 105.576171875 524.2890625 105.576171875 c 1 + 524.2890625 136.279296875 524.2890625 166.982421875 524.2890625 197.685546875 c 1 + 546.997070312 197.685546875 569.706054688 197.685546875 592.4140625 197.685546875 c 1xfd +1420.2265625 -196.845703125 m 1xfc40 + 1268.55957031 -196.845703125 1116.89355469 -196.845703125 965.2265625 -196.845703125 c 1 + 965.2265625 -162.288085938 965.2265625 -127.731445312 965.2265625 -93.173828125 c 1xfc40 + 1036.58105469 -29.501953125 1107.93457031 34.169921875 1179.2890625 97.841796875 c 1 + 1213.1953125 128.623046875 1239.2890625 157.841796875 1257.5703125 185.732421875 c 0 + 1275.6953125 213.544921875 1284.9140625 242.841796875 1284.9140625 273.544921875 c 1 + 1284.9140625 277.711914062 1284.9140625 281.877929688 1284.9140625 286.044921875 c 1 + 1284.9140625 318.701171875 1275.0703125 344.248046875 1255.5390625 362.841796875 c 0 + 1236.1640625 381.357421875 1209.7578125 390.654296875 1176.4765625 390.654296875 c 0 + 1157.8828125 390.654296875 1141.6328125 387.919921875 1127.8828125 382.529296875 c 0 + 1114.1328125 377.060546875 1102.1015625 369.560546875 1091.9453125 359.951171875 c 0 + 1081.6328125 350.341796875 1073.1953125 339.169921875 1066.4765625 326.357421875 c 0 + 1059.7578125 313.544921875 1054.4453125 299.794921875 1050.6953125 285.107421875 c 1 + 1018.9765625 297.268554688 987.2578125 309.430664062 955.5390625 321.591796875 c 1 + 962.7265625 342.685546875 972.2578125 362.998046875 984.4453125 382.529296875 c 0 + 996.6328125 402.060546875 1011.9453125 419.482421875 1030.5390625 434.873046875 c 0 + 1048.9765625 450.185546875 1071.0078125 462.373046875 1096.3203125 471.279296875 c 0 + 1121.4765625 480.263671875 1151.1640625 484.716796875 1185.0703125 484.716796875 c 256 + 1218.9765625 484.716796875 1249.4453125 479.794921875 1276.3203125 469.873046875 c 0 + 1303.1953125 459.951171875 1325.6953125 446.201171875 1343.9765625 428.623046875 c 0 + 1362.1015625 410.966796875 1376.1640625 390.029296875 1385.6953125 365.732421875 c 0 + 1395.2265625 341.357421875 1400.0703125 314.873046875 1400.0703125 286.044921875 c 0xfc20 + 1400.0703125 259.169921875 1396.0078125 234.169921875 1387.5703125 211.123046875 c 0 + 1379.2890625 188.076171875 1367.7265625 166.357421875 1353.0390625 145.888671875 c 0 + 1338.3515625 125.419921875 1321.1640625 105.888671875 1301.6328125 87.294921875 c 0 + 1282.1015625 68.779296875 1261.4765625 49.873046875 1239.7578125 30.654296875 c 1 + 1187.2578125 -14.4501953125 1134.7578125 -59.5537109375 1082.2578125 -104.658203125 c 1 + 1194.9140625 -104.658203125 1307.5703125 -104.658203125 1420.2265625 -104.658203125 c 1 + 1420.2265625 -135.387695312 1420.2265625 -166.116210938 1420.2265625 -196.845703125 c 1xfc40 +818.8203125 1245.18554688 m 1 + 719.627929688 1245.18554688 620.434570312 1245.18554688 521.2421875 1245.18554688 c 1 + 515.487304688 1166.14941406 509.731445312 1087.11230469 503.9765625 1008.07617188 c 1 + 506.215820312 1008.07617188 508.456054688 1008.07617188 510.6953125 1008.07617188 c 1 + 518.3515625 1021.51367188 526.3984375 1033.46679688 534.6796875 1044.01367188 c 0 + 543.0390625 1054.63867188 552.5703125 1063.70117188 563.5078125 1071.43554688 c 0 + 574.3671875 1079.09179688 586.8671875 1085.02929688 600.9296875 1089.16992188 c 0 + 614.9921875 1093.31054688 631.6328125 1095.41992188 650.8515625 1095.41992188 c 0 + 679.6796875 1095.41992188 706.3984375 1090.57617188 731.0078125 1081.04492188 c 0 + 755.6171875 1071.43554688 777.1015625 1057.68554688 795.3046875 1039.71679688 c 0 + 813.5859375 1021.82617188 827.8046875 999.873046875 838.0390625 973.935546875 c 0 + 848.2734375 948.076171875 853.4296875 918.779296875 853.4296875 886.123046875 c 0 + 853.4296875 852.841796875 848.1171875 822.138671875 837.5703125 793.935546875 c 0 + 827.0234375 765.810546875 811.4765625 741.669921875 791.0078125 721.513671875 c 0 + 770.5390625 701.357421875 745.3828125 685.654296875 715.6171875 674.482421875 c 0 + 685.8515625 663.232421875 652.1015625 657.685546875 614.3671875 657.685546875 c 0 + 584.2890625 657.685546875 557.7265625 661.044921875 534.6796875 667.763671875 c 0 + 511.6328125 674.482421875 491.3203125 683.388671875 473.7421875 694.638671875 c 0 + 456.0859375 705.810546875 440.7734375 718.623046875 427.6484375 732.998046875 c 0 + 414.5234375 747.373046875 402.8828125 762.294921875 392.5703125 777.685546875 c 1 + 418.8203125 798.466796875 445.0703125 819.248046875 471.3203125 840.029296875 c 1 + 479.6796875 826.591796875 488.2734375 814.482421875 497.2578125 803.544921875 c 0 + 506.2421875 792.685546875 516.4765625 783.076171875 527.9609375 774.794921875 c 0 + 539.4453125 766.435546875 552.4140625 760.029296875 566.8671875 755.576171875 c 0 + 581.2421875 751.123046875 597.7265625 748.857421875 616.3203125 748.857421875 c 0 + 655.9296875 748.857421875 686.5546875 759.716796875 707.9609375 781.513671875 c 0 + 729.3671875 803.232421875 740.1484375 833.310546875 740.1484375 871.748046875 c 1 + 740.1484375 875.576171875 740.1484375 879.404296875 740.1484375 883.232421875 c 1xfc80 + 740.1484375 921.669921875 729.3671875 951.748046875 707.9609375 973.466796875 c 0 + 686.5546875 995.263671875 655.9296875 1006.12304688 616.3203125 1006.12304688 c 0 + 587.4921875 1006.12304688 564.4453125 1000.65429688 547.1796875 989.794921875 c 0 + 529.9140625 978.935546875 515.1484375 966.748046875 503.0390625 953.310546875 c 1 + 473.2734375 957.477539062 443.5078125 961.643554688 413.7421875 965.810546875 c 1 + 422.049804688 1090.29003906 430.356445312 1214.76855469 438.6640625 1339.24804688 c 1 + 565.3828125 1339.24804688 692.1015625 1339.24804688 818.8203125 1339.24804688 c 1 + 818.8203125 1307.89355469 818.8203125 1276.54003906 818.8203125 1245.18554688 c 1 +1410.5390625 669.169921875 m 1 + 1258.84667969 669.169921875 1107.15332031 669.169921875 955.4609375 669.169921875 c 1 + 955.4609375 703.727539062 955.4609375 738.284179688 955.4609375 772.841796875 c 1 + 1026.84082031 836.513671875 1098.22167969 900.185546875 1169.6015625 963.857421875 c 1 + 1203.5078125 994.638671875 1229.6015625 1023.85742188 1247.8046875 1051.74804688 c 0 + 1266.0078125 1079.56054688 1275.1484375 1108.85742188 1275.1484375 1139.56054688 c 1 + 1275.1484375 1143.72753906 1275.1484375 1147.89355469 1275.1484375 1152.06054688 c 1 + 1275.1484375 1184.71679688 1265.3828125 1210.26367188 1245.8515625 1228.85742188 c 0 + 1226.3984375 1247.37304688 1199.9921875 1256.66992188 1166.7109375 1256.66992188 c 0 + 1148.1171875 1256.66992188 1131.9453125 1253.93554688 1118.1953125 1248.54492188 c 0 + 1104.4453125 1243.07617188 1092.4140625 1235.57617188 1082.1796875 1225.96679688 c 0 + 1071.9453125 1216.35742188 1063.5078125 1205.18554688 1056.7890625 1192.37304688 c 0 + 1050.0703125 1179.56054688 1044.7578125 1165.81054688 1040.9296875 1151.12304688 c 1 + 1009.23730469 1163.28417969 977.543945312 1175.44628906 945.8515625 1187.60742188 c 1 + 952.9609375 1208.70117188 962.4921875 1229.01367188 974.6796875 1248.54492188 c 0 + 986.8671875 1268.07617188 1002.1796875 1285.49804688 1020.7734375 1300.88867188 c 0 + 1039.2890625 1316.20117188 1061.2421875 1328.38867188 1086.5546875 1337.29492188 c 0 + 1111.7890625 1346.27929688 1141.3984375 1350.73242188 1175.3046875 1350.73242188 c 256 + 1209.2109375 1350.73242188 1239.6796875 1345.81054688 1266.5546875 1335.88867188 c 0 + 1293.4296875 1325.96679688 1315.9296875 1312.21679688 1334.2109375 1294.63867188 c 0 + 1352.4140625 1276.98242188 1366.3984375 1256.04492188 1375.9296875 1231.74804688 c 0 + 1385.5390625 1207.37304688 1390.3828125 1180.88867188 1390.3828125 1152.06054688 c 0 + 1390.3828125 1125.18554688 1386.2421875 1100.18554688 1377.8828125 1077.13867188 c 0 + 1369.6015625 1054.09179688 1358.0390625 1032.37304688 1343.3515625 1011.90429688 c 0 + 1328.5859375 991.435546875 1311.4765625 971.904296875 1291.9453125 953.310546875 c 0 + 1272.4140625 934.794921875 1251.7890625 915.888671875 1230.0703125 896.669921875 c 1 + 1177.5703125 851.565429688 1125.0703125 806.461914062 1072.5703125 761.357421875 c 1 + 1185.2265625 761.357421875 1297.8828125 761.357421875 1410.5390625 761.357421875 c 1 + 1410.5390625 730.627929688 1410.5390625 699.899414062 1410.5390625 669.169921875 c 1 +EndSplineSet +EndChar + +StartChar: uniE12C +Encoding: 57644 57644 45 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 216.516 85.3906<666.317 841.234> 228 108.516<1191.66 1214.71 1540.1 1563.15> 564.953 85.4688<691.227 840.765> 795.344 102.734<1364.48 1386.59> 808.781 89.2969<34.4375 211.938 313.656 491.312> +VStem: 211.938 101.719<228 808.781> 537.406 107.5<322.176 545.303> 861.938 107.5<322.46 544.161> 993.344 103.75<794.328 898.078> 1315.06 123.75<796.086 898.078> 1657.72 99.8438<798.234 898.078> +DStem2: 1097.09 898.078 993.344 898.078 0.190374 -0.981712<0 567.853> 1209.44 336.516 1348.66 640.812 0.136058 0.990701<4.46299 473.288> 1524.28 490.109 1381.31 795.344 0.136058 -0.990701<-318.35 155.035> 1578.97 491.984 1610.69 228 0.190374 0.981712<-154.194 413.659> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 276.516 85.3906<666.317 841.234> 288 108.516<1191.66 1214.71 1540.1 1563.15> 624.953 85.4688<691.227 840.765> 855.344 102.734<1364.48 1386.59> 868.781 89.2969<34.4375 211.938 313.656 491.312> +VStem: 211.938 101.719<288 868.781> 537.406 107.5<382.176 605.303> 861.938 107.5<382.46 604.161> 993.344 103.75<854.328 958.078> 1315.06 123.75<856.086 958.078> 1657.72 99.8438<858.234 958.078> +DStem2: 1097.09 958.078 993.344 958.078 0.190374 -0.981712<0 567.853> 1209.44 396.516 1348.66 700.812 0.136058 0.990701<4.46299 473.288> 1524.28 550.109 1381.31 855.344 0.136058 -0.990701<-318.35 155.035> 1578.97 551.984 1610.69 288 0.190374 0.981712<-154.194 413.659> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +313.65625 808.78125 m 1x6fe0 + 313.65625 615.1875 313.65625 421.59375 313.65625 228 c 1 + 279.75 228 245.84375 228 211.9375 228 c 1 + 211.9375 421.59375 211.9375 615.1875 211.9375 808.78125 c 1 + 152.770507812 808.78125 93.6044921875 808.78125 34.4375 808.78125 c 1 + 34.4375 838.546875 34.4375 868.3125 34.4375 898.078125 c 1 + 186.729492188 898.078125 339.020507812 898.078125 491.3125 898.078125 c 1 + 491.3125 868.3125 491.3125 838.546875 491.3125 808.78125 c 1 + 432.09375 808.78125 372.875 808.78125 313.65625 808.78125 c 1x6fe0 +753.34375 216.515625 m 0xafe0 + 681.78125 216.515625 627.875 238.546875 591.625 282.6875 c 0 + 555.53125 326.90625 537.40625 391.203125 537.40625 475.65625 c 0 + 537.40625 515.96875 542.5625 556.28125 552.71875 596.671875 c 0 + 563.03125 636.984375 577.71875 675.5 596.9375 712.296875 c 0 + 616.15625 749.09375 638.96875 783.546875 665.53125 815.5 c 0 + 692.09375 847.53125 721.78125 875.03125 754.4375 898.078125 c 1 + 800.166992188 898.078125 845.895507812 898.078125 891.625 898.078125 c 1 + 852.5625 868 818.96875 839.328125 790.84375 812.140625 c 0 + 762.71875 784.953125 738.8125 757.921875 719.28125 731.046875 c 0 + 699.75 704.171875 683.96875 676.515625 671.78125 648 c 0 + 659.59375 619.484375 650.375 588.625 643.96875 555.34375 c 1 + 648.135742188 555.34375 652.301757812 555.34375 656.46875 555.34375 c 1 + 667.40625 586.046875 684.59375 609.5625 708.34375 625.890625 c 0 + 731.9375 642.21875 760.0625 650.421875 792.71875 650.421875 c 0 + 847.09375 650.421875 890.21875 632.765625 921.9375 597.609375 c 0 + 953.5 562.375 969.4375 510.578125 969.4375 442.0625 c 0 + 969.4375 371.046875 951 315.65625 914.28125 275.96875 c 0 + 877.40625 236.28125 823.8125 216.515625 753.34375 216.515625 c 0xafe0 +753.34375 301.90625 m 256 + 825.6875 301.90625 861.9375 341.59375 861.9375 420.96875 c 1 + 861.9375 429.276367188 861.9375 437.583007812 861.9375 445.890625 c 1 + 861.9375 525.265625 825.6875 564.953125 753.34375 564.953125 c 256 + 681.15625 564.953125 644.90625 525.265625 644.90625 445.890625 c 1 + 644.90625 437.583007812 644.90625 429.276367188 644.90625 420.96875 c 1 + 644.90625 341.59375 681.15625 301.90625 753.34375 301.90625 c 256 +1135.53125 228 m 1x77e0 + 1088.13574219 451.359375 1040.73925781 674.71875 993.34375 898.078125 c 1 + 1027.92675781 898.078125 1062.51074219 898.078125 1097.09375 898.078125 c 1 + 1123.34375 762.713867188 1149.59375 627.348632812 1175.84375 491.984375 c 1 + 1182.875 440.161132812 1189.90625 388.338867188 1196.9375 336.515625 c 1 + 1201.10449219 336.515625 1205.27050781 336.515625 1209.4375 336.515625 c 1 + 1216.46875 387.713867188 1223.5 438.911132812 1230.53125 490.109375 c 1 + 1258.70800781 626.098632812 1286.88574219 762.088867188 1315.0625 898.078125 c 1 + 1356.3125 898.078125 1397.5625 898.078125 1438.8125 898.078125 c 1 + 1467.30175781 762.088867188 1495.79199219 626.098632812 1524.28125 490.109375 c 1 + 1531.3125 438.911132812 1538.34375 387.713867188 1545.375 336.515625 c 1 + 1549.54199219 336.515625 1553.70800781 336.515625 1557.875 336.515625 c 1 + 1564.90625 388.338867188 1571.9375 440.161132812 1578.96875 491.984375 c 1 + 1605.21875 627.348632812 1631.46875 762.713867188 1657.71875 898.078125 c 1 + 1691 898.078125 1724.28125 898.078125 1757.5625 898.078125 c 1x6fe0 + 1708.60449219 674.71875 1659.64550781 451.359375 1610.6875 228 c 1 + 1570.0625 228 1529.4375 228 1488.8125 228 c 1 + 1460.01074219 365.604492188 1431.20800781 503.208007812 1402.40625 640.8125 c 1 + 1395.375 692.323242188 1388.34375 743.833007812 1381.3125 795.34375 c 1 + 1377.45800781 795.34375 1373.60449219 795.34375 1369.75 795.34375 c 1 + 1362.71875 743.833007812 1355.6875 692.323242188 1348.65625 640.8125 c 1 + 1318.55175781 503.208007812 1288.44824219 365.604492188 1258.34375 228 c 1 + 1217.40625 228 1176.46875 228 1135.53125 228 c 1x77e0 +EndSplineSet +EndChar + +StartChar: uniE12D +Encoding: 57645 57645 46 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 216.516 92.1094<829.327 1005.2 1389.33 1565.2> 817.453 92.1094<829.327 1005.2 1389.33 1565.2> +VStem: 71.8594 108.438<228 479.904 558.234 898.078> 460.609 126.719<771.359 898.078> 476 130.547<228 358.547> 674.438 115.156<348.546 777.443> 1044.98 115.156<347.743 778.336> 1234.44 115.156<348.546 777.443> 1604.98 115.156<347.743 778.336> +DStem2: 348.344 615.812 272.484 540.969 0.54515 -0.838338<21.3896 394.71> 280.141 680.188 348.344 615.812 0.660468 0.750854<-154.984 -109.59 -12.7165 282.798> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 276.516 92.1094<829.327 1005.2 1389.33 1565.2> 877.453 92.1094<829.327 1005.2 1389.33 1565.2> +VStem: 71.8594 108.438<288 539.904 618.234 958.078> 460.609 126.719<831.359 958.078> 476 130.547<288 418.547> 674.438 115.156<408.546 837.443> 1044.98 115.156<407.743 838.336> 1234.44 115.156<408.546 837.443> 1604.98 115.156<407.743 838.336> +DStem2: 348.344 675.812 272.484 600.969 0.54515 -0.838338<21.3896 394.71> 280.141 740.188 348.344 675.812 0.660468 0.750854<-154.984 -109.59 -12.7165 282.798> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +272.484375 540.96875 m 1xef80 + 241.754882812 505.760742188 211.026367188 470.551757812 180.296875 435.34375 c 1 + 180.296875 366.229492188 180.296875 297.114257812 180.296875 228 c 1 + 144.151367188 228 108.004882812 228 71.859375 228 c 1 + 71.859375 451.359375 71.859375 674.71875 71.859375 898.078125 c 1 + 108.004882812 898.078125 144.151367188 898.078125 180.296875 898.078125 c 1 + 180.296875 784.796875 180.296875 671.515625 180.296875 558.234375 c 1 + 181.573242188 558.234375 182.848632812 558.234375 184.125 558.234375 c 1 + 216.129882812 598.885742188 248.135742188 639.536132812 280.140625 680.1875 c 1 + 340.296875 752.817382812 400.453125 825.448242188 460.609375 898.078125 c 1 + 502.848632812 898.078125 545.088867188 898.078125 587.328125 898.078125 c 1xf780 + 507.666992188 803.989257812 428.004882812 709.901367188 348.34375 615.8125 c 1 + 434.411132812 486.541992188 520.479492188 357.270507812 606.546875 228 c 1 + 563.03125 228 519.515625 228 476 228 c 1 + 408.161132812 332.323242188 340.323242188 436.645507812 272.484375 540.96875 c 1xef80 +917.25 216.515625 m 0 + 875.6875 216.515625 839.515625 224.328125 808.8125 240.03125 c 0 + 778.109375 255.65625 752.796875 278.234375 732.953125 307.6875 c 0 + 713.109375 337.140625 698.421875 373.3125 688.8125 416.125 c 0 + 679.203125 459.015625 674.4375 508 674.4375 563.078125 c 0 + 674.4375 617.453125 679.203125 666.203125 688.8125 709.40625 c 0 + 698.421875 752.609375 713.109375 788.9375 732.953125 818.390625 c 0 + 752.796875 847.84375 778.109375 870.421875 808.8125 886.046875 c 0 + 839.515625 901.75 875.6875 909.5625 917.25 909.5625 c 0 + 1000.453125 909.5625 1061.78125 879.171875 1101.15625 818.390625 c 0 + 1140.453125 757.609375 1160.140625 672.453125 1160.140625 563.078125 c 256 + 1160.140625 453.625 1140.453125 368.46875 1101.15625 307.6875 c 0 + 1061.78125 246.90625 1000.453125 216.515625 917.25 216.515625 c 0 +917.25 308.625 m 256 + 940.296875 308.625 959.984375 313.3125 976.3125 322.53125 c 0 + 992.640625 331.828125 1005.921875 345.109375 1016.15625 362.375 c 0 + 1026.390625 379.71875 1033.734375 400.34375 1038.265625 424.328125 c 0 + 1042.71875 448.3125 1044.984375 475.03125 1044.984375 504.484375 c 1 + 1044.984375 543.520507812 1044.984375 582.557617188 1044.984375 621.59375 c 1 + 1044.984375 651.046875 1042.71875 677.765625 1038.265625 701.75 c 0 + 1033.734375 725.734375 1026.390625 746.4375 1016.15625 763.703125 c 0 + 1005.921875 780.96875 992.640625 794.25 976.3125 803.546875 c 0 + 959.984375 812.765625 940.296875 817.453125 917.25 817.453125 c 256 + 894.203125 817.453125 874.59375 812.765625 858.265625 803.546875 c 0 + 841.9375 794.25 828.65625 780.96875 818.421875 763.703125 c 0 + 808.1875 746.4375 800.765625 725.734375 796.3125 701.75 c 0 + 791.859375 677.765625 789.59375 651.046875 789.59375 621.59375 c 1 + 789.59375 582.557617188 789.59375 543.520507812 789.59375 504.484375 c 1 + 789.59375 475.03125 791.859375 448.3125 796.3125 424.328125 c 0 + 800.765625 400.34375 808.1875 379.71875 818.421875 362.375 c 0 + 828.65625 345.109375 841.9375 331.828125 858.265625 322.53125 c 0 + 874.59375 313.3125 894.203125 308.625 917.25 308.625 c 256 +1477.25 216.515625 m 0 + 1435.6875 216.515625 1399.515625 224.328125 1368.8125 240.03125 c 0 + 1338.109375 255.65625 1312.796875 278.234375 1292.953125 307.6875 c 0 + 1273.109375 337.140625 1258.421875 373.3125 1248.8125 416.125 c 0 + 1239.203125 459.015625 1234.4375 508 1234.4375 563.078125 c 0 + 1234.4375 617.453125 1239.203125 666.203125 1248.8125 709.40625 c 0 + 1258.421875 752.609375 1273.109375 788.9375 1292.953125 818.390625 c 0 + 1312.796875 847.84375 1338.109375 870.421875 1368.8125 886.046875 c 0 + 1399.515625 901.75 1435.6875 909.5625 1477.25 909.5625 c 0 + 1560.453125 909.5625 1621.78125 879.171875 1661.15625 818.390625 c 0 + 1700.453125 757.609375 1720.140625 672.453125 1720.140625 563.078125 c 256 + 1720.140625 453.625 1700.453125 368.46875 1661.15625 307.6875 c 0 + 1621.78125 246.90625 1560.453125 216.515625 1477.25 216.515625 c 0 +1477.25 308.625 m 256 + 1500.296875 308.625 1519.984375 313.3125 1536.3125 322.53125 c 0 + 1552.640625 331.828125 1565.921875 345.109375 1576.15625 362.375 c 0 + 1586.390625 379.71875 1593.734375 400.34375 1598.265625 424.328125 c 0 + 1602.71875 448.3125 1604.984375 475.03125 1604.984375 504.484375 c 1 + 1604.984375 543.520507812 1604.984375 582.557617188 1604.984375 621.59375 c 1 + 1604.984375 651.046875 1602.71875 677.765625 1598.265625 701.75 c 0 + 1593.734375 725.734375 1586.390625 746.4375 1576.15625 763.703125 c 0 + 1565.921875 780.96875 1552.640625 794.25 1536.3125 803.546875 c 0 + 1519.984375 812.765625 1500.296875 817.453125 1477.25 817.453125 c 256 + 1454.203125 817.453125 1434.59375 812.765625 1418.265625 803.546875 c 0 + 1401.9375 794.25 1388.65625 780.96875 1378.421875 763.703125 c 0 + 1368.1875 746.4375 1360.765625 725.734375 1356.3125 701.75 c 0 + 1351.859375 677.765625 1349.59375 651.046875 1349.59375 621.59375 c 1 + 1349.59375 582.557617188 1349.59375 543.520507812 1349.59375 504.484375 c 1 + 1349.59375 475.03125 1351.859375 448.3125 1356.3125 424.328125 c 0 + 1360.765625 400.34375 1368.1875 379.71875 1378.421875 362.375 c 0 + 1388.65625 345.109375 1401.9375 331.828125 1418.265625 322.53125 c 0 + 1434.59375 313.3125 1454.203125 308.625 1477.25 308.625 c 256 +EndSplineSet +EndChar + +StartChar: uniE12E +Encoding: 57646 57646 47 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: -196.846 92.1875<499.047 837.016 1068.8 1262.38> 390.654 94.0625<500.878 676.405 1076.04 1254.37> 657.686 96.9531<472.493 704.799> 850.576 93.125<1098.42 1296.16> 933.154 93.125<608.188 746.391> 1239.4 99.8438<1183.26 1212.14> 1253.78 96.9531<472.767 701.484> +VStem: 295.219 116.172<817.128 1191.02> 701.547 115.312<169.447 361.965> 756 95.0781<669.17 770.967 802.673 933.154> 903.5 110.391<669.17 779.561> 922.797 115.156<-76.3001 352.598> 1293.27 115.156<-77.1032 353.491> 1383.5 113.281<669.17 782.451> +DStem2: 381.859 -93.1738 499.047 -104.658 0.752577 0.658505<80.6301 451.695> 903.5 669.17 1013.89 669.17 0.322775 0.946476<35.6313 226.241 322.753 322.753> 1268.34 1339.25 1200.14 1239.4 0.306115 -0.951995<74.1727 385.072 481.954 673.162> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: -136.846 92.1875<499.047 837.016 1068.8 1262.38> 450.654 94.0625<500.878 676.405 1076.04 1254.37> 717.686 96.9531<472.493 704.799> 910.576 93.125<1098.42 1296.16> 993.154 93.125<608.188 746.391> 1299.4 99.8438<1183.26 1212.14> 1313.78 96.9531<472.767 701.484> +VStem: 295.219 116.172<877.128 1251.02> 701.547 115.312<229.447 421.965> 756 95.0781<729.17 830.967 862.673 993.154> 903.5 110.391<729.17 839.561> 922.797 115.156<-16.3001 412.598> 1293.27 115.156<-17.1032 413.491> 1383.5 113.281<729.17 842.451> +DStem2: 381.859 -33.1738 499.047 -44.6582 0.752577 0.658505<80.6301 451.695> 903.5 729.17 1013.89 729.17 0.322775 0.946476<35.6313 226.241 322.753 322.753> 1268.34 1399.25 1200.14 1299.4 0.306115 -0.951995<74.1727 385.072 481.954 673.162> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +837.015625 -196.845703125 m 1xe180 + 685.296875 -196.845703125 533.578125 -196.845703125 381.859375 -196.845703125 c 1 + 381.859375 -162.288085938 381.859375 -127.731445312 381.859375 -93.173828125 c 1 + 453.265625 -29.501953125 524.671875 34.169921875 596.078125 97.841796875 c 1 + 629.984375 128.623046875 656.078125 157.841796875 674.203125 185.732421875 c 0 + 692.484375 213.544921875 701.546875 242.841796875 701.546875 273.544921875 c 1 + 701.546875 277.711914062 701.546875 281.877929688 701.546875 286.044921875 c 1 + 701.546875 318.701171875 691.859375 344.248046875 672.328125 362.841796875 c 0 + 652.796875 381.357421875 626.390625 390.654296875 593.109375 390.654296875 c 0 + 574.515625 390.654296875 558.421875 387.919921875 544.671875 382.529296875 c 0 + 530.921875 377.060546875 518.890625 369.560546875 508.578125 359.951171875 c 0 + 498.421875 350.341796875 489.984375 339.169921875 483.265625 326.357421875 c 0 + 476.546875 313.544921875 471.234375 299.794921875 467.328125 285.107421875 c 1 + 435.661132812 297.268554688 403.995117188 309.430664062 372.328125 321.591796875 c 1 + 379.359375 342.685546875 388.890625 362.998046875 401.078125 382.529296875 c 0 + 413.265625 402.060546875 428.578125 419.482421875 447.171875 434.873046875 c 0 + 465.765625 450.185546875 487.640625 462.373046875 512.953125 471.279296875 c 0 + 538.265625 480.263671875 567.796875 484.716796875 601.703125 484.716796875 c 256 + 635.609375 484.716796875 666.078125 479.794921875 692.953125 469.873046875 c 0 + 719.828125 459.951171875 742.328125 446.201171875 760.609375 428.623046875 c 0 + 778.890625 410.966796875 792.796875 390.029296875 802.328125 365.732421875 c 0 + 812.015625 341.357421875 816.859375 314.873046875 816.859375 286.044921875 c 0 + 816.859375 259.169921875 812.640625 234.169921875 804.359375 211.123046875 c 0 + 796.078125 188.076171875 784.515625 166.357421875 769.828125 145.888671875 c 0 + 754.984375 125.419921875 737.953125 105.888671875 718.421875 87.294921875 c 0 + 698.890625 68.779296875 678.265625 49.873046875 656.546875 30.654296875 c 1 + 604.046875 -14.4501953125 551.546875 -59.5537109375 499.046875 -104.658203125 c 1 + 611.703125 -104.658203125 724.359375 -104.658203125 837.015625 -104.658203125 c 1 + 837.015625 -135.387695312 837.015625 -166.116210938 837.015625 -196.845703125 c 1xe180 +1165.609375 -208.330078125 m 0 + 1124.046875 -208.330078125 1087.796875 -200.517578125 1057.171875 -184.814453125 c 0 + 1026.390625 -169.189453125 1001.078125 -146.611328125 981.234375 -117.158203125 c 0 + 961.390625 -87.705078125 946.703125 -51.533203125 937.171875 -8.720703125 c 0 + 927.484375 34.169921875 922.796875 83.154296875 922.796875 138.232421875 c 0 + 922.796875 192.607421875 927.484375 241.357421875 937.171875 284.560546875 c 0 + 946.703125 327.763671875 961.390625 364.091796875 981.234375 393.544921875 c 0 + 1001.078125 422.998046875 1026.390625 445.576171875 1057.171875 461.201171875 c 0 + 1087.796875 476.904296875 1124.046875 484.716796875 1165.609375 484.716796875 c 0 + 1248.734375 484.716796875 1310.140625 454.326171875 1349.515625 393.544921875 c 0 + 1388.734375 332.763671875 1408.421875 247.607421875 1408.421875 138.232421875 c 256xe118 + 1408.421875 28.779296875 1388.734375 -56.376953125 1349.515625 -117.158203125 c 0 + 1310.140625 -177.939453125 1248.734375 -208.330078125 1165.609375 -208.330078125 c 0 +1165.609375 -116.220703125 m 256 + 1188.578125 -116.220703125 1208.265625 -111.533203125 1224.671875 -102.314453125 c 0 + 1240.921875 -93.017578125 1254.203125 -79.736328125 1264.515625 -62.470703125 c 0 + 1274.671875 -45.126953125 1282.015625 -24.501953125 1286.546875 -0.517578125 c 0 + 1291.078125 23.466796875 1293.265625 50.185546875 1293.265625 79.638671875 c 1 + 1293.265625 118.674804688 1293.265625 157.711914062 1293.265625 196.748046875 c 1 + 1293.265625 226.201171875 1291.078125 252.919921875 1286.546875 276.904296875 c 0 + 1282.015625 300.888671875 1274.671875 321.591796875 1264.515625 338.857421875 c 0 + 1254.203125 356.123046875 1240.921875 369.404296875 1224.671875 378.701171875 c 0 + 1208.265625 387.919921875 1188.578125 392.607421875 1165.609375 392.607421875 c 256 + 1142.484375 392.607421875 1122.953125 387.919921875 1106.546875 378.701171875 c 0 + 1090.296875 369.404296875 1077.015625 356.123046875 1066.703125 338.857421875 c 0 + 1056.546875 321.591796875 1049.046875 300.888671875 1044.671875 276.904296875 c 0 + 1040.140625 252.919921875 1037.953125 226.201171875 1037.953125 196.748046875 c 1 + 1037.953125 157.711914062 1037.953125 118.674804688 1037.953125 79.638671875 c 1 + 1037.953125 50.185546875 1040.140625 23.466796875 1044.671875 -0.517578125 c 0 + 1049.046875 -24.501953125 1056.546875 -45.126953125 1066.703125 -62.470703125 c 0 + 1077.015625 -79.736328125 1090.296875 -93.017578125 1106.546875 -102.314453125 c 0 + 1122.953125 -111.533203125 1142.484375 -116.220703125 1165.609375 -116.220703125 c 256 +756 770.966796875 m 1xeb40 + 754.723632812 770.966796875 753.448242188 770.966796875 752.171875 770.966796875 c 1 + 745.140625 738.310546875 726.078125 711.279296875 695.0625 689.794921875 c 0 + 663.96875 668.388671875 622.875 657.685546875 571.703125 657.685546875 c 0 + 532.015625 657.685546875 495.21875 665.185546875 461.3125 680.185546875 c 0 + 427.328125 695.263671875 398.109375 717.294921875 373.421875 746.435546875 c 0 + 348.8125 775.576171875 329.59375 811.748046875 315.84375 854.951171875 c 0 + 302.09375 898.154296875 295.21875 947.919921875 295.21875 1004.24804688 c 0 + 295.21875 1059.87304688 302.25 1109.32617188 316.3125 1152.52929688 c 0 + 330.375 1195.73242188 350.21875 1232.06054688 375.84375 1261.51367188 c 0 + 401.46875 1290.96679688 432.171875 1313.15429688 468.03125 1328.23242188 c 0 + 503.8125 1343.23242188 543.8125 1350.73242188 588.03125 1350.73242188 c 0 + 648.1875 1350.73242188 699.046875 1337.45117188 740.609375 1310.96679688 c 0 + 782.25 1284.40429688 814.59375 1247.37304688 837.640625 1200.02929688 c 1 + 808.1875 1182.76367188 778.734375 1165.49804688 749.28125 1148.23242188 c 1 + 736.46875 1179.56054688 716.625 1205.02929688 689.75 1224.56054688 c 0 + 662.875 1244.01367188 628.96875 1253.77929688 588.03125 1253.77929688 c 0 + 534.90625 1253.77929688 492.171875 1236.82617188 459.828125 1202.91992188 c 0 + 427.5625 1169.01367188 411.390625 1121.04492188 411.390625 1058.93554688 c 1 + 411.390625 1022.45117188 411.390625 985.966796875 411.390625 949.482421875 c 1 + 411.390625 887.373046875 427.5625 839.404296875 459.828125 805.498046875 c 0 + 492.171875 771.591796875 534.90625 754.638671875 588.03125 754.638671875 c 0 + 609.125 754.638671875 629.28125 757.294921875 648.5 762.763671875 c 0 + 667.71875 768.232421875 684.515625 776.201171875 698.890625 786.748046875 c 0 + 713.265625 797.294921875 724.828125 810.419921875 733.421875 826.123046875 c 0 + 742.09375 841.826171875 746.390625 860.185546875 746.390625 881.357421875 c 1 + 746.390625 898.623046875 746.390625 915.888671875 746.390625 933.154296875 c 1 + 700.323242188 933.154296875 654.254882812 933.154296875 608.1875 933.154296875 c 1 + 608.1875 964.196289062 608.1875 995.237304688 608.1875 1026.27929688 c 1 + 689.151367188 1026.27929688 770.114257812 1026.27929688 851.078125 1026.27929688 c 1 + 851.078125 907.243164062 851.078125 788.206054688 851.078125 669.169921875 c 1 + 819.385742188 669.169921875 787.692382812 669.169921875 756 669.169921875 c 1 + 756 703.102539062 756 737.034179688 756 770.966796875 c 1xeb40 +1383.5 669.169921875 m 1xf524 + 1363.34375 729.638671875 1343.1875 790.107421875 1323.03125 850.576171875 c 1 + 1239.515625 850.576171875 1156 850.576171875 1072.484375 850.576171875 c 1 + 1052.953125 790.107421875 1033.421875 729.638671875 1013.890625 669.169921875 c 1 + 977.09375 669.169921875 940.296875 669.169921875 903.5 669.169921875 c 1 + 979.671875 892.529296875 1055.84375 1115.88867188 1132.015625 1339.24804688 c 1 + 1177.45800781 1339.24804688 1222.90136719 1339.24804688 1268.34375 1339.24804688 c 1 + 1344.48925781 1115.88867188 1420.63574219 892.529296875 1496.78125 669.169921875 c 1 + 1459.02050781 669.169921875 1421.26074219 669.169921875 1383.5 669.169921875 c 1xf524 +1200.140625 1239.40429688 m 1 + 1198.55175781 1239.40429688 1196.96386719 1239.40429688 1195.375 1239.40429688 c 1 + 1163.05761719 1140.83691406 1130.73925781 1042.26855469 1098.421875 943.701171875 c 1 + 1164.33300781 943.701171875 1230.24511719 943.701171875 1296.15625 943.701171875 c 1 + 1264.15136719 1042.26855469 1232.14550781 1140.83691406 1200.140625 1239.40429688 c 1 +EndSplineSet +EndChar + +StartChar: uniE12F +Encoding: 57647 57647 48 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: -362.939 90.2344<638.639 740.609> 377.217 96.0156<457.753 702.84 981.547 1181.23 1289.67 1489.36> 936.045 95.0781<376.312 612.622> 1244.25 95<376.312 612.622> +VStem: 267.875 108.438<669.17 936.045 1031.12 1244.25> 291.391 116.094<-47.8317 324.07> 536.078 101.875<-272.614 -198.747> 636.469 114.219<1053.36 1221.93> 753.109 116.094<-47.8297 324.07> 907.875 103.594<669.17 1181.83> 1181.23 108.438<-196.846 377.217> 1420.53 103.594<669.17 1181.83> +DStem2: 1036.47 1339.25 1016.31 1181.83 0.468722 -0.883346<129.61 385.178> 1221.78 998.47 1362.88 1073.31 0.468722 0.883346<0 252.858> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: -302.939 90.2344<638.639 740.609> 437.217 96.0156<457.753 702.84 981.547 1181.23 1289.67 1489.36> 996.045 95.0781<376.312 612.622> 1304.25 95<376.312 612.622> +VStem: 267.875 108.438<729.17 996.045 1091.12 1304.25> 291.391 116.094<12.1683 384.07> 536.078 101.875<-212.614 -138.747> 636.469 114.219<1113.36 1281.93> 753.109 116.094<12.1703 384.07> 907.875 103.594<729.17 1241.83> 1181.23 108.438<-136.846 437.217> 1420.53 103.594<729.17 1241.83> +DStem2: 1036.47 1399.25 1016.31 1241.83 0.468722 -0.883346<129.61 385.178> 1221.78 1058.47 1362.88 1133.31 0.468722 0.883346<0 252.858> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +740.609375 -362.939453125 m 1xf6f0 + 708.942382812 -362.939453125 677.276367188 -362.939453125 645.609375 -362.939453125 c 1 + 607.796875 -362.939453125 580.140625 -353.330078125 562.484375 -334.111328125 c 0 + 544.984375 -314.892578125 536.078125 -289.033203125 536.078125 -256.376953125 c 1 + 536.078125 -239.423828125 536.078125 -222.470703125 536.078125 -205.517578125 c 1 + 498.421875 -200.986328125 464.515625 -190.126953125 434.359375 -172.861328125 c 0 + 404.359375 -155.595703125 378.734375 -132.548828125 357.640625 -103.720703125 c 0 + 336.390625 -74.892578125 320.140625 -40.205078125 308.578125 0.419921875 c 0 + 297.171875 41.044921875 291.390625 86.982421875 291.390625 138.232421875 c 0 + 291.390625 194.482421875 298.265625 244.248046875 312.015625 287.451171875 c 0 + 325.765625 330.654296875 345.296875 366.826171875 370.609375 395.966796875 c 0 + 395.765625 425.107421875 426.234375 447.138671875 461.703125 462.216796875 c 0 + 497.328125 477.216796875 536.703125 484.716796875 580.296875 484.716796875 c 256 + 623.890625 484.716796875 663.265625 477.216796875 698.890625 462.216796875 c 0 + 734.359375 447.138671875 764.828125 425.107421875 789.984375 395.966796875 c 0 + 815.296875 366.826171875 834.828125 330.654296875 848.578125 287.451171875 c 0 + 862.328125 244.248046875 869.203125 194.482421875 869.203125 138.232421875 c 0 + 869.203125 38.388671875 848.421875 -40.517578125 806.859375 -98.408203125 c 0 + 765.296875 -156.376953125 708.890625 -191.376953125 637.953125 -203.564453125 c 1 + 637.953125 -226.611328125 637.953125 -249.658203125 637.953125 -272.705078125 c 1 + 672.171875 -272.705078125 706.390625 -272.705078125 740.609375 -272.705078125 c 1 + 740.609375 -302.783203125 740.609375 -332.861328125 740.609375 -362.939453125 c 1xf6f0 +580.296875 -111.376953125 m 0 + 605.921875 -111.376953125 629.359375 -106.923828125 650.921875 -97.939453125 c 0 + 672.328125 -89.033203125 690.609375 -76.064453125 705.609375 -59.111328125 c 0 + 720.609375 -42.158203125 732.328125 -21.455078125 740.609375 2.841796875 c 0 + 748.890625 27.138671875 753.109375 54.638671875 753.109375 85.419921875 c 1 + 753.109375 120.602539062 753.109375 155.784179688 753.109375 190.966796875 c 1 + 753.109375 221.748046875 748.890625 249.248046875 740.609375 273.544921875 c 0 + 732.328125 297.841796875 720.609375 318.544921875 705.609375 335.498046875 c 0 + 690.609375 352.451171875 672.328125 365.419921875 650.921875 374.326171875 c 0 + 629.359375 383.310546875 605.921875 387.763671875 580.296875 387.763671875 c 0 + 554.046875 387.763671875 530.453125 383.310546875 509.203125 374.326171875 c 0 + 488.109375 365.419921875 469.984375 352.451171875 454.984375 335.498046875 c 0 + 439.984375 318.544921875 428.265625 297.841796875 419.984375 273.544921875 c 0 + 411.703125 249.248046875 407.484375 221.748046875 407.484375 190.966796875 c 1 + 407.484375 155.784179688 407.484375 120.602539062 407.484375 85.419921875 c 1 + 407.484375 54.638671875 411.703125 27.138671875 419.984375 2.841796875 c 0 + 428.265625 -21.455078125 439.984375 -42.158203125 454.984375 -59.111328125 c 0 + 469.984375 -76.064453125 488.109375 -89.033203125 509.203125 -97.939453125 c 0 + 530.453125 -106.923828125 554.046875 -111.376953125 580.296875 -111.376953125 c 0 +1289.671875 377.216796875 m 1 + 1289.671875 185.862304688 1289.671875 -5.4912109375 1289.671875 -196.845703125 c 1 + 1253.52636719 -196.845703125 1217.37988281 -196.845703125 1181.234375 -196.845703125 c 1 + 1181.234375 -5.4912109375 1181.234375 185.862304688 1181.234375 377.216796875 c 1 + 1114.671875 377.216796875 1048.109375 377.216796875 981.546875 377.216796875 c 1 + 981.546875 409.221679688 981.546875 441.227539062 981.546875 473.232421875 c 1 + 1150.81738281 473.232421875 1320.08886719 473.232421875 1489.359375 473.232421875 c 1 + 1489.359375 441.227539062 1489.359375 409.221679688 1489.359375 377.216796875 c 1 + 1422.796875 377.216796875 1356.234375 377.216796875 1289.671875 377.216796875 c 1 +267.875 669.169921875 m 1xf9f0 + 267.875 892.529296875 267.875 1115.88867188 267.875 1339.24804688 c 1 + 363.864257812 1339.24804688 459.854492188 1339.24804688 555.84375 1339.24804688 c 1 + 617.875 1339.24804688 665.84375 1321.04492188 699.75 1284.56054688 c 0 + 733.8125 1248.07617188 750.6875 1199.09179688 750.6875 1137.68554688 c 256 + 750.6875 1076.20117188 733.8125 1027.21679688 699.75 990.732421875 c 0 + 665.84375 954.326171875 617.875 936.044921875 555.84375 936.044921875 c 1 + 496 936.044921875 436.15625 936.044921875 376.3125 936.044921875 c 1 + 376.3125 847.086914062 376.3125 758.127929688 376.3125 669.169921875 c 1 + 340.166992188 669.169921875 304.020507812 669.169921875 267.875 669.169921875 c 1xf9f0 +376.3125 1031.12304688 m 1 + 433.916992188 1031.12304688 491.520507812 1031.12304688 549.125 1031.12304688 c 1 + 576.625 1031.12304688 598.03125 1038.31054688 613.34375 1052.68554688 c 0 + 628.8125 1067.06054688 636.46875 1087.76367188 636.46875 1114.63867188 c 1 + 636.46875 1129.97753906 636.46875 1145.31542969 636.46875 1160.65429688 c 1 + 636.46875 1187.60742188 628.8125 1208.23242188 613.34375 1222.60742188 c 0 + 598.03125 1236.98242188 576.625 1244.24804688 549.125 1244.24804688 c 1 + 491.520507812 1244.24804688 433.916992188 1244.24804688 376.3125 1244.24804688 c 1 + 376.3125 1173.20605469 376.3125 1102.16503906 376.3125 1031.12304688 c 1 +1420.53125 1181.82617188 m 1 + 1418.91699219 1181.82617188 1417.30175781 1181.82617188 1415.6875 1181.82617188 c 1 + 1398.08300781 1145.65429688 1380.47949219 1109.48242188 1362.875 1073.31054688 c 1 + 1313.91699219 984.040039062 1264.95800781 894.768554688 1216 805.498046875 c 1 + 1167.04199219 894.768554688 1118.08300781 984.040039062 1069.125 1073.31054688 c 1 + 1051.52050781 1109.48242188 1033.91699219 1145.65429688 1016.3125 1181.82617188 c 1 + 1014.69824219 1181.82617188 1013.08300781 1181.82617188 1011.46875 1181.82617188 c 1 + 1011.46875 1010.94042969 1011.46875 840.055664062 1011.46875 669.169921875 c 1 + 976.9375 669.169921875 942.40625 669.169921875 907.875 669.169921875 c 1 + 907.875 892.529296875 907.875 1115.88867188 907.875 1339.24804688 c 1 + 950.739257812 1339.24804688 993.604492188 1339.24804688 1036.46875 1339.24804688 c 1 + 1096.3125 1225.65429688 1156.15625 1112.06054688 1216 998.466796875 c 1 + 1217.92675781 998.466796875 1219.85449219 998.466796875 1221.78125 998.466796875 c 1 + 1281.625 1112.06054688 1341.46875 1225.65429688 1401.3125 1339.24804688 c 1 + 1442.25 1339.24804688 1483.1875 1339.24804688 1524.125 1339.24804688 c 1 + 1524.125 1115.88867188 1524.125 892.529296875 1524.125 669.169921875 c 1 + 1489.59375 669.169921875 1455.0625 669.169921875 1420.53125 669.169921875 c 1 + 1420.53125 840.055664062 1420.53125 1010.94042969 1420.53125 1181.82617188 c 1 +EndSplineSet +EndChar + +StartChar: uniE130 +Encoding: 57648 57648 49 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 129.845 119.922<305.613 568.692> 876.231 119.922<326.785 582.205> +VStem: 158.402 134.375<683.539 846.481> 608.402 134.375<287.984 463.824> 888.383 129.59<144.2 785.021> 1529.2 129.59<144.2 785.021> +DStem2: 425.98 645.763 403.129 517.442 0.978916 -0.204262<-105.472 187.038> 1049.12 981.8 1023.93 785.021 0.468722 -0.883346<162.013 481.472> 1280.77 555.821 1457.13 649.376 0.468722 0.883346<0 316.072> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 189.845 119.922<305.613 568.692> 936.231 119.922<326.785 582.205> +VStem: 158.402 134.375<743.539 906.481> 608.402 134.375<347.984 523.824> 888.383 129.59<204.2 845.021> 1529.2 129.59<204.2 845.021> +DStem2: 425.98 705.763 403.129 577.442 0.978916 -0.204262<-105.472 187.038> 1049.12 1041.8 1023.93 845.021 0.468722 -0.883346<162.013 481.472> 1280.77 615.821 1457.13 709.376 0.468722 0.883346<0 316.072> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +439.1640625 129.844726562 m 0 + 368.75390625 129.844726562 308.98828125 142.637695312 259.76953125 168.223632812 c 0 + 210.55078125 193.809570312 168.36328125 228.184570312 133.20703125 271.446289062 c 1 + 164.391601562 300.645507812 195.577148438 329.844726562 226.76171875 359.043945312 c 1 + 256.3515625 323.008789062 288.96875 295.762695312 324.515625 277.403320312 c 0 + 360.16015625 259.043945312 400.78515625 249.766601562 446.390625 249.766601562 c 0 + 500.00390625 249.766601562 540.3359375 261.778320312 567.58203125 285.801757812 c 0 + 594.73046875 309.825195312 608.40234375 342.247070312 608.40234375 382.969726562 c 0 + 608.40234375 415.782226562 598.734375 441.758789062 579.59375 460.997070312 c 0 + 560.35546875 480.235351562 526.37109375 494.590820312 477.54296875 504.161132812 c 1 + 452.73828125 508.587890625 427.93359375 513.014648438 403.12890625 517.442382812 c 1 + 321.5859375 532.579101562 260.35546875 559.434570312 219.53515625 597.813476562 c 0 + 178.71484375 636.192382812 158.40234375 689.024414062 158.40234375 756.211914062 c 0 + 158.40234375 793.028320312 165.3359375 826.426757812 179.3984375 856.407226562 c 0 + 193.36328125 886.387695312 212.9921875 911.583007812 238.1875 931.993164062 c 0 + 263.3828125 952.403320312 293.94921875 968.223632812 329.984375 979.356445312 c 0 + 365.921875 990.586914062 406.3515625 996.153320312 451.17578125 996.153320312 c 0 + 514.359375 996.153320312 569.14453125 985.215820312 615.53125 963.243164062 c 0 + 661.91796875 941.172851562 701.56640625 909.434570312 734.37890625 867.833007812 c 1 + 702.770507812 839.837890625 671.163085938 811.842773438 639.5546875 783.848632812 c 1 + 617.97265625 811.778320312 591.60546875 834.239257812 560.35546875 851.036132812 c 0 + 529.203125 867.833007812 490.3359375 876.231445312 443.94921875 876.231445312 c 0 + 396 876.231445312 358.79296875 866.563476562 332.328125 847.422851562 c 0 + 305.9609375 828.184570312 292.77734375 800.157226562 292.77734375 763.438476562 c 0 + 292.77734375 728.184570312 303.51953125 702.012695312 325.19921875 684.825195312 c 0 + 346.78125 667.637695312 380.375 654.551757812 425.98046875 645.762695312 c 1 + 450.78515625 640.586914062 475.58984375 635.411132812 500.39453125 630.235351562 c 1 + 584.37890625 614.219726562 645.8046875 586.973632812 684.57421875 548.594726562 c 0 + 723.34375 510.215820312 742.77734375 457.383789062 742.77734375 390.196289062 c 0 + 742.77734375 351.036132812 735.94140625 315.391601562 722.3671875 283.360351562 c 0 + 708.79296875 251.426757812 688.96875 223.985351562 662.9921875 201.231445312 c 0 + 636.91796875 178.379882812 605.1796875 160.801757812 567.58203125 148.399414062 c 0 + 529.984375 135.997070312 487.11328125 129.844726562 439.1640625 129.844726562 c 0 +1529.203125 785.020507812 m 1 + 1527.18457031 785.020507812 1525.16699219 785.020507812 1523.1484375 785.020507812 c 1 + 1501.14355469 739.805664062 1479.13769531 694.590820312 1457.1328125 649.375976562 c 1 + 1395.93457031 537.787109375 1334.73730469 426.198242188 1273.5390625 314.610351562 c 1 + 1212.34082031 426.198242188 1151.14355469 537.787109375 1089.9453125 649.375976562 c 1 + 1067.94042969 694.590820312 1045.93457031 739.805664062 1023.9296875 785.020507812 c 1 + 1021.94433594 785.020507812 1019.95800781 785.020507812 1017.97265625 785.020507812 c 1 + 1017.97265625 571.413085938 1017.97265625 357.806640625 1017.97265625 144.200195312 c 1 + 974.776367188 144.200195312 931.579101562 144.200195312 888.3828125 144.200195312 c 1 + 888.3828125 423.399414062 888.3828125 702.598632812 888.3828125 981.797851562 c 1 + 941.963867188 981.797851562 995.543945312 981.797851562 1049.125 981.797851562 c 1 + 1123.9296875 839.805664062 1198.734375 697.813476562 1273.5390625 555.821289062 c 1 + 1275.94824219 555.821289062 1278.35644531 555.821289062 1280.765625 555.821289062 c 1 + 1355.5703125 697.813476562 1430.375 839.805664062 1505.1796875 981.797851562 c 1 + 1556.38378906 981.797851562 1607.58886719 981.797851562 1658.79296875 981.797851562 c 1 + 1658.79296875 702.598632812 1658.79296875 423.399414062 1658.79296875 144.200195312 c 1 + 1615.59667969 144.200195312 1572.39941406 144.200195312 1529.203125 144.200195312 c 1 + 1529.203125 357.806640625 1529.203125 571.413085938 1529.203125 785.020507812 c 1 +EndSplineSet +EndChar + +StartChar: uniE131 +Encoding: 57649 57649 50 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 477.794 118.848<317.094 612.675> 863.048 118.75<317.094 612.675> +VStem: 181.547 135.547<144.2 477.794 596.642 863.048> 642.289 142.969<624.443 835.149> 899.906 140.43<841.368 981.8> 1473.54 136.914<844.884 981.8> +DStem2: 1040.34 981.8 899.906 981.8 0.311738 -0.950168<0 737.016> 1258.7 276.231 1331.94 144.2 0.291293 0.956634<0 737.551> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 537.794 118.848<317.094 612.675> 923.048 118.75<317.094 612.675> +VStem: 181.547 135.547<204.2 537.794 656.642 923.048> 642.289 142.969<684.443 895.149> 899.906 140.43<901.368 1041.8> 1473.54 136.914<904.884 1041.8> +DStem2: 1040.34 1041.8 899.906 1041.8 0.311738 -0.950168<0 737.016> 1258.7 336.231 1331.94 204.2 0.291293 0.956634<0 737.551> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +181.546875 144.200195312 m 1 + 181.546875 423.399414062 181.546875 702.598632812 181.546875 981.797851562 c 1 + 301.534179688 981.797851562 421.520507812 981.797851562 541.5078125 981.797851562 c 1 + 619.2421875 981.797851562 679.203125 959.043945312 721.5859375 913.438476562 c 0 + 763.96875 867.833007812 785.2578125 806.602539062 785.2578125 729.844726562 c 256 + 785.2578125 652.989257812 763.96875 591.758789062 721.5859375 546.153320312 c 0 + 679.203125 500.645507812 619.2421875 477.793945312 541.5078125 477.793945312 c 1 + 466.703125 477.793945312 391.8984375 477.793945312 317.09375 477.793945312 c 1 + 317.09375 366.595703125 317.09375 255.397460938 317.09375 144.200195312 c 1 + 271.911132812 144.200195312 226.729492188 144.200195312 181.546875 144.200195312 c 1 +317.09375 596.641601562 m 1 + 389.098632812 596.641601562 461.104492188 596.641601562 533.109375 596.641601562 c 1 + 567.484375 596.641601562 594.4375 605.625976562 613.578125 623.594726562 c 0 + 632.71875 641.563476562 642.2890625 667.442382812 642.2890625 701.036132812 c 1 + 642.2890625 720.208984375 642.2890625 739.381835938 642.2890625 758.555664062 c 1 + 642.2890625 792.247070312 632.71875 818.028320312 613.578125 835.997070312 c 0 + 594.4375 853.965820312 567.484375 863.047851562 533.109375 863.047851562 c 1 + 461.104492188 863.047851562 389.098632812 863.047851562 317.09375 863.047851562 c 1 + 317.09375 774.245117188 317.09375 685.443359375 317.09375 596.641601562 c 1 +1174.7109375 144.200195312 m 1 + 1083.109375 423.399414062 991.5078125 702.598632812 899.90625 981.797851562 c 1 + 946.715820312 981.797851562 993.526367188 981.797851562 1040.3359375 981.797851562 c 1 + 1084.73730469 843.809570312 1129.13769531 705.821289062 1173.5390625 567.833007812 c 1 + 1200.36230469 470.631835938 1227.18457031 373.431640625 1254.0078125 276.231445312 c 1 + 1255.5703125 276.231445312 1257.1328125 276.231445312 1258.6953125 276.231445312 c 1 + 1285.90917969 373.431640625 1313.12207031 470.631835938 1340.3359375 567.833007812 c 1 + 1384.73730469 705.821289062 1429.13769531 843.809570312 1473.5390625 981.797851562 c 1 + 1519.17675781 981.797851562 1564.81542969 981.797851562 1610.453125 981.797851562 c 1 + 1517.61425781 702.598632812 1424.77636719 423.399414062 1331.9375 144.200195312 c 1 + 1279.52832031 144.200195312 1227.12011719 144.200195312 1174.7109375 144.200195312 c 1 +EndSplineSet +EndChar + +StartChar: uniE132 +Encoding: 57650 57650 51 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 216.516 92.1094<833.624 1009.5 1373.31 1569.36> 564.953 89.2969<1407.93 1572.57> 804.016 94.0625<1380.96 1681.23> 817.453 92.1094<833.624 1009.5> +VStem: 76.1562 108.438<228 479.904 558.234 898.078> 464.906 126.719<771.359 898.078> 480.297 130.547<228 358.547> 678.734 115.156<348.546 777.443> 1049.28 115.156<347.743 778.336> 1602.56 113.281<341.368 531.273> +DStem2: 352.641 615.812 276.781 540.969 0.54515 -0.838338<21.3896 394.71> 284.438 680.188 352.641 615.812 0.660468 0.750854<-154.984 -109.59 -12.7165 282.798> 1276.16 524.641 1366.39 566.906 0.0726244 0.997359<48.7072 286.444> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 276.516 92.1094<833.624 1009.5 1373.31 1569.36> 624.953 89.2969<1407.93 1572.57> 864.016 94.0625<1380.96 1681.23> 877.453 92.1094<833.624 1009.5> +VStem: 76.1562 108.438<288 539.904 618.234 958.078> 464.906 126.719<831.359 958.078> 480.297 130.547<288 418.547> 678.734 115.156<408.546 837.443> 1049.28 115.156<407.743 838.336> 1602.56 113.281<401.368 591.273> +DStem2: 352.641 675.812 276.781 600.969 0.54515 -0.838338<21.3896 394.71> 284.438 740.188 352.641 675.812 0.660468 0.750854<-154.984 -109.59 -12.7165 282.798> 1276.16 584.641 1366.39 626.906 0.0726244 0.997359<48.7072 286.444> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +276.78125 540.96875 m 1xebc0 + 246.051757812 505.760742188 215.323242188 470.551757812 184.59375 435.34375 c 1 + 184.59375 366.229492188 184.59375 297.114257812 184.59375 228 c 1 + 148.448242188 228 112.301757812 228 76.15625 228 c 1 + 76.15625 451.359375 76.15625 674.71875 76.15625 898.078125 c 1 + 112.301757812 898.078125 148.448242188 898.078125 184.59375 898.078125 c 1 + 184.59375 784.796875 184.59375 671.515625 184.59375 558.234375 c 1 + 185.870117188 558.234375 187.145507812 558.234375 188.421875 558.234375 c 1 + 220.426757812 598.885742188 252.432617188 639.536132812 284.4375 680.1875 c 1 + 344.59375 752.817382812 404.75 825.448242188 464.90625 898.078125 c 1 + 507.145507812 898.078125 549.385742188 898.078125 591.625 898.078125 c 1xedc0 + 511.963867188 803.989257812 432.301757812 709.901367188 352.640625 615.8125 c 1 + 438.708007812 486.541992188 524.776367188 357.270507812 610.84375 228 c 1 + 567.328125 228 523.8125 228 480.296875 228 c 1 + 412.458007812 332.323242188 344.620117188 436.645507812 276.78125 540.96875 c 1xebc0 +921.546875 216.515625 m 0 + 879.984375 216.515625 843.8125 224.328125 813.109375 240.03125 c 0 + 782.40625 255.65625 757.09375 278.234375 737.25 307.6875 c 0 + 717.40625 337.140625 702.71875 373.3125 693.109375 416.125 c 0 + 683.5 459.015625 678.734375 508 678.734375 563.078125 c 0 + 678.734375 617.453125 683.5 666.203125 693.109375 709.40625 c 0 + 702.71875 752.609375 717.40625 788.9375 737.25 818.390625 c 0 + 757.09375 847.84375 782.40625 870.421875 813.109375 886.046875 c 0 + 843.8125 901.75 879.984375 909.5625 921.546875 909.5625 c 0xd9c0 + 1004.75 909.5625 1066.078125 879.171875 1105.453125 818.390625 c 0 + 1144.75 757.609375 1164.4375 672.453125 1164.4375 563.078125 c 256 + 1164.4375 453.625 1144.75 368.46875 1105.453125 307.6875 c 0 + 1066.078125 246.90625 1004.75 216.515625 921.546875 216.515625 c 0 +921.546875 308.625 m 256 + 944.59375 308.625 964.28125 313.3125 980.609375 322.53125 c 0 + 996.9375 331.828125 1010.21875 345.109375 1020.453125 362.375 c 0 + 1030.6875 379.71875 1038.03125 400.34375 1042.5625 424.328125 c 0 + 1047.015625 448.3125 1049.28125 475.03125 1049.28125 504.484375 c 1 + 1049.28125 543.520507812 1049.28125 582.557617188 1049.28125 621.59375 c 1 + 1049.28125 651.046875 1047.015625 677.765625 1042.5625 701.75 c 0 + 1038.03125 725.734375 1030.6875 746.4375 1020.453125 763.703125 c 0 + 1010.21875 780.96875 996.9375 794.25 980.609375 803.546875 c 0 + 964.28125 812.765625 944.59375 817.453125 921.546875 817.453125 c 256 + 898.5 817.453125 878.890625 812.765625 862.5625 803.546875 c 0 + 846.234375 794.25 832.953125 780.96875 822.71875 763.703125 c 0 + 812.484375 746.4375 805.0625 725.734375 800.609375 701.75 c 0 + 796.15625 677.765625 793.890625 651.046875 793.890625 621.59375 c 1 + 793.890625 582.557617188 793.890625 543.520507812 793.890625 504.484375 c 1 + 793.890625 475.03125 796.15625 448.3125 800.609375 424.328125 c 0 + 805.0625 400.34375 812.484375 379.71875 822.71875 362.375 c 0 + 832.953125 345.109375 846.234375 331.828125 862.5625 322.53125 c 0 + 878.890625 313.3125 898.5 308.625 921.546875 308.625 c 256 +1681.234375 804.015625 m 1xe9c0 + 1582.04199219 804.015625 1482.84863281 804.015625 1383.65625 804.015625 c 1 + 1377.90136719 724.979492188 1372.14550781 645.942382812 1366.390625 566.90625 c 1 + 1368.62988281 566.90625 1370.87011719 566.90625 1373.109375 566.90625 c 1 + 1380.765625 580.34375 1388.8125 592.296875 1397.09375 602.84375 c 0 + 1405.453125 613.46875 1414.984375 622.53125 1425.921875 630.265625 c 0 + 1436.78125 637.921875 1449.28125 643.859375 1463.34375 648 c 0 + 1477.40625 652.140625 1494.046875 654.25 1513.265625 654.25 c 0 + 1542.09375 654.25 1568.8125 649.40625 1593.421875 639.875 c 0 + 1618.03125 630.265625 1639.515625 616.515625 1657.71875 598.546875 c 0 + 1676 580.65625 1690.21875 558.703125 1700.453125 532.765625 c 0 + 1710.6875 506.90625 1715.84375 477.609375 1715.84375 444.953125 c 0 + 1715.84375 411.671875 1710.53125 380.96875 1699.984375 352.765625 c 0 + 1689.4375 324.640625 1673.890625 300.5 1653.421875 280.34375 c 0 + 1632.953125 260.1875 1607.796875 244.484375 1578.03125 233.3125 c 0 + 1548.265625 222.0625 1514.515625 216.515625 1476.78125 216.515625 c 0 + 1446.703125 216.515625 1420.140625 219.875 1397.09375 226.59375 c 0 + 1374.046875 233.3125 1353.734375 242.21875 1336.15625 253.46875 c 0 + 1318.5 264.640625 1303.1875 277.453125 1290.0625 291.828125 c 0 + 1276.9375 306.203125 1265.296875 321.125 1254.984375 336.515625 c 1 + 1281.234375 357.296875 1307.484375 378.078125 1333.734375 398.859375 c 1 + 1342.09375 385.421875 1350.6875 373.3125 1359.671875 362.375 c 0 + 1368.65625 351.515625 1378.890625 341.90625 1390.375 333.625 c 0 + 1401.859375 325.265625 1414.828125 318.859375 1429.28125 314.40625 c 0 + 1443.65625 309.953125 1460.140625 307.6875 1478.734375 307.6875 c 0 + 1518.34375 307.6875 1548.96875 318.546875 1570.375 340.34375 c 0 + 1591.78125 362.0625 1602.5625 392.140625 1602.5625 430.578125 c 1 + 1602.5625 434.40625 1602.5625 438.234375 1602.5625 442.0625 c 1 + 1602.5625 480.5 1591.78125 510.578125 1570.375 532.296875 c 0 + 1548.96875 554.09375 1518.34375 564.953125 1478.734375 564.953125 c 0 + 1449.90625 564.953125 1426.859375 559.484375 1409.59375 548.625 c 0 + 1392.328125 537.765625 1377.5625 525.578125 1365.453125 512.140625 c 1 + 1335.6875 516.307617188 1305.921875 520.473632812 1276.15625 524.640625 c 1 + 1284.46386719 649.120117188 1292.77050781 773.598632812 1301.078125 898.078125 c 1 + 1427.796875 898.078125 1554.515625 898.078125 1681.234375 898.078125 c 1 + 1681.234375 866.723632812 1681.234375 835.370117188 1681.234375 804.015625 c 1xe9c0 +EndSplineSet +EndChar + +StartChar: uniE133 +Encoding: 57651 57651 52 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: -208.33 95.9375<473.104 698.889> 70.029 95.0781<1059.63 1296.02> 388.779 95.9375<498.673 717.085 1059.63 1296.02> 657.686 95.9375<473.457 699.267 1095.64 1308.92> 1254.79 95.9375<499.001 717.446 1095.56 1308.05> +VStem: 367.209 107.5<231.541 367.835 1098.58 1233.28> 727.209 107.5<-85.2804 61.913 780.143 927.928> 921.817 115.157<816.976 1194.28> 951.193 108.438<-196.846 70.029 165.107 378.232> 1319.79 114.296<187.348 355.913> +DStem2: 581.271 204.404 562.99 101.748 0.978916 -0.204262<-84.378 149.631> 581.662 1070.42 563.381 967.76 0.978916 -0.204262<-84.3815 149.558> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: -148.33 95.9375<473.104 698.889> 130.029 95.0781<1059.63 1296.02> 448.779 95.9375<498.673 717.085 1059.63 1296.02> 717.686 95.9375<473.457 699.267 1095.64 1308.92> 1314.79 95.9375<499.001 717.446 1095.56 1308.05> +VStem: 367.209 107.5<291.541 427.835 1158.58 1293.28> 727.209 107.5<-25.2804 121.913 840.143 987.928> 921.817 115.157<876.976 1254.28> 951.193 108.438<-136.846 130.029 225.107 438.232> 1319.79 114.296<247.348 415.913> +DStem2: 581.271 264.404 562.99 161.748 0.978916 -0.204262<-84.378 149.631> 581.662 1130.42 563.381 1027.76 0.978916 -0.204262<-84.3815 149.558> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +591.818359375 -208.330078125 m 0xfe40 + 535.490234375 -208.330078125 487.677734375 -198.095703125 448.302734375 -177.626953125 c 0 + 408.927734375 -157.158203125 375.177734375 -129.658203125 347.052734375 -95.048828125 c 1 + 372 -71.689453125 396.948242188 -48.330078125 421.896484375 -24.970703125 c 1 + 445.568359375 -53.798828125 471.662109375 -75.595703125 500.099609375 -90.283203125 c 0 + 528.615234375 -104.970703125 561.115234375 -112.392578125 597.599609375 -112.392578125 c 0 + 640.490234375 -112.392578125 672.755859375 -102.783203125 694.552734375 -83.564453125 c 0 + 716.271484375 -64.345703125 727.208984375 -38.408203125 727.208984375 -5.830078125 c 0 + 727.208984375 20.419921875 719.474609375 41.201171875 704.162109375 56.591796875 c 0 + 688.771484375 71.982421875 661.583984375 83.466796875 622.521484375 91.123046875 c 1 + 602.677734375 94.6650390625 582.833984375 98.2060546875 562.990234375 101.748046875 c 1 + 497.755859375 113.857421875 448.771484375 135.341796875 416.115234375 166.044921875 c 0 + 383.458984375 196.748046875 367.208984375 239.013671875 367.208984375 292.763671875 c 0 + 367.208984375 322.216796875 372.755859375 348.935546875 384.005859375 372.919921875 c 0 + 395.177734375 396.904296875 410.880859375 417.060546875 431.037109375 433.388671875 c 0 + 451.193359375 449.716796875 475.646484375 462.373046875 504.474609375 471.279296875 c 0 + 533.224609375 480.263671875 565.568359375 484.716796875 601.427734375 484.716796875 c 0 + 651.974609375 484.716796875 695.802734375 475.966796875 732.912109375 458.388671875 c 0 + 770.021484375 440.732421875 801.740234375 415.341796875 827.990234375 382.060546875 c 1 + 802.703125 359.665039062 777.416992188 337.268554688 752.130859375 314.873046875 c 1 + 734.865234375 337.216796875 713.771484375 355.185546875 688.771484375 368.623046875 c 0 + 663.849609375 382.060546875 632.755859375 388.779296875 595.646484375 388.779296875 c 0 + 557.287109375 388.779296875 527.521484375 381.044921875 506.349609375 365.732421875 c 0 + 485.255859375 350.341796875 474.708984375 327.919921875 474.708984375 298.544921875 c 0 + 474.708984375 270.341796875 483.302734375 249.404296875 500.646484375 235.654296875 c 0 + 517.912109375 221.904296875 544.787109375 211.435546875 581.271484375 204.404296875 c 1 + 601.115234375 200.263671875 620.958984375 196.123046875 640.802734375 191.982421875 c 1 + 707.990234375 179.169921875 757.130859375 157.373046875 788.146484375 126.669921875 c 0 + 819.162109375 95.966796875 834.708984375 53.701171875 834.708984375 -0.048828125 c 0 + 834.708984375 -31.376953125 829.240234375 -59.892578125 818.380859375 -85.517578125 c 0 + 807.521484375 -111.064453125 791.662109375 -133.017578125 770.880859375 -151.220703125 c 0 + 750.021484375 -169.501953125 724.630859375 -183.564453125 694.552734375 -193.486328125 c 0 + 664.474609375 -203.408203125 630.177734375 -208.330078125 591.818359375 -208.330078125 c 0xfe40 +951.193359375 -196.845703125 m 1xfec0 + 951.193359375 26.513671875 951.193359375 249.873046875 951.193359375 473.232421875 c 1 + 1047.18261719 473.232421875 1143.171875 473.232421875 1239.16210938 473.232421875 c 1 + 1301.27148438 473.232421875 1349.23925781 455.029296875 1383.14648438 418.544921875 c 0 + 1417.12988281 382.060546875 1434.08300781 333.076171875 1434.08300781 271.669921875 c 256 + 1434.08300781 210.185546875 1417.12988281 161.201171875 1383.14648438 124.716796875 c 0 + 1349.23925781 88.310546875 1301.27148438 70.029296875 1239.16210938 70.029296875 c 1 + 1179.31738281 70.029296875 1119.47460938 70.029296875 1059.63085938 70.029296875 c 1 + 1059.63085938 -18.9287109375 1059.63085938 -107.887695312 1059.63085938 -196.845703125 c 1 + 1023.484375 -196.845703125 987.338867188 -196.845703125 951.193359375 -196.845703125 c 1xfec0 +1059.63085938 165.107421875 m 1 + 1117.234375 165.107421875 1174.83886719 165.107421875 1232.44335938 165.107421875 c 1 + 1259.94238281 165.107421875 1281.42773438 172.294921875 1296.74023438 186.669921875 c 0 + 1312.13085938 201.044921875 1319.78710938 221.748046875 1319.78710938 248.623046875 c 1 + 1319.78710938 263.961914062 1319.78710938 279.299804688 1319.78710938 294.638671875 c 1 + 1319.78710938 321.591796875 1312.13085938 342.216796875 1296.74023438 356.591796875 c 0 + 1281.42773438 370.966796875 1259.94238281 378.232421875 1232.44335938 378.232421875 c 1 + 1174.83886719 378.232421875 1117.234375 378.232421875 1059.63085938 378.232421875 c 1 + 1059.63085938 307.190429688 1059.63085938 236.149414062 1059.63085938 165.107421875 c 1 +592.130859375 657.685546875 m 0 + 535.880859375 657.685546875 488.068359375 667.919921875 448.693359375 688.388671875 c 0 + 409.318359375 708.857421875 375.568359375 736.357421875 347.443359375 770.966796875 c 1 + 372.390625 794.326171875 397.338867188 817.685546875 422.287109375 841.044921875 c 1 + 445.880859375 812.216796875 471.974609375 790.419921875 500.412109375 775.732421875 c 0 + 529.005859375 761.044921875 561.505859375 753.623046875 597.912109375 753.623046875 c 0 + 640.880859375 753.623046875 673.068359375 763.232421875 694.943359375 782.451171875 c 0 + 716.662109375 801.669921875 727.599609375 827.607421875 727.599609375 860.185546875 c 0 + 727.599609375 886.435546875 719.787109375 907.216796875 704.474609375 922.607421875 c 0 + 689.162109375 937.998046875 661.974609375 949.482421875 622.912109375 957.138671875 c 1 + 603.068359375 960.680664062 583.224609375 964.221679688 563.380859375 967.763671875 c 1 + 498.068359375 979.873046875 449.162109375 1001.35742188 416.505859375 1032.06054688 c 0 + 383.849609375 1062.76367188 367.599609375 1105.02929688 367.599609375 1158.77929688 c 0 + 367.599609375 1188.23242188 373.068359375 1214.95117188 384.318359375 1238.93554688 c 0 + 395.568359375 1262.91992188 411.193359375 1283.07617188 431.349609375 1299.40429688 c 0 + 451.505859375 1315.73242188 476.037109375 1328.38867188 504.787109375 1337.29492188 c 0 + 533.537109375 1346.27929688 565.880859375 1350.73242188 601.818359375 1350.73242188 c 0 + 652.287109375 1350.73242188 696.193359375 1341.98242188 733.224609375 1324.40429688 c 0 + 770.412109375 1306.74804688 802.130859375 1281.35742188 828.380859375 1248.07617188 c 1 + 803.068359375 1225.68066406 777.755859375 1203.28417969 752.443359375 1180.88867188 c 1 + 735.255859375 1203.23242188 714.162109375 1221.20117188 689.162109375 1234.63867188 c 0 + 664.162109375 1248.07617188 633.068359375 1254.79492188 596.037109375 1254.79492188 c 0 + 557.599609375 1254.79492188 527.912109375 1247.06054688 506.662109375 1231.74804688 c 0 + 485.568359375 1216.35742188 475.099609375 1193.93554688 475.099609375 1164.56054688 c 0 + 475.099609375 1136.35742188 483.693359375 1115.41992188 501.037109375 1101.66992188 c 0 + 518.224609375 1087.91992188 545.099609375 1077.45117188 581.662109375 1070.41992188 c 1 + 601.505859375 1066.27929688 621.349609375 1062.13867188 641.193359375 1057.99804688 c 1 + 708.380859375 1045.18554688 757.443359375 1023.38867188 788.537109375 992.685546875 c 0 + 819.474609375 961.982421875 835.099609375 919.716796875 835.099609375 865.966796875 c 0 + 835.099609375 834.638671875 829.630859375 806.123046875 818.693359375 780.498046875 c 0 + 807.912109375 754.951171875 791.974609375 732.998046875 771.193359375 714.794921875 c 0 + 750.412109375 696.513671875 724.943359375 682.451171875 694.943359375 672.529296875 c 0 + 664.787109375 662.607421875 630.568359375 657.685546875 592.130859375 657.685546875 c 0 +1203.06835938 657.685546875 m 0 + 1115.41113281 657.685546875 1046.50585938 687.216796875 996.662109375 746.435546875 c 0 + 946.662109375 805.654296875 921.817382812 891.591796875 921.817382812 1004.24804688 c 0 + 921.817382812 1060.49804688 928.224609375 1110.10742188 941.037109375 1152.99804688 c 0 + 953.692382812 1195.88867188 972.286132812 1232.06054688 996.662109375 1261.51367188 c 0 + 1021.03710938 1290.96679688 1050.56835938 1313.15429688 1085.41210938 1328.23242188 c 0 + 1120.25585938 1343.23242188 1159.47363281 1350.73242188 1203.06835938 1350.73242188 c 0 + 1261.34863281 1350.73242188 1310.09863281 1337.99804688 1349.47363281 1312.37304688 c 0 + 1388.84960938 1286.74804688 1419.63085938 1249.01367188 1442.13085938 1199.09179688 c 1 + 1411.71386719 1182.45117188 1381.296875 1165.81054688 1350.88085938 1149.16992188 c 1 + 1339.31835938 1181.20117188 1321.66210938 1206.59179688 1297.59960938 1225.49804688 c 0 + 1273.53613281 1244.40429688 1242.12988281 1253.77929688 1203.06835938 1253.77929688 c 0 + 1151.19238281 1253.77929688 1110.56835938 1236.20117188 1081.19335938 1201.04492188 c 0 + 1051.66113281 1165.81054688 1036.97460938 1117.13867188 1036.97460938 1055.10742188 c 1 + 1036.97460938 1021.17480469 1036.97460938 987.243164062 1036.97460938 953.310546875 c 1xff40 + 1036.97460938 891.279296875 1051.66113281 842.607421875 1081.19335938 807.373046875 c 0 + 1110.56835938 772.216796875 1151.19238281 754.638671875 1203.06835938 754.638671875 c 0 + 1243.37988281 754.638671875 1276.19335938 765.029296875 1301.50585938 785.810546875 c 0 + 1326.66113281 806.591796875 1345.41210938 833.310546875 1357.59960938 865.966796875 c 1 + 1386.71386719 848.362304688 1415.828125 830.758789062 1444.94335938 813.154296875 c 1 + 1422.59960938 764.560546875 1391.19335938 726.435546875 1350.88085938 698.935546875 c 0 + 1310.56738281 671.435546875 1261.34863281 657.685546875 1203.06835938 657.685546875 c 0 +EndSplineSet +EndChar + +StartChar: uniE134 +Encoding: 57652 57652 53 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 228 96.0156<774.047 1094.75 1334.05 1574.42> 519.875 95.9375<774.047 1064.98> 802.062 96.0156<46.0781 245.766 354.203 553.891 774.047 1094.75 1334.05 1574.42> +VStem: 245.766 108.438<228 802.062> 665.609 108.438<324.016 519.875 615.812 802.062> 1225.61 108.438<324.016 802.062> 1629.75 116.172<379.419 746.659> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 288 96.0156<774.047 1094.75 1334.05 1574.42> 579.875 95.9375<774.047 1064.98> 862.062 96.0156<46.0781 245.766 354.203 553.891 774.047 1094.75 1334.05 1574.42> +VStem: 245.766 108.438<288 862.062> 665.609 108.438<384.016 579.875 675.812 862.062> 1225.61 108.438<384.016 862.062> 1629.75 116.172<439.419 806.659> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +354.203125 802.0625 m 1 + 354.203125 610.708007812 354.203125 419.354492188 354.203125 228 c 1 + 318.057617188 228 281.911132812 228 245.765625 228 c 1 + 245.765625 419.354492188 245.765625 610.708007812 245.765625 802.0625 c 1 + 179.203125 802.0625 112.640625 802.0625 46.078125 802.0625 c 1 + 46.078125 834.067382812 46.078125 866.073242188 46.078125 898.078125 c 1 + 215.348632812 898.078125 384.620117188 898.078125 553.890625 898.078125 c 1 + 553.890625 866.073242188 553.890625 834.067382812 553.890625 802.0625 c 1 + 487.328125 802.0625 420.765625 802.0625 354.203125 802.0625 c 1 +665.609375 228 m 1 + 665.609375 451.359375 665.609375 674.71875 665.609375 898.078125 c 1 + 808.65625 898.078125 951.703125 898.078125 1094.75 898.078125 c 1 + 1094.75 866.073242188 1094.75 834.067382812 1094.75 802.0625 c 1 + 987.848632812 802.0625 880.948242188 802.0625 774.046875 802.0625 c 1 + 774.046875 739.979492188 774.046875 677.895507812 774.046875 615.8125 c 1 + 871.026367188 615.8125 968.004882812 615.8125 1064.984375 615.8125 c 1 + 1064.984375 583.833007812 1064.984375 551.854492188 1064.984375 519.875 c 1 + 968.004882812 519.875 871.026367188 519.875 774.046875 519.875 c 1 + 774.046875 454.588867188 774.046875 389.301757812 774.046875 324.015625 c 1 + 880.948242188 324.015625 987.848632812 324.015625 1094.75 324.015625 c 1 + 1094.75 292.010742188 1094.75 260.004882812 1094.75 228 c 1 + 951.703125 228 808.65625 228 665.609375 228 c 1 +1225.609375 898.078125 m 1 + 1304.64550781 898.078125 1383.68261719 898.078125 1462.71875 898.078125 c 1 + 1505.609375 898.078125 1544.4375 891.046875 1579.359375 876.984375 c 0 + 1614.203125 862.84375 1643.96875 841.90625 1668.65625 814.09375 c 0 + 1693.265625 786.203125 1712.328125 751.359375 1725.765625 709.40625 c 0 + 1739.203125 667.53125 1745.921875 618.703125 1745.921875 563.078125 c 256 + 1745.921875 507.375 1739.203125 458.546875 1725.765625 416.671875 c 0 + 1712.328125 374.71875 1693.265625 339.875 1668.65625 311.984375 c 0 + 1643.96875 284.171875 1614.203125 263.234375 1579.359375 249.09375 c 0 + 1544.4375 235.03125 1505.609375 228 1462.71875 228 c 1 + 1383.68261719 228 1304.64550781 228 1225.609375 228 c 1 + 1225.609375 451.359375 1225.609375 674.71875 1225.609375 898.078125 c 1 +1462.71875 324.015625 m 1 + 1512.640625 324.015625 1552.953125 339.71875 1583.65625 371.046875 c 0 + 1614.359375 402.375 1629.75 448.46875 1629.75 509.25 c 1 + 1629.75 545.109375 1629.75 580.96875 1629.75 616.828125 c 1 + 1629.75 677.609375 1614.359375 723.703125 1583.65625 755.03125 c 0 + 1552.953125 786.4375 1512.640625 802.0625 1462.71875 802.0625 c 1 + 1419.828125 802.0625 1376.9375 802.0625 1334.046875 802.0625 c 1 + 1334.046875 642.713867188 1334.046875 483.364257812 1334.046875 324.015625 c 1 + 1376.9375 324.015625 1419.828125 324.015625 1462.71875 324.015625 c 1 +EndSplineSet +EndChar + +StartChar: uniE135 +Encoding: 57653 57653 54 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: -208.33 92.1094<1088.19 1264.07> -66.2988 85.4688<453.891 672.797 775.453 866.703> 374.326 98.9062<642.87 672.797> 392.607 92.1094<1088.19 1264.07> 669.17 90.2344<498.707 724.268 1002.88 1191 1297.56 1460.84> 1253.78 96.9531<503.376 719.013 1142.05 1191> +VStem: 331.156 115.156<816.976 1194.28> 672.797 102.656<-196.846 -66.2988 19.1699 374.326> 933.266 115.156<-76.3001 352.598> 1191 106.562<759.404 1260.5> 1303.89 115.156<-77.1032 353.491> +DStem2: 361.703 26.8262 453.891 19.1699 0.512884 0.858458<40.7089 454.423> 961.625 1153.94 1027.88 1094.48 0.683541 0.729912<1.41678 229.335> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: -148.33 92.1094<1088.19 1264.07> -6.29883 85.4688<453.891 672.797 775.453 866.703> 434.326 98.9062<642.87 672.797> 452.607 92.1094<1088.19 1264.07> 729.17 90.2344<498.707 724.268 1002.88 1191 1297.56 1460.84> 1313.78 96.9531<503.376 719.013 1142.05 1191> +VStem: 331.156 115.156<876.976 1254.28> 672.797 102.656<-136.846 -6.29883 79.1699 434.326> 933.266 115.156<-16.3001 412.598> 1191 106.562<819.404 1320.5> 1303.89 115.156<-17.1032 413.491> +DStem2: 361.703 86.8262 453.891 79.1699 0.512884 0.858458<40.7089 454.423> 961.625 1213.94 1027.88 1154.48 0.683541 0.729912<1.41678 229.335> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +672.796875 -196.845703125 m 1xefe0 + 672.796875 -153.330078125 672.796875 -109.814453125 672.796875 -66.298828125 c 1 + 569.098632812 -66.298828125 465.401367188 -66.298828125 361.703125 -66.298828125 c 1 + 361.703125 -35.2568359375 361.703125 -4.2158203125 361.703125 26.826171875 c 1 + 452.276367188 175.627929688 542.848632812 324.430664062 633.421875 473.232421875 c 1 + 680.765625 473.232421875 728.109375 473.232421875 775.453125 473.232421875 c 1 + 775.453125 321.877929688 775.453125 170.524414062 775.453125 19.169921875 c 1 + 805.870117188 19.169921875 836.286132812 19.169921875 866.703125 19.169921875 c 1 + 866.703125 -9.3193359375 866.703125 -37.8095703125 866.703125 -66.298828125 c 1 + 836.286132812 -66.298828125 805.870117188 -66.298828125 775.453125 -66.298828125 c 1 + 775.453125 -109.814453125 775.453125 -153.330078125 775.453125 -196.845703125 c 1 + 741.234375 -196.845703125 707.015625 -196.845703125 672.796875 -196.845703125 c 1xefe0 +453.890625 19.169921875 m 1 + 526.859375 19.169921875 599.828125 19.169921875 672.796875 19.169921875 c 1 + 672.796875 137.555664062 672.796875 255.940429688 672.796875 374.326171875 c 1 + 670.557617188 374.326171875 668.317382812 374.326171875 666.078125 374.326171875 c 1 + 595.348632812 255.940429688 524.620117188 137.555664062 453.890625 19.169921875 c 1 +1176.078125 -208.330078125 m 0 + 1134.515625 -208.330078125 1098.421875 -200.517578125 1067.640625 -184.814453125 c 0 + 1037.015625 -169.189453125 1011.703125 -146.611328125 991.859375 -117.158203125 c 0 + 972.015625 -87.705078125 957.328125 -51.533203125 947.640625 -8.720703125 c 0 + 938.109375 34.169921875 933.265625 83.154296875 933.265625 138.232421875 c 0 + 933.265625 192.607421875 938.109375 241.357421875 947.640625 284.560546875 c 0 + 957.328125 327.763671875 972.015625 364.091796875 991.859375 393.544921875 c 0 + 1011.703125 422.998046875 1037.015625 445.576171875 1067.640625 461.201171875 c 0 + 1098.421875 476.904296875 1134.515625 484.716796875 1176.078125 484.716796875 c 0xdfe0 + 1259.359375 484.716796875 1320.609375 454.326171875 1359.984375 393.544921875 c 0 + 1399.359375 332.763671875 1419.046875 247.607421875 1419.046875 138.232421875 c 256 + 1419.046875 28.779296875 1399.359375 -56.376953125 1359.984375 -117.158203125 c 0 + 1320.609375 -177.939453125 1259.359375 -208.330078125 1176.078125 -208.330078125 c 0 +1176.078125 -116.220703125 m 256 + 1199.203125 -116.220703125 1218.890625 -111.533203125 1235.140625 -102.314453125 c 0 + 1251.546875 -93.017578125 1264.828125 -79.736328125 1274.984375 -62.470703125 c 0 + 1285.296875 -45.126953125 1292.640625 -24.501953125 1297.171875 -0.517578125 c 0 + 1301.546875 23.466796875 1303.890625 50.185546875 1303.890625 79.638671875 c 1 + 1303.890625 118.674804688 1303.890625 157.711914062 1303.890625 196.748046875 c 1 + 1303.890625 226.201171875 1301.546875 252.919921875 1297.171875 276.904296875 c 0 + 1292.640625 300.888671875 1285.296875 321.591796875 1274.984375 338.857421875 c 0 + 1264.828125 356.123046875 1251.546875 369.404296875 1235.140625 378.701171875 c 0 + 1218.890625 387.919921875 1199.203125 392.607421875 1176.078125 392.607421875 c 256 + 1153.109375 392.607421875 1133.421875 387.919921875 1117.171875 378.701171875 c 0 + 1100.765625 369.404296875 1087.484375 356.123046875 1077.328125 338.857421875 c 0 + 1067.015625 321.591796875 1059.671875 300.888671875 1055.140625 276.904296875 c 0 + 1050.765625 252.919921875 1048.421875 226.201171875 1048.421875 196.748046875 c 1 + 1048.421875 157.711914062 1048.421875 118.674804688 1048.421875 79.638671875 c 1 + 1048.421875 50.185546875 1050.765625 23.466796875 1055.140625 -0.517578125 c 0 + 1059.671875 -24.501953125 1067.015625 -45.126953125 1077.328125 -62.470703125 c 0 + 1087.484375 -79.736328125 1100.765625 -93.017578125 1117.171875 -102.314453125 c 0 + 1133.421875 -111.533203125 1153.109375 -116.220703125 1176.078125 -116.220703125 c 256 +612.40625 657.685546875 m 0 + 524.75 657.685546875 456 687.216796875 406 746.435546875 c 0 + 356.15625 805.654296875 331.15625 891.591796875 331.15625 1004.24804688 c 0 + 331.15625 1060.49804688 337.5625 1110.10742188 350.375 1152.99804688 c 0 + 363.1875 1195.88867188 381.78125 1232.06054688 406 1261.51367188 c 0 + 430.375 1290.96679688 459.90625 1313.15429688 494.90625 1328.23242188 c 0 + 529.75 1343.23242188 568.96875 1350.73242188 612.40625 1350.73242188 c 0 + 670.6875 1350.73242188 719.4375 1337.99804688 758.8125 1312.37304688 c 0 + 798.1875 1286.74804688 829.125 1249.01367188 851.46875 1199.09179688 c 1 + 821.104492188 1182.45117188 790.739257812 1165.81054688 760.375 1149.16992188 c 1 + 748.8125 1181.20117188 731 1206.59179688 707.09375 1225.49804688 c 0 + 683.03125 1244.40429688 651.46875 1253.77929688 612.40625 1253.77929688 c 0 + 560.6875 1253.77929688 519.90625 1236.20117188 490.53125 1201.04492188 c 0 + 461.15625 1165.81054688 446.3125 1117.13867188 446.3125 1055.10742188 c 1 + 446.3125 1021.17480469 446.3125 987.243164062 446.3125 953.310546875 c 1 + 446.3125 891.279296875 461.15625 842.607421875 490.53125 807.373046875 c 0 + 519.90625 772.216796875 560.6875 754.638671875 612.40625 754.638671875 c 0 + 652.71875 754.638671875 685.53125 765.029296875 710.84375 785.810546875 c 0 + 736.15625 806.591796875 754.90625 833.310546875 767.09375 865.966796875 c 1 + 796.208007812 848.362304688 825.323242188 830.758789062 854.4375 813.154296875 c 1 + 831.9375 764.560546875 800.6875 726.435546875 760.375 698.935546875 c 0 + 719.90625 671.435546875 670.6875 657.685546875 612.40625 657.685546875 c 0 +1002.875 669.169921875 m 1 + 1002.875 699.248046875 1002.875 729.326171875 1002.875 759.404296875 c 1 + 1065.58300781 759.404296875 1128.29199219 759.404296875 1191 759.404296875 c 1 + 1191 926.435546875 1191 1093.46679688 1191 1260.49804688 c 1 + 1188.44824219 1260.49804688 1185.89550781 1260.49804688 1183.34375 1260.49804688 c 1 + 1131.52050781 1205.15917969 1079.69824219 1149.82128906 1027.875 1094.48242188 c 1 + 1005.79199219 1114.29980469 983.708007812 1134.11816406 961.625 1153.93554688 c 1 + 1018.55175781 1215.70605469 1075.47949219 1277.47753906 1132.40625 1339.24804688 c 1 + 1187.45800781 1339.24804688 1242.51074219 1339.24804688 1297.5625 1339.24804688 c 1 + 1297.5625 1145.96679688 1297.5625 952.685546875 1297.5625 759.404296875 c 1 + 1351.98925781 759.404296875 1406.41699219 759.404296875 1460.84375 759.404296875 c 1 + 1460.84375 729.326171875 1460.84375 699.248046875 1460.84375 669.169921875 c 1 + 1308.1875 669.169921875 1155.53125 669.169921875 1002.875 669.169921875 c 1 +EndSplineSet +EndChar + +StartChar: uniE0F0 +Encoding: 57584 57584 55 +Width: 1792 +Flags: HW +LayerCount: 2 +Fore +SplineSet +-717.389648438 -10.8251953125 m 8 + 717.249023438 -10.8251953125 l 1024 +-896 0 m 12 + 896 0 l 1028 +EndSplineSet +EndChar + +StartChar: uniE0F1 +Encoding: 57585 57585 56 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 60.5 139.688<684.242 1061.86> 505.461 135.352<684.242 1028.79> 925.93 139.688<684.242 1028.79> +VStem: 521.586 162.656<200.188 505.461 640.812 925.93> 1062.99 171.328<672.723 894.019> 1098.97 171.445<234.391 471.257> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 120.5 139.688<684.242 1061.86> 565.461 135.352<684.242 1028.79> 985.93 139.688<684.242 1028.79> +VStem: 521.586 162.656<260.188 565.461 700.812 985.93> 1062.99 171.328<732.723 954.019> 1098.97 171.445<294.391 531.257> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +521.5859375 1065.6171875 m 1xf4 + 669.90625 1065.6171875 818.2265625 1065.6171875 966.546875 1065.6171875 c 1 + 1049.984375 1065.6171875 1115.609375 1042.0625 1163.0703125 995.0703125 c 0 + 1210.6484375 948.078125 1234.3203125 885.1484375 1234.3203125 806.3984375 c 0xf8 + 1234.3203125 769.015625 1229.046875 737.0234375 1218.5 710.65625 c 0 + 1207.953125 684.2890625 1194.4765625 662.609375 1178.1875 645.8515625 c 0 + 1161.8984375 629.09375 1143.1484375 616.5546875 1122.0546875 608.46875 c 0 + 1100.9609375 600.265625 1080.3359375 595.2265625 1060.0625 593.3515625 c 1 + 1060.0625 590.4609375 1060.0625 587.5703125 1060.0625 584.6796875 c 1 + 1080.3359375 583.7421875 1102.6015625 578.9375 1127.09375 570.265625 c 0 + 1151.5859375 561.59375 1174.3203125 547.8828125 1195.53125 529.25 c 0 + 1216.625 510.5 1234.3203125 486.4765625 1248.734375 457.1796875 c 0 + 1263.1484375 427.8828125 1270.4140625 392.140625 1270.4140625 349.953125 c 0 + 1270.4140625 309.640625 1263.8515625 271.671875 1250.9609375 236.1640625 c 0 + 1237.953125 200.65625 1219.90625 169.953125 1196.9375 144.0546875 c 0 + 1173.8515625 118.15625 1146.546875 97.6484375 1114.7890625 82.765625 c 0 + 1083.1484375 67.8828125 1048.578125 60.5 1011.1953125 60.5 c 1 + 847.9921875 60.5 684.7890625 60.5 521.5859375 60.5 c 1 + 521.5859375 395.5390625 521.5859375 730.578125 521.5859375 1065.6171875 c 1xf4 +684.2421875 200.1875 m 1 + 777.3671875 200.1875 870.4921875 200.1875 963.6171875 200.1875 c 1 + 1005.921875 200.1875 1038.96875 211.203125 1062.9921875 233.3515625 c 0xf8 + 1087.015625 255.3828125 1098.96875 287.0234375 1098.96875 328.390625 c 1 + 1098.96875 344.6796875 1098.96875 360.96875 1098.96875 377.2578125 c 1xf4 + 1098.96875 418.625 1087.015625 450.265625 1062.9921875 472.296875 c 0 + 1038.96875 494.4453125 1005.921875 505.4609375 963.6171875 505.4609375 c 1 + 870.4921875 505.4609375 777.3671875 505.4609375 684.2421875 505.4609375 c 1 + 684.2421875 403.703125 684.2421875 301.9453125 684.2421875 200.1875 c 1 +684.2421875 640.8125 m 1 + 768.265625 640.8125 852.2890625 640.8125 936.3125 640.8125 c 1 + 976.625 640.8125 1007.796875 651.125 1029.828125 671.75 c 0 + 1051.9765625 692.375 1062.9921875 721.90625 1062.9921875 760.34375 c 1 + 1062.9921875 775.6953125 1062.9921875 791.046875 1062.9921875 806.3984375 c 1 + 1062.9921875 844.8359375 1051.9765625 874.3671875 1029.828125 894.9921875 c 0 + 1007.796875 915.6171875 976.625 925.9296875 936.3125 925.9296875 c 1 + 852.2890625 925.9296875 768.265625 925.9296875 684.2421875 925.9296875 c 1 + 684.2421875 830.890625 684.2421875 735.8515625 684.2421875 640.8125 c 1 +EndSplineSet +EndChar + +StartChar: uniE0F2 +Encoding: 57586 57586 57 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 370.958 116.406<389.164 636.43> 856.993 124.805<499.082 527.573> +VStem: 145.609 137.891<144.2 282.091> 745.609 141.602<144.2 285.802> 1220.41 135.547<144.2 537.633> +DStem2: 145.609 144.2 283.5 144.2 0.303392 0.952866<41.8349 280.126 400.882 789.887> 601.664 981.8 516.312 856.993 0.306233 -0.951957<92.6712 481.326> 1087.21 981.8 932.328 981.8 0.479431 -0.877579<0 425.309> 1294.83 608.556 1355.96 476.622 0.477305 0.878738<0 424.748> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 430.958 116.406<389.164 636.43> 916.993 124.805<499.082 527.573> +VStem: 145.609 137.891<204.2 342.091> 745.609 141.602<204.2 345.802> 1220.41 135.547<204.2 597.633> +DStem2: 145.609 204.2 283.5 204.2 0.303392 0.952866<41.8349 280.126 400.882 789.887> 601.664 1041.8 516.312 916.993 0.306233 -0.951957<92.6712 481.326> 1087.21 1041.8 932.328 1041.8 0.479431 -0.877579<0 425.309> 1294.83 668.556 1355.96 536.622 0.477305 0.878738<0 424.748> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +745.609375 144.200195312 m 1 + 720.4140625 219.786132812 695.21875 295.372070312 670.0234375 370.958007812 c 1 + 565.596679688 370.958007812 461.168945312 370.958007812 356.7421875 370.958007812 c 1 + 332.328125 295.372070312 307.9140625 219.786132812 283.5 144.200195312 c 1 + 237.536132812 144.200195312 191.573242188 144.200195312 145.609375 144.200195312 c 1 + 240.791992188 423.399414062 335.973632812 702.598632812 431.15625 981.797851562 c 1 + 487.9921875 981.797851562 544.828125 981.797851562 601.6640625 981.797851562 c 1 + 696.846679688 702.598632812 792.028320312 423.399414062 887.2109375 144.200195312 c 1 + 840.010742188 144.200195312 792.809570312 144.200195312 745.609375 144.200195312 c 1 +516.3125 856.993164062 m 1 + 514.359375 856.993164062 512.40625 856.993164062 510.453125 856.993164062 c 1 + 470.0234375 733.783203125 429.59375 610.573242188 389.1640625 487.364257812 c 1 + 471.5859375 487.364257812 554.0078125 487.364257812 636.4296875 487.364257812 c 1 + 596.390625 610.573242188 556.3515625 733.783203125 516.3125 856.993164062 c 1 +1220.4140625 144.200195312 m 1 + 1220.4140625 254.193359375 1220.4140625 364.186523438 1220.4140625 474.180664062 c 1 + 1124.38574219 643.385742188 1028.35644531 812.591796875 932.328125 981.797851562 c 1 + 983.956054688 981.797851562 1035.58300781 981.797851562 1087.2109375 981.797851562 c 1 + 1155.1796875 857.383789062 1223.1484375 732.969726562 1291.1171875 608.555664062 c 1 + 1292.35449219 608.555664062 1293.59082031 608.555664062 1294.828125 608.555664062 c 1 + 1362.40625 732.969726562 1429.984375 857.383789062 1497.5625 981.797851562 c 1 + 1547.171875 981.797851562 1596.78125 981.797851562 1646.390625 981.797851562 c 1 + 1549.58105469 813.405273438 1452.77050781 645.013671875 1355.9609375 476.622070312 c 1 + 1355.9609375 365.814453125 1355.9609375 255.006835938 1355.9609375 144.200195312 c 1 + 1310.77832031 144.200195312 1265.59667969 144.200195312 1220.4140625 144.200195312 c 1 +EndSplineSet +EndChar + +StartChar: uniE0F3 +Encoding: 57587 57587 58 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: 216.516 89.2188<906.667 1116.84 1445.69 1645.37> 228 108.516<198.32 221.367 546.758 569.805> 494.875 87.3438<1569.19 1693.09> 795.344 102.734<371.133 393.242> 820.344 89.2188<935.851 1133.42 1446.32 1654.53> +VStem: 0 103.75<794.328 898.078> 321.719 123.75<796.086 898.078> 664.375 99.8438<798.234 898.078> 812.781 101.719<653.533 800.771> 1137.31 101.719<326.429 489.709> 1288.88 109.531<354.707 771.324> 1701.69 90.3125<228 326.906 350.738 494.875> +DStem2: 103.75 898.078 0 898.078 0.190374 -0.981712<0 567.853> 216.094 336.516 355.312 640.812 0.136058 0.990701<4.46299 473.288> 530.938 490.109 387.969 795.344 0.136058 -0.990701<-318.35 155.035> 585.625 491.984 617.344 228 0.190374 0.981712<-154.194 413.659> 1006.69 626.438 988.406 530.422 0.978371 -0.206857<-75.1218 135.909> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: 276.516 89.2188<906.667 1116.84 1445.69 1645.37> 288 108.516<198.32 221.367 546.758 569.805> 554.875 87.3438<1569.19 1693.09> 855.344 102.734<371.133 393.242> 880.344 89.2188<935.851 1133.42 1446.32 1654.53> +VStem: 0 103.75<854.328 958.078> 321.719 123.75<856.086 958.078> 664.375 99.8438<858.234 958.078> 812.781 101.719<713.533 860.771> 1137.31 101.719<386.429 549.709> 1288.88 109.531<414.707 831.324> 1701.69 90.3125<288 386.906 410.738 554.875> +DStem2: 103.75 958.078 0 958.078 0.190374 -0.981712<0 567.853> 216.094 396.516 355.312 700.812 0.136058 0.990701<4.46299 473.288> 530.938 550.109 387.969 855.344 0.136058 -0.990701<-318.35 155.035> 585.625 551.984 617.344 288 0.190374 0.981712<-154.194 413.659> 1006.69 686.438 988.406 590.422 0.978371 -0.206857<-75.1218 135.909> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +142.1875 228 m 5x77f0 + 94.7919921875 451.359375 47.3955078125 674.71875 0 898.078125 c 5 + 34.5830078125 898.078125 69.1669921875 898.078125 103.75 898.078125 c 5 + 130 762.713867188 156.25 627.348632812 182.5 491.984375 c 5 + 189.53125 440.161132812 196.5625 388.338867188 203.59375 336.515625 c 5 + 207.760742188 336.515625 211.926757812 336.515625 216.09375 336.515625 c 5 + 223.125 387.713867188 230.15625 438.911132812 237.1875 490.109375 c 5 + 265.364257812 626.098632812 293.541992188 762.088867188 321.71875 898.078125 c 5 + 362.96875 898.078125 404.21875 898.078125 445.46875 898.078125 c 5 + 473.958007812 762.088867188 502.448242188 626.098632812 530.9375 490.109375 c 5 + 537.96875 438.911132812 545 387.713867188 552.03125 336.515625 c 5 + 556.198242188 336.515625 560.364257812 336.515625 564.53125 336.515625 c 5 + 571.5625 388.338867188 578.59375 440.161132812 585.625 491.984375 c 5 + 611.875 627.348632812 638.125 762.713867188 664.375 898.078125 c 5 + 697.65625 898.078125 730.9375 898.078125 764.21875 898.078125 c 5 + 715.260742188 674.71875 666.301757812 451.359375 617.34375 228 c 5 + 576.71875 228 536.09375 228 495.46875 228 c 5 + 466.666992188 365.604492188 437.864257812 503.208007812 409.0625 640.8125 c 5 + 402.03125 692.323242188 395 743.833007812 387.96875 795.34375 c 5 + 384.114257812 795.34375 380.260742188 795.34375 376.40625 795.34375 c 5 + 369.375 743.833007812 362.34375 692.323242188 355.3125 640.8125 c 5 + 325.208007812 503.208007812 295.104492188 365.604492188 265 228 c 5 + 224.0625 228 183.125 228 142.1875 228 c 5x77f0 +1017.3125 216.515625 m 4xaff0 + 967.3125 216.515625 924.03125 225.890625 887.15625 244.796875 c 4 + 850.4375 263.703125 818.875 291.046875 792.625 326.90625 c 5 + 815.958007812 348.338867188 839.291992188 369.770507812 862.625 391.203125 c 5 + 882.46875 363.703125 905.28125 342.53125 930.90625 327.84375 c 4 + 956.375 313.15625 985.59375 305.734375 1018.25 305.734375 c 4 + 1097.625 305.734375 1137.3125 342.21875 1137.3125 415.1875 c 4 + 1137.3125 444.640625 1130.125 467.21875 1116.0625 482.84375 c 4 + 1102 498.546875 1077.78125 510.578125 1043.09375 518.859375 c 5 + 1024.86425781 522.713867188 1006.63574219 526.567382812 988.40625 530.421875 c 5 + 928.25 543.859375 884.03125 565.421875 855.4375 595.1875 c 4 + 827 624.953125 812.78125 666.75 812.78125 720.5 c 4 + 812.78125 782.53125 831.53125 829.5625 868.875 861.59375 c 4 + 906.375 893.625 958.71875 909.5625 1025.90625 909.5625 c 4 + 1073.875 909.5625 1114.34375 901.4375 1147.3125 885.109375 c 4 + 1180.28125 868.78125 1208.875 843.390625 1233.25 808.78125 c 5 + 1209.86425781 788.3125 1186.47949219 767.84375 1163.09375 747.375 c 5 + 1145.90625 771.671875 1126.53125 789.953125 1105.125 802.0625 c 4 + 1083.71875 814.25 1056.53125 820.34375 1024.03125 820.34375 c 4 + 987.46875 820.34375 960.125 812.765625 941.84375 797.765625 c 4 + 923.71875 782.6875 914.5 757.921875 914.5 723.390625 c 4 + 914.5 695.1875 921.6875 673.9375 936.0625 659.484375 c 4 + 950.59375 645.109375 974.03125 634.09375 1006.6875 626.4375 c 5 + 1024.91699219 622.270507812 1043.14550781 618.104492188 1061.375 613.9375 c 5 + 1093.40625 606.90625 1120.59375 598.078125 1142.9375 587.53125 c 4 + 1165.4375 576.984375 1183.875 564.015625 1198.25 548.625 c 4 + 1212.625 533.3125 1222.9375 515.1875 1229.34375 494.40625 c 4 + 1235.75 473.625 1239.03125 449.40625 1239.03125 421.90625 c 4 + 1239.03125 354.71875 1219.65625 303.703125 1180.90625 268.78125 c 4 + 1142.15625 233.9375 1087.625 216.515625 1017.3125 216.515625 c 4xaff0 +1701.6875 326.90625 m 5 + 1697.83300781 326.90625 1693.97949219 326.90625 1690.125 326.90625 c 5 + 1683.875 294.875 1667.46875 268.46875 1641.21875 247.6875 c 4 + 1614.96875 226.90625 1577.9375 216.515625 1529.8125 216.515625 c 4xa7f0 + 1495.28125 216.515625 1463.40625 222.84375 1434.34375 235.65625 c 4 + 1405.28125 248.46875 1379.8125 268.78125 1358.09375 296.671875 c 4 + 1336.21875 324.484375 1319.34375 360.34375 1307.15625 404.171875 c 4 + 1294.96875 448 1288.875 500.65625 1288.875 562.0625 c 260 + 1288.875 623.546875 1294.8125 676.125 1306.6875 720.03125 c 4 + 1318.5625 763.859375 1335.75 799.875 1358.5625 828 c 4 + 1381.21875 856.125 1408.5625 876.828125 1440.59375 889.953125 c 4 + 1472.625 903.078125 1508.71875 909.5625 1549.03125 909.5625 c 4 + 1608.5625 909.5625 1657 896.828125 1694.03125 871.203125 c 4 + 1731.21875 845.578125 1759.96875 809.09375 1780.4375 761.75 c 5 + 1752.625 745.421875 1724.8125 729.09375 1697 712.765625 c 5 + 1685.4375 745.421875 1667.9375 771.359375 1644.65625 790.578125 c 4 + 1621.21875 809.796875 1589.65625 819.328125 1549.96875 819.328125 c 4 + 1502 819.328125 1464.8125 804.015625 1438.25 773.3125 c 4 + 1411.6875 742.53125 1398.40625 699.71875 1398.40625 644.640625 c 5 + 1398.40625 590.239257812 1398.40625 535.838867188 1398.40625 481.4375 c 5 + 1398.40625 426.4375 1411.6875 383.546875 1438.25 352.765625 c 4 + 1464.8125 322.0625 1502 306.75 1549.96875 306.75 c 4 + 1569.8125 306.75 1588.40625 309.5625 1605.75 315.34375 c 4 + 1622.9375 321.125 1638.25 329.40625 1651.375 340.34375 c 4 + 1664.5 351.203125 1674.65625 364.796875 1682 381.125 c 4 + 1689.34375 397.453125 1693.09375 415.8125 1693.09375 436.28125 c 5 + 1693.09375 455.8125 1693.09375 475.34375 1693.09375 494.875 c 5 + 1651.79199219 494.875 1610.48925781 494.875 1569.1875 494.875 c 5 + 1569.1875 523.989257812 1569.1875 553.104492188 1569.1875 582.21875 c 5 + 1643.45800781 582.21875 1717.72949219 582.21875 1792 582.21875 c 5 + 1792 464.145507812 1792 346.073242188 1792 228 c 5 + 1761.89550781 228 1731.79199219 228 1701.6875 228 c 5x6ff0 + 1701.6875 260.96875 1701.6875 293.9375 1701.6875 326.90625 c 5 +EndSplineSet +EndChar + +StartChar: uniE0F4 +Encoding: 57588 57588 59 +Width: 1792 +VWidth: 1732 +Flags: HW +HStem: -208.33 85.3906<443.27 618.187 1139.04 1341.37> 140.107 85.4688<468.18 617.718> 395.498 89.2188<1163.21 1360.78> 657.686 89.2188<1388.21 1579.14> 669.17 92.1875<328.559 354.926> 942.76 85.4688<802.406 938.743> 1249.95 89.2969<802.406 1011.58 1380.73 1582.23> +VStem: 82.0938 106.562<1232.69 1339.25> 314.359 107.5<-102.67 120.457> 493.891 104.688<1234.56 1339.25> 638.891 107.5<-102.386 119.315> 700.609 101.797<669.17 942.76 1028.23 1249.95> 1040.14 101.719<228.688 375.925 1047.5 1230.69> 1233.73 109.453<795.416 1213> 1364.67 101.719<-98.4167 64.863> +DStem2: 188.656 1339.25 82.0938 1339.25 0.271727 -0.962374<0 593.586> 375.844 917.842 402.719 669.17 0.269742 0.962933<-155.735 437.628> 1024.12 950.42 922.406 942.76 0.413517 -0.910496<0 262.054> 1234.05 201.592 1215.77 105.576 0.978371 -0.206857<-75.1218 135.909> +LayerCount: 2 +UndoRedoHistory +Layer: 0 +Undoes +UndoOperation +Index: 0 +Type: 1 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +Width: 1792 +VWidth: 1792 +LBearingChange: 0 +UnicodeEnc: 0 +InstructionsLength: 0 +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +UndoRedoHistory +Layer: 1 +Undoes +UndoOperation +Index: 0 +Type: 3 +WasModified: 0 +WasOrder2: 0 +Layer: 2 +HStem: -148.33 85.3906<443.27 618.187 1139.04 1341.37> 200.107 85.4688<468.18 617.718> 455.498 89.2188<1163.21 1360.78> 717.686 89.2188<1388.21 1579.14> 729.17 92.1875<328.559 354.926> 1002.76 85.4688<802.406 938.743> 1309.95 89.2969<802.406 1011.58 1380.73 1582.23> +VStem: 82.0938 106.562<1292.69 1399.25> 314.359 107.5<-42.67 180.457> 493.891 104.688<1294.56 1399.25> 638.891 107.5<-42.3858 179.315> 700.609 101.797<729.17 1002.76 1088.23 1309.95> 1040.14 101.719<288.688 435.925 1107.5 1290.69> 1233.73 109.453<855.416 1273> 1364.67 101.719<-38.4167 124.863> +DStem2: 188.656 1399.25 82.0938 1399.25 0.271727 -0.962374<0 593.586> 375.844 977.842 402.719 729.17 0.269742 0.962933<-155.735 437.628> 1024.12 1010.42 922.406 1002.76 0.413517 -0.910496<0 262.054> 1234.05 261.592 1215.77 165.576 0.978371 -0.206857<-75.1218 135.909> +EndUndoOperation +EndUndoes +Redoes +EndRedoes +EndUndoRedoHistory +Fore +SplineSet +530.296875 -208.330078125 m 0xe7ee + 458.734375 -208.330078125 404.828125 -186.298828125 368.578125 -142.158203125 c 0 + 332.484375 -97.939453125 314.359375 -33.642578125 314.359375 50.810546875 c 0 + 314.359375 91.123046875 319.515625 131.435546875 329.671875 171.826171875 c 0 + 339.984375 212.138671875 354.671875 250.654296875 373.890625 287.451171875 c 0 + 393.109375 324.248046875 415.921875 358.701171875 442.484375 390.654296875 c 0 + 469.046875 422.685546875 498.734375 450.185546875 531.390625 473.232421875 c 1 + 577.120117188 473.232421875 622.848632812 473.232421875 668.578125 473.232421875 c 1 + 629.515625 443.154296875 595.921875 414.482421875 567.796875 387.294921875 c 0 + 539.671875 360.107421875 515.765625 333.076171875 496.234375 306.201171875 c 0 + 476.703125 279.326171875 460.921875 251.669921875 448.734375 223.154296875 c 0 + 436.546875 194.638671875 427.328125 163.779296875 420.921875 130.498046875 c 1 + 425.088867188 130.498046875 429.254882812 130.498046875 433.421875 130.498046875 c 1 + 444.359375 161.201171875 461.546875 184.716796875 485.296875 201.044921875 c 0 + 508.890625 217.373046875 537.015625 225.576171875 569.671875 225.576171875 c 0 + 624.046875 225.576171875 667.171875 207.919921875 698.890625 172.763671875 c 0 + 730.453125 137.529296875 746.390625 85.732421875 746.390625 17.216796875 c 0 + 746.390625 -53.798828125 727.953125 -109.189453125 691.234375 -148.876953125 c 0 + 654.359375 -188.564453125 600.765625 -208.330078125 530.296875 -208.330078125 c 0xe7ee +530.296875 -122.939453125 m 256 + 602.640625 -122.939453125 638.890625 -83.251953125 638.890625 -3.876953125 c 1 + 638.890625 4.4306640625 638.890625 12.7373046875 638.890625 21.044921875 c 1 + 638.890625 100.419921875 602.640625 140.107421875 530.296875 140.107421875 c 256 + 458.109375 140.107421875 421.859375 100.419921875 421.859375 21.044921875 c 1 + 421.859375 12.7373046875 421.859375 4.4306640625 421.859375 -3.876953125 c 1 + 421.859375 -83.251953125 458.109375 -122.939453125 530.296875 -122.939453125 c 256 +1244.671875 -208.330078125 m 0 + 1194.671875 -208.330078125 1151.390625 -198.955078125 1114.515625 -180.048828125 c 0 + 1077.796875 -161.142578125 1046.234375 -133.798828125 1019.984375 -97.939453125 c 1 + 1043.31738281 -76.5068359375 1066.65136719 -55.0751953125 1089.984375 -33.642578125 c 1 + 1109.828125 -61.142578125 1132.640625 -82.314453125 1158.265625 -97.001953125 c 0 + 1183.734375 -111.689453125 1212.953125 -119.111328125 1245.609375 -119.111328125 c 0 + 1324.984375 -119.111328125 1364.671875 -82.626953125 1364.671875 -9.658203125 c 0 + 1364.671875 19.794921875 1357.484375 42.373046875 1343.421875 57.998046875 c 0 + 1329.359375 73.701171875 1305.140625 85.732421875 1270.453125 94.013671875 c 1 + 1252.22363281 97.8681640625 1233.99511719 101.721679688 1215.765625 105.576171875 c 1 + 1155.609375 119.013671875 1111.390625 140.576171875 1082.796875 170.341796875 c 0 + 1054.359375 200.107421875 1040.140625 241.904296875 1040.140625 295.654296875 c 0 + 1040.140625 357.685546875 1058.890625 404.716796875 1096.234375 436.748046875 c 0 + 1133.734375 468.779296875 1186.078125 484.716796875 1253.265625 484.716796875 c 0 + 1301.234375 484.716796875 1341.703125 476.591796875 1374.671875 460.263671875 c 0 + 1407.640625 443.935546875 1436.234375 418.544921875 1460.609375 383.935546875 c 1 + 1437.22363281 363.466796875 1413.83886719 342.998046875 1390.453125 322.529296875 c 1 + 1373.265625 346.826171875 1353.890625 365.107421875 1332.484375 377.216796875 c 0 + 1311.078125 389.404296875 1283.890625 395.498046875 1251.390625 395.498046875 c 0 + 1214.828125 395.498046875 1187.484375 387.919921875 1169.203125 372.919921875 c 0 + 1151.078125 357.841796875 1141.859375 333.076171875 1141.859375 298.544921875 c 0 + 1141.859375 270.341796875 1149.046875 249.091796875 1163.421875 234.638671875 c 0 + 1177.953125 220.263671875 1201.390625 209.248046875 1234.046875 201.591796875 c 1 + 1252.27636719 197.424804688 1270.50488281 193.258789062 1288.734375 189.091796875 c 1 + 1320.765625 182.060546875 1347.953125 173.232421875 1370.296875 162.685546875 c 0 + 1392.796875 152.138671875 1411.234375 139.169921875 1425.609375 123.779296875 c 0 + 1439.984375 108.466796875 1450.296875 90.341796875 1456.703125 69.560546875 c 0 + 1463.109375 48.779296875 1466.390625 24.560546875 1466.390625 -2.939453125 c 0 + 1466.390625 -70.126953125 1447.015625 -121.142578125 1408.265625 -156.064453125 c 0 + 1369.515625 -190.908203125 1314.984375 -208.330078125 1244.671875 -208.330078125 c 0 +278.890625 669.169921875 m 1xefce + 213.291992188 892.529296875 147.692382812 1115.88867188 82.09375 1339.24804688 c 1 + 117.614257812 1339.24804688 153.135742188 1339.24804688 188.65625 1339.24804688 c 1 + 228.317382812 1198.77929688 267.979492188 1058.31054688 307.640625 917.841796875 c 1 + 316.9375 865.680664062 326.234375 813.518554688 335.53125 761.357421875 c 1 + 339.671875 761.357421875 343.8125 761.357421875 347.953125 761.357421875 c 1 + 357.25 813.518554688 366.546875 865.680664062 375.84375 917.841796875 c 1 + 415.192382812 1058.31054688 454.541992188 1198.77929688 493.890625 1339.24804688 c 1 + 528.786132812 1339.24804688 563.682617188 1339.24804688 598.578125 1339.24804688 c 1 + 533.291992188 1115.88867188 468.004882812 892.529296875 402.71875 669.169921875 c 1 + 361.442382812 669.169921875 320.166992188 669.169921875 278.890625 669.169921875 c 1xefce +802.40625 669.169921875 m 1xefde + 768.473632812 669.169921875 734.541992188 669.169921875 700.609375 669.169921875 c 1 + 700.609375 892.529296875 700.609375 1115.88867188 700.609375 1339.24804688 c 1 + 788.942382812 1339.24804688 877.276367188 1339.24804688 965.609375 1339.24804688 c 1 + 1023.1875 1339.24804688 1066.546875 1322.13867188 1095.6875 1287.91992188 c 0 + 1124.75 1253.62304688 1139.359375 1204.56054688 1139.359375 1140.49804688 c 0 + 1139.359375 1088.70117188 1129.75 1046.74804688 1110.53125 1014.79492188 c 0 + 1091.3125 982.763671875 1062.5625 961.357421875 1024.125 950.419921875 c 1 + 1066.703125 856.669921875 1109.28125 762.919921875 1151.859375 669.169921875 c 1 + 1114.09863281 669.169921875 1076.33886719 669.169921875 1038.578125 669.169921875 c 1 + 999.854492188 760.368164062 961.129882812 851.565429688 922.40625 942.763671875 c 1 + 882.40625 942.763671875 842.40625 942.763671875 802.40625 942.763671875 c 1 + 802.40625 851.565429688 802.40625 760.368164062 802.40625 669.169921875 c 1xefde +956.9375 1028.23242188 m 1 + 981.234375 1028.23242188 999.671875 1034.48242188 1012.171875 1046.90429688 c 0 + 1024.59375 1059.40429688 1030.84375 1079.71679688 1030.84375 1107.91992188 c 1 + 1030.84375 1128.70117188 1030.84375 1149.48242188 1030.84375 1170.26367188 c 1 + 1030.84375 1198.46679688 1024.59375 1218.77929688 1012.171875 1231.27929688 c 0 + 999.671875 1243.70117188 981.234375 1249.95117188 956.9375 1249.95117188 c 1 + 905.426757812 1249.95117188 853.916992188 1249.95117188 802.40625 1249.95117188 c 1 + 802.40625 1176.04492188 802.40625 1102.13867188 802.40625 1028.23242188 c 1 + 853.916992188 1028.23242188 905.426757812 1028.23242188 956.9375 1028.23242188 c 1 +1487.171875 657.685546875 m 0xf7ce + 1448.109375 657.685546875 1413.109375 664.248046875 1382.09375 677.294921875 c 0 + 1351 690.419921875 1324.4375 711.123046875 1302.40625 739.248046875 c 0 + 1280.296875 767.373046875 1263.34375 803.388671875 1251.46875 847.216796875 c 0 + 1239.671875 891.123046875 1233.734375 943.388671875 1233.734375 1004.24804688 c 256 + 1233.734375 1065.02929688 1239.671875 1117.29492188 1251.46875 1161.20117188 c 0 + 1263.34375 1205.02929688 1280.296875 1241.04492188 1302.40625 1269.16992188 c 0 + 1324.4375 1297.29492188 1351 1317.99804688 1382.09375 1331.12304688 c 0 + 1413.109375 1344.24804688 1448.109375 1350.73242188 1487.171875 1350.73242188 c 0 + 1544.125 1350.73242188 1589.75 1338.46679688 1623.96875 1313.77929688 c 0 + 1658.1875 1289.16992188 1685.609375 1252.21679688 1706.078125 1202.91992188 c 1 + 1677.27636719 1186.93066406 1648.47363281 1170.94042969 1619.671875 1154.95117188 c 1 + 1608.109375 1192.68554688 1592.015625 1219.87304688 1571.15625 1236.51367188 c 0 + 1550.375 1253.15429688 1522.40625 1261.51367188 1487.171875 1261.51367188 c 0 + 1441.78125 1261.51367188 1406.390625 1245.81054688 1381.078125 1214.48242188 c 0 + 1355.84375 1183.07617188 1343.1875 1139.87304688 1343.1875 1084.87304688 c 1 + 1343.1875 1031.09667969 1343.1875 977.321289062 1343.1875 923.544921875 c 1 + 1343.1875 868.544921875 1355.84375 825.341796875 1381.078125 793.935546875 c 0 + 1406.390625 762.607421875 1441.78125 746.904296875 1487.171875 746.904296875 c 0 + 1523.03125 746.904296875 1552.015625 755.888671875 1574.046875 773.779296875 c 0 + 1596.15625 791.748046875 1613.265625 820.498046875 1625.453125 860.185546875 c 1 + 1653.60449219 843.544921875 1681.75488281 826.904296875 1709.90625 810.263671875 c 1 + 1688.8125 761.044921875 1660.609375 723.232421875 1625.453125 696.982421875 c 0 + 1590.21875 670.732421875 1544.125 657.685546875 1487.171875 657.685546875 c 0xf7ce +EndSplineSet +EndChar +EndChars +EndSplineFont diff --git a/res/icons.ttf b/res/icons.ttf new file mode 100644 index 000000000..ad1c9a55c Binary files /dev/null and b/res/icons.ttf differ diff --git a/res/make-iconfont.sh b/res/make-iconfont.sh new file mode 100755 index 000000000..4628bac4c --- /dev/null +++ b/res/make-iconfont.sh @@ -0,0 +1,11 @@ +#!/bin/bash +# run after exporting to .ttf +# make sure you're running this on a Linux or Unix-like system with GCC + +if [ ! -e binary_to_compressed_c ]; then + g++ -o binary_to_compressed_c ../extern/imgui_patched/misc/fonts/binary_to_compressed_c.cpp || exit 1 +fi + +echo "#include \"fonts.h\"" > ../src/gui/font_furicon.cpp +./binary_to_compressed_c icons.ttf furIcons | sed "s/static //" >> ../src/gui/font_furicon.cpp +#xxd -i -n "furIcons" icons.ttf | sed -r "s/^ +//g;s/, /,/g;s/ = /=/g;s/unsigned/const unsigned/g" > ../src/gui/font_furIcons.cpp diff --git a/src/engine/dispatch.h b/src/engine/dispatch.h index acd0cc77b..875ff487d 100644 --- a/src/engine/dispatch.h +++ b/src/engine/dispatch.h @@ -485,6 +485,12 @@ class DivDispatch { */ virtual bool keyOffAffectsPorta(int ch); + /** + * test whether volume is global. + * @return whether it is. + */ + virtual bool isVolGlobal(); + /** * get the lowest note in a portamento. * @param ch the channel in question. diff --git a/src/engine/dispatchContainer.cpp b/src/engine/dispatchContainer.cpp index 2e8532603..ac92b23f4 100644 --- a/src/engine/dispatchContainer.cpp +++ b/src/engine/dispatchContainer.cpp @@ -80,6 +80,7 @@ #include "platform/pv1000.h" #include "platform/k053260.h" #include "platform/ted.h" +#include "platform/c140.h" #include "platform/pcmdac.h" #include "platform/dummy.h" #include "../ta-log.h" @@ -216,13 +217,6 @@ void DivDispatchContainer::clear() { if (dispatch->getDCOffRequired()) { dcOffCompensation=true; } - // run for one cycle to determine DC offset - // TODO: SAA1099 doesn't like that - /*dispatch->acquire(bbIn[0],bbIn[1],0,1); - temp[0]=bbIn[0][0]; - temp[1]=bbIn[1][0]; - prevSample[0]=temp[0]; - prevSample[1]=temp[1];*/ } void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, double gotRate, const DivConfig& flags) { @@ -479,7 +473,7 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do break; case DIV_SYSTEM_NAMCO: dispatch=new DivPlatformNamcoWSG; - // Pac-Man (TODO: support Pole Position?) + // Pac-Man ((DivPlatformNamcoWSG*)dispatch)->setDeviceType(1); break; case DIV_SYSTEM_NAMCO_15XX: @@ -511,6 +505,9 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do case DIV_SYSTEM_TED: dispatch=new DivPlatformTED; break; + case DIV_SYSTEM_C140: + dispatch=new DivPlatformC140; + break; case DIV_SYSTEM_PCM_DAC: dispatch=new DivPlatformPCMDAC; break; diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index d27b6a57e..477487709 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -107,7 +107,7 @@ const char* DivEngine::getEffectDesc(unsigned char effect, int chan, bool notNul case 0xea: return "EAxx: Legato"; case 0xeb: - return "EBxx: Set sample bank"; + return "EBxx: Set LEGACY sample mode bank"; case 0xec: return "ECxx: Note cut"; case 0xed: @@ -3113,6 +3113,8 @@ int DivEngine::addInstrumentPtr(DivInstrument* which) { song.ins.push_back(which); song.insLen=song.ins.size(); checkAssetDir(song.insDir,song.ins.size()); + checkAssetDir(song.waveDir,song.wave.size()); + checkAssetDir(song.sampleDir,song.sample.size()); saveLock.unlock(); BUSY_END; return song.insLen; @@ -4415,8 +4417,12 @@ void DivEngine::updateSysFlags(int system, bool restart) { saveLock.unlock(); } - if (restart && isPlaying()) { - playSub(false); + if (restart) { + if (isPlaying()) { + playSub(false); + } else if (freelance) { + reset(); + } } BUSY_END; } diff --git a/src/engine/engine.h b/src/engine/engine.h index 0f13659b8..effa0273f 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -605,7 +605,7 @@ class DivEngine { // - -2 to add a whole loop of trailing SafeWriter* saveVGM(bool* sysToExport=NULL, bool loop=true, int version=0x171, bool patternHints=false, bool directStream=false, int trailingTicks=-1); // dump to ZSM. - SafeWriter* saveZSM(unsigned int zsmrate=60, bool loop=true); + SafeWriter* saveZSM(unsigned int zsmrate=60, bool loop=true, bool optimize=true); // dump command stream. SafeWriter* saveCommand(bool binary=false); // export to an audio file diff --git a/src/engine/fileOps.cpp b/src/engine/fileOps.cpp index 0ba5a1327..9cf94547b 100644 --- a/src/engine/fileOps.cpp +++ b/src/engine/fileOps.cpp @@ -2346,7 +2346,7 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) { } } - if (ds.version>=136) song.patchbayAuto=reader.readC(); + if (ds.version>=136) ds.patchbayAuto=reader.readC(); if (ds.version>=138) { ds.brokenPortaLegato=reader.readC(); diff --git a/src/engine/instrument.cpp b/src/engine/instrument.cpp index 9fa7477f2..3931a6f50 100644 --- a/src/engine/instrument.cpp +++ b/src/engine/instrument.cpp @@ -963,6 +963,10 @@ void DivInstrument::putInsData2(SafeWriter* w, bool fui, const DivSong* song) { break; case DIV_INS_TED: break; + case DIV_INS_C140: + featureSM=true; + featureSL=true; + break; case DIV_INS_MAX: break; diff --git a/src/engine/instrument.h b/src/engine/instrument.h index ef79a97a3..cd8c56527 100644 --- a/src/engine/instrument.h +++ b/src/engine/instrument.h @@ -83,6 +83,7 @@ enum DivInstrumentType: unsigned short { DIV_INS_K053260=50, // DIV_INS_YMF292=51, DIV_INS_TED=52, + DIV_INS_C140=53, DIV_INS_MAX, DIV_INS_NULL }; diff --git a/src/engine/platform/abstract.cpp b/src/engine/platform/abstract.cpp index 82694e003..2be22d1f4 100644 --- a/src/engine/platform/abstract.cpp +++ b/src/engine/platform/abstract.cpp @@ -86,6 +86,10 @@ bool DivDispatch::keyOffAffectsPorta(int ch) { return false; } +bool DivDispatch::isVolGlobal() { + return false; +} + int DivDispatch::getPortaFloor(int ch) { return 0x00; } diff --git a/src/engine/platform/ay.cpp b/src/engine/platform/ay.cpp index 5d9a55932..9a1711763 100644 --- a/src/engine/platform/ay.cpp +++ b/src/engine/platform/ay.cpp @@ -115,7 +115,7 @@ const unsigned char dacLogTableAY[256]={ void DivPlatformAY8910::runDAC() { for (int i=0; i<3; i++) { - if (chan[i].active && chan[i].curPSGMode.dac && chan[i].dac.sample!=-1) { + if (chan[i].active && (chan[i].curPSGMode.val&8) && chan[i].dac.sample!=-1) { chan[i].dac.period+=chan[i].dac.rate; bool end=false; bool changed=false; @@ -243,7 +243,7 @@ void DivPlatformAY8910::tick(bool sysTick) { if (chan[i].std.vol.had) { chan[i].outVol=MIN(15,chan[i].std.vol.val)-(15-(chan[i].vol&15)); if (chan[i].outVol<0) chan[i].outVol=0; - if (!chan[i].nextPSGMode.dac) { + if (!(chan[i].nextPSGMode.val&8)) { if (isMuted[i]) { rWrite(0x08+i,0); } else if (intellivision && (chan[i].nextPSGMode.getEnvelope())) { @@ -265,7 +265,7 @@ void DivPlatformAY8910::tick(bool sysTick) { rWrite(0x06,31-chan[i].std.duty.val); } if (chan[i].std.wave.had) { - if (!chan[i].nextPSGMode.dac) { + if (!(chan[i].nextPSGMode.val&8)) { chan[i].nextPSGMode.val=(chan[i].std.wave.val+1)&7; if (chan[i].active) { chan[i].curPSGMode.val=chan[i].nextPSGMode.val; @@ -290,7 +290,7 @@ void DivPlatformAY8910::tick(bool sysTick) { } if (chan[i].std.phaseReset.had) { if (chan[i].std.phaseReset.val==1) { - if (chan[i].nextPSGMode.dac) { + if (chan[i].nextPSGMode.val&8) { if (dumpWrites) addWrite(0xffff0002+(i<<8),0); if (chan[i].dac.sample<0 || chan[i].dac.sample>=parent->song.sampleLen) { if (dumpWrites) { @@ -340,7 +340,7 @@ void DivPlatformAY8910::tick(bool sysTick) { if (chan[i].keyOn) { //rWrite(16+i*5+1,((chan[i].duty&3)<<6)|(63-(ins->gb.soundLen&63))); //rWrite(16+i*5+2,((chan[i].vol<<4))|(ins->gb.envLen&7)|((ins->gb.envDir&1)<<3)); - if (!chan[i].nextPSGMode.dac) { + if (!(chan[i].nextPSGMode.val&8)) { chan[i].curPSGMode.val=chan[i].nextPSGMode.val; } } @@ -396,11 +396,11 @@ int DivPlatformAY8910::dispatch(DivCommand c) { case DIV_CMD_NOTE_ON: { DivInstrument* ins=parent->getIns(chan[c.chan].ins,DIV_INS_AY); if (!parent->song.disableSampleMacro && (ins->type==DIV_INS_AMIGA || ins->amiga.useSample)) { - chan[c.chan].nextPSGMode.dac=true; + chan[c.chan].nextPSGMode.val|=8; } else if (chan[c.chan].dac.furnaceDAC) { - chan[c.chan].nextPSGMode.dac=false; + chan[c.chan].nextPSGMode.val&=~8; } - if (chan[c.chan].nextPSGMode.dac) { + if (chan[c.chan].nextPSGMode.val&8) { if (skipRegisterWrites) break; if (!parent->song.disableSampleMacro && (ins->type==DIV_INS_AMIGA || ins->amiga.useSample)) { if (c.value!=DIV_NOTE_NULL) { @@ -452,7 +452,8 @@ int DivPlatformAY8910::dispatch(DivCommand c) { } chan[c.chan].dac.furnaceDAC=false; } - chan[c.chan].curPSGMode.dac=chan[c.chan].nextPSGMode.dac; + chan[c.chan].curPSGMode.val&=~8; + chan[c.chan].curPSGMode.val|=chan[c.chan].nextPSGMode.val&8; break; } if (c.value!=DIV_NOTE_NULL) { @@ -466,7 +467,7 @@ int DivPlatformAY8910::dispatch(DivCommand c) { if (!parent->song.brokenOutVol && !chan[c.chan].std.vol.will) { chan[c.chan].outVol=chan[c.chan].vol; } - if (!chan[c.chan].nextPSGMode.dac) { + if (!(chan[c.chan].nextPSGMode.val&8)) { if (isMuted[c.chan]) { rWrite(0x08+c.chan,0); } else if (intellivision && (chan[c.chan].nextPSGMode.getEnvelope())) { @@ -480,7 +481,7 @@ int DivPlatformAY8910::dispatch(DivCommand c) { case DIV_CMD_NOTE_OFF: chan[c.chan].dac.sample=-1; if (dumpWrites) addWrite(0xffff0002+(c.chan<<8),0); - chan[c.chan].nextPSGMode.dac=false; + chan[c.chan].nextPSGMode.val&=~8; chan[c.chan].keyOff=true; chan[c.chan].active=false; chan[c.chan].macroInit(NULL); @@ -494,7 +495,7 @@ int DivPlatformAY8910::dispatch(DivCommand c) { if (!chan[c.chan].std.vol.has) { chan[c.chan].outVol=c.value; } - if (!chan[c.chan].nextPSGMode.dac) { + if (!(chan[c.chan].nextPSGMode.val&8)) { if (isMuted[c.chan]) { rWrite(0x08+c.chan,0); } else { @@ -553,7 +554,7 @@ int DivPlatformAY8910::dispatch(DivCommand c) { break; } case DIV_CMD_STD_NOISE_MODE: - if (!chan[c.chan].nextPSGMode.dac) { + if (!(chan[c.chan].nextPSGMode.val&8)) { if (c.value<16) { chan[c.chan].nextPSGMode.val=(c.value+1)&7; if (chan[c.chan].active) { @@ -578,11 +579,11 @@ int DivPlatformAY8910::dispatch(DivCommand c) { ayEnvMode=c.value>>4; rWrite(0x0d,ayEnvMode); if (c.value&15) { - chan[c.chan].nextPSGMode.envelope|=1; + chan[c.chan].nextPSGMode.val|=4; } else { - chan[c.chan].nextPSGMode.envelope&=~1; + chan[c.chan].nextPSGMode.val&=~4; } - if (!chan[c.chan].nextPSGMode.dac && chan[c.chan].active) { + if (!(chan[c.chan].nextPSGMode.val&8) && chan[c.chan].active) { chan[c.chan].curPSGMode.val=chan[c.chan].nextPSGMode.val; } if (isMuted[c.chan]) { @@ -628,9 +629,14 @@ int DivPlatformAY8910::dispatch(DivCommand c) { immWrite(14+(c.value?1:0),(c.value?portBVal:portAVal)); break; case DIV_CMD_SAMPLE_MODE: - chan[c.chan].nextPSGMode.dac=(c.value>0)?1:0; + if (c.value>0) { + chan[c.chan].nextPSGMode.val|=8; + } else { + chan[c.chan].nextPSGMode.val&=~8; + } if (chan[c.chan].active) { - chan[c.chan].curPSGMode.dac=chan[c.chan].nextPSGMode.dac; + chan[c.chan].curPSGMode.val&=~8; + chan[c.chan].curPSGMode.val|=chan[c.chan].nextPSGMode.val&8; } break; case DIV_CMD_SAMPLE_BANK: @@ -673,7 +679,7 @@ void DivPlatformAY8910::muteChannel(int ch, bool mute) { isMuted[ch]=mute; if (isMuted[ch]) { rWrite(0x08+ch,0); - } else if (chan[ch].active && chan[ch].nextPSGMode.dac) { + } else if (chan[ch].active && (chan[ch].nextPSGMode.val&8)) { rWrite(0x08+ch,chan[ch].dac.out); } else { if (intellivision && (chan[ch].nextPSGMode.getEnvelope()) && chan[ch].active) { diff --git a/src/engine/platform/ay.h b/src/engine/platform/ay.h index 999db1e57..2948f3b85 100644 --- a/src/engine/platform/ay.h +++ b/src/engine/platform/ay.h @@ -31,29 +31,25 @@ class DivPlatformAY8910: public DivDispatch { inline unsigned char regRemap(unsigned char reg) { return intellivision?AY8914RegRemap[reg&0x0f]:reg&0x0f; } struct Channel: public SharedChannel { struct PSGMode { - union { - struct { - unsigned char tone: 1; - unsigned char noise: 1; - unsigned char envelope: 1; - unsigned char dac: 1; - }; - unsigned char val=1; - }; + // bit 3: DAC + // bit 2: envelope + // bit 1: noise + // bit 0: tone + unsigned char val; unsigned char getTone() { - return dac?0:(tone<<0); + return (val&8)?0:(val&1); } unsigned char getNoise() { - return dac?0:(noise<<1); + return (val&8)?0:(val&2); } unsigned char getEnvelope() { - return dac?0:(envelope<<2); + return (val&8)?0:(val&4); } - PSGMode(unsigned char v=0): + PSGMode(unsigned char v=1): val(v) {} }; PSGMode curPSGMode; @@ -61,7 +57,7 @@ class DivPlatformAY8910: public DivDispatch { struct DAC { int sample, rate, period, pos, out; - unsigned char furnaceDAC: 1; + bool furnaceDAC; DAC(): sample(-1), @@ -69,7 +65,7 @@ class DivPlatformAY8910: public DivDispatch { period(0), pos(0), out(0), - furnaceDAC(0) {} + furnaceDAC(false) {} } dac; unsigned char autoEnvNum, autoEnvDen; diff --git a/src/engine/platform/ay8930.cpp b/src/engine/platform/ay8930.cpp index 10421942a..a337a2a31 100644 --- a/src/engine/platform/ay8930.cpp +++ b/src/engine/platform/ay8930.cpp @@ -111,7 +111,7 @@ const unsigned char dacLogTableAY8930[256]={ void DivPlatformAY8930::runDAC() { for (int i=0; i<3; i++) { - if (chan[i].active && chan[i].curPSGMode.dac && chan[i].dac.sample!=-1) { + if (chan[i].active && (chan[i].curPSGMode.val&8) && chan[i].dac.sample!=-1) { chan[i].dac.period+=chan[i].dac.rate; bool end=false; bool changed=false; @@ -235,7 +235,7 @@ void DivPlatformAY8930::tick(bool sysTick) { if (chan[i].std.vol.had) { chan[i].outVol=MIN(31,chan[i].std.vol.val)-(31-(chan[i].vol&31)); if (chan[i].outVol<0) chan[i].outVol=0; - if (!chan[i].nextPSGMode.dac) { + if (!(chan[i].nextPSGMode.val&8)) { if (isMuted[i]) { rWrite(0x08+i,0); } else { @@ -255,7 +255,7 @@ void DivPlatformAY8930::tick(bool sysTick) { rWrite(0x06,chan[i].std.duty.val); } if (chan[i].std.wave.had) { - if (!chan[i].nextPSGMode.dac) { + if (!(chan[i].nextPSGMode.val&8)) { chan[i].nextPSGMode.val=(chan[i].std.wave.val+1)&7; if (chan[i].active) { chan[i].curPSGMode.val=chan[i].nextPSGMode.val; @@ -278,7 +278,7 @@ void DivPlatformAY8930::tick(bool sysTick) { } if (chan[i].std.phaseReset.had) { if (chan[i].std.phaseReset.val==1) { - if (chan[i].nextPSGMode.dac) { + if (chan[i].nextPSGMode.val&8) { if (dumpWrites) addWrite(0xffff0002+(i<<8),0); if (chan[i].dac.sample<0 || chan[i].dac.sample>=parent->song.sampleLen) { if (dumpWrites) { @@ -337,7 +337,7 @@ void DivPlatformAY8930::tick(bool sysTick) { if (chan[i].freq<0) chan[i].freq=0; if (chan[i].freq>65535) chan[i].freq=65535; if (chan[i].keyOn) { - if (!chan[i].nextPSGMode.dac) { + if (!(chan[i].nextPSGMode.val&8)) { chan[i].curPSGMode.val=chan[i].nextPSGMode.val; } if (chan[i].insChanged) { @@ -397,11 +397,11 @@ int DivPlatformAY8930::dispatch(DivCommand c) { case DIV_CMD_NOTE_ON: { DivInstrument* ins=parent->getIns(chan[c.chan].ins,DIV_INS_AY8930); if (ins->type==DIV_INS_AMIGA || ins->amiga.useSample) { - chan[c.chan].nextPSGMode.dac=true; + chan[c.chan].nextPSGMode.val|=8; } else if (chan[c.chan].dac.furnaceDAC) { - chan[c.chan].nextPSGMode.dac=false; + chan[c.chan].nextPSGMode.val&=~8; } - if (chan[c.chan].nextPSGMode.dac) { + if (chan[c.chan].nextPSGMode.val&8) { if (skipRegisterWrites) break; if (ins->type==DIV_INS_AMIGA || ins->amiga.useSample) { if (c.value!=DIV_NOTE_NULL) { @@ -453,7 +453,8 @@ int DivPlatformAY8930::dispatch(DivCommand c) { } chan[c.chan].dac.furnaceDAC=false; } - chan[c.chan].curPSGMode.dac=chan[c.chan].nextPSGMode.dac; + chan[c.chan].curPSGMode.val&=~8; + chan[c.chan].curPSGMode.val|=chan[c.chan].nextPSGMode.val&8; break; } if (c.value!=DIV_NOTE_NULL) { @@ -467,7 +468,7 @@ int DivPlatformAY8930::dispatch(DivCommand c) { if (!parent->song.brokenOutVol && !chan[c.chan].std.vol.will) { chan[c.chan].outVol=chan[c.chan].vol; } - if (!chan[c.chan].nextPSGMode.dac) { + if (!(chan[c.chan].nextPSGMode.val&8)) { if (isMuted[c.chan]) { rWrite(0x08+c.chan,0); } else { @@ -479,7 +480,7 @@ int DivPlatformAY8930::dispatch(DivCommand c) { case DIV_CMD_NOTE_OFF: chan[c.chan].dac.sample=-1; if (dumpWrites) addWrite(0xffff0002+(c.chan<<8),0); - chan[c.chan].nextPSGMode.dac=false; + chan[c.chan].nextPSGMode.val&=~8; chan[c.chan].keyOff=true; chan[c.chan].active=false; chan[c.chan].macroInit(NULL); @@ -493,7 +494,7 @@ int DivPlatformAY8930::dispatch(DivCommand c) { if (!chan[c.chan].std.vol.has) { chan[c.chan].outVol=c.value; } - if (!chan[c.chan].nextPSGMode.dac) { + if (!(chan[c.chan].nextPSGMode.val&8)) { if (isMuted[c.chan]) { rWrite(0x08+c.chan,0); } else { @@ -548,7 +549,7 @@ int DivPlatformAY8930::dispatch(DivCommand c) { } case DIV_CMD_STD_NOISE_MODE: if (c.value<0x10) { - if (!chan[c.chan].nextPSGMode.dac) { + if (!(chan[c.chan].nextPSGMode.val&8)) { chan[c.chan].nextPSGMode.val=(c.value+1)&7; if (chan[c.chan].active) { chan[c.chan].curPSGMode.val=chan[c.chan].nextPSGMode.val; @@ -571,11 +572,11 @@ int DivPlatformAY8930::dispatch(DivCommand c) { chan[c.chan].envelope.mode=c.value>>4; rWrite(regMode[c.chan],chan[c.chan].envelope.mode); if (c.value&15) { - chan[c.chan].nextPSGMode.envelope|=1; + chan[c.chan].nextPSGMode.val|=4; } else { - chan[c.chan].nextPSGMode.envelope&=~1; + chan[c.chan].nextPSGMode.val&=~4; } - if (!chan[c.chan].nextPSGMode.dac && chan[c.chan].active) { + if (!(chan[c.chan].nextPSGMode.val&8) && chan[c.chan].active) { chan[c.chan].curPSGMode.val=chan[c.chan].nextPSGMode.val; } if (isMuted[c.chan]) { @@ -630,8 +631,15 @@ int DivPlatformAY8930::dispatch(DivCommand c) { immWrite(14+(c.value?1:0),(c.value?portBVal:portAVal)); break; case DIV_CMD_SAMPLE_MODE: - chan[c.chan].nextPSGMode.dac=(c.value>0)?1:0; - chan[c.chan].curPSGMode.dac=chan[c.chan].nextPSGMode.dac; + if (c.value>0) { + chan[c.chan].nextPSGMode.val|=8; + } else { + chan[c.chan].nextPSGMode.val&=~8; + } + if (chan[c.chan].active) { + chan[c.chan].curPSGMode.val&=~8; + chan[c.chan].curPSGMode.val|=chan[c.chan].nextPSGMode.val&8; + } break; case DIV_CMD_SAMPLE_BANK: sampleBank=c.value; @@ -672,7 +680,7 @@ void DivPlatformAY8930::muteChannel(int ch, bool mute) { if (isMuted[ch]) { rWrite(0x08+ch,0); } else if (chan[ch].active) { - if (chan[ch].nextPSGMode.dac) { + if (chan[ch].nextPSGMode.val&8) { rWrite(0x08+ch,chan[ch].dac.out&31); } else { rWrite(0x08+ch,(chan[ch].outVol&31)|((chan[ch].nextPSGMode.getEnvelope())<<3)); diff --git a/src/engine/platform/ay8930.h b/src/engine/platform/ay8930.h index 113aed917..0ff69ad40 100644 --- a/src/engine/platform/ay8930.h +++ b/src/engine/platform/ay8930.h @@ -39,29 +39,25 @@ class DivPlatformAY8930: public DivDispatch { } envelope; struct PSGMode { - union { - struct { - unsigned char tone: 1; - unsigned char noise: 1; - unsigned char envelope: 1; - unsigned char dac: 1; - }; - unsigned char val=1; - }; + // bit 3: DAC + // bit 2: envelope + // bit 1: noise + // bit 0: tone + unsigned char val; unsigned char getTone() { - return dac?0:(tone<<0); + return (val&8)?0:(val&1); } unsigned char getNoise() { - return dac?0:(noise<<1); + return (val&8)?0:(val&2); } unsigned char getEnvelope() { - return dac?0:(envelope<<2); + return (val&8)?0:(val&4); } - PSGMode(unsigned char v=0): + PSGMode(unsigned char v=1): val(v) {} }; PSGMode curPSGMode; @@ -69,7 +65,7 @@ class DivPlatformAY8930: public DivDispatch { struct DAC { int sample, rate, period, pos, out; - unsigned char furnaceDAC: 1; + bool furnaceDAC; DAC(): sample(-1), @@ -77,7 +73,7 @@ class DivPlatformAY8930: public DivDispatch { period(0), pos(0), out(0), - furnaceDAC(0) {} + furnaceDAC(false) {} } dac; unsigned char autoEnvNum, autoEnvDen, duty; diff --git a/src/engine/platform/c140.cpp b/src/engine/platform/c140.cpp new file mode 100644 index 000000000..e5de79488 --- /dev/null +++ b/src/engine/platform/c140.cpp @@ -0,0 +1,513 @@ +/** + * Furnace Tracker - multi-system chiptune tracker + * Copyright (C) 2021-2023 tildearrow and contributors + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "c140.h" +#include "../engine.h" +#include "../../ta-log.h" +#include +#include + +#define CHIP_FREQBASE 12582912 + +#define rWrite(a,v) {if(!skipRegisterWrites) {writes.push(QueuedWrite(a,v)); if(dumpWrites) addWrite(a,v); }} + +const char* regCheatSheetC140[]={ + "CHx_RVol", "00+x*10", + "CHx_LVol", "01+x*10", + "CHx_FreqH", "02+x*10", + "CHx_FreqL", "03+x*10", + "CHx_Bank", "04+x*10", + "CHx_Ctrl", "05+x*10", + "CHx_StartH", "06+x*10", + "CHx_StartL", "07+x*10", + "CHx_EndH", "08+x*10", + "CHx_EndL", "09+x*10", + "CHx_LoopH", "0A+x*10", + "CHx_LoopL", "0B+x*10", + "Timer", "1FA", + "IRQ", "1FE", + NULL +}; + +const char** DivPlatformC140::getRegisterSheet() { + return regCheatSheetC140; +} + +void DivPlatformC140::acquire(short** buf, size_t len) { + for (size_t h=0; h>= 10; + c140.rout >>= 10; + + if (c140.lout<-32768) c140.lout=-32768; + if (c140.lout>32767) c140.lout=32767; + + if (c140.rout<-32768) c140.rout=-32768; + if (c140.rout>32767) c140.rout=32767; + + buf[0][h]=c140.lout; + buf[1][h]=c140.rout; + + for (int i=0; i<24; i++) { + oscBuf[i]->data[oscBuf[i]->needle++]=(c140.voice[i].lout+c140.voice[i].rout)>>10; + } + } +} + +void DivPlatformC140::tick(bool sysTick) { + for (int i=0; i<24; i++) { + chan[i].std.next(); + if (chan[i].std.vol.had) { + chan[i].outVol=(chan[i].vol*MIN(chan[i].macroVolMul,chan[i].std.vol.val))/chan[i].macroVolMul; + chan[i].volChangedL=true; + chan[i].volChangedR=true; + } + if (NEW_ARP_STRAT) { + chan[i].handleArp(); + } else if (chan[i].std.arp.had) { + if (!chan[i].inPorta) { + chan[i].baseFreq=NOTE_FREQUENCY(parent->calcArp(chan[i].note,chan[i].std.arp.val)); + } + chan[i].freqChanged=true; + } + if (chan[i].std.pitch.had) { + if (chan[i].std.pitch.mode) { + chan[i].pitch2+=chan[i].std.pitch.val; + CLAMP_VAR(chan[i].pitch2,-32768,32767); + } else { + chan[i].pitch2=chan[i].std.pitch.val; + } + chan[i].freqChanged=true; + } + if (chan[i].std.panL.had) { + chan[i].chPanL=(255*(chan[i].std.panL.val&255))/chan[i].macroPanMul; + chan[i].volChangedL=true; + } + + if (chan[i].std.panR.had) { + chan[i].chPanR=(255*(chan[i].std.panR.val&255))/chan[i].macroPanMul; + chan[i].volChangedR=true; + } + + if (chan[i].std.phaseReset.had) { + if ((chan[i].std.phaseReset.val==1) && chan[i].active) { + chan[i].audPos=0; + chan[i].setPos=true; + } + } + if (chan[i].volChangedL) { + chan[i].chVolL=(chan[i].outVol*chan[i].chPanL)/255; + rWrite(1+(i<<4),chan[i].chVolL); + chan[i].volChangedL=false; + } + if (chan[i].volChangedR) { + chan[i].chVolR=(chan[i].outVol*chan[i].chPanR)/255; + rWrite(0+(i<<4),chan[i].chVolR); + chan[i].volChangedR=false; + } + if (chan[i].setPos) { + // force keyon + chan[i].keyOn=true; + chan[i].setPos=false; + } else { + chan[i].audPos=0; + } + if (chan[i].freqChanged || chan[i].keyOn || chan[i].keyOff) { + bool writeCtrl=false; + DivSample* s=parent->getSample(chan[i].sample); + unsigned char ctrl=0; + double off=(s->centerRate>=1)?((double)s->centerRate/8363.0):1.0; + chan[i].freq=(int)(off*parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,false,2,chan[i].pitch2,chipClock,CHIP_FREQBASE)); + if (chan[i].freq<0) chan[i].freq=0; + if (chan[i].freq>65535) chan[i].freq=65535; + ctrl|=(chan[i].active?0x80:0)|((s->isLoopable())?0x10:0)|((s->depth==DIV_SAMPLE_DEPTH_MULAW)?0x08:0); + if (chan[i].keyOn) { + unsigned int bank=0; + unsigned int start=0; + unsigned int loop=0; + unsigned int end=0; + if (chan[i].sample>=0 && chan[i].samplesong.sampleLen) { + bank=(sampleOff[chan[i].sample]>>16)&0xff; + start=sampleOff[chan[i].sample]&0xffff; + end=MIN(start+s->length8-1,65535); + } + if (chan[i].audPos>0) { + start=MIN(start+MIN(chan[i].audPos,s->length8),65535); + } + if (s->isLoopable()) { + loop=MIN(start+s->loopStart,65535); + end=MIN(start+s->loopEnd-1,65535); + } + rWrite(0x05+(i<<4),0); // force keyoff first + rWrite(0x04+(i<<4),bank); + rWrite(0x06+(i<<4),(start>>8)&0xff); + rWrite(0x07+(i<<4),start&0xff); + rWrite(0x08+(i<<4),(end>>8)&0xff); + rWrite(0x09+(i<<4),end&0xff); + rWrite(0x0a+(i<<4),(loop>>8)&0xff); + rWrite(0x0b+(i<<4),loop&0xff); + if (!chan[i].std.vol.had) { + chan[i].outVol=chan[i].vol; + chan[i].volChangedL=true; + chan[i].volChangedR=true; + } + writeCtrl=true; + chan[i].keyOn=false; + } + if (chan[i].keyOff) { + writeCtrl=true; + chan[i].keyOff=false; + } + if (chan[i].freqChanged) { + rWrite(0x02+(i<<4),chan[i].freq>>8); + rWrite(0x03+(i<<4),chan[i].freq&0xff); + chan[i].freqChanged=false; + } + if (writeCtrl) { + rWrite(0x05+(i<<4),ctrl); + } + } + } +} + +int DivPlatformC140::dispatch(DivCommand c) { + switch (c.cmd) { + case DIV_CMD_NOTE_ON: { + DivInstrument* ins=parent->getIns(chan[c.chan].ins,DIV_INS_AMIGA); + chan[c.chan].macroVolMul=ins->type==DIV_INS_AMIGA?64:255; + chan[c.chan].macroPanMul=ins->type==DIV_INS_AMIGA?127:255; + if (c.value!=DIV_NOTE_NULL) { + chan[c.chan].sample=ins->amiga.getSample(c.value); + c.value=ins->amiga.getFreq(c.value); + } + if (c.value!=DIV_NOTE_NULL) { + chan[c.chan].baseFreq=NOTE_FREQUENCY(c.value); + } + if (chan[c.chan].sample<0 || chan[c.chan].sample>=parent->song.sampleLen) { + chan[c.chan].sample=-1; + } + if (c.value!=DIV_NOTE_NULL) { + chan[c.chan].freqChanged=true; + chan[c.chan].note=c.value; + } + chan[c.chan].active=true; + chan[c.chan].keyOn=true; + chan[c.chan].macroInit(ins); + if (!parent->song.brokenOutVol && !chan[c.chan].std.vol.will) { + chan[c.chan].outVol=chan[c.chan].vol; + chan[c.chan].volChangedL=true; + chan[c.chan].volChangedR=true; + } + break; + } + case DIV_CMD_NOTE_OFF: + chan[c.chan].sample=-1; + chan[c.chan].active=false; + chan[c.chan].keyOff=true; + chan[c.chan].macroInit(NULL); + break; + case DIV_CMD_NOTE_OFF_ENV: + case DIV_CMD_ENV_RELEASE: + chan[c.chan].std.release(); + break; + case DIV_CMD_INSTRUMENT: + if (chan[c.chan].ins!=c.value || c.value2==1) { + chan[c.chan].ins=c.value; + } + break; + case DIV_CMD_VOLUME: + chan[c.chan].vol=c.value; + if (!chan[c.chan].std.vol.has) { + chan[c.chan].outVol=c.value; + } + chan[c.chan].volChangedL=true; + chan[c.chan].volChangedR=true; + break; + case DIV_CMD_GET_VOLUME: + if (chan[c.chan].std.vol.has) { + return chan[c.chan].vol; + } + return chan[c.chan].outVol; + break; + case DIV_CMD_PANNING: + chan[c.chan].chPanL=c.value; + chan[c.chan].chPanR=c.value2; + chan[c.chan].volChangedL=true; + chan[c.chan].volChangedR=true; + break; + case DIV_CMD_PITCH: + chan[c.chan].pitch=c.value; + chan[c.chan].freqChanged=true; + break; + case DIV_CMD_NOTE_PORTA: { + int destFreq=NOTE_FREQUENCY(c.value2); + bool return2=false; + if (destFreq>chan[c.chan].baseFreq) { + chan[c.chan].baseFreq+=c.value; + if (chan[c.chan].baseFreq>=destFreq) { + chan[c.chan].baseFreq=destFreq; + return2=true; + } + } else { + chan[c.chan].baseFreq-=c.value; + if (chan[c.chan].baseFreq<=destFreq) { + chan[c.chan].baseFreq=destFreq; + return2=true; + } + } + chan[c.chan].freqChanged=true; + if (return2) { + chan[c.chan].inPorta=false; + return 2; + } + break; + } + case DIV_CMD_LEGATO: { + chan[c.chan].baseFreq=NOTE_FREQUENCY(c.value+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val-12):(0))); + chan[c.chan].freqChanged=true; + chan[c.chan].note=c.value; + break; + } + case DIV_CMD_PRE_PORTA: + if (chan[c.chan].active && c.value2) { + if (parent->song.resetMacroOnPorta) chan[c.chan].macroInit(parent->getIns(chan[c.chan].ins,DIV_INS_AMIGA)); + } + if (!chan[c.chan].inPorta && c.value && !parent->song.brokenPortaArp && chan[c.chan].std.arp.will && !NEW_ARP_STRAT) chan[c.chan].baseFreq=NOTE_FREQUENCY(chan[c.chan].note); + chan[c.chan].inPorta=c.value; + break; + case DIV_CMD_SAMPLE_POS: + chan[c.chan].audPos=c.value; + chan[c.chan].setPos=true; + break; + case DIV_CMD_GET_VOLMAX: + return 255; + break; + case DIV_CMD_MACRO_OFF: + chan[c.chan].std.mask(c.value,true); + break; + case DIV_CMD_MACRO_ON: + chan[c.chan].std.mask(c.value,false); + break; + case DIV_ALWAYS_SET_VOLUME: + return 1; + break; + default: + break; + } + return 1; +} + +void DivPlatformC140::muteChannel(int ch, bool mute) { + isMuted[ch]=mute; + c140.voice[ch].muted=mute; +} + +void DivPlatformC140::forceIns() { + for (int i=0; i<24; i++) { + chan[i].insChanged=true; + chan[i].freqChanged=true; + chan[i].volChangedL=true; + chan[i].volChangedR=true; + chan[i].sample=-1; + } +} + +void* DivPlatformC140::getChanState(int ch) { + return &chan[ch]; +} + +DivMacroInt* DivPlatformC140::getChanMacroInt(int ch) { + return &chan[ch].std; +} + +DivDispatchOscBuffer* DivPlatformC140::getOscBuffer(int ch) { + return oscBuf[ch]; +} + +void DivPlatformC140::reset() { + while (!writes.empty()) writes.pop(); + memset(regPool,0,512); + c140_reset(&c140); + for (int i=0; i<24; i++) { + chan[i]=DivPlatformC140::Channel(); + chan[i].std.setEngine(parent); + rWrite(0x05+(i<<4),0); + } +} + +int DivPlatformC140::getOutputCount() { + return 2; +} + +void DivPlatformC140::notifyInsChange(int ins) { + for (int i=0; i<24; i++) { + if (chan[i].ins==ins) { + chan[i].insChanged=true; + } + } +} + +void DivPlatformC140::notifyWaveChange(int wave) { + // TODO when wavetables are added + // TODO they probably won't be added unless the samples reside in RAM +} + +void DivPlatformC140::notifyInsDeletion(void* ins) { + for (int i=0; i<24; i++) { + chan[i].std.notifyInsDeletion((DivInstrument*)ins); + } +} + +void DivPlatformC140::poke(unsigned int addr, unsigned short val) { + rWrite(addr,val); +} + +void DivPlatformC140::poke(std::vector& wlist) { + for (DivRegWrite& i: wlist) rWrite(i.addr,i.val); +} + +unsigned char* DivPlatformC140::getRegisterPool() { + return regPool; +} + +int DivPlatformC140::getRegisterPoolSize() { + return 512; +} + +float DivPlatformC140::getPostAmp() { + return 3.0f; +} + +const void* DivPlatformC140::getSampleMem(int index) { + return index == 0 ? sampleMem : NULL; +} + +size_t DivPlatformC140::getSampleMemCapacity(int index) { + return index == 0 ? 16777216 : 0; +} + +size_t DivPlatformC140::getSampleMemUsage(int index) { + return index == 0 ? sampleMemLen : 0; +} + +bool DivPlatformC140::isSampleLoaded(int index, int sample) { + if (index!=0) return false; + if (sample<0 || sample>255) return false; + return sampleLoaded[sample]; +} + +void DivPlatformC140::renderSamples(int sysID) { + memset(sampleMem,0,getSampleMemCapacity()); + memset(sampleOff,0,256*sizeof(unsigned int)); + memset(sampleLoaded,0,256*sizeof(bool)); + + size_t memPos=0; + for (int i=0; isong.sampleLen; i++) { + DivSample* s=parent->song.sample[i]; + if (!s->renderOn[0][sysID]) { + sampleOff[i]=0; + continue; + } + + unsigned int length=s->length16; + // fit sample size to single bank size + if (length>(131072)) { + length=131072; + } + if ((memPos&0xfe0000)!=((memPos+length)&0xfe0000)) { + memPos=((memPos+0x1ffff)&0xfe0000); + } + if (memPos>=(getSampleMemCapacity())) { + logW("out of C140 memory for sample %d!",i); + break; + } + // why is C140 not G.711-compliant? this weird bit mangling had me puzzled for 3 hours... + if (memPos+length>=(getSampleMemCapacity())) { + if (s->depth==DIV_SAMPLE_DEPTH_MULAW) { + for (unsigned int i=0; i<(getSampleMemCapacity())-memPos; i++) { + unsigned char x=s->dataMuLaw[i]^0xff; + if (x&0x80) x^=15; + unsigned char c140Mu=(x&0x80)|((x&15)<<3)|((x&0x70)>>4); + sampleMem[i+(memPos/sizeof(short))]=((c140Mu)<<8); + } + } else { + memcpy(sampleMem+(memPos/sizeof(short)),s->data16,(getSampleMemCapacity())-memPos); + } + logW("out of C140 memory for sample %d!",i); + } else { + if (s->depth==DIV_SAMPLE_DEPTH_MULAW) { + for (unsigned int i=0; idataMuLaw[i]^0xff; + if (x&0x80) x^=15; + unsigned char c140Mu=(x&0x80)|((x&15)<<3)|((x&0x70)>>4); + sampleMem[i+(memPos/sizeof(short))]=((c140Mu)<<8); + } + } else { + memcpy(sampleMem+(memPos/sizeof(short)),s->data16,length); + } + } + sampleOff[i]=memPos>>1; + sampleLoaded[i]=true; + memPos+=length; + } + sampleMemLen=memPos+256; +} + +void DivPlatformC140::setFlags(const DivConfig& flags) { + chipClock=32000*256; // 8.192MHz and 12.288MHz input, verified from Assault Schematics + CHECK_CUSTOM_CLOCK; + rate=chipClock/192; + for (int i=0; i<24; i++) { + oscBuf[i]->rate=rate; + } +} + +int DivPlatformC140::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) { + parent=p; + dumpWrites=false; + skipRegisterWrites=false; + + for (int i=0; i<24; i++) { + isMuted[i]=false; + oscBuf[i]=new DivDispatchOscBuffer; + } + sampleMem=new short[getSampleMemCapacity()>>1]; + sampleMemLen=0; + c140_init(&c140); + c140.sample_mem=sampleMem; + setFlags(flags); + reset(); + + return 24; +} + +void DivPlatformC140::quit() { + delete[] sampleMem; + for (int i=0; i<24; i++) { + delete oscBuf[i]; + } +} diff --git a/src/engine/platform/c140.h b/src/engine/platform/c140.h new file mode 100644 index 000000000..bb34dac65 --- /dev/null +++ b/src/engine/platform/c140.h @@ -0,0 +1,103 @@ +/** + * Furnace Tracker - multi-system chiptune tracker + * Copyright (C) 2021-2023 tildearrow and contributors + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef _C140_H +#define _C140_H + +#include "../dispatch.h" +#include "sound/c140.h" +#include "../fixedQueue.h" + +class DivPlatformC140: public DivDispatch { + struct Channel: public SharedChannel { + unsigned int audPos; + int sample, wave; + bool setPos, volChangedL, volChangedR; + int chPanL, chPanR; + int chVolL, chVolR; + int macroVolMul; + int macroPanMul; + Channel(): + SharedChannel(255), + audPos(0), + sample(-1), + wave(-1), + setPos(false), + volChangedL(false), + volChangedR(false), + chPanL(255), + chPanR(255), + chVolL(255), + chVolR(255), + macroVolMul(64), + macroPanMul(127) {} + }; + Channel chan[24]; + DivDispatchOscBuffer* oscBuf[24]; + bool isMuted[24]; + unsigned int sampleOff[256]; + bool sampleLoaded[256]; + + signed short* sampleMem; + size_t sampleMemLen; + struct QueuedWrite { + unsigned short addr; + unsigned char val; + bool addrOrVal; + QueuedWrite(): addr(0), val(0), addrOrVal(false) {} + QueuedWrite(unsigned short a, unsigned char v): addr(a), val(v), addrOrVal(false) {} + }; + FixedQueue writes; + struct c140_t c140; + unsigned char regPool[512]; + friend void putDispatchChip(void*,int); + friend void putDispatchChan(void*,int,int); + + public: + void acquire(short** buf, size_t len); + int dispatch(DivCommand c); + void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); + DivDispatchOscBuffer* getOscBuffer(int chan); + unsigned char* getRegisterPool(); + int getRegisterPoolSize(); + float getPostAmp(); + void reset(); + void forceIns(); + void tick(bool sysTick=true); + void muteChannel(int ch, bool mute); + int getOutputCount(); + void notifyInsChange(int ins); + void notifyWaveChange(int wave); + void notifyInsDeletion(void* ins); + void poke(unsigned int addr, unsigned short val); + void poke(std::vector& wlist); + const char** getRegisterSheet(); + const void* getSampleMem(int index = 0); + size_t getSampleMemCapacity(int index = 0); + size_t getSampleMemUsage(int index = 0); + bool isSampleLoaded(int index, int sample); + void renderSamples(int chipID); + void setFlags(const DivConfig& flags); + int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags); + void quit(); + private: +}; + +#endif diff --git a/src/engine/platform/c64.cpp b/src/engine/platform/c64.cpp index 6ca85ffe0..15ff00d92 100644 --- a/src/engine/platform/c64.cpp +++ b/src/engine/platform/c64.cpp @@ -566,6 +566,10 @@ bool DivPlatformC64::getWantPreNote() { return true; } +bool DivPlatformC64::isVolGlobal() { + return true; +} + float DivPlatformC64::getPostAmp() { return (sidCore==1)?3.0f:1.0f; } diff --git a/src/engine/platform/c64.h b/src/engine/platform/c64.h index 0da59fc83..def32eaab 100644 --- a/src/engine/platform/c64.h +++ b/src/engine/platform/c64.h @@ -105,6 +105,7 @@ class DivPlatformC64: public DivDispatch { void notifyInsChange(int ins); bool getDCOffRequired(); bool getWantPreNote(); + bool isVolGlobal(); float getPostAmp(); DivMacroInt* getChanMacroInt(int ch); void notifyInsDeletion(void* ins); diff --git a/src/engine/platform/fmsharedbase.h b/src/engine/platform/fmsharedbase.h index 4200d7570..9be217b94 100644 --- a/src/engine/platform/fmsharedbase.h +++ b/src/engine/platform/fmsharedbase.h @@ -105,16 +105,17 @@ class DivPlatformFMBase: public DivDispatch { } } } + // only used by OPN2 for DAC writes inline void urgentWrite(unsigned short a, unsigned char v) { if (!skipRegisterWrites && !flushFirst) { - if (writes.empty()) { - writes.push_back(QueuedWrite(a,v)); - } else if ((writes.size()>16 && writes.front().addr!=0xf0) || writes.front().addrOrVal) { - // $f0 is used by OPN hard reset - writes.push_back(QueuedWrite(a,v)); - } else { - writes.push_front(QueuedWrite(a,v)); + if (!writes.empty()) { + // check for hard reset + if (writes.front().addr==0xf0) { + // replace hard reset with DAC write + writes.pop_front(); + } } + writes.push_front(QueuedWrite(a,v)); if (dumpWrites) { addWrite(a,v); } diff --git a/src/engine/platform/gb.cpp b/src/engine/platform/gb.cpp index cec83e6df..7e2086db0 100644 --- a/src/engine/platform/gb.cpp +++ b/src/engine/platform/gb.cpp @@ -81,7 +81,6 @@ void DivPlatformGB::acquire(short** buf, size_t len) { } void DivPlatformGB::updateWave() { - logV("WAVE UPDATE"); rWrite(0x1a,0); for (int i=0; i<16; i++) { int nibble1=ws.output[((i<<1)+antiClickWavePos)&31]; diff --git a/src/engine/platform/genesis.cpp b/src/engine/platform/genesis.cpp index 20e87d618..3ce422991 100644 --- a/src/engine/platform/genesis.cpp +++ b/src/engine/platform/genesis.cpp @@ -96,32 +96,22 @@ void DivPlatformGenesis::processDAC(int iRate) { //sample>>=1; if (sample<-128) sample=-128; if (sample>127) sample=127; - urgentWrite(0x2a,(unsigned char)sample+0x80); + dacWrite=(unsigned char)(sample+0x80); } } else { - if (!chan[5].dacReady) { - chan[5].dacDelay+=32000; - if (chan[5].dacDelay>=iRate) { - chan[5].dacDelay-=iRate; - chan[5].dacReady=true; - } - } if (chan[5].dacMode && chan[5].dacSample!=-1) { chan[5].dacPeriod+=chan[5].dacRate; if (chan[5].dacPeriod>=iRate) { DivSample* s=parent->getSample(chan[5].dacSample); if (s->samples>0 && chan[5].dacPossamples) { if (!isMuted[5]) { - if (chan[5].dacReady && writes.size()<16) { - int sample; - if (parent->song.noOPN2Vol) { - sample=s->data8[chan[5].dacDirection?(s->samples-chan[5].dacPos-1):chan[5].dacPos]; - } else { - sample=(s->data8[chan[5].dacDirection?(s->samples-chan[5].dacPos-1):chan[5].dacPos]*dacVolTable[chan[5].outVol])>>7; - } - urgentWrite(0x2a,(unsigned char)sample+0x80); - chan[5].dacReady=false; + int sample; + if (parent->song.noOPN2Vol) { + sample=s->data8[chan[5].dacDirection?(s->samples-chan[5].dacPos-1):chan[5].dacPos]; + } else { + sample=(s->data8[chan[5].dacDirection?(s->samples-chan[5].dacPos-1):chan[5].dacPos]*dacVolTable[chan[5].outVol])>>7; } + dacWrite=(unsigned char)(sample+0x80); } chan[5].dacPos++; if (!chan[5].dacDirection && (s->isLoopable() && chan[5].dacPos>=(unsigned int)s->loopEnd)) { @@ -151,24 +141,34 @@ void DivPlatformGenesis::acquire_nuked(short** buf, size_t len) { os[0]=0; os[1]=0; for (int i=0; i<6; i++) { if (!writes.empty()) { - if (--delay<0) { - delay=0; - QueuedWrite& w=writes.front(); - if (w.addrOrVal) { - //logV("%.3x = %.2x",w.addr,w.val); - OPN2_Write(&fm,0x1+((w.addr>>8)<<1),w.val); - lastBusy=0; - regPool[w.addr&0x1ff]=w.val; - writes.pop_front(); - } else { - lastBusy++; - if (fm.write_busy==0) { - OPN2_Write(&fm,0x0+((w.addr>>8)<<1),w.addr); - w.addrOrVal=true; + QueuedWrite& w=writes.front(); + if (w.addrOrVal) { + //logV("%.3x = %.2x",w.addr,w.val); + OPN2_Write(&fm,0x1+((w.addr>>8)<<1),w.val); + regPool[w.addr&0x1ff]=w.val; + writes.pop_front(); + + if (dacWrite>=0) { + if (!canWriteDAC) { + canWriteDAC=true; + } else { + urgentWrite(0x2a,dacWrite); + dacWrite=-1; + canWriteDAC=writes.empty(); } } + } else { + if (fm.write_busy==0) { + OPN2_Write(&fm,0x0+((w.addr>>8)<<1),w.addr); + w.addrOrVal=true; + } } } else { + canWriteDAC=true; + if (dacWrite>=0) { + urgentWrite(0x2a,dacWrite); + dacWrite=-1; + } flushFirst=false; } @@ -227,8 +227,22 @@ void DivPlatformGenesis::acquire_ymfm(short** buf, size_t len) { fm_ymfm->write(0x1+((w.addr>>8)<<1),w.val); regPool[w.addr&0x1ff]=w.val; writes.pop_front(); - lastBusy=1; + + if (dacWrite>=0) { + if (!canWriteDAC) { + canWriteDAC=true; + } else { + urgentWrite(0x2a,dacWrite); + dacWrite=-1; + canWriteDAC=writes.empty(); + } + } } else { + canWriteDAC=true; + if (dacWrite>=0) { + urgentWrite(0x2a,dacWrite); + dacWrite=-1; + } flushFirst=false; } @@ -288,6 +302,11 @@ void DivPlatformGenesis::fillStream(std::vector& stream, int sR for (size_t i=0; i=0) { + urgentWrite(0x2a,dacWrite); + dacWrite=-1; + } + while (!writes.empty()) { QueuedWrite& w=writes.front(); stream.push_back(DivDelayedWrite(i,w.addr,w.val)); @@ -953,6 +972,7 @@ int DivPlatformGenesis::dispatch(DivCommand c) { } case DIV_CMD_FM_EXTCH: { if (extSys) { + if (extMode==(bool)c.value) break; extMode=c.value; immWrite(0x27,extMode?0x40:0); } @@ -1314,11 +1334,12 @@ void DivPlatformGenesis::reset() { pendingWrites[i]=-1; } - lastBusy=60; lfoValue=8; softPCMTimer=0; extMode=false; flushFirst=false; + dacWrite=-1; + canWriteDAC=true; if (softPCM) { chan[5].dacMode=true; @@ -1330,8 +1351,6 @@ void DivPlatformGenesis::reset() { // LFO immWrite(0x22,lfoValue); - - delay=0; } int DivPlatformGenesis::getOutputCount() { diff --git a/src/engine/platform/genesis.h b/src/engine/platform/genesis.h index c9de0493f..d618c6892 100644 --- a/src/engine/platform/genesis.h +++ b/src/engine/platform/genesis.h @@ -55,7 +55,6 @@ class DivPlatformGenesis: public DivPlatformOPN { unsigned int dacPos; int dacSample; int dacDelay; - bool dacReady; bool dacDirection; bool setPos; unsigned char sampleBank; @@ -69,7 +68,6 @@ class DivPlatformGenesis: public DivPlatformOPN { dacPos(0), dacSample(-1), dacDelay(0), - dacReady(true), dacDirection(false), setPos(false), sampleBank(0), @@ -86,8 +84,9 @@ class DivPlatformGenesis: public DivPlatformOPN { int softPCMTimer; - bool extMode, softPCM, noExtMacros, useYMFM; + bool extMode, softPCM, noExtMacros, useYMFM, canWriteDAC; unsigned char chipType; + short dacWrite; unsigned char dacVolTable[128]; diff --git a/src/engine/platform/genesisext.cpp b/src/engine/platform/genesisext.cpp index 7e9278daa..d8760be9a 100644 --- a/src/engine/platform/genesisext.cpp +++ b/src/engine/platform/genesisext.cpp @@ -144,6 +144,7 @@ int DivPlatformGenesisExt::dispatch(DivCommand c) { opChan[ch].insChanged=true; } opChan[ch].ins=c.value; + chan[extChanOffs].ins=opChan[ch].ins; break; case DIV_CMD_PANNING: { if (c.value==0 && c.value2==0) { @@ -219,8 +220,15 @@ int DivPlatformGenesisExt::dispatch(DivCommand c) { break; } case DIV_CMD_FM_EXTCH: { + if (extMode==(bool)c.value) break; extMode=c.value; immWrite(0x27,extMode?0x40:0); + if (!extMode) { + for (int i=0; i<4; i++) { + opChan[i].insChanged=true; + } + chan[extChanOffs].insChanged=true; + } break; } case DIV_CMD_FM_LFO: { @@ -431,17 +439,21 @@ void DivPlatformGenesisExt::muteChannel(int ch, bool mute) { return; } isOpMuted[ch-2]=mute; - - int ordch=orderedOps[ch-2]; - unsigned short baseAddr=chanOffs[2]|opOffs[ordch]; - DivInstrumentFM::Operator op=chan[2].state.op[ordch]; - if (isOpMuted[ch-2] || !op.enable) { - rWrite(baseAddr+0x40,127); - } else { - rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch-2].outVol&0x7f,127)); - } - rWrite(chanOffs[2]+0xb4,(IS_EXTCH_MUTED?0:(opChan[ch-2].pan<<6))|(chan[2].state.fms&7)|((chan[2].state.ams&3)<<4)); + DivPlatformGenesis::muteChannel(extChanOffs,IS_EXTCH_MUTED); + + if (extMode) { + int ordch=orderedOps[ch-2]; + unsigned short baseAddr=chanOffs[2]|opOffs[ordch]; + DivInstrumentFM::Operator op=chan[2].state.op[ordch]; + if (isOpMuted[ch-2] || !op.enable) { + rWrite(baseAddr+0x40,127); + } else { + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch-2].outVol&0x7f,127)); + } + + rWrite(chanOffs[2]+0xb4,(IS_EXTCH_MUTED?0:(opChan[ch-2].pan<<6))|(chan[2].state.fms&7)|((chan[2].state.ams&3)<<4)); + } } static int opChanOffsL[4]={ @@ -512,6 +524,39 @@ void DivPlatformGenesisExt::tick(bool sysTick) { opChan[i].freqChanged=true; } + // channel macros + if (opChan[i].std.alg.had) { + chan[extChanOffs].state.alg=opChan[i].std.alg.val; + rWrite(chanOffs[extChanOffs]+ADDR_FB_ALG,(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + if (!parent->song.algMacroBehavior) for (int j=0; j<4; j++) { + unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[j]; + DivInstrumentFM::Operator& op=chan[extChanOffs].state.op[j]; + if (isOpMuted[j] || !op.enable) { + rWrite(baseAddr+0x40,127); + } else { + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[j].outVol&0x7f,127)); + } + } + } + if (i==0 || fbAllOps) { + if (opChan[i].std.fb.had) { + chan[extChanOffs].state.fb=opChan[i].std.fb.val; + rWrite(chanOffs[extChanOffs]+ADDR_FB_ALG,(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + } + } + if (opChan[i].std.fms.had) { + chan[extChanOffs].state.fms=opChan[i].std.fms.val; + rWrite(chanOffs[extChanOffs]+ADDR_LRAF,(IS_EXTCH_MUTED?0:(opChan[i].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4)); + } + if (opChan[i].std.ams.had) { + chan[extChanOffs].state.ams=opChan[i].std.ams.val; + rWrite(chanOffs[extChanOffs]+ADDR_LRAF,(IS_EXTCH_MUTED?0:(opChan[i].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4)); + } + if (opChan[i].std.ex3.had) { + lfoValue=(opChan[i].std.ex3.val>7)?0:(8|(opChan[i].std.ex3.val&7)); + rWrite(0x22,lfoValue); + } + // param macros unsigned short baseAddr=chanOffs[2]|opOffs[orderedOps[i]]; DivInstrumentFM::Operator& op=chan[2].state.op[orderedOps[i]]; diff --git a/src/engine/platform/nes.cpp b/src/engine/platform/nes.cpp index 2ea68f756..657a084e0 100644 --- a/src/engine/platform/nes.cpp +++ b/src/engine/platform/nes.cpp @@ -332,7 +332,7 @@ void DivPlatformNES::tick(bool sysTick) { if (chan[4].keyOn) { if (dpcmMode && !skipRegisterWrites && dacSample>=0 && dacSamplesong.sampleLen) { unsigned int dpcmAddr=sampleOffDPCM[dacSample]; - unsigned int dpcmLen=(parent->getSample(dacSample)->lengthDPCM+15)>>4; + unsigned int dpcmLen=parent->getSample(dacSample)->lengthDPCM>>4; if (dpcmLen>255) dpcmLen=255; goingToLoop=parent->getSample(dacSample)->isLoopable(); // write DPCM diff --git a/src/engine/platform/opl.cpp b/src/engine/platform/opl.cpp index 3578dbd9c..6c3fa416d 100644 --- a/src/engine/platform/opl.cpp +++ b/src/engine/platform/opl.cpp @@ -275,11 +275,20 @@ void DivPlatformOPL::acquire_nuked(short** buf, size_t len) { if (os[3]>32767) os[3]=32767; buf[0][h]=os[0]; - if (oplType==3 || oplType==759) { + if (totalOutputs>1) { buf[1][h]=os[1]; + } + if (totalOutputs>2) { buf[2][h]=os[2]; + } + if (totalOutputs>3) { buf[3][h]=os[3]; } + if (totalOutputs==6) { + // placeholder for OPL4 + buf[4][h]=0; + buf[5][h]=0; + } } } @@ -1590,7 +1599,7 @@ void DivPlatformOPL::reset() { } */ if (downsample) { - const unsigned int downsampledRate=(unsigned int)((double)rate*rate/chipRateBase); + const unsigned int downsampledRate=(unsigned int)((double)rate*round(COLOR_NTSC/72.0)/(double)chipRateBase); OPL3_Reset(&fm,downsampledRate); } else { OPL3_Reset(&fm,rate); @@ -1671,7 +1680,7 @@ void DivPlatformOPL::reset() { } int DivPlatformOPL::getOutputCount() { - return (oplType==3 || oplType==759)?4:1; + return totalOutputs; } bool DivPlatformOPL::keyOffAffectsArp(int ch) { @@ -1730,6 +1739,7 @@ void DivPlatformOPL::setOPLType(int type, bool drums) { if (type==8950) { adpcmChan=drums?11:9; } + totalOutputs=1; break; case 3: case 4: case 759: slotsNonDrums=slotsOPL3; @@ -1748,6 +1758,7 @@ void DivPlatformOPL::setOPLType(int type, bool drums) { chipFreqBase=32768*684; downsample=true; } + totalOutputs=(type==4)?6:4; break; } chipType=type; @@ -1829,14 +1840,36 @@ void DivPlatformOPL::setFlags(const DivConfig& flags) { case 0x04: chipClock=15000000.0; break; + case 0x05: + chipClock=33868800.0; + break; default: chipClock=COLOR_NTSC*4.0; break; } CHECK_CUSTOM_CLOCK; - rate=chipClock/288; - chipRateBase=rate; - compatPan=flags.getBool("compatPan",false); + switch (flags.getInt("chipType",0)) { + case 1: // YMF289B + chipFreqBase=32768*684; + rate=chipClock/768; + chipRateBase=chipClock/684; + downsample=true; + totalOutputs=2; // Stereo output only + break; + default: // YMF262 + chipFreqBase=32768*288; + rate=chipClock/288; + chipRateBase=rate; + downsample=false; + totalOutputs=4; + break; + } + if (downsample) { + const unsigned int downsampledRate=(unsigned int)((double)rate*round(COLOR_NTSC/72.0)/(double)chipRateBase); + OPL3_Resample(&fm,downsampledRate); + } else { + OPL3_Resample(&fm,rate); + } break; case 4: switch (flags.getInt("clockSel",0)) { @@ -1860,6 +1893,7 @@ void DivPlatformOPL::setFlags(const DivConfig& flags) { chipClock=rate*288; break; } + compatPan=flags.getBool("compatPan",false); for (int i=0; i<20; i++) { oscBuf[i]->rate=rate; diff --git a/src/engine/platform/opl.h b/src/engine/platform/opl.h index f4881c29d..a417b5088 100644 --- a/src/engine/platform/opl.h +++ b/src/engine/platform/opl.h @@ -82,7 +82,7 @@ class DivPlatformOPL: public DivDispatch { const unsigned short* chanMap; const unsigned char* outChanMap; int chipFreqBase, chipRateBase; - int delay, chipType, oplType, chans, melodicChans, totalChans, adpcmChan, sampleBank; + int delay, chipType, oplType, chans, melodicChans, totalChans, adpcmChan, sampleBank, totalOutputs; unsigned char lastBusy; unsigned char drumState; unsigned char drumVol[5]; diff --git a/src/engine/platform/opll.cpp b/src/engine/platform/opll.cpp index 1d72760a6..2d283d9a6 100644 --- a/src/engine/platform/opll.cpp +++ b/src/engine/platform/opll.cpp @@ -28,6 +28,8 @@ #define CHIP_FREQBASE 1180068 +#define DRUM_VOL(_x) (drumActivated[_x]?drumVol[_x]:15) + const unsigned char cycleMapOPLL[18]={ 8, 7, 6, 7, 8, 7, 8, 6, 0, 1, 2, 7, 8, 9, 3, 4, 5, 9 }; @@ -52,7 +54,7 @@ void DivPlatformOPLL::acquire_nuked(short** buf, size_t len) { QueuedWrite& w=writes.front(); if (w.addrOrVal) { OPLL_Write(&fm,1,w.val); - //printf("write: %x = %.2x\n",w.addr,w.val); + //logV("write: %x = %.2x",w.addr,w.val); regPool[w.addr&0xff]=w.val; writes.pop(); delay=21; @@ -104,10 +106,10 @@ void DivPlatformOPLL::tick(bool sysTick) { if (i>=6 && properDrums) { drumVol[i-6]=15-chan[i].outVol; - rWrite(0x36,drumVol[0]); - rWrite(0x37,drumVol[1]|(drumVol[4]<<4)); - rWrite(0x38,drumVol[3]|(drumVol[2]<<4)); - } else if (i<6 || !drums) { + rWrite(0x36,DRUM_VOL(0)); + rWrite(0x37,DRUM_VOL(1)|(DRUM_VOL(4)<<4)); + rWrite(0x38,DRUM_VOL(3)|(DRUM_VOL(2)<<4)); + } else if (i<6 || !crapDrums) { if (i<9) { rWrite(0x30+i,((15-VOL_SCALE_LOG_BROKEN(chan[i].outVol,15-chan[i].state.op[1].tl,15))&15)|(chan[i].state.opllPreset<<4)); } @@ -230,16 +232,16 @@ void DivPlatformOPLL::tick(bool sysTick) { if (i>=6 && properDrums) { drumState&=~(0x10>>(i-6)); immWrite(0x0e,0x20|drumState); - logV("properDrums %d",i); - } else if (i>=6 && drums) { + //logV("properDrums %d",i); + } else if (i>=6 && crapDrums) { drumState&=~(0x10>>(chan[i].note%12)); immWrite(0x0e,0x20|drumState); - logV("drums %d",i); + //logV("drums %d",i); } else { if (i<9) { immWrite(0x20+i,(chan[i].freqH)|(chan[i].state.alg?0x20:0)); } - logV("normal %d",i); + //logV("normal %d",i); } //chan[i].keyOn=false; chan[i].keyOff=false; @@ -265,7 +267,21 @@ void DivPlatformOPLL::tick(bool sysTick) { if (i>=6 && properDrums && (i<9 || !noTopHatFreq)) { immWrite(0x10+drumSlot[i],freqt&0xff); immWrite(0x20+drumSlot[i],freqt>>8); - } else if (i<6 || !drums) { + switch (i) { + case 7: + lastFreqSH=0; + break; + case 8: + lastFreqTT=0; + break; + case 9: + lastFreqTT=1; + break; + case 19: + lastFreqSH=1; + break; + } + } else if (i<6 || !crapDrums) { if (i<9) { immWrite(0x10+i,freqt&0xff); } @@ -278,7 +294,7 @@ void DivPlatformOPLL::tick(bool sysTick) { immWrite(0x0e,0x20|drumState); } chan[i].keyOn=false; - } else if (chan[i].keyOn && i>=6 && drums) { + } else if (chan[i].keyOn && i>=6 && crapDrums) { //printf("%d\n",chan[i].note%12); drumState|=(0x10>>(chan[i].note%12)); immWrite(0x0e,0x20|drumState); @@ -365,22 +381,24 @@ void DivPlatformOPLL::commitState(int ch, DivInstrument* ins) { } if (chan[ch].state.opllPreset==16) { // compatible drums mode if (ch>=6) { - drums=true; - immWrite(0x16,0x20); - immWrite(0x26,0x05); - immWrite(0x16,0x20); - immWrite(0x26,0x05); - immWrite(0x17,0x50); - immWrite(0x27,0x05); - immWrite(0x17,0x50); - immWrite(0x27,0x05); - immWrite(0x18,0xC0); - immWrite(0x28,0x01); + if (!properDrumsSys) { + crapDrums=true; + immWrite(0x16,0x20); + immWrite(0x26,0x05); + immWrite(0x16,0x20); + immWrite(0x26,0x05); + immWrite(0x17,0x50); + immWrite(0x27,0x05); + immWrite(0x17,0x50); + immWrite(0x27,0x05); + immWrite(0x18,0xC0); + immWrite(0x28,0x01); + } } } else { if (ch>=6) { - if (drums) { - drums=false; + if (crapDrums) { + crapDrums=false; immWrite(0x0e,0); drumState=0; } @@ -395,10 +413,40 @@ void DivPlatformOPLL::commitState(int ch, DivInstrument* ins) { void DivPlatformOPLL::switchMode(bool mode) { if (mode==properDrums) return; if (mode) { + //logV("mode switch to DRUMS"); + for (int i=0; i<5; i++) { + drumActivated[i]=chan[6+i].keyOn; + } + immWrite(0x26,0); + immWrite(0x27,0); + immWrite(0x28,0); + immWrite(0x16,0); + immWrite(0x17,0); + immWrite(0x18,0); + immWrite(0x0e,0x20); + rWrite(0x36,DRUM_VOL(0)); + rWrite(0x37,DRUM_VOL(1)|(DRUM_VOL(4)<<4)); + rWrite(0x38,DRUM_VOL(3)|(DRUM_VOL(2)<<4)); + oldWrites[0x36]=-1; + oldWrites[0x37]=-1; + oldWrites[0x38]=-1; } else { - + //logV("mode switch to NORMAL"); + immWrite(0x0e,0x20); + immWrite(0x0e,0x00); + for (int i=6; i<9; i++) { + if (chan[i].active) { + chan[i].freqChanged=true; + chan[i].keyOff=false; + chan[i].keyOn=true; + oldWrites[0x30+i]=-1; + } + chan[i].insChanged=true; + } } + properDrums=mode; + drumState=0; } int DivPlatformOPLL::dispatch(DivCommand c) { @@ -417,18 +465,31 @@ int DivPlatformOPLL::dispatch(DivCommand c) { if (c.chan>=6 && properDrums) { // drums mode chan[c.chan].insChanged=false; + drumActivated[c.chan-6]=true; if (c.value!=DIV_NOTE_NULL) { if (chan[c.chan].state.opllPreset==16 && chan[c.chan].state.fixedDrums) { - switch (c.chan) { - case 6: - chan[c.chan].fixedFreq=(chan[c.chan].state.kickFreq&511)<<(chan[c.chan].state.kickFreq>>9); - break; - case 7: case 10: - chan[c.chan].fixedFreq=(chan[c.chan].state.snareHatFreq&511)<<(chan[c.chan].state.snareHatFreq>>9); - break; - case 8: case 9: - chan[c.chan].fixedFreq=(chan[c.chan].state.tomTopFreq&511)<<(chan[c.chan].state.tomTopFreq>>9); - break; + if (fixedAll) { + chan[6].fixedFreq=(chan[c.chan].state.kickFreq&511)<<(chan[c.chan].state.kickFreq>>9); + chan[7].fixedFreq=(chan[c.chan].state.snareHatFreq&511)<<(chan[c.chan].state.snareHatFreq>>9); + chan[8].fixedFreq=(chan[c.chan].state.tomTopFreq&511)<<(chan[c.chan].state.tomTopFreq>>9); + chan[9].fixedFreq=(chan[c.chan].state.tomTopFreq&511)<<(chan[c.chan].state.tomTopFreq>>9); + chan[10].fixedFreq=(chan[c.chan].state.snareHatFreq&511)<<(chan[c.chan].state.snareHatFreq>>9); + + chan[7].freqChanged=true; + chan[8].freqChanged=true; + chan[9].freqChanged=true; + } else { + switch (c.chan) { + case 6: + chan[c.chan].fixedFreq=(chan[c.chan].state.kickFreq&511)<<(chan[c.chan].state.kickFreq>>9); + break; + case 7: case 10: + chan[c.chan].fixedFreq=(chan[c.chan].state.snareHatFreq&511)<<(chan[c.chan].state.snareHatFreq>>9); + break; + case 8: case 9: + chan[c.chan].fixedFreq=(chan[c.chan].state.tomTopFreq&511)<<(chan[c.chan].state.tomTopFreq>>9); + break; + } } } else { chan[c.chan].baseFreq=NOTE_FREQUENCY(c.value); @@ -438,6 +499,10 @@ int DivPlatformOPLL::dispatch(DivCommand c) { } chan[c.chan].keyOn=true; chan[c.chan].active=true; + + rWrite(0x36,DRUM_VOL(0)); + rWrite(0x37,DRUM_VOL(1)|(DRUM_VOL(4)<<4)); + rWrite(0x38,DRUM_VOL(3)|(DRUM_VOL(2)<<4)); break; } @@ -448,7 +513,7 @@ int DivPlatformOPLL::dispatch(DivCommand c) { chan[c.chan].baseFreq=NOTE_FREQUENCY(c.value); chan[c.chan].note=c.value; - if (c.chan>=6 && drums) { + if (c.chan>=6 && crapDrums) { switch (chan[c.chan].note%12) { case 0: // kick drumVol[0]=(15-(chan[c.chan].outVol*(15-chan[c.chan].state.op[1].tl))/15); @@ -466,9 +531,9 @@ int DivPlatformOPLL::dispatch(DivCommand c) { drumVol[4]=(15-(chan[c.chan].outVol*(15-chan[c.chan].state.op[1].tl))/15); break; } - rWrite(0x36,drumVol[0]); - rWrite(0x37,drumVol[1]|(drumVol[4]<<4)); - rWrite(0x38,drumVol[3]|(drumVol[2]<<4)); + rWrite(0x36,DRUM_VOL(0)); + rWrite(0x37,DRUM_VOL(1)|(DRUM_VOL(4)<<4)); + rWrite(0x38,DRUM_VOL(3)|(DRUM_VOL(2)<<4)); } chan[c.chan].freqChanged=true; } @@ -503,11 +568,11 @@ int DivPlatformOPLL::dispatch(DivCommand c) { } if (c.chan>=6 && properDrums) { drumVol[c.chan-6]=15-chan[c.chan].outVol; - rWrite(0x36,drumVol[0]); - rWrite(0x37,drumVol[1]|(drumVol[4]<<4)); - rWrite(0x38,drumVol[3]|(drumVol[2]<<4)); + rWrite(0x36,DRUM_VOL(0)); + rWrite(0x37,DRUM_VOL(1)|(DRUM_VOL(4)<<4)); + rWrite(0x38,DRUM_VOL(3)|(DRUM_VOL(2)<<4)); break; - } else if (c.chan<6 || !drums) { + } else if (c.chan<6 || !crapDrums) { if (c.chan<9) { rWrite(0x30+c.chan,((15-VOL_SCALE_LOG_BROKEN(chan[c.chan].outVol,15-chan[c.chan].state.op[1].tl,15))&15)|(chan[c.chan].state.opllPreset<<4)); } @@ -565,7 +630,7 @@ int DivPlatformOPLL::dispatch(DivCommand c) { } case DIV_CMD_LEGATO: { if (c.chan>=9 && !properDrums) return 0; - if (c.chan<6 || (!drums && !properDrums)) { + if (c.chan<6 || (!crapDrums && !properDrums)) { if (chan[c.chan].insChanged) { DivInstrument* ins=parent->getIns(chan[c.chan].ins,DIV_INS_OPLL); commitState(c.chan,ins); @@ -780,12 +845,7 @@ int DivPlatformOPLL::dispatch(DivCommand c) { case DIV_CMD_FM_EXTCH: if (!properDrumsSys) break; if ((int)properDrums==c.value) break; - if (c.value) { - properDrums=true; - } else { - properDrums=false; - } - switchMode(properDrums); + switchMode(c.value); break; case DIV_CMD_MACRO_OFF: chan[c.chan].std.mask(c.value,true); @@ -840,7 +900,7 @@ void DivPlatformOPLL::forceIns() { } } } - if (drums) { // WHAT?! FIX THIS! + if (crapDrums) { // WHAT?! FIX THIS! immWrite(0x16,0x20); immWrite(0x26,0x05); immWrite(0x16,0x20); @@ -852,11 +912,25 @@ void DivPlatformOPLL::forceIns() { immWrite(0x18,0xC0); immWrite(0x28,0x01); } - // restore drum volumes + // restore drum volumes and state if (properDrums) { - rWrite(0x36,drumVol[0]); - rWrite(0x37,drumVol[1]|(drumVol[4]<<4)); - rWrite(0x38,drumVol[3]|(drumVol[2]<<4)); + rWrite(0x36,DRUM_VOL(0)); + rWrite(0x37,DRUM_VOL(1)|(DRUM_VOL(4)<<4)); + rWrite(0x38,DRUM_VOL(3)|(DRUM_VOL(2)<<4)); + + if (lastFreqSH==0) { + chan[7].freqChanged=true; + } else if (lastFreqSH==1) { + chan[10].freqChanged=true; + } + + if (lastFreqTT==0) { + chan[8].freqChanged=true; + } else if (lastFreqTT==1) { + chan[9].freqChanged=true; + } + + chan[6].freqChanged=true; } drumState=0; } @@ -937,16 +1011,18 @@ void DivPlatformOPLL::reset() { drumState=0; lastCustomMemory=-1; - drumVol[0]=0; - drumVol[1]=0; - drumVol[2]=0; - drumVol[3]=0; - drumVol[4]=0; + for (int i=0; i<5; i++) { + drumVol[i]=0; + drumActivated[i]=true; + } delay=0; - drums=false; + crapDrums=false; properDrums=properDrumsSys; + lastFreqSH=-1; + lastFreqTT=-1; + if (properDrums) { immWrite(0x0e,0x20); } @@ -1012,6 +1088,7 @@ void DivPlatformOPLL::setFlags(const DivConfig& flags) { oscBuf[i]->rate=rate/2; } noTopHatFreq=flags.getBool("noTopHatFreq",false); + fixedAll=flags.getBool("fixedAll",false); } int DivPlatformOPLL::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) { diff --git a/src/engine/platform/opll.h b/src/engine/platform/opll.h index f5d79b39c..8bb6baa2c 100644 --- a/src/engine/platform/opll.h +++ b/src/engine/platform/opll.h @@ -59,12 +59,18 @@ class DivPlatformOPLL: public DivDispatch { unsigned char lastBusy; unsigned char drumState; unsigned char drumVol[5]; + bool drumActivated[5]; + + // -1: undefined + // 0: snare/tom + // 1: hi-hat/top + signed char lastFreqSH, lastFreqTT; unsigned char regPool[256]; bool useYMFM; - bool drums; - bool properDrums, properDrumsSys, noTopHatFreq; + bool crapDrums; + bool properDrums, properDrumsSys, noTopHatFreq, fixedAll; bool vrc7; unsigned char patchSet; diff --git a/src/engine/platform/pcspkr.cpp b/src/engine/platform/pcspkr.cpp index a275c6350..593c41b8a 100644 --- a/src/engine/platform/pcspkr.cpp +++ b/src/engine/platform/pcspkr.cpp @@ -17,9 +17,11 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#define _USE_MATH_DEFINES #include "pcspkr.h" #include "../engine.h" #include "../../ta-log.h" + #include #ifdef __linux__ @@ -190,9 +192,6 @@ const char** DivPlatformPCSpeaker::getRegisterSheet() { return regCheatSheetPCSpeaker; } -const float cut=0.05; -const float reso=0.06; - void DivPlatformPCSpeaker::acquire_unfilt(short** buf, size_t len) { int out=0; for (size_t i=0; i((freq+16)>>1) && !isMuted[0])?1:0; - low+=0.04*band; - band+=0.04*(next-low-band); + low+=cut*band; + band+=cut*(next-low-band); float out=(low+band)*0.75; if (out>1.0) out=1.0; if (out<-1.0) out=-1.0; @@ -612,6 +611,17 @@ void DivPlatformPCSpeaker::setFlags(const DivConfig& flags) { rate=chipClock/PCSPKR_DIVIDER; speakerType=flags.getInt("speakerType",0)&3; oscBuf->rate=rate; + + switch (speakerType) { + case 1: + cut=2.0*sin(M_PI*1900.0/rate); + reso=0.0; + break; + default: + cut=2.0*sin(M_PI*2375.0/rate); + reso=0.06; + break; + } } void DivPlatformPCSpeaker::notifyInsDeletion(void* ins) { diff --git a/src/engine/platform/pcspkr.h b/src/engine/platform/pcspkr.h index 0437a90c4..d9315b5ec 100644 --- a/src/engine/platform/pcspkr.h +++ b/src/engine/platform/pcspkr.h @@ -57,6 +57,9 @@ class DivPlatformPCSpeaker: public DivDispatch { float low, band; float low2, high2, band2; float low3, band3; + float cut; + float reso; + unsigned short freq, lastFreq; unsigned char regPool[2]; diff --git a/src/engine/platform/sms.cpp b/src/engine/platform/sms.cpp index 640f364ea..76aa62fcb 100644 --- a/src/engine/platform/sms.cpp +++ b/src/engine/platform/sms.cpp @@ -296,6 +296,10 @@ void DivPlatformSMS::tick(bool sysTick) { rWrite(0,0x90|(i<<5)|(isMuted[i]?15:(15-(chan[i].outVol&15)))); chan[i].writeVol=false; } + if (chan[i].keyOff) { + rWrite(0,0x9f|i<<5); + chan[i].keyOff=false; + } } } @@ -309,6 +313,7 @@ int DivPlatformSMS::dispatch(DivCommand c) { chan[c.chan].actualNote=c.value; } chan[c.chan].active=true; + chan[c.chan].keyOff=false; //if (!parent->song.brokenOutVol2) { chan[c.chan].writeVol=true; chan[c.chan].outVol=chan[c.chan].vol; @@ -321,7 +326,7 @@ int DivPlatformSMS::dispatch(DivCommand c) { break; case DIV_CMD_NOTE_OFF: chan[c.chan].active=false; - rWrite(0,0x9f|c.chan<<5); + chan[c.chan].keyOff=true; chan[c.chan].macroInit(NULL); break; case DIV_CMD_NOTE_OFF_ENV: diff --git a/src/engine/platform/snes.cpp b/src/engine/platform/snes.cpp index a03121613..a32492fcf 100644 --- a/src/engine/platform/snes.cpp +++ b/src/engine/platform/snes.cpp @@ -754,6 +754,8 @@ void DivPlatformSNES::initEcho() { } void DivPlatformSNES::reset() { + writes.clear(); + memcpy(sampleMem,copyOfSampleMem,65536); dsp.init(sampleMem); dsp.set_output(NULL,0); diff --git a/src/engine/platform/sound/c140.c b/src/engine/platform/sound/c140.c new file mode 100644 index 000000000..3d48c1300 --- /dev/null +++ b/src/engine/platform/sound/c140.c @@ -0,0 +1,205 @@ +/* + +============================================================================ + +MODIFIED Namco C140 sound emulator - MODIFIED VERSION +by cam900 + +MODIFICATION by tildearrow - adds muting function +THIS IS NOT THE ORIGINAL VERSION - you can find the original one in +commit 72d04777c013988ed8cf6da27c62a9d784a59dff + +This file is licensed under zlib license. + +============================================================================ + +zlib License + +(C) 2023-present cam900 and contributors + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + +============================================================================ + +TODO: +- unknown registers (Bit 6 of control register, etc) +- Internal timer + +*/ + +#include "c140.h" + +static int c140_max(int a, int b) { return (a > b) ? a : b; } +static int c140_min(int a, int b) { return (a < b) ? a : b; } +static int c140_clamp(int v, int min, int max) { return c140_min(c140_max(v,min),max); } +static int c140_bit(int val, int bit) { return (val >> bit) & 1; } +static int c140_bitfield(int val, int bit, int len) { return (val >> bit) & ((1 << len) - 1);} + +void c140_tick(struct c140_t *c140, const int cycle) +{ + c140->lout = 0; + c140->rout = 0; + for (int i = 0; i < 24; i++) + { + c140_voice_tick(c140, i, cycle); + c140->lout += c140->voice[i].lout; + c140->rout += c140->voice[i].rout; + } +} + +void c140_voice_tick(struct c140_t *c140, const unsigned char v, const int cycle) +{ + struct c140_voice_t *voice = &c140->voice[v]; + if (voice->busy && voice->keyon) + { + for (int c = 0; c < cycle; c++) + { + voice->frac += voice->freq; + if (voice->frac > 0xffff) + { + voice->addr += voice->frac >> 16; + if (voice->addr > voice->end_addr) + { + if (voice->loop) + { + voice->addr = (voice->addr + voice->loop_addr) - voice->end_addr; + } + else + { + voice->keyon = false; + voice->lout = 0; + voice->rout = 0; + return; + } + } + voice->frac &= 0xffff; + } + } + if (!voice->muted) + { + // fetch 12 bit sample + signed short s1 = c140->sample_mem[((unsigned int)(voice->bank) << 16) | voice->addr] & ~0xf; + signed short s2 = c140->sample_mem[((unsigned int)(voice->bank) << 16) | ((voice->addr + 1) & 0xffff)] & ~0xf; + if (voice->compressed) + { + s1 = c140->mulaw[(s1 >> 8) & 0xff]; + s2 = c140->mulaw[(s2 >> 8) & 0xff]; + } + // interpolate + signed int sample = s1 + (((voice->frac) * (s2 - s1)) >> 16); + voice->lout = sample * voice->lvol; + voice->rout = sample * voice->rvol; + } + else + { + voice->lout = 0; + voice->rout = 0; + } + } + else + { + voice->lout = 0; + voice->rout = 0; + } +} + +void c140_keyon(struct c140_voice_t *c140_voice) +{ + c140_voice->busy = true; + c140_voice->keyon = true; + c140_voice->frac = 0; + c140_voice->addr = c140_voice->start_addr; +} + +void c140_init(struct c140_t *c140) +{ + // u-law table verified from Wii Virtual Console Arcade Starblade + for (int i = 0; i < 256; i++) + { + const unsigned char exponent = c140_bitfield(i, 0, 3); + const unsigned char mantissa = c140_bitfield(i, 3, 4); + if (c140_bit(i, 7)) + { + c140->mulaw[i] = (signed short)(((exponent ? 0xfe00 : 0xff00) | (mantissa << 4)) + << (exponent ? exponent - 1 : 0)); + } + else + { + c140->mulaw[i] = (signed short)(((exponent ? 0x100 : 0) | (mantissa << 4)) + << (exponent ? exponent - 1 : 0)); + } + } + for (int i = 0; i < 24; i++) + { + c140->voice[i].muted = false; + } +} + +void c140_reset(struct c140_t *c140) +{ + for (int i = 0; i < 24; i++) + { + c140->voice[i].busy = false; + c140->voice[i].keyon = false; + c140->voice[i].freq = 0; + c140->voice[i].bank = 0; + c140->voice[i].start_addr = 0; + c140->voice[i].loop_addr = 0; + c140->voice[i].end_addr = 0; + c140->voice[i].lvol = 0; + c140->voice[i].rvol = 0; + c140->voice[i].compressed = false; + c140->voice[i].loop = false; + c140->voice[i].addr = 0; + c140->voice[i].frac = 0; + c140->voice[i].lout = 0; + c140->voice[i].rout = 0; + } +} + +void c140_write(struct c140_t *c140, const unsigned short addr, const unsigned char data) +{ + // voice register + if (addr < 0x180) + { + struct c140_voice_t *voice = &c140->voice[addr >> 4]; + switch (addr & 0xf) + { + case 0x0: voice->rvol = data; break; + case 0x1: voice->lvol = data; break; + case 0x2: voice->freq = (voice->freq & ~0xff00) | (unsigned int)(data << 8); break; + case 0x3: voice->freq = (voice->freq & ~0x00ff) | data; break; + case 0x4: voice->bank = data; break; + case 0x5: + voice->compressed = c140_bit(data, 3); + voice->loop = c140_bit(data, 4); + if (data & 0x80) + c140_keyon(voice); + else + voice->busy = false; + break; + case 0x6: voice->start_addr = (voice->start_addr & ~0xff00) | (unsigned int)(data << 8); break; + case 0x7: voice->start_addr = (voice->start_addr & ~0x00ff) | data; break; + case 0x8: voice->end_addr = (voice->end_addr & ~0xff00) | (unsigned int)(data << 8); break; + case 0x9: voice->end_addr = (voice->end_addr & ~0x00ff) | data; break; + case 0xa: voice->loop_addr = (voice->loop_addr & ~0xff00) | (unsigned int)(data << 8); break; + case 0xb: voice->loop_addr = (voice->loop_addr & ~0x00ff) | data; break; + default: break; + } + } + // Timer +} diff --git a/src/engine/platform/sound/c140.h b/src/engine/platform/sound/c140.h new file mode 100644 index 000000000..21a8b8a47 --- /dev/null +++ b/src/engine/platform/sound/c140.h @@ -0,0 +1,96 @@ +/* + +============================================================================ + +MODIFIED Namco C140 sound emulator - MODIFIED VERSION +by cam900 + +MODIFICATION by tildearrow - adds muting function +THIS IS NOT THE ORIGINAL VERSION - you can find the original one in +commit 72d04777c013988ed8cf6da27c62a9d784a59dff + +This file is licensed under zlib license. + +============================================================================ + +zlib License + +(C) 2023-present cam900 and contributors + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + +============================================================================ + +TODO: +- unknown registers (Bit 6 of control register, etc) +- Internal timer + +*/ + +#ifndef _C140_EMU_H +#define _C140_EMU_H + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + +struct c140_voice_t +{ + bool muted; // muted - can be set by user + bool busy; // busy flag + bool keyon; // key on flag + unsigned short freq; // sample frequency + unsigned char bank; // sample bank + unsigned short start_addr; // sample start address + unsigned short loop_addr; // sample loop address + unsigned short end_addr; // sample end address + int lvol, rvol; // left/right volume + bool compressed; // compressed sample flag + bool loop; // loop flag + unsigned short addr; // sample address + int frac; // frequency counter (.16 fixed point) + int lout, rout; // left/right output +}; + +struct c140_t +{ + struct c140_voice_t voice[24]; + signed int lout, rout; + signed short mulaw[256]; + signed short *sample_mem; +}; + +void c140_tick(struct c140_t *c140, const int cycle); + +void c140_voice_tick(struct c140_t *c140, const unsigned char v, const int cycle); + +void c140_keyon(struct c140_voice_t *c140_voice); + +void c140_write(struct c140_t *c140, const unsigned short addr, const unsigned char data); + +void c140_init(struct c140_t *c140); + +void c140_reset(struct c140_t *c140); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _C140_EMU_H diff --git a/src/engine/platform/ted.cpp b/src/engine/platform/ted.cpp index be5a379e7..a1e431bb4 100644 --- a/src/engine/platform/ted.cpp +++ b/src/engine/platform/ted.cpp @@ -257,6 +257,10 @@ void DivPlatformTED::forceIns() { updateCtrl=true; } +bool DivPlatformTED::isVolGlobal() { + return true; +} + void* DivPlatformTED::getChanState(int ch) { return &chan[ch]; } diff --git a/src/engine/platform/ted.h b/src/engine/platform/ted.h index 25c41e3d8..58b4d0b7d 100644 --- a/src/engine/platform/ted.h +++ b/src/engine/platform/ted.h @@ -54,6 +54,7 @@ class DivPlatformTED: public DivDispatch { public: void acquire(short** buf, size_t len); int dispatch(DivCommand c); + bool isVolGlobal(); void* getChanState(int chan); DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); diff --git a/src/engine/platform/vic20.cpp b/src/engine/platform/vic20.cpp index bd25b5284..05705f7c7 100644 --- a/src/engine/platform/vic20.cpp +++ b/src/engine/platform/vic20.cpp @@ -278,6 +278,10 @@ void DivPlatformVIC20::forceIns() { } } +bool DivPlatformVIC20::isVolGlobal() { + return true; +} + void* DivPlatformVIC20::getChanState(int ch) { return &chan[ch]; } diff --git a/src/engine/platform/vic20.h b/src/engine/platform/vic20.h index e233d9844..b1c1533ab 100644 --- a/src/engine/platform/vic20.h +++ b/src/engine/platform/vic20.h @@ -46,6 +46,7 @@ class DivPlatformVIC20: public DivDispatch { public: void acquire(short** buf, size_t len); int dispatch(DivCommand c); + bool isVolGlobal(); void* getChanState(int chan); DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); diff --git a/src/engine/platform/ym2203.cpp b/src/engine/platform/ym2203.cpp index 68cccca45..02e92e191 100644 --- a/src/engine/platform/ym2203.cpp +++ b/src/engine/platform/ym2203.cpp @@ -670,6 +670,7 @@ int DivPlatformYM2203::dispatch(DivCommand c) { } case DIV_CMD_FM_EXTCH: { if (extSys) { + if (extMode==(bool)c.value) break; extMode=c.value; immWrite(0x27,extMode?0x40:0); } diff --git a/src/engine/platform/ym2203ext.cpp b/src/engine/platform/ym2203ext.cpp index 8842b3cc8..31294bd4f 100644 --- a/src/engine/platform/ym2203ext.cpp +++ b/src/engine/platform/ym2203ext.cpp @@ -138,6 +138,7 @@ int DivPlatformYM2203Ext::dispatch(DivCommand c) { opChan[ch].insChanged=true; } opChan[ch].ins=c.value; + chan[extChanOffs].ins=opChan[ch].ins; break; case DIV_CMD_PITCH: { opChan[ch].pitch=c.value; @@ -182,8 +183,15 @@ int DivPlatformYM2203Ext::dispatch(DivCommand c) { break; } case DIV_CMD_FM_EXTCH: { + if (extMode==(bool)c.value) break; extMode=c.value; immWrite(0x27,extMode?0x40:0); + if (!extMode) { + for (int i=0; i<4; i++) { + opChan[i].insChanged=true; + } + chan[extChanOffs].insChanged=true; + } break; } case DIV_CMD_FM_FB: { @@ -444,6 +452,27 @@ void DivPlatformYM2203Ext::tick(bool sysTick) { opChan[i].freqChanged=true; } + // channel macros + if (opChan[i].std.alg.had) { + chan[extChanOffs].state.alg=opChan[i].std.alg.val; + rWrite(chanOffs[extChanOffs]+ADDR_FB_ALG,(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + if (!parent->song.algMacroBehavior) for (int j=0; j<4; j++) { + unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[j]; + DivInstrumentFM::Operator& op=chan[extChanOffs].state.op[j]; + if (isOpMuted[j] || !op.enable) { + rWrite(baseAddr+0x40,127); + } else { + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[j].outVol&0x7f,127)); + } + } + } + if (i==0 || fbAllOps) { + if (opChan[i].std.fb.had) { + chan[extChanOffs].state.fb=opChan[i].std.fb.val; + rWrite(chanOffs[extChanOffs]+ADDR_FB_ALG,(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + } + } + // param macros unsigned short baseAddr=chanOffs[2]|opOffs[orderedOps[i]]; DivInstrumentFM::Operator& op=chan[2].state.op[orderedOps[i]]; @@ -574,13 +603,17 @@ void DivPlatformYM2203Ext::muteChannel(int ch, bool mute) { } isOpMuted[ch-2]=mute; - int ordch=orderedOps[ch-2]; - unsigned short baseAddr=chanOffs[2]|opOffs[ordch]; - DivInstrumentFM::Operator op=chan[2].state.op[ordch]; - if (isOpMuted[ch-2] || !op.enable) { - rWrite(baseAddr+0x40,127); - } else { - rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch-2].outVol&0x7f,127)); + DivPlatformYM2203::muteChannel(extChanOffs,IS_EXTCH_MUTED); + + if (extMode) { + int ordch=orderedOps[ch-2]; + unsigned short baseAddr=chanOffs[2]|opOffs[ordch]; + DivInstrumentFM::Operator op=chan[2].state.op[ordch]; + if (isOpMuted[ch-2] || !op.enable) { + rWrite(baseAddr+0x40,127); + } else { + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch-2].outVol&0x7f,127)); + } } } diff --git a/src/engine/platform/ym2608.cpp b/src/engine/platform/ym2608.cpp index 02a5ffa08..183533f81 100644 --- a/src/engine/platform/ym2608.cpp +++ b/src/engine/platform/ym2608.cpp @@ -1153,6 +1153,7 @@ int DivPlatformYM2608::dispatch(DivCommand c) { } case DIV_CMD_FM_EXTCH: { if (extSys) { + if (extMode==(bool)c.value) break; extMode=c.value; immWrite(0x27,extMode?0x40:0); } diff --git a/src/engine/platform/ym2608ext.cpp b/src/engine/platform/ym2608ext.cpp index a9fd60f10..860c370fe 100644 --- a/src/engine/platform/ym2608ext.cpp +++ b/src/engine/platform/ym2608ext.cpp @@ -141,6 +141,7 @@ int DivPlatformYM2608Ext::dispatch(DivCommand c) { opChan[ch].insChanged=true; } opChan[ch].ins=c.value; + chan[extChanOffs].ins=opChan[ch].ins; break; case DIV_CMD_PANNING: { if (c.value==0 && c.value2==0) { @@ -200,8 +201,15 @@ int DivPlatformYM2608Ext::dispatch(DivCommand c) { break; } case DIV_CMD_FM_EXTCH: { + if (extMode==(bool)c.value) break; extMode=c.value; immWrite(0x27,extMode?0x40:0); + if (!extMode) { + for (int i=0; i<4; i++) { + opChan[i].insChanged=true; + } + chan[extChanOffs].insChanged=true; + } break; } case DIV_CMD_FM_LFO: { @@ -467,6 +475,40 @@ void DivPlatformYM2608Ext::tick(bool sysTick) { opChan[i].freqChanged=true; } + // channel macros + if (opChan[i].std.alg.had) { + chan[extChanOffs].state.alg=opChan[i].std.alg.val; + rWrite(chanOffs[extChanOffs]+ADDR_FB_ALG,(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + if (!parent->song.algMacroBehavior) for (int j=0; j<4; j++) { + unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[j]; + DivInstrumentFM::Operator& op=chan[extChanOffs].state.op[j]; + if (isOpMuted[j] || !op.enable) { + rWrite(baseAddr+0x40,127); + } else { + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[j].outVol&0x7f,127)); + } + } + } + if (i==0 || fbAllOps) { + if (opChan[i].std.fb.had) { + chan[extChanOffs].state.fb=opChan[i].std.fb.val; + rWrite(chanOffs[extChanOffs]+ADDR_FB_ALG,(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + } + } + if (opChan[i].std.fms.had) { + chan[extChanOffs].state.fms=opChan[i].std.fms.val; + rWrite(chanOffs[extChanOffs]+ADDR_LRAF,(IS_EXTCH_MUTED?0:(opChan[i].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4)); + } + if (opChan[i].std.ams.had) { + chan[extChanOffs].state.ams=opChan[i].std.ams.val; + rWrite(chanOffs[extChanOffs]+ADDR_LRAF,(IS_EXTCH_MUTED?0:(opChan[i].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4)); + } + if (opChan[i].std.ex3.had) { + lfoValue=(opChan[i].std.ex3.val>7)?0:(8|(opChan[i].std.ex3.val&7)); + rWrite(0x22,lfoValue); + } + + // param macros unsigned short baseAddr=chanOffs[2]|opOffs[orderedOps[i]]; DivInstrumentFM::Operator& op=chan[2].state.op[orderedOps[i]]; @@ -596,16 +638,20 @@ void DivPlatformYM2608Ext::muteChannel(int ch, bool mute) { } isOpMuted[ch-2]=mute; - int ordch=orderedOps[ch-2]; - unsigned short baseAddr=chanOffs[2]|opOffs[ordch]; - DivInstrumentFM::Operator op=chan[2].state.op[ordch]; - if (isOpMuted[ch-2] || !op.enable) { - rWrite(baseAddr+0x40,127); - } else { - rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch-2].outVol&0x7f,127)); - } + DivPlatformYM2608::muteChannel(extChanOffs,IS_EXTCH_MUTED); + + if (extMode) { + int ordch=orderedOps[ch-2]; + unsigned short baseAddr=chanOffs[2]|opOffs[ordch]; + DivInstrumentFM::Operator op=chan[2].state.op[ordch]; + if (isOpMuted[ch-2] || !op.enable) { + rWrite(baseAddr+0x40,127); + } else { + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch-2].outVol&0x7f,127)); + } - rWrite(chanOffs[2]+0xb4,(IS_EXTCH_MUTED?0:(opChan[ch-2].pan<<6))|(chan[2].state.fms&7)|((chan[2].state.ams&3)<<4)); + rWrite(chanOffs[2]+0xb4,(IS_EXTCH_MUTED?0:(opChan[ch-2].pan<<6))|(chan[2].state.fms&7)|((chan[2].state.ams&3)<<4)); + } } void DivPlatformYM2608Ext::forceIns() { diff --git a/src/engine/platform/ym2610.cpp b/src/engine/platform/ym2610.cpp index 4fbf78595..5a1d80b58 100644 --- a/src/engine/platform/ym2610.cpp +++ b/src/engine/platform/ym2610.cpp @@ -1125,6 +1125,7 @@ int DivPlatformYM2610::dispatch(DivCommand c) { } case DIV_CMD_FM_EXTCH: { if (extSys) { + if (extMode==(bool)c.value) break; extMode=c.value; immWrite(0x27,extMode?0x40:0); } diff --git a/src/engine/platform/ym2610b.cpp b/src/engine/platform/ym2610b.cpp index 4fff47279..d65e50140 100644 --- a/src/engine/platform/ym2610b.cpp +++ b/src/engine/platform/ym2610b.cpp @@ -1192,6 +1192,7 @@ int DivPlatformYM2610B::dispatch(DivCommand c) { } case DIV_CMD_FM_EXTCH: { if (extSys) { + if (extMode==(bool)c.value) break; extMode=c.value; immWrite(0x27,extMode?0x40:0); } diff --git a/src/engine/platform/ym2610bext.cpp b/src/engine/platform/ym2610bext.cpp index 79239c559..ff2a398fd 100644 --- a/src/engine/platform/ym2610bext.cpp +++ b/src/engine/platform/ym2610bext.cpp @@ -137,6 +137,7 @@ int DivPlatformYM2610BExt::dispatch(DivCommand c) { opChan[ch].insChanged=true; } opChan[ch].ins=c.value; + chan[extChanOffs].ins=opChan[ch].ins; break; case DIV_CMD_PANNING: { if (c.value==0 && c.value2==0) { @@ -196,8 +197,15 @@ int DivPlatformYM2610BExt::dispatch(DivCommand c) { break; } case DIV_CMD_FM_EXTCH: { + if (extMode==(bool)c.value) break; extMode=c.value; immWrite(0x27,extMode?0x40:0); + if (!extMode) { + for (int i=0; i<4; i++) { + opChan[i].insChanged=true; + } + chan[extChanOffs].insChanged=true; + } break; } case DIV_CMD_FM_LFO: { @@ -463,6 +471,39 @@ void DivPlatformYM2610BExt::tick(bool sysTick) { opChan[i].freqChanged=true; } + // channel macros + if (opChan[i].std.alg.had) { + chan[extChanOffs].state.alg=opChan[i].std.alg.val; + rWrite(chanOffs[extChanOffs]+ADDR_FB_ALG,(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + if (!parent->song.algMacroBehavior) for (int j=0; j<4; j++) { + unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[j]; + DivInstrumentFM::Operator& op=chan[extChanOffs].state.op[j]; + if (isOpMuted[j] || !op.enable) { + rWrite(baseAddr+0x40,127); + } else { + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[j].outVol&0x7f,127)); + } + } + } + if (i==0 || fbAllOps) { + if (opChan[i].std.fb.had) { + chan[extChanOffs].state.fb=opChan[i].std.fb.val; + rWrite(chanOffs[extChanOffs]+ADDR_FB_ALG,(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + } + } + if (opChan[i].std.fms.had) { + chan[extChanOffs].state.fms=opChan[i].std.fms.val; + rWrite(chanOffs[extChanOffs]+ADDR_LRAF,(IS_EXTCH_MUTED?0:(opChan[i].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4)); + } + if (opChan[i].std.ams.had) { + chan[extChanOffs].state.ams=opChan[i].std.ams.val; + rWrite(chanOffs[extChanOffs]+ADDR_LRAF,(IS_EXTCH_MUTED?0:(opChan[i].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4)); + } + if (opChan[i].std.ex3.had) { + lfoValue=(opChan[i].std.ex3.val>7)?0:(8|(opChan[i].std.ex3.val&7)); + rWrite(0x22,lfoValue); + } + // param macros unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[orderedOps[i]]; DivInstrumentFM::Operator& op=chan[extChanOffs].state.op[orderedOps[i]]; @@ -592,16 +633,20 @@ void DivPlatformYM2610BExt::muteChannel(int ch, bool mute) { } isOpMuted[ch-extChanOffs]=mute; - int ordch=orderedOps[ch-extChanOffs]; - unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[ordch]; - DivInstrumentFM::Operator op=chan[extChanOffs].state.op[ordch]; - if (isOpMuted[ch-extChanOffs] || !op.enable) { - rWrite(baseAddr+0x40,127); - } else { - rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch-extChanOffs].outVol&0x7f,127)); - } + DivPlatformYM2610B::muteChannel(extChanOffs,IS_EXTCH_MUTED); + + if (extMode) { + int ordch=orderedOps[ch-extChanOffs]; + unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[ordch]; + DivInstrumentFM::Operator op=chan[extChanOffs].state.op[ordch]; + if (isOpMuted[ch-extChanOffs] || !op.enable) { + rWrite(baseAddr+0x40,127); + } else { + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch-extChanOffs].outVol&0x7f,127)); + } - rWrite(chanOffs[extChanOffs]+0xb4,(IS_EXTCH_MUTED?0:(opChan[ch-extChanOffs].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4)); + rWrite(chanOffs[extChanOffs]+0xb4,(IS_EXTCH_MUTED?0:(opChan[ch-extChanOffs].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4)); + } } void DivPlatformYM2610BExt::forceIns() { diff --git a/src/engine/platform/ym2610ext.cpp b/src/engine/platform/ym2610ext.cpp index a85e9cadd..65124f474 100644 --- a/src/engine/platform/ym2610ext.cpp +++ b/src/engine/platform/ym2610ext.cpp @@ -137,6 +137,7 @@ int DivPlatformYM2610Ext::dispatch(DivCommand c) { opChan[ch].insChanged=true; } opChan[ch].ins=c.value; + chan[extChanOffs].ins=opChan[ch].ins; break; case DIV_CMD_PANNING: { if (c.value==0 && c.value2==0) { @@ -196,8 +197,15 @@ int DivPlatformYM2610Ext::dispatch(DivCommand c) { break; } case DIV_CMD_FM_EXTCH: { + if (extMode==(bool)c.value) break; extMode=c.value; immWrite(0x27,extMode?0x40:0); + if (!extMode) { + for (int i=0; i<4; i++) { + opChan[i].insChanged=true; + } + chan[extChanOffs].insChanged=true; + } break; } case DIV_CMD_FM_LFO: { @@ -463,6 +471,39 @@ void DivPlatformYM2610Ext::tick(bool sysTick) { opChan[i].freqChanged=true; } + // channel macros + if (opChan[i].std.alg.had) { + chan[extChanOffs].state.alg=opChan[i].std.alg.val; + rWrite(chanOffs[extChanOffs]+ADDR_FB_ALG,(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + if (!parent->song.algMacroBehavior) for (int j=0; j<4; j++) { + unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[j]; + DivInstrumentFM::Operator& op=chan[extChanOffs].state.op[j]; + if (isOpMuted[j] || !op.enable) { + rWrite(baseAddr+0x40,127); + } else { + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[j].outVol&0x7f,127)); + } + } + } + if (i==0 || fbAllOps) { + if (opChan[i].std.fb.had) { + chan[extChanOffs].state.fb=opChan[i].std.fb.val; + rWrite(chanOffs[extChanOffs]+ADDR_FB_ALG,(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + } + } + if (opChan[i].std.fms.had) { + chan[extChanOffs].state.fms=opChan[i].std.fms.val; + rWrite(chanOffs[extChanOffs]+ADDR_LRAF,(IS_EXTCH_MUTED?0:(opChan[i].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4)); + } + if (opChan[i].std.ams.had) { + chan[extChanOffs].state.ams=opChan[i].std.ams.val; + rWrite(chanOffs[extChanOffs]+ADDR_LRAF,(IS_EXTCH_MUTED?0:(opChan[i].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4)); + } + if (opChan[i].std.ex3.had) { + lfoValue=(opChan[i].std.ex3.val>7)?0:(8|(opChan[i].std.ex3.val&7)); + rWrite(0x22,lfoValue); + } + // param macros unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[orderedOps[i]]; DivInstrumentFM::Operator& op=chan[extChanOffs].state.op[orderedOps[i]]; @@ -592,16 +633,20 @@ void DivPlatformYM2610Ext::muteChannel(int ch, bool mute) { } isOpMuted[ch-extChanOffs]=mute; - int ordch=orderedOps[ch-extChanOffs]; - unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[ordch]; - DivInstrumentFM::Operator op=chan[extChanOffs].state.op[ordch]; - if (isOpMuted[ch-extChanOffs] || !op.enable) { - rWrite(baseAddr+0x40,127); - } else { - rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch-extChanOffs].outVol&0x7f,127)); - } + DivPlatformYM2610::muteChannel(extChanOffs,IS_EXTCH_MUTED); + + if (extMode) { + int ordch=orderedOps[ch-extChanOffs]; + unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[ordch]; + DivInstrumentFM::Operator op=chan[extChanOffs].state.op[ordch]; + if (isOpMuted[ch-extChanOffs] || !op.enable) { + rWrite(baseAddr+0x40,127); + } else { + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch-extChanOffs].outVol&0x7f,127)); + } - rWrite(chanOffs[extChanOffs]+0xb4,(IS_EXTCH_MUTED?0:(opChan[ch-extChanOffs].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4)); + rWrite(chanOffs[extChanOffs]+0xb4,(IS_EXTCH_MUTED?0:(opChan[ch-extChanOffs].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4)); + } } void DivPlatformYM2610Ext::forceIns() { diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index aabce5c6a..d15933d65 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -1307,7 +1307,7 @@ bool DivEngine::nextTick(bool noAccum, bool inhibitLowLat) { } else { DivMacroInt* macroInt=disCont[dispatchOfChan[note.channel]].dispatch->getChanMacroInt(dispatchChanOfChan[note.channel]); if (macroInt!=NULL) { - if (macroInt->hasRelease) { + if (macroInt->hasRelease && !disCont[dispatchOfChan[note.channel]].dispatch->isVolGlobal()) { dispatchCmd(DivCommand(DIV_CMD_NOTE_OFF_ENV,note.channel)); } else { dispatchCmd(DivCommand(DIV_CMD_NOTE_OFF,note.channel)); @@ -1967,8 +1967,8 @@ void DivEngine::nextBuf(float** in, float** out, int inChans, int outChans, unsi if (cycles<=0) { // we have to tick if (nextTick()) { - totalTicks=0; - totalSeconds=0; + /*totalTicks=0; + totalSeconds=0;*/ lastLoopPos=size-(runLeftG>>MASTER_CLOCK_PREC); logD("last loop pos: %d for a size of %d and runLeftG of %d",lastLoopPos,size,runLeftG); totalLoops++; diff --git a/src/engine/sample.cpp b/src/engine/sample.cpp index 437b8bbcc..c2ff85a6a 100644 --- a/src/engine/sample.cpp +++ b/src/engine/sample.cpp @@ -269,6 +269,9 @@ int DivSample::getSampleOffset(int offset, int length, DivSampleDepth depth) { case DIV_SAMPLE_DEPTH_VOX: off=(offset+1)/2; break; + case DIV_SAMPLE_DEPTH_MULAW: + off=offset; + break; case DIV_SAMPLE_DEPTH_16BIT: off=offset*2; break; @@ -316,6 +319,10 @@ int DivSample::getSampleOffset(int offset, int length, DivSampleDepth depth) { off=(offset+1)/2; len=(length+1)/2; break; + case DIV_SAMPLE_DEPTH_MULAW: + off=offset; + len=length; + break; case DIV_SAMPLE_DEPTH_16BIT: off=offset*2; len=length*2; @@ -365,6 +372,9 @@ int DivSample::getEndPosition(DivSampleDepth depth) { case DIV_SAMPLE_DEPTH_VOX: off=lengthVOX; break; + case DIV_SAMPLE_DEPTH_MULAW: + off=lengthMuLaw; + break; case DIV_SAMPLE_DEPTH_16BIT: off=length16; break; @@ -480,6 +490,7 @@ bool DivSample::saveRaw(const char* path) { // 16-bit memory is padded to 512, to make things easier for ADPCM-A/B. bool DivSample::initInternal(DivSampleDepth d, int count) { + logV("initInternal(%d,%d)",(int)d,count); switch (d) { case DIV_SAMPLE_DEPTH_1BIT: // 1-bit if (data1!=NULL) delete[] data1; @@ -489,7 +500,7 @@ bool DivSample::initInternal(DivSampleDepth d, int count) { break; case DIV_SAMPLE_DEPTH_1BIT_DPCM: // DPCM if (dataDPCM!=NULL) delete[] dataDPCM; - lengthDPCM=1+((((count+7)/8)+15)&(~15)); + lengthDPCM=1+((((count-1)/8)+15)&(~15)); dataDPCM=new unsigned char[lengthDPCM]; memset(dataDPCM,0xaa,lengthDPCM); break; @@ -537,6 +548,12 @@ bool DivSample::initInternal(DivSampleDepth d, int count) { dataVOX=new unsigned char[lengthVOX]; memset(dataVOX,0,lengthVOX); break; + case DIV_SAMPLE_DEPTH_MULAW: // 8-bit µ-law + if (dataMuLaw!=NULL) delete[] dataMuLaw; + lengthMuLaw=count; + dataMuLaw=new unsigned char[(count+4095)&(~0xfff)]; + memset(dataMuLaw,0,(count+4095)&(~0xfff)); + break; case DIV_SAMPLE_DEPTH_16BIT: // 16-bit if (data16!=NULL) delete[] data16; length16=count*2; @@ -748,7 +765,11 @@ void DivSample::convert(DivSampleDepth newDepth) { setSampleCount((samples+7)&(~7)); break; case DIV_SAMPLE_DEPTH_1BIT_DPCM: - setSampleCount((1+((((samples+7)/8)+15)&(~15)))<<3); + if (samples) { + setSampleCount((1+((((samples-1)/8)+15)&(~15)))<<3); + } else { + setSampleCount(8); + } break; case DIV_SAMPLE_DEPTH_YMZ_ADPCM: setSampleCount(((lengthZ+3)&(~0x03))*2); @@ -1107,6 +1128,11 @@ bool DivSample::resample(double sRate, double tRate, int filter) { #define NOT_IN_FORMAT(x) (depth!=x && formatMask&(1U<<(unsigned int)x)) +union IntFloat { + unsigned int i; + float f; +}; + void DivSample::render(unsigned int formatMask) { // step 1: convert to 16-bit if needed if (depth!=DIV_SAMPLE_DEPTH_16BIT) { @@ -1150,6 +1176,14 @@ void DivSample::render(unsigned int formatMask) { case DIV_SAMPLE_DEPTH_VOX: // VOX oki_decode(dataVOX,data16,samples); break; + case DIV_SAMPLE_DEPTH_MULAW: // 8-bit µ-law PCM + for (unsigned int i=0; i>3)>9; if (next>accum) { dataDPCM[i>>3]|=1<<(i&7); @@ -1228,6 +1262,17 @@ void DivSample::render(unsigned int formatMask) { if (!initInternal(DIV_SAMPLE_DEPTH_VOX,samples)) return; oki_encode(data16,dataVOX,samples); } + if (NOT_IN_FORMAT(DIV_SAMPLE_DEPTH_MULAW)) { // µ-law + if (!initInternal(DIV_SAMPLE_DEPTH_MULAW,samples)) return; + for (unsigned int i=0; i>19)^0xff; + } + } } void* DivSample::getCurBuf() { @@ -1250,6 +1295,8 @@ void* DivSample::getCurBuf() { return dataBRR; case DIV_SAMPLE_DEPTH_VOX: return dataVOX; + case DIV_SAMPLE_DEPTH_MULAW: + return dataMuLaw; case DIV_SAMPLE_DEPTH_16BIT: return data16; default: @@ -1278,6 +1325,8 @@ unsigned int DivSample::getCurBufLen() { return lengthBRR; case DIV_SAMPLE_DEPTH_VOX: return lengthVOX; + case DIV_SAMPLE_DEPTH_MULAW: + return lengthMuLaw; case DIV_SAMPLE_DEPTH_16BIT: return length16; default: @@ -1387,4 +1436,5 @@ DivSample::~DivSample() { if (dataB) delete[] dataB; if (dataBRR) delete[] dataBRR; if (dataVOX) delete[] dataVOX; + if (dataMuLaw) delete[] dataMuLaw; } diff --git a/src/engine/sample.h b/src/engine/sample.h index ce1bf1fa2..bbf90d4f5 100644 --- a/src/engine/sample.h +++ b/src/engine/sample.h @@ -43,6 +43,7 @@ enum DivSampleDepth: unsigned char { DIV_SAMPLE_DEPTH_8BIT=8, DIV_SAMPLE_DEPTH_BRR=9, DIV_SAMPLE_DEPTH_VOX=10, + DIV_SAMPLE_DEPTH_MULAW=11, DIV_SAMPLE_DEPTH_16BIT=16, DIV_SAMPLE_DEPTH_MAX // boundary for sample depth }; @@ -108,6 +109,7 @@ struct DivSample { // - 8: 8-bit PCM // - 9: BRR (SNES) // - 10: VOX ADPCM + // - 11: 8-bit µ-law PCM // - 16: 16-bit PCM DivSampleDepth depth; bool loop, brrEmphasis, dither; @@ -130,8 +132,9 @@ struct DivSample { unsigned char* dataB; // 6 unsigned char* dataBRR; // 9 unsigned char* dataVOX; // 10 + unsigned char* dataMuLaw; // 11 - unsigned int length8, length16, length1, lengthDPCM, lengthZ, lengthQSoundA, lengthA, lengthB, lengthBRR, lengthVOX; + unsigned int length8, length16, length1, lengthDPCM, lengthZ, lengthQSoundA, lengthA, lengthB, lengthBRR, lengthVOX, lengthMuLaw; unsigned int samples; @@ -337,6 +340,7 @@ struct DivSample { dataB(NULL), dataBRR(NULL), dataVOX(NULL), + dataMuLaw(NULL), length8(0), length16(0), length1(0), @@ -347,6 +351,7 @@ struct DivSample { lengthB(0), lengthBRR(0), lengthVOX(0), + lengthMuLaw(0), samples(0) { for (int i=0; iwriteC(0); } break; + case DIV_SYSTEM_C140: + for (int i=0; i<24; i++) { + w->writeC(0xd4); // mute + w->writeS_BE(baseAddr2S|(i<<4)|0); + w->writeC(0); + w->writeC(0xd4); + w->writeS_BE(baseAddr2S|(i<<4)|1); + w->writeC(0); + w->writeC(0xd4); // keyoff + w->writeS_BE(baseAddr2S|(i<<4)|5); + w->writeC(0); + } + break; default: break; } @@ -1044,6 +1057,11 @@ void DivEngine::performVGMWrite(SafeWriter* w, DivSystem sys, DivRegWrite& write w->writeC(baseAddr2|(write.addr&0x3f)); w->writeC(write.val&0xff); break; + case DIV_SYSTEM_C140: + w->writeC(0xd4); + w->writeS_BE(baseAddr2S|(write.addr&0x1ff)); + w->writeC(write.val&0xff); + break; default: logW("write not handled!"); break; @@ -1217,6 +1235,7 @@ SafeWriter* DivEngine::saveVGM(bool* sysToExport, bool loop, int version, bool p DivDispatch* writeMSM6295[2]={NULL,NULL}; DivDispatch* writeGA20[2]={NULL,NULL}; DivDispatch* writeK053260[2]={NULL,NULL}; + DivDispatch* writeC140[2]={NULL,NULL}; DivDispatch* writeNES[2]={NULL,NULL}; int writeNESIndex[2]={0,0}; @@ -1765,6 +1784,22 @@ SafeWriter* DivEngine::saveVGM(bool* sysToExport, bool loop, int version, bool p willExport[i]=true; } break; + case DIV_SYSTEM_C140: + if (!hasNamco) { + // ?!?!?! + hasNamco=disCont[i].dispatch->rate/2; + CHIP_VOL(40,1.0); + willExport[i]=true; + writeC140[0]=disCont[i].dispatch; + } else if (!(hasNamco&0x40000000)) { + isSecond[i]=true; + CHIP_VOL_SECOND(40,1.0); + willExport[i]=true; + writeC140[1]=disCont[i].dispatch; + hasNamco|=0x40000000; + howManyChips++; + } + break; default: break; } @@ -2163,6 +2198,19 @@ SafeWriter* DivEngine::saveVGM(bool* sysToExport, bool loop, int version, bool p w->writeI(0); w->write(writeES5506[i]->getSampleMem(),writeES5506[i]->getSampleMemUsage()); } + if (writeC140[i]!=NULL && writeC140[i]->getSampleMemUsage()>0) { + w->writeC(0x67); + w->writeC(0x66); + w->writeC(0x8d); + unsigned short* mem=(unsigned short*)writeC140[i]->getSampleMem(); + size_t memLen=writeC140[i]->getSampleMemUsage()>>1; + w->writeI((memLen+8)|(i*0x80000000)); + w->writeI(writeC140[i]->getSampleMemCapacity()); + w->writeI(0); + for (size_t i=0; iwriteC(mem[i]>>8); + } + } } // initialize streams @@ -2514,7 +2562,7 @@ SafeWriter* DivEngine::saveVGM(bool* sysToExport, bool loop, int version, bool p ws=utf8To16(song.authorJ.c_str()); w->writeWString(ws,false); // japanese author name w->writeS(0); // date - w->writeWString(L"Furnace Tracker",false); // ripper + w->writeWString(L"Furnace (chiptune tracker)",false); // ripper w->writeS(0); // notes int gd3Len=w->tell()-gd3Off-12; diff --git a/src/engine/zsm.cpp b/src/engine/zsm.cpp index 04bf68b91..03d294638 100644 --- a/src/engine/zsm.cpp +++ b/src/engine/zsm.cpp @@ -66,6 +66,8 @@ void DivZSM::init(unsigned int rate) { // Channel masks ymMask=0; psgMask=0; + // Optimize writes + optimize=true; } int DivZSM::getoffset() { @@ -116,20 +118,29 @@ void DivZSM::writeYM(unsigned char a, unsigned char v) { } } +void DivZSM::writeSync(unsigned char a, unsigned char v) { + return syncCache.push_back(DivRegWrite(a,v)); +} + void DivZSM::writePSG(unsigned char a, unsigned char v) { - // TODO: suppress writes to PSG voice that is not audible (volume=0) - // ^ Let's leave these alone, ZSMKit has a feature that can benefit - // from silent channels. if (a>=69) { logD("ZSM: ignoring VERA PSG write a=%02x v=%02x",a,v); return; } else if (a==68) { // Sync event numWrites++; - return syncCache.push_back(v); + return writeSync(0x00,v); } else if (a>=64) { return writePCM(a-64,v); } + if (optimize) { + if ((a&3)==3 && v>64) { + // Pulse width on non-pulse waves is nonsense and wasteful + // No need to preserve state here because the next write that + // selects pulse will also set the pulse width in this register + v&=0xc0; + } + } if (psgState[psg_PREV][a]==v) { if (psgState[psg_NEW][a]!=v) { // NEW value is being reset to the same as PREV value @@ -145,7 +156,7 @@ void DivZSM::writePSG(unsigned char a, unsigned char v) { } psgState[psg_NEW][a]=v; // mark channel as used in the psgMask if volume is set>0. - if ((a%4==2) && (v&0x3f)) psgMask|=(1<<(a>>2)); + if ((a&3)==2 && (v&0x3f)) psgMask|=(1<<(a>>2)); } void DivZSM::writePCM(unsigned char a, unsigned char v) { @@ -209,6 +220,10 @@ void DivZSM::setLoopPoint() { } } +void DivZSM::setOptimize(bool o) { + optimize=o; +} + SafeWriter* DivZSM::finish() { tick(0); // flush any pending writes / ticks flushTicks(); // flush ticks in case there were no writes pending @@ -271,15 +286,28 @@ SafeWriter* DivZSM::finish() { void DivZSM::flushWrites() { logD("ZSM: flushWrites.... numwrites=%d ticks=%d ymwrites=%d pcmMeta=%d pcmCache=%d pcmData=%d syncCache=%d",numWrites,ticks,ymwrites.size(),pcmMeta.size(),pcmCache.size(),pcmData.size(),syncCache.size()); if (numWrites==0) return; - flushTicks(); // only flush ticks if there are writes pending. + bool hasFlushed=false; for (unsigned char i=0; i<64; i++) { if (psgState[psg_NEW][i]==psgState[psg_PREV][i]) continue; + // if optimize=true, suppress writes to PSG voices that are not audible (volume=0 or R+L=0) + // ZSMKit has a feature that can benefit from having silent channels + // updated, so this is something that can be toggled off or on for export + if (optimize && (i&3)!=2 && (psgState[psg_NEW][(i&0x3c)+2]&0x3f)==0) continue; // vol + if (optimize && (i&3)!=2 && (psgState[psg_NEW][(i&0x3c)+2]&0xc0)==0) continue; // R+L psgState[psg_PREV][i]=psgState[psg_NEW][i]; + if (!hasFlushed) { + flushTicks(); + hasFlushed=true; + } w->writeC(i); w->writeC(psgState[psg_NEW][i]); } int n=0; // n=completed YM writes. used to determine when to write the CMD byte... for (DivRegWrite& write: ymwrites) { + if (!hasFlushed) { + flushTicks(); + hasFlushed=true; + } if (n%ZSM_YM_MAX_WRITES==0) { if (ymwrites.size()-n>ZSM_YM_MAX_WRITES) { w->writeC((unsigned char)(ZSM_YM_CMD+ZSM_YM_MAX_WRITES)); @@ -377,6 +405,10 @@ void DivZSM::flushWrites() { pcmMeta.clear(); } if (extCmd0Len) { // we have some PCM events to write + if (!hasFlushed) { + flushTicks(); + hasFlushed=true; + } w->writeC(ZSM_EXT); w->writeC(ZSM_EXT_PCM|(unsigned char)extCmd0Len); for (DivRegWrite& write: pcmMeta) { @@ -390,15 +422,22 @@ void DivZSM::flushWrites() { } } n=0; - while (n<(long)syncCache.size()) { // we have one or more sync events to write - int writes=syncCache.size()-n; - w->writeC(ZSM_EXT); - if (writes>ZSM_SYNC_MAX_WRITES) writes=ZSM_SYNC_MAX_WRITES; - w->writeC(ZSM_EXT_SYNC|(writes<<1)); - for (; writes>0; writes--) { - w->writeC(0x00); // 0x00 = Arbitrary sync message - w->writeC(syncCache[n++]); + for (DivRegWrite& write: syncCache) { + if (!hasFlushed) { + flushTicks(); + hasFlushed=true; } + if (n%ZSM_SYNC_MAX_WRITES==0) { + w->writeC(ZSM_EXT); + if (syncCache.size()-n>ZSM_SYNC_MAX_WRITES) { + w->writeC((unsigned char)(ZSM_EXT_SYNC|(ZSM_SYNC_MAX_WRITES<<1))); + } else { + w->writeC((unsigned char)(ZSM_EXT_SYNC|((syncCache.size()-n)<<1))); + } + } + n++; + w->writeC(write.addr); + w->writeC(write.val); } syncCache.clear(); numWrites=0; diff --git a/src/engine/zsm.h b/src/engine/zsm.h index ff497693f..79b8b116c 100644 --- a/src/engine/zsm.h +++ b/src/engine/zsm.h @@ -63,13 +63,14 @@ class DivZSM { std::vector pcmData; std::vector pcmCache; std::vector pcmInsts; - std::vector syncCache; + std::vector syncCache; int loopOffset; int numWrites; int ticks; int tickRate; int ymMask; int psgMask; + bool optimize; public: DivZSM(); ~DivZSM(); @@ -78,6 +79,8 @@ class DivZSM { void writeYM(unsigned char a, unsigned char v); void writePSG(unsigned char a, unsigned char v); void writePCM(unsigned char a, unsigned char v); + void writeSync(unsigned char a, unsigned char v); + void setOptimize(bool o); void tick(int numticks = 1); void setLoopPoint(); SafeWriter* finish(); diff --git a/src/engine/zsmOps.cpp b/src/engine/zsmOps.cpp index 92b8aecb8..3c72da663 100644 --- a/src/engine/zsmOps.cpp +++ b/src/engine/zsmOps.cpp @@ -26,7 +26,7 @@ constexpr int MASTER_CLOCK_PREC=(sizeof(void*)==8)?8:0; constexpr int MASTER_CLOCK_MASK=(sizeof(void*)==8)?0xff:0; -SafeWriter* DivEngine::saveZSM(unsigned int zsmrate, bool loop) { +SafeWriter* DivEngine::saveZSM(unsigned int zsmrate, bool loop, bool optimize) { int VERA=-1; int YM=-1; int IGNORED=0; @@ -107,6 +107,20 @@ SafeWriter* DivEngine::saveZSM(unsigned int zsmrate, bool loop) { // TODO: incorporate the Furnace meta-command for init data and filter // out writes to otherwise-unused channels. } + // Indicate the song's tuning as a sync meta-event + // specified in terms of how many 1/256th semitones + // the song is offset from standard A-440 tuning. + // This is mainly to benefit visualizations in players + // for non-standard tunings so that they can avoid + // displaying the entire song held in pitch bend. + // Tunings offsets that exceed a half semitone + // will simply be represented in a different key + // by nature of overflowing the signed char value + signed char tuningoffset=(signed char)(round(3072*(log(song.tuning/440.0)/log(2))))&0xff; + zsm.writeSync(0x01,tuningoffset); + // Set optimize flag, which mainly buffers PSG writes + // whenever the channel is silent + zsm.setOptimize(optimize); while (!done) { if (loopPos==-1) { diff --git a/src/gui/about.cpp b/src/gui/about.cpp index b849c6bbe..5fd0c461f 100644 --- a/src/gui/about.cpp +++ b/src/gui/about.cpp @@ -48,6 +48,7 @@ const char* aboutLine[]={ "-- graphics/UI design --", "tildearrow", "BlastBrothers", + "Electric Keet", "Mahbod Karamoozian", "nicco1690", "Raijin", @@ -192,12 +193,10 @@ const char* aboutLine[]={ "mzpokeysnd POKEY emulator by Michael Borisov", "ASAP POKEY emulator by Piotr Fusik", "ported by laoo to C++", - "K005289 emulator by cam900", - "Namco 163 emulator by cam900", - "Seta X1-010 emulator by cam900", - "Konami VRC6 emulator by cam900", - "Konami SCC emulator by cam900", - "MSM6295 emulator by cam900", + "vgsound_emu (second version, modified version) by cam900", + "SM8521 emulator (modified version) by cam900", + "D65010G031 emulator (modified version) by cam900", + "Namco C140 (modified version) emulator by cam900", "", "greetings to:", "NEOART Costa Rica", diff --git a/src/gui/chanOsc.cpp b/src/gui/chanOsc.cpp index 4b575b52b..aa7c91b5b 100644 --- a/src/gui/chanOsc.cpp +++ b/src/gui/chanOsc.cpp @@ -41,6 +41,13 @@ const char* chanOscRefs[]={ "Note Trigger" }; +const char* autoColsTypes[]={ + "Off", + "Mode 1", + "Mode 2", + "Mode 3" +}; + float FurnaceGUI::computeGradPos(int type, int chan) { switch (type) { case GUI_OSCREF_NONE: @@ -124,6 +131,7 @@ void FurnaceGUI::drawChanOsc() { if (ImGui::BeginTable("ChanOscSettings",3)) { ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("Columns"); ImGui::SameLine(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); @@ -146,9 +154,24 @@ void FurnaceGUI::drawChanOsc() { centerSettingReset=true; } + ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); + ImGui::Text("Automatic columns"); + ImGui::SameLine(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + const char* previewColType=autoColsTypes[chanOscAutoColsType&3]; + if (ImGui::BeginCombo("##AutoCols",previewColType)) { + for (int j=0; j<4; j++) { + const bool isSelected=(chanOscAutoColsType==j); + if (ImGui::Selectable(autoColsTypes[j],isSelected)) chanOscAutoColsType=j; + if (isSelected) ImGui::SetItemDefaultFocus(); + } + ImGui::EndCombo(); + } ImGui::EndTable(); } + ImGui::AlignTextToFramePadding(); ImGui::Text("Amplitude"); ImGui::SameLine(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); @@ -241,6 +264,7 @@ void FurnaceGUI::drawChanOsc() { if (ImGui::ColorPicker4("Color",(float*)&i.color)) { updateChanOscGradTex=true; } + ImGui::AlignTextToFramePadding(); ImGui::Text("Distance"); ImGui::SameLine(); float pDist=i.distance*100.0f; @@ -249,6 +273,7 @@ void FurnaceGUI::drawChanOsc() { updateChanOscGradTex=true; } + ImGui::AlignTextToFramePadding(); ImGui::Text("Spread"); ImGui::SameLine(); float pSpread=i.spread*100.0f; @@ -293,6 +318,7 @@ void FurnaceGUI::drawChanOsc() { ImGui::ColorPicker4("Color",(float*)&chanOscColor); } + ImGui::AlignTextToFramePadding(); ImGui::Text("Text format:"); ImGui::SameLine(); ImGui::InputText("##TextFormat",&chanOscTextFormat); @@ -346,6 +372,25 @@ void FurnaceGUI::drawChanOsc() { oscChans.push_back(i); } } + + // 0: none + // 1: sqrt(chans) + // 2: sqrt(chans+1) + // 3: sqrt(chans)+1 + switch (chanOscAutoColsType) { + case 1: + chanOscCols=sqrt(oscChans.size()); + break; + case 2: + chanOscCols=sqrt(oscChans.size()+1); + break; + case 3: + chanOscCols=sqrt(oscChans.size())+1; + break; + } + if (chanOscCols<1) chanOscCols=1; + if (chanOscCols>64) chanOscCols=64; + int rows=(oscBufs.size()+(chanOscCols-1))/chanOscCols; for (size_t i=0; igetChanState(ch); if (chanState==NULL || !(chanState->keyOn)) break; - text+=fmt::sprintf("%s",noteName(short (chanState->note),0)); + short tempNote=chanState->note; //all of this conversion is necessary because notes 100-102 are special chars + short noteMod=tempNote%12+12; //also note 0 is a BUG, hence +12 on the note and -1 on the octave + short oct=tempNote/12-1; + text+=fmt::sprintf("%s",noteName(noteMod,oct)); break; } case '%': diff --git a/src/gui/compatFlags.cpp b/src/gui/compatFlags.cpp index f1b16c639..55f3cb589 100644 --- a/src/gui/compatFlags.cpp +++ b/src/gui/compatFlags.cpp @@ -199,6 +199,7 @@ void FurnaceGUI::drawCompatFlags() { } if (ImGui::BeginTabItem("Pitch/Playback")) { ImGui::Text("Pitch linearity:"); + ImGui::Indent(); if (ImGui::RadioButton("None",e->song.linearPitch==0)) { e->song.linearPitch=0; } @@ -217,6 +218,7 @@ void FurnaceGUI::drawCompatFlags() { if (ImGui::IsItemHovered()) { ImGui::SetTooltip("like Impulse Tracker"); } + ImGui::Unindent(); if (e->song.linearPitch==2) { ImGui::SameLine(); @@ -228,6 +230,7 @@ void FurnaceGUI::drawCompatFlags() { } ImGui::Text("Loop modality:"); + ImGui::Indent(); if (ImGui::RadioButton("Reset channels",e->song.loopModality==0)) { e->song.loopModality=0; } @@ -246,8 +249,10 @@ void FurnaceGUI::drawCompatFlags() { if (ImGui::IsItemHovered()) { ImGui::SetTooltip("select to not reset channels on loop."); } + ImGui::Unindent(); ImGui::Text("Cut/delay effect policy:"); + ImGui::Indent(); if (ImGui::RadioButton("Strict",e->song.delayBehavior==0)) { e->song.delayBehavior=0; } @@ -266,8 +271,10 @@ void FurnaceGUI::drawCompatFlags() { if (ImGui::IsItemHovered()) { ImGui::SetTooltip("no checks"); } + ImGui::Unindent(); ImGui::Text("Simultaneous jump (0B+0D) treatment:"); + ImGui::Indent(); if (ImGui::RadioButton("Normal",e->song.jumpTreatment==0)) { e->song.jumpTreatment=0; } @@ -286,6 +293,7 @@ void FurnaceGUI::drawCompatFlags() { if (ImGui::IsItemHovered()) { ImGui::SetTooltip("only accept 0Dxx"); } + ImGui::Unindent(); ImGui::EndTabItem(); } if (ImGui::BeginTabItem("Other")) { diff --git a/src/gui/dataList.cpp b/src/gui/dataList.cpp index f9e2ab749..3d2523db1 100644 --- a/src/gui/dataList.cpp +++ b/src/gui/dataList.cpp @@ -72,223 +72,30 @@ const char* sampleNote[12]={ void FurnaceGUI::insListItem(int i, int dir, int asset) { ImGui::PushID(i); - String name=ICON_FA_CIRCLE_O; + String name=(settings.insIconsStyle==0)?"":ICON_FA_CIRCLE_O; const char* insType="Bug!"; if (i>=0 && isong.insLen) { DivInstrument* ins=e->song.ins[i]; - insType=(ins->type>DIV_INS_MAX)?"Unknown":insTypes[ins->type]; - switch (ins->type) { - case DIV_INS_FM: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_FM]); - name=fmt::sprintf(ICON_FA_AREA_CHART "##_INS%d",i); + insType=(ins->type>DIV_INS_MAX)?"Unknown":insTypes[ins->type][0]; + const char** insIcon=NULL; + + if (ins->type>=DIV_INS_MAX) { + ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_UNKNOWN]); + insIcon=insTypes[DIV_INS_MAX]; + } else { + ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_STD+ins->type]); + insIcon=insTypes[ins->type]; + } + + switch (settings.insIconsStyle) { + case 1: + name=fmt::sprintf("%s##_INS%d",insIcon[1],i); break; - case DIV_INS_STD: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_STD]); - name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i); - break; - case DIV_INS_GB: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_GB]); - name=fmt::sprintf(ICON_FA_GAMEPAD "##_INS%d",i); - break; - case DIV_INS_C64: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_C64]); - name=fmt::sprintf(ICON_FA_KEYBOARD_O "##_INS%d",i); - break; - case DIV_INS_AMIGA: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_AMIGA]); - name=fmt::sprintf(ICON_FA_VOLUME_UP "##_INS%d",i); - break; - case DIV_INS_PCE: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_PCE]); - name=fmt::sprintf(ICON_FA_ID_BADGE "##_INS%d",i); - break; - case DIV_INS_AY: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_AY]); - name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i); - break; - case DIV_INS_AY8930: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_AY8930]); - name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i); - break; - case DIV_INS_TIA: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_TIA]); - name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i); - break; - case DIV_INS_SAA1099: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_SAA1099]); - name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i); - break; - case DIV_INS_VIC: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_VIC]); - name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i); - break; - case DIV_INS_PET: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_PET]); - name=fmt::sprintf(ICON_FA_SQUARE "##_INS%d",i); - break; - case DIV_INS_VRC6: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_VRC6]); - name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i); - break; - case DIV_INS_VRC6_SAW: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_VRC6_SAW]); - name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i); - break; - case DIV_INS_OPLL: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_OPLL]); - name=fmt::sprintf(ICON_FA_AREA_CHART "##_INS%d",i); - break; - case DIV_INS_OPL: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_OPL]); - name=fmt::sprintf(ICON_FA_AREA_CHART "##_INS%d",i); - break; - case DIV_INS_FDS: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_FDS]); - name=fmt::sprintf(ICON_FA_FLOPPY_O "##_INS%d",i); - break; - case DIV_INS_VBOY: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_VBOY]); - name=fmt::sprintf(ICON_FA_BINOCULARS "##_INS%d",i); - break; - case DIV_INS_N163: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_N163]); - name=fmt::sprintf(ICON_FA_CALCULATOR "##_INS%d",i); - break; - case DIV_INS_SCC: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_SCC]); - name=fmt::sprintf(ICON_FA_CALCULATOR "##_INS%d",i); - break; - case DIV_INS_OPZ: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_OPZ]); - name=fmt::sprintf(ICON_FA_AREA_CHART "##_INS%d",i); - break; - case DIV_INS_POKEY: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_POKEY]); - name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i); - break; - case DIV_INS_BEEPER: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_BEEPER]); - name=fmt::sprintf(ICON_FA_SQUARE "##_INS%d",i); - break; - case DIV_INS_SWAN: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_SWAN]); - name=fmt::sprintf(ICON_FA_GAMEPAD "##_INS%d",i); - break; - case DIV_INS_MIKEY: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_MIKEY]); - name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i); - break; - case DIV_INS_VERA: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_VERA]); - name=fmt::sprintf(ICON_FA_KEYBOARD_O "##_INS%d",i); - break; - case DIV_INS_X1_010: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_X1_010]); - name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i); - break; - case DIV_INS_ES5506: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_ES5506]); - name=fmt::sprintf(ICON_FA_VOLUME_UP "##_INS%d",i); - break; - case DIV_INS_MULTIPCM: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_MULTIPCM]); - name=fmt::sprintf(ICON_FA_VOLUME_UP "##_INS%d",i); - break; - case DIV_INS_SNES: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_SNES]); - name=fmt::sprintf(ICON_FA_VOLUME_UP "##_INS%d",i); - break; - case DIV_INS_SU: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_SU]); - name=fmt::sprintf(ICON_FA_MICROCHIP "##_INS%d",i); - break; - case DIV_INS_NAMCO: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_NAMCO]); - name=fmt::sprintf(ICON_FA_PIE_CHART "##_INS%d",i); - break; - case DIV_INS_OPL_DRUMS: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_OPL_DRUMS]); - name=fmt::sprintf(ICON_FA_COFFEE "##_INS%d",i); - break; - case DIV_INS_OPM: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_OPM]); - name=fmt::sprintf(ICON_FA_AREA_CHART "##_INS%d",i); - break; - case DIV_INS_NES: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_NES]); - name=fmt::sprintf(ICON_FA_GAMEPAD "##_INS%d",i); - break; - case DIV_INS_MSM6258: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_MSM6258]); - name=fmt::sprintf(ICON_FA_VOLUME_UP "##_INS%d",i); - break; - case DIV_INS_MSM6295: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_MSM6295]); - name=fmt::sprintf(ICON_FA_VOLUME_UP "##_INS%d",i); - break; - case DIV_INS_ADPCMA: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_ADPCMA]); - name=fmt::sprintf(ICON_FA_VOLUME_UP "##_INS%d",i); - break; - case DIV_INS_ADPCMB: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_ADPCMB]); - name=fmt::sprintf(ICON_FA_VOLUME_UP "##_INS%d",i); - break; - case DIV_INS_SEGAPCM: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_SEGAPCM]); - name=fmt::sprintf(ICON_FA_VOLUME_UP "##_INS%d",i); - break; - case DIV_INS_QSOUND: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_QSOUND]); - name=fmt::sprintf(ICON_FA_VOLUME_UP "##_INS%d",i); - break; - case DIV_INS_YMZ280B: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_YMZ280B]); - name=fmt::sprintf(ICON_FA_VOLUME_UP "##_INS%d",i); - break; - case DIV_INS_RF5C68: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_RF5C68]); - name=fmt::sprintf(ICON_FA_VOLUME_UP "##_INS%d",i); - break; - case DIV_INS_MSM5232: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_MSM5232]); - name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i); - break; - case DIV_INS_T6W28: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_T6W28]); - name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i); - break; - case DIV_INS_K007232: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_K007232]); - name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i); - break; - case DIV_INS_GA20: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_GA20]); - name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i); - break; - case DIV_INS_POKEMINI: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_POKEMINI]); - name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i); - break; - case DIV_INS_SM8521: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_SM8521]); - name=fmt::sprintf(ICON_FA_GAMEPAD "##_INS%d",i); - break; - case DIV_INS_PV1000: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_PV1000]); - name=fmt::sprintf(ICON_FA_GAMEPAD "##_INS%d",i); - break; - case DIV_INS_K053260: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_K053260]); - name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i); - break; - case DIV_INS_TED: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_TED]); - name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i); + case 2: + name=fmt::sprintf("%s##_INS%d",insIcon[2],i); break; default: - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_UNKNOWN]); - name=fmt::sprintf(ICON_FA_QUESTION "##_INS%d",i); + name=fmt::sprintf("##_INS%d",i); break; } } else { @@ -407,13 +214,10 @@ void FurnaceGUI::sampleListItem(int i, int dir, int asset) { lastAssetType=2; } if (ImGui::IsItemHovered() && !mobileUI) { - ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_TEXT]); - ImGui::SetTooltip("(legacy bank %d: %s)",i/12,sampleNote[i%12]); if (ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) { sampleEditOpen=true; nextWindow=GUI_WINDOW_SAMPLE_EDIT; } - ImGui::PopStyleColor(); } if (sampleListDir || (settings.unifiedDataView && insListDir)) { DRAG_SOURCE(dir,asset,"FUR_SDIR"); diff --git a/src/gui/debug.cpp b/src/gui/debug.cpp index bd6bdb81f..df634f1e8 100644 --- a/src/gui/debug.cpp +++ b/src/gui/debug.cpp @@ -54,6 +54,7 @@ #include "../engine/platform/sm8521.h" #include "../engine/platform/pv1000.h" #include "../engine/platform/k053260.h" +#include "../engine/platform/c140.h" #include "../engine/platform/dummy.h" #define COMMON_CHIP_DEBUG \ @@ -62,7 +63,6 @@ #define FM_CHIP_DEBUG \ COMMON_CHIP_DEBUG; \ - ImGui::Text("- lastBusy: %d",ch->lastBusy); \ ImGui::Text("- delay: %d",ch->delay); #define FM_OPN_CHIP_DEBUG \ @@ -167,7 +167,6 @@ ImGui::TextColored(ch->hardReset?colorOn:colorOff,">> hardReset"); \ ImGui::TextColored(ch->opMaskChanged?colorOn:colorOff,">> opMaskChanged"); \ ImGui::TextColored(ch->dacMode?colorOn:colorOff,">> DACMode"); \ - ImGui::TextColored(ch->dacReady?colorOn:colorOff,">> DACReady"); \ ImGui::TextColored(ch->dacDirection?colorOn:colorOff,">> DACDirection"); #define GENESIS_OPCHAN_DEBUG \ @@ -381,7 +380,6 @@ void putDispatchChip(void* data, int type) { ImGui::Text("- pcmR: %d",ch->pcmR); ImGui::Text("- pcmCycles: %d",ch->pcmCycles); ImGui::Text("- sampleBank: %d",ch->sampleBank); - ImGui::Text("- lastBusy: %d",ch->lastBusy); COMMON_CHIP_DEBUG_BOOL; break; } @@ -389,7 +387,6 @@ void putDispatchChip(void* data, int type) { DivPlatformAY8910* ch=(DivPlatformAY8910*)data; ImGui::Text("> AY-3-8910"); COMMON_CHIP_DEBUG; - ImGui::Text("- lastBusy: %d",ch->lastBusy); ImGui::Text("- sampleBank: %d",ch->sampleBank); ImGui::Text("- stereoSep: %d",ch->stereoSep); ImGui::Text("- delay: %d",ch->delay); @@ -550,6 +547,13 @@ void putDispatchChip(void* data, int type) { COMMON_CHIP_DEBUG_BOOL; break; } + case DIV_SYSTEM_C140: { + DivPlatformC140* ch=(DivPlatformC140*)data; + ImGui::Text("> C140"); + COMMON_CHIP_DEBUG; + COMMON_CHIP_DEBUG_BOOL; + break; + } default: ImGui::Text("Unimplemented chip! Help!"); break; @@ -765,17 +769,6 @@ void putDispatchChan(void* data, int chanNum, int type) { DivPlatformAY8910::Channel* ch=(DivPlatformAY8910::Channel*)data; ImGui::Text("> AY-3-8910"); COMMON_CHAN_DEBUG; - ImGui::Text("* psgMode:"); - ImGui::Text(" * curr:"); - ImGui::Text(" - tone: %d",ch->curPSGMode.tone); - ImGui::Text(" - noise: %d",ch->curPSGMode.noise); - ImGui::Text(" - envelope: %d",ch->curPSGMode.envelope); - ImGui::Text(" - dac: %d",ch->curPSGMode.dac); - ImGui::Text(" * next:"); - ImGui::Text(" - tone: %d",ch->nextPSGMode.tone); - ImGui::Text(" - noise: %d",ch->nextPSGMode.noise); - ImGui::Text(" - envelope: %d",ch->nextPSGMode.envelope); - ImGui::Text(" - dac: %d",ch->nextPSGMode.dac); ImGui::Text("* DAC:"); ImGui::Text(" - sample: %d",ch->dac.sample); ImGui::Text(" - rate: %d",ch->dac.rate); @@ -793,22 +786,6 @@ void putDispatchChan(void* data, int chanNum, int type) { ImGui::Text("> AY8930"); COMMON_CHAN_DEBUG; ImGui::Text("- duty: %d",ch->duty); - ImGui::Text("* envelope:"); - ImGui::Text(" - mode: %d",ch->envelope.mode); - ImGui::Text(" - period: %d",ch->envelope.period); - ImGui::Text(" * slide: %d",ch->envelope.slide); - ImGui::Text(" - low: %d",ch->envelope.slideLow); - ImGui::Text("* psgMode:"); - ImGui::Text(" * curr:"); - ImGui::Text(" - tone: %d",ch->curPSGMode.tone); - ImGui::Text(" - noise: %d",ch->curPSGMode.noise); - ImGui::Text(" - envelope: %d",ch->curPSGMode.envelope); - ImGui::Text(" - dac: %d",ch->curPSGMode.dac); - ImGui::Text(" * next:"); - ImGui::Text(" - tone: %d",ch->nextPSGMode.tone); - ImGui::Text(" - noise: %d",ch->nextPSGMode.noise); - ImGui::Text(" - envelope: %d",ch->nextPSGMode.envelope); - ImGui::Text(" - dac: %d",ch->nextPSGMode.dac); ImGui::Text("* DAC:"); ImGui::Text(" - sample: %d",ch->dac.sample); ImGui::Text(" - rate: %d",ch->dac.rate); @@ -1097,6 +1074,24 @@ void putDispatchChan(void* data, int chanNum, int type) { ImGui::TextColored(ch->reverse?colorOn:colorOff,">> Reverse"); break; } + case DIV_SYSTEM_C140: { + DivPlatformC140::Channel* ch=(DivPlatformC140::Channel*)data; + ImGui::Text("> C140"); + COMMON_CHAN_DEBUG; + ImGui::Text("* Sample: %d",ch->sample); + ImGui::Text(" - pos: %d",ch->audPos); + ImGui::Text("- chPanL: %.2x",ch->chPanL); + ImGui::Text("- chPanR: %.2x",ch->chPanR); + ImGui::Text("- chVolL: %.2x",ch->chVolL); + ImGui::Text("- chVolR: %.2x",ch->chVolR); + ImGui::Text("- macroVolMul: %.2x",ch->macroVolMul); + ImGui::Text("- macroPanMul: %.2x",ch->macroPanMul); + COMMON_CHAN_DEBUG_BOOL; + ImGui::TextColored(ch->volChangedL?colorOn:colorOff,">> VolChangedL"); + ImGui::TextColored(ch->volChangedR?colorOn:colorOff,">> VolChangedR"); + ImGui::TextColored(ch->setPos?colorOn:colorOff,">> SetPos"); + break; + } default: ImGui::Text("Unimplemented chip! Help!"); break; diff --git a/src/gui/debugWindow.cpp b/src/gui/debugWindow.cpp index bfeb9067e..9d59e44d2 100644 --- a/src/gui/debugWindow.cpp +++ b/src/gui/debugWindow.cpp @@ -486,6 +486,7 @@ void FurnaceGUI::drawDebug() { pgProgram.clear(); } + ImGui::AlignTextToFramePadding(); ImGui::Text("Address"); ImGui::SameLine(); ImGui::SetNextItemWidth(100.0f*dpiScale); diff --git a/src/gui/doAction.cpp b/src/gui/doAction.cpp index 600563340..545eeeff6 100644 --- a/src/gui/doAction.cpp +++ b/src/gui/doAction.cpp @@ -605,14 +605,34 @@ void FurnaceGUI::doAction(int what) { case GUI_ACTION_PAT_EXPAND_SONG: doExpandSong(collapseAmount); break; - case GUI_ACTION_PAT_LATCH: // TODO + case GUI_ACTION_PAT_LATCH: { + DivPattern* pat=e->curPat[cursor.xCoarse].getPattern(e->curOrders->ord[cursor.xCoarse][curOrder],true); + latchIns=pat->data[cursor.y][2]; + latchVol=pat->data[cursor.y][3]; + latchEffect=pat->data[cursor.y][4]; + latchEffectVal=pat->data[cursor.y][5]; + latchTarget=0; + latchNibble=false; break; - case GUI_ACTION_PAT_SCROLL_MODE: // TODO - break; - case GUI_ACTION_PAT_CLEAR_LATCH: // TODO + } + case GUI_ACTION_PAT_CLEAR_LATCH: + latchIns=-2; + latchVol=-1; + latchEffect=-1; + latchEffectVal=-1; + latchTarget=0; + latchNibble=false; break; case GUI_ACTION_INS_LIST_ADD: + if (settings.insTypeMenu) { + makeInsTypeList=e->getPossibleInsTypes(); + if (makeInsTypeList.size()>1) { + displayInsTypeList=true; + displayInsTypeListMakeInsSample=-1; + break; + } + } curIns=e->addInstrument(cursor.xCoarse); if (curIns==-1) { showError("too many instruments!"); @@ -1281,7 +1301,7 @@ void FurnaceGUI::doAction(int what) { } else if (sample->depth==DIV_SAMPLE_DEPTH_8BIT) { for (unsigned int i=start; idata8[i]=-sample->data8[i]; - if (sample->data16[i]==-128) sample->data16[i]=127; + if (sample->data8[i]==-128) sample->data8[i]=127; } } @@ -1392,7 +1412,8 @@ void FurnaceGUI::doAction(int what) { i==DIV_INS_ES5506 || i==DIV_INS_K007232 || i==DIV_INS_GA20 || - i==DIV_INS_K053260) { + i==DIV_INS_K053260 || + i==DIV_INS_C140) { makeInsTypeList.push_back(i); } } diff --git a/src/gui/editControls.cpp b/src/gui/editControls.cpp index 099ff7e25..24aeb87cd 100644 --- a/src/gui/editControls.cpp +++ b/src/gui/editControls.cpp @@ -619,6 +619,7 @@ void FurnaceGUI::drawMobileControls() { "Furnace Amiga emulator is working properly by\n" "comparing it with real Amiga output." ); + ImGui::AlignTextToFramePadding(); ImGui::Text("Directory"); ImGui::SameLine(); ImGui::InputText("##AVDPath",&workingDirROMExport); @@ -717,6 +718,7 @@ void FurnaceGUI::drawEditControls() { e->setMetronome(metro); } + ImGui::AlignTextToFramePadding(); ImGui::Text("Follow"); ImGui::SameLine(); unimportant(ImGui::Checkbox("Orders",&followOrders)); @@ -1063,6 +1065,7 @@ void FurnaceGUI::drawEditControls() { if (ImGui::Begin("Edit Controls",&editControlsOpen,globalWinFlags)) { ImGui::Columns(2); + ImGui::AlignTextToFramePadding(); ImGui::Text("Octave"); ImGui::SameLine(); float cursor=ImGui::GetCursorPosX(); @@ -1078,6 +1081,7 @@ void FurnaceGUI::drawEditControls() { } } + ImGui::AlignTextToFramePadding(); ImGui::Text("Step"); ImGui::SameLine(); ImGui::SetCursorPosX(cursor); diff --git a/src/gui/editing.cpp b/src/gui/editing.cpp index b9e035118..1e55d86e3 100644 --- a/src/gui/editing.cpp +++ b/src/gui/editing.cpp @@ -68,7 +68,7 @@ void FurnaceGUI::prepareUndo(ActionType action) { } break; case GUI_UNDO_PATTERN_COLLAPSE_SONG: - case GUI_UNDO_PATTERN_EXPAND_SONG: // TODO + case GUI_UNDO_PATTERN_EXPAND_SONG: // this is handled by doCollapseSong/doExpandSong break; case GUI_UNDO_REPLACE: // this is handled by doReplace() break; @@ -134,7 +134,7 @@ void FurnaceGUI::makeUndo(ActionType action) { } break; case GUI_UNDO_PATTERN_COLLAPSE_SONG: - case GUI_UNDO_PATTERN_EXPAND_SONG: // TODO + case GUI_UNDO_PATTERN_EXPAND_SONG: // this is handled by doCollapseSong/doExpandSong break; case GUI_UNDO_REPLACE: // this is handled by doReplace() break; diff --git a/src/gui/effectList.cpp b/src/gui/effectList.cpp index 2d1bd1f1e..0be9b159a 100644 --- a/src/gui/effectList.cpp +++ b/src/gui/effectList.cpp @@ -47,22 +47,56 @@ void FurnaceGUI::drawEffectList() { const char* prevName=NULL; for (int i=0; i<256; i++) { const char* name=e->getEffectDesc(i,cursor.xCoarse); - bool effectShow = true; + bool effectShow=true; if (name==prevName) { continue; } prevName=name; switch (fxColors[i]) { - case GUI_COLOR_PATTERN_EFFECT_MISC: effectShow = effectsShow[8]; break; - case GUI_COLOR_PATTERN_EFFECT_SONG: effectShow = effectsShow[1]; break; - case GUI_COLOR_PATTERN_EFFECT_SPEED: effectShow = effectsShow[3]; break; - case GUI_COLOR_PATTERN_EFFECT_TIME: effectShow = effectsShow[2]; break; - case GUI_COLOR_PATTERN_EFFECT_PITCH: effectShow = effectsShow[0]; break; - case GUI_COLOR_PATTERN_EFFECT_PANNING: effectShow = effectsShow[4]; break; - case GUI_COLOR_PATTERN_EFFECT_VOLUME: effectShow = effectsShow[5]; break; - case GUI_COLOR_PATTERN_EFFECT_SYS_PRIMARY: effectShow = effectsShow[6]; break; - case GUI_COLOR_PATTERN_EFFECT_SYS_SECONDARY: effectShow = effectsShow[7]; break; - default: effectShow = true; break; + case GUI_COLOR_PATTERN_EFFECT_MISC: + effectShow=effectsShow[8]; + break; + case GUI_COLOR_PATTERN_EFFECT_SONG: + effectShow=effectsShow[1]; + break; + case GUI_COLOR_PATTERN_EFFECT_SPEED: + effectShow=effectsShow[3]; + break; + case GUI_COLOR_PATTERN_EFFECT_TIME: + effectShow=effectsShow[2]; + break; + case GUI_COLOR_PATTERN_EFFECT_PITCH: + effectShow=effectsShow[0]; + break; + case GUI_COLOR_PATTERN_EFFECT_PANNING: + effectShow=effectsShow[4]; + break; + case GUI_COLOR_PATTERN_EFFECT_VOLUME: + effectShow=effectsShow[5]; + break; + case GUI_COLOR_PATTERN_EFFECT_SYS_PRIMARY: + effectShow=effectsShow[6]; + break; + case GUI_COLOR_PATTERN_EFFECT_SYS_SECONDARY: + effectShow=effectsShow[7]; + break; + default: + effectShow=true; + break; + } + if (fxColors[i]==GUI_COLOR_PATTERN_EFFECT_PANNING) { + DivDispatch* dispatch=e->getDispatch(e->dispatchOfChan[cursor.xCoarse]); + if (dispatch!=NULL) { + int outputs=dispatch->getOutputCount(); + if (outputs<2) { + effectShow=false; + } + if (outputs<3) { + if (i>=0x88 && i<=0x8f) { + effectShow=false; + } + } + } } if (name!=NULL && effectShow) { ImGui::TableNextRow(); diff --git a/src/gui/fileDialog.cpp b/src/gui/fileDialog.cpp index a0a45e1e0..b9ec5f69f 100644 --- a/src/gui/fileDialog.cpp +++ b/src/gui/fileDialog.cpp @@ -28,7 +28,6 @@ struct NFDState { } }; -// TODO: filter void _nfdThread(const NFDState state, std::atomic* ok, std::vector* result, bool* errorOutput) { nfdchar_t* out=NULL; nfdresult_t ret=NFD_CANCEL; diff --git a/src/gui/findReplace.cpp b/src/gui/findReplace.cpp index b6fcd14ce..60976d31c 100644 --- a/src/gui/findReplace.cpp +++ b/src/gui/findReplace.cpp @@ -595,6 +595,7 @@ void FurnaceGUI::drawFindReplace() { ImGui::TableSetupColumn("c3",ImGuiTableColumnFlags_WidthStretch,0.25); ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("Note"); ImGui::TableNextColumn(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); @@ -662,6 +663,7 @@ void FurnaceGUI::drawFindReplace() { ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("Ins"); ImGui::TableNextColumn(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); @@ -697,6 +699,7 @@ void FurnaceGUI::drawFindReplace() { ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("Volume"); ImGui::TableNextColumn(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); @@ -734,6 +737,7 @@ void FurnaceGUI::drawFindReplace() { ImGui::PushID(0x1000+j); ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("Effect"); ImGui::TableNextColumn(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); @@ -769,6 +773,7 @@ void FurnaceGUI::drawFindReplace() { ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("Value"); ImGui::TableNextColumn(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); diff --git a/src/gui/font_furicon.cpp b/src/gui/font_furicon.cpp new file mode 100644 index 000000000..247a928ca --- /dev/null +++ b/src/gui/font_furicon.cpp @@ -0,0 +1,270 @@ +#include "fonts.h" +// File: 'icons.ttf' (25956 bytes) +// Exported using binary_to_compressed_c.cpp +const unsigned int furIcons_compressed_size = 12568; +const unsigned int furIcons_compressed_data[12568/4] = +{ + 0x0000bc57, 0x00000000, 0x64650000, 0x00000400, 0x00010036, 0x000e0000, 0x00030080, 0x54464660, 0x55d5a14d, 0x65000048, 0x00290382, 0x4544471c, + 0x00150046, 0x200f8214, 0x2c25822c, 0x2f534f1c, 0x52fa8c32, 0x01000069, 0x2b0f8268, 0x616d6356, 0xc7ffcb70, 0x020000b9, 0x012d2f82, 0x747663c8, + 0x043b0020, 0x0400006f, 0x261f8210, 0x73616704, 0x82ffff70, 0x65002259, 0x380f8224, 0x796c6708, 0x7309bc66, 0x040000ff, 0x5c000094, 0x61656824, + 0xd19d2464, 0x201b82ef, 0x210382ec, 0x10826836, 0x06820923, 0x835f8205, 0x6824282f, 0x2678746d, 0x825e10de, 0x82c0200f, 0x6c86281f, 0x7b61636f, + 0x823093ce, 0x8214203f, 0x6d80270f, 0x00707861, 0x3b820389, 0x7f820120, 0x6e20002d, 0x77656d61, 0x0087b987, 0x82b86000, 0x70f22c33, 0xcb74736f, + 0x00e7602a, 0x82ac6200, 0x847820a3, 0x00012deb, 0xbbd0b600, 0x3c0f5f46, 0x070b00f5, 0x00254682, 0xfffde000, 0x2b08839f, 0x778a00e1, 0x95fe80fc, + 0x47050007, 0x08220f82, 0x05820200, 0x33820283, 0x82000621, 0x070025b6, 0x0080fc00, 0x00200582, 0x18831182, 0x04200388, 0x3f251184, 0x0800bb03, + 0x24008300, 0x00000002, 0x22138401, 0x822e0040, 0x2b0d820b, 0x90010007, 0x00000500, 0xe6048c04, 0xfa201182, 0x032b0785, 0x0159005c, 0x020000cf, + 0x82090500, 0x21028515, 0x07851001, 0x46290584, 0x00547275, 0xe1200040, 0x20838535, 0x85568406, 0x208b8404, 0x2026833b, 0x83048207, 0x80fc2503, + 0x91000902, 0x52220c82, 0x79822000, 0x3500a52c, 0x29001d01, 0x6d019100, 0x9b827800, 0x47006034, 0x17015200, 0x4a000a00, 0x32018f00, 0x4f001b00, + 0x31822e00, 0x1801ca26, 0xa9003601, 0x28251b82, 0x4d013900, 0x82918200, 0x00032823, 0x017c0122, 0x8239007a, 0x01273413, 0x001300ce, 0x0073014c, + 0x01470022, 0x000b0127, 0x82b50085, 0x005b240f, 0x824b012e, 0x0000226f, 0x83058203, 0x861c2003, 0x00c2229b, 0x24098403, 0x0004001c, 0x2e1b82a6, + 0x00080008, 0x00000002, 0xe1f4e020, 0x84ffff35, 0xe1f02609, 0xffffff00, 0x200b82e3, 0x222b8400, 0x820e0006, 0x0004260b, 0x00060005, 0x202f8207, + 0x24858209, 0x000c000b, 0x2617820d, 0x0010000f, 0x82120011, 0x00142c85, 0x00160015, 0x00180017, 0x821a0019, 0x001c26c3, 0x001e001d, 0x08f1821f, + 0x2200212e, 0x24002300, 0x26002500, 0x28002700, 0x2a002900, 0x2c002b00, 0x2e002d00, 0x30002f00, 0x32003100, 0x34003300, 0x36003500, 0x38003700, + 0x3a28d982, 0x3c003b00, 0x3e003d00, 0x06208082, 0x81828485, 0x02010022, 0x02210582, 0x21008d00, 0xe4840001, 0x0d40148d, 0x043b22ce, 0x21d1826f, + 0x0185002c, 0x003c9708, 0x04c60084, 0x06640564, 0x07140704, 0x082a0898, 0x092809c2, 0x0aa40a6a, 0x0b7c0bf2, 0x0c220ce2, 0x0d5e0dda, 0x0e580ecc, + 0x10980fbe, 0x11b0104e, 0x12ba1172, 0x13001386, 0x14c8137c, 0x167815c8, 0x17121738, 0x1b1e1b80, 0x1c341cae, 0x1fea1dc0, 0x20bc1f08, 0x21342180, + 0x22fc218a, 0x27c82386, 0x28ca272a, 0x294e29ae, 0x2a062ac2, 0x2ba02bba, 0x00122ef0, 0x003b0002, 0x04150200, 0x000300aa, 0xb12e0007, 0x3c2f0001, + 0x000407b2, 0x06b132ed, 0xb23cdc05, 0x0a820203, 0x03b10022, 0x05201683, 0xb2271683, 0xfc010607, 0x8301b23c, 0x11333717, 0x21251121, 0x013b2111, + 0x0161feda, 0x049cfe64, 0x3b56fbaa, 0xd5823404, 0x80fc0226, 0x8003f5ff, 0x01200982, 0x002e5982, 0x21252105, 0x9a0533fd, 0x0007b3f9, 0x15820b0b, + 0x02032508, 0x043c0009, 0x002a04f7, 0x0025001b, 0x0100002f, 0x16322130, 0x010e1415, 0x15070607, 0x17161716, 0x1415011e, 0x0e2f0b82, 0x37212301, + 0x3d363221, 0x23263401, 0x85333521, 0x2b4d0809, 0x010a0201, 0x1f8e7dbd, 0x1e202031, 0x2025251e, 0x14132b1f, 0x385f2322, 0x01a217fe, 0x48483f18, + 0xfce8fe3f, 0x3d42423d, 0x8d2a04fc, 0x324f3877, 0x08030c0d, 0x1c0d0d02, 0x3c3f581c, 0x27273536, 0x3e428c2d, 0x88423e31, 0x3a2e393e, 0x088f833e, + 0x00910030, 0x036f0690, 0x000f00d6, 0x002b0017, 0x27302500, 0x07302130, 0x12362330, 0x12163337, 0x23300117, 0x33300706, 0x11300126, 0x33302700, + 0x03851330, 0x0702062f, 0xea023011, 0x49c7fe4c, 0x2fbf2f8a, 0x080382ab, 0x068dfe34, 0x3cf73d3c, 0xf7fe8402, 0x04cc9b17, 0xce3794cb, 0xe3e3901d, + 0x8c2e028c, 0x8cd2fd8c, 0xb9b9c902, 0x01f0fdb9, 0x28d4014a, 0x75018bfe, 0x329afe61, 0x8282b3fe, 0x82030021, 0x07d83a04, 0x038e0300, 0x038c0358, + 0x370000ba, 0x33270226, 0x17021d30, 0x1d17041d, 0x91029003, 0x8211a314, 0x9126f147, 0x26869571, 0x3317011e, 0x4137013e, 0x0d860673, 0x37033d22, + 0x04200289, 0x17850b8a, 0x298211a3, 0x719126f1, 0x332e86a1, 0x23070206, 0x2e270226, 0x0e232701, 0x0d820701, 0x2622052d, 0x37013e27, 0x3233011e, + 0x83263435, 0x27262918, 0x36343526, 0x17163233, 0x2e2b2182, 0x06222301, 0x16171415, 0x85011e17, 0x14152302, 0x3b822506, 0x27222322, 0x27262882, + 0x36373426, 0x3c823e37, 0x07202182, 0x1d352c84, 0x33161401, 0x023e3732, 0x3523013d, 0x8e231133, 0x68185e18, 0x3400cc01, 0x0c040e04, 0x0e030e04, + 0x0f7b0e39, 0x0f030e39, 0x0e030d03, 0x2761cc04, 0x62186401, 0x3a0e7a19, 0x0c205c83, 0x0f3b5c82, 0xf0020f3c, 0x0b276e4b, 0x4d1d0c2f, 0x342a7731, + 0x5a0a2409, 0x65702a2b, 0x82246348, 0x1a3c0813, 0x37373140, 0x09311616, 0x44300924, 0x74131615, 0x090c4302, 0x2c34484f, 0x1320212b, 0x22121212, + 0x5a3d5f22, 0x531e3837, 0x483c4611, 0x1e485050, 0x16271a1a, 0xe45adf7c, 0x70be0170, 0x0010b8cd, 0x2d47014d, 0x1919681a, 0x01441967, 0xfe444410, + 0x0a8244f0, 0x1a681922, 0x015b0110, 0x4d474147, 0xfe708408, 0x01457042, 0x671a4513, 0x1a671919, 0x45edfe45, 0x0b36380b, 0x2c290b2a, 0x0d2f2c6d, + 0x15020702, 0x5d502d2c, 0x0a343161, 0x24250b29, 0x162a342d, 0x08020c15, 0x171f0b02, 0x65293f17, 0x3e306e68, 0x292a1313, 0x42b84242, 0x282a2a42, + 0x31472627, 0x525c3931, 0x085c52a4, 0x1e312109, 0x9efe573b, 0x00070000, 0x062fff52, 0x004705ae, 0x0027001e, 0x0071005b, 0x008c0082, 0x050000b2, + 0x35262722, 0x84363734, 0x33302701, 0x0607020e, 0x0f453307, 0x14152b05, 0x3d322706, 0x1d223401, 0x65451401, 0x26012733, 0x16332702, 0xb4461712, + 0x0206290a, 0x11232107, 0x16173221, 0x07275c82, 0x012e2313, 0x48372327, 0x152707b2, 0x27262201, 0x8434012e, 0x8233208b, 0x08bf4523, 0x21059245, + 0x49823736, 0x010eb908, 0x366b1202, 0x1d0f1037, 0x3128271d, 0x3a553b8a, 0x0c0a1212, 0x51314711, 0x6a6e2f30, 0x3703d96d, 0x0c276f4b, 0x4d1e0c2e, + 0x342b7731, 0x5a092409, 0x65702b2b, 0x0c256348, 0x41190c2f, 0x15373631, 0x25093116, 0x16433009, 0xfb741315, 0x218321d1, 0x1450136b, 0x0c051304, + 0x14051205, 0x2169144e, 0x8f012083, 0x56090165, 0x3a392b2c, 0x4d147180, 0x249b7814, 0x9b242626, 0x5d3aad02, 0x23232122, 0x2e2e2221, 0x3333563b, + 0x0e3a0e1f, 0x44353e12, 0x36444c4c, 0x380f1242, 0xd069200e, 0x3c7f4242, 0x38363d3d, 0x2d232f30, 0x2a2b5052, 0x35312f33, 0x776a6735, 0x77197755, + 0x26080282, 0x0b363855, 0x2c290a2b, 0x0c302c6d, 0x14020802, 0x5d512d2c, 0x0a343160, 0x24240a29, 0x152b332d, 0x09020b16, 0x41200a02, 0x032c05d7, + 0xbf01706d, 0xe7fe466f, 0x1a691a46, 0x5c080282, 0x46190146, 0x7041fe6f, 0x34339e02, 0x11604d60, 0xb62ee7fe, 0x2a26552e, 0xde262a3e, 0x2a278efe, + 0x84b6842a, 0x14142a2a, 0x084a2525, 0x32390820, 0x53a1525f, 0x083b365e, 0x4e4a0921, 0x20000400, 0xe006d800, 0x0b008e03, 0x4a001500, 0x00007400, + 0x30113037, 0x14163221, 0x19012b06, 0x08374a01, 0x4e470120, 0x17162205, 0x47128216, 0x2e250650, 0x3e343501, 0x0b914102, 0x1506072c, 0x011f1614, + 0x1415011e, 0x4d47020e, 0x022e2105, 0x16212485, 0x0c464717, 0x3e373623, 0x06484701, 0x0121d108, 0x66665d20, 0x2aadb45d, 0xad292f2e, 0x7655dd02, + 0x0d320c2a, 0x362b2b23, 0x3b2e4141, 0x620a270a, 0x563d2162, 0x37384c36, 0x0d320d28, 0x39384b1a, 0x37342020, 0x205d643c, 0xdd025a3f, 0x4c5e0a04, + 0x294a663c, 0x426c4d2a, 0x59237d5a, 0x503d5113, 0x20506161, 0x16161d1c, 0x5ff38a19, 0x6d9e02e4, 0xf5fe6db9, 0x282b6a01, 0xfd2b292e, 0x0b343db6, + 0x162b0c2f, 0x27313a17, 0x07020c2e, 0x515c1202, 0x1b31482c, 0x0b321a1b, 0x29210b2d, 0x2a2c1817, 0x130c0b29, 0x4d2f505d, 0x31711d37, 0x82572d40, + 0x58815454, 0x3447502e, 0x5d663b2f, 0x09665d6e, 0x2f0f1008, 0xfe5d3420, 0x0005009b, 0x06d8002e, 0x008e03d2, 0x001f0012, 0x0134002a, 0x25000046, + 0x2807af42, 0x1e32013e, 0x020e1402, 0x05ca4227, 0x1d06222a, 0x05161401, 0x17322111, 0x2c0f5e41, 0x27012e05, 0x17071d23, 0x1d170f1d, 0x8502870e, + 0x2305820b, 0x11231101, 0x27073143, 0x3d27053d, 0x0e3d270f, 0x0b880287, 0x3311042d, 0x02262311, 0x603c3301, 0x82232223, 0x7a5f3a02, 0x23234460, + 0x483c6144, 0x4f904f4f, 0x01df014f, 0x2b2c5609, 0x9aa35657, 0x26008225, 0x0863029a, 0x440c0922, 0x622807b2, 0x22852175, 0x0d082308, 0x76231088, + 0x42d98521, 0x282d073d, 0xb6845428, 0x5a275484, 0x52a2525d, 0x3304845d, 0x339e024f, 0xfe67c134, 0x256901f1, 0x26293d2a, 0x155315b2, 0xae4dff44, + 0xfe02284d, 0x439e0270, 0x4043f4fe, 0x01278088, 0x4362fd90, 0x82000c01, 0x00043c00, 0x068100a5, 0x00e5035b, 0x0048002f, 0x005e0054, 0x23300100, + 0x2223010e, 0x4435022e, 0x904a07d1, 0x05d04409, 0x83363721, 0x013d3501, 0x11213523, 0x32210123, 0x06141516, 0x07010e07, 0x17021e15, 0x07300b82, + 0x2123020e, 0x37323337, 0x34013d36, 0x012b2627, 0x080add4d, 0x0e04e541, 0x804a6074, 0x3035345c, 0x53434330, 0x122b9c71, 0x6518124a, 0x7979634d, + 0x24242863, 0x10101b1b, 0x772f01ac, 0x72010601, 0x141b7769, 0x1a1a3415, 0x1311353d, 0x4f391011, 0x8768fe2f, 0x821e35e9, 0x356a0800, 0x3733d2e9, + 0x01d23337, 0x38503d0f, 0x686aa26d, 0x1c3738a2, 0x0b59631c, 0x493b0b2b, 0x7588757f, 0x130b0a7f, 0x271e1d14, 0x41fe7541, 0x62764603, 0x1515422f, + 0x01070314, 0x25242f16, 0x2d2c3235, 0x1b752541, 0x3429331c, 0x33711c1b, 0x33302730, 0x00050000, 0x06d80035, 0x008e03cb, 0x0046001f, 0x00600053, + 0x25000066, 0x1b442622, 0x37362c13, 0x0617011e, 0x22210607, 0x8227012e, 0x37362521, 0x3337013e, 0x07201082, 0x32290383, 0x033e1716, 0x021e3233, + 0x10584315, 0x2135a808, 0x37123635, 0x15331133, 0x33251523, 0x010e2311, 0x96834e01, 0x41694926, 0x5b217658, 0x4d3b4811, 0x3d4d5959, 0x3a0f124c, + 0x3c3d210e, 0x5738fc01, 0x2c10113c, 0x29552323, 0x2d2d3990, 0x16172221, 0x0104020d, 0x30251c0b, 0x35482a20, 0x573e211d, 0x41413b35, 0x02424275, + 0x2dc9fea1, 0x5b8e2eb5, 0xdbbefe5b, 0xd98e2307, 0x8154a9b1, 0x4b4d2e58, 0x6a393032, 0x6a5d665d, 0x2309313f, 0x29294909, 0x30304424, 0x3680493d, + 0x291c5336, 0x29282627, 0x01362d2d, 0x1b231501, 0x4d371c0f, 0x3c53332f, 0x3d3e5821, 0x843e3d0d, 0x4d270804, 0x014a5d83, 0x3afe4a2a, 0x01d88355, + 0x00ed3b63, 0xff1d0105, 0x05e30535, 0x000b0042, 0x001b0015, 0x0067004e, 0x45350500, 0x1124148d, 0x15211133, 0x21109345, 0x92452726, 0x0706250a, + 0x2223012e, 0x240c9145, 0x010e2301, 0x21028207, 0x2882012e, 0x11232726, 0x13331123, 0x11230182, 0x457c0123, 0x292b0783, 0xad292e2e, 0x016c1402, + 0x459afc11, 0x1e210d88, 0x0987451d, 0x45490321, 0x032b0d86, 0x2309052f, 0x0f681c09, 0x821c680f, 0x042f0808, 0x06b48068, 0xcb677bb3, 0x6e8c0213, + 0xf5fe6eb8, 0x282c6a01, 0xfd2c282e, 0xfd9f02c0, 0x570361c2, 0x2f0c343d, 0x16162b0b, 0x2e27313a, 0x4505060b, 0x1a3f0682, 0x4102321b, 0x17172822, + 0x0a2a2a2c, 0x515c130d, 0x1e364d2f, 0x48120c02, 0x1cbc3412, 0x8234bc1c, 0x00fe3208, 0xabfe9e02, 0x62fd5501, 0x00040000, 0x06d80029, 0x06bb46d7, + 0x46003a22, 0x461abb46, 0x1d2611a8, 0x16171401, 0x6c423233, 0x11252307, 0x01871521, 0x01292108, 0x66655e20, 0x29adb35d, 0xad292e2e, 0x95840f03, + 0x41694926, 0x223b3b57, 0x110f3d0f, 0x2c4e3b48, 0x4e350082, 0x0e134c3c, 0x3c220f3a, 0x012d013d, 0x01bffeae, 0x01ddfe23, 0x106d4641, 0x54a9b134, + 0x272d5981, 0x22084b26, 0x35393008, 0x5d665d35, 0x2e423535, 0x020b2a07, 0x60ba609e, 0x000060c4, 0x82475103, 0x6d01082e, 0x93052fff, 0x44004705, + 0x6d005500, 0x9e299182, 0xd500ab00, 0x0000e300, 0x05c04625, 0x0622232c, 0x27012e07, 0x013e3736, 0x83433637, 0x0e072205, 0x09775202, 0x82070621, + 0x22232a01, 0x3727022e, 0x17161716, 0x093e481e, 0x43013521, 0x373706cc, 0x3233023e, 0x27061016, 0x3d023e32, 0x022e3401, 0x07010e22, 0x4f011d06, + 0x25820589, 0x34350225, 0x42353736, 0x322005c7, 0x124a4282, 0x1e152405, 0x82141501, 0x0c49476b, 0x56471320, 0x8325200b, 0x2307211e, 0x02829982, + 0x27262223, 0x232d8206, 0x2e272223, 0x37204f82, 0x2406c94f, 0x1617011e, 0x82c98807, 0x16550873, 0x3c3e4b02, 0x4330313a, 0x0c300c17, 0x3314130f, + 0x2f2b2021, 0x0a213a50, 0x1a2f240a, 0x131a191d, 0x1f221613, 0x362c2d1f, 0x2a36472f, 0x0e0c500f, 0x2e11120e, 0x45413e1c, 0x9802473f, 0x0e3c5c3e, + 0x3c0e0f0f, 0x767d3e5c, 0x31237d76, 0x1e0e0e1e, 0x1f314531, 0x08008207, 0x31100fb3, 0x593bf8fd, 0x3c4a1f3d, 0x371e3e34, 0x29296853, 0x3f0f0f38, + 0x104a3d34, 0x3a5a3c10, 0x7942423c, 0x373d4242, 0x3a6f3b3b, 0x1652033a, 0x29564516, 0x225b3890, 0x010d2d21, 0x0e0a0105, 0x2030260e, 0x3524242a, + 0x1f11101d, 0x3836561f, 0x113c2c2b, 0x413bec10, 0x413b3a42, 0x2935c641, 0x2c312e07, 0x0a2a0a26, 0x1d141516, 0x2d17090a, 0x1a202841, 0x06192819, + 0x0d0d0604, 0x25391415, 0x191a482c, 0x21140e0e, 0x143e172c, 0x0c0c1111, 0x07343a0d, 0xfe5c3634, 0x40582f6a, 0x41525340, 0xb72f5940, 0x5cb6b8fe, + 0x2c49331c, 0x34482c75, 0x24341c1c, 0x08098224, 0x1a23252e, 0x06031c1a, 0x2a47341d, 0x07115143, 0x263a4e13, 0x0d192d40, 0x20202d0c, 0x134e3a26, + 0x43511107, 0x3424232a, 0x3238571d, 0x37373213, 0x38270482, 0x2e303a01, 0x84302e10, 0x1f2a0804, 0x6b404149, 0x4e291b55, 0x365a2828, 0x12140101, + 0x0e0f1b12, 0x304c360f, 0x1d2b2a32, 0x1312221e, 0x93303044, 0x3c0e3c3f, 0x04823e3e, 0x82003f21, 0x00043700, 0x06e40078, 0x00830388, 0x0027000f, + 0x00400037, 0x11300100, 0x03842330, 0x2130352a, 0x13301530, 0x33303530, 0x1b830f8a, 0x17823320, 0x27302122, 0x69542782, 0x010e3c0c, 0x012e3307, + 0xc86cac01, 0x5b53fc01, 0x5c24015b, 0x3c2b025c, 0x266f3afb, 0x82882699, 0xfe430803, 0x411005d7, 0x4010c610, 0xc2fd2203, 0x60603e02, 0x0158c2fd, + 0xfe5858ee, 0xb5b55812, 0x70be0170, 0x7042fe70, 0xc5313a02, 0x00c53131, 0x08000500, 0xf806d800, 0x34008e03, 0x46003e00, 0x58005000, 0x4b370000, + 0x272a3207, 0x13230723, 0x17121633, 0xa1862301, 0x3e081190, 0x2a7655fd, 0x230d310d, 0x40372b2b, 0x0a3a2e41, 0x62620a28, 0x36563c22, 0x2738384c, + 0x1a0d320d, 0x203a374b, 0x3c36341f, 0x3e215d65, 0x3dd0025a, 0xe46e3bfa, 0x26982689, 0x1104d7fe, 0x82c51040, 0x912820d1, 0x4ad92013, 0x0b242cea, + 0x9e02b5b5, 0x210a0041, 0x108ef7fd, 0x00820020, 0x60000335, 0xa006d800, 0x15008e03, 0x4b002b00, 0x30250000, 0x53333003, 0x33200542, 0x25057b43, + 0x07020633, 0xb1413521, 0x47052013, 0x012d1def, 0x1270db3c, 0x2b0a1247, 0x2b0b040b, 0x2509820b, 0x2595256d, 0xc7414b01, 0x84012605, 0x4a269683, + 0x14c94768, 0x9e02e428, 0x2737dd37, 0x0282279b, 0xc3830882, 0x2007d641, 0x17a9470b, 0x042acb82, 0xe4004700, 0x8303b906, 0xcd820b00, 0x29002122, + 0x46183f46, 0x01280a1b, 0x23112311, 0x48152135, 0x210e3047, 0x0246ad01, 0x7b012507, 0xfc01c86c, 0x200f0846, 0x06ea45c1, 0x423e0221, 0x7f820579, + 0x7b4f0620, 0x003d260c, 0x0058004e, 0x28794f7e, 0x2156454f, 0x454f7a03, 0x09fe211b, 0x216d184f, 0xeb4e1803, 0x01063b4a, 0x0535ff17, 0x004205e9, + 0x0017000b, 0x004b002d, 0x005f0055, 0x11300500, 0x03823330, 0x15302122, 0x0b870784, 0x31057550, 0x37363435, 0x1632013e, 0x14011e17, 0x010e0706, + 0x9c4b3227, 0x27342906, 0x012e2726, 0x07062223, 0xbf460182, 0x11052107, 0x2412394f, 0x11016ccc, 0x08038263, 0x4210fd22, 0x2926266a, 0x6a262629, + 0x26256b83, 0x25262a2a, 0x4026416b, 0x0c0d1617, 0x17160d0c, 0x3f282640, 0x3f220b87, 0x8348f401, 0x02cb250c, 0x61c2fd9f, 0x032b0484, 0x2b2c2d57, + 0x82545582, 0x832d2c2b, 0x83a92009, 0x1b612d08, 0x25251919, 0x252e692e, 0x1b191925, 0x552f0c8c, 0xb86e9e02, 0x01f6fe6e, 0x2e282c69, 0x82002c28, + 0x0a0036f0, 0xf606d800, 0x12008e03, 0x3a003000, 0x4a004400, 0x22250000, 0x06a84f2e, 0x2107b14e, 0x604c3637, 0x4ae6a606, 0x2c290592, 0x294c6a42, + 0x426a4c29, 0x9b078541, 0x665d21e0, 0x08086449, 0x6d130222, 0x2dd91001, 0x54548257, 0x2d2d5882, 0x82a88258, 0x1b602d57, 0x2425191a, 0x242e6a2e, + 0x1b1a1925, 0xd5820c8c, 0x280cd54f, 0xfd9e02c1, 0x000060c2, 0x22cb8204, 0x82b606d8, 0x001326db, 0x002d0022, 0x06d34366, 0x30153023, 0x26038821, + 0x30013011, 0x83173233, 0x070124e8, 0x52012b06, 0x27240569, 0x11012b26, 0x5006cf52, 0x272107e6, 0x82fc8226, 0x34352202, 0x0de85037, 0x14150623, + 0x06e85017, 0x06072408, 0x4a010e07, 0xcafea301, 0xedfe1301, 0x41edc301, 0x294a3434, 0x34344a29, 0x4beded41, 0x4b2e2e5c, 0x45dc0280, 0x242705de, + 0x40372b2a, 0x45171741, 0x112405df, 0x35563d11, 0x0807e045, 0x3a384a2b, 0x361a1a3f, 0x115d653c, 0x59201f10, 0x609e02e4, 0xdcfe60ba, 0x15159e02, + 0x7da87d54, 0x60151554, 0x5b6c5b5e, 0x22fe2f2f, 0x0ad6456b, 0x50171721, 0x242107c2, 0x09c35024, 0x2c2f2808, 0x0b14152a, 0x515c130c, 0x1b26272f, + 0x00001d1c, 0x008f0004, 0x03710690, 0x001500d6, 0x0039002f, 0x25000043, 0x53300130, 0x6e4e1186, 0x0bd44905, 0x2322df84, 0x0a523721, 0x096e4e08, + 0xfea2012e, 0x59168ded, 0x0b360f16, 0x0b380f05, 0x89370982, 0x012fb92f, 0x687301c2, 0x34291b77, 0x1f1e1919, 0x10241b1a, 0x4e1d1c11, 0x3c21065d, + 0x075b4e3c, 0x46039034, 0x45ecfe45, 0x3729c536, 0x014525c8, 0xfd8c4514, 0x4b4e8cd2, 0x142a3605, 0x0b010703, 0x4918170b, 0x2d2c3235, 0x75252120, + 0x34293337, 0x074a4e37, 0x01050036, 0x0535ff32, 0x004105ce, 0x00330026, 0x008a0078, 0x0500009b, 0x202e2c4e, 0x41d14a01, 0x4d012e21, 0x1e290642, + 0x11331701, 0x21231133, 0x26048235, 0x2607020e, 0x82373627, 0x15300810, 0x57387002, 0x2c10103d, 0x2a552322, 0x2d2d3990, 0x17172122, 0x0105010c, + 0x31251c0a, 0x35472b1f, 0x573d221e, 0x42423a35, 0x02414175, 0x393b3f44, 0x2108884a, 0x884a3413, 0x0a0b2206, 0x07884a23, 0x1f233c08, 0x362c2c1f, + 0x2937472f, 0x0e0d4f0f, 0x2d12110e, 0x45413e1d, 0xb2fd4740, 0x030e3408, 0x0edb7968, 0x67030834, 0xbc430179, 0x3e341708, 0x55400212, 0xcba3a556, + 0x30304425, 0x4e81493c, 0x47080d90, 0x0f1b2414, 0x2f4d361d, 0x223c5333, 0x0d3d3e59, 0x3c3f3f3c, 0x013e3d0d, 0x0729353d, 0x262b312e, 0x160a2a0a, + 0x091e1414, 0x402d1709, 0x1a1a2028, 0x05061927, 0x140e0c06, 0x2c253815, 0x0e1a1a48, 0x2b21150e, 0x10153f17, 0x0806594a, 0x5c363335, 0x63104a03, + 0x0200fe1b, 0x1b8dfe9e, 0x01021063, 0x015a62fd, 0x433818f5, 0x5c3a0213, 0x5abcfd5d, 0x1b000300, 0xe506d800, 0x39008e03, 0x7f005c00, 0x49250000, + 0x68430d47, 0x27262205, 0x10694326, 0x260ac04e, 0x0e070607, 0x56222101, 0x3e220597, 0xc95b3301, 0x0c09560a, 0x012722a2, 0x2a775410, 0x490c320d, + 0x91430570, 0x31312c06, 0x573c1111, 0x38374c36, 0x49330c27, 0x23080b73, 0x1f1f1011, 0x8429025a, 0x24131395, 0x57426825, 0x3d0f2276, 0x3a48120f, + 0x4e58584e, 0x0f124c3c, 0x79220f3a, 0x8b491e9e, 0x06b4430b, 0x512e2e23, 0x0bb5432c, 0x2d171729, 0x0c0b292a, 0x43505d13, 0xb12805b5, 0x404154a9, + 0x4d2e2c2c, 0x50053b4e, 0x52200a68, 0x00281a9a, 0x4f000500, 0xb106d800, 0x21099354, 0x93544000, 0x21012234, 0x08028235, 0x06152128, 0x01210702, + 0x22603d54, 0x22232322, 0x60796022, 0x44242444, 0x4e483c60, 0x4f4f904e, 0x0901de01, 0x572c2b57, 0x0d57a357, 0x60032e05, 0x420141fe, 0xa601cdfe, + 0x0136d636, 0x2b41544c, 0xbcfd2a08, 0x59ea015b, 0xbafe525b, 0x00070052, 0x0635ff2e, 0x004205d2, 0x0033001c, 0x00530047, 0x0073005d, 0x37000091, + 0x15300706, 0x05034c30, 0x33301132, 0x37363736, 0x07063330, 0x23171216, 0x1101012e, 0x450ae545, 0x26230cf1, 0x58333027, 0x3320066f, 0x1122cf82, + 0xe5560130, 0x012e2118, 0x082df347, 0x1a42f736, 0x48046d6d, 0x7f5a5a18, 0xba32ae41, 0x92278316, 0xad01a501, 0x2301c0fe, 0x4001ddfe, 0x73742201, + 0x1b6d1b7c, 0x1b6c1b03, 0x2da41878, 0x20014afb, 0x5e65655e, 0x20075d50, 0x29144817, 0x4b6e2308, 0x9f02d01e, 0x1e5cacfe, 0xce4d6d6d, 0x21e8fe4b, + 0xe2fee13d, 0xbb609f02, 0x0161c360, 0x32cbcc08, 0x028232c7, 0xe2fe2927, 0x03f6fe4e, 0x0df84763, 0x48b5fd21, 0x00212d37, 0x8f6b6200, 0xca000535, + 0x360635ff, 0x0f004205, 0x33001700, 0x92006600, 0x4e050000, 0x062a1105, 0x26333007, 0x27012e05, 0x494e3023, 0x30332605, 0x17011e13, 0x06e74933, + 0x53302321, 0x25243037, 0x33270226, 0x16214282, 0x07e34c17, 0x2706f14c, 0x33373637, 0x23070206, 0x262f6c82, 0x07062327, 0x0207010e, 0x3afb3df8, + 0x4e98266e, 0x30340770, 0x0230c631, 0x08340e19, 0xdb796802, 0x030e3408, 0x5bfc7967, 0x48057c44, 0x2e35050e, 0x621e1e3a, 0x563d2262, 0x38374c36, + 0x1a490327, 0x1f3a384a, 0x07eb4d20, 0x90014c08, 0x6e1a6a1a, 0x18092e0d, 0x24080317, 0x0f360b0a, 0x0a360e79, 0x03092309, 0x6b232331, 0x7a1b6e1c, + 0x1910390d, 0x19190219, 0xcb0d3b10, 0x0170b6b6, 0xfe7070bf, 0x3b027041, 0x34949494, 0xfd0f641b, 0xfe9f02ff, 0x1b640f8d, 0x53fd0102, 0x0c212d79, + 0x334b826f, 0x6f2ddb3b, 0x29981e70, 0x3c3cdc2b, 0x94252bdc, 0xa2a1de25, 0x6f245f82, 0x663fea31, 0x3f370082, 0x040031ea, 0x3bff1801, 0x3c05e805, + 0x3a001b00, 0x57004300, 0x41250000, 0x21221a7d, 0xa5612330, 0x3e232306, 0x0a823701, 0x27089843, 0x1e07010e, 0x33110101, 0x2007c543, 0x06764111, + 0x27823320, 0x0806b543, 0x320ccd36, 0x7867030c, 0x0c310ddb, 0x03796803, 0x6d1b7f3f, 0x6b1b021b, 0x9124781b, 0x238b2324, 0x19661980, 0x1a671a02, + 0x248c2478, 0xd9fb9325, 0x0111016c, 0x269a2601, 0x08078043, 0x9a277723, 0x5f17ae27, 0x02fffd18, 0x188efe9e, 0x0002175f, 0xb22d62fd, 0x2db22c2c, + 0x3639e539, 0xa72936db, 0x3e028229, 0x3936da36, 0x022903e6, 0x60c2fd9e, 0x01440801, 0xc732430f, 0x32c73131, 0x43f2fe43, 0x8200f6fe, 0x01062200, + 0x20f38236, 0x2ff382ca, 0x001e0014, 0x0032002a, 0x00500044, 0x23300500, 0x22055744, 0x82061415, 0x5c1720cb, 0x27220fc8, 0x18650723, 0x070b5008, + 0x3e4f0320, 0x2103210e, 0x3a0b6e4e, 0x21016da3, 0x4142685a, 0x79186118, 0x85165a16, 0x2f2e2aac, 0xb603ac29, 0x423bfa3d, 0x10330a64, 0x10c51040, + 0xdc79fd40, 0x11481171, 0x040a2b0b, 0x820b2c0b, 0xdf6e2309, 0x984e6801, 0x02c53f09, 0x485d6c9e, 0xbc2f145f, 0x2db52d2f, 0x2e292b5b, 0xfed52b28, + 0x70b6b696, 0x6f6fbf01, 0xf95041fe, 0x59012107, 0x220d4f4f, 0x540262fd, 0x003007a6, 0x00a90002, 0x03570690, 0x001d00d6, 0x25000033, 0x2005cb41, + 0x05855106, 0x210eae41, 0x05500516, 0x08114905, 0x33304008, 0x03301530, 0x9027a076, 0x64640413, 0x35c21896, 0xa017bc33, 0x02207f20, 0x96208120, + 0x8a33be17, 0x0aeb2d01, 0x164f411c, 0x41955003, 0x4190ccce, 0xa7a720ed, 0x53330127, 0x2426014f, 0x8234d034, 0xfe243402, 0xd7d74fdb, 0x1e720271, + 0x02175446, 0xfd47a148, 0x1000712b, 0x0102c71e, 0x28010634, 0xd8052fff, 0x0f004705, 0x43002500, 0x74005600, 0x4b547c00, 0x33d34f11, 0x194f0120, + 0x071e522b, 0x6d670228, 0x01fb01c7, 0xe84f4173, 0x6b822107, 0x2205fa4f, 0x4f27416b, 0x272509f1, 0x16164027, 0x2c00820d, 0xfd401616, 0x4c6b41d0, + 0x6b4c2929, 0x21078741, 0x1c874126, 0x28264134, 0x0c17163f, 0x170c0d0d, 0xed023f16, 0xfc01c86c, 0x47527901, 0xb7fd3605, 0x822c2b2d, 0x2c815554, + 0x2c2d2d2c, 0x82a9812c, 0x612d2b2c, 0x06384f1a, 0x4f242521, 0x24210538, 0x06454f25, 0x01031a24, 0x2e83572d, 0x2d2d5823, 0x202c8258, 0x502b8a57, + 0x714f093a, 0x011a2205, 0x08ab52e8, 0x39000538, 0xc70635ff, 0x0c004105, 0x3b001600, 0x81005e00, 0x30170000, 0xcb5e3011, 0x10ae6112, 0x2005895a, + 0x0ca34b06, 0x013e0136, 0x010e2337, 0x2e010b07, 0x1e232701, 0x23111701, 0x17163311, 0x33220882, 0x1b823736, 0x23113322, 0x392622a2, 0x2c560901, + 0xd25e582c, 0xad2f0808, 0x21215d3b, 0x21212424, 0x553b2e2f, 0x491e3433, 0x343f110d, 0x454b4b45, 0x0e124335, 0x6a1f0e38, 0x0501c402, 0x22030c01, + 0x09818309, 0x820c0322, 0x6220080c, 0x04373678, 0x18080922, 0x05511617, 0xd5fd6277, 0x0b010402, 0x83092104, 0x04210982, 0x0204010b, 0x36322082, + 0x09092105, 0x52151817, 0xbf627704, 0x34339e02, 0xf75e66c2, 0xb0fd2208, 0x07626128, 0x25133708, 0x07294925, 0x525e3238, 0x355e52a2, 0x0822083c, + 0xa9014f4a, 0x09134c13, 0xeffe1552, 0x51151101, 0x134b1208, 0x9e0263fe, 0x5d0e7575, 0x2e43421a, 0x62fd0ab2, 0x219fff04, 0x00000033, 0xff4d0104, + 0x05b3052f, 0x00170047, 0x008b0051, 0x05b7529d, 0x4a09d350, 0xc25009ed, 0x23594d14, 0x4d0e1649, 0x01202992, 0x2110094f, 0x76468501, 0x4b013809, + 0x0c2a7654, 0x2a240c32, 0x4240362c, 0x0a3b1717, 0x31610a28, 0x48111031, 0x0c2306f1, 0x611a0c33, 0x3b2906d3, 0x10105d65, 0xfd5a1f20, 0x2332848b, + 0x2b2b230d, 0x272e3286, 0x3131620a, 0x563c1111, 0x37384c36, 0x32890d28, 0x82643c21, 0x1f1f2b32, 0x0ce2015b, 0x68020d31, 0x0682db79, 0x79670323, + 0x06b246c5, 0x343d0b32, 0x2b0c2e0c, 0x31391616, 0x0b171827, 0x12020702, 0x250d764d, 0x17172822, 0x764d2b2c, 0x6203210b, 0x012133b1, 0x0f54487e, + 0x0000002f, 0x00cf0002, 0x03310681, 0x003400e5, 0x10f14e4a, 0x666a2620, 0x08985c05, 0x5209ae5d, 0x98080758, 0x1101020e, 0x36321614, 0x11331135, + 0x020e0714, 0x022e2722, 0x02021135, 0x0f34946a, 0x352d0f3f, 0x52504436, 0x2525493a, 0x2a3d3d7b, 0x5e446b4c, 0x5b314646, 0x465d2104, 0x21282847, + 0x7e4b4420, 0x704e2974, 0xc552f901, 0x11108551, 0x3bae764b, 0x82214b3b, 0x3a0f404d, 0x1b1c360f, 0x3a313d48, 0x1706070e, 0x3865393a, 0x21213e59, + 0x03513e21, 0x1c1d322a, 0x1a1a3438, 0x7318100d, 0x44613a65, 0xfd540325, 0x6c6c6bfc, 0xfe04026b, 0x44435c11, 0x16152b57, 0x015c8658, 0x10db82ef, + 0x3d07732d, 0x35ff0a39, 0x4205f606, 0x18000e00, 0x49002b00, 0x5d005300, 0x00006300, 0x5c333001, 0x2b200968, 0x2306965a, 0x11012b26, 0x5c2c824c, + 0x113a1483, 0x15211133, 0x41ed7602, 0x29252568, 0x68252529, 0x4beded41, 0x804b5c5c, 0xb05b49fe, 0xd4013c3a, 0x7e2a292b, 0x292a7ea7, 0x5b5e612b, + 0xfe5f5b6b, 0x2df60222, 0x54558257, 0x822d5782, 0x82a92007, 0x1b612906, 0x24251919, 0x242f692f, 0x88075f4c, 0x0e9a5c0c, 0xc45bfd20, 0x00052606, + 0x06d80003, 0x0abf56fd, 0xbf565920, 0x4c052034, 0xaa601362, 0x2311230d, 0xd8560801, 0x0d2e6b11, 0xd856a420, 0x01963906, 0x080b0105, 0x8283071f, + 0x0b081f07, 0x61010401, 0x12481278, 0x09081f08, 0x12240382, 0x62771247, 0x3a2bec56, 0x134c13a7, 0xfe124b13, 0x121101ef, 0x4a13124a, 0x0263fe13, + 0x279c279e, 0x82165916, 0x22088202, 0x820062fd, 0x00033100, 0x06d80022, 0x008e03de, 0x0033001b, 0x1300006c, 0x561c5953, 0x114c15ff, 0x012e2114, + 0x5c106a59, 0xd7200fd4, 0x28056553, 0x0c320cdb, 0x01796803, 0x0ad45640, 0xd05c4c20, 0x5702212f, 0x220a214b, 0x52010218, 0x0b200854, 0x0832cd5c, + 0x07000025, 0x2fff7c01, 0x47058405, 0x5b003700, 0x75006800, 0xa9009c00, 0x0000d500, 0x0e213001, 0x36330701, 0x66023e37, 0x012407a0, 0x22230607, + 0x23050076, 0x1e171637, 0x15791782, 0x06222905, 0x27012e07, 0x2137013e, 0x663a7666, 0xa46a07d7, 0x011e220d, 0x17a46a33, 0x82352121, 0x055a5f71, + 0x22232624, 0x8383020e, 0x02233c82, 0x82171632, 0x79152001, 0xc28205c9, 0x03213708, 0x03d7fe26, 0x0b06020c, 0x2b200d0d, 0x364b2b1c, 0x3d10101f, + 0x2d392c2d, 0x14342323, 0x0c4f1013, 0x2b230d0e, 0x41413b1c, 0x12342b3b, 0x040f3c0f, 0x7c010411, 0x75666901, 0x3b3b3724, 0x583717fe, 0x2c11103c, + 0x29552323, 0x2d2e3890, 0x17162221, 0xfd6a010c, 0x221e2109, 0x0806fd6a, 0x03414159, 0x2339fe50, 0x1b33248f, 0x1c323a1b, 0x06141f29, 0x0b103f10, + 0x4c381212, 0x1c1b5066, 0x2d190f0e, 0x1a201e1d, 0x52011a69, 0x9e277b01, 0x10101428, 0x361c0c17, 0x2a32314e, 0x10113d2a, 0x16210a0a, 0x143e1815, + 0x0d191110, 0x3a0b3a41, 0x02142141, 0xf93e0209, 0x6657fd3e, 0x01213766, 0x0b666bd1, 0x2827262d, 0x352d2e28, 0x23140101, 0x6b1d101b, 0x3f081266, + 0x207f2068, 0x2e2a2a2e, 0x1138310c, 0x0616271c, 0x1d200619, 0x1e1b2e1d, 0x25241b1a, 0x3e45282b, 0x171c1c1c, 0x0000175a, 0x7a010600, 0x86052fff, + 0x28004705, 0x6c003600, 0x9f009200, 0x0000ca00, 0x680c5868, 0x25222657, 0x83420621, 0x013e2418, 0x5f031e37, 0x5069064c, 0x21132207, 0x14bf5e25, + 0x2219eb6c, 0x61363521, 0x454206a0, 0x6852201e, 0x3935055d, 0x2c22225a, 0x0a04030d, 0x30260e0e, 0x24242b1f, 0x11111e34, 0x055c681e, 0x103d4508, + 0x413bec10, 0x423a3b41, 0xfe340342, 0x070c05d6, 0x210c0d0b, 0x4a2b1d2a, 0x0f101f36, 0x392c2d3e, 0x3523222d, 0x0e101413, 0x1b0d0d34, 0x3c1c2b22, + 0x2b3c4040, 0x3c0e1234, 0x0112070f, 0x3810fd7c, 0x11103c58, 0x552c2382, 0x2d389029, 0x1622212e, 0x03030c17, 0x5e07476d, 0x412205e5, 0x49427541, + 0x6b6b2505, 0x3b1c1b33, 0x21054842, 0x4842400f, 0x1b1c2e07, 0x2c190f0e, 0x1b201d1e, 0x52011a69, 0x2d4868e0, 0xa449f222, 0x24147542, 0x140a2a0a, + 0x0b764221, 0x01017423, 0x2d3b42b9, 0x42605f21, 0x0021243a, 0x061f5306, 0x0f00422f, 0x28001c00, 0x57003200, 0x00007a00, 0x07e95805, 0x30133034, + 0x17121633, 0x30272603, 0x30070623, 0x2e333007, 0x3d530101, 0x1e043a5c, 0xe206240a, 0x640a2406, 0x872182c9, 0x0b0af121, 0x3c0a0b0c, 0xfc290bb1, + 0x1d34539b, 0x4a0d1f29, 0x44343f11, 0x53444c4c, 0x09270d34, 0x82820421, 0x53092203, 0x093a0734, 0x18080521, 0x15520517, 0x23cb6277, 0x7f18187f, + 0x709f0223, 0x017041fe, 0x008231e0, 0x24d35708, 0x02a6018c, 0xc233349e, 0x01f2fe67, 0x3e292668, 0xb1fd2529, 0x842a2b27, 0x2a2b83b6, 0x25251413, + 0x3929074a, 0xa1535e32, 0x3c365e53, 0x4a082109, 0x13a8014f, 0x5216144c, 0x01f0fe09, 0x16510810, 0xfe124b14, 0x769e0264, 0x0e5d1975, 0xb10b4242, + 0x0062fd2f, 0x67410700, 0x00162c08, 0x002a0020, 0x003f0035, 0x7f870064, 0x06230807, 0x6c321507, 0x0e200634, 0x24052571, 0x34013d36, 0x0b237126, + 0x7f730120, 0x47b35413, 0x98022208, 0x504e1001, 0x171d3437, 0x090a2218, 0x22392816, 0xa766d5fe, 0x25262625, 0x252197a7, 0xfd972125, 0x507d413b, + 0x59d4013f, 0x05484154, 0x280b0b0c, 0x2b211c1c, 0x5a1c3347, 0x2b2d2b27, 0x28245727, 0x0123292b, 0x5185411e, 0x05000034, 0x2fff2701, 0x4705d905, + 0x34002a00, 0x71003c00, 0x14827d00, 0x2409d972, 0x3233023e, 0x19f17516, 0x5410ff6a, 0x76650e7b, 0x0d756508, 0x210a0b62, 0xb16f020e, 0xf402210b, + 0x261f0676, 0xfb3c7302, 0x6ce56f3a, 0x40260705, 0x4010c611, 0xe170b6fd, 0x270a210d, 0x2616756b, 0x3f215e64, 0x542e015a, 0x5f2009d3, 0x21071676, + 0x16762d59, 0x08652e08, 0x2f101008, 0xfe5d341f, 0x02b6b69b, 0x0b505b9e, 0x51544e20, 0x0b2f210a, 0x540f7376, 0x5c250982, 0x374d2f51, 0x0915701d, + 0x0200003d, 0x43ffce01, 0x3b043205, 0x3b002100, 0x30050000, 0x26272223, 0x2e353035, 0x82262701, 0x05417408, 0x1617322f, 0x15011e17, 0x15070214, + 0x3e322733, 0x05b76701, 0x23022e22, 0x08085b6f, 0x04021e28, 0x28558e70, 0x2f885527, 0x3e191b2f, 0x50503938, 0x395050c4, 0xa0bb3e38, 0x603af09a, + 0x13131244, 0x3a604412, 0x09855f3b, 0x2cbd5f31, 0x0b4c492b, 0x5b41414d, 0xc27f735c, 0x82224142, 0x42413400, 0xfee17fc2, 0xf2671cfc, 0x37374c28, + 0x37459e45, 0x8a284c37, 0x0300290a, 0xe4001300, 0x8303ed06, 0x3d220782, 0x79675100, 0x051d6c05, 0x4b0ac15d, 0x03220694, 0xf8570330, 0x23302307, + 0x436c1130, 0x2311230f, 0x01822130, 0x01303522, 0x23080584, 0x06153021, 0x30210702, 0x1772cfe3, 0x170d175d, 0x2270175b, 0x0903228a, 0x0c010501, + 0x82081e08, 0x071f0882, 0x36059744, 0x07124912, 0x08080820, 0x4812081f, 0x02627712, 0x0141fe9a, 0x62cefe41, 0xe432068e, 0x9b010301, 0x3131c832, + 0xfe4432c8, 0xfdfe45ee, 0x874b9d01, 0x09956221, 0x04000028, 0xd8004c00, 0xe382b406, 0x1e001426, 0x5f002800, 0xf35de583, 0x7211201d, 0x11210656, + 0x32994a01, 0xfe5db920, 0x60192106, 0x2408fe5d, 0x02ac2a2e, 0x076e6813, 0xfe580327, 0x030c03d7, 0x23244a07, 0x4a0e1321, 0xe4200624, 0x270e085e, + 0x2b292e28, 0x0296fed5, 0x2a067268, 0x279e2840, 0x17101014, 0x49351d0c, 0x11210fc5, 0x0ec54910, 0x00820020, 0x73010431, 0x8d052fff, 0x4c004705, + 0xb4007d00, 0x7200e000, 0x1720162f, 0x2106e24a, 0x01840607, 0x011e1522, 0x8405f24a, 0x2306220d, 0x05115722, 0x82372721, 0x0c3a7217, 0x210a324b, + 0x716b2627, 0x06364b06, 0x36370123, 0x85558632, 0x010e2354, 0x68412107, 0x8a012033, 0x1d514964, 0x67500221, 0x620811aa, 0x1d1d2828, 0x0a0a1110, + 0x17181212, 0x13331d1a, 0x110b0b13, 0x2c1f2011, 0x232f362c, 0x141c1b24, 0x0d4f0f15, 0x2d12111c, 0x45423d1d, 0x80034740, 0x8f2439fe, 0x1b1c3323, + 0x1b321e1d, 0x0b0f0f2a, 0x4010050a, 0x13110b0f, 0x66262637, 0x0e1c1b51, 0x1616190e, 0x1a201e1d, 0x52011b69, 0xd6fea7fd, 0x49030b03, 0x37350893, + 0x3e100f1e, 0x2d392d2c, 0x14342322, 0x0d4e0f14, 0x2c220e0d, 0x0692491b, 0x4c3b0f21, 0x02240507, 0x2438fe50, 0x2107b34b, 0xb34b1e2a, 0x854b2008, + 0x4b18205e, 0x4d7208b3, 0x0c270810, 0x2116170b, 0x1a20291f, 0x0c141419, 0x0604060d, 0x1d14151a, 0x242c251c, 0x0e191a24, 0x110a0a0e, 0x17161511, + 0x7222143e, 0x75200955, 0x2609614b, 0x0e111c1c, 0x4b13140e, 0x0d210764, 0x05654b0e, 0x1f442923, 0x05664b1f, 0x4c460521, 0x62202b22, 0x2028bb4b, + 0x06274f04, 0x0f008328, 0x37002e00, 0xfb5d8f03, 0x25d17e13, 0x27022625, 0x18011d33, 0x18223546, 0xc9158a45, 0xa65fa638, 0x90042026, 0x20388798, + 0x3d461815, 0x37012215, 0x7745183d, 0x18149414, 0x9111b345, 0xa638a611, 0x215fcc26, 0x46183335, 0x0130103f, 0x01b2663a, 0x6b0601c9, 0x0f103736, + 0x27281d1d, 0x12544018, 0x18eb0123, 0x0346185f, 0x03012d4f, 0x040c040e, 0x380e040e, 0x390e7c0e, 0x46180782, 0x01285204, 0x18621964, 0x0f390f7a, + 0x0b376b82, 0x0f030e04, 0x29030f3d, 0x4502bbfd, 0xb0fd5959, 0x3c7f4242, 0x18373c3d, 0x210aab40, 0x40183430, 0x4a200aab, 0x03da4510, 0x00002f55, + 0x47000500, 0xb906d800, 0x1e008e03, 0x0b822f00, 0x70005828, 0x0e010000, 0xef6c0701, 0x0662770a, 0x16201482, 0x7b05f16c, 0x05202456, 0x013925a4, + 0x103d0f10, 0x10046c6c, 0x791e1040, 0x9f287e1e, 0x2bad2b28, 0x02882283, 0x18ea7a63, 0x07060627, 0x0231100f, 0x08209f52, 0x46121d21, 0x9e02cf12, + 0x5115acfe, 0x24912514, 0x412fbc2f, 0x3441fefe, 0x2ef0fed1, 0x53404059, 0x7a414052, 0x1b350691, 0x762b4934, 0x1b34482c, 0x2424341b, 0x252b762c, + 0x1b1a1b23, 0x2224a35c, 0x4e060000, 0x2f3a0893, 0x63004200, 0x97008d00, 0x00009f00, 0x30213005, 0x36373035, 0x30353637, 0xdb493435, 0x37362a0a, + 0x1e32013e, 0x15161701, 0x05814a14, 0x010e0725, 0x56052107, 0x3521052a, 0x211d8234, 0xab7c3637, 0x4d3d8306, 0x26210555, 0x20018227, 0x222f8522, + 0x4a14011d, 0x012005d2, 0x08d14118, 0x242ff74e, 0x39fe4503, 0x091053d6, 0x2c055955, 0x664c1c1c, 0x0f0e3750, 0x17160c0d, 0x0612531d, 0x3f490126, + 0x0e3c2e2e, 0x23080082, 0x3f2e2e3c, 0x7c76767c, 0x10181922, 0x0606070f, 0x18100f07, 0x19184519, 0x0706100f, 0x0f100607, 0x89fe1819, 0x25200d4f, + 0x3afb3d74, 0x0d4fe46e, 0x68c52c0c, 0x292a2ebf, 0x38310c2f, 0x49261d11, 0x172a06c1, 0x351e1b17, 0x282b2524, 0xc1492223, 0x17672207, 0x07447c18, + 0xb7181733, 0x5cb6b8fe, 0x1a1a0e0e, 0x752d2423, 0x1a24242c, 0x29a0821a, 0x231b1a0e, 0x2d752c24, 0x0e832324, 0x4f770321, 0x20082c2b, 0x06000000, + 0x95fe0b01, 0x3c05f505, 0x39001f00, 0x4b004100, 0x6e005500, 0x30010000, 0x3d262223, 0x14f94e01, 0xf94e0620, 0x0792671a, 0x9b770120, 0x18052012, + 0x08171041, 0x5fe50223, 0x5b383539, 0x1211201f, 0x3625262a, 0x35368235, 0x7c292626, 0x27a1676b, 0x0c0d2d40, 0x402d0d0c, 0x2d098227, 0x0c0d0d0c, + 0xed02402d, 0xfb01c76d, 0x127a3bfb, 0x15042b0c, 0x09230905, 0x18186219, 0x08821962, 0x80670538, 0x7bb306b4, 0x3a95fe67, 0x34073231, 0x3e3d2b2b, + 0x2c81554c, 0x0082172b, 0x812c2b3d, 0x13ad9655, 0x331aa245, 0x6a2d2525, 0x3324252e, 0x24331b1b, 0x2d6a2e25, 0x67332525, 0x01210886, 0xca461824, + 0x2e292d09, 0x123e2b28, 0xb32c1249, 0x2cb32d2d, 0xfd220882, 0x411802ff, 0x022c0718, 0x81008500, 0xe5037b06, 0x4d003400, 0x41357764, 0x39081716, + 0x9469b701, 0x103e1035, 0x4435362c, 0x49395151, 0x3d7a2526, 0x6c4c2a3e, 0x45465f43, 0x21035b31, 0x2848465d, 0x44212027, 0x29757e4a, 0xfa03714e, + 0x0b2c0b06, 0x24238113, 0x08821381, 0xa1820627, 0x9ae007e1, 0x2d846482, 0x178f022a, 0xec22175a, 0x22ec4040, 0xfd380882, 0xfe46037f, 0xfcaa0156, + 0x030000ba, 0x9000b500, 0xd6034b06, 0x15000b00, 0x2119bd7b, 0xe5760109, 0x01b63c11, 0x7f7f7468, 0x34d8e174, 0xd8343939, 0xedfe5a03, 0x1758178c, + 0x050f370a, 0x820a380f, 0x2e883409, 0x03902eba, 0x89e68946, 0xc501b2fe, 0x323a3236, 0x7631fd36, 0x252205b1, 0xb17637c8, 0x8200200a, 0x07135000, + 0x2007b745, 0x46b5457e, 0x0834c64e, 0x3d101521, 0x036d6d0f, 0x1f104010, 0x287f1e78, 0xac2b27a0, 0x8722832b, 0x5c3f6302, 0x0e0e0f3b, 0x445c3b0f, + 0x3128053c, 0x1f0d0d1f, 0x1f314531, 0x22053444, 0x501a0331, 0x02203248, 0x213dd745, 0x6950ef01, 0x01053a2c, 0x052fff5b, 0x004705a5, 0x003e0034, + 0x00810048, 0x050000a2, 0x36272622, 0x07af7937, 0x20103754, 0x04451802, 0x44252011, 0x01201207, 0xf968458c, 0x0d697629, 0x2a0ee76a, 0x010e1716, + 0x76555002, 0x7f26252a, 0x0b2314d7, 0x7f091e1a, 0x01210dd8, 0x0542442d, 0x2aacb335, 0xac2a2e2e, 0x76542cfe, 0x2425262b, 0x40372b2a, 0x69161842, + 0x0d211138, 0x0e386919, 0x3b058476, 0x41692425, 0x2d227558, 0x3b48112e, 0x4e58584e, 0x0a134b3d, 0xd079224d, 0x2323343d, 0x54050a69, 0x0a230e84, + 0x54081b16, 0x617b1285, 0x2e292507, 0x18012b28, 0x48693d89, 0xb12a0826, 0x404055a9, 0x4d2d2c2d, 0x3019194b, 0x665d6a39, 0x313e695d, 0x52492f06, + 0x04000000, 0xe4002e00, 0x8303d206, 0x27000f00, 0x41183600, 0xcd5e15f7, 0x61132015, 0x62251825, 0xfc01c86c, 0x09a55570, 0x40ed832b, 0x28252569, + 0x69252528, 0x05ee6040, 0x41188120, 0x022009f8, 0x2705d370, 0x2a2a9e02, 0x7da87d2a, 0x60270582, 0x5b6c5b5e, 0x8222fe5e, 0x06002d9e, 0x2fff4b01, + 0x4705b505, 0x1e001500, 0x4930ab82, 0xd8016e00, 0x30050000, 0x30213035, 0x37123635, 0x2e054d74, 0x30233015, 0x30253015, 0x30113033, 0x5e010e23, + 0x3e20070c, 0x08e34418, 0x35480120, 0x012e2307, 0x297e0622, 0x021e2407, 0x69262201, 0x0e2108f8, 0x06a34201, 0x46181d20, 0x352b0e91, 0x0f231133, + 0x0e0f1501, 0x840d0f15, 0x85088205, 0x820e8802, 0x2e052708, 0x35372701, 0x02840b3f, 0x05840a20, 0x06200b88, 0x073c1793, 0x15331133, 0xc9fea102, + 0x8e2db52d, 0xbffe5c5c, 0x8e2307db, 0x5c3eaf02, 0x1d0f0e3c, 0x09cd4418, 0x00820720, 0x310f0f26, 0x0f103145, 0x07390982, 0xeefd311f, 0x49279683, + 0x3b584168, 0x3c0f213b, 0x3b481110, 0x2d2d2c4d, 0x5049182c, 0xbc2f220a, 0xb34b1808, 0x222eeb2e, 0xd20b2c0b, 0xd202206e, 0x01012453, 0x18c5a3a6, + 0x290e1d4a, 0x582fe2fe, 0x51524140, 0x45185883, 0x243b07ba, 0x2b752c25, 0x1a1a2425, 0x1a1a1c1c, 0x752b2524, 0x3324252c, 0xb106031c, 0x188055a9, + 0x2c0f7148, 0x09313e34, 0x29490923, 0x015a0b29, 0xd0b1d4f5, 0x280a2254, 0x8953d00a, 0x55b64150, 0xfd235f86, 0x84005abc, 0x000e2400, 0x840100ae, + 0x20048309, 0x240b8602, 0x000d0001, 0x240b861f, 0x00070002, 0x240b863d, 0x00290003, 0x200b8699, 0x20238204, 0x240b86df, 0x010f0005, 0x2a0b860d, + 0x010c0006, 0x00030037, 0x83090401, 0x85038252, 0x0001240b, 0x8603001a, 0x00022417, 0x862d000e, 0x0003240b, 0x86450052, 0x8204200b, 0x86c32023, + 0x0005240b, 0x86ed001e, 0x0006240b, 0x821d0118, 0x46003149, 0x72007500, 0x61006e00, 0x65006300, 0x49002000, 0x6f200782, 0x732e0f82, 0x75460000, + 0x63616e72, 0x63492065, 0x0e826e6f, 0x1f825220, 0x2d826720, 0x2b826c20, 0x00007228, 0x75676552, 0x0882616c, 0x6c004522, 0x63221982, 0x47827400, + 0x3d826920, 0x4b002022, 0x65200f82, 0x20220f82, 0x51823a00, 0x1f856199, 0x35003122, 0x3820ba82, 0x32380382, 0x32003000, 0x00003300, 0x63656c45, + 0x63697274, 0x65654b20, 0x203a2074, 0x0f82898c, 0x2d353127, 0x30322d38, 0x992a8232, 0x20bf8f5d, 0x26958256, 0x00730072, 0x826f0069, 0x822020df, + 0x0030246b, 0x842e0031, 0x00303007, 0x72655600, 0x6e6f6973, 0x31303020, 0x8230302e, 0x41598d10, 0x16411117, 0x00002306, 0x008b0002, 0x0c8b0120, + 0x3f200b84, 0x82080582, 0x00020001, 0x01020103, 0x01040103, 0x01060105, 0x01080107, 0x010a0109, 0x010c010b, 0x010e010d, 0x0110010f, 0x01120111, + 0x01140113, 0x01160115, 0x01180117, 0x011a0119, 0x011c011b, 0x011e011d, 0x0120011f, 0x01220121, 0x01240123, 0x01260125, 0x01280127, 0x012a0129, + 0x012c012b, 0x012e012d, 0x0130012f, 0x01320131, 0x01340133, 0x01360135, 0x01380137, 0x013a0139, 0x073c013b, 0x45696e75, 0x86304630, 0x86312007, + 0x86322007, 0x86332007, 0x84342007, 0x30312107, 0x31212785, 0x21278530, 0x27853031, 0x85303121, 0x30312127, 0x35202787, 0x36202f86, 0x37200786, + 0x38200786, 0x39200786, 0x41200786, 0x42200786, 0x43200786, 0x44200786, 0x45200786, 0x46200786, 0x31210785, 0x20078630, 0x86078631, 0x8631207f, + 0x8631207f, 0x8631207f, 0x8631207f, 0x8631207f, 0x8631207f, 0x8631207f, 0x8631207f, 0x8631207f, 0x8631207f, 0x8631207f, 0x8631207f, 0x8631207f, + 0x3032217f, 0x32217785, 0x86078631, 0x8632207f, 0x8632207f, 0x8632207f, 0x8632207f, 0x8632207f, 0x8632207f, 0x8632207f, 0x8632207f, 0x8632207f, + 0x8632207f, 0x8632207f, 0x8632207f, 0x8632207f, 0x3033217f, 0x33217785, 0x86078631, 0x8633207f, 0x8633207f, 0x3533287f, 0x01000000, 0x4400ffff, + 0x00260761, 0x14000c00, 0x15820400, 0x00000224, 0x03860100, 0x00240985, 0x31cbd6df, 0x64181182, 0xfa050c53, 0x1a9751d1, +}; + diff --git a/src/gui/fonts.h b/src/gui/fonts.h index baaf1e594..25e186c07 100644 --- a/src/gui/fonts.h +++ b/src/gui/fonts.h @@ -40,6 +40,8 @@ extern const unsigned int font_unifont_compressed_size; extern const unsigned int font_unifont_compressed_data[]; extern const unsigned int iconFont_compressed_size; extern const unsigned int iconFont_compressed_data[]; +extern const unsigned int furIcons_compressed_size; +extern const unsigned int furIcons_compressed_data[]; extern const unsigned int* builtinFont[]; extern const unsigned int builtinFontLen[]; diff --git a/src/gui/furIcons.h b/src/gui/furIcons.h new file mode 100644 index 000000000..4d2c948ee --- /dev/null +++ b/src/gui/furIcons.h @@ -0,0 +1,69 @@ +// not auto-generated. update every time you change icons.ttf! + +#define ICON_MIN_FUR 0xe0f0 +#define ICON_MAX_FUR 0xe135 + +// test +#define ICON_FUR_TEST0 u8"\ue0f0" +#define ICON_FUR_TEST1 u8"\ue0f1" +#define ICON_FUR_TEST2 u8"\ue0f2" +#define ICON_FUR_TEST3 u8"\ue0f3" +#define ICON_FUR_TEST4 u8"\ue0f4" + +// instrument +#define ICON_FUR_INS_STD u8"\ue100" +#define ICON_FUR_INS_FM u8"\ue101" +#define ICON_FUR_INS_GB u8"\ue102" +#define ICON_FUR_INS_C64 u8"\ue103" +#define ICON_FUR_INS_AMIGA u8"\ue104" +#define ICON_FUR_INS_PCE u8"\ue105" +#define ICON_FUR_INS_AY u8"\ue106" +#define ICON_FUR_INS_AY8930 u8"\ue107" +#define ICON_FUR_INS_TIA u8"\ue108" +#define ICON_FUR_INS_SAA1099 u8"\ue109" +#define ICON_FUR_INS_VIC u8"\ue10a" +#define ICON_FUR_INS_PET u8"\ue10b" +#define ICON_FUR_INS_VRC6 u8"\ue10c" +#define ICON_FUR_INS_OPLL u8"\ue10d" +#define ICON_FUR_INS_OPL u8"\ue10e" +#define ICON_FUR_INS_FDS u8"\ue10f" +#define ICON_FUR_INS_VBOY u8"\ue110" +#define ICON_FUR_INS_N163 u8"\ue111" +#define ICON_FUR_INS_SCC u8"\ue112" +#define ICON_FUR_INS_OPZ u8"\ue113" +#define ICON_FUR_INS_POKEY u8"\ue114" +#define ICON_FUR_INS_BEEPER u8"\ue115" +#define ICON_FUR_INS_SWAN u8"\ue116" +#define ICON_FUR_INS_MIKEY u8"\ue117" +#define ICON_FUR_INS_VERA u8"\ue118" +#define ICON_FUR_INS_X1_010 u8"\ue119" +#define ICON_FUR_INS_VRC6_SAW u8"\ue11a" +#define ICON_FUR_INS_ES5506 u8"\ue11b" +#define ICON_FUR_INS_MULTIPCM u8"\ue11c" +#define ICON_FUR_INS_SNES u8"\ue11d" +#define ICON_FUR_INS_SU u8"\ue11e" +#define ICON_FUR_INS_NAMCO u8"\ue11f" +#define ICON_FUR_INS_OPL_DRUMS u8"\ue120" +#define ICON_FUR_INS_OPM u8"\ue121" +#define ICON_FUR_INS_NES u8"\ue122" +#define ICON_FUR_INS_MSM6258 u8"\ue123" +#define ICON_FUR_INS_MSM6295 u8"\ue124" +#define ICON_FUR_INS_ADPCMA u8"\ue125" +#define ICON_FUR_INS_ADPCMB u8"\ue126" +#define ICON_FUR_INS_SEGAPCM u8"\ue127" +#define ICON_FUR_INS_QSOUND u8"\ue128" +#define ICON_FUR_INS_YMZ280B u8"\ue129" +#define ICON_FUR_INS_RF5C68 u8"\ue12a" +#define ICON_FUR_INS_MSM5232 u8"\ue12b" +#define ICON_FUR_INS_T6W28 u8"\ue12c" +#define ICON_FUR_INS_K007232 u8"\ue12d" +#define ICON_FUR_INS_GA20 u8"\ue12e" +#define ICON_FUR_INS_POKEMINI u8"\ue12f" +#define ICON_FUR_INS_SM8521 u8"\ue130" +#define ICON_FUR_INS_PV1000 u8"\ue131" +#define ICON_FUR_INS_K053260 u8"\ue132" +#define ICON_FUR_INS_SCSP u8"\ue133" +#define ICON_FUR_INS_TED u8"\ue134" +#define ICON_FUR_INS_C140 u8"\ue135" + +// sample editor? diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index c5f5891f2..2f1ed8e1f 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -77,6 +77,14 @@ bool Particle::update(float frameTime) { return (life>0); } +void FurnaceGUI::centerNextWindow(const char* name, float w, float h) { + if (ImGui::IsPopupOpen(name)) { + if (settings.centerPopup) { + ImGui::SetNextWindowPos(ImVec2(w*0.5,h*0.5),ImGuiCond_Always,ImVec2(0.5,0.5)); + } + } +} + void FurnaceGUI::bindEngine(DivEngine* eng) { e=eng; wavePreview.setEngine(e); @@ -1128,18 +1136,22 @@ void FurnaceGUI::stopPreviewNote(SDL_Scancode scancode, bool autoNote) { void FurnaceGUI::noteInput(int num, int key, int vol) { DivPattern* pat=e->curPat[cursor.xCoarse].getPattern(e->curOrders->ord[cursor.xCoarse][curOrder],true); + bool removeIns=false; prepareUndo(GUI_UNDO_PATTERN_EDIT); if (key==GUI_NOTE_OFF) { // note off pat->data[cursor.y][0]=100; pat->data[cursor.y][1]=0; + removeIns=true; } else if (key==GUI_NOTE_OFF_RELEASE) { // note off + env release pat->data[cursor.y][0]=101; pat->data[cursor.y][1]=0; + removeIns=true; } else if (key==GUI_NOTE_RELEASE) { // env release only pat->data[cursor.y][0]=102; pat->data[cursor.y][1]=0; + removeIns=true; } else { pat->data[cursor.y][0]=num%12; pat->data[cursor.y][1]=num/12; @@ -1165,6 +1177,14 @@ void FurnaceGUI::noteInput(int num, int key, int vol) { if (latchEffect!=-1) pat->data[cursor.y][4]=latchEffect; if (latchEffectVal!=-1) pat->data[cursor.y][5]=latchEffectVal; } + if (removeIns) { + if (settings.removeInsOff) { + pat->data[cursor.y][2]=-1; + } + if (settings.removeVolOff) { + pat->data[cursor.y][3]=-1; + } + } makeUndo(GUI_UNDO_PATTERN_EDIT); editAdvance(); curNibble=false; @@ -1438,8 +1458,8 @@ void FurnaceGUI::keyDown(SDL_Event& ev) { e->curOrders->ord[orderCursor][curOrder]=((e->curOrders->ord[orderCursor][curOrder]<<4)|num); }); MARK_MODIFIED; + curNibble=!curNibble; if (orderEditMode==2 || orderEditMode==3) { - curNibble=!curNibble; if (!curNibble) { if (orderEditMode==2) { orderCursor++; @@ -1835,6 +1855,16 @@ void FurnaceGUI::openFileDialog(FurnaceGUIFileDialogs type) { dpiScale ); break; + case GUI_FILE_LOAD_HEAD_FONT: + if (!dirExists(workingDirFont)) workingDirFont=getHomeDir(); + hasOpened=fileDialog->openLoad( + "Select Font", + {"compatible files", "*.ttf *.otf *.ttc"}, + "compatible files{.ttf,.otf,.ttc}", + workingDirFont, + dpiScale + ); + break; case GUI_FILE_LOAD_PAT_FONT: if (!dirExists(workingDirFont)) workingDirFont=getHomeDir(); hasOpened=fileDialog->openLoad( @@ -2090,6 +2120,7 @@ int FurnaceGUI::save(String path, int dmfVersion) { } int FurnaceGUI::load(String path) { + bool wasPlaying=e->isPlaying(); if (!path.empty()) { logI("loading module..."); FILE* f=ps_fopen(path.c_str(),"rb"); @@ -2166,6 +2197,12 @@ int FurnaceGUI::load(String path) { showWarning(e->getWarnings(),GUI_WARN_GENERIC); } pushRecentFile(path); + // do not auto-play a backup + if (path.find(backupPath)!=0) { + if (settings.playOnLoad==2 || (settings.playOnLoad==1 && wasPlaying)) { + play(); + } + } return 0; } @@ -2765,6 +2802,7 @@ void FurnaceGUI::editOptions(bool topMenu) { if (ImGui::MenuItem("values up (+16)",BIND_FOR(GUI_ACTION_PAT_VALUE_UP_COARSE))) doTranspose(16,opMaskTransposeValue); if (ImGui::MenuItem("values down (-16)",BIND_FOR(GUI_ACTION_PAT_VALUE_DOWN_COARSE))) doTranspose(-16,opMaskTransposeValue); ImGui::Separator(); + ImGui::AlignTextToFramePadding(); ImGui::Text("transpose"); ImGui::SameLine(); ImGui::SetNextItemWidth(120.0f*dpiScale); @@ -3260,19 +3298,6 @@ void FurnaceGUI::pointUp(int x, int y, int button) { if (dragMobileEditButton) { dragMobileEditButton=false; } - if (selecting) { - if (!selectingFull) cursor=selEnd; - finishSelection(); - if (!mobileUI) { - demandScrollX=true; - if (cursor.xCoarse==selStart.xCoarse && cursor.xFine==selStart.xFine && cursor.y==selStart.y && - cursor.xCoarse==selEnd.xCoarse && cursor.xFine==selEnd.xFine && cursor.y==selEnd.y) { - if (!settings.cursorMoveNoScroll) { - updateScroll(cursor.y); - } - } - } - } } void FurnaceGUI::pointMotion(int x, int y, int xrel, int yrel) { @@ -3870,6 +3895,7 @@ bool FurnaceGUI::loop() { mainFont=ImGui::GetIO().Fonts->AddFontDefault(); patFont=mainFont; bigFont=mainFont; + headFont=mainFont; if (rend) rend->destroyFontsTexture(); if (!ImGui::GetIO().Fonts->Build()) { logE("error again while building font atlas!"); @@ -3899,7 +3925,7 @@ bool FurnaceGUI::loop() { if (!mobileUI) { ImGui::BeginMainMenuBar(); - if (ImGui::BeginMenu("file")) { + if (ImGui::BeginMenu(settings.capitalMenuBar?"File":"file")) { if (ImGui::MenuItem("new...",BIND_FOR(GUI_ACTION_NEW))) { if (modified) { showWarning("Unsaved changes! Save changes before creating a new song?",GUI_WARN_NEW); @@ -3990,6 +4016,7 @@ bool FurnaceGUI::loop() { ImGui::Checkbox("loop",&vgmExportLoop); if (vgmExportLoop && e->song.loopModality==2) { ImGui::Text("loop trail:"); + ImGui::Indent(); if (ImGui::RadioButton("auto-detect",vgmExportTrailingTicks==-1)) { vgmExportTrailingTicks=-1; } @@ -4005,6 +4032,7 @@ bool FurnaceGUI::loop() { if (vgmExportTrailingTicks<0) vgmExportTrailingTicks=0; } } + ImGui::Unindent(); } ImGui::Checkbox("add pattern change hints",&vgmExportPatternHints); if (ImGui::IsItemHovered()) { @@ -4074,6 +4102,8 @@ bool FurnaceGUI::loop() { } ImGui::Checkbox("loop",&zsmExportLoop); ImGui::SameLine(); + ImGui::Checkbox("optimize size",&zsmExportOptimize); + ImGui::SameLine(); if (ImGui::Button("Begin Export")) { openFileDialog(GUI_FILE_EXPORT_ZSM); ImGui::CloseCurrentPopup(); @@ -4093,6 +4123,7 @@ bool FurnaceGUI::loop() { "Furnace Amiga emulator is working properly by\n" "comparing it with real Amiga output." ); + ImGui::AlignTextToFramePadding(); ImGui::Text("Directory"); ImGui::SameLine(); ImGui::InputText("##AVDPath",&workingDirROMExport); @@ -4156,7 +4187,7 @@ bool FurnaceGUI::loop() { exitDisabledTimer=1; for (int i=0; isong.systemLen; i++) { if (ImGui::TreeNode(fmt::sprintf("%d. %s##_SYSP%d",i+1,getSystemName(e->song.system[i]),i).c_str())) { - drawSysConf(i,e->song.system[i],e->song.systemFlags[i],true); + drawSysConf(i,e->song.system[i],e->song.systemFlags[i],true,true); ImGui::TreePop(); } } @@ -4218,7 +4249,7 @@ bool FurnaceGUI::loop() { } else { exitDisabledTimer=0; } - if (ImGui::BeginMenu("edit")) { + if (ImGui::BeginMenu(settings.capitalMenuBar?"Edit":"edit")) { ImGui::Text("..."); ImGui::Separator(); if (ImGui::MenuItem("undo",BIND_FOR(GUI_ACTION_UNDO))) doUndo(); @@ -4231,7 +4262,7 @@ bool FurnaceGUI::loop() { } ImGui::EndMenu(); } - if (ImGui::BeginMenu("settings")) { + if (ImGui::BeginMenu(settings.capitalMenuBar?"Settings":"settings")) { #ifndef IS_MOBILE if (ImGui::MenuItem("full screen",BIND_FOR(GUI_ACTION_FULLSCREEN),fullScreen)) { doAction(GUI_ACTION_FULLSCREEN); @@ -4267,7 +4298,7 @@ bool FurnaceGUI::loop() { } ImGui::EndMenu(); } - if (ImGui::BeginMenu("window")) { + if (ImGui::BeginMenu(settings.capitalMenuBar?"Window":"window")) { if (ImGui::MenuItem("command palette",BIND_FOR(GUI_ACTION_COMMAND_PALETTE))) displayPalette=true; if (ImGui::MenuItem("song information",BIND_FOR(GUI_ACTION_WINDOW_SONG_INFO),songInfoOpen)) songInfoOpen=!songInfoOpen; @@ -4311,7 +4342,7 @@ bool FurnaceGUI::loop() { ImGui::EndMenu(); } - if (ImGui::BeginMenu("help")) { + if (ImGui::BeginMenu(settings.capitalMenuBar?"Help":"help")) { if (ImGui::MenuItem("effect list",BIND_FOR(GUI_ACTION_WINDOW_EFFECT_LIST),effectListOpen)) effectListOpen=!effectListOpen; if (ImGui::MenuItem("debug menu",BIND_FOR(GUI_ACTION_WINDOW_DEBUG))) debugOpen=!debugOpen; if (ImGui::MenuItem("inspector",BIND_FOR(GUI_ACTION_WINDOW_DEBUG))) inspectorOpen=!inspectorOpen; @@ -4407,6 +4438,10 @@ bool FurnaceGUI::loop() { MEASURE(calcChanOsc,calcChanOsc()); + if (followPattern) { + curOrder=e->getOrder(); + } + if (mobileUI) { globalWinFlags=ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoBringToFrontOnFocus; //globalWinFlags=ImGuiWindowFlags_NoTitleBar; @@ -4485,17 +4520,6 @@ bool FurnaceGUI::loop() { } MEASURE(songInfo,drawSongInfo()); MEASURE(orders,drawOrders()); - if (introMonOpen) { - int totalTicks=e->getTotalTicks(); - int totalSeconds=e->getTotalSeconds(); - double newMonitorPos=totalSeconds+((double)totalTicks/1000000.0); - - if (fabs(newMonitorPos-monitorPos)>0.08) monitorPos=newMonitorPos; - - drawIntro(monitorPos,true); - - if (e->isPlaying()) monitorPos+=ImGui::GetIO().DeltaTime; - } MEASURE(sampleList,drawSampleList()); MEASURE(sampleEdit,drawSampleEdit()); MEASURE(waveList,drawWaveList()); @@ -4530,6 +4554,26 @@ bool FurnaceGUI::loop() { MEASURE(effectList,drawEffectList()); } + // release selection if mouse released + if (ImGui::IsMouseReleased(ImGuiMouseButton_Left) && selecting) { + if (!selectingFull) cursor=selEnd; + finishSelection(); + if (!mobileUI) { + demandScrollX=true; + if (cursor.xCoarse==selStart.xCoarse && cursor.xFine==selStart.xFine && cursor.y==selStart.y && + cursor.xCoarse==selEnd.xCoarse && cursor.xFine==selEnd.xFine && cursor.y==selEnd.y) { + if (!settings.cursorMoveNoScroll) { + updateScroll(cursor.y); + } + } + } + } + + for (int i=0; igetTotalChannelCount(); i++) { + keyHit1[i]-=0.2f; + if (keyHit1[i]<0.0f) keyHit1[i]=0.0f; + } + activateTutorial(GUI_TUTORIAL_OVERVIEW); if (inspectorOpen) ImGui::ShowMetricsWindow(&inspectorOpen); @@ -4626,6 +4670,7 @@ bool FurnaceGUI::loop() { workingDirROMExport=fileDialog->getPath()+DIR_SEPARATOR_STR; break; case GUI_FILE_LOAD_MAIN_FONT: + case GUI_FILE_LOAD_HEAD_FONT: case GUI_FILE_LOAD_PAT_FONT: workingDirFont=fileDialog->getPath()+DIR_SEPARATOR_STR; break; @@ -5039,7 +5084,7 @@ bool FurnaceGUI::loop() { break; } case GUI_FILE_EXPORT_ZSM: { - SafeWriter* w=e->saveZSM(zsmExportTickRate,zsmExportLoop); + SafeWriter* w=e->saveZSM(zsmExportTickRate,zsmExportLoop,zsmExportOptimize); if (w!=NULL) { FILE* f=ps_fopen(copyOfName.c_str(),"wb"); if (f!=NULL) { @@ -5087,6 +5132,9 @@ bool FurnaceGUI::loop() { case GUI_FILE_LOAD_MAIN_FONT: settings.mainFontPath=copyOfName; break; + case GUI_FILE_LOAD_HEAD_FONT: + settings.headFontPath=copyOfName; + break; case GUI_FILE_LOAD_PAT_FONT: settings.patFontPath=copyOfName; break; @@ -5223,6 +5271,7 @@ bool FurnaceGUI::loop() { MEASURE_BEGIN(popup); + centerNextWindow("Rendering...",canvasW,canvasH); if (ImGui::BeginPopupModal("Rendering...",NULL,ImGuiWindowFlags_AlwaysAutoResize)) { ImGui::Text("Please wait..."); if (ImGui::Button("Abort")) { @@ -5258,6 +5307,7 @@ bool FurnaceGUI::loop() { ImGui::EndPopup(); } + centerNextWindow("Error",canvasW,canvasH); if (ImGui::BeginPopupModal("Error",NULL,ImGuiWindowFlags_AlwaysAutoResize)) { ImGui::Text("%s",errorString.c_str()); if (ImGui::Button("OK")) { @@ -5266,6 +5316,7 @@ bool FurnaceGUI::loop() { ImGui::EndPopup(); } + centerNextWindow("Warning",canvasW,canvasH); if (ImGui::BeginPopupModal("Warning",NULL,ImGuiWindowFlags_AlwaysAutoResize)) { ImGui::Text("%s",warnString.c_str()); switch (warnAction) { @@ -5608,7 +5659,7 @@ bool FurnaceGUI::loop() { if (ImGui::BeginPopup("InsTypeList",ImGuiWindowFlags_NoMove|ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoSavedSettings)) { char temp[1024]; for (DivInstrumentType& i: makeInsTypeList) { - strncpy(temp,insTypes[i],1023); + strncpy(temp,insTypes[i][0],1023); if (ImGui::MenuItem(temp)) { // create ins curIns=e->addInstrument(-1,i); @@ -5624,6 +5675,19 @@ bool FurnaceGUI::loop() { wavePreviewInit=true; updateFMPreview=true; } + + if (settings.blankIns) { + e->song.ins[curIns]->fm.fb=0; + for (int i=0; i<4; i++) { + e->song.ins[curIns]->fm.op[i]=DivInstrumentFM::Operator(); + e->song.ins[curIns]->fm.op[i].ar=31; + e->song.ins[curIns]->fm.op[i].dr=31; + e->song.ins[curIns]->fm.op[i].rr=15; + e->song.ins[curIns]->fm.op[i].tl=127; + e->song.ins[curIns]->fm.op[i].dt=3; + } + } + MARK_MODIFIED; } } @@ -5634,11 +5698,13 @@ bool FurnaceGUI::loop() { // TODO: // - multiple selection // - replace instrument + centerNextWindow("Select Instrument",canvasW,canvasH); if (ImGui::BeginPopupModal("Select Instrument",NULL,ImGuiWindowFlags_AlwaysAutoResize)) { bool quitPlease=false; if (pendingInsSingle) { ImGui::Text("this is an instrument bank! select which one to use:"); } else { + ImGui::AlignTextToFramePadding(); ImGui::Text("this is an instrument bank! select which ones to load:"); ImGui::SameLine(); if (ImGui::Button("All")) { @@ -5711,6 +5777,7 @@ bool FurnaceGUI::loop() { ImGui::EndPopup(); } + centerNextWindow("Import Raw Sample",canvasW,canvasH); if (ImGui::BeginPopupModal("Import Raw Sample",NULL,ImGuiWindowFlags_AlwaysAutoResize)) { ImGui::Text("Data type:"); for (int i=0; iAddFontDefault(); patFont=mainFont; bigFont=mainFont; + headFont=mainFont; if (rend) rend->destroyFontsTexture(); if (!ImGui::GetIO().Fonts->Build()) { logE("error again while building font atlas!"); @@ -6100,7 +6169,6 @@ bool FurnaceGUI::init() { clockOpen=e->getConfBool("clockOpen",false); speedOpen=e->getConfBool("speedOpen",true); groovesOpen=e->getConfBool("groovesOpen",false); - introMonOpen=e->getConfBool("introMonOpen",false); regViewOpen=e->getConfBool("regViewOpen",false); logOpen=e->getConfBool("logOpen",false); effectListOpen=e->getConfBool("effectListOpen",true); @@ -6159,6 +6227,7 @@ bool FurnaceGUI::init() { pianoInputPadMode=e->getConfInt("pianoInputPadMode",pianoInputPadMode); chanOscCols=e->getConfInt("chanOscCols",3); + chanOscAutoColsType=e->getConfInt("chanOscAutoColsType",0); chanOscColorX=e->getConfInt("chanOscColorX",GUI_OSCREF_CENTER); chanOscColorY=e->getConfInt("chanOscColorY",GUI_OSCREF_CENTER); chanOscTextX=e->getConfFloat("chanOscTextX",0.0f); @@ -6487,6 +6556,7 @@ bool FurnaceGUI::init() { mainFont=ImGui::GetIO().Fonts->AddFontDefault(); patFont=mainFont; bigFont=mainFont; + headFont=mainFont; if (rend) rend->destroyFontsTexture(); if (!ImGui::GetIO().Fonts->Build()) { logE("error again while building font atlas!"); @@ -6618,7 +6688,6 @@ void FurnaceGUI::commitState() { e->setConf("clockOpen",clockOpen); e->setConf("speedOpen",speedOpen); e->setConf("groovesOpen",groovesOpen); - e->setConf("introMonOpen",introMonOpen); e->setConf("regViewOpen",regViewOpen); e->setConf("logOpen",logOpen); e->setConf("effectListOpen",effectListOpen); @@ -6677,6 +6746,7 @@ void FurnaceGUI::commitState() { // commit per-chan osc state e->setConf("chanOscCols",chanOscCols); + e->setConf("chanOscAutoColsType",chanOscAutoColsType); e->setConf("chanOscColorX",chanOscColorX); e->setConf("chanOscColorY",chanOscColorY); e->setConf("chanOscTextX",chanOscTextX); @@ -6721,6 +6791,13 @@ bool FurnaceGUI::finish() { SDL_HapticClose(vibrator); } + for (int i=0; i availRenderDrivers; std::vector availAudioDrivers; - bool quit, warnQuit, willCommit, edit, modified, displayError, displayExporting, vgmExportLoop, zsmExportLoop, vgmExportPatternHints; + bool quit, warnQuit, willCommit, edit, modified, displayError, displayExporting, vgmExportLoop, zsmExportLoop, zsmExportOptimize, vgmExportPatternHints; bool vgmExportDirectStream, displayInsTypeList; bool portrait, injectBackUp, mobileMenuOpen, warnColorPushed; bool wantCaptureKeyboard, oldWantCaptureKeyboard, displayMacroMenu; @@ -1375,8 +1393,10 @@ class FurnaceGUI { ImFont* mainFont; ImFont* iconFont; + ImFont* furIconFont; ImFont* patFont; ImFont* bigFont; + ImFont* headFont; ImWchar* fontRange; ImVec4 uiColors[GUI_COLOR_MAX]; ImVec4 volColors[128]; @@ -1395,7 +1415,7 @@ class FurnaceGUI { char emptyLabel2[32]; struct Settings { - int mainFontSize, patFontSize, iconSize; + int mainFontSize, patFontSize, headFontSize, iconSize; int audioEngine; int audioQuality; int audioChans; @@ -1412,6 +1432,7 @@ class FurnaceGUI { String tg100Path; String mu5Path; int mainFont; + int headFont; int patFont; int audioRate; int audioBufSize; @@ -1434,7 +1455,6 @@ class FurnaceGUI { int sysSeparators; int forceMono; int controlLayout; - int restartOnFlagChange; int statusDisplay; float dpiScale; int viewPrevPattern; @@ -1466,6 +1486,8 @@ class FurnaceGUI { int oscTakesEntireWindow; int oscBorder; int oscEscapesBoundary; + int oscMono; + int oscAntiAlias; int separateFMColors; int insEditColorize; int metroVol; @@ -1532,8 +1554,16 @@ class FurnaceGUI { int memUsageUnit; int cursorFollowsWheel; int noDMFCompat; + int removeInsOff; + int removeVolOff; + int playOnLoad; + int insTypeMenu; + int capitalMenuBar; + int centerPopup; + int insIconsStyle; unsigned int maxUndoSteps; String mainFontPath; + String headFontPath; String patFontPath; String audioDevice; String midiInDevice; @@ -1552,6 +1582,7 @@ class FurnaceGUI { Settings(): mainFontSize(18), patFontSize(18), + headFontSize(27), iconSize(16), audioEngine(DIV_AUDIO_SDL), audioQuality(0), @@ -1590,7 +1621,6 @@ class FurnaceGUI { sysSeparators(1), forceMono(0), controlLayout(3), - restartOnFlagChange(1), statusDisplay(0), dpiScale(0.0f), viewPrevPattern(1), @@ -1622,6 +1652,8 @@ class FurnaceGUI { oscTakesEntireWindow(0), oscBorder(1), oscEscapesBoundary(0), + oscMono(1), + oscAntiAlias(1), separateFMColors(0), insEditColorize(0), metroVol(100), @@ -1687,8 +1719,16 @@ class FurnaceGUI { memUsageUnit(1), cursorFollowsWheel(0), noDMFCompat(0), + removeInsOff(0), + removeVolOff(0), + playOnLoad(0), + insTypeMenu(1), + capitalMenuBar(0), + centerPopup(1), + insIconsStyle(1), maxUndoSteps(100), mainFontPath(""), + headFontPath(""), patFontPath(""), audioDevice(""), midiInDevice(""), @@ -1736,7 +1776,7 @@ class FurnaceGUI { bool mixerOpen, debugOpen, inspectorOpen, oscOpen, volMeterOpen, statsOpen, compatFlagsOpen; bool pianoOpen, notesOpen, channelsOpen, regViewOpen, logOpen, effectListOpen, chanOscOpen; bool subSongsOpen, findOpen, spoilerOpen, patManagerOpen, sysManagerOpen, clockOpen, speedOpen; - bool groovesOpen, introMonOpen; + bool groovesOpen; bool basicMode, shortIntro; bool insListDir, waveListDir, sampleListDir; @@ -1972,14 +2012,15 @@ class FurnaceGUI { ImVec2 subPortPos; // oscilloscope - int oscTotal; - float oscValues[512]; + int oscTotal, oscWidth; + float* oscValues[DIV_MAX_OUTPUTS]; float oscZoom; float oscWindowSize; + float oscInput, oscInput1; bool oscZoomSlider; // per-channel oscilloscope - int chanOscCols, chanOscColorX, chanOscColorY; + int chanOscCols, chanOscAutoColsType, chanOscColorX, chanOscColorY; float chanOscWindowSize, chanOscTextX, chanOscTextY, chanOscAmplify; bool chanOscWaveCorr, chanOscOptions, updateChanOscGradTex, chanOscUseGrad, chanOscNormalize; String chanOscTextFormat; @@ -2086,7 +2127,7 @@ class FurnaceGUI { void drawAlgorithm(unsigned char alg, FurnaceGUIFMAlgs algType, const ImVec2& size); void drawFMEnv(unsigned char tl, unsigned char ar, unsigned char dr, unsigned char d2r, unsigned char rr, unsigned char sl, unsigned char sus, unsigned char egt, unsigned char algOrGlobalSus, float maxTl, float maxArDr, float maxRr, const ImVec2& size, unsigned short instType); void drawGBEnv(unsigned char vol, unsigned char len, unsigned char sLen, bool dir, const ImVec2& size); - bool drawSysConf(int chan, DivSystem type, DivConfig& flags, bool modifyOnChange); + bool drawSysConf(int chan, DivSystem type, DivConfig& flags, bool modifyOnChange, bool fromMenu=false); void kvsConfig(DivInstrument* ins); void drawFMPreview(const ImVec2& size); void renderFMPreview(const DivInstrumentFM& params, int pos=0); @@ -2111,6 +2152,8 @@ class FurnaceGUI { ImVec4 channelColor(int ch); ImVec4 channelTextColor(int ch); + void centerNextWindow(const char* name, float w, float h); + void readOsc(); void calcChanOsc(); diff --git a/src/gui/guiConst.cpp b/src/gui/guiConst.cpp index 7854a65af..e2149f34c 100644 --- a/src/gui/guiConst.cpp +++ b/src/gui/guiConst.cpp @@ -21,6 +21,8 @@ #include "gui.h" #include "guiConst.h" #include "../engine/song.h" +#include "IconsFontAwesome4.h" +#include "furIcons.h" const int opOrder[4]={ 0, 2, 1, 3 @@ -116,61 +118,63 @@ const int vgmVersions[7]={ 0x172 }; -const char* insTypes[DIV_INS_MAX+1]={ - "SN76489/Sega PSG", - "FM (OPN)", - "Game Boy", - "C64", - "Generic Sample", - "PC Engine", - "AY-3-8910/SSG", - "AY8930", - "TIA", - "SAA1099", - "VIC", - "PET", - "VRC6", - "FM (OPLL)", - "FM (OPL)", - "FDS", - "Virtual Boy", - "Namco 163", - "Konami SCC/Bubble System WSG", - "FM (OPZ)", - "POKEY", - "Beeper", - "WonderSwan", - "Atari Lynx", - "VERA", - "X1-010", - "VRC6 (saw)", - "ES5506", - "MultiPCM", - "SNES", - "Sound Unit", - "Namco WSG", - "OPL (drums)", - "FM (OPM)", - "NES", - "MSM6258", - "MSM6295", - "ADPCM-A", - "ADPCM-B", - "SegaPCM", - "QSound", - "YMZ280B", - "RF5C68", - "MSM5232", - "T6W28", - "K007232", - "GA20", - "Pokémon Mini/QuadTone", - "SM8521", - "PV-1000", - "K053260", - "SCSP", - "TED", - NULL +// name, icon, letter icon +const char* insTypes[DIV_INS_MAX+1][3]={ + {"SN76489/Sega PSG",ICON_FA_AREA_CHART,ICON_FUR_INS_STD}, + {"FM (OPN)",ICON_FA_BAR_CHART,ICON_FUR_INS_FM}, + {"Game Boy",ICON_FA_GAMEPAD,ICON_FUR_INS_GB}, + {"C64",ICON_FA_KEYBOARD_O,ICON_FUR_INS_C64}, + {"Generic Sample",ICON_FA_VOLUME_UP,ICON_FUR_INS_AMIGA}, + {"PC Engine",ICON_FA_ID_BADGE,ICON_FUR_INS_PCE}, + {"AY-3-8910/SSG",ICON_FA_BAR_CHART,ICON_FUR_INS_AY}, + {"AY8930",ICON_FA_BAR_CHART,ICON_FUR_INS_AY8930}, + {"TIA",ICON_FA_BAR_CHART,ICON_FUR_INS_TIA}, + {"SAA1099",ICON_FA_BAR_CHART,ICON_FUR_INS_SAA1099}, + {"VIC",ICON_FA_BAR_CHART,ICON_FUR_INS_VIC}, + {"PET",ICON_FA_SQUARE,ICON_FUR_INS_PET}, + {"VRC6",ICON_FA_BAR_CHART,ICON_FUR_INS_VRC6}, + {"FM (OPLL)",ICON_FA_AREA_CHART,ICON_FUR_INS_OPLL}, + {"FM (OPL)",ICON_FA_AREA_CHART,ICON_FUR_INS_OPL}, + {"FDS",ICON_FA_FLOPPY_O,ICON_FUR_INS_FDS}, + {"Virtual Boy",ICON_FA_BINOCULARS,ICON_FUR_INS_VBOY}, + {"Namco 163",ICON_FA_CALCULATOR,ICON_FUR_INS_N163}, + {"Konami SCC/Bubble System WSG",ICON_FA_CALCULATOR,ICON_FUR_INS_SCC}, + {"FM (OPZ)",ICON_FA_AREA_CHART,ICON_FUR_INS_OPZ}, + {"POKEY",ICON_FA_BAR_CHART,ICON_FUR_INS_POKEY}, + {"Beeper",ICON_FA_SQUARE,ICON_FUR_INS_BEEPER}, + {"WonderSwan",ICON_FA_GAMEPAD,ICON_FUR_INS_SWAN}, + {"Atari Lynx",ICON_FA_BAR_CHART,ICON_FUR_INS_MIKEY}, + {"VERA",ICON_FA_KEYBOARD_O,ICON_FUR_INS_VERA}, + {"X1-010",ICON_FA_BAR_CHART,ICON_FUR_INS_X1_010}, + {"VRC6 (saw)",ICON_FA_BAR_CHART,ICON_FUR_INS_VRC6_SAW}, + {"ES5506",ICON_FA_VOLUME_UP,ICON_FUR_INS_ES5506}, + {"MultiPCM",ICON_FA_VOLUME_UP,ICON_FUR_INS_MULTIPCM}, + {"SNES",ICON_FA_VOLUME_UP,ICON_FUR_INS_SNES}, + {"Sound Unit",ICON_FA_MICROCHIP,ICON_FUR_INS_SU}, + {"Namco WSG",ICON_FA_PIE_CHART,ICON_FUR_INS_NAMCO}, + {"OPL (drums)",ICON_FA_COFFEE,ICON_FUR_INS_OPL_DRUMS}, + {"FM (OPM)",ICON_FA_AREA_CHART,ICON_FUR_INS_OPM}, + {"NES",ICON_FA_GAMEPAD,ICON_FUR_INS_NES}, + {"MSM6258",ICON_FA_VOLUME_UP,ICON_FUR_INS_MSM6258}, + {"MSM6295",ICON_FA_VOLUME_UP,ICON_FUR_INS_MSM6295}, + {"ADPCM-A",ICON_FA_VOLUME_UP,ICON_FUR_INS_ADPCMA}, + {"ADPCM-B",ICON_FA_VOLUME_UP,ICON_FUR_INS_ADPCMB}, + {"SegaPCM",ICON_FA_VOLUME_UP,ICON_FUR_INS_SEGAPCM}, + {"QSound",ICON_FA_VOLUME_UP,ICON_FUR_INS_QSOUND}, + {"YMZ280B",ICON_FA_VOLUME_UP,ICON_FUR_INS_YMZ280B}, + {"RF5C68",ICON_FA_VOLUME_UP,ICON_FUR_INS_RF5C68}, + {"MSM5232",ICON_FA_BAR_CHART,ICON_FUR_INS_MSM5232}, + {"T6W28",ICON_FA_BAR_CHART,ICON_FUR_INS_T6W28}, + {"K007232",ICON_FA_BAR_CHART,ICON_FUR_INS_K007232}, + {"GA20",ICON_FA_BAR_CHART,ICON_FUR_INS_GA20}, + {"Pokémon Mini/QuadTone",ICON_FA_BAR_CHART,ICON_FUR_INS_POKEMINI}, + {"SM8521",ICON_FA_GAMEPAD,ICON_FUR_INS_SM8521}, + {"PV-1000",ICON_FA_GAMEPAD,ICON_FUR_INS_PV1000}, + {"K053260",ICON_FA_BAR_CHART,ICON_FUR_INS_K053260}, + {"SCSP",ICON_FA_QUESTION,ICON_FUR_INS_SCSP}, + {"TED",ICON_FA_BAR_CHART,ICON_FUR_INS_TED}, + {"C140",ICON_FA_VOLUME_UP,ICON_FUR_INS_C140}, + {NULL,ICON_FA_QUESTION,ICON_FA_QUESTION} }; const char* sampleLoopModes[DIV_SAMPLE_LOOP_MAX]={ @@ -191,7 +195,7 @@ const char* sampleDepths[DIV_SAMPLE_DEPTH_MAX]={ "8-bit PCM", "BRR", "VOX", - NULL, + "8-bit µ-law PCM", NULL, NULL, NULL, @@ -835,6 +839,22 @@ const FurnaceGUIColorDef guiColors[GUI_COLOR_MAX]={ D(GUI_COLOR_OSC_BORDER,"",ImVec4(0.4f,0.6f,0.95f,1.0f)), D(GUI_COLOR_OSC_WAVE,"",ImVec4(0.95f,0.95f,1.0f,1.0f)), D(GUI_COLOR_OSC_WAVE_PEAK,"",ImVec4(0.95f,0.95f,1.0f,1.0f)), + D(GUI_COLOR_OSC_WAVE_CH0,"",ImVec4(1.0f,1.0f,1.0f,1.0f)), + D(GUI_COLOR_OSC_WAVE_CH1,"",ImVec4(1.0f,0.2f,0.2f,1.0f)), + D(GUI_COLOR_OSC_WAVE_CH2,"",ImVec4(0.1f,0.5f,1.0f,1.0f)), + D(GUI_COLOR_OSC_WAVE_CH3,"",ImVec4(0.5f,0.5f,0.5f,1.0f)), + D(GUI_COLOR_OSC_WAVE_CH4,"",ImVec4(0.7f,0.2f,0.7f,1.0f)), + D(GUI_COLOR_OSC_WAVE_CH5,"",ImVec4(0.2f,1.0f,0.2f,1.0f)), + D(GUI_COLOR_OSC_WAVE_CH6,"",ImVec4(1.0f,1.0f,0.1f,1.0f)), + D(GUI_COLOR_OSC_WAVE_CH7,"",ImVec4(1.0f,0.5f,0.1f,1.0f)), + D(GUI_COLOR_OSC_WAVE_CH8,"",ImVec4(0.9f,1.0f,0.1f,1.0f)), + D(GUI_COLOR_OSC_WAVE_CH9,"",ImVec4(0.8f,1.0f,0.1f,1.0f)), + D(GUI_COLOR_OSC_WAVE_CH10,"",ImVec4(0.7f,1.0f,0.1f,1.0f)), + D(GUI_COLOR_OSC_WAVE_CH11,"",ImVec4(0.6f,1.0f,0.1f,1.0f)), + D(GUI_COLOR_OSC_WAVE_CH12,"",ImVec4(0.5f,1.0f,0.1f,1.0f)), + D(GUI_COLOR_OSC_WAVE_CH13,"",ImVec4(0.4f,1.0f,0.1f,1.0f)), + D(GUI_COLOR_OSC_WAVE_CH14,"",ImVec4(0.3f,1.0f,0.1f,1.0f)), + D(GUI_COLOR_OSC_WAVE_CH15,"",ImVec4(0.2f,1.0f,0.1f,1.0f)), D(GUI_COLOR_OSC_REF,"",ImVec4(0.3,0.65f,1.0f,0.15f)), D(GUI_COLOR_OSC_GUIDE,"",ImVec4(0.3,0.65f,1.0f,0.13f)), @@ -925,6 +945,7 @@ const FurnaceGUIColorDef guiColors[GUI_COLOR_MAX]={ D(GUI_COLOR_INSTR_K053260,"",ImVec4(1.0f,0.8f,0.1f,1.0f)), D(GUI_COLOR_INSTR_SCSP,"",ImVec4(0.5f,0.5f,0.5f,1.0f)), D(GUI_COLOR_INSTR_TED,"",ImVec4(0.7f,0.6f,1.0f,1.0f)), + D(GUI_COLOR_INSTR_C140,"",ImVec4(1.0f,1.0f,0.0f,1.0f)), D(GUI_COLOR_INSTR_UNKNOWN,"",ImVec4(0.3f,0.3f,0.3f,1.0f)), D(GUI_COLOR_CHANNEL_BG,"",ImVec4(0.4f,0.6f,0.8f,1.0f)), @@ -1110,6 +1131,7 @@ const int availableSystems[]={ DIV_SYSTEM_PV1000, DIV_SYSTEM_K053260, DIV_SYSTEM_TED, + DIV_SYSTEM_C140, DIV_SYSTEM_PCM_DAC, DIV_SYSTEM_PONG, 0 // don't remove this last one! @@ -1220,6 +1242,7 @@ const int chipsSample[]={ DIV_SYSTEM_PCM_DAC, DIV_SYSTEM_ES5506, DIV_SYSTEM_K053260, + DIV_SYSTEM_C140, 0 // don't remove this last one! }; @@ -1242,3 +1265,9 @@ const char* chipCategoryNames[]={ "Sample", NULL }; + +// NORMAL, LETTER, +const char* insIcons[]={ + ICON_FA_AREA_CHART, + +}; \ No newline at end of file diff --git a/src/gui/guiConst.h b/src/gui/guiConst.h index 616692de5..0695a6013 100644 --- a/src/gui/guiConst.h +++ b/src/gui/guiConst.h @@ -41,7 +41,7 @@ extern const char* noteNamesG[180]; extern const char* noteNamesF[180]; extern const char* noteNamesGF[180]; extern const char* pitchLabel[11]; -extern const char* insTypes[]; +extern const char* insTypes[][3]; extern const char* sampleLoopModes[]; extern const char* sampleDepths[]; extern const char* resampleStrats[]; diff --git a/src/gui/insEdit.cpp b/src/gui/insEdit.cpp index e5f60d86b..e68a17dc8 100644 --- a/src/gui/insEdit.cpp +++ b/src/gui/insEdit.cpp @@ -2306,17 +2306,17 @@ void FurnaceGUI::drawInsEdit() { ins->type=(DivInstrumentType)insType; } */ - if (ImGui::BeginCombo("##Type",insTypes[insType])) { + if (ImGui::BeginCombo("##Type",insTypes[insType][0])) { std::vector insTypeList; if (settings.displayAllInsTypes) { - for (int i=0; insTypes[i]; i++) { + for (int i=0; insTypes[i][0]; i++) { insTypeList.push_back((DivInstrumentType)i); } } else { insTypeList=e->getPossibleInsTypes(); } for (DivInstrumentType i: insTypeList) { - if (ImGui::Selectable(insTypes[i],insType==i)) { + if (ImGui::Selectable(insTypes[i][0],insType==i)) { ins->type=i; // reset macro zoom @@ -4264,6 +4264,7 @@ void FurnaceGUI::drawInsEdit() { ImGui::EndTabItem(); } if (ins->type==DIV_INS_C64) if (ImGui::BeginTabItem("C64")) { + ImGui::AlignTextToFramePadding(); ImGui::Text("Waveform"); ImGui::SameLine(); pushToggleColors(ins->c64.triOn); @@ -4348,6 +4349,7 @@ void FurnaceGUI::drawInsEdit() { P(CWSliderScalar("Cutoff",ImGuiDataType_U16,&ins->c64.cut,&_ZERO,&_TWO_THOUSAND_FORTY_SEVEN)); rightClickable P(CWSliderScalar("Resonance",ImGuiDataType_U8,&ins->c64.res,&_ZERO,&_FIFTEEN)); rightClickable + ImGui::AlignTextToFramePadding(); ImGui::Text("Filter Mode"); ImGui::SameLine(); pushToggleColors(ins->c64.lp); @@ -4411,7 +4413,8 @@ void FurnaceGUI::drawInsEdit() { ins->type==DIV_INS_ES5506 || ins->type==DIV_INS_K007232 || ins->type==DIV_INS_GA20 || - ins->type==DIV_INS_K053260) { + ins->type==DIV_INS_K053260 || + ins->type==DIV_INS_C140) { if (ImGui::BeginTabItem((ins->type==DIV_INS_SU)?"Sound Unit":"Sample")) { String sName; bool wannaOpenSMPopup=false; @@ -4513,6 +4516,7 @@ void FurnaceGUI::drawInsEdit() { ImGui::TableNextRow(); ImGui::TableNextColumn(); ImGui::TableSetBgColor(ImGuiTableBgTarget_CellBg,ImGui::GetColorU32(ImGuiCol_TableHeaderBg)); + ImGui::AlignTextToFramePadding(); ImGui::Text("%s",noteNames[60+i]); ImGui::TableNextColumn(); if (sampleMap.map<0 || sampleMap.map>=e->song.sampleLen) { @@ -4522,6 +4526,7 @@ void FurnaceGUI::drawInsEdit() { sName=fmt::sprintf("%3d##SM%d",sampleMap.map,i); } ImGui::PushFont(patFont); + ImGui::AlignTextToFramePadding(); ImGui::SetNextItemWidth(ImGui::CalcTextSize("00000").x); ImGui::Selectable(sName.c_str(),(sampleMapWaitingInput && sampleMapColumn==0 && i>=sampleMapMin && i<=sampleMapMax)); if (ImGui::IsItemClicked(ImGuiMouseButton_Left)) { @@ -4572,6 +4577,7 @@ void FurnaceGUI::drawInsEdit() { } sName+=fmt::sprintf("##SN%d",i); ImGui::PushFont(patFont); + ImGui::AlignTextToFramePadding(); ImGui::SetNextItemWidth(ImGui::CalcTextSize("00000").x); ImGui::Selectable(sName.c_str(),(sampleMapWaitingInput && sampleMapColumn==1 && i>=sampleMapMin && i<=sampleMapMax)); if (ImGui::IsItemClicked(ImGuiMouseButton_Left)) { @@ -4616,9 +4622,25 @@ void FurnaceGUI::drawInsEdit() { ImGui::PopFont(); ImGui::TableNextColumn(); + String prevName="---"; if (sampleMap.map>=0 && sampleMap.mapsong.sampleLen) { - ImGui::TextUnformatted(e->song.sample[sampleMap.map]->name.c_str()); + prevName=e->song.sample[sampleMap.map]->name; } + ImGui::PushID(i+2); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::BeginCombo("##SMSample",prevName.c_str())) { + if (ImGui::Selectable("---")) { + sampleMap.map=-1; + } + for (int k=0; ksong.sampleLen; k++) { + String itemName=fmt::sprintf("%d: %s",k,e->song.sample[k]->name); + if (ImGui::Selectable(itemName.c_str())) { + sampleMap.map=k; + } + } + ImGui::EndCombo(); + } + ImGui::PopID(); } ImGui::PopStyleColor(2); ImGui::EndTable(); @@ -5250,6 +5272,7 @@ void FurnaceGUI::drawInsEdit() { ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("Wave 1"); ImGui::SameLine(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); @@ -5260,6 +5283,7 @@ void FurnaceGUI::drawInsEdit() { } if (isSingleWaveFX) { ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("Wave 2"); ImGui::SameLine(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); @@ -5397,7 +5421,7 @@ void FurnaceGUI::drawInsEdit() { volMax=31; } if (ins->type==DIV_INS_ADPCMB || ins->type==DIV_INS_YMZ280B || ins->type==DIV_INS_RF5C68 || - ins->type==DIV_INS_GA20) { + ins->type==DIV_INS_GA20 || ins->type==DIV_INS_C140) { volMax=255; } if (ins->type==DIV_INS_QSOUND) { @@ -5457,7 +5481,8 @@ void FurnaceGUI::drawInsEdit() { if (ins->type==DIV_INS_TIA || ins->type==DIV_INS_AMIGA || ins->type==DIV_INS_SCC || ins->type==DIV_INS_PET || ins->type==DIV_INS_SEGAPCM || ins->type==DIV_INS_FM || ins->type==DIV_INS_K007232 || ins->type==DIV_INS_GA20 || - ins->type==DIV_INS_SM8521 || ins->type==DIV_INS_PV1000 || ins->type==DIV_INS_K053260) { + ins->type==DIV_INS_SM8521 || ins->type==DIV_INS_PV1000 || ins->type==DIV_INS_K053260 || + ins->type==DIV_INS_C140) { dutyMax=0; } if (ins->type==DIV_INS_VBOY) { @@ -5565,6 +5590,7 @@ void FurnaceGUI::drawInsEdit() { if (ins->type==DIV_INS_K053260) waveMax=0; if (ins->type==DIV_INS_POKEMINI) waveMax=0; if (ins->type==DIV_INS_TED) waveMax=0; + if (ins->type==DIV_INS_C140) waveMax=0; if (ins->type==DIV_INS_SU || ins->type==DIV_INS_POKEY) waveMax=7; if (ins->type==DIV_INS_PET) { waveMax=8; @@ -5695,6 +5721,10 @@ void FurnaceGUI::drawInsEdit() { panMin=0; panMax=127; } + if (ins->type==DIV_INS_C140) { + panMin=0; + panMax=255; + } if (ins->type==DIV_INS_ES5506) { panMax=4095; } @@ -5780,6 +5810,7 @@ void FurnaceGUI::drawInsEdit() { ins->type==DIV_INS_K007232 || ins->type==DIV_INS_GA20 || ins->type==DIV_INS_K053260 || + ins->type==DIV_INS_C140 || ins->type==DIV_INS_TED) { macroList.push_back(FurnaceGUIMacroDesc("Phase Reset",&ins->std.phaseResetMacro,0,1,32,uiColors[GUI_COLOR_MACRO_OTHER],false,NULL,NULL,true)); } diff --git a/src/gui/intro.cpp b/src/gui/intro.cpp index bace14396..0fc1c9600 100644 --- a/src/gui/intro.cpp +++ b/src/gui/intro.cpp @@ -104,10 +104,7 @@ void FurnaceGUI::endIntroTune() { void FurnaceGUI::drawIntro(double introTime, bool monitor) { if (monitor) { - if (introTime<0.0) introTime=0.0; - if (introTime>11.0) introTime=11.0; - if (!introMonOpen) return; - if (introPos<(shortIntro?1.0:11.0)) return; + return; } if (introPos<(shortIntro?1.0:11.0) || monitor) { if (!monitor) { @@ -117,7 +114,7 @@ void FurnaceGUI::drawIntro(double introTime, bool monitor) { ImGui::SetNextWindowSize(ImVec2(canvasW,canvasH)); if (introPos<0.1) ImGui::SetNextWindowFocus(); } - if (ImGui::Begin(monitor?"IntroMon X":"Intro",monitor?(&introMonOpen):NULL,monitor?globalWinFlags:(ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoDocking|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoBackground))) { + if (ImGui::Begin(monitor?"IntroMon X":"Intro",NULL,monitor?globalWinFlags:(ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoDocking|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoBackground))) { if (monitor) { if (ImGui::Button("Preview")) { introPos=0; diff --git a/src/gui/mixer.cpp b/src/gui/mixer.cpp index ff1641ba0..dfa270ecd 100644 --- a/src/gui/mixer.cpp +++ b/src/gui/mixer.cpp @@ -244,6 +244,7 @@ void FurnaceGUI::drawMixer() { ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("%d. %s",i+1,getSystemName(e->song.system[i])); ImGui::TableNextColumn(); if (ImGui::Checkbox("Invert",&doInvert)) { diff --git a/src/gui/osc.cpp b/src/gui/osc.cpp index 7f783ddee..fc3b17245 100644 --- a/src/gui/osc.cpp +++ b/src/gui/osc.cpp @@ -20,6 +20,8 @@ #include "gui.h" #include "imgui_internal.h" #include +#include "../ta-log.h" +#include "../engine/filter.h" void FurnaceGUI::readOsc() { int writePos=e->oscWritePos; @@ -47,19 +49,52 @@ void FurnaceGUI::readOsc() { int winSize=e->getAudioDescGot().rate*(oscWindowSize/1000.0); int oscReadPos=(writePos-winSize)&0x7fff; - for (int i=0; i<512; i++) { - int pos=(oscReadPos+(i*winSize/512))&0x7fff; - oscValues[i]=0; - for (int j=0; jgetAudioDescGot().outChans; j++) { - oscValues[i]+=e->oscBuf[j][pos]; - } - oscValues[i]/=e->getAudioDescGot().outChans; - if (oscValues[i]>0.001f || oscValues[i]<-0.001f) { - WAKE_UP; + for (int ch=0; chgetAudioDescGot().outChans; ch++) { + if (oscValues[ch]==NULL) { + oscValues[ch]=new float[1024]; + } + memset(oscValues[ch],0,1024*sizeof(float)); + float* sincITable=DivFilterTables::getSincIntegralTable(); + + float posFrac=0.0; + int posInt=oscReadPos; + float factor=(float)oscWidth/(float)winSize; + for (int i=0; ioscBuf[ch][posInt&0x7fff]; + + posFrac+=1.0; + while (posFrac>=1.0) { + unsigned int n=((unsigned int)(posFrac*8192.0))&8191; + posFrac-=factor; + posInt++; + + float* t1=&sincITable[(8191-n)<<3]; + float* t2=&sincITable[n<<3]; + float delta=e->oscBuf[ch][posInt&0x7fff]-e->oscBuf[ch][(posInt-1)&0x7fff]; + + for (int j=0; j<8; j++) { + if (i-j>0) { + oscValues[ch][i-j]+=t1[j]*-delta; + } + if (i+j+10.001f || oscValues[ch][i]<-0.001f) { + WAKE_UP; + } } } + /*for (int i=0; igetAudioDescGot().outChans; i++) { peak[i]*=1.0-peakDecay; @@ -124,7 +159,7 @@ void FurnaceGUI::drawOsc() { ImDrawList* dl=ImGui::GetWindowDrawList(); ImGuiWindow* window=ImGui::GetCurrentWindow(); - ImVec2 waveform[512]; + ImVec2 waveform[1024]; ImVec2 size=ImGui::GetContentRegionAvail(); ImVec2 minArea=window->DC.CursorPos; @@ -211,22 +246,67 @@ void FurnaceGUI::drawOsc() { dpiScale ); - for (size_t i=0; i<512; i++) { - float x=(float)i/512.0f; - float y=oscValues[i]*oscZoom; - if (!settings.oscEscapesBoundary) { - if (y<-0.5f) y=-0.5f; - if (y>0.5f) y=0.5f; + oscWidth=round(inRect.Max.x-inRect.Min.x); + if (oscWidth<1) oscWidth=1; + if (oscWidth>1024) oscWidth=1024; + + ImDrawListFlags prevFlags=dl->Flags; + if (!settings.oscAntiAlias) { + dl->Flags&=~(ImDrawListFlags_AntiAliasedLines|ImDrawListFlags_AntiAliasedLinesUseTex); + } + + if (settings.oscMono) { + for (int i=0; igetAudioDescGot().outChans; j++) { + avg+=oscValues[j][i]; + } + avg/=e->getAudioDescGot().outChans; + + float y=avg*oscZoom; + if (!settings.oscEscapesBoundary) { + if (y<-0.5f) y=-0.5f; + if (y>0.5f) y=0.5f; + } + waveform[i]=ImLerp(inRect.Min,inRect.Max,ImVec2(x,0.5f-y)); + } + + if (settings.oscEscapesBoundary) { + dl->PushClipRectFullScreen(); + dl->AddPolyline(waveform,oscWidth,color,ImDrawFlags_None,dpiScale); + dl->PopClipRect(); + } else { + dl->AddPolyline(waveform,oscWidth,color,ImDrawFlags_None,dpiScale); } - waveform[i]=ImLerp(inRect.Min,inRect.Max,ImVec2(x,0.5f-y)); - } - if (settings.oscEscapesBoundary) { - dl->PushClipRectFullScreen(); - dl->AddPolyline(waveform,512,color,ImDrawFlags_None,dpiScale); - dl->PopClipRect(); } else { - dl->AddPolyline(waveform,512,color,ImDrawFlags_None,dpiScale); + for (int ch=0; chgetAudioDescGot().outChans; ch++) { + for (int i=0; i0.5f) y=0.5f; + } + waveform[i]=ImLerp(inRect.Min,inRect.Max,ImVec2(x,0.5f-y)); + } + + if (!isClipping) { + color=ImGui::GetColorU32(uiColors[GUI_COLOR_OSC_WAVE_CH0+ch]); + } + + if (settings.oscEscapesBoundary) { + dl->PushClipRectFullScreen(); + dl->AddPolyline(waveform,oscWidth,color,ImDrawFlags_None,dpiScale); + dl->PopClipRect(); + } else { + dl->AddPolyline(waveform,oscWidth,color,ImDrawFlags_None,dpiScale); + } + } } + + dl->Flags=prevFlags; + if (settings.oscBorder) { dl->AddRect(inRect.Min,inRect.Max,borderColor,settings.oscRoundedCorners?(8.0f*dpiScale):0.0f,0,1.5f*dpiScale); } diff --git a/src/gui/pattern.cpp b/src/gui/pattern.cpp index 590676fc7..a1ba6336f 100644 --- a/src/gui/pattern.cpp +++ b/src/gui/pattern.cpp @@ -420,9 +420,6 @@ void FurnaceGUI::drawPattern() { //char id[32]; ImGui::PushFont(patFont); int ord=oldOrder; - if (followPattern) { - curOrder=e->getOrder(); - } oldOrder=curOrder; int chans=e->getTotalChannelCount(); int displayChans=0; @@ -829,8 +826,6 @@ void FurnaceGUI::drawPattern() { ImGui::GetColorU32(chanHeadBase) ); } - keyHit1[i]-=0.2f; - if (keyHit1[i]<0.0f) keyHit1[i]=0.0f; } } @@ -938,6 +933,7 @@ void FurnaceGUI::drawPattern() { ImGui::TableNextColumn(); } } + ImGui::EndDisabled(); ImGui::PopStyleVar(); oldRow=curRow; diff --git a/src/gui/piano.cpp b/src/gui/piano.cpp index 4842d05cf..3c501c45f 100644 --- a/src/gui/piano.cpp +++ b/src/gui/piano.cpp @@ -100,6 +100,7 @@ void FurnaceGUI::drawPiano() { } if (ImGui::BeginPopupContextItem("PianoOptions",ImGuiPopupFlags_MouseButtonLeft)) { ImGui::Text("Key layout:"); + ImGui::Indent(); if (ImGui::RadioButton("Automatic",pianoView==PIANO_LAYOUT_AUTOMATIC)) { pianoView=PIANO_LAYOUT_AUTOMATIC; } @@ -109,7 +110,9 @@ void FurnaceGUI::drawPiano() { if (ImGui::RadioButton("Continuous",pianoView==PIANO_LAYOUT_CONTINUOUS)) { pianoView=PIANO_LAYOUT_CONTINUOUS; } + ImGui::Unindent(); ImGui::Text("Value input pad:"); + ImGui::Indent(); if (ImGui::RadioButton("Disabled",pianoInputPadMode==PIANO_INPUT_PAD_DISABLE)) { pianoInputPadMode=PIANO_INPUT_PAD_DISABLE; } @@ -122,6 +125,7 @@ void FurnaceGUI::drawPiano() { if (ImGui::RadioButton("Split (always visible)",pianoInputPadMode==PIANO_INPUT_PAD_SPLIT_VISIBLE)) { pianoInputPadMode=PIANO_INPUT_PAD_SPLIT_VISIBLE; } + ImGui::Unindent(); ImGui::Checkbox("Share play/edit offset/range",&pianoSharePosition); ImGui::Checkbox("Read-only (can't input notes)",&pianoReadonly); ImGui::EndPopup(); @@ -377,7 +381,6 @@ void FurnaceGUI::drawPiano() { pianoOptions=!pianoOptions; } - // TODO: wave and sample preview // first check released keys for (int i=0; i<180; i++) { int note=i-60; diff --git a/src/gui/presets.cpp b/src/gui/presets.cpp index 356ac6f6a..7c423ea40 100644 --- a/src/gui/presets.cpp +++ b/src/gui/presets.cpp @@ -1407,28 +1407,40 @@ void FurnaceGUI::initSystemPresets() { "Sega System 32", { CH(DIV_SYSTEM_YM2612, 1.0f, 0, "clockSel=4"), // discrete 8.05MHz YM3438 CH(DIV_SYSTEM_YM2612, 1.0f, 0, "clockSel=4"), // ^^ - CH(DIV_SYSTEM_RF5C68, 1.0f, 0, "clockSel=2") // 12.5MHz + CH(DIV_SYSTEM_RF5C68, 1.0f, 0, + "clockSel=2\n" + "chipType=1\n" + ) // 12.5MHz } ); ENTRY( "Sega System 32 (extended channel 3 on first OPN2C)", { CH(DIV_SYSTEM_YM2612_EXT, 1.0f, 0, "clockSel=4"), // discrete 8.05MHz YM3438 CH(DIV_SYSTEM_YM2612, 1.0f, 0, "clockSel=4"), // ^^ - CH(DIV_SYSTEM_RF5C68, 1.0f, 0, "clockSel=2") // 12.5MHz + CH(DIV_SYSTEM_RF5C68, 1.0f, 0, + "clockSel=2\n" + "chipType=1\n" + ) // 12.5MHz } ); ENTRY( "Sega System 32 (extended channel 3 on second OPN2C)", { CH(DIV_SYSTEM_YM2612, 1.0f, 0, "clockSel=4"), // discrete 8.05MHz YM3438 CH(DIV_SYSTEM_YM2612_EXT, 1.0f, 0, "clockSel=4"), // ^^ - CH(DIV_SYSTEM_RF5C68, 1.0f, 0, "clockSel=2") // 12.5MHz + CH(DIV_SYSTEM_RF5C68, 1.0f, 0, + "clockSel=2\n" + "chipType=1\n" + ) // 12.5MHz } ); ENTRY( "Sega System 32 (extended channel 3 on both OPN2Cs)", { CH(DIV_SYSTEM_YM2612_EXT, 1.0f, 0, "clockSel=4"), // discrete 8.05MHz YM3438 CH(DIV_SYSTEM_YM2612_EXT, 1.0f, 0, "clockSel=4"), // ^^ - CH(DIV_SYSTEM_RF5C68, 1.0f, 0, "clockSel=2") // 12.5MHz + CH(DIV_SYSTEM_RF5C68, 1.0f, 0, + "clockSel=2\n" + "chipType=1\n" + ) // 12.5MHz } ); ENTRY( @@ -2012,6 +2024,12 @@ void FurnaceGUI::initSystemPresets() { ) // "" } ); + ENTRY( + "Namco System 2", { + CH(DIV_SYSTEM_YM2151, 1.0f, 0, ""), + CH(DIV_SYSTEM_C140, 1.0f, 0, "") + } + ); ENTRY( "Taito Arcade", { CH(DIV_SYSTEM_YM2610B, 1.0f, 0, "") @@ -2322,6 +2340,22 @@ void FurnaceGUI::initSystemPresets() { CH(DIV_SYSTEM_OPL3_DRUMS, 1.0f, 0, "") } ); + ENTRY( + "Yamaha YMF289B (OPL3-L)", { + CH(DIV_SYSTEM_OPL3, 1.0f, 0, + "clockSel=5\n" + "chipType=1\n" + ) + } + ); + ENTRY( + "Yamaha YMF289B (drums mode)", { + CH(DIV_SYSTEM_OPL3_DRUMS, 1.0f, 0, + "clockSel=5\n" + "chipType=1\n" + ) + } + ); if (settings.hiddenSystems) { ENTRY( "Yamaha YMU759 (MA-2)", { @@ -2518,6 +2552,11 @@ void FurnaceGUI::initSystemPresets() { CH(DIV_SYSTEM_K053260, 1.0f, 0, "") } ); + ENTRY( + "Namco C140", { + CH(DIV_SYSTEM_C140, 1.0f, 0, "") + } + ); CATEGORY_END; CATEGORY_BEGIN("Wavetable","chips which use user-specified waveforms to generate sound."); diff --git a/src/gui/sampleEdit.cpp b/src/gui/sampleEdit.cpp index 99ccbd22c..7c08ba470 100644 --- a/src/gui/sampleEdit.cpp +++ b/src/gui/sampleEdit.cpp @@ -49,6 +49,27 @@ const double timeMultipliers[13]={ _x+=_text; \ } +#define MAX_RATE(_name,_x) \ + if (e->isPreviewingSample()) { \ + if ((int)e->getSamplePreviewRate()>(int)(_x)) { \ + SAMPLE_WARN(warnRate,fmt::sprintf("%s: maximum sample rate is %d",_name,(int)(_x))); \ + } \ + } + +#define MIN_RATE(_name,_x) \ + if (e->isPreviewingSample()) { \ + if ((int)e->getSamplePreviewRate()<(int)(_x)) { \ + SAMPLE_WARN(warnRate,fmt::sprintf("%s: minimum sample rate is %d",_name,(int)(_x))); \ + } \ + } + +#define EXACT_RATE(_name,_x) \ + if (e->isPreviewingSample()) { \ + if ((int)e->getSamplePreviewRate()!=(int)(_x)) { \ + SAMPLE_WARN(warnRate,fmt::sprintf("%s: sample rate must be %d",_name,(int)(_x))); \ + } \ + } + void FurnaceGUI::drawSampleEdit() { if (nextWindow==GUI_WINDOW_SAMPLE_EDIT) { sampleEditOpen=true; @@ -173,7 +194,7 @@ void FurnaceGUI::drawSampleEdit() { ImGui::Separator(); String warnLoop, warnLoopMode, warnLoopPos; - String warnLength; + String warnLength, warnRate; bool isChipVisible[DIV_MAX_CHIPS]; bool isTypeVisible[DIV_MAX_SAMPLE_TYPE]; @@ -185,6 +206,8 @@ void FurnaceGUI::drawSampleEdit() { memset(isMemWarning,0,DIV_MAX_CHIPS*DIV_MAX_SAMPLE_TYPE*sizeof(bool)); for (int i=0; isong.systemLen; i++) { + DivDispatch* dispatch=e->getDispatch(i); + // warnings switch (e->song.system[i]) { case DIV_SYSTEM_SNES: @@ -193,6 +216,9 @@ void FurnaceGUI::drawSampleEdit() { SAMPLE_WARN(warnLoopPos,"SNES: loop must be a multiple of 16"); } } + if (dispatch!=NULL) { + MAX_RATE("SNES",dispatch->chipClock/8.0); + } break; case DIV_SYSTEM_QSOUND: if (sample->loop) { @@ -226,6 +252,9 @@ void FurnaceGUI::drawSampleEdit() { if (sample->loop) { SAMPLE_WARN(warnLoop,"GA20: samples can't loop"); } + if (dispatch!=NULL) { + MIN_RATE("GA20",dispatch->chipClock/1024); + } break; case DIV_SYSTEM_YM2608: case DIV_SYSTEM_YM2608_EXT: @@ -250,6 +279,9 @@ void FurnaceGUI::drawSampleEdit() { if (sample->samples>2097152) { SAMPLE_WARN(warnLength,"YM2610: maximum ADPCM-A sample length is 2097152"); } + if (dispatch!=NULL) { + EXACT_RATE("YM2610 (ADPCM-A)",dispatch->chipClock/432); + } break; case DIV_SYSTEM_AMIGA: if (sample->loop) { @@ -266,6 +298,9 @@ void FurnaceGUI::drawSampleEdit() { if (sample->samples>65280) { SAMPLE_WARN(warnLength,"SegaPCM: maximum sample length is 65280"); } + if (dispatch!=NULL) { + MAX_RATE("SegaPCM",dispatch->chipClock/256); + } break; case DIV_SYSTEM_K053260: if (sample->loop) { @@ -277,6 +312,11 @@ void FurnaceGUI::drawSampleEdit() { SAMPLE_WARN(warnLength,"K053260: maximum sample length is 65535"); } break; + case DIV_SYSTEM_C140: + if (sample->samples>65535) { + SAMPLE_WARN(warnLength,"C140: maximum sample length is 65535"); + } + break; default: break; } @@ -291,7 +331,6 @@ void FurnaceGUI::drawSampleEdit() { } // chips grid - DivDispatch* dispatch=e->getDispatch(i); if (dispatch==NULL) continue; for (int j=0; j0.99f) sampleFilterRes=0.99f; } + ImGui::AlignTextToFramePadding(); ImGui::Text("Power"); ImGui::SameLine(); if (ImGui::RadioButton("1x",sampleFilterPower==1)) { @@ -1601,7 +1648,7 @@ void FurnaceGUI::drawSampleEdit() { posX=samplePos+pos.x*sampleZoom; if (posX>(int)sample->samples) posX=-1; } - posY=(0.5-pos.y/rectSize.y)*((sample->depth==DIV_SAMPLE_DEPTH_8BIT)?255:32767); + posY=(0.5-pos.y/rectSize.y)*((sample->depth==DIV_SAMPLE_DEPTH_8BIT)?255:65535); if (posX>=0) { statusBar2=fmt::sprintf("(%d, %d)",posX,posY); } @@ -1743,7 +1790,16 @@ void FurnaceGUI::drawSampleEdit() { ImGui::TableNextColumn(); ImGui::TextUnformatted(statusBar.c_str()); ImGui::TableNextColumn(); - ImGui::TextUnformatted(statusBar2.c_str()); + if (!warnRate.empty()) { + ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_WARNING]); + ImGui::TextUnformatted(statusBar2.c_str()); + ImGui::PopStyleColor(); + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("%s",warnRate.c_str()); + } + } else { + ImGui::TextUnformatted(statusBar2.c_str()); + } ImGui::TableNextColumn(); if (!warnLength.empty()) { ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_WARNING]); diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 4339d15fc..8f7eb8242 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -27,6 +27,7 @@ #include "intConst.h" #include "ImGuiFileDialog.h" #include "IconsFontAwesome4.h" +#include "furIcons.h" #include "misc/cpp/imgui_stdlib.h" #include #include @@ -58,6 +59,16 @@ const char* mainFonts[]={ "" }; +const char* headFonts[]={ + "IBM Plex Sans", + "Liberation Sans", + "Exo", + "Proggy Clean", + "GNU Unifont", + "", + "" +}; + const char* patFonts[]={ "IBM Plex Mono", "Mononoki", @@ -229,6 +240,7 @@ const char* specificControls[18]={ #define UI_KEYBIND_CONFIG(what) \ ImGui::TableNextRow(); \ ImGui::TableNextColumn(); \ + ImGui::AlignTextToFramePadding();\ ImGui::TextUnformatted(guiActions[what].friendlyName); \ ImGui::TableNextColumn(); \ if (ImGui::Button(fmt::sprintf("%s##KC_" #what,(bindSetPending && bindSetTarget==what)?"Press key...":getKeyName(actionKeys[what])).c_str())) { \ @@ -242,7 +254,7 @@ const char* specificControls[18]={ } else { \ _subInit=true; \ } \ - ImGui::PushFont(bigFont); \ + ImGui::PushFont(headFont); \ ImGui::TextUnformatted(what); \ ImGui::PopFont(); @@ -427,11 +439,26 @@ void FurnaceGUI::drawSettings() { ImGui::SetTooltip("do not report any issues arising from the use of this option!"); } + ImGui::Text("Play after opening song:"); + ImGui::Indent(); + if (ImGui::RadioButton("No##pol0",settings.playOnLoad==0)) { + settings.playOnLoad=0; + } + if (ImGui::RadioButton("Only if already playing##pol1",settings.playOnLoad==1)) { + settings.playOnLoad=1; + } + if (ImGui::RadioButton("Yes##pol0",settings.playOnLoad==2)) { + settings.playOnLoad=2; + } + ImGui::Unindent(); + ImGui::Text("Audio export loop/fade out time:"); + ImGui::Indent(); if (ImGui::RadioButton("Set to these values on start-up:##fot0",settings.persistFadeOut==0)) { settings.persistFadeOut=0; } ImGui::BeginDisabled(settings.persistFadeOut); + ImGui::Indent(); if (ImGui::InputInt("Loops",&settings.exportLoops,1,2)) { if (exportLoops<0) exportLoops=0; exportLoops=settings.exportLoops; @@ -440,13 +467,16 @@ void FurnaceGUI::drawSettings() { if (exportFadeOut<0.0) exportFadeOut=0.0; exportFadeOut=settings.exportFadeOut; } + ImGui::Unindent(); ImGui::EndDisabled(); if (ImGui::RadioButton("Remember last values##fot1",settings.persistFadeOut==1)) { settings.persistFadeOut=1; } + ImGui::Unindent(); // SUBSECTION CHIP CONFIG_SUBSECTION("Chip"); + ImGui::AlignTextToFramePadding(); ImGui::Text("Initial system:"); ImGui::SameLine(); if (ImGui::Button("Current system")) { @@ -525,6 +555,7 @@ void FurnaceGUI::drawSettings() { settings.initialSysName="Sega Genesis/Mega Drive"; } + ImGui::AlignTextToFramePadding(); ImGui::Text("Name"); ImGui::SameLine(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); @@ -635,21 +666,19 @@ void FurnaceGUI::drawSettings() { } ImGui::Text("When creating new song:"); + ImGui::Indent(); if (ImGui::RadioButton("Display system preset selector##NSB0",settings.newSongBehavior==0)) { settings.newSongBehavior=0; } if (ImGui::RadioButton("Start with initial system##NSB1",settings.newSongBehavior==1)) { settings.newSongBehavior=1; } - - bool restartOnFlagChangeB=settings.restartOnFlagChange; - if (ImGui::Checkbox("Restart song when changing chip properties",&restartOnFlagChangeB)) { - settings.restartOnFlagChange=restartOnFlagChangeB; - } + ImGui::Unindent(); // SUBSECTION START-UP CONFIG_SUBSECTION("Start-up"); ImGui::Text("Play intro on start-up:"); + ImGui::Indent(); if (ImGui::RadioButton("No##pis0",settings.alwaysPlayIntro==0)) { settings.alwaysPlayIntro=0; } @@ -662,6 +691,7 @@ void FurnaceGUI::drawSettings() { if (ImGui::RadioButton("Full (always)##pis3",settings.alwaysPlayIntro==3)) { settings.alwaysPlayIntro=3; } + ImGui::Unindent(); bool disableFadeInB=settings.disableFadeIn; if (ImGui::Checkbox("Disable fade-in during start-up",&disableFadeInB)) { @@ -689,6 +719,7 @@ void FurnaceGUI::drawSettings() { // SUBSECTION OUTPUT CONFIG_SUBSECTION("Output"); #ifdef HAVE_JACK + ImGui::AlignTextToFramePadding(); ImGui::Text("Backend"); ImGui::SameLine(); int prevAudioEngine=settings.audioEngine; @@ -700,6 +731,7 @@ void FurnaceGUI::drawSettings() { #endif if (settings.audioEngine==DIV_AUDIO_SDL) { + ImGui::AlignTextToFramePadding(); ImGui::Text("Driver"); ImGui::SameLine(); if (ImGui::BeginCombo("##SDLADriver",settings.sdlAudioDriver.empty()?"Automatic":settings.sdlAudioDriver.c_str())) { @@ -718,6 +750,7 @@ void FurnaceGUI::drawSettings() { } } + ImGui::AlignTextToFramePadding(); ImGui::Text("Device"); ImGui::SameLine(); String audioDevName=settings.audioDevice.empty()?"":settings.audioDevice; @@ -733,6 +766,7 @@ void FurnaceGUI::drawSettings() { ImGui::EndCombo(); } + ImGui::AlignTextToFramePadding(); ImGui::Text("Sample rate"); ImGui::SameLine(); String sr=fmt::sprintf("%d",settings.audioRate); @@ -757,6 +791,7 @@ void FurnaceGUI::drawSettings() { if (settings.audioChans>16) settings.audioChans=16; } } else { + ImGui::AlignTextToFramePadding(); ImGui::Text("Channels"); ImGui::SameLine(); String chStr=(settings.audioChans<1 || settings.audioChans>8)?"What?":nonProAudioOuts[settings.audioChans-1]; @@ -770,6 +805,7 @@ void FurnaceGUI::drawSettings() { } } + ImGui::AlignTextToFramePadding(); ImGui::Text("Buffer size"); ImGui::SameLine(); String bs=fmt::sprintf("%d (latency: ~%.1fms)",settings.audioBufSize,2000.0*(double)settings.audioBufSize/(double)MAX(1,settings.audioRate)); @@ -804,6 +840,7 @@ void FurnaceGUI::drawSettings() { // SUBSECTION MIXING CONFIG_SUBSECTION("Mixing"); + ImGui::AlignTextToFramePadding(); ImGui::Text("Quality"); ImGui::SameLine(); ImGui::Combo("##Quality",&settings.audioQuality,audioQualities,2); @@ -815,6 +852,7 @@ void FurnaceGUI::drawSettings() { // SUBSECTION METRONOME CONFIG_SUBSECTION("Metronome"); + ImGui::AlignTextToFramePadding(); ImGui::Text("Metronome volume"); ImGui::SameLine(); if (ImGui::SliderInt("##MetroVol",&settings.metroVol,0,200,"%d%%")) { @@ -828,6 +866,7 @@ void FurnaceGUI::drawSettings() { CONFIG_SECTION("MIDI") { // SUBSECTION MIDI INPUT CONFIG_SUBSECTION("MIDI input"); + ImGui::AlignTextToFramePadding(); ImGui::Text("MIDI input"); ImGui::SameLine(); String midiInName=settings.midiInDevice.empty()?"":settings.midiInDevice; @@ -916,6 +955,7 @@ void FurnaceGUI::drawSettings() { } ImGui::PlotLines("##VolCurveDisplay",curve,128,0,"Volume curve",0.0,127.0,ImVec2(200.0f*dpiScale,200.0f*dpiScale)); + ImGui::AlignTextToFramePadding(); ImGui::Text("Actions:"); ImGui::SameLine(); if (ImGui::Button(ICON_FA_PLUS "##AddAction")) { @@ -1078,6 +1118,7 @@ void FurnaceGUI::drawSettings() { // SUBSECTION MIDI OUTPUT CONFIG_SUBSECTION("MIDI output"); + ImGui::AlignTextToFramePadding(); ImGui::Text("MIDI output"); ImGui::SameLine(); String midiOutName=settings.midiOutDevice.empty()?"":settings.midiOutDevice; @@ -1094,6 +1135,7 @@ void FurnaceGUI::drawSettings() { } ImGui::Text("Output mode:"); + ImGui::Indent(); if (ImGui::RadioButton("Off (use for TX81Z)",settings.midiOutMode==0)) { settings.midiOutMode=0; } @@ -1104,6 +1146,7 @@ void FurnaceGUI::drawSettings() { if (ImGui::RadioButton("Light Show (use for Launchpad)",settings.midiOutMode==2)) { settings.midiOutMode=2; }*/ + ImGui::Unindent(); bool midiOutProgramChangeB=settings.midiOutProgramChange; if (ImGui::Checkbox("Send Program Change",&midiOutProgramChangeB)) { @@ -1122,6 +1165,7 @@ void FurnaceGUI::drawSettings() { if (settings.midiOutTime) { ImGui::Text("Timecode frame rate:"); + ImGui::Indent(); if (ImGui::RadioButton("Closest to Tick Rate",settings.midiOutTimeRate==0)) { settings.midiOutTimeRate=0; } @@ -1137,6 +1181,7 @@ void FurnaceGUI::drawSettings() { if (ImGui::RadioButton("NTSC non-drop (30fps)",settings.midiOutTimeRate==4)) { settings.midiOutTimeRate=4; } + ImGui::Unindent(); } END_SECTION; @@ -1144,40 +1189,49 @@ void FurnaceGUI::drawSettings() { CONFIG_SECTION("Emulation") { // SUBSECTION LAYOUT CONFIG_SUBSECTION("Cores"); + ImGui::AlignTextToFramePadding(); ImGui::Text("Arcade/YM2151 core"); ImGui::SameLine(); ImGui::Combo("##ArcadeCore",&settings.arcadeCore,arcadeCores,2); + ImGui::AlignTextToFramePadding(); ImGui::Text("Genesis/YM2612 core"); ImGui::SameLine(); ImGui::Combo("##YM2612Core",&settings.ym2612Core,ym2612Cores,2); + ImGui::AlignTextToFramePadding(); ImGui::Text("SN76489 core"); ImGui::SameLine(); ImGui::Combo("##SNCore",&settings.snCore,snCores,2); + ImGui::AlignTextToFramePadding(); ImGui::Text("NES core"); ImGui::SameLine(); ImGui::Combo("##NESCore",&settings.nesCore,nesCores,2); + ImGui::AlignTextToFramePadding(); ImGui::Text("FDS core"); ImGui::SameLine(); ImGui::Combo("##FDSCore",&settings.fdsCore,nesCores,2); + ImGui::AlignTextToFramePadding(); ImGui::Text("SID core"); ImGui::SameLine(); ImGui::Combo("##C64Core",&settings.c64Core,c64Cores,3); + ImGui::AlignTextToFramePadding(); ImGui::Text("POKEY core"); ImGui::SameLine(); ImGui::Combo("##POKEYCore",&settings.pokeyCore,pokeyCores,2); + ImGui::AlignTextToFramePadding(); ImGui::Text("OPN/OPNA/OPNB cores"); ImGui::SameLine(); ImGui::Combo("##OPNCore",&settings.opnCore,opnCores,2); ImGui::Separator(); + ImGui::AlignTextToFramePadding(); ImGui::Text("PC Speaker strategy"); ImGui::SameLine(); ImGui::Combo("##PCSOutMethod",&settings.pcSpeakerOutMethod,pcspkrOutMethods,5); @@ -1185,6 +1239,7 @@ void FurnaceGUI::drawSettings() { ImGui::Separator(); ImGui::Text("Sample ROMs:"); + ImGui::AlignTextToFramePadding(); ImGui::Text("OPL4 YRW801 path"); ImGui::SameLine(); ImGui::InputText("##YRW801Path",&settings.yrw801Path); @@ -1193,6 +1248,7 @@ void FurnaceGUI::drawSettings() { openFileDialog(GUI_FILE_YRW801_ROM_OPEN); } + ImGui::AlignTextToFramePadding(); ImGui::Text("MultiPCM TG100 path"); ImGui::SameLine(); ImGui::InputText("##TG100Path",&settings.tg100Path); @@ -1201,6 +1257,7 @@ void FurnaceGUI::drawSettings() { openFileDialog(GUI_FILE_TG100_ROM_OPEN); } + ImGui::AlignTextToFramePadding(); ImGui::Text("MultiPCM MU5 path"); ImGui::SameLine(); ImGui::InputText("##MU5Path",&settings.mu5Path); @@ -1448,6 +1505,7 @@ void FurnaceGUI::drawSettings() { UI_KEYBIND_CONFIG(GUI_ACTION_PAT_COLLAPSE_SONG); UI_KEYBIND_CONFIG(GUI_ACTION_PAT_EXPAND_SONG); UI_KEYBIND_CONFIG(GUI_ACTION_PAT_LATCH); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CLEAR_LATCH); KEYBIND_CONFIG_END; ImGui::TreePop(); @@ -1574,6 +1632,7 @@ void FurnaceGUI::drawSettings() { CONFIG_SECTION("Interface") { // SUBSECTION LAYOUT CONFIG_SUBSECTION("Layout"); + ImGui::AlignTextToFramePadding(); ImGui::Text("Workspace layout:"); ImGui::SameLine(); if (ImGui::Button("Import")) { @@ -1609,7 +1668,13 @@ void FurnaceGUI::drawSettings() { applyUISettings(false); } + bool centerPopupB=settings.centerPopup; + if (ImGui::Checkbox("Center pop-up windows",¢erPopupB)) { + settings.centerPopup=centerPopupB; + } + ImGui::Text("Play/edit controls layout:"); + ImGui::Indent(); if (ImGui::RadioButton("Classic##ecl0",settings.controlLayout==0)) { settings.controlLayout=0; } @@ -1622,8 +1687,10 @@ void FurnaceGUI::drawSettings() { if (ImGui::RadioButton("Split##ecl3",settings.controlLayout==3)) { settings.controlLayout=3; } + ImGui::Unindent(); ImGui::Text("Position of buttons in Orders:"); + ImGui::Indent(); if (ImGui::RadioButton("Top##obp0",settings.orderButtonPos==0)) { settings.orderButtonPos=0; } @@ -1633,6 +1700,7 @@ void FurnaceGUI::drawSettings() { if (ImGui::RadioButton("Right##obp2",settings.orderButtonPos==2)) { settings.orderButtonPos=2; } + ImGui::Unindent(); // SUBSECTION MOUSE CONFIG_SUBSECTION("Mouse"); @@ -1655,6 +1723,7 @@ void FurnaceGUI::drawSettings() { } ImGui::Text("Note preview behavior:"); + ImGui::Indent(); if (ImGui::RadioButton("Never##npb0",settings.notePreviewBehavior==0)) { settings.notePreviewBehavior=0; } @@ -1667,8 +1736,10 @@ void FurnaceGUI::drawSettings() { if (ImGui::RadioButton("Always##npb3",settings.notePreviewBehavior==3)) { settings.notePreviewBehavior=3; } + ImGui::Unindent(); ImGui::Text("Allow dragging selection:"); + ImGui::Indent(); if (ImGui::RadioButton("No##dms0",settings.dragMovesSelection==0)) { settings.dragMovesSelection=0; } @@ -1678,8 +1749,10 @@ void FurnaceGUI::drawSettings() { if (ImGui::RadioButton("Yes (while holding Ctrl only)##dms2",settings.dragMovesSelection==2)) { settings.dragMovesSelection=2; } + ImGui::Unindent(); ImGui::Text("Toggle channel solo on:"); + ImGui::Indent(); if (ImGui::RadioButton("Right-click or double-click##soloA",settings.soloAction==0)) { settings.soloAction=0; } @@ -1689,6 +1762,7 @@ void FurnaceGUI::drawSettings() { if (ImGui::RadioButton("Double-click##soloD",settings.soloAction==2)) { settings.soloAction=2; } + ImGui::Unindent(); bool doubleClickColumnB=settings.doubleClickColumn; if (ImGui::Checkbox("Double click selects entire column",&doubleClickColumnB)) { @@ -1713,6 +1787,7 @@ void FurnaceGUI::drawSettings() { } ImGui::Text("Effect input behavior:"); + ImGui::Indent(); if (ImGui::RadioButton("Move down##eicb0",settings.effectCursorDir==0)) { settings.effectCursorDir=0; } @@ -1722,6 +1797,7 @@ void FurnaceGUI::drawSettings() { if (ImGui::RadioButton("Move to effect value/next effect and wrap around##eicb2",settings.effectCursorDir==2)) { settings.effectCursorDir=2; } + ImGui::Unindent(); bool effectDeletionAltersValueB=settings.effectDeletionAltersValue; if (ImGui::Checkbox("Delete effect value when deleting effect",&effectDeletionAltersValueB)) { @@ -1733,10 +1809,21 @@ void FurnaceGUI::drawSettings() { settings.absorbInsInput=absorbInsInputB; } + bool removeInsOffB=settings.removeInsOff; + if (ImGui::Checkbox("Remove instrument value when inserting note off/release",&removeInsOffB)) { + settings.removeInsOff=removeInsOffB; + } + + bool removeVolOffB=settings.removeVolOff; + if (ImGui::Checkbox("Remove volume value when inserting note off/release",&removeVolOffB)) { + settings.removeVolOff=removeVolOffB; + } + // SUBSECTION CURSOR MOVEMENT CONFIG_SUBSECTION("Cursor movement"); ImGui::Text("Wrap horizontally:"); + ImGui::Indent(); if (ImGui::RadioButton("No##wrapH0",settings.wrapHorizontal==0)) { settings.wrapHorizontal=0; } @@ -1746,8 +1833,10 @@ void FurnaceGUI::drawSettings() { if (ImGui::RadioButton("Yes, and move to next/prev row##wrapH2",settings.wrapHorizontal==2)) { settings.wrapHorizontal=2; } + ImGui::Unindent(); ImGui::Text("Wrap vertically:"); + ImGui::Indent(); if (ImGui::RadioButton("No##wrapV0",settings.wrapVertical==0)) { settings.wrapVertical=0; } @@ -1760,14 +1849,17 @@ void FurnaceGUI::drawSettings() { if (ImGui::RadioButton("Yes, and move to next/prev pattern (wrap around)##wrapV2",settings.wrapVertical==3)) { settings.wrapVertical=3; } + ImGui::Unindent(); ImGui::Text("Cursor movement keys behavior:"); + ImGui::Indent(); if (ImGui::RadioButton("Move by one##cmk0",settings.scrollStep==0)) { settings.scrollStep=0; } if (ImGui::RadioButton("Move by Edit Step##cmk1",settings.scrollStep==1)) { settings.scrollStep=1; } + ImGui::Unindent(); bool stepOnDeleteB=settings.stepOnDelete; if (ImGui::Checkbox("Move cursor by edit step on delete",&stepOnDeleteB)) { @@ -1793,6 +1885,7 @@ void FurnaceGUI::drawSettings() { CONFIG_SUBSECTION("Scrolling"); ImGui::Text("Change order when scrolling outside of pattern bounds:"); + ImGui::Indent(); if (ImGui::RadioButton("No##pscroll0",settings.scrollChangesOrder==0)) { settings.scrollChangesOrder=0; } @@ -1802,6 +1895,7 @@ void FurnaceGUI::drawSettings() { if (ImGui::RadioButton("Yes, and wrap around song##pscroll2",settings.scrollChangesOrder==2)) { settings.scrollChangesOrder=2; } + ImGui::Unindent(); bool cursorFollowsOrderB=settings.cursorFollowsOrder; if (ImGui::Checkbox("Cursor follows current order when moving it",&cursorFollowsOrderB)) { @@ -1848,9 +1942,11 @@ void FurnaceGUI::drawSettings() { // SUBSECTION TEXT CONFIG_SUBSECTION("Text"); + ImGui::AlignTextToFramePadding(); ImGui::Text("Main font"); ImGui::SameLine(); ImGui::Combo("##MainFont",&settings.mainFont,mainFonts,7); + ImGui::Indent(); if (settings.mainFont==6) { ImGui::InputText("##MainFontPath",&settings.mainFontPath); ImGui::SameLine(); @@ -1862,9 +1958,29 @@ void FurnaceGUI::drawSettings() { if (settings.mainFontSize<3) settings.mainFontSize=3; if (settings.mainFontSize>96) settings.mainFontSize=96; } + ImGui::Unindent(); + ImGui::AlignTextToFramePadding(); + ImGui::Text("Header font"); + ImGui::SameLine(); + ImGui::Combo("##HeadFont",&settings.headFont,headFonts,7); + ImGui::Indent(); + if (settings.headFont==6) { + ImGui::InputText("##HeadFontPath",&settings.headFontPath); + ImGui::SameLine(); + if (ImGui::Button(ICON_FA_FOLDER "##HeadFontLoad")) { + openFileDialog(GUI_FILE_LOAD_HEAD_FONT); + } + } + if (ImGui::InputInt("Size##HeadFontSize",&settings.headFontSize)) { + if (settings.headFontSize<3) settings.headFontSize=3; + if (settings.headFontSize>96) settings.headFontSize=96; + } + ImGui::Unindent(); + ImGui::AlignTextToFramePadding(); ImGui::Text("Pattern font"); ImGui::SameLine(); ImGui::Combo("##PatFont",&settings.patFont,patFonts,7); + ImGui::Indent(); if (settings.patFont==6) { ImGui::InputText("##PatFontPath",&settings.patFontPath); ImGui::SameLine(); @@ -1876,6 +1992,7 @@ void FurnaceGUI::drawSettings() { if (settings.patFontSize<3) settings.patFontSize=3; if (settings.patFontSize>96) settings.patFontSize=96; } + ImGui::Unindent(); bool loadJapaneseB=settings.loadJapanese; if (ImGui::Checkbox("Display Japanese characters",&loadJapaneseB)) { @@ -1932,6 +2049,7 @@ void FurnaceGUI::drawSettings() { // SUBSECTION PROGRAM CONFIG_SUBSECTION("Program"); ImGui::Text("Title bar:"); + ImGui::Indent(); if (ImGui::RadioButton("Furnace##tbar0",settings.titleBarInfo==0)) { settings.titleBarInfo=0; updateWindowTitle(); @@ -1948,6 +2066,7 @@ void FurnaceGUI::drawSettings() { settings.titleBarInfo=3; updateWindowTitle(); } + ImGui::Unindent(); bool titleBarSysB=settings.titleBarSys; if (ImGui::Checkbox("Display system name on title bar",&titleBarSysB)) { @@ -1962,6 +2081,7 @@ void FurnaceGUI::drawSettings() { } ImGui::Text("Status bar:"); + ImGui::Indent(); if (ImGui::RadioButton("Cursor details##sbar0",settings.statusDisplay==0)) { settings.statusDisplay=0; } @@ -1974,6 +2094,12 @@ void FurnaceGUI::drawSettings() { if (ImGui::RadioButton("Nothing##sbar3",settings.statusDisplay==3)) { settings.statusDisplay=3; } + ImGui::Unindent(); + + bool capitalMenuBarB=settings.capitalMenuBar; + if (ImGui::Checkbox("Capitalize menu bar",&capitalMenuBarB)) { + settings.capitalMenuBar=capitalMenuBarB; + } // SUBSECTION ORDERS CONFIG_SUBSECTION("Orders"); @@ -1989,12 +2115,14 @@ void FurnaceGUI::drawSettings() { } ImGui::Text("Orders row number format:"); + ImGui::Indent(); if (ImGui::RadioButton("Decimal##orbD",settings.orderRowsBase==0)) { settings.orderRowsBase=0; } if (ImGui::RadioButton("Hexadecimal##orbH",settings.orderRowsBase==1)) { settings.orderRowsBase=1; } + ImGui::Unindent(); // SUBSECTION PATTERN CONFIG_SUBSECTION("Pattern"); @@ -2014,12 +2142,14 @@ void FurnaceGUI::drawSettings() { } ImGui::Text("Pattern row number format:"); + ImGui::Indent(); if (ImGui::RadioButton("Decimal##prbD",settings.patRowsBase==0)) { settings.patRowsBase=0; } if (ImGui::RadioButton("Hexadecimal##prbH",settings.patRowsBase==1)) { settings.patRowsBase=1; } + ImGui::Unindent(); ImGui::Text("Pattern view labels:"); ImGui::InputTextWithHint("Note off (3-char)","OFF",&settings.noteOffLabel); @@ -2074,6 +2204,7 @@ void FurnaceGUI::drawSettings() { CONFIG_SUBSECTION("Channel"); ImGui::Text("Channel style:"); + ImGui::Indent(); if (ImGui::RadioButton("Classic##CHS0",settings.channelStyle==0)) { settings.channelStyle=0; } @@ -2092,8 +2223,10 @@ void FurnaceGUI::drawSettings() { if (ImGui::RadioButton("Round border##CHS5",settings.channelStyle==5)) { settings.channelStyle=5; } + ImGui::Unindent(); ImGui::Text("Channel volume bar:"); + ImGui::Indent(); if (ImGui::RadioButton("None##CHV0",settings.channelVolStyle==0)) { settings.channelVolStyle=0; } @@ -2109,9 +2242,10 @@ void FurnaceGUI::drawSettings() { if (ImGui::RadioButton("Real (stereo)##CHV4",settings.channelVolStyle==4)) { settings.channelVolStyle=4; } + ImGui::Unindent(); ImGui::Text("Channel feedback style:"); - + ImGui::Indent(); if (ImGui::RadioButton("Off##CHF0",settings.channelFeedbackStyle==0)) { settings.channelFeedbackStyle=0; } @@ -2124,15 +2258,17 @@ void FurnaceGUI::drawSettings() { if (ImGui::RadioButton("Active##CHF3",settings.channelFeedbackStyle==3)) { settings.channelFeedbackStyle=3; } + ImGui::Unindent(); ImGui::Text("Channel font:"); - + ImGui::Indent(); if (ImGui::RadioButton("Regular##CHFont0",settings.channelFont==0)) { settings.channelFont=0; } if (ImGui::RadioButton("Monospace##CHFont1",settings.channelFont==1)) { settings.channelFont=1; } + ImGui::Unindent(); bool channelTextCenterB=settings.channelTextCenter; if (ImGui::Checkbox("Center channel name",&channelTextCenterB)) { @@ -2140,6 +2276,7 @@ void FurnaceGUI::drawSettings() { } ImGui::Text("Channel colors:"); + ImGui::Indent(); if (ImGui::RadioButton("Single##CHC0",settings.channelColors==0)) { settings.channelColors=0; } @@ -2149,8 +2286,10 @@ void FurnaceGUI::drawSettings() { if (ImGui::RadioButton("Instrument type##CHC2",settings.channelColors==2)) { settings.channelColors=2; } + ImGui::Unindent(); ImGui::Text("Channel name colors:"); + ImGui::Indent(); if (ImGui::RadioButton("Single##CTC0",settings.channelTextColors==0)) { settings.channelTextColors=0; } @@ -2160,6 +2299,7 @@ void FurnaceGUI::drawSettings() { if (ImGui::RadioButton("Instrument type##CTC2",settings.channelTextColors==2)) { settings.channelTextColors=2; } + ImGui::Unindent(); // SUBSECTION ASSETS CONFIG_SUBSECTION("Assets"); @@ -2178,14 +2318,33 @@ void FurnaceGUI::drawSettings() { } ImGui::EndDisabled(); + ImGui::Text("Instrument list icon style:"); + ImGui::Indent(); + if (ImGui::RadioButton("None##iis0",settings.insIconsStyle==0)) { + settings.insIconsStyle=0; + } + if (ImGui::RadioButton("Graphical icons##iis1",settings.insIconsStyle==1)) { + settings.insIconsStyle=1; + } + if (ImGui::RadioButton("Letter icons##iis2",settings.insIconsStyle==2)) { + settings.insIconsStyle=2; + } + ImGui::Unindent(); + bool insEditColorizeB=settings.insEditColorize; if (ImGui::Checkbox("Colorize instrument editor using instrument type",&insEditColorizeB)) { settings.insEditColorize=insEditColorizeB; } + bool insTypeMenuB=settings.insTypeMenu; + if (ImGui::Checkbox("Display instrument type menu when adding instrument",&insTypeMenuB)) { + settings.insTypeMenu=insTypeMenuB; + } + // SUBSECTION MACRO EDITOR CONFIG_SUBSECTION("Macro Editor"); ImGui::Text("Macro editor layout:"); + ImGui::Indent(); if (ImGui::RadioButton("Unified##mel0",settings.macroLayout==0)) { settings.macroLayout=0; } @@ -2201,6 +2360,7 @@ void FurnaceGUI::drawSettings() { if (ImGui::RadioButton("Single (combo box)##mel4",settings.macroLayout==4)) { settings.macroLayout=4; } + ImGui::Unindent(); bool oldMacroVSliderB=settings.oldMacroVSlider; if (ImGui::Checkbox("Use classic macro editor vertical slider",&oldMacroVSliderB)) { @@ -2217,6 +2377,7 @@ void FurnaceGUI::drawSettings() { // SUBSECTION FM EDITOR CONFIG_SUBSECTION("FM Editor"); ImGui::Text("FM parameter names:"); + ImGui::Indent(); if (ImGui::RadioButton("Friendly##fmn0",settings.fmNames==0)) { settings.fmNames=0; } @@ -2226,6 +2387,7 @@ void FurnaceGUI::drawSettings() { if (ImGui::RadioButton("Technical (alternate)##fmn2",settings.fmNames==2)) { settings.fmNames=2; } + ImGui::Unindent(); bool oplStandardWaveNamesB=settings.oplStandardWaveNames; if (ImGui::Checkbox("Use standard OPL waveform names",&oplStandardWaveNamesB)) { @@ -2233,6 +2395,7 @@ void FurnaceGUI::drawSettings() { } ImGui::Text("FM parameter editor layout:"); + ImGui::Indent(); if (ImGui::RadioButton("Modern##fml0",settings.fmLayout==0)) { settings.fmLayout=0; } @@ -2254,14 +2417,17 @@ void FurnaceGUI::drawSettings() { if (ImGui::RadioButton("Alternate (4x1)##fml5",settings.fmLayout==6)) { settings.fmLayout=6; } + ImGui::Unindent(); ImGui::Text("Position of Sustain in FM editor:"); + ImGui::Indent(); if (ImGui::RadioButton("Between Decay and Sustain Rate##susp0",settings.susPosition==0)) { settings.susPosition=0; } if (ImGui::RadioButton("After Release Rate##susp1",settings.susPosition==1)) { settings.susPosition=1; } + ImGui::Unindent(); bool separateFMColorsB=settings.separateFMColors; if (ImGui::Checkbox("Use separate colors for carriers/modulators in FM editor",&separateFMColorsB)) { @@ -2276,12 +2442,14 @@ void FurnaceGUI::drawSettings() { // SUBSECTION STATISTICS CONFIG_SUBSECTION("Statistics"); ImGui::Text("Chip memory usage unit:"); + ImGui::Indent(); if (ImGui::RadioButton("Bytes##MUU0",settings.memUsageUnit==0)) { settings.memUsageUnit=0; } if (ImGui::RadioButton("Kilobytes##MUU1",settings.memUsageUnit==1)) { settings.memUsageUnit=1; } + ImGui::Unindent(); // SUBSECTION OSCILLOSCOPE CONFIG_SUBSECTION("Oscilloscope"); @@ -2295,6 +2463,16 @@ void FurnaceGUI::drawSettings() { settings.oscBorder=oscBorderB; } + bool oscMonoB=settings.oscMono; + if (ImGui::Checkbox("Mono",&oscMonoB)) { + settings.oscMono=oscMonoB; + } + + bool oscAntiAliasB=settings.oscAntiAlias; + if (ImGui::Checkbox("Anti-aliased",&oscAntiAliasB)) { + settings.oscAntiAlias=oscAntiAliasB; + } + bool oscTakesEntireWindowB=settings.oscTakesEntireWindow; if (ImGui::Checkbox("Fill entire window",&oscTakesEntireWindowB)) { settings.oscTakesEntireWindow=oscTakesEntireWindowB; @@ -2345,6 +2523,7 @@ void FurnaceGUI::drawSettings() { } if (ImGui::TreeNode("General")) { ImGui::Text("Color scheme type:"); + ImGui::Indent(); if (ImGui::RadioButton("Dark##gcb0",settings.guiColorsBase==0)) { settings.guiColorsBase=0; applyUISettings(false); @@ -2353,6 +2532,7 @@ void FurnaceGUI::drawSettings() { settings.guiColorsBase=1; applyUISettings(false); } + ImGui::Unindent(); if (ImGui::SliderInt("Frame shading",&settings.guiColorsShading,0,100,"%d%%")) { if (settings.guiColorsShading<0) settings.guiColorsShading=0; if (settings.guiColorsShading>100) settings.guiColorsShading=100; @@ -2420,6 +2600,26 @@ void FurnaceGUI::drawSettings() { UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_PEAK,"Waveform (clip)"); UI_COLOR_CONFIG(GUI_COLOR_OSC_REF,"Reference"); UI_COLOR_CONFIG(GUI_COLOR_OSC_GUIDE,"Guide"); + + if (ImGui::TreeNode("Wave (non-mono)")) { + UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH0,"Waveform (1)"); + UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH1,"Waveform (2)"); + UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH2,"Waveform (3)"); + UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH3,"Waveform (4)"); + UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH4,"Waveform (5)"); + UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH5,"Waveform (6)"); + UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH6,"Waveform (7)"); + UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH7,"Waveform (8)"); + UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH8,"Waveform (9)"); + UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH9,"Waveform (10)"); + UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH10,"Waveform (11)"); + UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH11,"Waveform (12)"); + UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH12,"Waveform (13)"); + UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH13,"Waveform (14)"); + UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH14,"Waveform (15)"); + UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH15,"Waveform (16)"); + ImGui::TreePop(); + } ImGui::TreePop(); } if (ImGui::TreeNode("Volume Meter")) { @@ -2525,6 +2725,7 @@ void FurnaceGUI::drawSettings() { UI_COLOR_CONFIG(GUI_COLOR_INSTR_SM8521,"SM8521"); UI_COLOR_CONFIG(GUI_COLOR_INSTR_PV1000,"PV-1000"); UI_COLOR_CONFIG(GUI_COLOR_INSTR_K053260,"K053260"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_C140,"C140"); UI_COLOR_CONFIG(GUI_COLOR_INSTR_UNKNOWN,"Other/Unknown"); ImGui::TreePop(); } @@ -2717,6 +2918,7 @@ void FurnaceGUI::drawSettings() { void FurnaceGUI::syncSettings() { settings.mainFontSize=e->getConfInt("mainFontSize",18); + settings.headFontSize=e->getConfInt("headFontSize",27); settings.patFontSize=e->getConfInt("patFontSize",18); settings.iconSize=e->getConfInt("iconSize",16); settings.audioEngine=(e->getConfString("audioEngine","SDL")=="SDL")?1:0; @@ -2742,8 +2944,10 @@ void FurnaceGUI::syncSettings() { settings.tg100Path=e->getConfString("tg100Path",""); settings.mu5Path=e->getConfString("mu5Path",""); settings.mainFont=e->getConfInt("mainFont",0); + settings.headFont=e->getConfInt("headFont",0); settings.patFont=e->getConfInt("patFont",0); settings.mainFontPath=e->getConfString("mainFontPath",""); + settings.headFontPath=e->getConfString("headFontPath",""); settings.patFontPath=e->getConfString("patFontPath",""); settings.patRowsBase=e->getConfInt("patRowsBase",0); settings.orderRowsBase=e->getConfInt("orderRowsBase",1); @@ -2764,7 +2968,6 @@ void FurnaceGUI::syncSettings() { settings.sysSeparators=e->getConfInt("sysSeparators",1); settings.forceMono=e->getConfInt("forceMono",0); settings.controlLayout=e->getConfInt("controlLayout",3); - settings.restartOnFlagChange=e->getConfInt("restartOnFlagChange",1); settings.statusDisplay=e->getConfInt("statusDisplay",0); settings.dpiScale=e->getConfFloat("dpiScale",0.0f); settings.viewPrevPattern=e->getConfInt("viewPrevPattern",1); @@ -2796,6 +2999,8 @@ void FurnaceGUI::syncSettings() { settings.oscTakesEntireWindow=e->getConfInt("oscTakesEntireWindow",0); settings.oscBorder=e->getConfInt("oscBorder",1); settings.oscEscapesBoundary=e->getConfInt("oscEscapesBoundary",0); + settings.oscMono=e->getConfInt("oscMono",1); + settings.oscAntiAlias=e->getConfInt("oscAntiAlias",1); settings.separateFMColors=e->getConfInt("separateFMColors",0); settings.insEditColorize=e->getConfInt("insEditColorize",0); settings.metroVol=e->getConfInt("metroVol",100); @@ -2869,8 +3074,16 @@ void FurnaceGUI::syncSettings() { settings.memUsageUnit=e->getConfInt("memUsageUnit",1); settings.cursorFollowsWheel=e->getConfInt("cursorFollowsWheel",0); settings.noDMFCompat=e->getConfInt("noDMFCompat",0); + settings.removeInsOff=e->getConfInt("removeInsOff",0); + settings.removeVolOff=e->getConfInt("removeVolOff",0); + settings.playOnLoad=e->getConfInt("playOnLoad",0); + settings.insTypeMenu=e->getConfInt("insTypeMenu",1); + settings.capitalMenuBar=e->getConfInt("capitalMenuBar",0); + settings.centerPopup=e->getConfInt("centerPopup",1); + settings.insIconsStyle=e->getConfInt("insIconsStyle",1); clampSetting(settings.mainFontSize,2,96); + clampSetting(settings.headFontSize,2,96); clampSetting(settings.patFontSize,2,96); clampSetting(settings.iconSize,2,48); clampSetting(settings.audioEngine,0,1); @@ -2999,6 +3212,13 @@ void FurnaceGUI::syncSettings() { clampSetting(settings.memUsageUnit,0,1); clampSetting(settings.cursorFollowsWheel,0,1); clampSetting(settings.noDMFCompat,0,1); + clampSetting(settings.removeInsOff,0,1); + clampSetting(settings.removeVolOff,0,1); + clampSetting(settings.playOnLoad,0,2); + clampSetting(settings.insTypeMenu,0,1); + clampSetting(settings.capitalMenuBar,0,1); + clampSetting(settings.centerPopup,0,1); + clampSetting(settings.insIconsStyle,0,2); if (settings.exportLoops<0.0) settings.exportLoops=0.0; if (settings.exportFadeOut<0.0) settings.exportFadeOut=0.0; @@ -3072,6 +3292,7 @@ void FurnaceGUI::commitSettings() { ); e->setConf("mainFontSize",settings.mainFontSize); + e->setConf("headFontSize",settings.headFontSize); e->setConf("patFontSize",settings.patFontSize); e->setConf("iconSize",settings.iconSize); e->setConf("audioEngine",String(audioBackends[settings.audioEngine])); @@ -3097,8 +3318,10 @@ void FurnaceGUI::commitSettings() { e->setConf("tg100Path",settings.tg100Path); e->setConf("mu5Path",settings.mu5Path); e->setConf("mainFont",settings.mainFont); + e->setConf("headFont",settings.headFont); e->setConf("patFont",settings.patFont); e->setConf("mainFontPath",settings.mainFontPath); + e->setConf("headFontPath",settings.headFontPath); e->setConf("patFontPath",settings.patFontPath); e->setConf("patRowsBase",settings.patRowsBase); e->setConf("orderRowsBase",settings.orderRowsBase); @@ -3119,7 +3342,6 @@ void FurnaceGUI::commitSettings() { e->setConf("sysSeparators",settings.sysSeparators); e->setConf("forceMono",settings.forceMono); e->setConf("controlLayout",settings.controlLayout); - e->setConf("restartOnFlagChange",settings.restartOnFlagChange); e->setConf("statusDisplay",settings.statusDisplay); e->setConf("dpiScale",settings.dpiScale); e->setConf("viewPrevPattern",settings.viewPrevPattern); @@ -3151,6 +3373,8 @@ void FurnaceGUI::commitSettings() { e->setConf("oscTakesEntireWindow",settings.oscTakesEntireWindow); e->setConf("oscBorder",settings.oscBorder); e->setConf("oscEscapesBoundary",settings.oscEscapesBoundary); + e->setConf("oscMono",settings.oscMono); + e->setConf("oscAntiAlias",settings.oscAntiAlias); e->setConf("separateFMColors",settings.separateFMColors); e->setConf("insEditColorize",settings.insEditColorize); e->setConf("metroVol",settings.metroVol); @@ -3225,6 +3449,13 @@ void FurnaceGUI::commitSettings() { e->setConf("memUsageUnit",settings.memUsageUnit); e->setConf("cursorFollowsWheel",settings.cursorFollowsWheel); e->setConf("noDMFCompat",settings.noDMFCompat); + e->setConf("removeInsOff",settings.removeInsOff); + e->setConf("removeVolOff",settings.removeVolOff); + e->setConf("playOnLoad",settings.playOnLoad); + e->setConf("insTypeMenu",settings.insTypeMenu); + e->setConf("capitalMenuBar",settings.capitalMenuBar); + e->setConf("centerPopup",settings.centerPopup); + e->setConf("insIconsStyle",settings.insIconsStyle); // colors for (int i=0; iAddFontDefault(); patFont=mainFont; bigFont=mainFont; + headFont=mainFont; if (rend) rend->destroyFontsTexture(); if (!ImGui::GetIO().Fonts->Build()) { logE("error again while building font atlas!"); @@ -3652,9 +3884,10 @@ void FurnaceGUI::popWarningColor() { #ifdef _WIN32 #define SYSTEM_FONT_PATH_1 "C:\\Windows\\Fonts\\segoeui.ttf" #define SYSTEM_FONT_PATH_2 "C:\\Windows\\Fonts\\tahoma.ttf" -// TODO! -#define SYSTEM_FONT_PATH_3 "C:\\Windows\\Fonts\\tahoma.ttf" -// TODO! +#define SYSTEM_FONT_PATH_3 "C:\\Windows\\Fonts\\micross.ttf" +#define SYSTEM_HEAD_FONT_PATH_1 "C:\\Windows\\Fonts\\segoeui.ttf" +#define SYSTEM_HEAD_FONT_PATH_2 "C:\\Windows\\Fonts\\tahoma.ttf" +#define SYSTEM_HEAD_FONT_PATH_3 "C:\\Windows\\Fonts\\micross.ttf" #define SYSTEM_PAT_FONT_PATH_1 "C:\\Windows\\Fonts\\consola.ttf" #define SYSTEM_PAT_FONT_PATH_2 "C:\\Windows\\Fonts\\cour.ttf" // GOOD LUCK WITH THIS ONE - UNTESTED @@ -3663,6 +3896,9 @@ void FurnaceGUI::popWarningColor() { #define SYSTEM_FONT_PATH_1 "/System/Library/Fonts/SFAANS.ttf" #define SYSTEM_FONT_PATH_2 "/System/Library/Fonts/Helvetica.ttc" #define SYSTEM_FONT_PATH_3 "/System/Library/Fonts/Helvetica.dfont" +#define SYSTEM_HEAD_FONT_PATH_1 "/System/Library/Fonts/SFAANS.ttf" +#define SYSTEM_HEAD_FONT_PATH_2 "/System/Library/Fonts/Helvetica.ttc" +#define SYSTEM_HEAD_FONT_PATH_3 "/System/Library/Fonts/Helvetica.dfont" #define SYSTEM_PAT_FONT_PATH_1 "/System/Library/Fonts/SFNSMono.ttf" #define SYSTEM_PAT_FONT_PATH_2 "/System/Library/Fonts/Courier New.ttf" #define SYSTEM_PAT_FONT_PATH_3 "/System/Library/Fonts/Courier New.ttf" @@ -3671,6 +3907,9 @@ void FurnaceGUI::popWarningColor() { #define SYSTEM_FONT_PATH_2 "/system/fonts/DroidSans.ttf" #define SYSTEM_FONT_PATH_3 "/system/fonts/DroidSans.ttf" // ??? +#define SYSTEM_HEAD_FONT_PATH_1 "/system/fonts/Roboto-Regular.ttf" +#define SYSTEM_HEAD_FONT_PATH_2 "/system/fonts/DroidSans.ttf" +#define SYSTEM_HEAD_FONT_PATH_3 "/system/fonts/DroidSans.ttf" #define SYSTEM_PAT_FONT_PATH_1 "/system/fonts/RobotoMono-Regular.ttf" #define SYSTEM_PAT_FONT_PATH_2 "/system/fonts/DroidSansMono.ttf" #define SYSTEM_PAT_FONT_PATH_3 "/system/fonts/CutiveMono.ttf" @@ -3678,6 +3917,9 @@ void FurnaceGUI::popWarningColor() { #define SYSTEM_FONT_PATH_1 "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf" #define SYSTEM_FONT_PATH_2 "/usr/share/fonts/TTF/DejaVuSans.ttf" #define SYSTEM_FONT_PATH_3 "/usr/share/fonts/ubuntu/Ubuntu-R.ttf" +#define SYSTEM_HEAD_FONT_PATH_1 "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf" +#define SYSTEM_HEAD_FONT_PATH_2 "/usr/share/fonts/TTF/DejaVuSans.ttf" +#define SYSTEM_HEAD_FONT_PATH_3 "/usr/share/fonts/ubuntu/Ubuntu-R.ttf" #define SYSTEM_PAT_FONT_PATH_1 "/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf" #define SYSTEM_PAT_FONT_PATH_2 "/usr/share/fonts/TTF/DejaVuSansMono.ttf" #define SYSTEM_PAT_FONT_PATH_3 "/usr/share/fonts/ubuntu/UbuntuMono-R.ttf" @@ -3918,12 +4160,17 @@ void FurnaceGUI::applyUISettings(bool updateFonts) { } if (settings.mainFont<0 || settings.mainFont>6) settings.mainFont=0; + if (settings.headFont<0 || settings.headFont>6) settings.headFont=0; if (settings.patFont<0 || settings.patFont>6) settings.patFont=0; if (settings.mainFont==6 && settings.mainFontPath.empty()) { logW("UI font path is empty! reverting to default font"); settings.mainFont=0; } + if (settings.headFont==6 && settings.headFontPath.empty()) { + logW("header font path is empty! reverting to default font"); + settings.headFont=0; + } if (settings.patFont==6 && settings.patFontPath.empty()) { logW("pattern font path is empty! reverting to default font"); settings.patFont=0; @@ -3973,6 +4220,11 @@ void FurnaceGUI::applyUISettings(bool updateFonts) { logE("could not load icon font!"); } + static const ImWchar fontRangeFurIcon[]={ICON_MIN_FUR,ICON_MAX_FUR,0}; + if ((furIconFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(furIcons_compressed_data,furIcons_compressed_size,MAX(1,e->getConfInt("iconSize",16)*dpiScale),&fc,fontRangeFurIcon))==NULL) { + logE("could not load Furnace icons font!"); + } + if (settings.mainFontSize==settings.patFontSize && settings.patFont<5 && builtinFontM[settings.patFont]==builtinFont[settings.mainFont]) { logD("using main font for pat font."); patFont=mainFont; @@ -4009,16 +4261,51 @@ void FurnaceGUI::applyUISettings(bool updateFonts) { // 0x39B = Λ static const ImWchar bigFontRange[]={0x20,0xFF,0x39b,0x39b,0}; + if ((bigFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(font_plexSans_compressed_data,font_plexSans_compressed_size,MAX(1,40*dpiScale),NULL,bigFontRange))==NULL) { logE("could not load big UI font!"); } + if (settings.mainFontSize==settings.headFontSize && settings.headFont<5 && builtinFont[settings.headFont]==builtinFont[settings.mainFont]) { + logD("using main font for header font."); + headFont=mainFont; + } else { + if (settings.headFont==6) { // custom font + if ((headFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(settings.headFontPath.c_str(),MAX(1,e->getConfInt("headFontSize",27)*dpiScale),NULL,upTo800))==NULL) { + logW("could not load header font! reverting to default font"); + settings.headFont=0; + if ((headFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFont[settings.headFont],builtinFontLen[settings.headFont],MAX(1,e->getConfInt("headFontSize",27)*dpiScale),NULL,upTo800))==NULL) { + logE("could not load header font! falling back to IBM Plex Sans."); + headFont=ImGui::GetIO().Fonts->AddFontDefault(); + } + } + } else if (settings.headFont==5) { // system font + if ((headFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_HEAD_FONT_PATH_1,MAX(1,e->getConfInt("headFontSize",27)*dpiScale),NULL,upTo800))==NULL) { + if ((headFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_HEAD_FONT_PATH_2,MAX(1,e->getConfInt("headFontSize",27)*dpiScale),NULL,upTo800))==NULL) { + if ((headFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_HEAD_FONT_PATH_3,MAX(1,e->getConfInt("headFontSize",27)*dpiScale),NULL,upTo800))==NULL) { + logW("could not load header font! reverting to default font"); + settings.headFont=0; + if ((headFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFont[settings.headFont],builtinFontLen[settings.headFont],MAX(1,e->getConfInt("headFontSize",27)*dpiScale),NULL,upTo800))==NULL) { + logE("could not load header font! falling back to IBM Plex Sans."); + headFont=ImGui::GetIO().Fonts->AddFontDefault(); + } + } + } + } + } else { + if ((headFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFont[settings.headFont],builtinFontLen[settings.headFont],MAX(1,e->getConfInt("headFontSize",27)*dpiScale),NULL,upTo800))==NULL) { + logE("could not load header font!"); + headFont=ImGui::GetIO().Fonts->AddFontDefault(); + } + } + } + + mainFont->FallbackChar='?'; mainFont->EllipsisChar='.'; mainFont->EllipsisCharCount=3; } - // TODO: allow changing these colors. ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByTypeDir,"",uiColors[GUI_COLOR_FILE_DIR],ICON_FA_FOLDER_O); ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByTypeFile,"",uiColors[GUI_COLOR_FILE_OTHER],ICON_FA_FILE_O); ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".fur",uiColors[GUI_COLOR_FILE_SONG_NATIVE],ICON_FA_FILE); diff --git a/src/gui/songInfo.cpp b/src/gui/songInfo.cpp index 65803e577..b1c4895a0 100644 --- a/src/gui/songInfo.cpp +++ b/src/gui/songInfo.cpp @@ -36,6 +36,7 @@ void FurnaceGUI::drawSongInfo(bool asChild) { ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch,0.0); ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("Name"); ImGui::TableNextColumn(); float avail=ImGui::GetContentRegionAvail().x; @@ -59,6 +60,7 @@ void FurnaceGUI::drawSongInfo(bool asChild) { } ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("Author"); ImGui::TableNextColumn(); ImGui::SetNextItemWidth(avail); @@ -68,6 +70,7 @@ void FurnaceGUI::drawSongInfo(bool asChild) { ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("Album"); ImGui::TableNextColumn(); ImGui::SetNextItemWidth(avail); @@ -77,6 +80,7 @@ void FurnaceGUI::drawSongInfo(bool asChild) { if (!basicMode) { ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("System"); ImGui::TableNextColumn(); ImGui::SetNextItemWidth(MAX(16.0f*dpiScale,avail-autoButtonSize-ImGui::GetStyle().ItemSpacing.x)); @@ -112,6 +116,7 @@ void FurnaceGUI::drawSongInfo(bool asChild) { ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("Tuning (A-4)"); ImGui::TableNextColumn(); float tune=e->song.tuning; diff --git a/src/gui/speed.cpp b/src/gui/speed.cpp index 5557c663e..593467852 100644 --- a/src/gui/speed.cpp +++ b/src/gui/speed.cpp @@ -37,6 +37,7 @@ void FurnaceGUI::drawSpeed(bool asChild) { ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); if (ImGui::SmallButton(tempoView?"Base Tempo##TempoOrHz":"Tick Rate##TempoOrHz")) { tempoView=!tempoView; } @@ -74,6 +75,7 @@ void FurnaceGUI::drawSpeed(bool asChild) { ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); if (keepGrooveAlive || e->curSubSong->speeds.len>2) { if (ImGui::SmallButton("Groove")) { e->lockEngine([this]() { @@ -163,6 +165,7 @@ void FurnaceGUI::drawSpeed(bool asChild) { if (!basicMode) { ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("Virtual Tempo"); ImGui::TableNextColumn(); ImGui::SetNextItemWidth(halfAvail); @@ -185,6 +188,7 @@ void FurnaceGUI::drawSpeed(bool asChild) { ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("Divider"); ImGui::TableNextColumn(); ImGui::SetNextItemWidth(halfAvail); @@ -200,6 +204,7 @@ void FurnaceGUI::drawSpeed(bool asChild) { ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("Highlight"); ImGui::TableNextColumn(); ImGui::SetNextItemWidth(halfAvail); @@ -222,6 +227,7 @@ void FurnaceGUI::drawSpeed(bool asChild) { ImGui::TableSetupColumn("c2",ImGuiTableColumnFlags_WidthStretch,0.0); ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("Pattern Length"); ImGui::TableNextColumn(); float avail=ImGui::GetContentRegionAvail().x; @@ -236,6 +242,7 @@ void FurnaceGUI::drawSpeed(bool asChild) { if (!basicMode) { ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("Song Length"); ImGui::TableNextColumn(); ImGui::SetNextItemWidth(avail); diff --git a/src/gui/stats.cpp b/src/gui/stats.cpp index ed879ff2a..5bc2ee102 100644 --- a/src/gui/stats.cpp +++ b/src/gui/stats.cpp @@ -32,6 +32,7 @@ void FurnaceGUI::drawStats() { size_t lastProcTime=e->processTime; double maxGot=1000000000.0*(double)e->getAudioDescGot().bufsize/(double)e->getAudioDescGot().rate; String procStr=fmt::sprintf("%.1f%%",100.0*((double)lastProcTime/(double)maxGot)); + ImGui::AlignTextToFramePadding(); ImGui::Text("Audio load"); ImGui::SameLine(); ImGui::ProgressBar((double)lastProcTime/maxGot,ImVec2(-FLT_MIN,0),procStr.c_str()); @@ -47,6 +48,7 @@ void FurnaceGUI::drawStats() { } else { usageStr=fmt::sprintf("%d/%d",usage,capacity); } + ImGui::AlignTextToFramePadding(); ImGui::Text("%s [%d]", e->getSystemName(e->song.system[i]), j); ImGui::SameLine(); ImGui::ProgressBar(((float)usage)/((float)capacity),ImVec2(-FLT_MIN,0),usageStr.c_str()); diff --git a/src/gui/subSongs.cpp b/src/gui/subSongs.cpp index 5d34c23fd..15b107ed0 100644 --- a/src/gui/subSongs.cpp +++ b/src/gui/subSongs.cpp @@ -127,6 +127,7 @@ void FurnaceGUI::drawSubSongs(bool asChild) { ImGui::SetTooltip("Remove"); } + ImGui::AlignTextToFramePadding(); ImGui::Text("Name"); ImGui::SameLine(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); diff --git a/src/gui/sysConf.cpp b/src/gui/sysConf.cpp index 0a746e61f..d32e43aba 100644 --- a/src/gui/sysConf.cpp +++ b/src/gui/sysConf.cpp @@ -22,9 +22,9 @@ #include "misc/cpp/imgui_stdlib.h" #include -bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool modifyOnChange) { +bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool modifyOnChange, bool fromMenu) { bool altered=false; - bool restart=settings.restartOnFlagChange && modifyOnChange; + bool restart=modifyOnChange; bool supportsCustomRate=true; switch (type) { @@ -44,6 +44,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo bool fbAllOps=flags.getBool("fbAllOps",false); ImGui::Text("Clock rate:"); + ImGui::Indent(); if (ImGui::RadioButton("NTSC (7.67MHz)",clockSel==0)) { clockSel=0; altered=true; @@ -64,8 +65,10 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo clockSel=4; altered=true; } + ImGui::Unindent(); ImGui::Text("Chip type:"); + ImGui::Indent(); if (ImGui::RadioButton("YM3438 (9-bit DAC)",chipType==0)) { chipType=0; altered=true; @@ -78,6 +81,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo chipType=2; altered=true; } + ImGui::Unindent(); if (type==DIV_SYSTEM_YM2612_EXT || type==DIV_SYSTEM_YM2612_DUALPCM_EXT || type==DIV_SYSTEM_YM2612_CSM) { if (ImGui::Checkbox("Disable ExtCh FM macros (compatibility)",&noExtMacros)) { @@ -105,6 +109,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo bool noEasyNoise=flags.getBool("noEasyNoise",false); ImGui::Text("Clock rate:"); + ImGui::Indent(); if (ImGui::RadioButton("3.58MHz (NTSC)",clockSel==0)) { clockSel=0; altered=true; @@ -133,7 +138,9 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo clockSel=6; altered=true; } + ImGui::Unindent(); ImGui::Text("Chip type:"); + ImGui::Indent(); if (ImGui::RadioButton("Sega VDP/Master System",chipType==0)) { chipType=0; altered=true; @@ -174,6 +181,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo chipType=9; altered=true; } + ImGui::Unindent(); if (ImGui::Checkbox("Disable noise period change phase reset",&noPhaseReset)) { altered=true; @@ -205,6 +213,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo altered=true; } ImGui::Text("Chip revision:"); + ImGui::Indent(); if (ImGui::RadioButton("HuC6280 (original)",chipType==0)) { chipType=0; altered=true; @@ -213,6 +222,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo chipType=1; altered=true; } + ImGui::Unindent(); if (altered) { e->lockSave([&]() { @@ -235,6 +245,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo int echoVol=(signed char)flags.getInt("echoVol",0); ImGui::Text("CPU rate:"); + ImGui::Indent(); if (ImGui::RadioButton("6.18MHz (NTSC)",clockSel==0)) { clockSel=0; altered=true; @@ -243,7 +254,9 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo clockSel=1; altered=true; } + ImGui::Unindent(); ImGui::Text("Sample memory:"); + ImGui::Indent(); if (ImGui::RadioButton("8K (rev A/B/E)",sampleMemSize==0)) { sampleMemSize=0; altered=true; @@ -252,7 +265,9 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo sampleMemSize=1; altered=true; } + ImGui::Unindent(); ImGui::Text("DAC resolution:"); + ImGui::Indent(); if (ImGui::RadioButton("16-bit (rev A/B/D/F)",pdm==0)) { pdm=false; altered=true; @@ -261,6 +276,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo pdm=true; altered=true; } + ImGui::Unindent(); if (ImGui::Checkbox("Enable echo",&echo)) { altered=true; } @@ -317,6 +333,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo altered=true; } ImGui::Text("Chip revision:"); + ImGui::Indent(); if (ImGui::RadioButton("Original (DMG)",chipType==0)) { chipType=0; altered=true; @@ -333,8 +350,10 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo chipType=3; altered=true; } + ImGui::Unindent(); ImGui::Text("Wave channel orientation:"); if (chipType==3) { + ImGui::Indent(); if (ImGui::RadioButton("Normal",!invertWave)) { invertWave=false; altered=true; @@ -343,7 +362,9 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo invertWave=true; altered=true; } + ImGui::Unindent(); } else { + ImGui::Indent(); if (ImGui::RadioButton("Exact data (inverted)",!invertWave)) { invertWave=false; altered=true; @@ -352,6 +373,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo invertWave=true; altered=true; } + ImGui::Unindent(); } if (ImGui::Checkbox("Pretty please one more compat flag when I use arpeggio and my sound length",&enoughAlready)) { altered=true; @@ -373,8 +395,10 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo int clockSel=flags.getInt("clockSel",0); int patchSet=flags.getInt("patchSet",0); bool noTopHatFreq=flags.getBool("noTopHatFreq",false); + bool fixedAll=flags.getBool("fixedAll",false); ImGui::Text("Clock rate:"); + ImGui::Indent(); if (ImGui::RadioButton("NTSC (3.58MHz)",clockSel==0)) { clockSel=0; altered=true; @@ -391,8 +415,10 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo clockSel=3; altered=true; } + ImGui::Unindent(); if (type!=DIV_SYSTEM_VRC7) { ImGui::Text("Patch set:"); + ImGui::Indent(); if (ImGui::RadioButton("Yamaha YM2413",patchSet==0)) { patchSet=0; altered=true; @@ -409,12 +435,16 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo patchSet=3; altered=true; } + ImGui::Unindent(); } if (type==DIV_SYSTEM_OPLL_DRUMS) { if (ImGui::Checkbox("Ignore top/hi-hat frequency changes",&noTopHatFreq)) { altered=true; } + if (ImGui::Checkbox("Apply fixed frequency to all drums at once",&fixedAll)) { + altered=true; + } } if (altered) { @@ -424,6 +454,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo flags.set("patchSet",patchSet); } flags.set("noTopHatFreq",noTopHatFreq); + flags.set("fixedAll",fixedAll); }); } break; @@ -431,6 +462,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo case DIV_SYSTEM_YM2151: { int clockSel=flags.getInt("clockSel",0); + ImGui::Indent(); if (ImGui::RadioButton("NTSC/X16 (3.58MHz)",clockSel==0)) { clockSel=0; altered=true; @@ -443,6 +475,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo clockSel=2; altered=true; } + ImGui::Unindent(); if (altered) { e->lockSave([&]() { @@ -460,6 +493,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo ImGui::Text("Clock rate:"); + ImGui::Indent(); if (ImGui::RadioButton("NTSC (1.79MHz)",clockSel==0)) { clockSel=0; altered=true; @@ -472,9 +506,11 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo clockSel=2; altered=true; } + ImGui::Unindent(); ImGui::Text("DPCM channel mode:"); + ImGui::Indent(); if (ImGui::RadioButton("DPCM (muffled samples; low CPU usage)",dpcmMode)) { dpcmMode=true; altered=true; @@ -483,6 +519,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo dpcmMode=false; altered=true; } + ImGui::Unindent(); if (altered) { e->lockSave([&]() { @@ -503,6 +540,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo ImGui::Text("Clock rate:"); + ImGui::Indent(); if (ImGui::RadioButton("NTSC (1.02MHz)",clockSel==0)) { clockSel=0; altered=true; @@ -515,9 +553,11 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo clockSel=2; altered=true; } + ImGui::Unindent(); ImGui::Text("Global parameter priority:"); + ImGui::Indent(); if (ImGui::RadioButton("Left to right",!keyPriority)) { keyPriority=false; altered=true; @@ -526,6 +566,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo keyPriority=true; altered=true; } + ImGui::Unindent(); ImGui::Text("Hard reset envelope:"); @@ -576,6 +617,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo int ssgVol=flags.getInt("ssgVol",128); int fmVol=flags.getInt("fmVol",256); + ImGui::Indent(); if (ImGui::RadioButton("8MHz (Neo Geo MVS)",clockSel==0)) { clockSel=0; altered=true; @@ -584,6 +626,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo clockSel=1; altered=true; } + ImGui::Unindent(); if (type==DIV_SYSTEM_YM2610_EXT || type==DIV_SYSTEM_YM2610_FULL_EXT || type==DIV_SYSTEM_YM2610B_EXT || type==DIV_SYSTEM_YM2610_CSM || type==DIV_SYSTEM_YM2610B_CSM) { if (ImGui::Checkbox("Disable ExtCh FM macros (compatibility)",&noExtMacros)) { @@ -626,6 +669,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo int stereoSep=flags.getInt("stereoSep",0); ImGui::Text("Clock rate:"); + ImGui::Indent(); if (ImGui::RadioButton("1.79MHz (ZX Spectrum NTSC/MSX)",clockSel==0)) { clockSel=0; altered=true; @@ -686,8 +730,10 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo clockSel=14; altered=true; } + ImGui::Unindent(); if (type==DIV_SYSTEM_AY8910) { ImGui::Text("Chip type:"); + ImGui::Indent(); if (ImGui::RadioButton("AY-3-8910",chipType==0)) { chipType=0; altered=true; @@ -704,6 +750,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo chipType=3; altered=true; } + ImGui::Unindent(); if (ImGui::IsItemHovered()) { ImGui::SetTooltip("note: AY-3-8914 is not supported by the VGM format!"); } @@ -744,6 +791,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo case DIV_SYSTEM_SAA1099: { int clockSel=flags.getInt("clockSel",0); + ImGui::Indent(); if (ImGui::RadioButton("SAM Coupé (8MHz)",clockSel==0)) { clockSel=0; altered=true; @@ -756,6 +804,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo clockSel=2; altered=true; } + ImGui::Unindent(); if (altered) { e->lockSave([&]() { @@ -779,6 +828,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo } rightClickable ImGui::Text("Model:"); + ImGui::Indent(); if (ImGui::RadioButton("Amiga 500 (OCS)",chipType==0)) { chipType=0; altered=true; @@ -787,8 +837,10 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo chipType=1; altered=true; } + ImGui::Unindent(); ImGui::Text("Chip memory:"); + ImGui::Indent(); if (ImGui::RadioButton("2MB (ECS/AGA max)",chipMem==21)) { chipMem=21; altered=true; @@ -805,6 +857,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo chipMem=18; altered=true; } + ImGui::Unindent(); if (ImGui::Checkbox("PAL",&clockSel)) { @@ -830,6 +883,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo int mixingType=flags.getInt("mixingType",0); ImGui::Text("Mixing mode:"); + ImGui::Indent(); if (ImGui::RadioButton("Mono",mixingType==0)) { mixingType=0; altered=true; @@ -842,6 +896,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo mixingType=2; altered=true; } + ImGui::Unindent(); if (ImGui::Checkbox("PAL",&clockSel)) { altered=true; @@ -860,6 +915,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo int speakerType=flags.getInt("speakerType",0); ImGui::Text("Clock rate:"); + ImGui::Indent(); if (ImGui::RadioButton("1.19MHz (PC)",clockSel==0)) { clockSel=0; altered=true; @@ -872,8 +928,10 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo clockSel=2; altered=true; } + ImGui::Unindent(); ImGui::Text("Speaker type:"); + ImGui::Indent(); if (ImGui::RadioButton("Unfiltered",speakerType==0)) { speakerType=0; altered=true; @@ -890,6 +948,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo speakerType=3; altered=true; } + ImGui::Unindent(); if (altered) { e->lockSave([&]() { @@ -933,6 +992,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo bool stereo=flags.getBool("stereo",false); ImGui::Text("Clock rate:"); + ImGui::Indent(); if (ImGui::RadioButton("16MHz (Seta 1)",clockSel==0)) { clockSel=0; altered=true; @@ -945,6 +1005,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo clockSel=2; altered=true; } + ImGui::Unindent(); if (ImGui::Checkbox("Stereo",&stereo)) { altered=true; @@ -965,6 +1026,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo bool lenCompensate=flags.getBool("lenCompensate",false); ImGui::Text("Clock rate:"); + ImGui::Indent(); if (ImGui::RadioButton("NTSC (1.79MHz)",clockSel==0)) { clockSel=0; altered=true; @@ -977,6 +1039,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo clockSel=2; altered=true; } + ImGui::Unindent(); ImGui::Text("Initial channel limit:"); if (CWSliderInt("##N163_InitialChannelLimit",&channels,1,8)) { if (channels<1) channels=1; @@ -1037,6 +1100,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo int fmVol=flags.getInt("fmVol",256); ImGui::Text("Clock rate:"); + ImGui::Indent(); if (ImGui::RadioButton("3.58MHz (NTSC)",clockSel==0)) { clockSel=0; altered=true; @@ -1061,7 +1125,9 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo clockSel=5; altered=true; } + ImGui::Unindent(); ImGui::Text("Output rate:"); + ImGui::Indent(); if (ImGui::RadioButton("FM: clock / 72, SSG: clock / 16",prescale==0)) { prescale=0; altered=true; @@ -1074,6 +1140,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo prescale=2; altered=true; } + ImGui::Unindent(); if (CWSliderInt("SSG Volume",&ssgVol,0,256)) { if (ssgVol<0) ssgVol=0; @@ -1119,6 +1186,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo int fmVol=flags.getInt("fmVol",256); ImGui::Text("Clock rate:"); + ImGui::Indent(); if (ImGui::RadioButton("8MHz (Arcade)",clockSel==0)) { clockSel=0; altered=true; @@ -1127,7 +1195,9 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo clockSel=1; altered=true; } + ImGui::Unindent(); ImGui::Text("Output rate:"); + ImGui::Indent(); if (ImGui::RadioButton("FM: clock / 144, SSG: clock / 32",prescale==0)) { prescale=0; altered=true; @@ -1140,6 +1210,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo prescale=2; altered=true; } + ImGui::Unindent(); if (CWSliderInt("SSG Volume",&ssgVol,0,256)) { if (ssgVol<0) ssgVol=0; @@ -1179,6 +1250,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo int chipType=flags.getInt("chipType",0); ImGui::Text("Clock rate:"); + ImGui::Indent(); if (ImGui::RadioButton("8MHz (FM Towns)",clockSel==0)) { clockSel=0; altered=true; @@ -1191,7 +1263,9 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo clockSel=2; altered=true; } + ImGui::Unindent(); ImGui::Text("Chip type:"); + ImGui::Indent(); if (ImGui::RadioButton("RF5C68 (10-bit output)",chipType==0)) { chipType=0; altered=true; @@ -1200,6 +1274,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo chipType=1; altered=true; } + ImGui::Unindent(); if (altered) { e->lockSave([&]() { @@ -1213,6 +1288,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo int clockSel=flags.getInt("clockSel",0); ImGui::Text("Clock rate:"); + ImGui::Indent(); if (ImGui::RadioButton("4MHz",clockSel==0)) { clockSel=0; altered=true; @@ -1229,6 +1305,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo clockSel=3; altered=true; } + ImGui::Unindent(); if (altered) { e->lockSave([&]() { @@ -1242,6 +1319,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo bool rateSel=flags.getBool("rateSel",false); ImGui::Text("Clock rate:"); + ImGui::Indent(); if (ImGui::RadioButton("1MHz",clockSel==0)) { clockSel=0; altered=true; @@ -1302,7 +1380,9 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo clockSel=14; altered=true; } + ImGui::Unindent(); ImGui::Text("Output rate:"); + ImGui::Indent(); if (ImGui::RadioButton("clock / 132",rateSel==0)) { rateSel=false; altered=true; @@ -1311,6 +1391,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo rateSel=true; altered=true; } + ImGui::Unindent(); if (altered) { e->lockSave([&]() { @@ -1325,6 +1406,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo int clockSel=flags.getInt("clockSel",0); ImGui::Text("Clock rate:"); + ImGui::Indent(); if (ImGui::RadioButton("1.79MHz (NTSC/MSX)",clockSel==0)) { clockSel=0; altered=true; @@ -1341,6 +1423,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo clockSel=3; altered=true; } + ImGui::Unindent(); if (altered) { e->lockSave([&]() { @@ -1358,6 +1441,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo int clockSel=flags.getInt("clockSel",0); ImGui::Text("Clock rate:"); + ImGui::Indent(); if (ImGui::RadioButton("3.58MHz (NTSC)",clockSel==0)) { clockSel=0; altered=true; @@ -1382,6 +1466,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo clockSel=5; altered=true; } + ImGui::Unindent(); if (altered) { e->lockSave([&]() { @@ -1393,9 +1478,11 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo case DIV_SYSTEM_OPL3: case DIV_SYSTEM_OPL3_DRUMS: { int clockSel=flags.getInt("clockSel",0); + int chipType=flags.getInt("chipType",0); bool compatPan=flags.getBool("compatPan",false); ImGui::Text("Clock rate:"); + ImGui::Indent(); if (ImGui::RadioButton("14.32MHz (NTSC)",clockSel==0)) { clockSel=0; altered=true; @@ -1416,6 +1503,20 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo clockSel=4; altered=true; } + if (ImGui::RadioButton("33.8688MHz (OPL3-L)",clockSel==5)) { + clockSel=5; + altered=true; + } + ImGui::Text("Chip type:"); + if (ImGui::RadioButton("OPL3 (YMF262)",chipType==0)) { + chipType=0; + altered=true; + } + if (ImGui::RadioButton("OPL3-L (YMF289B)",chipType==1)) { + chipType=1; + altered=true; + } + ImGui::Unindent(); if (ImGui::Checkbox("Compatible panning (0800)",&compatPan)) { altered=true; @@ -1424,6 +1525,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo if (altered) { e->lockSave([&]() { flags.set("clockSel",clockSel); + flags.set("chipType",chipType); flags.set("compatPan",compatPan); }); } @@ -1433,6 +1535,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo int clockSel=flags.getInt("clockSel",0); ImGui::Text("Clock rate:"); + ImGui::Indent(); if (ImGui::RadioButton("16.9344MHz",clockSel==0)) { clockSel=0; altered=true; @@ -1457,6 +1560,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo clockSel=5; altered=true; } + ImGui::Unindent(); if (altered) { e->lockSave([&]() { @@ -1489,6 +1593,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo } ImGui::Text("Interpolation:"); + ImGui::Indent(); if (ImGui::RadioButton("None",interpolation==0)) { interpolation=0; altered=true; @@ -1505,6 +1610,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo interpolation=3; altered=true; } + ImGui::Unindent(); if (altered) { e->lockSave([&]() { @@ -1516,7 +1622,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo } break; } - case DIV_SYSTEM_SNES: { // TODO: echo + case DIV_SYSTEM_SNES: { char temp[64]; int vsL=127-(flags.getInt("volScaleL",0)&127); int vsR=127-(flags.getInt("volScaleR",0)&127); @@ -1564,7 +1670,13 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo } altered=true; } - if (i<7) ImGui::SameLine(); + if (i<7) { + if (fromMenu) { + ImGui::SameLine(); + } else { + sameLineMaybe(); + } + } } if (CWSliderInt("Delay##EchoDelay",&echoDelay,0,15)) { @@ -1735,6 +1847,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo } ImGui::Text("Envelope mode (channel 1-4):"); + ImGui::Indent(); if (ImGui::RadioButton("Capacitor (attack/decay)##EM00",groupEnv[0])) { groupEnv[0]=true; altered=true; @@ -1743,8 +1856,10 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo groupEnv[0]=false; altered=true; } + ImGui::Unindent(); ImGui::Text("Envelope mode (channel 5-8):"); + ImGui::Indent(); if (ImGui::RadioButton("Capacitor (attack/decay)##EM10",groupEnv[1])) { groupEnv[1]=true; altered=true; @@ -1753,6 +1868,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo groupEnv[1]=false; altered=true; } + ImGui::Unindent(); ImGui::Text("Global vibrato:"); @@ -1828,6 +1944,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo bool romMode=flags.getBool("romMode",false); ImGui::Text("Waveform storage mode:"); + ImGui::Indent(); if (ImGui::RadioButton("RAM",!romMode)) { romMode=false; altered=true; @@ -1836,6 +1953,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo romMode=true; altered=true; } + ImGui::Unindent(); if (altered) { e->lockSave([&]() { @@ -1891,6 +2009,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo int clockSel=flags.getInt("clockSel",0); ImGui::Text("Clock rate:"); + ImGui::Indent(); if (ImGui::RadioButton("3.58MHz (NTSC)",clockSel==0)) { clockSel=0; altered=true; @@ -1899,6 +2018,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo clockSel=1; altered=true; } + ImGui::Unindent(); if (altered) { e->lockSave([&]() { @@ -1913,6 +2033,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo ImGui::Text("Clock rate:"); + ImGui::Indent(); if (ImGui::RadioButton("NTSC (1.79MHz)",clockSel==0)) { clockSel=0; altered=true; @@ -1921,9 +2042,11 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo clockSel=1; altered=true; } + ImGui::Unindent(); ImGui::Text("Global parameter priority:"); + ImGui::Indent(); if (ImGui::RadioButton("Left to right",!keyPriority)) { keyPriority=false; altered=true; @@ -1932,6 +2055,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo keyPriority=true; altered=true; } + ImGui::Unindent(); if (altered) { e->lockSave([&]() { @@ -1948,6 +2072,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo case DIV_SYSTEM_GA20: case DIV_SYSTEM_PV1000: case DIV_SYSTEM_VERA: + case DIV_SYSTEM_C140: break; case DIV_SYSTEM_YMU759: supportsCustomRate=false; @@ -1982,11 +2107,13 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo } altered=true; } + ImGui::Indent(); if (ImGui::InputInt("Hz",&customClock)) { if (customClockMAX_CUSTOM_CLOCK) customClock=MAX_CUSTOM_CLOCK; altered=true; } + ImGui::Unindent(); if (altered) { e->lockSave([&]() { diff --git a/src/gui/sysEx.cpp b/src/gui/sysEx.cpp index 5a72649ee..aa86363f8 100644 --- a/src/gui/sysEx.cpp +++ b/src/gui/sysEx.cpp @@ -60,8 +60,7 @@ bool FurnaceGUI::parseSysEx(unsigned char* data, size_t len) { op.rs=reader.readC(); reader.readC(); // EBS - ignore op.am=reader.readC(); - // TODO: don't ignore after I add KVS to Furnace - reader.readC(); // KVS - ignore + op.kvs=(reader.readC()>2)?1:0; op.tl=3+((99-reader.readC())*124)/99; unsigned char freq=reader.readC(); logV("OP%d freq: %d",i,freq); diff --git a/src/gui/sysPartNumber.cpp b/src/gui/sysPartNumber.cpp index 94dc822b8..fb52b5b19 100644 --- a/src/gui/sysPartNumber.cpp +++ b/src/gui/sysPartNumber.cpp @@ -156,9 +156,15 @@ const char* FurnaceGUI::getSystemPartNumber(DivSystem sys, DivConfig& flags) { return "YM3812"; break; case DIV_SYSTEM_OPL3: - case DIV_SYSTEM_OPL3_DRUMS: - return "YMF262"; + case DIV_SYSTEM_OPL3_DRUMS:{ + int chipType=flags.getInt("chipType",0); + if (chipType==1) { + return "YMF289B"; + } else { + return "YMF262"; + } break; + } case DIV_SYSTEM_OPL4: case DIV_SYSTEM_OPL4_DRUMS: return "YMF278"; @@ -265,6 +271,9 @@ const char* FurnaceGUI::getSystemPartNumber(DivSystem sys, DivConfig& flags) { case DIV_SYSTEM_TED: return "TED"; break; + case DIV_SYSTEM_C140: + return "C140"; + break; default: return FurnaceGUI::getSystemName(sys); break; diff --git a/src/gui/waveEdit.cpp b/src/gui/waveEdit.cpp index dce89bc96..3905b7614 100644 --- a/src/gui/waveEdit.cpp +++ b/src/gui/waveEdit.cpp @@ -593,6 +593,7 @@ void FurnaceGUI::drawWaveEdit() { ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("Duty"); ImGui::TableNextColumn(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); @@ -602,6 +603,7 @@ void FurnaceGUI::drawWaveEdit() { ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("Exponent"); ImGui::TableNextColumn(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); @@ -611,6 +613,7 @@ void FurnaceGUI::drawWaveEdit() { ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("XOR Point"); ImGui::TableNextColumn(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); @@ -630,6 +633,7 @@ void FurnaceGUI::drawWaveEdit() { for (int i=0; i<16; i++) { ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("%d",i+1); ImGui::TableNextColumn(); ImGui::PushID(140+i); @@ -683,6 +687,7 @@ void FurnaceGUI::drawWaveEdit() { for (int i=0; i<4; i++) { ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("%d",i+1); ImGui::TableNextColumn(); @@ -727,6 +732,7 @@ void FurnaceGUI::drawWaveEdit() { for (int i=0; i<4; i++) { ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("%d",i+1); ImGui::TableNextColumn(); @@ -760,6 +766,7 @@ void FurnaceGUI::drawWaveEdit() { ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("1"); ImGui::TableNextColumn(); if (ImGui::Checkbox("##ConO1",&waveGenFMCon0[0])) { @@ -784,6 +791,7 @@ void FurnaceGUI::drawWaveEdit() { ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("2"); ImGui::TableNextColumn(); if (ImGui::Checkbox("##Con11",&waveGenFMCon1[0])) { @@ -808,6 +816,7 @@ void FurnaceGUI::drawWaveEdit() { ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("3"); ImGui::TableNextColumn(); if (ImGui::Checkbox("##Con21",&waveGenFMCon2[0])) { @@ -832,6 +841,7 @@ void FurnaceGUI::drawWaveEdit() { ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); ImGui::Text("4"); ImGui::TableNextColumn(); if (ImGui::Checkbox("##Con31",&waveGenFMCon3[0])) { diff --git a/src/main.cpp b/src/main.cpp index bf2ac269b..2c12678a9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -208,6 +208,9 @@ TAParamResult pVersion(String) { printf("- MAME GA20 core by Acho A. Tang, R. Belmont, Valley Bell (BSD 3-clause)\n"); printf("- Atari800 mzpokeysnd POKEY emulator by Michael Borisov (GPLv2)\n"); printf("- ASAP POKEY emulator by Piotr Fusik ported to C++ by laoo (GPLv2)\n"); + printf("- SM8521 emulator (modified version) by cam900 (zlib license)\n"); + printf("- D65010G031 emulator (modified version) by cam900 (zlib license)\n"); + printf("- C140 emulator (modified version) by cam900 (zlib license)\n"); return TA_PARAM_QUIT; }