Merge branch 'master' of https://github.com/tildearrow/furnace into command-palette
							
								
								
									
										1
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
*.sfd text
 | 
			
		||||
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						| 
						 | 
				
			
			@ -27,3 +27,4 @@ extern/imgui_patched/examples/
 | 
			
		|||
src/asm/68k/amigatest/*.bin
 | 
			
		||||
src/asm/68k/amigatest/player
 | 
			
		||||
res/binary_to_compressed_c
 | 
			
		||||
res/binary_to_compressed_c.exe
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,8 +15,8 @@ android {
 | 
			
		|||
        }
 | 
			
		||||
        minSdkVersion 21
 | 
			
		||||
        targetSdkVersion 26
 | 
			
		||||
        versionCode 162
 | 
			
		||||
        versionName "0.6pre7"
 | 
			
		||||
        versionCode 166
 | 
			
		||||
        versionName "0.6pre8"
 | 
			
		||||
        externalNativeBuild {
 | 
			
		||||
            cmake {
 | 
			
		||||
                arguments "-DANDROID_APP_PLATFORM=android-21", "-DANDROID_STL=c++_static", "-DWARNINGS_ARE_ERRORS=ON"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,8 +1,8 @@
 | 
			
		|||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 | 
			
		||||
    package="org.tildearrow.furnace"
 | 
			
		||||
    android:versionCode="162"
 | 
			
		||||
    android:versionName="0.6pre7"
 | 
			
		||||
    android:versionCode="166"
 | 
			
		||||
    android:versionName="0.6pre8"
 | 
			
		||||
    android:installLocation="auto">
 | 
			
		||||
 | 
			
		||||
    <!-- OpenGL ES 2.0 -->
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										
											BIN
										
									
								
								demos/gameboy/Pleasure_of_Tension.fur
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								demos/gameboy/cheap.fur
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								demos/gameboy/dancing_to_the_death.fur
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								demos/gameboy/lagtrain.fur
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								demos/nes/one_sided_love.fur
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								demos/opl/DASH.fur
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								demos/opl/the_foggy_cave_in_the_darkness.fur
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								demos/sms/gg_silver_surfer_st1.fur
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								demos/sms/gg_soniccd_collision_chaos.fur
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -6,9 +6,14 @@ the default layout of Furnace is depicted below.
 | 
			
		|||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
primary topics:
 | 
			
		||||
## general info
 | 
			
		||||
 | 
			
		||||
- [UI components](components.md): recommended reading for all!
 | 
			
		||||
- [global keyboard shortcuts](keyboard.md)
 | 
			
		||||
- [menu bar](menu-bar.md)
 | 
			
		||||
 | 
			
		||||
## primary windows
 | 
			
		||||
 | 
			
		||||
- [order list](order-list.md)
 | 
			
		||||
- [play/edit controls](play-edit-controls.md)
 | 
			
		||||
- [instrument/wavetable/sample list](asset-list.md)
 | 
			
		||||
| 
						 | 
				
			
			@ -19,7 +24,7 @@ primary topics:
 | 
			
		|||
- [wavetable editor](../5-wave/README.md)
 | 
			
		||||
- [sample editor](../6-sample/README.md)
 | 
			
		||||
 | 
			
		||||
advanced topics:
 | 
			
		||||
## advanced topics
 | 
			
		||||
 | 
			
		||||
- [mixer](../8-advanced/mixer.md)
 | 
			
		||||
- [grooves](../8-advanced/grooves.md)
 | 
			
		||||
| 
						 | 
				
			
			@ -36,9 +41,7 @@ advanced topics:
 | 
			
		|||
- [log viewer](../8-advanced/log-viewer.md)
 | 
			
		||||
- [statistics](../8-advanced/stats.md)
 | 
			
		||||
 | 
			
		||||
other topics:
 | 
			
		||||
## other topics
 | 
			
		||||
 | 
			
		||||
- [settings](../2-interface/settings.md)
 | 
			
		||||
- [UI components](components.md)
 | 
			
		||||
- [global keyboard shortcuts](keyboard.md)
 | 
			
		||||
- [basic mode](basic-mode.md)
 | 
			
		||||
- [settings](../2-interface/settings.md)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,35 @@
 | 
			
		|||
# UI components
 | 
			
		||||
 | 
			
		||||
the user interface consists of several components. this paper describes some of them.
 | 
			
		||||
the user interface consists of several kinds of components, some of which benefit from explanation.
 | 
			
		||||
 | 
			
		||||
## text fields
 | 
			
		||||
 | 
			
		||||
text fields are able to hold... text.
 | 
			
		||||
 | 
			
		||||
click on a text field to start editing, and click away to stop editing.
 | 
			
		||||
 | 
			
		||||
the following keyboard shortcuts work while on a text field:
 | 
			
		||||
 | 
			
		||||
- `Ctrl-X`: cut
 | 
			
		||||
- `Ctrl-C`: copy
 | 
			
		||||
- `Ctrl-V`: paste
 | 
			
		||||
- `Ctrl-A`: select all
 | 
			
		||||
 | 
			
		||||
(replace Ctrl with Command on macOS)
 | 
			
		||||
 | 
			
		||||
## number input fields
 | 
			
		||||
 | 
			
		||||
these work similar to text fields, but you may only input numbers.
 | 
			
		||||
 | 
			
		||||
they also usually have `+` and `-` buttons which allow you to increase/decrease the amount when clicked (and rapidly do so when click-holding).
 | 
			
		||||
 | 
			
		||||
## sliders
 | 
			
		||||
 | 
			
		||||
sliders are used for controlling values in a quick manner by being dragged.
 | 
			
		||||
 | 
			
		||||
using the scroll wheel while holding Ctrl will change the slider's value by small amounts.
 | 
			
		||||
 | 
			
		||||
right-clicking or Ctrl-clicking or a slider (Command-click on macOS) will turn it into a number input field for a short period of time, allowing you to input precise values.
 | 
			
		||||
 | 
			
		||||
## windows
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -16,7 +45,7 @@ to resize a window, drag the bottom right corner (marked by a triangular tab) or
 | 
			
		|||
to collapse a window, click on the triangle in the title bar.
 | 
			
		||||
clicking again expands it.
 | 
			
		||||
 | 
			
		||||
to close a window, click on the `X` at the top right corner.
 | 
			
		||||
to close a window, click on the `X` at the top right corner, or select it from the "window" menu.
 | 
			
		||||
 | 
			
		||||
### arrangement and docking
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -55,30 +84,3 @@ selecting this option will hide the tab bar of that window.
 | 
			
		|||
to bring it back, click on the top left corner.
 | 
			
		||||
 | 
			
		||||
to undock a window, drag its tab away from where it is docked. then it will be floating again.
 | 
			
		||||
 | 
			
		||||
## text fields
 | 
			
		||||
 | 
			
		||||
text fields are able to hold... text.
 | 
			
		||||
 | 
			
		||||
click on a text field to start editing, and click away to stop editing.
 | 
			
		||||
 | 
			
		||||
the following keyboard shortcuts work while on a text field:
 | 
			
		||||
 | 
			
		||||
- `Ctrl-X`: cut
 | 
			
		||||
- `Ctrl-C`: copy
 | 
			
		||||
- `Ctrl-V`: paste
 | 
			
		||||
- `Ctrl-A`: select all
 | 
			
		||||
 | 
			
		||||
(replace Ctrl with Command on macOS)
 | 
			
		||||
 | 
			
		||||
## number input fields
 | 
			
		||||
 | 
			
		||||
these work similar to text fields, but you may only input numbers.
 | 
			
		||||
 | 
			
		||||
they also usually have two buttons which allow you to increase/decrease the amount when clicked (and rapidly do so when click-holding).
 | 
			
		||||
 | 
			
		||||
## sliders
 | 
			
		||||
 | 
			
		||||
sliders are used for controlling values in a quick manner by being dragged.
 | 
			
		||||
 | 
			
		||||
alternatively, right-clicking or Ctrl-clicking or a slider (Command-click on macOS) will turn it into a number input field for a short period of time, allowing you to input fine values.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
		 Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 28 KiB  | 
| 
		 Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 27 KiB  | 
| 
		 Before Width: | Height: | Size: 362 KiB After Width: | Height: | Size: 377 KiB  | 
| 
		 Before Width: | Height: | Size: 368 KiB After Width: | Height: | Size: 435 KiB  | 
| 
						 | 
				
			
			@ -27,6 +27,10 @@ settings are saved when clicking the **OK** button at the bottom of the dialog.
 | 
			
		|||
- **Save unused patterns**
 | 
			
		||||
- **Use new pattern format when saving**
 | 
			
		||||
- **Don't apply compatibility flags when loading .dmf**
 | 
			
		||||
- **Play after opening song:**
 | 
			
		||||
  - No
 | 
			
		||||
  - Only if already playing
 | 
			
		||||
  - Yes
 | 
			
		||||
- **Audio export loop/fade out time:**
 | 
			
		||||
  - **Set to these values on start-up:**
 | 
			
		||||
    - **Loops**: number of additional times to play through `0Bxx` song loop.
 | 
			
		||||
| 
						 | 
				
			
			@ -41,7 +45,7 @@ settings are saved when clicking the **OK** button at the bottom of the dialog.
 | 
			
		|||
    - 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.
 | 
			
		||||
  - **Configure:**: 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**
 | 
			
		||||
| 
						 | 
				
			
			@ -174,7 +178,10 @@ settings are saved when clicking the **OK** button at the bottom of the dialog.
 | 
			
		|||
  **FDS core**\
 | 
			
		||||
  **SID core**\
 | 
			
		||||
  **POKEY core**\
 | 
			
		||||
  **OPN/OPNA/OPNB cores**: all of these are covered in the [guide to choosing emulation cores](../9-guides/emulation-cores.md).
 | 
			
		||||
  **OPN/OPNA/OPNB cores**:
 | 
			
		||||
  - **Playback Core(s)**: core(s) to use for realtime playback.
 | 
			
		||||
  - **Render Core(s)**: core(s) to use for exporting audio.
 | 
			
		||||
  - all of these are covered in the [guide to choosing emulation cores](../9-guides/emulation-cores.md).
 | 
			
		||||
 | 
			
		||||
- **PC Speaker strategy**: this is covered in the [PC speaker system doc](../7-systems/pcspkr.md).
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -209,6 +216,7 @@ settings are saved when clicking the **OK** button at the bottom of the dialog.
 | 
			
		|||
- **Allow docking editors**
 | 
			
		||||
- **Remember window position**: remembers the window's last position on start-up.
 | 
			
		||||
- **Only allow window movement when clicking on title bar**
 | 
			
		||||
- **Center pop-up windows**
 | 
			
		||||
- **Play/edit controls layout:**
 | 
			
		||||
  - **Classic**
 | 
			
		||||
  - **Compact**
 | 
			
		||||
| 
						 | 
				
			
			@ -324,6 +332,7 @@ settings are saved when clicking the **OK** button at the bottom of the dialog.
 | 
			
		|||
  - **File path**
 | 
			
		||||
  - **Cursor details or file path**
 | 
			
		||||
  - **Nothing**
 | 
			
		||||
- **Capitalize menu bar**
 | 
			
		||||
 | 
			
		||||
### Orders
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -396,6 +405,7 @@ settings are saved when clicking the **OK** button at the bottom of the dialog.
 | 
			
		|||
- **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.
 | 
			
		||||
  - only appears if "Unified instrument/wavetable/sample list" is off.
 | 
			
		||||
- **Instrument list icon style:**
 | 
			
		||||
  - **None**
 | 
			
		||||
  - **Graphical icons**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
		 Before Width: | Height: | Size: 146 KiB After Width: | Height: | Size: 128 KiB  | 
| 
		 Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 30 KiB  | 
| 
		 Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 22 KiB  | 
| 
		 Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 58 KiB  | 
							
								
								
									
										11
									
								
								doc/4-instrument/wsg.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
# Namco WSG instrument editor
 | 
			
		||||
 | 
			
		||||
The Namco WSG/C15/C30 instrument editor consists of these macros:
 | 
			
		||||
 | 
			
		||||
- **Volume**: volume sequence
 | 
			
		||||
- **Arpeggio**: pitch sequence
 | 
			
		||||
- **Waveform**: specifies wavetable sequence
 | 
			
		||||
- **Noise**: specifies noise pitch (WARNING: only on C30!)
 | 
			
		||||
- **Panning (left)**: output level of left channel
 | 
			
		||||
- **Panning (right)**: output level of right channel
 | 
			
		||||
- **Pitch**: fine pitch
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 63 KiB  | 
| 
		 Before Width: | Height: | Size: 164 KiB After Width: | Height: | Size: 165 KiB  | 
| 
		 Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 125 KiB  | 
| 
		 Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 70 KiB  | 
| 
		 Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 54 KiB  | 
| 
		 Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 15 KiB  | 
| 
						 | 
				
			
			@ -1,36 +1,36 @@
 | 
			
		|||
# choosing emulation cores
 | 
			
		||||
 | 
			
		||||
Furnace achieves the authentic sound of videogame hardware by emulating sound chips accurately as possible, using **emulator cores**. in some cases there are multiple cores to choose from, each with different strengths and weaknesses. here are the major differences between them all.
 | 
			
		||||
Furnace achieves the authentic sound of videogame hardware by emulating sound chips as accurately as possible, using **emulator cores**. in some cases there are multiple cores to choose from, each with different strengths and weaknesses. here are the major differences between them all.
 | 
			
		||||
 | 
			
		||||
- **Arcade/YM2151 core**:
 | 
			
		||||
  - **ymfm**: default. much less CPU usage than Nuked-OPM, but less accurate. recommended for users with last-gen or earlier hardware.
 | 
			
		||||
  - **Nuked-OPM**: much more accurate than ymfm, due to the emulator being based on an image of the die map taken from a real YM2151. very CPU heavy, only recommended for users with recent hardware.
 | 
			
		||||
  - **ymfm**: default playback core. much less CPU usage than Nuked-OPM, but less accurate. recommended for users with last-gen or earlier hardware.
 | 
			
		||||
  - **Nuked-OPM**: default render core. much more accurate than ymfm, due to the emulator being based on an image of the die map taken from a real YM2151. very CPU heavy, only recommended for users with recent hardware.
 | 
			
		||||
 | 
			
		||||
- **Genesis/YM2612 core**:
 | 
			
		||||
  - **Nuked-OPN2**: default. a little lighter on the CPU than Nuked-OPM.
 | 
			
		||||
  - **Nuked-OPN2**: default core. a little lighter on the CPU than Nuked-OPM.
 | 
			
		||||
  - **ymfm**: same as ymfm above.
 | 
			
		||||
 | 
			
		||||
- **SN76489 core**:
 | 
			
		||||
  - **MAME**: default. less accurate than Nuked, but with lower CPU usage. comes from the MAME emulator project.
 | 
			
		||||
  - **MAME**: default core. less accurate than Nuked, but with lower CPU usage. comes from the MAME emulator project.
 | 
			
		||||
  - **Nuked-PSG Mod**: more accurate, but not by that much. this originally started as an emulator for the YM7101 PSG sound generator, but was modified to emulate the SN7 as the MAME core was deemed unsatisfactory by some.
 | 
			
		||||
 | 
			
		||||
- **NES core**:
 | 
			
		||||
  - **puNES**: default. it comes from a dedicated NES emulator.
 | 
			
		||||
  - **puNES**: default core. it comes from a dedicated NES emulator.
 | 
			
		||||
  - **NSFplay**: higher CPU usage than puNES.
 | 
			
		||||
 | 
			
		||||
- **FDS core**:
 | 
			
		||||
  - **puNES**: default. lower CPU usage and far less accurate.
 | 
			
		||||
  - **NSFplay**: higher CPU usage and much more accurate.
 | 
			
		||||
  - **puNES**: default playback core. lower CPU usage and far less accurate.
 | 
			
		||||
  - **NSFplay**: default render core. higher CPU usage and much more accurate.
 | 
			
		||||
 | 
			
		||||
- **SID core**:
 | 
			
		||||
  - **reSID**: default. a high quality emulation core. somewhat CPU heavy.
 | 
			
		||||
  - **reSIDfp**: improved version of reSID. the most accurate choice. _extremely_ CPU heavy.
 | 
			
		||||
  - **reSID**: default playback core. a high quality emulation core. somewhat CPU heavy.
 | 
			
		||||
  - **reSIDfp**: default render core. improved version of reSID. the most accurate choice. _extremely_ CPU heavy.
 | 
			
		||||
  - **dSID**: a lightweight open-source core used in DefleMask. not so accurate but it's very CPU light.
 | 
			
		||||
 | 
			
		||||
- **POKEY core**:
 | 
			
		||||
  - **Atari800 (mzpokeysnd)**: does not emulate two-tone mode.
 | 
			
		||||
  - **ASAP (C++ port)**: default. the sound core used in the ASAP player. most accurate option.
 | 
			
		||||
  - **ASAP (C++ port)**: default core. the sound core used in the ASAP player. most accurate option.
 | 
			
		||||
 | 
			
		||||
- **OPN/OPNA/OPNB cores**:
 | 
			
		||||
  - **ymfm only**: lower CPU usage, less accurate FM.
 | 
			
		||||
  - **Nuked-OPN2 (FM) + ymfm (SSG/ADPCM)**: default. more accurate FM at the cost of more CPU load.
 | 
			
		||||
  - **Nuked-OPN2 (FM) + ymfm (SSG/ADPCM)**: default cores. more accurate FM at the cost of more CPU load.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								extern/fmt
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
								
							
						
						| 
						 | 
				
			
			@ -1 +1 @@
 | 
			
		|||
Subproject commit afbcf1e8eafc5d7f27e29c7397f22521eaa33fac
 | 
			
		||||
Subproject commit e57ca2e3685b160617d3d95fcd9e789c4e06ca88
 | 
			
		||||
							
								
								
									
										9
									
								
								extern/igfd/ImGuiFileDialog.cpp
									
									
									
									
										vendored
									
									
								
							
							
						
						| 
						 | 
				
			
			@ -3880,6 +3880,7 @@ namespace IGFD
 | 
			
		|||
    
 | 
			
		||||
    float posY = ImGui::GetCursorPos().y; // height of last bar calc
 | 
			
		||||
 | 
			
		||||
    ImGui::AlignTextToFramePadding();
 | 
			
		||||
    if (!fdFile.puDLGDirectoryMode)
 | 
			
		||||
      ImGui::Text(fileNameString);
 | 
			
		||||
    else // directory chooser
 | 
			
		||||
| 
						 | 
				
			
			@ -3913,8 +3914,9 @@ namespace IGFD
 | 
			
		|||
      prFileDialogInternal.puIsOk = true;
 | 
			
		||||
      res = true;
 | 
			
		||||
    }
 | 
			
		||||
    ImGui::EndDisabled();
 | 
			
		||||
    if (!(prFileDialogInternal.puCanWeContinue && notEmpty && fileValid==0)) {
 | 
			
		||||
      if (ImGui::IsItemHovered()) {
 | 
			
		||||
      if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) {
 | 
			
		||||
        if (!notEmpty) {
 | 
			
		||||
          if (prFileDialogInternal.puDLGflags&ImGuiFileDialogFlags_ConfirmOverwrite) {
 | 
			
		||||
            ImGui::SetTooltip("file name is empty");
 | 
			
		||||
| 
						 | 
				
			
			@ -3925,7 +3927,11 @@ namespace IGFD
 | 
			
		|||
          ImGui::SetTooltip("we can't continue - this is most likely a bug!");
 | 
			
		||||
        } else switch (fileValid) {
 | 
			
		||||
          case 1:
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
            ImGui::SetTooltip("invalid characters in file name\nmake sure there aren't any of these:\n  < > : \" / \\ | ? *");
 | 
			
		||||
#else
 | 
			
		||||
            ImGui::SetTooltip("invalid characters in file name\nmake sure there aren't any slashes (/)");
 | 
			
		||||
#endif
 | 
			
		||||
            break;
 | 
			
		||||
          case 2:
 | 
			
		||||
            ImGui::SetTooltip("this file name is reserved by the system");
 | 
			
		||||
| 
						 | 
				
			
			@ -3939,7 +3945,6 @@ namespace IGFD
 | 
			
		|||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    ImGui::EndDisabled();
 | 
			
		||||
 | 
			
		||||
    ImGui::SameLine();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										46
									
								
								extern/igfd/dirent/dirent.h
									
									
									
									
										vendored
									
									
								
							
							
						
						| 
						 | 
				
			
			@ -1114,11 +1114,20 @@ static int u8to16s(wchar_t* dest, const char* src, size_t limit) {
 | 
			
		|||
  int ch, p;
 | 
			
		||||
  char chs;
 | 
			
		||||
  p=0;
 | 
			
		||||
  while (src[p]!=0 && ret<limit) {
 | 
			
		||||
  while (src[p]!=0 && ret<limit-1) {
 | 
			
		||||
    ch=decodeUTF8s((const unsigned char*)&src[p],&chs);
 | 
			
		||||
    // surrogates
 | 
			
		||||
    if (ch>=0x10000) {
 | 
			
		||||
      ch-=0x10000;
 | 
			
		||||
      if (ret+1>=limit-1) break;
 | 
			
		||||
      dest[ret++]=(unsigned short)(0xd800|((ch>>10)&0x3ff));
 | 
			
		||||
      dest[ret++]=(unsigned short)(0xdc00|(ch&0x3ff));
 | 
			
		||||
    } else if (ch<0xd800 || ch>0xdfff) {
 | 
			
		||||
      dest[ret++]=(unsigned short)ch;
 | 
			
		||||
    }
 | 
			
		||||
    p+=chs;
 | 
			
		||||
  }
 | 
			
		||||
  dest[ret]=0;
 | 
			
		||||
  return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1176,19 +1185,34 @@ dirent_mbstowcs_s(
 | 
			
		|||
 | 
			
		||||
static int u16to8s(char* dest, const wchar_t* src, size_t limit) {
 | 
			
		||||
  size_t ret=0;
 | 
			
		||||
  unsigned int next=0;
 | 
			
		||||
  for (; (*src)!=0; src++) {
 | 
			
		||||
    if ((*src)<0x80) {
 | 
			
		||||
      if (ret+1>=limit-1) break;
 | 
			
		||||
      dest[ret++]=(*src);
 | 
			
		||||
    } else if ((*src)<0x800) {
 | 
			
		||||
      if (ret+2>=limit-1) break;
 | 
			
		||||
      dest[ret++]=(0xc0+(((*src)>>6)&31));
 | 
			
		||||
      dest[ret++]=(0x80+((*src)&63));
 | 
			
		||||
    if ((*src)>=0xd800 && (*src)<0xdc00) {
 | 
			
		||||
      next=0x10000+(((*src)&0x3ff)<<10);
 | 
			
		||||
      continue;
 | 
			
		||||
    } else if ((*src)>=0xdc00 && (*src)<0xe000) {
 | 
			
		||||
      next|=(*src)&0x3ff;
 | 
			
		||||
    } else {
 | 
			
		||||
      next=(*src);
 | 
			
		||||
    }
 | 
			
		||||
    if (next<0x80) {
 | 
			
		||||
      if (ret+1>=limit-1) break;
 | 
			
		||||
      dest[ret++]=next;
 | 
			
		||||
    } else if (next<0x800) {
 | 
			
		||||
      if (ret+2>=limit-1) break;
 | 
			
		||||
      dest[ret++]=(0xc0+((next>>6)&31));
 | 
			
		||||
      dest[ret++]=(0x80+(next&63));
 | 
			
		||||
    } else if (next<0x10000) {
 | 
			
		||||
      if (ret+3>=limit-1) break;
 | 
			
		||||
      dest[ret++]=(0xe0+(((*src)>>12)&15));
 | 
			
		||||
      dest[ret++]=(0x80+(((*src)>>6)&63));
 | 
			
		||||
      dest[ret++]=(0x80+((*src)&63));
 | 
			
		||||
      dest[ret++]=(0xe0+((next>>12)&15));
 | 
			
		||||
      dest[ret++]=(0x80+((next>>6)&63));
 | 
			
		||||
      dest[ret++]=(0x80+(next&63));
 | 
			
		||||
    } else {
 | 
			
		||||
      if (ret+4>=limit-1) break;
 | 
			
		||||
      dest[ret++]=(0xf0+((next>>18)&7));
 | 
			
		||||
      dest[ret++]=(0x80+((next>>12)&63));
 | 
			
		||||
      dest[ret++]=(0x80+((next>>6)&63));
 | 
			
		||||
      dest[ret++]=(0x80+(next&63));
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  dest[ret]=0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,7 +6,7 @@ when copying pattern data from Furnace, it's stored in the clipboard as plain te
 | 
			
		|||
org.tildearrow.furnace - Pattern Data (144)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
this top line of text is always the same except for the number in parentheses, which is the internal build number. for example, 0.6pre7 is `162`.
 | 
			
		||||
this top line of text is always the same except for the number in parentheses, which is the internal build number. for example, 0.6pre8 is `166`.
 | 
			
		||||
 | 
			
		||||
the second line is a number between 0 and 18 (decimal) which indicates which column the clip starts from.
 | 
			
		||||
- `0`: note.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,6 +32,7 @@ these fields are 0 in format versions prior to 100 (0.6pre1).
 | 
			
		|||
 | 
			
		||||
the format versions are:
 | 
			
		||||
 | 
			
		||||
- 166: Furnace 0.6pre8
 | 
			
		||||
- 162: Furnace 0.6pre7
 | 
			
		||||
- 161: Furnace 0.6pre6
 | 
			
		||||
- 158: Furnace 0.6pre5
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,7 @@ 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.
 | 
			
		||||
- Copy the two baselines from `E0F0` to the new codepoint.
 | 
			
		||||
- Open the new codepoint.
 | 
			
		||||
- Select the upper baseline.
 | 
			
		||||
- Use `Element | Insert Text Outlines...` to place text:
 | 
			
		||||
| 
						 | 
				
			
			@ -13,14 +13,16 @@ To generate a new letter icon:
 | 
			
		|||
- 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.
 | 
			
		||||
- Use `Element | Transformations | Transform...` to Scale Uniformly (from glyph origin) and Move as needed:
 | 
			
		||||
  - One letter: 12000%, X 896, Y 15.5.
 | 
			
		||||
  - Two letters: 10000%, X 896, Y 99.2.
 | 
			
		||||
  - Three letters: 8000%, X 896, Y 183.
 | 
			
		||||
  - Two lines: 8000%, X 896, Y 618.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.
 | 
			
		||||
Notes:
 | 
			
		||||
 | 
			
		||||
Note: WSG icon (`E11F`) has been slightly kerned to fit.
 | 
			
		||||
- Codepoints `E0F0` to `E0F4` are for reference only.
 | 
			
		||||
- The back layer of each of `E0F1` to `E0F4` has lines that show the expected tops and bottoms of text. Round letters and numerals will reach slightly above or below.
 | 
			
		||||
- The WSG icon (`E11F`) has been slightly kerned to fit.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,17 +15,17 @@
 | 
			
		|||
	<key>CFBundleInfoDictionaryVersion</key>
 | 
			
		||||
	<string>6.0</string>
 | 
			
		||||
	<key>CFBundleLongVersionString</key>
 | 
			
		||||
	<string>0.6pre7</string>
 | 
			
		||||
	<string>0.6pre8</string>
 | 
			
		||||
	<key>CFBundleName</key>
 | 
			
		||||
	<string>Furnace</string>
 | 
			
		||||
	<key>CFBundlePackageType</key>
 | 
			
		||||
	<string>APPL</string>
 | 
			
		||||
	<key>CFBundleShortVersionString</key>
 | 
			
		||||
	<string>0.6pre7</string>
 | 
			
		||||
	<string>0.6pre8</string>
 | 
			
		||||
	<key>CFBundleSignature</key>
 | 
			
		||||
	<string>????</string>
 | 
			
		||||
	<key>CFBundleVersion</key>
 | 
			
		||||
	<string>0.6pre7</string>
 | 
			
		||||
	<string>0.6pre8</string>
 | 
			
		||||
	<key>NSHumanReadableCopyright</key>
 | 
			
		||||
	<string></string>
 | 
			
		||||
	<key>NSHighResolutionCapable</key>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										11910
									
								
								res/icons.sfd
									
									
									
									
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								res/icons.ttf
									
									
									
									
									
								
							
							
						
						| 
						 | 
				
			
			@ -14,7 +14,7 @@ fi
 | 
			
		|||
 | 
			
		||||
cd linuxbuild
 | 
			
		||||
 | 
			
		||||
cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-O3" -DCMAKE_CXX_FLAGS="-O3 -Wall -Wextra -Wno-unused-parameter -Werror" .. || exit 1
 | 
			
		||||
cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-O3" -DCMAKE_CXX_FLAGS="-O3 -Wall -Wextra -Wno-unused-parameter -Werror" -DWITH_DEMOS=ON -DWITH_INSTRUMENTS=ON -DWITH_WAVETABLES=ON .. || exit 1
 | 
			
		||||
make -j4 || exit 1
 | 
			
		||||
 | 
			
		||||
cd ..
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,6 +34,11 @@ cp -r ../../wavetables wavetables || exit 1
 | 
			
		|||
 | 
			
		||||
i686-w64-mingw32-strip -s furnace.exe || exit 1
 | 
			
		||||
 | 
			
		||||
# patch to remove GetTickCount64
 | 
			
		||||
xxd -c 256 -ps furnace.exe | sed "s/4765745469636b436f756e743634/4765745469636b436f756e740000/g" | xxd -ps -r > furnace-patched.exe
 | 
			
		||||
rm furnace.exe
 | 
			
		||||
mv furnace-patched.exe furnace.exe
 | 
			
		||||
 | 
			
		||||
zip -r furnace.zip LICENSE.txt furnace.exe README.txt papers doc demos instruments wavetables
 | 
			
		||||
 | 
			
		||||
furName=$(git describe --tags | sed "s/v0/0/")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -219,7 +219,7 @@ void DivDispatchContainer::clear() {
 | 
			
		|||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, double gotRate, const DivConfig& flags) {
 | 
			
		||||
void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, double gotRate, const DivConfig& flags, bool isRender) {
 | 
			
		||||
  // quit if we already initialized
 | 
			
		||||
  if (dispatch!=NULL) return;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -231,33 +231,57 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do
 | 
			
		|||
      break;
 | 
			
		||||
    case DIV_SYSTEM_YM2612:
 | 
			
		||||
      dispatch=new DivPlatformGenesis;
 | 
			
		||||
      if (isRender) {
 | 
			
		||||
        ((DivPlatformGenesis*)dispatch)->setYMFM(eng->getConfInt("ym2612CoreRender",0));
 | 
			
		||||
      } else {
 | 
			
		||||
        ((DivPlatformGenesis*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0));
 | 
			
		||||
      }
 | 
			
		||||
      ((DivPlatformGenesis*)dispatch)->setSoftPCM(false);
 | 
			
		||||
      break;
 | 
			
		||||
    case DIV_SYSTEM_YM2612_EXT:
 | 
			
		||||
      dispatch=new DivPlatformGenesisExt;
 | 
			
		||||
      if (isRender) {
 | 
			
		||||
        ((DivPlatformGenesisExt*)dispatch)->setYMFM(eng->getConfInt("ym2612CoreRender",0));
 | 
			
		||||
      } else {
 | 
			
		||||
        ((DivPlatformGenesisExt*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0));
 | 
			
		||||
      }
 | 
			
		||||
      ((DivPlatformGenesisExt*)dispatch)->setSoftPCM(false);
 | 
			
		||||
      break;
 | 
			
		||||
    case DIV_SYSTEM_YM2612_CSM:
 | 
			
		||||
      dispatch=new DivPlatformGenesisExt;
 | 
			
		||||
      if (isRender) {
 | 
			
		||||
        ((DivPlatformGenesisExt*)dispatch)->setYMFM(eng->getConfInt("ym2612CoreRender",0));
 | 
			
		||||
      } else {
 | 
			
		||||
        ((DivPlatformGenesisExt*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0));
 | 
			
		||||
      }
 | 
			
		||||
      ((DivPlatformGenesisExt*)dispatch)->setSoftPCM(false);
 | 
			
		||||
      ((DivPlatformGenesisExt*)dispatch)->setCSMChannel(6);
 | 
			
		||||
      break;
 | 
			
		||||
    case DIV_SYSTEM_YM2612_DUALPCM:
 | 
			
		||||
      dispatch=new DivPlatformGenesis;
 | 
			
		||||
      if (isRender) {
 | 
			
		||||
        ((DivPlatformGenesis*)dispatch)->setYMFM(eng->getConfInt("ym2612CoreRender",0));
 | 
			
		||||
      } else {
 | 
			
		||||
        ((DivPlatformGenesis*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0));
 | 
			
		||||
      }
 | 
			
		||||
      ((DivPlatformGenesis*)dispatch)->setSoftPCM(true);
 | 
			
		||||
      break;
 | 
			
		||||
    case DIV_SYSTEM_YM2612_DUALPCM_EXT:
 | 
			
		||||
      dispatch=new DivPlatformGenesisExt;
 | 
			
		||||
      if (isRender) {
 | 
			
		||||
        ((DivPlatformGenesisExt*)dispatch)->setYMFM(eng->getConfInt("ym2612CoreRender",0));
 | 
			
		||||
      } else {
 | 
			
		||||
        ((DivPlatformGenesisExt*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0));
 | 
			
		||||
      }
 | 
			
		||||
      ((DivPlatformGenesisExt*)dispatch)->setSoftPCM(true);
 | 
			
		||||
      break;
 | 
			
		||||
    case DIV_SYSTEM_SMS:
 | 
			
		||||
      dispatch=new DivPlatformSMS;
 | 
			
		||||
      if (isRender) {
 | 
			
		||||
        ((DivPlatformSMS*)dispatch)->setNuked(eng->getConfInt("snCoreRender",0));
 | 
			
		||||
      } else {
 | 
			
		||||
        ((DivPlatformSMS*)dispatch)->setNuked(eng->getConfInt("snCore",0));
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    case DIV_SYSTEM_GB:
 | 
			
		||||
      dispatch=new DivPlatformGB;
 | 
			
		||||
| 
						 | 
				
			
			@ -267,39 +291,71 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do
 | 
			
		|||
      break;
 | 
			
		||||
    case DIV_SYSTEM_NES:
 | 
			
		||||
      dispatch=new DivPlatformNES;
 | 
			
		||||
      if (isRender) {
 | 
			
		||||
        ((DivPlatformNES*)dispatch)->setNSFPlay(eng->getConfInt("nesCoreRender",0)==1);
 | 
			
		||||
      } else {
 | 
			
		||||
        ((DivPlatformNES*)dispatch)->setNSFPlay(eng->getConfInt("nesCore",0)==1);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    case DIV_SYSTEM_C64_6581:
 | 
			
		||||
      dispatch=new DivPlatformC64;
 | 
			
		||||
      if (isRender) {
 | 
			
		||||
        ((DivPlatformC64*)dispatch)->setCore(eng->getConfInt("c64CoreRender",1));
 | 
			
		||||
      } else {
 | 
			
		||||
        ((DivPlatformC64*)dispatch)->setCore(eng->getConfInt("c64Core",0));
 | 
			
		||||
      }
 | 
			
		||||
      ((DivPlatformC64*)dispatch)->setChipModel(true);
 | 
			
		||||
      break;
 | 
			
		||||
    case DIV_SYSTEM_C64_8580:
 | 
			
		||||
      dispatch=new DivPlatformC64;
 | 
			
		||||
      if (isRender) {
 | 
			
		||||
        ((DivPlatformC64*)dispatch)->setCore(eng->getConfInt("c64CoreRender",1));
 | 
			
		||||
      } else {
 | 
			
		||||
        ((DivPlatformC64*)dispatch)->setCore(eng->getConfInt("c64Core",0));
 | 
			
		||||
      }
 | 
			
		||||
      ((DivPlatformC64*)dispatch)->setChipModel(false);
 | 
			
		||||
      break;
 | 
			
		||||
    case DIV_SYSTEM_YM2151:
 | 
			
		||||
      dispatch=new DivPlatformArcade;
 | 
			
		||||
      if (isRender) {
 | 
			
		||||
        ((DivPlatformArcade*)dispatch)->setYMFM(eng->getConfInt("arcadeCoreRender",1)==0);
 | 
			
		||||
      } else {
 | 
			
		||||
        ((DivPlatformArcade*)dispatch)->setYMFM(eng->getConfInt("arcadeCore",0)==0);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    case DIV_SYSTEM_YM2610:
 | 
			
		||||
    case DIV_SYSTEM_YM2610_FULL:
 | 
			
		||||
      dispatch=new DivPlatformYM2610;
 | 
			
		||||
      if (isRender) {
 | 
			
		||||
        ((DivPlatformYM2610*)dispatch)->setCombo(eng->getConfInt("opnCoreRender",1)==1);
 | 
			
		||||
      } else {
 | 
			
		||||
        ((DivPlatformYM2610*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    case DIV_SYSTEM_YM2610_EXT:
 | 
			
		||||
    case DIV_SYSTEM_YM2610_FULL_EXT:
 | 
			
		||||
      dispatch=new DivPlatformYM2610Ext;
 | 
			
		||||
      if (isRender) {
 | 
			
		||||
        ((DivPlatformYM2610Ext*)dispatch)->setCombo(eng->getConfInt("opnCoreRender",1)==1);
 | 
			
		||||
      } else {
 | 
			
		||||
        ((DivPlatformYM2610Ext*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    case DIV_SYSTEM_YM2610B:
 | 
			
		||||
      dispatch=new DivPlatformYM2610B;
 | 
			
		||||
      if (isRender) {
 | 
			
		||||
        ((DivPlatformYM2610B*)dispatch)->setCombo(eng->getConfInt("opnCoreRender",1)==1);
 | 
			
		||||
      } else {
 | 
			
		||||
        ((DivPlatformYM2610B*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    case DIV_SYSTEM_YM2610B_EXT:
 | 
			
		||||
      dispatch=new DivPlatformYM2610BExt;
 | 
			
		||||
      if (isRender) {
 | 
			
		||||
        ((DivPlatformYM2610BExt*)dispatch)->setCombo(eng->getConfInt("opnCoreRender",1)==1);
 | 
			
		||||
      } else {
 | 
			
		||||
        ((DivPlatformYM2610BExt*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    case DIV_SYSTEM_AMIGA:
 | 
			
		||||
      dispatch=new DivPlatformAmiga;
 | 
			
		||||
| 
						 | 
				
			
			@ -312,26 +368,46 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do
 | 
			
		|||
      break;
 | 
			
		||||
    case DIV_SYSTEM_FDS:
 | 
			
		||||
      dispatch=new DivPlatformFDS;
 | 
			
		||||
      if (isRender) {
 | 
			
		||||
        ((DivPlatformFDS*)dispatch)->setNSFPlay(eng->getConfInt("fdsCoreRender",1)==1);
 | 
			
		||||
      } else {
 | 
			
		||||
        ((DivPlatformFDS*)dispatch)->setNSFPlay(eng->getConfInt("fdsCore",0)==1);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    case DIV_SYSTEM_TIA:
 | 
			
		||||
      dispatch=new DivPlatformTIA;
 | 
			
		||||
      break;
 | 
			
		||||
    case DIV_SYSTEM_YM2203:
 | 
			
		||||
      dispatch=new DivPlatformYM2203;
 | 
			
		||||
      if (isRender) {
 | 
			
		||||
        ((DivPlatformYM2203*)dispatch)->setCombo(eng->getConfInt("opnCoreRender",1)==1);
 | 
			
		||||
      } else {
 | 
			
		||||
        ((DivPlatformYM2203*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    case DIV_SYSTEM_YM2203_EXT:
 | 
			
		||||
      dispatch=new DivPlatformYM2203Ext;
 | 
			
		||||
      if (isRender) {
 | 
			
		||||
        ((DivPlatformYM2203Ext*)dispatch)->setCombo(eng->getConfInt("opnCoreRender",1)==1);
 | 
			
		||||
      } else {
 | 
			
		||||
        ((DivPlatformYM2203Ext*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    case DIV_SYSTEM_YM2608:
 | 
			
		||||
      dispatch=new DivPlatformYM2608;
 | 
			
		||||
      if (isRender) {
 | 
			
		||||
        ((DivPlatformYM2608*)dispatch)->setCombo(eng->getConfInt("opnCoreRender",1)==1);
 | 
			
		||||
      } else {
 | 
			
		||||
        ((DivPlatformYM2608*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    case DIV_SYSTEM_YM2608_EXT:
 | 
			
		||||
      dispatch=new DivPlatformYM2608Ext;
 | 
			
		||||
      if (isRender) {
 | 
			
		||||
        ((DivPlatformYM2608Ext*)dispatch)->setCombo(eng->getConfInt("opnCoreRender",1)==1);
 | 
			
		||||
      } else {
 | 
			
		||||
        ((DivPlatformYM2608Ext*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    case DIV_SYSTEM_OPLL:
 | 
			
		||||
    case DIV_SYSTEM_OPLL_DRUMS:
 | 
			
		||||
| 
						 | 
				
			
			@ -396,7 +472,11 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do
 | 
			
		|||
      break;
 | 
			
		||||
    case DIV_SYSTEM_POKEY:
 | 
			
		||||
      dispatch=new DivPlatformPOKEY;
 | 
			
		||||
      if (isRender) {
 | 
			
		||||
        ((DivPlatformPOKEY*)dispatch)->setAltASAP(eng->getConfInt("pokeyCoreRender",1)==1);
 | 
			
		||||
      } else {
 | 
			
		||||
        ((DivPlatformPOKEY*)dispatch)->setAltASAP(eng->getConfInt("pokeyCore",1)==1);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    case DIV_SYSTEM_QSOUND:
 | 
			
		||||
      dispatch=new DivPlatformQSound;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -821,6 +821,11 @@ void DivEngine::runExportThread() {
 | 
			
		|||
  size_t fadeOutSamples=got.rate*exportFadeOut;
 | 
			
		||||
  size_t curFadeOutSample=0;
 | 
			
		||||
  bool isFadingOut=false;
 | 
			
		||||
 | 
			
		||||
  quitDispatch();
 | 
			
		||||
  initDispatch(true);
 | 
			
		||||
  renderSamples();
 | 
			
		||||
 | 
			
		||||
  switch (exportMode) {
 | 
			
		||||
    case DIV_EXPORT_MODE_ONE: {
 | 
			
		||||
      SNDFILE* sf;
 | 
			
		||||
| 
						 | 
				
			
			@ -833,6 +838,9 @@ void DivEngine::runExportThread() {
 | 
			
		|||
      sf=sfWrap.doOpen(exportPath.c_str(),SFM_WRITE,&si);
 | 
			
		||||
      if (sf==NULL) {
 | 
			
		||||
        logE("could not open file for writing! (%s)",sf_strerror(NULL));
 | 
			
		||||
        quitDispatch();
 | 
			
		||||
        initDispatch(false);
 | 
			
		||||
        renderSamples();
 | 
			
		||||
        exporting=false;
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -1144,6 +1152,10 @@ void DivEngine::runExportThread() {
 | 
			
		|||
      break;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  quitDispatch();
 | 
			
		||||
  initDispatch(false);
 | 
			
		||||
  renderSamples();
 | 
			
		||||
  stopExport=false;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
| 
						 | 
				
			
			@ -3669,13 +3681,11 @@ DivSample* DivEngine::sampleFromFileRaw(const char* path, DivSampleDepth depth,
 | 
			
		|||
    return NULL;
 | 
			
		||||
  }
 | 
			
		||||
  if (channels<1) {
 | 
			
		||||
    lastError="invalid channel count";
 | 
			
		||||
    return NULL;
 | 
			
		||||
    channels=1;
 | 
			
		||||
  }
 | 
			
		||||
  if (depth!=DIV_SAMPLE_DEPTH_8BIT && depth!=DIV_SAMPLE_DEPTH_16BIT) {
 | 
			
		||||
    if (channels!=1) {
 | 
			
		||||
      lastError="channel count has to be 1 for non-8/16-bit format";
 | 
			
		||||
      return NULL;
 | 
			
		||||
      channels=1;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  BUSY_BEGIN;
 | 
			
		||||
| 
						 | 
				
			
			@ -3760,6 +3770,7 @@ DivSample* DivEngine::sampleFromFileRaw(const char* path, DivSampleDepth depth,
 | 
			
		|||
      samples=lenDivided*2;
 | 
			
		||||
      break;
 | 
			
		||||
    case DIV_SAMPLE_DEPTH_8BIT:
 | 
			
		||||
    case DIV_SAMPLE_DEPTH_MULAW:
 | 
			
		||||
      samples=lenDivided;
 | 
			
		||||
      break;
 | 
			
		||||
    case DIV_SAMPLE_DEPTH_BRR:
 | 
			
		||||
| 
						 | 
				
			
			@ -3829,12 +3840,46 @@ DivSample* DivEngine::sampleFromFileRaw(const char* path, DivSampleDepth depth,
 | 
			
		|||
  }
 | 
			
		||||
  delete[] buf;
 | 
			
		||||
 | 
			
		||||
  // swap nibbles if needed
 | 
			
		||||
  if (swapNibbles) {
 | 
			
		||||
    unsigned char* b=(unsigned char*)sample->getCurBuf();
 | 
			
		||||
    switch (depth) {
 | 
			
		||||
      case DIV_SAMPLE_DEPTH_1BIT:
 | 
			
		||||
      case DIV_SAMPLE_DEPTH_1BIT_DPCM:
 | 
			
		||||
        // reverse bit order
 | 
			
		||||
        for (unsigned int i=0; i<sample->getCurBufLen(); i++) {
 | 
			
		||||
          b[i]=(
 | 
			
		||||
            ((b[i]&128)?1:0)|
 | 
			
		||||
            ((b[i]&64)?2:0)|
 | 
			
		||||
            ((b[i]&32)?4:0)|
 | 
			
		||||
            ((b[i]&16)?8:0)|
 | 
			
		||||
            ((b[i]&8)?16:0)|
 | 
			
		||||
            ((b[i]&4)?32:0)|
 | 
			
		||||
            ((b[i]&2)?64:0)|
 | 
			
		||||
            ((b[i]&1)?128:0)
 | 
			
		||||
          );
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
      case DIV_SAMPLE_DEPTH_YMZ_ADPCM:
 | 
			
		||||
      case DIV_SAMPLE_DEPTH_QSOUND_ADPCM:
 | 
			
		||||
      case DIV_SAMPLE_DEPTH_ADPCM_A:
 | 
			
		||||
      case DIV_SAMPLE_DEPTH_ADPCM_B:
 | 
			
		||||
      case DIV_SAMPLE_DEPTH_VOX:
 | 
			
		||||
        // swap nibbles
 | 
			
		||||
        for (unsigned int i=0; i<sample->getCurBufLen(); i++) {
 | 
			
		||||
          b[i]=(b[i]<<4)|(b[i]>>4);
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
      case DIV_SAMPLE_DEPTH_MULAW:
 | 
			
		||||
        // Namco to G.711
 | 
			
		||||
        // Namco: smmmmxxx
 | 
			
		||||
        // G.711: sxxxmmmm (^0xff)
 | 
			
		||||
        for (unsigned int i=0; i<sample->getCurBufLen(); i++) {
 | 
			
		||||
          b[i]=(((b[i]&7)<<4)|(((b[i]>>3)&15)^((b[i]&0x80)?15:0))|(b[i]&0x80))^0xff;
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
      default:
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  BUSY_END;
 | 
			
		||||
| 
						 | 
				
			
			@ -4566,10 +4611,11 @@ void DivEngine::rescanAudioDevices() {
 | 
			
		|||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DivEngine::initDispatch() {
 | 
			
		||||
void DivEngine::initDispatch(bool isRender) {
 | 
			
		||||
  BUSY_BEGIN;
 | 
			
		||||
  if (isRender) logI("render cores set");
 | 
			
		||||
  for (int i=0; i<song.systemLen; i++) {
 | 
			
		||||
    disCont[i].init(song.system[i],this,getChannelCount(song.system[i]),got.rate,song.systemFlags[i]);
 | 
			
		||||
    disCont[i].init(song.system[i],this,getChannelCount(song.system[i]),got.rate,song.systemFlags[i],isRender);
 | 
			
		||||
    disCont[i].setRates(got.rate);
 | 
			
		||||
    disCont[i].setQuality(lowQuality);
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -56,8 +56,8 @@
 | 
			
		|||
 | 
			
		||||
#define DIV_UNSTABLE
 | 
			
		||||
 | 
			
		||||
#define DIV_VERSION "dev165"
 | 
			
		||||
#define DIV_ENGINE_VERSION 165
 | 
			
		||||
#define DIV_VERSION "dev166"
 | 
			
		||||
#define DIV_ENGINE_VERSION 166
 | 
			
		||||
// for imports
 | 
			
		||||
#define DIV_VERSION_MOD 0xff01
 | 
			
		||||
#define DIV_VERSION_FC 0xff02
 | 
			
		||||
| 
						 | 
				
			
			@ -201,7 +201,7 @@ struct DivDispatchContainer {
 | 
			
		|||
  void flush(size_t count);
 | 
			
		||||
  void fillBuf(size_t runtotal, size_t offset, size_t size);
 | 
			
		||||
  void clear();
 | 
			
		||||
  void init(DivSystem sys, DivEngine* eng, int chanCount, double gotRate, const DivConfig& flags);
 | 
			
		||||
  void init(DivSystem sys, DivEngine* eng, int chanCount, double gotRate, const DivConfig& flags, bool isRender=false);
 | 
			
		||||
  void quit();
 | 
			
		||||
  DivDispatchContainer():
 | 
			
		||||
    dispatch(NULL),
 | 
			
		||||
| 
						 | 
				
			
			@ -1132,7 +1132,7 @@ class DivEngine {
 | 
			
		|||
    TAAudioDesc& getAudioDescGot();
 | 
			
		||||
 | 
			
		||||
    // init dispatch
 | 
			
		||||
    void initDispatch();
 | 
			
		||||
    void initDispatch(bool isRender=false);
 | 
			
		||||
 | 
			
		||||
    // quit dispatch
 | 
			
		||||
    void quitDispatch();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -449,6 +449,7 @@ void DivPlatformC140::renderSamples(int sysID) {
 | 
			
		|||
    if (memPos+length>=(getSampleMemCapacity())) {
 | 
			
		||||
      if (s->depth==DIV_SAMPLE_DEPTH_MULAW) {
 | 
			
		||||
        for (unsigned int i=0; i<(getSampleMemCapacity())-memPos; i++) {
 | 
			
		||||
          if (i>=s->lengthMuLaw) break;
 | 
			
		||||
          unsigned char x=s->dataMuLaw[i]^0xff;
 | 
			
		||||
          if (x&0x80) x^=15;
 | 
			
		||||
          unsigned char c140Mu=(x&0x80)|((x&15)<<3)|((x&0x70)>>4);
 | 
			
		||||
| 
						 | 
				
			
			@ -461,6 +462,7 @@ void DivPlatformC140::renderSamples(int sysID) {
 | 
			
		|||
    } else {
 | 
			
		||||
      if (s->depth==DIV_SAMPLE_DEPTH_MULAW) {
 | 
			
		||||
        for (unsigned int i=0; i<length; i++) {
 | 
			
		||||
          if (i>=s->lengthMuLaw) break;
 | 
			
		||||
          unsigned char x=s->dataMuLaw[i]^0xff;
 | 
			
		||||
          if (x&0x80) x^=15;
 | 
			
		||||
          unsigned char c140Mu=(x&0x80)|((x&15)<<3)|((x&0x70)>>4);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -458,7 +458,7 @@ int DivPlatformGB::dispatch(DivCommand c) {
 | 
			
		|||
        }
 | 
			
		||||
        chan[c.chan].envVol=chan[c.chan].outVol;
 | 
			
		||||
        
 | 
			
		||||
        if (!chan[c.chan].keyOn) chan[c.chan].killIt=true;
 | 
			
		||||
        if (!chan[c.chan].keyOn && chan[c.chan].active) chan[c.chan].killIt=true;
 | 
			
		||||
        chan[c.chan].freqChanged=true;
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -443,13 +443,15 @@ void DivPlatformGenesisExt::muteChannel(int ch, bool mute) {
 | 
			
		|||
  DivPlatformGenesis::muteChannel(extChanOffs,IS_EXTCH_MUTED);
 | 
			
		||||
  
 | 
			
		||||
  if (extMode) {
 | 
			
		||||
    int ordch=orderedOps[ch-2];
 | 
			
		||||
    for (int i=0; i<4; i++) {
 | 
			
		||||
      int ordch=orderedOps[i];
 | 
			
		||||
      unsigned short baseAddr=chanOffs[2]|opOffs[ordch];
 | 
			
		||||
      DivInstrumentFM::Operator op=chan[2].state.op[ordch];
 | 
			
		||||
    if (isOpMuted[ch-2] || !op.enable) {
 | 
			
		||||
      if (isOpMuted[i] || !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(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[i].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));
 | 
			
		||||
| 
						 | 
				
			
			@ -557,6 +559,17 @@ void DivPlatformGenesisExt::tick(bool sysTick) {
 | 
			
		|||
      rWrite(0x22,lfoValue);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (opChan[i].std.panL.had) {
 | 
			
		||||
      opChan[i].pan=opChan[i].std.panL.val&3;
 | 
			
		||||
      if (parent->song.sharedExtStat) {
 | 
			
		||||
        for (int j=0; j<4; j++) {
 | 
			
		||||
          if (i==j) continue;
 | 
			
		||||
          opChan[j].pan=opChan[i].pan;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      rWrite(chanOffs[extChanOffs]+ADDR_LRAF,(IS_EXTCH_MUTED?0:(opChan[i].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // param macros
 | 
			
		||||
    unsigned short baseAddr=chanOffs[2]|opOffs[orderedOps[i]];
 | 
			
		||||
    DivInstrumentFM::Operator& op=chan[2].state.op[orderedOps[i]];
 | 
			
		||||
| 
						 | 
				
			
			@ -770,6 +783,9 @@ void DivPlatformGenesisExt::forceIns() {
 | 
			
		|||
    chan[csmChan].freqChanged=true;
 | 
			
		||||
    chan[csmChan].keyOn=true;
 | 
			
		||||
  }
 | 
			
		||||
  if (!extMode) {
 | 
			
		||||
    immWrite(0x27,0x00);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void* DivPlatformGenesisExt::getChanState(int ch) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -134,6 +134,7 @@ void DivPlatformN163::updateWave(int ch, int wave, int pos, int len) {
 | 
			
		|||
  len&=0xfc; // 4 nibble boundary
 | 
			
		||||
  if (wave<0) {
 | 
			
		||||
    // load from wave synth
 | 
			
		||||
    if (ch>=0) {
 | 
			
		||||
      for (int i=0; i<len; i++) {
 | 
			
		||||
        unsigned char addr=(pos+i); // address (nibble each)
 | 
			
		||||
        if (addr>=((0x78-(chanMax<<3))<<1)) { // avoid conflict with channel register area
 | 
			
		||||
| 
						 | 
				
			
			@ -143,6 +144,7 @@ void DivPlatformN163::updateWave(int ch, int wave, int pos, int len) {
 | 
			
		|||
        int data=chan[ch].ws.output[i];
 | 
			
		||||
        rWriteMask(addr>>1,(addr&1)?(data<<4):(data&0xf),mask);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  } else {
 | 
			
		||||
    // load from custom
 | 
			
		||||
    DivWavetable* wt=parent->getWave(wave);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,7 +5,7 @@
 | 
			
		|||
MODIFIED Namco C140 sound emulator - MODIFIED VERSION
 | 
			
		||||
by cam900
 | 
			
		||||
 | 
			
		||||
MODIFICATION by tildearrow - adds muting function
 | 
			
		||||
MODIFICATION by tildearrow - adds muting function and fixes overflow
 | 
			
		||||
THIS IS NOT THE ORIGINAL VERSION - you can find the original one in
 | 
			
		||||
commit 72d04777c013988ed8cf6da27c62a9d784a59dff
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -99,8 +99,8 @@ void c140_voice_tick(struct c140_t *c140, const unsigned char v, const int cycle
 | 
			
		|||
				s1 = c140->mulaw[(s1 >> 8) & 0xff];
 | 
			
		||||
				s2 = c140->mulaw[(s2 >> 8) & 0xff];
 | 
			
		||||
			}
 | 
			
		||||
			// interpolate
 | 
			
		||||
			signed int sample = s1 + (((voice->frac) * (s2 - s1)) >> 16);
 | 
			
		||||
			// interpolate (originally was >>16, but I had to reduce it to 15 to prevent overflow)
 | 
			
		||||
			signed int sample = s1 + (((voice->frac >> 1) * (s2 - s1)) >> 15);
 | 
			
		||||
			voice->lout = sample * voice->lvol;
 | 
			
		||||
			voice->rout = sample * voice->rvol;
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -606,13 +606,15 @@ void DivPlatformYM2203Ext::muteChannel(int ch, bool mute) {
 | 
			
		|||
  DivPlatformYM2203::muteChannel(extChanOffs,IS_EXTCH_MUTED);
 | 
			
		||||
  
 | 
			
		||||
  if (extMode) {
 | 
			
		||||
    int ordch=orderedOps[ch-2];
 | 
			
		||||
    for (int i=0; i<4; i++) {
 | 
			
		||||
      int ordch=orderedOps[i];
 | 
			
		||||
      unsigned short baseAddr=chanOffs[2]|opOffs[ordch];
 | 
			
		||||
      DivInstrumentFM::Operator op=chan[2].state.op[ordch];
 | 
			
		||||
    if (isOpMuted[ch-2] || !op.enable) {
 | 
			
		||||
      if (isOpMuted[i] || !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(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[i].outVol&0x7f,127));
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -669,6 +671,9 @@ void DivPlatformYM2203Ext::forceIns() {
 | 
			
		|||
      opChan[i].freqChanged=true;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  if (!extMode) {
 | 
			
		||||
    immWrite(0x27,0x00);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void* DivPlatformYM2203Ext::getChanState(int ch) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -508,6 +508,17 @@ void DivPlatformYM2608Ext::tick(bool sysTick) {
 | 
			
		|||
      rWrite(0x22,lfoValue);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (opChan[i].std.panL.had) {
 | 
			
		||||
      opChan[i].pan=opChan[i].std.panL.val&3;
 | 
			
		||||
      if (parent->song.sharedExtStat) {
 | 
			
		||||
        for (int j=0; j<4; j++) {
 | 
			
		||||
          if (i==j) continue;
 | 
			
		||||
          opChan[j].pan=opChan[i].pan;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      rWrite(chanOffs[extChanOffs]+ADDR_LRAF,(IS_EXTCH_MUTED?0:(opChan[i].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    // param macros
 | 
			
		||||
    unsigned short baseAddr=chanOffs[2]|opOffs[orderedOps[i]];
 | 
			
		||||
| 
						 | 
				
			
			@ -641,13 +652,15 @@ void DivPlatformYM2608Ext::muteChannel(int ch, bool mute) {
 | 
			
		|||
  DivPlatformYM2608::muteChannel(extChanOffs,IS_EXTCH_MUTED);
 | 
			
		||||
  
 | 
			
		||||
  if (extMode) {
 | 
			
		||||
    int ordch=orderedOps[ch-2];
 | 
			
		||||
    for (int i=0; i<4; i++) {
 | 
			
		||||
      int ordch=orderedOps[i];
 | 
			
		||||
      unsigned short baseAddr=chanOffs[2]|opOffs[ordch];
 | 
			
		||||
      DivInstrumentFM::Operator op=chan[2].state.op[ordch];
 | 
			
		||||
    if (isOpMuted[ch-2] || !op.enable) {
 | 
			
		||||
      if (isOpMuted[i] || !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(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[i].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));
 | 
			
		||||
| 
						 | 
				
			
			@ -719,6 +732,9 @@ void DivPlatformYM2608Ext::forceIns() {
 | 
			
		|||
      opChan[i].freqChanged=true;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  if (!extMode) {
 | 
			
		||||
    immWrite(0x27,0x00);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void* DivPlatformYM2608Ext::getChanState(int ch) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -504,6 +504,17 @@ void DivPlatformYM2610BExt::tick(bool sysTick) {
 | 
			
		|||
      rWrite(0x22,lfoValue);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (opChan[i].std.panL.had) {
 | 
			
		||||
      opChan[i].pan=opChan[i].std.panL.val&3;
 | 
			
		||||
      if (parent->song.sharedExtStat) {
 | 
			
		||||
        for (int j=0; j<4; j++) {
 | 
			
		||||
          if (i==j) continue;
 | 
			
		||||
          opChan[j].pan=opChan[i].pan;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      rWrite(chanOffs[extChanOffs]+ADDR_LRAF,(IS_EXTCH_MUTED?0:(opChan[i].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // param macros
 | 
			
		||||
    unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[orderedOps[i]];
 | 
			
		||||
    DivInstrumentFM::Operator& op=chan[extChanOffs].state.op[orderedOps[i]];
 | 
			
		||||
| 
						 | 
				
			
			@ -636,13 +647,15 @@ void DivPlatformYM2610BExt::muteChannel(int ch, bool mute) {
 | 
			
		|||
  DivPlatformYM2610B::muteChannel(extChanOffs,IS_EXTCH_MUTED);
 | 
			
		||||
  
 | 
			
		||||
  if (extMode) {
 | 
			
		||||
    int ordch=orderedOps[ch-extChanOffs];
 | 
			
		||||
    for (int i=0; i<4; i++) {
 | 
			
		||||
      int ordch=orderedOps[i];
 | 
			
		||||
      unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[ordch];
 | 
			
		||||
      DivInstrumentFM::Operator op=chan[extChanOffs].state.op[ordch];
 | 
			
		||||
    if (isOpMuted[ch-extChanOffs] || !op.enable) {
 | 
			
		||||
      if (isOpMuted[i] || !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(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[i].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));
 | 
			
		||||
| 
						 | 
				
			
			@ -709,6 +722,9 @@ void DivPlatformYM2610BExt::forceIns() {
 | 
			
		|||
      opChan[i].freqChanged=true;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  if (!extMode) {
 | 
			
		||||
    immWrite(0x27,0x00);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void* DivPlatformYM2610BExt::getChanState(int ch) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -504,6 +504,17 @@ void DivPlatformYM2610Ext::tick(bool sysTick) {
 | 
			
		|||
      rWrite(0x22,lfoValue);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (opChan[i].std.panL.had) {
 | 
			
		||||
      opChan[i].pan=opChan[i].std.panL.val&3;
 | 
			
		||||
      if (parent->song.sharedExtStat) {
 | 
			
		||||
        for (int j=0; j<4; j++) {
 | 
			
		||||
          if (i==j) continue;
 | 
			
		||||
          opChan[j].pan=opChan[i].pan;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      rWrite(chanOffs[extChanOffs]+ADDR_LRAF,(IS_EXTCH_MUTED?0:(opChan[i].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // param macros
 | 
			
		||||
    unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[orderedOps[i]];
 | 
			
		||||
    DivInstrumentFM::Operator& op=chan[extChanOffs].state.op[orderedOps[i]];
 | 
			
		||||
| 
						 | 
				
			
			@ -636,13 +647,15 @@ void DivPlatformYM2610Ext::muteChannel(int ch, bool mute) {
 | 
			
		|||
  DivPlatformYM2610::muteChannel(extChanOffs,IS_EXTCH_MUTED);
 | 
			
		||||
  
 | 
			
		||||
  if (extMode) {
 | 
			
		||||
    int ordch=orderedOps[ch-extChanOffs];
 | 
			
		||||
    for (int i=0; i<4; i++) {
 | 
			
		||||
      int ordch=orderedOps[i];
 | 
			
		||||
      unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[ordch];
 | 
			
		||||
      DivInstrumentFM::Operator op=chan[extChanOffs].state.op[ordch];
 | 
			
		||||
    if (isOpMuted[ch-extChanOffs] || !op.enable) {
 | 
			
		||||
      if (isOpMuted[i] || !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(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[i].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));
 | 
			
		||||
| 
						 | 
				
			
			@ -709,6 +722,9 @@ void DivPlatformYM2610Ext::forceIns() {
 | 
			
		|||
      opChan[i].freqChanged=true;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  if (!extMode) {
 | 
			
		||||
    immWrite(0x27,0x00);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void* DivPlatformYM2610Ext::getChanState(int ch) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1304,6 +1304,7 @@ bool DivEngine::nextTick(bool noAccum, bool inhibitLowLat) {
 | 
			
		|||
      dispatchCmd(DivCommand(DIV_CMD_NOTE_ON,note.channel,note.note));
 | 
			
		||||
      keyHit[note.channel]=true;
 | 
			
		||||
      chan[note.channel].noteOnInhibit=true;
 | 
			
		||||
      chan[note.channel].lastIns=note.ins;
 | 
			
		||||
    } else {
 | 
			
		||||
      DivMacroInt* macroInt=disCont[dispatchOfChan[note.channel]].dispatch->getChanMacroInt(dispatchChanOfChan[note.channel]);
 | 
			
		||||
      if (macroInt!=NULL) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -449,7 +449,12 @@ void DivEngine::registerSystems() {
 | 
			
		|||
    {0x30, {DIV_CMD_FM_HARD_RESET, "30xx: Toggle hard envelope reset on new notes"}},
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  EffectHandlerMap fmOPN2EffectHandlerMap(fmEffectHandlerMap);
 | 
			
		||||
  EffectHandlerMap fmExtChEffectHandlerMap(fmEffectHandlerMap);
 | 
			
		||||
  fmExtChEffectHandlerMap.insert({
 | 
			
		||||
    {0x18, {DIV_CMD_FM_EXTCH, "18xx: Toggle extended channel 3 mode"}},
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  EffectHandlerMap fmOPN2EffectHandlerMap(fmExtChEffectHandlerMap);
 | 
			
		||||
  fmOPN2EffectHandlerMap.insert({
 | 
			
		||||
    {0x17, {DIV_CMD_SAMPLE_MODE, "17xx: Toggle PCM mode (LEGACY)"}},
 | 
			
		||||
    {0xdf, {DIV_CMD_SAMPLE_DIR, "DFxx: Set sample playback direction (0: normal; 1: reverse)"}},
 | 
			
		||||
| 
						 | 
				
			
			@ -522,7 +527,6 @@ void DivEngine::registerSystems() {
 | 
			
		|||
 | 
			
		||||
  fmOPNPostEffectHandlerMap.insert({
 | 
			
		||||
    {0x10, {DIV_CMD_FM_LFO, "10xy: Setup LFO (x: enable; y: speed)"}},
 | 
			
		||||
    {0x18, {DIV_CMD_FM_EXTCH, "18xx: Toggle extended channel 3 mode"}},
 | 
			
		||||
    {0x55, {DIV_CMD_FM_SSG, "55xy: Set SSG envelope (x: operator from 1 to 4 (0 for all ops); y: 0-7 on, 8 off)", effectOpVal<4>, effectValAnd<15>}},
 | 
			
		||||
  });
 | 
			
		||||
  EffectHandlerMap fmOPN2PostEffectHandlerMap(fmOPNPostEffectHandlerMap);
 | 
			
		||||
| 
						 | 
				
			
			@ -769,7 +773,7 @@ void DivEngine::registerSystems() {
 | 
			
		|||
    {DIV_CH_FM, DIV_CH_OP, DIV_CH_OP, DIV_CH_OP, DIV_CH_OP, DIV_CH_FM, DIV_CH_FM, DIV_CH_PULSE, DIV_CH_PULSE, DIV_CH_PULSE, DIV_CH_PCM, DIV_CH_PCM, DIV_CH_PCM, DIV_CH_PCM, DIV_CH_PCM, DIV_CH_PCM},
 | 
			
		||||
    {DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_AY, DIV_INS_AY, DIV_INS_AY, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA},
 | 
			
		||||
    {DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA},
 | 
			
		||||
    fmEffectHandlerMap,
 | 
			
		||||
    fmExtChEffectHandlerMap,
 | 
			
		||||
    fmOPNAPostEffectHandlerMap
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1028,7 +1032,7 @@ void DivEngine::registerSystems() {
 | 
			
		|||
    {DIV_CH_FM, DIV_CH_FM, DIV_CH_OP, DIV_CH_OP, DIV_CH_OP, DIV_CH_OP, DIV_CH_PULSE, DIV_CH_PULSE, DIV_CH_PULSE},
 | 
			
		||||
    {DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_AY, DIV_INS_AY, DIV_INS_AY},
 | 
			
		||||
    {},
 | 
			
		||||
    fmEffectHandlerMap,
 | 
			
		||||
    fmExtChEffectHandlerMap,
 | 
			
		||||
    fmOPNPostEffectHandlerMap
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1040,7 +1044,7 @@ void DivEngine::registerSystems() {
 | 
			
		|||
    {DIV_CH_FM, DIV_CH_FM, DIV_CH_OP, DIV_CH_OP, DIV_CH_OP, DIV_CH_OP, DIV_CH_NOISE, DIV_CH_PULSE, DIV_CH_PULSE, DIV_CH_PULSE},
 | 
			
		||||
    {DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_AY, DIV_INS_AY, DIV_INS_AY},
 | 
			
		||||
    {},
 | 
			
		||||
    fmEffectHandlerMap,
 | 
			
		||||
    fmExtChEffectHandlerMap,
 | 
			
		||||
    fmOPNPostEffectHandlerMap
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1064,7 +1068,7 @@ void DivEngine::registerSystems() {
 | 
			
		|||
    {DIV_CH_FM, DIV_CH_FM, DIV_CH_OP, DIV_CH_OP, DIV_CH_OP, DIV_CH_OP, DIV_CH_FM, DIV_CH_FM, DIV_CH_FM, DIV_CH_PULSE, DIV_CH_PULSE, DIV_CH_PULSE, DIV_CH_NOISE, DIV_CH_NOISE, DIV_CH_NOISE, DIV_CH_NOISE, DIV_CH_NOISE, DIV_CH_NOISE, DIV_CH_PCM},
 | 
			
		||||
    {DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_AY, DIV_INS_AY, DIV_INS_AY, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMB},
 | 
			
		||||
    {DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_AMIGA},
 | 
			
		||||
    fmEffectHandlerMap,
 | 
			
		||||
    fmExtChEffectHandlerMap,
 | 
			
		||||
    fmOPNAPostEffectHandlerMap
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1076,7 +1080,7 @@ void DivEngine::registerSystems() {
 | 
			
		|||
    {DIV_CH_FM, DIV_CH_FM, DIV_CH_OP, DIV_CH_OP, DIV_CH_OP, DIV_CH_OP, DIV_CH_FM, DIV_CH_FM, DIV_CH_FM, DIV_CH_NOISE, DIV_CH_PULSE, DIV_CH_PULSE, DIV_CH_PULSE, DIV_CH_NOISE, DIV_CH_NOISE, DIV_CH_NOISE, DIV_CH_NOISE, DIV_CH_NOISE, DIV_CH_NOISE, DIV_CH_PCM},
 | 
			
		||||
    {DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_AY, DIV_INS_AY, DIV_INS_AY, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMB},
 | 
			
		||||
    {DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_AMIGA},
 | 
			
		||||
    fmEffectHandlerMap,
 | 
			
		||||
    fmExtChEffectHandlerMap,
 | 
			
		||||
    fmOPNAPostEffectHandlerMap
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1368,7 +1372,7 @@ void DivEngine::registerSystems() {
 | 
			
		|||
    {DIV_CH_FM, DIV_CH_OP, DIV_CH_OP, DIV_CH_OP, DIV_CH_OP, DIV_CH_FM, DIV_CH_FM, DIV_CH_PULSE, DIV_CH_PULSE, DIV_CH_PULSE, DIV_CH_PCM, DIV_CH_PCM, DIV_CH_PCM, DIV_CH_PCM, DIV_CH_PCM, DIV_CH_PCM, DIV_CH_PCM},
 | 
			
		||||
    {DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_AY, DIV_INS_AY, DIV_INS_AY, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMB},
 | 
			
		||||
    {DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA},
 | 
			
		||||
    fmEffectHandlerMap,
 | 
			
		||||
    fmExtChEffectHandlerMap,
 | 
			
		||||
    fmOPNAPostEffectHandlerMap
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1380,7 +1384,7 @@ void DivEngine::registerSystems() {
 | 
			
		|||
    {DIV_CH_FM, DIV_CH_OP, DIV_CH_OP, DIV_CH_OP, DIV_CH_OP, DIV_CH_FM, DIV_CH_FM, DIV_CH_NOISE, DIV_CH_PULSE, DIV_CH_PULSE, DIV_CH_PULSE, DIV_CH_PCM, DIV_CH_PCM, DIV_CH_PCM, DIV_CH_PCM, DIV_CH_PCM, DIV_CH_PCM, DIV_CH_PCM},
 | 
			
		||||
    {DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_AY, DIV_INS_AY, DIV_INS_AY, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMB},
 | 
			
		||||
    {DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA},
 | 
			
		||||
    fmEffectHandlerMap,
 | 
			
		||||
    fmExtChEffectHandlerMap,
 | 
			
		||||
    fmOPNAPostEffectHandlerMap
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1457,7 +1461,7 @@ void DivEngine::registerSystems() {
 | 
			
		|||
    {DIV_CH_FM, DIV_CH_FM, DIV_CH_OP, DIV_CH_OP, DIV_CH_OP, DIV_CH_OP, DIV_CH_FM, DIV_CH_FM, DIV_CH_FM, DIV_CH_PULSE, DIV_CH_PULSE, DIV_CH_PULSE, DIV_CH_PCM, DIV_CH_PCM, DIV_CH_PCM, DIV_CH_PCM, DIV_CH_PCM, DIV_CH_PCM, DIV_CH_PCM},
 | 
			
		||||
    {DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_AY, DIV_INS_AY, DIV_INS_AY, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMB},
 | 
			
		||||
    {DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA},
 | 
			
		||||
    fmEffectHandlerMap,
 | 
			
		||||
    fmExtChEffectHandlerMap,
 | 
			
		||||
    fmOPNAPostEffectHandlerMap
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1469,7 +1473,7 @@ void DivEngine::registerSystems() {
 | 
			
		|||
    {DIV_CH_FM, DIV_CH_FM, DIV_CH_OP, DIV_CH_OP, DIV_CH_OP, DIV_CH_OP, DIV_CH_FM, DIV_CH_FM, DIV_CH_FM, DIV_CH_NOISE, DIV_CH_PULSE, DIV_CH_PULSE, DIV_CH_PULSE, DIV_CH_PCM, DIV_CH_PCM, DIV_CH_PCM, DIV_CH_PCM, DIV_CH_PCM, DIV_CH_PCM, DIV_CH_PCM},
 | 
			
		||||
    {DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_AY, DIV_INS_AY, DIV_INS_AY, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMA, DIV_INS_ADPCMB},
 | 
			
		||||
    {DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA},
 | 
			
		||||
    fmEffectHandlerMap,
 | 
			
		||||
    fmExtChEffectHandlerMap,
 | 
			
		||||
    fmOPNAPostEffectHandlerMap
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -93,6 +93,7 @@ const char* aboutLine[]={
 | 
			
		|||
  "freq-mod",
 | 
			
		||||
  "gtr3qq",
 | 
			
		||||
  "Hortus",
 | 
			
		||||
  "ifrit05",
 | 
			
		||||
  "iyatemu",
 | 
			
		||||
  "JayBOB18",
 | 
			
		||||
  "Jimmy-DS",
 | 
			
		||||
| 
						 | 
				
			
			@ -113,6 +114,7 @@ const char* aboutLine[]={
 | 
			
		|||
  "niffuM",
 | 
			
		||||
  "<nk>",
 | 
			
		||||
  "NyaongI",
 | 
			
		||||
  "PichuMario",
 | 
			
		||||
  "potatoTeto",
 | 
			
		||||
  "psxdominator",
 | 
			
		||||
  "Raijin",
 | 
			
		||||
| 
						 | 
				
			
			@ -134,6 +136,7 @@ const char* aboutLine[]={
 | 
			
		|||
  "UserSniper",
 | 
			
		||||
  "Weeppiko",
 | 
			
		||||
  "Xan",
 | 
			
		||||
  "YaIiya",
 | 
			
		||||
  "Yuzu4K",
 | 
			
		||||
  "Zaxolotl",
 | 
			
		||||
  "ZoomTen (Zumi)",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -51,7 +51,9 @@ void FurnaceGUI::drawChannels() {
 | 
			
		|||
        ImGui::PushID(i);
 | 
			
		||||
        ImGui::TableNextRow();
 | 
			
		||||
        ImGui::TableNextColumn();
 | 
			
		||||
        ImGui::Checkbox("##Visible",&e->curSubSong->chanShow[i]);
 | 
			
		||||
        if (ImGui::Checkbox("##Visible",&e->curSubSong->chanShow[i])) {
 | 
			
		||||
          MARK_MODIFIED;
 | 
			
		||||
        }
 | 
			
		||||
        ImGui::SameLine();
 | 
			
		||||
        if (ImGui::Button(ICON_FA_ARROWS)) {
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -78,10 +80,14 @@ void FurnaceGUI::drawChannels() {
 | 
			
		|||
        }
 | 
			
		||||
        ImGui::TableNextColumn();
 | 
			
		||||
        ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
 | 
			
		||||
        ImGui::InputTextWithHint("##ChanName",e->getChannelName(i),&e->curSubSong->chanName[i]);
 | 
			
		||||
        if (ImGui::InputTextWithHint("##ChanName",e->getChannelName(i),&e->curSubSong->chanName[i])) {
 | 
			
		||||
          MARK_MODIFIED;
 | 
			
		||||
        }
 | 
			
		||||
        ImGui::TableNextColumn();
 | 
			
		||||
        ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
 | 
			
		||||
        ImGui::InputTextWithHint("##ChanShortName",e->getChannelShortName(i),&e->curSubSong->chanShortName[i]);
 | 
			
		||||
        if (ImGui::InputTextWithHint("##ChanShortName",e->getChannelShortName(i),&e->curSubSong->chanShortName[i])) {
 | 
			
		||||
          MARK_MODIFIED;
 | 
			
		||||
        }
 | 
			
		||||
        ImGui::PopID();
 | 
			
		||||
      }
 | 
			
		||||
      ImGui::EndTable();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -314,7 +314,7 @@ void FurnaceGUI::drawCompatFlags() {
 | 
			
		|||
        }
 | 
			
		||||
        ImGui::Checkbox("Continuous vibrato",&e->song.continuousVibrato);
 | 
			
		||||
        if (ImGui::IsItemHovered()) {
 | 
			
		||||
          ImGui::SetTooltip("when enabled, vibrato will not be reset on a new note.");
 | 
			
		||||
          ImGui::SetTooltip("when enabled, vibrato phase/position will not be reset on a new note.");
 | 
			
		||||
        }
 | 
			
		||||
        InvCheckbox("Pitch macro is not linear",&e->song.pitchMacroIsLinear);
 | 
			
		||||
        if (ImGui::IsItemHovered()) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -534,9 +534,11 @@ void FurnaceGUI::drawInsList(bool asChild) {
 | 
			
		|||
      if (settings.unifiedDataView) {
 | 
			
		||||
        ImGui::TableNextRow();
 | 
			
		||||
        ImGui::TableNextColumn();
 | 
			
		||||
        if (ImGui::Selectable(ICON_FA_TASKS " Instruments",lastAssetType==0)) {
 | 
			
		||||
        if (ImGui::Selectable(ICON_FA_TASKS "##Instruments",lastAssetType==0)) {
 | 
			
		||||
          lastAssetType=0;
 | 
			
		||||
        }
 | 
			
		||||
        ImGui::SameLine();
 | 
			
		||||
        ImGui::Text("Instruments");
 | 
			
		||||
        ImGui::Indent();
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -602,18 +604,22 @@ void FurnaceGUI::drawInsList(bool asChild) {
 | 
			
		|||
 | 
			
		||||
        ImGui::TableNextRow();
 | 
			
		||||
        ImGui::TableNextColumn();
 | 
			
		||||
        if (ImGui::Selectable(ICON_FA_AREA_CHART " Wavetables",lastAssetType==1)) {
 | 
			
		||||
        if (ImGui::Selectable(ICON_FA_AREA_CHART "##Wavetables",lastAssetType==1)) {
 | 
			
		||||
          lastAssetType=1;
 | 
			
		||||
        }
 | 
			
		||||
        ImGui::SameLine();
 | 
			
		||||
        ImGui::Text("Wavetables");
 | 
			
		||||
        ImGui::Indent();
 | 
			
		||||
        actualWaveList();
 | 
			
		||||
        ImGui::Unindent();
 | 
			
		||||
 | 
			
		||||
        ImGui::TableNextRow();
 | 
			
		||||
        ImGui::TableNextColumn();
 | 
			
		||||
        if (ImGui::Selectable(ICON_FA_VOLUME_UP " Samples",lastAssetType==2)) {
 | 
			
		||||
        if (ImGui::Selectable(ICON_FA_VOLUME_UP "##Samples",lastAssetType==2)) {
 | 
			
		||||
          lastAssetType=2;
 | 
			
		||||
        }
 | 
			
		||||
        ImGui::SameLine();
 | 
			
		||||
        ImGui::Text("Samples");
 | 
			
		||||
        ImGui::Indent();
 | 
			
		||||
        actualSampleList();
 | 
			
		||||
        ImGui::Unindent();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -665,6 +665,7 @@ void FurnaceGUI::drawEditControls() {
 | 
			
		|||
 | 
			
		||||
          ImGui::TableNextRow();
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::AlignTextToFramePadding();
 | 
			
		||||
          ImGui::Text("Octave");
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
 | 
			
		||||
| 
						 | 
				
			
			@ -680,6 +681,7 @@ void FurnaceGUI::drawEditControls() {
 | 
			
		|||
 | 
			
		||||
          ImGui::TableNextRow();
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::AlignTextToFramePadding();
 | 
			
		||||
          ImGui::Text("Edit Step");
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,270 +1,313 @@
 | 
			
		|||
#include "fonts.h"
 | 
			
		||||
// File: 'icons.ttf' (25956 bytes)
 | 
			
		||||
// File: 'icons.ttf' (28108 bytes)
 | 
			
		||||
// Exported using binary_to_compressed_c.cpp
 | 
			
		||||
const unsigned int furIcons_compressed_size = 12568;
 | 
			
		||||
const unsigned int furIcons_compressed_data[12568/4] =
 | 
			
		||||
const unsigned int furIcons_compressed_size = 14633;
 | 
			
		||||
const unsigned int furIcons_compressed_data[14636/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, 
 | 
			
		||||
    0x0000bc57, 0x00000000, 0xcc6d0000, 0x00000400, 0x00010037, 0x000e0000, 0x00030080, 0x54464660, 0x4458a24d, 0x6d000089, 0x281582b0, 0x4544471c, 
 | 
			
		||||
    0x00150046, 0x200f8214, 0x2b0f8394, 0x322f534f, 0x7552fa8c, 0x68010000, 0x562c0f82, 0x70616d63, 0x8dc99dcd, 0x60020000, 0xe02c1382, 0x20747663, 
 | 
			
		||||
    0x6f043b00, 0x40040000, 0x04261f82, 0x70736167, 0x5982ffff, 0x8c6d0022, 0x08280f82, 0x66796c67, 0x3fd5de2d, 0xdc2c1f82, 0xd8630000, 0x64616568, 
 | 
			
		||||
    0xad24a224, 0xec201b82, 0x36210382, 0x23108268, 0x05068209, 0x24204b82, 0x24280f82, 0x78746d68, 0x1c12b128, 0xc0200f82, 0x9e280f82, 0x61636f6c, 
 | 
			
		||||
    0x50b6999c, 0x44203f82, 0x98270f82, 0x7078616d, 0x82039500, 0x4801213b, 0x202c0f82, 0x656d616e, 0x1fd1e37f, 0xb4680000, 0xe62c3382, 0x74736f70, 
 | 
			
		||||
    0x39fe916a, 0x9c6a0000, 0xf020a382, 0x012deb84, 0xff390000, 0x0f5f2c8b, 0x0b00f53c, 0x25368207, 0xfde00000, 0x08839fff, 0xdc04e12b, 0xfe80fcc9, 
 | 
			
		||||
    0x05000768, 0x220f82e0, 0x82020008, 0x82028305, 0x00062233, 0x290982ff, 0x80fc0007, 0x00070000, 0x0c820100, 0x0420028b, 0x4b251184, 0x0800bb03, 
 | 
			
		||||
    0x21008300, 0x23830002, 0x40222583, 0x0b822e00, 0x072b0d82, 0x00900100, 0x04000005, 0x82e6048c, 0x85fa2011, 0x5c032b07, 0xcf015900, 0x00020000, 
 | 
			
		||||
    0x15820905, 0x01210285, 0x84078510, 0x75462905, 0x40005472, 0x41e12000, 0x06208385, 0x04856a84, 0x3b208b84, 0x07202683, 0x03830482, 0x0280fc25, 
 | 
			
		||||
    0x82910009, 0x0052220c, 0x2c798220, 0x003500a5, 0x0029004b, 0x006d0191, 0x349b8278, 0x00470060, 0x00170152, 0x004a000a, 0x0032018f, 0x004f001b, 
 | 
			
		||||
    0x2631822e, 0x011801ca, 0x82a90036, 0x0028251b, 0x004d0133, 0x23829182, 0x22000338, 0x7a017c01, 0x39003900, 0xce012701, 0x4c001300, 0x22007301, 
 | 
			
		||||
    0x0d824700, 0x85000b24, 0x0f82b500, 0x2e005b26, 0x5c004b01, 0x2a200184, 0x53200582, 0x4b260382, 0x53005e00, 0x0982c800, 0x00218882, 0x83048203, 
 | 
			
		||||
    0x861c2003, 0x00da22b3, 0x24098403, 0x0004001c, 0x2e1b82be, 0x00080008, 0x00000002, 0xe1f4e020, 0x84ffff41, 0xe1f02609, 0xffffff00, 0x200b82e3, 
 | 
			
		||||
    0x222b8400, 0x820e0006, 0x0004260b, 0x00060005, 0x202f8207, 0x249d8209, 0x000c000b, 0x2617820d, 0x0010000f, 0x82120011, 0x00142c9d, 0x00160015, 
 | 
			
		||||
    0x00180017, 0x821a0019, 0x1c3808db, 0x1e001d00, 0x20001f00, 0x22002100, 0x24002300, 0x26002500, 0x28002700, 0x2a002900, 0x2c002b00, 0x2e002d00, 
 | 
			
		||||
    0x30002f00, 0x32003100, 0x34003300, 0x36003500, 0x38003700, 0x2008f182, 0x003b003a, 0x003d003c, 0x003f003e, 0x00410040, 0x00430042, 0x00450044, 
 | 
			
		||||
    0x00470046, 0x00490048, 0x2098824a, 0x829c8506, 0x01002299, 0x21058202, 0x008d0002, 0x84000121, 0x40148dfc, 0x3b22ce0d, 0xd1826f04, 0x85002c21, 
 | 
			
		||||
    0x3caf0801, 0xc6008400, 0x24056404, 0xd406c405, 0xea075807, 0x3409ce08, 0xb00a7609, 0x880bfe0a, 0x2e0cee0b, 0x6a0de60c, 0x640ed80d, 0xa40fca0e, 
 | 
			
		||||
    0xbc105a10, 0xc6117e11, 0x0c139212, 0xd8138c13, 0x48159814, 0x12173816, 0x1e1b8017, 0x341cae1b, 0xea1dc01c, 0xbc1f081f, 0x34218020, 0xfc218a21, 
 | 
			
		||||
    0xc8238622, 0xca272a27, 0x5229b028, 0x0a2ac629, 0xa42bbe2a, 0x162ef42b, 0x682e442e, 0xf02f8e2e, 0x6a300c30, 0x1e31d230, 0xac315631, 0xec31de31, 
 | 
			
		||||
    0x3b000200, 0x15020000, 0x0300aa04, 0x2e000700, 0x2f0001b1, 0x0407b23c, 0xb132ed00, 0x3cdc0506, 0x820203b2, 0xb100220a, 0x20168303, 0x27168305, 
 | 
			
		||||
    0x010607b2, 0x01b23cfc, 0x33371783, 0x25112111, 0x3b211121, 0x61feda01, 0x9cfe6401, 0x56fbaa04, 0x8234043b, 0xfc0226ed, 0x03f5ff80, 0x20098280, 
 | 
			
		||||
    0x2e598201, 0x25210500, 0x0533fd21, 0x07b3f99a, 0x820b0b00, 0x03250815, 0x0f000902, 0xfd03f704, 0x25001b00, 0x00002f00, 0x32213001, 0x0e141516, 
 | 
			
		||||
    0x07060701, 0x16171615, 0x15011e17, 0x2f0b8214, 0x2123010e, 0x36322137, 0x2634013d, 0x33352123, 0x4d080985, 0x0a02012b, 0x8e7dbd01, 0x2020311f, 
 | 
			
		||||
    0x25251e1e, 0x132b1f20, 0x5f232214, 0xa217fe38, 0x483f1801, 0xe8fe3f48, 0x42423dfc, 0xfd03fc3d, 0x4f38778d, 0x030c0d32, 0x0d0d0208, 0x3f581c1c, 
 | 
			
		||||
    0x2735363c, 0x428b2c27, 0x423e313e, 0x2e393e88, 0x8f833e3a, 0x91003008, 0x6f066300, 0x0f00a903, 0x2b001700, 0x30250000, 0x30213027, 0x36233007, 
 | 
			
		||||
    0x16333712, 0x30011712, 0x30070623, 0x30012633, 0x30270011, 0x85133033, 0x02062f03, 0x02301107, 0xc7fe4cea, 0xbf2f8a49, 0x0382ab2f, 0x8dfe3408, 
 | 
			
		||||
    0xf73d3c06, 0xfe84023c, 0xcc9b17f7, 0x3794cb04, 0xe3631dce, 0x2e028ce3, 0xd2fd8c8c, 0xb9c9028c, 0xf0fdb9b9, 0xd4014a01, 0x018bfe28, 0x9afe6175, 
 | 
			
		||||
    0x82b3fe32, 0x03002182, 0xab3a0482, 0x61030007, 0x8c035803, 0x0000ba03, 0x27022637, 0x021d3033, 0x17041d17, 0x0290031d, 0x11a31491, 0x26f14782, 
 | 
			
		||||
    0x86957191, 0x17011e26, 0x37013e33, 0x86067341, 0x033d220d, 0x20028937, 0x850b8a04, 0x8211a317, 0x9126f129, 0x2e86a171, 0x07020633, 0x27022623, 
 | 
			
		||||
    0x2327012e, 0x8207010e, 0x22052d0d, 0x013e2726, 0x33011e37, 0x26343532, 0x26291883, 0x34352627, 0x16323336, 0x2b218217, 0x2223012e, 0x17141506, 
 | 
			
		||||
    0x011e1716, 0x15230285, 0x82250614, 0x2223223b, 0x26288227, 0x37342627, 0x823e3736, 0x2021823c, 0x352c8407, 0x1614011d, 0x3e373233, 0x23013d02, 
 | 
			
		||||
    0x23113335, 0x185e188e, 0x00cc0168, 0x040e0434, 0x030e040c, 0x7b0e390e, 0x030e390f, 0x030d030f, 0x61cc040e, 0x18640127, 0x0e7a1962, 0x205c833a, 
 | 
			
		||||
    0x3b5c820c, 0x020f3c0f, 0x276e4bf0, 0x1d0c2f0b, 0x2a77314d, 0x0a240934, 0x702a2b5a, 0x24634865, 0x3c081382, 0x3731401a, 0x31161637, 0x30092409, 
 | 
			
		||||
    0x13161544, 0x0c430274, 0x34484f09, 0x20212b2c, 0x12121213, 0x3d5f2222, 0x1e38375a, 0x3c461153, 0x48505048, 0x271a1a1e, 0x5adf7c16, 0xbe0170b7, 
 | 
			
		||||
    0x10b8cd70, 0x47014d00, 0x19681a2d, 0x44196719, 0x44441001, 0x8244f0fe, 0x6819220a, 0x5b01101a, 0x47414701, 0x70af084d, 0x457042fe, 0x1a451301, 
 | 
			
		||||
    0x67191967, 0xedfe451a, 0x36380b45, 0x290b2a0b, 0x2f2c6d2c, 0x0207020d, 0x512d2c15, 0x3431615c, 0x250b290a, 0x2a342d24, 0x020c1516, 0x1f0b0208, 
 | 
			
		||||
    0x293f1717, 0x306e6865, 0x2a13133e, 0xb8424229, 0x2a2a4242, 0x47262728, 0x5c393131, 0x5c52a452, 0x31210908, 0xfe573b1e, 0x0700009e, 0x02ff5200, 
 | 
			
		||||
    0x1a05ae06, 0x24001a00, 0x49003800, 0x78005300, 0x00008000, 0x35262205, 0x023e3734, 0x07063337, 0x010e0706, 0x013e3307, 0x15163233, 0x32270614, 
 | 
			
		||||
    0x2334013d, 0x14011d22, 0x27022603, 0x17121633, 0x36331716, 0x82123637, 0x0702272a, 0x21112321, 0x27831732, 0x23130727, 0x2327012e, 0x07794837, 
 | 
			
		||||
    0x22011527, 0x012e2726, 0x222a8234, 0x82333637, 0x06172123, 0x080b5845, 0x1e373698, 0x010e1701, 0x15011105, 0x35011101, 0x6d6ba201, 0x4f3a0f10, 
 | 
			
		||||
    0x2a3b8a31, 0x251d1e2a, 0x47110c09, 0x6e5f5131, 0x6c6d6d6a, 0x2183211f, 0x1450136b, 0x0e0c0e0e, 0x144e140e, 0x20832169, 0x01658f01, 0x2b2c5609, 
 | 
			
		||||
    0x71803a39, 0x78175608, 0x2626249b, 0xad029b24, 0x21225d3a, 0x22212323, 0x563b2e2e, 0x0d1f3333, 0x353e1249, 0x444c4c44, 0x0f124236, 0x69200e38, 
 | 
			
		||||
    0x2801e4fe, 0xd8fe72fe, 0x3c7f84fd, 0x606f3c3d, 0x28292d22, 0x32562829, 0x676a312f, 0x7755776a, 0x02827719, 0x18035608, 0x6fbf0170, 0x46e7fe46, 
 | 
			
		||||
    0x4e4f4f4e, 0x46190146, 0x7041fe6f, 0x34339e02, 0x11604d60, 0xc913e7fe, 0x2a265536, 0xde262a3e, 0x2a278efe, 0x84b6842a, 0x14142a2a, 0x074a2525, 
 | 
			
		||||
    0x5f323929, 0x5e53a152, 0x21083b36, 0xb24e4a09, 0x100134fe, 0x0192fe82, 0x82effecd, 0x3f008200, 0x00200004, 0x03e006ab, 0x000b0061, 0x004a0015, 
 | 
			
		||||
    0x37000074, 0x21301130, 0x06141632, 0x0119012b, 0x2008b749, 0x05ce4601, 0x16171622, 0xd0461282, 0x012e2806, 0x023e3435, 0x46173233, 0x072c08d1, 
 | 
			
		||||
    0x16141506, 0x011e011f, 0x020e1415, 0x2105cd46, 0x2485022e, 0x46171621, 0x36230cc6, 0x46013e37, 0xd10806c8, 0x5d200121, 0xb45d6666, 0x2f2e2aad, 
 | 
			
		||||
    0xdd02ad29, 0x0c2a7655, 0x2b230d32, 0x4141362b, 0x270a3b2e, 0x2162620a, 0x4c36563d, 0x0d283738, 0x4b1a0d32, 0x20203938, 0x643c3734, 0x5a3f205d, 
 | 
			
		||||
    0x0a04dd02, 0x663c4c5e, 0x4d2a294a, 0x7d5a426c, 0x51135923, 0x6161503d, 0x1d1c2050, 0x8a191616, 0x02b75ff3, 0x6db96d9e, 0x6a01f5fe, 0x292e282b, 
 | 
			
		||||
    0x3db6fd2b, 0x0c2f0b34, 0x3a17162b, 0x0c2e2731, 0x12020702, 0x482c515c, 0x1a1b1b31, 0x0b2d0b32, 0x18172921, 0x0b292a2c, 0x505d130c, 0x1d374d2f, 
 | 
			
		||||
    0x2d403171, 0x54548257, 0x502e5881, 0x3b2f3447, 0x5d6e5d66, 0x10080966, 0x34202f0f, 0x009bfe5d, 0x002e0005, 0x03d206ab, 0x00120061, 0x002a001f, 
 | 
			
		||||
    0x00460134, 0x68422500, 0x013e2807, 0x14021e32, 0x4227020e, 0x222a0583, 0x14011d06, 0x21110516, 0x5e411732, 0x2e052c0f, 0x1d232701, 0x0f1d1707, 
 | 
			
		||||
    0x870e1d17, 0x820b8502, 0x11013305, 0x16331123, 0x011e1712, 0x053d3317, 0x270f3d27, 0x02870e3d, 0x042d0b88, 0x23113311, 0x33010226, 0x2223603c, 
 | 
			
		||||
    0x3a028223, 0x44607a5f, 0x61442323, 0x4f4f483c, 0x014f4f90, 0x560901df, 0x56572b2c, 0x82259aa3, 0x029a2600, 0x09220863, 0x0732440c, 0x21756228, 
 | 
			
		||||
    0x23082285, 0x10880d08, 0x85217623, 0x074c42ac, 0x5428282d, 0x5484b684, 0x525d5a27, 0x845d52a2, 0x024f3304, 0xc134339e, 0x01f1fe67, 0x3d2a2569, 
 | 
			
		||||
    0x15b22629, 0x7f441553, 0x284dae4d, 0x0270fe02, 0xf4fe439e, 0x80884043, 0xfd900126, 0x0c014362, 0x3a055f43, 0x065400a5, 0x00b8035b, 0x0048002f, 
 | 
			
		||||
    0x005e0054, 0x23302500, 0x2223010e, 0x4435022e, 0x3e43078a, 0x49062008, 0x362106e3, 0x35018237, 0x3523013d, 0x01231121, 0x15163221, 0x0e070614, 
 | 
			
		||||
    0x1e150701, 0x0b821702, 0x020e0730, 0x33372123, 0x3d363732, 0x26273401, 0x5d4d012b, 0xe541080a, 0x60740e04, 0x345c804a, 0x43303035, 0x9c715343, 
 | 
			
		||||
    0x124a122b, 0x634d6518, 0x28637979, 0x1b1b2424, 0x01ac1010, 0x0601772f, 0x77697201, 0x3415141b, 0x353d1a1a, 0x10111311, 0xfe2f4f39, 0x35e98768, 
 | 
			
		||||
    0x0800821e, 0xd2e9356a, 0x33373733, 0x503de2d2, 0x6aa26d38, 0x3738a268, 0x59631c1c, 0x3b0b2b0b, 0x88757f49, 0x0b0a7f75, 0x1e1d1413, 0xfe754127, 
 | 
			
		||||
    0x76460341, 0x15422f62, 0x07031415, 0x242f1601, 0x2c323525, 0x7525412d, 0x29331c1b, 0x711c1b34, 0x30273033, 0x00000033, 0x00350005, 0x03cb06ab, 
 | 
			
		||||
    0x001f0061, 0x00530046, 0x00660060, 0x26222500, 0x2c131b44, 0x011e3736, 0x06070617, 0x012e2221, 0x23218227, 0x013e3736, 0x82050646, 0x32072a14, 
 | 
			
		||||
    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, 0xac8e2307, 0x8154a9b1, 0x4b4d2e58, 0x6a393032, 0x6a5d665d, 0x2309313f, 0x29294909, 
 | 
			
		||||
    0x30304424, 0x3680493d, 0x291c5336, 0x29282627, 0x01362d2d, 0x1b231501, 0x4d371c0f, 0x3c53332f, 0x3d3e5821, 0x843e3d0d, 0x4d2f0804, 0x014a5d83, 
 | 
			
		||||
    0x3afe4a2a, 0x01d88355, 0x00ed3b63, 0xff4b0008, 0x05b50608, 0x000c0015, 0x001c0016, 0x005c0028, 0x00720068, 0x1700009b, 0x44301130, 0x01211235, 
 | 
			
		||||
    0x23ec8311, 0x15211133, 0xa6450187, 0x2d754c06, 0x2406b44c, 0x13331323, 0x2a0b8503, 0x2533010f, 0x2337013e, 0x8207010e, 0x82138202, 0x1e232702, 
 | 
			
		||||
    0x23111701, 0xaf4c3311, 0x82332005, 0x2902821e, 0xb0231133, 0x2c560901, 0x5644582c, 0xca013007, 0x0186f466, 0x01e1fe85, 0x01fdfe03, 0x4be7fa1f, 
 | 
			
		||||
    0x25210cdd, 0x07dd4b09, 0x0c2e0c22, 0x0811dd4b, 0x22093830, 0x2309e109, 0x81c96408, 0x0e04f1ca, 0x0e030d03, 0x02b03b04, 0x010402d0, 0x071f080b, 
 | 
			
		||||
    0x15165716, 0x1f081557, 0x05010b08, 0x12786201, 0x0b821248, 0x03820920, 0x47125408, 0xf8627712, 0x33349f02, 0xf1fe67c2, 0x29266901, 0xfd25293e, 
 | 
			
		||||
    0xfd9f02bc, 0x9f025abb, 0xcf58c45a, 0x3957035a, 0x0b2b0b35, 0x2c6e2c2a, 0x08020c2f, 0x2c2d1402, 0x31605d51, 0x0a290a34, 0x342d2524, 0x0b16162a, 
 | 
			
		||||
    0x0a030802, 0x3f171720, 0x0b696429, 0x821f7c1f, 0x33408202, 0x11e00161, 0x41101041, 0x1390d311, 0x4b13144c, 0x2db62d13, 0x13220282, 0x0b821349, 
 | 
			
		||||
    0x0263fe29, 0x279d279f, 0x82165816, 0x2c088202, 0x000061fd, 0x29000400, 0xd706ab00, 0x05534703, 0x46003a22, 0x471a5347, 0x1d261140, 0x16171401, 
 | 
			
		||||
    0x04433233, 0x41252007, 0x21080adc, 0x5e200129, 0xb35d6665, 0x2e2e29ad, 0x0f03ad29, 0x49269584, 0x3b574169, 0x3d0f223b, 0x3b48110f, 0x00822c4e, 
 | 
			
		||||
    0x4c3c4e35, 0x0f3a0e13, 0x013d3c22, 0xfeae012d, 0xfe2301bf, 0x474101dd, 0xb1341005, 0x598154a9, 0x4b26272d, 0x30082208, 0x5d353539, 0x35355d66, 
 | 
			
		||||
    0x2a07c642, 0x609e020b, 0x60c460ba, 0x51030000, 0x082e825f, 0x02ff6d01, 0x1a059305, 0x55004400, 0x91826d00, 0xab009e29, 0xe300d500, 0x47250000, 
 | 
			
		||||
    0x232c0558, 0x2e070622, 0x37362701, 0x3637013e, 0x22051b44, 0x52020e07, 0x0621098f, 0x2a018207, 0x022e2223, 0x17163727, 0x481e1716, 0x352109d6, 
 | 
			
		||||
    0x06644401, 0x023e3737, 0x10163233, 0x3e322706, 0x34013d02, 0x0e22022e, 0x1d060701, 0x05a14f01, 0x02252582, 0x37363435, 0x05f24835, 0x42823220, 
 | 
			
		||||
    0x2405634a, 0x15011e15, 0x476b8214, 0x13200ce1, 0x200bee47, 0x211e8325, 0x99822307, 0x22230282, 0x82062726, 0x2223232d, 0x4f822e27, 0xb0833720, 
 | 
			
		||||
    0x4c853320, 0xc9880720, 0x55087382, 0x3e4b0216, 0x30313a3c, 0x300c1743, 0x14130f0c, 0x2b202133, 0x213a502f, 0x2f240a0a, 0x1a191d1a, 0x22161313, 
 | 
			
		||||
    0x2c2d1f1f, 0x36472f36, 0x0c500f2a, 0x11120e0e, 0x413e1c2e, 0x02473f45, 0x3c5c3e98, 0x0e0f0f0e, 0x7d3e5c3c, 0x237d7676, 0x0e0e1e31, 0x3145311e, 
 | 
			
		||||
    0x0082071f, 0x100fb308, 0x3bf8fd31, 0x4a1f3d59, 0x1e3e343c, 0x29685337, 0x0f0f3829, 0x4a3d343f, 0x5a3c1010, 0x42423c3a, 0x3d424279, 0x6f3b3b37, 
 | 
			
		||||
    0x52033a3a, 0x56451616, 0x5b389029, 0x0d2d2122, 0x0a010501, 0x30260e0e, 0x24242a20, 0x11101d35, 0x36561f1f, 0x3c2c2b38, 0x3bec1011, 0x3b3a4241, 
 | 
			
		||||
    0x35994141, 0x312e0729, 0x2a0a262c, 0x1415160a, 0x17090a1d, 0x2028412d, 0x1928191a, 0x0d060406, 0x3914150d, 0x1a482c25, 0x140e0e19, 0x3e172c21, 
 | 
			
		||||
    0x0c111114, 0x343a0d0c, 0x5c363407, 0x582f6afe, 0x52534040, 0x2f594041, 0xb6b8feb7, 0x49331c5c, 0x482c752c, 0x341c1c34, 0x09822424, 0x23252e08, 
 | 
			
		||||
    0x031c1a1a, 0x47341d06, 0x1151432a, 0x3a4e1307, 0x192d4026, 0x202d0c0d, 0x4e3a2620, 0x51110713, 0x24232a43, 0x38571d34, 0x37321332, 0x27048237, 
 | 
			
		||||
    0x303a0138, 0x302e102e, 0x2a080484, 0x4041491f, 0x291b556b, 0x5a28284e, 0x14010136, 0x0f1b1212, 0x4c360f0e, 0x2b2a3230, 0x12221e1d, 0x30304413, 
 | 
			
		||||
    0x0e3c3f93, 0x823e3e3c, 0x003f2104, 0x04370082, 0xb7007800, 0x56038806, 0x27000f00, 0x40003700, 0x30010000, 0x84233011, 0x30352a03, 0x30153021, 
 | 
			
		||||
    0x30353013, 0x830f8a33, 0x8233201b, 0x30212217, 0x54278227, 0x0e3c0c81, 0x2e330701, 0x6cac0101, 0x53fc01c8, 0x24015b5b, 0x2b025c5c, 0x6f3afb3c, 
 | 
			
		||||
    0x88269926, 0x43080382, 0x1005d7fe, 0x10c61041, 0xfdf50240, 0x603e02c2, 0x58c2fd60, 0x5858ee01, 0xb55812fe, 0xbe0170b5, 0x42fe7070, 0x313a0270, 
 | 
			
		||||
    0xc53131c5, 0x00050000, 0x06ab0008, 0x006103f8, 0x003e0034, 0x00500046, 0x37000058, 0x2a329f4b, 0x23072327, 0x12163313, 0x86230117, 0x081190a1, 
 | 
			
		||||
    0x7655fd42, 0x0d310d2a, 0x372b2b23, 0x3a2e4140, 0x620a280a, 0x563c2262, 0x38384c36, 0x0d320d27, 0x3a374b1a, 0x36341f20, 0x215d653c, 0xd0025a3e, 
 | 
			
		||||
    0x6e3bfa3d, 0x982689e4, 0x04d7fe26, 0xc5104011, 0x28034010, 0xac201391, 0x242c824b, 0x02b5b50b, 0x0a00419e, 0x8ef7fd21, 0x82002010, 0x00033400, 
 | 
			
		||||
    0x06ab0060, 0x006103a0, 0x002b0015, 0x2500004b, 0x46300330, 0x06240eaa, 0x35210702, 0x2013b141, 0x1d874805, 0xdb3c012d, 0x12471270, 0x040b2b0a, 
 | 
			
		||||
    0x820b2b0b, 0x256d2509, 0x4b012595, 0x2605c741, 0x96838401, 0x48684a26, 0xb7281461, 0xdd379e02, 0x279b2737, 0x08820282, 0xd641c383, 0x480b2007, 
 | 
			
		||||
    0xcb821741, 0x4700042a, 0xb906b700, 0x0b005603, 0x2122cd82, 0x3f462900, 0x0a1b4618, 0x23110128, 0x21352311, 0x4c4d4815, 0x2e292807, 0x02ad292e, 
 | 
			
		||||
    0x46ad0114, 0x01250702, 0x01c86c7b, 0x0f0846fc, 0xea45c120, 0x3e022106, 0x82057942, 0x4f06207f, 0x1e340893, 0x3d002700, 0x58004e00, 0x00007e00, 
 | 
			
		||||
    0x26272205, 0x36373435, 0x30250184, 0x07020e33, 0x05944f06, 0x954f1720, 0x1d222408, 0x4f011401, 0x12560694, 0x4f06200a, 0x0e212d96, 0x12974f01, 
 | 
			
		||||
    0x6b7a033f, 0x0f103736, 0x28271d1d, 0x553b8a31, 0x0a12123a, 0x3147110c, 0x6e2f3051, 0xfed96d6a, 0x06924f09, 0x05130426, 0x0512050c, 0x2212944f, 
 | 
			
		||||
    0x4f144d14, 0x0e221794, 0x954f0e3a, 0x42fd350e, 0x3d3c7f42, 0x3038363d, 0x522d232f, 0x332a2b50, 0x3535312f, 0x2213904f, 0x821a691a, 0x11924f02, 
 | 
			
		||||
    0x2eb62e22, 0x2215924f, 0x4f082008, 0x003c0d93, 0xff170106, 0x05e90508, 0x000b0015, 0x002d0017, 0x0055004b, 0x0500005f, 0x33301130, 0x21220382, 
 | 
			
		||||
    0x07841530, 0xc6500b87, 0x34353305, 0x013e3736, 0x1e171632, 0x07061401, 0x3227010e, 0x01823736, 0x34013d2b, 0x2e272627, 0x06222301, 0x46018207, 
 | 
			
		||||
    0x052107bf, 0x12d14f11, 0x016ccc24, 0x03826311, 0x10fd2208, 0x26266a42, 0x26262929, 0x256b836a, 0x262a2a26, 0x26416b25, 0x0d161740, 0x160d0c0c, 
 | 
			
		||||
    0x28264017, 0x220b873f, 0x48f4013f, 0xf8250c83, 0xc1fd9f02, 0x2b048460, 0x2c2d5703, 0x5455822b, 0x2d2c2b82, 0xa9200983, 0x612d0883, 0x2519191b, 
 | 
			
		||||
    0x2e692e25, 0x19192525, 0x2f0c8c1b, 0x6e9f0256, 0xf5fe6eb8, 0x282c6a01, 0x002c282e, 0x0036f082, 0x06ab000a, 0x006103f6, 0x00300012, 0x0044003a, 
 | 
			
		||||
    0x2500004a, 0x40502e22, 0x07494f06, 0x112fe6af, 0x15211133, 0x6a422c01, 0x4c29294c, 0x8541426a, 0x21e09b07, 0x6449665d, 0x02220808, 0x10016d13, 
 | 
			
		||||
    0x82572dac, 0x58825454, 0x82582d2d, 0x2d5782a8, 0x191a1b60, 0x6a2e2425, 0x1925242e, 0x0c8c1b1a, 0x6d505520, 0x02c1280e, 0x60c2fd9e, 0x82040000, 
 | 
			
		||||
    0x06ab2ccb, 0x006103b6, 0x00220013, 0x4366002d, 0x302306d3, 0x88213015, 0x30112603, 0x32333001, 0x24e88317, 0x2b060701, 0x05ba5201, 0x2b262724, 
 | 
			
		||||
    0x4d581101, 0x077e5106, 0x27262724, 0x0282012e, 0x37343522, 0x230d8051, 0x17141506, 0x08068051, 0x07060724, 0x014a010e, 0x01cafea3, 0x01edfe13, 
 | 
			
		||||
    0x3441edc3, 0x29294a34, 0x4134344a, 0x5c4beded, 0x804b2e2e, 0xde45dc02, 0x2a242705, 0x4140372b, 0xdf451717, 0x11112405, 0x4535563d, 0x2b0807e0, 
 | 
			
		||||
    0x3f3a384a, 0x3c361a1a, 0x10115d65, 0xb759201f, 0xba609e02, 0x02dcfe60, 0x5415159e, 0x547da87d, 0x5e601515, 0x2f5b6c5b, 0x6b22fe2f, 0x210ad645, 
 | 
			
		||||
    0x5a511717, 0x24242107, 0x08095b51, 0x2a2c2f29, 0x0c0b1514, 0x2f515c13, 0x1c1b2627, 0x0400001d, 0x63008f00, 0xa9037106, 0x2f001500, 0x43003900, 
 | 
			
		||||
    0x30250000, 0x50333001, 0x535a06ec, 0x02062806, 0x32210107, 0x49141516, 0xdf840bd4, 0x37212322, 0x4f08a252, 0x012e0906, 0x8dedfea2, 0x0f165916, 
 | 
			
		||||
    0x0f050b36, 0x09820b38, 0xb92f8937, 0x01c2012f, 0x1b776873, 0x19193429, 0x1b1a1f1e, 0x1c111024, 0x06f54e1d, 0x4e3c3c21, 0x633407f3, 0xfe454603, 
 | 
			
		||||
    0xc53645ec, 0x25c83729, 0x45140145, 0x8cd2fd8c, 0x3605e44e, 0x0703142a, 0x170b0b01, 0x32354918, 0x21202d2c, 0x33377525, 0x4e373429, 0x013409e3, 
 | 
			
		||||
    0x0508ff32, 0x001405ce, 0x00330026, 0x008a0078, 0x0500009b, 0x202ec44e, 0x41d14a01, 0x27012e32, 0x11231123, 0x011e1333, 0x33113317, 0x35212311, 
 | 
			
		||||
    0x0e260482, 0x27260702, 0x10823736, 0x02153008, 0x3d573870, 0x222c1010, 0x902a5523, 0x222d2d39, 0x0c171721, 0x0a010501, 0x1f31251c, 0x1e35472b, 
 | 
			
		||||
    0x35573d22, 0x7542423a, 0x44024141, 0x4a393b3f, 0x13210888, 0x06884a34, 0x230a0b22, 0x0807884a, 0x1f1f233c, 0x2f362c2c, 0x0f293747, 0x0e0e0d4f, 
 | 
			
		||||
    0x1d2d1211, 0x4045413e, 0x08b2fd47, 0x68030e34, 0x340edb79, 0x79670308, 0x08bc4301, 0x123e3417, 0x56554002, 0x25f8a3a5, 0x3c303044, 0x284f8149, 
 | 
			
		||||
    0x1447080d, 0x1d0f1b24, 0x332f4d36, 0x59223c53, 0x3c0d3d3e, 0x0d3c3f3f, 0x3d013e3d, 0x2e072935, 0x0a262b31, 0x14160a2a, 0x09091e14, 0x28402d17, 
 | 
			
		||||
    0x271a1a20, 0x06050619, 0x15140e0c, 0x482c2538, 0x0e0e1a1a, 0x172b2115, 0x4a10153f, 0x35080659, 0x035c3633, 0x1b63104a, 0x9e0200fe, 0x631b8dfe, 
 | 
			
		||||
    0xfd010210, 0xf5015a62, 0x13433818, 0x5d5c3a02, 0x005abcfd, 0x001b0003, 0x03e506ab, 0x00390061, 0x007f005c, 0x47492500, 0x0568430d, 0x26272622, 
 | 
			
		||||
    0x54106943, 0x07260aea, 0x010e0706, 0x1d472221, 0x013e2305, 0xd0513233, 0x5636200f, 0x22a2055b, 0x54100127, 0x320d2a77, 0x0570490c, 0x2c069143, 
 | 
			
		||||
    0x11113131, 0x4c36573c, 0x0c273837, 0x0b734933, 0x10112308, 0x025a1f1f, 0x13958429, 0x68252413, 0x22765742, 0x120f3d0f, 0x584e3a48, 0x4c3c4e58, 
 | 
			
		||||
    0x0f3a0f12, 0x1e9e7922, 0x430b8b49, 0x2e2306b4, 0x432c512e, 0x17230bb5, 0x552a2d17, 0x272d0611, 0x1d1c1b26, 0x4154a9b1, 0x2e2c2c40, 0x053b4e4d, 
 | 
			
		||||
    0x200a0051, 0x281a9a52, 0x00050000, 0x06ab004f, 0x092b55b1, 0x55400021, 0x0122342b, 0x02823521, 0x15212808, 0x21070206, 0x603d5401, 0x23232222, 
 | 
			
		||||
    0x79602222, 0x24244460, 0x483c6044, 0x4f904e4e, 0x01de014f, 0x2c2b5709, 0x57a35757, 0x032e0589, 0x0141fe60, 0x01cdfe42, 0x36d636a6, 0xd9544c01, 
 | 
			
		||||
    0xfd2a082b, 0xea015bbc, 0xfe525b59, 0x070052ba, 0x08ff2e00, 0x1505d206, 0x33001c00, 0x53004700, 0x73005d00, 0x00009100, 0x30070637, 0x034c3015, 
 | 
			
		||||
    0x30113205, 0x36373633, 0x06333037, 0x17121607, 0x01012e23, 0x0ae54511, 0x230cf145, 0x33302726, 0x20062949, 0x22cf8233, 0x57013011, 0x2e21187d, 
 | 
			
		||||
    0x2df34701, 0x42f73608, 0x046d6d1a, 0x5a5a1848, 0x32ae417f, 0x278316ba, 0x01a50192, 0x01c0fead, 0x01ddfe23, 0x74220140, 0x6d1b7c73, 0x6c1b031b, 
 | 
			
		||||
    0xa418781b, 0x014afb2d, 0x65655e20, 0x075d505e, 0x14481720, 0x41230829, 0x02d01e4b, 0x5cacfe9f, 0x4d6d6d1e, 0xe8fe4bce, 0xfee13d21, 0x609f02e2, 
 | 
			
		||||
    0x60c460bb, 0xcbcc0801, 0x8232c732, 0xfe292702, 0xf6fe4ee2, 0xf8476203, 0xb5fd210d, 0x212d3748, 0x83620000, 0x0005358f, 0x0608ffca, 0x00150536, 
 | 
			
		||||
    0x0017000f, 0x00660033, 0x05000092, 0x2a11054e, 0x33300706, 0x012e0526, 0x4e302327, 0x33260549, 0x011e1330, 0xe7493317, 0x30232106, 0x21106359, 
 | 
			
		||||
    0x62592726, 0x05ad5a0a, 0x230d6159, 0x33270226, 0x16214282, 0x078e5317, 0x27069c53, 0x33373637, 0x23070206, 0x262f6c82, 0x07062327, 0x0207010e, 
 | 
			
		||||
    0x3afb3df8, 0x4e98266e, 0x30340770, 0x0230c631, 0x08340e19, 0xdb796802, 0x030e3408, 0x5bfc7967, 0x48057c44, 0x2e35050e, 0x621e1e3a, 0x563d2262, 
 | 
			
		||||
    0x38374c36, 0x1a490327, 0x1f3a384a, 0x07eb4d20, 0x90015e08, 0x6e1a6a1a, 0x18092e0d, 0x24080317, 0x0f360b0a, 0x0a360e79, 0x03092309, 0x6b232331, 
 | 
			
		||||
    0x7a1b6e1c, 0x1910390d, 0x19190219, 0xf80d3b10, 0x0170b6b6, 0xfe7070bf, 0x3b027041, 0x34949494, 0xfd0f641b, 0xfe9f02ff, 0x1b640f8d, 0x61fd0102, 
 | 
			
		||||
    0x343d5703, 0x2b0b2f0c, 0x313a1616, 0x060b2e27, 0x06945905, 0x321b1a35, 0x28224102, 0x2a2c1717, 0x130d0a2a, 0x4d2f515c, 0x830b1e36, 0xdb3b334b, 
 | 
			
		||||
    0x1e706f2d, 0xdc2b2998, 0x2bdc3c3c, 0xde259425, 0x5f83a2a1, 0x3fea3223, 0x37008266, 0x0032ea3f, 0xff180104, 0x05e8050e, 0x001b000f, 0x0043003a, 
 | 
			
		||||
    0x25000057, 0x221a7d41, 0x54233021, 0x072405fc, 0x37013e23, 0x98430a82, 0x010e2708, 0x01011e07, 0xc5433311, 0x41112007, 0x33200676, 0xb5432782, 
 | 
			
		||||
    0xcd360806, 0x030c320c, 0x0ddb7867, 0x68030c31, 0x7f3f0379, 0x021b6d1b, 0x781b6b1b, 0x23249124, 0x1980238b, 0x1a021966, 0x24781a67, 0x9325248c, 
 | 
			
		||||
    0x016cd9fb, 0x26010111, 0x8043269a, 0x77230807, 0x81279a27, 0xfd185f17, 0xfe9e02ff, 0x175f188e, 0x62fd0002, 0x2c2cb22d, 0xe5392db2, 0x36db3639, 
 | 
			
		||||
    0x8229a729, 0xda363e02, 0x03e63936, 0xfd9e0229, 0x080160c2, 0x430f0144, 0x3131c732, 0xfe4332c7, 0xf6fe43f2, 0x22008200, 0x82360106, 0x82ca20f3, 
 | 
			
		||||
    0x00142ff3, 0x002a001e, 0x00460032, 0x05000052, 0x57442330, 0x14152205, 0x20cb8206, 0x0f195d17, 0x07232722, 0x50083065, 0x0221070b, 0x0e3f4f03, 
 | 
			
		||||
    0x21030222, 0x3a0b704e, 0x21016da3, 0x4142685a, 0x79186118, 0x85165a16, 0x2f2e2aac, 0xb603ac29, 0x423bfa3d, 0x10340a66, 0x10c51040, 0x6e79fd40, 
 | 
			
		||||
    0x4811716e, 0x0a2b0b11, 0x0b2c0b04, 0x6e240982, 0x68016f70, 0x08099c4e, 0x9e02f220, 0x5f485d6c, 0x2fbc2f14, 0x5b2db52d, 0x282e292b, 0x96fed52b, 
 | 
			
		||||
    0x0170b6b6, 0xfe6f6fbf, 0xfd507041, 0x59012506, 0x4f014f01, 0x240b554f, 0xb1feb1fe, 0x07ae5402, 0x00020030, 0x066300a9, 0x00a90357, 0x0033001d, 
 | 
			
		||||
    0xd3412500, 0x51062005, 0xb641058d, 0x0516210e, 0x49050d50, 0x40080819, 0x15303330, 0xa0760330, 0x04139027, 0x18966464, 0xbc3335c2, 0x7f20a017, 
 | 
			
		||||
    0x81200220, 0xbe179620, 0x2d018a33, 0x411c0aeb, 0x5003164f, 0xccce4195, 0x20ed4163, 0x0127a7a7, 0x014f5333, 0xd0342426, 0x34028234, 0x4fdbfe24, 
 | 
			
		||||
    0x0271d7d7, 0x54461e72, 0xa1480217, 0x712bfd47, 0xe71e1000, 0x06348101, 0x02ff2801, 0x1a05d805, 0x25000f00, 0x56004300, 0x7c007400, 0x4f11d353, 
 | 
			
		||||
    0x0120335b, 0x512ba14e, 0x022807a6, 0x01c76d67, 0x417301fb, 0x2107704f, 0x824f6b82, 0x416b2205, 0x09794f27, 0x40272725, 0x820d1616, 0x16162c00, 
 | 
			
		||||
    0x41d0fd40, 0x29294c6b, 0x87416b4c, 0x41262107, 0x41341c87, 0x163f2826, 0x0d0d0c17, 0x3f16170c, 0xc86ced02, 0x4c01fc01, 0x3605cf51, 0x2b2db7fd, 
 | 
			
		||||
    0x5554822c, 0x2d2c2c81, 0x812c2c2d, 0x2b2c82a9, 0x4e1a612d, 0x252106c0, 0x05c04e24, 0x4e252421, 0x1a2406cd, 0x572d0103, 0x58232e83, 0x82582d2d, 
 | 
			
		||||
    0x8a57202c, 0x09c24f2b, 0x2205f94e, 0x52e8011a, 0x07360833, 0xfdfe3300, 0x0905c206, 0x16000c00, 0x61003c00, 0x9c008600, 0xb95aa200, 0x0f8b6119, 
 | 
			
		||||
    0x2014f451, 0x06835a01, 0x5a010b21, 0x24a51a7f, 0x1614112c, 0x11353632, 0x07141133, 0x934d020e, 0x5b112005, 0x0124063e, 0x2b2c5709, 0x2a08284a, 
 | 
			
		||||
    0x5e3aad02, 0x23232121, 0x612f2121, 0x1d5205b2, 0x390e390c, 0x0269200e, 0x010501c3, 0x081f080b, 0x1f078282, 0x04010b08, 0x13786201, 0x29058b5a, 
 | 
			
		||||
    0x12082007, 0x62771247, 0x2282c0fb, 0x1d820c20, 0x08828226, 0x020c081e, 0x12222283, 0x33821249, 0x20080825, 0x82481207, 0x64013322, 0x65388e38, 
 | 
			
		||||
    0x58350c0c, 0x0c36577f, 0x6636020c, 0xc15af8f4, 0xb120080f, 0x842a2b27, 0x2b2a83b6, 0x25251413, 0x0820084a, 0x535e3239, 0x365e53a1, 0x0821093c, 
 | 
			
		||||
    0xa8014f4a, 0x2305925a, 0x1001f0fe, 0x2117905a, 0x23a1ff04, 0x9f023208, 0x4d514efe, 0xb201514d, 0x32445efe, 0x1f1f4132, 0x44323241, 0x61fda201, 
 | 
			
		||||
    0xbbfd9f02, 0x0000005a, 0xff4d0104, 0x05b30502, 0x0017001a, 0x008b0051, 0x059f529d, 0x4a09bb50, 0xaa5009d5, 0x23414d14, 0x4d0efe48, 0x0120297a, 
 | 
			
		||||
    0x2110f14e, 0x5a468501, 0x4b013809, 0x0c2a7654, 0x2a240c32, 0x4240362c, 0x0a3b1717, 0x31610a28, 0x48111031, 0x0c2306d9, 0x621a0c33, 0x3b290653, 
 | 
			
		||||
    0x10105d65, 0xfd5a1f20, 0x2332848b, 0x2b2b230d, 0x272e3286, 0x3131620a, 0x563c1111, 0x37384c36, 0x32890d28, 0x82643c21, 0x1f1f2b32, 0x0ce2015b, 
 | 
			
		||||
    0x68020d31, 0x0682db79, 0x79670323, 0x069246f2, 0x343d0b32, 0x2b0c2e0c, 0x31391616, 0x0b171827, 0x12020702, 0x250d5e4d, 0x17172822, 0x5e4d2b2c, 
 | 
			
		||||
    0x6203210b, 0x012133b1, 0x0f3c487e, 0x0000002f, 0x00cf0002, 0x03310654, 0x003400b8, 0x10d94e4a, 0x666a2620, 0x08805c05, 0x52095e4a, 0x0e220740, 
 | 
			
		||||
    0x35430102, 0x2787080d, 0x1135022e, 0x946a0202, 0x0f3f0f34, 0x4436352d, 0x493a5250, 0x3d7b2525, 0x6b4c2a3d, 0x46465e44, 0x21045b31, 0x2847465d, 
 | 
			
		||||
    0x44202128, 0x29747e4b, 0xf901704e, 0x8551c552, 0x764b1110, 0x4b3b3bae, 0x404d5521, 0x360f3a0f, 0x3d481b1c, 0x070e3a31, 0x393a1706, 0x3e593865, 
 | 
			
		||||
    0x3e212121, 0x322a0351, 0x34381c1d, 0x100d1a1a, 0x3a657318, 0x03254461, 0x6bfcfd54, 0x026b6c6c, 0x5c11fe04, 0x2b574443, 0x86581615, 0x82ef015c, 
 | 
			
		||||
    0x732d10db, 0x0a393d07, 0xf60608ff, 0x0e001505, 0x2b001800, 0x53004900, 0x63005d00, 0x30010000, 0x09505c33, 0x7e5a2b20, 0x2b262306, 0xe24c1101, 
 | 
			
		||||
    0x146b5c2c, 0x1133113a, 0x76021521, 0x256841ed, 0x25292925, 0xed416825, 0x5c5c4bed, 0x49fe804b, 0x3c3a985b, 0x292ba701, 0x7ea77e2a, 0x602b292a, 
 | 
			
		||||
    0x5b6b5b5f, 0x0221fe5f, 0x82572df7, 0x57825455, 0x2007822d, 0x290682a9, 0x19191b61, 0x692f2425, 0xbf4c242f, 0x5c0c8807, 0xfd2e0e82, 0xfd9f02c0, 
 | 
			
		||||
    0x050061c2, 0xab000300, 0xa756fd06, 0x5659200a, 0x052034a7, 0x2024bd4c, 0x11c05608, 0x200dae6b, 0x06c056a4, 0x744c9620, 0x83072105, 0x2007744c, 
 | 
			
		||||
    0x0f006761, 0x3a2bd456, 0x134c13a7, 0xfe124b13, 0x121101ef, 0x4a13124a, 0x0263fe13, 0x279c279e, 0x82165916, 0x22088202, 0x820062fd, 0x00033100, 
 | 
			
		||||
    0x06ab0022, 0x006103de, 0x0033001b, 0x1300006c, 0x561c4153, 0x114c15e7, 0x012e2114, 0x5c105259, 0xd7200fbc, 0x28054d53, 0x0c320cdb, 0x01796803, 
 | 
			
		||||
    0x0abc5640, 0xb85c4c20, 0x2a02212f, 0x240a214b, 0xfd010218, 0x09a14b62, 0x5c080f6e, 0x250827b5, 0x01070000, 0x0502ff7c, 0x001a0584, 0x005b0037, 
 | 
			
		||||
    0x00750068, 0x00a9009c, 0x010000d5, 0x010e2130, 0x37363307, 0x8866023e, 0x07012e07, 0x27222306, 0x2627012e, 0x17163727, 0x7917821e, 0x22220515, 
 | 
			
		||||
    0x14820706, 0x37013e23, 0x3a5e6621, 0x6b07bf66, 0x1e220d24, 0x246b3301, 0x35212117, 0x29607182, 0x23262405, 0x83020e22, 0x233c8283, 0x17163202, 
 | 
			
		||||
    0xc9790182, 0x08c28206, 0x26032137, 0x0c03d7fe, 0x0d0b0602, 0x1c2b200d, 0x1f364b2b, 0x2d3d1010, 0x232d392c, 0x13143423, 0x0e0c4f10, 0x1c2b230d, 
 | 
			
		||||
    0x3b41413b, 0x0f12342b, 0x11040f3c, 0x017c0104, 0x245d6669, 0xfe3b3b37, 0x3c583717, 0x232c1110, 0x90295523, 0x212d2e38, 0x0c171622, 0x097d6b01, 
 | 
			
		||||
    0x6b221e21, 0x5908067d, 0x50034141, 0x8f2339fe, 0x1b1b3324, 0x291c323a, 0x1006141f, 0x120b103f, 0x664c3812, 0x0e1c1b50, 0x1d2d190f, 0x691a201e, 
 | 
			
		||||
    0x0152011a, 0x289e274e, 0x17101014, 0x4e361c0c, 0x2a2a3231, 0x0a10113d, 0x1516210a, 0x10143e18, 0x410d1911, 0x413a0b3a, 0x09021421, 0x3ef93e02, 
 | 
			
		||||
    0x4e6657fd, 0xd1012137, 0x2d0be66b, 0x28282726, 0x01352d2e, 0x1b231401, 0xe66b1d10, 0x683f0812, 0x2e207f20, 0x0c2e2a2a, 0x1c113831, 0x19061627, 
 | 
			
		||||
    0x1d1d2006, 0x1a1e1b2e, 0x2b25241b, 0x1c3e4528, 0x5a171c1c, 0x00000017, 0xff7a0106, 0x05860502, 0x0028001a, 0x006c0036, 0x009f0092, 0x680000ca, 
 | 
			
		||||
    0x3f680c40, 0x21252226, 0x18834206, 0x37013e24, 0x345f031e, 0x07386906, 0x25211322, 0x6d14a75e, 0x2122196b, 0x88613635, 0x1e454206, 0x45685220, 
 | 
			
		||||
    0x5a393505, 0x0d2c2222, 0x0e0a0403, 0x1f30260e, 0x3424242b, 0x1e11111e, 0x08054468, 0x10103d45, 0x41413bec, 0x42423a3b, 0xd6fe3403, 0x0b070c05, 
 | 
			
		||||
    0x2a210c0d, 0x364a2b1d, 0x3e0f101f, 0x2d392c2d, 0x13352322, 0x340e1014, 0x221b0d0d, 0x403c1c2b, 0x342b3c40, 0x0f3c0e12, 0x7c011207, 0x583810fd, 
 | 
			
		||||
    0x8211103c, 0x29552c23, 0x2e2d3890, 0x17162221, 0x6d03030c, 0xcd5e07c7, 0x41412205, 0x05494275, 0x336b6b25, 0x423b1c1b, 0x0f210548, 0x07484240, 
 | 
			
		||||
    0x0e1b1c2e, 0x1e2c190f, 0x691b201d, 0xb352011a, 0x222d3068, 0x42a449f2, 0x0a241475, 0x21140a2a, 0x230b7642, 0xb9010174, 0x212d3b42, 0x3a42605f, 
 | 
			
		||||
    0x06003824, 0x08ff3900, 0x1505c706, 0x1c000f00, 0x32002800, 0x7a005700, 0x58050000, 0x303407d1, 0x16333013, 0x26031712, 0x06233027, 0x30073007, 
 | 
			
		||||
    0x01012e33, 0x5315536e, 0x25750f99, 0x14735313, 0x1e171625, 0x44331701, 0x113c0588, 0x0a1e0423, 0x06e20624, 0xc9640a24, 0x21872182, 0x0c0b0af1, 
 | 
			
		||||
    0xb13c0a0b, 0x9bfc290b, 0x080d306e, 0x3bad0230, 0x2421215d, 0x2f212124, 0x33553b2e, 0x4a0d1f34, 0x44343f11, 0x35444c4c, 0x380e1243, 0x026a1f0e, 
 | 
			
		||||
    0x010501c4, 0x0421090c, 0x22038282, 0x0c820c09, 0x3678623e, 0x05210937, 0x05171808, 0x62771552, 0x187f23f8, 0x02237f18, 0x41fe709f, 0x31e00170, 
 | 
			
		||||
    0xd3240082, 0xa5018c24, 0x211d4e53, 0x4d532907, 0x52163f12, 0x01f0fe09, 0x16510810, 0xfe124b14, 0x769f0263, 0x0e5d1975, 0xb10b4242, 0x0061fd2f, 
 | 
			
		||||
    0x67410700, 0x00162c08, 0x002a0020, 0x003f0035, 0x7f870064, 0x06230807, 0x6c321507, 0x0e20061c, 0x2305a571, 0x34013d36, 0x200ca371, 0x13ff7301, 
 | 
			
		||||
    0x76057856, 0x75411e9b, 0x02220822, 0x4e100198, 0x1d343750, 0x0a221817, 0x39281609, 0x66d5fe22, 0x262625a7, 0x2197a725, 0x97212525, 0x7d413bfd, 
 | 
			
		||||
    0xa7013f50, 0x48415459, 0x0b0b0c05, 0x211c1c28, 0x1c33472b, 0x2c2b275a, 0x2457272c, 0x23292b28, 0x85411d01, 0x00003451, 0xff270105, 0x05d90502, 
 | 
			
		||||
    0x002a001a, 0x003c0034, 0x827d0071, 0x09597314, 0x33023e24, 0x71761632, 0x10e76a19, 0x650e7b54, 0x5d65085e, 0x0d7c5d0d, 0x210a0c5b, 0x8676f402, 
 | 
			
		||||
    0x7302261f, 0x6f3afb3c, 0x07ed6be5, 0xc6114026, 0xb6fd4010, 0x6b12ea76, 0x6426135d, 0x5a3f215e, 0xd3542e01, 0x768c2009, 0x59210796, 0x0896762d, 
 | 
			
		||||
    0x0808652e, 0x1f2f1010, 0x9bfe5d34, 0x9e02b6b6, 0x200b345b, 0x0a51544e, 0x020b2f22, 0x540ef376, 0x5c250982, 0x374d2f51, 0x09fd6f1d, 0x0200003d, 
 | 
			
		||||
    0x16ffce01, 0x0e043205, 0x3b002100, 0x30050000, 0x26272223, 0x2e353035, 0x82262701, 0x05b04208, 0x1617322f, 0x15011e17, 0x15070214, 0x3e322733, 
 | 
			
		||||
    0x05987401, 0x23022e22, 0x0808436f, 0x04021e28, 0x28558e70, 0x2f885527, 0x3e191b2f, 0x50503938, 0x395050c4, 0xa0bb3e38, 0x603af09a, 0x13131244, 
 | 
			
		||||
    0x3a604412, 0x09855f3b, 0x2cea5f31, 0x0b4c492b, 0x5b41414d, 0xc27f735c, 0x82224142, 0x42413400, 0xfee17fc2, 0xf2671cfc, 0x37374c28, 0x37459e45, 
 | 
			
		||||
    0x8a284c37, 0x0300290a, 0xb7001300, 0x5603ed06, 0x3d220782, 0x61675100, 0x61032005, 0x944b0f5f, 0x30032206, 0x07535803, 0x30233023, 0x0f2b6c11, 
 | 
			
		||||
    0x30231123, 0x22018221, 0x84013035, 0x21230805, 0x02061530, 0xe3302107, 0x5d1772cf, 0x5b170d17, 0x8a227017, 0x01090322, 0x080c0105, 0x8282081e, 
 | 
			
		||||
    0x44071f08, 0x12360597, 0x20071249, 0x1f080808, 0x12481208, 0x9a026277, 0x410141fe, 0x7662cefe, 0x01b73206, 0x329b0103, 0xc83131c8, 0xeefe4432, 
 | 
			
		||||
    0x01fdfe45, 0x21874b9d, 0x28097d62, 0x00040000, 0x06ab004c, 0x26e382b4, 0x001e0014, 0x835f0028, 0x1ddb5de5, 0x2107a642, 0x994a0111, 0x5db92032, 
 | 
			
		||||
    0x192106e4, 0x08e45d60, 0xac2a2e24, 0x56681302, 0x58032707, 0x0c03d7fe, 0x244a0703, 0x0e132123, 0x2006244a, 0x0eec5db7, 0x292e2827, 0x96fed52b, 
 | 
			
		||||
    0x065a6802, 0x9e28402a, 0x10101427, 0x351d0c17, 0x210fc549, 0xc5491011, 0x8200200e, 0x01043000, 0x0502ff73, 0x001a058d, 0x007d004c, 0x72e000b4, 
 | 
			
		||||
    0x17201717, 0x2106e24a, 0x01840607, 0x011e1522, 0x8405f24a, 0x2306220d, 0x05115722, 0x82372721, 0x0c227217, 0x210a324b, 0x596b2627, 0x06364b06, 
 | 
			
		||||
    0x36370123, 0x85558632, 0x010e2354, 0x68412107, 0x8a012033, 0x1d514964, 0x67500221, 0x62081192, 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, 0x357208b3, 
 | 
			
		||||
    0x0c270810, 0x2116170b, 0x1a20291f, 0x0c141419, 0x0604060d, 0x1d14151a, 0x242c251c, 0x0e191a24, 0x110a0a0e, 0x17161511, 0x7222143e, 0x7520093d, 
 | 
			
		||||
    0x2609614b, 0x0e111c1c, 0x4b13140e, 0x0d210764, 0x05654b0e, 0x1f442923, 0x05664b1f, 0x4c460521, 0x62202b22, 0x2028bb4b, 0x06274f04, 0x0f005628, 
 | 
			
		||||
    0x37002e00, 0x5b5e8f03, 0x243f6f13, 0x02260526, 0x011d3327, 0x22354618, 0x158a4518, 0x5fa638c9, 0x461826a6, 0x1520194a, 0x153d4618, 0x3d370122, 
 | 
			
		||||
    0x14774518, 0x45181494, 0x119111b3, 0x26a638a6, 0x35215fcc, 0x3f461833, 0x3a012810, 0xc901b266, 0x706b0601, 0x282105f6, 0x12f67027, 0x18eb0123, 
 | 
			
		||||
    0x0346185f, 0x03012d4f, 0x040c040e, 0x380e040e, 0x390e7c0e, 0x46180782, 0x01285204, 0x18621964, 0x0f390f7a, 0x0b3a6b82, 0x0f030e04, 0xfc020f3d, 
 | 
			
		||||
    0x4502bbfd, 0xb0fd5959, 0x3c7f4242, 0x38373c3d, 0x7a71302f, 0x34302107, 0x200a7a71, 0xda45104a, 0x002f5503, 0x00050000, 0x06ab0047, 0x006103b9, 
 | 
			
		||||
    0x822f001e, 0x0058280b, 0x01000070, 0x6c07010e, 0xc67a0ad7, 0x82332005, 0x06d96c14, 0x20243e7b, 0x3925a405, 0x3d0f1001, 0x046c6c10, 0x1e104010, 
 | 
			
		||||
    0x287e1e79, 0xad2b289f, 0x8822832b, 0xd27a6302, 0x06062718, 0x31100f07, 0x209e5202, 0xf0012208, 0xcf124612, 0xacfe9e02, 0x25145115, 0xbc2f2491, 
 | 
			
		||||
    0xfefe412f, 0xfed13441, 0x40592ef0, 0x40525340, 0x06797a41, 0x49341b35, 0x482c762b, 0x341b1b34, 0x762c2424, 0x1b23252b, 0xa35c1b1a, 0x00002224, 
 | 
			
		||||
    0x08934e06, 0x42002f3a, 0x8d006300, 0xa0009800, 0x30050000, 0x30353021, 0x36373637, 0x34353035, 0x2a0adb49, 0x013e3736, 0x17011e32, 0x4a141516, 
 | 
			
		||||
    0x07250581, 0x2107010e, 0x052a5605, 0x82343521, 0x3637211d, 0x8306937c, 0x05554d3d, 0x82272621, 0x85222001, 0x05dd752f, 0x16171623, 0x51421801, 
 | 
			
		||||
    0x22f74e08, 0xf2791220, 0x4503240c, 0x53d639fe, 0x5a550911, 0x1c1c2c05, 0x3750664c, 0x0c0d0f0e, 0x531d1716, 0x01260613, 0x2e2e3f49, 0x00820e3c, 
 | 
			
		||||
    0x2e3c2308, 0x767c3f2e, 0x19227c76, 0x070f1018, 0x0f070606, 0x45191810, 0x100f1918, 0x06070706, 0x18190f10, 0x0e4f89fe, 0x3d742620, 0x726e3afb, 
 | 
			
		||||
    0x0c0f4f72, 0xbf68f22c, 0x2f292a2e, 0x1138310c, 0xc349261d, 0x17172a06, 0x24351e1b, 0x23282b25, 0x07c34922, 0x18176722, 0x33072e7c, 0xfeb71817, 
 | 
			
		||||
    0x0e5cb6b8, 0x231a1a0e, 0x2c752d24, 0x1a1a2424, 0x0e29a182, 0x24231b1a, 0x242d752c, 0x210e8323, 0x2d4f7703, 0x4f01231f, 0x2f4f4f01, 0x0020080a, 
 | 
			
		||||
    0x01060000, 0x0568fe0b, 0x000f05f5, 0x0039001f, 0x004b0041, 0x006f0055, 0x23300100, 0x013d2622, 0x2014fd4e, 0x1afd4e06, 0x2007f667, 0x12877701, 
 | 
			
		||||
    0x41180520, 0x2e080d65, 0x33112311, 0x37363313, 0x02231133, 0x35395fe5, 0x201f5b38, 0x262a1211, 0x82353625, 0x26263536, 0x676b7c29, 0x2d4027a1, 
 | 
			
		||||
    0x0d0c0c0d, 0x8227402d, 0x0d0c2d09, 0x402d0c0d, 0xc76ded02, 0x3bfbfb01, 0x2b0cff79, 0x09051504, 0x62190923, 0x19621818, 0x05390882, 0x06b48067, 
 | 
			
		||||
    0x677b595a, 0x313a68fe, 0x2b340732, 0x4c3e3d2b, 0x2b2c8155, 0x3d008217, 0x55812c2b, 0x4513ad96, 0x25331aa2, 0x2e6a2d25, 0x1b332425, 0x2524331b, 
 | 
			
		||||
    0x252d6a2e, 0xec673325, 0x24012108, 0x2d09e276, 0x2b282e29, 0x1249123e, 0x2d2db32c, 0x08822cb3, 0x02fffd39, 0xababfe9e, 0x0062fdaa, 0x00020000, 
 | 
			
		||||
    0x06540085, 0x00b8037b, 0x644d0034, 0x1a41357f, 0x133d0813, 0x01231133, 0x359469b7, 0x2c103e10, 0x51443536, 0x26493951, 0x3e3d7a25, 0x436c4c2a, 
 | 
			
		||||
    0x3145465f, 0x5d21035b, 0x27284846, 0x4a442120, 0x4e29757e, 0x06fa0371, 0x130b2c0b, 0x81242381, 0x27088213, 0xe1a18206, 0x829ae007, 0x2a2d8c64, 
 | 
			
		||||
    0x5a178f02, 0x40ec2217, 0x8222ec40, 0x7ffd3808, 0x56fe4603, 0xbafcaa01, 0x00030000, 0x066300b5, 0x00a9034b, 0x7b15000b, 0x092119ad, 0x11d57601, 
 | 
			
		||||
    0x6801b63c, 0x747f7f74, 0x3934d8e1, 0x03d83439, 0x8cedfe5a, 0x0a175817, 0x0f050f37, 0x09820a38, 0xba2e8834, 0x4603632e, 0xfe89e689, 0x36c501b2, 
 | 
			
		||||
    0x36323a32, 0xa17631fd, 0xc8252205, 0x0aa17637, 0x00820020, 0x20071b50, 0x06bf4561, 0xbd457e20, 0x34ce4e46, 0x10152108, 0x6d6d0f3d, 0x10401003, 
 | 
			
		||||
    0x7f1e781f, 0x2b27a028, 0x22832bac, 0x3f630287, 0x0e0f3b5c, 0x5c3b0f0e, 0x28054344, 0x0d0d1f31, 0x3145311f, 0x053b441f, 0x1a033122, 0x45325050, 
 | 
			
		||||
    0x01213edf, 0x2c7150ef, 0x5b01053a, 0xa50502ff, 0x34001a05, 0x48003e00, 0xa2008100, 0x22050000, 0x37362726, 0x54079f79, 0x0225103f, 0x23012e07, 
 | 
			
		||||
    0x0f3f5422, 0x14654b18, 0x01694589, 0x0d597629, 0x2a0eb157, 0x010e1716, 0x76555002, 0x7f26252a, 0x0b2314c7, 0x7f091e1a, 0x01210dc8, 0x0545442d, 
 | 
			
		||||
    0x2aacb335, 0xac2a2e2e, 0x76542cfe, 0x2425262b, 0x40372b2a, 0x69161842, 0x0d211140, 0x0e406919, 0x08057476, 0x69242521, 0x22755841, 0x48112e2d, 
 | 
			
		||||
    0x58584e3b, 0x134b3d4e, 0x79224d0a, 0x23343dfd, 0x16162b23, 0x54273139, 0x0a230e8c, 0x54081b16, 0x4b18128d, 0x292507bf, 0x012b282e, 0x693d8918, 
 | 
			
		||||
    0x2a082650, 0x4055a9b1, 0x2d2c2d40, 0x19194b4d, 0x5d6a3930, 0x3e695d66, 0x492f0631, 0x00000052, 0x002e0004, 0x03d206b7, 0x000f0056, 0x18360027, 
 | 
			
		||||
    0x5e15e741, 0x132015d5, 0x25182d61, 0x01c86c62, 0xad5570fc, 0xed832b09, 0x25256940, 0x25252828, 0xf6604069, 0x18812005, 0x2009e841, 0x05bb7002, 
 | 
			
		||||
    0x2a9e0227, 0xa87d2a2a, 0x2705827d, 0x6c5b5e60, 0x22fe5e5b, 0x002d9e82, 0xff4b0106, 0x05b50502, 0x0015001a, 0x30ab821e, 0x016e0049, 0x050000d8, 
 | 
			
		||||
    0x21303530, 0x12363530, 0x053d7437, 0x2330152e, 0x25301530, 0x11303330, 0x010e2330, 0x2007145e, 0xd344183e, 0x48012008, 0x2e23073d, 0x7e062201, 
 | 
			
		||||
    0x1e240719, 0x26220102, 0x6d08006a, 0x07220681, 0x46181d06, 0x352b0e81, 0x0f231133, 0x0e0f1501, 0x840d0f15, 0x91088205, 0x2e05270b, 0x35372701, 
 | 
			
		||||
    0x02840b3f, 0x05840a20, 0x06200b88, 0x073c1793, 0x15331133, 0xc9fea102, 0x8e2db52d, 0xbffe5c5c, 0x8e2307db, 0x5c3eaf02, 0x1d0f0e3c, 0x09bd4418, 
 | 
			
		||||
    0x00820720, 0x310f0f26, 0x0f103145, 0x07390982, 0xeefd311f, 0x49279683, 0x3b584168, 0x3c0f213b, 0x3b481110, 0x2d2d2c4d, 0xd849182c, 0xbc2f220a, 
 | 
			
		||||
    0x3b4c1808, 0x222eeb2e, 0xd20b2c0b, 0xd202206e, 0x01012453, 0x18f2a3a6, 0x290ea54a, 0x582fe2fe, 0x51524140, 0x45185883, 0x243b07aa, 0x2b752c25, 
 | 
			
		||||
    0x1a1a2425, 0x1a1a1c1c, 0x752b2524, 0x3324252c, 0xb106031c, 0x188055a9, 0x2c0f6148, 0x09313e34, 0x29490923, 0x015a0b29, 0xd0b1d4f5, 0x280a2254, 
 | 
			
		||||
    0x8953d00a, 0x55b64150, 0xfd235f86, 0x82005abc, 0x02350800, 0x5f025c00, 0x7105a406, 0x1b000300, 0x21130000, 0x27012115, 0x33351737, 0x07173715, 
 | 
			
		||||
    0x17231533, 0x23152707, 0x37270735, 0x065c3523, 0x04b8f948, 0x8c2a8cc2, 0x2103823c, 0x0887c6c6, 0x46a50224, 0x118c2202, 0x00261a84, 0x5c000100, 
 | 
			
		||||
    0x5b8225ff, 0x1400d622, 0x38085982, 0x3e012c32, 0x34113505, 0x022c032e, 0x019d5c23, 0xf6050134, 0x5b7fadc7, 0xaa6f3c2e, 0xfef8fecc, 0xada9fee5, 
 | 
			
		||||
    0x5633a502, 0x7a837e72, 0xf90e4766, 0x7d5b154f, 0x68869190, 0x24478d3e, 0x012c2201, 0x2047832e, 0x2747823e, 0x9da40633, 0xfbfeccfe, 0x01254889, 
 | 
			
		||||
    0x011b0108, 0x82489657, 0x000532ef, 0x0638ff2a, 0x009405d6, 0x00400004, 0x014b0044, 0x2b9b8208, 0x21072130, 0x030e2204, 0x07040e07, 0x2e06eb57, 
 | 
			
		||||
    0x33363435, 0x041e1732, 0x37033e32, 0x8337043e, 0x1716240c, 0x83141516, 0x032e391e, 0x21152103, 0x05231501, 0x25352325, 0x33023e34, 0x36171632, 
 | 
			
		||||
    0x17031e32, 0x14212682, 0x21058306, 0x05833236, 0x013e1725, 0x82033e37, 0x84362047, 0x22288340, 0x8631011e, 0x2317840c, 0x021e3233, 0x5b852983, 
 | 
			
		||||
    0x85141521, 0x27262961, 0x3435012e, 0x27022e35, 0x0e2e6e83, 0x27222301, 0x0607010e, 0x07062722, 0x0c86030e, 0x02200683, 0xb0840e82, 0x03862683, 
 | 
			
		||||
    0x82022e21, 0x273b08ba, 0x35010e34, 0x2627010e, 0x16172627, 0x06273435, 0x36373437, 0x5c262223, 0xfe46e401, 0x54e00462, 0x2f4f5061, 0x3c15070f, 
 | 
			
		||||
    0x522c5b40, 0x4da7934b, 0x151d0835, 0x2f0f0f1b, 0x9a61504f, 0xddd4081b, 0x62fee401, 0x019610fe, 0x96000100, 0x0e047afc, 0x1b131a24, 0x171f0e0b, 
 | 
			
		||||
    0x0202080c, 0x11151b11, 0x04070602, 0x10072e38, 0x020c0e10, 0x06030810, 0x0a0c130c, 0x530b0609, 0x040d1339, 0x0c11282c, 0x2f411e18, 0x0d151d0c, 
 | 
			
		||||
    0x241a0e04, 0x27142013, 0x11140c1e, 0x0909090a, 0x2c21492f, 0x121a1301, 0x1004180f, 0x25210f06, 0x2a100f14, 0x10171c19, 0x21091224, 0x132e0e0d, 
 | 
			
		||||
    0x18133b1a, 0x0d060707, 0x0e290938, 0x111a141b, 0x122f340d, 0x19100807, 0x160b0a11, 0x1c101010, 0x22180f17, 0x08221a0c, 0x030d1611, 0x06171601, 
 | 
			
		||||
    0x021a0327, 0x01100801, 0x08020103, 0x021a1207, 0x2fbb6eb9, 0x173c5242, 0x424a1d09, 0xa72d184b, 0x0f0d4d4e, 0x17161d15, 0x2f42523c, 0x90081897, 
 | 
			
		||||
    0x016e5801, 0xf0f0fa25, 0x1d0da0fa, 0x1b151a29, 0x1d110e07, 0x26170e11, 0x0c020b3a, 0x0505070d, 0x0b091037, 0x08040910, 0x040d670c, 0x3b1f2741, 
 | 
			
		||||
    0x0e186037, 0x121d1107, 0x15092617, 0x5201100f, 0x04380443, 0x34010512, 0x10171108, 0x0b122d0c, 0x3e080403, 0x2f070b42, 0x0b24111d, 0x14111045, 
 | 
			
		||||
    0x1d0f331c, 0x0a5d090e, 0x18180c4d, 0x022d410c, 0x17211617, 0x0c110508, 0x2226141b, 0x19220e05, 0x02071703, 0x02030c0c, 0x04110205, 0x04020202, 
 | 
			
		||||
    0x24038201, 0x171a0702, 0x07b34300, 0x00492508, 0x000f000b, 0x33150100, 0x23152315, 0x33352335, 0x15210135, 0xb4980521, 0xb4b464b4, 0x480628fb, 
 | 
			
		||||
    0x4905b8f9, 0x64380b83, 0x465cfdb4, 0x53000500, 0x8c063eff, 0x0600a705, 0x2c002800, 0x37003000, 0x11293d82, 0x33010b33, 0x07232711, 0x20018327, 
 | 
			
		||||
    0x26058403, 0x1b35020b, 0x82173702, 0x84132001, 0x33172905, 0x2b153321, 0x37333502, 0x2e082d85, 0xcea0a104, 0xc936a0ce, 0x303f334a, 0x3a3a3f2f, 
 | 
			
		||||
    0x10311937, 0x27273736, 0x31103637, 0x3a3a3719, 0x3f302f3f, 0x01c94a33, 0xbc8a8af2, 0x83887373, 0x0247082c, 0x01b00108, 0xfedefe22, 0x3ed63a50, 
 | 
			
		||||
    0xe3cd72a9, 0x8b54fcfe, 0xfe92df6a, 0x010401d4, 0xeb0189eb, 0xaffe0401, 0x8b6adfb7, 0xe3fcfe54, 0x3ea972cd, 0x3a6161d6, 0xdefe50fe, 0xb0012201, 
 | 
			
		||||
    0x00030000, 0x0637ff5c, 0x82e005a4, 0x000d22bb, 0x26b7833b, 0x23010923, 0x84110311, 0x2f012206, 0x85bf8501, 0x840f2005, 0x020f220f, 0x23c4821f, 
 | 
			
		||||
    0x011f013f, 0x0586c485, 0xc8340328, 0x14011401, 0x068598c8, 0x38d8023d, 0x4b604e72, 0x5a5a6048, 0x184b2754, 0x394b4554, 0x155a364b, 0x39252539, 
 | 
			
		||||
    0x82365a15, 0x5445310c, 0x54274b18, 0x48605a5a, 0x724e604b, 0xfcfe5d01, 0x04229484, 0xb9825d02, 0x3008d183, 0x1bc8fefc, 0x2d420438, 0x21665951, 
 | 
			
		||||
    0x48582a37, 0x645a7084, 0x8f523b4b, 0x4a656c43, 0x4b3b528f, 0x84705a64, 0x372a5848, 0x51596621, 0x3804422d, 0x3b008200, 0xff4b0002, 0x05b50622, 
 | 
			
		||||
    0x000900d0, 0x0500002a, 0x15012d15, 0x010d3521, 0x17130135, 0x3f20ad8b, 0x0324d98d, 0x6d010307, 0x04227e83, 0x7a820126, 0xd3fa2608, 0x1f6d6e4e, 
 | 
			
		||||
    0x756d3262, 0x615e7d75, 0x4994667d, 0x7d669449, 0x757d5e61, 0x62326d75, 0x4e6e6d1f, 0xcecea03e, 0x080383a0, 0xfe540333, 0x73eccd7e, 0x426e54b0, 
 | 
			
		||||
    0x59a1b2cc, 0x36993184, 0x84319935, 0xccb2a159, 0xb0546e42, 0xcd090190, 0x00007efe, 0xff5e0002, 0x05a2066a, 0x000b007b, 0x0e5b421f, 0x03270330, 
 | 
			
		||||
    0x27020b27, 0x021b3711, 0x13371337, 0x69421521, 0xc7fe2106, 0x86877487, 0x42a70221, 0xfc330777, 0x629dfef0, 0xfeb2f7fe, 0xfe6501be, 0x07058467, 
 | 
			
		||||
    0x8267fe84, 0xb2be2f09, 0xfe62f7fe, 0x0300749d, 0x3eff5300, 0x9342af06, 0x002f2c06, 0x35211300, 0x2135010d, 0x41211503, 0x80420507, 0x021b2205, 
 | 
			
		||||
    0x42798235, 0x072109a0, 0x20268503, 0x075442cb, 0x45035522, 0x21068c42, 0x8c42363b, 0x3b36210b, 0x20068c42, 0x074b4296, 0xa0030428, 0xfea0cece, 
 | 
			
		||||
    0x864261fc, 0x9bfe2126, 0x00202f83, 0x04280082, 0x5effc800, 0xa6053806, 0x0f2bb582, 0x1f001b00, 0x35250000, 0x43031521, 0x0b8b0b7f, 0x1123112e, 
 | 
			
		||||
    0xcc016c04, 0x64b4b4b4, 0xc0fcb4b4, 0x02270684, 0x64a05a31, 0x439c0464, 0xfe210595, 0x2507855c, 0xb8f90e02, 0x62824806, 0x47010021, 0x0221058f, 
 | 
			
		||||
    0x2c6382a5, 0x15211300, 0x48065c21, 0xa502b8f9, 0x231c8346, 0xae000e00, 0x0a842182, 0x02200482, 0x01220b86, 0x8b820d00, 0x11820120, 0x02000026, 
 | 
			
		||||
    0x3d000700, 0x03241786, 0x91002500, 0x04200b86, 0xd3202382, 0x05240b86, 0x01010f00, 0x06240b86, 0x2b010c00, 0x01226b82, 0x3f840904, 0x0b860020, 
 | 
			
		||||
    0x1a000122, 0x03210982, 0x20178300, 0x20778202, 0x2417862d, 0x004a0003, 0x200b8645, 0x20238204, 0x240b86b7, 0x001e0005, 0x240b86e1, 0x01180006, 
 | 
			
		||||
    0x304d8311, 0x00750046, 0x006e0072, 0x00630061, 0x00200065, 0x20078249, 0x2e0f826f, 0x46000073, 0x616e7275, 0x49206563, 0x826e6f63, 0x8252200e, 
 | 
			
		||||
    0x8267201f, 0x826c202d, 0x0072282b, 0x67655200, 0x82616c75, 0x00462108, 0x74212f83, 0x22078300, 0x84670072, 0x823a2045, 0x21599949, 0x1f830020, 
 | 
			
		||||
    0x38003124, 0x03842d00, 0x30003226, 0x33003200, 0x6f2a7182, 0x6f46746e, 0x20656772, 0x7d8c203a, 0x31270f82, 0x2d382d38, 0x83323032, 0x20b3a826, 
 | 
			
		||||
    0x248d8256, 0x00730072, 0x20a38469, 0x24678220, 0x00310030, 0x3007842e, 0x56000030, 0x69737265, 0x30206e6f, 0x302e3130, 0x8d108230, 0x110b41b3, 
 | 
			
		||||
    0x23060a41, 0x00020000, 0x0120008b, 0x0b840c8b, 0x05824b20, 0x00019a08, 0x01030002, 0x01030102, 0x01050104, 0x01070106, 0x01090108, 0x010b010a, 
 | 
			
		||||
    0x010d010c, 0x010f010e, 0x01110110, 0x01130112, 0x01150114, 0x01170116, 0x01190118, 0x011b011a, 0x011d011c, 0x011f011e, 0x01210120, 0x01230122, 
 | 
			
		||||
    0x01250124, 0x01270126, 0x01290128, 0x012b012a, 0x012d012c, 0x012f012e, 0x01310130, 0x01330132, 0x01350134, 0x01370136, 0x01390138, 0x013b013a, 
 | 
			
		||||
    0x013d013c, 0x013f013e, 0x01410140, 0x01430142, 0x01450144, 0x01470146, 0x6e750748, 0x46304569, 0x20078630, 0x20078631, 0x20078632, 0x20078633, 
 | 
			
		||||
    0x21078434, 0x27853031, 0x85303121, 0x30312127, 0x31212785, 0x21278530, 0x27873031, 0x2f863520, 0x07863620, 0x07863720, 0x07863820, 0x07863920, 
 | 
			
		||||
    0x07864120, 0x07864220, 0x07864320, 0x07864420, 0x07864520, 0x07854620, 0x86303121, 0x86312007, 0x207f8607, 0x207f8631, 0x207f8631, 0x207f8631, 
 | 
			
		||||
    0x207f8631, 0x207f8631, 0x207f8631, 0x207f8631, 0x207f8631, 0x207f8631, 0x207f8631, 0x207f8631, 0x207f8631, 0x217f8631, 0x77853032, 0x86313221, 
 | 
			
		||||
    0x207f8607, 0x207f8632, 0x207f8632, 0x207f8632, 0x207f8632, 0x207f8632, 0x207f8632, 0x207f8632, 0x207f8632, 0x207f8632, 0x207f8632, 0x207f8632, 
 | 
			
		||||
    0x207f8632, 0x217f8632, 0x77853033, 0x86313321, 0x207f8607, 0x207f8633, 0x207f8633, 0x207f8633, 0x207f8633, 0x207f8633, 0x207f8633, 0x207f8633, 
 | 
			
		||||
    0x207f8633, 0x207f8633, 0x207f8633, 0x207f8633, 0x207f8633, 0x217f8633, 0x77853034, 0x00313428, 0xff010000, 0xcd4400ff, 0x00002607, 0x0014000c, 
 | 
			
		||||
    0x24158204, 0x00000002, 0x85038601, 0xe0002409, 0x82206855, 0xe0002c11, 0x009ffffd, 0xe1000000, 0x05c9dc04, 0xc4a023fa, 0x00000091, 
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
// not auto-generated. update every time you change icons.ttf!
 | 
			
		||||
 | 
			
		||||
#define ICON_MIN_FUR 0xe0f0
 | 
			
		||||
#define ICON_MAX_FUR 0xe135
 | 
			
		||||
#define ICON_MAX_FUR 0xe141
 | 
			
		||||
 | 
			
		||||
// test
 | 
			
		||||
#define ICON_FUR_TEST0 u8"\ue0f0"
 | 
			
		||||
| 
						 | 
				
			
			@ -66,4 +66,16 @@
 | 
			
		|||
#define ICON_FUR_INS_TED u8"\ue134"
 | 
			
		||||
#define ICON_FUR_INS_C140 u8"\ue135"
 | 
			
		||||
 | 
			
		||||
// sample editor?
 | 
			
		||||
// sample editor
 | 
			
		||||
#define ICON_FUR_SAMPLE_APPLY_SILENCE u8"\ue136"
 | 
			
		||||
#define ICON_FUR_SAMPLE_FADEIN u8"\ue137"
 | 
			
		||||
#define ICON_FUR_SAMPLE_FADEOUT u8"\ue138"
 | 
			
		||||
#define ICON_FUR_SAMPLE_FILTER u8"\ue139"
 | 
			
		||||
#define ICON_FUR_SAMPLE_INSERT_SILENCE u8"\ue13a"
 | 
			
		||||
#define ICON_FUR_SAMPLE_INVERT u8"\ue13b"
 | 
			
		||||
#define ICON_FUR_SAMPLE_NORMALIZE u8"\ue13c"
 | 
			
		||||
#define ICON_FUR_SAMPLE_RESAMPLE u8"\ue13d"
 | 
			
		||||
#define ICON_FUR_SAMPLE_RESIZE u8"\ue13e"
 | 
			
		||||
#define ICON_FUR_SAMPLE_REVERSE u8"\ue13f"
 | 
			
		||||
#define ICON_FUR_SAMPLE_SIGN u8"\ue140"
 | 
			
		||||
#define ICON_FUR_SAMPLE_TRIM u8"\ue141"
 | 
			
		||||
| 
						 | 
				
			
			@ -5792,23 +5792,45 @@ bool FurnaceGUI::loop() {
 | 
			
		|||
        pendingRawSampleBigEndian=false;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      ImGui::BeginDisabled(pendingRawSampleDepth!=DIV_SAMPLE_DEPTH_8BIT && pendingRawSampleDepth!=DIV_SAMPLE_DEPTH_16BIT);
 | 
			
		||||
      if (pendingRawSampleDepth==DIV_SAMPLE_DEPTH_8BIT || pendingRawSampleDepth==DIV_SAMPLE_DEPTH_16BIT) {
 | 
			
		||||
        ImGui::AlignTextToFramePadding();
 | 
			
		||||
        ImGui::Text("Channels");
 | 
			
		||||
        ImGui::SameLine();
 | 
			
		||||
        ImGui::SetNextItemWidth(120.0f*dpiScale);
 | 
			
		||||
        if (ImGui::InputInt("##RSChans",&pendingRawSampleChannels)) {
 | 
			
		||||
        }
 | 
			
		||||
        ImGui::Text("(will be mixed down to mono)");
 | 
			
		||||
        ImGui::Checkbox("Unsigned",&pendingRawSampleUnsigned);
 | 
			
		||||
      ImGui::EndDisabled();
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      ImGui::BeginDisabled(pendingRawSampleDepth!=DIV_SAMPLE_DEPTH_16BIT);
 | 
			
		||||
      if (pendingRawSampleDepth==DIV_SAMPLE_DEPTH_16BIT) {
 | 
			
		||||
        ImGui::Checkbox("Big endian",&pendingRawSampleBigEndian);
 | 
			
		||||
      ImGui::EndDisabled();
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      ImGui::BeginDisabled(pendingRawSampleDepth==DIV_SAMPLE_DEPTH_16BIT);
 | 
			
		||||
      if (pendingRawSampleDepth==DIV_SAMPLE_DEPTH_YMZ_ADPCM ||
 | 
			
		||||
          pendingRawSampleDepth==DIV_SAMPLE_DEPTH_QSOUND_ADPCM ||
 | 
			
		||||
          pendingRawSampleDepth==DIV_SAMPLE_DEPTH_ADPCM_A ||
 | 
			
		||||
          pendingRawSampleDepth==DIV_SAMPLE_DEPTH_ADPCM_B ||
 | 
			
		||||
          pendingRawSampleDepth==DIV_SAMPLE_DEPTH_VOX) {
 | 
			
		||||
        ImGui::Checkbox("Swap nibbles",&pendingRawSampleSwapNibbles);
 | 
			
		||||
      ImGui::EndDisabled();
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (pendingRawSampleDepth==DIV_SAMPLE_DEPTH_MULAW) {
 | 
			
		||||
        ImGui::Text("Encoding:");
 | 
			
		||||
        ImGui::Indent();
 | 
			
		||||
        if (ImGui::RadioButton("G.711",pendingRawSampleSwapNibbles==0)) {
 | 
			
		||||
          pendingRawSampleSwapNibbles=0;
 | 
			
		||||
        }
 | 
			
		||||
        if (ImGui::RadioButton("Namco",pendingRawSampleSwapNibbles==1)) {
 | 
			
		||||
          pendingRawSampleSwapNibbles=1;
 | 
			
		||||
        }
 | 
			
		||||
        ImGui::Unindent();
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (pendingRawSampleDepth==DIV_SAMPLE_DEPTH_1BIT ||
 | 
			
		||||
          pendingRawSampleDepth==DIV_SAMPLE_DEPTH_1BIT_DPCM) {
 | 
			
		||||
        ImGui::Checkbox("Reverse bit order",&pendingRawSampleSwapNibbles);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (ImGui::Button("OK")) {
 | 
			
		||||
        DivSample* s=e->sampleFromFileRaw(pendingRawSample.c_str(),(DivSampleDepth)pendingRawSampleDepth,pendingRawSampleChannels,pendingRawSampleBigEndian,pendingRawSampleUnsigned,pendingRawSampleSwapNibbles);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1428,6 +1428,14 @@ class FurnaceGUI {
 | 
			
		|||
    int c64Core;
 | 
			
		||||
    int pokeyCore;
 | 
			
		||||
    int opnCore;
 | 
			
		||||
    int arcadeCoreRender;
 | 
			
		||||
    int ym2612CoreRender;
 | 
			
		||||
    int snCoreRender;
 | 
			
		||||
    int nesCoreRender;
 | 
			
		||||
    int fdsCoreRender;
 | 
			
		||||
    int c64CoreRender;
 | 
			
		||||
    int pokeyCoreRender;
 | 
			
		||||
    int opnCoreRender;
 | 
			
		||||
    int pcSpeakerOutMethod;
 | 
			
		||||
    String yrw801Path;
 | 
			
		||||
    String tg100Path;
 | 
			
		||||
| 
						 | 
				
			
			@ -1596,6 +1604,14 @@ class FurnaceGUI {
 | 
			
		|||
      c64Core(0),
 | 
			
		||||
      pokeyCore(1),
 | 
			
		||||
      opnCore(1),
 | 
			
		||||
      arcadeCoreRender(1),
 | 
			
		||||
      ym2612CoreRender(0),
 | 
			
		||||
      snCoreRender(0),
 | 
			
		||||
      nesCoreRender(0),
 | 
			
		||||
      fdsCoreRender(1),
 | 
			
		||||
      c64CoreRender(1),
 | 
			
		||||
      pokeyCoreRender(1),
 | 
			
		||||
      opnCoreRender(1),
 | 
			
		||||
      pcSpeakerOutMethod(0),
 | 
			
		||||
      yrw801Path(""),
 | 
			
		||||
      tg100Path(""),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1468,7 +1468,7 @@ void FurnaceGUI::drawMacroEdit(FurnaceGUIMacroDesc& i, int totalFit, float avail
 | 
			
		|||
      if (!i.isBitfield) {
 | 
			
		||||
        if (settings.oldMacroVSlider) {
 | 
			
		||||
          ImGui::SameLine(0.0f);
 | 
			
		||||
          if (ImGui::VSliderInt("IMacroVScroll",ImVec2(20.0f*dpiScale,i.height*dpiScale),&i.macro->vScroll,0,(i.max-i.min)-i.macro->vZoom,"",ImGuiSliderFlags_NoInput)) {
 | 
			
		||||
          if (ImGui::VSliderInt("##IMacroVScroll",ImVec2(20.0f*dpiScale,i.height*dpiScale),&i.macro->vScroll,0,(i.max-i.min)-i.macro->vZoom,"",ImGuiSliderFlags_NoInput)) {
 | 
			
		||||
            if (i.macro->vScroll<0) i.macro->vScroll=0;
 | 
			
		||||
            if (i.macro->vScroll>((i.max-i.min)-i.macro->vZoom)) i.macro->vScroll=(i.max-i.min)-i.macro->vZoom;
 | 
			
		||||
          }
 | 
			
		||||
| 
						 | 
				
			
			@ -1494,7 +1494,7 @@ void FurnaceGUI::drawMacroEdit(FurnaceGUIMacroDesc& i, int totalFit, float avail
 | 
			
		|||
            if (i.macro->vScroll>((i.max-i.min)-i.macro->vZoom)) i.macro->vScroll=(i.max-i.min)-i.macro->vZoom;
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          ImGuiID scrollbarID=ImGui::GetID("IMacroVScroll");
 | 
			
		||||
          ImGuiID scrollbarID=ImGui::GetID("##IMacroVScroll");
 | 
			
		||||
          ImGui::KeepAliveID(scrollbarID);
 | 
			
		||||
          if (ImGui::ScrollbarEx(scrollbarPos,scrollbarID,ImGuiAxis_Y,&scrollV,availV,contentsV,0)) {
 | 
			
		||||
            i.macro->vScroll=(i.max-i.min-i.macro->vZoom)-scrollV;
 | 
			
		||||
| 
						 | 
				
			
			@ -1888,7 +1888,7 @@ void FurnaceGUI::drawMacros(std::vector<FurnaceGUIMacroDesc>& macros, FurnaceGUI
 | 
			
		|||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    case 1: {
 | 
			
		||||
      ImGui::Text("Mobile");
 | 
			
		||||
      ImGui::Text("Tabs");
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    case 2: {
 | 
			
		||||
| 
						 | 
				
			
			@ -1980,8 +1980,37 @@ void FurnaceGUI::drawMacros(std::vector<FurnaceGUIMacroDesc>& macros, FurnaceGUI
 | 
			
		|||
          FurnaceGUIMacroDesc& m=macros[state.selectedMacro];
 | 
			
		||||
          m.macro->open|=1;
 | 
			
		||||
 | 
			
		||||
          m.height=ImGui::GetContentRegionAvail().y-ImGui::GetFontSize()-ImGui::GetFrameHeightWithSpacing()-12.0f*dpiScale-ImGui::GetStyle().ItemSpacing.y*3.0f;
 | 
			
		||||
          if (m.macro->name=="arp") m.height-=12.0f*dpiScale;
 | 
			
		||||
          float availableWidth=ImGui::GetContentRegionAvail().x-reservedSpace;
 | 
			
		||||
          int totalFit=MIN(255,availableWidth/MAX(1,macroPointSize*dpiScale));
 | 
			
		||||
          int scrollMax=0;
 | 
			
		||||
          for (FurnaceGUIMacroDesc& i: macros) {
 | 
			
		||||
            if (i.macro->len>scrollMax) scrollMax=i.macro->len;
 | 
			
		||||
          }
 | 
			
		||||
          scrollMax-=totalFit;
 | 
			
		||||
          if (scrollMax<0) scrollMax=0;
 | 
			
		||||
          if (macroDragScroll>scrollMax) {
 | 
			
		||||
            macroDragScroll=scrollMax;
 | 
			
		||||
          }
 | 
			
		||||
          ImGui::BeginDisabled(scrollMax<1);
 | 
			
		||||
          ImGui::SetNextItemWidth(availableWidth);
 | 
			
		||||
          if (CWSliderInt("##MacroScroll",¯oDragScroll,0,scrollMax,"")) {
 | 
			
		||||
            if (macroDragScroll<0) macroDragScroll=0;
 | 
			
		||||
            if (macroDragScroll>scrollMax) macroDragScroll=scrollMax;
 | 
			
		||||
          }
 | 
			
		||||
          ImGui::EndDisabled();
 | 
			
		||||
 | 
			
		||||
          ImGui::SameLine();
 | 
			
		||||
          ImGui::Button(ICON_FA_SEARCH_PLUS "##MacroZoomB");
 | 
			
		||||
          if (ImGui::BeginPopupContextItem("MacroZoomP",ImGuiPopupFlags_MouseButtonLeft)) {
 | 
			
		||||
            ImGui::SetNextItemWidth(120.0f*dpiScale);
 | 
			
		||||
            if (ImGui::InputInt("##MacroPointSize",¯oPointSize,1,16)) {
 | 
			
		||||
              if (macroPointSize<1) macroPointSize=1;
 | 
			
		||||
              if (macroPointSize>256) macroPointSize=256;
 | 
			
		||||
            }
 | 
			
		||||
            ImGui::EndPopup();
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          m.height=ImGui::GetContentRegionAvail().y-ImGui::GetFontSize()-ImGui::GetFrameHeightWithSpacing()-(m.bit30?28.0f:12.0f)*dpiScale-ImGui::GetStyle().ItemSpacing.y*3.0f;
 | 
			
		||||
          if (m.height<10.0f*dpiScale) m.height=10.0f*dpiScale;
 | 
			
		||||
          m.height/=dpiScale;
 | 
			
		||||
          drawMacroEdit(m,totalFit,availableWidth,index);
 | 
			
		||||
| 
						 | 
				
			
			@ -1999,7 +2028,25 @@ void FurnaceGUI::drawMacros(std::vector<FurnaceGUIMacroDesc>& macros, FurnaceGUI
 | 
			
		|||
              }
 | 
			
		||||
              ImGui::SameLine();
 | 
			
		||||
            }
 | 
			
		||||
            BUTTON_TO_SET_PROPS(m);
 | 
			
		||||
            ImGui::Text("StepLen");
 | 
			
		||||
            ImGui::SameLine();
 | 
			
		||||
            ImGui::SetNextItemWidth(120.0f*dpiScale);
 | 
			
		||||
            if (ImGui::InputScalar("##IMacroSpeed",ImGuiDataType_U8,&m.macro->speed,&_ONE,&_THREE)) {
 | 
			
		||||
              if (m.macro->speed<1) m.macro->speed=1;
 | 
			
		||||
              MARK_MODIFIED;
 | 
			
		||||
            }
 | 
			
		||||
            ImGui::SameLine();
 | 
			
		||||
            ImGui::Text("Delay");
 | 
			
		||||
            ImGui::SameLine();
 | 
			
		||||
            ImGui::SetNextItemWidth(120.0f*dpiScale);
 | 
			
		||||
            if (ImGui::InputScalar("##IMacroDelay",ImGuiDataType_U8,&m.macro->delay,&_ONE,&_THREE)) {
 | 
			
		||||
              MARK_MODIFIED;
 | 
			
		||||
            }
 | 
			
		||||
            ImGui::SameLine();
 | 
			
		||||
            {
 | 
			
		||||
              FurnaceGUIMacroDesc& i=m;
 | 
			
		||||
              BUTTON_TO_SET_MODE(ImGui::Button);
 | 
			
		||||
            }
 | 
			
		||||
            if (m.modeName!=NULL) {
 | 
			
		||||
              bool modeVal=m.macro->mode;
 | 
			
		||||
              String modeName=fmt::sprintf("%s##IMacroMode",m.modeName);
 | 
			
		||||
| 
						 | 
				
			
			@ -2188,7 +2235,7 @@ void FurnaceGUI::drawInsEdit() {
 | 
			
		|||
  }
 | 
			
		||||
  if (ImGui::Begin("Instrument Editor",&insEditOpen,globalWinFlags|(settings.allowEditDocking?0:ImGuiWindowFlags_NoDocking))) {
 | 
			
		||||
    if (curIns<0 || curIns>=(int)e->song.ins.size()) {
 | 
			
		||||
      ImGui::SetCursorPosY(ImGui::GetCursorPosY()+(ImGui::GetContentRegionAvail().y-ImGui::GetFrameHeightWithSpacing()*2.0f)*0.5f);
 | 
			
		||||
      ImGui::SetCursorPosY(ImGui::GetCursorPosY()+(ImGui::GetContentRegionAvail().y-ImGui::GetFrameHeightWithSpacing()*(e->song.ins.empty()?2.0f:3.0f)+ImGui::GetStyle().ItemSpacing.y)*0.5f);
 | 
			
		||||
      CENTER_TEXT("no instrument selected");
 | 
			
		||||
      ImGui::Text("no instrument selected");
 | 
			
		||||
      if (ImGui::BeginTable("noAssetCenter",3)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -2201,6 +2248,7 @@ void FurnaceGUI::drawInsEdit() {
 | 
			
		|||
        ImGui::TableNextColumn();
 | 
			
		||||
 | 
			
		||||
        if (e->song.ins.size()>0) {
 | 
			
		||||
          ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
 | 
			
		||||
          if (ImGui::BeginCombo("##InsSelect","select one...")) {
 | 
			
		||||
            String name;
 | 
			
		||||
            for (size_t i=0; i<e->song.ins.size(); i++) {
 | 
			
		||||
| 
						 | 
				
			
			@ -2213,7 +2261,7 @@ void FurnaceGUI::drawInsEdit() {
 | 
			
		|||
            }
 | 
			
		||||
            ImGui::EndCombo();
 | 
			
		||||
          }
 | 
			
		||||
          ImGui::SameLine();
 | 
			
		||||
          ImGui::AlignTextToFramePadding();
 | 
			
		||||
          ImGui::TextUnformatted("or");
 | 
			
		||||
          ImGui::SameLine();
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -950,7 +950,7 @@ void FurnaceGUI::drawPattern() {
 | 
			
		|||
      // cursor follows wheel
 | 
			
		||||
      if (settings.cursorFollowsWheel && (!e->isPlaying() || !followPattern) && ImGui::IsWindowHovered(ImGuiHoveredFlags_ChildWindows)) {
 | 
			
		||||
        if (wheelX!=0 || wheelY!=0) {
 | 
			
		||||
          moveCursor(wheelX,wheelY,false);
 | 
			
		||||
          moveCursor(wheelX,(settings.cursorFollowsWheel==2)?wheelY:-wheelY,false);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,6 +24,7 @@
 | 
			
		|||
#include <math.h>
 | 
			
		||||
#include "../ta-log.h"
 | 
			
		||||
#include "IconsFontAwesome4.h"
 | 
			
		||||
#include "furIcons.h"
 | 
			
		||||
#include "misc/cpp/imgui_stdlib.h"
 | 
			
		||||
#include <fmt/printf.h>
 | 
			
		||||
#include "guiConst.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -784,7 +785,7 @@ void FurnaceGUI::drawSampleEdit() {
 | 
			
		|||
      sameLineMaybe();
 | 
			
		||||
      ImGui::Dummy(ImVec2(4.0*dpiScale,dpiScale));
 | 
			
		||||
      sameLineMaybe();
 | 
			
		||||
      ImGui::Button(ICON_FA_ARROWS_H "##SResize");
 | 
			
		||||
      ImGui::Button(ICON_FUR_SAMPLE_RESIZE "##SResize");
 | 
			
		||||
      if (ImGui::IsItemClicked()) {
 | 
			
		||||
        resizeSize=sample->samples;
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -819,7 +820,7 @@ void FurnaceGUI::drawSampleEdit() {
 | 
			
		|||
        resizeSize=sample->samples;
 | 
			
		||||
      }
 | 
			
		||||
      sameLineMaybe();
 | 
			
		||||
      ImGui::Button(ICON_FA_EXPAND "##SResample");
 | 
			
		||||
      ImGui::Button(ICON_FUR_SAMPLE_RESAMPLE "##SResample");
 | 
			
		||||
      if (ImGui::IsItemClicked()) {
 | 
			
		||||
        resampleTarget=targetRate;
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -940,28 +941,28 @@ void FurnaceGUI::drawSampleEdit() {
 | 
			
		|||
        ImGui::EndPopup();
 | 
			
		||||
      }
 | 
			
		||||
      sameLineMaybe();
 | 
			
		||||
      if (ImGui::Button(ICON_FA_ARROWS_V "##SNormalize")) {
 | 
			
		||||
      if (ImGui::Button(ICON_FUR_SAMPLE_NORMALIZE "##SNormalize")) {
 | 
			
		||||
        doAction(GUI_ACTION_SAMPLE_NORMALIZE);
 | 
			
		||||
      }
 | 
			
		||||
      if (ImGui::IsItemHovered()) {
 | 
			
		||||
        ImGui::SetTooltip("Normalize");
 | 
			
		||||
      }
 | 
			
		||||
      sameLineMaybe();
 | 
			
		||||
      if (ImGui::Button(ICON_FA_ARROW_UP "##SFadeIn")) {
 | 
			
		||||
      if (ImGui::Button(ICON_FUR_SAMPLE_FADEIN "##SFadeIn")) {
 | 
			
		||||
        doAction(GUI_ACTION_SAMPLE_FADE_IN);
 | 
			
		||||
      }
 | 
			
		||||
      if (ImGui::IsItemHovered()) {
 | 
			
		||||
        ImGui::SetTooltip("Fade in");
 | 
			
		||||
      }
 | 
			
		||||
      sameLineMaybe();
 | 
			
		||||
      if (ImGui::Button(ICON_FA_ARROW_DOWN "##SFadeOut")) {
 | 
			
		||||
      if (ImGui::Button(ICON_FUR_SAMPLE_FADEOUT "##SFadeOut")) {
 | 
			
		||||
        doAction(GUI_ACTION_SAMPLE_FADE_OUT);
 | 
			
		||||
      }
 | 
			
		||||
      if (ImGui::IsItemHovered()) {
 | 
			
		||||
        ImGui::SetTooltip("Fade out");
 | 
			
		||||
      }
 | 
			
		||||
      sameLineMaybe();
 | 
			
		||||
      ImGui::Button(ICON_FA_ADJUST "##SInsertSilence");
 | 
			
		||||
      ImGui::Button(ICON_FUR_SAMPLE_INSERT_SILENCE "##SInsertSilence");
 | 
			
		||||
      if (ImGui::IsItemHovered()) {
 | 
			
		||||
        ImGui::SetTooltip("Insert silence");
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -992,7 +993,7 @@ void FurnaceGUI::drawSampleEdit() {
 | 
			
		|||
        ImGui::EndPopup();
 | 
			
		||||
      }
 | 
			
		||||
      sameLineMaybe();
 | 
			
		||||
      if (ImGui::Button(ICON_FA_ERASER "##SSilence")) {
 | 
			
		||||
      if (ImGui::Button(ICON_FUR_SAMPLE_APPLY_SILENCE "##SSilence")) {
 | 
			
		||||
        doAction(GUI_ACTION_SAMPLE_SILENCE);
 | 
			
		||||
      }
 | 
			
		||||
      if (ImGui::IsItemHovered()) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1015,28 +1016,28 @@ void FurnaceGUI::drawSampleEdit() {
 | 
			
		|||
      ImGui::SameLine();
 | 
			
		||||
      ImGui::Dummy(ImVec2(4.0*dpiScale,dpiScale));
 | 
			
		||||
      sameLineMaybe();
 | 
			
		||||
      if (ImGui::Button(ICON_FA_BACKWARD "##SReverse")) {
 | 
			
		||||
      if (ImGui::Button(ICON_FUR_SAMPLE_REVERSE "##SReverse")) {
 | 
			
		||||
        doAction(GUI_ACTION_SAMPLE_REVERSE);
 | 
			
		||||
      }
 | 
			
		||||
      if (ImGui::IsItemHovered()) {
 | 
			
		||||
        ImGui::SetTooltip("Reverse");
 | 
			
		||||
      }
 | 
			
		||||
      sameLineMaybe();
 | 
			
		||||
      if (ImGui::Button(ICON_FA_SORT_AMOUNT_ASC "##SInvert")) {
 | 
			
		||||
      if (ImGui::Button(ICON_FUR_SAMPLE_INVERT "##SInvert")) {
 | 
			
		||||
        doAction(GUI_ACTION_SAMPLE_INVERT);
 | 
			
		||||
      }
 | 
			
		||||
      if (ImGui::IsItemHovered()) {
 | 
			
		||||
        ImGui::SetTooltip("Invert");
 | 
			
		||||
      }
 | 
			
		||||
      sameLineMaybe();
 | 
			
		||||
      if (ImGui::Button(ICON_FA_LEVEL_DOWN "##SSign")) {
 | 
			
		||||
      if (ImGui::Button(ICON_FUR_SAMPLE_SIGN "##SSign")) {
 | 
			
		||||
        doAction(GUI_ACTION_SAMPLE_SIGN);
 | 
			
		||||
      }
 | 
			
		||||
      if (ImGui::IsItemHovered()) {
 | 
			
		||||
        ImGui::SetTooltip("Signed/unsigned exchange");
 | 
			
		||||
      }
 | 
			
		||||
      sameLineMaybe();
 | 
			
		||||
      ImGui::Button(ICON_FA_INDUSTRY "##SFilter");
 | 
			
		||||
      ImGui::Button(ICON_FUR_SAMPLE_FILTER "##SFilter");
 | 
			
		||||
      if (ImGui::IsItemHovered()) {
 | 
			
		||||
        ImGui::SetTooltip("Apply filter");
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1189,46 +1189,113 @@ void FurnaceGUI::drawSettings() {
 | 
			
		|||
      CONFIG_SECTION("Emulation") {
 | 
			
		||||
        // SUBSECTION LAYOUT
 | 
			
		||||
        CONFIG_SUBSECTION("Cores");
 | 
			
		||||
        if (ImGui::BeginTable("##Cores",3)) {
 | 
			
		||||
          ImGui::TableSetupColumn("##System",ImGuiTableColumnFlags_WidthFixed);
 | 
			
		||||
          ImGui::TableSetupColumn("##PlaybackCores",ImGuiTableColumnFlags_WidthStretch);
 | 
			
		||||
          ImGui::TableSetupColumn("##RenderCores",ImGuiTableColumnFlags_WidthStretch);
 | 
			
		||||
          ImGui::TableNextRow(ImGuiTableRowFlags_Headers);
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::Text("System");
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::Text("Playback Core(s)");
 | 
			
		||||
          if (ImGui::IsItemHovered()) {
 | 
			
		||||
            ImGui::SetTooltip("used for playback");
 | 
			
		||||
          }
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::Text("Render Core(s)");
 | 
			
		||||
          if (ImGui::IsItemHovered()) {
 | 
			
		||||
            ImGui::SetTooltip("used in audio export");
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          ImGui::TableNextRow();
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::AlignTextToFramePadding();
 | 
			
		||||
        ImGui::Text("Arcade/YM2151 core");
 | 
			
		||||
        ImGui::SameLine();
 | 
			
		||||
          ImGui::Text("Arcade/YM2151");
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
 | 
			
		||||
          ImGui::Combo("##ArcadeCore",&settings.arcadeCore,arcadeCores,2);
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
 | 
			
		||||
          ImGui::Combo("##ArcadeCoreRender",&settings.arcadeCoreRender,arcadeCores,2);
 | 
			
		||||
 | 
			
		||||
          ImGui::TableNextRow();
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::AlignTextToFramePadding();
 | 
			
		||||
        ImGui::Text("Genesis/YM2612 core");
 | 
			
		||||
        ImGui::SameLine();
 | 
			
		||||
          ImGui::Text("Genesis/YM2612");
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
 | 
			
		||||
          ImGui::Combo("##YM2612Core",&settings.ym2612Core,ym2612Cores,2);
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
 | 
			
		||||
          ImGui::Combo("##YM2612CoreRender",&settings.ym2612CoreRender,ym2612Cores,2);
 | 
			
		||||
 | 
			
		||||
          ImGui::TableNextRow();
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::AlignTextToFramePadding();
 | 
			
		||||
        ImGui::Text("SN76489 core");
 | 
			
		||||
        ImGui::SameLine();
 | 
			
		||||
          ImGui::Text("SN76489");
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
 | 
			
		||||
          ImGui::Combo("##SNCore",&settings.snCore,snCores,2);
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
 | 
			
		||||
          ImGui::Combo("##SNCoreRender",&settings.snCoreRender,snCores,2);
 | 
			
		||||
 | 
			
		||||
          ImGui::TableNextRow();
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::AlignTextToFramePadding();
 | 
			
		||||
        ImGui::Text("NES core");
 | 
			
		||||
        ImGui::SameLine();
 | 
			
		||||
          ImGui::Text("NES");
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
 | 
			
		||||
          ImGui::Combo("##NESCore",&settings.nesCore,nesCores,2);
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
 | 
			
		||||
          ImGui::Combo("##NESCoreRender",&settings.nesCoreRender,nesCores,2);
 | 
			
		||||
 | 
			
		||||
          ImGui::TableNextRow();
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::AlignTextToFramePadding();
 | 
			
		||||
        ImGui::Text("FDS core");
 | 
			
		||||
        ImGui::SameLine();
 | 
			
		||||
          ImGui::Text("FDS");
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
 | 
			
		||||
          ImGui::Combo("##FDSCore",&settings.fdsCore,nesCores,2);
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
 | 
			
		||||
          ImGui::Combo("##FDSCoreRender",&settings.fdsCoreRender,nesCores,2);
 | 
			
		||||
 | 
			
		||||
          ImGui::TableNextRow();
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::AlignTextToFramePadding();
 | 
			
		||||
        ImGui::Text("SID core");
 | 
			
		||||
        ImGui::SameLine();
 | 
			
		||||
          ImGui::Text("SID");
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
 | 
			
		||||
          ImGui::Combo("##C64Core",&settings.c64Core,c64Cores,3);
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
 | 
			
		||||
          ImGui::Combo("##C64CoreRender",&settings.c64CoreRender,c64Cores,3);
 | 
			
		||||
 | 
			
		||||
          ImGui::TableNextRow();
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::AlignTextToFramePadding();
 | 
			
		||||
        ImGui::Text("POKEY core");
 | 
			
		||||
        ImGui::SameLine();
 | 
			
		||||
          ImGui::Text("POKEY");
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
 | 
			
		||||
          ImGui::Combo("##POKEYCore",&settings.pokeyCore,pokeyCores,2);
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
 | 
			
		||||
          ImGui::Combo("##POKEYCoreRender",&settings.pokeyCoreRender,pokeyCores,2);
 | 
			
		||||
 | 
			
		||||
          ImGui::TableNextRow();
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::AlignTextToFramePadding();
 | 
			
		||||
        ImGui::Text("OPN/OPNA/OPNB cores");
 | 
			
		||||
        ImGui::SameLine();
 | 
			
		||||
          ImGui::Text("OPN/OPNA/OPNB");
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
 | 
			
		||||
          ImGui::Combo("##OPNCore",&settings.opnCore,opnCores,2);
 | 
			
		||||
 | 
			
		||||
          ImGui::TableNextColumn();
 | 
			
		||||
          ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
 | 
			
		||||
          ImGui::Combo("##OPNCoreRender",&settings.opnCoreRender,opnCores,2);
 | 
			
		||||
          ImGui::EndTable();
 | 
			
		||||
        }
 | 
			
		||||
        ImGui::Separator();
 | 
			
		||||
 | 
			
		||||
        ImGui::AlignTextToFramePadding();
 | 
			
		||||
| 
						 | 
				
			
			@ -1910,10 +1977,18 @@ void FurnaceGUI::drawSettings() {
 | 
			
		|||
          settings.cursorMoveNoScroll=cursorMoveNoScrollB;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        bool cursorFollowsWheelB=settings.cursorFollowsWheel;
 | 
			
		||||
        if (ImGui::Checkbox("Move cursor with scroll wheel",&cursorFollowsWheelB)) {
 | 
			
		||||
          settings.cursorFollowsWheel=cursorFollowsWheelB;
 | 
			
		||||
        ImGui::Text("Move cursor with scroll wheel:");
 | 
			
		||||
        ImGui::Indent();
 | 
			
		||||
        if (ImGui::RadioButton("No##csw0",settings.cursorFollowsWheel==0)) {
 | 
			
		||||
          settings.cursorFollowsWheel=0;
 | 
			
		||||
        }
 | 
			
		||||
        if (ImGui::RadioButton("Yes##csw1",settings.cursorFollowsWheel==1)) {
 | 
			
		||||
          settings.cursorFollowsWheel=1;
 | 
			
		||||
        }
 | 
			
		||||
        if (ImGui::RadioButton("Inverted##csw2",settings.cursorFollowsWheel==2)) {
 | 
			
		||||
          settings.cursorFollowsWheel=2;
 | 
			
		||||
        }
 | 
			
		||||
        ImGui::Unindent();
 | 
			
		||||
 | 
			
		||||
        END_SECTION;
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -2348,18 +2423,22 @@ void FurnaceGUI::drawSettings() {
 | 
			
		|||
        if (ImGui::RadioButton("Unified##mel0",settings.macroLayout==0)) {
 | 
			
		||||
          settings.macroLayout=0;
 | 
			
		||||
        }
 | 
			
		||||
        if (ImGui::RadioButton("Mobile##mel1",settings.macroLayout==1)) {
 | 
			
		||||
        /*
 | 
			
		||||
        if (ImGui::RadioButton("Tabs##mel1",settings.macroLayout==1)) {
 | 
			
		||||
          settings.macroLayout=1;
 | 
			
		||||
        }
 | 
			
		||||
        */
 | 
			
		||||
        if (ImGui::RadioButton("Grid##mel2",settings.macroLayout==2)) {
 | 
			
		||||
          settings.macroLayout=2;
 | 
			
		||||
        }
 | 
			
		||||
        if (ImGui::RadioButton("Single (with list)##mel3",settings.macroLayout==3)) {
 | 
			
		||||
          settings.macroLayout=3;
 | 
			
		||||
        }
 | 
			
		||||
        /*
 | 
			
		||||
        if (ImGui::RadioButton("Single (combo box)##mel4",settings.macroLayout==4)) {
 | 
			
		||||
          settings.macroLayout=4;
 | 
			
		||||
        }
 | 
			
		||||
        */
 | 
			
		||||
        ImGui::Unindent();
 | 
			
		||||
 | 
			
		||||
        bool oldMacroVSliderB=settings.oldMacroVSlider;
 | 
			
		||||
| 
						 | 
				
			
			@ -2939,6 +3018,14 @@ void FurnaceGUI::syncSettings() {
 | 
			
		|||
  settings.c64Core=e->getConfInt("c64Core",0);
 | 
			
		||||
  settings.pokeyCore=e->getConfInt("pokeyCore",1);
 | 
			
		||||
  settings.opnCore=e->getConfInt("opnCore",1);
 | 
			
		||||
  settings.arcadeCoreRender=e->getConfInt("arcadeCoreRender",1);
 | 
			
		||||
  settings.ym2612CoreRender=e->getConfInt("ym2612CoreRender",0);
 | 
			
		||||
  settings.snCoreRender=e->getConfInt("snCoreRender",0);
 | 
			
		||||
  settings.nesCoreRender=e->getConfInt("nesCoreRender",0);
 | 
			
		||||
  settings.fdsCoreRender=e->getConfInt("fdsCoreRender",1);
 | 
			
		||||
  settings.c64CoreRender=e->getConfInt("c64CoreRender",1);
 | 
			
		||||
  settings.pokeyCoreRender=e->getConfInt("pokeyCoreRender",1);
 | 
			
		||||
  settings.opnCoreRender=e->getConfInt("opnCoreRender",1);
 | 
			
		||||
  settings.pcSpeakerOutMethod=e->getConfInt("pcSpeakerOutMethod",0);
 | 
			
		||||
  settings.yrw801Path=e->getConfString("yrw801Path","");
 | 
			
		||||
  settings.tg100Path=e->getConfString("tg100Path","");
 | 
			
		||||
| 
						 | 
				
			
			@ -3099,6 +3186,14 @@ void FurnaceGUI::syncSettings() {
 | 
			
		|||
  clampSetting(settings.c64Core,0,2);
 | 
			
		||||
  clampSetting(settings.pokeyCore,0,1);
 | 
			
		||||
  clampSetting(settings.opnCore,0,1);
 | 
			
		||||
  clampSetting(settings.arcadeCoreRender,0,1);
 | 
			
		||||
  clampSetting(settings.ym2612CoreRender,0,1);
 | 
			
		||||
  clampSetting(settings.snCoreRender,0,1);
 | 
			
		||||
  clampSetting(settings.nesCoreRender,0,1);
 | 
			
		||||
  clampSetting(settings.fdsCoreRender,0,1);
 | 
			
		||||
  clampSetting(settings.c64CoreRender,0,2);
 | 
			
		||||
  clampSetting(settings.pokeyCoreRender,0,1);
 | 
			
		||||
  clampSetting(settings.opnCoreRender,0,1);
 | 
			
		||||
  clampSetting(settings.pcSpeakerOutMethod,0,4);
 | 
			
		||||
  clampSetting(settings.mainFont,0,6);
 | 
			
		||||
  clampSetting(settings.patFont,0,6);
 | 
			
		||||
| 
						 | 
				
			
			@ -3210,7 +3305,7 @@ void FurnaceGUI::syncSettings() {
 | 
			
		|||
  clampSetting(settings.pullDeleteRow,0,1);
 | 
			
		||||
  clampSetting(settings.newSongBehavior,0,1);
 | 
			
		||||
  clampSetting(settings.memUsageUnit,0,1);
 | 
			
		||||
  clampSetting(settings.cursorFollowsWheel,0,1);
 | 
			
		||||
  clampSetting(settings.cursorFollowsWheel,0,2);
 | 
			
		||||
  clampSetting(settings.noDMFCompat,0,1);
 | 
			
		||||
  clampSetting(settings.removeInsOff,0,1);
 | 
			
		||||
  clampSetting(settings.removeVolOff,0,1);
 | 
			
		||||
| 
						 | 
				
			
			@ -3288,7 +3383,15 @@ void FurnaceGUI::commitSettings() {
 | 
			
		|||
    settings.fdsCore!=e->getConfInt("fdsCore",0) ||
 | 
			
		||||
    settings.c64Core!=e->getConfInt("c64Core",0) ||
 | 
			
		||||
    settings.pokeyCore!=e->getConfInt("pokeyCore",1) ||
 | 
			
		||||
    settings.opnCore!=e->getConfInt("opnCore",1)
 | 
			
		||||
    settings.opnCore!=e->getConfInt("opnCore",1) ||
 | 
			
		||||
    settings.arcadeCoreRender!=e->getConfInt("arcadeCoreRender",0) ||
 | 
			
		||||
    settings.ym2612CoreRender!=e->getConfInt("ym2612CoreRender",0) ||
 | 
			
		||||
    settings.snCoreRender!=e->getConfInt("snCoreRender",0) ||
 | 
			
		||||
    settings.nesCoreRender!=e->getConfInt("nesCoreRender",0) ||
 | 
			
		||||
    settings.fdsCoreRender!=e->getConfInt("fdsCoreRender",0) ||
 | 
			
		||||
    settings.c64CoreRender!=e->getConfInt("c64CoreRender",0) ||
 | 
			
		||||
    settings.pokeyCoreRender!=e->getConfInt("pokeyCoreRender",1) ||
 | 
			
		||||
    settings.opnCoreRender!=e->getConfInt("opnCoreRender",1)
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  e->setConf("mainFontSize",settings.mainFontSize);
 | 
			
		||||
| 
						 | 
				
			
			@ -3313,6 +3416,14 @@ void FurnaceGUI::commitSettings() {
 | 
			
		|||
  e->setConf("c64Core",settings.c64Core);
 | 
			
		||||
  e->setConf("pokeyCore",settings.pokeyCore);
 | 
			
		||||
  e->setConf("opnCore",settings.opnCore);
 | 
			
		||||
  e->setConf("arcadeCoreRender",settings.arcadeCoreRender);
 | 
			
		||||
  e->setConf("ym2612CoreRender",settings.ym2612CoreRender);
 | 
			
		||||
  e->setConf("snCoreRender",settings.snCoreRender);
 | 
			
		||||
  e->setConf("nesCoreRender",settings.nesCoreRender);
 | 
			
		||||
  e->setConf("fdsCoreRender",settings.fdsCoreRender);
 | 
			
		||||
  e->setConf("c64CoreRender",settings.c64CoreRender);
 | 
			
		||||
  e->setConf("pokeyCoreRender",settings.pokeyCoreRender);
 | 
			
		||||
  e->setConf("opnCoreRender",settings.opnCoreRender);
 | 
			
		||||
  e->setConf("pcSpeakerOutMethod",settings.pcSpeakerOutMethod);
 | 
			
		||||
  e->setConf("yrw801Path",settings.yrw801Path);
 | 
			
		||||
  e->setConf("tg100Path",settings.tg100Path);
 | 
			
		||||
| 
						 | 
				
			
			@ -4135,6 +4246,17 @@ void FurnaceGUI::applyUISettings(bool updateFonts) {
 | 
			
		|||
    ImFontGlyphRangesBuilder range;
 | 
			
		||||
    ImVector<ImWchar> outRange;
 | 
			
		||||
 | 
			
		||||
    ImFontConfig fontConf;
 | 
			
		||||
    ImFontConfig fontConfP;
 | 
			
		||||
 | 
			
		||||
    fontConf.OversampleV=1;
 | 
			
		||||
    fontConf.OversampleH=2;
 | 
			
		||||
    fontConfP.OversampleV=1;
 | 
			
		||||
    fontConfP.OversampleH=2;
 | 
			
		||||
 | 
			
		||||
    //fontConf.RasterizerMultiply=1.5;
 | 
			
		||||
    //fontConfP.RasterizerMultiply=1.5;
 | 
			
		||||
 | 
			
		||||
    range.AddRanges(upTo800);
 | 
			
		||||
    if (settings.loadJapanese) {
 | 
			
		||||
      range.AddRanges(ImGui::GetIO().Fonts->GetGlyphRangesJapanese());
 | 
			
		||||
| 
						 | 
				
			
			@ -4180,21 +4302,21 @@ void FurnaceGUI::applyUISettings(bool updateFonts) {
 | 
			
		|||
    fc1.MergeMode=true;
 | 
			
		||||
 | 
			
		||||
    if (settings.mainFont==6) { // custom font
 | 
			
		||||
      if ((mainFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(settings.mainFontPath.c_str(),MAX(1,e->getConfInt("mainFontSize",18)*dpiScale),NULL,fontRange))==NULL) {
 | 
			
		||||
      if ((mainFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(settings.mainFontPath.c_str(),MAX(1,e->getConfInt("mainFontSize",18)*dpiScale),&fontConf,fontRange))==NULL) {
 | 
			
		||||
        logW("could not load UI font! reverting to default font");
 | 
			
		||||
        settings.mainFont=0;
 | 
			
		||||
        if ((mainFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFont[settings.mainFont],builtinFontLen[settings.mainFont],MAX(1,e->getConfInt("mainFontSize",18)*dpiScale),NULL,fontRange))==NULL) {
 | 
			
		||||
        if ((mainFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFont[settings.mainFont],builtinFontLen[settings.mainFont],MAX(1,e->getConfInt("mainFontSize",18)*dpiScale),&fontConf,fontRange))==NULL) {
 | 
			
		||||
          logE("could not load UI font! falling back to Proggy Clean.");
 | 
			
		||||
          mainFont=ImGui::GetIO().Fonts->AddFontDefault();
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    } else if (settings.mainFont==5) { // system font
 | 
			
		||||
      if ((mainFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_FONT_PATH_1,MAX(1,e->getConfInt("mainFontSize",18)*dpiScale),NULL,fontRange))==NULL) {
 | 
			
		||||
        if ((mainFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_FONT_PATH_2,MAX(1,e->getConfInt("mainFontSize",18)*dpiScale),NULL,fontRange))==NULL) {
 | 
			
		||||
          if ((mainFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_FONT_PATH_3,MAX(1,e->getConfInt("mainFontSize",18)*dpiScale),NULL,fontRange))==NULL) {
 | 
			
		||||
      if ((mainFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_FONT_PATH_1,MAX(1,e->getConfInt("mainFontSize",18)*dpiScale),&fontConf,fontRange))==NULL) {
 | 
			
		||||
        if ((mainFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_FONT_PATH_2,MAX(1,e->getConfInt("mainFontSize",18)*dpiScale),&fontConf,fontRange))==NULL) {
 | 
			
		||||
          if ((mainFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_FONT_PATH_3,MAX(1,e->getConfInt("mainFontSize",18)*dpiScale),&fontConf,fontRange))==NULL) {
 | 
			
		||||
            logW("could not load UI font! reverting to default font");
 | 
			
		||||
            settings.mainFont=0;
 | 
			
		||||
            if ((mainFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFont[settings.mainFont],builtinFontLen[settings.mainFont],MAX(1,e->getConfInt("mainFontSize",18)*dpiScale),NULL,fontRange))==NULL) {
 | 
			
		||||
            if ((mainFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFont[settings.mainFont],builtinFontLen[settings.mainFont],MAX(1,e->getConfInt("mainFontSize",18)*dpiScale),&fontConf,fontRange))==NULL) {
 | 
			
		||||
              logE("could not load UI font! falling back to Proggy Clean.");
 | 
			
		||||
              mainFont=ImGui::GetIO().Fonts->AddFontDefault();
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -4202,7 +4324,7 @@ void FurnaceGUI::applyUISettings(bool updateFonts) {
 | 
			
		|||
        }
 | 
			
		||||
      }
 | 
			
		||||
    } else {
 | 
			
		||||
      if ((mainFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFont[settings.mainFont],builtinFontLen[settings.mainFont],MAX(1,e->getConfInt("mainFontSize",18)*dpiScale),NULL,fontRange))==NULL) {
 | 
			
		||||
      if ((mainFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFont[settings.mainFont],builtinFontLen[settings.mainFont],MAX(1,e->getConfInt("mainFontSize",18)*dpiScale),&fontConf,fontRange))==NULL) {
 | 
			
		||||
        logE("could not load UI font! falling back to Proggy Clean.");
 | 
			
		||||
        mainFont=ImGui::GetIO().Fonts->AddFontDefault();
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -4230,21 +4352,21 @@ void FurnaceGUI::applyUISettings(bool updateFonts) {
 | 
			
		|||
      patFont=mainFont;
 | 
			
		||||
    } else {
 | 
			
		||||
      if (settings.patFont==6) { // custom font
 | 
			
		||||
        if ((patFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(settings.patFontPath.c_str(),MAX(1,e->getConfInt("patFontSize",18)*dpiScale),NULL,upTo800))==NULL) {
 | 
			
		||||
        if ((patFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(settings.patFontPath.c_str(),MAX(1,e->getConfInt("patFontSize",18)*dpiScale),&fontConfP,upTo800))==NULL) {
 | 
			
		||||
          logW("could not load pattern font! reverting to default font");
 | 
			
		||||
          settings.patFont=0;
 | 
			
		||||
          if ((patFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFontM[settings.patFont],builtinFontMLen[settings.patFont],MAX(1,e->getConfInt("patFontSize",18)*dpiScale),NULL,upTo800))==NULL) {
 | 
			
		||||
          if ((patFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFontM[settings.patFont],builtinFontMLen[settings.patFont],MAX(1,e->getConfInt("patFontSize",18)*dpiScale),&fontConfP,upTo800))==NULL) {
 | 
			
		||||
            logE("could not load pattern font! falling back to Proggy Clean.");
 | 
			
		||||
            patFont=ImGui::GetIO().Fonts->AddFontDefault();
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      } else if (settings.patFont==5) { // system font
 | 
			
		||||
        if ((patFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_PAT_FONT_PATH_1,MAX(1,e->getConfInt("patFontSize",18)*dpiScale),NULL,upTo800))==NULL) {
 | 
			
		||||
          if ((patFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_PAT_FONT_PATH_2,MAX(1,e->getConfInt("patFontSize",18)*dpiScale),NULL,upTo800))==NULL) {
 | 
			
		||||
            if ((patFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_PAT_FONT_PATH_3,MAX(1,e->getConfInt("patFontSize",18)*dpiScale),NULL,upTo800))==NULL) {
 | 
			
		||||
        if ((patFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_PAT_FONT_PATH_1,MAX(1,e->getConfInt("patFontSize",18)*dpiScale),&fontConfP,upTo800))==NULL) {
 | 
			
		||||
          if ((patFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_PAT_FONT_PATH_2,MAX(1,e->getConfInt("patFontSize",18)*dpiScale),&fontConfP,upTo800))==NULL) {
 | 
			
		||||
            if ((patFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_PAT_FONT_PATH_3,MAX(1,e->getConfInt("patFontSize",18)*dpiScale),&fontConfP,upTo800))==NULL) {
 | 
			
		||||
              logW("could not load pattern font! reverting to default font");
 | 
			
		||||
              settings.patFont=0;
 | 
			
		||||
              if ((patFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFontM[settings.patFont],builtinFontMLen[settings.patFont],MAX(1,e->getConfInt("patFontSize",18)*dpiScale),NULL,upTo800))==NULL) {
 | 
			
		||||
              if ((patFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFontM[settings.patFont],builtinFontMLen[settings.patFont],MAX(1,e->getConfInt("patFontSize",18)*dpiScale),&fontConfP,upTo800))==NULL) {
 | 
			
		||||
                logE("could not load pattern font! falling back to Proggy Clean.");
 | 
			
		||||
                patFont=ImGui::GetIO().Fonts->AddFontDefault();
 | 
			
		||||
              }
 | 
			
		||||
| 
						 | 
				
			
			@ -4252,7 +4374,7 @@ void FurnaceGUI::applyUISettings(bool updateFonts) {
 | 
			
		|||
          }
 | 
			
		||||
        }
 | 
			
		||||
      } else {
 | 
			
		||||
        if ((patFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFontM[settings.patFont],builtinFontMLen[settings.patFont],MAX(1,e->getConfInt("patFontSize",18)*dpiScale),NULL,upTo800))==NULL) {
 | 
			
		||||
        if ((patFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFontM[settings.patFont],builtinFontMLen[settings.patFont],MAX(1,e->getConfInt("patFontSize",18)*dpiScale),&fontConfP,upTo800))==NULL) {
 | 
			
		||||
          logE("could not load pattern font!");
 | 
			
		||||
          patFont=ImGui::GetIO().Fonts->AddFontDefault();
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -97,7 +97,11 @@ int writeLog(int level, const char* msg, fmt::printf_args args) {
 | 
			
		|||
  time_t thisMakesNoSense=time(NULL);
 | 
			
		||||
  int pos=(logPosition.fetch_add(1))&TA_LOG_MASK;
 | 
			
		||||
 | 
			
		||||
#if FMT_VERSION >= 100100
 | 
			
		||||
  logEntries[pos].text.assign(fmt::vsprintf(fmt::basic_string_view<char>(msg),args));
 | 
			
		||||
#else
 | 
			
		||||
  logEntries[pos].text.assign(fmt::vsprintf(msg,args));
 | 
			
		||||
#endif
 | 
			
		||||
  // why do I have to pass a pointer
 | 
			
		||||
  // can't I just pass the time_t directly?!
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -88,7 +88,14 @@ WString utf8To16(const char* s) {
 | 
			
		|||
  p=0;
 | 
			
		||||
  while (s[p]!=0) {
 | 
			
		||||
    ch=decodeUTF8((const unsigned char*)&s[p],chs);
 | 
			
		||||
    // surrogates
 | 
			
		||||
    if (ch>=0x10000) {
 | 
			
		||||
      ch-=0x10000;
 | 
			
		||||
      ret+=(unsigned short)(0xd800|((ch>>10)&0x3ff));
 | 
			
		||||
      ret+=(unsigned short)(0xdc00|(ch&0x3ff));
 | 
			
		||||
    } else if (ch<0xd800 || ch>0xdfff) {
 | 
			
		||||
      ret+=(unsigned short)ch;
 | 
			
		||||
    }
 | 
			
		||||
    p+=chs;
 | 
			
		||||
  }
 | 
			
		||||
  return ret;
 | 
			
		||||
| 
						 | 
				
			
			@ -96,16 +103,30 @@ WString utf8To16(const char* s) {
 | 
			
		|||
 | 
			
		||||
String utf16To8(const wchar_t* s) {
 | 
			
		||||
  String ret;
 | 
			
		||||
  unsigned int next=0;
 | 
			
		||||
  for (size_t i=0; i<wcslen(s); i++) {
 | 
			
		||||
    if (s[i]<0x80) {
 | 
			
		||||
      ret+=s[i];
 | 
			
		||||
    } else if (s[i]<0x800) {
 | 
			
		||||
      ret+=(0xc0+((s[i]>>6)&31));
 | 
			
		||||
      ret+=(0x80+((s[i])&63));
 | 
			
		||||
    if (s[i]>=0xd800 && s[i]<0xdc00) {
 | 
			
		||||
      next=0x10000+((s[i]&0x3ff)<<10);
 | 
			
		||||
      continue;
 | 
			
		||||
    } else if (s[i]>=0xdc00 && s[i]<0xe000) {
 | 
			
		||||
      next|=s[i]&0x3ff;
 | 
			
		||||
    } else {
 | 
			
		||||
      ret+=(0xe0+((s[i]>>12)&15));
 | 
			
		||||
      ret+=(0x80+((s[i]>>6)&63));
 | 
			
		||||
      ret+=(0x80+((s[i])&63));
 | 
			
		||||
      next=s[i];
 | 
			
		||||
    }
 | 
			
		||||
    if (next<0x80) {
 | 
			
		||||
      ret+=next;
 | 
			
		||||
    } else if (next<0x800) {
 | 
			
		||||
      ret+=(0xc0+((next>>6)&31));
 | 
			
		||||
      ret+=(0x80+((next)&63));
 | 
			
		||||
    } else if (next<0x10000) {
 | 
			
		||||
      ret+=(0xe0+((next>>12)&15));
 | 
			
		||||
      ret+=(0x80+((next>>6)&63));
 | 
			
		||||
      ret+=(0x80+((next)&63));
 | 
			
		||||
    } else {
 | 
			
		||||
      ret+=(0xf0+((next>>18)&7));
 | 
			
		||||
      ret+=(0x80+((next>>12)&63));
 | 
			
		||||
      ret+=(0x80+((next>>6)&63));
 | 
			
		||||
      ret+=(0x80+((next)&63));
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return ret;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||